@excalidraw/element 0.18.0-4e0441e → 0.18.0-4e758db

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 (344) hide show
  1. package/dist/dev/index.js +15241 -9473
  2. package/dist/dev/index.js.map +4 -4
  3. package/dist/prod/index.js +20 -19
  4. package/dist/types/common/debug.d.ts +21 -0
  5. package/dist/types/common/src/appEventBus.d.ts +27 -0
  6. package/dist/types/common/src/bounds.d.ts +10 -0
  7. package/dist/types/common/src/colors.d.ts +81 -39
  8. package/dist/types/common/src/constants.d.ts +75 -34
  9. package/dist/types/common/src/editorInterface.d.ts +34 -0
  10. package/dist/types/common/src/font-metadata.d.ts +1 -3
  11. package/dist/types/common/src/index.d.ts +5 -0
  12. package/dist/types/common/src/keys.d.ts +5 -1
  13. package/dist/types/common/src/points.d.ts +1 -1
  14. package/dist/types/common/src/random.d.ts +7 -0
  15. package/dist/types/common/src/utility-types.d.ts +0 -1
  16. package/dist/types/common/src/utils.d.ts +45 -77
  17. package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
  18. package/dist/types/element/src/Scene.d.ts +12 -8
  19. package/dist/types/element/src/align.d.ts +2 -2
  20. package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
  21. package/dist/types/element/src/arrowheads.d.ts +3 -0
  22. package/dist/types/element/src/arrows/focus.d.ts +30 -0
  23. package/dist/types/element/src/arrows/helpers.d.ts +5 -0
  24. package/dist/types/element/src/binding.d.ts +79 -51
  25. package/dist/types/element/src/bounds.d.ts +25 -18
  26. package/dist/types/element/src/bucketFill.d.ts +110 -0
  27. package/dist/types/element/src/collision.d.ts +7 -2
  28. package/dist/types/element/src/comparisons.d.ts +10 -7
  29. package/dist/types/element/src/convertToShape.d.ts +23 -0
  30. package/dist/types/element/src/delta.d.ts +23 -1
  31. package/dist/types/element/src/distribute.d.ts +3 -2
  32. package/dist/types/element/src/dragElements.d.ts +30 -3
  33. package/dist/types/element/src/duplicate.d.ts +7 -6
  34. package/dist/types/element/src/elbowArrow.d.ts +2 -0
  35. package/dist/types/element/src/embeddable.d.ts +2 -2
  36. package/dist/types/element/src/flowchart.d.ts +11 -7
  37. package/dist/types/element/src/fractionalIndex.d.ts +4 -4
  38. package/dist/types/element/src/frame.d.ts +16 -11
  39. package/dist/types/element/src/groups.d.ts +9 -9
  40. package/dist/types/element/src/heading.d.ts +2 -1
  41. package/dist/types/element/src/image.d.ts +1 -11
  42. package/dist/types/element/src/index.d.ts +9 -4
  43. package/dist/types/element/src/linearElementEditor.d.ts +48 -30
  44. package/dist/types/element/src/mutateElement.d.ts +6 -2
  45. package/dist/types/element/src/newElement.d.ts +44 -8
  46. package/dist/types/element/src/renderElement.d.ts +1 -10
  47. package/dist/types/element/src/resizeElements.d.ts +12 -12
  48. package/dist/types/element/src/resizeTest.d.ts +6 -5
  49. package/dist/types/element/src/selection.d.ts +14 -14
  50. package/dist/types/element/src/shape.d.ts +21 -8
  51. package/dist/types/element/src/sizeHelpers.d.ts +6 -0
  52. package/dist/types/element/src/sortElements.d.ts +10 -0
  53. package/dist/types/element/src/stickyNote.d.ts +183 -0
  54. package/dist/types/element/src/textElement.d.ts +14 -10
  55. package/dist/types/element/src/textMeasurements.d.ts +1 -3
  56. package/dist/types/element/src/textWrapping.d.ts +26 -0
  57. package/dist/types/{excalidraw/data → element/src}/transform.d.ts +27 -8
  58. package/dist/types/element/src/transformHandles.d.ts +8 -27
  59. package/dist/types/element/src/typeChecks.d.ts +30 -31
  60. package/dist/types/element/src/types.d.ts +55 -20
  61. package/dist/types/element/src/utils.d.ts +15 -6
  62. package/dist/types/element/src/visualdebug.d.ts +58 -0
  63. package/dist/types/element/src/zindex.d.ts +7 -1
  64. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +173 -186
  65. package/dist/types/excalidraw/actions/actionAlign.d.ts +12 -13
  66. package/dist/types/excalidraw/actions/actionBoundText.d.ts +122 -131
  67. package/dist/types/excalidraw/actions/actionCanvas.d.ts +446 -1594
  68. package/dist/types/excalidraw/actions/actionClipboard.d.ts +140 -910
  69. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +59 -64
  70. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +195 -211
  71. package/dist/types/excalidraw/actions/actionDeselect.d.ts +170 -0
  72. package/dist/types/excalidraw/actions/actionDistribute.d.ts +4 -6
  73. package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +2 -3
  74. package/dist/types/excalidraw/actions/actionElementLink.d.ts +51 -62
  75. package/dist/types/excalidraw/actions/actionElementLock.d.ts +121 -130
  76. package/dist/types/excalidraw/actions/actionExport.d.ts +200 -1449
  77. package/dist/types/excalidraw/actions/actionFinalize.d.ts +11 -404
  78. package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -3
  79. package/dist/types/excalidraw/actions/actionFrame.d.ts +332 -523
  80. package/dist/types/excalidraw/actions/actionGroup.d.ts +132 -149
  81. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +222 -213
  82. package/dist/types/excalidraw/actions/actionLink.d.ts +59 -64
  83. package/dist/types/excalidraw/actions/actionMenu.d.ts +49 -60
  84. package/dist/types/excalidraw/actions/actionNavigate.d.ts +18 -369
  85. package/dist/types/excalidraw/actions/actionProperties.d.ts +213 -2610
  86. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +66 -75
  87. package/dist/types/excalidraw/actions/actionStyles.d.ts +60 -64
  88. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +3 -3
  89. package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionToggleArrowBinding.d.ts} +74 -78
  90. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +63 -69
  91. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +186 -0
  92. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +60 -65
  93. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +51 -63
  94. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +2 -2
  95. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +60 -65
  96. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +61 -66
  97. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +61 -66
  98. package/dist/types/excalidraw/actions/actionZindex.d.ts +2 -3
  99. package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
  100. package/dist/types/excalidraw/actions/index.d.ts +4 -2
  101. package/dist/types/excalidraw/actions/manager.d.ts +1 -0
  102. package/dist/types/excalidraw/actions/register.d.ts +2 -2
  103. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  104. package/dist/types/excalidraw/actions/types.d.ts +11 -7
  105. package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
  106. package/dist/types/excalidraw/appState.d.ts +43 -18
  107. package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -0
  108. package/dist/types/excalidraw/charts/charts.constants.d.ts +48 -0
  109. package/dist/types/excalidraw/charts/charts.helpers.d.ts +32 -0
  110. package/dist/types/excalidraw/charts/charts.line.d.ts +2 -0
  111. package/dist/types/excalidraw/charts/charts.parse.d.ts +10 -0
  112. package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -0
  113. package/dist/types/excalidraw/charts/charts.types.d.ts +18 -0
  114. package/dist/types/excalidraw/charts/index.d.ts +7 -0
  115. package/dist/types/excalidraw/clipboard.d.ts +13 -38
  116. package/dist/types/excalidraw/components/Actions.d.ts +22 -14
  117. package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
  118. package/dist/types/excalidraw/components/App.arrowText.d.ts +104 -0
  119. package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
  120. package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
  121. package/dist/types/excalidraw/components/App.d.ts +552 -125
  122. package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
  123. package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
  124. package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
  125. package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
  126. package/dist/types/excalidraw/components/App.wheel.d.ts +33 -0
  127. package/dist/types/excalidraw/components/AppStateObserver.d.ts +37 -0
  128. package/dist/types/excalidraw/components/Card.d.ts +1 -3
  129. package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +2 -4
  130. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -5
  131. package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
  132. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +3 -1
  133. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +9 -2
  134. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
  135. package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
  136. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -2
  137. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
  138. package/dist/types/excalidraw/components/ColorPicker/topPicksDnD.d.ts +31 -0
  139. package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
  140. package/dist/types/excalidraw/components/CommandPalette/types.d.ts +2 -4
  141. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +4 -4
  142. package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
  143. package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
  144. package/dist/types/excalidraw/components/DefaultSidebar.d.ts +9 -13
  145. package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +1 -1
  146. package/dist/types/excalidraw/components/Ellipsify.d.ts +1 -2
  147. package/dist/types/excalidraw/components/ErrorDialog.d.ts +1 -1
  148. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -2
  149. package/dist/types/excalidraw/components/FilledButton.d.ts +2 -1
  150. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +0 -1
  151. package/dist/types/excalidraw/components/HelpDialog.d.ts +1 -1
  152. package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
  153. package/dist/types/excalidraw/components/IconButton.d.ts +48 -0
  154. package/dist/types/excalidraw/components/IconPicker.d.ts +14 -9
  155. package/dist/types/excalidraw/components/InlineIcon.d.ts +2 -2
  156. package/dist/types/excalidraw/components/Island.d.ts +7 -0
  157. package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
  158. package/dist/types/excalidraw/components/LayerUI.d.ts +5 -2
  159. package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
  160. package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
  161. package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -2
  162. package/dist/types/excalidraw/components/LibraryUnit.d.ts +2 -3
  163. package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
  164. package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
  165. package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
  166. package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
  167. package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
  168. package/dist/types/excalidraw/components/Modal.d.ts +0 -1
  169. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +1 -1
  170. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  171. package/dist/types/excalidraw/components/PasteChartDialog.d.ts +4 -5
  172. package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
  173. package/dist/types/excalidraw/components/Popover.d.ts +1 -3
  174. package/dist/types/excalidraw/components/PropertiesPopover.d.ts +1 -1
  175. package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
  176. package/dist/types/excalidraw/components/RadioGroup.d.ts +0 -1
  177. package/dist/types/excalidraw/components/RadioSelection.d.ts +4 -4
  178. package/dist/types/excalidraw/components/Range.d.ts +10 -4
  179. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  180. package/dist/types/excalidraw/components/ScrollableList.d.ts +0 -1
  181. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  182. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +16 -22
  183. package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +1 -1
  184. package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -2
  185. package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -2
  186. package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +1 -2
  187. package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +1 -2
  188. package/dist/types/excalidraw/components/Spinner.d.ts +4 -4
  189. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  190. package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +0 -1
  191. package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
  192. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  193. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -3
  194. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  195. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
  196. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  197. package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
  198. package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
  199. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  200. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatHistoryMenu.d.ts +15 -0
  201. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatInterface.d.ts +23 -0
  202. package/dist/types/excalidraw/components/TTDDialog/Chat/ChatMessage.d.ts +14 -0
  203. package/dist/types/excalidraw/components/TTDDialog/Chat/TTDChatPanel.d.ts +27 -0
  204. package/dist/types/excalidraw/components/TTDDialog/Chat/index.d.ts +3 -0
  205. package/dist/types/excalidraw/components/TTDDialog/Chat/useChatAgent.d.ts +8 -0
  206. package/dist/types/excalidraw/components/TTDDialog/CodeMirrorEditor.d.ts +11 -0
  207. package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +3 -2
  208. package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +13 -0
  209. package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +12 -29
  210. package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +3 -3
  211. package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
  212. package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +13 -9
  213. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +1 -2
  214. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +1 -2
  215. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +1 -2
  216. package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +9 -0
  217. package/dist/types/excalidraw/components/TTDDialog/TTDWelcomeMessage.d.ts +1 -0
  218. package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +9 -0
  219. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +16 -16
  220. package/dist/types/excalidraw/components/TTDDialog/hooks/useChatManagement.d.ts +13 -0
  221. package/dist/types/excalidraw/components/TTDDialog/hooks/useMermaidRenderer.d.ts +14 -0
  222. package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +7 -0
  223. package/dist/types/excalidraw/components/TTDDialog/mermaid-lang-lite.d.ts +2 -0
  224. package/dist/types/excalidraw/components/TTDDialog/types.d.ts +95 -0
  225. package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +22 -0
  226. package/dist/types/excalidraw/components/TTDDialog/utils/chat.d.ts +10 -0
  227. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidAutoFix.d.ts +1 -0
  228. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +10 -0
  229. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidValidation.d.ts +1 -0
  230. package/dist/types/excalidraw/components/Toast.d.ts +11 -7
  231. package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
  232. package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
  233. package/dist/types/excalidraw/components/Tools.d.ts +151 -0
  234. package/dist/types/excalidraw/components/Trans.d.ts +2 -2
  235. package/dist/types/excalidraw/components/UserList.d.ts +3 -2
  236. package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
  237. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +10 -4
  238. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +3 -0
  239. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  240. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +48 -38
  241. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +7 -6
  242. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +3 -3
  243. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +13 -22
  244. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCheckbox.d.ts +5 -0
  245. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +5 -4
  246. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -2
  247. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -2
  248. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +6 -6
  249. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSub.d.ts +23 -0
  250. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubContent.d.ts +8 -0
  251. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubTrigger.d.ts +12 -0
  252. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -4
  253. package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +2 -2
  254. package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +2 -0
  255. package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
  256. package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +1 -1
  257. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +3 -3
  258. package/dist/types/excalidraw/components/icons.d.ts +51 -22
  259. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +25 -3
  260. package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +39 -35
  261. package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
  262. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
  263. package/dist/types/excalidraw/data/blob.d.ts +354 -7
  264. package/dist/types/excalidraw/data/encode.d.ts +4 -4
  265. package/dist/types/excalidraw/data/encryption.d.ts +5 -5
  266. package/dist/types/excalidraw/data/filesystem.d.ts +5 -7
  267. package/dist/types/excalidraw/data/index.d.ts +8 -9
  268. package/dist/types/excalidraw/data/json.d.ts +183 -3
  269. package/dist/types/excalidraw/data/library.d.ts +25 -10
  270. package/dist/types/excalidraw/data/resave.d.ts +7 -2
  271. package/dist/types/excalidraw/data/restore.d.ts +25 -10
  272. package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
  273. package/dist/types/excalidraw/editor-jotai.d.ts +11 -11
  274. package/dist/types/excalidraw/eraser/index.d.ts +2 -3
  275. package/dist/types/excalidraw/errors.d.ts +14 -0
  276. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
  277. package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
  278. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  279. package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +4 -3
  280. package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
  281. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
  282. package/dist/types/excalidraw/i18n.d.ts +2 -2
  283. package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
  284. package/dist/types/excalidraw/lasso/index.d.ts +2 -3
  285. package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
  286. package/dist/types/excalidraw/renderer/animation.d.ts +16 -0
  287. package/dist/types/excalidraw/renderer/helpers.d.ts +31 -8
  288. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +7 -15
  289. package/dist/types/excalidraw/scene/Renderer.d.ts +477 -18
  290. package/dist/types/excalidraw/scene/export.d.ts +4 -4
  291. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  292. package/dist/types/excalidraw/scene/types.d.ts +27 -8
  293. package/dist/types/excalidraw/snapping.d.ts +12 -12
  294. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +1 -1
  295. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +1 -1
  296. package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +1 -1
  297. package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +2 -2
  298. package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +1 -1
  299. package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
  300. package/dist/types/excalidraw/types.d.ts +566 -55
  301. package/dist/types/excalidraw/viewport.d.ts +280 -0
  302. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +8 -5
  303. package/dist/types/fractional-indexing/src/index.d.ts +29 -0
  304. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  305. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  306. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  307. package/dist/types/laser-pointer/src/state.d.ts +36 -0
  308. package/dist/types/math/src/constants.d.ts +0 -1
  309. package/dist/types/math/src/curve.d.ts +23 -13
  310. package/dist/types/math/src/index.d.ts +1 -0
  311. package/dist/types/math/src/pca.d.ts +79 -0
  312. package/dist/types/math/src/point.d.ts +8 -2
  313. package/dist/types/math/src/polygon.d.ts +26 -2
  314. package/dist/types/math/src/range.d.ts +1 -3
  315. package/dist/types/math/src/segment.d.ts +9 -3
  316. package/dist/types/math/src/types.d.ts +25 -1
  317. package/dist/types/utils/src/export.d.ts +9 -8
  318. package/dist/types/utils/src/index.d.ts +1 -2
  319. package/dist/types/utils/src/shape.d.ts +8 -8
  320. package/package.json +10 -3
  321. package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
  322. package/dist/types/excalidraw/charts.d.ts +0 -27
  323. package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -4
  324. package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +0 -16
  325. package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
  326. package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
  327. package/dist/types/excalidraw/components/InitializeApp.d.ts +0 -10
  328. package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -11
  329. package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -8
  330. package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
  331. package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
  332. package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -10
  333. package/dist/types/excalidraw/components/shapes.d.ts +0 -190
  334. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -58
  335. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -19
  336. package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -85
  337. package/dist/types/excalidraw/cursor.d.ts +0 -5
  338. package/dist/types/excalidraw/data/reconcile.d.ts +0 -7
  339. package/dist/types/excalidraw/index.d.ts +0 -47
  340. package/dist/types/excalidraw/polyfill.d.ts +0 -2
  341. package/dist/types/excalidraw/scene/scroll.d.ts +0 -23
  342. package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
  343. package/dist/types/utils/src/bbox.d.ts +0 -9
  344. package/dist/types/utils/src/withinBounds.d.ts +0 -19
@@ -1,27 +1,28 @@
1
- var mc=Object.create;var Ss=Object.defineProperty;var fc=Object.getOwnPropertyDescriptor;var hc=Object.getOwnPropertyNames;var Ec=Object.getPrototypeOf,gc=Object.prototype.hasOwnProperty;var xc=(e,t)=>()=>(e&&(t=e(e=0)),t);var wc=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var yc=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of hc(t))!gc.call(e,i)&&i!==n&&Ss(e,i,{get:()=>t[i],enumerable:!(o=fc(t,i))||o.enumerable});return e};var bc=(e,t,n)=>(n=e!=null?mc(Ec(e)):{},yc(t||!e||!e.__esModule?Ss(n,"default",{value:e,enumerable:!0}):n,e));var A,P=xc(()=>{A={PROD:!0}});var Pd=wc((z1,bd)=>{P();var yd="Expected a function",xd=NaN,Wf="[object Symbol]",Vf=/^\s+|\s+$/g,$f=/^[-+]0x[0-9a-f]+$/i,Zf=/^0b[01]+$/i,qf=/^0o[0-7]+$/i,Kf=parseInt,Qf=typeof global=="object"&&global&&global.Object===Object&&global,Jf=typeof self=="object"&&self&&self.Object===Object&&self,eh=Qf||Jf||Function("return this")(),th=Object.prototype,nh=th.toString,oh=Math.max,ih=Math.min,is=function(){return eh.Date.now()};function rh(e,t,n){var o,i,r,s,a,l,d=0,c=!1,u=!1,p=!0;if(typeof e!="function")throw new TypeError(yd);t=wd(t)||0,Si(n)&&(c=!!n.leading,u="maxWait"in n,r=u?oh(wd(n.maxWait)||0,t):r,p="trailing"in n?!!n.trailing:p);function m(I){var M=o,D=i;return o=i=void 0,d=I,s=e.apply(D,M),s}function f(I){return d=I,a=setTimeout(g,t),c?m(I):s}function E(I){var M=I-l,D=I-d,T=t-M;return u?ih(T,r-D):T}function h(I){var M=I-l,D=I-d;return l===void 0||M>=t||M<0||u&&D>=r}function g(){var I=is();if(h(I))return x(I);a=setTimeout(g,E(I))}function x(I){return a=void 0,p&&o?m(I):(o=i=void 0,s)}function y(){a!==void 0&&clearTimeout(a),d=0,o=l=i=a=void 0}function b(){return a===void 0?s:x(is())}function w(){var I=is(),M=h(I);if(o=arguments,i=this,l=I,M){if(a===void 0)return f(l);if(u)return a=setTimeout(g,t),m(l)}return a===void 0&&(a=setTimeout(g,t)),s}return w.cancel=y,w.flush=b,w}function sh(e,t,n){var o=!0,i=!0;if(typeof e!="function")throw new TypeError(yd);return Si(n)&&(o="leading"in n?!!n.leading:o,i="trailing"in n?!!n.trailing:i),rh(e,t,{leading:o,maxWait:t,trailing:i})}function Si(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function ah(e){return!!e&&typeof e=="object"}function lh(e){return typeof e=="symbol"||ah(e)&&nh.call(e)==Wf}function wd(e){if(typeof e=="number")return e;if(lh(e))return xd;if(Si(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Si(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(Vf,"");var n=Zf.test(e);return n||qf.test(e)?Kf(e.slice(2),n?2:8):$f.test(e)?xd:+e}bd.exports=sh});P();import{toIterable as PE}from"@excalidraw/common";P();import{SHIFT_LOCKING_ANGLE as kt,viewportCoordsToSceneCoords as yi}from"@excalidraw/common";import{normalizeRadians as Jl,radiansBetweenAngles as bf,radiansDifference as Pf}from"@excalidraw/math";import{pointsEqual as If}from"@excalidraw/math";P();P();P();P();P();P();P();P();P();function Fi(e,t,n){if(e&&e.length){let[o,i]=t,r=Math.PI/180*n,s=Math.cos(r),a=Math.sin(r);for(let l of e){let[d,c]=l;l[0]=(d-o)*s-(c-i)*a+o,l[1]=(d-o)*a+(c-i)*s+i}}}function Ic(e,t,n){let o=[];e.forEach(i=>o.push(...i)),Fi(o,t,n)}function Sc(e,t){return e[0]===t[0]&&e[1]===t[1]}function Ms(e,t,n,o=1){let i=n,r=Math.max(t,.1),s=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,a=[0,0];if(i)for(let d of s)Fi(d,a,i);let l=Mc(s,r,o);if(i){for(let d of s)Fi(d,a,-i);Ic(l,a,-i)}return l}function Mc(e,t,n){let o=[];for(let d of e){let c=[...d];Sc(c[0],c[c.length-1])||c.push([c[0][0],c[0][1]]),c.length>2&&o.push(c)}let i=[];t=Math.max(t,.1);let r=[];for(let d of o)for(let c=0;c<d.length-1;c++){let u=d[c],p=d[c+1];if(u[1]!==p[1]){let m=Math.min(u[1],p[1]);r.push({ymin:m,ymax:Math.max(u[1],p[1]),x:m===u[1]?u[0]:p[0],islope:(p[0]-u[0])/(p[1]-u[1])})}}if(r.sort((d,c)=>d.ymin<c.ymin?-1:d.ymin>c.ymin?1:d.x<c.x?-1:d.x>c.x?1:d.ymax===c.ymax?0:(d.ymax-c.ymax)/Math.abs(d.ymax-c.ymax)),!r.length)return i;let s=[],a=r[0].ymin,l=0;for(;s.length||r.length;){if(r.length){let d=-1;for(let u=0;u<r.length&&!(r[u].ymin>a);u++)d=u;r.splice(0,d+1).forEach(u=>{s.push({s:a,edge:u})})}if(s=s.filter(d=>!(d.edge.ymax<=a)),s.sort((d,c)=>d.edge.x===c.edge.x?0:(d.edge.x-c.edge.x)/Math.abs(d.edge.x-c.edge.x)),(n!==1||l%t===0)&&s.length>1)for(let d=0;d<s.length;d=d+2){let c=d+1;if(c>=s.length)break;let u=s[d].edge,p=s[c].edge;i.push([[Math.round(u.x),a],[Math.round(p.x),a]])}a+=n,s.forEach(d=>{d.edge.x=d.edge.x+n*d.edge.islope}),l++}return i}function rt(e,t){var n;let o=t.hachureAngle+90,i=t.hachureGap;i<0&&(i=t.strokeWidth*4),i=Math.max(i,.1);let r=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(r=i),Ms(e,i,o,r||1)}var Ft=class{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){let o=rt(t,n);return{type:"fillSketch",ops:this.renderLines(o,n)}}renderLines(t,n){let o=[];for(let i of t)o.push(...this.helper.doubleLineOps(i[0][0],i[0][1],i[1][0],i[1][1],n));return o}};P();P();function Nt(e){let t=e[0],n=e[1];return Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2))}var Eo=class extends Ft{fillPolygons(t,n){let o=n.hachureGap;o<0&&(o=n.strokeWidth*4),o=Math.max(o,.1);let i=Object.assign({},n,{hachureGap:o}),r=rt(t,i),s=Math.PI/180*n.hachureAngle,a=[],l=o*.5*Math.cos(s),d=o*.5*Math.sin(s);for(let[u,p]of r)Nt([u,p])&&a.push([[u[0]-l,u[1]+d],[...p]],[[u[0]+l,u[1]-d],[...p]]);return{type:"fillSketch",ops:this.renderLines(a,n)}}};P();var go=class extends Ft{fillPolygons(t,n){let o=this._fillPolygons(t,n),i=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),r=this._fillPolygons(t,i);return o.ops=o.ops.concat(r.ops),o}};P();var xo=class{constructor(t){this.helper=t}fillPolygons(t,n){n=Object.assign({},n,{hachureAngle:0});let o=rt(t,n);return this.dotsOnLines(o,n)}dotsOnLines(t,n){let o=[],i=n.hachureGap;i<0&&(i=n.strokeWidth*4),i=Math.max(i,.1);let r=n.fillWeight;r<0&&(r=n.strokeWidth/2);let s=i/4;for(let a of t){let l=Nt(a),d=l/i,c=Math.ceil(d)-1,u=l-c*i,p=(a[0][0]+a[1][0])/2-i/4,m=Math.min(a[0][1],a[1][1]);for(let f=0;f<c;f++){let E=m+u+f*i,h=p-s+Math.random()*2*s,g=E-s+Math.random()*2*s,x=this.helper.ellipse(h,g,r,r,n);o.push(...x.ops)}}return{type:"fillSketch",ops:o}}};P();var wo=class{constructor(t){this.helper=t}fillPolygons(t,n){let o=rt(t,n);return{type:"fillSketch",ops:this.dashedLine(o,n)}}dashedLine(t,n){let o=n.dashOffset<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashOffset,i=n.dashGap<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashGap,r=[];return t.forEach(s=>{let a=Nt(s),l=Math.floor(a/(o+i)),d=(a+i-l*(o+i))/2,c=s[0],u=s[1];c[0]>u[0]&&(c=s[1],u=s[0]);let p=Math.atan((u[1]-c[1])/(u[0]-c[0]));for(let m=0;m<l;m++){let f=m*(o+i),E=f+o,h=[c[0]+f*Math.cos(p)+d*Math.cos(p),c[1]+f*Math.sin(p)+d*Math.sin(p)],g=[c[0]+E*Math.cos(p)+d*Math.cos(p),c[1]+E*Math.sin(p)+d*Math.sin(p)];r.push(...this.helper.doubleLineOps(h[0],h[1],g[0],g[1],n))}}),r}};P();var yo=class{constructor(t){this.helper=t}fillPolygons(t,n){let o=n.hachureGap<0?n.strokeWidth*4:n.hachureGap,i=n.zigzagOffset<0?o:n.zigzagOffset;n=Object.assign({},n,{hachureGap:o+i});let r=rt(t,n);return{type:"fillSketch",ops:this.zigzagLines(r,i,n)}}zigzagLines(t,n,o){let i=[];return t.forEach(r=>{let s=Nt(r),a=Math.round(s/(2*n)),l=r[0],d=r[1];l[0]>d[0]&&(l=r[1],d=r[0]);let c=Math.atan((d[1]-l[1])/(d[0]-l[0]));for(let u=0;u<a;u++){let p=u*2*n,m=(u+1)*2*n,f=Math.sqrt(2*Math.pow(n,2)),E=[l[0]+p*Math.cos(c),l[1]+p*Math.sin(c)],h=[l[0]+m*Math.cos(c),l[1]+m*Math.sin(c)],g=[E[0]+f*Math.cos(c+Math.PI/4),E[1]+f*Math.sin(c+Math.PI/4)];i.push(...this.helper.doubleLineOps(E[0],E[1],g[0],g[1],o),...this.helper.doubleLineOps(g[0],g[1],h[0],h[1],o))}}),i}};var ve={};function Ts(e,t){let n=e.fillStyle||"hachure";if(!ve[n])switch(n){case"zigzag":ve[n]||(ve[n]=new Eo(t));break;case"cross-hatch":ve[n]||(ve[n]=new go(t));break;case"dots":ve[n]||(ve[n]=new xo(t));break;case"dashed":ve[n]||(ve[n]=new wo(t));break;case"zigzag-line":ve[n]||(ve[n]=new yo(t));break;case"hachure":default:n="hachure",ve[n]||(ve[n]=new Ft(t));break}return ve[n]}P();function As(){return Math.floor(Math.random()*2**31)}var bo=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};P();P();var Po={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function Tc(e){let t=new Array;for(;e!=="";)if(e.match(/^([ \t\r\n,]+)/))e=e.substr(RegExp.$1.length);else if(e.match(/^([aAcChHlLmMqQsStTvVzZ])/))t[t.length]={type:0,text:RegExp.$1},e=e.substr(RegExp.$1.length);else if(e.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))t[t.length]={type:1,text:`${parseFloat(RegExp.$1)}`},e=e.substr(RegExp.$1.length);else return[];return t[t.length]={type:2,text:""},t}function Ni(e,t){return e.type===t}function In(e){let t=[],n=Tc(e),o="BOD",i=0,r=n[i];for(;!Ni(r,2);){let s=0,a=[];if(o==="BOD")if(r.text==="M"||r.text==="m")i++,s=Po[r.text],o=r.text;else return In("M0,0"+e);else Ni(r,1)?s=Po[o]:(i++,s=Po[r.text],o=r.text);if(i+s<n.length){for(let l=i;l<i+s;l++){let d=n[l];if(Ni(d,1))a[a.length]=+d.text;else throw new Error("Param not a number: "+o+","+d.text)}if(typeof Po[o]=="number"){let l={key:o,data:a};t.push(l),i+=s,r=n[i],o==="M"&&(o="L"),o==="m"&&(o="l")}else throw new Error("Bad segment: "+o)}else throw new Error("Path data ended short")}return t}P();function _n(e){let t=0,n=0,o=0,i=0,r=[];for(let{key:s,data:a}of e)switch(s){case"M":r.push({key:"M",data:[...a]}),[t,n]=a,[o,i]=a;break;case"m":t+=a[0],n+=a[1],r.push({key:"M",data:[t,n]}),o=t,i=n;break;case"L":r.push({key:"L",data:[...a]}),[t,n]=a;break;case"l":t+=a[0],n+=a[1],r.push({key:"L",data:[t,n]});break;case"C":r.push({key:"C",data:[...a]}),t=a[4],n=a[5];break;case"c":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"C",data:l}),t=l[4],n=l[5];break}case"Q":r.push({key:"Q",data:[...a]}),t=a[2],n=a[3];break;case"q":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"Q",data:l}),t=l[2],n=l[3];break}case"A":r.push({key:"A",data:[...a]}),t=a[5],n=a[6];break;case"a":t+=a[5],n+=a[6],r.push({key:"A",data:[a[0],a[1],a[2],a[3],a[4],t,n]});break;case"H":r.push({key:"H",data:[...a]}),t=a[0];break;case"h":t+=a[0],r.push({key:"H",data:[t]});break;case"V":r.push({key:"V",data:[...a]}),n=a[0];break;case"v":n+=a[0],r.push({key:"V",data:[n]});break;case"S":r.push({key:"S",data:[...a]}),t=a[2],n=a[3];break;case"s":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"S",data:l}),t=l[2],n=l[3];break}case"T":r.push({key:"T",data:[...a]}),t=a[0],n=a[1];break;case"t":t+=a[0],n+=a[1],r.push({key:"T",data:[t,n]});break;case"Z":case"z":r.push({key:"Z",data:[]}),t=o,n=i;break}return r}P();function Un(e){let t=[],n="",o=0,i=0,r=0,s=0,a=0,l=0;for(let{key:d,data:c}of e){switch(d){case"M":t.push({key:"M",data:[...c]}),[o,i]=c,[r,s]=c;break;case"C":t.push({key:"C",data:[...c]}),o=c[4],i=c[5],a=c[2],l=c[3];break;case"L":t.push({key:"L",data:[...c]}),[o,i]=c;break;case"H":o=c[0],t.push({key:"L",data:[o,i]});break;case"V":i=c[0],t.push({key:"L",data:[o,i]});break;case"S":{let u=0,p=0;n==="C"||n==="S"?(u=o+(o-a),p=i+(i-l)):(u=o,p=i),t.push({key:"C",data:[u,p,...c]}),a=c[0],l=c[1],o=c[2],i=c[3];break}case"T":{let[u,p]=c,m=0,f=0;n==="Q"||n==="T"?(m=o+(o-a),f=i+(i-l)):(m=o,f=i);let E=o+2*(m-o)/3,h=i+2*(f-i)/3,g=u+2*(m-u)/3,x=p+2*(f-p)/3;t.push({key:"C",data:[E,h,g,x,u,p]}),a=m,l=f,o=u,i=p;break}case"Q":{let[u,p,m,f]=c,E=o+2*(u-o)/3,h=i+2*(p-i)/3,g=m+2*(u-m)/3,x=f+2*(p-f)/3;t.push({key:"C",data:[E,h,g,x,m,f]}),a=u,l=p,o=m,i=f;break}case"A":{let u=Math.abs(c[0]),p=Math.abs(c[1]),m=c[2],f=c[3],E=c[4],h=c[5],g=c[6];u===0||p===0?(t.push({key:"C",data:[o,i,h,g,h,g]}),o=h,i=g):(o!==h||i!==g)&&(Ds(o,i,h,g,u,p,m,f,E).forEach(function(y){t.push({key:"C",data:y})}),o=h,i=g);break}case"Z":t.push({key:"Z",data:[]}),o=r,i=s;break}n=d}return t}function Ac(e){return Math.PI*e/180}function Yn(e,t,n){let o=e*Math.cos(n)-t*Math.sin(n),i=e*Math.sin(n)+t*Math.cos(n);return[o,i]}function Ds(e,t,n,o,i,r,s,a,l,d){let c=Ac(s),u=[],p=0,m=0,f=0,E=0;if(d)[p,m,f,E]=d;else{[e,t]=Yn(e,t,-c),[n,o]=Yn(n,o,-c);let R=(e-n)/2,L=(t-o)/2,$=R*R/(i*i)+L*L/(r*r);$>1&&($=Math.sqrt($),i=$*i,r=$*r);let H=a===l?-1:1,te=i*i,S=r*r,Q=te*S-te*L*L-S*R*R,Z=te*L*L+S*R*R,ne=H*Math.sqrt(Math.abs(Q/Z));f=ne*i*L/r+(e+n)/2,E=ne*-r*R/i+(t+o)/2,p=Math.asin(parseFloat(((t-E)/r).toFixed(9))),m=Math.asin(parseFloat(((o-E)/r).toFixed(9))),e<f&&(p=Math.PI-p),n<f&&(m=Math.PI-m),p<0&&(p=Math.PI*2+p),m<0&&(m=Math.PI*2+m),l&&p>m&&(p=p-Math.PI*2),!l&&m>p&&(m=m-Math.PI*2)}let h=m-p;if(Math.abs(h)>Math.PI*120/180){let R=m,L=n,$=o;l&&m>p?m=p+Math.PI*120/180*1:m=p+Math.PI*120/180*-1,n=f+i*Math.cos(m),o=E+r*Math.sin(m),u=Ds(n,o,L,$,i,r,s,0,l,[m,R,f,E])}h=m-p;let g=Math.cos(p),x=Math.sin(p),y=Math.cos(m),b=Math.sin(m),w=Math.tan(h/4),I=4/3*i*w,M=4/3*r*w,D=[e,t],T=[e+I*x,t-M*g],N=[n+I*b,o-M*y],C=[n,o];if(T[0]=2*D[0]-T[0],T[1]=2*D[1]-T[1],d)return[T,N,C].concat(u);{u=[T,N,C].concat(u);let R=[];for(let L=0;L<u.length;L+=3){let $=Yn(u[L][0],u[L][1],c),H=Yn(u[L+1][0],u[L+1][1],c),te=Yn(u[L+2][0],u[L+2][1],c);R.push([$[0],$[1],H[0],H[1],te[0],te[1]])}return R}}var Dc={randOffset:Cc,randOffsetWithRange:Gc,ellipse:Lc,doubleLineOps:Bc};function Hi(e,t,n,o,i){return{type:"path",ops:ht(e,t,n,o,i)}}function Xn(e,t,n){let o=(e||[]).length;if(o>2){let i=[];for(let r=0;r<o-1;r++)i.push(...ht(e[r][0],e[r][1],e[r+1][0],e[r+1][1],n));return t&&i.push(...ht(e[o-1][0],e[o-1][1],e[0][0],e[0][1],n)),{type:"path",ops:i}}else if(o===2)return Hi(e[0][0],e[0][1],e[1][0],e[1][1],n);return{type:"path",ops:[]}}function vc(e,t){return Xn(e,!0,t)}function Bs(e,t,n,o,i){let r=[[e,t],[e+n,t],[e+n,t+o],[e,t+o]];return vc(r,i)}function zi(e,t){let n=Ls(e,1*(1+t.roughness*.2),t);if(!t.disableMultiStroke){let o=Ls(e,1.5*(1+t.roughness*.22),kc(t));n=n.concat(o)}return{type:"path",ops:n}}function Lc(e,t,n,o,i){let r=_i(n,o,i);return Mo(e,t,i,r).opset}function _i(e,t,n){let o=Math.sqrt(Math.PI*2*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),i=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*o)),r=Math.PI*2/i,s=Math.abs(e/2),a=Math.abs(t/2),l=1-n.curveFitting;return s+=k(s*l,n),a+=k(a*l,n),{increment:r,rx:s,ry:a}}function Mo(e,t,n,o){let[i,r]=Cs(o.increment,e,t,o.rx,o.ry,1,o.increment*Io(.1,Io(.4,1,n),n),n),s=So(i,null,n);if(!n.disableMultiStroke&&n.roughness!==0){let[a]=Cs(o.increment,e,t,o.rx,o.ry,1.5,0,n),l=So(a,null,n);s=s.concat(l)}return{estimatedPoints:r,opset:{type:"path",ops:s}}}function Yi(e,t,n,o,i,r,s,a,l){let d=e,c=t,u=Math.abs(n/2),p=Math.abs(o/2);u+=k(u*.01,l),p+=k(p*.01,l);let m=i,f=r;for(;m<0;)m+=Math.PI*2,f+=Math.PI*2;f-m>Math.PI*2&&(m=0,f=Math.PI*2);let E=Math.PI*2/l.curveStepCount,h=Math.min(E/2,(f-m)/2),g=Gs(h,d,c,u,p,m,f,1,l);if(!l.disableMultiStroke){let x=Gs(h,d,c,u,p,m,f,1.5,l);g.push(...x)}return s&&(a?g.push(...ht(d,c,d+u*Math.cos(m),c+p*Math.sin(m),l),...ht(d,c,d+u*Math.cos(f),c+p*Math.sin(f),l)):g.push({op:"lineTo",data:[d,c]},{op:"lineTo",data:[d+u*Math.cos(m),c+p*Math.sin(m)]})),{type:"path",ops:g}}function Ui(e,t){let n=Un(_n(In(e))),o=[],i=[0,0],r=[0,0];for(let{key:s,data:a}of n)switch(s){case"M":{r=[a[0],a[1]],i=[a[0],a[1]];break}case"L":o.push(...ht(r[0],r[1],a[0],a[1],t)),r=[a[0],a[1]];break;case"C":{let[l,d,c,u,p,m]=a;o.push(...Oc(l,d,c,u,p,m,r,t)),r=[p,m];break}case"Z":o.push(...ht(r[0],r[1],i[0],i[1],t)),r=[i[0],i[1]];break}return{type:"path",ops:o}}function To(e,t){let n=[];for(let o of e)if(o.length){let i=t.maxRandomnessOffset||0,r=o.length;if(r>2){n.push({op:"move",data:[o[0][0]+k(i,t),o[0][1]+k(i,t)]});for(let s=1;s<r;s++)n.push({op:"lineTo",data:[o[s][0]+k(i,t),o[s][1]+k(i,t)]})}}return{type:"fillPath",ops:n}}function cn(e,t){return Ts(t,Dc).fillPolygons(e,t)}function ks(e,t,n,o,i,r,s){let a=e,l=t,d=Math.abs(n/2),c=Math.abs(o/2);d+=k(d*.01,s),c+=k(c*.01,s);let u=i,p=r;for(;u<0;)u+=Math.PI*2,p+=Math.PI*2;p-u>Math.PI*2&&(u=0,p=Math.PI*2);let m=(p-u)/s.curveStepCount,f=[];for(let E=u;E<=p;E=E+m)f.push([a+d*Math.cos(E),l+c*Math.sin(E)]);return f.push([a+d*Math.cos(p),l+c*Math.sin(p)]),f.push([a,l]),cn([f],s)}function Cc(e,t){return k(e,t)}function Gc(e,t,n){return Io(e,t,n)}function Bc(e,t,n,o,i){return ht(e,t,n,o,i,!0)}function kc(e){let t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function Os(e){return e.randomizer||(e.randomizer=new bo(e.seed||0)),e.randomizer.next()}function Io(e,t,n,o=1){return n.roughness*o*(Os(n)*(t-e)+e)}function k(e,t,n=1){return Io(-e,e,t,n)}function ht(e,t,n,o,i,r=!1){let s=r?i.disableMultiStrokeFill:i.disableMultiStroke,a=vs(e,t,n,o,i,!0,!1);if(s)return a;let l=vs(e,t,n,o,i,!0,!0);return a.concat(l)}function vs(e,t,n,o,i,r,s){let a=Math.pow(e-n,2)+Math.pow(t-o,2),l=Math.sqrt(a),d=1;l<200?d=1:l>500?d=.4:d=-.0016668*l+1.233334;let c=i.maxRandomnessOffset||0;c*c*100>a&&(c=l/10);let u=c/2,p=.2+Os(i)*.2,m=i.bowing*i.maxRandomnessOffset*(o-t)/200,f=i.bowing*i.maxRandomnessOffset*(e-n)/200;m=k(m,i,d),f=k(f,i,d);let E=[],h=()=>k(u,i,d),g=()=>k(c,i,d),x=i.preserveVertices;return r&&(s?E.push({op:"move",data:[e+(x?0:h()),t+(x?0:h())]}):E.push({op:"move",data:[e+(x?0:k(c,i,d)),t+(x?0:k(c,i,d))]})),s?E.push({op:"bcurveTo",data:[m+e+(n-e)*p+h(),f+t+(o-t)*p+h(),m+e+2*(n-e)*p+h(),f+t+2*(o-t)*p+h(),n+(x?0:h()),o+(x?0:h())]}):E.push({op:"bcurveTo",data:[m+e+(n-e)*p+g(),f+t+(o-t)*p+g(),m+e+2*(n-e)*p+g(),f+t+2*(o-t)*p+g(),n+(x?0:g()),o+(x?0:g())]}),E}function Ls(e,t,n){let o=[];o.push([e[0][0]+k(t,n),e[0][1]+k(t,n)]),o.push([e[0][0]+k(t,n),e[0][1]+k(t,n)]);for(let i=1;i<e.length;i++)o.push([e[i][0]+k(t,n),e[i][1]+k(t,n)]),i===e.length-1&&o.push([e[i][0]+k(t,n),e[i][1]+k(t,n)]);return So(o,null,n)}function So(e,t,n){let o=e.length,i=[];if(o>3){let r=[],s=1-n.curveTightness;i.push({op:"move",data:[e[1][0],e[1][1]]});for(let a=1;a+2<o;a++){let l=e[a];r[0]=[l[0],l[1]],r[1]=[l[0]+(s*e[a+1][0]-s*e[a-1][0])/6,l[1]+(s*e[a+1][1]-s*e[a-1][1])/6],r[2]=[e[a+1][0]+(s*e[a][0]-s*e[a+2][0])/6,e[a+1][1]+(s*e[a][1]-s*e[a+2][1])/6],r[3]=[e[a+1][0],e[a+1][1]],i.push({op:"bcurveTo",data:[r[1][0],r[1][1],r[2][0],r[2][1],r[3][0],r[3][1]]})}if(t&&t.length===2){let a=n.maxRandomnessOffset;i.push({op:"lineTo",data:[t[0]+k(a,n),t[1]+k(a,n)]})}}else o===3?(i.push({op:"move",data:[e[1][0],e[1][1]]}),i.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):o===2&&i.push(...ht(e[0][0],e[0][1],e[1][0],e[1][1],n));return i}function Cs(e,t,n,o,i,r,s,a){let l=a.roughness===0,d=[],c=[];if(l){e=e/4,c.push([t+o*Math.cos(-e),n+i*Math.sin(-e)]);for(let u=0;u<=Math.PI*2;u=u+e){let p=[t+o*Math.cos(u),n+i*Math.sin(u)];d.push(p),c.push(p)}c.push([t+o*Math.cos(0),n+i*Math.sin(0)]),c.push([t+o*Math.cos(e),n+i*Math.sin(e)])}else{let u=k(.5,a)-Math.PI/2;c.push([k(r,a)+t+.9*o*Math.cos(u-e),k(r,a)+n+.9*i*Math.sin(u-e)]);let p=Math.PI*2+u-.01;for(let m=u;m<p;m=m+e){let f=[k(r,a)+t+o*Math.cos(m),k(r,a)+n+i*Math.sin(m)];d.push(f),c.push(f)}c.push([k(r,a)+t+o*Math.cos(u+Math.PI*2+s*.5),k(r,a)+n+i*Math.sin(u+Math.PI*2+s*.5)]),c.push([k(r,a)+t+.98*o*Math.cos(u+s),k(r,a)+n+.98*i*Math.sin(u+s)]),c.push([k(r,a)+t+.9*o*Math.cos(u+s*.5),k(r,a)+n+.9*i*Math.sin(u+s*.5)])}return[c,d]}function Gs(e,t,n,o,i,r,s,a,l){let d=r+k(.1,l),c=[];c.push([k(a,l)+t+.9*o*Math.cos(d-e),k(a,l)+n+.9*i*Math.sin(d-e)]);for(let u=d;u<=s;u=u+e)c.push([k(a,l)+t+o*Math.cos(u),k(a,l)+n+i*Math.sin(u)]);return c.push([t+o*Math.cos(s),n+i*Math.sin(s)]),c.push([t+o*Math.cos(s),n+i*Math.sin(s)]),So(c,null,l)}function Oc(e,t,n,o,i,r,s,a){let l=[],d=[a.maxRandomnessOffset||1,(a.maxRandomnessOffset||1)+.3],c=[0,0],u=a.disableMultiStroke?1:2,p=a.preserveVertices;for(let m=0;m<u;m++)m===0?l.push({op:"move",data:[s[0],s[1]]}):l.push({op:"move",data:[s[0]+(p?0:k(d[0],a)),s[1]+(p?0:k(d[0],a))]}),c=p?[i,r]:[i+k(d[m],a),r+k(d[m],a)],l.push({op:"bcurveTo",data:[e+k(d[m],a),t+k(d[m],a),n+k(d[m],a),o+k(d[m],a),c[0],c[1]]});return l}P();function jn(e){return[...e]}function Rs(e,t=0){let n=e.length;if(n<3)throw new Error("A curve must have at least three points.");let o=[];if(n===3)o.push(jn(e[0]),jn(e[1]),jn(e[2]),jn(e[2]));else{let i=[];i.push(e[0],e[0]);for(let a=1;a<e.length;a++)i.push(e[a]),a===e.length-1&&i.push(e[a]);let r=[],s=1-t;o.push(jn(i[0]));for(let a=1;a+2<i.length;a++){let l=i[a];r[0]=[l[0],l[1]],r[1]=[l[0]+(s*i[a+1][0]-s*i[a-1][0])/6,l[1]+(s*i[a+1][1]-s*i[a-1][1])/6],r[2]=[i[a+1][0]+(s*i[a][0]-s*i[a+2][0])/6,i[a+1][1]+(s*i[a][1]-s*i[a+2][1])/6],r[3]=[i[a+1][0],i[a+1][1]],o.push(r[1],r[2],r[3])}}return o}P();function Rc(e,t){return Math.sqrt(Ao(e,t))}function Ao(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function Fc(e,t,n){let o=Ao(t,n);if(o===0)return Ao(e,t);let i=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/o;return i=Math.max(0,Math.min(1,i)),Ao(e,un(t,n,i))}function un(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function Nc(e,t){let n=e[t+0],o=e[t+1],i=e[t+2],r=e[t+3],s=3*o[0]-2*n[0]-r[0];s*=s;let a=3*o[1]-2*n[1]-r[1];a*=a;let l=3*i[0]-2*r[0]-n[0];l*=l;let d=3*i[1]-2*r[1]-n[1];return d*=d,s<l&&(s=l),a<d&&(a=d),s+a}function Xi(e,t,n,o){let i=o||[];if(Nc(e,t)<n){let r=e[t+0];i.length?Rc(i[i.length-1],r)>1&&i.push(r):i.push(r),i.push(e[t+3])}else{let s=e[t+0],a=e[t+1],l=e[t+2],d=e[t+3],c=un(s,a,.5),u=un(a,l,.5),p=un(l,d,.5),m=un(c,u,.5),f=un(u,p,.5),E=un(m,f,.5);Xi([s,c,m,E],0,n,i),Xi([E,f,p,d],0,n,i)}return i}function Wn(e,t){return Do(e,0,e.length,t)}function Do(e,t,n,o,i){let r=i||[],s=e[t],a=e[n-1],l=0,d=1;for(let c=t+1;c<n-1;++c){let u=Fc(e[c],s,a);u>l&&(l=u,d=c)}return Math.sqrt(l)>o?(Do(e,t,d+1,o,r),Do(e,d,n,o,r)):(r.length||r.push(s),r.push(a)),r}function Et(e,t=.15,n){let o=[],i=(e.length-1)/3;for(let r=0;r<i;r++){let s=r*3;Xi(e,s,t,o)}return n&&n>0?Do(o,0,o.length,n):o}P();function Fs(e,t,n){let o=In(e),i=Un(_n(o)),r=[],s=[],a=[0,0],l=[],d=()=>{l.length>=4&&s.push(...Et(l,t)),l=[]},c=()=>{d(),s.length&&(r.push(s),s=[])};for(let{key:p,data:m}of i)switch(p){case"M":c(),a=[m[0],m[1]],s.push(a);break;case"L":d(),s.push([m[0],m[1]]);break;case"C":if(!l.length){let f=s.length?s[s.length-1]:a;l.push([f[0],f[1]])}l.push([m[0],m[1]]),l.push([m[2],m[3]]),l.push([m[4],m[5]]);break;case"Z":d(),s.push([a[0],a[1]]);break}if(c(),!n)return r;let u=[];for(let p of r){let m=Wn(p,n);m.length&&u.push(m)}return u}var He="none",je=class{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return As()}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,n,o){return{shape:t,sets:n||[],options:o||this.defaultOptions}}line(t,n,o,i,r){let s=this._o(r);return this._d("line",[Hi(t,n,o,i,s)],s)}rectangle(t,n,o,i,r){let s=this._o(r),a=[],l=Bs(t,n,o,i,s);if(s.fill){let d=[[t,n],[t+o,n],[t+o,n+i],[t,n+i]];s.fillStyle==="solid"?a.push(To([d],s)):a.push(cn([d],s))}return s.stroke!==He&&a.push(l),this._d("rectangle",a,s)}ellipse(t,n,o,i,r){let s=this._o(r),a=[],l=_i(o,i,s),d=Mo(t,n,s,l);if(s.fill)if(s.fillStyle==="solid"){let c=Mo(t,n,s,l).opset;c.type="fillPath",a.push(c)}else a.push(cn([d.estimatedPoints],s));return s.stroke!==He&&a.push(d.opset),this._d("ellipse",a,s)}circle(t,n,o,i){let r=this.ellipse(t,n,o,o,i);return r.shape="circle",r}linearPath(t,n){let o=this._o(n);return this._d("linearPath",[Xn(t,!1,o)],o)}arc(t,n,o,i,r,s,a=!1,l){let d=this._o(l),c=[],u=Yi(t,n,o,i,r,s,a,!0,d);if(a&&d.fill)if(d.fillStyle==="solid"){let p=Object.assign({},d);p.disableMultiStroke=!0;let m=Yi(t,n,o,i,r,s,!0,!1,p);m.type="fillPath",c.push(m)}else c.push(ks(t,n,o,i,r,s,d));return d.stroke!==He&&c.push(u),this._d("arc",c,d)}curve(t,n){let o=this._o(n),i=[],r=zi(t,o);if(o.fill&&o.fill!==He&&t.length>=3)if(o.fillStyle==="solid"){let s=zi(t,Object.assign(Object.assign({},o),{disableMultiStroke:!0,roughness:o.roughness?o.roughness+o.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=Rs(t),a=Et(s,10,(1+o.roughness)/2);i.push(cn([a],o))}return o.stroke!==He&&i.push(r),this._d("curve",i,o)}polygon(t,n){let o=this._o(n),i=[],r=Xn(t,!0,o);return o.fill&&(o.fillStyle==="solid"?i.push(To([t],o)):i.push(cn([t],o))),o.stroke!==He&&i.push(r),this._d("polygon",i,o)}path(t,n){let o=this._o(n),i=[];if(!t)return this._d("path",i,o);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let r=o.fill&&o.fill!=="transparent"&&o.fill!==He,s=o.stroke!==He,a=!!(o.simplification&&o.simplification<1),l=a?4-4*(o.simplification||1):(1+o.roughness)/2,d=Fs(t,1,l),c=Ui(t,o);if(r)if(o.fillStyle==="solid")if(d.length===1){let u=Ui(t,Object.assign(Object.assign({},o),{disableMultiStroke:!0,roughness:o.roughness?o.roughness+o.fillShapeRoughnessGain:0}));i.push({type:"fillPath",ops:this._mergedShape(u.ops)})}else i.push(To(d,o));else i.push(cn(d,o));return s&&(a?d.forEach(u=>{i.push(Xn(u,!1,o))}):i.push(c)),this._d("path",i,o)}opsToPath(t,n){let o="";for(let i of t.ops){let r=typeof n=="number"&&n>=0?i.data.map(s=>+s.toFixed(n)):i.data;switch(i.op){case"move":o+=`M${r[0]} ${r[1]} `;break;case"bcurveTo":o+=`C${r[0]} ${r[1]}, ${r[2]} ${r[3]}, ${r[4]} ${r[5]} `;break;case"lineTo":o+=`L${r[0]} ${r[1]} `;break}}return o.trim()}toPaths(t){let n=t.sets||[],o=t.options||this.defaultOptions,i=[];for(let r of n){let s=null;switch(r.type){case"path":s={d:this.opsToPath(r),stroke:o.stroke,strokeWidth:o.strokeWidth,fill:He};break;case"fillPath":s={d:this.opsToPath(r),stroke:He,strokeWidth:0,fill:o.fill||He};break;case"fillSketch":s=this.fillSketch(r,o);break}s&&i.push(s)}return i}fillSketch(t,n){let o=n.fillWeight;return o<0&&(o=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||He,strokeWidth:o,fill:He}}_mergedShape(t){return t.filter((n,o)=>o===0?!0:n.op!=="move")}};var vo=class{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new je(n)}draw(t){let n=t.sets||[],o=t.options||this.getDefaultOptions(),i=this.ctx,r=t.options.fixedDecimalPlaceDigits;for(let s of n)switch(s.type){case"path":i.save(),i.strokeStyle=o.stroke==="none"?"transparent":o.stroke,i.lineWidth=o.strokeWidth,o.strokeLineDash&&i.setLineDash(o.strokeLineDash),o.strokeLineDashOffset&&(i.lineDashOffset=o.strokeLineDashOffset),this._drawToContext(i,s,r),i.restore();break;case"fillPath":{i.save(),i.fillStyle=o.fill||"";let a=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(i,s,r,a),i.restore();break}case"fillSketch":this.fillSketch(i,s,o);break}}fillSketch(t,n,o){let i=o.fillWeight;i<0&&(i=o.strokeWidth/2),t.save(),o.fillLineDash&&t.setLineDash(o.fillLineDash),o.fillLineDashOffset&&(t.lineDashOffset=o.fillLineDashOffset),t.strokeStyle=o.fill||"",t.lineWidth=i,this._drawToContext(t,n,o.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,o,i="nonzero"){t.beginPath();for(let r of n.ops){let s=typeof o=="number"&&o>=0?r.data.map(a=>+a.toFixed(o)):r.data;switch(r.op){case"move":t.moveTo(s[0],s[1]);break;case"bcurveTo":t.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":t.lineTo(s[0],s[1]);break}}n.type==="fillPath"?t.fill(i):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,o,i,r){let s=this.gen.line(t,n,o,i,r);return this.draw(s),s}rectangle(t,n,o,i,r){let s=this.gen.rectangle(t,n,o,i,r);return this.draw(s),s}ellipse(t,n,o,i,r){let s=this.gen.ellipse(t,n,o,i,r);return this.draw(s),s}circle(t,n,o,i){let r=this.gen.circle(t,n,o,i);return this.draw(r),r}linearPath(t,n){let o=this.gen.linearPath(t,n);return this.draw(o),o}polygon(t,n){let o=this.gen.polygon(t,n);return this.draw(o),o}arc(t,n,o,i,r,s,a=!1,l){let d=this.gen.arc(t,n,o,i,r,s,a,l);return this.draw(d),d}curve(t,n){let o=this.gen.curve(t,n);return this.draw(o),o}path(t,n){let o=this.gen.path(t,n);return this.draw(o),o}};P();P();var Vn="http://www.w3.org/2000/svg";var Lo=class{constructor(t,n){this.svg=t,this.gen=new je(n)}draw(t){let n=t.sets||[],o=t.options||this.getDefaultOptions(),i=this.svg.ownerDocument||window.document,r=i.createElementNS(Vn,"g"),s=t.options.fixedDecimalPlaceDigits;for(let a of n){let l=null;switch(a.type){case"path":{l=i.createElementNS(Vn,"path"),l.setAttribute("d",this.opsToPath(a,s)),l.setAttribute("stroke",o.stroke),l.setAttribute("stroke-width",o.strokeWidth+""),l.setAttribute("fill","none"),o.strokeLineDash&&l.setAttribute("stroke-dasharray",o.strokeLineDash.join(" ").trim()),o.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${o.strokeLineDashOffset}`);break}case"fillPath":{l=i.createElementNS(Vn,"path"),l.setAttribute("d",this.opsToPath(a,s)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",o.fill||""),(t.shape==="curve"||t.shape==="polygon")&&l.setAttribute("fill-rule","evenodd");break}case"fillSketch":{l=this.fillSketch(i,a,o);break}}l&&r.appendChild(l)}return r}fillSketch(t,n,o){let i=o.fillWeight;i<0&&(i=o.strokeWidth/2);let r=t.createElementNS(Vn,"path");return r.setAttribute("d",this.opsToPath(n,o.fixedDecimalPlaceDigits)),r.setAttribute("stroke",o.fill||""),r.setAttribute("stroke-width",i+""),r.setAttribute("fill","none"),o.fillLineDash&&r.setAttribute("stroke-dasharray",o.fillLineDash.join(" ").trim()),o.fillLineDashOffset&&r.setAttribute("stroke-dashoffset",`${o.fillLineDashOffset}`),r}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,o,i,r){let s=this.gen.line(t,n,o,i,r);return this.draw(s)}rectangle(t,n,o,i,r){let s=this.gen.rectangle(t,n,o,i,r);return this.draw(s)}ellipse(t,n,o,i,r){let s=this.gen.ellipse(t,n,o,i,r);return this.draw(s)}circle(t,n,o,i){let r=this.gen.circle(t,n,o,i);return this.draw(r)}linearPath(t,n){let o=this.gen.linearPath(t,n);return this.draw(o)}polygon(t,n){let o=this.gen.polygon(t,n);return this.draw(o)}arc(t,n,o,i,r,s,a=!1,l){let d=this.gen.arc(t,n,o,i,r,s,a,l);return this.draw(d)}curve(t,n){let o=this.gen.curve(t,n);return this.draw(o)}path(t,n){let o=this.gen.path(t,n);return this.draw(o)}};var pn={canvas(e,t){return new vo(e,t)},svg(e,t){return new Lo(e,t)},generator(e){return new je(e)},newSeed(){return je.newSeed()}};import{arrayToMap as Kl,invariant as jr,rescalePoints as Wl,sizeOf as pf}from"@excalidraw/common";import{degreesToRadians as Xr,lineSegment as Ee,pointDistance as mf,pointFrom as v,pointFromArray as Ql,pointRotateRads as se}from"@excalidraw/math";P();import{invariant as Hc}from"@excalidraw/common";import{curve as zc,lineSegment as _c,pointFrom as le,pointDistance as ax,pointFromArray as Yc,pointFromVector as Uc,pointRotateRads as qe,polygon as Ns,polygonFromPoints as ji,PRECISION as lx,segmentsIntersectAt as dx,vector as Xc,vectorAdd as jc,vectorFromPoint as Wc,vectorScale as cx}from"@excalidraw/math";import{getElementAbsoluteCoords as px}from"@excalidraw/element";var Hs=e=>{let{angle:t,width:n,height:o,x:i,y:r}=e,s=i+n/2,a=r+o/2,l=le(s,a),d;return e.type==="diamond"?d=Ns(qe(le(s,r),l,t),qe(le(i+n,a),l,t),qe(le(s,r+o),l,t),qe(le(i,a),l,t)):d=Ns(qe(le(i,r),l,t),qe(le(i+n,r),l,t),qe(le(i+n,r+o),l,t),qe(le(i,r+o),l,t)),{type:"polygon",data:d}};var zs=e=>{let{width:t,height:n,angle:o,x:i,y:r}=e;return{type:"ellipse",data:{center:le(i+t/2,r+n/2),angle:o,halfWidth:t/2,halfHeight:n/2}}},gt=e=>{if(!e)return[];for(let t of e.sets)if(t.type==="path")return t.ops;return e.sets[0].ops},_s=(e,t=le(0,0),n,o)=>{let i=l=>qe(le(l[0]+t[0],l[1]+t[1]),o,n),r=gt(e),s=[],a=le(0,0);for(let l of r){if(l.op==="move"){let d=Yc(l.data);Hc(d!=null,"Ops data is not a point"),a=i(d)}if(l.op==="bcurveTo"){let d=i(le(l.data[0],l.data[1])),c=i(le(l.data[2],l.data[3])),u=i(le(l.data[4],l.data[5]));s.push(zc(a,d,c,u)),a=u}}return{type:"polycurve",data:s}},Vc=e=>{let t=e[0],n=[];for(let o=1;o<e.length;o++){let i=e[o];n.push(_c(t,i)),t=i}return n},Ys=(e,t,n=!1)=>{let o=r=>qe(Uc(jc(Wc(r),Xc(e.x,e.y))),t,e.angle),i=Vc(e.points.map(r=>o(r)));return n?{type:"polygon",data:ji(i.flat())}:{type:"polyline",data:i}},Us=(e,t,n=le(0,0),o,i)=>{let r=c=>qe(le(c[0]+n[0],c[1]+n[1]),i,o);if(e.roundness===null)return{type:"polygon",data:ji(e.points.map(c=>r(c)))};let s=gt(t),a=[],l=!1;for(let c of s)c.op==="move"?(l=!l,l&&a.push(le(c.data[0],c.data[1]))):c.op==="bcurveTo"?l&&(a.push(le(c.data[0],c.data[1])),a.push(le(c.data[2],c.data[3])),a.push(le(c.data[4],c.data[5]))):c.op==="lineTo"&&l&&a.push(le(c.data[0],c.data[1]));let d=Et(a,10,5).map(c=>r(c));return{type:"polygon",data:ji(d)}};P();import{pointFrom as de,pointDistance as zl,pointRotateRads as Gt}from"@excalidraw/math";import{ROUGHNESS as rf,isTransparent as lo,assertNever as sf,COLOR_PALETTE as af,LINE_POLYGON_POINT_MERGE_DISTANCE as lf}from"@excalidraw/common";P();P();function Xs(e,t,n,o=i=>i){return e*o(.5-t*(.5-n))}function $c(e){return[-e[0],-e[1]]}function Qe(e,t){return[e[0]+t[0],e[1]+t[1]]}function We(e,t){return[e[0]-t[0],e[1]-t[1]]}function Ke(e,t){return[e[0]*t,e[1]*t]}function Zc(e,t){return[e[0]/t,e[1]/t]}function $n(e){return[e[1],-e[0]]}function js(e,t){return e[0]*t[0]+e[1]*t[1]}function qc(e,t){return e[0]===t[0]&&e[1]===t[1]}function Kc(e){return Math.hypot(e[0],e[1])}function Qc(e){return e[0]*e[0]+e[1]*e[1]}function Ws(e,t){return Qc(We(e,t))}function Zs(e){return Zc(e,Kc(e))}function Jc(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function Zn(e,t,n){let o=Math.sin(n),i=Math.cos(n),r=e[0]-t[0],s=e[1]-t[1],a=r*i-s*o,l=r*o+s*i;return[a+t[0],l+t[1]]}function Wi(e,t,n){return Qe(e,Ke(We(t,e),n))}function Vs(e,t,n){return Qe(e,Ke(t,n))}var{min:Sn,PI:eu}=Math,$s=.275,qn=eu+1e-4;function tu(e,t={}){let{size:n=16,smoothing:o=.5,thinning:i=.5,simulatePressure:r=!0,easing:s=S=>S,start:a={},end:l={},last:d=!1}=t,{cap:c=!0,easing:u=S=>S*(2-S)}=a,{cap:p=!0,easing:m=S=>--S*S*S+1}=l;if(e.length===0||n<=0)return[];let f=e[e.length-1].runningLength,E=a.taper===!1?0:a.taper===!0?Math.max(n,f):a.taper,h=l.taper===!1?0:l.taper===!0?Math.max(n,f):l.taper,g=Math.pow(n*o,2),x=[],y=[],b=e.slice(0,10).reduce((S,Q)=>{let Z=Q.pressure;if(r){let ne=Sn(1,Q.distance/n),an=Sn(1,1-ne);Z=Sn(1,S+(an-S)*(ne*$s))}return(S+Z)/2},e[0].pressure),w=Xs(n,i,e[e.length-1].pressure,s),I,M=e[0].vector,D=e[0].point,T=D,N=D,C=T,R=!1;for(let S=0;S<e.length;S++){let{pressure:Q}=e[S],{point:Z,vector:ne,distance:an,runningLength:it}=e[S];if(S<e.length-1&&f-it<3)continue;if(i){if(r){let xe=Sn(1,an/n),dn=Sn(1,1-xe);Q=Sn(1,b+(dn-b)*(xe*$s))}w=Xs(n,i,Q,s)}else w=n/2;I===void 0&&(I=w);let Pn=it<E?u(it/E):1,Oi=f-it<h?m((f-it)/h):1;w=Math.max(.01,w*Math.min(Pn,Oi));let fo=(S<e.length-1?e[S+1]:e[S]).vector,zn=S<e.length-1?js(ne,fo):1,Ri=js(ne,M)<0&&!R,ho=zn!==null&&zn<0;if(Ri||ho){let xe=Ke($n(M),w);for(let dn=1/13,De=0;De<=1;De+=dn)N=Zn(We(Z,xe),Z,qn*De),x.push(N),C=Zn(Qe(Z,xe),Z,qn*-De),y.push(C);D=N,T=C,ho&&(R=!0);continue}if(R=!1,S===e.length-1){let xe=Ke($n(ne),w);x.push(We(Z,xe)),y.push(Qe(Z,xe));continue}let ln=Ke($n(Wi(fo,ne,zn)),w);N=We(Z,ln),(S<=1||Ws(D,N)>g)&&(x.push(N),D=N),C=Qe(Z,ln),(S<=1||Ws(T,C)>g)&&(y.push(C),T=C),b=Q,M=ne}let L=e[0].point.slice(0,2),$=e.length>1?e[e.length-1].point.slice(0,2):Qe(e[0].point,[1,1]),H=[],te=[];if(e.length===1){if(!(E||h)||d){let S=Vs(L,Zs($n(We(L,$))),-(I||w)),Q=[];for(let Z=1/13,ne=Z;ne<=1;ne+=Z)Q.push(Zn(S,L,qn*2*ne));return Q}}else{if(!(E||h&&e.length===1))if(c)for(let Q=1/13,Z=Q;Z<=1;Z+=Q){let ne=Zn(y[0],L,qn*Z);H.push(ne)}else{let Q=We(x[0],y[0]),Z=Ke(Q,.5),ne=Ke(Q,.51);H.push(We(L,Z),We(L,ne),Qe(L,ne),Qe(L,Z))}let S=$n($c(e[e.length-1].vector));if(h||E&&e.length===1)te.push($);else if(p){let Q=Vs($,S,w);for(let Z=1/29,ne=Z;ne<1;ne+=Z)te.push(Zn(Q,$,qn*3*ne))}else te.push(Qe($,Ke(S,w)),Qe($,Ke(S,w*.99)),We($,Ke(S,w*.99)),We($,Ke(S,w)))}return x.concat(te,y.reverse(),H)}function nu(e,t={}){var n;let{streamline:o=.5,size:i=16,last:r=!1}=t;if(e.length===0)return[];let s=.15+(1-o)*.85,a=Array.isArray(e[0])?e:e.map(({x:m,y:f,pressure:E=.5})=>[m,f,E]);if(a.length===2){let m=a[1];a=a.slice(0,-1);for(let f=1;f<5;f++)a.push(Wi(a[0],m,f/4))}a.length===1&&(a=[...a,[...Qe(a[0],[1,1]),...a[0].slice(2)]]);let l=[{point:[a[0][0],a[0][1]],pressure:a[0][2]>=0?a[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=!1,c=0,u=l[0],p=a.length-1;for(let m=1;m<a.length;m++){let f=r&&m===p?a[m].slice(0,2):Wi(u.point,a[m],s);if(qc(u.point,f))continue;let E=Jc(f,u.point);if(c+=E,m<p&&!d){if(c<i)continue;d=!0}u={point:f,pressure:a[m][2]>=0?a[m][2]:.5,vector:Zs(We(u.point,f)),distance:E,runningLength:c},l.push(u)}return l[0].vector=((n=l[1])==null?void 0:n.vector)||[0,0],l}function qs(e,t={}){return tu(nu(e,t),t)}import{isRightAngleRads as Ym,lineSegment as Dl,pointFrom as fi,pointRotateRads as zr}from"@excalidraw/math";import{BOUND_TEXT_PADDING as hi,DEFAULT_REDUCED_GLOBAL_ALPHA as Um,ELEMENT_READY_TO_ERASE_OPACITY as Xm,FRAME_STYLE as Ei,MIME_TYPES as Yr,THEME as Cl,distance as Jt,getFontString as jm,isRTL as Wm,getVerticalOffset as Vm,invariant as $m}from"@excalidraw/common";P();import{pointFrom as xt,pointCenter as ou,pointRotateRads as Ht,vectorFromPoint as Vi,vectorNormalize as Ks,vectorSubtract as Qs,vectorAdd as Co,vectorScale as Go,pointFromVector as Js,clamp as Ie,isCloseTo as ea}from"@excalidraw/math";var Se=10,wx=(e,t,n,o,i,r,s,a)=>{let{width:l,height:d}=$i(e),c=o/l,u=i/d,p=(e.crop?.x??0)/c,m=(e.crop?.y??0)/u,f=Ht(xt(r,s),he(e,t),-e.angle);r=f[0],s=f[1];let E=e.width,h=e.height,g=e.crop??{x:0,y:0,width:o,height:i,naturalWidth:o,naturalHeight:i},x=g.height,y=g.width,b=e.scale[0]===-1,w=e.scale[1]===-1,I=s-e.y,M=r-e.x;n.includes("n")&&(h=Ie(e.height-I,Se,w?d-m:e.height+m)),n.includes("s")&&(I=s-e.y-e.height,h=Ie(e.height+I,Se,w?e.height+m:d-m)),n.includes("e")&&(M=r-e.x-e.width,E=Ie(e.width+M,Se,b?e.width+p:l-p)),n.includes("w")&&(E=Ie(e.width-M,Se,b?l-p:e.width+p));let D=C=>{C.height=h*u,C.width=E*c};D(g);let T=(C,R)=>{D(R),C.includes("n")&&(w||(R.y+=x-R.height)),C.includes("s")&&w&&(R.y+=x-R.height),C.includes("e")&&b&&(R.x+=y-R.width),C.includes("w")&&(b||(R.x+=y-R.width))};switch(n){case"n":{if(a){let C=p+e.width/2,R=l-p-e.width/2,L=Math.min(C,R)*2;E=Ie(h*a,Se,L),h=E/a}T(n,g),a&&(g.x+=(y-g.width)/2);break}case"s":{if(a){let C=p+e.width/2,R=l-p-e.width/2,L=Math.min(C,R)*2;E=Ie(h*a,Se,L),h=E/a}T(n,g),a&&(g.x+=(y-g.width)/2);break}case"w":{if(a){let C=m+e.height/2,R=d-m-e.height/2,L=Math.min(C,R)*2;h=Ie(E/a,Se,L),E=h*a}T(n,g),a&&(g.y+=(x-g.height)/2);break}case"e":{if(a){let C=m+e.height/2,R=d-m-e.height/2,L=Math.min(C,R)*2;h=Ie(E/a,Se,L),E=h*a}T(n,g),a&&(g.y+=(x-g.height)/2);break}case"ne":{if(a)if(M>-I){let C=w?d-m:m+e.height;h=Ie(E/a,Se,C),E=h*a}else{let C=b?p+e.width:l-p;E=Ie(h*a,Se,C),h=E/a}T(n,g);break}case"nw":{if(a)if(M<I){let C=w?d-m:m+e.height;h=Ie(E/a,Se,C),E=h*a}else{let C=b?l-p:p+e.width;E=Ie(h*a,Se,C),h=E/a}T(n,g);break}case"se":{if(a)if(M>I){let C=w?m+e.height:d-m;h=Ie(E/a,Se,C),E=h*a}else{let C=b?p+e.width:l-p;E=Ie(h*a,Se,C),h=E/a}T(n,g);break}case"sw":{if(a)if(-M>I){let C=w?m+e.height:d-m;h=Ie(E/a,Se,C),E=h*a}else{let C=b?l-p:p+e.width;E=Ie(h*a,Se,C),h=E/a}T(n,g);break}default:break}let N=iu(e,n,E,h,!!a);return ea(g.width,g.naturalWidth)&&ea(g.height,g.naturalHeight)&&(g=null),{x:N[0],y:N[1],width:E,height:h,crop:g}},iu=(e,t,n,o,i)=>{let[r,s,a,l]=zt(e,e.width,e.height,!0),d=xt(r,s),c=xt(a,l),u=ou(d,c),[p,m,f,E]=zt(e,n,o,!0),h=f-p,g=E-m,x=[...d];if(["n","w","nw"].includes(t)&&(x=[c[0]-Math.abs(h),c[1]-Math.abs(g)]),t==="ne"){let D=[d[0],c[1]];x=[D[0],D[1]-Math.abs(g)]}if(t==="sw"){let D=[c[0],d[1]];x=[D[0]-Math.abs(h),D[1]]}i&&(["s","n"].includes(t)&&(x[0]=u[0]-h/2),["e","w"].includes(t)&&(x[1]=u[1]-g/2));let y=e.angle,b=Ht(x,u,y),w=[x[0]+Math.abs(h)/2,x[1]+Math.abs(g)/2],I=Ht(w,u,y);x=Ht(b,I,-y);let M=[...x];return M[0]+=e.x-p,M[1]+=e.y-m,M},ta=(e,t)=>{if(e.crop){let{width:n,height:o}=$i(e),[i,r,s,a,l,d]=Y(e,t),c=Vi(Ht(xt(i,r),xt(l,d),e.angle)),u=Vi(Ht(xt(s,r),xt(l,d),e.angle)),p=Ks(Qs(u,c)),m=Vi(Ht(xt(i,a),xt(l,d),e.angle)),f=Qs(m,c),E=Ks(f),{cropX:h,cropY:g}=ru(e.crop,e.scale),x=Co(Co(c,Go(p,-h*n/e.crop.naturalWidth)),Go(E,-g*o/e.crop.naturalHeight)),y=Js(Co(Co(x,Go(p,n/2)),Go(E,o/2))),b=Ht(Js(x),y,-e.angle);return{...e,x:b[0],y:b[1],width:n,height:o,crop:null}}return e},$i=e=>{if(e.crop){let t=e.width/(e.crop.width/e.crop.naturalWidth),n=e.height/(e.crop.height/e.crop.naturalHeight);return{width:t,height:n}}return{width:e.width,height:e.height}},ru=(e,t)=>{let n=e.x,o=e.y,i=t[0]===-1,r=t[1]===-1;return i&&(n=e.naturalWidth-Math.abs(n)-e.width),r&&(o=e.naturalHeight-Math.abs(o)-e.height),{cropX:n,cropY:o}},yx=(e,t=!1)=>{let n=e.crop;if(!n)return null;let o=e.scale[0]===-1,i=e.scale[1]===-1,r=n.x,s=n.y;if(o&&(r=n.naturalWidth-n.width-n.x),i&&(s=n.naturalHeight-n.height-n.y),t)return{x:r,y:s};let{width:a,height:l}=$i(e);return{x:r/(n.naturalWidth/a),y:s/(n.naturalHeight/l)}};P();import{pointCenter as el,pointFrom as G,pointRotateRads as Te,pointsEqual as tl,pointDistance as Gn,vectorFromPoint as rm,curveLength as sm,curvePointAtLength as am}from"@excalidraw/math";import{DRAGGING_THRESHOLD as lm,KEYS as Bn,shouldRotateWithDiscreteAngle as nl,getGridPoint as ol,invariant as vt,tupleToCoors as Lr,viewportCoordsToSceneCoords as dm}from"@excalidraw/common";import{deconstructLinearOrFreeDrawElement as il,isPathALoop as cm}from"@excalidraw/element";P();import{KEYS as Bp,arrayToMap as Ua,isBindingFallthroughEnabled as oi,tupleToCoors as kp,invariant as Op,isDevEnv as Rp,isTestEnv as Fp}from"@excalidraw/common";import{lineSegment as Re,pointFrom as O,pointRotateRads as ae,vectorFromPoint as V,pointDistanceSq as Dt,clamp as Ha,pointDistance as ut,pointFromVector as xn,vectorScale as wn,vectorNormalize as Cn,vectorCross as Ye,pointsEqual as Np,lineSegmentIntersectionPoints as za,PRECISION as Hp}from"@excalidraw/math";P();import{isTransparent as Zu}from"@excalidraw/common";import{curveIntersectLineSegment as Ia,isPointWithinBounds as Xo,lineSegment as jo,lineSegmentIntersectionPoints as Sa,pointFrom as Mt,pointFromVector as qu,pointRotateRads as lt,pointsEqual as Ku,vectorFromPoint as Qu,vectorNormalize as Ju,vectorScale as ep}from"@excalidraw/math";import{ellipse as tp,ellipseSegmentInterceptPoints as np}from"@excalidraw/math/ellipse";P();import{DEFAULT_ADAPTIVE_RADIUS as su,DEFAULT_PROPORTIONAL_RADIUS as Zi,LINE_CONFIRM_THRESHOLD as au,ROUNDNESS as qi}from"@excalidraw/common";import{curve as wt,curveCatmullRomCubicApproxPoints as na,curveOffsetPoints as oa,lineSegment as ze,pointDistance as lu,pointFrom as X,pointFromArray as du,rectangle as cu}from"@excalidraw/math";var Kn=new WeakMap,Ki=(e,t)=>{let n=Kn.get(e);if(!n)return;let{version:o,shapes:i}=n;if(o!==e.version){Kn.delete(e);return}return i.get(t)},Qi=(e,t,n)=>{let o=Kn.get(e);if(!o){Kn.set(e,{version:e.version,shapes:new Map([[n,t]])});return}let{version:i,shapes:r}=o;if(i!==e.version){Kn.set(e,{version:e.version,shapes:new Map([[n,t]])});return}r.set(n,t)};function Bo(e){let t=Ki(e,0);if(t)return t;let n=ia(e),o=[],i=[];for(let s=0;s<n.length;s+=1){let a=n[s],l=n[s-1]&&du(n[s-1].data.slice(-2));switch(a.op){case"move":continue;case"lineTo":if(!l)throw new Error("prevPoint is undefined");o.push(ze(X(e.x+l[0],e.y+l[1]),X(e.x+a.data[0],e.y+a.data[1])));continue;case"bcurveTo":if(!l)throw new Error("prevPoint is undefined");i.push(wt(X(e.x+l[0],e.y+l[1]),X(e.x+a.data[0],e.y+a.data[1]),X(e.x+a.data[2],e.y+a.data[3]),X(e.x+a.data[4],e.y+a.data[5])));continue;default:console.error("Unknown op type",a.op)}}let r=[o,i];return Qi(e,r,0),r}function Mn(e,t=0){let n=Ki(e,t);if(n)return n;let o=yt(Math.min(e.width,e.height),e);o===0&&(o=.01);let i=cu(X(e.x,e.y),X(e.x+e.width,e.y+e.height)),r=ze(X(i[0][0]+o,i[0][1]),X(i[1][0]-o,i[0][1])),s=ze(X(i[1][0],i[0][1]+o),X(i[1][0],i[1][1]-o)),a=ze(X(i[0][0]+o,i[1][1]),X(i[1][0]-o,i[1][1])),l=ze(X(i[0][0],i[1][1]-o),X(i[0][0],i[0][1]+o)),d=[wt(l[1],X(l[1][0]+2/3*(i[0][0]-l[1][0]),l[1][1]+2/3*(i[0][1]-l[1][1])),X(r[0][0]+2/3*(i[0][0]-r[0][0]),r[0][1]+2/3*(i[0][1]-r[0][1])),r[0]),wt(r[1],X(r[1][0]+2/3*(i[1][0]-r[1][0]),r[1][1]+2/3*(i[0][1]-r[1][1])),X(s[0][0]+2/3*(i[1][0]-s[0][0]),s[0][1]+2/3*(i[0][1]-s[0][1])),s[0]),wt(s[1],X(s[1][0]+2/3*(i[1][0]-s[1][0]),s[1][1]+2/3*(i[1][1]-s[1][1])),X(a[1][0]+2/3*(i[1][0]-a[1][0]),a[1][1]+2/3*(i[1][1]-a[1][1])),a[1]),wt(a[0],X(a[0][0]+2/3*(i[0][0]-a[0][0]),a[0][1]+2/3*(i[1][1]-a[0][1])),X(l[0][0]+2/3*(i[0][0]-l[0][0]),l[0][1]+2/3*(i[1][1]-l[0][1])),l[0])],c=t>0?d.map(m=>na(oa(m,t))):[[d[0]],[d[1]],[d[2]],[d[3]]],p=[[ze(c[0][c[0].length-1][3],c[1][0][0]),ze(c[1][c[1].length-1][3],c[2][0][0]),ze(c[2][c[2].length-1][3],c[3][0][0]),ze(c[3][c[3].length-1][3],c[0][0][0])],c.flat()];return Qi(e,p,t),p}function Tn(e,t=0){let n=Ki(e,t);if(n)return n;let[o,i,r,s,a,l,d,c]=ko(e),u=e.roundness?yt(Math.abs(o-d),e):(o-d)*.01,p=e.roundness?yt(Math.abs(s-i),e):(s-i)*.01,[m,f,E,h]=[X(e.x+o,e.y+i),X(e.x+r,e.y+s),X(e.x+a,e.y+l),X(e.x+d,e.y+c)],g=[wt(X(f[0]-u,f[1]-p),f,f,X(f[0]-u,f[1]+p)),wt(X(E[0]+u,E[1]-p),E,E,X(E[0]-u,E[1]-p)),wt(X(h[0]+u,h[1]+p),h,h,X(h[0]+u,h[1]-p)),wt(X(m[0]-u,m[1]+p),m,m,X(m[0]+u,m[1]+p))],x=t>0?g.map(w=>na(oa(w,t))):[[g[0]],[g[1]],[g[2]],[g[3]]],b=[[ze(x[0][x[0].length-1][3],x[1][0][0]),ze(x[1][x[1].length-1][3],x[2][0][0]),ze(x[2][x[2].length-1][3],x[3][0][0]),ze(x[3][x[3].length-1][3],x[0][0][0])],x.flat()];return Qi(e,b,t),b}var mn=(e,t=1)=>{if(e.length>=3){let[n,o]=[e[0],e[e.length-1]];return lu(n,o)<=au/t}return!1},yt=(e,t)=>{if(t.roundness?.type===qi.PROPORTIONAL_RADIUS||t.roundness?.type===qi.LEGACY)return e*Zi;if(t.roundness?.type===qi.ADAPTIVE_RADIUS){let n=t.roundness?.value??su,o=n/Zi;return e<=o?e*Zi:n}return 0};P();import{ROUNDNESS as Qn,assertNever as uu}from"@excalidraw/common";import{pointsEqual as ra}from"@excalidraw/math";var _t=e=>!!e&&e.type==="image"&&!!e.fileId,we=e=>!!e&&e.type==="image",sa=e=>!!e&&e.type==="embeddable",Oo=e=>!!e&&e.type==="iframe",Ro=e=>!!e&&(e.type==="iframe"||e.type==="embeddable"),oe=e=>e!=null&&e.type==="text",Fo=e=>e!=null&&e.type==="frame",aa=e=>e!=null&&e.type==="magicframe",q=e=>e!=null&&(e.type==="frame"||e.type==="magicframe"),Me=e=>e!=null&&pu(e.type),pu=e=>e==="freedraw",j=e=>e!=null&&Ji(e.type),bt=e=>e!=null&&e.type==="line",_=e=>e!=null&&e.type==="arrow",B=e=>_(e)&&e.elbowed,Cx=e=>_(e)&&!e.elbowed,mu=e=>_(e)&&!e.elbowed&&!e.roundness,fu=e=>_(e)&&!e.elbowed&&e.roundness!==null,Ji=e=>e==="arrow"||e==="line",er=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&hu(e.type),hu=e=>e==="arrow",Le=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="diamond"||e.type==="ellipse"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),la=e=>e!=null&&(e.type==="rectangle"||e.type==="diamond"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),Gx=e=>e!=null&&(e.type==="rectangle"||e.type==="image"||e.type==="text"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="freedraw"),Eu=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="diamond"||e.type==="ellipse"||_(e)),Bx=e=>{let t=e?.type;if(!t)return!1;switch(t){case"text":case"diamond":case"rectangle":case"iframe":case"embeddable":case"ellipse":case"arrow":case"freedraw":case"line":case"frame":case"magicframe":case"image":case"selection":return!0;default:return uu(t,null),!1}},tr=e=>e.type==="rectangle"||e.type==="ellipse"||e.type==="diamond",st=e=>Eu(e)&&!!e.boundElements?.some(({type:t})=>t==="text"),ce=e=>e!==null&&"containerId"in e&&e.containerId!==null&&oe(e),kx=e=>!!e.startBinding||!!e.endBinding,da=e=>e==="rectangle"||e==="embeddable"||e==="iframe"||e==="image",ca=e=>e==="line"||e==="arrow"||e==="diamond",Ox=(e,t)=>!!((e===Qn.ADAPTIVE_RADIUS||e===Qn.LEGACY)&&da(t.type)||e===Qn.PROPORTIONAL_RADIUS&&ca(t.type)),Rx=e=>ca(e.type)?{type:Qn.PROPORTIONAL_RADIUS}:da(e.type)?{type:Qn.ADAPTIVE_RADIUS}:null,Jn=e=>Object.hasOwn(e,"fixedPoint")&&e.fixedPoint!=null,Fx=e=>Array.isArray(e)&&e.length===4&&typeof e[0]=="number"&&typeof e[1]=="number"&&typeof e[2]=="number"&&typeof e[3]=="number",Nx=e=>mu(e)?"sharpArrow":fu(e)?"curvedArrow":B(e)?"elbowArrow":"line",Hx=e=>e.length>3&&ra(e[0],e[e.length-1]),ua=e=>e.length>3||e.length===3&&!ra(e[0],e[e.length-1]);P();import{ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO as Ru,ARROW_LABEL_WIDTH_FRACTION as Fu,BOUND_TEXT_PADDING as at,DEFAULT_FONT_SIZE as Nu,TEXT_ALIGN as xa,VERTICAL_ALIGN as wa,getFontString as Uo,isProdEnv as Hu,invariant as zu}from"@excalidraw/common";import{pointFrom as ya,pointRotateRads as _u}from"@excalidraw/math";P();var eo={},pa=(e,t)=>{let n=eo[e]||(eo[e]={height:t});return n.height=t,n},ma=e=>{eo[e]&&delete eo[e]},Yx=e=>eo[e]?.height??null;P();import{BOUND_TEXT_PADDING as Ho,DEFAULT_FONT_SIZE as gu,DEFAULT_FONT_FAMILY as xu,getFontString as wu,isTestEnv as yu,normalizeEOL as bu}from"@excalidraw/common";var Je=(e,t,n)=>{let o=e.split(`
1
+ var Km=Object.create;var gl=Object.defineProperty;var Zm=Object.getOwnPropertyDescriptor;var qm=Object.getOwnPropertyNames;var Qm=Object.getPrototypeOf,Jm=Object.prototype.hasOwnProperty;var ep=(e,t)=>()=>(e&&(t=e(e=0)),t);var tp=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var np=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of qm(t))!Jm.call(e,o)&&o!==n&&gl(e,o,{get:()=>t[o],enumerable:!(i=Zm(t,o))||i.enumerable});return e};var ip=(e,t,n)=>(n=e!=null?Km(Qm(e)):{},np(t||!e||!e.__esModule?gl(n,"default",{value:e,enumerable:!0}):n,e));var O,I=ep(()=>{O={PROD:!0}});var qu=tp((nD,Zu)=>{I();var Ku="Expected a function",ju=NaN,jx="[object Symbol]",Vx=/^\s+|\s+$/g,Kx=/^[-+]0x[0-9a-f]+$/i,Zx=/^0b[01]+$/i,qx=/^0o[0-7]+$/i,Qx=parseInt,Jx=typeof global=="object"&&global&&global.Object===Object&&global,eb=typeof self=="object"&&self&&self.Object===Object&&self,tb=Jx||eb||Function("return this")(),nb=Object.prototype,ib=nb.toString,ob=Math.max,rb=Math.min,$a=function(){return tb.Date.now()};function sb(e,t,n){var i,o,r,s,a,l,d=0,c=!1,u=!1,m=!0;if(typeof e!="function")throw new TypeError(Ku);t=Vu(t)||0,Fr(n)&&(c=!!n.leading,u="maxWait"in n,r=u?ob(Vu(n.maxWait)||0,t):r,m="trailing"in n?!!n.trailing:m);function p(S){var M=i,A=o;return i=o=void 0,d=S,s=e.apply(A,M),s}function h(S){return d=S,a=setTimeout(E,t),c?p(S):s}function f(S){var M=S-l,A=S-d,T=t-M;return u?rb(T,r-A):T}function g(S){var M=S-l,A=S-d;return l===void 0||M>=t||M<0||u&&A>=r}function E(){var S=$a();if(g(S))return b(S);a=setTimeout(E,f(S))}function b(S){return a=void 0,m&&i?p(S):(i=o=void 0,s)}function x(){a!==void 0&&clearTimeout(a),d=0,i=l=o=a=void 0}function y(){return a===void 0?s:b($a())}function w(){var S=$a(),M=g(S);if(i=arguments,o=this,l=S,M){if(a===void 0)return h(l);if(u)return a=setTimeout(E,t),p(l)}return a===void 0&&(a=setTimeout(E,t)),s}return w.cancel=x,w.flush=y,w}function ab(e,t,n){var i=!0,o=!0;if(typeof e!="function")throw new TypeError(Ku);return Fr(n)&&(i="leading"in n?!!n.leading:i,o="trailing"in n?!!n.trailing:o),sb(e,t,{leading:i,maxWait:t,trailing:o})}function Fr(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function lb(e){return!!e&&typeof e=="object"}function db(e){return typeof e=="symbol"||lb(e)&&ib.call(e)==jx}function Vu(e){if(typeof e=="number")return e;if(db(e))return ju;if(Fr(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=Fr(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(Vx,"");var n=Zx.test(e);return n||qx.test(e)?Qx(e.slice(2),n?2:8):Kx.test(e)?ju:+e}Zu.exports=ab});I();import{toIterable as Ew}from"@excalidraw/common";I();import{SHIFT_LOCKING_ANGLE as hn,viewportCoordsToSceneCoords as Dr}from"@excalidraw/common";import{normalizeRadians as gu,radiansBetweenAngles as HE,radiansDifference as WE}from"@excalidraw/math";import{pointsEqual as UE}from"@excalidraw/math";I();I();I();I();I();I();I();I();I();function qr(e,t,n){if(e&&e.length){let[i,o]=t,r=Math.PI/180*n,s=Math.cos(r),a=Math.sin(r);for(let l of e){let[d,c]=l;l[0]=(d-i)*s-(c-o)*a+i,l[1]=(d-i)*a+(c-o)*s+o}}}function rp(e,t,n){let i=[];e.forEach(o=>i.push(...o)),qr(i,t,n)}function sp(e,t){return e[0]===t[0]&&e[1]===t[1]}function El(e,t,n,i=1){let o=n,r=Math.max(t,.1),s=e[0]&&e[0][0]&&typeof e[0][0]=="number"?[e]:e,a=[0,0];if(o)for(let d of s)qr(d,a,o);let l=ap(s,r,i);if(o){for(let d of s)qr(d,a,-o);rp(l,a,-o)}return l}function ap(e,t,n){let i=[];for(let d of e){let c=[...d];sp(c[0],c[c.length-1])||c.push([c[0][0],c[0][1]]),c.length>2&&i.push(c)}let o=[];t=Math.max(t,.1);let r=[];for(let d of i)for(let c=0;c<d.length-1;c++){let u=d[c],m=d[c+1];if(u[1]!==m[1]){let p=Math.min(u[1],m[1]);r.push({ymin:p,ymax:Math.max(u[1],m[1]),x:p===u[1]?u[0]:m[0],islope:(m[0]-u[0])/(m[1]-u[1])})}}if(r.sort((d,c)=>d.ymin<c.ymin?-1:d.ymin>c.ymin?1:d.x<c.x?-1:d.x>c.x?1:d.ymax===c.ymax?0:(d.ymax-c.ymax)/Math.abs(d.ymax-c.ymax)),!r.length)return o;let s=[],a=r[0].ymin,l=0;for(;s.length||r.length;){if(r.length){let d=-1;for(let u=0;u<r.length&&!(r[u].ymin>a);u++)d=u;r.splice(0,d+1).forEach(u=>{s.push({s:a,edge:u})})}if(s=s.filter(d=>!(d.edge.ymax<=a)),s.sort((d,c)=>d.edge.x===c.edge.x?0:(d.edge.x-c.edge.x)/Math.abs(d.edge.x-c.edge.x)),(n!==1||l%t===0)&&s.length>1)for(let d=0;d<s.length;d=d+2){let c=d+1;if(c>=s.length)break;let u=s[d].edge,m=s[c].edge;o.push([[Math.round(u.x),a],[Math.round(m.x),a]])}a+=n,s.forEach(d=>{d.edge.x=d.edge.x+n*d.edge.islope}),l++}return o}function Ht(e,t){var n;let i=t.hachureAngle+90,o=t.hachureGap;o<0&&(o=t.strokeWidth*4),o=Math.max(o,.1);let r=1;return t.roughness>=1&&(((n=t.randomizer)===null||n===void 0?void 0:n.next())||Math.random())>.7&&(r=o),El(e,o,i,r||1)}var wn=class{constructor(t){this.helper=t}fillPolygons(t,n){return this._fillPolygons(t,n)}_fillPolygons(t,n){let i=Ht(t,n);return{type:"fillSketch",ops:this.renderLines(i,n)}}renderLines(t,n){let i=[];for(let o of t)i.push(...this.helper.doubleLineOps(o[0][0],o[0][1],o[1][0],o[1][1],n));return i}};I();I();function Pn(e){let t=e[0],n=e[1];return Math.sqrt(Math.pow(t[0]-n[0],2)+Math.pow(t[1]-n[1],2))}var So=class extends wn{fillPolygons(t,n){let i=n.hachureGap;i<0&&(i=n.strokeWidth*4),i=Math.max(i,.1);let o=Object.assign({},n,{hachureGap:i}),r=Ht(t,o),s=Math.PI/180*n.hachureAngle,a=[],l=i*.5*Math.cos(s),d=i*.5*Math.sin(s);for(let[u,m]of r)Pn([u,m])&&a.push([[u[0]-l,u[1]+d],[...m]],[[u[0]+l,u[1]-d],[...m]]);return{type:"fillSketch",ops:this.renderLines(a,n)}}};I();var Io=class extends wn{fillPolygons(t,n){let i=this._fillPolygons(t,n),o=Object.assign({},n,{hachureAngle:n.hachureAngle+90}),r=this._fillPolygons(t,o);return i.ops=i.ops.concat(r.ops),i}};I();var Mo=class{constructor(t){this.helper=t}fillPolygons(t,n){n=Object.assign({},n,{hachureAngle:0});let i=Ht(t,n);return this.dotsOnLines(i,n)}dotsOnLines(t,n){let i=[],o=n.hachureGap;o<0&&(o=n.strokeWidth*4),o=Math.max(o,.1);let r=n.fillWeight;r<0&&(r=n.strokeWidth/2);let s=o/4;for(let a of t){let l=Pn(a),d=l/o,c=Math.ceil(d)-1,u=l-c*o,m=(a[0][0]+a[1][0])/2-o/4,p=Math.min(a[0][1],a[1][1]);for(let h=0;h<c;h++){let f=p+u+h*o,g=m-s+Math.random()*2*s,E=f-s+Math.random()*2*s,b=this.helper.ellipse(g,E,r,r,n);i.push(...b.ops)}}return{type:"fillSketch",ops:i}}};I();var To=class{constructor(t){this.helper=t}fillPolygons(t,n){let i=Ht(t,n);return{type:"fillSketch",ops:this.dashedLine(i,n)}}dashedLine(t,n){let i=n.dashOffset<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashOffset,o=n.dashGap<0?n.hachureGap<0?n.strokeWidth*4:n.hachureGap:n.dashGap,r=[];return t.forEach(s=>{let a=Pn(s),l=Math.floor(a/(i+o)),d=(a+o-l*(i+o))/2,c=s[0],u=s[1];c[0]>u[0]&&(c=s[1],u=s[0]);let m=Math.atan((u[1]-c[1])/(u[0]-c[0]));for(let p=0;p<l;p++){let h=p*(i+o),f=h+i,g=[c[0]+h*Math.cos(m)+d*Math.cos(m),c[1]+h*Math.sin(m)+d*Math.sin(m)],E=[c[0]+f*Math.cos(m)+d*Math.cos(m),c[1]+f*Math.sin(m)+d*Math.sin(m)];r.push(...this.helper.doubleLineOps(g[0],g[1],E[0],E[1],n))}}),r}};I();var Ao=class{constructor(t){this.helper=t}fillPolygons(t,n){let i=n.hachureGap<0?n.strokeWidth*4:n.hachureGap,o=n.zigzagOffset<0?i:n.zigzagOffset;n=Object.assign({},n,{hachureGap:i+o});let r=Ht(t,n);return{type:"fillSketch",ops:this.zigzagLines(r,o,n)}}zigzagLines(t,n,i){let o=[];return t.forEach(r=>{let s=Pn(r),a=Math.round(s/(2*n)),l=r[0],d=r[1];l[0]>d[0]&&(l=r[1],d=r[0]);let c=Math.atan((d[1]-l[1])/(d[0]-l[0]));for(let u=0;u<a;u++){let m=u*2*n,p=(u+1)*2*n,h=Math.sqrt(2*Math.pow(n,2)),f=[l[0]+m*Math.cos(c),l[1]+m*Math.sin(c)],g=[l[0]+p*Math.cos(c),l[1]+p*Math.sin(c)],E=[f[0]+h*Math.cos(c+Math.PI/4),f[1]+h*Math.sin(c+Math.PI/4)];o.push(...this.helper.doubleLineOps(f[0],f[1],E[0],E[1],i),...this.helper.doubleLineOps(E[0],E[1],g[0],g[1],i))}}),o}};var ot={};function xl(e,t){let n=e.fillStyle||"hachure";if(!ot[n])switch(n){case"zigzag":ot[n]||(ot[n]=new So(t));break;case"cross-hatch":ot[n]||(ot[n]=new Io(t));break;case"dots":ot[n]||(ot[n]=new Mo(t));break;case"dashed":ot[n]||(ot[n]=new To(t));break;case"zigzag-line":ot[n]||(ot[n]=new Ao(t));break;case"hachure":default:n="hachure",ot[n]||(ot[n]=new wn(t));break}return ot[n]}I();function bl(){return Math.floor(Math.random()*2**31)}var Do=class{constructor(t){this.seed=t}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}};I();I();var vo={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0};function lp(e){let t=new Array;for(;e!=="";)if(e.match(/^([ \t\r\n,]+)/))e=e.substr(RegExp.$1.length);else if(e.match(/^([aAcChHlLmMqQsStTvVzZ])/))t[t.length]={type:0,text:RegExp.$1},e=e.substr(RegExp.$1.length);else if(e.match(/^(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)/))t[t.length]={type:1,text:`${parseFloat(RegExp.$1)}`},e=e.substr(RegExp.$1.length);else return[];return t[t.length]={type:2,text:""},t}function Qr(e,t){return e.type===t}function Ei(e){let t=[],n=lp(e),i="BOD",o=0,r=n[o];for(;!Qr(r,2);){let s=0,a=[];if(i==="BOD")if(r.text==="M"||r.text==="m")o++,s=vo[r.text],i=r.text;else return Ei("M0,0"+e);else Qr(r,1)?s=vo[i]:(o++,s=vo[r.text],i=r.text);if(o+s<n.length){for(let l=o;l<o+s;l++){let d=n[l];if(Qr(d,1))a[a.length]=+d.text;else throw new Error("Param not a number: "+i+","+d.text)}if(typeof vo[i]=="number"){let l={key:i,data:a};t.push(l),o+=s,r=n[o],i==="M"&&(i="L"),i==="m"&&(i="l")}else throw new Error("Bad segment: "+i)}else throw new Error("Path data ended short")}return t}I();function Ui(e){let t=0,n=0,i=0,o=0,r=[];for(let{key:s,data:a}of e)switch(s){case"M":r.push({key:"M",data:[...a]}),[t,n]=a,[i,o]=a;break;case"m":t+=a[0],n+=a[1],r.push({key:"M",data:[t,n]}),i=t,o=n;break;case"L":r.push({key:"L",data:[...a]}),[t,n]=a;break;case"l":t+=a[0],n+=a[1],r.push({key:"L",data:[t,n]});break;case"C":r.push({key:"C",data:[...a]}),t=a[4],n=a[5];break;case"c":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"C",data:l}),t=l[4],n=l[5];break}case"Q":r.push({key:"Q",data:[...a]}),t=a[2],n=a[3];break;case"q":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"Q",data:l}),t=l[2],n=l[3];break}case"A":r.push({key:"A",data:[...a]}),t=a[5],n=a[6];break;case"a":t+=a[5],n+=a[6],r.push({key:"A",data:[a[0],a[1],a[2],a[3],a[4],t,n]});break;case"H":r.push({key:"H",data:[...a]}),t=a[0];break;case"h":t+=a[0],r.push({key:"H",data:[t]});break;case"V":r.push({key:"V",data:[...a]}),n=a[0];break;case"v":n+=a[0],r.push({key:"V",data:[n]});break;case"S":r.push({key:"S",data:[...a]}),t=a[2],n=a[3];break;case"s":{let l=a.map((d,c)=>c%2?d+n:d+t);r.push({key:"S",data:l}),t=l[2],n=l[3];break}case"T":r.push({key:"T",data:[...a]}),t=a[0],n=a[1];break;case"t":t+=a[0],n+=a[1],r.push({key:"T",data:[t,n]});break;case"Z":case"z":r.push({key:"Z",data:[]}),t=i,n=o;break}return r}I();function Xi(e){let t=[],n="",i=0,o=0,r=0,s=0,a=0,l=0;for(let{key:d,data:c}of e){switch(d){case"M":t.push({key:"M",data:[...c]}),[i,o]=c,[r,s]=c;break;case"C":t.push({key:"C",data:[...c]}),i=c[4],o=c[5],a=c[2],l=c[3];break;case"L":t.push({key:"L",data:[...c]}),[i,o]=c;break;case"H":i=c[0],t.push({key:"L",data:[i,o]});break;case"V":o=c[0],t.push({key:"L",data:[i,o]});break;case"S":{let u=0,m=0;n==="C"||n==="S"?(u=i+(i-a),m=o+(o-l)):(u=i,m=o),t.push({key:"C",data:[u,m,...c]}),a=c[0],l=c[1],i=c[2],o=c[3];break}case"T":{let[u,m]=c,p=0,h=0;n==="Q"||n==="T"?(p=i+(i-a),h=o+(o-l)):(p=i,h=o);let f=i+2*(p-i)/3,g=o+2*(h-o)/3,E=u+2*(p-u)/3,b=m+2*(h-m)/3;t.push({key:"C",data:[f,g,E,b,u,m]}),a=p,l=h,i=u,o=m;break}case"Q":{let[u,m,p,h]=c,f=i+2*(u-i)/3,g=o+2*(m-o)/3,E=p+2*(u-p)/3,b=h+2*(m-h)/3;t.push({key:"C",data:[f,g,E,b,p,h]}),a=u,l=m,i=p,o=h;break}case"A":{let u=Math.abs(c[0]),m=Math.abs(c[1]),p=c[2],h=c[3],f=c[4],g=c[5],E=c[6];u===0||m===0?(t.push({key:"C",data:[i,o,g,E,g,E]}),i=g,o=E):(i!==g||o!==E)&&(yl(i,o,g,E,u,m,p,h,f).forEach(function(x){t.push({key:"C",data:x})}),i=g,o=E);break}case"Z":t.push({key:"Z",data:[]}),i=r,o=s;break}n=d}return t}function dp(e){return Math.PI*e/180}function Yi(e,t,n){let i=e*Math.cos(n)-t*Math.sin(n),o=e*Math.sin(n)+t*Math.cos(n);return[i,o]}function yl(e,t,n,i,o,r,s,a,l,d){let c=dp(s),u=[],m=0,p=0,h=0,f=0;if(d)[m,p,h,f]=d;else{[e,t]=Yi(e,t,-c),[n,i]=Yi(n,i,-c);let N=(e-n)/2,k=(t-i)/2,z=N*N/(o*o)+k*k/(r*r);z>1&&(z=Math.sqrt(z),o=z*o,r=z*r);let W=a===l?-1:1,D=o*o,L=r*r,P=D*L-D*k*k-L*N*N,B=D*k*k+L*N*N,C=W*Math.sqrt(Math.abs(P/B));h=C*o*k/r+(e+n)/2,f=C*-r*N/o+(t+i)/2,m=Math.asin(parseFloat(((t-f)/r).toFixed(9))),p=Math.asin(parseFloat(((i-f)/r).toFixed(9))),e<h&&(m=Math.PI-m),n<h&&(p=Math.PI-p),m<0&&(m=Math.PI*2+m),p<0&&(p=Math.PI*2+p),l&&m>p&&(m=m-Math.PI*2),!l&&p>m&&(p=p-Math.PI*2)}let g=p-m;if(Math.abs(g)>Math.PI*120/180){let N=p,k=n,z=i;l&&p>m?p=m+Math.PI*120/180*1:p=m+Math.PI*120/180*-1,n=h+o*Math.cos(p),i=f+r*Math.sin(p),u=yl(n,i,k,z,o,r,s,0,l,[p,N,h,f])}g=p-m;let E=Math.cos(m),b=Math.sin(m),x=Math.cos(p),y=Math.sin(p),w=Math.tan(g/4),S=4/3*o*w,M=4/3*r*w,A=[e,t],T=[e+S*b,t-M*E],G=[n+S*y,i-M*x],v=[n,i];if(T[0]=2*A[0]-T[0],T[1]=2*A[1]-T[1],d)return[T,G,v].concat(u);{u=[T,G,v].concat(u);let N=[];for(let k=0;k<u.length;k+=3){let z=Yi(u[k][0],u[k][1],c),W=Yi(u[k+1][0],u[k+1][1],c),D=Yi(u[k+2][0],u[k+2][1],c);N.push([z[0],z[1],W[0],W[1],D[0],D[1]])}return N}}var cp={randOffset:pp,randOffsetWithRange:fp,ellipse:mp,doubleLineOps:hp};function Jr(e,t,n,i,o){return{type:"path",ops:en(e,t,n,i,o)}}function $i(e,t,n){let i=(e||[]).length;if(i>2){let o=[];for(let r=0;r<i-1;r++)o.push(...en(e[r][0],e[r][1],e[r+1][0],e[r+1][1],n));return t&&o.push(...en(e[i-1][0],e[i-1][1],e[0][0],e[0][1],n)),{type:"path",ops:o}}else if(i===2)return Jr(e[0][0],e[0][1],e[1][0],e[1][1],n);return{type:"path",ops:[]}}function up(e,t){return $i(e,!0,t)}function Ml(e,t,n,i,o){let r=[[e,t],[e+n,t],[e+n,t+i],[e,t+i]];return up(r,o)}function es(e,t){let n=Pl(e,1*(1+t.roughness*.2),t);if(!t.disableMultiStroke){let i=Pl(e,1.5*(1+t.roughness*.22),gp(t));n=n.concat(i)}return{type:"path",ops:n}}function mp(e,t,n,i,o){let r=ts(n,i,o);return ko(e,t,o,r).opset}function ts(e,t,n){let i=Math.sqrt(Math.PI*2*Math.sqrt((Math.pow(e/2,2)+Math.pow(t/2,2))/2)),o=Math.ceil(Math.max(n.curveStepCount,n.curveStepCount/Math.sqrt(200)*i)),r=Math.PI*2/o,s=Math.abs(e/2),a=Math.abs(t/2),l=1-n.curveFitting;return s+=Y(s*l,n),a+=Y(a*l,n),{increment:r,rx:s,ry:a}}function ko(e,t,n,i){let[o,r]=Sl(i.increment,e,t,i.rx,i.ry,1,i.increment*Bo(.1,Bo(.4,1,n),n),n),s=Lo(o,null,n);if(!n.disableMultiStroke&&n.roughness!==0){let[a]=Sl(i.increment,e,t,i.rx,i.ry,1.5,0,n),l=Lo(a,null,n);s=s.concat(l)}return{estimatedPoints:r,opset:{type:"path",ops:s}}}function ns(e,t,n,i,o,r,s,a,l){let d=e,c=t,u=Math.abs(n/2),m=Math.abs(i/2);u+=Y(u*.01,l),m+=Y(m*.01,l);let p=o,h=r;for(;p<0;)p+=Math.PI*2,h+=Math.PI*2;h-p>Math.PI*2&&(p=0,h=Math.PI*2);let f=Math.PI*2/l.curveStepCount,g=Math.min(f/2,(h-p)/2),E=Il(g,d,c,u,m,p,h,1,l);if(!l.disableMultiStroke){let b=Il(g,d,c,u,m,p,h,1.5,l);E.push(...b)}return s&&(a?E.push(...en(d,c,d+u*Math.cos(p),c+m*Math.sin(p),l),...en(d,c,d+u*Math.cos(h),c+m*Math.sin(h),l)):E.push({op:"lineTo",data:[d,c]},{op:"lineTo",data:[d+u*Math.cos(p),c+m*Math.sin(p)]})),{type:"path",ops:E}}function is(e,t){let n=Xi(Ui(Ei(e))),i=[],o=[0,0],r=[0,0];for(let{key:s,data:a}of n)switch(s){case"M":{r=[a[0],a[1]],o=[a[0],a[1]];break}case"L":i.push(...en(r[0],r[1],a[0],a[1],t)),r=[a[0],a[1]];break;case"C":{let[l,d,c,u,m,p]=a;i.push(...Ep(l,d,c,u,m,p,r,t)),r=[m,p];break}case"Z":i.push(...en(r[0],r[1],o[0],o[1],t)),r=[o[0],o[1]];break}return{type:"path",ops:i}}function Co(e,t){let n=[];for(let i of e)if(i.length){let o=t.maxRandomnessOffset||0,r=i.length;if(r>2){n.push({op:"move",data:[i[0][0]+Y(o,t),i[0][1]+Y(o,t)]});for(let s=1;s<r;s++)n.push({op:"lineTo",data:[i[s][0]+Y(o,t),i[s][1]+Y(o,t)]})}}return{type:"fillPath",ops:n}}function Zn(e,t){return xl(t,cp).fillPolygons(e,t)}function Tl(e,t,n,i,o,r,s){let a=e,l=t,d=Math.abs(n/2),c=Math.abs(i/2);d+=Y(d*.01,s),c+=Y(c*.01,s);let u=o,m=r;for(;u<0;)u+=Math.PI*2,m+=Math.PI*2;m-u>Math.PI*2&&(u=0,m=Math.PI*2);let p=(m-u)/s.curveStepCount,h=[];for(let f=u;f<=m;f=f+p)h.push([a+d*Math.cos(f),l+c*Math.sin(f)]);return h.push([a+d*Math.cos(m),l+c*Math.sin(m)]),h.push([a,l]),Zn([h],s)}function pp(e,t){return Y(e,t)}function fp(e,t,n){return Bo(e,t,n)}function hp(e,t,n,i,o){return en(e,t,n,i,o,!0)}function gp(e){let t=Object.assign({},e);return t.randomizer=void 0,e.seed&&(t.seed=e.seed+1),t}function Al(e){return e.randomizer||(e.randomizer=new Do(e.seed||0)),e.randomizer.next()}function Bo(e,t,n,i=1){return n.roughness*i*(Al(n)*(t-e)+e)}function Y(e,t,n=1){return Bo(-e,e,t,n)}function en(e,t,n,i,o,r=!1){let s=r?o.disableMultiStrokeFill:o.disableMultiStroke,a=wl(e,t,n,i,o,!0,!1);if(s)return a;let l=wl(e,t,n,i,o,!0,!0);return a.concat(l)}function wl(e,t,n,i,o,r,s){let a=Math.pow(e-n,2)+Math.pow(t-i,2),l=Math.sqrt(a),d=1;l<200?d=1:l>500?d=.4:d=-.0016668*l+1.233334;let c=o.maxRandomnessOffset||0;c*c*100>a&&(c=l/10);let u=c/2,m=.2+Al(o)*.2,p=o.bowing*o.maxRandomnessOffset*(i-t)/200,h=o.bowing*o.maxRandomnessOffset*(e-n)/200;p=Y(p,o,d),h=Y(h,o,d);let f=[],g=()=>Y(u,o,d),E=()=>Y(c,o,d),b=o.preserveVertices;return r&&(s?f.push({op:"move",data:[e+(b?0:g()),t+(b?0:g())]}):f.push({op:"move",data:[e+(b?0:Y(c,o,d)),t+(b?0:Y(c,o,d))]})),s?f.push({op:"bcurveTo",data:[p+e+(n-e)*m+g(),h+t+(i-t)*m+g(),p+e+2*(n-e)*m+g(),h+t+2*(i-t)*m+g(),n+(b?0:g()),i+(b?0:g())]}):f.push({op:"bcurveTo",data:[p+e+(n-e)*m+E(),h+t+(i-t)*m+E(),p+e+2*(n-e)*m+E(),h+t+2*(i-t)*m+E(),n+(b?0:E()),i+(b?0:E())]}),f}function Pl(e,t,n){let i=[];i.push([e[0][0]+Y(t,n),e[0][1]+Y(t,n)]),i.push([e[0][0]+Y(t,n),e[0][1]+Y(t,n)]);for(let o=1;o<e.length;o++)i.push([e[o][0]+Y(t,n),e[o][1]+Y(t,n)]),o===e.length-1&&i.push([e[o][0]+Y(t,n),e[o][1]+Y(t,n)]);return Lo(i,null,n)}function Lo(e,t,n){let i=e.length,o=[];if(i>3){let r=[],s=1-n.curveTightness;o.push({op:"move",data:[e[1][0],e[1][1]]});for(let a=1;a+2<i;a++){let l=e[a];r[0]=[l[0],l[1]],r[1]=[l[0]+(s*e[a+1][0]-s*e[a-1][0])/6,l[1]+(s*e[a+1][1]-s*e[a-1][1])/6],r[2]=[e[a+1][0]+(s*e[a][0]-s*e[a+2][0])/6,e[a+1][1]+(s*e[a][1]-s*e[a+2][1])/6],r[3]=[e[a+1][0],e[a+1][1]],o.push({op:"bcurveTo",data:[r[1][0],r[1][1],r[2][0],r[2][1],r[3][0],r[3][1]]})}if(t&&t.length===2){let a=n.maxRandomnessOffset;o.push({op:"lineTo",data:[t[0]+Y(a,n),t[1]+Y(a,n)]})}}else i===3?(o.push({op:"move",data:[e[1][0],e[1][1]]}),o.push({op:"bcurveTo",data:[e[1][0],e[1][1],e[2][0],e[2][1],e[2][0],e[2][1]]})):i===2&&o.push(...en(e[0][0],e[0][1],e[1][0],e[1][1],n));return o}function Sl(e,t,n,i,o,r,s,a){let l=a.roughness===0,d=[],c=[];if(l){e=e/4,c.push([t+i*Math.cos(-e),n+o*Math.sin(-e)]);for(let u=0;u<=Math.PI*2;u=u+e){let m=[t+i*Math.cos(u),n+o*Math.sin(u)];d.push(m),c.push(m)}c.push([t+i*Math.cos(0),n+o*Math.sin(0)]),c.push([t+i*Math.cos(e),n+o*Math.sin(e)])}else{let u=Y(.5,a)-Math.PI/2;c.push([Y(r,a)+t+.9*i*Math.cos(u-e),Y(r,a)+n+.9*o*Math.sin(u-e)]);let m=Math.PI*2+u-.01;for(let p=u;p<m;p=p+e){let h=[Y(r,a)+t+i*Math.cos(p),Y(r,a)+n+o*Math.sin(p)];d.push(h),c.push(h)}c.push([Y(r,a)+t+i*Math.cos(u+Math.PI*2+s*.5),Y(r,a)+n+o*Math.sin(u+Math.PI*2+s*.5)]),c.push([Y(r,a)+t+.98*i*Math.cos(u+s),Y(r,a)+n+.98*o*Math.sin(u+s)]),c.push([Y(r,a)+t+.9*i*Math.cos(u+s*.5),Y(r,a)+n+.9*o*Math.sin(u+s*.5)])}return[c,d]}function Il(e,t,n,i,o,r,s,a,l){let d=r+Y(.1,l),c=[];c.push([Y(a,l)+t+.9*i*Math.cos(d-e),Y(a,l)+n+.9*o*Math.sin(d-e)]);for(let u=d;u<=s;u=u+e)c.push([Y(a,l)+t+i*Math.cos(u),Y(a,l)+n+o*Math.sin(u)]);return c.push([t+i*Math.cos(s),n+o*Math.sin(s)]),c.push([t+i*Math.cos(s),n+o*Math.sin(s)]),Lo(c,null,l)}function Ep(e,t,n,i,o,r,s,a){let l=[],d=[a.maxRandomnessOffset||1,(a.maxRandomnessOffset||1)+.3],c=[0,0],u=a.disableMultiStroke?1:2,m=a.preserveVertices;for(let p=0;p<u;p++)p===0?l.push({op:"move",data:[s[0],s[1]]}):l.push({op:"move",data:[s[0]+(m?0:Y(d[0],a)),s[1]+(m?0:Y(d[0],a))]}),c=m?[o,r]:[o+Y(d[p],a),r+Y(d[p],a)],l.push({op:"bcurveTo",data:[e+Y(d[p],a),t+Y(d[p],a),n+Y(d[p],a),i+Y(d[p],a),c[0],c[1]]});return l}I();function ji(e){return[...e]}function No(e,t=0){let n=e.length;if(n<3)throw new Error("A curve must have at least three points.");let i=[];if(n===3)i.push(ji(e[0]),ji(e[1]),ji(e[2]),ji(e[2]));else{let o=[];o.push(e[0],e[0]);for(let a=1;a<e.length;a++)o.push(e[a]),a===e.length-1&&o.push(e[a]);let r=[],s=1-t;i.push(ji(o[0]));for(let a=1;a+2<o.length;a++){let l=o[a];r[0]=[l[0],l[1]],r[1]=[l[0]+(s*o[a+1][0]-s*o[a-1][0])/6,l[1]+(s*o[a+1][1]-s*o[a-1][1])/6],r[2]=[o[a+1][0]+(s*o[a][0]-s*o[a+2][0])/6,o[a+1][1]+(s*o[a][1]-s*o[a+2][1])/6],r[3]=[o[a+1][0],o[a+1][1]],i.push(r[1],r[2],r[3])}}return i}I();function xp(e,t){return Math.sqrt(Go(e,t))}function Go(e,t){return Math.pow(e[0]-t[0],2)+Math.pow(e[1]-t[1],2)}function bp(e,t,n){let i=Go(t,n);if(i===0)return Go(e,t);let o=((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/i;return o=Math.max(0,Math.min(1,o)),Go(e,qn(t,n,o))}function qn(e,t,n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n]}function yp(e,t){let n=e[t+0],i=e[t+1],o=e[t+2],r=e[t+3],s=3*i[0]-2*n[0]-r[0];s*=s;let a=3*i[1]-2*n[1]-r[1];a*=a;let l=3*o[0]-2*r[0]-n[0];l*=l;let d=3*o[1]-2*r[1]-n[1];return d*=d,s<l&&(s=l),a<d&&(a=d),s+a}function os(e,t,n,i){let o=i||[];if(yp(e,t)<n){let r=e[t+0];o.length?xp(o[o.length-1],r)>1&&o.push(r):o.push(r),o.push(e[t+3])}else{let s=e[t+0],a=e[t+1],l=e[t+2],d=e[t+3],c=qn(s,a,.5),u=qn(a,l,.5),m=qn(l,d,.5),p=qn(c,u,.5),h=qn(u,m,.5),f=qn(p,h,.5);os([s,c,p,f],0,n,o),os([f,h,m,d],0,n,o)}return o}function Sn(e,t){return Oo(e,0,e.length,t)}function Oo(e,t,n,i,o){let r=o||[],s=e[t],a=e[n-1],l=0,d=1;for(let c=t+1;c<n-1;++c){let u=bp(e[c],s,a);u>l&&(l=u,d=c)}return Math.sqrt(l)>i?(Oo(e,t,d+1,i,r),Oo(e,d,n,i,r)):(r.length||r.push(s),r.push(a)),r}function Mt(e,t=.15,n){let i=[],o=(e.length-1)/3;for(let r=0;r<o;r++){let s=r*3;os(e,s,t,i)}return n&&n>0?Oo(i,0,i.length,n):i}I();function Dl(e,t,n){let i=Ei(e),o=Xi(Ui(i)),r=[],s=[],a=[0,0],l=[],d=()=>{l.length>=4&&s.push(...Mt(l,t)),l=[]},c=()=>{d(),s.length&&(r.push(s),s=[])};for(let{key:m,data:p}of o)switch(m){case"M":c(),a=[p[0],p[1]],s.push(a);break;case"L":d(),s.push([p[0],p[1]]);break;case"C":if(!l.length){let h=s.length?s[s.length-1]:a;l.push([h[0],h[1]])}l.push([p[0],p[1]]),l.push([p[2],p[3]]),l.push([p[4],p[5]]);break;case"Z":d(),s.push([a[0],a[1]]);break}if(c(),!n)return r;let u=[];for(let m of r){let p=Sn(m,n);p.length&&u.push(p)}return u}var ft="none",yt=class{constructor(t){this.defaultOptions={maxRandomnessOffset:2,roughness:1,bowing:1,stroke:"#000",strokeWidth:1,curveTightness:0,curveFitting:.95,curveStepCount:9,fillStyle:"hachure",fillWeight:-1,hachureAngle:-41,hachureGap:-1,dashOffset:-1,dashGap:-1,zigzagOffset:-1,seed:0,disableMultiStroke:!1,disableMultiStrokeFill:!1,preserveVertices:!1,fillShapeRoughnessGain:.8},this.config=t||{},this.config.options&&(this.defaultOptions=this._o(this.config.options))}static newSeed(){return bl()}_o(t){return t?Object.assign({},this.defaultOptions,t):this.defaultOptions}_d(t,n,i){return{shape:t,sets:n||[],options:i||this.defaultOptions}}line(t,n,i,o,r){let s=this._o(r);return this._d("line",[Jr(t,n,i,o,s)],s)}rectangle(t,n,i,o,r){let s=this._o(r),a=[],l=Ml(t,n,i,o,s);if(s.fill){let d=[[t,n],[t+i,n],[t+i,n+o],[t,n+o]];s.fillStyle==="solid"?a.push(Co([d],s)):a.push(Zn([d],s))}return s.stroke!==ft&&a.push(l),this._d("rectangle",a,s)}ellipse(t,n,i,o,r){let s=this._o(r),a=[],l=ts(i,o,s),d=ko(t,n,s,l);if(s.fill)if(s.fillStyle==="solid"){let c=ko(t,n,s,l).opset;c.type="fillPath",a.push(c)}else a.push(Zn([d.estimatedPoints],s));return s.stroke!==ft&&a.push(d.opset),this._d("ellipse",a,s)}circle(t,n,i,o){let r=this.ellipse(t,n,i,i,o);return r.shape="circle",r}linearPath(t,n){let i=this._o(n);return this._d("linearPath",[$i(t,!1,i)],i)}arc(t,n,i,o,r,s,a=!1,l){let d=this._o(l),c=[],u=ns(t,n,i,o,r,s,a,!0,d);if(a&&d.fill)if(d.fillStyle==="solid"){let m=Object.assign({},d);m.disableMultiStroke=!0;let p=ns(t,n,i,o,r,s,!0,!1,m);p.type="fillPath",c.push(p)}else c.push(Tl(t,n,i,o,r,s,d));return d.stroke!==ft&&c.push(u),this._d("arc",c,d)}curve(t,n){let i=this._o(n),o=[],r=es(t,i);if(i.fill&&i.fill!==ft&&t.length>=3)if(i.fillStyle==="solid"){let s=es(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(s.ops)})}else{let s=No(t),a=Mt(s,10,(1+i.roughness)/2);o.push(Zn([a],i))}return i.stroke!==ft&&o.push(r),this._d("curve",o,i)}polygon(t,n){let i=this._o(n),o=[],r=$i(t,!0,i);return i.fill&&(i.fillStyle==="solid"?o.push(Co([t],i)):o.push(Zn([t],i))),i.stroke!==ft&&o.push(r),this._d("polygon",o,i)}path(t,n){let i=this._o(n),o=[];if(!t)return this._d("path",o,i);t=(t||"").replace(/\n/g," ").replace(/(-\s)/g,"-").replace("/(ss)/g"," ");let r=i.fill&&i.fill!=="transparent"&&i.fill!==ft,s=i.stroke!==ft,a=!!(i.simplification&&i.simplification<1),l=a?4-4*(i.simplification||1):(1+i.roughness)/2,d=Dl(t,1,l),c=is(t,i);if(r)if(i.fillStyle==="solid")if(d.length===1){let u=is(t,Object.assign(Object.assign({},i),{disableMultiStroke:!0,roughness:i.roughness?i.roughness+i.fillShapeRoughnessGain:0}));o.push({type:"fillPath",ops:this._mergedShape(u.ops)})}else o.push(Co(d,i));else o.push(Zn(d,i));return s&&(a?d.forEach(u=>{o.push($i(u,!1,i))}):o.push(c)),this._d("path",o,i)}opsToPath(t,n){let i="";for(let o of t.ops){let r=typeof n=="number"&&n>=0?o.data.map(s=>+s.toFixed(n)):o.data;switch(o.op){case"move":i+=`M${r[0]} ${r[1]} `;break;case"bcurveTo":i+=`C${r[0]} ${r[1]}, ${r[2]} ${r[3]}, ${r[4]} ${r[5]} `;break;case"lineTo":i+=`L${r[0]} ${r[1]} `;break}}return i.trim()}toPaths(t){let n=t.sets||[],i=t.options||this.defaultOptions,o=[];for(let r of n){let s=null;switch(r.type){case"path":s={d:this.opsToPath(r),stroke:i.stroke,strokeWidth:i.strokeWidth,fill:ft};break;case"fillPath":s={d:this.opsToPath(r),stroke:ft,strokeWidth:0,fill:i.fill||ft};break;case"fillSketch":s=this.fillSketch(r,i);break}s&&o.push(s)}return o}fillSketch(t,n){let i=n.fillWeight;return i<0&&(i=n.strokeWidth/2),{d:this.opsToPath(t),stroke:n.fill||ft,strokeWidth:i,fill:ft}}_mergedShape(t){return t.filter((n,i)=>i===0?!0:n.op!=="move")}};var Fo=class{constructor(t,n){this.canvas=t,this.ctx=this.canvas.getContext("2d"),this.gen=new yt(n)}draw(t){let n=t.sets||[],i=t.options||this.getDefaultOptions(),o=this.ctx,r=t.options.fixedDecimalPlaceDigits;for(let s of n)switch(s.type){case"path":o.save(),o.strokeStyle=i.stroke==="none"?"transparent":i.stroke,o.lineWidth=i.strokeWidth,i.strokeLineDash&&o.setLineDash(i.strokeLineDash),i.strokeLineDashOffset&&(o.lineDashOffset=i.strokeLineDashOffset),this._drawToContext(o,s,r),o.restore();break;case"fillPath":{o.save(),o.fillStyle=i.fill||"";let a=t.shape==="curve"||t.shape==="polygon"||t.shape==="path"?"evenodd":"nonzero";this._drawToContext(o,s,r,a),o.restore();break}case"fillSketch":this.fillSketch(o,s,i);break}}fillSketch(t,n,i){let o=i.fillWeight;o<0&&(o=i.strokeWidth/2),t.save(),i.fillLineDash&&t.setLineDash(i.fillLineDash),i.fillLineDashOffset&&(t.lineDashOffset=i.fillLineDashOffset),t.strokeStyle=i.fill||"",t.lineWidth=o,this._drawToContext(t,n,i.fixedDecimalPlaceDigits),t.restore()}_drawToContext(t,n,i,o="nonzero"){t.beginPath();for(let r of n.ops){let s=typeof i=="number"&&i>=0?r.data.map(a=>+a.toFixed(i)):r.data;switch(r.op){case"move":t.moveTo(s[0],s[1]);break;case"bcurveTo":t.bezierCurveTo(s[0],s[1],s[2],s[3],s[4],s[5]);break;case"lineTo":t.lineTo(s[0],s[1]);break}}n.type==="fillPath"?t.fill(o):t.stroke()}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}line(t,n,i,o,r){let s=this.gen.line(t,n,i,o,r);return this.draw(s),s}rectangle(t,n,i,o,r){let s=this.gen.rectangle(t,n,i,o,r);return this.draw(s),s}ellipse(t,n,i,o,r){let s=this.gen.ellipse(t,n,i,o,r);return this.draw(s),s}circle(t,n,i,o){let r=this.gen.circle(t,n,i,o);return this.draw(r),r}linearPath(t,n){let i=this.gen.linearPath(t,n);return this.draw(i),i}polygon(t,n){let i=this.gen.polygon(t,n);return this.draw(i),i}arc(t,n,i,o,r,s,a=!1,l){let d=this.gen.arc(t,n,i,o,r,s,a,l);return this.draw(d),d}curve(t,n){let i=this.gen.curve(t,n);return this.draw(i),i}path(t,n){let i=this.gen.path(t,n);return this.draw(i),i}};I();I();var Vi="http://www.w3.org/2000/svg";var Ro=class{constructor(t,n){this.svg=t,this.gen=new yt(n)}draw(t){let n=t.sets||[],i=t.options||this.getDefaultOptions(),o=this.svg.ownerDocument||window.document,r=o.createElementNS(Vi,"g"),s=t.options.fixedDecimalPlaceDigits;for(let a of n){let l=null;switch(a.type){case"path":{l=o.createElementNS(Vi,"path"),l.setAttribute("d",this.opsToPath(a,s)),l.setAttribute("stroke",i.stroke),l.setAttribute("stroke-width",i.strokeWidth+""),l.setAttribute("fill","none"),i.strokeLineDash&&l.setAttribute("stroke-dasharray",i.strokeLineDash.join(" ").trim()),i.strokeLineDashOffset&&l.setAttribute("stroke-dashoffset",`${i.strokeLineDashOffset}`);break}case"fillPath":{l=o.createElementNS(Vi,"path"),l.setAttribute("d",this.opsToPath(a,s)),l.setAttribute("stroke","none"),l.setAttribute("stroke-width","0"),l.setAttribute("fill",i.fill||""),(t.shape==="curve"||t.shape==="polygon")&&l.setAttribute("fill-rule","evenodd");break}case"fillSketch":{l=this.fillSketch(o,a,i);break}}l&&r.appendChild(l)}return r}fillSketch(t,n,i){let o=i.fillWeight;o<0&&(o=i.strokeWidth/2);let r=t.createElementNS(Vi,"path");return r.setAttribute("d",this.opsToPath(n,i.fixedDecimalPlaceDigits)),r.setAttribute("stroke",i.fill||""),r.setAttribute("stroke-width",o+""),r.setAttribute("fill","none"),i.fillLineDash&&r.setAttribute("stroke-dasharray",i.fillLineDash.join(" ").trim()),i.fillLineDashOffset&&r.setAttribute("stroke-dashoffset",`${i.fillLineDashOffset}`),r}get generator(){return this.gen}getDefaultOptions(){return this.gen.defaultOptions}opsToPath(t,n){return this.gen.opsToPath(t,n)}line(t,n,i,o,r){let s=this.gen.line(t,n,i,o,r);return this.draw(s)}rectangle(t,n,i,o,r){let s=this.gen.rectangle(t,n,i,o,r);return this.draw(s)}ellipse(t,n,i,o,r){let s=this.gen.ellipse(t,n,i,o,r);return this.draw(s)}circle(t,n,i,o){let r=this.gen.circle(t,n,i,o);return this.draw(r)}linearPath(t,n){let i=this.gen.linearPath(t,n);return this.draw(i)}polygon(t,n){let i=this.gen.polygon(t,n);return this.draw(i)}arc(t,n,i,o,r,s,a=!1,l){let d=this.gen.arc(t,n,i,o,r,s,a,l);return this.draw(d)}curve(t,n){let i=this.gen.curve(t,n);return this.draw(i)}path(t,n){let i=this.gen.path(t,n);return this.draw(i)}};var xi={canvas(e,t){return new Fo(e,t)},svg(e,t){return new Ro(e,t)},generator(e){return new yt(e)},newSeed(){return yt.newSeed()}};import{arrayToMap as fu,invariant as La,rescalePoints as du,sizeOf as BE}from"@excalidraw/common";import{degreesToRadians as Ba,lineSegment as Se,pointFrom as F,pointFromArray as hu,pointRotateRads as le}from"@excalidraw/math";I();import{invariant as wp}from"@excalidraw/common";import{curve as Pp,lineSegment as Sp,pointFrom as Ee,pointDistance as tP,pointFromArray as Ip,pointFromVector as Mp,pointRotateRads as Tt,polygon as vl,polygonFromPoints as rs,PRECISION as nP,segmentsIntersectAt as iP,vector as Tp,vectorAdd as Ap,vectorFromPoint as Dp,vectorScale as oP}from"@excalidraw/math";import{getElementAbsoluteCoords as sP}from"@excalidraw/element";var Bl=e=>{let{angle:t,width:n,height:i,x:o,y:r}=e,s=o+n/2,a=r+i/2,l=Ee(s,a),d;return e.type==="diamond"?d=vl(Tt(Ee(s,r),l,t),Tt(Ee(o+n,a),l,t),Tt(Ee(s,r+i),l,t),Tt(Ee(o,a),l,t)):d=vl(Tt(Ee(o,r),l,t),Tt(Ee(o+n,r),l,t),Tt(Ee(o+n,r+i),l,t),Tt(Ee(o,r+i),l,t)),{type:"polygon",data:d}};var Ll=e=>{let{width:t,height:n,angle:i,x:o,y:r}=e;return{type:"ellipse",data:{center:Ee(o+t/2,r+n/2),angle:i,halfWidth:t/2,halfHeight:n/2}}},tn=e=>{if(!e)return[];for(let t of e.sets)if(t.type==="path")return t.ops;return e.sets[0].ops},kl=(e,t=Ee(0,0),n,i)=>{let o=l=>Tt(Ee(l[0]+t[0],l[1]+t[1]),i,n),r=tn(e),s=[],a=Ee(0,0);for(let l of r){if(l.op==="move"){let d=Ip(l.data);wp(d!=null,"Ops data is not a point"),a=o(d)}if(l.op==="bcurveTo"){let d=o(Ee(l.data[0],l.data[1])),c=o(Ee(l.data[2],l.data[3])),u=o(Ee(l.data[4],l.data[5]));s.push(Pp(a,d,c,u)),a=u}}return{type:"polycurve",data:s}},vp=e=>{let t=e[0],n=[];for(let i=1;i<e.length;i++){let o=e[i];n.push(Sp(t,o)),t=o}return n},Cl=(e,t,n=!1)=>{let i=r=>Tt(Mp(Ap(Dp(r),Tp(e.x,e.y))),t,e.angle),o=vp(e.points.map(r=>i(r)));return n?{type:"polygon",data:rs(o.flat())}:{type:"polyline",data:o}},Nl=(e,t,n=Ee(0,0),i,o)=>{let r=c=>Tt(Ee(c[0]+n[0],c[1]+n[1]),o,i);if(e.roundness===null)return{type:"polygon",data:rs(e.points.map(c=>r(c)))};let s=tn(t),a=[],l=!1;for(let c of s)c.op==="move"?(l=!l,l&&a.push(Ee(c.data[0],c.data[1]))):c.op==="bcurveTo"?l&&(a.push(Ee(c.data[0],c.data[1])),a.push(Ee(c.data[2],c.data[3])),a.push(Ee(c.data[4],c.data[5]))):c.op==="lineTo"&&l&&a.push(Ee(c.data[0],c.data[1]));let d=Mt(a,10,5).map(c=>r(c));return{type:"polygon",data:rs(d)}};I();I();function Gl(e,t,n,i=o=>o){return e*i(.5-t*(.5-n))}function Bp(e){return[-e[0],-e[1]]}function Dt(e,t){return[e[0]+t[0],e[1]+t[1]]}function wt(e,t){return[e[0]-t[0],e[1]-t[1]]}function At(e,t){return[e[0]*t,e[1]*t]}function Lp(e,t){return[e[0]/t,e[1]/t]}function Ki(e){return[e[1],-e[0]]}function Ol(e,t){return e[0]*t[0]+e[1]*t[1]}function kp(e,t){return e[0]===t[0]&&e[1]===t[1]}function Cp(e){return Math.hypot(e[0],e[1])}function Np(e){return e[0]*e[0]+e[1]*e[1]}function Fl(e,t){return Np(wt(e,t))}function _l(e){return Lp(e,Cp(e))}function Gp(e,t){return Math.hypot(e[1]-t[1],e[0]-t[0])}function Zi(e,t,n){let i=Math.sin(n),o=Math.cos(n),r=e[0]-t[0],s=e[1]-t[1],a=r*o-s*i,l=r*i+s*o;return[a+t[0],l+t[1]]}function ss(e,t,n){return Dt(e,At(wt(t,e),n))}function Rl(e,t,n){return Dt(e,At(t,n))}var{min:bi,PI:Op}=Math,zl=.275,qi=Op+1e-4;function Fp(e,t={}){let{size:n=16,smoothing:i=.5,thinning:o=.5,simulatePressure:r=!0,easing:s=L=>L,start:a={},end:l={},last:d=!1}=t,{cap:c=!0,easing:u=L=>L*(2-L)}=a,{cap:m=!0,easing:p=L=>--L*L*L+1}=l;if(e.length===0||n<=0)return[];let h=e[e.length-1].runningLength,f=a.taper===!1?0:a.taper===!0?Math.max(n,h):a.taper,g=l.taper===!1?0:l.taper===!0?Math.max(n,h):l.taper,E=Math.pow(n*i,2),b=[],x=[],y=e.slice(0,10).reduce((L,P)=>{let B=P.pressure;if(r){let C=bi(1,P.distance/n),_=bi(1,1-C);B=bi(1,L+(_-L)*(C*zl))}return(L+B)/2},e[0].pressure),w=Gl(n,o,e[e.length-1].pressure,s),S,M=e[0].vector,A=e[0].point,T=A,G=A,v=T,N=!1;for(let L=0;L<e.length;L++){let{pressure:P}=e[L],{point:B,vector:C,distance:_,runningLength:ee}=e[L];if(L<e.length-1&&h-ee<3)continue;if(o){if(r){let pe=bi(1,_/n),re=bi(1,1-pe);P=bi(1,y+(re-y)*(pe*zl))}w=Gl(n,o,P,s)}else w=n/2;S===void 0&&(S=w);let ne=ee<f?u(ee/f):1,ie=h-ee<g?p((h-ee)/g):1;w=Math.max(.01,w*Math.min(ne,ie));let oe=(L<e.length-1?e[L+1]:e[L]).vector,De=L<e.length-1?Ol(C,oe):1,zt=Ol(C,M)<0&&!N,_t=De!==null&&De<0;if(zt||_t){let pe=At(Ki(M),w);for(let re=1/13,Ne=0;Ne<=1;Ne+=re)G=Zi(wt(B,pe),B,qi*Ne),b.push(G),v=Zi(Dt(B,pe),B,qi*-Ne),x.push(v);A=G,T=v,_t&&(N=!0);continue}if(N=!1,L===e.length-1){let pe=At(Ki(C),w);b.push(wt(B,pe)),x.push(Dt(B,pe));continue}let yn=At(Ki(ss(oe,C,De)),w);G=wt(B,yn),(L<=1||Fl(A,G)>E)&&(b.push(G),A=G),v=Dt(B,yn),(L<=1||Fl(T,v)>E)&&(x.push(v),T=v),y=P,M=C}let k=e[0].point.slice(0,2),z=e.length>1?e[e.length-1].point.slice(0,2):Dt(e[0].point,[1,1]),W=[],D=[];if(e.length===1){if(!(f||g)||d){let L=Rl(k,_l(Ki(wt(k,z))),-(S||w)),P=[];for(let B=1/13,C=B;C<=1;C+=B)P.push(Zi(L,k,qi*2*C));return P}}else{if(!(f||g&&e.length===1))if(c)for(let P=1/13,B=P;B<=1;B+=P){let C=Zi(x[0],k,qi*B);W.push(C)}else{let P=wt(b[0],x[0]),B=At(P,.5),C=At(P,.51);W.push(wt(k,B),wt(k,C),Dt(k,C),Dt(k,B))}let L=Ki(Bp(e[e.length-1].vector));if(g||f&&e.length===1)D.push(z);else if(m){let P=Rl(z,L,w);for(let B=1/29,C=B;C<1;C+=B)D.push(Zi(P,z,qi*3*C))}else D.push(Dt(z,At(L,w)),Dt(z,At(L,w*.99)),wt(z,At(L,w*.99)),wt(z,At(L,w)))}return b.concat(D,x.reverse(),W)}function as(e,t={}){var n;let{streamline:i=.5,size:o=16,last:r=!1}=t;if(e.length===0)return[];let s=.15+(1-i)*.85,a=Array.isArray(e[0])?e:e.map(({x:p,y:h,pressure:f=.5})=>[p,h,f]);if(a.length===2){let p=a[1];a=a.slice(0,-1);for(let h=1;h<5;h++)a.push(ss(a[0],p,h/4))}a.length===1&&(a=[...a,[...Dt(a[0],[1,1]),...a[0].slice(2)]]);let l=[{point:[a[0][0],a[0][1]],pressure:a[0][2]>=0?a[0][2]:.25,vector:[1,1],distance:0,runningLength:0}],d=!1,c=0,u=l[0],m=a.length-1;for(let p=1;p<a.length;p++){let h=r&&p===m?a[p].slice(0,2):ss(u.point,a[p],s);if(kp(u.point,h))continue;let f=Gp(h,u.point);if(c+=f,p<m&&!d){if(c<o)continue;d=!0}u={point:h,pressure:a[p][2]>=0?a[p][2]:.5,vector:_l(wt(u.point,h)),distance:f,runningLength:c},l.push(u)}return l[0].vector=((n=l[1])==null?void 0:n.vector)||[0,0],l}function Hl(e,t={}){return Fp(as(e,t),t)}I();I();I();function xe([e,t,n],[i,o,r]){return[e+i,t+o,n+r]}function yi([e,t,n],[i,o,r]){return[e-i,t-o,n-r]}function Te([e,t,n],i){return[e*i,t*i,n*i]}function Jn([e,t,n]){return[e/Math.sqrt(e**2+t**2),t/Math.sqrt(e**2+t**2),n]}function Oe([e,t,n],i){return[Math.cos(i)*e-Math.sin(i)*t,Math.sin(i)*e+Math.cos(i)*t,n]}function Wl(e,t,n){return xe(e,Te(yi(t,e),n))}function ls(e,t,n){return Math.atan2(n[1]-e[1],n[0]-e[0])-Math.atan2(t[1]-e[1],t[0]-e[0])}function ds(e){return Math.atan2(Math.sin(e),Math.cos(e))}function cs([e,t]){return Math.sqrt(e**2+t**2)}function Qn([e,t],[n,i]){return Math.sqrt((n-e)**2+(i-t)**2)}function Ul(e){if(e.length<2)return 0;let t=0;for(let n=1;n<=e.length-1;n++)t+=Qn(e[n-1],e[n]);return t+=Qn(e[e.length-2],e[e.length-1]),t}var Rp=(e,t,n)=>Math.max(t,Math.min(n,e));function Yl(e,t,n){let i=Qn(t,n);if(i===0)return Qn(e,t);let o=Rp(((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/i**2,0,1),r=[t[0]+o*(n[0]-t[0]),t[1]+o*(n[1]-t[1]),e[2]];return Qn(r,e)}I();function Qi(e,t){if(t===0||e.length<=2)return e;let n=e[0],i=e[e.length-1],[o,r]=e.reduce(([s,a],l,d)=>{let c=Yl(l,n,i);return c>s?[c,d]:[s,a]},[0,-1]);if(o>=t){let s=e[r];return[...Qi([n,...e.slice(1,r),s],t).slice(0,-1),s,...Qi([s,...e.slice(r,-1),i],t).slice(1)]}return[n,i]}var zo=class e{static defaults={size:2,streamline:.45,simplify:.1,simplifyPhase:"output",keepHead:!1,sizeMapping:()=>1};static constants={cornerDetectionMaxAngle:75,cornerDetectionVariance:t=>t>35?.5:1,maxTailLength:50};options;constructor(t){this.options=Object.assign({},e.defaults,t)}originalPoints=[];stablePoints=[];tailPoints=[];isFresh=!0;get lastPoint(){return this.tailPoints[this.tailPoints.length-1]??this.stablePoints[this.stablePoints.length-1]}addPoint(t){let n=this.originalPoints[this.originalPoints.length-1];if(!(n&&n[0]===t[0]&&n[1]===t[1])){if(this.originalPoints.push(t),this.isFresh){this.isFresh=!1,this.stablePoints.push(t);return}this.options.streamline>0&&(t=Wl(this.lastPoint,t,1-this.options.streamline)),this.tailPoints.push(t),Ul(this.tailPoints)>e.constants.maxTailLength&&this.stabilizeTail()}}close(){this.stabilizeTail()}stabilizeTail(){if(this.options.simplify>0&&this.options.simplifyPhase==="tail")throw new Error("Not implemented yet");this.stablePoints.push(...this.tailPoints),this.tailPoints=[]}getSize(t,n,i,o,r){return(t??this.options.size)*this.options.sizeMapping({pressure:n,runningLength:r,currentIndex:i,totalLength:o})}getStrokeOutline(t){if(this.isFresh)return[];let n=[...this.stablePoints,...this.tailPoints];this.options.simplify>0&&this.options.simplifyPhase==="input"&&(n=Qi(n,this.options.simplify));let i=n.length;if(i===0)return[];if(i===1){let M=n[0],A=this.getSize(t,M[2],0,i,0);if(A<.5)return[];let T=[];for(let G=0;G<=Math.PI*2;G+=Math.PI/16)T.push(xe(M,Te(Oe([1,0,0],G),A)));return T.push(xe(M,Te([1,0,0],this.getSize(t,M[2],0,i,0)))),T}if(i===2){let M=n[0],A=n[1],T=this.getSize(t,M[2],0,i,0),G=this.getSize(t,A[2],0,i,0);if(T<.5||G<.5)return[];let v=[],N=ls(M,[M[0],M[1]-100,M[2]],A);for(let k=N;k<=Math.PI+N;k+=Math.PI/16)v.push(xe(M,Te(Oe([1,0,0],k),T)));for(let k=Math.PI+N;k<=Math.PI*2+N;k+=Math.PI/16)v.push(xe(A,Te(Oe([1,0,0],k),G)));return v.push(v[0]),v}let o=[],r=[],s=0,a=0,l=0,d=0;for(let M=1;M<i-1;M++){let A=n[M-1],T=n[M],G=n[M+1],v=T[2],N=Qn(A,T);d+=N,s=a+(N-a)*.2;let k=this.getSize(t,v,M,i,d);if(k===0){l=M+1;continue}let z=Jn(yi(A,T)),W=Jn(yi(G,T)),D=Oe(z,Math.PI/2),L=Oe(z,-Math.PI/2),P=Oe(W,Math.PI/2),B=Oe(W,-Math.PI/2),C=xe(T,Te(D,k)),_=xe(T,Te(L,k)),ee=xe(T,Te(P,k)),ne=xe(T,Te(B,k)),ie=xe(D,B),oe=xe(L,P),De=xe(T,Te(cs(ie)===0?z:Jn(ie),k)),zt=xe(T,Te(cs(oe)===0?W:Jn(oe),k)),_t=ds(ls(T,A,G)),yn=e.constants.cornerDetectionMaxAngle/180*Math.PI*e.constants.cornerDetectionVariance(s);if(Math.abs(_t)<yn){let pe=Math.abs(ds(Math.PI-_t));if(pe===0)continue;if(_t<0){r.push(_,zt);for(let re=0;re<=pe;re+=pe/4)o.push(xe(T,Oe(Te(D,k),re)));for(let re=pe;re>=0;re-=pe/4)r.push(xe(T,Oe(Te(D,k),re)));r.push(zt,ee)}else{o.push(C,De);for(let re=0;re<=pe;re+=pe/4)r.push(xe(T,Oe(Te(D,-k),-re)));for(let re=pe;re>=0;re-=pe/4)o.push(xe(T,Oe(Te(D,-k),-re)));o.push(De,ne)}}else o.push(De),r.push(zt);a=s}if(l>=i-2){if(this.options.keepHead){let M=n[i-1],A=[];for(let T=0;T<=Math.PI*2;T+=Math.PI/16)A.push(xe(M,Te(Oe([1,0,0],T),this.options.size)));return A.push(xe(M,Te([1,0,0],this.options.size))),A}return[]}let c=n[l],u=n[l+1],m=n[i-2],p=n[i-1],h=Jn(yi(u,c)),f=Jn(yi(m,p)),g=Oe(h,-Math.PI/2),E=Oe(f,Math.PI/2),b=this.getSize(t,c[2],0,i,0),x=[],y=this.options.keepHead?this.options.size:this.getSize(t,m[2],i-2,i,d),w=[];if(b>.1){for(let M=0;M<=Math.PI;M+=Math.PI/16)x.unshift(xe(c,Oe(Te(g,b),-M)));x.unshift(xe(c,Te(g,-b)))}else x.push(c);for(let M=0;M<=Math.PI*3;M+=Math.PI/16)w.push(xe(p,Oe(Te(E,-y),-M)));let S=[...x,...o,...w.reverse(),...r.reverse()];return x.length>0&&S.push(x[0]),this.options.simplify>0&&this.options.simplifyPhase==="output"?Qi(S,this.options.simplify):S}};import{pointFrom as Pe,pointDistance as tu,pointRotateRads as pn}from"@excalidraw/math";import{ROUGHNESS as fE,THEME as Da,isTransparent as Eo,assertNever as hE,COLOR_PALETTE as gE,LINE_POLYGON_POINT_MERGE_DISTANCE as EE,applyDarkModeFilter as xo,DEFAULT_STROKE_STREAMLINE as xE}from"@excalidraw/common";I();import{isRightAngleRads as qg,lineSegment as jc,pointFrom as Sr,pointRotateRads as Pa}from"@excalidraw/math";import{BOUND_TEXT_PADDING as Un,DEFAULT_REDUCED_GLOBAL_ALPHA as Qg,ELEMENT_READY_TO_ERASE_OPACITY as Jg,FRAME_STYLE as Ir,DARK_THEME_FILTER as eE,MIME_TYPES as Ta,THEME as mn,distance as Yn,getFontString as tE,isRTL as nE,getVerticalOffset as iE,invariant as oE,applyDarkModeFilter as ci,isSafari as rE,STICKY_NOTE_EDGE_SHADOW_OPACITY as sE,STICKY_NOTE_EDGE_SHADOW_WIDTH as aE,STICKY_NOTE_FOOTER as Sa,STICKY_NOTE_SHADOW_OPACITY as lE}from"@excalidraw/common";I();import{pointFrom as nn,pointCenter as _p,pointRotateRads as In,vectorFromPoint as us,vectorNormalize as Xl,vectorSubtract as $l,vectorAdd as _o,vectorScale as Ho,pointFromVector as jl,clamp as He,isCloseTo as Vl}from"@excalidraw/math";var We=10,SP=(e,t,n,i,o,r,s,a)=>{let{width:l,height:d}=ms(e),c=i/l,u=o/d,m=(e.crop?.x??0)/c,p=(e.crop?.y??0)/u,h=In(nn(r,s),se(e,t),-e.angle);r=h[0],s=h[1];let f=e.width,g=e.height,E=e.crop??{x:0,y:0,width:i,height:o,naturalWidth:i,naturalHeight:o},b=E.height,x=E.width,y=e.scale[0]===-1,w=e.scale[1]===-1,S=s-e.y,M=r-e.x;n.includes("n")&&(g=He(e.height-S,We,w?d-p:e.height+p)),n.includes("s")&&(S=s-e.y-e.height,g=He(e.height+S,We,w?e.height+p:d-p)),n.includes("e")&&(M=r-e.x-e.width,f=He(e.width+M,We,y?e.width+m:l-m)),n.includes("w")&&(f=He(e.width-M,We,y?l-m:e.width+m));let A=v=>{v.height=g*u,v.width=f*c};A(E);let T=(v,N)=>{A(N),v.includes("n")&&(w||(N.y+=b-N.height)),v.includes("s")&&w&&(N.y+=b-N.height),v.includes("e")&&y&&(N.x+=x-N.width),v.includes("w")&&(y||(N.x+=x-N.width))};switch(n){case"n":{if(a){let v=m+e.width/2,N=l-m-e.width/2,k=Math.min(v,N)*2;f=He(g*a,We,k),g=f/a}T(n,E),a&&(E.x+=(x-E.width)/2);break}case"s":{if(a){let v=m+e.width/2,N=l-m-e.width/2,k=Math.min(v,N)*2;f=He(g*a,We,k),g=f/a}T(n,E),a&&(E.x+=(x-E.width)/2);break}case"w":{if(a){let v=p+e.height/2,N=d-p-e.height/2,k=Math.min(v,N)*2;g=He(f/a,We,k),f=g*a}T(n,E),a&&(E.y+=(b-E.height)/2);break}case"e":{if(a){let v=p+e.height/2,N=d-p-e.height/2,k=Math.min(v,N)*2;g=He(f/a,We,k),f=g*a}T(n,E),a&&(E.y+=(b-E.height)/2);break}case"ne":{if(a)if(M>-S){let v=w?d-p:p+e.height;g=He(f/a,We,v),f=g*a}else{let v=y?m+e.width:l-m;f=He(g*a,We,v),g=f/a}T(n,E);break}case"nw":{if(a)if(M<S){let v=w?d-p:p+e.height;g=He(f/a,We,v),f=g*a}else{let v=y?l-m:m+e.width;f=He(g*a,We,v),g=f/a}T(n,E);break}case"se":{if(a)if(M>S){let v=w?p+e.height:d-p;g=He(f/a,We,v),f=g*a}else{let v=y?m+e.width:l-m;f=He(g*a,We,v),g=f/a}T(n,E);break}case"sw":{if(a)if(-M>S){let v=w?p+e.height:d-p;g=He(f/a,We,v),f=g*a}else{let v=y?l-m:m+e.width;f=He(g*a,We,v),g=f/a}T(n,E);break}default:break}let G=Hp(e,n,f,g,!!a);return Vl(E.width,E.naturalWidth)&&Vl(E.height,E.naturalHeight)&&(E=null),{x:G[0],y:G[1],width:f,height:g,crop:E}},Hp=(e,t,n,i,o)=>{let[r,s,a,l]=Mn(e,e.width,e.height,!0),d=nn(r,s),c=nn(a,l),u=_p(d,c),[m,p,h,f]=Mn(e,n,i,!0),g=h-m,E=f-p,b=[...d];if(["n","w","nw"].includes(t)&&(b=[c[0]-Math.abs(g),c[1]-Math.abs(E)]),t==="ne"){let A=[d[0],c[1]];b=[A[0],A[1]-Math.abs(E)]}if(t==="sw"){let A=[c[0],d[1]];b=[A[0]-Math.abs(g),A[1]]}o&&(["s","n"].includes(t)&&(b[0]=u[0]-g/2),["e","w"].includes(t)&&(b[1]=u[1]-E/2));let x=e.angle,y=In(b,u,x),w=[b[0]+Math.abs(g)/2,b[1]+Math.abs(E)/2],S=In(w,u,x);b=In(y,S,-x);let M=[...b];return M[0]+=e.x-m,M[1]+=e.y-p,M},Kl=(e,t)=>{if(e.crop){let{width:n,height:i}=ms(e),[o,r,s,a,l,d]=Z(e,t),c=us(In(nn(o,r),nn(l,d),e.angle)),u=us(In(nn(s,r),nn(l,d),e.angle)),m=Xl($l(u,c)),p=us(In(nn(o,a),nn(l,d),e.angle)),h=$l(p,c),f=Xl(h),{cropX:g,cropY:E}=Wp(e.crop,e.scale),b=_o(_o(c,Ho(m,-g*n/e.crop.naturalWidth)),Ho(f,-E*i/e.crop.naturalHeight)),x=jl(_o(_o(b,Ho(m,n/2)),Ho(f,i/2))),y=In(jl(b),x,-e.angle);return{...e,x:y[0],y:y[1],width:n,height:i,crop:null}}return e},ms=e=>{if(e.crop){let t=e.width/(e.crop.width/e.crop.naturalWidth),n=e.height/(e.crop.height/e.crop.naturalHeight);return{width:t,height:n}}return{width:e.width,height:e.height}},Wp=(e,t)=>{let n=e.x,i=e.y,o=t[0]===-1,r=t[1]===-1;return o&&(n=e.naturalWidth-Math.abs(n)-e.width),r&&(i=e.naturalHeight-Math.abs(i)-e.height),{cropX:n,cropY:i}},IP=(e,t=!1)=>{let n=e.crop;if(!n)return null;let i=e.scale[0]===-1,o=e.scale[1]===-1,r=n.x,s=n.y;if(i&&(r=n.naturalWidth-n.width-n.x),o&&(s=n.naturalHeight-n.height-n.y),t)return{x:r,y:s};let{width:a,height:l}=ms(e);return{x:r/(n.naturalWidth/a),y:s/(n.naturalHeight/l)}};I();import{pointCenter as fc,pointFrom as H,pointRotateRads as Je,pointsEqual as hc,pointDistance as Zt,vectorFromPoint as ug,curveLength as Mc,curveLengthAtParameter as mg,curvePointAtLength as Tc,lineSegmentClosestParameter as pg,lineSegmentPointAt as Ac,curveClosestParameter as fg,clamp as la,bezierEquation as hg,isCurve as br}from"@excalidraw/math";import{DRAGGING_THRESHOLD as gg,KEYS as ai,shouldRotateWithDiscreteAngle as li,getGridPoint as gc,invariant as ut,isShallowEqual as Eg,getFeatureFlag as Li}from"@excalidraw/common";import{deconstructLinearOrFreeDrawElement as Ec,getSnapOutlineMidPoint as xc,isPathALoop as xg,moveArrowAboveBindable as bc,projectFixedPointOntoDiagonal as yc,getLinearElementPathSegments as bg}from"@excalidraw/element";I();import{arrayToMap as sc,getFeatureFlag as Uh,getGridPoint as ra,invariant as un,isTransparent as Yh}from"@excalidraw/common";import{PRECISION as Xh,clamp as hr,lineSegment as Di,pointDistance as Gn,pointDistanceSq as bt,pointFrom as J,pointFromArray as $h,pointFromVector as pr,pointRotateRads as ge,pointsEqual as jh,vectorFromPoint as vi,vectorNormalize as oa,vectorScale as fr}from"@excalidraw/math";I();import{invariant as Xd,isTransparent as $d}from"@excalidraw/common";import{curveIntersectLineSegment as jd,isPointWithinBounds as na,lineSegment as co,lineSegmentIntersectionPoints as Vd,pointFrom as Ce,pointFromVector as Bh,pointRotateRads as Et,pointsEqual as Kd,vectorFromPoint as Lh,vectorNormalize as kh,vectorScale as Ch}from"@excalidraw/math";import{ellipse as Nh,ellipseSegmentInterceptPoints as Gh}from"@excalidraw/math/ellipse";I();import{DEFAULT_ADAPTIVE_RADIUS as bh,DEFAULT_PROPORTIONAL_RADIUS as js,invariant as yh,LINE_CONFIRM_THRESHOLD as wh,ROUNDNESS as Vs}from"@excalidraw/common";import{bezierEquation as Ph,curve as dn,curveCatmullRomCubicApproxPoints as Gd,curveOffsetPoints as Od,lineSegment as ke,lineSegmentIntersectionPoints as Cd,pointDistance as ri,pointFrom as $,pointFromArray as Sh,pointFromVector as Ih,pointRotateRads as gt,pointTranslate as Nd,rectangle as Mh,vectorFromPoint as Fd,vectorNormalize as Th,vectorScale as Ks}from"@excalidraw/math";I();import{ROUNDNESS as Ji,assertNever as Up}from"@excalidraw/common";import{pointsEqual as Zl}from"@excalidraw/math";var ei=e=>!!e&&e.type==="image"&&!!e.fileId,Fe=e=>!!e&&e.type==="image",ql=e=>!!e&&e.type==="embeddable",Wo=e=>!!e&&e.type==="iframe",Uo=e=>!!e&&(e.type==="iframe"||e.type==="embeddable"),V=e=>e!=null&&e.type==="text",be=e=>e!=null&&e.type==="stickynote",Yo=e=>e!=null&&e.type==="frame",Ql=e=>e!=null&&e.type==="magicframe",te=e=>e!=null&&(e.type==="frame"||e.type==="magicframe"),ye=e=>e!=null&&Yp(e.type),Yp=e=>e==="freedraw",q=e=>e!=null&&jp(e.type),Re=e=>e!=null&&e.type==="line",U=e=>e!=null&&e.type==="arrow",X=e=>U(e)&&e.elbowed,vP=e=>U(e)&&!e.elbowed,Xp=e=>U(e)&&!e.elbowed&&!e.roundness,$p=e=>U(e)&&!e.elbowed&&e.roundness!==null,jp=e=>e==="arrow"||e==="line",Ue=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&Vp(e.type),Vp=e=>e==="arrow",we=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="stickynote"||e.type==="diamond"||e.type==="ellipse"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),Jl=e=>e!=null&&(e.type==="rectangle"||e.type==="stickynote"||e.type==="diamond"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),eo=e=>e!=null&&(e.type==="rectangle"||e.type==="stickynote"||e.type==="image"||e.type==="text"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="freedraw"),Kp=(e,t=!0)=>e!=null&&(!e.locked||t===!0)&&(e.type==="rectangle"||e.type==="stickynote"||e.type==="diamond"||e.type==="ellipse"||U(e)),ed=e=>{let t=e?.type;if(!t)return!1;switch(t){case"text":case"diamond":case"rectangle":case"stickynote":case"iframe":case"embeddable":case"ellipse":case"arrow":case"freedraw":case"line":case"frame":case"magicframe":case"image":case"selection":return!0;default:return Up(t,null),!1}},td=e=>e.type==="rectangle"||e.type==="stickynote"||e.type==="ellipse"||e.type==="diamond",Wt=e=>Kp(e)&&!!e.boundElements?.some(({type:t})=>t==="text"),Ie=e=>e!==null&&"containerId"in e&&e.containerId!==null&&V(e),BP=e=>!!e.startBinding||!!e.endBinding,Xo=e=>e==="rectangle"||e==="embeddable"||e==="iframe"||e==="image",nd=e=>e==="line"||e==="arrow"||e==="diamond"||e==="stickynote",LP=(e,t)=>!!((e===Ji.ADAPTIVE_RADIUS||e===Ji.LEGACY)&&Xo(t.type)||e===Ji.PROPORTIONAL_RADIUS&&nd(t.type)),kP=e=>nd(e.type)?{type:Ji.PROPORTIONAL_RADIUS}:Xo(e.type)?{type:Ji.ADAPTIVE_RADIUS}:null,CP=e=>Xp(e)?"sharpArrow":$p(e)?"curvedArrow":X(e)?"elbowArrow":"line",ps=e=>e.length>3&&Zl(e[0],e[e.length-1]),id=e=>e.length>3||e.length===3&&!Zl(e[0],e[e.length-1]),NP=e=>{switch(e){case"rectangle":case"stickynote":case"diamond":case"ellipse":case"arrow":case"line":case"freedraw":case"text":case"image":case"frame":case"embeddable":return!0;default:return!1}};I();import{DEFAULT_ELEMENT_PROPS as th,DEFAULT_STICKY_NOTE_BG as nh,MIN_FONT_SIZE as ih,arrayToMap as Dd,STICKY_NOTE_BODY_INSET_Y as Hs,STICKY_NOTE_FALLBACK_FONT_SIZE as oh,STICKY_NOTE_FOOTER as Id,STICKY_NOTE_FONT_STEP as _s,STICKY_NOTE_MAX_FONT_SIZE as rh,STICKY_NOTE_MIN_SIZE as Ti,STICKY_NOTE_MIN_FONT_SIZE as sh,STICKY_NOTE_PADDING as ar,STICKY_NOTE_SHADOW_OFFSET as Md,getFontString as Td,getLineHeight as ah,isTransparent as lr,seededRandom as vd}from"@excalidraw/common";import{clamp as lh}from"@excalidraw/math";I();import{getSizeFromPoints as If,randomInteger as vs,getUpdatedTimestamp as Bs}from"@excalidraw/common";I();import{clamp as Zo,pointDistance as ws,pointFrom as K,pointScaleFromOrigin as af,pointsEqual as io,pointTranslate as ys,vector as Xt,vectorCross as qo,vectorFromPoint as Ps,vectorScale as lf}from"@excalidraw/math";import{BinaryHeap as df,invariant as Pi,isAnyTrue as cf,getSizeFromPoints as rd,isDevEnv as uf,arrayToMap as mf}from"@excalidraw/common";I();import{curvePointDistance as fs,distanceToLineSegment as hs,pointRotateRads as gs}from"@excalidraw/math";import{ellipse as Zp,ellipseDistanceFromPoint as qp}from"@excalidraw/math/ellipse";var Ut=(e,t,n)=>{switch(e.type){case"selection":case"rectangle":case"stickynote":case"image":case"text":case"iframe":case"embeddable":case"frame":case"magicframe":return Qp(e,t,n);case"diamond":return Jp(e,t,n);case"ellipse":return ef(e,t,n);case"line":case"arrow":case"freedraw":return tf(e,t,n)}},Qp=(e,t,n)=>{let i=se(e,t),o=gs(n,i,-e.angle),[r,s]=Tn(e);return Math.min(...r.map(a=>hs(o,a)),...s.map(a=>fs(a,o)))},Jp=(e,t,n)=>{let i=se(e,t),o=gs(n,i,-e.angle),[r,s]=An(e);return Math.min(...r.map(a=>hs(o,a)),...s.map(a=>fs(a,o)))},ef=(e,t,n)=>{let i=se(e,t);return qp(gs(n,i,-e.angle),Zp(i,e.width/2,e.height/2))},tf=(e,t,n)=>{let[i,o]=to(e,t);return Math.min(...i.map(r=>hs(n,r)),...o.map(r=>fs(r,n)))};I();import{invariant as od,isDevEnv as nf,isTestEnv as of}from"@excalidraw/common";import{pointFrom as Dn,pointFromVector as $o,pointRotateRads as jo,pointScaleFromOrigin as Vo,pointsEqual as rf,triangleIncludesPoint as Es,vectorCross as rt,vectorFromPoint as ae,vectorScale as Ko}from"@excalidraw/math";var he=[1,0],Be=[0,1],ze=[-1,0],qe=[0,-1],Yt=e=>{let[t,n]=e,i=Math.abs(t),o=Math.abs(n);return t>o?he:t<=-o?ze:n>i?Be:qe},st=(e,t)=>Yt(ae(e,t)),vt=(e,t)=>at(st(e,t)),fe=(e,t)=>e[0]===t[0]&&e[1]===t[1],at=e=>fe(e,he)||fe(e,ze),$P=e=>!at(e),sf=(e,t,n)=>{let i=on(t);(nf()||of())&&(od(e.width>0&&e.height>0,"Diamond element has no width or height"),od(!rf(i,n),"The point is too close to the element mid point to determine heading"));let o=.95,r=$o(Ko(ae(jo(Dn(e.x+e.width/2,e.y),i,e.angle),i),o),i),s=$o(Ko(ae(jo(Dn(e.x+e.width,e.y+e.height/2),i,e.angle),i),o),i),a=$o(Ko(ae(jo(Dn(e.x+e.width/2,e.y+e.height),i,e.angle),i),o),i),l=$o(Ko(ae(jo(Dn(e.x,e.y+e.height/2),i,e.angle),i),o),i);if(rt(ae(n,r),ae(r,s))<=0&&rt(ae(n,r),ae(r,l))>0)return st(r,i);if(rt(ae(n,s),ae(s,a))<=0&&rt(ae(n,s),ae(s,r))>0)return st(s,i);if(rt(ae(n,a),ae(a,l))<=0&&rt(ae(n,a),ae(a,s))>0)return st(a,i);if(rt(ae(n,l),ae(l,r))<=0&&rt(ae(n,l),ae(l,a))>0)return st(l,i);if(rt(ae(n,i),ae(r,i))<=0&&rt(ae(n,i),ae(s,i))>0){let c=e.width>e.height?r:s;return st(c,i)}else if(rt(ae(n,i),ae(s,i))<=0&&rt(ae(n,i),ae(a,i))>0){let c=e.width>e.height?a:s;return st(c,i)}else if(rt(ae(n,i),ae(a,i))<=0&&rt(ae(n,i),ae(l,i))>0){let c=e.width>e.height?a:l;return st(c,i)}let d=e.width>e.height?r:l;return st(d,i)},wi=(e,t,n)=>{let o=on(t);if(e.type==="diamond")return sf(e,t,n);let r=Vo(Dn(t[0],t[1]),o,2),s=Vo(Dn(t[2],t[1]),o,2),a=Vo(Dn(t[0],t[3]),o,2),l=Vo(Dn(t[2],t[3]),o,2);return Es([r,s,o],n)?qe:Es([s,l,o],n)?he:Es([l,a,o],n)?Be:ze},xs=e=>[e[0]===0?0:e[0]>0?-1:1,e[1]===0?0:e[1]>0?-1:1];var Ss=1,ce=40,pf=(e,t)=>{let n=e.fixedSegments?e.fixedSegments.slice():null;if(n){let i=[];e.points.map(s=>K(e.x+s[0],e.y+s[1])).forEach((s,a,l)=>{if(a<2)return i.push(s);let d=st(s,l[a-1]),c=st(l[a-1],l[a-2]);if(fe(d,c)){let u=n?.findIndex(p=>p.index===a-1)??-1,m=n?.findIndex(p=>p.index===a)??-1;m!==-1&&(n[m].start=K(l[a-2][0]-e.x,l[a-2][1]-e.y)),u!==-1&&n.splice(u,1),i.splice(-1,1),n.forEach(p=>{p.index>a-1&&(p.index-=1)})}return i.push(s)});let o=[];i.forEach((s,a,l)=>{if(a<3)return o.push(s);if(ws(l[a-2],l[a-1])<Ss){let d=n?.findIndex(m=>m.index===a-2)??-1,c=n?.findIndex(m=>m.index===a-1)??-1;c!==-1&&n.splice(c,1),d!==-1&&n.splice(d,1),o.splice(-2,2),n.forEach(m=>{m.index>a-2&&(m.index-=2)});let u=vt(s,l[a-1]);return o.push(K(u?s[0]:l[a-2][0],u?l[a-2][1]:s[1]))}o.push(s)});let r=n.filter(s=>s.index!==1&&s.index!==o.length-1);return r.length===0?rn(Ts(As(Ms(e,Is(e,t,o.map(s=>K(s[0]-e.x,s[1]-e.y))))??[])),r,null,null):(uf()&&Pi(md(o),"Invalid elbow points with fixed segments"),rn(o,r,e.startIsSpecial,e.endIsSpecial))}return{x:e.x,y:e.y,points:e.points,fixedSegments:e.fixedSegments,startIsSpecial:e.startIsSpecial,endIsSpecial:e.endIsSpecial}},ff=(e,t,n)=>{let i=t.map(T=>T.index),r=(e.fixedSegments?.map(T=>T.index)??[]).findIndex(T=>!i.includes(T));if(r===-1||!e.fixedSegments?.[r])return{points:e.points};let s=e.fixedSegments[r].index,a=e.fixedSegments[r-1],l=e.fixedSegments[r+1],d=e.x+(a?a.end[0]:0),c=e.y+(a?a.end[1]:0),u=a?null:e.startBinding,m=l?null:e.endBinding,{startHeading:p,endHeading:h,startGlobalPoint:f,endGlobalPoint:g,hoveredStartElement:E,hoveredEndElement:b,...x}=Is({x:d,y:c,startBinding:u,endBinding:m,startArrowhead:null,endArrowhead:null,points:e.points},n,[K(0,0),K(e.x+(l?.start[0]??e.points[e.points.length-1][0])-d,e.y+(l?.start[1]??e.points[e.points.length-1][1])-c)],{isDragging:!1}),{points:y}=rn(Ts(As(Ms(e,{startHeading:p,endHeading:h,startGlobalPoint:f,endGlobalPoint:g,hoveredStartElement:E,hoveredEndElement:b,...x})??[])),t,null,null);if(!y||y.length<2)throw new Error("Property 'points' is required in the update returned by normalizeArrowElementUpdate()");let w=[];if(a)for(let T=0;T<a.index;T++)w.push(K(e.x+e.points[T][0],e.y+e.points[T][1]));if(y.forEach(T=>{w.push(K(e.x+(a?a.end[0]:0)+T[0],e.y+(a?a.end[1]:0)+T[1]))}),l)for(let T=l.index;T<e.points.length;T++)w.push(K(e.x+e.points[T][0],e.y+e.points[T][1]));let S=(l?.index??e.points.length)-(a?.index??0)-1,M=t.map(T=>T.index>s?{...T,index:T.index-S+(y.length-1)}:T),A=w.flatMap((T,G)=>{let v=w[G-1],N=w[G+1];if(v&&N){let k=st(T,v),z=st(N,T);if(fe(k,z))return M.forEach(W=>{W.index>G&&(W.index-=1)}),[];if(fe(k,xs(z)))return M.forEach(W=>{W.index>G&&(W.index+=1)}),[T,T]}return[T]});return rn(A,M,!1,!1)},hf=(e,t,n,i,o,r)=>{let s=t.map((w,S)=>e.fixedSegments==null||e.fixedSegments[S]===void 0||e.fixedSegments[S].index!==w.index||(w.start[0]!==e.fixedSegments[S].start[0]&&w.end[0]!==e.fixedSegments[S].end[0])!=(w.start[1]!==e.fixedSegments[S].start[1]&&w.end[1]!==e.fixedSegments[S].end[1])?S:null).filter(w=>w!==null).shift();if(s==null)return{points:e.points};let a=e.fixedSegments?.findIndex(w=>w.index===1)??-1,l=e.fixedSegments?.findIndex(w=>w.index===e.points.length-1)??-1,d=ws(t[s].start,t[s].end),c=d<ce+5;if(a===-1&&t[s].index===1&&o){let w=at(n),M=(w?fe(n,he):fe(n,Be))?c?d/2:ce:c?-d/2:-ce;t[s].start=K(t[s].start[0]+(w?M:0),t[s].start[1]+(w?0:M))}if(l===-1&&t[s].index===e.points.length-1&&r){let w=at(i),M=(w?fe(i,he):fe(i,Be))?c?d/2:ce:c?-d/2:-ce;t[s].end=K(t[s].end[0]+(w?M:0),t[s].end[1]+(w?0:M))}let u=t.map(w=>({...w,start:K(e.x+w.start[0],e.y+w.start[1]),end:K(e.x+w.end[0],e.y+w.end[1])})),m=e.points.map((w,S)=>K(e.x+w[0],e.y+w[1])),p=u[s].index-1,h=u[s].index,f=u[s].start,g=u[s].end,E=m[p-1]&&!io(m[p],m[p-1])?vt(m[p-1],m[p]):void 0,b=m[h+1]&&!io(m[h],m[h+1])?vt(m[h+1],m[h]):void 0;if(E!==void 0){let w=E?1:0;m[p-1][w]=f[w]}if(m[p]=f,m[h]=g,b!==void 0){let w=b?1:0;m[h+1][w]=g[w]}let x=u.findIndex(w=>w.index===p);if(x!==-1){let w=vt(u[x].end,u[x].start)?1:0;u[x].start[w]=f[w],u[x].end=f}let y=u.findIndex(w=>w.index===h+1);if(y!==-1){let w=vt(u[y].end,u[y].start)?1:0;u[y].end[w]=g[w],u[y].start=g}if(a===-1&&p===0){let w=o?at(n):vt(m[1],m[0]);m.unshift(K(w?f[0]:e.x+e.points[0][0],w?e.y+e.points[0][1]:f[1])),o&&m.unshift(K(e.x+e.points[0][0],e.y+e.points[0][1]));for(let S of u)S.index+=o?2:1}if(l===-1&&h===e.points.length-1){let w=at(i);m.push(K(w?g[0]:e.x+e.points[e.points.length-1][0],w?e.y+e.points[e.points.length-1][1]:g[1])),r&&m.push(K(e.x+e.points[e.points.length-1][0],e.y+e.points[e.points.length-1][1]))}return rn(m,u.map(w=>({...w,start:K(w.start[0]-e.x,w.start[1]-e.y),end:K(w.end[0]-e.x,w.end[1]-e.y)})),!1,!1)},gf=(e,t,n,i,o,r,s,a,l)=>{let d=e.startIsSpecial??null,c=e.endIsSpecial??null,u=t.map((g,E)=>E===0?K(e.x+g[0],e.y+g[1]):E===t.length-1?K(e.x+g[0],e.y+g[1]):K(e.x+e.points[E][0],e.y+e.points[E][1])),m=n.map(g=>({...g,start:K(e.x+(g.start[0]-t[0][0]),e.y+(g.start[1]-t[0][1])),end:K(e.x+(g.end[0]-t[0][0]),e.y+(g.end[1]-t[0][1]))})),p=[],h=2+(d?1:0),f=2+(c?1:0);for(;p.length+h<u.length-f;)p.push(u[p.length+h]);{let g=u.at(d?2:1),E=u.at(d?3:2);if(!g||!E)throw new Error(`Second and third points must exist when handling endpoint drag (${d})`);let b=at(i),x=at(Yt(Ps(g,E)));if(a&&b===x){let y=b?fe(i,he):fe(i,Be);if(p.unshift(K(x?r[0]+(y?ce:-ce):E[0],x?E[1]:r[1]+(y?ce:-ce))),p.unshift(K(b?r[0]+(y?ce:-ce):r[0],b?r[1]:r[1]+(y?ce:-ce))),!d){d=!0;for(let w of m)w.index>1&&(w.index+=1)}}else if(p.unshift(K(x?r[0]:g[0],x?g[1]:r[1])),d){d=!1;for(let y of m)y.index>1&&(y.index-=1)}p.unshift(r)}{let g=u.at(u.length-(c?3:2)),E=u.at(u.length-(c?4:3));if(!g||!E)throw new Error(`Second and third to last points must exist when handling endpoint drag (${c})`);let b=at(o),x=vt(E,g);if(l&&b===x){let y=b?fe(o,he):fe(o,Be);p.push(K(x?s[0]+(y?ce:-ce):E[0],x?E[1]:s[1]+(y?ce:-ce))),p.push(K(b?s[0]+(y?ce:-ce):s[0],b?s[1]:s[1]+(y?ce:-ce))),c||(c=!0)}else p.push(K(x?s[0]:g[0],x?g[1]:s[1])),c&&(c=!1)}return p.push(s),rn(p,m.map(({index:g})=>({index:g,start:p[g-1],end:p[g]})).map(g=>({...g,start:K(g.start[0]-r[0],g.start[1]-r[1]),end:K(g.end[0]-r[0],g.end[1]-r[1])})),d,c)},vn=1e6,Si=(e,t,n,i)=>{if(e.points.length<2)return{points:n.points??e.points};O.PROD||(Pi(!n.points||n.points.length>=2,"Updated point array length must match the arrow point length, contain exactly the new start and end points or not be specified at all (i.e. you can't add new points between start and end manually to elbow arrows)"),Pi(!e.fixedSegments||e.fixedSegments.map(w=>w.start[0]===w.end[0]||w.start[1]===w.end[1]).every(Boolean),"Fixed segments must be either horizontal or vertical"),Pi(!n.fixedSegments||n.fixedSegments.map(w=>w.start[0]===w.end[0]||w.start[1]===w.end[1]).every(Boolean),"Updates to fixed segments must be either horizontal or vertical"),Pi(e.points.slice(1).map((w,S)=>w[0]===e.points[S][0]||w[1]===e.points[S][1]),"Elbow arrow segments must be either horizontal or vertical"),Pi(n.fixedSegments?.find(w=>w.index===1&&io(w.start,(n.points??e.points)[0]))==null&&n.fixedSegments?.find(w=>w.index===(n.points??e.points).length-1&&io(w.end,(n.points??e.points)[(n.points??e.points).length-1]))==null,"The first and last segments cannot be fixed"));let o=n.fixedSegments??e.fixedSegments??[],r=n.points?n.points&&n.points.length===2?e.points.map((w,S)=>S===0?n.points[0]:S===e.points.length-1?n.points[1]:w):n.points.slice():e.points.slice(),{startBinding:s,endBinding:a,...l}=n,d=typeof s<"u"?s:e.startBinding,c=typeof a<"u"?a:e.endBinding,u=d&&Jo(d.elementId,t),m=c&&Jo(c.elementId,t),p=md(r);if(d&&!u&&p||c&&!m&&p||t.size===0&&p||Object.keys(l).length===0&&(u?.id!==d?.elementId||m?.id!==c?.elementId))return rn(r.map(w=>K(e.x+w[0],e.y+w[1])),e.fixedSegments,e.startIsSpecial,e.endIsSpecial);let{startHeading:h,endHeading:f,startGlobalPoint:g,endGlobalPoint:E,hoveredStartElement:b,hoveredEndElement:x,...y}=Is({x:e.x,y:e.y,startBinding:d,endBinding:c,startArrowhead:e.startArrowhead,endArrowhead:e.endArrowhead,points:e.points},t,r,i);return t.size===0&&p?rn(r.map(w=>K(e.x+w[0],e.y+w[1])),e.fixedSegments,e.startIsSpecial,e.endIsSpecial):!n.points&&!n.fixedSegments&&!n.startBinding&&!n.endBinding?pf(e,t):n.startBinding===e.startBinding&&n.endBinding===e.endBinding&&(n.points??[]).every((w,S)=>io(w,e.points[S]??K(1/0,1/0)))&&p?{}:o.length===0?rn(Ts(As(Ms(e,{startHeading:h,endHeading:f,startGlobalPoint:g,endGlobalPoint:E,hoveredStartElement:b,hoveredEndElement:x,...y})??[])),o,null,null):(e.fixedSegments?.length??0)>o.length?ff(e,o,t):n.points?n.points&&n.fixedSegments?n:gf(e,r,o,h,f,g,E,b,x):hf(e,o,h,f,b,x)},Is=(e,t,n,i)=>{let o=ys(n[0],Xt(e.x,e.y)),r=ys(n[n.length-1],Xt(e.x,e.y)),s=null,a=null;if(i?.isDragging&&i?.isBindingEnabled!==!1){let w=Array.from(t.values());s=dd(o,t,w,i?.zoom)||null,a=dd(r,t,w,i?.zoom)||null}else s=e.startBinding&&Jo(e.startBinding.elementId,t)||null,a=e.endBinding&&Jo(e.endBinding.elementId,t)||null;let l=ad({...e,angle:0,type:"arrow",elbowed:!0,points:n},"start",e.startBinding?.fixedPoint,o,s,t,i?.isDragging,i?.isBindingEnabled,i?.isMidpointSnappingEnabled),d=ad({...e,angle:0,type:"arrow",elbowed:!0,points:n},"end",e.endBinding?.fixedPoint,r,a,t,i?.isDragging,i?.isBindingEnabled,i?.isMidpointSnappingEnabled),c=ld(l,d,s,o,t,i?.zoom),u=ld(d,l,a,r,t,i?.zoom),m=[l[0]-2,l[1]-2,l[0]+2,l[1]+2],p=[d[0]-2,d[1]-2,d[0]+2,d[1]+2],h=s?lt(s,t,Bn(c,e.startArrowhead?Le(s,{elbowed:!0})*6:Le(s,{elbowed:!0})*2,1)):m,f=a?lt(a,t,Bn(u,e.endArrowhead?Le(a,{elbowed:!0})*6:Le(a,{elbowed:!0})*2,1)):p,g=$t(l,a?lt(a,t,Bn(u,ce,ce)):p)||$t(d,s?lt(s,t,Bn(c,ce,ce)):m),E=ud(g?[m,p]:[h,f]),b=bf(g?m:h,g?p:f,E,g?Bn(c,!s&&!a?0:ce,0):Bn(c,!s&&!a?0:ce-(e.startArrowhead?ti*6:ti*2),ce),g?Bn(u,!s&&!a?0:ce,0):Bn(u,!s&&!a?0:ce-(e.endArrowhead?ti*6:ti*2),ce),g,s&&lt(s,t),a&&lt(a,t)),x=sd(b[0],c,l),y=sd(b[1],u,d);return{dynamicAABBs:b,startDonglePosition:x,startGlobalPoint:l,startHeading:c,endDonglePosition:y,endGlobalPoint:d,endHeading:u,commonBounds:E,hoveredStartElement:s,hoveredEndElement:a,boundsOverlap:g,startElementBounds:h,endElementBounds:f}},Ms=(e,t)=>{let{dynamicAABBs:n,startDonglePosition:i,startGlobalPoint:o,startHeading:r,endDonglePosition:s,endGlobalPoint:a,endHeading:l,commonBounds:d,hoveredEndElement:c}=t,u=yf(n,i||o,r,s||a,l,d),m=i&&Qo(i,u),p=s&&Qo(s,u),h=Qo(a,u);h&&c&&(h.closed=!0);let f=Qo(o,u);f&&e.startBinding&&(f.closed=!0);let g=m&&p&&($t(m.pos,n[1])||$t(p.pos,n[0])),E=Ef(m||f,p||h,u,r||he,l||he,g?[]:n);if(E){let b=E.map(x=>[x.pos[0],x.pos[1]]);return m&&b.unshift(o),p&&b.push(a),b}return null},Bn=(e,t,n)=>{switch(e){case qe:return[t,n,n,n];case he:return[n,t,n,n];case Be:return[n,n,t,n]}return[n,n,n,t]},Ef=(e,t,n,i,o,r)=>{let s=bs(e.pos,t.pos),a=new df(l=>l.f);for(a.push(e);a.size()>0;){let l=a.pop();if(!l||l.closed)continue;if(l===t)return xf(e,l);l.closed=!0;let d=Pf(l.addr,n);for(let c=0;c<4;c++){let u=d[c];if(!u||u.closed)continue;let m=af(u.pos,l.pos,.5);if(cf(...r.map(y=>$t(m,y))))continue;let p=Sf(c),h=l.parent?Yt(Ps(l.pos,l.parent.pos)):i,f=xs(h);if(fe(f,p)||cd(e.addr,u.addr)&&fe(p,i)||cd(t.addr,u.addr)&&fe(p,o))continue;let E=h!==p,b=l.g+bs(u.pos,l.pos)+(E?Math.pow(s,3):0),x=u.visited;if(!x||b<u.g){let y=wf(u,t,p,o);u.visited=!0,u.parent=l,u.h=bs(t.pos,u.pos)+y*Math.pow(s,2),u.g=b,u.f=u.g+u.h,x?a.rescoreElement(u):a.push(u)}}}return null},xf=(e,t)=>{let n=t,i=[];for(;n.parent;)i.unshift(n),n=n.parent;return i.unshift(e),i},bs=(e,t)=>Math.abs(e[0]-t[0])+Math.abs(e[1]-t[1]),bf=(e,t,n,i,o,r,s,a)=>{let l=s??e,d=a??t,[c,u,m,p]=i??[0,0,0,0],[h,f,g,E]=o??[0,0,0,0],b=[e[0]>t[2]?e[1]>t[3]||e[3]<t[1]?Math.min((l[0]+d[2])/2,e[0]-p):(l[0]+d[2])/2:e[0]>t[0]?e[0]-p:n[0]-p,e[1]>t[3]?e[0]>t[2]||e[2]<t[0]?Math.min((l[1]+d[3])/2,e[1]-c):(l[1]+d[3])/2:e[1]>t[1]?e[1]-c:n[1]-c,e[2]<t[0]?e[1]>t[3]||e[3]<t[1]?Math.max((l[2]+d[0])/2,e[2]+u):(l[2]+d[0])/2:e[2]<t[2]?e[2]+u:n[2]+u,e[3]<t[1]?e[0]>t[2]||e[2]<t[0]?Math.max((l[3]+d[1])/2,e[3]+m):(l[3]+d[1])/2:e[3]<t[3]?e[3]+m:n[3]+m],x=[t[0]>e[2]?t[1]>e[3]||t[3]<e[1]?Math.min((d[0]+l[2])/2,t[0]-E):(d[0]+l[2])/2:t[0]>e[0]?t[0]-E:n[0]-E,t[1]>e[3]?t[0]>e[2]||t[2]<e[0]?Math.min((d[1]+l[3])/2,t[1]-h):(d[1]+l[3])/2:t[1]>e[1]?t[1]-h:n[1]-h,t[2]<e[0]?t[1]>e[3]||t[3]<e[1]?Math.max((d[2]+l[0])/2,t[2]+f):(d[2]+l[0])/2:t[2]<e[2]?t[2]+f:n[2]+f,t[3]<e[1]?t[0]>e[2]||t[2]<e[0]?Math.max((d[3]+l[1])/2,t[3]+g):(d[3]+l[1])/2:t[3]<e[3]?t[3]+g:n[3]+g],y=ud([b,x]);if(!r&&b[2]-b[0]+x[2]-x[0]>y[2]-y[0]+1e-11&&b[3]-b[1]+x[3]-x[1]>y[3]-y[1]+1e-11){let[w,S]=[(x[0]+x[2])/2,(x[1]+x[3])/2];if(t[0]>e[2]&&e[1]>t[3]){let M=b[2]+(x[0]-b[2])/2,A=x[3]+(b[1]-x[3])/2;return qo(Xt(e[2]-w,e[1]-S),Xt(e[0]-w,e[3]-S))>0?[[b[0],b[1],M,b[3]],[M,x[1],x[2],x[3]]]:[[b[0],A,b[2],b[3]],[x[0],x[1],x[2],A]]}else if(e[2]<t[0]&&e[3]<t[1]){let M=b[2]+(x[0]-b[2])/2,A=b[3]+(x[1]-b[3])/2;return qo(Xt(e[0]-w,e[1]-S),Xt(e[2]-w,e[3]-S))>0?[[b[0],b[1],b[2],A],[x[0],A,x[2],x[3]]]:[[b[0],b[1],M,b[3]],[M,x[1],x[2],x[3]]]}else if(e[0]>t[2]&&e[3]<t[1]){let M=x[2]+(b[0]-x[2])/2,A=b[3]+(x[1]-b[3])/2;return qo(Xt(e[2]-w,e[1]-S),Xt(e[0]-w,e[3]-S))>0?[[M,b[1],b[2],b[3]],[x[0],x[1],M,x[3]]]:[[b[0],b[1],b[2],A],[x[0],A,x[2],x[3]]]}else if(e[0]>t[2]&&e[1]>t[3]){let M=x[2]+(b[0]-x[2])/2,A=x[3]+(b[1]-x[3])/2;return qo(Xt(e[0]-w,e[1]-S),Xt(e[2]-w,e[3]-S))>0?[[M,b[1],b[2],b[3]],[x[0],x[1],M,x[3]]]:[[b[0],A,b[2],b[3]],[x[0],x[1],x[2],A]]}}return[b,x]},yf=(e,t,n,i,o,r)=>{let s=new Set,a=new Set;n===ze||n===he?a.add(t[1]):s.add(t[0]),o===ze||o===he?a.add(i[1]):s.add(i[0]),e.forEach(c=>{s.add(c[0]),s.add(c[2]),a.add(c[1]),a.add(c[3])}),s.add(r[0]),s.add(r[2]),a.add(r[1]),a.add(r[3]);let l=Array.from(a).sort((c,u)=>c-u),d=Array.from(s).sort((c,u)=>c-u);return{row:l.length,col:d.length,data:l.flatMap((c,u)=>d.map((m,p)=>({f:0,g:0,h:0,closed:!1,visited:!1,parent:null,addr:[p,u],pos:[m,c]})))}},sd=(e,t,n)=>{switch(t){case qe:return K(n[0],e[1]);case he:return K(e[2],n[1]);case Be:return K(n[0],e[3])}return K(e[0],n[1])},wf=(e,t,n,i)=>{if(i===he)switch(n){case he:return e.pos[0]>=t.pos[0]?4:e.pos[1]===t.pos[1]?0:2;case qe:return e.pos[1]>t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case Be:return e.pos[1]<t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case ze:return e.pos[1]===t.pos[1]?4:2}else if(i===ze)switch(n){case he:return e.pos[1]===t.pos[1]?4:2;case qe:return e.pos[1]>t.pos[1]&&e.pos[0]>t.pos[0]?1:3;case Be:return e.pos[1]<t.pos[1]&&e.pos[0]>t.pos[0]?1:3;case ze:return e.pos[0]<=t.pos[0]?4:e.pos[1]===t.pos[1]?0:2}else if(i===qe)switch(n){case he:return e.pos[1]>t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case qe:return e.pos[1]>=t.pos[1]?4:e.pos[0]===t.pos[0]?0:2;case Be:return e.pos[0]===t.pos[0]?4:2;case ze:return e.pos[1]>t.pos[1]&&e.pos[0]>t.pos[0]?1:3}else if(i===Be)switch(n){case he:return e.pos[1]<t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case qe:return e.pos[0]===t.pos[0]?4:2;case Be:return e.pos[1]<=t.pos[1]?4:e.pos[0]===t.pos[0]?0:2;case ze:return e.pos[1]<t.pos[1]&&e.pos[0]>t.pos[0]?1:3}return 0},Pf=([e,t],n)=>[no([e,t-1],n),no([e+1,t],n),no([e,t+1],n),no([e-1,t],n)],no=([e,t],n)=>e<0||e>=n.col||t<0||t>=n.row?null:n.data[t*n.col+e]??null,Qo=(e,t)=>{for(let n=0;n<t.col;n++)for(let i=0;i<t.row;i++){let o=no([n,i],t);if(o&&e[0]===o.pos[0]&&e[1]===o.pos[1])return o}return null},ud=e=>[Math.min(...e.map(t=>t[0])),Math.min(...e.map(t=>t[1])),Math.max(...e.map(t=>t[2])),Math.max(...e.map(t=>t[3]))],Jo=(e,t)=>{let n=t.get(e);return n&&we(n)?n:null},rn=(e,t,n,i)=>{let o=e[0][0],r=e[0][1],s=e.map(a=>ys(a,lf(Ps(e[0]),-1)));return(o<-vn||o>vn||r<-vn||r>vn||o+s[s.length-1][0]<-vn||o+s[s.length-1][0]>vn||r+s[s.length-1][1]<-vn||r+s[s.length-1][1]>vn)&&console.error("Elbow arrow normalization is outside reasonable bounds (> 1e6)",{x:o,y:r,points:s,...rd(s)}),s=s.map(([a,l])=>K(Zo(a,-1e6,1e6),Zo(l,-1e6,1e6))),{points:s,x:Zo(o,-1e6,1e6),y:Zo(r,-1e6,1e6),fixedSegments:(t?.length??0)>0?t:null,...rd(s),startIsSpecial:n,endIsSpecial:i}},Ts=e=>{if(e.length>1){let t=Math.abs(e[0][1]-e[1][1])<Math.abs(e[0][0]-e[1][0]);return e.filter((n,i)=>{if(i===0||i===e.length-1)return!0;let o=e[i+1],r=Math.abs(n[1]-o[1])<Math.abs(n[0]-o[0]);return t===r?(t=r,!1):(t=r,!0)})}return e},As=e=>e.length>=4?e.filter((t,n)=>{if(n===0||n===e.length-1)return!0;let i=e[n-1];return ws(i,t)>Ss}):e,Sf=e=>{switch(e){case 0:return qe;case 1:return he;case 2:return Be}return ze},ad=(e,t,n,i,o,r,s,a=!0,l=!0)=>s?a&&o&&r?Ds(e,o,t,r,void 0,l):i:o?Ye(n||[0,0],o,r??mf([o])):i,ld=(e,t,n,i,o,r)=>pd(e,t,n,n&&lt(n,o,Array(4).fill(Ut(n,o,e))),i,o,r),dd=(e,t,n,i)=>sn(e,n,t,Bt(i)),cd=(e,t)=>e[0]===t[0]&&e[1]===t[1],md=(e,t=Ss)=>e.slice(1).map((n,i)=>Math.abs(n[0]-e[i][0])<t||Math.abs(n[1]-e[i][1])<t).every(Boolean);var Xe=(e,t,n,i)=>{let o=!1,{points:r,fixedSegments:s,fileId:a}=n;X(e)&&(Object.keys(n).length===0||typeof r<"u"||typeof s<"u")?n={...n,angle:0,...Si({...e,x:n.x||e.x,y:n.y||e.y},t,n,i)}:typeof r<"u"&&(n={...If(r),...n});for(let l in n){let d=n[l];if(typeof d<"u"){if(e[l]===d&&(typeof d!="object"||d===null||l==="groupIds"||l==="scale"))continue;if(l==="scale"){let c=e[l],u=d;if(c[0]===u[0]&&c[1]===u[1])continue}else if(l==="points"){let c=e[l],u=d;if(c.length===u.length){let m=!1,p=c.length;for(;--p;){let h=c[p],f=u[p];if(h[0]!==f[0]||h[1]!==f[1]){m=!0;break}}if(!m)continue}}e[l]=d,o=!0}}return o&&((typeof n.height<"u"||typeof n.width<"u"||typeof a<"u"||typeof r<"u")&&ht.delete(e),e.version=n.version??e.version+1,e.versionNonce=n.versionNonce??vs(),e.updated=Bs()),e},Ae=(e,t,n=!1)=>{let i=!1;for(let o in t){let r=t[o];if(typeof r<"u"){if(e[o]===r&&(typeof r!="object"||r===null))continue;i=!0}}return!i&&!n?e:{...e,...t,version:t.version??e.version+1,versionNonce:t.versionNonce??vs(),updated:Bs()}},fd=(e,t)=>(e.version=(t??e.version)+1,e.versionNonce=vs(),e.updated=Bs(),e);I();import{ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO as jf,ARROW_LABEL_WIDTH_FRACTION as Vf,BOUND_TEXT_PADDING as ln,DEFAULT_FONT_SIZE as Kf,STICKY_NOTE_BODY_INSET_Y as Zf,STICKY_NOTE_PADDING as Rs,TEXT_ALIGN as wd,VERTICAL_ALIGN as Pd,getFontString as rr,isProdEnv as qf,invariant as Qf}from"@excalidraw/common";import{pointFrom as Os,pointRotateRads as Jf}from"@excalidraw/math";I();var oo={},hd=(e,t)=>{let n=oo[e]||(oo[e]={height:t});return n.height=t,n},gd=e=>{oo[e]&&delete oo[e]},u1=e=>oo[e]?.height??null;I();import{BOUND_TEXT_PADDING as tr,DEFAULT_FONT_SIZE as Mf,DEFAULT_FONT_FAMILY as Tf,getFontString as Af,isTestEnv as Df,normalizeEOL as vf}from"@excalidraw/common";var $e=(e,t,n)=>{let i=e.split(`
2
2
  `).map(a=>a||" ").join(`
3
- `),i=parseFloat(t),r=Pu(o,i,n);return{width:ga(o,t),height:r}},fa="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toLocaleUpperCase(),ha=(e,t)=>{let n=Iu(e);return n===0?Je(fa.split("").join(`
4
- `),e,t).width+Ho*2:n+Ho*2},zo=(e,t)=>Je("",e,t).width+Ho*2,Wx=()=>ga(fa,wu({fontSize:gu,fontFamily:xu}))>0,or=e=>bu(e).replace(/\t/g," "),ir=e=>or(e).split(`
5
- `),Vx=e=>{let t=ir(e.text).length;return e.height/t/e.fontSize},_o=(e,t)=>e*t,Ea=(e,t)=>_o(e,t)+Ho*2,No,$x=e=>{No=e},nr=class{canvas;constructor(){this.canvas=document.createElement("canvas")}getLineWidth(t,n){let o=this.canvas.getContext("2d");o.font=n;let r=o.measureText(t).width;return yu()?r*10:r}},Yt=(e,t)=>(No||(No=new nr),No.getLineWidth(e,t)),ga=(e,t)=>{let n=ir(e),o=0;return n.forEach(i=>{o=Math.max(o,Yt(i,t))}),o},Pu=(e,t,n)=>{let o=ir(e).length;return _o(t,n)*o},An=(()=>{let e={};return{calculate:(i,r)=>{let s=i.charCodeAt(0);if(e[r]||(e[r]=[]),!e[r][s]){let a=Yt(i,r);e[r][s]=a}return e[r][s]},getCache:i=>e[i],clearCache:i=>{e[i]=[]}}})(),Zx=e=>{let t=An.getCache(e);if(!t)return 0;let n=t.filter(o=>o!==void 0);return Math.min(...n)},Iu=e=>{let t=An.getCache(e);if(!t)return 0;let n=t.filter(o=>o!==void 0);return Math.max(...n)};P();import{isDevEnv as Su,isTestEnv as Mu}from"@excalidraw/common";var rr,Yo,sr,ew=e=>(rr||(rr=J.class(...Object.values(Pt))),rr.test(e)),Tu=()=>{if(!Yo)try{Yo=Du()}catch{Yo=Au()}return Yo},ar=()=>(sr||(sr=vu()),sr),Ve={WHITESPACE:/\s/u,HYPHEN:/-/u,OPENING:/<\(\[\{/u,CLOSING:/>\)\]\}.,:;!\?…\//u},Pt={CHAR:/\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}`'^〃〰〆#&*+-ー/\=|¦〒¬ ̄/u,OPENING:/([{〈《⦅「「『【〖〔〘〚<〝/u,CLOSING:/)]}〉》⦆」」』】〗〕〙〛>。.,、〟‥?!:;・〜〞/u,CURRENCY:/¥₩£¢$/u},fn={FLAG:/\p{RI}\p{RI}/u,JOINER:/(?:\p{Emoji_Modifier}|\uFE0F\u20E3?|[\u{E0020}-\u{E007E}]+\u{E007F})?/u,ZWJ:/\u200D/u,ANY:/[\p{Emoji}]/u,MOST:/[\p{Extended_Pictographic}\p{Emoji_Presentation}]/u},Au=()=>J.or(ar(),ue.On(Ve.HYPHEN,Ve.WHITESPACE,Pt.CHAR)),Du=()=>J.or(ar(),ue.Before(Ve.WHITESPACE).Build(),ue.After(Ve.WHITESPACE,Ve.HYPHEN).Build(),ue.Before(Pt.CHAR,Pt.CURRENCY).NotPrecededBy(Ve.OPENING,Pt.OPENING).Build(),ue.After(Pt.CHAR).NotFollowedBy(Ve.HYPHEN,Ve.CLOSING,Pt.CLOSING).Build(),ue.BeforeMany(Pt.OPENING).NotPrecededBy(Ve.OPENING).Build(),ue.AfterMany(Pt.CLOSING).NotFollowedBy(Ve.CLOSING).Build(),ue.AfterMany(Ve.CLOSING).FollowedBy(Ve.OPENING).Build()),vu=()=>J.group(J.or(fn.FLAG,J.and(fn.MOST,fn.JOINER,J.build(`(?:${fn.ZWJ.source}(?:${fn.FLAG.source}|${fn.ANY.source}${fn.JOINER.source}))*`)))),J={build:e=>new RegExp(e,"u"),join:(...e)=>e.map(t=>t.source).join(""),and:(...e)=>J.build(J.join(...e)),or:(...e)=>J.build(e.map(t=>t.source).join("|")),group:(...e)=>J.build(`(${J.join(...e)})`),class:(...e)=>J.build(`[${J.join(...e)}]`)},ue={On:(...e)=>{let t=J.join(...e);return J.build(`([${t}])`)},Before:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?=[${t}])`);return ue.Chain(n)},After:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?<=[${t}])`);return ue.Chain(n)},BeforeMany:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?<![${t}])(?=[${t}])`);return ue.Chain(n)},AfterMany:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?<=[${t}])(?![${t}])`);return ue.Chain(n)},NotBefore:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?![${t}])`);return ue.Chain(n)},NotAfter:(...e)=>{let t=J.join(...e),n=()=>J.build(`(?<![${t}])`);return ue.Chain(n)},Chain:e=>({Build:e,PreceededBy:(...t)=>{let n=e(),o=ue.After(...t).Build(),i=()=>J.and(o,n);return ue.Chain(i)},FollowedBy:(...t)=>{let n=e(),o=ue.Before(...t).Build(),i=()=>J.and(n,o);return ue.Chain(i)},NotPrecededBy:(...t)=>{let n=e(),o=ue.NotAfter(...t).Build(),i=()=>J.and(o,n);return ue.Chain(i)},NotFollowedBy:(...t)=>{let n=e(),o=ue.NotBefore(...t).Build(),i=()=>J.and(n,o);return ue.Chain(i)}})},Lu=e=>{let t=Tu();return e.normalize("NFC").split(t).filter(Boolean)},It=(e,t,n)=>{if(!Number.isFinite(n)||n<0)return e;let o=[],i=e.split(`
6
- `);for(let r of i){if(Yt(r,t)<=n){o.push(r);continue}let a=Cu(r,t,n);o.push(...a)}return o.join(`
7
- `)},Cu=(e,t,n)=>{let o=[],r=Lu(e)[Symbol.iterator](),s="",a=0,l=r.next();for(;!l.done;){let d=l.value,c=s+d,u=ku(d)?a+An.calculate(d,t):Yt(c,t);if(/\s/.test(d)||u<=n){s=c,a=u,l=r.next();continue}if(s)o.push(s.trimEnd()),s="",a=0;else{let p=Gu(d,t,n),m=p[p.length-1]??"",f=p.slice(0,-1);o.push(...f),s=m,a=Yt(m,t),l=r.next()}}if(s){let d=Bu(s,t,n);o.push(d)}return o},Gu=(e,t,n)=>{if(ar().test(e))return[e];Ou(e);let o=[],i=Array.from(e),r="",s=0;for(let a of i){let l=An.calculate(a,t),d=s+l;if(d<=n){r=r+a,s=d;continue}r&&o.push(r),r=a,s=l}return r&&o.push(r),o},Bu=(e,t,n)=>{if(!(Yt(e,t)>n))return e;let[,i,r]=e.match(/^(.+?)(\s+)$/)??[e,e.trimEnd(),""],s=Yt(i,t);for(let a of Array.from(r)){let l=An.calculate(a,t),d=s+l;if(d>n)break;i=i+a,s=d}return i},ku=e=>e.codePointAt(0)!==void 0&&e.codePointAt(1)===void 0,Ou=e=>{if((Mu()||Su())&&/\s/.test(e))throw new Error("Word should not contain any whitespaces!")};var ba=(e,t,n)=>{let o=n.getNonDeletedElementsMap(),i;Hu()||zu(!t||!_(t)||e.angle===0,"text element angle must be 0 if bound to arrow container");let r={x:e.x,y:e.y,text:e.text,width:e.width,height:e.height,angle:t?_(t)?0:t.angle:e.angle};r.text=e.text,(t||!e.autoResize)&&(i=t?et(t,e):e.width,r.text=It(e.originalText,Uo(e),i));let s=Je(r.text,Uo(e),e.lineHeight);if(e.autoResize&&(r.width=s.width),r.height=s.height,t){let a=no(t,e),l=et(t,e);if(!_(t)&&s.height>a){let p=lr(s.height,t.type);n.mutateElement(t,{height:p}),pa(t.id,p)}if(s.width>l){let p=lr(s.width,t.type);n.mutateElement(t,{width:p})}let d={...e,...r},{x:c,y:u}=to(t,d,o);r.x=c,r.y=u}n.mutateElement(e,r)},hn=(e,t,n,o=!1)=>{let i=t.getNonDeletedElementsMap();if(!St(e))return;ma(e.id);let s=W(e,i);if(s&&s.text){if(!e)return;let a=s.text,l=s.height,d=s.width,c=et(e,s),u=no(e,s),p=e.height;if(o||n!=="n"&&n!=="s"){a&&(a=It(s.originalText,Uo(s),c));let m=Je(a,Uo(s),s.lineHeight);l=m.height,d=m.width}if(l>u){p=lr(l,e.type);let m=p-e.height,f=!_(e)&&(n==="ne"||n==="nw"||n==="n")?e.y-m:e.y;t.mutateElement(e,{height:p,y:f})}t.mutateElement(s,{text:a,width:d,height:l}),_(e)||t.mutateElement(s,to(e,s,i))}},to=(e,t,n)=>{if(_(e))return U.getBoundTextElementPosition(e,t,n);let o=dr(e),i=no(e,t),r=et(e,t),s,a;t.verticalAlign===wa.TOP?a=o.y:t.verticalAlign===wa.BOTTOM?a=o.y+(i-t.height):a=o.y+(i/2-t.height/2),t.textAlign===xa.LEFT?s=o.x:t.textAlign===xa.RIGHT?s=o.x+(r-t.width):s=o.x+(r/2-t.width/2);let l=e.angle??0;if(l!==0){let d=ya(o.x+r/2,o.y+i/2),c=ya(s+t.width/2,a+t.height/2),[u,p]=_u(c,d,l);return{x:u-t.width/2,y:p-t.height/2}}return{x:s,y:a}},St=e=>e?.boundElements?.length&&e?.boundElements?.find(t=>t.type==="text")?.id||null,W=(e,t)=>{if(!e)return null;let n=St(e);return n&&t.get(n)||null},Ce=(e,t)=>e&&e.containerId&&t.get(e.containerId)||null,cw=(e,t,n)=>{if(!_(e))return{x:e.x+e.width/2,y:e.y+e.height/2};if(U.getPointsGlobalCoordinates(e,n).length%2===1){let s=Math.floor(e.points.length/2),a=U.getPointGlobalCoordinates(e,e.points[s],n);return{x:a[0],y:a[1]}}let i=e.points.length/2-1,r=U.getEditorMidPoints(e,n,t)[i];return r||(r=U.getSegmentMidPoint(e,i+1)),{x:r[0],y:r[1]}},dr=e=>{let t=at,n=at;return e.type==="ellipse"&&(t+=e.width/2*(1-Math.sqrt(2)/2),n+=e.height/2*(1-Math.sqrt(2)/2)),e.type==="diamond"&&(t+=e.width/4,n+=e.height/4),{x:e.x+t,y:e.y+n}},uw=(e,t)=>_(t)?0:t?t.angle:e.angle,pw=(e,t,n)=>{if(_(e))return U.getBoundTextElementPosition(e,t,n)},mw=(e,t)=>e.some(n=>{if(ce(n)){let o=Ce(n,t);return!_(o)}return!1}),fw=(e,t)=>e.some(n=>{if(ce(n)){let o=Ce(n,t);return!_(o)}return oe(n)}),Yu=new Set(["rectangle","ellipse","diamond","arrow"]),hw=e=>Yu.has(e.type),lr=(e,t)=>{e=Math.ceil(e);let n=at*2;return t==="ellipse"?Math.round((e+n)/Math.sqrt(2)*2):t==="arrow"?e+n*8:t==="diamond"?2*(e+n):e+n},et=(e,t)=>{let{width:n}=e;if(_(e)){let o=(t?.fontSize??Nu)*Ru;return Math.max(Fu*n,o)}return e.type==="ellipse"?Math.round(n/2*Math.sqrt(2))-at*2:e.type==="diamond"?Math.round(n/2)-at*2:n-at*2},no=(e,t)=>{let{height:n}=e;return _(e)?n-at*8*2<=0?t.height:n:e.type==="ellipse"?Math.round(n/2*Math.sqrt(2))-at*2:e.type==="diamond"?Math.round(n/2)-at*2:n-at*2},Ew=(e,t=`
3
+ `),o=parseFloat(t),r=Bf(i,o,n);return{width:yd(i,t),height:r}},Ed="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toLocaleUpperCase(),xd=(e,t)=>{let n=Lf(e);return n===0?$e(Ed.split("").join(`
4
+ `),e,t).width+tr*2:n+tr*2},nr=(e,t)=>$e("",e,t).width+tr*2,h1=()=>yd(Ed,Af({fontSize:Mf,fontFamily:Tf}))>0,ro=e=>vf(e).replace(/\t/g," "),ks=e=>ro(e).split(`
5
+ `),g1=e=>{let t=ks(e.text).length;return e.height/t/e.fontSize},ir=(e,t)=>e*t,bd=(e,t)=>ir(e,t)+tr*2,er,E1=e=>{er=e},Ls=class{canvas;constructor(){this.canvas=document.createElement("canvas")}getLineWidth(t,n){let i=this.canvas.getContext("2d");i.font=n;let r=i.measureText(t).width;return Df()?r*10:r}},Ln=(e,t)=>(er||(er=new Ls),er.getLineWidth(e,t)),yd=(e,t)=>{let n=ks(e),i=0;return n.forEach(o=>{i=Math.max(i,Ln(o,t))}),i},Bf=(e,t,n)=>{let i=ks(e).length;return ir(t,n)*i},Ii=(()=>{let e={};return{calculate:(o,r)=>{let s=o.charCodeAt(0);if(e[r]||(e[r]=[]),!e[r][s]){let a=Ln(o,r);e[r][s]=a}return e[r][s]},getCache:o=>e[o],clearCache:o=>{e[o]=[]}}})(),x1=e=>{let t=Ii.getCache(e);if(!t)return 0;let n=t.filter(i=>i!==void 0);return Math.min(...n)},Lf=e=>{let t=Ii.getCache(e);if(!t)return 0;let n=t.filter(i=>i!==void 0);return Math.max(...n)};I();import{isDevEnv as kf,isTestEnv as Cf}from"@excalidraw/common";var Cs,or,Ns,S1=e=>(Cs||(Cs=de.class(...Object.values(an))),Cs.test(e)),Nf=()=>{if(!or)try{or=Of()}catch{or=Gf()}return or},Gs=()=>(Ns||(Ns=Ff()),Ns),Pt={WHITESPACE:/\s/u,HYPHEN:/-/u,OPENING:/<\(\[\{/u,CLOSING:/>\)\]\}.,:;!\?…\//u},an={CHAR:/\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}`'^〃〰〆#&*+-ー/\=|¦〒¬ ̄/u,OPENING:/([{〈《⦅「「『【〖〔〘〚<〝/u,CLOSING:/)]}〉》⦆」」』】〗〕〙〛>。.,、〟‥?!:;・〜〞/u,CURRENCY:/¥₩£¢$/u},ni={FLAG:/\p{RI}\p{RI}/u,JOINER:/(?:\p{Emoji_Modifier}|\uFE0F\u20E3?|[\u{E0020}-\u{E007E}]+\u{E007F})?/u,ZWJ:/\u200D/u,ANY:/[\p{Emoji}]/u,MOST:/[\p{Extended_Pictographic}\p{Emoji_Presentation}]/u},Gf=()=>de.or(Gs(),Me.On(Pt.HYPHEN,Pt.WHITESPACE,an.CHAR)),Of=()=>de.or(Gs(),Me.Before(Pt.WHITESPACE).Build(),Me.After(Pt.WHITESPACE,Pt.HYPHEN).Build(),Me.Before(an.CHAR,an.CURRENCY).NotPrecededBy(Pt.OPENING,an.OPENING).Build(),Me.After(an.CHAR).NotFollowedBy(Pt.HYPHEN,Pt.CLOSING,an.CLOSING).Build(),Me.BeforeMany(an.OPENING).NotPrecededBy(Pt.OPENING).Build(),Me.AfterMany(an.CLOSING).NotFollowedBy(Pt.CLOSING).Build(),Me.AfterMany(Pt.CLOSING).FollowedBy(Pt.OPENING).Build()),Ff=()=>de.group(de.or(ni.FLAG,de.and(ni.MOST,ni.JOINER,de.build(`(?:${ni.ZWJ.source}(?:${ni.FLAG.source}|${ni.ANY.source}${ni.JOINER.source}))*`)))),de={build:e=>new RegExp(e,"u"),join:(...e)=>e.map(t=>t.source).join(""),and:(...e)=>de.build(de.join(...e)),or:(...e)=>de.build(e.map(t=>t.source).join("|")),group:(...e)=>de.build(`(${de.join(...e)})`),class:(...e)=>de.build(`[${de.join(...e)}]`)},Me={On:(...e)=>{let t=de.join(...e);return de.build(`([${t}])`)},Before:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?=[${t}])`);return Me.Chain(n)},After:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?<=[${t}])`);return Me.Chain(n)},BeforeMany:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?<![${t}])(?=[${t}])`);return Me.Chain(n)},AfterMany:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?<=[${t}])(?![${t}])`);return Me.Chain(n)},NotBefore:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?![${t}])`);return Me.Chain(n)},NotAfter:(...e)=>{let t=de.join(...e),n=()=>de.build(`(?<![${t}])`);return Me.Chain(n)},Chain:e=>({Build:e,PreceededBy:(...t)=>{let n=e(),i=Me.After(...t).Build(),o=()=>de.and(i,n);return Me.Chain(o)},FollowedBy:(...t)=>{let n=e(),i=Me.Before(...t).Build(),o=()=>de.and(n,i);return Me.Chain(o)},NotPrecededBy:(...t)=>{let n=e(),i=Me.NotAfter(...t).Build(),o=()=>de.and(i,n);return Me.Chain(o)},NotFollowedBy:(...t)=>{let n=e(),i=Me.NotBefore(...t).Build(),o=()=>de.and(n,i);return Me.Chain(o)}})},Rf=e=>{let t=Nf();return e.normalize("NFC").split(t).filter(Boolean)},Lt=(e,t,n)=>_f(e,t,n).map(i=>i.text).join(`
6
+ `),zf=e=>{let t=0;return e.split(`
7
+ `).map(n=>{let i=t,o=i+n.length;return t=o+1,{text:n,start:i,end:o}})},_f=(e,t,n)=>{if(!Number.isFinite(n)||n<0)return zf(e);let i=[],o=0;for(let r of e.split(`
8
+ `))Ln(r,t)<=n?i.push({text:r,start:o,end:o+r.length}):i.push(...Hf(r,t,n,o)),o+=r.length+1;return i},Hf=(e,t,n,i)=>{let o=[],r=Rf(e),s="",a=i,l=i,d=0,c=i,u=0;for(;u<r.length;){let m=r[u],p=c,h=p+m.length,f=s+m,g=Xf(m)?d+Ii.calculate(m,t):Ln(f,t);if(/\s/.test(m)||g<=n){s||(a=p),s=f,l=h,d=g,c=h,u++;continue}if(s)o.push(Yf(s,a,l)),s="",a=p,l=p,d=0;else{let E=Wf(m,t,n,p),b=E[E.length-1]??{text:"",start:p,end:p},x=E.slice(0,-1);o.push(...x),s=b.text,a=b.start,l=b.end,d=Ln(b.text,t),c=h,u++}}if(s){let m=Uf(s,a,l,t,n);o.push(m)}return o},Wf=(e,t,n,i)=>{if(Gs().test(e))return[{text:e,start:i,end:i+e.length}];$f(e);let o=[],r=Array.from(e),s="",a=i,l=i,d=0,c=i;for(let u of r){let m=c,p=m+u.length,h=Ii.calculate(u,t),f=d+h;if(f<=n){s||(a=m),s=s+u,l=p,d=f,c=p;continue}s&&o.push({text:s,start:a,end:l}),s=u,a=m,l=p,d=h,c=p}return s&&o.push({text:s,start:a,end:l}),o},Uf=(e,t,n,i,o)=>{if(!(Ln(e,i)>o))return{text:e,start:t,end:n};let[,s,a]=e.match(/^(.+?)(\s+)$/)??[e,e.trimEnd(),""],l=Ln(s,i);for(let d of Array.from(a)){let c=Ii.calculate(d,i),u=l+c;if(u>o)break;s=s+d,l=u}return{text:s,start:t,end:n-(e.length-s.length)}},Yf=(e,t,n)=>{let i=e.trimEnd();return{text:i,start:t,end:n-(e.length-i.length)}},Xf=e=>e.codePointAt(0)!==void 0&&e.codePointAt(1)===void 0,$f=e=>{if((Cf()||kf())&&/\s/.test(e))throw new Error("Word should not contain any whitespaces!")};var sr=(e,t,n)=>{let i=n.getNonDeletedElementsMap();if(t&&be(t)){Mi(t,n,{text:e});return}let o;qf()||Qf(!t||!U(t)||e.angle===0,"text element angle must be 0 if bound to arrow container");let r={x:e.x,y:e.y,text:e.text,width:e.width,height:e.height,angle:t?U(t)?0:t.angle:e.angle};r.text=e.text,(t||!e.autoResize)&&(o=t?kt(t,e):e.width,r.text=Lt(e.originalText,rr(e),o));let s=$e(r.text,rr(e),e.lineHeight);if(e.autoResize&&(r.width=s.width),r.height=s.height,t){let a=so(t,e),l=kt(t,e);if(!U(t)&&s.height>a){let m=Fs(s.height,t.type);n.mutateElement(t,{height:m}),hd(t.id,m)}if(s.width>l){let m=Fs(s.width,t.type);n.mutateElement(t,{width:m})}let d={...e,...r},{x:c,y:u}=oi(t,d,i);r.x=c,r.y=u}n.mutateElement(e,r)},ii=(e,t,n,i=!1,o=!1,r=!1)=>{if(be(e)){Mi(e,t,{bindings:!1});return}let s=t.getNonDeletedElementsMap();if(!Ct(e))return;gd(e.id);let l=Q(e,s);if(l&&l.text){if(!e)return;let d=l.text,c=l.height,u=l.width,m=kt(e,l),p=so(e,l),h=e.height;if(i||n!=="n"&&n!=="s"){d&&(d=Lt(l.originalText,rr(l),m));let f=$e(d,rr(l),l.lineHeight);c=f.height,u=f.width}if(c>p){h=Fs(c,e.type);let f=(n==="n"||n==="ne"||n==="nw")!==r;t.mutateElement(e,{height:h,...!U(e)&&ao(e,h,o?"center":f?"bottom":"top")})}t.mutateElement(l,{text:d,width:u,height:c}),U(e)||t.mutateElement(l,oi(e,l,s))}},oi=(e,t,n)=>{if(U(e))return R.getBoundTextElementPosition(e,t,n);let i=zs(e),o=so(e,t),r=kt(e,t),s,a;if(t.verticalAlign===Pd.TOP)a=i.y;else if(t.verticalAlign===Pd.BOTTOM)a=i.y+(o-t.height);else if(be(e)){let d=e.height-Rs*2;a=i.y+Math.min((d-t.height)/2,o-t.height)}else a=i.y+(o/2-t.height/2);t.textAlign===wd.LEFT?s=i.x:t.textAlign===wd.RIGHT?s=i.x+(r-t.width):s=i.x+(r/2-t.width/2);let l=e.angle??0;if(l!==0){let d=be(e)?Os(e.x+e.width/2,e.y+e.height/2):Os(i.x+r/2,i.y+o/2),c=Os(s+t.width/2,a+t.height/2),[u,m]=Jf(c,d,l);return{x:u-t.width/2,y:m-t.height/2}}return{x:s,y:a}},Ct=e=>e?.boundElements?.length&&e?.boundElements?.find(t=>t.type==="text")?.id||null,Q=(e,t)=>{if(!e)return null;let n=Ct(e);if(n){let i=t.get(n)||null;return i&&!Qe(i)&&console.error("[NONDELETED][INVARIANT] Bound text element `isDeleted: true` which is not expected."),i}return null},_e=(e,t)=>e&&e.containerId&&t.get(e.containerId)||null,O1=(e,t)=>{if(!U(e))return{x:e.x+e.width/2,y:e.y+e.height/2};let n=R.getBoundTextElementCenter(e,t);return{x:n[0],y:n[1]}},zs=e=>{let t=be(e)?Rs:ln,n=t,i=t;return e.type==="ellipse"&&(n+=e.width/2*(1-Math.sqrt(2)/2),i+=e.height/2*(1-Math.sqrt(2)/2)),e.type==="diamond"&&(n+=e.width/4,i+=e.height/4),{x:e.x+n,y:e.y+i}},F1=(e,t)=>U(t)?0:t?t.angle:e.angle,R1=(e,t,n)=>{if(U(e))return R.getBoundTextElementPosition(e,t,n)},z1=(e,t)=>e.some(n=>{if(Ie(n)){let i=_e(n,t);return!U(i)}return!1}),_1=(e,t)=>e.some(n=>{if(Ie(n)){let i=_e(n,t);return!U(i)}return V(n)}),eh=new Set(["rectangle","stickynote","ellipse","diamond","arrow"]),H1=e=>eh.has(e.type),Fs=(e,t)=>{e=Math.ceil(e);let n=ln*2;return t==="ellipse"?Math.round((e+n)/Math.sqrt(2)*2):t==="arrow"?e+n*8:t==="diamond"?2*(e+n):e+n},kt=(e,t)=>{let{width:n}=e;if(U(e)){let i=(t?.fontSize??Kf)*jf;return Math.max(Vf*n,i)}return e.type==="ellipse"?Math.round(n/2*Math.sqrt(2))-ln*2:e.type==="diamond"?Math.round(n/2)-ln*2:n-(be(e)?Rs:ln)*2},so=(e,t)=>{let{height:n}=e;return be(e)?Math.max(0,n-Zf):U(e)?n-ln*8*2<=0?t.height:n:e.type==="ellipse"?Math.round(n/2*Math.sqrt(2))-ln*2:e.type==="diamond"?Math.round(n/2)-ln*2:n-ln*2},W1=(e,t=`
8
9
 
9
- `)=>e.reduce((o,i)=>(oe(i)&&o.push(i.text),o),[]).join(t);P();import{curvePointDistance as cr,distanceToLineSegment as ur,pointRotateRads as pr}from"@excalidraw/math";import{ellipse as Uu,ellipseDistanceFromPoint as Xu}from"@excalidraw/math/ellipse";var Ut=(e,t,n)=>{switch(e.type){case"selection":case"rectangle":case"image":case"text":case"iframe":case"embeddable":case"frame":case"magicframe":return ju(e,t,n);case"diamond":return Wu(e,t,n);case"ellipse":return Vu(e,t,n);case"line":case"arrow":case"freedraw":return $u(e,n)}},ju=(e,t,n)=>{let o=he(e,t),i=pr(n,o,-e.angle),[r,s]=Mn(e);return Math.min(...r.map(a=>ur(i,a)),...s.map(a=>cr(a,i)).filter(a=>a!==null))},Wu=(e,t,n)=>{let o=he(e,t),i=pr(n,o,-e.angle),[r,s]=Tn(e);return Math.min(...r.map(a=>ur(i,a)),...s.map(a=>cr(a,i)).filter(a=>a!==null))},Vu=(e,t,n)=>{let o=he(e,t);return Xu(pr(n,o,-e.angle),Uu(o,e.width/2,e.height/2))},$u=(e,t)=>{let[n,o]=Bo(e);return Math.min(...n.map(i=>ur(t,i)),...o.map(i=>cr(i,t)))};var Wo=e=>{if(e.type==="arrow")return!1;let t=!Zu(e.backgroundColor)||st(e)||Ro(e)||oe(e);return e.type==="line"?t&&mn(e.points):e.type==="freedraw"?t&&mn(e.points):t||we(e)},op=({point:e,element:t,threshold:n,elementsMap:o,frameNameBound:i=null})=>{let r=i?Xo(Mt(i.x-n,i.y-n),e,Mt(i.x+i.width+n,i.y+i.height+n)):!1,s=pe(t,o,!0);return!Xo(Mt(s[0]-n,s[1]-n),lt(e,dt(s),-t.angle),Mt(s[2]+n,s[3]+n))&&!r?!1:Wo(t)&&Aa(e,t,o)||Pa(e,t,o,n)||r},ip=(e,t,n,o=0)=>{let[i,r,s,a]=pe(t,n);return i-=o,r-=o,s+=o,a+=o,Xo(Mt(i,r),e,Mt(s,a))},Ow=(e,t)=>!op(e)&&!rp(e.point,e.element,t)&&ip(e.point,e.element,t),rp=(e,t,n)=>{let o=W(t,n);if(!o)return!1;let i=j(t)?{...o,...U.getBoundTextElementPosition(t,o,n)}:o;return Aa(e,i,n)},En=(e,t,n,o=0,i=!1)=>{let r=[Math.min(n[0][0]-o,n[1][0]-o),Math.min(n[0][1]-o,n[1][1]-o),Math.max(n[0][0]+o,n[1][0]+o),Math.max(n[0][1]+o,n[1][1]+o)],s=pe(e,t);if(!gn(r,s))return[];switch(e.type){case"rectangle":case"image":case"text":case"iframe":case"embeddable":case"frame":case"selection":case"magicframe":return ap(e,t,n,o,i);case"diamond":return lp(e,t,n,o,i);case"ellipse":return dp(e,t,n,o);case"line":case"freedraw":case"arrow":return sp(e,n,i)}},Ma=(e,t,n,o,i,r=!1)=>{for(let s of e){let a=Vo(s[0],s[1],s[2],s[3]),l=[Math.min(t[0][0],t[1][0]),Math.min(t[0][1],t[1][1]),Math.max(t[0][0],t[1][0]),Math.max(t[0][1],t[1][1])];if(!gn(a,l))continue;let d=Ia(s,t);if(d.length>0){for(let c of d)n.push(lt(c,o,i));if(r)return n}}return n},Ta=(e,t,n,o,i,r=!1)=>{for(let s of e){let a=Sa(s,t);if(a&&(n.push(lt(a,o,i)),r))return n}return n},sp=(e,t,n=!1)=>{let[o,i]=Bo(e),r=[];for(let s of o){let a=Sa(s,t);if(a&&(r.push(a),n))return r}for(let s of i){let a=Vo(s[0],s[1],s[2],s[3]),l=[Math.min(t[0][0],t[1][0]),Math.min(t[0][1],t[1][1]),Math.max(t[0][0],t[1][0]),Math.max(t[0][1],t[1][1])];if(!gn(a,l))continue;let d=Ia(s,t);if(d.length>0&&(r.push(...d),n))return r}return r},ap=(e,t,n,o=0,i=!1)=>{let r=he(e,t),s=lt(n[0],r,-e.angle),a=lt(n[1],r,-e.angle),l=jo(s,a),[d,c]=Mn(e,o),u=[];return Ta(d,l,u,r,e.angle,i),i&&u.length>0||Ma(c,l,u,r,e.angle,i),u},lp=(e,t,n,o=0,i=!1)=>{let r=he(e,t),s=lt(n[0],r,-e.angle),a=lt(n[1],r,-e.angle),l=jo(s,a),[d,c]=Tn(e,o),u=[];return Ta(d,l,u,r,e.angle,i),i&&u.length>0||Ma(c,l,u,r,e.angle,i),u},dp=(e,t,n,o=0)=>{let i=he(e,t),r=lt(n[0],i,-e.angle),s=lt(n[1],i,-e.angle);return np(tp(i,e.width/2+o,e.height/2+o),jo(r,s)).map(a=>lt(a,i,e.angle))},Pa=(e,t,n,o=1)=>Ut(t,n,e)<=o,Aa=(e,t,n)=>{if((j(t)||Me(t))&&!mn(t.points))return!1;let[o,i,r,s]=pe(t,n);if(!Xo(Mt(o,i),e,Mt(r,s)))return!1;let a=Mt((o+r)/2,(i+s)/2),l=qu(ep(Ju(Qu(e,a,.1)),Math.max(t.width,t.height)*2),a),d=jo(e,l);return En(t,n,d).filter((u,p,m)=>m.findIndex(f=>Ku(f,u))===p).length%2===1};P();import{invariant as Da,isDevEnv as cp,isTestEnv as up}from"@excalidraw/common";import{pointFrom as Xt,pointFromVector as $o,pointRotateRads as Zo,pointScaleFromOrigin as qo,pointsEqual as pp,triangleIncludesPoint as mr,vectorCross as Ge,vectorFromPoint as K,vectorScale as Ko}from"@excalidraw/math";var fe=[1,0],ye=[0,1],ke=[-1,0],_e=[0,-1],Tt=e=>{let[t,n]=e,o=Math.abs(t),i=Math.abs(n);return t>i?fe:t<=-i?ke:n>o?ye:_e},Be=(e,t)=>Tt(K(e,t)),tt=(e,t)=>Oe(Be(e,t)),me=(e,t)=>e[0]===t[0]&&e[1]===t[1],Oe=e=>me(e,fe)||me(e,ke),_w=e=>!Oe(e),mp=(e,t,n)=>{let o=dt(t);(cp()||up())&&(Da(e.width>0&&e.height>0,"Diamond element has no width or height"),Da(!pp(o,n),"The point is too close to the element mid point to determine heading"));let i=.95,r=$o(Ko(K(Zo(Xt(e.x+e.width/2,e.y),o,e.angle),o),i),o),s=$o(Ko(K(Zo(Xt(e.x+e.width,e.y+e.height/2),o,e.angle),o),i),o),a=$o(Ko(K(Zo(Xt(e.x+e.width/2,e.y+e.height),o,e.angle),o),i),o),l=$o(Ko(K(Zo(Xt(e.x,e.y+e.height/2),o,e.angle),o),i),o);if(Ge(K(n,r),K(r,s))<=0&&Ge(K(n,r),K(r,l))>0)return Be(r,o);if(Ge(K(n,s),K(s,a))<=0&&Ge(K(n,s),K(s,r))>0)return Be(s,o);if(Ge(K(n,a),K(a,l))<=0&&Ge(K(n,a),K(a,s))>0)return Be(a,o);if(Ge(K(n,l),K(l,r))<=0&&Ge(K(n,l),K(l,a))>0)return Be(l,o);if(Ge(K(n,o),K(r,o))<=0&&Ge(K(n,o),K(s,o))>0){let c=e.width>e.height?r:s;return Be(c,o)}else if(Ge(K(n,o),K(s,o))<=0&&Ge(K(n,o),K(a,o))>0){let c=e.width>e.height?a:s;return Be(c,o)}else if(Ge(K(n,o),K(a,o))<=0&&Ge(K(n,o),K(l,o))>0){let c=e.width>e.height?a:l;return Be(c,o)}let d=e.width>e.height?r:l;return Be(d,o)},oo=(e,t,n)=>{let i=dt(t);if(e.type==="diamond")return mp(e,t,n);let r=qo(Xt(t[0],t[1]),i,2),s=qo(Xt(t[2],t[1]),i,2),a=qo(Xt(t[0],t[3]),i,2),l=qo(Xt(t[2],t[3]),i,2);return mr([r,s,i],n)?_e:mr([s,l,i],n)?fe:mr([l,a,i],n)?ye:ke},fr=e=>[e[0]===0?0:e[0]>0?-1:1,e[1]===0?0:e[1]>0?-1:1];P();import{getSizeFromPoints as Gp,randomInteger as Mr,getUpdatedTimestamp as Tr}from"@excalidraw/common";P();import{clamp as Qo,pointDistance as gr,pointFrom as z,pointScaleFromOrigin as fp,pointsEqual as ro,pointTranslate as Er,vector as ct,vectorCross as Jo,vectorFromPoint as xr,vectorScale as hp}from"@excalidraw/math";import{BinaryHeap as Ep,invariant as Dn,isAnyTrue as gp,tupleToCoors as xp,getSizeFromPoints as va,isDevEnv as wp,arrayToMap as yp}from"@excalidraw/common";var wr=1,ee=40,bp=(e,t)=>{let n=e.fixedSegments?e.fixedSegments.slice():null;if(n){let o=[];e.points.map(s=>z(e.x+s[0],e.y+s[1])).forEach((s,a,l)=>{if(a<2)return o.push(s);let d=Be(s,l[a-1]),c=Be(l[a-1],l[a-2]);if(me(d,c)){let u=n?.findIndex(m=>m.index===a-1)??-1,p=n?.findIndex(m=>m.index===a)??-1;p!==-1&&(n[p].start=z(l[a-2][0]-e.x,l[a-2][1]-e.y)),u!==-1&&n.splice(u,1),o.splice(-1,1),n.forEach(m=>{m.index>a-1&&(m.index-=1)})}return o.push(s)});let i=[];o.forEach((s,a,l)=>{if(a<3)return i.push(s);if(gr(l[a-2],l[a-1])<wr){let d=n?.findIndex(p=>p.index===a-2)??-1,c=n?.findIndex(p=>p.index===a-1)??-1;c!==-1&&n.splice(c,1),d!==-1&&n.splice(d,1),i.splice(-2,2),n.forEach(p=>{p.index>a-2&&(p.index-=2)});let u=tt(s,l[a-1]);return i.push(z(u?s[0]:l[a-2][0],u?l[a-2][1]:s[1]))}i.push(s)});let r=n.filter(s=>s.index!==1&&s.index!==i.length-1);return r.length===0?At(Pr(Ir(br(e,yr(e,t,i.map(s=>z(s[0]-e.x,s[1]-e.y))))??[])),r,null,null):(wp()&&Dn(Ra(i),"Invalid elbow points with fixed segments"),At(i,r,e.startIsSpecial,e.endIsSpecial))}return{x:e.x,y:e.y,points:e.points,fixedSegments:e.fixedSegments,startIsSpecial:e.startIsSpecial,endIsSpecial:e.endIsSpecial}},Pp=(e,t,n)=>{let o=t.map(T=>T.index),r=(e.fixedSegments?.map(T=>T.index)??[]).findIndex(T=>!o.includes(T));if(r===-1||!e.fixedSegments?.[r])return{points:e.points};let s=e.fixedSegments[r].index,a=e.fixedSegments[r-1],l=e.fixedSegments[r+1],d=e.x+(a?a.end[0]:0),c=e.y+(a?a.end[1]:0),u=a?null:e.startBinding,p=l?null:e.endBinding,{startHeading:m,endHeading:f,startGlobalPoint:E,endGlobalPoint:h,hoveredStartElement:g,hoveredEndElement:x,...y}=yr({x:d,y:c,startBinding:u,endBinding:p,startArrowhead:null,endArrowhead:null,points:e.points},n,[z(0,0),z(e.x+(l?.start[0]??e.points[e.points.length-1][0])-d,e.y+(l?.start[1]??e.points[e.points.length-1][1])-c)],{isDragging:!1}),{points:b}=At(Pr(Ir(br(e,{startHeading:m,endHeading:f,startGlobalPoint:E,endGlobalPoint:h,hoveredStartElement:g,hoveredEndElement:x,...y})??[])),t,null,null);if(!b||b.length<2)throw new Error("Property 'points' is required in the update returned by normalizeArrowElementUpdate()");let w=[];if(a)for(let T=0;T<a.index;T++)w.push(z(e.x+e.points[T][0],e.y+e.points[T][1]));if(b.forEach(T=>{w.push(z(e.x+(a?a.end[0]:0)+T[0],e.y+(a?a.end[1]:0)+T[1]))}),l)for(let T=l.index;T<e.points.length;T++)w.push(z(e.x+e.points[T][0],e.y+e.points[T][1]));let I=(l?.index??e.points.length)-(a?.index??0)-1,M=t.map(T=>T.index>s?{...T,index:T.index-I+(b.length-1)}:T),D=w.flatMap((T,N)=>{let C=w[N-1],R=w[N+1];if(C&&R){let L=Be(T,C),$=Be(R,T);if(me(L,$))return M.forEach(H=>{H.index>N&&(H.index-=1)}),[];if(me(L,fr($)))return M.forEach(H=>{H.index>N&&(H.index+=1)}),[T,T]}return[T]});return At(D,M,!1,!1)},Ip=(e,t,n,o,i,r)=>{let s=t.map((w,I)=>e.fixedSegments==null||e.fixedSegments[I]===void 0||e.fixedSegments[I].index!==w.index||(w.start[0]!==e.fixedSegments[I].start[0]&&w.end[0]!==e.fixedSegments[I].end[0])!=(w.start[1]!==e.fixedSegments[I].start[1]&&w.end[1]!==e.fixedSegments[I].end[1])?I:null).filter(w=>w!==null).shift();if(s==null)return{points:e.points};let a=e.fixedSegments?.findIndex(w=>w.index===1)??-1,l=e.fixedSegments?.findIndex(w=>w.index===e.points.length-1)??-1,d=gr(t[s].start,t[s].end),c=d<ee+5;if(a===-1&&t[s].index===1&&i){let w=Oe(n),M=(w?me(n,fe):me(n,ye))?c?d/2:ee:c?-d/2:-ee;t[s].start=z(t[s].start[0]+(w?M:0),t[s].start[1]+(w?0:M))}if(l===-1&&t[s].index===e.points.length-1&&r){let w=Oe(o),M=(w?me(o,fe):me(o,ye))?c?d/2:ee:c?-d/2:-ee;t[s].end=z(t[s].end[0]+(w?M:0),t[s].end[1]+(w?0:M))}let u=t.map(w=>({...w,start:z(e.x+w.start[0],e.y+w.start[1]),end:z(e.x+w.end[0],e.y+w.end[1])})),p=e.points.map((w,I)=>z(e.x+w[0],e.y+w[1])),m=u[s].index-1,f=u[s].index,E=u[s].start,h=u[s].end,g=p[m-1]&&!ro(p[m],p[m-1])?tt(p[m-1],p[m]):void 0,x=p[f+1]&&!ro(p[f],p[f+1])?tt(p[f+1],p[f]):void 0;if(g!==void 0){let w=g?1:0;p[m-1][w]=E[w]}if(p[m]=E,p[f]=h,x!==void 0){let w=x?1:0;p[f+1][w]=h[w]}let y=u.findIndex(w=>w.index===m);if(y!==-1){let w=tt(u[y].end,u[y].start)?1:0;u[y].start[w]=E[w],u[y].end=E}let b=u.findIndex(w=>w.index===f+1);if(b!==-1){let w=tt(u[b].end,u[b].start)?1:0;u[b].end[w]=h[w],u[b].start=h}if(a===-1&&m===0){let w=i?Oe(n):tt(p[1],p[0]);p.unshift(z(w?E[0]:e.x+e.points[0][0],w?e.y+e.points[0][1]:E[1])),i&&p.unshift(z(e.x+e.points[0][0],e.y+e.points[0][1]));for(let I of u)I.index+=i?2:1}if(l===-1&&f===e.points.length-1){let w=Oe(o);p.push(z(w?h[0]:e.x+e.points[e.points.length-1][0],w?e.y+e.points[e.points.length-1][1]:h[1])),r&&p.push(z(e.x+e.points[e.points.length-1][0],e.y+e.points[e.points.length-1][1]))}return At(p,u.map(w=>({...w,start:z(w.start[0]-e.x,w.start[1]-e.y),end:z(w.end[0]-e.x,w.end[1]-e.y)})),!1,!1)},Sp=(e,t,n,o,i,r,s,a,l)=>{let d=e.startIsSpecial??null,c=e.endIsSpecial??null,u=t.map((h,g)=>g===0?z(e.x+h[0],e.y+h[1]):g===t.length-1?z(e.x+h[0],e.y+h[1]):z(e.x+e.points[g][0],e.y+e.points[g][1])),p=n.map(h=>({...h,start:z(e.x+(h.start[0]-t[0][0]),e.y+(h.start[1]-t[0][1])),end:z(e.x+(h.end[0]-t[0][0]),e.y+(h.end[1]-t[0][1]))})),m=[],f=2+(d?1:0),E=2+(c?1:0);for(;m.length+f<u.length-E;)m.push(u[m.length+f]);{let h=u.at(d?2:1),g=u.at(d?3:2);if(!h||!g)throw new Error(`Second and third points must exist when handling endpoint drag (${d})`);let x=Oe(o),y=Oe(Tt(xr(h,g)));if(a&&x===y){let b=x?me(o,fe):me(o,ye);if(m.unshift(z(y?r[0]+(b?ee:-ee):g[0],y?g[1]:r[1]+(b?ee:-ee))),m.unshift(z(x?r[0]+(b?ee:-ee):r[0],x?r[1]:r[1]+(b?ee:-ee))),!d){d=!0;for(let w of p)w.index>1&&(w.index+=1)}}else if(m.unshift(z(y?r[0]:h[0],y?h[1]:r[1])),d){d=!1;for(let b of p)b.index>1&&(b.index-=1)}m.unshift(r)}{let h=u.at(u.length-(c?3:2)),g=u.at(u.length-(c?4:3));if(!h||!g)throw new Error(`Second and third to last points must exist when handling endpoint drag (${c})`);let x=Oe(i),y=tt(g,h);if(l&&x===y){let b=x?me(i,fe):me(i,ye);m.push(z(y?s[0]+(b?ee:-ee):g[0],y?g[1]:s[1]+(b?ee:-ee))),m.push(z(x?s[0]+(b?ee:-ee):s[0],x?s[1]:s[1]+(b?ee:-ee))),c||(c=!0)}else m.push(z(y?s[0]:h[0],y?h[1]:s[1])),c&&(c=!1)}return m.push(s),At(m,p.map(({index:h})=>({index:h,start:m[h-1],end:m[h]})).map(h=>({...h,start:z(h.start[0]-r[0],h.start[1]-r[1]),end:z(h.end[0]-r[0],h.end[1]-r[1])})),d,c)},jt=1e6,Ln=(e,t,n,o)=>{if(e.points.length<2)return{points:n.points??e.points};A.PROD||(Dn(!n.points||n.points.length>=2,"Updated point array length must match the arrow point length, contain exactly the new start and end points or not be specified at all (i.e. you can't add new points between start and end manually to elbow arrows)"),Dn(!e.fixedSegments||e.fixedSegments.map(w=>w.start[0]===w.end[0]||w.start[1]===w.end[1]).every(Boolean),"Fixed segments must be either horizontal or vertical"),Dn(!n.fixedSegments||n.fixedSegments.map(w=>w.start[0]===w.end[0]||w.start[1]===w.end[1]).every(Boolean),"Updates to fixed segments must be either horizontal or vertical"),Dn(e.points.slice(1).map((w,I)=>w[0]===e.points[I][0]||w[1]===e.points[I][1]),"Elbow arrow segments must be either horizontal or vertical"),Dn(n.fixedSegments?.find(w=>w.index===1&&ro(w.start,(n.points??e.points)[0]))==null&&n.fixedSegments?.find(w=>w.index===(n.points??e.points).length-1&&ro(w.end,(n.points??e.points)[(n.points??e.points).length-1]))==null,"The first and last segments cannot be fixed"));let i=n.fixedSegments??e.fixedSegments??[],r=n.points?n.points&&n.points.length===2?e.points.map((w,I)=>I===0?n.points[0]:I===e.points.length-1?n.points[1]:w):n.points.slice():e.points.slice(),{startBinding:s,endBinding:a,...l}=n,d=typeof s<"u"?s:e.startBinding,c=typeof a<"u"?a:e.endBinding,u=d&&ti(d.elementId,t),p=c&&ti(c.elementId,t),m=Ra(r);if(d&&!u&&m||c&&!p&&m||t.size===0&&m||Object.keys(l).length===0&&(u?.id!==d?.elementId||p?.id!==c?.elementId))return At(r.map(w=>z(e.x+w[0],e.y+w[1])),e.fixedSegments,e.startIsSpecial,e.endIsSpecial);let{startHeading:f,endHeading:E,startGlobalPoint:h,endGlobalPoint:g,hoveredStartElement:x,hoveredEndElement:y,...b}=yr({x:e.x,y:e.y,startBinding:d,endBinding:c,startArrowhead:e.startArrowhead,endArrowhead:e.endArrowhead,points:e.points},t,r,o);return t.size===0&&m?At(r.map(w=>z(e.x+w[0],e.y+w[1])),e.fixedSegments,e.startIsSpecial,e.endIsSpecial):!n.points&&!n.fixedSegments&&!n.startBinding&&!n.endBinding?bp(e,t):n.startBinding===e.startBinding&&n.endBinding===e.endBinding&&(n.points??[]).every((w,I)=>ro(w,e.points[I]??z(1/0,1/0)))&&m?{}:i.length===0?At(Pr(Ir(br(e,{startHeading:f,endHeading:E,startGlobalPoint:h,endGlobalPoint:g,hoveredStartElement:x,hoveredEndElement:y,...b})??[])),i,null,null):(e.fixedSegments?.length??0)>i.length?Pp(e,i,t):n.points?n.points&&n.fixedSegments?n:Sp(e,r,i,f,E,h,g,x,y):Ip(e,i,f,E,x,y)},yr=(e,t,n,o)=>{let i=Er(n[0],ct(e.x,e.y)),r=Er(n[n.length-1],ct(e.x,e.y)),s=null,a=null;if(o?.isDragging){let w=Array.from(t.values());s=Ba(i,t,w,o?.zoom)||null,a=Ba(r,t,w,o?.zoom)||null}else s=e.startBinding&&ti(e.startBinding.elementId,t)||null,a=e.endBinding&&ti(e.endBinding.elementId,t)||null;let l=Ca({...e,type:"arrow",elbowed:!0,points:n},"start",e.startBinding?.fixedPoint,i,s,t,o?.isDragging),d=Ca({...e,type:"arrow",elbowed:!0,points:n},"end",e.endBinding?.fixedPoint,r,a,t,o?.isDragging),c=Ga(l,d,s,i,t),u=Ga(d,l,a,r,t),p=[l[0]-2,l[1]-2,l[0]+2,l[1]+2],m=[d[0]-2,d[1]-2,d[0]+2,d[1]+2],f=s?$e(s,t,Wt(c,e.startArrowhead?ie*6:ie*2,1)):p,E=a?$e(a,t,Wt(u,e.endArrowhead?ie*6:ie*2,1)):m,h=vn(l,a?$e(a,t,Wt(u,ee,ee)):m)||vn(d,s?$e(s,t,Wt(c,ee,ee)):p),g=Oa(h?[p,m]:[f,E]),x=Ap(h?p:f,h?m:E,g,h?Wt(c,!s&&!a?0:ee,0):Wt(c,!s&&!a?0:ee-(e.startArrowhead?ie*6:ie*2),ee),h?Wt(u,!s&&!a?0:ee,0):Wt(u,!s&&!a?0:ee-(e.endArrowhead?ie*6:ie*2),ee),h,s&&$e(s,t),a&&$e(a,t)),y=La(x[0],c,l),b=La(x[1],u,d);return{dynamicAABBs:x,startDonglePosition:y,startGlobalPoint:l,startHeading:c,endDonglePosition:b,endGlobalPoint:d,endHeading:u,commonBounds:g,hoveredStartElement:s,hoveredEndElement:a,boundsOverlap:h,startElementBounds:f,endElementBounds:E}},br=(e,t)=>{let{dynamicAABBs:n,startDonglePosition:o,startGlobalPoint:i,startHeading:r,endDonglePosition:s,endGlobalPoint:a,endHeading:l,commonBounds:d,hoveredEndElement:c}=t,u=Dp(n,o||i,r,s||a,l,d),p=o&&ei(o,u),m=s&&ei(s,u),f=ei(a,u);f&&c&&(f.closed=!0);let E=ei(i,u);E&&e.startBinding&&(E.closed=!0);let h=p&&m&&(vn(p.pos,n[1])||vn(m.pos,n[0])),g=Mp(p||E,m||f,u,r||fe,l||fe,h?[]:n);if(g){let x=g.map(y=>[y.pos[0],y.pos[1]]);return p&&x.unshift(i),m&&x.push(a),x}return null},Wt=(e,t,n)=>{switch(e){case _e:return[t,n,n,n];case fe:return[n,t,n,n];case ye:return[n,n,t,n]}return[n,n,n,t]},Mp=(e,t,n,o,i,r)=>{let s=hr(e.pos,t.pos),a=new Ep(l=>l.f);for(a.push(e);a.size()>0;){let l=a.pop();if(!l||l.closed)continue;if(l===t)return Tp(e,l);l.closed=!0;let d=Lp(l.addr,n);for(let c=0;c<4;c++){let u=d[c];if(!u||u.closed)continue;let p=fp(u.pos,l.pos,.5);if(gp(...r.map(b=>vn(p,b))))continue;let m=Cp(c),f=l.parent?Tt(xr(l.pos,l.parent.pos)):o,E=fr(f);if(me(E,m)||ka(e.addr,u.addr)&&me(m,o)||ka(t.addr,u.addr)&&me(m,i))continue;let g=f!==m,x=l.g+hr(u.pos,l.pos)+(g?Math.pow(s,3):0),y=u.visited;if(!y||x<u.g){let b=vp(u,t,m,i);u.visited=!0,u.parent=l,u.h=hr(t.pos,u.pos)+b*Math.pow(s,2),u.g=x,u.f=u.g+u.h,y?a.rescoreElement(u):a.push(u)}}}return null},Tp=(e,t)=>{let n=t,o=[];for(;n.parent;)o.unshift(n),n=n.parent;return o.unshift(e),o},hr=(e,t)=>Math.abs(e[0]-t[0])+Math.abs(e[1]-t[1]),Ap=(e,t,n,o,i,r,s,a)=>{let l=s??e,d=a??t,[c,u,p,m]=o??[0,0,0,0],[f,E,h,g]=i??[0,0,0,0],x=[e[0]>t[2]?e[1]>t[3]||e[3]<t[1]?Math.min((l[0]+d[2])/2,e[0]-m):(l[0]+d[2])/2:e[0]>t[0]?e[0]-m:n[0]-m,e[1]>t[3]?e[0]>t[2]||e[2]<t[0]?Math.min((l[1]+d[3])/2,e[1]-c):(l[1]+d[3])/2:e[1]>t[1]?e[1]-c:n[1]-c,e[2]<t[0]?e[1]>t[3]||e[3]<t[1]?Math.max((l[2]+d[0])/2,e[2]+u):(l[2]+d[0])/2:e[2]<t[2]?e[2]+u:n[2]+u,e[3]<t[1]?e[0]>t[2]||e[2]<t[0]?Math.max((l[3]+d[1])/2,e[3]+p):(l[3]+d[1])/2:e[3]<t[3]?e[3]+p:n[3]+p],y=[t[0]>e[2]?t[1]>e[3]||t[3]<e[1]?Math.min((d[0]+l[2])/2,t[0]-g):(d[0]+l[2])/2:t[0]>e[0]?t[0]-g:n[0]-g,t[1]>e[3]?t[0]>e[2]||t[2]<e[0]?Math.min((d[1]+l[3])/2,t[1]-f):(d[1]+l[3])/2:t[1]>e[1]?t[1]-f:n[1]-f,t[2]<e[0]?t[1]>e[3]||t[3]<e[1]?Math.max((d[2]+l[0])/2,t[2]+E):(d[2]+l[0])/2:t[2]<e[2]?t[2]+E:n[2]+E,t[3]<e[1]?t[0]>e[2]||t[2]<e[0]?Math.max((d[3]+l[1])/2,t[3]+h):(d[3]+l[1])/2:t[3]<e[3]?t[3]+h:n[3]+h],b=Oa([x,y]);if(!r&&x[2]-x[0]+y[2]-y[0]>b[2]-b[0]+1e-11&&x[3]-x[1]+y[3]-y[1]>b[3]-b[1]+1e-11){let[w,I]=[(y[0]+y[2])/2,(y[1]+y[3])/2];if(t[0]>e[2]&&e[1]>t[3]){let M=x[2]+(y[0]-x[2])/2,D=y[3]+(x[1]-y[3])/2;return Jo(ct(e[2]-w,e[1]-I),ct(e[0]-w,e[3]-I))>0?[[x[0],x[1],M,x[3]],[M,y[1],y[2],y[3]]]:[[x[0],D,x[2],x[3]],[y[0],y[1],y[2],D]]}else if(e[2]<t[0]&&e[3]<t[1]){let M=x[2]+(y[0]-x[2])/2,D=x[3]+(y[1]-x[3])/2;return Jo(ct(e[0]-w,e[1]-I),ct(e[2]-w,e[3]-I))>0?[[x[0],x[1],x[2],D],[y[0],D,y[2],y[3]]]:[[x[0],x[1],M,x[3]],[M,y[1],y[2],y[3]]]}else if(e[0]>t[2]&&e[3]<t[1]){let M=y[2]+(x[0]-y[2])/2,D=x[3]+(y[1]-x[3])/2;return Jo(ct(e[2]-w,e[1]-I),ct(e[0]-w,e[3]-I))>0?[[M,x[1],x[2],x[3]],[y[0],y[1],M,y[3]]]:[[x[0],x[1],x[2],D],[y[0],D,y[2],y[3]]]}else if(e[0]>t[2]&&e[1]>t[3]){let M=y[2]+(x[0]-y[2])/2,D=y[3]+(x[1]-y[3])/2;return Jo(ct(e[0]-w,e[1]-I),ct(e[2]-w,e[3]-I))>0?[[M,x[1],x[2],x[3]],[y[0],y[1],M,y[3]]]:[[x[0],D,x[2],x[3]],[y[0],y[1],y[2],D]]}}return[x,y]},Dp=(e,t,n,o,i,r)=>{let s=new Set,a=new Set;n===ke||n===fe?a.add(t[1]):s.add(t[0]),i===ke||i===fe?a.add(o[1]):s.add(o[0]),e.forEach(c=>{s.add(c[0]),s.add(c[2]),a.add(c[1]),a.add(c[3])}),s.add(r[0]),s.add(r[2]),a.add(r[1]),a.add(r[3]);let l=Array.from(a).sort((c,u)=>c-u),d=Array.from(s).sort((c,u)=>c-u);return{row:l.length,col:d.length,data:l.flatMap((c,u)=>d.map((p,m)=>({f:0,g:0,h:0,closed:!1,visited:!1,parent:null,addr:[m,u],pos:[p,c]})))}},La=(e,t,n)=>{switch(t){case _e:return z(n[0],e[1]);case fe:return z(e[2],n[1]);case ye:return z(n[0],e[3])}return z(e[0],n[1])},vp=(e,t,n,o)=>{if(o===fe)switch(n){case fe:return e.pos[0]>=t.pos[0]?4:e.pos[1]===t.pos[1]?0:2;case _e:return e.pos[1]>t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case ye:return e.pos[1]<t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case ke:return e.pos[1]===t.pos[1]?4:2}else if(o===ke)switch(n){case fe:return e.pos[1]===t.pos[1]?4:2;case _e:return e.pos[1]>t.pos[1]&&e.pos[0]>t.pos[0]?1:3;case ye:return e.pos[1]<t.pos[1]&&e.pos[0]>t.pos[0]?1:3;case ke:return e.pos[0]<=t.pos[0]?4:e.pos[1]===t.pos[1]?0:2}else if(o===_e)switch(n){case fe:return e.pos[1]>t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case _e:return e.pos[1]>=t.pos[1]?4:e.pos[0]===t.pos[0]?0:2;case ye:return e.pos[0]===t.pos[0]?4:2;case ke:return e.pos[1]>t.pos[1]&&e.pos[0]>t.pos[0]?1:3}else if(o===ye)switch(n){case fe:return e.pos[1]<t.pos[1]&&e.pos[0]<t.pos[0]?1:3;case _e:return e.pos[0]===t.pos[0]?4:2;case ye:return e.pos[1]<=t.pos[1]?4:e.pos[0]===t.pos[0]?0:2;case ke:return e.pos[1]<t.pos[1]&&e.pos[0]>t.pos[0]?1:3}return 0},Lp=([e,t],n)=>[io([e,t-1],n),io([e+1,t],n),io([e,t+1],n),io([e-1,t],n)],io=([e,t],n)=>e<0||e>=n.col||t<0||t>=n.row?null:n.data[t*n.col+e]??null,ei=(e,t)=>{for(let n=0;n<t.col;n++)for(let o=0;o<t.row;o++){let i=io([n,o],t);if(i&&e[0]===i.pos[0]&&e[1]===i.pos[1])return i}return null},Oa=e=>[Math.min(...e.map(t=>t[0])),Math.min(...e.map(t=>t[1])),Math.max(...e.map(t=>t[2])),Math.max(...e.map(t=>t[3]))],ti=(e,t)=>{let n=t.get(e);return n&&Le(n)?n:null},At=(e,t,n,o)=>{let i=e[0][0],r=e[0][1],s=e.map(a=>Er(a,hp(xr(e[0]),-1)));return(i<-jt||i>jt||r<-jt||r>jt||i+s[s.length-1][0]<-jt||r+s[s.length-1][0]>jt||i+s[s.length-1][1]<-jt||r+s[s.length-1][1]>jt)&&console.error("Elbow arrow normalization is outside reasonable bounds (> 1e6)",{x:i,y:r,points:s,...va(s)}),s=s.map(([a,l])=>z(Qo(a,-1e6,1e6),Qo(l,-1e6,1e6))),{points:s,x:Qo(i,-1e6,1e6),y:Qo(r,-1e6,1e6),fixedSegments:(t?.length??0)>0?t:null,...va(s),startIsSpecial:n,endIsSpecial:o}},Pr=e=>{if(e.length>1){let t=Math.abs(e[0][1]-e[1][1])<Math.abs(e[0][0]-e[1][0]);return e.filter((n,o)=>{if(o===0||o===e.length-1)return!0;let i=e[o+1],r=Math.abs(n[1]-i[1])<Math.abs(n[0]-i[0]);return t===r?(t=r,!1):(t=r,!0)})}return e},Ir=e=>e.length>=4?e.filter((t,n)=>{if(n===0||n===e.length-1)return!0;let o=e[n-1];return gr(o,t)>wr}):e,Cp=e=>{switch(e){case 0:return _e;case 1:return fe;case 2:return ye}return ke},Ca=(e,t,n,o,i,r,s)=>s?i&&r?Sr(e,i,t,r):o:i?ni(n||[0,0],i,r??yp([i])):o,Ga=(e,t,n,o,i)=>Fa(e,t,n,n&&$e(n,i,Array(4).fill(Ut(n,i,e))),o,i),Ba=(e,t,n,o)=>Vt(xp(e),n,t,o,!0,!0),ka=(e,t)=>e[0]===t[0]&&e[1]===t[1],Ra=(e,t=wr)=>e.slice(1).map((n,o)=>Math.abs(n[0]-e[o][0])<t||Math.abs(n[1]-e[o][1])<t).every(Boolean);var be=(e,t,n,o)=>{let i=!1,{points:r,fixedSegments:s,startBinding:a,endBinding:l,fileId:d}=n;B(e)&&(Object.keys(n).length===0||typeof r<"u"||typeof s<"u"||typeof a<"u"||typeof l<"u")?n={...n,angle:0,...Ln({...e,x:n.x||e.x,y:n.y||e.y},t,n,o)}:typeof r<"u"&&(n={...Gp(r),...n});for(let c in n){let u=n[c];if(typeof u<"u"){if(e[c]===u&&(typeof u!="object"||u===null||c==="groupIds"||c==="scale"))continue;if(c==="scale"){let p=e[c],m=u;if(p[0]===m[0]&&p[1]===m[1])continue}else if(c==="points"){let p=e[c],m=u;if(p.length===m.length){let f=!1,E=p.length;for(;--E;){let h=p[E],g=m[E];if(h[0]!==g[0]||h[1]!==g[1]){f=!0;break}}if(!f)continue}}e[c]=u,i=!0}}return i&&((typeof n.height<"u"||typeof n.width<"u"||typeof d<"u"||typeof r<"u")&&Pe.delete(e),e.version=n.version??e.version+1,e.versionNonce=n.versionNonce??Mr(),e.updated=Tr()),e},ge=(e,t,n=!1)=>{let o=!1;for(let i in t){let r=t[i];if(typeof r<"u"){if(e[i]===r&&(typeof r!="object"||r===null))continue;o=!0}}return!o&&!n?e:{...e,...t,version:t.version??e.version+1,versionNonce:t.versionNonce??Mr(),updated:Tr()}},Na=(e,t)=>(e.version=(t??e.version)+1,e.versionNonce=Mr(),e.updated=Tr(),e);var gy=e=>!e[Bp.CTRL_OR_CMD],Ar=e=>e.isBindingEnabled,ie=5,zp=10,_p=(e,t)=>{let n=[];return t.forEach(o=>{let i=e.getNonDeletedElement(o);i!=null&&n.push(i)}),n},Dr=(e,t,n,o)=>{let i=o.getNonDeletedElementsMap(),r=new Set,s=new Set;_a(e,t,n,"start",r,s,o,i),_a(e,n,t,"end",r,s,o,i);let a=Array.from(s).filter(l=>!r.has(l));_p(o,a).forEach(l=>{o.mutateElement(l,{boundElements:l.boundElements?.filter(d=>d.type!=="arrow"||d.id!==e.id)})})},_a=(e,t,n,o,i,r,s,a)=>{if(t!=="keep"){if(t===null){let l=Wp(e,o,s);l!=null&&r.add(l);return}$a(e)?(n==null||(n==="keep"?!Wa(e,t,o):o==="start"||n.id!==t.id))&&(yn(e,t,o,s),i.add(t.id)):(yn(e,t,o,s),i.add(t.id))}},Xa=(e,t,n)=>["start","end"].map(o=>{let i=qa(e,o,t),r=o==="start"?e.startBinding?.elementId:e.endBinding?.elementId;if(r){let s=t.get(r);if(Le(s)&&ii(s,i,t,n))return s}return null}),Yp=(e,t,n,o,i,r)=>{let a=e.points.length-1,l=n.findIndex(p=>p===0)>-1,d=n.findIndex(p=>p===a)>-1,c=l?t?ri(e,"start",o,i,r):null:"keep",u=d?t?ri(e,"end",o,i,r):null:"keep";return[c,u]},Up=(e,t,n,o,i)=>{if(B(e))return["keep","keep"];let[r,s]=Xa(e,t,i),a=r&&o?ri(e,"start",t,n,i):null,l=s&&o?ri(e,"end",t,n,i):null;return[a,l]},Xp=(e,t,n,o,i)=>{e.forEach(r=>{let[s,a]=n?.length?Yp(r,t,n??[],o.getNonDeletedElementsMap(),o.getNonDeletedElements(),i):Up(r,o.getNonDeletedElementsMap(),o.getNonDeletedElements(),t,i);Dr(r,s,a,o)})},xy=(e,t,n)=>e.length>50?[]:e.filter(j).flatMap(o=>Xa(o,t,n)).filter(o=>o!==null).filter(o=>e.filter(i=>i.id===o?.id).length===0),ja=(e,t,n,o,i)=>Array.from(t.reduce((r,s)=>{let a=Vt(s,n.getNonDeletedElements(),n.getNonDeletedElementsMap(),o,B(e),B(e));return a!=null&&!Va(e,i?.id,a)&&r.add(a),r},new Set)),wy=(e,t,n,o)=>{let i=o.getNonDeletedElements(),r=o.getNonDeletedElementsMap();t.startBoundElement!=null&&yn(e,t.startBoundElement,"start",o);let s=Vt(n,i,r,t.zoom,B(e),B(e));s!==null&&(Wa(e,s,"end")||yn(e,s,"end",o))},jp=(e,t)=>({...e,gap:Math.min(e.gap,li(t,t.width,t.height))}),yn=(e,t,n,o)=>{if(!_(e))return;let i={elementId:t.id,...jp(Zp(e,t,n,o.getNonDeletedElementsMap()),t)};B(e)&&(i={...i,...Za(e,t,n,o.getNonDeletedElementsMap())}),o.mutateElement(e,{[n==="start"?"startBinding":"endBinding"]:i}),Ua(t.boundElements||[]).has(e.id)||o.mutateElement(t,{boundElements:(t.boundElements||[]).concat({id:e.id,type:"arrow"})})},Wa=(e,t,n)=>{let o=e[n==="start"?"endBinding":"startBinding"];return Va(e,o?.elementId,t)},Va=(e,t,n)=>t===n.id&&$a(e),$a=e=>e.points.length<3&&!B(e),Wp=(e,t,n)=>{let o=t==="start"?"startBinding":"endBinding",i=e[o];return i==null?null:(n.mutateElement(e,{[o]:null}),i.elementId)},Vt=(e,t,n,o,i,r)=>{if(r){let a=!1,l=$p(t,c=>Le(c,!1)&&ii(c,e,n,o,(i||!oi(c))&&!q(c))).filter(c=>a?!1:(oi(c)||(a=!0),!0));if(!l||l.length===0)return null;if(l.length===1)return l[0];let d=l.filter(c=>ii(c,e,n,o,!1));return d.length===1?d[0]:l.sort((c,u)=>u.width**2+u.height**2-(c.width**2+c.height**2)).pop()}return Vp(t,a=>Le(a,!1)&&ii(a,e,n,o,(i||!oi(a))&&!q(a)))},Vp=(e,t)=>{let n=null;for(let o=e.length-1;o>=0;--o){let i=e[o];if(!i.isDeleted&&t(i)){n=i;break}}return n},$p=(e,t)=>{let n=[];for(let o=e.length-1;o>=0;--o){let i=e[o];i.isDeleted||t(i)&&n.push(i)}return n},Zp=(e,t,n,o)=>{let i=n==="start"?-1:1,r=i===-1?0:e.points.length-1,s=r-i,a=U.getPointAtIndexGlobalCoordinates(e,r,o),l=U.getPointAtIndexGlobalCoordinates(e,s,o);return{focus:nm(t,o,l,a),gap:Math.max(1,Ut(t,o,a))}},Ue=(e,t,n)=>{if(!Le(e))return;let{newSize:o,simultaneouslyUpdated:i}=n??{},r=Kp(i),s=t.getNonDeletedElementsMap();n?.changedElements&&(s=new Map(s),n.changedElements.forEach(a=>{s.set(a.id,a)})),si(s,e,a=>{if(!j(a)||a.isDeleted||!qp(a,e))return;let l=a.startBinding?s.get(a.startBinding.elementId):null,d=a.endBinding?s.get(a.endBinding.elementId):null,c=null,u=null;l&&d&&(c=pe(l,s),u=pe(d,s));let p={startBinding:Ya(e,a.startBinding,o),endBinding:Ya(e,a.endBinding,o)};if(r.has(a.id)){t.mutateElement(a,p);return}let m=ai(s,a,(E,h)=>{if(E&&Le(E)&&(h==="startBinding"||h==="endBinding")&&(e.id===a[h]?.elementId||e.id===a[h==="startBinding"?"endBinding":"startBinding"]?.elementId&&!gn(c,u))){let g=tm(a,h,p[h],E,s);if(g)return[h==="startBinding"?0:a.points.length-1,{point:g}]}return null}).filter(E=>E!==null);U.movePoints(a,t,new Map(m),{...e.id===a.startBinding?.elementId?{startBinding:p.startBinding}:{},...e.id===a.endBinding?.elementId?{endBinding:p.endBinding}:{}});let f=W(a,s);f&&!f.isDeleted&&hn(a,t,!1)})},yy=(e,t,n)=>{j(e)?Xp([e],!0,[],t,n?.zoom):Ue(e,t,{...n,changedElements:new Map([[e.id,e]])})},qp=(e,t)=>e.startBinding?.elementId===t.id||e.endBinding?.elementId===t.id,Kp=e=>new Set((e||[]).map(t=>t.id)),Fa=(e,t,n,o,i,r,s)=>{let a=Tt(V(t,e));return!n||!o?a:Qp(i,n,r,s)?oo(n,o,e):Tt(V(e,he(n,r)))},Qp=(e,t,n,o)=>{let i=Ut(t,n,e),r=li(t,t.width,t.height,o);return i>r?null:i},Sr=(e,t,n,o)=>{(Rp()||Fp())&&Op(e.points.length>1,"Arrow should have at least 2 points");let i=$e(t,o),r=e.points[n==="start"?0:e.points.length-1],s=O(e.x+r[0],e.y+r[1]),a=la(t)?Jp(t,o,s):s,l=B(e),d=dt(i),c=n==="start"?1:e.points.length-2,u=ae(O(e.x+e.points[c][0],e.y+e.points[c][1]),d,e.angle??0),p=null;if(l){let m=Oe(oo(t,i,s)),f=em(t,o,a),E=O(m?d[0]:f[0],m?f[1]:d[1]),h=Re(E,xn(wn(Cn(V(f,E)),Math.max(t.width,t.height)*2),E));if(p=En(t,o,h,ie).sort(Dt)[0],!p){let g=O(m?f[0]:d[0],m?d[1]:f[1]),x=Re(g,xn(wn(Cn(V(f,g)),Math.max(t.width,t.height)*2),g));p=En(t,o,x,ie).sort(Dt)[0]}}else p=En(t,o,Re(u,xn(wn(Cn(V(a,u)),ut(a,u)+Math.max(t.width,t.height)*2),u)),ie).sort((m,f)=>Dt(m,u)-Dt(f,u))[0];return!p||Dt(a,p)<Hp?a:l?p:a},Jp=(e,t,n)=>{let o=he(e,t),i=ae(n,o,-e.angle);return i[0]<e.x&&i[1]<e.y?i[1]-e.y>-ie?ae(O(e.x-ie,e.y),o,e.angle):ae(O(e.x,e.y-ie),o,e.angle):i[0]<e.x&&i[1]>e.y+e.height?i[0]-e.x>-ie?ae(O(e.x,e.y+e.height+ie),o,e.angle):ae(O(e.x-ie,e.y+e.height),o,e.angle):i[0]>e.x+e.width&&i[1]>e.y+e.height?i[0]-e.x<e.width+ie?ae(O(e.x+e.width,e.y+e.height+ie),o,e.angle):ae(O(e.x+e.width+ie,e.y+e.height),o,e.angle):i[0]>e.x+e.width&&i[1]<e.y?i[0]-e.x<e.width+ie?ae(O(e.x+e.width,e.y-ie),o,e.angle):ae(O(e.x+e.width+ie,e.y),o,e.angle):n},em=(e,t,n,o=.05)=>{let{x:i,y:r,width:s,height:a,angle:l}=e,d=he(e,t,-.1,-.1),c=ae(n,d,-l),u=Ha(o*a,5,80),p=Ha(o*s,5,80);if(c[0]<=i+s/2&&c[1]>d[1]-u&&c[1]<d[1]+u)return ae(O(i-ie,d[1]),d,l);if(c[1]<=r+a/2&&c[0]>d[0]-p&&c[0]<d[0]+p)return ae(O(d[0],r-ie),d,l);if(c[0]>=i+s/2&&c[1]>d[1]-u&&c[1]<d[1]+u)return ae(O(i+s+ie,d[1]),d,l);if(c[1]>=r+a/2&&c[0]>d[0]-p&&c[0]<d[0]+p)return ae(O(d[0],r+a+ie),d,l);if(e.type==="diamond"){let m=ie,f=O(i+s/4-m,r+a/4-m),E=O(i+3*s/4+m,r+a/4-m),h=O(i+s/4-m,r+3*a/4+m),g=O(i+3*s/4+m,r+3*a/4+m);if(ut(f,c)<Math.max(p,u))return ae(f,d,l);if(ut(E,c)<Math.max(p,u))return ae(E,d,l);if(ut(h,c)<Math.max(p,u))return ae(h,d,l);if(ut(g,c)<Math.max(p,u))return ae(g,d,l)}return n},tm=(e,t,n,o,i)=>{if(n==null||n.elementId!==o.id&&e.points.length>2)return null;let r=t==="startBinding"?-1:1,s=r===-1?0:e.points.length-1;if(B(e)&&Jn(n)){let u=vr(n.fixedPoint)??Za(e,o,t==="startBinding"?"start":"end",i).fixedPoint,p=he(o,i),m=O(o.x+u[0]*o.width,o.y+u[1]*o.height),f=ae(m,p,o.angle);return U.pointFromAbsoluteCoords(e,f,i)}let a=s-r,l=U.getPointAtIndexGlobalCoordinates(e,a,i),d=om(o,i,n.focus,l),c;if(n.gap===0)c=d;else{let u=U.getPointAtIndexGlobalCoordinates(e,s,i),p=he(o,i),m=ut(l,u)+ut(l,p)+Math.max(o.width,o.height)*2,f=[...En(o,i,Re(l,xn(wn(Cn(V(d,l)),m),l)),n.gap).sort((E,h)=>Dt(E,l)-Dt(h,l)),xn(wn(Cn(V(d,l)),ut(l,u)),l)];f.length>1?c=f[0]:f.length===1?c=d:c=u}return U.pointFromAbsoluteCoords(e,c,i)},Za=(e,t,n,o)=>{let i=[t.x,t.y,t.x+t.width,t.y+t.height],r=Sr(e,t,n,o),s=O(i[0]+(i[2]-i[0])/2,i[1]+(i[3]-i[1])/2),a=ae(r,s,-t.angle);return{fixedPoint:vr([(a[0]-t.x)/t.width,(a[1]-t.y)/t.height])}},Ya=(e,t,n)=>{if(t==null||n==null)return t;let{width:o,height:i}=n,{width:r,height:s}=e,a=Math.max(1,Math.min(li(e,o,i),t.gap*(o<i?o/r:i/s)));return{...t,gap:a}},ri=(e,t,n,o,i)=>Vt(qa(e,t,n),o,n,i,B(e),B(e)),qa=(e,t,n)=>{let o=t==="start"?0:-1;return kp(U.getPointAtIndexGlobalCoordinates(e,o,n))},Ka=(e,t,n)=>{for(let o of e){if("boundElements"in o&&o.boundElements&&Object.assign(o,{boundElements:o.boundElements.reduce((i,r)=>{let s=t.get(r.id);return s&&i.push({...r,id:s}),i},[])}),"containerId"in o&&o.containerId&&Object.assign(o,{containerId:t.get(o.containerId)??null}),"endBinding"in o&&o.endBinding){let i=t.get(o.endBinding.elementId);Object.assign(o,{endBinding:i?{...o.endBinding,elementId:i}:null})}if("startBinding"in o&&o.startBinding){let i=t.get(o.startBinding.elementId);Object.assign(o,{startBinding:i?{...o.startBinding,elementId:i}:null})}B(o)&&Object.assign(o,Ln(o,n,{points:[o.points[0],o.points[o.points.length-1]]}))}},by=(e,t)=>{let n=Ua(e);for(let o of t)$t.unbindAffected(n,o,(i,r)=>be(i,n,r)),Zt.unbindAffected(n,o,(i,r)=>be(i,n,r))},so=(e,t,n=[])=>{if(!e)return null;let o=e.filter(i=>!t.has(i.id));return o.push(...n.map(i=>({id:i.id,type:i.type}))),o},ii=(e,{x:t,y:n},o,i,r)=>{let s=O(t,n),a=li(e,e.width,e.height,i),l=(r||!oi(e))&&!q(e),d=[t-a,n-a,t+a,n+a],c=pe(e,o);if(!gn(d,c))return!1;let u=En(e,o,Re(he(e,o),s)),p=Ut(e,o,s);return l?u.length===0||p<=a:u.length>0&&p<=a},li=(e,t,n,o)=>{let i=o?.value&&o.value<1?o.value:1,s=(e.type==="diamond"?1/Math.sqrt(2):1)*Math.min(t,n);return Math.max(16,Math.min(.25*s,32),zp/i+ie)},nm=(e,t,n,o)=>{let i=he(e,t);if(Np(n,o))return 0;let r=ae(n,i,-e.angle),s=ae(o,i,-e.angle),a=Math.sign(Ye(V(s,n),V(s,i)))*-1,l=Re(s,xn(wn(Cn(V(s,r)),Math.max(e.width*2,e.height*2)),s)),d=e.type==="diamond"?[Re(O(e.x+e.width/2,e.y),O(e.x+e.width/2,e.y+e.height)),Re(O(e.x,e.y+e.height/2),O(e.x+e.width,e.y+e.height/2))]:[Re(O(e.x,e.y),O(e.x+e.width,e.y+e.height)),Re(O(e.x+e.width,e.y),O(e.x,e.y+e.height))],c=e.type==="diamond"?[Re(O(e.x+e.width/2,e.y-e.height),O(e.x+e.width/2,e.y+e.height*2)),Re(O(e.x-e.width,e.y+e.height/2),O(e.x+e.width*2,e.y+e.height/2))]:[Re(O(e.x-e.width,e.y-e.height),O(e.x+e.width*2,e.y+e.height*2)),Re(O(e.x+e.width*2,e.y-e.height),O(e.x-e.width,e.y+e.height*2))];return[za(l,c[0]),za(l,c[1])].filter(m=>m!==null).sort((m,f)=>Dt(m,o)-Dt(f,o)).map((m,f)=>a*ut(i,m)/(e.type==="diamond"?ut(d[f][0],d[f][1])/2:Math.sqrt(e.width**2+e.height**2)/2)).sort((m,f)=>Math.abs(m)-Math.abs(f))[0]??0},om=(e,t,n,o)=>{let i=he(e,t);if(n===0)return i;let r=(e.type==="diamond"?[O(e.x,e.y+e.height/2),O(e.x+e.width/2,e.y),O(e.x+e.width,e.y+e.height/2),O(e.x+e.width/2,e.y+e.height)]:[O(e.x,e.y),O(e.x+e.width,e.y),O(e.x+e.width,e.y+e.height),O(e.x,e.y+e.height)]).map(l=>xn(wn(V(l,i),Math.abs(n)),i)).map(l=>ae(l,i,e.angle)),s=[Ye(V(o,r[0]),V(r[1],r[0]))>0&&(n>0?Ye(V(o,r[1]),V(r[2],r[1]))<0:Ye(V(o,r[3]),V(r[0],r[3]))<0),Ye(V(o,r[1]),V(r[2],r[1]))>0&&(n>0?Ye(V(o,r[2]),V(r[3],r[2]))<0:Ye(V(o,r[0]),V(r[1],r[0]))<0),Ye(V(o,r[2]),V(r[3],r[2]))>0&&(n>0?Ye(V(o,r[3]),V(r[0],r[3]))<0:Ye(V(o,r[1]),V(r[2],r[1]))<0),Ye(V(o,r[3]),V(r[0],r[3]))>0&&(n>0?Ye(V(o,r[0]),V(r[1],r[0]))<0:Ye(V(o,r[2]),V(r[3],r[2]))<0)];return s[0]?n>0?r[1]:r[0]:s[1]?n>0?r[2]:r[1]:s[2]?n>0?r[3]:r[2]:n>0?r[0]:r[3]},Qa=new Set(["boundElements","frameId","containerId","startBinding","endBinding"]),si=(e,t,n)=>{Le(t)&&(t.boundElements?.slice()??[]).forEach(({id:i})=>{n(e.get(i),"boundElements",i)})},ai=(e,t,n)=>{let o=[];if(t.frameId){let i=t.frameId;o.push(n(e.get(i),"frameId",i))}if(ce(t)){let i=t.containerId;o.push(n(e.get(i),"containerId",i))}if(_(t)){if(t.startBinding){let i=t.startBinding.elementId;o.push(n(e.get(i),"startBinding",i))}if(t.endBinding){let i=t.endBinding.elementId;o.push(n(e.get(i),"endBinding",i))}}return o},$t=class{static unbindAffected(t,n,o){n&&ai(t,n,i=>{!i||i.isDeleted||si(t,i,(r,s,a)=>{a===n.id&&o(i,{boundElements:so(i.boundElements,new Set([a]))})})})}static rebindAffected=(t,n,o)=>{!n||n.isDeleted||ai(t,n,(i,r)=>{if(!i||i.isDeleted){o(n,{[r]:null});return}r!=="frameId"&&(i.boundElements?.find(s=>s.id===n.id)||(_(n)&&o(i,{boundElements:so(i.boundElements,new Set,new Array(n))}),oe(n)&&(i.boundElements?.find(s=>s.type==="text")?o(n,{[r]:null}):o(i,{boundElements:so(i.boundElements,new Set,new Array(n))}))))})}},Zt=class{static unbindAffected(t,n,o){n&&si(t,n,i=>{!i||i.isDeleted||ai(t,i,(r,s,a)=>{a===n.id&&o(i,{[s]:null})})})}static rebindAffected=(t,n,o)=>{!n||n.isDeleted||si(t,n,(i,r,s)=>{if(!i||i.isDeleted){o(n,{boundElements:so(n.boundElements,new Set([s]))});return}oe(i)&&((n.boundElements?.slice()??[]).reverse().find(l=>l.type==="text")?.id===i.id?i.containerId!==n.id&&o(i,{containerId:n.id}):(i.containerId!==null&&o(i,{containerId:null}),o(n,{boundElements:so(n.boundElements,new Set([i.id]))})))})}},ni=(e,t,n)=>{let[o,i]=vr(e);return ae(O(t.x+t.width*o,t.y+t.height*i),he(t,n),t.angle)},im=(e,t)=>{let n=e.startBinding&&t.get(e.startBinding.elementId),o=e.endBinding&&t.get(e.endBinding.elementId),i=n&&e.startBinding?ni(e.startBinding.fixedPoint,n,t):O(e.x+e.points[0][0],e.y+e.points[0][1]),r=o&&e.endBinding?ni(e.endBinding.fixedPoint,o,t):O(e.x+e.points[e.points.length-1][0],e.y+e.points[e.points.length-1][1]);return[i,r]},Ja=(e,t)=>{let[n,o]=im(e,t);return[U.pointFromAbsoluteCoords(e,n,t),U.pointFromAbsoluteCoords(e,o,t)]},vr=e=>e&&(Math.abs(e[0]-.5)<1e-4||Math.abs(e[1]-.5)<1e-4)?e.map(t=>Math.abs(t-.5)<1e-4?.5001:t):e;var Cr=({points:e})=>{let t=e[0][0],n=e[0][1];return{points:e.map(o=>G(o[0]-t,o[1]-n)),offsetX:t,offsetY:n}},U=class e{elementId;selectedPointsIndices;pointerDownState;isDragging;lastUncommittedPoint;pointerOffset;startBindingElement;endBindingElement;hoverPointIndex;segmentMidPointHoveredCoords;elbowed;customLineAngle;isEditing;constructor(t,n,o=!1){this.elementId=t.id,tl(t.points[0],G(0,0))||(console.error("Linear element is not normalized",Error().stack),be(t,n,e.getNormalizeElementPointsAndCoords(t))),this.selectedPointsIndices=null,this.lastUncommittedPoint=null,this.isDragging=!1,this.pointerOffset={x:0,y:0},this.startBindingElement="keep",this.endBindingElement="keep",this.pointerDownState={prevSelectedPointsIndices:null,lastClickedPoint:-1,lastClickedIsEndPoint:!1,origin:null,segmentMidpoint:{value:null,index:null,added:!1}},this.hoverPointIndex=-1,this.segmentMidPointHoveredCoords=null,this.elbowed=B(t)&&t.elbowed,this.customLineAngle=null,this.isEditing=o}static POINT_HANDLE_SIZE=10;static getElement(t,n){let o=n.get(t);return o||null}static handleBoxSelection(t,n,o,i){if(!n.selectedLinearElement?.isEditing||!n.selectionElement)return!1;let{selectedLinearElement:r}=n,{selectedPointsIndices:s,elementId:a}=r,l=e.getElement(a,i);if(!l)return!1;let[d,c,u,p]=Y(n.selectionElement,i),f=e.getPointsGlobalCoordinates(l,i).reduce((E,h,g)=>((h[0]>=d&&h[0]<=u&&h[1]>=c&&h[1]<=p||t.shiftKey&&s?.includes(g))&&E.push(g),E),[]).filter(E=>!(B(l)&&E!==0&&E!==l.points.length-1));o({selectedLinearElement:{...r,selectedPointsIndices:f.length?f:null}})}static handlePointDragging(t,n,o,i,r){if(!r)return null;let{elementId:s}=r,a=n.scene.getNonDeletedElementsMap(),l=e.getElement(s,a),d=r.customLineAngle;if(!l||B(l)&&!r.pointerDownState.lastClickedIsEndPoint&&r.pointerDownState.lastClickedPoint!==0)return null;let c=B(l)?[r.selectedPointsIndices?.includes(0)?0:void 0,r.selectedPointsIndices?.find(m=>m>0)?l.points.length-1:void 0].filter(m=>m!==void 0):r.selectedPointsIndices,u=B(l)?r.pointerDownState.lastClickedPoint>0?l.points.length-1:0:r.pointerDownState.lastClickedPoint,p=l.points[u];if(c&&p){if(nl(t)&&c.length===1&&l.points.length>1){let h=c[0],g=l.points[h===0?1:h-1];d=r.customLineAngle??Math.atan2(l.points[h][1]-g[1],l.points[h][0]-g[0]);let[x,y]=e._getShiftLockedDelta(l,a,g,G(o,i),t[Bn.CTRL_OR_CMD]?null:n.getEffectiveGridSize(),d);e.movePoints(l,n.scene,new Map([[h,{point:G(x+g[0],y+g[1]),isDragging:h===u}]]))}else{let h=e.createPointAt(l,a,o-r.pointerOffset.x,i-r.pointerOffset.y,t[Bn.CTRL_OR_CMD]?null:n.getEffectiveGridSize()),g=h[0]-p[0],x=h[1]-p[1];e.movePoints(l,n.scene,new Map(c.map(y=>{let b=y===u?e.createPointAt(l,a,o-r.pointerOffset.x,i-r.pointerOffset.y,t[Bn.CTRL_OR_CMD]?null:n.getEffectiveGridSize()):G(l.points[y][0]+g,l.points[y][1]+x);return[y,{point:b,isDragging:y===u}]})))}W(l,a)&&hn(l,n.scene,!1);let f=[];if(er(l,!1)){let h=c[0]===0,g=c[c.length-1]===l.points.length-1,x=[];!h!=!g?x.push({x:o,y:i}):(h&&x.push(Lr(e.getPointGlobalCoordinates(l,l.points[0],a))),g&&x.push(Lr(e.getPointGlobalCoordinates(l,l.points[c[c.length-1]],a)))),x.length&&(f=ja(l,x,n.scene,n.state.zoom))}let E={...r,selectedPointsIndices:c,segmentMidPointHoveredCoords:u!==0&&u!==l.points.length-1?this.getPointGlobalCoordinates(l,p,a):null,hoverPointIndex:u===0||u===l.points.length-1?u:-1,isDragging:!0,customLineAngle:d};return{...n.state,selectedLinearElement:E,suggestedBindings:f}}return null}static handlePointerUp(t,n,o,i){let r=i.getNonDeletedElementsMap(),s=i.getNonDeletedElements(),a=dm(t,o),{elementId:l,selectedPointsIndices:d,isDragging:c,pointerDownState:u}=n,p=e.getElement(l,r);if(!p)return n;let m={};if(c&&d){for(let f of d)if(f===0||f===p.points.length-1){cm(p.points,o.zoom.value)&&(bt(p)&&i.mutateElement(p,{...rl(p,!0)},{informMutation:!1,isDragging:!1}),e.movePoints(p,i,new Map([[f,{point:f===0?p.points[p.points.length-1]:p.points[0]}]])));let E=Ar(o)?Vt((d?.length??0)>1?Lr(e.getPointAtIndexGlobalCoordinates(p,f,r)):a,s,r,o.zoom,B(p),B(p)):null;m[f===0?"startBindingElement":"endBindingElement"]=E}}return{...n,...m,segmentMidPointHoveredCoords:null,hoverPointIndex:-1,selectedPointsIndices:c||t.shiftKey?!c&&t.shiftKey&&u.prevSelectedPointsIndices?.includes(u.lastClickedPoint)?d&&d.filter(f=>f!==u.lastClickedPoint):d:d?.includes(u.lastClickedPoint)?[u.lastClickedPoint]:d,isDragging:!1,pointerOffset:{x:0,y:0},customLineAngle:null}}static getEditorMidPoints=(t,n,o)=>{let i=W(t,n);if(!B(t)&&!o.selectedLinearElement?.isEditing&&t.points.length>2&&!i)return[];let r=e.getPointsGlobalCoordinates(t,n),s=0,a=[];for(;s<r.length-1;){if(e.isSegmentTooShort(t,t.points[s],t.points[s+1],s,o.zoom)){a.push(null),s++;continue}let l=e.getSegmentMidPoint(t,s+1);a.push(l),s++}return a};static getSegmentMidpointHitCoords=(t,n,o,i)=>{let{elementId:r}=t,s=e.getElement(r,i);if(!s)return null;let a=e.getPointIndexUnderCursor(s,i,o.zoom,n.x,n.y);if(!B(s)&&a>=0||e.getPointsGlobalCoordinates(s,i).length>=3&&!o.selectedLinearElement?.isEditing&&!B(s))return null;let d=(e.POINT_HANDLE_SIZE+1)/o.zoom.value,c=t.segmentMidPointHoveredCoords;if(c&&Gn(G(c[0],c[1]),G(n.x,n.y))<=d)return c;let u=0,p=e.getEditorMidPoints(s,i,o);for(;u<p.length;){if(p[u]!==null&&Gn(p[u],G(n.x,n.y))<=d)return p[u];u++}return null};static isSegmentTooShort(t,n,o,i,r){if(B(t))return i>=0&&i<t.points.length?Gn(n,o)*r.value<e.POINT_HANDLE_SIZE/2:!1;let s=Gn(n,o);if(t.points.length>2&&t.roundness){let[a,l]=il(t);vt(a.length===0&&l.length>0,"Only linears built out of curves are supported"),vt(a.length+l.length>=i,"Invalid segment index while calculating mid point"),s=sm(l[i])}return s*r.value<e.POINT_HANDLE_SIZE*4}static getSegmentMidPoint(t,n){if(B(t)){vt(t.points.length>=n,"Invalid segment index while calculating elbow arrow mid point");let r=el(t.points[n-1],t.points[n]);return G(t.x+r[0],t.y+r[1])}let[o,i]=il(t);if(vt(o.length===0&&i.length>0||o.length>0&&i.length===0,"Only linears built out of either segments or curves are supported"),vt(o.length+i.length>=n,"Invalid segment index while calculating mid point"),o.length){let r=o[n-1];return el(r[0],r[1])}if(i.length){let r=i[n-1];return am(r,.5)}vt(!1,"Invalid segment type while calculating mid point")}static getSegmentMidPointIndex(t,n,o,i){let r=e.getElement(t.elementId,i);if(!r)return-1;let s=e.getEditorMidPoints(r,i,n),a=0;for(;a<s.length;){if(e.arePointsEqual(o,s[a]))return a+1;a++}return-1}static handlePointerDown(t,n,o,i,r,s){let a=n.state,l=s.getNonDeletedElementsMap(),d=s.getNonDeletedElements(),c={didAddPoint:!1,hitElement:null,linearElementEditor:null};if(!r)return c;let{elementId:u}=r,p=e.getElement(u,l);if(!p)return c;let m=e.getSegmentMidpointHitCoords(r,i,a,l),f=null;if(m)f=e.getSegmentMidPointIndex(r,a,m,l);else if(t.altKey&&a.selectedLinearElement?.isEditing)return r.lastUncommittedPoint==null&&(s.mutateElement(p,{points:[...p.points,e.createPointAt(p,l,i.x,i.y,t[Bn.CTRL_OR_CMD]?null:n.getEffectiveGridSize())]}),c.didAddPoint=!0),o.scheduleCapture(),c.linearElementEditor={...r,pointerDownState:{prevSelectedPointsIndices:r.selectedPointsIndices,lastClickedPoint:-1,lastClickedIsEndPoint:!1,origin:{x:i.x,y:i.y},segmentMidpoint:{value:m,index:f,added:!1}},selectedPointsIndices:[p.points.length-1],lastUncommittedPoint:null,endBindingElement:Vt(i,d,l,n.state.zoom,r.elbowed)},c.didAddPoint=!0,c;let E=e.getPointIndexUnderCursor(p,l,a.zoom,i.x,i.y);if(E>=0||m)c.hitElement=p;else{let{startBindingElement:D,endBindingElement:T}=r;Ar(a)&&er(p)&&Dr(p,D,T,s)}let[h,g,x,y]=Y(p,l),b=(h+x)/2,w=(g+y)/2,I=E>-1&&Te(G(p.x+p.points[E][0],p.y+p.points[E][1]),G(b,w),p.angle),M=E>-1||t.shiftKey?t.shiftKey||r.selectedPointsIndices?.includes(E)?um([...r.selectedPointsIndices||[],E]):[E]:null;return c.linearElementEditor={...r,pointerDownState:{prevSelectedPointsIndices:r.selectedPointsIndices,lastClickedPoint:E,lastClickedIsEndPoint:E===p.points.length-1,origin:{x:i.x,y:i.y},segmentMidpoint:{value:m,index:f,added:!1}},selectedPointsIndices:M,pointerOffset:I?{x:i.x-I[0],y:i.y-I[1]}:{x:0,y:0}},c}static arePointsEqual(t,n){return!t&&!n?!0:!t||!n?!1:tl(t,n)}static handlePointerMove(t,n,o,i){let r=i.state;if(!r.selectedLinearElement?.isEditing)return null;let{elementId:s,lastUncommittedPoint:a}=r.selectedLinearElement,l=i.scene.getNonDeletedElementsMap(),d=e.getElement(s,l);if(!d)return r.selectedLinearElement;let{points:c}=d,u=c[c.length-1];if(!t.altKey)return u===a&&e.deletePoints(d,i,[c.length-1]),r.selectedLinearElement?.lastUncommittedPoint?{...r.selectedLinearElement,lastUncommittedPoint:null}:r.selectedLinearElement;let p;if(nl(t)&&c.length>=2){let m=c[c.length-2],[f,E]=e._getShiftLockedDelta(d,l,m,G(n,o),t[Bn.CTRL_OR_CMD]?null:i.getEffectiveGridSize());p=G(f+m[0],E+m[1])}else p=e.createPointAt(d,l,n-r.selectedLinearElement.pointerOffset.x,o-r.selectedLinearElement.pointerOffset.y,t[Bn.CTRL_OR_CMD]||B(d)?null:i.getEffectiveGridSize());return u===a?e.movePoints(d,i.scene,new Map([[d.points.length-1,{point:p}]])):e.addPoints(d,i.scene,[p]),{...r.selectedLinearElement,lastUncommittedPoint:d.points[d.points.length-1]}}static getPointGlobalCoordinates(t,n,o){let[i,r,s,a]=Y(t,o),l=(i+s)/2,d=(r+a)/2,{x:c,y:u}=t;return Te(G(c+n[0],u+n[1]),G(l,d),t.angle)}static getPointsGlobalCoordinates(t,n){let[o,i,r,s]=Y(t,n),a=(o+r)/2,l=(i+s)/2;return t.points.map(d=>{let{x:c,y:u}=t;return Te(G(c+d[0],u+d[1]),G(a,l),t.angle)})}static getPointAtIndexGlobalCoordinates(t,n,o){let i=n<0?t.points.length+n:n,[r,s,a,l]=Y(t,o),d=(r+a)/2,c=(s+l)/2,u=t.points[i],{x:p,y:m}=t;return u?Te(G(p+u[0],m+u[1]),G(d,c),t.angle):Te(G(p,m),G(d,c),t.angle)}static pointFromAbsoluteCoords(t,n,o){if(B(t))return G(n[0]-t.x,n[1]-t.y);let[i,r,s,a]=Y(t,o),l=(i+s)/2,d=(r+a)/2,[c,u]=Te(G(n[0],n[1]),G(l,d),-t.angle);return G(c-t.x,u-t.y)}static getPointIndexUnderCursor(t,n,o,i,r){let s=e.getPointsGlobalCoordinates(t,n),a=s.length;for(;--a>-1;){let l=s[a];if(Gn(G(i,r),G(l[0],l[1]))*o.value<e.POINT_HANDLE_SIZE+1)return a}return-1}static createPointAt(t,n,o,i,r){let s=ol(o,i,r),[a,l,d,c]=Y(t,n),u=(a+d)/2,p=(l+c)/2,[m,f]=Te(G(s[0],s[1]),G(u,p),-t.angle);return G(m-t.x,f-t.y)}static getNormalizeElementPointsAndCoords(t){let{points:n,offsetX:o,offsetY:i}=Cr(t);return{points:n,x:t.x+o,y:t.y+i}}static duplicateSelectedPoints(t,n){vt(t.selectedLinearElement?.isEditing,"Not currently editing a linear element");let o=n.getNonDeletedElementsMap(),{selectedPointsIndices:i,elementId:r}=t.selectedLinearElement,s=e.getElement(r,o);vt(s,"The linear element does not exist in the provided Scene"),vt(i!=null,"There are no selected points to duplicate");let{points:a}=s,l=[],d=!1,c=-1,u=a.reduce((p,m,f)=>{if(++c,p.push(m),i.includes(f)){let h=a[f+1];h||(d=!0),p.push(h?G((m[0]+h[0])/2,(m[1]+h[1])/2):G(m[0],m[1])),l.push(c+1),++c}return p},[]);if(n.mutateElement(s,{points:u}),d){let p=s.points[s.points.length-1];e.movePoints(s,n,new Map([[s.points.length-1,{point:G(p[0]+30,p[1]+30)}]]))}return{...t,selectedLinearElement:{...t.selectedLinearElement,selectedPointsIndices:l}}}static deletePoints(t,n,o){let i=n.state.selectedLinearElement?.isEditing&&n.state.selectedLinearElement?.lastUncommittedPoint===t.points[t.points.length-1],r=t.points.filter((c,u)=>!o.includes(u));bt(t)&&t.polygon&&(i||o.includes(0)||o.includes(t.points.length-1))&&(r[0]=G(r[r.length-1][0],r[r.length-1][1]));let{points:a,offsetX:l,offsetY:d}=Cr({points:r});e._updatePoints(t,n.scene,a,l,d)}static addPoints(t,n,o){let i=[...t.points,...o];bt(t)&&t.polygon&&(i[0]=G(i[i.length-1][0],i[i.length-1][1]));let{points:r,offsetX:s,offsetY:a}=Cr({points:i});e._updatePoints(t,n,r,s,a)}static movePoints(t,n,o,i){let{points:r}=t;if(bt(t)&&t.polygon){let c=o.get(0),u=o.get(r.length-1);c?o.set(r.length-1,{point:G(c.point[0],c.point[1]),isDragging:c.isDragging}):u&&o.set(0,{point:G(u.point[0],u.point[1]),isDragging:u.isDragging})}let s=o.get(0)?.point??G(0,0),[a,l]=s,d=B(t)?[o.get(0)?.point??r[0],o.get(r.length-1)?.point??r[r.length-1]]:r.map((c,u)=>{let p=o.get(u)?.point??c;return G(p[0]-a,p[1]-l)});e._updatePoints(t,n,d,a,l,i,{isDragging:Array.from(o.values()).some(c=>c.isDragging)})}static shouldAddMidpoint(t,n,o,i){let r=e.getElement(t.elementId,i);if(r&&B(r)||!r)return!1;let{segmentMidpoint:s}=t.pointerDownState;if(s.added||s.value===null||s.index===null||t.pointerDownState.origin===null)return!1;let a=t.pointerDownState.origin,l=Gn(G(a.x,a.y),G(n.x,n.y));return!(!o.selectedLinearElement?.isEditing&&l<lm/o.zoom.value)}static addMidpoint(t,n,o,i,r){let s=r.getNonDeletedElementsMap(),a=e.getElement(t.elementId,s);if(!a)return;let{segmentMidpoint:l}=t.pointerDownState,d={pointerDownState:t.pointerDownState,selectedPointsIndices:t.selectedPointsIndices},c=e.createPointAt(a,s,n.x,n.y,i&&!B(a)?o.getEffectiveGridSize():null),u=[...a.points.slice(0,l.index),c,...a.points.slice(l.index)];return r.mutateElement(a,{points:u}),d.pointerDownState={...t.pointerDownState,segmentMidpoint:{...t.pointerDownState.segmentMidpoint,added:!0},lastClickedPoint:l.index},d.selectedPointsIndices=[l.index],d}static _updatePoints(t,n,o,i,r,s,a){if(B(t)){let l={};s?.startBinding!==void 0&&(l.startBinding=s.startBinding!==null&&Jn(s.startBinding)?s.startBinding:null),s?.endBinding!==void 0&&(l.endBinding=s.endBinding!==null&&Jn(s.endBinding)?s.endBinding:null),l.points=Array.from(o),n.mutateElement(t,l,{informMutation:!0,isDragging:a?.isDragging??!1})}else{let l=Gr(t,o),d=Gr(t,t.points),c=(l[0]+l[2])/2,u=(l[1]+l[3])/2,p=(d[0]+d[2])/2,m=(d[1]+d[3])/2,f=p-c,E=m-u,h=Te(G(i,r),G(f,E),t.angle);n.mutateElement(t,{...s,points:o,x:t.x+h[0],y:t.y+h[1]})}}static _getShiftLockedDelta(t,n,o,i,r,s){let a=e.getPointGlobalCoordinates(t,o,n);if(B(t))return[i[0]-a[0],i[1]-a[1]];let[l,d]=ol(i[0],i[1],r),{width:c,height:u}=sl(a[0],a[1],l,d,s);return Te(G(c,u),G(0,0),-t.angle)}static getBoundTextElementPosition=(t,n,o)=>{e.getPointsGlobalCoordinates(t,o).length<2&&be(n,o,{isDeleted:!0});let r=0,s=0;if(t.points.length%2===1){let a=Math.floor(t.points.length/2),l=e.getPointGlobalCoordinates(t,t.points[a],o);r=l[0]-n.width/2,s=l[1]-n.height/2}else{let a=t.points.length/2-1,l=e.getSegmentMidPoint(t,a+1);r=l[0]-n.width/2,s=l[1]-n.height/2}return{x:r,y:s}};static getMinMaxXYWithBoundText=(t,n,o,i)=>{let[r,s,a,l]=o,d=(r+a)/2,c=(s+l)/2,{x:u,y:p}=e.getBoundTextElementPosition(t,i,n),m=u+i.width,f=p+i.height,E=G(d,c),h=Te(G(r,s),E,t.angle),g=Te(G(a,s),E,t.angle),x=Te(G(u,p),E,-t.angle),y=Te(G(m,p),E,-t.angle),b=Te(G(u,f),E,-t.angle),w=Te(G(m,f),E,-t.angle);return h[0]<g[0]&&h[1]>=g[1]?(r=Math.min(r,b[0]),a=Math.max(a,Math.max(y[0],w[0])),s=Math.min(s,x[1]),l=Math.max(l,w[1])):h[0]>=g[0]&&h[1]>g[1]?(r=Math.min(r,w[0]),a=Math.max(a,Math.max(x[0],y[0])),s=Math.min(s,b[1]),l=Math.max(l,y[1])):h[0]>=g[0]?(r=Math.min(r,y[0]),a=Math.max(a,b[0]),s=Math.min(s,w[1]),l=Math.max(l,x[1])):h[1]<=g[1]&&(r=Math.min(r,Math.min(y[0],x[0])),a=Math.max(a,w[0]),s=Math.min(s,y[1]),l=Math.max(l,b[1])),[r,s,a,l,d,c]};static getElementAbsoluteCoords=(t,n,o=!1)=>{let i,r,s,a,l;if(t.points.length<2||!Pe.get(t)){let{minX:p,minY:m,maxX:f,maxY:E}=t.points.reduce((h,[g,x])=>(h.minY=Math.min(h.minY,x),h.minX=Math.min(h.minX,g),h.maxX=Math.max(h.maxX,g),h.maxY=Math.max(h.maxY,x),h),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0});r=p+t.x,s=m+t.y,a=f+t.x,l=E+t.y}else{let p=Pe.generateElementShape(t,null),m=gt(p[0]),[f,E,h,g]=ao(m);r=f+t.x,s=E+t.y,a=h+t.x,l=g+t.y}let d=(r+a)/2,c=(s+l)/2;if(i=[r,s,a,l,d,c],!o)return i;let u=W(t,n);return u&&(i=e.getMinMaxXYWithBoundText(t,n,[r,s,a,l],u)),i};static moveFixedSegment(t,n,o,i,r){let s=r.getNonDeletedElementsMap(),a=e.getElement(t.elementId,s);if(!a||!B(a))return t;if(n&&n>0&&n<a.points.length){let l=Oe(Tt(rm(a.points[n],a.points[n-1]))),d=(a.fixedSegments??[]).reduce((m,f)=>(m[f.index]=f,m),{});d[n]={index:n,start:G(l?a.points[n-1][0]:o-a.x,l?i-a.y:a.points[n-1][1]),end:G(l?a.points[n][0]:o-a.x,l?i-a.y:a.points[n][1])};let c=Object.values(d).sort((m,f)=>m.index-f.index),u=c.map(m=>m.index).reduce((m,f)=>f<n?m+1:m,0);r.mutateElement(a,{fixedSegments:c});let p=G(a.x+(a.fixedSegments[u].start[0]+a.fixedSegments[u].end[0])/2,a.y+(a.fixedSegments[u].start[1]+a.fixedSegments[u].end[1])/2);return{...t,segmentMidPointHoveredCoords:p,pointerDownState:{...t.pointerDownState,segmentMidpoint:{added:!1,index:a.fixedSegments[u].index,value:p}}}}return t}static deleteFixedSegment(t,n,o){n.mutateElement(t,{fixedSegments:t.fixedSegments?.filter(i=>i.index!==o)})}},um=e=>{let t=[...new Set(e.filter(n=>n!==null&&n!==-1))];return t=t.sort((n,o)=>n-o),t.length?t:null};P();import{arrayToMap as mt}from"@excalidraw/common";import{isPointWithinBounds as Bm,pointFrom as Fr}from"@excalidraw/math";P();import{vectorCross as cl,vectorFromPoint as di}from"@excalidraw/math";function al(e){return[Math.min(e[0][0],e[1][0]),Math.min(e[0][1],e[1][1]),Math.max(e[0][0],e[1][0]),Math.max(e[0][1],e[1][1])]}function pm(e,t){return e[0]<=t[2]&&e[2]>=t[0]&&e[1]<=t[3]&&e[3]>=t[1]}var mm=1e-6;function ll(e,t){let n=di(e[1],e[0]),o=di(t,e[0]),i=cl(n,o);return Math.abs(i)<mm}function Br(e,t){let n=di(e[1],e[0]),o=di(t,e[0]);return cl(n,o)<0}function dl(e,t){return ll(e,t[0])||ll(e,t[1])||(Br(e,t[0])?!Br(e,t[1]):Br(e,t[1]))}function ul(e,t){return pm(al(e),al(t))&&dl(e,t)&&dl(t,e)}P();import{arrayToMap as fm}from"@excalidraw/common";import{getElementBounds as hm}from"@excalidraw/element";import{isArrowElement as Em,isExcalidrawElement as gm,isFreeDrawElement as xm,isLinearElement as wm,isTextElement as ym}from"@excalidraw/element";import{rangeIncludesValue as ci,pointFrom as Lt,pointRotateRads as bm,rangeInclusive as ui}from"@excalidraw/math";var Pm=e=>e.type==="diamond"?[Lt(e.width/2,0),Lt(e.width,e.height/2),Lt(e.width/2,e.height),Lt(0,e.height/2)]:[Lt(0,0),Lt(0+e.width,0),Lt(0+e.width,e.height),Lt(0,e.height)],Im=e=>wm(e)||xm(e)?e.points:Pm(e),pl=e=>{let t=e.reduce((n,[o,i])=>(n.minY=Math.min(n.minY,i),n.minX=Math.min(n.minX,o),n.maxX=Math.max(n.maxX,o),n.maxY=Math.max(n.maxY,i),n),{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0,cx:0,cy:0});return t.cx=(t.maxX+t.minX)/2,t.cy=(t.maxY+t.minY)/2,t},fl=e=>{let t=Im(e),{cx:n,cy:o}=pl(t),i=Lt(n,o),r=t.map(c=>bm(c,i,e.angle)),{minX:s,minY:a,maxX:l,maxY:d}=pl(r);return[s+e.x,a+e.y,l+e.x,d+e.y]},ml=(e,t,n=!1)=>{let o=fl(e),i=t[0]<=o[0]&&t[2]>=o[2]&&t[1]<=o[1]&&t[3]>=o[3];return n?i?!0:o[0]<=t[0]&&o[2]>=t[2]&&o[1]<=t[1]&&o[3]>=t[3]:i},Sm=(e,t)=>{let n=fl(e);return(ci(n[0],ui(t[0],t[2]))||ci(t[0],ui(n[0],n[2])))&&(ci(n[1],ui(t[1],t[3]))||ci(t[1],ui(n[1],n[3])))},hl=({elements:e,bounds:t,type:n,errorMargin:o=0})=>{gm(t)&&(t=hm(t,fm(e)));let i=[t[0]-o,t[1]-o,t[2]+o,t[3]+o],r=new Set;for(let s of e){if(r.has(s.id))continue;if(n==="overlap"?Sm(s,i):n==="inside"?ml(s,i):ml(s,i,!0)){if(r.add(s.id),s.boundElements)for(let l of s.boundElements)r.add(l.id);ym(s)&&s.containerId&&r.add(s.containerId),Em(s)&&(s.startBinding&&r.add(s.startBinding.elementId),s.endBinding&&r.add(s.endBinding?.elementId))}}return e.filter(s=>r.has(s.id))};P();import{arrayToMap as Lm,isShallowEqual as Cm}from"@excalidraw/common";P();var Mm=(e,t,n)=>{let o=n.reduce((i,r)=>(r.groupIds.includes(e)&&(i[r.id]=!0),i),{});return Object.keys(o).length<2?t.selectedGroupIds[e]||t.editingGroupId===e?{selectedElementIds:t.selectedElementIds,selectedGroupIds:{...t.selectedGroupIds,[e]:!1},editingGroupId:null}:t:{editingGroupId:t.editingGroupId,selectedGroupIds:{...t.selectedGroupIds,[e]:!0},selectedElementIds:{...t.selectedElementIds,...o}}},El=function(){let e=null,t=null,n=null,o=(r,s,a,l)=>{if(n!==void 0&&s===t&&r===e&&a.editingGroupId===n?.editingGroupId)return n;let d={};for(let p of r){let m=p.groupIds;if(a.editingGroupId){let f=m.indexOf(a.editingGroupId);f>-1&&(m=m.slice(0,f))}if(m.length>0){let f=m[m.length-1];d[f]=!0}}let c={},u=s.reduce((p,m)=>{if(m.isDeleted)return p;let f=m.groupIds.find(E=>d[E]);return f&&(p[m.id]=!0,Array.isArray(c[f])?c[f].push(m.id):c[f]=[m.id]),p},{});for(let p of Object.keys(c))c[p].length<2&&d[p]&&(d[p]=!1);return t=s,e=r,n={editingGroupId:a.editingGroupId,selectedGroupIds:d,selectedElementIds:kr({...a.selectedElementIds,...u},l)},n},i=(r,s,a,l)=>{let d=l?l.scene.getSelectedElements({selectedElementIds:r.selectedElementIds,elements:s}):pt(s,r);return d.length?o(d,s,r,a):{selectedGroupIds:{},editingGroupId:null,selectedElementIds:kr(r.selectedElementIds,a)}};return i.clearCache=()=>{t=null,e=null,n=null},i}(),Tm=(e,t)=>Or(e,t)!=null,Or=(e,t)=>t.groupIds.filter(n=>n!==e.editingGroupId).find(n=>e.selectedGroupIds[n]),Am=e=>Object.entries(e.selectedGroupIds).filter(([t,n])=>n).map(([t,n])=>t),gl=(e,t)=>{let n={...t,selectedGroupIds:{}};for(let o of e){let i=o.groupIds;if(t.editingGroupId){let r=i.indexOf(t.editingGroupId);r>-1&&(i=i.slice(0,r))}if(i.length>0){let r=i[i.length-1];n={...n,...Mm(r,n,e)}}}return n.selectedGroupIds},Ky=(e,t)=>({...e,editingGroupId:t.groupIds.length?t.groupIds[0]:null,selectedGroupIds:{},selectedElementIds:{[t.id]:!0}}),Dm=(e,t)=>e.groupIds.includes(t),Ae=(e,t)=>{let n=[];for(let o of e.values())Dm(o,t)&&n.push(o);return n},vm=(e,t)=>e.groupIds.find(n=>t[n]),Qy=(e,t,n)=>{let o=[...e],i=n?o.indexOf(n):-1,r=i>-1?i:o.length;return o.splice(r,0,t),o},Jy=(e,t)=>e.filter(n=>!t[n]),eb=(e,t)=>{let n=new Map;return e.forEach(o=>{let i=o.groupIds.length===0?o.id:o.groupIds[o.groupIds.length-1],r=n.get(i)||[],s=W(o,t);s&&r.push(s),n.set(i,[...r,o])}),Array.from(n.values())},xl=e=>{let t=new Set;for(let[,n]of e)if(!n.isDeleted)for(let o of n.groupIds??[])t.add(o);return t},wl=e=>{let t=e.flatMap(i=>i.groupIds),n=new Map,o=0;for(let i of t)n.set(i,(n.get(i)??0)+1),n.get(i)>o&&(o=n.get(i));return o===e.length},yl=e=>e.groupIds.length>0,bl=(e,t,n)=>{let o=[...e],i=t?e.indexOf(t):-1,r=i>-1?i:e.length;for(let s=0;s<r;s++)o[s]=n(o[s]);return o},pi=(e,t,n)=>{let o=Am(n),i=e.filter(u=>!ce(u)),r=new Map,s=new Map,a=u=>{let p=s.get(u.id)||[],m=W(u,t);m&&p.push(m),s.set(u.id,[...p,u])},l=(u,p)=>{let m=r.get(p)||[],f=W(u,t);f&&m.push(f),r.set(p,[...m,u])},d=(u,p)=>{let m=u.groupIds.indexOf(p,0);return u.groupIds.slice(0,m).length>0?l(u,u.groupIds[m-1]):a(u)},c=e.every(u=>Tm(n,u));return i.forEach(u=>{let p=vm(u,n.selectedGroupIds);p?o.length===1&&c?d(u,p):l(u,p):a(u)}),Array.from(r.values()).concat(Array.from(s.values()))};var Pl=e=>{let t=new Set;return e.forEach(n=>{q(n)&&t.add(n.id)}),e.filter(n=>!(n.frameId&&t.has(n.frameId)))},Rr=(e,t,n,o=!0)=>{let[i,r,s,a]=Y(t,n),l=e.filter(d=>{let[c,u,p,m]=pe(d,n),f=Ct(d,n);if(f){let[E,h,g,x]=pe(f,n);c=Math.max(E,c),u=Math.max(h,u),p=Math.min(g,p),m=Math.min(x,m)}return d.locked===!1&&d.type!=="selection"&&!ce(d)&&i<=c&&r<=u&&s>=p&&a>=m});return l=o?Pl(l):l,l=l.filter(d=>{let c=Ct(d,n);return c?qt(d,c,n):!0}),l},cb=(e,t,n,o)=>{let i=new Set(t.map(r=>r.id));return e.filter(r=>{let s=Il(r,n.width,n.height,n,o);return!i.has(r.id)&&s})},ub=function(){let e=null,t=null,n=null,o=(i,r)=>(n!=null&&i===e&&r.selectedElementIds===t||(n=i.some(s=>r.selectedElementIds[s.id]),e=i,t=r.selectedElementIds),n);return o.clearCache=()=>{e=null,t=null,n=null},o}(),pt=(e,t,n)=>{let o=new Set,i=[];for(let r of e.values()){if(t.selectedElementIds[r.id]){i.push(r),o.add(r.id);continue}if(n?.includeBoundTextElement&&ce(r)&&t.selectedElementIds[r?.containerId]){i.push(r),o.add(r.id);continue}}if(n?.includeElementsInFrames){let r=[];return i.forEach(s=>{q(s)&&Kt(e,s.id).forEach(a=>!o.has(a.id)&&r.push(a)),r.push(s)}),r}return i},pb=(e,t)=>t.editingTextElement?[t.editingTextElement]:t.newElement?[t.newElement]:pt(e,t,{includeBoundTextElement:!0}),kr=(e,t)=>Cm(t.selectedElementIds,e)?t.selectedElementIds:e,Gm=(e,t)=>{let n=e.filter(j);if(n.length===1){let o=n[0],i=o.boundElements?.map(s=>s.id)??[];if(e.every(s=>s.id===o.id||i.includes(s.id)))return new U(o,Lm(t))}return null},mb=(e,t,n)=>({selectedLinearElement:Gm(e,t),...El({editingGroupId:n.editingGroupId,selectedElementIds:Pl(e).reduce((o,i)=>(ce(i)||(o[i.id]=!0),o),{})},t,n,null)});var Sl=(e,t,n)=>{let o=mt(e);for(let i of t)if(i.frameId){let r=n.get(i.id),s=n.get(i.frameId),a=r&&o.get(r);a&&be(a,o,{frameId:s??null})}};function kn(e,t,n){let o=Nr(t,n),i=Nr(e,n);return o.some(s=>i.some(a=>ul(s,a)))}var Ml=(e,t,n)=>mi(Rr(e,t,n,!1)).filter(o=>!q(o)&&!o.frameId||o.frameId===t.id),Hr=(e,t,n)=>Rr([t],e,n).some(o=>o.id===t.id),Tb=(e,t)=>{let n=mt(e);return e.filter(o=>kn(o,t,n))},Qt=(e,t,n)=>{let[o,i,r,s]=Y(t,n),[a,l,d,c]=Xe(e);return o<=a&&i<=l&&r>=d&&s>=c},qt=(e,t,n)=>Qt([e],t,n)||kn(e,t,n)||Hr(e,t,n),Ab=(e,t,n)=>{let[o,i,r,s]=Y(t,n);return Bm(Fr(o,i),Fr(e.x,e.y),Fr(r,s))},Db=(e,t,n)=>{let o=mt(e),i=t.flatMap(r=>Ae(e,r));return i.length===0?!0:!!i.find(r=>Qt([r],n,o)||kn(r,n,o))},vb=(e,t,n)=>{let o=mt(e),i=t.flatMap(r=>Ae(e,r));return i.length===0?!0:i.find(r=>Qt([r],n,o)||kn(r,n,o))===void 0},Lb=e=>{let t=new Map;for(let n of e){let o=q(n)?n.id:n.frameId;o&&!t.has(o)&&t.set(o,Kt(e,o))}return t},Kt=(e,t)=>{let n=[];for(let o of e.values())o.frameId===t&&n.push(o);return n},km=e=>e.filter(t=>q(t)),Cb=e=>{let t=mt(km(e));return e.filter(n=>t.has(n.id)||!n.frameId||!t.has(n.frameId))},Gb=(e,t,n,o)=>{let i=Kt(e,t.id),r=new Set(i),s=new Set([...Ml(e,t,o),...i.filter(p=>Hr(p,t,o))]),a=i.filter(p=>!s.has(p)),l=new Set(Array.from(s).flatMap(p=>p.groupIds));for(let p of a)if(!kn(p,t,o))p.groupIds.length===0&&r.delete(p);else if(p.groupIds.length>0)for(let m of p.groupIds)l.add(m);for(let p of a)if(p.groupIds.length>0){let m=!0;for(let f of p.groupIds)l.has(f)&&(m=!1);m&&r.delete(p)}let d=Array.from(s).filter(p=>p.groupIds.length===0);for(let p of d)r.add(p);let c=Array.from(s).filter(p=>p.groupIds.length>0),u=gl(c,n);for(let[p,m]of Object.entries(u))if(m){let f=Ae(e,p);if(Qt(f,t,o))for(let E of f)r.add(E)}return[...r].filter(p=>!(oe(p)&&p.containerId))},Bb=(e,t,n)=>Om(mi(e,Ml(e,t,n)),t,n),Om=(e,t,n)=>{let o=[],i=new Map;for(let r of e){let s=!1;if(r.groupIds.length>0){if(r.groupIds.some(a=>i.get(a)))s=!0;else{let a=new Set(r.groupIds.flatMap(l=>Ae(n,l)));s=!Qt(Array.from(a),t,n)}r.groupIds.forEach(a=>{i.set(a,s)})}s||o.push(r)}return o},Ct=(e,t)=>e.frameId&&t.get(e.frameId)||null,kb=(e,t)=>{let n=new Set,o=mt(e);e=mi(e);for(let s of e)q(s)&&s.id!==t.id&&n.add(s.id);let i=new Set,r=[];for(let s of e)if(!(q(s)||s.frameId&&n.has(s.frameId)))if(s.groupIds.length){let a=s.groupIds.at(-1);if(!i.has(a)){i.add(a);let l=Ae(e,a);if(l.some(d=>qt(d,t,o)))for(let d of l)r.push(d)}}else qt(s,t,o)&&r.push(s);return r},Rm=(e,t,n,o)=>{let i=mt(e),r=new Map;for(let d of e.values())d.frameId===n.id&&r.set(d.id,!0);let s=new Set(t.map(d=>d.id)),a=[],l=new Set;for(let d of t)q(d)&&d.id!==n.id&&l.add(d.id);for(let d of mi(e,t)){if(q(d)||d.frameId&&l.has(d.frameId)||d.frameId&&o.selectedElementIds[d.id]&&o.selectedElementIds[d.frameId])continue;r.has(d.id)||a.push(d);let c=W(d,i);c&&!s.has(c.id)&&!r.has(c.id)&&a.push(c)}for(let d of a)be(d,i,{frameId:n.id});return e},Tl=(e,t)=>{let n=new Map,o=new Map;for(let i of e)if(i.frameId){n.set(i.id,i);let r=o.get(i.frameId)||[];r.push(i);let s=W(i,t);s&&(n.set(s.id,s),r.push(s)),o.set(i.frameId,r)}for(let[,i]of n)be(i,t,{frameId:null})},Fm=(e,t)=>{let n=Kt(e,t.id);return Tl(n,mt(e)),e},Ob=(e,t,n,o)=>Rm(Fm(e,n),t,n,o.state).slice(),Rb=(e,t,n)=>{let o=n.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,elements:e}),i=new Set(o);if(t.editingGroupId)for(let a of o)a.groupIds.length===0?i.add(a):a.groupIds.flatMap(l=>Ae(e,l)).forEach(l=>i.add(l));let r=new Set,s=mt(e);return i.forEach(a=>{a.frameId&&!q(a)&&!Al(a,s,t)&&r.add(a)}),r.size>0&&Tl(r,s),e},mi=(e,t)=>{let n=new Set,o=t||e;for(let s of o.values()){let a=s.groupIds[s.groupIds.length-1];a&&n.add(a)}let i=new Set;for(let s of n)Ae(e,s).some(a=>q(a))&&i.add(s);let r=[];for(let s of o.values())i.has(s.groupIds[s.groupIds.length-1])||r.push(s);return r},Nm=(e,t,n)=>{let o=oe(e)&&Ce(e,t)||e;return o.frameId&&n.selectedElementIds[o.id]&&n.selectedElementIds[o.frameId]?Ct(o,t):n.selectedElementIds[o.id]&&n.selectedElementsAreBeingDragged?n.frameToHighlight:Ct(o,t)},Al=(e,t,n,o)=>{let i=o?.targetFrame??Nm(e,t,n);if(!i)return!1;let r=oe(e)&&Ce(e,t)||e,s=l=>{o?.checkedGroups&&r.groupIds.forEach(d=>{o.checkedGroups?.set(d,l)})};if(!n.selectedElementIds[r.id]||!n.selectedElementsAreBeingDragged||n.selectedElementIds[r.id]&&n.selectedElementIds[i.id])return!0;if(r.groupIds.length===0)return qt(r,i,t);for(let l of r.groupIds)if(o?.checkedGroups?.has(l))return o.checkedGroups.get(l);let a=new Set(r.groupIds.filter(l=>o?.checkedGroups?!o.checkedGroups.has(l):!0).flatMap(l=>Ae(t,l)));if(n.editingGroupId&&n.selectedElementsAreBeingDragged){let l=new Set(pt(t,n));if(n.frameToHighlight!==null)return!0;l.forEach(c=>{a.delete(c)})}for(let l of a)if(q(l))return s(!1),!1;for(let l of a)if(qt(l,i,t))return s(!0),!0;return!1},Fb=(e,t,n,o,i)=>{if(!n.frameRendering||!n.frameRendering.clip)return!1;let r=kn(e,t,o)||Hr(e,t,o);if(r){for(let s of e.groupIds)i?.set(s,!0);return!0}if(!r&&e.groupIds.length>0&&!Qt([e],t,o)){let s=!1;if(n.selectedElementsAreBeingDragged)s=Al(e,o,n,{targetFrame:t,checkedGroups:i});else{s=e.frameId===t.id;for(let a of e.groupIds)i?.set(a,s)}for(let a of e.groupIds)i?.set(a,s);return s}return!1},Hm="Frame",zm="AI Frame",_m=e=>Fo(e)?Hm:zm,Nb=e=>e.name===null?_m(e):e.name,Hb=(e,t)=>hl({elements:e,bounds:t,type:"overlap"}).filter(n=>!n.frameId||n.frameId===t.id),zb=e=>{let t=mt(e);return e.length>1&&e.some(n=>n.frameId&&t.has(n.frameId))};var Zm="invert(100%) hue-rotate(180deg) saturate(1.25)",Gl=(e,t)=>_t(e)&&!t.imageCache.has(e.fileId),Bl=(e,t,n)=>n.theme===Cl.DARK&&_t(e)&&!Gl(e,t)&&t.imageCache.get(e.fileId)?.mimeType!==Yr.svg,wi=e=>{switch(e.type){case"freedraw":return e.strokeWidth*12;case"text":return e.fontSize/2;case"arrow":return e.endArrowhead||e.endArrowhead?40:20;default:return 20}},qm=(e,t,n,o,i=1)=>{let r=(t?.opacity??100)*e.opacity/1e4*i;return(n.has(e.id)||o&&o.some(s=>s.id===e.id)||t&&n.has(t.id))&&(r*=Xm/100),r},Km=(e,t,n)=>{let r=wi(e),[s,a,l,d]=Y(e,t),c=j(e)||Me(e)?Jt(s,l):e.width,u=j(e)||Me(e)?Jt(a,d):e.height,p=c*window.devicePixelRatio+r*2,m=u*window.devicePixelRatio+r*2,f=n.value;return(p*f>32767||m*f>32767)&&(f=Math.min(32767/p,32767/m)),p*m*f*f>16777216&&(f=Math.sqrt(16777216/(p*m))),p=Math.floor(p*f),m=Math.floor(m*f),{width:p,height:m,scale:f}},kl=(e,t,n,o,i)=>{let r=document.createElement("canvas"),s=r.getContext("2d"),a=wi(e),{width:l,height:d,scale:c}=Km(e,t,n);if(!l||!d)return null;r.width=l,r.height=d;let u=-100,p=0;if(j(e)||Me(e)){let[g,x]=Y(e,t);u=e.x>g?Jt(e.x,g)*window.devicePixelRatio*c:0,p=e.y>x?Jt(e.y,x)*window.devicePixelRatio*c:0,s.translate(u,p)}s.save(),s.translate(a*c,a*c),s.scale(window.devicePixelRatio*c,window.devicePixelRatio*c);let m=pn.canvas(r);Bl(e,o,i)&&(s.filter=Zm),gi(e,m,s,o,i),s.restore();let f=W(e,t),E=document.createElement("canvas"),h=E.getContext("2d");if(_(e)&&f){let[g,x,y,b]=Y(e,t),w=Math.max(Jt(g,y),Jt(x,b));E.width=w*window.devicePixelRatio*c+a*c*10,E.height=w*window.devicePixelRatio*c+a*c*10,h.translate(E.width/2,E.height/2),h.rotate(e.angle),h.drawImage(r,-r.width/2,-r.height/2,r.width,r.height);let[,,,,I,M]=Y(f,t);h.rotate(-e.angle);let D=(E.width-r.width)/2,T=(E.height-r.height)/2,N=E.width/2-(I-g)*window.devicePixelRatio*c-D-a*c,C=E.height/2-(M-x)*window.devicePixelRatio*c-T-a*c;h.translate(-N,-C),h.clearRect(-(f.width/2+hi)*window.devicePixelRatio*c,-(f.height/2+hi)*window.devicePixelRatio*c,(f.width+hi*2)*window.devicePixelRatio*c,(f.height+hi*2)*window.devicePixelRatio*c)}return{element:e,canvas:r,theme:i.theme,scale:c,zoomValue:n.value,canvasOffsetX:u,canvasOffsetY:p,boundTextElementVersion:W(e,t)?.version||null,containingFrameOpacity:Ct(e,t)?.opacity||100,boundTextCanvas:E,angle:e.angle,imageCrop:we(e)?e.crop:null}},n0=14,Ol=typeof document<"u"?document.createElement("img"):{src:""};Ol.src=`data:${Yr.svg},${encodeURIComponent('<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="image" class="svg-inline--fa fa-image fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#888" d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"></path></svg>')}`;var Rl=typeof document<"u"?document.createElement("img"):{src:""};Rl.src=`data:${Yr.svg},${encodeURIComponent('<svg viewBox="0 0 668 668" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48ZM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56ZM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.81709 0 0 .81709 124.825 145.825)"/><path d="M256 8C119.034 8 8 119.033 8 256c0 136.967 111.034 248 248 248s248-111.034 248-248S392.967 8 256 8Zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676ZM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.30366 0 0 .30366 506.822 60.065)"/></svg>')}`;var Qm=(e,t)=>{t.fillStyle="#E7E7E7",t.fillRect(0,0,e.width,e.height);let n=Math.min(e.width,e.height),o=Math.min(n,Math.min(n*.4,100));t.drawImage(e.status==="error"?Rl:Ol,e.width/2-o/2,e.height/2-o/2,o,o)},gi=(e,t,n,o,i)=>{switch(e.type){case"rectangle":case"iframe":case"embeddable":case"diamond":case"ellipse":{n.lineJoin="round",n.lineCap="round",t.draw(Pe.get(e));break}case"arrow":case"line":{n.lineJoin="round",n.lineCap="round",Pe.get(e).forEach(r=>{t.draw(r)});break}case"freedraw":{n.save(),n.fillStyle=e.strokeColor;let r=Jm(e),s=Pe.get(e);s&&t.draw(s),n.fillStyle=e.strokeColor,n.fill(r),n.restore();break}case"image":{let r=_t(e)?o.imageCache.get(e.fileId)?.image:void 0;if(r!=null&&!(r instanceof Promise)){e.roundness&&n.roundRect&&(n.beginPath(),n.roundRect(0,0,e.width,e.height,yt(Math.min(e.width,e.height),e)),n.clip());let{x:s,y:a,width:l,height:d}=e.crop?e.crop:{x:0,y:0,width:r.naturalWidth,height:r.naturalHeight};n.drawImage(r,s,a,l,d,0,0,e.width,e.height)}else Qm(e,n);break}default:if(oe(e)){let r=Wm(e.text),s=r&&!n.canvas.isConnected;s&&document.body.appendChild(n.canvas),n.canvas.setAttribute("dir",r?"rtl":"ltr"),n.save(),n.font=jm(e),n.fillStyle=e.strokeColor,n.textAlign=e.textAlign;let a=e.text.replace(/\r\n?/g,`
10
- `).split(`
11
- `),l=e.textAlign==="center"?e.width/2:e.textAlign==="right"?e.width:0,d=_o(e.fontSize,e.lineHeight),c=Vm(e.fontFamily,e.fontSize,d);for(let u=0;u<a.length;u++)n.fillText(a[u],l,u*d+c);n.restore(),s&&n.canvas.remove()}else throw new Error(`Unimplemented type ${e.type}`)}},xi=new WeakMap,vl=(e,t,n,o)=>{let i=n?o.zoom:{value:1},r=xi.get(e),s=r&&r.zoomValue!==i.value&&!o?.shouldCacheIgnoreZoom,a=W(e,t),l=a?.version||null,d=we(e)?e.crop:null,c=Ct(e,t)?.opacity||100;if(!r||s||r.theme!==o.theme||r.boundTextElementVersion!==l||r.imageCrop!==d||r.containingFrameOpacity!==c||_(e)&&a&&e.angle!==r.angle){let u=kl(e,t,i,n,o);return u?(xi.set(e,u),u):null}return r},_r=(e,t,n,o,i)=>{let r=e.element,s=wi(r),a=e.scale,[l,d,c,u]=Y(r,i),p=((l+c)/2+o.scrollX)*window.devicePixelRatio,m=((d+u)/2+o.scrollY)*window.devicePixelRatio;t.save(),t.scale(1/window.devicePixelRatio,1/window.devicePixelRatio);let f=W(r,i);if(_(r)&&f){let E=(e.boundTextCanvas.width-e.canvas.width)/2,h=(e.boundTextCanvas.height-e.canvas.height)/2;t.translate(p,m),t.drawImage(e.boundTextCanvas,-(c-l)/2*window.devicePixelRatio-E/a-s,-(u-d)/2*window.devicePixelRatio-h/a-s,e.boundTextCanvas.width/a,e.boundTextCanvas.height/a)}else if(t.translate(p,m),t.rotate(r.angle),"scale"in e.element&&!Gl(r,n)&&t.scale(e.element.scale[0],e.element.scale[1]),t.translate(-p,-m),t.drawImage(e.canvas,(l+o.scrollX)*window.devicePixelRatio-s*e.scale/e.scale,(d+o.scrollY)*window.devicePixelRatio-s*e.scale/e.scale,e.canvas.width/e.scale,e.canvas.height/e.scale),A.VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX==="true"&&st(r)){let E=W(r,i),h=dr(r);t.strokeStyle="#c92a2a",t.lineWidth=3,t.strokeRect((h.x+o.scrollX)*window.devicePixelRatio,(h.y+o.scrollY)*window.devicePixelRatio,et(r,E)*window.devicePixelRatio,no(r,E)*window.devicePixelRatio)}t.restore()},o0=(e,t,n,o)=>{t.save(),t.translate(e.x+n.scrollX,e.y+n.scrollY),t.fillStyle="rgba(0, 0, 200, 0.04)";let i=.5/n.zoom.value;t.fillRect(i,i,e.width,e.height),t.lineWidth=1/n.zoom.value,t.strokeStyle=o,t.strokeRect(i,i,e.width,e.height),t.restore()},i0=(e,t,n,o,i,r,s)=>{let a=s.openDialog?.name==="elementLinkSelector"&&!s.selectedElementIds[e.id]&&!s.hoveredElementIds[e.id];switch(i.globalAlpha=qm(e,Ct(e,t),r.elementsPendingErasure,r.pendingFlowchartNodes,a?Um:1),e.type){case"magicframe":case"frame":{s.frameRendering.enabled&&s.frameRendering.outline&&(i.save(),i.translate(e.x+s.scrollX,e.y+s.scrollY),i.fillStyle="rgba(0, 0, 200, 0.04)",i.lineWidth=Ei.strokeWidth/s.zoom.value,i.strokeStyle=Ei.strokeColor,aa(e)&&(i.strokeStyle=s.theme===Cl.LIGHT?"#7affd7":"#1d8264"),Ei.radius&&i.roundRect?(i.beginPath(),i.roundRect(0,0,e.width,e.height,Ei.radius/s.zoom.value),i.stroke(),i.closePath()):i.strokeRect(0,0,e.width,e.height),i.restore());break}case"freedraw":{if(Pe.generateElementShape(e,null),r.isExporting){let[l,d,c,u]=Y(e,t),p=(l+c)/2+s.scrollX,m=(d+u)/2+s.scrollY,f=(c-l)/2-(e.x-l),E=(u-d)/2-(e.y-d);i.save(),i.translate(p,m),i.rotate(e.angle),i.translate(-f,-E),gi(e,o,i,r,s),i.restore()}else{let l=vl(e,n,r,s);if(!l)return;_r(l,i,r,s,n)}break}case"rectangle":case"diamond":case"ellipse":case"line":case"arrow":case"image":case"text":case"iframe":case"embeddable":{if(Pe.generateElementShape(e,r),r.isExporting){let[l,d,c,u]=Y(e,t),p=(l+c)/2+s.scrollX,m=(d+u)/2+s.scrollY,f=(c-l)/2-(e.x-l),E=(u-d)/2-(e.y-d);if(oe(e)){let g=Ce(e,t);if(_(g)){let x=U.getBoundTextElementPosition(g,e,t);f=(c-l)/2-(x.x-l),E=(u-d)/2-(x.y-d)}}i.save(),i.translate(p,m),Bl(e,r,s)&&(i.filter="none");let h=W(e,t);if(_(e)&&h){let g=document.createElement("canvas"),x=g.getContext("2d"),y=Math.max(Jt(l,c),Jt(d,u)),b=wi(e);g.width=y*s.exportScale+b*10*s.exportScale,g.height=y*s.exportScale+b*10*s.exportScale,x.translate(g.width/2,g.height/2),x.scale(s.exportScale,s.exportScale),f=e.width/2-(e.x-l),E=e.height/2-(e.y-d),x.rotate(e.angle);let w=pn.canvas(g);x.translate(-f,-E),gi(e,w,x,r,s),x.translate(f,E),x.rotate(-e.angle);let[,,,,I,M]=Y(h,t),D=(l+c)/2-I,T=(d+u)/2-M;x.translate(-D,-T),x.clearRect(-h.width/2,-h.height/2,h.width,h.height),i.scale(1/s.exportScale,1/s.exportScale),i.drawImage(g,-g.width/2,-g.height/2,g.width,g.height)}else i.rotate(e.angle),e.type==="image"&&i.scale(e.scale[0],e.scale[1]),i.translate(-f,-E),gi(e,o,i,r,s);i.restore()}else{let l=vl(e,n,r,s);if(!l)return;let d=i.imageSmoothingEnabled;if(!s?.shouldCacheIgnoreZoom&&(!e.angle||Ym(e.angle))&&(i.imageSmoothingEnabled=!1),e.id===s.croppingElementId&&we(l.element)&&l.element.crop!==null){i.save(),i.globalAlpha=.1;let c=kl(ta(l.element,t),n,s.zoom,r,s);c&&_r(c,i,r,s,n),i.restore()}_r(l,i,r,s,n),i.imageSmoothingEnabled=d}break}default:throw new Error(`Unimplemented type ${e.type}`)}i.globalAlpha=1},Fl=new WeakMap([]);function Nl(e){let t=ef(e),n=new Path2D(t);return Fl.set(e,n),n}function Jm(e){return Fl.get(e)}function ef(e){return of(tf(e))}function r0(e,t,n){let o=pe({...e,angle:0},n),i=fi((o[0]+o[2])/2,(o[1]+o[3])/2);return $m(t.length>=2,"Freepath outline must have at least 2 points"),t.slice(2).reduce((r,s)=>(r.push(Dl(r[r.length-1][1],zr(fi(s[0]+e.x,s[1]+e.y),i,e.angle))),r),[Dl(zr(fi(t[0][0]+e.x,t[0][1]+e.y),i,e.angle),zr(fi(t[1][0]+e.x,t[1][1]+e.y),i,e.angle))])}function tf(e){let t=e.simulatePressure?e.points:e.points.length?e.points.map(([o,i],r)=>[o,i,e.pressures[r]]):[[0,0,.5]],n={simulatePressure:e.simulatePressure,size:e.strokeWidth*4.25,thinning:.6,smoothing:.5,streamline:.5,easing:o=>Math.sin(o*Math.PI/2),last:!!e.lastCommittedPoint};return qs(t,n)}function Ll(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2]}var nf=/(\s?[A-Z]?,?-?[0-9]*\.[0-9]{0,2})(([0-9]|e|-)*)/g;function of(e){if(!e.length)return"";let t=e.length-1;return e.reduce((n,o,i,r)=>(i===t?n.push(o,Ll(o,r[0]),"L",r[0],"Z"):n.push(o,Ll(o,r[i+1])),n),["M",e[0],"Q"]).join(" ").replace(nf,"$1")}P();var l0=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="line"||e==="freedraw",d0=e=>e==="rectangle"||e==="ellipse"||e==="diamond"||e==="freedraw"||e==="arrow"||e==="line"||e==="text",c0=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="freedraw"||e==="arrow"||e==="line",u0=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="arrow"||e==="line",Hl=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="line"||e==="diamond"||e==="image",p0=e=>e==="arrow",m0=e=>e==="arrow";var Pe=class e{static rg=new je;static cache=new WeakMap;static get=t=>e.cache.get(t);static set=(t,n)=>e.cache.set(t,n);static delete=t=>e.cache.delete(t);static destroy=()=>{e.cache=new WeakMap};static generateElementShape=(t,n)=>{let o=n?.isExporting?void 0:e.get(t);if(o!==void 0)return o;xi.delete(t);let i=uf(t,e.rg,n||{isExporting:!1,canvasBackgroundColor:af.white,embedsValidationStatus:null});return e.cache.set(t,i),i}},df=e=>[8,8+e],Ul=e=>[1.5,6+e];function cf(e){let t=e.roughness,n=Math.max(e.width,e.height),o=Math.min(e.width,e.height);return o>=20&&n>=50||o>=15&&e.roundness&&Hl(e.type)||j(e)&&n>=50?t:Math.min(t/(n<10?3:2),2.5)}var Fe=(e,t=!1)=>{let n={seed:e.seed,strokeLineDash:e.strokeStyle==="dashed"?df(e.strokeWidth):e.strokeStyle==="dotted"?Ul(e.strokeWidth):void 0,disableMultiStroke:e.strokeStyle!=="solid",strokeWidth:e.strokeStyle!=="solid"?e.strokeWidth+.5:e.strokeWidth,fillWeight:e.strokeWidth/2,hachureGap:e.strokeWidth*4,roughness:cf(e),stroke:e.strokeColor,preserveVertices:t||e.roughness<rf.cartoonist};switch(e.type){case"rectangle":case"iframe":case"embeddable":case"diamond":case"ellipse":return n.fillStyle=e.fillStyle,n.fill=lo(e.backgroundColor)?void 0:e.backgroundColor,e.type==="ellipse"&&(n.curveFitting=1),n;case"line":case"freedraw":return mn(e.points)&&(n.fillStyle=e.fillStyle,n.fill=e.backgroundColor==="transparent"?void 0:e.backgroundColor),n;case"arrow":return n;default:throw new Error(`Unimplemented type ${e.type}`)}},_l=(e,t,n)=>Ro(e)&&(t||sa(e)&&n?.get(e.id)!==!0)&&lo(e.backgroundColor)&&lo(e.strokeColor)?{...e,roughness:0,backgroundColor:"#d3d3d3",fillStyle:"solid"}:Oo(e)?{...e,strokeColor:lo(e.strokeColor)?"#000000":e.strokeColor,backgroundColor:lo(e.backgroundColor)?"#f4f4f6":e.backgroundColor}:e,Yl=(e,t,n,o,i,r,s)=>{let a=Ur(e,t,n,o);if(a===null)return[];let l=(d,c)=>{if(d===null)return[];let[,,u,p,m,f]=d;return[i.line(u,p,m,f,c)]};switch(o){case"dot":case"circle":case"circle_outline":{let[d,c,u]=a;return delete r.strokeLineDash,[i.circle(d,c,u,{...r,fill:o==="circle_outline"?s:e.strokeColor,fillStyle:"solid",stroke:e.strokeColor,roughness:Math.min(.5,r.roughness||0)})]}case"triangle":case"triangle_outline":{let[d,c,u,p,m,f]=a;return delete r.strokeLineDash,[i.polygon([[d,c],[u,p],[m,f],[d,c]],{...r,fill:o==="triangle_outline"?s:e.strokeColor,fillStyle:"solid",roughness:Math.min(1,r.roughness||0)})]}case"diamond":case"diamond_outline":{let[d,c,u,p,m,f,E,h]=a;return delete r.strokeLineDash,[i.polygon([[d,c],[u,p],[m,f],[E,h],[d,c]],{...r,fill:o==="diamond_outline"?s:e.strokeColor,fillStyle:"solid",roughness:Math.min(1,r.roughness||0)})]}case"crowfoot_one":return l(a,r);case"bar":case"arrow":case"crowfoot_many":case"crowfoot_one_or_many":default:{let[d,c,u,p,m,f]=a;if(e.strokeStyle==="dotted"){let E=Ul(e.strokeWidth-1);r.strokeLineDash=[E[0],E[1]-1]}else delete r.strokeLineDash;return r.roughness=Math.min(1,r.roughness||0),[i.line(u,p,d,c,r),i.line(m,f,d,c,r),...o==="crowfoot_one_or_many"?l(Ur(e,t,n,"crowfoot_one"),r):[]]}}},ia=e=>{let t=new je,n={seed:e.seed,disableMultiStroke:!0,disableMultiStrokeFill:!0,roughness:0,preserveVertices:!0},o=dt(e.points.reduce((i,r)=>[Math.min(e.x+r[0],i[0]),Math.min(e.y+r[1],i[1]),Math.max(e.x+r[0],i[2]),Math.max(e.y+r[1],i[3])],[1/0,1/0,-1/0,-1/0]));switch(e.type){case"line":case"arrow":{let i=e.points.length?e.points:[de(0,0)];return B(e)?t.path(Xl(i,16),n).sets[0].ops:e.roundness?t.curve(i,n).sets[0].ops.slice(0,e.points.length).map((r,s)=>{if(s===0){let a=Gt(de(e.x+r.data[0],e.y+r.data[1]),o,e.angle);return{op:"move",data:de(a[0]-e.x,a[1]-e.y)}}return{op:"bcurveTo",data:[Gt(de(e.x+r.data[0],e.y+r.data[1]),o,e.angle),Gt(de(e.x+r.data[2],e.y+r.data[3]),o,e.angle),Gt(de(e.x+r.data[4],e.y+r.data[5]),o,e.angle)].map(a=>de(a[0]-e.x,a[1]-e.y)).flat()}}):i.map((r,s)=>{let a=Gt(de(e.x+r[0],e.y+r[1]),o,e.angle);return{op:s===0?"move":"lineTo",data:de(a[0]-e.x,a[1]-e.y)}})}case"freedraw":{if(e.points.length<2)return[];let i=Wn(e.points,.75);return t.curve(i,n).sets[0].ops.slice(0,e.points.length).map((r,s)=>{if(s===0){let a=Gt(de(e.x+r.data[0],e.y+r.data[1]),o,e.angle);return{op:"move",data:de(a[0]-e.x,a[1]-e.y)}}return{op:"bcurveTo",data:[Gt(de(e.x+r.data[0],e.y+r.data[1]),o,e.angle),Gt(de(e.x+r.data[2],e.y+r.data[3]),o,e.angle),Gt(de(e.x+r.data[4],e.y+r.data[5]),o,e.angle)].map(a=>de(a[0]-e.x,a[1]-e.y)).flat()}})}}},uf=(e,t,{isExporting:n,canvasBackgroundColor:o,embedsValidationStatus:i})=>{switch(e.type){case"rectangle":case"iframe":case"embeddable":{let r;if(e.roundness){let s=e.width,a=e.height,l=yt(Math.min(s,a),e);r=t.path(`M ${l} 0 L ${s-l} 0 Q ${s} 0, ${s} ${l} L ${s} ${a-l} Q ${s} ${a}, ${s-l} ${a} L ${l} ${a} Q 0 ${a}, 0 ${a-l} L 0 ${l} Q 0 0, ${l} 0`,Fe(_l(e,n,i),!0))}else r=t.rectangle(0,0,e.width,e.height,Fe(_l(e,n,i),!1));return r}case"diamond":{let r,[s,a,l,d,c,u,p,m]=ko(e);if(e.roundness){let f=yt(Math.abs(s-p),e),E=yt(Math.abs(d-a),e);r=t.path(`M ${s+f} ${a+E} L ${l-f} ${d-E}
12
- C ${l} ${d}, ${l} ${d}, ${l-f} ${d+E}
13
- L ${c+f} ${u-E}
14
- C ${c} ${u}, ${c} ${u}, ${c-f} ${u-E}
15
- L ${p+f} ${m+E}
16
- C ${p} ${m}, ${p} ${m}, ${p+f} ${m-E}
17
- L ${s-f} ${a+E}
18
- C ${s} ${a}, ${s} ${a}, ${s+f} ${a+E}`,Fe(e,!0))}else r=t.polygon([[s,a],[l,d],[c,u],[p,m]],Fe(e));return r}case"ellipse":return t.ellipse(e.width/2,e.height/2,e.width,e.height,Fe(e));case"line":case"arrow":{let r,s=Fe(e),a=e.points.length?e.points:[de(0,0)];if(B(e)?a.every(l=>Math.abs(l[0])<=1e6&&Math.abs(l[1])<=1e6)?r=[t.path(Xl(a,16),Fe(e,!0))]:(console.error("Elbow arrow with extreme point positions detected. Arrow not rendered.",e.id,JSON.stringify(a)),r=[]):e.roundness?r=[t.curve(a,s)]:s.fill?r=[t.polygon(a,s)]:r=[t.linearPath(a,s)],e.type==="arrow"){let{startArrowhead:l=null,endArrowhead:d="arrow"}=e;if(l!==null){let c=Yl(e,r,"start",l,t,s,o);r.push(...c)}if(d!==null){let c=Yl(e,r,"end",d,t,s,o);r.push(...c)}}return r}case"freedraw":{let r;if(Nl(e),mn(e.points)){let s=Wn(e.points,.75);r=t.curve(s,{...Fe(e),stroke:"none"})}else r=null;return r}case"frame":case"magicframe":case"text":case"image":return null;default:return sf(e,`generateElementShape(): Unimplemented type ${e?.type}`),null}},Xl=(e,t)=>{let n=[];for(let i=1;i<e.length-1;i+=1){let r=e[i-1],s=e[i+1],a=e[i],l=tt(a,r),d=tt(s,a),c=Math.min(t,zl(e[i],s)/2,zl(e[i],r)/2);l?r[0]<a[0]?n.push([e[i][0]-c,e[i][1]]):n.push([e[i][0]+c,e[i][1]]):r[1]<a[1]?n.push([e[i][0],e[i][1]-c]):n.push([e[i][0],e[i][1]+c]),n.push(e[i]),d?s[0]<a[0]?n.push([e[i][0]-c,e[i][1]]):n.push([e[i][0]+c,e[i][1]]):s[1]<a[1]?n.push([e[i][0],e[i][1]-c]):n.push([e[i][0],e[i][1]+c])}let o=[`M ${e[0][0]} ${e[0][1]}`];for(let i=0;i<n.length;i+=3)o.push(`L ${n[i][0]} ${n[i][1]}`),o.push(`Q ${n[i+1][0]} ${n[i+1][1]}, ${n[i+2][0]} ${n[i+2][1]}`);return o.push(`L ${e[e.length-1][0]} ${e[e.length-1][1]}`),o.join(" ")},jl=(e,t)=>{switch(e.type){case"rectangle":case"diamond":case"frame":case"magicframe":case"embeddable":case"image":case"iframe":case"text":case"selection":return Hs(e);case"arrow":case"line":{let n=Pe.get(e)?.[0]??Pe.generateElementShape(e,null)[0],[,,,,o,i]=Y(e,t);return Wo(e)?Us(e,n,de(e.x,e.y),e.angle,de(o,i)):_s(n,de(e.x,e.y),e.angle,de(o,i))}case"ellipse":return zs(e);case"freedraw":{let[,,,,n,o]=Y(e,t);return Ys(e,de(n,o),Wo(e))}}},rl=(e,t)=>{let n=[...e.points];if(t){if(!ua(e.points))return null;let i=n[0],r=n[n.length-1];Math.hypot(i[0]-r[0],i[1]-r[1])>lf||n.length<4?n.push(de(i[0],i[1])):n[n.length-1]=de(i[0],i[1])}return{polygon:t,points:n}};var Wr=class e{static boundsCache=new WeakMap;static nonRotatedBoundsCache=new WeakMap;static getBounds(t,n,o=!1){let i=o&&t.angle!==0?e.nonRotatedBoundsCache.get(t):e.boundsCache.get(t);if(i?.version&&i.version===t.version&&!ce(t))return i.bounds;if(o&&t.angle!==0){let s=e.calculateBounds({...t,angle:0},n);return e.nonRotatedBoundsCache.set(t,{version:t.version,bounds:s}),s}let r=e.calculateBounds(t,n);return e.boundsCache.set(t,{version:t.version,bounds:r}),r}static calculateBounds(t,n){let o,[i,r,s,a,l,d]=Y(t,n);if(Me(t)){let[c,u,p,m]=Vr(t.points.map(([f,E])=>se(v(f,E),v(l-t.x,d-t.y),t.angle)));return[c+t.x,u+t.y,p+t.x,m+t.y]}else if(j(t))o=yf(t,l,d,n);else if(t.type==="diamond"){let[c,u]=se(v(l,r),v(l,d),t.angle),[p,m]=se(v(l,a),v(l,d),t.angle),[f,E]=se(v(i,d),v(l,d),t.angle),[h,g]=se(v(s,d),v(l,d),t.angle),x=Math.min(c,p,f,h),y=Math.min(u,m,E,g),b=Math.max(c,p,f,h),w=Math.max(u,m,E,g);o=[x,y,b,w]}else if(t.type==="ellipse"){let c=(s-i)/2,u=(a-r)/2,p=Math.cos(t.angle),m=Math.sin(t.angle),f=Math.hypot(c*p,u*m),E=Math.hypot(u*p,c*m);o=[l-f,d-E,l+f,d+E]}else{let[c,u]=se(v(i,r),v(l,d),t.angle),[p,m]=se(v(i,a),v(l,d),t.angle),[f,E]=se(v(s,a),v(l,d),t.angle),[h,g]=se(v(s,r),v(l,d),t.angle),x=Math.min(c,p,f,h),y=Math.min(u,m,E,g),b=Math.max(c,p,f,h),w=Math.max(u,m,E,g);o=[x,y,b,w]}return o}},Y=(e,t,n=!1)=>{if(Me(e))return Ef(e);if(j(e))return U.getElementAbsoluteCoords(e,t,n);if(oe(e)){let o=t?Ce(e,t):null;if(_(o)){let{x:i,y:r}=U.getBoundTextElementPosition(o,e,t);return[i,r,i+e.width,r+e.height,i+e.width/2,r+e.height/2]}}return[e.x,e.y,e.x+e.width,e.y+e.height,e.x+e.width/2,e.y+e.height/2]},Nr=(e,t)=>{let n=jl(e,t),[o,i,r,s,a,l]=Y(e,t),d=v(a,l);if(n.type==="polycurve"){let g=n.data.map(y=>Et(y,10)),x=[];if(bt(e)&&!e.polygon||_(e))for(let y of g){let b=0;for(;b<y.length-1;)x.push(Ee(v(y[b][0],y[b][1]),v(y[b+1][0],y[b+1][1]))),b++}else{let y=g.flat(),b=0;for(;b<y.length-1;)x.push(Ee(v(y[b][0],y[b][1]),v(y[b+1][0],y[b+1][1]))),b++}return x}else{if(n.type==="polyline")return n.data;if(ff(e)){let[h,g]=Mn(e),x=g.map(b=>$l(b,d,e.angle)).flat();return[...Vl(h,d,e.angle),...x]}else if(e.type==="diamond"){let[h,g]=Tn(e),x=g.map(b=>$l(b,d,e.angle)).flat();return[...Vl(h,d,e.angle),...x]}else if(n.type==="polygon"){if(oe(e)){let x=Ce(e,t);if(x&&j(x))return[Ee(v(o,i),v(r,i)),Ee(v(r,i),v(r,s)),Ee(v(r,s),v(o,s)),Ee(v(o,s),v(o,i))]}let h=n.data,g=[];for(let x=0;x<h.length-1;x++)g.push(Ee(h[x],h[x+1]));return g}else if(n.type==="ellipse")return hf(e)}let[c,u,p,m,,,f,E]=[[o,i],[r,i],[o,s],[r,s],[a,i],[a,s],[o,l],[r,l]].map(h=>se(h,d,e.angle));return[Ee(c,u),Ee(p,m),Ee(c,p),Ee(u,m),Ee(c,E),Ee(p,E),Ee(u,f),Ee(m,f)]},ff=e=>e!=null&&(e.type==="rectangle"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),Vl=(e,t,n)=>e.map(o=>Ee(se(o[0],t,n),se(o[1],t,n))),$l=(e,t,n)=>{let o=Et(e,10),i=0,r=[];for(;i<o.length-1;)r.push(Ee(se(v(o[i][0],o[i][1]),t,n),se(v(o[i+1][0],o[i+1][1]),t,n))),i++;return r},hf=e=>{let t=v(e.x+e.width/2,e.y+e.height/2),n=e.width/2,o=e.height/2,i=[],r=[],s=90,a=Math.PI*2/s;for(let l=0;l<s;l++){let d=l*a,c=t[0]+n*Math.cos(d),u=t[1]+o*Math.sin(d);r.push(se(v(c,u),t,e.angle))}for(let l=0;l<r.length-1;l++)i.push(Ee(r[l],r[l+1]));return i.push(Ee(r[r.length-1],r[0])),i},U0=e=>[e.x,e.y,e.x+e.width,e.y+e.height,e.x+e.width/2,e.y+e.height/2],ko=e=>{let t=Math.floor(e.width/2)+1,n=0,o=e.width,i=Math.floor(e.height/2)+1,r=t,s=e.height;return[t,n,o,i,r,s,0,i]},Zl=(e,t,n,o,i)=>{let r=1-e;return Math.pow(r,3)*t+3*Math.pow(r,2)*e*n+3*r*Math.pow(e,2)*o+Math.pow(e,3)*i},ql=(e,t,n,o)=>{let i=t-e,r=n-t,s=o-n,a=3*i-6*r+3*s,l=6*r-6*i,d=3*i,c=l*l-4*a*d;if(!(c>=0))return!1;let p=null,m=null,f=1/0,E=1/0;return a===0?f=E=-d/l:(f=(-l+Math.sqrt(c))/(2*a),E=(-l-Math.sqrt(c))/(2*a)),f>=0&&f<=1&&(p=Zl(f,e,t,n,o)),E>=0&&E<=1&&(m=Zl(E,e,t,n,o)),[p,m]},Vo=(e,t,n,o)=>{let i=ql(e[0],t[0],n[0],o[0]),r=ql(e[1],t[1],n[1],o[1]),s=Math.min(e[0],o[0]),a=Math.max(e[0],o[0]);if(i){let c=i.filter(u=>u!==null);s=Math.min(s,...c),a=Math.max(a,...c)}let l=Math.min(e[1],o[1]),d=Math.max(e[1],o[1]);if(r){let c=r.filter(u=>u!==null);l=Math.min(l,...c),d=Math.max(d,...c)}return[s,l,a,d]},ao=(e,t)=>{let n=v(0,0),{minX:o,minY:i,maxX:r,maxY:s}=e.reduce((a,{op:l,data:d})=>{if(l==="move"){let c=Ql(d);jr(c!=null,"Op data is not a point"),n=c}else if(l==="bcurveTo"){let c=v(d[0],d[1]),u=v(d[2],d[3]),p=v(d[4],d[5]),m=t?t(c):c,f=t?t(u):u,E=t?t(p):p,h=t?t(n):n;n=p;let[g,x,y,b]=Vo(h,m,f,E);a.minX=Math.min(a.minX,g),a.minY=Math.min(a.minY,x),a.maxX=Math.max(a.maxX,y),a.maxY=Math.max(a.maxY,b)}return a},{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0});return[o,i,r,s]},Vr=e=>{let t=1/0,n=1/0,o=-1/0,i=-1/0;for(let[r,s]of e)t=Math.min(t,r),n=Math.min(n,s),o=Math.max(o,r),i=Math.max(i,s);return[t,n,o,i]},Ef=e=>{let[t,n,o,i]=Vr(e.points),r=t+e.x,s=n+e.y,a=o+e.x,l=i+e.y;return[r,s,a,l,(r+a)/2,(s+l)/2]},gf=e=>{switch(e){case"arrow":return 25;case"diamond":case"diamond_outline":return 12;case"crowfoot_many":case"crowfoot_one":case"crowfoot_one_or_many":return 20;default:return 15}},xf=e=>{switch(e){case"bar":return 90;case"arrow":return 20;default:return 25}},Ur=(e,t,n,o)=>{if(t.length<1)return null;let i=gt(t[0]);if(i.length<1)return null;let r=n==="start"?1:i.length-1,s=i[r].data;jr(s.length===6,"Op data length is not 6");let a=v(s[4],s[5]),l=v(s[2],s[3]),d=v(s[0],s[1]),c=i[r-1],u=v(0,0);if(c.op==="move"){let H=Ql(c.data);jr(H!=null,"Op data is not a point"),u=H}else c.op==="bcurveTo"&&(u=v(c.data[4],c.data[5]));let p=(H,te)=>Math.pow(1-H,3)*a[te]+3*H*Math.pow(1-H,2)*l[te]+3*Math.pow(H,2)*(1-H)*d[te]+u[te]*Math.pow(H,3),[m,f]=n==="start"?u:a,[E,h]=[p(.3,0),p(.3,1)],g=Math.hypot(m-E,f-h),x=(m-E)/g,y=(f-h)/g,b=gf(o),w=0;{let[H,te]=n==="end"?e.points[e.points.length-1]:e.points[0],[S,Q]=e.points.length>1?n==="end"?e.points[e.points.length-2]:e.points[1]:[0,0];w=Math.hypot(H-S,te-Q)}let M=Math.min(b,w*(o==="diamond"||o==="diamond_outline"?.25:.5)),D=m-x*M,T=f-y*M;if(o==="dot"||o==="circle"||o==="circle_outline"){let H=Math.hypot(T-f,D-m)+e.strokeWidth-2;return[m,f,H]}let N=xf(o);if(o==="crowfoot_many"||o==="crowfoot_one_or_many"){let[H,te]=se(v(m,f),v(D,T),Xr(-N)),[S,Q]=se(v(m,f),v(D,T),Xr(N));return[D,T,H,te,S,Q]}let[C,R]=se(v(D,T),v(m,f),-N*Math.PI/180),[L,$]=se(v(D,T),v(m,f),Xr(N));if(o==="diamond"||o==="diamond_outline"){let H,te;if(n==="start"){let[S,Q]=e.points.length>1?e.points[1]:[0,0];[H,te]=se(v(m+M*2,f),v(m,f),Math.atan2(Q-f,S-m))}else{let[S,Q]=e.points.length>1?e.points[e.points.length-2]:[0,0];[H,te]=se(v(m-M*2,f),v(m,f),Math.atan2(f-Q,m-S))}return[m,f,C,R,H,te,L,$]}return[m,f,C,R,L,$]},wf=e=>{let t=pn.generator(),n=Fe(e),o=e.roundness?"curve":n.fill?"polygon":"linearPath";return t[o](e.points,n)},yf=(e,t,n,o)=>{let i=W(e,o);if(e.points.length<2){let[u,p]=e.points[0],[m,f]=se(v(e.x+u,e.y+p),v(t,n),e.angle),E=[m,f,m,f];if(i){let h=U.getMinMaxXYWithBoundText(e,o,[m,f,m,f],i);E=[h[0],h[1],h[2],h[3]]}return E}let s=Pe.get(e)?.[0]??wf(e),a=gt(s),d=ao(a,([u,p])=>se(v(e.x+u,e.y+p),v(t,n),e.angle)),c=[d[0],d[1],d[2],d[3]];if(i){let u=U.getMinMaxXYWithBoundText(e,o,c,i);c=[u[0],u[1],u[2],u[3]]}return c},pe=(e,t,n=!1)=>Wr.getBounds(e,t,n),Xe=(e,t)=>{if(!pf(e))return[0,0,0,0];let n=1/0,o=-1/0,i=1/0,r=-1/0,s=t||Kl(e);return e.forEach(a=>{let[l,d,c,u]=pe(a,s);n=Math.min(n,l),i=Math.min(i,d),o=Math.max(o,c),r=Math.max(r,u)}),[n,i,o,r]},X0=(e,t)=>{let[n,o,i,r]=Xe(e);return[n+t.x,o+t.y,i+t.x,r+t.y]},zt=(e,t,n,o)=>{if(!(j(e)||Me(e)))return[e.x,e.y,e.x+t,e.y+n];let i=Wl(0,t,Wl(1,n,e.points,o),o),r;if(Me(e))r=Vr(i);else{let c=pn.generator(),u=e.roundness?c.curve(i,Fe(e)):c.linearPath(i,Fe(e)),p=gt(u);r=ao(p)}let[s,a,l,d]=r;return[s+e.x,a+e.y,l+e.x,d+e.y]},Gr=(e,t)=>{let n=pn.generator(),o=e.roundness==null?n.linearPath(t,Fe(e)):n.curve(t,Fe(e)),i=gt(o),[r,s,a,l]=ao(i);return[r+e.x,s+e.y,a+e.x,l+e.y]},j0=(e,t)=>{if(!e.length)return[0,0,0,0];let n=1/0,o=e[0],i=Kl(e);return e.forEach(r=>{let[s,a,l,d]=pe(r,i),c=mf(v((s+l)/2,(a+d)/2),v(t.x,t.y));c<n&&(n=c,o=r)}),pe(o,i)},Bt=e=>{let[t,n,o,i]=Xe(e);return{minX:t,minY:n,maxX:o,maxY:i,width:o-t,height:i-n,midX:(t+o)/2,midY:(n+i)/2}},W0=({scrollX:e,scrollY:t,width:n,height:o,zoom:i})=>[-e,-t,-e+n/i.value,-t+o/i.value],dt=e=>v(e[0]+(e[2]-e[0])/2,e[1]+(e[3]-e[1])/2),$e=(e,t,n)=>{let o={minX:e.x,minY:e.y,maxX:e.x+e.width,maxY:e.y+e.height,midX:e.x+e.width/2,midY:e.y+e.height/2},i=he(e,t),[r,s]=se(v(o.minX,o.minY),i,e.angle),[a,l]=se(v(o.maxX,o.minY),i,e.angle),[d,c]=se(v(o.maxX,o.maxY),i,e.angle),[u,p]=se(v(o.minX,o.maxY),i,e.angle),m=[Math.min(r,a,d,u),Math.min(s,l,c,p),Math.max(r,a,d,u),Math.max(s,l,c,p)];if(n){let[f,E,h,g]=n;return[m[0]-g,m[1]-f,m[2]+E,m[3]+h]}return m},vn=(e,t)=>e[0]>t[0]&&e[0]<t[2]&&e[1]>t[1]&&e[1]<t[3],gn=(e,t)=>{if(e==null||t==null)return!1;let[n,o,i,r]=e,[s,a,l,d]=t;return n<l&&i>s&&o<d&&r>a},he=(e,t,n=0,o=0)=>{let[i,r]=dt(pe(e,t));return v(i+n,r+o)};var Sf=.1,ed=e=>j(e)||Me(e)?e.points.length<2||e.points.length===2&&_(e)&&If(e.points[0],e.points[e.points.length-1],Sf):e.width===0&&e.height===0,Il=(e,t,n,o,i)=>{let[r,s,a,l]=pe(e,i),d=yi({clientX:o.offsetLeft,clientY:o.offsetTop},o),c=yi({clientX:o.offsetLeft+t,clientY:o.offsetTop+n},o);return d.x<=a&&d.y<=l&&c.x>=r&&c.y>=s},e1=(e,t,n,o,i,r)=>{let[s,a,l,d]=Xe(e,i),c=yi({clientX:o.offsetLeft+(r?.left||0),clientY:o.offsetTop+(r?.top||0)},o),u=yi({clientX:o.offsetLeft+t-(r?.right||0),clientY:o.offsetTop+n-(r?.bottom||0)},o);return s>=c.x&&a>=c.y&&l<=u.x&&d<=u.y},$r=(e,t,n)=>{let o=Math.abs(t),i=Math.abs(n);if(e==="line"||e==="arrow"||e==="freedraw"){let r=Math.round(Math.atan(i/o)/kt)*kt;r===0?n=0:r===Math.PI/2?t=0:n=o*Math.tan(r)*Math.sign(n)||n}else e!=="selection"&&(n=o*Math.sign(n));return{width:t,height:n}},sl=(e,t,n,o,i)=>{let r=n-e,s=o-t,a=Math.atan2(s,r),l=Math.round(a/kt)*kt;if(i){let d=Math.floor(i/kt)*kt;bf(a,d,d+kt)&&(Pf(a,i)<kt/6?l=i:Jl(a)>Jl(i)?l=d+kt:l=d)}if(l===0)s=0;else if(l===Math.PI/2)r=0;else{let d=Math.tan(l),c=-1,u=t-d*e,p=-1/d,m=-1,f=o-p*n,E=(c*f-m*u)/(d*m-p*c),h=(u*p-f*d)/(d*m-p*c);r=E-e,s=h-t}return{width:r,height:s}},t1=e=>{let t={width:e.width,height:e.height,x:e.x,y:e.y};if(e.width<0){let n=Math.abs(e.width);t.width=n,t.x=e.x-n}if(e.height<0){let n=Math.abs(e.height);t.height=n,t.y=e.y-n}return t};P();var a1=(e,t,n,o)=>{let i=pi(e,n.getNonDeletedElementsMap(),o),r=Bt(e);return i.flatMap(s=>{let a=Mf(s,r,t);return s.map(l=>{let d=n.mutateElement(l,{x:l.x+a.x,y:l.y+a.y});return Ue(l,n,{simultaneouslyUpdated:s}),d})})},Mf=(e,t,{axis:n,position:o})=>{let i=Bt(e),[r,s]=n==="x"?["minX","maxX"]:["minY","maxY"],a={x:0,y:0};return o==="start"?{...a,[n]:t[r]-i[r]}:o==="end"?{...a,[n]:t[s]-i[s]}:{...a,[n]:(t[r]+t[s])/2-(i[r]+i[s])/2}};P();import{arrayToMap as yh,arrayToObject as Ot,assertNever as Cd,isDevEnv as on,isShallowEqual as Gd,isTestEnv as rn,randomInteger as Ld}from"@excalidraw/common";P();import{assertNever as Rf,COLOR_PALETTE as Ff,isDevEnv as Nf,isTestEnv as Hf,randomId as zf,Emitter as od,toIterable as On}from"@excalidraw/common";P();import{ORIG_ID as vf,randomId as nd,randomInteger as Lf,arrayToMap as Cf,castArray as Zr,findLastIndex as co,getUpdatedTimestamp as Gf,isTestEnv as Bf}from"@excalidraw/common";P();import{arrayToMapWithIndex as Tf}from"@excalidraw/common";var Af=e=>{let t=e.slice(),n=new Set,o=r=>{let s=r[0]?.groupIds?.join(""),a=[r[0]],l=[];for(let d of r.slice(1))d.groupIds?.join("")===s?a.push(d):l.push(d);return l.length?[...a,...o(l)]:a},i=new Map;return t.forEach((r,s)=>{if(!i.has(r.id))if(r.groupIds?.length){let a=r.groupIds[r.groupIds.length-1],l=t.slice(s).filter(d=>{let c=d?.groupIds?.some(u=>u===a);return c&&i.set(d.id,!0),c});for(let d of o(l))n.add(d)}else n.add(r)}),n.size!==e.length?(console.error("normalizeGroupElementOrder: lost some elements... bailing!"),e):[...n]},Df=e=>{let t=Tf(e),n=e.slice(),o=new Set;return n.forEach((i,r)=>{i&&(i.boundElements?.length?(o.add(i),n[r]=null,i.boundElements.forEach(s=>{let a=t.get(s.id);a&&s.type==="text"&&(o.add(a[0]),n[a[1]]=null)})):i.type==="text"&&i.containerId&&t.get(i.containerId)?.[0].boundElements?.find(a=>a.id===i.id)||(o.add(i),n[r]=null))}),o.size!==e.length?(console.error("normalizeBoundElementsOrder: lost some elements... bailing!"),e):[...o]},td=e=>Df(Af(e));var kf=(e,t,n,o)=>{let i=Kr(n);return Bf()&&Of(i,n.id),i.id=nd(),i.updated=Gf(),o&&(i.seed=Lf(),Na(i)),i.groupIds=bl(i.groupIds,e,r=>(t.has(r)||t.set(r,nd()),t.get(r))),i},b1=e=>{let{elements:t}=e,n="appState"in e?e.appState:{editingGroupId:null,selectedGroupIds:{}},o=new Map,i=new Map,r=[],s=[],a=new Map,l=new Map,d=new Map,c=Cf(t),u=e.type==="in-place"?e.idsOfElementsToDuplicate:new Map(t.map(h=>[h.id,h]));if(e.type==="in-place")for(let h of Object.keys(e.appState.selectedGroupIds))t.filter(g=>g.groupIds?.includes(h)).forEach(g=>u.set(g.id,g));t=td(t);let p=t.slice(),m=h=>{let x=Zr(h).reduce((y,b)=>{if(o.has(b.id))return y;o.set(b.id,!0);let w=kf(n.editingGroupId,i,b,e.randomizeSeed);return o.set(w.id,!0),d.set(w.id,w),a.set(b.id,w.id),l.set(w.id,b),s.push(b),r.push(w),y.push(w),y},[]);return Array.isArray(h)?x:x[0]||null},f=(h,g)=>{if(g){if(h>p.length-1){p.push(...Zr(g));return}p.splice(h+1,0,...Zr(g))}},E=new Set(t.filter(h=>u.has(h.id)&&q(h)).map(h=>h.id));for(let h of t){if(o.has(h.id)||!u.has(h.id))continue;let g=Or(n,h);if(g){let x=Ae(t,g).flatMap(b=>q(b)?[...Kt(t,b.id),b]:[b]),y=co(p,b=>b.groupIds?.includes(g));f(y,m(x));continue}if(!(h.frameId&&E.has(h.frameId))){if(q(h)){let x=h.id,y=Kt(t,x),b=co(p,w=>w.frameId===x||w.id===x);f(b,m([...y,h]));continue}if(st(h)){let x=W(h,c),y=co(p,b=>b.id===h.id||"containerId"in b&&b.containerId===h.id);x?f(y,m([h,x])):f(y,m(h));continue}if(ce(h)){let x=Ce(h,c),y=co(p,b=>b.id===h.id||b.id===x?.id);x?f(y,m([x,h])):f(y,m(h));continue}f(co(p,x=>x.id===h.id),m(h))}}if(Ka(r,a,d),Sl(p,s,a),e.overrides)for(let h of r){let g=l.get(h.id);g&&Object.assign(h,e.overrides({duplicateElement:h,origElement:g,origIdToDuplicateId:a}))}return{duplicatedElements:r,duplicateElementsMap:d,elementsWithDuplicates:p,origIdToDuplicateId:a}},qr=(e,t=0)=>{if(e==null||typeof e!="object")return e;let n=Object.prototype.toString.call(e);if(n==="[object Object]"){let o=typeof e.constructor=="function"?Object.create(Object.getPrototypeOf(e)):{};for(let i in e)if(e.hasOwnProperty(i)){if(t===0&&(i==="shape"||i==="canvas"))continue;o[i]=qr(e[i],t+1)}return o}if(Array.isArray(e)){let o=e.length,i=new Array(o);for(;o--;)i[o]=qr(e[o],t+1);return i}return A.DEV&&n!=="[object Object]"&&n!=="[object Array]"&&n.startsWith("[object ")&&console.warn(`_deepCloneElement: unexpected object type ${n}. This value will not be cloned!`),e},Kr=e=>qr(e),Of=(e,t)=>{Object.defineProperty(e,vf,{value:t,writable:!1,enumerable:!1})};var Ne={IMMEDIATELY:"IMMEDIATELY",NEVER:"NEVER",EVENTUALLY:"EVENTUALLY"},id=class{constructor(t){this.app=t}onDurableIncrementEmitter=new od;onStoreIncrementEmitter=new od;scheduledMacroActions=new Set;scheduledMicroActions=[];_snapshot=nn.empty();get snapshot(){return this._snapshot}set snapshot(t){this._snapshot=t}scheduleAction(t){this.scheduledMacroActions.add(t),this.satisfiesScheduledActionsInvariant()}scheduleCapture(){this.scheduleAction(Ne.IMMEDIATELY)}scheduleMicroAction(t){let{action:n}=t,o;if("change"in t)o=t.change;else{let r=nn.create(this.app.scene.getElementsMapIncludingDeleted(),this.app.state),s=r.maybeClone(n,t.elements?ad(t.elements):void 0,t.appState);o=uo.create(r,s)}let i="delta"in t?t.delta:void 0;this.scheduledMicroActions.push(()=>this.processAction({action:n,change:o,delta:i}))}commit(t,n){this.flushMicroActions();try{let o=this.getScheduledMacroAction();this.processAction({action:o,elements:t,appState:n})}finally{this.satisfiesScheduledActionsInvariant(),this.scheduledMacroActions=new Set}}clear(){this.snapshot=nn.empty(),this.scheduledMacroActions=new Set}emitDurableIncrement(t,n=void 0,o=void 0){let i=this.snapshot,r,s;if(n?r=n:r=uo.create(i,t),o?s=o:s=es.calculate(i,t),!s.isEmpty()){let a=new Qr(r,s);this.onDurableIncrementEmitter.trigger(a),this.onStoreIncrementEmitter.trigger(a)}}emitEphemeralIncrement(t,n=void 0){let o;if(n)o=n;else{let r=this.snapshot;o=uo.create(r,t)}let i=new Jr(o);this.onStoreIncrementEmitter.trigger(i)}applyChangeToSnapshot(t){let n=this.snapshot,o=this.snapshot.applyChange(t);return n===o?null:o}maybeCloneSnapshot(t,n,o){if(!n&&!o)return null;let i=this.snapshot,r=this.snapshot.maybeClone(t,n,o);return i===r?null:r}flushMicroActions(){for(let t of this.scheduledMicroActions)try{t()}catch(n){console.error("Failed to execute scheduled micro action",n)}this.scheduledMicroActions=[]}processAction(t){let{action:n}=t;if(n===Ne.EVENTUALLY&&!this.onStoreIncrementEmitter.subscribers.length)return;let o;if("change"in t?o=this.applyChangeToSnapshot(t.change):o=this.maybeCloneSnapshot(n,t.elements,t.appState),!o)return;let i="change"in t?t.change:void 0,r="delta"in t?t.delta:void 0;try{switch(n){case Ne.IMMEDIATELY:this.emitDurableIncrement(o,i,r);break;case Ne.NEVER:case Ne.EVENTUALLY:this.emitEphemeralIncrement(o,i);break;default:Rf(n,"Unknown store action")}}finally{switch(n){case Ne.IMMEDIATELY:case Ne.NEVER:this.snapshot=o;break}}}getScheduledMacroAction(){let t;return this.scheduledMacroActions.has(Ne.IMMEDIATELY)?t=Ne.IMMEDIATELY:this.scheduledMacroActions.has(Ne.NEVER)?t=Ne.NEVER:t=Ne.EVENTUALLY,t}satisfiesScheduledActionsInvariant(){if(!(this.scheduledMacroActions.size>=0&&this.scheduledMacroActions.size<=Object.keys(Ne).length)){let t=`There can be at most three store actions scheduled at the same time, but there are "${this.scheduledMacroActions.size}".`;if(console.error(t,this.scheduledMacroActions.values()),Hf()||Nf())throw new Error(t)}}},uo=class e{constructor(t,n){this.elements=t;this.appState=n}static create(t,n){let o=n.getChangedElements(t),i=n.getChangedAppState(t);return new e(o,i)}},bi=class{constructor(t,n){this.type=t;this.change=n}static isDurable(t){return t.type==="durable"}static isEphemeral(t){return t.type==="ephemeral"}},Qr=class extends bi{constructor(n,o){super("durable",n);this.change=n;this.delta=o}},Jr=class extends bi{constructor(n){super("ephemeral",n);this.change=n}},es=class e{constructor(t,n,o){this.id=t;this.elements=n;this.appState=o}static create(t,n,o={id:zf()}){return new this(o.id,t,n)}static calculate(t,n){let o=n.metadata.didElementsChange?tn.calculate(t.elements,n.elements):tn.empty(),i=n.metadata.didAppStateChange?en.calculate(t.appState,n.appState):en.empty();return this.create(o,i)}static restore(t){let{id:n,elements:o,appState:i}=t;return new this(n,tn.restore(o),en.restore(i))}static load({id:t,elements:{added:n,removed:o,updated:i},appState:{delta:r}}){let s=tn.create(n,o,i),a=en.create(r);return new this(t,s,a)}static squash(...t){let n=e.empty();for(let o of t)n.elements.squash(o.elements),n.appState.squash(o.appState);return n}static inverse(t){return this.create(t.elements.inverse(),t.appState.inverse())}static applyTo(t,n,o,i){let[r,s]=t.elements.applyTo(n,nn.empty().elements,i),[a,l]=t.appState.applyTo(o,r);return[r,a,s||l]}static applyLatestChanges(t,n,o,i){return this.create(t.elements.applyLatestChanges(n,o,i),t.appState,{id:t.id})}static empty(){return e.create(tn.empty(),en.empty())}isEmpty(){return this.elements.isEmpty()&&this.appState.isEmpty()}},nn=class e{constructor(t,n,o={didElementsChange:!1,didAppStateChange:!1,isEmpty:!1}){this.elements=t;this.appState=n;this.metadata=o}_lastChangedElementsHash=0;_lastChangedAppStateHash=0;static create(t,n,o={didElementsChange:!1,didAppStateChange:!1}){return new e(t,rd(n)?n:Rn(n),o)}static empty(){return new e(new Map,_f(),{didElementsChange:!1,didAppStateChange:!1,isEmpty:!0})}getChangedElements(t){let n={};for(let o of On(t.elements))this.elements.get(o.id)||(n[o.id]=ge(o,{isDeleted:!0}));for(let o of On(this.elements))t.elements.get(o.id)!==o&&(n[o.id]=o);return n}getChangedAppState(t){return F.getRightDifferences(t.appState,this.appState).reduce((n,o)=>Object.assign(n,{[o]:this.appState[o]}),{})}isEmpty(){return this.metadata.isEmpty}applyChange(t){let n=new Map(this.elements);for(let[i,r]of Object.entries(t.elements))n.set(i,r);let o=Rn({...this.appState,...t.appState});return e.create(n,o,{didElementsChange:Object.keys(t.elements).length>0,didAppStateChange:Object.keys(t.appState).length>0})}maybeClone(t,n,o){let i={shouldCompareHashes:!1};t===Ne.EVENTUALLY&&(i.shouldCompareHashes=!0);let r=this.maybeCreateElementsSnapshot(n,i),s=this.maybeCreateAppStateSnapshot(o,i),a=!1,l=!1;return this.elements!==r&&(a=!0),this.appState!==s&&(l=!0),!a&&!l?this:new e(r,s,{didElementsChange:a,didAppStateChange:l})}maybeCreateAppStateSnapshot(t,n={shouldCompareHashes:!1}){if(!t)return this.appState;let o=rd(t)?t:Rn(t);return this.detectChangedAppState(o,n)?o:this.appState}maybeCreateElementsSnapshot(t,n={shouldCompareHashes:!1}){if(!t)return this.elements;let o=this.detectChangedElements(t,n);return o?.size?this.createElementsSnapshot(o):this.elements}detectChangedAppState(t,n={shouldCompareHashes:!1}){if(this.appState===t)return;let o=F.isRightDifferent(this.appState,t);if(!o)return;let i=dd(JSON.stringify(t));if(!(n.shouldCompareHashes&&this._lastChangedAppStateHash===i))return this._lastChangedAppStateHash=i,o}detectChangedElements(t,n={shouldCompareHashes:!1}){if(this.elements===t)return;let o=new Map;for(let r of On(this.elements))t.get(r.id)||o.set(r.id,ge(r,{isDeleted:!0}));for(let r of On(t)){let s=this.elements.get(r.id);if(!s||s.version<r.version){if(we(r)&&!_t(r))continue;o.set(r.id,r)}}if(!o.size)return;let i=ld(o);if(!(n.shouldCompareHashes&&this._lastChangedElementsHash===i))return this._lastChangedElementsHash=i,o}createElementsSnapshot(t){let n=new Map;for(let o of On(this.elements))n.set(o.id,o);for(let o of On(t))n.set(o.id,Kr(o));return n}},sd="__observedAppState",_f=()=>({name:null,editingGroupId:null,viewBackgroundColor:Ff.white,selectedElementIds:{},selectedGroupIds:{},selectedLinearElement:null,croppingElementId:null,activeLockedId:null,lockedMultiSelections:{}}),Rn=e=>{let t={name:e.name,editingGroupId:e.editingGroupId,viewBackgroundColor:e.viewBackgroundColor,selectedElementIds:e.selectedElementIds,selectedGroupIds:e.selectedGroupIds,croppingElementId:e.croppingElementId,activeLockedId:e.activeLockedId,lockedMultiSelections:e.lockedMultiSelections,selectedLinearElement:e.selectedLinearElement?{elementId:e.selectedLinearElement.elementId,isEditing:!!e.selectedLinearElement.isEditing}:null};return Reflect.defineProperty(t,sd,{value:!0,enumerable:!1}),t},rd=e=>!!Reflect.get(e,sd);P();P();var pd="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Nn(e,t,n){let o=n[0];if(t!=null&&e>=t)throw new Error(e+" >= "+t);if(e.slice(-1)===o||t&&t.slice(-1)===o)throw new Error("trailing zero");if(t){let s=0;for(;(e[s]||o)===t[s];)s++;if(s>0)return t.slice(0,s)+Nn(e.slice(s),t.slice(s),n)}let i=e?n.indexOf(e[0]):0,r=t!=null?n.indexOf(t[0]):n.length;if(r-i>1){let s=Math.round(.5*(i+r));return n[s]}else return t&&t.length>1?t.slice(0,1):n[i]+Nn(e.slice(1),null,n)}function md(e){if(e.length!==fd(e[0]))throw new Error("invalid integer part of order key: "+e)}function fd(e){if(e>="a"&&e<="z")return e.charCodeAt(0)-97+2;if(e>="A"&&e<="Z")return 90-e.charCodeAt(0)+2;throw new Error("invalid order key head: "+e)}function po(e){let t=fd(e[0]);if(t>e.length)throw new Error("invalid order key: "+e);return e.slice(0,t)}function cd(e,t){if(e==="A"+t[0].repeat(26))throw new Error("invalid order key: "+e);let n=po(e);if(e.slice(n.length).slice(-1)===t[0])throw new Error("invalid order key: "+e)}function ud(e,t){md(e);let[n,...o]=e.split(""),i=!0;for(let r=o.length-1;i&&r>=0;r--){let s=t.indexOf(o[r])+1;s===t.length?o[r]=t[0]:(o[r]=t[s],i=!1)}if(i){if(n==="Z")return"a"+t[0];if(n==="z")return null;let r=String.fromCharCode(n.charCodeAt(0)+1);return r>"a"?o.push(t[0]):o.pop(),r+o.join("")}else return n+o.join("")}function Yf(e,t){md(e);let[n,...o]=e.split(""),i=!0;for(let r=o.length-1;i&&r>=0;r--){let s=t.indexOf(o[r])-1;s===-1?o[r]=t.slice(-1):(o[r]=t[s],i=!1)}if(i){if(n==="a")return"Z"+t.slice(-1);if(n==="A")return null;let r=String.fromCharCode(n.charCodeAt(0)-1);return r<"Z"?o.push(t.slice(-1)):o.pop(),r+o.join("")}else return n+o.join("")}function Fn(e,t,n=pd){if(e!=null&&cd(e,n),t!=null&&cd(t,n),e!=null&&t!=null&&e>=t)throw new Error(e+" >= "+t);if(e==null){if(t==null)return"a"+n[0];let l=po(t),d=t.slice(l.length);if(l==="A"+n[0].repeat(26))return l+Nn("",d,n);if(l<t)return l;let c=Yf(l,n);if(c==null)throw new Error("cannot decrement any more");return c}if(t==null){let l=po(e),d=e.slice(l.length),c=ud(l,n);return c??l+Nn(d,null,n)}let o=po(e),i=e.slice(o.length),r=po(t),s=t.slice(r.length);if(o===r)return o+Nn(i,s,n);let a=ud(o,n);if(a==null)throw new Error("cannot increment any more");return a<t?a:o+Nn(i,null,n)}function Pi(e,t,n,o=pd){if(n===0)return[];if(n===1)return[Fn(e,t,o)];if(t==null){let s=Fn(e,t,o),a=[s];for(let l=0;l<n-1;l++)s=Fn(s,t,o),a.push(s);return a}if(e==null){let s=Fn(e,t,o),a=[s];for(let l=0;l<n-1;l++)s=Fn(e,s,o),a.push(s);return a.reverse(),a}let i=Math.floor(n/2),r=Fn(e,t,o);return[...Pi(e,r,i,o),r,...Pi(r,t,n-i-1,o)]}import{arrayToMap as Ii}from"@excalidraw/common";var ts=class extends Error{code="ELEMENT_HAS_INVALID_INDEX"},Uf=(e,{shouldThrow:t=!1,includeBoundTextValidation:n=!1,ignoreLogs:o,reconciliationContext:i})=>{let r=[],s=l=>`${l?.index}:${l?.id}:${l?.type}:${l?.isDeleted}:${l?.version}:${l?.versionNonce}`,a=e.map(l=>l.index);for(let[l,d]of a.entries()){let c=a[l-1],u=a[l+1];if(ns(d,c,u)||r.push(`Fractional indices invariant has been compromised: "${s(e[l-1])}", "${s(e[l])}", "${s(e[l+1])}"`),n&&st(e[l])){let p=e[l],m=W(p,Ii(e));m&&m.index<=p.index&&r.push(`Fractional indices invariant for bound elements has been compromised: "${s(m)}", "${s(p)}"`)}}if(r.length){let l=new ts,d=[];if(i&&(d.push("Additional reconciliation context:"),d.push(i.localElements.map(c=>s(c))),d.push(i.remoteElements.map(c=>s(c)))),o||console.error(r.join(`
10
+ `)=>e.reduce((i,o)=>(V(o)&&i.push(o.text),i),[]).join(t),Sd=.5;var dh=[0,1.5,8],ch=.04,uh=16,Nn=e=>!e||lr(e)?th.strokeColor:e,Ws=e=>!e||lr(e)?nh:e,eS=(e,t,n)=>t==="backgroundColor"&&V(e)&&dr(e,n)?n.get(e.containerId)??e:e,tS=(e,t,n,i)=>{if(be(e))return t==="backgroundColor"?{backgroundColor:Ws(n)}:{strokeColor:Nn(n)};if(t==="strokeColor"&&V(e)&&dr(e,i)){let o=i.get(e.containerId);return{strokeColor:lr(n)?Nn(o?.strokeColor):n}}return t==="backgroundColor"?{backgroundColor:n}:{strokeColor:n}},nS=(e,t)=>{let n=Dd(e),i=new Map;for(let o of e){if(!be(o)||o.isDeleted)continue;let r=Q(o,n);if(!r||r.strokeColor===o.strokeColor)continue;let s=t.get(o.id)?.strokeColor!==o.strokeColor,a=t.get(r.id)?.strokeColor!==r.strokeColor;lr(r.strokeColor)||s&&!a?i.set(r.id,Nn(o.strokeColor)):i.set(o.id,Nn(r.strokeColor))}return i.size?e.map(o=>{let r=i.get(o.id);return r===void 0?o:Ae(o,{strokeColor:r})}):e},kn=(e,t)=>(e()*2-1)*t,Cn=(e,t,n)=>{let i=t.x-e.x,o=t.y-e.y,r=Math.hypot(i,o);if(!r)return e;let s=Math.min(n/r,1);return{x:e.x+i*s,y:e.y+o*s}},Us=e=>e.roundness?Math.min(Math.min(e.width,e.height)*ch,uh):0,mh=(e,{offsetX:t=0,offsetY:n=0,seedOffset:i=0}={})=>{let o=Math.max(0,Math.min(2,Math.round(e.roughness))),r=Math.min(dh[o],Math.min(e.width,e.height)*.012);if(!r)return[{x:t,y:n},{x:t+e.width,y:n},{x:t+e.width,y:n+e.height},{x:t,y:n+e.height}];let s=vd(e.seed+i);return[{x:t+kn(s,r),y:n+kn(s,r)},{x:t+e.width+kn(s,r),y:n+kn(s,r)},{x:t+e.width+kn(s,r),y:n+e.height+kn(s,r)},{x:t+kn(s,r),y:n+e.height+kn(s,r)}]},Ys=(e,{shadow:t=!1}={})=>{let n=mh(e,t?{offsetX:Md,offsetY:Md,seedOffset:1}:void 0),i=Us(e),o=e.roughness===2?Math.floor(vd(e.seed)()*n.length):-1;if(!i&&o===-1)return[{type:"move",point:n[0]},...n.slice(1).map(a=>({type:"line",point:a}))];let r=n.map((a,l)=>{let d=n[(l+n.length-1)%n.length],c=n[(l+1)%n.length],u=Math.min(i,Math.hypot(a.x-d.x,a.y-d.y)/2,Math.hypot(a.x-c.x,a.y-c.y)/2);if(l===o){let m=Math.min(e.width,e.height),p=Math.min(m*.18,40),h=Math.min(m*.02,5)*(t?.5:1),f={x:a.x+(l===1||l===2?-h:h),y:a.y+(l>=2?-h:h)},g=Cn(a,d,p),E=Cn(a,c,p);return[{type:"line",point:g},{type:"quadratic",control:Cn(a,d,p/2),point:Cn(f,g,u)},{type:"quadratic",control:f,point:Cn(f,E,u)},{type:"quadratic",control:Cn(a,c,p/2),point:E}]}return[{type:"line",point:Cn(a,d,u)},{type:"quadratic",control:a,point:Cn(a,c,u)}]}),s=[{type:"move",point:r[0][r[0].length-1].point}];for(let a=1;a<=r.length;a++)s.push(...r[a%r.length]);return s},Xs=e=>Number.isFinite(e)?Math.min(rh,Math.max(ih,e)):oh,dr=(e,t)=>!!e.containerId&&be(t.get(e.containerId)),iS=(e,t)=>dr(e,t)?e.baseFontSize??e.fontSize:e.fontSize,oS=(e,t,n)=>dr(e,n)?{baseFontSize:Xs(t)}:{fontSize:t},ph=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],fh=(e,{short:t=!1,now:n=Date.now()}={})=>{if(e===null||!Number.isFinite(e))return null;let i=new Date(e);if(Number.isNaN(i.getTime()))return null;let o=`${i.getDate()} ${ph[i.getMonth()]}`,r=i.getFullYear();return t||r===new Date(n).getFullYear()?o:`${o} ${r}`},Bd=(e,t=Date.now())=>{if(e.width<Ti||e.height<Ti)return null;let n=fh(e.created,{short:e.width-ar*2<Id.minBodyWidthForYear,now:t});return n?{text:n,x:e.width-ar,y:e.height-Id.baselineFromBottom}:null},Ld=({fontSize:e,fontFamily:t})=>{let n=Math.ceil(Xs(e)*ah(t));return{width:Math.max(Ti,n+ar*2),height:Math.max(Ti,n+Hs)}},hh=new Map,gh=e=>Math.max(e.width,Ti),Eh=(e,{baseFontSize:t,fontSizeMin:n,maxWidth:i,maxHeight:o,warmStart:r})=>{let s=Math.max(0,Math.ceil((t-n)/_s)),a=h=>h>=s?n:t-h*_s,l=new Map,d=h=>{let f=l.get(h);return f||(f=e(a(h)),l.set(h,f)),f},c=h=>{let f=d(h);return f.width<=i&&f.height<=o};if(s===0)return d(0);let u=lh(Math.round((t-r)/_s),0,s),m,p;if(c(u)){if(u===0||!c(u-1))return d(u);m=0,p=u-1}else{if(u===s)return d(s);m=u+1,p=s}for(;m<p;){let h=m+p>>1;c(h)?p=h:m=h+1}return d(m)},kd=(e,t,n={})=>{let i=gh(e),o=Math.max(n.baseHeight??(e.baseHeight||e.height),Ti),r=n.anchor??"top";if(!t)return{container:{...ao(e,o,r),width:i,height:o,baseHeight:o},text:null};let s=n.originalText??t.originalText,a=Xs(n.baseFontSize??t.baseFontSize??t.fontSize),l=Math.min(sh,a),d=Math.max(i-ar*2,1),c=Math.max(o-Hs,0),{fontFamily:u,lineHeight:m}=t,p=y=>{let w=Td({fontFamily:u,fontSize:y}),S=Lt(s,w,d);return{text:S,fontSize:y,...$e(S,w,m)}},h=!s.trim(),f=h?{text:"",fontSize:a,...$e("",Td({fontFamily:u,fontSize:a}),m)}:Eh(p,{baseFontSize:a,fontSizeMin:l,maxWidth:d,maxHeight:c,warmStart:t.fontSize}),g=h?o:Math.max(o,f.height+Hs),E={...ao(e,g,r),width:i,height:g,baseHeight:o},{x:b,y:x}=oi({...e,...E},{...t,text:f.text,fontSize:f.fontSize,width:f.width,height:f.height},hh);return{container:E,text:{text:f.text,fontSize:f.fontSize,baseFontSize:a,width:f.width,height:f.height,x:b,y:x,angle:e.angle}}},$s=(e,t,n,{proportional:i,fromCenter:o,flip:r=!1})=>{let s=t.get(e.id),a=be(s)?s:e,l=Q(a,t),d=l?l.baseFontSize??l.fontSize:void 0;if(r)return{baseHeight:a.baseHeight,baseFontSize:d};let c=i||n.includes("n")||n.includes("s"),u=i&&a.width?e.width/a.width:1,m=n.length===1;return{baseHeight:c?e.height:a.baseHeight,baseFontSize:d===void 0?void 0:d*u,anchor:o?"center":n.includes("n")?"bottom":i&&m&&(n==="e"||n==="w")?"center":"top"}},Mi=(e,t,{text:n,bindings:i,...o}={})=>{let r=t.getNonDeletedElementsMap(),s=n===void 0?Q(e,r):n,a=kd(e,s,o);return t.mutateElement(e,a.container),s&&a.text&&t.mutateElement(s,a.text),i!==!1&&!e.isDeleted&&Ge(e,t,i||void 0),a},Ad={container:["x","y","width","baseHeight","angle"],text:["originalText","baseFontSize","fontFamily","lineHeight","textAlign","verticalAlign"]},xh=(e,t,n)=>{let i=n.get(e.id),o=t?n.get(t.id):null;return!i||t&&!o||!t&&i.boundElements?.some(({type:r})=>r==="text")?!0:Ad.container.some(r=>i[r]!==e[r])||!!t&&Ad.text.some(r=>o[r]!==t[r])},rS=(e,t,n)=>{if(!t.size)return e;let i=Dd(e),o=new Set;for(let s of t){let a=i.get(s);if(!(!a||a.isDeleted)){if(be(a))o.add(a.id);else if(V(a)&&a.containerId){let l=i.get(a.containerId);l&&!l.isDeleted&&be(l)&&o.add(l.id)}}}if(!o.size)return e;let r=new Map;for(let s of o){let a=i.get(s),l=Q(a,i);if(n?.prevElementsMap&&!xh(a,l,n.prevElementsMap))continue;let d=kd(a,l),c=Ae(a,d.container);if(c!==a&&r.set(s,c),l&&d.text){let u=Ae(l,d.text);u!==l&&r.set(l.id,u)}}return r.size?e.map(s=>r.get(s.id)??s):e};var lo=new WeakMap,Zs=(e,t)=>{let n=lo.get(e);if(!n)return;let{version:i,shapes:o}=n;if(i!==e.version){lo.delete(e);return}return o.get(t)},qs=(e,t,n)=>{let i=lo.get(e);if(!i){lo.set(e,{version:e.version,shapes:new Map([[n,t]])});return}let{version:o,shapes:r}=i;if(o!==e.version){lo.set(e,{version:e.version,shapes:new Map([[n,t]])});return}r.set(n,t)};function to(e,t){let n=Zs(e,0);if(n)return n;let i=zd(e,t),o=[],r=[];for(let a=0;a<i.length;a+=1){let l=i[a],d=i[a-1]&&Sh(i[a-1].data.slice(-2));switch(l.op){case"move":continue;case"lineTo":if(!d)throw new Error("prevPoint is undefined");o.push(ke($(e.x+d[0],e.y+d[1]),$(e.x+l.data[0],e.y+l.data[1])));continue;case"bcurveTo":if(!d)throw new Error("prevPoint is undefined");r.push(dn($(e.x+d[0],e.y+d[1]),$(e.x+l.data[0],e.y+l.data[1]),$(e.x+l.data[2],e.y+l.data[3]),$(e.x+l.data[4],e.y+l.data[5])));continue;default:console.error("Unknown op type",l.op)}}let s=[o,r];return qs(e,s,0),s}function xS(e,t){if(X(e))return e.points.slice(1).map((o,r)=>ke($(e.x+e.points[r][0],e.y+e.points[r][1]),$(e.x+o[0],e.y+o[1])));let[n,i]=to(e,t);return i.length>0?i:n}function Tn(e,t=0){let n=Zs(e,t);if(n)return n;let i=e.type==="stickynote"?Us(e):cn(Math.min(e.width,e.height),e);i===0&&(i=.01);let o=Mh($(e.x,e.y),$(e.x+e.width,e.y+e.height)),r=ke($(o[0][0]+i,o[0][1]),$(o[1][0]-i,o[0][1])),s=ke($(o[1][0],o[0][1]+i),$(o[1][0],o[1][1]-i)),a=ke($(o[0][0]+i,o[1][1]),$(o[1][0]-i,o[1][1])),l=ke($(o[0][0],o[1][1]-i),$(o[0][0],o[0][1]+i)),d=[dn(l[1],$(l[1][0]+2/3*(o[0][0]-l[1][0]),l[1][1]+2/3*(o[0][1]-l[1][1])),$(r[0][0]+2/3*(o[0][0]-r[0][0]),r[0][1]+2/3*(o[0][1]-r[0][1])),r[0]),dn(r[1],$(r[1][0]+2/3*(o[1][0]-r[1][0]),r[1][1]+2/3*(o[0][1]-r[1][1])),$(s[0][0]+2/3*(o[1][0]-s[0][0]),s[0][1]+2/3*(o[0][1]-s[0][1])),s[0]),dn(s[1],$(s[1][0]+2/3*(o[1][0]-s[1][0]),s[1][1]+2/3*(o[1][1]-s[1][1])),$(a[1][0]+2/3*(o[1][0]-a[1][0]),a[1][1]+2/3*(o[1][1]-a[1][1])),a[1]),dn(a[0],$(a[0][0]+2/3*(o[0][0]-a[0][0]),a[0][1]+2/3*(o[1][1]-a[0][1])),$(l[0][0]+2/3*(o[0][0]-l[0][0]),l[0][1]+2/3*(o[1][1]-l[0][1])),l[0])],c=t>0?d.map(p=>Gd(Od(p,t))):[[d[0]],[d[1]],[d[2]],[d[3]]],m=[[ke(c[0][c[0].length-1][3],c[1][0][0]),ke(c[1][c[1].length-1][3],c[2][0][0]),ke(c[2][c[2].length-1][3],c[3][0][0]),ke(c[3][c[3].length-1][3],c[0][0][0])],c.flat()];return qs(e,m,t),m}function Rd(e,t=0){let[n,i,o,r,s,a,l,d]=Ai(e),c=e.roundness?cn(Math.abs(n-l),e):(n-l)*.01,u=e.roundness?cn(Math.abs(r-i),e):(r-i)*.01,[m,p,h,f]=[$(e.x+n,e.y+i),$(e.x+o,e.y+r),$(e.x+s,e.y+a),$(e.x+l,e.y+d)];return[dn($(p[0]-c,p[1]-u),p,p,$(p[0]-c,p[1]+u)),dn($(h[0]+c,h[1]-u),h,h,$(h[0]-c,h[1]-u)),dn($(f[0]+c,f[1]+u),f,f,$(f[0]+c,f[1]-u)),dn($(m[0]-c,m[1]+u),m,m,$(m[0]+c,m[1]+u))]}function An(e,t=0){let n=Zs(e,t);if(n)return n;let i=Rd(e,t),o=t>0?i.map(a=>Gd(Od(a,t))):[[i[0]],[i[1]],[i[2]],[i[3]]],s=[[ke(o[0][o[0].length-1][3],o[1][0][0]),ke(o[1][o[1].length-1][3],o[2][0][0]),ke(o[2][o[2].length-1][3],o[3][0][0]),ke(o[3][o[3].length-1][3],o[0][0][0])],o.flat()];return qs(e,s,t),s}var Nt=(e,t=1)=>{if(e.length>=3){let[n,i]=[e[0],e[e.length-1]];return ri(n,i)<=wh/t}return!1},cn=(e,t)=>{if(t.roundness?.type===Vs.PROPORTIONAL_RADIUS||t.roundness?.type===Vs.LEGACY)return e*js;if(t.roundness?.type===Vs.ADAPTIVE_RADIUS){let n=t.roundness?.value??bh,i=n/js;return e<=i?e*js:n}return 0},Ah=(e,t)=>{let n=e.type==="rectangle"?15:0,i=a=>{let l=Th(Fd(a[1],a[0])),d=Ks(l,n);return ke(Nd(a[0],d),Nd(a[1],Ks(d,-1)))},o=se(e,t),r=i(eo(e)?ke(gt($(e.x,e.y),o,e.angle),gt($(e.x+e.width,e.y+e.height),o,e.angle)):ke(gt($(e.x+e.width/2,e.y),o,e.angle),gt($(e.x+e.width/2,e.y+e.height),o,e.angle))),s=i(eo(e)?ke(gt($(e.x+e.width,e.y),o,e.angle),gt($(e.x,e.y+e.height),o,e.angle)):ke(gt($(e.x,e.y+e.height/2),o,e.angle),gt($(e.x+e.width,e.y+e.height/2),o,e.angle)));return[r,s]},Dh=(e,t,n,i)=>{let o=se(t,n);return(t.type==="diamond"?Rd(t).map(a=>{let l=Ph(a,.5),d=gt(l,o,t.angle);return $(d[0],d[1])}):[gt($(t.x+t.width,t.y+t.height/2),o,t.angle),gt($(t.x+t.width/2,t.y+t.height),o,t.angle),gt($(t.x,t.y+t.height/2),o,t.angle),gt($(t.x+t.width/2,t.y),o,t.angle)]).find(a=>ri(e,a)<=Bt(i)+t.strokeWidth/2&&!jt({point:e,element:t,threshold:0,elementsMap:n,overrideShouldTestInside:!0}))},Qs=(e,t,n,i,o,r,s=!0)=>{if(yh(e.points.length>=2,"Arrow must have at least two points"),e.width<3&&e.height<3)return null;if(s){let E=Dh(t,n,o,r);if(E)return E}let[a,l]=Ah(n,o),d=R.getPointAtIndexGlobalCoordinates(e,i==="start"?1:e.points.length-2,o);if(e.points.length===2){let E=i==="start"?e.endBinding:e.startBinding,b=E&&o.get(E.elementId),x=E&&b&&Ye(je(E.fixedPoint),b,o);x&&(d=x)}let c=Ih(Ks(Fd(t,d),2*ri(d,t)+Math.max(ri(a[0],a[1]),ri(l[0],l[1]))),d),u=ke(c,d),m=Cd(a,u),p=Cd(l,u),h=m&&ri(d,m),f=p&&ri(d,p),g=null;return h!=null&&f!=null?g=h<f?m:p:g=m||p||null,g&&dt(g,n,o)?g:null};I();var si=e=>e==="rectangle"||e==="stickynote"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="line"||e==="freedraw"||e==="autoshape"||e==="bucketfill",wS=e=>si(e)&&e!=="stickynote",PS=e=>e==="rectangle"||e==="stickynote"||e==="ellipse"||e==="diamond"||e==="freedraw"||e==="arrow"||e==="line"||e==="text"||e==="embeddable"||e==="autoshape",SS=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="freedraw"||e==="arrow"||e==="line"||e==="autoshape",vh=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="ellipse"||e==="diamond"||e==="arrow"||e==="line"||e==="autoshape",IS=e=>vh(e)||e==="stickynote",MS=e=>e==="freedraw",_d=e=>e==="rectangle"||e==="iframe"||e==="embeddable"||e==="line"||e==="diamond"||e==="stickynote"||e==="image",TS=e=>e==="arrow",AS=e=>e==="arrow";var cr=e=>{if(e.type==="arrow")return!1;let t=si(e.type)&&!$d(e.backgroundColor)||Wt(e)||Uo(e)||V(e);return e.type==="line"?t&&Nt(e.points):e.type==="freedraw"?t&&Nt(e.points):t||Fe(e)},Js=null,Hd=null,ea=1/0,ta=!1,Wd=!1,Ud=null,Oh=(e,t)=>e===t||!!e&&!!t&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,jt=({point:e,element:t,threshold:n,elementsMap:i,frameNameBound:o=null,overrideShouldTestInside:r=!1})=>{if(Js&&Kd(e,Js)&&(ta?ea<=n:ea>=n)&&r===Wd&&Oh(o,Ud)){let u=Hd?.deref();if(u&&u.id===t.id&&u.version===t.version&&u.versionNonce===t.versionNonce)return ta}let s=o?na(Ce(o.x-n,o.y-n),e,Ce(o.x+o.width+n,o.y+o.height+n)):!1,a=ue(t,i,!0);if(!Zd(e,a,t.angle,n)&&!s)return!1;let c=(r||cr(t))&&dt(e,t,i)||Yd(e,t,i,n)||s;return Js=e,Hd=new WeakRef(t),ea=n,Wd=r,Ud=o,ta=c,c},Zd=(e,t,n,i=0)=>{let o=n===0?e:Et(e,on(t),-n);return na(Ce(t[0]-i,t[1]-i),o,Ce(t[2]+i,t[3]+i))},Fh=(e,t,n,i=0)=>{let o=ue(t,n,!0);return Zd(e,o,t.angle,i)},WS=(e,t)=>!jt(e)&&!Rh(e.point,e.element,t)&&Fh(e.point,e.element,t),Rh=(e,t,n)=>{let i=Q(t,n);if(!i)return!1;let o=q(t)?{...i,...R.getBoundTextElementPosition(t,i,n)}:i;return dt(e,o,n)},qd=(e,[t,n],i,o=0)=>{let r=Ce(t,n),s=!te(e),a=Math.max(1,o),l=[t-a,n-a,t+a,n+a],d=ue(e,i);if(!xt(l,d))return!1;if(e.frameId){let m=i.get(e.frameId);if(m&&te(m)){let p=ue(m,i);if(!$t(r,p))return!1}}let c=ct(e,i,co(se(e,i),r)),u=Ut(e,i,r);return s?c.length===0||u<=o:c.length>0&&u<=a},ur=(e,t,n,i)=>{let o=[];for(let r=t.length-1;r>=0;--r){let s=t[r];if(Xd(!s.isDeleted,"Elements in the function parameter for getAllElementsAtPositionForBinding() should not contain deleted elements"),we(s,!1)&&qd(s,e,n,i)&&(o.push(s),si(s.type)&&!$d(s.backgroundColor)))break}return o},sn=(e,t,n,i)=>{let o=ur(e,t,n,i);return!o||o.length===0?null:o.length===1?o[0]:o.sort((r,s)=>s.width**2+s.height**2-(r.width**2+r.height**2)).pop()},Qd=(e,t,n,i,o)=>{let r=[];for(let a=n.length-1;a>=0;--a){let l=n[a];Xd(!l.isDeleted,"Elements in the function parameter for getAllElementsAtPositionForBinding() should not contain deleted elements"),we(l,!1)&&qd(l,e,i,o)&&r.push(l)}if(!r||r.length===0)return null;if(r.length===1)return r[0];let s=r.filter(a=>Ut(a,i,e)<=Le(a,t)||dt(e,a,i));return s.length===0?null:s[0]},ct=(e,t,n,i=0,o=!1)=>{let r=[Math.min(n[0][0]-i,n[1][0]-i),Math.min(n[0][1]-i,n[1][1]-i),Math.max(n[0][0]+i,n[1][0]+i),Math.max(n[0][1]+i,n[1][1]+i)],s=ue(e,t);if(!xt(r,s))return[];switch(e.type){case"rectangle":case"stickynote":case"image":case"text":case"iframe":case"embeddable":case"frame":case"selection":case"magicframe":return _h(e,t,n,i,o);case"diamond":return Hh(e,t,n,i,o);case"ellipse":return Wh(e,t,n,i);case"line":case"freedraw":case"arrow":return zh(e,n,t,o)}},Jd=(e,t,n,i,o,r=!1)=>{for(let s of e){let a=mr(s[0],s[1],s[2],s[3]),l=[Math.min(t[0][0],t[1][0]),Math.min(t[0][1],t[1][1]),Math.max(t[0][0],t[1][0]),Math.max(t[0][1],t[1][1])];if(!xt(a,l))continue;let d=jd(s,t);if(d.length>0){for(let c of d)n.push(Et(c,i,o));if(r)return n}}return n},ec=(e,t,n,i,o,r=!1)=>{for(let s of e){let a=Vd(s,t);if(a&&(n.push(Et(a,i,o)),r))return n}return n},zh=(e,t,n,i=!1)=>{let[o,r]=to(e,n),s=[];for(let a of o){let l=Vd(a,t);if(l&&(s.push(l),i))return s}for(let a of r){let l=mr(a[0],a[1],a[2],a[3]),d=[Math.min(t[0][0],t[1][0]),Math.min(t[0][1],t[1][1]),Math.max(t[0][0],t[1][0]),Math.max(t[0][1],t[1][1])];if(!xt(l,d))continue;let c=jd(a,t,{iterLimit:10});if(c.length>0&&(s.push(...c),i))return s}return s},_h=(e,t,n,i=0,o=!1)=>{let r=se(e,t),s=Et(n[0],r,-e.angle),a=Et(n[1],r,-e.angle),l=co(s,a),[d,c]=Tn(e,i),u=[];return ec(d,l,u,r,e.angle,o),o&&u.length>0||Jd(c,l,u,r,e.angle,o),u},Hh=(e,t,n,i=0,o=!1)=>{let r=se(e,t),s=Et(n[0],r,-e.angle),a=Et(n[1],r,-e.angle),l=co(s,a),[d,c]=An(e,i),u=[];return ec(d,l,u,r,e.angle,o),o&&u.length>0||Jd(c,l,u,r,e.angle,o),u},Wh=(e,t,n,i=0)=>{let o=se(e,t),r=Et(n[0],o,-e.angle),s=Et(n[1],o,-e.angle);return Gh(Nh(o,e.width/2+i,e.height/2+i),co(r,s)).map(a=>Et(a,o,e.angle))},Yd=(e,t,n,i=1)=>Ut(t,n,e)<=i,dt=(e,t,n)=>{if((q(t)||ye(t))&&!Nt(t.points))return!1;let[i,o,r,s]=ue(t,n);if(!na(Ce(i,o),e,Ce(r,s)))return!1;let a=Ce((i+r)/2,(o+s)/2),l=Bh(Ch(kh(Lh(e,a,.1)),Math.max(t.width,t.height)*2),a),d=co(e,l);return ct(t,n,d).filter((u,m,p)=>p.findIndex(h=>Kd(h,u))===m).length%2===1},ia=(e,t,n)=>{let i=(s,a)=>{let{x:l,y:d,width:c,height:u,angle:m}=s,p=se(s,n);if(s.type==="diamond"){let[f,g,E,b,x,y,w,S]=Ai(s);return[Ce(l+f,d+g-a),Ce(l+E+a,d+b),Ce(l+x,d+y+a),Ce(l+w-a,d+S)].map(A=>Et(A,p,m))}if(s.type==="ellipse"){let f=l+c/2,g=d+u/2,E=c/2,b=u/2;return[Ce(f,g-b-a),Ce(f+E+a,g),Ce(f,g+b+a),Ce(f-E-a,g)].map(y=>Et(y,p,m))}return[Ce(l-a,d-a),Ce(l+c+a,d-a),Ce(l+c+a,d+u+a),Ce(l-a,d+u+a)].map(f=>Et(f,p,m))},o=-1*Math.max(e.width,e.height)/20;return i(e,o).every(s=>dt(s,t,n))};var ac=5,ti=5,Vh=10,mo=10/1.5,gr=1,Le=(e,t)=>(t.elbowed?ti:ac)+e.strokeWidth/2,Bt=e=>{let t=Math.max(ac,15),n=e?.value&&e.value<1?e.value:1;return hr(t/(n*1.5),t,t*2)},Vt=e=>e.isBindingEnabled,Kh=(e,t,n,i,o,r,s)=>{let{start:a,end:l}=sa(e,t,n,i,o.getNonDeletedElementsMap(),o.getNonDeletedElements(),r,{...s,finalize:!0}),d=r.isMidpointSnappingEnabled&&!s?.angleLocked&&!r.gridModeEnabled;if(tc(e,a,"start",o,r.isBindingEnabled,d),tc(e,l,"end",o,r.isBindingEnabled,d),a.focusPoint||l.focusPoint){let c=new Map;a.focusPoint&&c.set(0,{point:Gt(e,"startBinding",e.startBinding,a.element,o.getNonDeletedElementsMap())||e.points[0]}),l.focusPoint&&c.set(e.points.length-1,{point:Gt(e,"endBinding",e.endBinding,l.element,o.getNonDeletedElementsMap())||e.points[e.points.length-1]}),R.movePoints(e,o,c)}return{start:a,end:l}},tc=(e,{mode:t,element:n,focusPoint:i},o,r,s=!0,a=!0)=>{t===null?Ke(e,o,r):t!==void 0&&Kt(e,n,t,o,r,i,s,a)},lc=(e,t,n,i,o)=>{un(t.size===1,"Bound elbow arrows cannot be moved");let r=t.entries().next().value;un(r,"There should be a position update for dragging an elbow arrow endpoint");let[s,{point:a}]=r,l=R.getPointGlobalCoordinates(e,a,n),d=sn(l,i,n,Bt(o)),c=d?{element:d,mode:"orbit",focusPoint:R.getPointAtIndexGlobalCoordinates(e,s,n)}:{mode:null},u={mode:void 0};return s===0?{start:c,end:u}:{start:u,end:c}},Zh=(e,t,n,i,o,r,s,a,l,d,c)=>{let u={mode:void 0},m={mode:void 0},p=e.points.length>2,h=R.getPointGlobalCoordinates(e,t.get(o?s:a).point,n),f=sn(h,i,n);if(o)return f?u={element:f,mode:"inside",focusPoint:h}:u={mode:null},{start:u,end:m};if(r){let g=l?.selectedLinearElement?.initialState.origin;if(f&&e.startBinding?.elementId===f.id){let E=J(f.x+f.width/2,f.y+f.height/2);return{start:p?{mode:void 0}:{mode:"inside",element:f,focusPoint:g??E},end:p?{mode:"orbit",element:f,focusPoint:h}:{mode:"inside",element:f,focusPoint:h}}}if(f&&e.startBinding){let E=e.startBinding;if(ur(h,i,n).find(x=>x.id===E.elementId)){let x=n.get(e.startBinding.elementId);return un(x,"Other element must be in the elements map"),{start:p?{mode:void 0}:{mode:x.id!==f.id?"orbit":"inside",element:x,focusPoint:g??J(e.x,e.y)},end:{mode:"orbit",element:f,focusPoint:h}}}}if(e.startBinding&&e.startBinding.elementId!==f?.id){let E=n.get(e.startBinding.elementId);un(E,"Other element must be in the elements map");let x={mode:!!l.selectedLinearElement?.initialState.arrowStartIsInside?"inside":"orbit",element:E,focusPoint:c?se(E,n):g??J(e.x,e.y)},y=f&&ia(E,f,n),w;if(f){let S=d==="inside"||d==="skip";w={mode:S&&!y?"inside":"orbit",element:f,focusPoint:h}}else w={mode:null};return{start:p?{mode:void 0}:x,end:w}}if(!e.startBinding)return f?m={mode:d==="inside"||d==="skip"?"inside":"orbit",element:f,focusPoint:h}:m={mode:null},{start:u,end:m}}un(!1,"New arrow creation should not reach here")},nc=(e,t,n,i,o,r,s,a)=>{let l={mode:void 0},d={mode:void 0},c=s.points.length>2,u=sn(e,o,i),m=n?ur(e,o,i).some(g=>g.id===n.elementId):!1,p=n?i.get(n.elementId):null,h=m&&p?Yh(p.backgroundColor):!1,f=u&&p&&ia(p,u,i);return r==="inside"||r==="skip"?(l=u?{element:!m||!p||h?u:p,focusPoint:e,mode:"inside"}:{mode:null},d=a&&u&&u.id===n?.elementId?{mode:null}:d,{current:l,other:d}):u?u.id===t?.elementId&&t.mode==="inside"?{current:{mode:"inside",focusPoint:e,element:u},other:d}:n?n.elementId===u.id?n.mode==="orbit"?(l={element:u,mode:"orbit",focusPoint:e},d={mode:a?null:void 0},{current:l,other:c?{mode:void 0}:d}):(l={element:u,mode:"inside",focusPoint:e},{current:l,other:c?{mode:void 0}:d}):(m&&p&&!h?l={element:p,mode:"inside",focusPoint:e}:l={element:u,mode:"orbit",focusPoint:e},{current:l,other:c?{mode:void 0}:d}):(l={element:u,mode:"orbit",focusPoint:e},{current:l,other:c?{mode:void 0}:d}):{current:{mode:null},other:d}},sa=(e,t,n,i,o,r,s,a)=>Uh("COMPLEX_BINDINGS")?qh(e,t,o,r,s,a):dc(e,t,n,i,o,r,s,a),dc=(e,t,n,i,o,r,s,a)=>{let d=e.points.length-1,c=t.has(0),u=t.has(d),m={mode:void 0},p={mode:void 0};if(e.points.length<2)return console.error("Attempting to bind a linear element with less than 2 points"),{start:{mode:void 0},end:{mode:void 0}};if(!c&&!u)return{start:m,end:p};if(c&&u)return{start:{mode:null},end:{mode:null}};if(!Vt(s))return m=c?{mode:null}:m,p=u?{mode:null}:p,{start:m,end:p};if(X(e))return lc(e,t,o,r,a?.zoom);let h=c?e.endBinding:e.startBinding,f=t.get(c?0:d)?.point;un(f,`Local point must be defined for ${c?"start":"end"} dragging`);let g=R.getPointGlobalCoordinates(e,f,o),E=sn(a?.angleLocked||s.gridModeEnabled?J(n,i):g,r,o,Bt(s.zoom)),b=E&&(a?.angleLocked?dt(J(n,i),E,o):dt(g,E,o)),x=h?o.get(h.elementId):void 0,y=h&&x&&Ye(h.fixedPoint,x,o),w=x&&y&&jt({point:y,element:x,elementsMap:o,threshold:0,overrideShouldTestInside:!0}),S=s.selectedLinearElement?.initialState.arrowOtherEndpointInitialBinding;if(h&&h.elementId===E?.id&&(!a?.newArrow||s.selectedLinearElement?.initialState.origin))return{start:{mode:"inside",element:E,focusPoint:c?g:a?.newArrow?$h(ra(s.selectedLinearElement.initialState.origin[0],s.selectedLinearElement.initialState.origin[1],a.gridSize)):x?Ye(h.fixedPoint,x,o):R.getPointAtIndexGlobalCoordinates(e,0,o)},end:{mode:"inside",element:E,focusPoint:u?g:x?Ye(h.fixedPoint,x,o):R.getPointAtIndexGlobalCoordinates(e,-1,o)}};if(a?.altKey)return{start:c?E?{mode:"inside",element:E,focusPoint:g}:{mode:null}:m,end:u?E?{mode:"inside",element:E,focusPoint:g}:{mode:null}:p};let M=E?b?{mode:"inside",element:E,focusPoint:g}:{mode:"orbit",element:E,focusPoint:Qs(e,a?.angleLocked?g:s.gridModeEnabled?ig(J(n,i),E,o,s.gridSize,e,R.getPointAtIndexGlobalCoordinates(e,c?1:-2,o)):g,E,c?"start":"end",o,s.zoom,s.isMidpointSnappingEnabled&&!a?.angleLocked&&!s.gridModeEnabled)||g}:{mode:null},A=R.getPointAtIndexGlobalCoordinates(e,c?-1:0,o),T=y&&x&&jt({point:g,element:x,elementsMap:o,threshold:Bt(s.zoom),overrideShouldTestInside:!0}),G=S?.mode==="inside",v=a?.newArrow?s.selectedLinearElement?.initialState.arrowStartIsInside:h?.mode==="inside"&&G,N={mode:void 0};return v||(h?.mode==="inside"&&!G&&x&&!a?.newArrow?N={mode:"orbit",element:x,focusPoint:y||A}:x&&!w&&!T&&s.selectedLinearElement?.initialState.altFocusPoint?N={mode:"orbit",element:x,focusPoint:s.selectedLinearElement.initialState.altFocusPoint}:a?.angleLocked&&x&&(N={mode:"orbit",element:x,focusPoint:Qs(e,A,x,c?"end":"start",o,s.zoom,s.isMidpointSnappingEnabled)||A})),{start:c?M:N,end:u?M:N}},qh=(e,t,n,i,o,r)=>{let s=o.bindMode||"orbit",a=0,l=e.points.length-1,d=t.has(a),c=t.has(l),u={mode:void 0},m={mode:void 0};if(e.points.length<2)return console.error("Attempting to bind a linear element with less than 2 points"),{start:{mode:void 0},end:{mode:void 0}};if(!d&&!c)return{start:u,end:m};if(d&&c)return{start:{mode:null},end:{mode:null}};if(!Vt(o))return u=d?{mode:null}:u,m=c?{mode:null}:m,{start:u,end:m};if(X(e))return lc(e,t,n,i);if(r?.newArrow){let{start:p,end:h}=Zh(e,t,n,i,d,c,a,l,o,s,r?.shiftKey);return{start:p,end:h}}if(d){let p=t.get(a)?.point;un(p,"Local point must be defined for start dragging");let h=R.getPointGlobalCoordinates(e,p,n),{current:f,other:g}=nc(h,e.startBinding,e.endBinding,n,i,s,e,r?.finalize);return{start:f,end:g}}if(c){let p=t.get(l)?.point;un(p,"Local point must be defined for end dragging");let h=R.getPointGlobalCoordinates(e,p,n),{current:f,other:g}=nc(h,e.endBinding,e.startBinding,n,i,s,e,r?.finalize);return{start:g,end:f}}return{start:u,end:m}},rI=(e,t,n)=>{e.forEach(i=>{Kh(i,new Map,1/0,1/0,t,n)})},cc=(e,t,n,i,o)=>{o.mutateElement(e,{[i==="start"?"startBinding":"endBinding"]:n}),sc(t.boundElements||[]).has(e.id)||o.mutateElement(t,{boundElements:(t.boundElements||[]).concat({id:e.id,type:"arrow"})})},Kt=(e,t,n,i,o,r,s=!0,a=!0)=>{let l=o.getNonDeletedElementsMap(),d;X(e)?d={elementId:t.id,mode:"orbit",...og(e,t,i,l,s,a)}:d={elementId:t.id,mode:n,...Bi(e,t,i,l,r)},cc(e,t,d,i,o)},Ke=(e,t,n)=>{let i=t==="start"?"startBinding":"endBinding",o=e[i];if(o==null)return null;let r=e[t==="start"?"endBinding":"startBinding"];if(!r||r.elementId!==o.elementId){let s=n.getNonDeletedElementsMap().get(o.elementId);n.mutateElement(s,{boundElements:s.boundElements?.filter(a=>a.id!==e.id)})}return n.mutateElement(e,{[i]:null}),o.elementId},Ge=(e,t,n)=>{if(!we(e))return;let{simultaneouslyUpdated:i}=n??{},o=Jh(i),r=t.getNonDeletedElementsMap();n?.changedElements&&(r=new Map(r),n.changedElements.forEach(a=>{r.set(a.id,a)})),Er(r,e,a=>{if(a&&!Qe(a)&&console.error("[NONDELETED][INVARIANT] updateBoundElements(): `isDeleted: true` in visitor"),!U(a)||!Qe(a)||!Qh(a,e))return;let l=a.startBinding?r.get(a.startBinding.elementId):null,d=a.endBinding?l?.id===a.endBinding.elementId?l:r.get(a.endBinding.elementId):null;if(o.has(a.id))return;let c=xr(r,a,(m,p)=>{if(m&&we(m)&&(p==="startBinding"||p==="endBinding")&&(e.id===a[p]?.elementId||e.id===a[p==="startBinding"?"endBinding":"startBinding"]?.elementId)){let h=Gt(a,p,a[p],m,r);if(h)return[p==="startBinding"?0:a.points.length-1,{point:h}]}return null}).filter(m=>m!==null);R.movePoints(a,t,new Map(c),{moveMidPointsWithElement:!!l&&l?.id===d?.id});let u=Q(a,r);u&&!u.isDeleted&&ii(a,t,!1)})},ic=(e,t,n,i,o)=>{un(!X(e),"Elbow arrows not supported for indirect updates");let r=e[t],s=r&&n.get(r.elementId),a=R.getPointAtIndexGlobalCoordinates(e,t==="startBinding"?0:-1,n),l=s&&jt({element:s,point:a,elementsMap:n,threshold:Bt(o.zoom)}),d=t==="startBinding"?"start":"end";if(Ke(e,d,i),l){let c=t==="startBinding"?0:e.points.length-1,u=e.points[c],m=dc(e,new Map([[c,{point:u}]]),a[0],a[1],n,i.getNonDeletedElements(),o);m[d]&&m[d].element?.id===s.id&&m[d].mode&&Kt(e,s,m[d].mode,d,i,m[d].focusPoint)}},sI=(e,t,n,i)=>{if(U(e)){let o=t.getNonDeletedElementsMap();e.startBinding&&ic(e,"startBinding",o,t,n),e.endBinding&&ic(e,"endBinding",o,t,n)}else Ge(e,t,{...i,changedElements:new Map([[e.id,e]])})},Qh=(e,t)=>e.startBinding?.elementId===t.id||e.endBinding?.elementId===t.id,Jh=e=>new Set((e||[]).map(t=>t.id)),pd=(e,t,n,i,o,r,s)=>{let a=Yt(vi(t,e));return!n||!i?a:eg(o,n,r,s)?wi(n,i,e):Yt(vi(e,se(n,r)))},eg=(e,t,n,i)=>{let o=Ut(t,n,e),r=Bt(i);return o>r?null:o},Ds=(e,t,n,i,o,r=!0)=>{let s=X(e),a=R.getPointAtIndexGlobalCoordinates(e,n==="start"?0:-1,i);if(e.points.length<2)return a;let l=Jl(t)&&s?tg(e,t,i,a):a,d=o&&!s?o[1]:R.getPointAtIndexGlobalCoordinates(e,n==="start"?1:-2,i),c=Le(t,e),u=lt(t,i),m=on(u),p=null;if(s){let h=at(wi(t,u,a)),g=(r?aa(t,i,l,.05,e):void 0)||a,E=J(h?m[0]:g[0],h?g[1]:m[1]),b=o??Di(E,pr(fr(oa(vi(g,E)),Math.max(t.width,t.height)*2),E));if(p=ct(t,i,b,c).sort(bt)[0],!p){let x=J(h?g[0]:m[0],h?m[1]:g[1]),y=Di(x,pr(fr(oa(vi(g,x)),Math.max(t.width,t.height)*2),x));p=ct(t,i,y,ti).sort(bt)[0]}}else{let h=o;if(!h){let f=fr(oa(vi(l,d)),Gn(l,d)+Math.max(t.width,t.height)+c*2);h=o??Di(pr(f,d),pr(fr(f,-1),d))}p=Gn(l,d)<1?l:ct(t,i,h,c).sort((f,g)=>bt(f,d)-bt(g,d))[0]}return!p||bt(l,p)<Xh?l:p},tg=(e,t,n,i)=>{let o=se(t,n),r=ge(i,o,-t.angle),s=Le(t,e);return r[0]<t.x&&r[1]<t.y?r[1]-t.y>-s?ge(J(t.x-s,t.y),o,t.angle):ge(J(t.x,t.y-s),o,t.angle):r[0]<t.x&&r[1]>t.y+t.height?r[0]-t.x>-s?ge(J(t.x,t.y+t.height+s),o,t.angle):ge(J(t.x-s,t.y+t.height),o,t.angle):r[0]>t.x+t.width&&r[1]>t.y+t.height?r[0]-t.x<t.width+s?ge(J(t.x+t.width,t.y+t.height+s),o,t.angle):ge(J(t.x+t.width+s,t.y+t.height),o,t.angle):r[0]>t.x+t.width&&r[1]<t.y?r[0]-t.x<t.width+s?ge(J(t.x+t.width,t.y-s),o,t.angle):ge(J(t.x+t.width+s,t.y),o,t.angle):i},aa=(e,t,n,i=.05,o)=>{let{x:r,y:s,width:a,height:l,angle:d}=e,c=se(e,t,-.1,-.1),u=ge(n,c,-d),m=o?Le(e,o):0,p=hr(i*l,5,80),h=hr(i*a,5,80);if(!(Gn(c,u)<m)){if(u[0]<=r+a/2&&u[1]>c[1]-p&&u[1]<c[1]+p)return ge(J(r-m,c[1]),c,d);if(u[1]<=s+l/2&&u[0]>c[0]-h&&u[0]<c[0]+h)return ge(J(c[0],s-m),c,d);if(u[0]>=r+a/2&&u[1]>c[1]-p&&u[1]<c[1]+p)return ge(J(r+a+m,c[1]),c,d);if(u[1]>=s+l/2&&u[0]>c[0]-h&&u[0]<c[0]+h)return ge(J(c[0],s+l+m),c,d);if(e.type==="diamond"){let f=m,g=J(r+a/4-f,s+l/4-f),E=J(r+3*a/4+f,s+l/4-f),b=J(r+a/4-f,s+3*l/4+f),x=J(r+3*a/4+f,s+3*l/4+f);if(Gn(g,u)<Math.max(h,p))return ge(g,c,d);if(Gn(E,u)<Math.max(h,p))return ge(E,c,d);if(Gn(b,u)<Math.max(h,p))return ge(b,c,d);if(Gn(x,u)<Math.max(h,p))return ge(x,c,d)}}},ng=(e,t,n)=>{let i=e[t];if(!i)return{element:null,fixedPoint:null,focusPoint:null,binding:i,mode:null};let o=n.get(i.elementId);return{element:o,fixedPoint:i.fixedPoint,focusPoint:Ye(je(i.fixedPoint),o,n),binding:i,mode:i.mode}},ig=(e,t,n,i,o,r)=>{if(!i)return e;let s=lt(t,n),a=r&&(t.type==="ellipse"||t.type==="diamond")?Yt(vi(r,e)):wi(t,s,e),l=Le(t,o),d=Math.max(t.width,t.height)+l*2,c=on(s),u=Math.abs(a[0]),m=Math.abs(a[1]);if(u>=m){let[,g]=ra(e[0],e[1],i),E=Di(J(c[0]-d,g),J(c[0]+d,g));return ct(t,n,E,l).sort((x,y)=>bt(x,e)-bt(y,e))[0]??J(e[0],g)}let[p]=ra(e[0],e[1],i),h=Di(J(p,c[1]-d),J(p,c[1]+d));return ct(t,n,h,l).sort((g,E)=>bt(g,e)-bt(E,e))[0]??J(p,e[1])},oc=e=>e.width*e.height,Gt=(e,t,n,i,o,r)=>{if(n==null||n.elementId!==i.id&&e.points.length>2||jh(e.points[e.points.length-1],J(0,0)))return null;let s=Ye(je(n.fixedPoint),i,o);if(n.mode==="inside")return R.createPointAt(e,o,s[0],s[1],null);let{element:a,focusPoint:l}=ng(e,t==="startBinding"?"endBinding":"startBinding",o),d=R.getPointAtIndexGlobalCoordinates(e,t==="startBinding"?1:-2,o),c=e.points.length===2&&l||d,u=c&&Di(s,c),m=a&&u&&ct(a,o,u,Le(a,e)).sort((x,y)=>bt(x,s)-bt(y,s))[0],p=u&&ct(i,o,u,Le(i,e)).sort((x,y)=>bt(x,c)-bt(y,c))[0],h=e.startArrowhead!==null,f=e.endArrowhead!==null,g=!h&&!f||t==="startBinding"&&h||t==="endBinding"&&f?s:p||s;if(a&&p&&!r&&oc(a)<oc(i)*2&&jt({element:a,point:p,elementsMap:o,threshold:Le(a,e),overrideShouldTestInside:!0}))return R.createPointAt(e,o,g[0],g[1],null);let b=Gn(a&&(m||l)||d,p||s)<=Vh;return a?b?R.createPointAt(e,o,g?.[0]||s[0],g?.[1]||s[1],null):R.createPointAt(e,o,p?.[0]||s[0],p?.[1]||s[1],null):R.createPointAt(e,o,b?s[0]:p?.[0]??s[0],b?s[1]:p?.[1]??s[1],null)},og=(e,t,n,i,o=!0,r=!0)=>{let s=[t.x,t.y,t.x+t.width,t.y+t.height],a=o?Ds(e,t,n,i,void 0,r):R.getPointAtIndexGlobalCoordinates(e,n==="start"?0:-1,i),l=J(s[0]+(s[2]-s[0])/2,s[1]+(s[3]-s[1])/2),d=ge(a,l,-t.angle);if(t.width<gr||t.height<gr)return{fixedPoint:je([.5,.5])};let c=Le(t,e);return{fixedPoint:je([(d[0]-t.x)/Math.max(t.width,c),(d[1]-t.y)/Math.max(t.height,c)])}},Bi=(e,t,n,i,o)=>{let r=o||R.getPointAtIndexGlobalCoordinates(e,n==="start"?0:-1,i),s=se(t,i),a=ge(r,s,-t.angle);if(t.width<gr||t.height<gr)return{fixedPoint:je([.5,.5])};let l=Le(t,e),d=(a[0]-t.x)/Math.max(t.width,l),c=(a[1]-t.y)/Math.max(t.height,l);return{fixedPoint:je([d,c])}},uc=(e,t,n)=>{for(let i of e){if("boundElements"in i&&i.boundElements&&Object.assign(i,{boundElements:i.boundElements.reduce((o,r)=>{let s=t.get(r.id);return s&&o.push({...r,id:s}),o},[])}),"containerId"in i&&i.containerId&&Object.assign(i,{containerId:t.get(i.containerId)??null}),"endBinding"in i&&i.endBinding){let o=t.get(i.endBinding.elementId);Object.assign(i,{endBinding:o?{...i.endBinding,elementId:o}:null})}if("startBinding"in i&&i.startBinding){let o=t.get(i.startBinding.elementId);Object.assign(i,{startBinding:o?{...i.startBinding,elementId:o}:null})}X(i)&&Object.assign(i,Si(i,n,{points:[i.points[0],i.points[i.points.length-1]]}))}},aI=(e,t)=>{let n=sc(e);for(let i of t)On.unbindAffected(n,i,(o,r)=>Xe(o,n,r)),Fn.unbindAffected(n,i,(o,r)=>Xe(o,n,r))},uo=(e,t,n=[])=>{if(!e)return null;let i=e.filter(o=>!t.has(o.id));return i.push(...n.map(o=>({id:o.id,type:o.type}))),i},mc=new Set(["boundElements","frameId","containerId","startBinding","endBinding"]),Er=(e,t,n)=>{we(t)&&(t.boundElements?.slice()??[]).forEach(({id:o})=>{n(e.get(o),"boundElements",o)})},xr=(e,t,n)=>{let i=[];if(t.frameId){let o=t.frameId;i.push(n(e.get(o),"frameId",o))}if(Ie(t)){let o=t.containerId;i.push(n(e.get(o),"containerId",o))}if(U(t)){if(t.startBinding){let o=t.startBinding.elementId;i.push(n(e.get(o),"startBinding",o))}if(t.endBinding){let o=t.endBinding.elementId;i.push(n(e.get(o),"endBinding",o))}}return i},On=class{static unbindAffected(t,n,i){n&&xr(t,n,o=>{!o||o.isDeleted||Er(t,o,(r,s,a)=>{a===n.id&&i(o,{boundElements:uo(o.boundElements,new Set([a]))})})})}static rebindAffected=(t,n,i)=>{!n||n.isDeleted||xr(t,n,(o,r)=>{if(!o||o.isDeleted){i(n,{[r]:null});return}r!=="frameId"&&(o.boundElements?.find(s=>s.id===n.id)||(U(n)&&i(o,{boundElements:uo(o.boundElements,new Set,new Array(n))}),V(n)&&(o.boundElements?.find(s=>s.type==="text")?i(n,{[r]:null}):i(o,{boundElements:uo(o.boundElements,new Set,new Array(n))}))))})}},Fn=class{static unbindAffected(t,n,i){n&&Er(t,n,o=>{!o||o.isDeleted||xr(t,o,(r,s,a)=>{a===n.id&&i(o,{[s]:null})})})}static rebindAffected=(t,n,i)=>{!n||n.isDeleted||Er(t,n,(o,r,s)=>{if(!o||o.isDeleted){i(n,{boundElements:uo(n.boundElements,new Set([s]))});return}V(o)&&((n.boundElements?.slice()??[]).reverse().find(l=>l.type==="text")?.id===o.id?o.containerId!==n.id&&i(o,{containerId:n.id}):(o.containerId!==null&&i(o,{containerId:null}),i(n,{boundElements:uo(n.boundElements,new Set([o.id]))})))})}},Ye=(e,t,n)=>{let[i,o]=je(e);return ge(J(t.x+t.width*i,t.y+t.height*o),se(t,n),t.angle)},rg=(e,t)=>{let n=e.startBinding&&t.get(e.startBinding.elementId),i=e.endBinding&&t.get(e.endBinding.elementId),o=n&&e.startBinding?Ye(e.startBinding.fixedPoint,n,t):J(e.x+e.points[0][0],e.y+e.points[0][1]),r=i&&e.endBinding?Ye(e.endBinding.fixedPoint,i,t):J(e.x+e.points[e.points.length-1][0],e.y+e.points[e.points.length-1][1]);return[o,r]},pc=(e,t)=>{let[n,i]=rg(e,t);return[R.pointFromAbsoluteCoords(e,n,t),R.pointFromAbsoluteCoords(e,i,t)]},sg=e=>Array.isArray(e)&&e.length===2&&e.every(t=>Number.isFinite(t)),rc=10,je=e=>{if(!sg(e))return[.5001,.5001];let t=1e-4,n=e.map(i=>hr(i,-rc,rc));return Math.abs(n[0]-.5)<t||Math.abs(n[1]-.5)<t?n.map(i=>Math.abs(i-.5)<t?.5001:i):n},ag=e=>e.type==="ellipse"||e.type==="diamond"?e.type:"rectangle",lg={rectangle:[{centerAngle:0,sectorWidth:75,side:"right"},{centerAngle:45,sectorWidth:15,side:"bottom-right"},{centerAngle:90,sectorWidth:75,side:"bottom"},{centerAngle:135,sectorWidth:15,side:"bottom-left"},{centerAngle:180,sectorWidth:75,side:"left"},{centerAngle:225,sectorWidth:15,side:"top-left"},{centerAngle:270,sectorWidth:75,side:"top"},{centerAngle:315,sectorWidth:15,side:"top-right"}],diamond:[{centerAngle:0,sectorWidth:15,side:"right"},{centerAngle:45,sectorWidth:75,side:"bottom-right"},{centerAngle:90,sectorWidth:15,side:"bottom"},{centerAngle:135,sectorWidth:75,side:"bottom-left"},{centerAngle:180,sectorWidth:15,side:"left"},{centerAngle:225,sectorWidth:75,side:"top-left"},{centerAngle:270,sectorWidth:15,side:"top"},{centerAngle:315,sectorWidth:75,side:"top-right"}],ellipse:[{centerAngle:0,sectorWidth:15,side:"right"},{centerAngle:45,sectorWidth:75,side:"bottom-right"},{centerAngle:90,sectorWidth:15,side:"bottom"},{centerAngle:135,sectorWidth:75,side:"bottom-left"},{centerAngle:180,sectorWidth:15,side:"left"},{centerAngle:225,sectorWidth:75,side:"top-left"},{centerAngle:270,sectorWidth:15,side:"top"},{centerAngle:315,sectorWidth:75,side:"top-right"}]},dg=e=>e.map((t,n)=>{let i=t.sectorWidth/2,o=t.centerAngle-i,r=t.centerAngle+i;return o=(o%360+360)%360,r=(r%360+360)%360,{start:o,end:r,side:t.side}}),cg=(e,t)=>{let[n,i]=e,o=n-.5,r=i-.5,s=Math.atan2(r,o);s<0&&(s+=2*Math.PI);let a=s*180/Math.PI,l=lg[t],d=dg(l);for(let m of d)if(m.start<=m.end){if(a>=m.start&&a<=m.end)return m.side}else if(a>=m.start||a<=m.end)return m.side;let c=1/0,u=l[0].side;for(let m of l){let p=Math.abs(a-m.centerAngle);p>180&&(p=360-p),p<c&&(c=p,u=m.side)}return u},lI=(e,t)=>{let n=t.get(e.elementId);if(!n||n.isDeleted||!we(n))return null;let i=se(n,t),o=ag(n),r=cg(je(e.fixedPoint),o),s=.01;if(n.type==="diamond"){let[a,l]=An(n),[d,c,u,m]=a,p,h;switch(r){case"left":{if(l.length>=3){let g=l[2][1];p=g[0]-s,h=g[1]}else{let f=Ve(c[1],u[0]);p=f[0]-s,h=f[1]}break}case"right":{if(l.length>=1){let g=l[0][1];p=g[0]+s,h=g[1]}else{let f=Ve(m[1],d[0]);p=f[0]+s,h=f[1]}break}case"top":{if(l.length>=4){let g=l[3][1];p=g[0],h=g[1]-s}else{let f=Ve(u[1],m[0]);p=f[0],h=f[1]-s}break}case"bottom":{if(l.length>=2){let g=l[1][1];p=g[0],h=g[1]+s}else{let f=Ve(d[1],c[0]);p=f[0],h=f[1]+s}break}case"top-right":{let f=Ve(m[0],m[1]);p=f[0]+s*.707,h=f[1]-s*.707;break}case"bottom-right":{let f=Ve(d[0],d[1]);p=f[0]+s*.707,h=f[1]+s*.707;break}case"bottom-left":{let f=Ve(c[0],c[1]);p=f[0]-s*.707,h=f[1]+s*.707;break}case"top-left":{let f=Ve(u[0],u[1]);p=f[0]-s*.707,h=f[1]-s*.707;break}default:return null}return ge(J(p,h),i,n.angle)}if(n.type==="ellipse"){let a=n.x+n.width/2,l=n.y+n.height/2,d=n.width/2,c=n.height/2,u,m;switch(r){case"top":{u=a,m=l-c-s;break}case"right":{u=a+d+s,m=l;break}case"bottom":{u=a,m=l+c+s;break}case"left":{u=a-d-s,m=l;break}case"top-right":{let p=-Math.PI/4,h=d*Math.cos(p),f=c*Math.sin(p);u=a+h+s*.707,m=l+f-s*.707;break}case"bottom-right":{let p=Math.PI/4,h=d*Math.cos(p),f=c*Math.sin(p);u=a+h+s*.707,m=l+f+s*.707;break}case"bottom-left":{let p=3*Math.PI/4,h=d*Math.cos(p),f=c*Math.sin(p);u=a+h-s*.707,m=l+f+s*.707;break}case"top-left":{let p=-3*Math.PI/4,h=d*Math.cos(p),f=c*Math.sin(p);u=a+h-s*.707,m=l+f-s*.707;break}default:return null}return ge(J(u,m),i,n.angle)}if(eo(n)){let[a,l]=Tn(n),[d,c,u,m]=a,p,h;switch(r){case"top":{let f=Ve(d[0],d[1]);p=f[0],h=f[1]-s;break}case"right":{let f=Ve(c[0],c[1]);p=f[0]+s,h=f[1];break}case"bottom":{let f=Ve(u[0],u[1]);p=f[0],h=f[1]+s;break}case"left":{let f=Ve(m[0],m[1]);p=f[0]-s,h=f[1];break}case"top-left":{if(l.length>=1){let f=l[0],g=f[0],E=f[3],b=Ve(g,E);p=b[0]-s*.707,h=b[1]-s*.707}else p=n.x-s,h=n.y-s;break}case"top-right":{if(l.length>=2){let f=l[1],g=f[0],E=f[3],b=Ve(g,E);p=b[0]+s*.707,h=b[1]-s*.707}else p=n.x+n.width+s,h=n.y-s;break}case"bottom-right":{if(l.length>=3){let f=l[2],g=f[0],E=f[3],b=Ve(g,E);p=b[0]+s*.707,h=b[1]+s*.707}else p=n.x+n.width+s,h=n.y+n.height+s;break}case"bottom-left":{if(l.length>=4){let f=l[3],g=f[0],E=f[3],b=Ve(g,E);p=b[0]-s*.707,h=b[1]+s*.707}else p=n.x-s,h=n.y+n.height+s;break}default:return null}return ge(J(p,h),i,n.angle)}return null},Ve=(e,t)=>J((e[0]+t[0])/2,(e[1]+t[1])/2),dI=(e,t,n,i,o)=>{cc(e,t,{elementId:t.id,fixedPoint:je(i),mode:"orbit"},n,o)};var da=({points:e})=>{let t=e[0][0],n=e[0][1];return{points:e.map(i=>H(i[0]-t,i[1]-n)),offsetX:t,offsetY:n}},wc=new WeakMap,R=class e{elementId;selectedPointsIndices;initialState;isDragging;lastUncommittedPoint;lastCommittedPoint;pointerOffset;hoverPointIndex;segmentMidPointHoveredCoords;hoveredFocusPointBinding;draggedFocusPointBinding;elbowed;customLineAngle;isEditing;pointerDownState;constructor(t,n,i=!1){this.elementId=t.id,hc(t.points[0],H(0,0))||(console.error("Linear element is not normalized",Error().stack),Xe(t,n,e.getNormalizeElementPointsAndCoords(t))),this.selectedPointsIndices=null,this.lastUncommittedPoint=null,this.lastCommittedPoint=null,this.isDragging=!1,this.pointerOffset={x:0,y:0},this.initialState={prevSelectedPointsIndices:null,lastClickedPoint:-1,origin:null,segmentMidpoint:{value:null,index:null,added:!1},arrowStartIsInside:!1,arrowOtherEndpointInitialBinding:null,altFocusPoint:null},this.hoverPointIndex=-1,this.segmentMidPointHoveredCoords=null,this.hoveredFocusPointBinding=null,this.draggedFocusPointBinding=null,this.elbowed=X(t)&&t.elbowed,this.customLineAngle=null,this.isEditing=i}static POINT_HANDLE_SIZE=10;static getElement(t,n){let i=n.get(t);return i||null}static handleBoxSelection(t,n,i,o){if(!n.selectedLinearElement?.isEditing||!n.selectionElement)return!1;let{selectedLinearElement:r}=n,{selectedPointsIndices:s,elementId:a}=r,l=e.getElement(a,o);if(!l)return!1;let[d,c,u,m]=Z(n.selectionElement,o),h=e.getPointsGlobalCoordinates(l,o).reduce((f,g,E)=>((g[0]>=d&&g[0]<=u&&g[1]>=c&&g[1]<=m||t.shiftKey&&s?.includes(E))&&f.push(E),f),[]).filter(f=>!(X(l)&&f!==0&&f!==l.points.length-1));i({selectedLinearElement:{...r,selectedPointsIndices:h.length?h:null}})}static handlePointerMove(t,n,i,o,r){let s=n.scene.getNonDeletedElementsMap(),a=n.scene.getNonDeletedElements(),{elementId:l}=r,d=e.getElement(l,s);ut(d,"Element being dragged must exist in the scene"),ut(d.points.length>1,"Element must have at least 2 points");let c=d.points.length-1,u=d.points[c],m=d.points[c-1],p=r.customLineAngle??Sc(m,d.points[c]),h=0,f=0;if(li(t)){let[S,M]=e._getShiftLockedDelta(d,s,m,H(i,o),t[ai.CTRL_OR_CMD]?null:n.getEffectiveGridSize(),p),A=H(S+m[0],M+m[1]);h=A[0]-u[0],f=A[1]-u[1]}else{let S=e.createPointAt(d,s,i-r.pointerOffset.x,o-r.pointerOffset.y,t[ai.CTRL_OR_CMD]?null:n.getEffectiveGridSize());h=S[0]-u[0],f=S[1]-u[1]}let g=null,{positions:E,updates:b}=Pc([c],h,f,i,o,s,d,a,n,li(t),t.altKey,r),x=li(t);if(e.movePoints(d,n.scene,E,{startBinding:b?.startBinding,endBinding:b?.endBinding,moveMidPointsWithElement:b?.moveMidPointsWithElement},{isBindingEnabled:n.state.isBindingEnabled,isMidpointSnappingEnabled:n.state.isMidpointSnappingEnabled&&!x&&!n.state.gridModeEnabled}),Ue(d,!1)&&Vt(n.state)&&(g=b?.suggestedBinding??null),Ue(d)&&bc(e.getPointGlobalCoordinates(d,d.points[d.points.length-1],s),d,a,s,n.scene),n.state.selectedLinearElement?.customLineAngle===p&&r.initialState.altFocusPoint&&(!g||Eg(n.state.suggestedBinding??[],g)))return null;let y=Ue(d)&&d.startBinding&&s.get(d.startBinding.elementId);return{selectedLinearElement:{...r,customLineAngle:p,initialState:{...r.initialState,altFocusPoint:!r.initialState.altFocusPoint&&y&&b?.suggestedBinding?.element.id!==y.id?yc(d,H(d.x,d.y),y,"start",s,n.state.zoom,n.state.isMidpointSnappingEnabled&&!x&&!n.state.gridModeEnabled):r.initialState.altFocusPoint}},suggestedBinding:g}}static handlePointDragging(t,n,i,o,r){let s=n.scene.getNonDeletedElementsMap(),a=n.scene.getNonDeletedElements(),{elbowed:l,elementId:d,initialState:c}=r,u=Array.from(r.selectedPointsIndices??[]),{lastClickedPoint:m}=c,p=e.getElement(d,s);ut(p,"Element being dragged must exist in the scene"),ut(p.points.length>1,"Element must have at least 2 points"),ut(u,"There must be selected points in order to drag them"),l&&u.some((B,C)=>B>0&&B!==p.points.length-1?(u[C]=p.points.length-1,m=p.points.length-1,!0):!1),(m<0||!u.includes(m)||!p.points[m])&&(console.error(`There must be a valid lastClickedPoint in order to drag it. selectedPointsIndices(${JSON.stringify(u)}) points(0..${p.points.length-1}) lastClickedPoint(${m}) isElbowArrow: ${l}`),m=p.points.length-1);let h=p.points[m],f=p.points[m===0?1:m-1],g=u.length===1,E=r.customLineAngle??Sc(f,p.points[m]),b=u.includes(0),x=u.includes(p.points.length-1),y=0,w=0;if(li(t)&&g){let[B,C]=e._getShiftLockedDelta(p,s,f,H(i,o),t[ai.CTRL_OR_CMD]?null:n.getEffectiveGridSize(),E),_=H(B+f[0],C+f[1]);y=_[0]-h[0],w=_[1]-h[1]}else{let B=e.createPointAt(p,s,i-r.pointerOffset.x,o-r.pointerOffset.y,t[ai.CTRL_OR_CMD]?null:n.getEffectiveGridSize());y=B[0]-h[0],w=B[1]-h[1]}let S=null,{positions:M,updates:A}=Pc(u,y,w,i,o,s,p,a,n,li(t)&&g,t.altKey,r),T=li(t)&&g;e.movePoints(p,n.scene,M,{startBinding:A?.startBinding,endBinding:A?.endBinding,moveMidPointsWithElement:A?.moveMidPointsWithElement},{isBindingEnabled:n.state.isBindingEnabled,isMidpointSnappingEnabled:n.state.isMidpointSnappingEnabled&&!T&&!n.state.gridModeEnabled}),Ue(p,!1)&&Vt(n.state)&&(b||x)&&(S=A?.suggestedBinding??null),Ue(p)&&b!==x&&bc(e.getPointGlobalCoordinates(p,b?p.points[0]:p.points[p.points.length-1],s),p,a,s,n.scene),Q(p,s)&&ii(p,n.scene,!1);let v=l?x?[p.points.length-1]:[0]:u,N=l?v[0]:m,k=!b&&!x?e.getPointGlobalCoordinates(p,h,s):null,z=N,W=Ue(p)&&p.startBinding&&s.get(p.startBinding.elementId),D=Ue(p)&&p.endBinding&&s.get(p.endBinding.elementId),L=x&&W&&A?.suggestedBinding?.element.id!==W.id?W:b&&D&&A?.suggestedBinding?.element.id!==D.id?D:null;return{selectedLinearElement:{...r,selectedPointsIndices:v,initialState:{...r.initialState,lastClickedPoint:N,altFocusPoint:!r.initialState.altFocusPoint&&Ue(p)&&L?yc(p,H(p.x,p.y),L,"start",s,n.state.zoom,n.state.isMidpointSnappingEnabled&&!T&&!n.state.gridModeEnabled):r.initialState.altFocusPoint},segmentMidPointHoveredCoords:k,hoverPointIndex:z,isDragging:!0,customLineAngle:E},suggestedBinding:S}}static handlePointerUp(t,n,i,o){let r=o.getNonDeletedElementsMap(),{elementId:s,selectedPointsIndices:a,isDragging:l,initialState:d}=n,c=e.getElement(s,r);if(!c)return n;if(l&&a)for(let u of a)(u===0||u===c.points.length-1)&&xg(c.points,i.zoom.value)&&(Re(c)&&o.mutateElement(c,{...Dc(c,!0)},{informMutation:!1,isDragging:!1}),e.movePoints(c,o,new Map([[u,{point:u===0?c.points[c.points.length-1]:c.points[0]}]])));return{...n,segmentMidPointHoveredCoords:null,hoverPointIndex:-1,selectedPointsIndices:l||t.shiftKey?!l&&t.shiftKey&&d.prevSelectedPointsIndices?.includes(d.lastClickedPoint)?a&&a.filter(u=>u!==d.lastClickedPoint):a:a?.includes(d.lastClickedPoint)?[d.lastClickedPoint]:a,isDragging:!1,customLineAngle:null,initialState:{...n.initialState,origin:null,arrowStartIsInside:!1,arrowOtherEndpointInitialBinding:null}}}static getEditorMidPoints=(t,n,i)=>{let o=Q(t,n);if(!X(t)&&!i.selectedLinearElement?.isEditing&&t.points.length>2&&!o)return[];let r=e.getPointsGlobalCoordinates(t,n),s=0,a=[];for(;s<r.length-1;){if(e.isSegmentTooShort(t,t.points[s],t.points[s+1],s,i.zoom,n)){a.push(null),s++;continue}let l=e.getSegmentMidPoint(t,s+1,n);a.push(l),s++}return a};static getSegmentMidpointHitCoords=(t,n,i,o)=>{let{elementId:r}=t,s=e.getElement(r,o);if(!s)return null;let a=e.getPointIndexUnderCursor(s,o,i.zoom,n.x,n.y);if(!X(s)&&a>=0||e.getPointsGlobalCoordinates(s,o).length>=3&&!i.selectedLinearElement?.isEditing&&!X(s))return null;let d=(e.POINT_HANDLE_SIZE+1)/i.zoom.value,c=t.segmentMidPointHoveredCoords;if(c&&Zt(H(c[0],c[1]),H(n.x,n.y))<=d)return c;let u=0,m=e.getEditorMidPoints(s,o,i);for(;u<m.length;){if(m[u]!==null&&Zt(m[u],H(n.x,n.y))<=d)return m[u];u++}return null};static isSegmentTooShort(t,n,i,o,r,s){if(X(t))return o>=0&&o<t.points.length?Zt(n,i)*r.value<e.POINT_HANDLE_SIZE/2:!1;let a=Zt(n,i);if(t.points.length>2&&t.roundness){let[l,d]=Ec(t,s);ut(l.length===0&&d.length>0,"Only linears built out of curves are supported"),ut(l.length+d.length>=o,"Invalid segment index while calculating mid point"),a=Mc(d[o])}return a*r.value<e.POINT_HANDLE_SIZE*4}static getSegmentMidPoint(t,n,i){if(X(t)){ut(t.points.length>=n,"Invalid segment index while calculating elbow arrow mid point");let s=fc(t.points[n-1],t.points[n]);return H(t.x+s[0],t.y+s[1])}let[o,r]=Ec(t,i);if(ut(o.length===0&&r.length>0||o.length>0&&r.length===0,"Only linears built out of either segments or curves are supported"),ut(o.length+r.length>=n,"Invalid segment index while calculating mid point"),o.length){let s=o[n-1];return fc(s[0],s[1])}if(r.length){let s=r[n-1];return Tc(s,.5)}ut(!1,"Invalid segment type while calculating mid point")}static getSegmentMidPointIndex(t,n,i,o){let r=e.getElement(t.elementId,o);if(!r)return-1;let s=e.getEditorMidPoints(r,o,n),a=0;for(;a<s.length;){if(e.arePointsEqual(i,s[a]))return a+1;a++}return-1}static handlePointerDown(t,n,i,o,r,s){let a=n.state,l=s.getNonDeletedElementsMap(),d={didAddPoint:!1,hitElement:null,hitBoundText:!1,linearElementEditor:null};if(!r)return d;let{elementId:c}=r,u=e.getElement(c,l);if(!u)return d;let m=e.getSegmentMidpointHitCoords(r,o,a,l),p=H(o.x,o.y),h=null;if(m)h=e.getSegmentMidPointIndex(r,a,m,l);else if(t.altKey&&a.selectedLinearElement?.isEditing)return r.lastUncommittedPoint==null&&(s.mutateElement(u,{points:[...u.points,e.createPointAt(u,l,o.x,o.y,t[ai.CTRL_OR_CMD]?null:n.getEffectiveGridSize())]}),d.didAddPoint=!0),i.scheduleCapture(),d.linearElementEditor={...r,initialState:{prevSelectedPointsIndices:r.selectedPointsIndices,lastClickedPoint:-1,origin:p,segmentMidpoint:{value:m,index:h,added:!1},arrowStartIsInside:!!n.state.newElement&&(n.state.bindMode==="inside"||n.state.bindMode==="skip"),altFocusPoint:null,arrowOtherEndpointInitialBinding:u.startBinding},selectedPointsIndices:[u.points.length-1],lastUncommittedPoint:null},d.didAddPoint=!0,d;let f=e.getPointIndexUnderCursor(u,l,a.zoom,o.x,o.y),g=e.isPointHandle(u,f),E=Q(u,l),b=null;if(!g&&!m&&E&&U(u)&&n.arrowText.isBoundTextGrabbable(u,o.x,o.y)){let{x:N,y:k}=e.getBoundTextElementPosition(u,E,l);b={x:o.x-(N+E.width/2),y:o.y-(k+E.height/2)}}let x=b?-1:f;d.hitBoundText=!!b,(x>=0||m||b)&&(d.hitElement=u);let[y,w,S,M]=Z(u,l),A=(y+S)/2,T=(w+M)/2,G=x>-1&&Je(H(u.x+u.points[x][0],u.y+u.points[x][1]),H(A,T),u.angle),v=x>-1||t.shiftKey?t.shiftKey||r.selectedPointsIndices?.includes(x)?yg([...r.selectedPointsIndices||[],x]):[x]:null;return d.linearElementEditor={...r,initialState:{prevSelectedPointsIndices:r.selectedPointsIndices,lastClickedPoint:x,origin:p,segmentMidpoint:{value:m,index:h,added:!1},arrowStartIsInside:!!n.state.newElement&&(n.state.bindMode==="inside"||n.state.bindMode==="skip"),altFocusPoint:null,arrowOtherEndpointInitialBinding:v?.includes(0)?u.endBinding:u.startBinding},selectedPointsIndices:v,pointerOffset:G?{x:o.x-G[0],y:o.y-G[1]}:b??{x:0,y:0}},d}static arePointsEqual(t,n){return!t&&!n?!0:!t||!n?!1:hc(t,n)}static handlePointerMoveInEditMode(t,n,i,o){let r=o.state;if(!r.selectedLinearElement?.isEditing)return null;let{elementId:s,lastUncommittedPoint:a}=r.selectedLinearElement,l=o.scene.getNonDeletedElementsMap(),d=e.getElement(s,l);if(!d)return r.selectedLinearElement;let{points:c}=d,u=c[c.length-1];if(!t.altKey)return u===a&&e.deletePoints(d,o,[c.length-1]),r.selectedLinearElement?.lastUncommittedPoint?{...r.selectedLinearElement,lastUncommittedPoint:null}:r.selectedLinearElement;let m;if(li(t)&&c.length>=2){let p=c[c.length-2],[h,f]=e._getShiftLockedDelta(d,l,p,H(n,i),t[ai.CTRL_OR_CMD]?null:o.getEffectiveGridSize());m=H(h+p[0],f+p[1])}else m=e.createPointAt(d,l,n-r.selectedLinearElement.pointerOffset.x,i-r.selectedLinearElement.pointerOffset.y,t[ai.CTRL_OR_CMD]||X(d)?null:o.getEffectiveGridSize());return u===a?e.movePoints(d,o.scene,new Map([[d.points.length-1,{point:m}]])):e.addPoints(d,o.scene,[m]),{...r.selectedLinearElement,lastUncommittedPoint:d.points[d.points.length-1]}}static getPointGlobalCoordinates(t,n,i){let[o,r,s,a]=Z(t,i),l=(o+s)/2,d=(r+a)/2,{x:c,y:u}=t;return Je(H(c+n[0],u+n[1]),H(l,d),t.angle)}static getPointsGlobalCoordinates(t,n){let[i,o,r,s]=Z(t,n),a=(i+r)/2,l=(o+s)/2;return t.points.map(d=>{let{x:c,y:u}=t;return Je(H(c+d[0],u+d[1]),H(a,l),t.angle)})}static getPointAtIndexGlobalCoordinates(t,n,i){let o=n<0?t.points.length+n:n,[,,,,r,s]=Z(t,i),a=H(r,s),l=t.points[o],{x:d,y:c}=t;return l?Je(H(d+l[0],c+l[1]),a,t.angle):Je(H(d,c),a,t.angle)}static pointFromAbsoluteCoords(t,n,i){if(X(t))return H(n[0]-t.x,n[1]-t.y);let[o,r,s,a]=Z(t,i),l=(o+s)/2,d=(r+a)/2,[c,u]=Je(H(n[0],n[1]),H(l,d),-t.angle);return H(c-t.x,u-t.y)}static isPointHandle(t,n){return n>=0&&(!X(t)||n===0||n===t.points.length-1)}static getPointIndexUnderCursor(t,n,i,o,r){let s=e.getPointsGlobalCoordinates(t,n),a=s.length;for(;--a>-1;){let l=s[a];if(Zt(H(o,r),H(l[0],l[1]))*i.value<e.POINT_HANDLE_SIZE+1)return a}return-1}static createPointAt(t,n,i,o,r){let s=gc(i,o,r),[a,l,d,c]=Z(t,n),u=(a+d)/2,m=(l+c)/2,[p,h]=Je(H(s[0],s[1]),H(u,m),-t.angle);return H(p-t.x,h-t.y)}static getNormalizeElementPointsAndCoords(t){let{points:n,offsetX:i,offsetY:o}=da(t);return{points:n,x:t.x+i,y:t.y+o}}static duplicateSelectedPoints(t,n){ut(t.selectedLinearElement?.isEditing,"Not currently editing a linear element");let i=n.getNonDeletedElementsMap(),{selectedPointsIndices:o,elementId:r}=t.selectedLinearElement,s=e.getElement(r,i);ut(s,"The linear element does not exist in the provided Scene"),ut(o!=null,"There are no selected points to duplicate");let{points:a}=s,l=[],d=!1,c=-1,u=a.reduce((m,p,h)=>{if(++c,m.push(p),o.includes(h)){let g=a[h+1];g||(d=!0),m.push(g?H((p[0]+g[0])/2,(p[1]+g[1])/2):H(p[0],p[1])),l.push(c+1),++c}return m},[]);if(n.mutateElement(s,{points:u}),d){let m=s.points[s.points.length-1];e.movePoints(s,n,new Map([[s.points.length-1,{point:H(m[0]+30,m[1]+30)}]]))}return{...t,selectedLinearElement:{...t.selectedLinearElement,selectedPointsIndices:l}}}static deletePoints(t,n,i){let o=n.state.selectedLinearElement?.isEditing&&n.state.selectedLinearElement?.lastUncommittedPoint===t.points[t.points.length-1],r=t.points.filter((c,u)=>!i.includes(u));Re(t)&&t.polygon&&(o||i.includes(0)||i.includes(t.points.length-1))&&(r[0]=H(r[r.length-1][0],r[r.length-1][1]));let{points:a,offsetX:l,offsetY:d}=da({points:r});e._updatePoints(t,n.scene,a,l,d)}static addPoints(t,n,i){let o=[...t.points,...i];Re(t)&&t.polygon&&(o[0]=H(o[o.length-1][0],o[o.length-1][1]));let{points:r,offsetX:s,offsetY:a}=da({points:o});e._updatePoints(t,n,r,s,a)}static movePoints(t,n,i,o,r){let{points:s}=t;if(Re(t)&&t.polygon){let u=i.get(0),m=i.get(s.length-1);u?i.set(s.length-1,{point:H(u.point[0],u.point[1]),isDragging:u.isDragging}):m&&i.set(0,{point:H(m.point[0],m.point[1]),isDragging:m.isDragging})}let a=i.get(0)?.point??H(0,0),[l,d]=a,c=X(t)?[i.get(0)?.point??s[0],i.get(s.length-1)?.point??s[s.length-1]]:s.map((u,m)=>{let p=i.get(m)?.point??u;return o?.moveMidPointsWithElement&&m!==0&&m!==s.length-1&&!i.has(m)?p:H(p[0]-l,p[1]-d)});e._updatePoints(t,n,c,l,d,o,{isDragging:Array.from(i.values()).some(u=>u.isDragging),isBindingEnabled:r?.isBindingEnabled,isMidpointSnappingEnabled:r?.isMidpointSnappingEnabled})}static shouldAddMidpoint(t,n,i,o){let r=e.getElement(t.elementId,o);if(r&&X(r)||!r)return!1;let{segmentMidpoint:s}=t.initialState;if(s.added||s.value===null||s.index===null||t.initialState.origin===null)return!1;let a=t.initialState.origin,l=Zt(a,H(n.x,n.y));return!(!i.selectedLinearElement?.isEditing&&l<gg/i.zoom.value)}static addMidpoint(t,n,i,o,r){let s=r.getNonDeletedElementsMap(),a=e.getElement(t.elementId,s);if(!a)return;let{segmentMidpoint:l}=t.initialState,d={pointerDownState:t.initialState,selectedPointsIndices:t.selectedPointsIndices},c=e.createPointAt(a,s,n.x,n.y,o&&!X(a)?i.getEffectiveGridSize():null),u=[...a.points.slice(0,l.index),c,...a.points.slice(l.index)];return r.mutateElement(a,{points:u}),d.pointerDownState={...t.initialState,segmentMidpoint:{...t.initialState.segmentMidpoint,added:!0},lastClickedPoint:l.index},d.selectedPointsIndices=[l.index],d}static _updatePoints(t,n,i,o,r,s,a){if(X(t)){let l={};s?.startBinding!==void 0&&(l.startBinding=s.startBinding),s?.endBinding!==void 0&&(l.endBinding=s.endBinding),l.points=Array.from(i),n.mutateElement(t,l,{informMutation:!0,isDragging:a?.isDragging??!1,isBindingEnabled:a?.isBindingEnabled,isMidpointSnappingEnabled:a?.isMidpointSnappingEnabled})}else{let l=ua(t,i),d=ua(t,t.points),c=(l[0]+l[2])/2,u=(l[1]+l[3])/2,m=(d[0]+d[2])/2,p=(d[1]+d[3])/2,h=m-c,f=p-u,g=Je(H(o,r),H(h,f),t.angle);n.mutateElement(t,{...s,points:i,x:t.x+g[0],y:t.y+g[1]})}}static _getShiftLockedDelta(t,n,i,o,r,s){let a=e.getPointGlobalCoordinates(t,i,n);if(X(t))return[o[0]-a[0],o[1]-a[1]];let[l,d]=gc(o[0],o[1],r),{width:c,height:u}=vc(a[0],a[1],l,d,s);return Je(H(c,u),H(0,0),-t.angle)}static getBoundTextElementCenter=(t,n)=>{if(t.points.length%2===1){let o=Math.floor(t.points.length/2);return e.getPointGlobalCoordinates(t,t.points[o],n)}let i=t.points.length/2-1;return e.getSegmentMidPoint(t,i+1,n)};static handleBoundTextDragging(t,n,i,o){let r=n.getNonDeletedElementsMap(),s=e.getElement(t.elementId,r),a=Q(s,r);if(!s||!U(s)||!a)return null;let l=H(i-t.pointerOffset.x,o-t.pointerOffset.y),{segments:d,lengths:c,prefixSums:u,totalLength:m}=Ic(s,r);if(d.length===0||m===0)return null;let p=1/0,h=0,f=0;for(let x=0;x<d.length;x++){let{t:y,distance:w}=Pg(d[x],l);w<p&&(p=w,h=x,f=y)}let g=Sg(d[h],f,c[h]),E=la((u[h]+g)/m,0,1),b=e.getPointAtPathParameter(s,E,r);return b?(n.mutateElement(a,{labelPosition:E,x:b[0]-a.width/2,y:b[1]-a.height/2}),{...t,isDragging:!0}):null}static getPointAtPathParameter(t,n,i){if(!Number.isFinite(n))return null;let{segments:o,lengths:r,prefixSums:s,totalLength:a}=Ic(t,i);if(o.length===0)return null;let l=la(n,0,1)*a,d=o.findIndex((m,p)=>l<=s[p+1]),c=d===-1?o.length-1:d,u=r[c]===0?0:la((l-s[c])/r[c],0,1);return Ig(o[c],u,r[c])}static getBoundTextElementPosition=(t,n,i)=>{let o=wc.get(n);if(o&&o.containerVersion===t.version&&o.textVersion===n.version)return o.position;let r=e.computeBoundTextElementPosition(t,n,i);return wc.set(n,{containerVersion:t.version,textVersion:n.version,position:r}),r};static computeBoundTextElementPosition=(t,n,i)=>{if(t.points.length<2)return{x:n.x,y:n.y};if(U(t)&&n.labelPosition!=null){let r=e.getPointAtPathParameter(t,n.labelPosition,i);if(r)return{x:r[0]-n.width/2,y:r[1]-n.height/2}}let o=e.getBoundTextElementCenter(t,i);return{x:o[0]-n.width/2,y:o[1]-n.height/2}};static getMinMaxXYWithBoundText=(t,n,i,o)=>{let[r,s,a,l]=i,d=(r+a)/2,c=(s+l)/2,{x:u,y:m}=e.getBoundTextElementPosition(t,o,n),p=u+o.width,h=m+o.height,f=H(d,c),g=Je(H(r,s),f,t.angle),E=Je(H(a,s),f,t.angle),b=Je(H(u,m),f,-t.angle),x=Je(H(p,m),f,-t.angle),y=Je(H(u,h),f,-t.angle),w=Je(H(p,h),f,-t.angle);return g[0]<E[0]&&g[1]>=E[1]?(r=Math.min(r,y[0]),a=Math.max(a,Math.max(x[0],w[0])),s=Math.min(s,b[1]),l=Math.max(l,w[1])):g[0]>=E[0]&&g[1]>E[1]?(r=Math.min(r,w[0]),a=Math.max(a,Math.max(b[0],x[0])),s=Math.min(s,y[1]),l=Math.max(l,x[1])):g[0]>=E[0]?(r=Math.min(r,x[0]),a=Math.max(a,y[0]),s=Math.min(s,w[1]),l=Math.max(l,b[1])):g[1]<=E[1]&&(r=Math.min(r,Math.min(x[0],b[0])),a=Math.max(a,w[0]),s=Math.min(s,x[1]),l=Math.max(l,y[1])),[r,s,a,l,d,c]};static getElementAbsoluteCoords=(t,n,i=!1)=>{let o=ht.generateElementShape(t,null),r=tn(o[0]),[s,a,l,d]=po(r),c=s+t.x,u=a+t.y,m=l+t.x,p=d+t.y,h=(c+m)/2,f=(u+p)/2,g=i&&Q(t,n);return g?e.getMinMaxXYWithBoundText(t,n,[c,u,m,p],g):[c,u,m,p,h,f]};static moveFixedSegment(t,n,i,o,r){let s=r.getNonDeletedElementsMap(),a=e.getElement(t.elementId,s);if(!a||!X(a))return t;if(n&&n>0&&n<a.points.length){let l=at(Yt(ug(a.points[n],a.points[n-1]))),d=(a.fixedSegments??[]).reduce((p,h)=>(p[h.index]=h,p),{});d[n]={index:n,start:H(l?a.points[n-1][0]:i-a.x,l?o-a.y:a.points[n-1][1]),end:H(l?a.points[n][0]:i-a.x,l?o-a.y:a.points[n][1])};let c=Object.values(d).sort((p,h)=>p.index-h.index),u=c.map(p=>p.index).reduce((p,h)=>h<n?p+1:p,0);r.mutateElement(a,{fixedSegments:c});let m=H(a.x+(a.fixedSegments[u].start[0]+a.fixedSegments[u].end[0])/2,a.y+(a.fixedSegments[u].start[1]+a.fixedSegments[u].end[1])/2);return{...t,segmentMidPointHoveredCoords:m,initialState:{...t.initialState,segmentMidpoint:{added:!1,index:a.fixedSegments[u].index,value:m}}}}return t}static deleteFixedSegment(t,n,i){n.mutateElement(t,{fixedSegments:t.fixedSegments?.filter(o=>o.index!==i)})}},yg=e=>{let t=[...new Set(e.filter(n=>n!==null&&n!==-1))];return t=t.sort((n,i)=>n-i),t.length?t:null},Pc=(e,t,n,i,o,r,s,a,l,d,c,u)=>{let m=new Map(e.map(W=>{let D=s.points[W]??s.points.at(-1);return[W,{point:H(D[0]+t,D[1]+n),isDragging:!0}]}));if(!U(s))return{positions:m};let p=e.includes(0),h=e.includes(s.points.length-1),{start:f,end:g}=sa(s,m,i,o,r,a,l.state,{newArrow:!!l.state.newElement,angleLocked:d,altKey:c,gridSize:l.getEffectiveGridSize()});if(X(s)){let W=p?f.element:h?g.element:null;return{positions:m,updates:{suggestedBinding:W?{element:W,midPoint:l.state.isMidpointSnappingEnabled?aa(W,r,H(i-u.pointerOffset.x,o-u.pointerOffset.y)):void 0}:null}}}if(!p&&!h){let W={...s,points:s.points.map((L,P)=>m.get(P)?.point??L)},D=new Map(m);if(s.startBinding){let L=r.get(s.startBinding.elementId);if(L){let P=Gt(W,"startBinding",s.startBinding,L,r)??null;P&&D.set(0,{point:P,isDragging:!0})}}if(s.endBinding){let L=r.get(s.endBinding.elementId);if(L){let P=Gt(W,"endBinding",s.endBinding,L,r)??null;P&&D.set(s.points.length-1,{point:P,isDragging:!0})}}return{positions:D}}if(p===h)return{positions:m};let E={suggestedBinding:null};f.mode===null?E.startBinding=null:f.mode?(E.startBinding={elementId:f.element.id,mode:f.mode,...Bi(s,f.element,"start",r,f.focusPoint)},p&&(E.startBinding.mode==="orbit"||!Li("COMPLEX_BINDINGS"))&&(E.suggestedBinding=f.element?{element:f.element,midPoint:xc(H(i-u.pointerOffset.x,o-u.pointerOffset.y),f.element,r,l.state.zoom)}:null)):p&&(E.suggestedBinding=l.state.suggestedBinding),g.mode===null?E.endBinding=null:g.mode?(E.endBinding={elementId:g.element.id,mode:g.mode,...Bi(s,g.element,"end",r,g.focusPoint)},h&&(E.endBinding.mode==="orbit"||!Li("COMPLEX_BINDINGS"))&&(E.suggestedBinding=g.element?{element:g.element,midPoint:xc(H(i-u.pointerOffset.x,o-u.pointerOffset.y),g.element,r,l.state.zoom)}:null)):h&&(E.suggestedBinding=l.state.suggestedBinding);let b=p?H(s.points[0][0]+t,s.points[0][1]+n):s.points[0],x=h?H(s.points[s.points.length-1][0]+t,s.points[s.points.length-1][1]+n):s.points[s.points.length-1],y={...s,points:[b,...s.points.slice(1,-1),x],startBinding:E.startBinding===void 0?s.startBinding:E.startBinding===null?null:E.startBinding,endBinding:E.endBinding===void 0?s.endBinding:E.endBinding===null?null:E.endBinding},w=s.endBinding&&y.startBinding&&p&&y.startBinding.elementId===s.endBinding.elementId,S=s.startBinding&&y.endBinding&&h&&s.startBinding.elementId===y.endBinding.elementId,M=y.endBinding?g.element??r.get(y.endBinding.elementId):null,A=S&&l.state.bindMode!=="inside"&&Li("COMPLEX_BINDINGS")?y.points[0]:M&&Gt(y,"endBinding",y.endBinding,M,r,h)||y.points[y.points.length-1];y.points[y.points.length-1]=A;let T=y.startBinding?f.element??r.get(y.startBinding.elementId):null,G=S&&Li("COMPLEX_BINDINGS")?y.points[0]:w&&l.state.bindMode!=="inside"&&Li("COMPLEX_BINDINGS")?A:T&&Gt(y,"startBinding",y.startBinding,T,r,p)||y.points[0],v=!(S&&l.state.bindMode!=="inside"&&Li("COMPLEX_BINDINGS"))&&!!M,N=Zt(G,y.points[0])!==0,k=new Set(e);T&&N&&k.add(0),M&&v&&k.add(s.points.length-1);let z=Array.from(k);return{updates:E,positions:new Map(z.map(W=>[W,W===0?{point:G,isDragging:!0}:W===s.points.length-1?{point:A,isDragging:!0}:m.get(W)]))}},Sc=(e,t)=>Math.atan2(t[1]-e[1],t[0]-e[0]),ca=new WeakMap;function Ic(e,t){let n=ca.get(e);if(n){if(n.version===e.version)return n.metrics;ca.delete(e)}let i=bg(e,t),o=i.map(wg),r=new Array(o.length+1);r[0]=0;for(let a=0;a<o.length;a++)r[a+1]=r[a]+o[a];let s={segments:i,lengths:o,prefixSums:r,totalLength:r[o.length]};return ca.set(e,{version:e.version,metrics:s}),s}var wg=e=>br(e)?Mc(e):Zt(e[0],e[1]),Pg=(e,t)=>{if(br(e)){let i=fg(e,t);return{t:i,distance:Zt(t,hg(e,i))}}let n=pg(t,e);return{t:n,distance:Zt(t,Ac(e,n))}},Sg=(e,t,n)=>br(e)?mg(e,t):t*n,Ig=(e,t,n)=>br(e)?Tc(e,t,n):Ac(e,t);I();import{arrayToMap as Ot}from"@excalidraw/common";import{isPointWithinBounds as _g,pointFrom as xa,segmentsIntersectAt as Hg}from"@excalidraw/math";I();import{arrayToMap as Bg,isShallowEqual as Lg}from"@excalidraw/common";I();var Mg=(e,t,n)=>{let i=n.reduce((o,r)=>(r.groupIds.includes(e)&&(o[r.id]=!0),o),{});return Object.keys(i).length<2?t.selectedGroupIds[e]||t.editingGroupId===e?{selectedElementIds:t.selectedElementIds,selectedGroupIds:{...t.selectedGroupIds,[e]:!1},editingGroupId:null}:t:{editingGroupId:t.editingGroupId,selectedGroupIds:{...t.selectedGroupIds,[e]:!0},selectedElementIds:{...t.selectedElementIds,...i}}},Bc=function(){let e=null,t=null,n=null,i=(r,s,a,l)=>{if(n!==void 0&&s===t&&r===e&&a.editingGroupId===n?.editingGroupId)return n;let d={};for(let m of r){let p=m.groupIds;if(a.editingGroupId){let h=p.indexOf(a.editingGroupId);h>-1&&(p=p.slice(0,h))}if(p.length>0){let h=p[p.length-1];d[h]=!0}}let c={},u=s.reduce((m,p)=>{if(p.isDeleted)return m;let h=p.groupIds.find(f=>d[f]);return h&&(m[p.id]=!0,Array.isArray(c[h])?c[h].push(p.id):c[h]=[p.id]),m},{});for(let m of Object.keys(c))c[m].length<2&&d[m]&&(d[m]=!1);return t=s,e=r,n={editingGroupId:a.editingGroupId,selectedGroupIds:d,selectedElementIds:ma({...a.selectedElementIds,...u},l)},n},o=(r,s,a,l)=>{let d=l?l.scene.getSelectedElements({selectedElementIds:r.selectedElementIds,elements:s}):qt(s,r);return d.length?i(d,s,r,a):{selectedGroupIds:{},editingGroupId:null,selectedElementIds:ma(r.selectedElementIds,a)}};return o.clearCache=()=>{t=null,e=null,n=null},o}(),Tg=(e,t)=>pa(e,t)!=null,pa=(e,t)=>t.groupIds.filter(n=>n!==e.editingGroupId).find(n=>e.selectedGroupIds[n]),Ag=e=>Object.entries(e.selectedGroupIds).filter(([t,n])=>n).map(([t,n])=>t),Lc=(e,t)=>{let n={...t,selectedGroupIds:{}};for(let i of e){let o=i.groupIds;if(t.editingGroupId){let r=o.indexOf(t.editingGroupId);r>-1&&(o=o.slice(0,r))}if(o.length>0){let r=o[o.length-1];n={...n,...Mg(r,n,e)}}}return n.selectedGroupIds},BI=(e,t)=>({...e,editingGroupId:t.groupIds.length?t.groupIds[0]:null,selectedGroupIds:{},selectedElementIds:{[t.id]:!0}}),Dg=(e,t)=>e.groupIds.includes(t),et=(e,t)=>{let n=[];for(let i of e.values())Dg(i,t)&&n.push(i);return n},vg=(e,t)=>e.groupIds.find(n=>t[n]),LI=(e,t,n)=>{let i=[...e],o=n?i.indexOf(n):-1,r=o>-1?o:i.length;return i.splice(r,0,t),i},kI=(e,t)=>e.filter(n=>!t[n]),CI=(e,t)=>{let n=new Map;return e.forEach(i=>{let o=i.groupIds.length===0?i.id:i.groupIds[i.groupIds.length-1],r=n.get(o)||[],s=Q(i,t);s&&r.push(s),n.set(o,[...r,i])}),Array.from(n.values())},kc=e=>{let t=new Set;for(let[,n]of e)if(!n.isDeleted)for(let i of n.groupIds??[])t.add(i);return t},Cc=e=>{let t=e.flatMap(o=>o.groupIds),n=new Map,i=0;for(let o of t)n.set(o,(n.get(o)??0)+1),n.get(o)>i&&(i=n.get(o));return i===e.length},Nc=e=>e.groupIds.length>0,Gc=(e,t,n)=>{let i=[...e],o=t?e.indexOf(t):-1,r=o>-1?o:e.length;for(let s=0;s<r;s++)i[s]=n(i[s]);return i},yr=(e,t,n)=>{let i=new Map,r=Ag(n).length===1&&e.every(s=>Tg(n,s));return e.forEach(s=>{if(Ie(s))return;let a,l=vg(s,n.selectedGroupIds);if(!l)a=`${s.id}_element`;else{let u=r?s.groupIds.indexOf(l)-1:s.groupIds.indexOf(l);a=u<0?`${s.id}_element`:`${s.groupIds[u]}_group`}let d=i.get(a)??[],c=Q(s,t);i.set(a,[...d,s,...c?[c]:[]])}),[...i.values()]};var kg=e=>e.locked||Ie(e),Cg=(e,t)=>e.filter(n=>!(n.frameId&&t.has(n.frameId))),Ng=e=>{let t=new Set;return e.forEach(n=>{te(n)&&t.add(n.id)}),Cg(e,t)},Oc=(e,t,n,i=!0,o="contain")=>{let[r,s,a,l]=Z(t,n),d=Math.min(r,a),c=Math.min(s,l),u=Math.max(r,a),m=Math.max(s,l);return Fc({elements:e,bounds:[d,c,u,m],elementsMap:n,type:o,shouldIgnoreElementFromSelection:kg,excludeElementsInFrames:i})},YI=(e,t,n,i)=>{let o=new Set(t.map(r=>r.id));return e.filter(r=>{let s=Rc(r,n.width,n.height,n,i);return!o.has(r.id)&&s})},XI=function(){let e=null,t=null,n=null,i=(o,r)=>(n!=null&&o===e&&r.selectedElementIds===t||(n=o.some(s=>r.selectedElementIds[s.id]),e=o,t=r.selectedElementIds),n);return i.clearCache=()=>{e=null,t=null,n=null},i}(),qt=(e,t,n)=>{let i=new Set,o=[];for(let r of e.values()){if(t.selectedElementIds[r.id]){Qe(r)?(o.push(r),i.add(r.id)):console.error("[NONDELETED][INVARIANT] getSelectedElements skipping deleted selected element which should not be in the selection");continue}if(n?.includeBoundTextElement&&Ie(r)&&Qe(r)&&t.selectedElementIds[r?.containerId]){o.push(r),i.add(r.id);continue}}if(n?.includeElementsInFrames){let r=[];return o.forEach(s=>{te(s)&&Rn(e,s.id).forEach(a=>!i.has(a.id)&&r.push(a)),r.push(s)}),r}return o},$I=(e,t)=>t.editingTextElement?[t.editingTextElement]:t.newElement&&t.activeTool.type!=="autoshape"?[t.newElement]:qt(e,t,{includeBoundTextElement:!0}),ma=(e,t)=>Lg(t.selectedElementIds,e)?t.selectedElementIds:e,Gg=(e,t)=>{let n=e.filter(q);if(n.length===1){let i=n[0],o=i.boundElements?.map(s=>s.id)??[];if(e.every(s=>s.id===i.id||o.includes(s.id)))return new R(i,Bg(t))}return null},jI=(e,t,n)=>({selectedLinearElement:Gg(e,t),...Bc({editingGroupId:n.editingGroupId,selectedElementIds:Ng(e).reduce((i,o)=>(Ie(o)||(i[o.id]=!0),i),{})},t,n,null)}),VI=(e,t)=>t.editingTextElement||e.length===1&&V(e[0])&&e[0]||null;I();import{arrayToMap as wr}from"@excalidraw/common";import{validateOrderKey as Og,generateNKeysBetween as Fg}from"@excalidraw/fractional-indexing";var fa=class extends Error{code="ELEMENT_HAS_INVALID_INDEX"},Rg=(e,{shouldThrow:t=!1,includeBoundTextValidation:n=!1,ignoreLogs:i,reconciliationContext:o})=>{let r=[],s=d=>`${d?.index}:${d?.id}:${d?.type}:${d?.isDeleted}:${d?.version}:${d?.versionNonce}`,a=n?wr(e):null,l=e.map(d=>d.index);for(let[d,c]of l.entries()){let u=l[d-1],m=l[d+1];if(ha(c,u,m)||r.push(`Fractional indices invariant has been compromised: "${s(e[d-1])}", "${s(e[d])}", "${s(e[d+1])}"`),n&&a&&Wt(e[d])&&Qe(e[d])){let p=e[d],h=Ct(p),f=h?a.get(h):null;f&&Qe(f)&&f.index<=p.index&&r.push(`Fractional indices invariant for bound elements has been compromised: "${s(f)}", "${s(p)}"`)}}if(r.length){let d=new fa,c=[];if(o&&(c.push("Additional reconciliation context:"),c.push(o.localElements.map(u=>s(u))),c.push(o.remoteElements.map(u=>s(u)))),i||console.error(r.join(`
19
11
 
20
- `),l.stack,e.map(c=>s(c)),...d),t)throw l}},Ed=e=>e.sort((t,n)=>hd(t)&&hd(n)?t.index<n.index?-1:t.index>n.index?1:t.id<n.id?-1:1:1),mo=(e,t)=>{try{let n=Ii(e),o=jf(e,t),i=os(e,o),r=e.map(s=>{let a=i.get(s);return a?{...s,index:a.index}:s});Uf(r,{includeBoundTextValidation:!1,shouldThrow:!0,ignoreLogs:!0});for(let[s,{index:a}]of i)be(s,n,{index:a})}catch{Xf(e)}return e},Xf=e=>{let t=Ii(e),n=gd(e),o=os(e,n);for(let[i,{index:r}]of o)be(i,t,{index:r});return e},ad=e=>{let t=Ii(e),n=gd(e),o=os(e,n);for(let[i,{index:r}]of o)t.set(i.id,ge(i,{index:r}));return t},jf=(e,t)=>{let n=[],o=0;for(;o<e.length;)if(t.has(e[o].id)){let i=[o-1,o];for(;++o<e.length&&t.has(e[o].id);)i.push(o);i.push(o),n.push(i)}else o++;return n},gd=e=>{let t=[],n,o,i=-1,r=0,s=d=>{let c=e[i]?e[i].index:void 0,u=e[d-1]?.index;return!c&&u||c&&u&&u>c?[u,d-1]:[c,i]},a=d=>{let c=e[r]?e[r].index:void 0;if(c&&d<r)return[c,r];let u=r;for(;++u<e.length;){let p=e[u]?.index;if(!c&&p||c&&p&&p>c)return[p,u]}return[void 0,u]},l=0;for(;l<e.length;){let d=e[l].index;if([n,i]=s(l),[o,r]=a(l),ns(d,n,o))l++;else{let c=[i,l];for(;++l<e.length;){let u=e[l].index,[p,m]=s(l),[f,E]=a(l);if(ns(u,p,f))break;[n,i]=[p,m],[o,r]=[f,E],c.push(l)}c.push(r),t.push(c)}}return t},ns=(e,t,n)=>e?t&&n?t<e&&e<n:!t&&n?e<n:t&&!n?t<e:!!e:!1,os=(e,t)=>{let n=new Map;for(let o of t){let i=o.shift(),r=o.pop(),s=Pi(e[i]?.index,e[r]?.index,o.length);for(let a=0;a<o.length;a++){let l=e[o[a]];n.set(l,{index:s[a]})}}return n},hd=e=>!!e.index;P();var vd=bc(Pd(),1);import{randomInteger as dh,arrayToMap as Id,toBrandedType as Sd,isDevEnv as Md,isTestEnv as Td,toArray as ch}from"@excalidraw/common";import{isNonDeletedElement as uh}from"@excalidraw/element";import{isFrameLikeElement as ph}from"@excalidraw/element";import{getElementsInGroup as mh}from"@excalidraw/element";import{syncInvalidIndices as fh,syncMovedIndices as Ad,validateFractionalIndices as hh}from"@excalidraw/element";import{getSelectedElements as Eh}from"@excalidraw/element";import{mutateElement as gh}from"@excalidraw/element";var Dd=e=>{let t=new Map,n=[];for(let o of e)o.isDeleted||(n.push(o),t.set(o.id,o));return{elementsMap:t,elements:n}},xh=(0,vd.default)(e=>{(Md()||Td()||window?.DEBUG_FRACTIONAL_INDICES)&&hh(e,{shouldThrow:Md()||Td(),includeBoundTextValidation:!0})},1e3*60,{leading:!0,trailing:!1}),wh=e=>{let t=["includeBoundTextElement","includeElementsInFrames"],n="";for(let o of t)n+=`${o}:${e[o]?"1":"0"}`;return n},Mi=class{callbacks=new Set;nonDeletedElements=[];nonDeletedElementsMap=Sd(new Map);elements=[];nonDeletedFramesLikes=[];frames=[];elementsMap=Sd(new Map);selectedElementsCache={selectedElementIds:null,elements:null,cache:new Map};sceneNonce;getSceneNonce(){return this.sceneNonce}getNonDeletedElementsMap(){return this.nonDeletedElementsMap}getElementsIncludingDeleted(){return this.elements}getElementsMapIncludingDeleted(){return this.elementsMap}getNonDeletedElements(){return this.nonDeletedElements}getFramesIncludingDeleted(){return this.frames}constructor(t=null,n){t&&this.replaceAllElements(t,n)}getSelectedElements(t){let n=wh(t),o=t?.elements||this.nonDeletedElements;if(this.selectedElementsCache.elements===o&&this.selectedElementsCache.selectedElementIds===t.selectedElementIds){let r=this.selectedElementsCache.cache.get(n);if(r)return r}else t?.elements==null&&this.selectedElementsCache.cache.clear();let i=Eh(o,{selectedElementIds:t.selectedElementIds},t);return t?.elements==null&&(this.selectedElementsCache.selectedElementIds=t.selectedElementIds,this.selectedElementsCache.elements=this.nonDeletedElements,this.selectedElementsCache.cache.set(n,i)),i}getNonDeletedFramesLikes(){return this.nonDeletedFramesLikes}getElement(t){return this.elementsMap.get(t)||null}getNonDeletedElement(t){let n=this.getElement(t);return n&&uh(n)?n:null}mapElements(t){let n=!1,o=this.elements.map(i=>{let r=t(i);return r!==i&&(n=!0),r});return n&&this.replaceAllElements(o),n}replaceAllElements(t,n){let o=ch(t),i=[];n?.skipValidation||xh(o),this.elements=fh(o),this.elementsMap.clear(),this.elements.forEach(s=>{ph(s)&&i.push(s),this.elementsMap.set(s.id,s)});let r=Dd(this.elements);this.nonDeletedElements=r.elements,this.nonDeletedElementsMap=r.elementsMap,this.frames=i,this.nonDeletedFramesLikes=Dd(this.frames).elements,this.triggerUpdate()}triggerUpdate(){this.sceneNonce=dh();for(let t of Array.from(this.callbacks))t()}onUpdate(t){if(this.callbacks.has(t))throw new Error;return this.callbacks.add(t),()=>{if(!this.callbacks.has(t))throw new Error;this.callbacks.delete(t)}}destroy(){this.elements=[],this.nonDeletedElements=[],this.nonDeletedFramesLikes=[],this.frames=[],this.elementsMap.clear(),this.selectedElementsCache.selectedElementIds=null,this.selectedElementsCache.elements=null,this.selectedElementsCache.cache.clear(),this.callbacks.clear()}insertElementAtIndex(t,n){if(!Number.isFinite(n)||n<0)throw new Error("insertElementAtIndex can only be called with index >= 0");let o=[...this.elements.slice(0,n),t,...this.elements.slice(n)];Ad(o,Id([t])),this.replaceAllElements(o)}insertElementsAtIndex(t,n){if(!t.length)return;if(!Number.isFinite(n)||n<0)throw new Error("insertElementAtIndex can only be called with index >= 0");let o=[...this.elements.slice(0,n),...t,...this.elements.slice(n)];Ad(o,Id(t)),this.replaceAllElements(o)}insertElement=t=>{let n=t.frameId?this.getElementIndex(t.frameId):this.elements.length;this.insertElementAtIndex(t,n)};insertElements=t=>{if(!t.length)return;let n=t[0]?.frameId?this.getElementIndex(t[0].frameId):this.elements.length;this.insertElementsAtIndex(t,n)};getElementIndex(t){return this.elements.findIndex(n=>n.id===t)}getContainerElement=t=>t&&t.containerId&&this.getElement(t.containerId)||null;getElementsFromId=t=>{let n=this.getNonDeletedElementsMap(),o=n.get(t);return o?[o]:mh(n,t)};mutateElement(t,n,o={informMutation:!0,isDragging:!1}){let i=this.getNonDeletedElementsMap(),{version:r}=t,{version:s}=gh(t,i,n,o);return this.elementsMap.has(t.id)&&r!==s&&o.informMutation&&this.triggerUpdate(),t}};var F=class e{constructor(t,n){this.deleted=t;this.inserted=n}static create(t,n,o,i){let r=o&&i!=="inserted"?o(t,"deleted"):t,s=o&&i!=="deleted"?o(n,"inserted"):n;return new e(r,s)}static calculate(t,n,o,i){if(t===n)return e.empty();let r={},s={};for(let d of this.getDifferences(t,n))r[d]=t[d],s[d]=n[d];let[a,l]=i?i(r,s):[r,s];return e.create(a,l,o)}static empty(){return new e({},{})}static isEmpty(t){return!Object.keys(t.deleted).length&&!Object.keys(t.inserted).length}static merge(t,n,o=e.empty()){return e.create({...t.deleted,...n.deleted,...o.deleted},{...t.inserted,...n.inserted,...o.inserted})}static mergeObjects(t,n,o={}){let i={...t};for(let r of Object.keys(o))delete i[r];return{...i,...n}}static mergeArrays(t,n,o,i){return Object.values(e.mergeObjects(Ot(t??[],i),Ot(n??[],i),Ot(o??[],i)))}static diffObjects(t,n,o,i){if(!t[o]&&!n[o])return;let r=t[o]!==null&&typeof t[o]=="object",s=n[o]!==null&&typeof n[o]=="object";if(r||s){let a=t[o]??{},l=n[o]??{},d=e.getLeftDifferences(a,l).reduce((u,p)=>(u[p]=i(a[p]),u),{}),c=e.getRightDifferences(a,l).reduce((u,p)=>(u[p]=i(l[p]),u),{});Object.keys(d).length||Object.keys(c).length?(Reflect.set(t,o,d),Reflect.set(n,o,c)):(Reflect.deleteProperty(t,o),Reflect.deleteProperty(n,o))}else t[o]===n[o]&&(Reflect.deleteProperty(t,o),Reflect.deleteProperty(n,o))}static diffArrays(t,n,o,i){if(!(!t[o]&&!n[o])&&(Array.isArray(t[o])||Array.isArray(n[o]))){let r=Array.isArray(t[o])?t[o]:[],s=Array.isArray(n[o])?n[o]:[],a=Ot(e.getLeftDifferences(Ot(r,i),Ot(s,i)),d=>d),l=Ot(e.getRightDifferences(Ot(r,i),Ot(s,i)),d=>d);if(Object.keys(a).length||Object.keys(l).length){let d=r.filter(u=>a[i?i(u):String(u)]),c=s.filter(u=>l[i?i(u):String(u)]);Reflect.set(t,o,d),Reflect.set(n,o,c)}else Reflect.deleteProperty(t,o),Reflect.deleteProperty(n,o)}}static isLeftDifferent(t,n,o=!1){return!!this.distinctKeysIterator("left",t,n,o).next().value}static isRightDifferent(t,n,o=!1){return!!this.distinctKeysIterator("right",t,n,o).next().value}static isInnerDifferent(t,n,o=!1){return!!!!this.distinctKeysIterator("inner",t,n,o).next().value}static isDifferent(t,n,o=!1){return!!!!this.distinctKeysIterator("full",t,n,o).next().value}static getLeftDifferences(t,n,o=!1){return Array.from(this.distinctKeysIterator("left",t,n,o)).sort()}static getRightDifferences(t,n,o=!1){return Array.from(this.distinctKeysIterator("right",t,n,o)).sort()}static getInnerDifferences(t,n,o=!1){return Array.from(this.distinctKeysIterator("inner",t,n,o)).sort()}static getDifferences(t,n,o=!1){return Array.from(this.distinctKeysIterator("full",t,n,o)).sort()}static*distinctKeysIterator(t,n,o,i=!1){if(n===o)return;let r=[];t==="left"?r=Object.keys(n):t==="right"?r=Object.keys(o):t==="inner"?r=Object.keys(n).filter(s=>s in o):t==="full"?r=Array.from(new Set([...Object.keys(n),...Object.keys(o)])):Cd(t,`Unknown distinctKeysIterator's join param "${t}"`,!0);for(let s of r){let a=n[s],l=o[s];if(a!==l){if(!i&&typeof a=="object"&&typeof l=="object"&&a!==null&&l!==null&&Gd(a,l))continue;yield s}}}},en=class e{constructor(t){this.delta=t}static create(t){return new e(t)}static calculate(t,n){let o=F.calculate(t,n,e.orderAppStateKeys,e.postProcess);return new e(o)}static restore(t){let{delta:n}=t;return new e(n)}static empty(){return new e(F.create({},{}))}inverse(){let t=F.create(this.delta.inserted,this.delta.deleted);return new e(t)}squash(t){if(t.isEmpty())return this;let n=F.mergeObjects(this.delta.deleted.selectedElementIds??{},t.delta.deleted.selectedElementIds??{}),o=F.mergeObjects(this.delta.inserted.selectedElementIds??{},t.delta.inserted.selectedElementIds??{}),i=F.mergeObjects(this.delta.deleted.selectedGroupIds??{},t.delta.deleted.selectedGroupIds??{}),r=F.mergeObjects(this.delta.inserted.selectedGroupIds??{},t.delta.inserted.selectedGroupIds??{}),s=F.mergeObjects(this.delta.deleted.lockedMultiSelections??{},t.delta.deleted.lockedMultiSelections??{}),a=F.mergeObjects(this.delta.inserted.lockedMultiSelections??{},t.delta.inserted.lockedMultiSelections??{}),l={},d={};return(Object.keys(n).length||Object.keys(o).length)&&(d.selectedElementIds=n,l.selectedElementIds=o),(Object.keys(i).length||Object.keys(r).length)&&(d.selectedGroupIds=i,l.selectedGroupIds=r),(Object.keys(s).length||Object.keys(a).length)&&(d.lockedMultiSelections=s,l.lockedMultiSelections=a),this.delta=F.merge(this.delta,t.delta,F.create(d,l)),this}applyTo(t,n){try{let{selectedElementIds:o={},selectedGroupIds:i={},lockedMultiSelections:r={}}=this.delta.deleted,{selectedElementIds:s={},selectedGroupIds:a={},lockedMultiSelections:l={},selectedLinearElement:d,...c}=this.delta.inserted,u=F.mergeObjects(t.selectedElementIds,s,o),p=F.mergeObjects(t.selectedGroupIds,a,i),m=F.mergeObjects(t.lockedMultiSelections,l,r),f=d&&n.has(d.elementId)?new U(n.get(d.elementId),n,d.isEditing):null,E={...t,...c,selectedElementIds:u,selectedGroupIds:p,lockedMultiSelections:m,selectedLinearElement:typeof d<"u"?f:t.selectedLinearElement},h=this.filterInvisibleChanges(t,E,n);return[E,h]}catch(o){if(console.error("Couldn't apply appstate change",o),rn()||on())throw o;return[t,!1]}}isEmpty(){return F.isEmpty(this.delta)}filterInvisibleChanges(t,n,o){let i=Rn(t),r=Rn(n),s=F.isRightDifferent(e.stripElementsProps(i),e.stripElementsProps(r)),a=F.isRightDifferent(e.stripStandaloneProps(i),e.stripStandaloneProps(r));if(!s&&!a)return!1;let l={value:s};if(a){let d=F.getRightDifferences(e.stripStandaloneProps(i),e.stripStandaloneProps(r)),c=new Set;(d.includes("editingGroupId")||d.includes("selectedGroupIds"))&&(c=xl(o));for(let u of d)switch(u){case"selectedElementIds":n[u]=e.filterSelectedElements(n[u],o,l);break;case"selectedGroupIds":n[u]=e.filterSelectedGroups(n[u],c,l);break;case"croppingElementId":{let x=n[u];if(!x)l.value=!0;else{let y=o.get(x);y&&!y.isDeleted?l.value=!0:n[u]=null}break}case"editingGroupId":let p=n[u];p?c.has(p)?l.value=!0:n[u]=null:l.value=!0;break;case"selectedLinearElement":let m=n[u];if(!m)l.value=!0;else{let x=o.get(m.elementId);x&&!x.isDeleted?l.value=!0:n[u]=null}break;case"lockedMultiSelections":let f=t[u]||{},E=n[u]||{};Gd(f,E)||(l.value=!0);break;case"activeLockedId":let h=t[u]||null,g=n[u]||null;h!==g&&(l.value=!0);break;default:Cd(u,`Unknown ObservedElementsAppState's key "${u}"`,!0)}}return l.value}static filterSelectedElements(t,n,o){let i=Object.keys(t);if(!i.length)return o.value=!0,t;let r={...t};for(let s of i){let a=n.get(s);a&&!a.isDeleted?o.value=!0:delete r[s]}return r}static filterSelectedGroups(t,n,o){if(!Object.keys(t).length)return o.value=!0,t;let r={...t};for(let s of Object.keys(r))n.has(s)?o.value=!0:delete r[s];return r}static stripElementsProps(t){let{editingGroupId:n,selectedGroupIds:o,selectedElementIds:i,selectedLinearElement:r,croppingElementId:s,lockedMultiSelections:a,activeLockedId:l,...d}=t;return d}static stripStandaloneProps(t){let{name:n,viewBackgroundColor:o,...i}=t;return i}static postProcess(t,n){try{F.diffObjects(t,n,"selectedElementIds",o=>!0),F.diffObjects(t,n,"selectedGroupIds",o=>o??!1),F.diffObjects(t,n,"lockedMultiSelections",o=>o??{})}catch(o){if(console.error("Couldn't postprocess appstate change deltas."),rn()||on())throw o}finally{return[t,n]}}static orderAppStateKeys(t){let n={};for(let o of Object.keys(t).sort())n[o]=t[o];return n}},tn=class e{constructor(t,n,o){this.added=t;this.removed=n;this.updated=o}static create(t,n,o,i={shouldRedistribute:!1}){let r;if(i.shouldRedistribute){let s={},a={},l={},d=[...Object.entries(t),...Object.entries(n),...Object.entries(o)];for(let[c,u]of d)this.satisfiesAddition(u)?s[c]=u:this.satisfiesRemoval(u)?a[c]=u:l[c]=u;r=new e(s,a,l)}else r=new e(t,n,o);return(rn()||on())&&(e.validate(r,"added",this.satisfiesAddition),e.validate(r,"removed",this.satisfiesRemoval),e.validate(r,"updated",this.satisfiesUpdate)),r}static restore(t){let{added:n,removed:o,updated:i}=t;return e.create(n,o,i)}static satisfiesAddition=({deleted:t,inserted:n})=>t.isDeleted===!0&&!n.isDeleted;static satisfiesRemoval=({deleted:t,inserted:n})=>!t.isDeleted&&n.isDeleted===!0;static satisfiesUpdate=({deleted:t,inserted:n})=>!!t.isDeleted==!!n.isDeleted;static satisfiesCommmonInvariants=({deleted:t,inserted:n})=>!!(Number.isInteger(t.version)&&Number.isInteger(n.version)&&t.version>=0&&n.version>=0&&t.version!==n.version);static satisfiesUniqueInvariants=(t,n)=>{let{added:o,removed:i,updated:r}=t;return[o[n],i[n],r[n]].filter(Boolean).length===1};static validate(t,n,o){for(let[i,r]of Object.entries(t[n]))if(!this.satisfiesCommmonInvariants(r)||!this.satisfiesUniqueInvariants(t,i)||!o(r))throw console.error(`Broken invariant for "${n}" delta, element "${i}", delta:`,r),new Error(`ElementsDelta invariant broken for element "${i}".`)}static calculate(t,n){if(t===n)return e.empty();let o={},i={},r={};for(let s of t.values())if(!n.get(s.id)){let l={...s},d={isDeleted:!0,version:s.version+1,versionNonce:Ld()},c=F.create(l,d,e.stripIrrelevantProps);s.isDeleted?r[s.id]=c:i[s.id]=c}for(let s of n.values()){let a=t.get(s.id);if(!a){let l={isDeleted:!0,version:s.version-1,versionNonce:Ld()},d={...s},c=F.create(l,d,e.stripIrrelevantProps);s.isDeleted?r[s.id]=c:o[s.id]=c;continue}if(a.versionNonce!==s.versionNonce){let l=F.calculate(a,s,e.stripIrrelevantProps,e.postProcess);if(typeof a.isDeleted=="boolean"&&typeof s.isDeleted=="boolean"&&a.isDeleted!==s.isDeleted){a.isDeleted&&!s.isDeleted?o[s.id]=l:i[s.id]=l;continue}r[s.id]=l}}return e.create(o,i,r)}static empty(){return e.create({},{},{})}inverse(){let t=r=>{let s={};for(let[a,{inserted:l,deleted:d}]of Object.entries(r))s[a]=F.create({...l},{...d});return s},n=t(this.added),o=t(this.removed),i=t(this.updated);return e.create(o,n,i)}isEmpty(){return Object.keys(this.added).length===0&&Object.keys(this.removed).length===0&&Object.keys(this.updated).length===0}applyLatestChanges(t,n,o){let i=(d,c)=>(u,p)=>{let m;switch(p){case"deleted":m=d;break;case"inserted":m=c;break}if(!m)return console.error("Element not found when trying to apply latest changes"),u;let f={};for(let E of Object.keys(u))switch(E){case"boundElements":f[E]=u[E];break;default:f[E]=m[E]}return f},r=d=>{let c={};for(let[u,p]of Object.entries(d)){let m=t.get(u),f=n.get(u),E=null;m||f?E=F.create(p.deleted,p.inserted,i(m,f),o):E=p,F.isInnerDifferent(E.deleted,E.inserted)&&(c[u]=E)}return c},s=r(this.added),a=r(this.removed),l=r(this.updated);return e.create(s,a,l,{shouldRedistribute:!0})}applyTo(t,n=nn.empty().elements,o){let i=new Map(t),r,s={containsVisibleDifference:!1,containsZindexDifference:!1,applyDirection:void 0};try{let a=e.createApplier(t,i,n,s,o),l=a(this.added),d=a(this.removed),c=a(this.updated),u=this.resolveConflicts(t,i,s.applyDirection);r=new Map([...l,...d,...c,...u])}catch(a){if(console.error("Couldn't apply elements delta",a),rn()||on())throw a;return[t,!0]}try{i=e.reorderElements(i,r,s),e.redrawElements(i,r)}catch(a){if(console.error("Couldn't mutate elements after applying elements change",a),rn()||on())throw a}finally{return[i,s.containsVisibleDifference]}}squash(t){if(t.isEmpty())return this;let{added:n,removed:o,updated:i}=t,r=(s,a)=>{let l=F.mergeArrays(s.deleted.boundElements??[],a.deleted.boundElements??[],void 0,c=>c.id)??[],d=F.mergeArrays(s.inserted.boundElements??[],a.inserted.boundElements??[],void 0,c=>c.id)??[];if(!(!l.length&&!d.length))return F.create({boundElements:l},{boundElements:d})};for(let[s,a]of Object.entries(n)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.added[s]=a;else{let d=r(l,a);delete this.removed[s],delete this.updated[s],this.added[s]=F.merge(l,a,d)}}for(let[s,a]of Object.entries(o)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.removed[s]=a;else{let d=r(l,a);delete this.added[s],delete this.updated[s],this.removed[s]=F.merge(l,a,d)}}for(let[s,a]of Object.entries(i)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.updated[s]=a;else{let d=r(l,a),c=F.merge(l,a,d);l===this.added[s]?this.added[s]=c:l===this.removed[s]?this.removed[s]=c:this.updated[s]=c}}return(rn()||on())&&(e.validate(this,"added",e.satisfiesAddition),e.validate(this,"removed",e.satisfiesRemoval),e.validate(this,"updated",e.satisfiesUpdate)),this}static createApplier=(t,n,o,i,r)=>s=>{let a=e.createGetter(n,o,i);return Object.entries(s).reduce((l,[d,c])=>{let u=a(d,c.inserted);if(u){let p=e.applyDelta(u,c,i,r);if(n.set(p.id,p),l.set(p.id,p),!i.applyDirection){let m=t.get(d);m&&(i.applyDirection=m.version>p.version?"backward":"forward")}}return l},new Map)};static createGetter=(t,n,o)=>(i,r)=>{let s=t.get(i);return s||(s=n.get(i),s?(o.containsZindexDifference=!0,(!r.isDeleted||r.isDeleted&&!s.isDeleted)&&(o.containsVisibleDifference=!0)):s=ge({id:i,version:1},{...r})),s};static applyDelta(t,n,o,i){let r={};for(let s of Object.keys(n.inserted)){if(s==="boundElements"||i?.excludedProperties?.has(s))continue;let a=n.inserted[s];Reflect.set(r,s,a)}if(n.deleted.boundElements?.length||n.inserted.boundElements?.length){let s=F.mergeArrays(t.boundElements,n.inserted.boundElements,n.deleted.boundElements,a=>a.id);Object.assign(r,{boundElements:s})}if(!o.containsVisibleDifference){let{index:s,...a}=r,l=e.checkForVisibleDifference(t,a);o.containsVisibleDifference=l}return o.containsZindexDifference||(o.containsZindexDifference=n.deleted.index!==n.inserted.index),ge(t,r,!0)}static checkForVisibleDifference(t,n){return t.isDeleted&&n.isDeleted!==!1?!1:t.isDeleted&&n.isDeleted===!1||t.isDeleted===!1&&n.isDeleted?!0:F.isRightDifferent(t,n)}resolveConflicts(t,n,o="forward"){let i=new Map,r=(a,l)=>{let d=n.get(a.id);if(!d)return;let c=t.get(a.id),u=o==="forward"?d.version+1:d.version-1,p=l,m;c===d?m=ge(d,{...p,version:u},!0):m=be(d,n,{...p,version:c?.version!==d.version?d.version:u}),i.set(m.id,m),n.set(m.id,m)};for(let a of Object.keys(this.removed))e.unbindAffected(t,n,a,r);for(let a of Object.keys(this.added))e.rebindAffected(t,n,a,r);for(let[a]of Array.from(Object.entries(this.updated)).filter(([l,d])=>Object.keys({...d.deleted,...d.inserted}).find(c=>Qa.has(c)))){let l=n.get(a);!l||l.isDeleted||e.rebindAffected(t,n,a,r)}let s=new Map(Array.from(t).filter(([a])=>i.has(a)));return this.squash(e.calculate(s,i)),i}static unbindAffected(t,n,o,i){let r=()=>t.get(o),s=()=>n.get(o);$t.unbindAffected(n,r(),i),$t.unbindAffected(n,s(),i),Zt.unbindAffected(n,r(),i),Zt.unbindAffected(n,s(),i)}static rebindAffected(t,n,o,i){let r=()=>t.get(o),s=()=>n.get(o);$t.unbindAffected(n,r(),i),$t.rebindAffected(n,s(),i),Zt.unbindAffected(n,r(),(a,l)=>{oe(a)&&i(a,l)}),Zt.rebindAffected(n,s(),i)}static redrawElements(t,n){try{let o=new Mi(t,{skipValidation:!0});e.redrawTextBoundingBoxes(o,n),e.redrawBoundArrows(o,n)}catch(o){if(console.error("Couldn't redraw elements",o),rn()||on())throw o}finally{return t}}static redrawTextBoundingBoxes(t,n){let o=t.getNonDeletedElementsMap(),i=new Map;for(let r of n.values()){if(ce(r)){let{containerId:s}=r,a=s?o.get(s):void 0;a&&i.set(a.id,{container:a,boundText:r})}if(st(r)){let s=St(r),a=s?o.get(s):void 0;a&&i.set(r.id,{container:r,boundText:a})}}for(let{container:r,boundText:s}of i.values())r.isDeleted||s.isDeleted||ba(s,r,t)}static redrawBoundArrows(t,n){for(let o of n.values())!o.isDeleted&&Le(o)&&Ue(o,t,{changedElements:n})}static reorderElements(t,n,o){if(!o.containsZindexDifference)return t;let i=Array.from(t.values()),r=Ed([...i]),s=F.getRightDifferences(i,r,!0).reduce((a,l)=>{let d=i[Number(l)];return d&&n.has(d.id)&&a.set(d.id,d),a},new Map);return!o.containsVisibleDifference&&s.size&&(o.containsVisibleDifference=!0),yh(mo(r,s))}static postProcess(t,n){try{F.diffArrays(t,n,"boundElements",r=>r.id);let o=t.points??[],i=n.points??[];F.isDifferent(o,i)||(Reflect.deleteProperty(t,"points"),Reflect.deleteProperty(n,"points"))}catch(o){if(console.error("Couldn't postprocess elements delta."),rn()||on())throw o}finally{return[t,n]}}static stripIrrelevantProps(t){let{id:n,updated:o,...i}=t;return i}};P();var mP=(e,t,n,o)=>{let[i,r,s,a]=n.axis==="x"?["minX","midX","maxX","width"]:["minY","midY","maxY","height"],l=Bt(e),d=pi(e,t,o).map(m=>[m,Bt(m)]).sort((m,f)=>m[1][r]-f[1][r]),c=0;for(let m of d)c+=m[1][a];let u=(l[a]-c)/(d.length-1);if(u<0){let m=d.findIndex(g=>g[1][i]===l[i]),f=d.findIndex(g=>g[1][s]===l[s]),E=(d[f][1][r]-d[m][1][r])/(d.length-1),h=d[m][1][r];return d.flatMap(([g,x],y)=>{let b={x:0,y:0};return y!==m&&y!==f&&(h+=E,b[n.axis]=h-x[r]),g.map(w=>ge(w,{x:w.x+b.x,y:w.y+b.y}))})}let p=l[i];return d.flatMap(([m,f])=>{let E={x:0,y:0};return E[n.axis]=p-f[i],p+=u,p+=f[a],m.map(h=>ge(h,{x:h.x+E.x,y:h.y+E.y}))})};P();import{TEXT_AUTOWRAP_THRESHOLD as bh,getGridPoint as Ph,getFontString as Ih}from"@excalidraw/common";var IP=(e,t,n,o,i,r)=>{if(t.length===1&&B(t[0])&&(t[0].startBinding||t[0].endBinding))return;let s=t.filter(u=>{if(B(u)&&u.startBinding&&u.endBinding){let p=t.find(f=>f.id===u.startBinding?.elementId),m=t.find(f=>f.id===u.endBinding?.elementId);return p&&m}return!0}),a=new Set(s),l=s.filter(u=>q(u)).map(u=>u.id);if(l.length>0)for(let u of o.getNonDeletedElements())u.frameId!==null&&l.includes(u.frameId)&&a.add(u);let d=[];for(let u of a){let p=e.originalElements.get(u.id);if(!p)return;d.push(p)}let c=Sh(Xe(d),n,i,r);a.forEach(u=>{if(Bd(e,u,o,c),!_(u)){let p=W(u,o.getNonDeletedElementsMap());p&&Bd(e,p,o,c),Ue(u,o,{simultaneouslyUpdated:Array.from(a)})}})},Sh=(e,t,n,o)=>{let[i,r]=e,s=i+t.x+n.x,a=r+t.y+n.y;if(n.x===0||n.y===0){let[l,d]=Ph(i+t.x,r+t.y,o);n.x===0&&(s=l),n.y===0&&(a=d)}return{x:s-i,y:a-r}},Bd=(e,t,n,o)=>{let i=e.originalElements.get(t.id)??t,r=i.x+o.x,s=i.y+o.y;n.mutateElement(t,{x:r,y:s})},SP=(e,t,n)=>{let[o,i]=Xe(e);return[t-o,n-i]},MP=({newElement:e,elementType:t,originX:n,originY:o,x:i,y:r,width:s,height:a,shouldMaintainAspectRatio:l,shouldResizeFromCenter:d,zoom:c,scene:u,widthAspectRatio:p=null,originOffset:m=null,informMutation:f=!0})=>{l&&e.type!=="selection"&&(p?a=s/p:(Math.abs(r-o)>Math.abs(i-n)?{width:s,height:a}=$r(t,a,i<n?-s:s):{width:s,height:a}=$r(t,s,r<o?-a:a),a<0&&(a=-a)));let E=i<n?n-s:n,h=r<o?o-a:o;d&&(s+=s,a+=a,E=n-s/2,h=o-a/2);let g=null;if(oe(e)){a=e.height;let x=zo(Ih({fontSize:e.fontSize,fontFamily:e.fontFamily}),e.lineHeight);s=Math.max(s,x),Math.abs(i-n)>bh/c&&(g={autoResize:!1}),h=o,d&&(E=n-s/2)}if(s!==0&&a!==0){let x=null;we(e)&&(x={initialWidth:s,initialHeight:a}),u.mutateElement(e,{x:E+(m?.x??0),y:h+(m?.y??0),width:s,height:a,...g,...x},{informMutation:f,isDragging:!1})}};P();import{ELEMENT_LINK_KEY as Ti,normalizeLink as kd}from"@excalidraw/common";var LP=(e,t)=>{let n=window.location.href;try{let o=new URL(n);return o.searchParams.set(Ti,e),kd(o.toString())}catch(o){console.error(o)}return kd(n)},CP=(e,t)=>{if(e.length>0&&Mh(e)){if(e.length===1)return{id:e[0].id,type:"element"};if(e.length>1){let n=Object.keys(t.selectedGroupIds)[0];return n?{id:n,type:"group"}:{id:e[0].groupIds[0],type:"group"}}}return null},Mh=e=>!!(e.length===1||e.length>1&&wl(e)),GP=e=>{try{let t=new URL(e);return t.searchParams.has(Ti)&&t.host===window.location.host}catch{return!1}},BP=e=>{try{let{searchParams:t}=new URL(e);if(t.has(Ti))return t.get(Ti)}catch{}return null};P();import{FONT_FAMILY as Fh,VERTICAL_ALIGN as Nh,escapeDoubleQuotes as ss,getFontString as Hh}from"@excalidraw/common";P();import{DEFAULT_ELEMENT_PROPS as sn,DEFAULT_FONT_FAMILY as Th,DEFAULT_FONT_SIZE as Ah,DEFAULT_TEXT_ALIGN as Dh,DEFAULT_VERTICAL_ALIGN as vh,VERTICAL_ALIGN as Lh,randomInteger as Ch,randomId as Gh,getFontString as Ai,getUpdatedTimestamp as Bh,getLineHeight as kh}from"@excalidraw/common";var nt=(e,{x:t,y:n,strokeColor:o=sn.strokeColor,backgroundColor:i=sn.backgroundColor,fillStyle:r=sn.fillStyle,strokeWidth:s=sn.strokeWidth,strokeStyle:a=sn.strokeStyle,roughness:l=sn.roughness,opacity:d=sn.opacity,width:c=0,height:u=0,angle:p=0,groupIds:m=[],frameId:f=null,index:E=null,roundness:h=null,boundElements:g=null,link:x=null,locked:y=sn.locked,...b})=>((t<-1e6||t>1e6||n<-1e6||n>1e6||c<-1e6||c>1e6||u<-1e6||u>1e6)&&console.error("New element size or position is too large",{x:t,y:n,width:c,height:u,points:b.points}),{id:b.id||Gh(),type:e,x:t,y:n,width:c,height:u,angle:p,strokeColor:o,backgroundColor:i,fillStyle:r,strokeWidth:s,strokeStyle:a,roughness:l,opacity:d,groupIds:m,frameId:f,index:E,roundness:h,seed:b.seed??Ch(),version:b.version||1,versionNonce:b.versionNonce??0,isDeleted:!1,boundElements:g,updated:Bh(),link:x,locked:y,customData:b.customData}),rs=e=>nt(e.type,e),UP=e=>nt("embeddable",e),XP=e=>({...nt("iframe",e)}),jP=e=>ge({...nt("frame",e),type:"frame",name:e?.name||null},{}),WP=e=>ge({...nt("magicframe",e),type:"magicframe",name:e?.name||null},{}),Od=(e,t)=>({x:e.textAlign==="center"?t.width/2:e.textAlign==="right"?t.width:0,y:e.verticalAlign==="middle"?t.height/2:0}),Rd=e=>{let t=e.fontFamily||Th,n=e.fontSize||Ah,o=e.lineHeight||kh(t),i=or(e.text),r=Je(i,Ai({fontFamily:t,fontSize:n}),o),s=e.textAlign||Dh,a=e.verticalAlign||vh,l=Od({textAlign:s,verticalAlign:a},r),d={...nt("text",e),text:i,fontSize:n,fontFamily:t,textAlign:s,verticalAlign:a,x:e.x-l.x,y:e.y-l.y,width:r.width,height:r.height,containerId:e.containerId||null,originalText:e.originalText??i,autoResize:e.autoResize??!0,lineHeight:o};return ge(d,{})},Oh=(e,t,n)=>{let{width:o,height:i}=Je(n,Ai(e),e.lineHeight);e.autoResize||(o=e.width);let{textAlign:r,verticalAlign:s}=e,a,l;if(r==="center"&&s===Lh.MIDDLE&&!e.containerId&&e.autoResize){let d=Je(e.text,Ai(e),e.lineHeight),c=Od(e,{width:o-d.width,height:i-d.height});a=e.x-c.x,l=e.y-c.y}else{let[d,c,u,p]=Y(e,t),[m,f,E,h]=zt(e,o,i,!1),g=(d-m)/2,x=(c-f)/2,y=(u-E)/2,b=(p-h)/2;[a,l]=Rh({s:!0,e:r==="center"||r==="left",w:r==="center"||r==="right"},e.x,e.y,e.angle,g,x,y,b)}return{width:o,height:i,x:Number.isFinite(a)?a:e.x,y:Number.isFinite(l)?l:e.y}},Rh=(e,t,n,o,i,r,s,a)=>{let l=Math.cos(o),d=Math.sin(o);return e.e&&e.w?t+=i+s:e.e?(t+=i*(1+l),n+=i*d,t+=s*(1-l),n+=s*-d):e.w&&(t+=i*(1-l),n+=i*-d,t+=s*(1+l),n+=s*d),e.n&&e.s?n+=r+a:e.n?(t+=r*d,n+=r*(1-l),t+=a*-d,n+=a*(1+l)):e.s&&(t+=r*-d,n+=r*(1+l),t+=a*d,n+=a*(1-l)),[t,n]},VP=(e,t,n,o=e.text)=>{if(e.isDeleted)return;(t||!e.autoResize)&&(o=It(o,Ai(e),t?et(t,e):e.width));let i=Oh(e,n,o);return{text:o,...i}},$P=e=>({...nt(e.type,e),points:e.points||[],pressures:e.pressures||[],simulatePressure:e.simulatePressure,lastCommittedPoint:null}),ZP=e=>{let t={...nt(e.type,e),points:e.points||[],lastCommittedPoint:null,startBinding:null,endBinding:null,startArrowhead:null,endArrowhead:null};return bt(t)?{...t,polygon:e.polygon??!1}:t},Fd=e=>e.elbowed?{...nt(e.type,e),points:e.points||[],lastCommittedPoint:null,startBinding:null,endBinding:null,startArrowhead:e.startArrowhead||null,endArrowhead:e.endArrowhead||null,elbowed:!0,fixedSegments:e.fixedSegments||[],startIsSpecial:!1,endIsSpecial:!1}:{...nt(e.type,e),points:e.points||[],lastCommittedPoint:null,startBinding:null,endBinding:null,startArrowhead:e.startArrowhead||null,endArrowhead:e.endArrowhead||null,elbowed:!1},qP=e=>({...nt("image",e),strokeColor:"transparent",status:e.status??"pending",fileId:e.fileId??null,scale:e.scale??[1,1],crop:e.crop??null});var ft=new Map,zh=/^(?:http(?:s)?:\/\/)?(?:www\.)?youtu(?:be\.com|\.be)\/(embed\/|watch\?v=|shorts\/|playlist\?list=|embed\/videoseries\?list=)?([a-zA-Z0-9_-]+)/,_h=/^(?:http(?:s)?:\/\/)?(?:(?:w){3}\.)?(?:player\.)?vimeo\.com\/(?:video\/)?([^?\s]+)(?:\?.*)?$/,Yh=/^https:\/\/(?:www\.)?figma\.com/,Nd=/^https:\/\/gist\.github\.com\/([\w_-]+)\/([\w_-]+)/,Uh=/^<script[\s\S]*?\ssrc=["'](https:\/\/gist\.github\.com\/.*?)\.js["']/i,Xh=/^(?:https?:\/\/)?forms\.microsoft\.com\//,Hd=/(?:https?:\/\/)?(?:(?:w){3}\.)?(?:twitter|x)\.com\/[^/]+\/status\/(\d+)/,jh=/^<blockquote[\s\S]*?\shref=["'](https?:\/\/(?:twitter|x)\.com\/[^"']*)/i,Wh=/^https:\/\/(?:www\.)?val\.town\/(v|embed)\/[a-zA-Z_$][0-9a-zA-Z_$]+\.[a-zA-Z_$][0-9a-zA-Z_$]+/,Vh=/^<(?:iframe|blockquote)[\s\S]*?\s(?:src|href)=["']([^"']*)["'][\s\S]*?>$/i,zd=/giphy.com\/(?:clips|embed|gifs)\/[a-zA-Z0-9]*?-?([a-zA-Z0-9]+)(?:[^a-zA-Z0-9]|$)/,_d=/^(?:http(?:s)?:\/\/)?(?:www\.)?reddit\.com\/r\/([a-zA-Z0-9_]+)\/comments\/([a-zA-Z0-9_]+)\/([a-zA-Z0-9_]+)\/?(?:\?[^#\s]*)?(?:#[^\s]*)?$/,$h=/^<blockquote[\s\S]*?\shref=["'](https?:\/\/(?:www\.)?reddit\.com\/[^"']*)/i,Zh=e=>{let t;try{let s=new URL(e.startsWith("http")?e:`https://${e}`);t=s.searchParams.get("t")||s.searchParams.get("start")}catch{t=e.match(/[?&#](?:t|start)=([^&#\s]+)/)?.[1]}if(!t)return 0;if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/);if(!n)return 0;let[,o="0",i="0",r="0"]=n;return parseInt(o)*3600+parseInt(i)*60+parseInt(r)},ls=new Set(["youtube.com","youtu.be","vimeo.com","player.vimeo.com","figma.com","link.excalidraw.com","gist.github.com","twitter.com","x.com","*.simplepdf.eu","stackblitz.com","val.town","giphy.com","reddit.com","forms.microsoft.com"]),Yd=new Set(["youtube.com","youtu.be","vimeo.com","player.vimeo.com","figma.com","twitter.com","x.com","*.simplepdf.eu","stackblitz.com","reddit.com","forms.microsoft.com"]),as=e=>`<html><body>${e}</body></html>`,oI=e=>{if(!e)return null;if(ft.has(e))return ft.get(e);let t=e,n=Yd.has(ds(e,Yd)||""),o="generic",i={w:560,h:840},r=e.match(zh);if(r?.[2]){let d=Zh(t),c=d>0?`&start=${d}`:"",u=e.includes("shorts");switch(o="video",r[1]){case"embed/":case"watch?v=":case"shorts/":e=`https://www.youtube.com/embed/${r[2]}?enablejsapi=1${c}`;break;case"playlist?list=":case"embed/videoseries?list=":e=`https://www.youtube.com/embed/videoseries?list=${r[2]}&enablejsapi=1${c}`;break;default:e=`https://www.youtube.com/embed/${r[2]}?enablejsapi=1${c}`;break}return i=u?{w:315,h:560}:{w:560,h:315},ft.set(t,{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}}let s=e.match(_h);if(s?.[1]){let d=s?.[1],c=/^\d+$/.test(d)?void 0:new URIError("Invalid embed link format");return o="video",e=`https://player.vimeo.com/video/${d}?api=1`,i={w:560,h:315},ft.set(t,{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:i,type:o,error:c,sandbox:{allowSameOrigin:n}}}if(e.match(Yh))return o="generic",e=`https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(e)}`,i={w:550,h:550},ft.set(t,{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}};let l=e.match(Wh);if(l)return e=l[1]==="embed"?l[0]:l[0].replace("/v","/embed"),ft.set(t,{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}};if(Xh.test(e)&&!e.includes("embed=true")&&(e+=e.includes("?")?"&embed=true":"?embed=true"),Hd.test(e)){let d=e.match(Hd)[1],c=ss(`https://twitter.com/x/status/${d}`),u={type:"document",srcdoc:p=>as(`<blockquote class="twitter-tweet" data-dnt="true" data-theme="${p}"><a href="${c}"></a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>`),intrinsicSize:{w:480,h:480},sandbox:{allowSameOrigin:n}};return ft.set(t,u),u}if(_d.test(e)){let[,d,c,u]=e.match(_d),p=ss(`https://reddit.com/r/${d}/comments/${c}/${u}`),m={type:"document",srcdoc:f=>as(`<blockquote class="reddit-embed-bq" data-embed-theme="${f}"><a href="${p}"></a><br></blockquote><script async="" src="https://embed.reddit.com/widgets.js" charset="UTF-8"><\/script>`),intrinsicSize:{w:480,h:480},sandbox:{allowSameOrigin:n}};return ft.set(t,m),m}if(Nd.test(e)){let[,d,c]=e.match(Nd),u=ss(`https://gist.github.com/${d}/${c}`),p={type:"document",srcdoc:()=>as(`
21
- <script src="${u}.js"><\/script>
12
+ `),d.stack,e.map(u=>s(u)),...c),t)throw d}},_c=e=>e.sort((t,n)=>zc(t)&&zc(n)?t.index<n.index?-1:t.index>n.index?1:t.id<n.id?-1:1:1),di=(e,t)=>{try{let n=wr(e),i=zg(e,t),o=Ea(e,i),r=e.map(s=>{let a=o.get(s);return a?{...s,index:a.index}:s});Rg(r,{includeBoundTextValidation:!1,shouldThrow:!0,ignoreLogs:!0});for(let[s,{index:a}]of o)Xe(s,n,{index:a})}catch{ga(e)}return e},ga=e=>{let t=wr(e),n=Wc(e),i=Ea(e,n);for(let[o,{index:r}]of i)Xe(o,t,{index:r});return e},Hc=e=>{let t=wr(e),n=Wc(e),i=Ea(e,n);for(let[o,{index:r}]of i)t.set(o.id,Ae(o,{index:r}));return t},zg=(e,t)=>{let n=[],i=0;for(;i<e.length;)if(t.has(e[i].id)){let o=[i-1,i];for(;++i<e.length&&t.has(e[i].id);)o.push(i);o.push(i),n.push(o)}else i++;return n},Wc=e=>{let t=[],n,i,o=-1,r=0,s=d=>{let c=e[o]?e[o].index:void 0,u=e[d-1]?.index;return!c&&u||c&&u&&u>c?[u,d-1]:[c,o]},a=d=>{let c=e[r]?e[r].index:void 0;if(c&&d<r)return[c,r];let u=r;for(;++u<e.length;){let m=e[u]?.index;if(!c&&m||c&&m&&m>c)return[m,u]}return[void 0,u]},l=0;for(;l<e.length;){let d=e[l].index;if([n,o]=s(l),[i,r]=a(l),ha(d,n,i))l++;else{let c=[o,l];for(;++l<e.length;){let u=e[l].index,[m,p]=s(l),[h,f]=a(l);if(ha(u,m,h))break;[n,o]=[m,p],[i,r]=[h,f],c.push(l)}c.push(r),t.push(c)}}return t},ha=(e,t,n)=>{if(!e)return!1;try{Og(e)}catch{return!1}return t&&n?t<e&&e<n:!t&&n?e<n:t&&!n?t<e:!!e},Ea=(e,t)=>{let n=new Map;for(let i of t){let o=i.shift(),r=i.pop(),s=Fg(e[o]?.index,e[r]?.index,i.length);for(let a=0;a<i.length;a++){let l=e[i[a]];n.set(l,{index:s[a]})}}return n},zc=e=>!!e.index;var Uc=(e,t,n)=>{let i=Ot(e);for(let o of t)if(o.frameId){let r=n.get(o.id),s=n.get(o.frameId),a=r&&i.get(r);a&&Xe(a,i,{frameId:s??null})}};function Ci(e,t,n){let i=ki(t,n),o=ki(e,n);return i.some(s=>o.some(a=>Hg(s,a)))}var Yc=(e,t,n)=>Pr(Oc(e,t,n,!1)).filter(i=>!te(i)&&!i.frameId||i.frameId===t.id),ba=(e,t,n)=>wa(ue(e,n),ue(t,n)),hM=(e,t)=>{let n=Ot(e);return e.filter(i=>Ci(i,t,n))},Hn=(e,t,n)=>{let[i,o,r,s]=Z(t,n),[a,l,d,c]=tt(e);return i<=a&&o<=l&&r>=d&&s>=c},zn=(e,t,n)=>Hn([e],t,n)||Ci(e,t,n)||ba(e,t,n),gM=(e,t,n)=>{let[i,o,r,s]=Z(t,n);return _g(xa(i,o),xa(e.x,e.y),xa(r,s))},EM=(e,t,n)=>{let i=Ot(e),o=t.flatMap(r=>et(e,r));return o.length===0?!0:!!o.find(r=>Hn([r],n,i)||Ci(r,n,i))},xM=(e,t,n)=>{let i=Ot(e),o=t.flatMap(r=>et(e,r));return o.length===0?!0:o.find(r=>Hn([r],n,i)||Ci(r,n,i))===void 0},bM=e=>{let t=new Map;for(let n of e){let i=te(n)?n.id:n.frameId;i&&!t.has(i)&&t.set(i,Rn(e,i))}return t},Rn=(e,t)=>{let n=[];for(let i of e.values())i.frameId===t&&n.push(i);return n},ya=e=>e.filter(t=>te(t)),yM=e=>{let t=Ot(ya(e));return e.filter(n=>t.has(n.id)||!n.frameId||!t.has(n.frameId))},wM=(e,t,n,i)=>{let o=Rn(e,t.id),r=new Set(o),s=new Set([...Yc(e,t,i),...o.filter(p=>ba(p,t,i))]),a=o.filter(p=>!s.has(p)),l=new Set(Array.from(s).flatMap(p=>p.groupIds));for(let p of a)if(!Ci(p,t,i))p.groupIds.length===0&&r.delete(p);else if(p.groupIds.length>0)for(let h of p.groupIds)l.add(h);for(let p of a)if(p.groupIds.length>0){let h=!0;for(let f of p.groupIds)l.has(f)&&(h=!1);h&&r.delete(p)}let d=Array.from(s).filter(p=>p.groupIds.length===0);for(let p of d)r.add(p);let c=Array.from(s).filter(p=>p.groupIds.length>0),u=Wn(c),m=Lc(u,n);for(let[p,h]of Object.entries(m))if(h){let f=et(e,p);if(Hn(f,t,i))for(let g of f)r.add(g)}return[...r].filter(p=>!(V(p)&&p.containerId))},PM=(e,t,n)=>Wg(Pr(e,Yc(e,t,n)),t,n),Wg=(e,t,n)=>{let i=[],o=new Map;for(let r of e){let s=!1;if(r.groupIds.length>0){if(r.groupIds.some(a=>o.get(a)))s=!0;else{let a=new Set(r.groupIds.flatMap(l=>et(n,l)));s=!Hn(Array.from(a),t,n)}r.groupIds.forEach(a=>{o.set(a,s)})}s||i.push(r)}return i},_n=(e,t)=>e.frameId&&t.get(e.frameId)||null,SM=(e,t)=>{let n=new Set,i=Ot(e);e=Pr(e);for(let s of e)te(s)&&s.id!==t.id&&n.add(s.id);let o=new Set,r=[];for(let s of e)if(!(te(s)||s.frameId&&n.has(s.frameId)))if(s.groupIds.length){let a=s.groupIds.at(-1);if(!o.has(a)){o.add(a);let l=et(e,a);if(l.some(d=>zn(d,t,i)))for(let d of l)r.push(d)}}else zn(s,t,i)&&r.push(s);return r},Ug=e=>{let t;for(let n of e){if(te(n)||!n.frameId)return null;if(t===void 0)t=n.frameId;else if(t!==n.frameId)return null}return t??null},Yg=(e,t)=>{for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.id===t)return n;if(i.frameId===t)return n+1}return null},Xg=(e,t,n)=>{let i=Ot(e),o=Ug(t),r=new Set,s=new Set;for(let c of t)te(c)&&c.id!==n.id&&s.add(c.id);for(let c of Pr(e,t)){if(te(c)||c.frameId&&s.has(c.frameId))continue;r.add(c);let u=Q(c,i);u&&!r.has(u)&&r.add(u)}for(let c of r)c.frameId!==n.id&&Xe(c,i,{frameId:n.id});if(!r.size||o===n.id)return e;let a=Array.from(e.values()).filter(c=>!r.has(c)),l=Yg(a,n.id);if(l===null)return e;let d=[...a.slice(0,l),...r,...a.slice(l)];return di(d,Ot([...r])),Array.isArray(e)?d:new Map(d.map(c=>[c.id,c]))},Xc=(e,t)=>{let n=new Map,i=new Map;for(let o of e)if(o.frameId){n.set(o.id,o);let r=i.get(o.frameId)||[];r.push(o);let s=Q(o,t);s&&(n.set(s.id,s),r.push(s)),i.set(o.frameId,r)}for(let[,o]of n)Xe(o,t,{frameId:null})},$g=(e,t)=>{let n=Rn(e,t.id);return Xc(n,Ot(e)),e},IM=(e,t,n)=>Xg($g(e,n),t,n).slice(),MM=(e,t,n)=>{let i=n.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,elements:e}),o=new Set(i);if(t.editingGroupId)for(let a of i)a.groupIds.length===0?o.add(a):a.groupIds.flatMap(l=>et(e,l)).forEach(l=>o.add(l));let r=new Set,s=Ot(e);return o.forEach(a=>{a.frameId&&!te(a)&&!$c(a,s,t)&&r.add(a)}),r.size>0&&Xc(r,s),e},Pr=(e,t)=>{let n=new Set,i=t||e;for(let s of i.values()){let a=s.groupIds[s.groupIds.length-1];a&&n.add(a)}let o=new Set;for(let s of n)et(e,s).some(a=>te(a))&&o.add(s);let r=[];for(let s of i.values())o.has(s.groupIds[s.groupIds.length-1])||r.push(s);return r},jg=(e,t,n)=>{let i=V(e)&&_e(e,t)||e;return i.frameId&&n.selectedElementIds[i.id]&&n.selectedElementIds[i.frameId]?_n(i,t):n.selectedElementIds[i.id]&&n.selectedElementsAreBeingDragged?n.frameToHighlight:_n(i,t)},$c=(e,t,n,i)=>{let o=i?.targetFrame??jg(e,t,n);if(!o)return!1;let r=V(e)&&_e(e,t)||e,s=l=>{i?.checkedGroups&&r.groupIds.forEach(d=>{i.checkedGroups?.set(d,l)})};if(!n.selectedElementIds[r.id]||!n.selectedElementsAreBeingDragged||n.selectedElementIds[r.id]&&n.selectedElementIds[o.id])return!0;if(r.groupIds.length===0)return zn(r,o,t);for(let l of r.groupIds)if(i?.checkedGroups?.has(l))return i.checkedGroups.get(l);let a=new Set(r.groupIds.filter(l=>i?.checkedGroups?!i.checkedGroups.has(l):!0).flatMap(l=>et(t,l)));if(n.editingGroupId&&n.selectedElementsAreBeingDragged){let l=new Set(qt(t,n));if(n.frameToHighlight!==null)return!0;l.forEach(c=>{a.delete(c)})}for(let l of a)if(te(l))return s(!1),!1;for(let l of a)if(zn(l,o,t))return s(!0),!0;return!1},TM=(e,t,n,i,o)=>{if(!n.frameRendering||!n.frameRendering.clip)return!1;let r=Ci(e,t,i)||ba(e,t,i);if(r){for(let s of e.groupIds)o?.set(s,!0);return!0}if(!r&&e.groupIds.length>0&&!Hn([e],t,i)){let s=!1;if(n.selectedElementsAreBeingDragged)s=$c(e,i,n,{targetFrame:t,checkedGroups:o});else{s=e.frameId===t.id;for(let a of e.groupIds)o?.set(a,s)}for(let a of e.groupIds)o?.set(a,s);return s}return!1},Vg="Frame",Kg="AI Frame",Zg=e=>Yo(e)?Vg:Kg,AM=e=>e.name===null?Zg(e):e.name,DM=(e,t,n)=>e.filter(i=>(!i.frameId||i.frameId===t.id)&&xt(ue(i,n),ue(t,n))),vM=e=>{let t=Ot(e);return e.length>1&&e.some(n=>n.frameId&&t.has(n.frameId))};var dE=(e,t)=>ei(e)&&!t.imageCache.has(e.fileId),fo=e=>{switch(e.type){case"freedraw":return e.strokeWidth*12;case"text":return e.fontSize/2;case"arrow":return e.endArrowhead||e.endArrowhead?40:20;default:return 20}},cE=(e,t,n,i,o=1)=>{let r=(t?.opacity??100)*e.opacity/1e4*o;return(n.has(e.id)||i&&i.some(s=>s.id===e.id)||t&&n.has(t.id))&&(r*=Jg/100),r},uE=(e,t,n)=>{let r=fo(e),[s,a,l,d]=Z(e,t),c=q(e)||ye(e)?Yn(s,l):e.width,u=q(e)||ye(e)?Yn(a,d):e.height,m=c*window.devicePixelRatio+r*2,p=u*window.devicePixelRatio+r*2,h=n.value;return(m*h>32767||p*h>32767)&&(h=Math.min(32767/m,32767/p)),m*p*h*h>16777216&&(h=Math.sqrt(16777216/(m*p))),m=Math.floor(m*h),p=Math.floor(p*h),{width:m,height:p,scale:h}},qc=(e,t,n,i,o)=>{let r=document.createElement("canvas"),s=r.getContext("2d"),a=fo(e),{width:l,height:d,scale:c}=uE(e,t,n);if(!l||!d)return null;r.width=l,r.height=d;let u=-100,m=0;if(q(e)||ye(e)){let[h,f]=Z(e,t);u=e.x>h?Yn(e.x,h)*window.devicePixelRatio*c:0,m=e.y>f?Yn(e.y,f)*window.devicePixelRatio*c:0,s.translate(u,m)}s.save(),s.translate(a*c,a*c),s.scale(window.devicePixelRatio*c,window.devicePixelRatio*c);let p=xi.canvas(r);return Mr(e,p,s,i),s.restore(),{element:e,canvas:r,theme:o.theme,scale:c,zoomValue:n.value,canvasOffsetX:u,canvasOffsetY:m,containingFrameOpacity:_n(e,t)?.opacity||100,imageCrop:Fe(e)?e.crop:null}},XM=14,Qc=typeof document<"u"?document.createElement("img"):{src:""};Qc.src=`data:${Ta.svg},${encodeURIComponent('<svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="image" class="svg-inline--fa fa-image fa-w-16" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#888" d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48zM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56zM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48z"></path></svg>')}`;var Jc=typeof document<"u"?document.createElement("img"):{src:""};Jc.src=`data:${Ta.svg},${encodeURIComponent('<svg viewBox="0 0 668 668" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M464 448H48c-26.51 0-48-21.49-48-48V112c0-26.51 21.49-48 48-48h416c26.51 0 48 21.49 48 48v288c0 26.51-21.49 48-48 48ZM112 120c-30.928 0-56 25.072-56 56s25.072 56 56 56 56-25.072 56-56-25.072-56-56-56ZM64 384h384V272l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L208 320l-55.515-55.515c-4.686-4.686-12.284-4.686-16.971 0L64 336v48Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.81709 0 0 .81709 124.825 145.825)"/><path d="M256 8C119.034 8 8 119.033 8 256c0 136.967 111.034 248 248 248s248-111.034 248-248S392.967 8 256 8Zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676ZM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676Z" style="fill:#888;fill-rule:nonzero" transform="matrix(.30366 0 0 .30366 506.822 60.065)"/></svg>')}`;var mE=(e,t,n)=>{t.fillStyle=n===mn.DARK?"#2E2E2E":"#E7E7E7",t.fillRect(0,0,e.width,e.height);let i=Math.min(e.width,e.height),o=Math.min(i,Math.min(i*.4,100));t.drawImage(e.status==="error"?Jc:Qc,e.width/2-o/2,e.height/2-o/2,o,o)},Ma=(e,t)=>{e.beginPath();for(let n of t)n.type==="move"?e.moveTo(n.point.x,n.point.y):n.type==="line"?e.lineTo(n.point.x,n.point.y):e.quadraticCurveTo(n.control.x,n.control.y,n.point.x,n.point.y);e.closePath()},Vc=(e,t)=>{Ma(e,t),e.fill()},pE=(e,t)=>{e.save(),Ma(e,t),e.clip(),e.lineWidth=aE*2,e.strokeStyle=`rgba(0, 0, 0, ${sE})`,Ma(e,t),e.stroke(),e.restore()},Mr=(e,t,n,i)=>{switch(e.type){case"stickynote":{n.save(),n.fillStyle=`rgba(0, 0, 0, ${lE})`,Vc(n,Ys(e,{shadow:!0}));let o=Ys(e);n.fillStyle=ci(e.backgroundColor,i.theme===mn.DARK),Vc(n,o),pE(n,o);let r=Bd(e);r&&(n.font=`${Sa.fontSize}px ${Sa.fontFamily}`,n.textAlign="right",n.textBaseline="alphabetic",n.fillStyle=ci(e.strokeColor,i.theme===mn.DARK),n.globalAlpha*=Sa.opacity,n.fillText(r.text,r.x,r.y)),n.restore();break}case"rectangle":case"iframe":case"embeddable":case"diamond":case"ellipse":{n.lineJoin="round",n.lineCap="round",t.draw(ht.generateElementShape(e,i));break}case"arrow":case"line":{n.lineJoin="round",n.lineCap="round",ht.generateElementShape(e,i).forEach(o=>{t.draw(o)});break}case"freedraw":{n.save();let o=ht.generateElementShape(e,i);for(let r of o)typeof r=="string"?(n.fillStyle=ci(e.strokeColor,i.theme===mn.DARK),n.fill(new Path2D(r))):t.draw(r);n.restore();break}case"image":{n.save();let o=e.fileId!==null?i.imageCache.get(e.fileId):null,r=ei(e)?o?.image:void 0;if(r!=null&&!(r instanceof Promise)){e.roundness&&n.roundRect&&(n.beginPath(),n.roundRect(0,0,e.width,e.height,cn(Math.min(e.width,e.height),e)),n.clip());let{x:s,y:a,width:l,height:d}=e.crop?e.crop:{x:0,y:0,width:r.naturalWidth,height:r.naturalHeight},c=i.theme===mn.DARK&&o?.mimeType===Ta.svg;if(c&&rE){let u=window.devicePixelRatio||1,m=document.createElement("canvas");m.width=e.width*u,m.height=e.height*u;let p=m.getContext("2d");if(p){p.scale(u,u),p.drawImage(r,s,a,l,d,0,0,e.width,e.height);let h=p.getImageData(0,0,m.width,m.height),f=h.data;for(let g=0;g<f.length;g+=4)f[g]=255-f[g],f[g+1]=255-f[g+1],f[g+2]=255-f[g+2];p.putImageData(h,0,0),n.drawImage(m,0,0,m.width,m.height,0,0,e.width,e.height)}}else c&&(n.filter=eE),n.drawImage(r,s,a,l,d,0,0,e.width,e.height)}else mE(e,n,i.theme);n.restore();break}default:if(V(e)){let o=nE(e.text),r=o&&!n.canvas.isConnected;r&&document.body.appendChild(n.canvas),n.canvas.setAttribute("dir",o?"rtl":"ltr"),n.save(),n.font=tE(e),n.fillStyle=ci(e.strokeColor,i.theme===mn.DARK),n.textAlign=e.textAlign;let s=e.text.replace(/\r\n?/g,`
13
+ `).split(`
14
+ `),a=e.textAlign==="center"?e.width/2:e.textAlign==="right"?e.width:0,l=ir(e.fontSize,e.lineHeight),d=iE(e.fontFamily,e.fontSize,l);for(let c=0;c<s.length;c++)n.fillText(s[c],a,c*l+d);n.restore(),r&&n.canvas.remove()}else throw new Error(`Unimplemented type ${e.type}`)}},ho=new WeakMap,Kc=(e,t,n,i)=>{let o=n?i.zoom:{value:1},r=ho.get(e),s=r&&r.zoomValue!==o.value&&!i?.shouldCacheIgnoreZoom,a=Fe(e)?e.crop:null,l=_n(e,t)?.opacity||100;if(!r||s||r.theme!==i.theme||r.imageCrop!==a||r.containingFrameOpacity!==l){let d=qc(e,t,o,n,i);return d?(ho.set(e,d),d):null}return r},eu=(e,t)=>!t?.shouldCacheIgnoreZoom&&(!e.angle||qg(e.angle)),Zc=1e-6,Ia=(e,t,n,i,o)=>{let r=e.element,s=window.devicePixelRatio,a=fo(r),[l,d,c,u]=Z(r,o),m=((l+c)/2+i.scrollX)*s,p=((d+u)/2+i.scrollY)*s;t.save(),t.scale(1/s,1/s);let h=Q(r,o);if(U(r)&&h){let[,,,,b,x]=Z(h,o),y=Math.max(Yn(l,c),Yn(d,u))*s+a*10;t.beginPath(),t.rect(m-y,p-y,y*2,y*2),t.rect((b-h.width/2-Un+i.scrollX)*s,(x-h.height/2-Un+i.scrollY)*s,(h.width+Un*2)*s,(h.height+Un*2)*s),t.clip("evenodd")}t.translate(m,p),t.rotate(r.angle),"scale"in e.element&&!dE(r,n)&&t.scale(e.element.scale[0],e.element.scale[1]),t.translate(-m,-p);let f=(l+i.scrollX)*s-a,g=(d+i.scrollY)*s-a,E=t.getTransform();if(eu(r,i)){let{a:b,b:x,c:y,d:w,e:S,f:M}=E,A=V(r)?_e(r,o):null,T=A&&!A.angle?A:r,G=T===r?null:Z(T,o),v=G?.[0]??l,N=G?.[1]??d,k=T===r?a:fo(T),z=(v+i.scrollX)*s-k,W=(N+i.scrollY)*s-k,D=(l-v)*s+k-a,L=(d-N)*s+k-a;t.setTransform(b,x,y,w,Math.round(b*z+y*W+S)+Math.round(b*D+y*L+Zc),Math.round(x*z+w*W+M)+Math.round(x*D+w*L+Zc)),f=0,g=0}if(t.drawImage(e.canvas,f,g,e.canvas.width/e.scale,e.canvas.height/e.scale),t.setTransform(E),O.VITE_APP_DEBUG_ENABLE_TEXT_CONTAINER_BOUNDING_BOX==="true"&&Wt(r)){let b=Q(r,o),x=zs(r);t.strokeStyle="#c92a2a",t.lineWidth=3,t.strokeRect((x.x+i.scrollX)*s,(x.y+i.scrollY)*s,kt(r,b)*s,so(r,b)*s)}t.restore()},$M=(e,t,n,i)=>{t.save(),t.translate(e.x+n.scrollX,e.y+n.scrollY),t.fillStyle=ci("rgba(0, 0, 200, 0.04)",n.theme===mn.DARK);let o=.5/n.zoom.value;t.fillRect(o,o,e.width,e.height),t.lineWidth=1/n.zoom.value,t.strokeStyle=i,t.strokeRect(o,o,e.width,e.height),t.restore()},jM=(e,t,n,i,o,r,s)=>{let a=s.openDialog?.name==="elementLinkSelector"&&!s.selectedElementIds[e.id]&&!s.hoveredElementIds[e.id];switch(o.globalAlpha=cE(e,_n(e,t),r.elementsPendingErasure,r.pendingFlowchartNodes,a?Qg:1),e.type){case"magicframe":case"frame":{s.frameRendering.enabled&&s.frameRendering.outline&&(o.save(),o.translate(e.x+s.scrollX,e.y+s.scrollY),o.fillStyle="rgba(0, 0, 200, 0.04)",o.lineWidth=Ir.strokeWidth/s.zoom.value,o.strokeStyle=ci(Ir.strokeColor,s.theme===mn.DARK),Ql(e)&&(o.strokeStyle=s.theme===mn.LIGHT?"#7affd7":ci("#1d8264")),Ir.radius&&o.roundRect?(o.beginPath(),o.roundRect(0,0,e.width,e.height,Ir.radius/s.zoom.value),o.stroke(),o.closePath()):o.strokeRect(0,0,e.width,e.height),o.restore());break}case"freedraw":{if(r.isExporting){let[l,d,c,u]=Z(e,t),m=(l+c)/2+s.scrollX,p=(d+u)/2+s.scrollY,h=(c-l)/2-(e.x-l),f=(u-d)/2-(e.y-d);o.save(),o.translate(m,p),o.rotate(e.angle),o.translate(-h,-f),Mr(e,i,o,r),o.restore()}else{let l=Kc(e,n,r,s);if(!l)return;Ia(l,o,r,s,n)}break}case"rectangle":case"stickynote":case"diamond":case"ellipse":case"line":case"arrow":case"image":case"text":case"iframe":case"embeddable":{if(r.isExporting){let[l,d,c,u]=Z(e,t),m=(l+c)/2,p=(d+u)/2,h=m+s.scrollX,f=p+s.scrollY,g=(c-l)/2-(e.x-l),E=(u-d)/2-(e.y-d);if(V(e)){let x=_e(e,t);if(U(x)){let y=R.getBoundTextElementPosition(x,e,t);g=(c-l)/2-(y.x-l),E=(u-d)/2-(y.y-d)}}o.save(),o.translate(h,f);let b=Q(e,t);if(U(e)&&b){g=e.width/2-(e.x-l),E=e.height/2-(e.y-d);let[,,,,x,y]=Z(b,t),w=x-m-b.width/2-Un,S=y-p-b.height/2-Un,M=b.width+Un*2,A=b.height+Un*2,T=Math.max(Yn(l,c),Yn(d,u))+fo(e)*10;o.save(),o.beginPath(),o.rect(-T,-T,T*2,T*2),o.rect(w,S,M,A),o.clip("evenodd"),o.rotate(e.angle),o.translate(-g,-E),Mr(e,i,o,r),o.restore()}else o.rotate(e.angle),e.type==="image"&&o.scale(e.scale[0],e.scale[1]),o.translate(-g,-E),Mr(e,i,o,r);o.restore()}else{let l=Kc(e,n,r,s);if(!l)return;let d=o.imageSmoothingEnabled;if(eu(e,s)&&(o.imageSmoothingEnabled=!1),e.id===s.croppingElementId&&Fe(l.element)&&l.element.crop!==null){o.save(),o.globalAlpha=.1;let c=qc(Kl(l.element,t),n,s.zoom,r,s);c&&Ia(c,o,r,s,n),o.restore()}Ia(l,o,r,s,n),o.imageSmoothingEnabled=d}break}default:throw new Error(`Unimplemented type ${e.type}`)}o.globalAlpha=1};function VM(e,t,n){let i=ue({...e,angle:0},n),o=Sr((i[0]+i[2])/2,(i[1]+i[3])/2);return oE(t.length>=2,"Freepath outline must have at least 2 points"),t.slice(2).reduce((r,s)=>(r.push(jc(r[r.length-1][1],Pa(Sr(s[0]+e.x,s[1]+e.y),o,e.angle))),r),[jc(Pa(Sr(t[0][0]+e.x,t[0][1]+e.y),o,e.angle),Pa(Sr(t[1][0]+e.x,t[1][1]+e.y),o,e.angle))])}var ht=class e{static rg=new yt;static cache=new WeakMap;static get=(t,n)=>{let i=e.cache.get(t);if(i&&(n===null||i.theme===n))return i.shape};static delete=t=>{e.cache.delete(t),ho.delete(t)};static destroy=()=>{e.cache=new WeakMap};static generateElementShape=(t,n)=>{let i=n?.isExporting?void 0:e.get(t,n?n.theme:null);if(i!==void 0)return i;ho.delete(t);let o=wE(t,e.rg,n||{isExporting:!1,canvasBackgroundColor:gE.white,embedsValidationStatus:null,theme:Da.LIGHT});return n?.isExporting||e.cache.set(t,{shape:o,theme:n?.theme||Da.LIGHT}),o}},bE=e=>[8,8+e],ru=e=>[1.5,6+e];function yE(e){let t=e.roughness,n=Math.max(e.width,e.height),i=Math.min(e.width,e.height);return i>=20&&n>=50||i>=15&&e.roundness&&_d(e.type)||q(e)&&n>=50?t:Math.min(t/(n<10?3:2),2.5)}var mt=(e,t=!1,n=!1)=>{let i={seed:e.seed,strokeLineDash:e.strokeStyle==="dashed"?bE(e.strokeWidth):e.strokeStyle==="dotted"?ru(e.strokeWidth):void 0,disableMultiStroke:e.strokeStyle!=="solid",strokeWidth:e.strokeStyle!=="solid"?e.strokeWidth+.5:e.strokeWidth,fillWeight:e.strokeWidth/2,hachureGap:e.strokeWidth*4,roughness:yE(e),stroke:xo(e.strokeColor,n),preserveVertices:t||e.roughness<fE.cartoonist};switch(e.type){case"rectangle":case"iframe":case"embeddable":case"diamond":case"ellipse":return i.fillStyle=e.fillStyle,i.fill=Eo(e.backgroundColor)?void 0:xo(e.backgroundColor,n),e.type==="ellipse"&&(i.curveFitting=1),i;case"line":case"freedraw":return Nt(e.points)&&(i.fillStyle=e.fillStyle,i.fill=e.backgroundColor==="transparent"?void 0:xo(e.backgroundColor,n)),i;case"arrow":return i;default:throw new Error(`Unimplemented type ${e.type}`)}},nu=(e,t,n)=>Uo(e)&&(t||ql(e)&&n?.get(e.id)!==!0)&&Eo(e.backgroundColor)&&Eo(e.strokeColor)?{...e,roughness:0,backgroundColor:"#d3d3d3",fillStyle:"solid"}:Wo(e)?{...e,strokeColor:Eo(e.strokeColor)?"#000000":e.strokeColor,backgroundColor:Eo(e.backgroundColor)?"#f4f4f6":e.backgroundColor}:e,go=(e,t,n)=>{if(t===null)return[];let[,,i,o,r,s]=t;return[e.line(i,o,r,s,n)]},Tr=(e,t,n)=>{if(t===null)return[];let[i,o,r,s,a,l]=t;return[e.line(r,s,i,o,n),e.line(a,l,i,o,n)]},ui=(e,t)=>{let n={...t};if(e.strokeStyle==="dotted"){let i=ru(e.strokeWidth-1);n.strokeLineDash=[i[0],i[1]-1]}else delete n.strokeLineDash;return n.roughness=Math.min(1,n.roughness||0),n},Aa=(e,t,n,i,o,r=1)=>{if(i===null)return[];let[s,a,l]=i,d={...t,fill:o,fillStyle:"solid",stroke:n,roughness:Math.min(.5,t.roughness||0)};return delete d.strokeLineDash,[e.circle(s,a,l*r,d)]},iu=(e,t,n,i,o,r,s,a)=>{if(i===null)return[];let l=xo(e.strokeColor,a),d=xo(s,a),c=-.25,u=.8;switch(i){case"circle":case"circle_outline":return Aa(o,r,l,nt(e,t,n,i),i==="circle_outline"?d:l);case"triangle":case"triangle_outline":{let m=nt(e,t,n,i);if(m===null)return[];let[p,h,f,g,E,b]=m,x={...r,fill:i==="triangle_outline"?d:l,fillStyle:"solid",roughness:Math.min(1,r.roughness||0)};return delete x.strokeLineDash,[o.polygon([[p,h],[f,g],[E,b],[p,h]],x)]}case"diamond":case"diamond_outline":{let m=nt(e,t,n,i);if(m===null)return[];let[p,h,f,g,E,b,x,y]=m,w={...r,fill:i==="diamond_outline"?d:l,fillStyle:"solid",roughness:Math.min(1,r.roughness||0)};return delete w.strokeLineDash,[o.polygon([[p,h],[f,g],[E,b],[x,y],[p,h]],w)]}case"cardinality_one":return go(o,nt(e,t,n,i),ui(e,r));case"cardinality_many":return Tr(o,nt(e,t,n,i),ui(e,r));case"cardinality_one_or_many":{let m=ui(e,r);return[...Tr(o,nt(e,t,n,"cardinality_many"),m),...go(o,nt(e,t,n,"cardinality_one",c),m)]}case"cardinality_exactly_one":{let m=ui(e,r);return[...go(o,nt(e,t,n,"cardinality_one",-.5),m),...go(o,nt(e,t,n,"cardinality_one"),m)]}case"cardinality_zero_or_one":{let m=ui(e,r);return[...Aa(o,r,l,nt(e,t,n,"circle_outline",1.5),d,u),...go(o,nt(e,t,n,"cardinality_one",-.5),m)]}case"cardinality_zero_or_many":{let m=ui(e,r);return[...Tr(o,nt(e,t,n,"cardinality_many"),m),...Aa(o,r,l,nt(e,t,n,"circle_outline",1.5),d,u)]}case"bar":case"arrow":default:return Tr(o,nt(e,t,n,i),ui(e,r))}},zd=(e,t)=>{let n=new yt,i={seed:e.seed,disableMultiStroke:!0,disableMultiStrokeFill:!0,roughness:0,preserveVertices:!0},o=se(e,t);switch(e.type){case"line":case"arrow":{let r=e.points.length?e.points:[Pe(0,0)];return X(e)?n.path(su(r,16),i).sets[0].ops:e.roundness?n.curve(r,i).sets[0].ops.slice(0,e.points.length).map((s,a)=>{if(a===0){let l=pn(Pe(e.x+s.data[0],e.y+s.data[1]),o,e.angle);return{op:"move",data:Pe(l[0]-e.x,l[1]-e.y)}}return{op:"bcurveTo",data:[pn(Pe(e.x+s.data[0],e.y+s.data[1]),o,e.angle),pn(Pe(e.x+s.data[2],e.y+s.data[3]),o,e.angle),pn(Pe(e.x+s.data[4],e.y+s.data[5]),o,e.angle)].map(l=>Pe(l[0]-e.x,l[1]-e.y)).flat()}}):r.map((s,a)=>{let l=pn(Pe(e.x+s[0],e.y+s[1]),o,e.angle);return{op:a===0?"move":"lineTo",data:Pe(l[0]-e.x,l[1]-e.y)}})}case"freedraw":{if(e.points.length<2)return[];let r=Sn(e.points,.75);return n.curve(r,i).sets[0].ops.slice(0,e.points.length).map((s,a)=>{if(a===0){let l=pn(Pe(e.x+s.data[0],e.y+s.data[1]),o,e.angle);return{op:"move",data:Pe(l[0]-e.x,l[1]-e.y)}}return{op:"bcurveTo",data:[pn(Pe(e.x+s.data[0],e.y+s.data[1]),o,e.angle),pn(Pe(e.x+s.data[2],e.y+s.data[3]),o,e.angle),pn(Pe(e.x+s.data[4],e.y+s.data[5]),o,e.angle)].map(l=>Pe(l[0]-e.x,l[1]-e.y)).flat()}})}}},wE=(e,t,{isExporting:n,canvasBackgroundColor:i,embedsValidationStatus:o,theme:r})=>{let s=r===Da.DARK;switch(e.type){case"rectangle":case"iframe":case"embeddable":{let a;if(e.roundness){let l=e.width,d=e.height,c=cn(Math.min(l,d),e);a=t.path(`M ${c} 0 L ${l-c} 0 Q ${l} 0, ${l} ${c} L ${l} ${d-c} Q ${l} ${d}, ${l-c} ${d} L ${c} ${d} Q 0 ${d}, 0 ${d-c} L 0 ${c} Q 0 0, ${c} 0`,mt(nu(e,n,o),!0,s))}else a=t.rectangle(0,0,e.width,e.height,mt(nu(e,n,o),!1,s));return a}case"diamond":{let a,[l,d,c,u,m,p,h,f]=Ai(e);if(e.roundness){let g=cn(Math.abs(l-h),e),E=cn(Math.abs(u-d),e);a=t.path(`M ${l+g} ${d+E} L ${c-g} ${u-E}
15
+ C ${c} ${u}, ${c} ${u}, ${c-g} ${u+E}
16
+ L ${m+g} ${p-E}
17
+ C ${m} ${p}, ${m} ${p}, ${m-g} ${p-E}
18
+ L ${h+g} ${f+E}
19
+ C ${h} ${f}, ${h} ${f}, ${h+g} ${f-E}
20
+ L ${l-g} ${d+E}
21
+ C ${l} ${d}, ${l} ${d}, ${l+g} ${d+E}`,mt(e,!0,s))}else a=t.polygon([[l,d],[c,u],[m,p],[h,f]],mt(e,!1,s));return a}case"ellipse":return t.ellipse(e.width/2,e.height/2,e.width,e.height,mt(e,!1,s));case"line":case"arrow":{let a,l=mt(e,!1,s),d=e.points.length?e.points:[Pe(0,0)];if(X(e)?d.every(c=>Math.abs(c[0])<=1e6&&Math.abs(c[1])<=1e6)?a=[t.path(su(d,16),mt(e,!0,s))]:(console.error("Elbow arrow with extreme point positions detected. Arrow not rendered.",e.id,JSON.stringify(d)),a=[]):e.roundness?a=[t.curve(d,l)]:l.fill?a=[t.polygon(d,l)]:a=[t.linearPath(d,l)],e.type==="arrow"){let{startArrowhead:c=null,endArrowhead:u="arrow"}=e;if(c!==null){let m=iu(e,a,"start",c,t,l,i,s);a.push(...m)}if(u!==null){let m=iu(e,a,"end",u,t,l,i,s);a.push(...m)}}return a}case"freedraw":{let a=[];if(Nt(e.points)){let l=Sn(e.points,.75);a.push(t.curve(l,{...mt(e,!1,s),stroke:"none"}))}return a.push(PE(e)),a}case"stickynote":case"frame":case"magicframe":case"text":case"image":return null;default:return hE(e,`generateElementShape(): Unimplemented type ${e?.type}`),null}},su=(e,t)=>{let n=[];for(let o=1;o<e.length-1;o+=1){let r=e[o-1],s=e[o+1],a=e[o],l=vt(a,r),d=vt(s,a),c=Math.min(t,tu(e[o],s)/2,tu(e[o],r)/2);l?r[0]<a[0]?n.push([e[o][0]-c,e[o][1]]):n.push([e[o][0]+c,e[o][1]]):r[1]<a[1]?n.push([e[o][0],e[o][1]-c]):n.push([e[o][0],e[o][1]+c]),n.push(e[o]),d?s[0]<a[0]?n.push([e[o][0]-c,e[o][1]]):n.push([e[o][0]+c,e[o][1]]):s[1]<a[1]?n.push([e[o][0],e[o][1]-c]):n.push([e[o][0],e[o][1]+c])}let i=[`M ${e[0][0]} ${e[0][1]}`];for(let o=0;o<n.length;o+=3)i.push(`L ${n[o][0]} ${n[o][1]}`),i.push(`Q ${n[o+1][0]} ${n[o+1][1]}, ${n[o+2][0]} ${n[o+2][1]}`);return i.push(`L ${e[e.length-1][0]} ${e[e.length-1][1]}`),i.join(" ")},au=(e,t)=>{switch(e.type){case"rectangle":case"stickynote":case"diamond":case"frame":case"magicframe":case"embeddable":case"image":case"iframe":case"text":case"selection":return Bl(e);case"arrow":case"line":{let n=ht.generateElementShape(e,null)[0],[,,,,i,o]=Z(e,t);return cr(e)?Nl(e,n,Pe(e.x,e.y),e.angle,Pe(i,o)):kl(n,Pe(e.x,e.y),e.angle,Pe(i,o))}case"ellipse":return Ll(e);case"freedraw":{let[,,,,n,i]=Z(e,t);return Cl(e,Pe(n,i),cr(e))}}},Dc=(e,t)=>{let n=[...e.points];if(t){if(!id(e.points))return null;let o=n[0],r=n[n.length-1];Math.hypot(o[0]-r[0],o[1]-r[1])>EE||n.length<4?n.push(Pe(o[0],o[1])):n[n.length-1]=Pe(o[0],o[1])}return{polygon:t,points:n}},PE=e=>vE(AE(e)),Ar={SIZE_FACTOR:4.25,THINNING:.6,SMOOTHING:.5},SE={SIZE_FACTOR:1.4},va=e=>e.strokeOptions?.streamline??xE,IE=e=>{let t=e.simulatePressure?e.points:e.points.length?e.points.map(([n,i],o)=>[n,i,e.pressures[o]]):[[0,0,.5]];return Hl(t,{simulatePressure:e.simulatePressure,size:e.strokeWidth*Ar.SIZE_FACTOR,thinning:Ar.THINNING,smoothing:Ar.SMOOTHING,streamline:va(e),easing:n=>Math.sin(n*Math.PI/2),last:!0})},ME=e=>new zo({size:e.strokeWidth*SE.SIZE_FACTOR,streamline:va(e),simplify:0,sizeMapping:t=>Math.max(.1,t.pressure)}),TE=e=>{let t=ME(e);return e.points.map(([n,i])=>t.addPoint([n,i,1])),t.getStrokeOutline().map(([n,i])=>[n,i])},AE=e=>e.strokeOptions?.variability==="constant"?TE(e):IE(e),lu=e=>as(e.points,{size:e.strokeWidth*Ar.SIZE_FACTOR,streamline:va(e),last:!0}).map(t=>t.point),ou=(e,t)=>[(e[0]+t[0])/2,(e[1]+t[1])/2],DE=/(\s?[A-Z]?,?-?[0-9]*\.[0-9]{0,2})(([0-9]|e|-)*)/g,vE=e=>{if(!e.length)return"";let t=e.length-1;return e.reduce((n,i,o,r)=>(o===t?n.push(i,ou(i,r[0]),"L",r[0],"Z"):n.push(i,ou(i,r[o+1])),n),["M",e[0],"Q"]).join(" ").replace(DE,"$1")};var ka=class e{static boundsCache=new WeakMap;static nonRotatedBoundsCache=new WeakMap;static getBounds(t,n,i=!1){let o=i&&t.angle!==0?e.nonRotatedBoundsCache.get(t):e.boundsCache.get(t);if(o?.version&&o.version===t.version&&!Ie(t))return o.bounds;if(i&&t.angle!==0){let s=e.calculateBounds({...t,angle:0},n);return e.nonRotatedBoundsCache.set(t,{version:t.version,bounds:s}),s}let r=e.calculateBounds(t,n);return e.boundsCache.set(t,{version:t.version,bounds:r}),r}static calculateBounds(t,n){let i,[o,r,s,a,l,d]=Z(t,n);if(ye(t)){let[c,u,m,p]=mi(t.points.map(([h,f])=>le(F(h,f),F(l-t.x,d-t.y),t.angle)));return[c+t.x,u+t.y,m+t.x,p+t.y]}else if(q(t))i=zE(t,l,d,n);else if(t.type==="diamond"){let[c,u]=le(F(l,r),F(l,d),t.angle),[m,p]=le(F(l,a),F(l,d),t.angle),[h,f]=le(F(o,d),F(l,d),t.angle),[g,E]=le(F(s,d),F(l,d),t.angle),b=Math.min(c,m,h,g),x=Math.min(u,p,f,E),y=Math.max(c,m,h,g),w=Math.max(u,p,f,E);i=[b,x,y,w]}else if(t.type==="ellipse"){let c=(s-o)/2,u=(a-r)/2,m=Math.cos(t.angle),p=Math.sin(t.angle),h=Math.hypot(c*m,u*p),f=Math.hypot(u*m,c*p);i=[l-h,d-f,l+h,d+f]}else{let[c,u]=le(F(o,r),F(l,d),t.angle),[m,p]=le(F(o,a),F(l,d),t.angle),[h,f]=le(F(s,a),F(l,d),t.angle),[g,E]=le(F(s,r),F(l,d),t.angle),b=Math.min(c,m,h,g),x=Math.min(u,p,f,E),y=Math.max(c,m,h,g),w=Math.max(u,p,f,E);i=[b,x,y,w]}return i}},Z=(e,t,n=!1)=>{if(ye(e))return CE(e);if(q(e))return R.getElementAbsoluteCoords(e,t,n);if(V(e)){let i=t?_e(e,t):null;if(U(i)){let{x:o,y:r}=R.getBoundTextElementPosition(i,e,t);return[o,r,o+e.width,r+e.height,o+e.width/2,r+e.height/2]}}return[e.x,e.y,e.x+e.width,e.y+e.height,e.x+e.width/2,e.y+e.height/2]},ki=(e,t)=>{let n=au(e,t),[i,o,r,s,a,l]=Z(e,t),d=F(a,l);if(n.type==="polycurve"){let E=n.data.map(x=>Mt(x,10)),b=[];if(Re(e)&&!e.polygon||U(e))for(let x of E){let y=0;for(;y<x.length-1;)b.push(Se(F(x[y][0],x[y][1]),F(x[y+1][0],x[y+1][1]))),y++}else{let x=E.flat(),y=0;for(;y<x.length-1;)b.push(Se(F(x[y][0],x[y][1]),F(x[y+1][0],x[y+1][1]))),y++}return b}else{if(n.type==="polyline")return n.data;if(LE(e)){let[g,E]=Tn(e),b=E.map(y=>uu(y,d,e.angle)).flat();return[...cu(g,d,e.angle),...b]}else if(e.type==="diamond"){let[g,E]=An(e),b=E.map(y=>uu(y,d,e.angle)).flat();return[...cu(g,d,e.angle),...b]}else if(n.type==="polygon"){if(V(e)){let b=_e(e,t);if(b&&q(b))return[Se(F(i,o),F(r,o)),Se(F(r,o),F(r,s)),Se(F(r,s),F(i,s)),Se(F(i,s),F(i,o))]}let g=n.data,E=[];for(let b=0;b<g.length-1;b++)E.push(Se(g[b],g[b+1]));return E}else if(n.type==="ellipse")return kE(e)}let[c,u,m,p,,,h,f]=[[i,o],[r,o],[i,s],[r,s],[a,o],[a,s],[i,l],[r,l]].map(g=>le(g,d,e.angle));return[Se(c,u),Se(m,p),Se(c,m),Se(u,p),Se(c,f),Se(m,f),Se(u,h),Se(p,h)]},LE=e=>e!=null&&(e.type==="rectangle"||e.type==="stickynote"||e.type==="image"||e.type==="iframe"||e.type==="embeddable"||e.type==="frame"||e.type==="magicframe"||e.type==="text"&&!e.containerId),cu=(e,t,n)=>e.map(i=>Se(le(i[0],t,n),le(i[1],t,n))),uu=(e,t,n)=>{let i=Mt(e,10),o=0,r=[];for(;o<i.length-1;)r.push(Se(le(F(i[o][0],i[o][1]),t,n),le(F(i[o+1][0],i[o+1][1]),t,n))),o++;return r},kE=e=>{let t=F(e.x+e.width/2,e.y+e.height/2),n=e.width/2,i=e.height/2,o=[],r=[],s=90,a=Math.PI*2/s;for(let l=0;l<s;l++){let d=l*a,c=t[0]+n*Math.cos(d),u=t[1]+i*Math.sin(d);r.push(le(F(c,u),t,e.angle))}for(let l=0;l<r.length-1;l++)o.push(Se(r[l],r[l+1]));return o.push(Se(r[r.length-1],r[0])),o},AT=e=>[e.x,e.y,e.x+e.width,e.y+e.height,e.x+e.width/2,e.y+e.height/2],Ai=e=>{let t=Math.floor(e.width/2)+1,n=0,i=e.width,o=Math.floor(e.height/2)+1,r=t,s=e.height;return[t,n,i,o,r,s,0,o]},mu=(e,t,n,i,o)=>{let r=1-e;return Math.pow(r,3)*t+3*Math.pow(r,2)*e*n+3*r*Math.pow(e,2)*i+Math.pow(e,3)*o},pu=(e,t,n,i)=>{let o=t-e,r=n-t,s=i-n,a=3*o-6*r+3*s,l=6*r-6*o,d=3*o,c=l*l-4*a*d;if(!(c>=0))return!1;let m=null,p=null,h=1/0,f=1/0;return a===0?h=f=-d/l:(h=(-l+Math.sqrt(c))/(2*a),f=(-l-Math.sqrt(c))/(2*a)),h>=0&&h<=1&&(m=mu(h,e,t,n,i)),f>=0&&f<=1&&(p=mu(f,e,t,n,i)),[m,p]},mr=(e,t,n,i)=>{let o=pu(e[0],t[0],n[0],i[0]),r=pu(e[1],t[1],n[1],i[1]),s=Math.min(e[0],i[0]),a=Math.max(e[0],i[0]);if(o){let c=o.filter(u=>u!==null);s=Math.min(s,...c),a=Math.max(a,...c)}let l=Math.min(e[1],i[1]),d=Math.max(e[1],i[1]);if(r){let c=r.filter(u=>u!==null);l=Math.min(l,...c),d=Math.max(d,...c)}return[s,l,a,d]},po=(e,t)=>{let n=F(0,0),{minX:i,minY:o,maxX:r,maxY:s}=e.reduce((a,{op:l,data:d})=>{if(l==="move"){let c=hu(d);La(c!=null,"Op data is not a point"),n=c}else if(l==="bcurveTo"){let c=F(d[0],d[1]),u=F(d[2],d[3]),m=F(d[4],d[5]),p=t?t(c):c,h=t?t(u):u,f=t?t(m):m,g=t?t(n):n;n=m;let[E,b,x,y]=mr(g,p,h,f);a.minX=Math.min(a.minX,E),a.minY=Math.min(a.minY,b),a.maxX=Math.max(a.maxX,x),a.maxY=Math.max(a.maxY,y)}return a},{minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0});return[i,o,r,s]},mi=(e,t=0)=>{let n=1/0,i=1/0,o=-1/0,r=-1/0;for(let[s,a]of e)n=Math.min(n,s),i=Math.min(i,a),o=Math.max(o,s),r=Math.max(r,a);return[n-t,i-t,o+t,r+t]},CE=e=>{let[t,n,i,o]=mi(e.points),r=t+e.x,s=n+e.y,a=i+e.x,l=o+e.y;return[r,s,a,l,(r+a)/2,(s+l)/2]},NE=20,GE=15,OE=e=>{switch(e){case"arrow":return 25;case"diamond":case"diamond_outline":return 12;case"cardinality_many":case"cardinality_one_or_many":case"cardinality_zero_or_many":return GE;case"cardinality_one":case"cardinality_exactly_one":case"cardinality_zero_or_one":return NE;default:return 15}},FE=e=>{switch(e){case"bar":return 90;case"arrow":return 20;default:return 25}},nt=(e,t,n,i,o=0)=>{if(i===null||t.length<1)return null;let r=tn(t[0]);if(r.length<1)return null;let s=n==="start"?1:r.length-1,a=r[s].data;La(a.length===6,"Op data length is not 6");let l=F(a[4],a[5]),d=F(a[2],a[3]),c=F(a[0],a[1]),u=r[s-1],m=F(0,0);if(u.op==="move"){let P=hu(u.data);La(P!=null,"Op data is not a point"),m=P}else u.op==="bcurveTo"&&(m=F(u.data[4],u.data[5]));let p=(P,B)=>Math.pow(1-P,3)*l[B]+3*P*Math.pow(1-P,2)*d[B]+3*Math.pow(P,2)*(1-P)*c[B]+m[B]*Math.pow(P,3),[h,f]=n==="start"?m:l,[g,E]=[p(.3,0),p(.3,1)],b=Math.hypot(h-g,f-E),x=(h-g)/b,y=(f-E)/b,w=OE(i),S=0;{let[P,B]=n==="end"?e.points[e.points.length-1]:e.points[0],[C,_]=e.points.length>1?n==="end"?e.points[e.points.length-2]:e.points[1]:[0,0];S=Math.hypot(P-C,B-_)}let A=Math.min(w,S*(i==="diamond"||i==="diamond_outline"?.25:.5)),T=h-x*A*o,G=f-y*A*o,v=T-x*A,N=G-y*A;if(i==="circle"||i==="circle_outline"){let P=Math.hypot(N-G,v-T)+e.strokeWidth-2;return[T,G,P]}let k=FE(i);if(i==="cardinality_many"||i==="cardinality_one_or_many"){let[P,B]=le(F(T,G),F(v,N),Ba(-k)),[C,_]=le(F(T,G),F(v,N),Ba(k));return[v,N,P,B,C,_]}let[z,W]=le(F(v,N),F(T,G),-k*Math.PI/180),[D,L]=le(F(v,N),F(T,G),Ba(k));if(i==="diamond"||i==="diamond_outline"){let P,B;if(n==="start"){let[C,_]=e.points.length>1?e.points[1]:[0,0];[P,B]=le(F(T+A*2,G),F(T,G),Math.atan2(_-G,C-T))}else{let[C,_]=e.points.length>1?e.points[e.points.length-2]:[0,0];[P,B]=le(F(T-A*2,G),F(T,G),Math.atan2(G-_,T-C))}return[T,G,z,W,P,B,D,L]}return[T,G,z,W,D,L]},RE=e=>{let t=xi.generator(),n=mt(e),i=e.roundness?"curve":n.fill?"polygon":"linearPath";return t[i](e.points,n)},zE=(e,t,n,i)=>{let o=Q(e,i);if(e.points.length<2){let[u,m]=e.points[0],[p,h]=le(F(e.x+u,e.y+m),F(t,n),e.angle),f=[p,h,p,h];if(o){let g=R.getMinMaxXYWithBoundText(e,i,[p,h,p,h],o);f=[g[0],g[1],g[2],g[3]]}return f}let s=ht.get(e,null)?.[0]??RE(e),a=tn(s),d=po(a,([u,m])=>le(F(e.x+u,e.y+m),F(t,n),e.angle)),c=[d[0],d[1],d[2],d[3]];if(o){let u=R.getMinMaxXYWithBoundText(e,i,c,o);c=[u[0],u[1],u[2],u[3]]}return c},ue=(e,t,n=!1)=>ka.getBounds(e,t,n),tt=(e,t)=>{if(!BE(e))return[0,0,0,0];let n=1/0,i=-1/0,o=1/0,r=-1/0,s=t||fu(e);return e.forEach(a=>{let[l,d,c,u]=ue(a,s);n=Math.min(n,l),o=Math.min(o,d),i=Math.max(i,c),r=Math.max(r,u)}),[n,o,i,r]},DT=(e,t)=>{let[n,i,o,r]=tt(e);return[n+t.x,i+t.y,o+t.x,r+t.y]},Mn=(e,t,n,i)=>{if(!(q(e)||ye(e)))return[e.x,e.y,e.x+t,e.y+n];let o=du(0,t,du(1,n,e.points,i),i),r;if(ye(e))r=mi(o);else{let c=xi.generator(),u=e.roundness?c.curve(o,mt(e)):c.linearPath(o,mt(e)),m=tn(u);r=po(m)}let[s,a,l,d]=r;return[s+e.x,a+e.y,l+e.x,d+e.y]},ua=(e,t)=>{let n=xi.generator(),i=e.roundness==null?n.linearPath(t,mt(e)):n.curve(t,mt(e)),o=tn(i),[r,s,a,l]=po(o);return[r+e.x,s+e.y,a+e.x,l+e.y]},fn=e=>{let[t,n,i,o]=tt(e);return{minX:t,minY:n,maxX:i,maxY:o,width:i-t,height:o-n,midX:(t+i)/2,midY:(n+o)/2}},vT=({scrollX:e,scrollY:t,width:n,height:i,zoom:o})=>[-e,-t,-e+n/o.value,-t+i/o.value],on=e=>F(e[0]+(e[2]-e[0])/2,e[1]+(e[3]-e[1])/2),lt=(e,t,n)=>{let i={minX:e.x,minY:e.y,maxX:e.x+e.width,maxY:e.y+e.height,midX:e.x+e.width/2,midY:e.y+e.height/2},o=se(e,t),[r,s]=le(F(i.minX,i.minY),o,e.angle),[a,l]=le(F(i.maxX,i.minY),o,e.angle),[d,c]=le(F(i.maxX,i.maxY),o,e.angle),[u,m]=le(F(i.minX,i.maxY),o,e.angle),p=[Math.min(r,a,d,u),Math.min(s,l,c,m),Math.max(r,a,d,u),Math.max(s,l,c,m)];if(n){let[h,f,g,E]=n;return[p[0]-E,p[1]-h,p[2]+f,p[3]+g]}return p},$t=(e,t)=>e[0]>t[0]&&e[0]<t[2]&&e[1]>t[1]&&e[1]<t[3],_E=(e,t)=>e[0]>=t[0]&&e[0]<=t[2]&&e[1]>=t[1]&&e[1]<=t[3],xt=(e,t)=>{if(e==null||t==null)return!1;let[n,i,o,r]=e,[s,a,l,d]=t;return n<l&&o>s&&i<d&&r>a},wa=(e,t)=>[F(t[0],t[1]),F(t[0],t[3]),F(t[2],t[1]),F(t[2],t[3])].every(n=>_E(n,e)),Fc=({elements:e,elementsMap:t,bounds:n,type:i,excludeElementsInFrames:o,shouldIgnoreElementFromSelection:r})=>{t||(t=fu(e));let s=ed(n)?ue(n,t):n,[a,l,d,c]=s,u=[Se(F(a,l),F(d,l)),Se(F(d,l),F(d,c)),Se(F(d,c),F(a,c)),Se(F(a,c),F(a,l))],m=o?new Set:null,p={},h=new Set;for(let f of e){if(r?.(f))continue;let g=f.groupIds.at(-1);g&&(p[g]||(p[g]=[]),p[g].push(f));let E=f.strokeWidth,b=null,x=ue(f,t);x=[x[0]-E/2,x[1]-E/2,x[2]+E/2,x[3]+E/2];let y=U(f)&&Q(f,t);if(y){let{x:M,y:A}=R.getBoundTextElementPosition(f,y,t);b=[M,A,M+y.width,A+y.height]}let w=_n(f,t);if(w&&zn(f,w,t)){let M=ue(w,t);x=[Math.max(x[0],M[0]),Math.max(x[1],M[1]),Math.min(x[2],M[2]),Math.min(x[3],M[3])],b=b?[Math.max(b[0],M[0]),Math.max(b[1],M[1]),Math.min(b[2],M[2]),Math.min(b[3],M[3])]:null}let S=b?[Math.min(b[0],x[0]),Math.min(b[1],x[1]),Math.max(b[2],x[2]),Math.max(b[3],x[3])]:x;if(wa(s,S)){m&&te(f)&&m.add(f.id),h.add(f);continue}if(i==="overlap"&&b&&xt(s,b)){h.add(f);continue}if(i==="overlap"&&xt(s,x)){let M=!1;if(q(f)||ye(f)){let A=se(f,t);M=f.points.some(T=>{let G=le(F(f.x+T[0],f.y+T[1]),A,f.angle);return $t(G,s)})}else{let A=ue(f,t,!0),T=se(f,t);M=[le(F((A[0]+A[2])/2,A[1]),T,f.angle),le(F(A[2],(A[1]+A[3])/2),T,f.angle),le(F((A[0]+A[2])/2,A[3]),T,f.angle),le(F(A[0],(A[1]+A[3])/2),T,f.angle)].some(G=>$t(le(G,T,f.angle),s))}if(M||(M=u.some(A=>ct(f,t,A,E/2,!0).length>0)),M){m&&te(f)&&m.add(f.id),h.add(f);continue}}}return m&&h.forEach(f=>{f.frameId&&m.has(f.frameId)&&h.delete(f)}),i==="overlap"?Array.from(h).forEach(f=>{let g=f.groupIds.at(-1);(g?p[g]:null)?.forEach(b=>h.add(b))}):i==="contain"&&h.forEach(f=>{let g=f.groupIds.at(-1),E=g?p[g]:null;E&&!E.every(b=>h.has(b))&&h.delete(f)}),e.filter(f=>h.has(f))},se=(e,t,n=0,i=0)=>{if(q(e)||ye(e)){let[s,a,l,d]=Z(e,t),[c,u]=F((s+l)/2,(a+d)/2);return F(c+n,u+i)}let[o,r]=on(ue(e,t));return F(o+n,r+i)};var ao=(e,t,n="top")=>{let i=(e.height-t)/2;if(n==="center")return{x:e.x,y:e.y+i};let o=Math.sin(e.angle),r=Math.cos(e.angle);return n==="bottom"?{x:e.x-i*o,y:e.y+i*(1+r)}:{x:e.x+i*o,y:e.y+i*(1-r)}},YE=.1,Eu=e=>q(e)||ye(e)?e.points.length<2||e.points.length===2&&U(e)&&UE(e.points[0],e.points[e.points.length-1],YE):e.width===0&&e.height===0,Rc=(e,t,n,i,o)=>{let[r,s,a,l]=ue(e,o),d=Dr({clientX:i.offsetLeft,clientY:i.offsetTop},i),c=Dr({clientX:i.offsetLeft+t,clientY:i.offsetTop+n},i);return d.x<=a&&d.y<=l&&c.x>=r&&c.y>=s},FT=(e,t,n,i,o,r)=>{let[s,a,l,d]=tt(e,o),c=Dr({clientX:i.offsetLeft+(r?.left||0),clientY:i.offsetTop+(r?.top||0)},i),u=Dr({clientX:i.offsetLeft+t-(r?.right||0),clientY:i.offsetTop+n-(r?.bottom||0)},i);return s>=c.x&&a>=c.y&&l<=u.x&&d<=u.y},Ca=(e,t,n)=>{let i=Math.abs(t),o=Math.abs(n);if(e==="line"||e==="arrow"||e==="freedraw"){let r=Math.round(Math.atan(o/i)/hn)*hn;r===0?n=0:r===Math.PI/2?t=0:n=i*Math.tan(r)*Math.sign(n)||n}else e!=="selection"&&(n=i*Math.sign(n));return{width:t,height:n}},vc=(e,t,n,i,o)=>{let r=n-e,s=i-t,a=Math.atan2(s,r),l=Math.round(a/hn)*hn;if(o){let d=Math.floor(o/hn)*hn;HE(a,d,d+hn)&&(WE(a,o)<hn/6?l=o:gu(a)>gu(o)?l=d+hn:l=d)}if(l===0)s=0;else if(l===Math.PI/2)r=0;else{let d=Math.tan(l),c=-1,u=t-d*e,m=-1/d,p=-1,h=i-m*n,f=(c*h-p*u)/(d*p-m*c),g=(u*m-h*d)/(d*p-m*c);r=f-e,s=g-t}return{width:r,height:s}},RT=e=>{let t={width:e.width,height:e.height,x:e.x,y:e.y};if(e.width<0){let n=Math.abs(e.width);t.width=n,t.x=e.x-n}if(e.height<0){let n=Math.abs(e.height);t.height=n,t.y=e.y-n}return t};I();var XT=(e,t,n,i)=>{let o=yr(e,n.getNonDeletedElementsMap(),i).map(Wn),r=fn(e);return o.flatMap(s=>{let a=XE(s,r,t);return s.map(l=>{let d=n.mutateElement(l,{x:l.x+a.x,y:l.y+a.y});return Ge(l,n,{simultaneouslyUpdated:s}),d})})},XE=(e,t,{axis:n,position:i})=>{let o=fn(e),[r,s]=n==="x"?["minX","maxX"]:["minY","maxY"],a={x:0,y:0};return i==="start"?{...a,[n]:t[r]-o[r]}:i==="end"?{...a,[n]:t[s]-o[s]}:{...a,[n]:(t[r]+t[s])/2-(o[r]+o[s])/2}};I();import{TEXT_ALIGN as kr,VERTICAL_ALIGN as Cr}from"@excalidraw/common";import{pointDistance as ox,pointFromVector as rx,pointsEqual as vu,vector as sx,vectorDot as ax,vectorFromPoint as Du,vectorNormalize as lx,vectorScale as dx}from"@excalidraw/math";I();import{DEFAULT_ELEMENT_PROPS as Xn,DEFAULT_FONT_FAMILY as $E,DEFAULT_FONT_SIZE as jE,DEFAULT_TEXT_ALIGN as VE,DEFAULT_STICKY_NOTE_SIZE as KE,STICKY_NOTE_MIN_SIZE as xu,DEFAULT_VERTICAL_ALIGN as ZE,DEFAULT_STROKE_STREAMLINE as qE,VERTICAL_ALIGN as pi,randomInteger as QE,randomId as JE,getFontString as vr,getUpdatedTimestamp as ex,getLineHeight as tx}from"@excalidraw/common";var St=(e,{x:t,y:n,strokeColor:i=Xn.strokeColor,backgroundColor:o=Xn.backgroundColor,fillStyle:r=Xn.fillStyle,strokeWidth:s=Xn.strokeWidth,strokeStyle:a=Xn.strokeStyle,roughness:l=Xn.roughness,opacity:d=Xn.opacity,width:c=0,height:u=0,angle:m=0,groupIds:p=[],frameId:h=null,index:f=null,roundness:g=null,boundElements:E=null,link:b=null,locked:x=Xn.locked,...y})=>{(t<-1e6||t>1e6||n<-1e6||n>1e6||c<-1e6||c>1e6||u<-1e6||u>1e6)&&console.error("New element size or position is too large",{x:t,y:n,width:c,height:u,points:y.points});let w=ex();return{id:y.id||JE(),type:e,x:t,y:n,width:c,height:u,angle:m,strokeColor:i,backgroundColor:o,fillStyle:r,strokeWidth:s,strokeStyle:a,roughness:l,opacity:d,groupIds:p,frameId:h,index:f,roundness:g,seed:y.seed??QE(),version:y.version||1,versionNonce:y.versionNonce??0,isDeleted:!1,boundElements:E,updated:w,created:y.created===void 0?w:y.created,link:b,locked:x,customData:y.customData}},Ni=e=>St(e.type,e),bu=e=>Ae(e,{backgroundColor:Ws(e.backgroundColor),strokeColor:Nn(e.strokeColor),fillStyle:"solid"}),Na=e=>{let t=Math.max(e.width,xu),n=Math.max(e.baseHeight||e.height||KE,xu);return Ae(e,{width:t,height:Math.max(e.height,n),baseHeight:n})},nA=e=>Na(bu(e)),Br=e=>{let t=St("stickynote",e);return bu({...t,baseHeight:e.baseHeight??t.height})},yu=e=>St("embeddable",e),wu=e=>({...St("iframe",e)}),Pu=e=>Ae({...St("frame",e),type:"frame",name:e?.name||null},{}),Su=e=>Ae({...St("magicframe",e),type:"magicframe",name:e?.name||null},{}),Ga=e=>({x:e.textAlign==="center"?.5:e.textAlign==="right"?1:0,y:e.verticalAlign===pi.MIDDLE?.5:e.verticalAlign===pi.BOTTOM?1:0}),Iu=(e,t)=>{let n=Ga(e);return{x:t.width*n.x,y:t.height*n.y}},fi=e=>{let t=e.fontFamily||$E,n=e.fontSize||jE,i=e.lineHeight||tx(t),o=ro(e.text),r=$e(o,vr({fontFamily:t,fontSize:n}),i),s=e.textAlign||VE,a=e.verticalAlign||ZE,l=Iu({textAlign:s,verticalAlign:a},r),d={...St("text",e),text:o,fontSize:n,baseFontSize:e.baseFontSize??null,fontFamily:t,textAlign:s,verticalAlign:a,x:e.x-l.x,y:e.y-l.y,width:r.width,height:r.height,containerId:e.containerId||null,originalText:e.originalText??o,autoResize:e.autoResize??!0,lineHeight:i,labelPosition:e.labelPosition??null};return Ae(d,{})},nx=(e,t,n)=>{let{width:i,height:o}=$e(n,vr(e),e.lineHeight);e.autoResize||(i=e.width);let{textAlign:r,verticalAlign:s}=e,a,l;if(r==="center"&&s===pi.MIDDLE&&!e.containerId&&e.autoResize){let d=$e(e.text,vr(e),e.lineHeight),c=Iu(e,{width:i-d.width,height:o-d.height});a=e.x-c.x,l=e.y-c.y}else{let[d,c,u,m]=Z(e,t),[p,h,f,g]=Mn(e,i,o,!1),E=(d-p)/2,b=(c-h)/2,x=(u-f)/2,y=(m-g)/2;[a,l]=ix({n:s===pi.MIDDLE||s===pi.BOTTOM,s:s===pi.MIDDLE||s===pi.TOP,e:r==="center"||r==="left",w:r==="center"||r==="right"},e.x,e.y,e.angle,E,b,x,y)}return{width:i,height:o,x:Number.isFinite(a)?a:e.x,y:Number.isFinite(l)?l:e.y}},ix=(e,t,n,i,o,r,s,a)=>{let l=Math.cos(i),d=Math.sin(i);return e.e&&e.w?t+=o+s:e.e?(t+=o*(1+l),n+=o*d,t+=s*(1-l),n+=s*-d):e.w&&(t+=o*(1-l),n+=o*-d,t+=s*(1+l),n+=s*d),e.n&&e.s?n+=r+a:e.n?(t+=r*d,n+=r*(1-l),t+=a*-d,n+=a*(1+l)):e.s&&(t+=r*-d,n+=r*(1+l),t+=a*d,n+=a*(1-l)),[t,n]},iA=(e,t,n,i=e.text)=>{if(e.isDeleted)return;(t||!e.autoResize)&&(i=Lt(i,vr(e),t?kt(t,e):e.width));let o=nx(e,n,i);return{text:i,...o}},Mu=e=>({...St(e.type,e),points:e.points||[],pressures:e.pressures||[],simulatePressure:e.simulatePressure,strokeOptions:e.strokeOptions??{variability:"variable",streamline:qE}}),Tu=e=>{let t={...St(e.type,e),points:e.points||[],startBinding:null,endBinding:null,startArrowhead:null,endArrowhead:null};return Re(t)?{...t,polygon:e.polygon??!1}:t},Lr=e=>e.elbowed?{...St(e.type,e),points:e.points||[],startBinding:null,endBinding:null,startArrowhead:e.startArrowhead||null,endArrowhead:e.endArrowhead||null,elbowed:!0,fixedSegments:e.fixedSegments||[],startIsSpecial:!1,endIsSpecial:!1}:{...St(e.type,e),points:e.points||[],startBinding:null,endBinding:null,startArrowhead:e.startArrowhead||null,endArrowhead:e.endArrowhead||null,elbowed:!1},Au=e=>({...St("image",e),strokeColor:"transparent",status:e.status??"pending",fileId:e.fileId??null,scale:e.scale??[1,1],crop:e.crop??null});var pA=(e,t,n,i)=>{for(let o=t.length-1;o>=0;o--){let r=t[o];if(!(!U(r)||r.locked||r.points.length<2))for(let s of["end","start"]){if(r[s==="start"?"startBinding":"endBinding"]||vu(r.points[s==="start"?0:r.points.length-1],r.points[s==="start"?1:r.points.length-2]))continue;let a=R.getPointAtIndexGlobalCoordinates(r,s==="start"?0:-1,n);if(ox(e,a)*i.value<R.POINT_HANDLE_SIZE+1)return{arrow:r,startOrEnd:s}}}return null},fA=(e,t,n,i)=>{let o=R.getPointAtIndexGlobalCoordinates(e,t==="start"?0:-1,n),r=R.getPointAtIndexGlobalCoordinates(e,t==="start"?1:-2,n);if(vu(o,r))return null;let s=Du(o,r),a=Math.abs(s[0])>=Math.abs(s[1])?s[0]>=0?he:ze:s[1]>=0?Be:qe,l=X(e)?0:Le({strokeWidth:i},e),d=lx(Du(r,o)),c=Math.abs(ax(d,sx(a[0],a[1]))),u=rx(dx(d,-l/c),o);return fe(a,he)?{fixedPoint:je([0,.5]),anchor:u,textAlign:kr.LEFT,verticalAlign:Cr.MIDDLE}:fe(a,ze)?{fixedPoint:je([1,.5]),anchor:u,textAlign:kr.RIGHT,verticalAlign:Cr.MIDDLE}:fe(a,Be)?{fixedPoint:je([.5,0]),anchor:u,textAlign:kr.CENTER,verticalAlign:Cr.TOP}:{fixedPoint:je([.5,1]),anchor:u,textAlign:kr.CENTER,verticalAlign:Cr.BOTTOM}},hA=(e,t)=>!!e.boundElements?.some(({id:n,type:i})=>{if(i!=="arrow")return!1;let o=t.get(n);return U(o)&&(o.startBinding?.elementId===e.id||o.endBinding?.elementId===e.id)}),gA=e=>{let t=Ga(e).x;return{anchorRatio:t,anchorX:e.x+e.width*t}};I();import{distanceToLineSegment as Bu,lineSegment as hi,lineSegmentIntersectionPoints as cx,pointDistance as Qt,pointFrom as Oi,pointRotateRads as Gr,polygonArea as yo,polygonIncludesPoint as Lu,polygonIncludesPointNonZero as Nr,polygonSignedArea as Fa}from"@excalidraw/math";import{isOpaqueColor as ux,isTransparent as wo}from"@excalidraw/common";var mx=6,px=2,fx=2,hx=.5,gx={snapEpsilon:.5,gapTolerance:mx,minArea:4,maxBoundarySegments:2560,maxGeneratedPoints:1536,fallbackSearchRadius:512},Gu=([e,t,n,i],o)=>[e-o,t-o,n+o,i+o],Ex=e=>Qt(e[0],e[1]),bo=(e,t,n)=>{let i=t[0]-e[0],o=t[1]-e[1],r=i*i+o*o;return r===0?0:((n[0]-e[0])*i+(n[1]-e[1])*o)/r},ku=(e,t,n,i,o)=>{let r=Math.min(e[0],t[0]),s=Math.max(e[0],t[0]),a=t[0]-e[0],l=t[1]-e[1],d=Math.floor((r-n)/i),c=Math.floor((s+n)/i);for(let u=d;u<=c;u++){let m=e[1],p=t[1];if(a!==0){let g=(Math.max(r,u*i-n)-e[0])/a,E=(Math.min(s,(u+1)*i+n)-e[0])/a;m=e[1]+g*l,p=e[1]+E*l}let h=Math.floor((Math.min(m,p)-n)/i),f=Math.floor((Math.max(m,p)+n)/i);for(let g=h;g<=f;g++)o(u,g)}},xx=(e,t,n)=>{let i=n[0]-t[0],o=n[1]-t[1],r=Math.hypot(i,o);return r===0?Qt(e,t):Math.abs((e[0]-t[0])*o-(e[1]-t[1])*i)/r},Gi=(e,t,n)=>Oi(e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n),bx=(e,t)=>{let n=e;for(let[i,o]of t){let r=[];for(let[s,a]of n){if(o<=s||i>=a){r.push([s,a]);continue}i>s&&r.push([s,i]),o<a&&r.push([o,a])}n=r}return n},yx=(e,t)=>{let n=se(e,t),o=(e.roundness&&e.points.length>2?Mt(No(e.points),.15,hx):e.points).map(s=>Gr(Oi(e.x+s[0],e.y+s[1]),n,e.angle)),r=[];for(let s=0;s<o.length-1;s++)r.push(hi(o[s],o[s+1]));return r},wx=(e,t)=>{let n=se(e,t),i=lu(e).map(r=>Gr(Oi(e.x+r[0],e.y+r[1]),n,e.angle)),o=[];for(let r=0;r<i.length-1;r++)o.push(hi(i[r],i[r+1]));return o},Px=(e,t,n,i,o,r)=>{let s=[[0,1]];for(let a of n){if(s.length===0)break;let d=[0,...ct(a,i,hi(e,t)).map(u=>bo(e,t,u)).filter(u=>u>0&&u<1).sort((u,m)=>u-m),1],c=[];for(let u=0;u<d.length-1;u++){let m=d[u],p=d[u+1];if(p-m<1e-9)continue;let h=Gi(e,t,(m+p)/2);dt(h,a,i)&&Ut(a,i,h)>r&&c.push([m,p])}c.length&&(s=bx(s,c))}return s.filter(([a,l])=>Qt(Gi(e,t,a),Gi(e,t,l))>=o).map(([a,l])=>[Gi(e,t,a),Gi(e,t,l)])},Ra=class{constructor(t){this.eps=t;this.cellSize=Math.max(t,1)}nodes=[];cells=new Map;cellSize;cellKey(t,n){return`${t}:${n}`}getOrCreate(t){let n=Math.floor(t[0]/this.cellSize),i=Math.floor(t[1]/this.cellSize);for(let a=-1;a<=1;a++)for(let l=-1;l<=1;l++){let d=this.cells.get(this.cellKey(n+a,i+l));if(d){for(let c of d)if(Qt(this.nodes[c],t)<=this.eps)return c}}let o=this.nodes.length;this.nodes.push(t);let r=this.cellKey(n,i),s=this.cells.get(r);return s?s.push(o):this.cells.set(r,[o]),o}forEachInRadius(t,n,i){let o=Math.floor((t[0]-n)/this.cellSize),r=Math.floor((t[0]+n)/this.cellSize),s=Math.floor((t[1]-n)/this.cellSize),a=Math.floor((t[1]+n)/this.cellSize);for(let l=o;l<=r;l++)for(let d=s;d<=a;d++){let c=this.cells.get(this.cellKey(l,d));if(c)for(let u of c)i(u)}}},Cu=e=>!(!si(e.type)||e.fillStyle!=="solid"||e.opacity<100||!ux(e.backgroundColor)||(Re(e)||ye(e))&&!Nt(e.points)),Ou=new Set(["rectangle","diamond","ellipse","frame","magicframe","line","freedraw"]),za=e=>e.opacity<=0,Fu=e=>!za(e)&&(e.type==="image"||!wo(e.strokeColor)||si(e.type)&&!wo(e.backgroundColor)),Ru=e=>Re(e)&&e.polygon&&ps(e.points)&&!za(e)&&!wo(e.backgroundColor)&&wo(e.strokeColor),Sx=e=>Ou.has(e.type)?Re(e)?e.polygon&&ps(e.points):ye(e)?Nt(e.points):!0:!1,Oa=e=>!za(e)&&Ou.has(e.type)&&!wo(e.strokeColor),Ix=(e,t,n)=>{for(let i=t.length-1;i>=0;i--){let o=t[i];if(!(!Fu(o)||Ru(o))&&Sx(o)&&dt(e,o,n))return o}return null},Mx=(e,t)=>{let n=t.snapEpsilon,i=new Ra(n),o=[],r=new Map;for(let{segment:D,elementId:L}of e){let P=i.getOrCreate(D[0]),B=i.getOrCreate(D[1]);if(r.has(P)||r.set(P,L),r.has(B)||r.set(B,L),P===B)continue;let C=i.nodes[P],_=i.nodes[B];o.push({a:P,b:B,pa:C,pb:_,elementId:L,box:[Math.min(C[0],_[0]),Math.min(C[1],_[1]),Math.max(C[0],_[0]),Math.max(C[1],_[1])],splits:[{node:P,t:0},{node:B,t:1}]})}let s=o.map(D=>hi(D.pa,D.pb)),a=o.map((D,L)=>L).sort((D,L)=>o[D].box[0]-o[L].box[0]);for(let D=0;D<a.length;D++){let L=a[D],P=o[L],B=P.box[2]+n;for(let C=D+1;C<a.length;C++){let _=a[C],ee=o[_];if(ee.box[0]>B)break;if(!xt(Gu(P.box,n),ee.box))continue;let ne=cx(s[L],s[_],n);if(!ne)continue;let ie=i.getOrCreate(ne);r.has(ie)||r.set(ie,P.elementId),P.splits.push({node:ie,t:bo(P.pa,P.pb,i.nodes[ie])}),ee.splits.push({node:ie,t:bo(ee.pa,ee.pb,i.nodes[ie])})}}if(i.nodes.length>t.maxBoundarySegments*4)return null;let l=1/0,d=1/0,c=-1/0,u=-1/0;for(let D of o)l=Math.min(l,D.box[0]),d=Math.min(d,D.box[1]),c=Math.max(c,D.box[2]),u=Math.max(u,D.box[3]);let m=Math.max(c-l,u-d,0),p=Math.max(n*2,m/128),h=new Map;o.forEach((D,L)=>{ku(D.pa,D.pb,n,p,(P,B)=>{let C=`${P}:${B}`,_=h.get(C);_?_.push(L):h.set(C,[L])})});for(let D=0;D<i.nodes.length;D++){let L=i.nodes[D],P=h.get(`${Math.floor(L[0]/p)}:${Math.floor(L[1]/p)}`);if(P)for(let B of P){let C=o[B];if(D===C.a||D===C.b)continue;let _=bo(C.pa,C.pb,L);_<=0||_>=1||Bu(L,s[B])<=n&&C.splits.push({node:D,t:_})}}let f=new Set,g=new Map,E=new Map,b=(D,L)=>D<L?`${D}-${L}`:`${L}-${D}`,x=(D,L)=>{let P=g.get(D);P?P.push(L):g.set(D,[L])},y=(D,L,P)=>{if(D===L||Qt(i.nodes[D],i.nodes[L])<n)return;let B=b(D,L),C=E.get(B);C?C.add(P):E.set(B,new Set([P])),!f.has(B)&&(f.add(B),x(D,L),x(L,D))};for(let D of o){let L=new Map;for(let B of D.splits)L.has(B.node)||L.set(B.node,B.t);let P=[...L.entries()].map(([B,C])=>({node:B,t:C})).sort((B,C)=>B.t-C.t);for(let B=0;B<P.length-1;B++)y(P[B].node,P[B+1].node,D.elementId)}if(f.size===0)return[];let w=Math.max(n,t.gapTolerance),S=D=>new Set(g.get(D)??[]).size===1,M=[];for(let D of g.keys())S(D)&&M.push(D);if(M.length>0){let D=Math.max(w,m/128,1),L=new Map,P=(C,_)=>{let ee={u:C,v:_};ku(i.nodes[C],i.nodes[_],0,D,(ne,ie)=>{let oe=`${ne}:${ie}`,De=L.get(oe);De?De.push(ee):L.set(oe,[ee])})};for(let C of f){let[_,ee]=C.split("-").map(Number);P(_,ee)}let B=(C,_)=>{let ee=b(C,_);f.delete(ee);let ne=E.get(ee);E.delete(ee);let ie=g.get(C),oe=g.get(_);return ie?.splice(ie.indexOf(_),1),oe?.splice(oe.indexOf(C),1),ne};for(let C of M){if(!S(C))continue;let _=i.nodes[C],ee=g.get(C)??[],ne=-1,ie=1/0;i.forEachInRadius(_,w,Ne=>{if(Ne===C||ee.includes(Ne))return;let ve=Qt(_,i.nodes[Ne]);ve>=n&&ve<=w&&ve<ie&&(ie=ve,ne=Ne)});let oe=null,De=1/0,zt=0,_t=Math.floor(_[0]/D),yn=Math.floor(_[1]/D),pe=new Set;for(let Ne=-1;Ne<=1;Ne++)for(let ve=-1;ve<=1;ve++){let Ze=L.get(`${_t+Ne}:${yn+ve}`);if(Ze)for(let Jt of Ze){let gi=b(Jt.u,Jt.v);if(pe.has(gi)||(pe.add(gi),!f.has(gi)||Jt.u===C||Jt.v===C))continue;let fl=i.nodes[Jt.u],hl=i.nodes[Jt.v],Kr=bo(fl,hl,_);if(Kr<=0||Kr>=1)continue;let Zr=Bu(_,hi(fl,hl));Zr<=w&&Zr<De&&(De=Zr,oe=Jt,zt=Kr)}}let re=r.get(C)??o[0].elementId;if(oe&&De<ie){let Ne=i.nodes[oe.u],ve=i.nodes[oe.v],Ze=i.getOrCreate(Gi(Ne,ve,zt));if(Ze===oe.u||Ze===oe.v)y(C,Ze,re),P(C,Ze);else{r.has(Ze)||r.set(Ze,E.get(b(oe.u,oe.v))?.values().next().value??re);let Jt=B(oe.u,oe.v)??new Set([re]);for(let gi of Jt)y(oe.u,Ze,gi),y(Ze,oe.v,gi);P(oe.u,Ze),P(Ze,oe.v),y(C,Ze,re),P(C,Ze)}}else ne>=0&&(y(C,ne,re),P(C,ne))}}let A=new Map,T=0;for(let D of g.keys()){if(A.has(D))continue;let L=[D];for(A.set(D,T);L.length;){let P=L.pop();for(let B of g.get(P)??[])A.has(B)||(A.set(B,T),L.push(B))}T++}let G=(D,L)=>Math.atan2(i.nodes[L][1]-i.nodes[D][1],i.nodes[L][0]-i.nodes[D][0]),v=new Map,N=new Map;for(let[D,L]of g){let P=Array.from(new Set(L));P.sort((C,_)=>G(D,C)-G(D,_)),v.set(D,P);let B=new Map;P.forEach((C,_)=>B.set(C,_)),N.set(D,B)}let k=new Set,z=[],W=f.size*2+4;for(let[D,L]of g)for(let P of L){if(k.has(`${D}->${P}`))continue;let B=[],C=D,_=P,ee=0;for(;ee++<=W;){k.add(`${C}->${_}`),B.push(C);let ne=v.get(_),oe=(N.get(_).get(C)-1+ne.length)%ne.length,De=ne[oe];if(C=_,_=De,C===D&&_===P)break}if(B.length>=3){let ne=new Set;for(let ie=0;ie<B.length;ie++){let oe=E.get(b(B[ie],B[(ie+1)%B.length]));if(oe)for(let De of oe)ne.add(De)}z.push({ring:B.map(ie=>i.nodes[ie]),contributors:ne,componentId:A.get(D)??-1})}}return z},Tx=(e,t,n)=>{if(e.length===0)return null;let i=1,o=new Map;for(let c of e)o.set(c,-Fa(c.ring,0));let r=null,s=1/0;for(let c of e){let u=o.get(c);if(Math.sign(u)===i)continue;let m=Math.abs(u);m<n.minArea||Nr(t,c.ring)&&m<s&&(s=m,r=c)}if(!r)return null;let a=r,l=e.filter(c=>c.componentId!==a.componentId&&Math.sign(o.get(c))===i&&Math.abs(o.get(c))>=n.minArea&&!Nr(t,c.ring)&&Nr(c.ring[0],a.ring)),d=l.filter(c=>!l.some(u=>u!==c&&Nr(c.ring[0],u.ring)));return{face:a,holes:d}},Ax=(e,t)=>{let n=[];for(let i of e)(n.length===0||Qt(n[n.length-1],i)>=t)&&n.push(i);for(;n.length>1&&Qt(n[0],n[n.length-1])<t;)n.pop();return n},Dx=(e,t)=>{if(e.length<=3)return e;let n=[];for(let i=0;i<e.length;i++){let o=n[n.length-1]??e[e.length-1],r=e[(i+1)%e.length];xx(e[i],o,r)>=t&&n.push(e[i])}return n.length>=3?n:e},Nu=(e,t,n)=>{let i=Ax(e,t.snapEpsilon);if(i.length<3)return null;let o=.75,r=Sn(i,o);for(;r.length>n&&o<1e6;)o*=2,r=Sn(i,o);return r.length>n?null:(r=Dx(r,.05),r.length>=3?r:null)},vx=(e,t)=>{let n=Math.sign(Fa(t,0))===Math.sign(Fa(e,0))?[...t].reverse():t,i=0,o=0,r=1/0;for(let a=0;a<e.length;a++)for(let l=0;l<n.length;l++){let d=Qt(e[a],n[l]);d<r&&(r=d,i=a,o=l)}let s=e.slice(0,i+1);for(let a=0;a<=n.length;a++)s.push(n[(o+a)%n.length]);return s.push(e[i]),s.push(...e.slice(i+1)),s},Bx=(e,t,n)=>{let i=Nu(e,n,n.maxGeneratedPoints);if(!i)return null;let o=t.map((s,a)=>({holeRing:s,index:a})).sort((s,a)=>yo(a.holeRing,0)-yo(s.holeRing,0)),r=[];for(let{holeRing:s,index:a}of o){let l=n.maxGeneratedPoints-i.length-2;if(l<3)break;let d=Nu(s,n,l);d&&(i=vx(i,d),r.push(a))}return{scenePoints:[...i,i[0]],splicedHoleIndices:r}},BA=e=>{let t={...gx,...e.options},{point:n,elements:i,elementsMap:o}=e,r=Ix(n,i,o),s=new Map;i.forEach((v,N)=>s.set(v.id,N));let a=(v,N)=>{let k=P=>xt(v,ue(P,o)),z=i.filter(P=>P.id!==N?.id&&Oa(P)&&k(P)),W=i.filter(P=>Cu(P)&&k(P)),D=[],L=P=>{let B=s.get(P.id)??0,C=W.filter(ne=>ne.id!==P.id&&(s.get(ne.id)??0)>B),_=Math.max(t.snapEpsilon,P.strokeWidth/2,fx),ee=Re(P)?yx(P,o):ye(P)?wx(P,o):ki(P,o);if((P.type==="freedraw"||Re(P)&&!P.polygon)&&Nt(P.points)&&ee.length>0){let ne=ee[0][0],ie=ee[ee.length-1][1];Qt(ne,ie)>=t.snapEpsilon&&ee.push(hi(ie,ne))}for(let ne of ee){if(D.length>t.maxBoundarySegments)return;if(Ex(ne)!==0){if(C.length===0){D.push({segment:ne,elementId:P.id});continue}for(let[ie,oe]of Px(ne[0],ne[1],C,o,t.snapEpsilon,_))D.push({segment:hi(ie,oe),elementId:P.id})}}};for(let P of N?[N,...z]:z){if(D.length>t.maxBoundarySegments)break;L(P)}return D.length>t.maxBoundarySegments?null:D},l=v=>{let N=Mx(v,t);return N?Tx(N,n,t):"too_complex"},d=null;if(r){let v=t.gapTolerance+2+Math.max(r.strokeWidth??1,1),N=Gu(ue(r,o),v),k=a(N,r);if(!k)return{ok:!1,reason:"too_complex"};let z=l(k);if(z==="too_complex")return{ok:!1,reason:"too_complex"};if(!z)return{ok:!1,reason:"open_region"};d=z}else{let v=i.reduce((k,z)=>k+(Oa(z)?1:0),0);if(v===0)return{ok:!1,reason:"no_owner"};let N=t.fallbackSearchRadius;for(let k=0;k<4&&!d;k++,N*=2){let z=[n[0]-N,n[1]-N,n[0]+N,n[1]+N],W=i.reduce((B,C)=>B+(Oa(C)&&xt(z,ue(C,o))?1:0),0),D=k===3||W===v;if(W===0)continue;let L=a(z,null);if(!L)return{ok:!1,reason:"no_owner"};let P=l(L);if(P==="too_complex")return{ok:!1,reason:"no_owner"};if(P&&(D||P.face.ring.every(B=>B[0]>z[0]+t.gapTolerance&&B[1]>z[1]+t.gapTolerance&&B[0]<z[2]-t.gapTolerance&&B[1]<z[3]-t.gapTolerance))&&(d=P),!d&&D)break}if(!d)return{ok:!1,reason:"no_owner"}}let{face:c,holes:u}=d,m=Bx(c.ring,u.map(v=>v.ring),t);if(!m)return{ok:!1,reason:"invalid_polygon"};let{scenePoints:p,splicedHoleIndices:h}=m;if(yo(p,0)<t.minArea)return{ok:!1,reason:"too_small"};let f=new Set(c.contributors);for(let v of h)for(let N of u[v].contributors)f.add(N);let g=new Set(r?[r.id,...f]:f);for(let v of u)for(let N of v.contributors)g.add(N);let E=p,[b,x,y,w]=mi(p),S=v=>{let[N,k,z,W]=ue(v,o);if(z<b||N>y||W<x||k>w)return!1;let D=[Oi((N+z)/2,(k+W)/2)];if(q(v)||ye(v)){let L=se(v,o),P=Math.max(1,Math.floor(v.points.length/8));for(let B=0;B<v.points.length;B+=P)D.push(Gr(Oi(v.x+v.points[B][0],v.y+v.points[B][1]),L,v.angle))}return D.some(L=>Lu(L,E))},M=v=>{let[N,k,z,W]=ue(v,o);if(z<b||N>y||W<x||k>w)return!1;if(dt(n,v,o))return!0;let D=ki(v,o),L=Math.max(1,Math.floor(D.length/16));for(let B=0;B<D.length;B+=L)if(Lu(D[B][0],E))return!0;let P=Math.max(1,Math.floor(p.length/16));for(let B=0;B<p.length;B+=P)if(dt(p[B],v,o))return!0;return!1},A=null,T=null;for(let v of i)Cu(v)&&M(v)&&(T=v),(g.has(v.id)||Fu(v)&&S(v))&&(A=A??v);let G=T?{placement:"above",elementId:T.id}:{placement:"below",elementId:(A??i[i.length-1]).id};return{ok:!0,ownerId:r?.id??null,boundaryElementIds:[...f].filter(v=>v!==r?.id),scenePoints:p,insertion:G}},LA=e=>{let{hitElement:t,scenePoints:n,elementsMap:i}=e;if(!Ru(t))return!1;let o=se(t,i),r=t.points.map(x=>Gr(Oi(t.x+x[0],t.y+x[1]),o,t.angle)),s=yo(r,0),a=yo(n,0),l=Math.abs(s-a)<=.05*Math.max(s,a),[d,c,u,m]=mi(r),[p,h,f,g]=mi(n),E=px,b=Math.abs(d-p)<=E&&Math.abs(c-h)<=E&&Math.abs(u-f)<=E&&Math.abs(m-g)<=E;return l&&b};I();import{arrayToMap as Sb,arrayToObject as gn,assertNever as om,isDevEnv as En,isShallowEqual as ja,isTestEnv as xn,randomInteger as im}from"@excalidraw/common";I();import{assertNever as Hx,COLOR_PALETTE as Wx,isDevEnv as Ux,isTestEnv as Yx,randomId as Xx,Emitter as Hu,toIterable as Ri}from"@excalidraw/common";I();import{ORIG_ID as Nx,randomId as _u,randomInteger as Gx,arrayToMap as Ox,castArray as _a,findLastIndex as Fi,getUpdatedTimestamp as Fx,isTestEnv as Rx}from"@excalidraw/common";I();import{arrayToMap as Lx}from"@excalidraw/common";var kx=e=>{let t=(o,r)=>o.groupIds[o.groupIds.length-r-1],n=(o,r)=>{let s=new Map,a=[];for(let l of o){let d=t(l,r);if(d===void 0){a.push(l);continue}let c=s.get(d);c||(c=[],s.set(d,c),a.push(d)),c.push(l)}return a.flatMap(l=>typeof l=="string"?n(s.get(l),r+1):[l])},i=n(e,0);return i.length!==e.length?(console.error("defragmentGroups: lost some elements... bailing!"),e):i},Cx=e=>{let t=Lx(e),n=new Set;for(let i of e)if(!n.has(i)){if(i.boundElements?.length){n.add(i);for(let o of i.boundElements){let r=t.get(o.id);r&&o.type==="text"&&n.add(r)}continue}i.type==="text"&&i.containerId&&t.get(i.containerId)?.boundElements?.some(o=>o.id===i.id)||n.add(i)}return n.size!==e.length?(console.error("normalizeBoundElementsOrder: lost some elements... bailing!"),e):[...n]},zu=e=>Cx(kx(e));var zx=(e,t,n,i)=>{let o=Wa(n);return Rx()&&_x(o,n.id),o.id=_u(),o.updated=Fx(),o.created=o.updated,i&&(o.seed=Gx(),fd(o)),o.groupIds=Gc(o.groupIds,e,r=>(t.has(r)||t.set(r,_u()),t.get(r))),o},$A=e=>{let{elements:t}=e,n="appState"in e?e.appState:{editingGroupId:null,selectedGroupIds:{}},i=new Map,o=new Map,r=[],s=[],a=new Map,l=new Map,d=new Map,c=Ox(t),u=e.type==="in-place"?e.idsOfElementsToDuplicate:new Map(t.map(E=>[E.id,E])),m=e.type==="everything"&&e.preserveFrameChildrenOrder;if(e.type==="in-place")for(let E of Object.keys(e.appState.selectedGroupIds))t.filter(b=>b.groupIds?.includes(E)).forEach(b=>u.set(b.id,b));t=zu(t);let p=t.slice(),h=E=>{let x=_a(E).reduce((y,w)=>{if(i.has(w.id))return y;i.set(w.id,!0),Qe(w)||console.error("[NONDELETED][INVARIANT] Element to duplicate should be non-deleted");let S=zx(n.editingGroupId,o,w,e.randomizeSeed);return i.set(S.id,!0),d.set(S.id,S),a.set(w.id,S.id),l.set(S.id,w),s.push(w),r.push(S),y.push(S),y},[]);return Array.isArray(E)?x:x[0]||null},f=(E,b)=>{if(b){if(E>p.length-1){p.push(..._a(b));return}p.splice(E+1,0,..._a(b))}},g=new Set(t.filter(E=>u.has(E.id)&&te(E)).map(E=>E.id));for(let E of t){if(i.has(E.id)||!u.has(E.id))continue;let b=pa(n,E);if(b){let x=et(t,b).flatMap(w=>te(w)&&!m?[...Rn(t,w.id),w]:[w]),y=Fi(p,w=>w.groupIds?.includes(b));f(y,h(x));continue}if(!(!m&&E.frameId&&g.has(E.frameId))){if(te(E)){let x=E.id;if(m){f(Fi(p,S=>S.id===x),h(E));continue}let y=Rn(t,x),w=Fi(p,S=>S.frameId===x||S.id===x);f(w,h([...y,E]));continue}if(Wt(E)){let x=Q(E,c),y=Fi(p,w=>w.id===E.id||"containerId"in w&&w.containerId===E.id);x?f(y,h([E,x])):f(y,h(E));continue}if(Ie(E)){let x=_e(E,c),y=Fi(p,w=>w.id===E.id||w.id===x?.id);x?f(y,h([x,E])):f(y,h(E));continue}f(Fi(p,x=>x.id===E.id),h(E))}}if(uc(r,a,d),Uc(p,s,a),e.overrides)for(let E of r){let b=l.get(E.id);b&&Object.assign(E,e.overrides({duplicateElement:E,origElement:b,origIdToDuplicateId:a}))}return{duplicatedElements:r,duplicateElementsMap:d,elementsWithDuplicates:p,origIdToDuplicateId:a}},Ha=(e,t=0)=>{if(e==null||typeof e!="object")return e;let n=Object.prototype.toString.call(e);if(n==="[object Object]"){let i=typeof e.constructor=="function"?Object.create(Object.getPrototypeOf(e)):{};for(let o in e)if(e.hasOwnProperty(o)){if(t===0&&(o==="shape"||o==="canvas"))continue;i[o]=Ha(e[o],t+1)}return i}if(Array.isArray(e)){let i=e.length,o=new Array(i);for(;i--;)o[i]=Ha(e[i],t+1);return o}return O.DEV&&n!=="[object Object]"&&n!=="[object Array]"&&n.startsWith("[object ")&&console.warn(`_deepCloneElement: unexpected object type ${n}. This value will not be cloned!`),e},Wa=e=>Ha(e),_x=(e,t)=>{Object.defineProperty(e,Nx,{value:t,writable:!1,enumerable:!1})};var pt={IMMEDIATELY:"IMMEDIATELY",NEVER:"NEVER",EVENTUALLY:"EVENTUALLY"},Wu=class{constructor(t){this.app=t}onDurableIncrementEmitter=new Hu;onStoreIncrementEmitter=new Hu;scheduledMacroActions=new Set;scheduledMicroActions=[];_snapshot=Vn.empty();get snapshot(){return this._snapshot}set snapshot(t){this._snapshot=t}scheduleAction(t){this.scheduledMacroActions.add(t),this.satisfiesScheduledActionsInvariant()}scheduleCapture(){this.scheduleAction(pt.IMMEDIATELY)}scheduleMicroAction(t){let{action:n}=t,i;if("change"in t)i=t.change;else{let r=Vn.create(this.app.scene.getElementsMapIncludingDeleted(),this.app.state),s=r.maybeClone(n,t.elements?Hc(t.elements):void 0,t.appState);i=Po.create(r,s)}let o="delta"in t?t.delta:void 0;this.scheduledMicroActions.push(()=>this.processAction({action:n,change:i,delta:o}))}commit(t,n){this.flushMicroActions();try{let i=this.getScheduledMacroAction();this.processAction({action:i,elements:t,appState:n})}finally{this.satisfiesScheduledActionsInvariant(),this.scheduledMacroActions=new Set}}clear(){this.snapshot=Vn.empty(),this.scheduledMacroActions=new Set}emitDurableIncrement(t,n=void 0,i=void 0){let o=this.snapshot,r,s;if(n?r=n:r=Po.create(o,t),i?s=i:s=Xa.calculate(o,t),!s.isEmpty()){let a=new Ua(r,s);this.onDurableIncrementEmitter.trigger(a),this.onStoreIncrementEmitter.trigger(a)}}emitEphemeralIncrement(t,n=void 0){let i;if(n)i=n;else{let r=this.snapshot;i=Po.create(r,t)}let o=new Ya(i);this.onStoreIncrementEmitter.trigger(o)}applyChangeToSnapshot(t){let n=this.snapshot,i=this.snapshot.applyChange(t);return n===i?null:i}maybeCloneSnapshot(t,n,i){if(!n&&!i)return null;let o=this.snapshot,r=this.snapshot.maybeClone(t,n,i);return o===r?null:r}flushMicroActions(){for(let t of this.scheduledMicroActions)try{t()}catch(n){console.error("Failed to execute scheduled micro action",n)}this.scheduledMicroActions=[]}processAction(t){let{action:n}=t;if(n===pt.EVENTUALLY&&!this.onStoreIncrementEmitter.subscribers.length)return;let i;if("change"in t?i=this.applyChangeToSnapshot(t.change):i=this.maybeCloneSnapshot(n,t.elements,t.appState),!i)return;let o="change"in t?t.change:void 0,r="delta"in t?t.delta:void 0;try{switch(n){case pt.IMMEDIATELY:this.emitDurableIncrement(i,o,r);break;case pt.NEVER:case pt.EVENTUALLY:this.emitEphemeralIncrement(i,o);break;default:Hx(n,"Unknown store action")}}finally{switch(n){case pt.IMMEDIATELY:case pt.NEVER:this.snapshot=i;break}}}getScheduledMacroAction(){let t;return this.scheduledMacroActions.has(pt.IMMEDIATELY)?t=pt.IMMEDIATELY:this.scheduledMacroActions.has(pt.NEVER)?t=pt.NEVER:t=pt.EVENTUALLY,t}satisfiesScheduledActionsInvariant(){if(!(this.scheduledMacroActions.size>=0&&this.scheduledMacroActions.size<=Object.keys(pt).length)){let t=`There can be at most three store actions scheduled at the same time, but there are "${this.scheduledMacroActions.size}".`;if(console.error(t,this.scheduledMacroActions.values()),Yx()||Ux())throw new Error(t)}}},Po=class e{constructor(t,n){this.elements=t;this.appState=n}static create(t,n){let i=n.getChangedElements(t),o=n.getChangedAppState(t);return new e(i,o)}},Or=class{constructor(t,n){this.type=t;this.change=n}static isDurable(t){return t.type==="durable"}static isEphemeral(t){return t.type==="ephemeral"}},Ua=class extends Or{constructor(n,i){super("durable",n);this.change=n;this.delta=i}},Ya=class extends Or{constructor(n){super("ephemeral",n);this.change=n}},Xa=class e{constructor(t,n,i){this.id=t;this.elements=n;this.appState=i}static create(t,n,i={id:Xx()}){return new this(i.id,t,n)}static calculate(t,n){let i=n.metadata.didElementsChange?jn.calculate(t.elements,n.elements):jn.empty(),o=n.metadata.didAppStateChange?$n.calculate(t.appState,n.appState):$n.empty();return this.create(i,o)}static restore(t){let{id:n,elements:i,appState:o}=t;return new this(n,jn.restore(i),$n.restore(o))}static load({id:t,elements:{added:n,removed:i,updated:o},appState:{delta:r}}){let s=jn.create(n,i,o),a=$n.create(r);return new this(t,s,a)}static squash(...t){let n=e.empty();for(let i of t)n.elements.squash(i.elements),n.appState.squash(i.appState);return n}static inverse(t){return this.create(t.elements.inverse(),t.appState.inverse())}static applyTo(t,n,i,o){let[r,s]=t.elements.applyTo(n,Vn.empty().elements,o),[a,l]=t.appState.applyTo(i,r);return[r,a,s||l]}static applyLatestChanges(t,n,i,o){return this.create(t.elements.applyLatestChanges(n,i,o),t.appState,{id:t.id})}static empty(){return e.create(jn.empty(),$n.empty())}isEmpty(){return this.elements.isEmpty()&&this.appState.isEmpty()}},Vn=class e{constructor(t,n,i={didElementsChange:!1,didAppStateChange:!1,isEmpty:!1}){this.elements=t;this.appState=n;this.metadata=i}_lastChangedElementsHash=0;_lastChangedAppStateHash=0;static create(t,n,i={didElementsChange:!1,didAppStateChange:!1}){return new e(t,Uu(n)?n:zi(n),i)}static empty(){return new e(new Map,$x(),{didElementsChange:!1,didAppStateChange:!1,isEmpty:!0})}getChangedElements(t){let n={};for(let i of Ri(t.elements))this.elements.get(i.id)||(n[i.id]=Ae(i,{isDeleted:!0}));for(let i of Ri(this.elements))t.elements.get(i.id)!==i&&(n[i.id]=i);return n}getChangedAppState(t){return j.getRightDifferences(t.appState,this.appState).reduce((n,i)=>Object.assign(n,{[i]:this.appState[i]}),{})}isEmpty(){return this.metadata.isEmpty}applyChange(t){let n=new Map(this.elements);for(let[o,r]of Object.entries(t.elements))n.set(o,r);let i=zi({...this.appState,...t.appState});return e.create(n,i,{didElementsChange:Object.keys(t.elements).length>0,didAppStateChange:Object.keys(t.appState).length>0})}maybeClone(t,n,i){let o={shouldCompareHashes:!1};t===pt.EVENTUALLY&&(o.shouldCompareHashes=!0);let r=this.maybeCreateElementsSnapshot(n,o),s=this.maybeCreateAppStateSnapshot(i,o),a=!1,l=!1;return this.elements!==r&&(a=!0),this.appState!==s&&(l=!0),!a&&!l?this:new e(r,s,{didElementsChange:a,didAppStateChange:l})}maybeCreateAppStateSnapshot(t,n={shouldCompareHashes:!1}){if(!t)return this.appState;let i=Uu(t)?t:zi(t);return this.detectChangedAppState(i,n)?i:this.appState}maybeCreateElementsSnapshot(t,n={shouldCompareHashes:!1}){if(!t)return this.elements;let i=this.detectChangedElements(t,n);return i?.size?this.createElementsSnapshot(i):this.elements}detectChangedAppState(t,n={shouldCompareHashes:!1}){if(this.appState===t)return;let i=j.isRightDifferent(this.appState,t);if(!i)return;let o=$u(JSON.stringify(t));if(!(n.shouldCompareHashes&&this._lastChangedAppStateHash===o))return this._lastChangedAppStateHash=o,i}detectChangedElements(t,n={shouldCompareHashes:!1}){if(this.elements===t)return;let i=new Map;for(let r of Ri(this.elements))t.get(r.id)||i.set(r.id,Ae(r,{isDeleted:!0}));for(let r of Ri(t)){let s=this.elements.get(r.id);if(!s||s.version<r.version){if(Fe(r)&&!ei(r))continue;i.set(r.id,r)}}if(!i.size)return;let o=Xu(i);if(!(n.shouldCompareHashes&&this._lastChangedElementsHash===o))return this._lastChangedElementsHash=o,i}createElementsSnapshot(t){let n=new Map;for(let i of Ri(this.elements))n.set(i.id,i);for(let i of Ri(t))n.set(i.id,Wa(i));return n}},Yu="__observedAppState",$x=()=>({name:null,editingGroupId:null,viewBackgroundColor:Wx.white,selectedElementIds:{},selectedGroupIds:{},selectedLinearElement:null,croppingElementId:null,activeLockedId:null,lockedMultiSelections:{}}),zi=e=>{let t={name:e.name,editingGroupId:e.editingGroupId,viewBackgroundColor:e.viewBackgroundColor,selectedElementIds:e.selectedElementIds,selectedGroupIds:e.selectedGroupIds,croppingElementId:e.croppingElementId,activeLockedId:e.activeLockedId,lockedMultiSelections:e.lockedMultiSelections,selectedLinearElement:e.selectedLinearElement?{elementId:e.selectedLinearElement.elementId,isEditing:!!e.selectedLinearElement.isEditing}:null};return Reflect.defineProperty(t,Yu,{value:!0,enumerable:!1}),t},Uu=e=>!!Reflect.get(e,Yu);I();var nm=ip(qu(),1);import{randomInteger as cb,arrayToMap as ub,toBrandedType as Qu,isDevEnv as Ju,isTestEnv as em,toArray as mb}from"@excalidraw/common";import{isNonDeletedElement as pb}from"@excalidraw/element";import{isFrameLikeElement as fb}from"@excalidraw/element";import{getElementsInGroup as hb}from"@excalidraw/element";import{syncInvalidIndices as gb,syncMovedIndices as Eb,validateFractionalIndices as xb}from"@excalidraw/element";import{getSelectedElements as bb}from"@excalidraw/element";import{mutateElement as yb}from"@excalidraw/element";var tm=e=>{let t=new Map,n=[];for(let i of e)i.isDeleted||(n.push(i),t.set(i.id,i));return{elementsMap:t,elements:n}},wb=(0,nm.default)(e=>{(Ju()||em()||window?.DEBUG_FRACTIONAL_INDICES)&&xb(e,{shouldThrow:Ju()||em(),includeBoundTextValidation:!0})},1e3*60,{leading:!0,trailing:!1}),Pb=e=>{let t=["includeBoundTextElement","includeElementsInFrames"],n="";for(let i of t)n+=`${i}:${e[i]?"1":"0"}`;return n},_i=class{callbacks=new Set;nonDeletedElements=[];nonDeletedElementsMap=Qu(new Map);elements=[];nonDeletedFramesLikes=[];frames=[];elementsMap=Qu(new Map);selectedElementsCache={selectedElementIds:null,elements:null,cache:new Map};sceneNonce;getSceneNonce(){return this.sceneNonce}getNonDeletedElementsMap(){return this.nonDeletedElementsMap}getElementsIncludingDeleted(){return this.elements}getElementsMapIncludingDeleted(){return this.elementsMap}getNonDeletedElements(){return this.nonDeletedElements}getFramesIncludingDeleted(){return this.frames}constructor(t=null,n){t&&this.replaceAllElements(t,n)}getSelectedElements(t){let n=Pb(t),i=t?.elements||this.nonDeletedElements;if(this.selectedElementsCache.elements===i&&this.selectedElementsCache.selectedElementIds===t.selectedElementIds){let r=this.selectedElementsCache.cache.get(n);if(r)return r}else t?.elements==null&&this.selectedElementsCache.cache.clear();let o=bb(i,{selectedElementIds:t.selectedElementIds},t);return t?.elements==null&&(this.selectedElementsCache.selectedElementIds=t.selectedElementIds,this.selectedElementsCache.elements=this.nonDeletedElements,this.selectedElementsCache.cache.set(n,o)),o}getNonDeletedFramesLikes(){return this.nonDeletedFramesLikes}getElement(t){return this.elementsMap.get(t)||null}getNonDeletedElement(t){let n=this.getElement(t);return n&&pb(n)?n:null}mapElements(t){let n=!1,i=this.elements.map(o=>{let r=t(o);return r!==o&&(n=!0),r});return n&&this.replaceAllElements(i),n}replaceAllElements(t,n){let i=mb(t),o=[];n?.skipValidation||wb(i),this.elements=gb(i),this.elementsMap.clear(),this.elements.forEach(s=>{fb(s)&&o.push(s),this.elementsMap.set(s.id,s)});let r=tm(this.elements);this.nonDeletedElements=r.elements,this.nonDeletedElementsMap=r.elementsMap,this.frames=o,this.nonDeletedFramesLikes=tm(this.frames).elements,this.triggerUpdate()}triggerUpdate(){this.sceneNonce=cb();for(let t of Array.from(this.callbacks))t()}onUpdate(t){if(this.callbacks.has(t))throw new Error;return this.callbacks.add(t),()=>{if(!this.callbacks.has(t))throw new Error;this.callbacks.delete(t)}}destroy(){this.elements=[],this.nonDeletedElements=[],this.nonDeletedFramesLikes=[],this.frames=[],this.elementsMap.clear(),this.selectedElementsCache.selectedElementIds=null,this.selectedElementsCache.elements=null,this.selectedElementsCache.cache.clear(),this.callbacks.clear()}insertElementsAtIndex(t,n){if(!t.length)return;if(n===null&&(n=this.elements.length),!Number.isFinite(n)||n<0)throw new Error("insertElementAtIndex can only be called with index >= 0");let i=[...this.elements.slice(0,n),...t,...this.elements.slice(n)];Eb(i,ub(t)),this.replaceAllElements(i)}insertElement=t=>{this.insertElementsAtIndex([t],null)};getElementIndex(t){return this.elements.findIndex(n=>n.id===t)}getContainerElement=t=>t&&t.containerId&&this.getElement(t.containerId)||null;getElementsFromId=t=>{let n=this.getNonDeletedElementsMap(),i=n.get(t);return i?[i]:hb(n,t)};mutateElement(t,n,i={informMutation:!0,isDragging:!1}){let o=this.getNonDeletedElementsMap(),{version:r}=t,{version:s}=yb(t,o,n,i);return this.elementsMap.has(t.id)&&r!==s&&i.informMutation&&this.triggerUpdate(),t}};var j=class e{constructor(t,n){this.deleted=t;this.inserted=n}static create(t,n,i,o){let r=i&&o!=="inserted"?i(t,"deleted"):t,s=i&&o!=="deleted"?i(n,"inserted"):n;return new e(r,s)}static calculate(t,n,i,o){if(t===n)return e.empty();let r={},s={};for(let d of this.getDifferences(t,n))r[d]=t[d],s[d]=n[d];let[a,l]=o?o(r,s):[r,s];return e.create(a,l,i)}static empty(){return new e({},{})}static isEmpty(t){return!Object.keys(t.deleted).length&&!Object.keys(t.inserted).length}static merge(t,n,i=e.empty()){return e.create({...t.deleted,...n.deleted,...i.deleted},{...t.inserted,...n.inserted,...i.inserted})}static mergeObjects(t,n,i={}){let o={...t};for(let r of Object.keys(i))delete o[r];return{...o,...n}}static mergeArrays(t,n,i,o){return Object.values(e.mergeObjects(gn(t??[],o),gn(n??[],o),gn(i??[],o)))}static diffObjects(t,n,i,o){if(!t[i]&&!n[i])return;let r=t[i]!==null&&typeof t[i]=="object",s=n[i]!==null&&typeof n[i]=="object";if(r||s){let a=t[i]??{},l=n[i]??{},d=e.getLeftDifferences(a,l).reduce((u,m)=>(u[m]=o(a[m]),u),{}),c=e.getRightDifferences(a,l).reduce((u,m)=>(u[m]=o(l[m]),u),{});Object.keys(d).length||Object.keys(c).length?(Reflect.set(t,i,d),Reflect.set(n,i,c)):(Reflect.deleteProperty(t,i),Reflect.deleteProperty(n,i))}else t[i]===n[i]&&(Reflect.deleteProperty(t,i),Reflect.deleteProperty(n,i))}static diffArrays(t,n,i,o){if(!(!t[i]&&!n[i])&&(Array.isArray(t[i])||Array.isArray(n[i]))){let r=Array.isArray(t[i])?t[i]:[],s=Array.isArray(n[i])?n[i]:[],a=gn(e.getLeftDifferences(gn(r,o),gn(s,o)),d=>d),l=gn(e.getRightDifferences(gn(r,o),gn(s,o)),d=>d);if(Object.keys(a).length||Object.keys(l).length){let d=r.filter(u=>a[o?o(u):String(u)]),c=s.filter(u=>l[o?o(u):String(u)]);Reflect.set(t,i,d),Reflect.set(n,i,c)}else Reflect.deleteProperty(t,i),Reflect.deleteProperty(n,i)}}static isLeftDifferent(t,n,i=!1){return!!this.distinctKeysIterator("left",t,n,i).next().value}static isRightDifferent(t,n,i=!1){return!!this.distinctKeysIterator("right",t,n,i).next().value}static isInnerDifferent(t,n,i=!1){return!!!!this.distinctKeysIterator("inner",t,n,i).next().value}static isDifferent(t,n,i=!1){return!!!!this.distinctKeysIterator("full",t,n,i).next().value}static getLeftDifferences(t,n,i=!1){return Array.from(this.distinctKeysIterator("left",t,n,i)).sort()}static getRightDifferences(t,n,i=!1){return Array.from(this.distinctKeysIterator("right",t,n,i)).sort()}static getInnerDifferences(t,n,i=!1){return Array.from(this.distinctKeysIterator("inner",t,n,i)).sort()}static getDifferences(t,n,i=!1){return Array.from(this.distinctKeysIterator("full",t,n,i)).sort()}static*distinctKeysIterator(t,n,i,o=!1){if(n===i)return;let r=[];t==="left"?r=Object.keys(n):t==="right"?r=Object.keys(i):t==="inner"?r=Object.keys(n).filter(s=>s in i):t==="full"?r=Array.from(new Set([...Object.keys(n),...Object.keys(i)])):om(t,`Unknown distinctKeysIterator's join param "${t}"`,!0);for(let s of r){let a=n[s],l=i[s];if(a!==l){if(!o&&typeof a=="object"&&typeof l=="object"&&a!==null&&l!==null&&ja(a,l))continue;yield s}}}},$n=class e{constructor(t){this.delta=t}static create(t){return new e(t)}static calculate(t,n){let i=j.calculate(t,n,e.orderAppStateKeys,e.postProcess);return new e(i)}static restore(t){let{delta:n}=t;return new e(n)}static empty(){return new e(j.create({},{}))}inverse(){let t=j.create(this.delta.inserted,this.delta.deleted);return new e(t)}squash(t){if(t.isEmpty())return this;let n=j.mergeObjects(this.delta.deleted.selectedElementIds??{},t.delta.deleted.selectedElementIds??{}),i=j.mergeObjects(this.delta.inserted.selectedElementIds??{},t.delta.inserted.selectedElementIds??{}),o=j.mergeObjects(this.delta.deleted.selectedGroupIds??{},t.delta.deleted.selectedGroupIds??{}),r=j.mergeObjects(this.delta.inserted.selectedGroupIds??{},t.delta.inserted.selectedGroupIds??{}),s=j.mergeObjects(this.delta.deleted.lockedMultiSelections??{},t.delta.deleted.lockedMultiSelections??{}),a=j.mergeObjects(this.delta.inserted.lockedMultiSelections??{},t.delta.inserted.lockedMultiSelections??{}),l={},d={};return(Object.keys(n).length||Object.keys(i).length)&&(d.selectedElementIds=n,l.selectedElementIds=i),(Object.keys(o).length||Object.keys(r).length)&&(d.selectedGroupIds=o,l.selectedGroupIds=r),(Object.keys(s).length||Object.keys(a).length)&&(d.lockedMultiSelections=s,l.lockedMultiSelections=a),this.delta=j.merge(this.delta,t.delta,j.create(d,l)),this}applyTo(t,n){try{let{selectedElementIds:i={},selectedGroupIds:o={},lockedMultiSelections:r={}}=this.delta.deleted,{selectedElementIds:s={},selectedGroupIds:a={},lockedMultiSelections:l={},selectedLinearElement:d,...c}=this.delta.inserted,u=j.mergeObjects(t.selectedElementIds,s,i),m=j.mergeObjects(t.selectedGroupIds,a,o),p=j.mergeObjects(t.lockedMultiSelections,l,r),h=d&&n.has(d.elementId)?new R(n.get(d.elementId),n,d.isEditing):null,f={...t,...c,selectedElementIds:u,selectedGroupIds:m,lockedMultiSelections:p,selectedLinearElement:typeof d<"u"?h:t.selectedLinearElement},g=this.filterInvisibleChanges(t,f,n);return[f,g]}catch(i){if(console.error("Couldn't apply appstate change",i),xn()||En())throw i;return[t,!1]}}isEmpty(){return j.isEmpty(this.delta)}filterInvisibleChanges(t,n,i){let o=zi(t),r=zi(n),s=j.isRightDifferent(e.stripElementsProps(o),e.stripElementsProps(r)),a=j.isRightDifferent(e.stripStandaloneProps(o),e.stripStandaloneProps(r));if(!s&&!a)return!1;let l={value:s};if(a){let d=j.getRightDifferences(e.stripStandaloneProps(o),e.stripStandaloneProps(r)),c=new Set;(d.includes("editingGroupId")||d.includes("selectedGroupIds"))&&(c=kc(i));for(let u of d)switch(u){case"selectedElementIds":n[u]=e.filterSelectedElements(n[u],i,l);break;case"selectedGroupIds":n[u]=e.filterSelectedGroups(n[u],c,l);break;case"croppingElementId":{let b=n[u];if(!b)l.value=!0;else{let x=i.get(b);x&&!x.isDeleted?l.value=!0:n[u]=null}break}case"editingGroupId":let m=n[u];m?c.has(m)?l.value=!0:n[u]=null:l.value=!0;break;case"selectedLinearElement":let p=n[u];if(!p)l.value=!0;else{let b=i.get(p.elementId);b&&!b.isDeleted?l.value=!0:n[u]=null}break;case"lockedMultiSelections":let h=t[u]||{},f=n[u]||{};ja(h,f)||(l.value=!0);break;case"activeLockedId":let g=t[u]||null,E=n[u]||null;g!==E&&(l.value=!0);break;default:om(u,`Unknown ObservedElementsAppState's key "${u}"`,!0)}}return l.value}static filterSelectedElements(t,n,i){let o=Object.keys(t);if(!o.length)return i.value=!0,t;let r={...t};for(let s of o){let a=n.get(s);a&&!a.isDeleted?i.value=!0:delete r[s]}return r}static filterSelectedGroups(t,n,i){if(!Object.keys(t).length)return i.value=!0,t;let r={...t};for(let s of Object.keys(r))n.has(s)?i.value=!0:delete r[s];return r}static stripElementsProps(t){let{editingGroupId:n,selectedGroupIds:i,selectedElementIds:o,selectedLinearElement:r,croppingElementId:s,lockedMultiSelections:a,activeLockedId:l,...d}=t;return d}static stripStandaloneProps(t){let{name:n,viewBackgroundColor:i,...o}=t;return o}static postProcess(t,n){try{j.diffObjects(t,n,"selectedElementIds",i=>!0),j.diffObjects(t,n,"selectedGroupIds",i=>i??!1),j.diffObjects(t,n,"lockedMultiSelections",i=>i??{})}catch(i){if(console.error("Couldn't postprocess appstate change deltas."),xn()||En())throw i}finally{return[t,n]}}static orderAppStateKeys(t){let n={};for(let i of Object.keys(t).sort())n[i]=t[i];return n}},jn=class e{constructor(t,n,i){this.added=t;this.removed=n;this.updated=i}static create(t,n,i,o={shouldRedistribute:!1}){let r;if(o.shouldRedistribute){let s={},a={},l={},d=[...Object.entries(t),...Object.entries(n),...Object.entries(i)];for(let[c,u]of d)this.satisfiesAddition(u)?s[c]=u:this.satisfiesRemoval(u)?a[c]=u:l[c]=u;r=new e(s,a,l)}else r=new e(t,n,i);return(xn()||En())&&(e.validate(r,"added",this.satisfiesAddition),e.validate(r,"removed",this.satisfiesRemoval),e.validate(r,"updated",this.satisfiesUpdate)),r}static restore(t){let{added:n,removed:i,updated:o}=t;return e.create(n,i,o)}static satisfiesAddition=({deleted:t,inserted:n})=>t.isDeleted===!0&&!n.isDeleted;static satisfiesRemoval=({deleted:t,inserted:n})=>!t.isDeleted&&n.isDeleted===!0;static satisfiesUpdate=({deleted:t,inserted:n})=>!!t.isDeleted==!!n.isDeleted;static satisfiesCommmonInvariants=({deleted:t,inserted:n})=>!!(Number.isInteger(t.version)&&Number.isInteger(n.version)&&t.version>=0&&n.version>=0&&t.version!==n.version);static satisfiesUniqueInvariants=(t,n)=>{let{added:i,removed:o,updated:r}=t;return[i[n],o[n],r[n]].filter(Boolean).length===1};static validate(t,n,i){for(let[o,r]of Object.entries(t[n]))if(!this.satisfiesCommmonInvariants(r)||!this.satisfiesUniqueInvariants(t,o)||!i(r))throw console.error(`Broken invariant for "${n}" delta, element "${o}", delta:`,r),new Error(`ElementsDelta invariant broken for element "${o}".`)}static calculate(t,n){if(t===n)return e.empty();let i={},o={},r={};for(let s of t.values())if(!n.get(s.id)){let l={...s},d={isDeleted:!0,version:s.version+1,versionNonce:im()},c=j.create(l,d,e.stripIrrelevantProps);s.isDeleted?r[s.id]=c:o[s.id]=c}for(let s of n.values()){let a=t.get(s.id);if(!a){let l={isDeleted:!0,version:s.version-1,versionNonce:im()},d={...s},c=j.create(l,d,e.stripIrrelevantProps);s.isDeleted?r[s.id]=c:i[s.id]=c;continue}if(a.versionNonce!==s.versionNonce){let l=j.calculate(a,s,e.stripIrrelevantProps,e.postProcess);if(typeof a.isDeleted=="boolean"&&typeof s.isDeleted=="boolean"&&a.isDeleted!==s.isDeleted){a.isDeleted&&!s.isDeleted?i[s.id]=l:o[s.id]=l;continue}r[s.id]=l}}return e.create(i,o,r)}static empty(){return e.create({},{},{})}inverse(){let t=r=>{let s={};for(let[a,{inserted:l,deleted:d}]of Object.entries(r))s[a]=j.create({...l},{...d});return s},n=t(this.added),i=t(this.removed),o=t(this.updated);return e.create(i,n,o)}isEmpty(){return Object.keys(this.added).length===0&&Object.keys(this.removed).length===0&&Object.keys(this.updated).length===0}applyLatestChanges(t,n,i){let o=(d,c)=>(u,m)=>{let p;switch(m){case"deleted":p=d;break;case"inserted":p=c;break}if(!p)return console.error("Element not found when trying to apply latest changes"),u;let h={};for(let f of Object.keys(u))switch(f){case"boundElements":h[f]=u[f];break;default:h[f]=p[f]}return h},r=d=>{let c={};for(let[u,m]of Object.entries(d)){let p=t.get(u),h=n.get(u),f=null;p||h?f=j.create(m.deleted,m.inserted,o(p,h),i):f=m,j.isInnerDifferent(f.deleted,f.inserted)&&(c[u]=f)}return c},s=r(this.added),a=r(this.removed),l=r(this.updated);return e.create(s,a,l,{shouldRedistribute:!0})}applyTo(t,n=Vn.empty().elements,i){let o=new Map(t),r,s={containsVisibleDifference:!1,containsZindexDifference:!1,applyDirection:void 0};try{let a=e.createApplier(t,o,n,s,i),l=a(this.added),d=a(this.removed),c=a(this.updated),u=this.resolveConflicts(t,o,s.applyDirection);r=new Map([...l,...d,...c,...u])}catch(a){if(console.error("Couldn't apply elements delta",a),xn()||En())throw a;return[t,!0]}try{let a=new Set(r.keys()),l=new Map;for(let c of a){let u=t.get(c),m=o.get(c);for(let p of[u,m])if(p){V(p)&&p.containerId&&a.add(p.containerId);for(let h of p.boundElements??[])a.add(h.id)}u&&l.set(c,u===m?{...u}:u)}o=e.reorderElements(o,r,s);let d=xn()||En()?new Map(Array.from(o,([c,u])=>[c,u.version])):void 0;if(e.redrawElements(o,r),d){for(let[c,u]of o)if(d.get(c)!==u.version&&!a.has(c))throw new Error(`Redrawn element "${c}" is missing from idsToCheck`)}if(!s.containsVisibleDifference){for(let c of a)if(e.checkForVisibleDifference(l.get(c),o.get(c),l,o)){s.containsVisibleDifference=!0;break}}}catch(a){if(s.containsVisibleDifference=!0,console.error("Couldn't mutate elements after applying elements change",a),xn()||En())throw a}return[o,s.containsVisibleDifference]}squash(t){if(t.isEmpty())return this;let{added:n,removed:i,updated:o}=t,r=(s,a)=>{let l=j.mergeArrays(s.deleted.boundElements??[],a.deleted.boundElements??[],void 0,c=>c.id)??[],d=j.mergeArrays(s.inserted.boundElements??[],a.inserted.boundElements??[],void 0,c=>c.id)??[];if(!(!l.length&&!d.length))return j.create({boundElements:l},{boundElements:d})};for(let[s,a]of Object.entries(n)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.added[s]=a;else{let d=r(l,a);delete this.removed[s],delete this.updated[s],this.added[s]=j.merge(l,a,d)}}for(let[s,a]of Object.entries(i)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.removed[s]=a;else{let d=r(l,a);delete this.added[s],delete this.updated[s],this.removed[s]=j.merge(l,a,d)}}for(let[s,a]of Object.entries(o)){let l=this.added[s]??this.removed[s]??this.updated[s];if(!l)this.updated[s]=a;else{let d=r(l,a),c=j.merge(l,a,d);l===this.added[s]?this.added[s]=c:l===this.removed[s]?this.removed[s]=c:this.updated[s]=c}}return(xn()||En())&&(e.validate(this,"added",e.satisfiesAddition),e.validate(this,"removed",e.satisfiesRemoval),e.validate(this,"updated",e.satisfiesUpdate)),this}static createApplier=(t,n,i,o,r)=>s=>{let a=e.createGetter(n,i,o);return Object.entries(s).reduce((l,[d,c])=>{let u=a(d,c.inserted);if(u){let m=e.applyDelta(u,c,o,r);if(n.set(m.id,m),l.set(m.id,m),!o.applyDirection){let p=t.get(d);p&&(o.applyDirection=p.version>m.version?"backward":"forward")}}return l},new Map)};static createGetter=(t,n,i)=>(o,r)=>{let s=t.get(o);return s||(s=n.get(o),s?i.containsZindexDifference=!0:s=Ae({id:o,version:1},{...r})),s};static applyDelta(t,n,i,o){let r={};for(let s of Object.keys(n.inserted)){if(s==="boundElements"||o?.excludedProperties?.has(s))continue;let a=n.inserted[s];Reflect.set(r,s,a)}if(n.deleted.boundElements?.length||n.inserted.boundElements?.length){let s=j.mergeArrays(t.boundElements,n.inserted.boundElements,n.deleted.boundElements,a=>a.id);Object.assign(r,{boundElements:s})}return i.containsZindexDifference||(i.containsZindexDifference=n.deleted.index!==n.inserted.index),Ae(t,r,!0)}static checkForVisibleDifference(t,n,i,o){let r=(d,c)=>!d||d.isDeleted||V(d)&&!d.text.trim()&&!d.boundElements?.length&&!U(c.get(d.containerId??""))?null:d,s=r(t,i),a=r(n,o);if(!s||!a)return s!==a;let l=(d,c)=>(d.boundElements??[]).filter(u=>{let m=c.get(u.id);return u.type!=="text"||U(d)||!m||!V(m)||!!m.text.trim()}).map(({id:u,type:m})=>`${m}:${u}`);return j.getDifferences(s,a).some(d=>{switch(d){case"index":case"version":case"versionNonce":case"updated":case"created":return!1;case"boundElements":return!ja(l(s,i),l(a,o));default:return!0}})}resolveConflicts(t,n,i="forward"){let o=new Map,r=(a,l)=>{let d=n.get(a.id);if(!d)return;let c=t.get(a.id),u=i==="forward"?d.version+1:d.version-1,m=l,p;c===d?p=Ae(d,{...m,version:u},!0):p=Xe(d,n,{...m,version:c?.version!==d.version?d.version:u}),o.set(p.id,p),n.set(p.id,p)};for(let a of Object.keys(this.removed))e.unbindAffected(t,n,a,r);for(let a of Object.keys(this.added))e.rebindAffected(t,n,a,r);for(let[a]of Array.from(Object.entries(this.updated)).filter(([l,d])=>Object.keys({...d.deleted,...d.inserted}).find(c=>mc.has(c)))){let l=n.get(a);!l||l.isDeleted||e.rebindAffected(t,n,a,r)}let s=new Map(Array.from(t).filter(([a])=>o.has(a)));return this.squash(e.calculate(s,o)),o}static unbindAffected(t,n,i,o){let r=()=>t.get(i),s=()=>n.get(i);On.unbindAffected(n,r(),o),On.unbindAffected(n,s(),o),Fn.unbindAffected(n,r(),o),Fn.unbindAffected(n,s(),o)}static rebindAffected(t,n,i,o){let r=()=>t.get(i),s=()=>n.get(i);On.unbindAffected(n,r(),o),On.rebindAffected(n,s(),o),Fn.unbindAffected(n,r(),(a,l)=>{V(a)&&o(a,l)}),Fn.rebindAffected(n,s(),o)}static redrawElements(t,n){try{let i=new _i(t,{skipValidation:!0});e.redrawTextBoundingBoxes(i,n),e.redrawBoundArrows(i,n)}catch(i){if(console.error("Couldn't redraw elements",i),xn()||En())throw i}finally{return t}}static redrawTextBoundingBoxes(t,n){let i=t.getNonDeletedElementsMap(),o=new Map;for(let r of n.values()){if(Ie(r)){let{containerId:s}=r,a=s?i.get(s):void 0;a&&o.set(a.id,{container:a,boundText:r})}if(Wt(r)){let s=Ct(r),a=s?i.get(s):void 0;a&&o.set(r.id,{container:r,boundText:a})}}for(let{container:r,boundText:s}of o.values())r.isDeleted||s.isDeleted||sr(s,r,t)}static redrawBoundArrows(t,n){for(let i of n.values())!i.isDeleted&&we(i)&&Ge(i,t,{changedElements:n})}static reorderElements(t,n,i){if(!i.containsZindexDifference)return t;let o=Array.from(t.values()),r=_c([...o]),s=j.getRightDifferences(o,r,!0).reduce((a,l)=>{let d=o[Number(l)];return d&&n.has(d.id)&&a.set(d.id,d),a},new Map);return!i.containsVisibleDifference&&s.size&&(i.containsVisibleDifference=!0),Sb(di(r,s))}static postProcess(t,n){try{j.diffArrays(t,n,"boundElements",r=>r.id);let i=t.points??[],o=n.points??[];j.isDifferent(i,o)||(Reflect.deleteProperty(t,"points"),Reflect.deleteProperty(n,"points"))}catch(i){if(console.error("Couldn't postprocess elements delta."),xn()||En())throw i}finally{return[t,n]}}static stripIrrelevantProps(t){let{id:n,updated:i,...o}=t;return o}};I();var BD=(e,t,n,i,o)=>{let[r,s,a,l]=n.axis==="x"?["minX","midX","maxX","width"]:["minY","midY","maxY","height"],d=fn(e),c=yr(e,t,i).map(Wn).map(h=>[h,fn(h)]).sort((h,f)=>h[1][s]-f[1][s]),u=0;for(let h of c)u+=h[1][l];let m=(d[l]-u)/(c.length-1);if(m<0){let h=c.findIndex(b=>b[1][r]===d[r]),f=c.findIndex(b=>b[1][a]===d[a]),g=(c[f][1][s]-c[h][1][s])/(c.length-1),E=c[h][1][s];return c.flatMap(([b,x],y)=>{let w={x:0,y:0};return y!==h&&y!==f&&(E+=g,w[n.axis]=E-x[s]),b.map(S=>{let M=o.mutateElement(S,{x:S.x+w.x,y:S.y+w.y});return Ge(S,o,{simultaneouslyUpdated:b}),M})})}let p=d[r];return c.flatMap(([h,f])=>{let g={x:0,y:0};return g[n.axis]=p-f[r],p+=m,p+=f[l],h.map(E=>{let b=o.mutateElement(E,{x:E.x+g.x,y:E.y+g.y});return Ge(E,o,{simultaneouslyUpdated:h}),b})})};I();import{TEXT_AUTOWRAP_THRESHOLD as Ib,getGridPoint as Mb,getFontString as Tb,DRAGGING_THRESHOLD as Ab}from"@excalidraw/common";var _D=(e,t,n,i,o,r)=>{if(t.length===1&&X(t[0])&&(t[0].startBinding||t[0].endBinding))return;let s=t.filter(m=>{if(X(m)&&m.startBinding&&m.endBinding){let p=t.find(f=>f.id===m.startBinding?.elementId),h=t.find(f=>f.id===m.endBinding?.elementId);return p&&h}return!0}),a=new Set(s),l=s.filter(m=>te(m)).map(m=>m.id);if(l.length>0)for(let m of i.getNonDeletedElements())m.frameId!==null&&l.includes(m.frameId)&&a.add(m);let d=[];for(let m of a){let p=e.originalElements.get(m.id);if(!p)return;d.push(p)}let c=Db(tt(d),n,o,r),u=new Set(Array.from(a,m=>m.id));a.forEach(m=>{let p=!U(m),h=p||(m.startBinding?u.has(m.startBinding.elementId):!1),f=p||(m.endBinding?u.has(m.endBinding.elementId):!1);if(U(m)){if(a.size>1||Math.max(Math.abs(c.x),Math.abs(c.y))>Ab||!m.startBinding&&!m.endBinding){Va(e,m,i,c);let g=m.startBinding&&!h,E=m.endBinding&&!f;(g||E)&&(g&&Ke(m,"start",i),E&&Ke(m,"end",i))}}else{Va(e,m,i,c);let g=Q(m,i.getNonDeletedElementsMap());g&&Va(e,g,i,c),Ge(m,i,{simultaneouslyUpdated:Array.from(a)})}})},Db=(e,t,n,i)=>{let[o,r]=e,s=o+t.x+n.x,a=r+t.y+n.y;if(n.x===0||n.y===0){let[l,d]=Mb(o+t.x,r+t.y,i);n.x===0&&(s=l),n.y===0&&(a=d)}return{x:s-o,y:a-r}},Va=(e,t,n,i)=>{let o=e.originalElements.get(t.id)??t,r=o.x+i.x,s=o.y+i.y;n.mutateElement(t,{x:r,y:s})},HD=(e,t,n)=>{let[i,o]=tt(e);return[t-i,n-o]},vb=({newElement:e,anchorX:t,anchorRatio:n,pointerX:i,nextY:o,zoom:r,scene:s,informMutation:a=!0})=>{let l=i-t,d=n===0?l:n===1?-l:Math.abs(l),c=Math.max(n===.5?d*2:d,nr(Tb({fontSize:e.fontSize,fontFamily:e.fontFamily}),e.lineHeight));s.mutateElement(e,{x:t-c*n,...o===void 0?{}:{y:o},width:c,...d>Ib/r?{autoResize:!1}:{}},{informMutation:a,isDragging:!1})},WD=({newElement:e,elementType:t,originX:n,originY:i,x:o,y:r,width:s,height:a,shouldMaintainAspectRatio:l,shouldResizeFromCenter:d,zoom:c,scene:u,widthAspectRatio:m=null,originOffset:p=null,informMutation:h=!0})=>{if(l&&e.type!=="selection"&&(m?a=s/m:(Math.abs(r-i)>Math.abs(o-n)?{width:s,height:a}=Ca(t,a,o<n?-s:s):{width:s,height:a}=Ca(t,s,r<i?-a:a),a<0&&(a=-a))),V(e)){vb({newElement:e,anchorX:n+(p?.x??0),anchorRatio:d?.5:o<n?1:0,pointerX:o,nextY:i+(p?.y??0),zoom:c,scene:u,informMutation:h});return}let f=o<n?n-s:n,g=r<i?i-a:i;if(d&&(s+=s,a+=a,f=n-s/2,g=i-a/2),s!==0&&a!==0){let E=null;Fe(e)&&(E={initialWidth:s,initialHeight:a}),u.mutateElement(e,{x:f+(p?.x??0),y:g+(p?.y??0),width:s,height:a,...E},{informMutation:h,isDragging:!1})}};I();import{ELEMENT_LINK_KEY as Rr,normalizeLink as rm}from"@excalidraw/common";var jD=(e,t)=>{let n=window.location.href;try{let i=new URL(n);return i.searchParams.set(Rr,e),rm(i.toString())}catch(i){console.error(i)}return rm(n)},VD=(e,t)=>{if(e.length>0&&Bb(e)){if(e.length===1)return{id:e[0].id,type:"element"};if(e.length>1){let n=Object.keys(t.selectedGroupIds)[0];return n?{id:n,type:"group"}:{id:e[0].groupIds[0],type:"group"}}}return null},Bb=e=>!!(e.length===1||e.length>1&&Cc(e)),KD=e=>{try{let t=new URL(e);return t.searchParams.has(Rr)&&t.host===window.location.host}catch{return!1}},ZD=e=>{try{let{searchParams:t}=new URL(e);if(t.has(Rr))return t.get(Rr)}catch{}return null};I();import{FONT_FAMILY as Lb,VERTICAL_ALIGN as kb,escapeDoubleQuotes as Ka,getFontString as Cb}from"@excalidraw/common";var Ft=new Map,Nb=/^(?:http(?:s)?:\/\/)?(?:www\.)?youtu(?:be\.com|\.be)\/(embed\/|watch\?v=|shorts\/|playlist\?list=|embed\/videoseries\?list=)?([a-zA-Z0-9_-]+)/,Gb=/^(?:http(?:s)?:\/\/)?(?:(?:w){3}\.)?(?:player\.)?vimeo\.com\/(?:video\/)?([^?\s]+)(?:\?.*)?$/,Ob=/^https:\/\/(?:www\.)?figma\.com/,sm=/^https:\/\/gist\.github\.com\/([\w_-]+)\/([\w_-]+)/,Fb=/^<script[\s\S]*?\ssrc=["'](https:\/\/gist\.github\.com\/.*?)\.js["']/i,Rb=/^(?:https?:\/\/)?forms\.microsoft\.com\//,am=/(?:https?:\/\/)?(?:(?:w){3}\.)?(?:twitter|x)\.com\/[^/]+\/status\/(\d+)/,zb=/^<blockquote[\s\S]*?\shref=["'](https?:\/\/(?:twitter|x)\.com\/[^"']*)/i,_b=/^https:\/\/(?:www\.)?val\.town\/(v|embed)\/[a-zA-Z_$][0-9a-zA-Z_$]+\.[a-zA-Z_$][0-9a-zA-Z_$]+/,Hb=/^<(?:iframe|blockquote)[\s\S]*?\s(?:src|href)=["']([^"']*)["'][\s\S]*?>$/i,lm=/giphy.com\/(?:clips|embed|gifs)\/[a-zA-Z0-9]*?-?([a-zA-Z0-9]+)(?:[^a-zA-Z0-9]|$)/,dm=/^(?:http(?:s)?:\/\/)?(?:www\.)?reddit\.com\/r\/([a-zA-Z0-9_]+)\/comments\/([a-zA-Z0-9_]+)\/([a-zA-Z0-9_]+)\/?(?:\?[^#\s]*)?(?:#[^\s]*)?$/,Wb=/^<blockquote[\s\S]*?\shref=["'](https?:\/\/(?:www\.)?reddit\.com\/[^"']*)/i,um=e=>{let t;try{let s=new URL(e.startsWith("http")?e:`https://${e}`);t=s.searchParams.get("t")||s.searchParams.get("start")}catch{t=e.match(/[?&#](?:t|start)=([^&#\s]+)/)?.[1]}if(!t)return 0;if(/^\d+$/.test(t))return parseInt(t,10);let n=t.match(/^(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?$/);if(!n)return 0;let[,i="0",o="0",r="0"]=n;return parseInt(i)*3600+parseInt(o)*60+parseInt(r)},Ub=e=>{try{let t=new URL(e.startsWith("http")?e:`https://${e}`);if(t.hostname.replace(/^www\./,"")!=="drive.google.com")return null;let i=null,o=t.pathname.match(/^\/file\/d\/([^/]+)(?:\/|$)/);if(o?.[1]?i=o[1]:(t.pathname==="/open"||t.pathname==="/uc")&&(i=t.searchParams.get("id")),!i||!/^[a-zA-Z0-9_-]+$/.test(i))return null;let r=t.searchParams.get("resourcekey"),s=um(t.toString());return{fileId:i,resourceKey:r&&/^[a-zA-Z0-9_-]+$/.test(r)?r:void 0,timestamp:s>0?s:void 0}}catch{return null}},qa=new Set(["youtube.com","youtu.be","vimeo.com","player.vimeo.com","drive.google.com","figma.com","link.excalidraw.com","gist.github.com","twitter.com","x.com","*.simplepdf.eu","stackblitz.com","val.town","giphy.com","reddit.com","forms.microsoft.com"]),cm=new Set(["youtube.com","youtu.be","vimeo.com","player.vimeo.com","drive.google.com","figma.com","twitter.com","x.com","*.simplepdf.eu","stackblitz.com","reddit.com","forms.microsoft.com"]),Za=e=>`<html><body>${e}</body></html>`,iv=e=>{if(!e)return null;if(Ft.has(e))return Ft.get(e);let t=e,n=cm.has(Qa(e,cm)||""),i="generic",o={w:560,h:840},r=e.match(Nb);if(r?.[2]){let c=um(t),u=c>0?`&start=${c}`:"",m=e.includes("shorts");switch(i="video",r[1]){case"embed/":case"watch?v=":case"shorts/":e=`https://www.youtube.com/embed/${r[2]}?enablejsapi=1${u}`;break;case"playlist?list=":case"embed/videoseries?list=":e=`https://www.youtube.com/embed/videoseries?list=${r[2]}&enablejsapi=1${u}`;break;default:e=`https://www.youtube.com/embed/${r[2]}?enablejsapi=1${u}`;break}return o=m?{w:315,h:560}:{w:560,h:315},Ft.set(t,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}}let s=e.match(Gb);if(s?.[1]){let c=s?.[1],u=/^\d+$/.test(c)?void 0:new URIError("Invalid embed link format");return i="video",e=`https://player.vimeo.com/video/${c}?api=1`,o={w:560,h:315},Ft.set(t,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,error:u,sandbox:{allowSameOrigin:n}}}let a=Ub(e);if(a){i="video";let c=new URLSearchParams;a.resourceKey&&c.set("resourcekey",a.resourceKey),a.timestamp&&c.set("t",`${a.timestamp}`);let u=c.toString();return e=`https://drive.google.com/file/d/${a.fileId}/preview${u?`?${u}`:""}`,o={w:560,h:315},Ft.set(t,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}}if(e.match(Ob))return i="generic",e=`https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(e)}`,o={w:550,h:550},Ft.set(t,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}};let d=e.match(_b);if(d)return e=d[1]==="embed"?d[0]:d[0].replace("/v","/embed"),Ft.set(t,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}};if(Rb.test(e)&&!e.includes("embed=true")&&(e+=e.includes("?")?"&embed=true":"?embed=true"),am.test(e)){let c=e.match(am)[1],u=Ka(`https://twitter.com/x/status/${c}`),m={type:"document",srcdoc:p=>Za(`<blockquote class="twitter-tweet" data-dnt="true" data-theme="${p}"><a href="${u}"></a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"><\/script>`),intrinsicSize:{w:480,h:480},sandbox:{allowSameOrigin:n}};return Ft.set(t,m),m}if(dm.test(e)){let[,c,u,m]=e.match(dm),p=Ka(`https://reddit.com/r/${c}/comments/${u}/${m}`),h={type:"document",srcdoc:f=>Za(`<blockquote class="reddit-embed-bq" data-embed-theme="${f}"><a href="${p}"></a><br></blockquote><script async="" src="https://embed.reddit.com/widgets.js" charset="UTF-8"><\/script>`),intrinsicSize:{w:480,h:480},sandbox:{allowSameOrigin:n}};return Ft.set(t,h),h}if(sm.test(e)){let[,c,u]=e.match(sm),m=Ka(`https://gist.github.com/${c}/${u}`),p={type:"document",srcdoc:()=>Za(`
22
+ <script src="${m}.js"><\/script>
22
23
  <style type="text/css">
23
24
  * { margin: 0px; }
24
25
  table, .gist { height: 100%; }
25
26
  .gist .gist-file { height: calc(100vh - 2px); padding: 0px; display: grid; grid-template-rows: 1fr auto; }
26
27
  </style>
27
- `),intrinsicSize:{w:550,h:720},sandbox:{allowSameOrigin:n}};return ft.set(e,p),p}return ft.set(e,{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:i,type:o,sandbox:{allowSameOrigin:n}}},iI=e=>{let t;Oo(e)?t="IFrame element":t=!e.link||e?.link===""?"Empty Web-Embed":e.link;let n=Math.max(Math.min(e.width/2,e.width/t.length),e.width/30),o=Fh.Helvetica,i=Hh({fontSize:n,fontFamily:o});return Rd({x:e.x+e.width/2,y:e.y+e.height/2,strokeColor:e.strokeColor!=="transparent"?e.strokeColor:"black",backgroundColor:"transparent",fontFamily:o,fontSize:n,text:It(t,i,e.width-20),textAlign:"center",verticalAlign:Nh.MIDDLE,angle:e.angle??0})},ds=(e,t)=>{try{let{hostname:n}=new URL(e),o=n.replace(/^www\./,"");if(t instanceof Set){if(ls.has(o))return o;let r=o.replace(/^([^.]+)/,"*");return ls.has(r)?r:null}let i=t.replace(/^www\./,"");if(o===i)return i}catch{}return null},rI=e=>{let t=e.match(jh);if(t&&t.length===2)return t[1];let n=e.match($h);if(n&&n.length===2)return n[1];let o=e.match(Uh);if(o&&o.length===2)return o[1];if(zd.test(e))return`https://giphy.com/embed/${zd.exec(e)[1]}`;let i=e.match(Vh);return i&&i.length===2?i[1]:e},sI=(e,t)=>{if(!e)return!1;if(t!=null)if(typeof t=="function"){let n=t(e);if(typeof n=="boolean")return n}else{if(typeof t=="boolean")return t;if(t instanceof RegExp)return t.test(e);if(Array.isArray(t)){for(let n of t)if(n instanceof RegExp){if(e.match(n))return!0}else if(ds(e,n))return!0;return!1}}return!!ds(e,ls)};P();import{KEYS as Di,invariant as vi,toBrandedType as qh}from"@excalidraw/common";import{pointFrom as Ud}from"@excalidraw/math";var Hn=100,bn=100,yI=e=>{switch(e){case Di.ARROW_UP:return"up";case Di.ARROW_DOWN:return"down";case Di.ARROW_RIGHT:return"right";case Di.ARROW_LEFT:return"left";default:return"right"}},Wd=(e,t,n,o)=>{let i=[...n.values()].reduce((r,s)=>{let a;if(B(s)&&(a=s[e==="predecessors"?"startBinding":"endBinding"])&&s[e==="predecessors"?"endBinding":"startBinding"]?.elementId===t.id){let l=n.get(a.elementId);if(!l)return r;vi(Le(l),"not an ExcalidrawBindableElement");let d=e==="predecessors"?s.points[s.points.length-1]:[0,0],c=oo(t,$e(t,n),[d[0]+s.x,d[1]+s.y]);r.push({relative:l,heading:c})}return r},[]);switch(o){case"up":return i.filter(r=>me(r.heading,_e)).map(r=>r.relative);case"down":return i.filter(r=>me(r.heading,ye)).map(r=>r.relative);case"right":return i.filter(r=>me(r.heading,fe)).map(r=>r.relative);case"left":return i.filter(r=>me(r.heading,ke)).map(r=>r.relative)}},cs=(e,t,n)=>Wd("successors",e,t,n),us=(e,t,n)=>Wd("predecessors",e,t,n),Kh=(e,t,n)=>{let o=bn+e.width;if(n==="up"||n==="down"){let a=Hn+e.height,l=e.x,d=e.x+e.width;if(t.every(c=>c.x+c.width<l||c.x>d))return{x:0,y:a*(n==="up"?-1:1)}}else if(n==="right"||n==="left"){let a=e.y,l=e.y+e.height;if(t.every(d=>d.y+d.height<a||d.y>l))return{x:(bn+e.width)*(n==="left"?-1:1),y:0}}if(n==="up"||n==="down"){let a=Hn+e.height,l=(t.length===0,a),d=t.length===0?0:(t.length+1)%2===0?(t.length+1)/2*o:t.length/2*o*-1;return n==="up"?{x:d,y:l*-1}:{x:d,y:l}}let i=Hn+e.height,r=(t.length===0,bn+e.width),s=t.length===0?0:(t.length+1)%2===0?(t.length+1)/2*i:t.length/2*i*-1;return n==="left"?{x:r*-1,y:s}:{x:r,y:s}},Qh=(e,t,n,o)=>{let i=o.getNonDeletedElementsMap(),r=cs(e,i,n),s=us(e,i,n),a=Kh(e,[...r,...s],n),l=rs({type:e.type,x:e.x+a.x,y:e.y+a.y,width:e.width,height:e.height,roundness:e.roundness,roughness:e.roughness,backgroundColor:e.backgroundColor,strokeColor:e.strokeColor,strokeWidth:e.strokeWidth,opacity:e.opacity,fillStyle:e.fillStyle,strokeStyle:e.strokeStyle});vi(tr(l),"not an ExcalidrawFlowchartNodeElement");let d=Vd(e,l,n,t,o);return{nextNode:l,bindingArrow:d}},Jh=(e,t,n,o,i)=>{let r=[];for(let s=0;s<i;s++){let a,l;if(n==="left"||n==="right"){let u=Hn*(i-1)+i*e.height,p=e.y+e.height/2-u/2,m=bn+e.width;n==="left"&&(m*=-1),a=e.x+m;let f=(Hn+e.height)*s;l=p+f}else{let u=bn*(i-1)+i*e.width,p=e.x+e.width/2-u/2,m=Hn+e.height;n==="up"&&(m*=-1),l=e.y+m;let f=(bn+e.width)*s;a=p+f}let d=rs({type:e.type,x:a,y:l,width:e.width,height:e.height,roundness:e.roundness,roughness:e.roughness,backgroundColor:e.backgroundColor,strokeColor:e.strokeColor,strokeWidth:e.strokeWidth,opacity:e.opacity,fillStyle:e.fillStyle,strokeStyle:e.strokeStyle});vi(tr(d),"not an ExcalidrawFlowchartNodeElement");let c=Vd(e,d,n,t,o);r.push(d),r.push(c)}return r},Vd=(e,t,n,o,i)=>{let r,s;switch(n){case"up":{r=e.x+e.width/2,s=e.y-6;break}case"down":{r=e.x+e.width/2,s=e.y+e.height+6;break}case"right":{r=e.x+e.width+6,s=e.y+e.height/2;break}case"left":{r=e.x-6,s=e.y+e.height/2;break}}let l,d;switch(n){case"up":{l=t.x+t.width/2-r,d=t.y+t.height-s+6;break}case"down":{l=t.x+t.width/2-r,d=t.y-s-6;break}case"right":{l=t.x-r-6,d=t.y-s+t.height/2;break}case"left":{l=t.x+t.width-r+6,d=t.y-s+t.height/2;break}}let c=Fd({type:"arrow",x:r,y:s,startArrowhead:null,endArrowhead:o.currentItemEndArrowhead,strokeColor:e.strokeColor,strokeStyle:e.strokeStyle,strokeWidth:e.strokeWidth,opacity:e.opacity,roughness:e.roughness,points:[Ud(0,0),Ud(l,d)],elbowed:!0}),u=i.getNonDeletedElementsMap();yn(c,e,"start",i),yn(c,t,"end",i);let p=new Map;p.set(e.id,e),p.set(t.id,t),p.set(c.id,c),U.movePoints(c,i,new Map([[1,{point:c.points[1]}]]));let m=Ln(c,qh(new Map([...u.entries(),[e.id,e],[t.id,t],[c.id,c]])),{points:c.points});return{...c,...m}},Xd=class{isExploring=!1;sameLevelNodes=[];sameLevelIndex=0;direction=null;visitedNodes=new Set;clear(){this.isExploring=!1,this.sameLevelNodes=[],this.sameLevelIndex=0,this.direction=null,this.visitedNodes.clear()}exploreByDirection(t,n,o){if(!Le(t))return null;if(o!==this.direction&&this.clear(),this.visitedNodes.has(t.id)||this.visitedNodes.add(t.id),this.isExploring&&o===this.direction&&this.sameLevelNodes.length>1)return this.sameLevelIndex=(this.sameLevelIndex+1)%this.sameLevelNodes.length,this.sameLevelNodes[this.sameLevelIndex].id;let i=[...cs(t,n,o),...us(t,n,o)];if(i.length>0)return this.sameLevelIndex=0,this.isExploring=!0,this.sameLevelNodes=i,this.direction=o,this.visitedNodes.add(i[0].id),i[0].id;if(o===this.direction||!this.isExploring){this.isExploring||this.visitedNodes.add(t.id);let s=["up","right","down","left"].filter(a=>a!==o).map(a=>[...cs(t,n,a),...us(t,n,a)]).flat().filter(a=>!this.visitedNodes.has(a.id));for(let a of s)if(!this.visitedNodes.has(a.id))return this.visitedNodes.add(a.id),this.isExploring=!0,this.direction=o,a.id}return null}},jd=class{isCreatingChart=!1;numberOfNodes=0;direction="right";pendingNodes=null;createNodes(t,n,o,i){let r=i.getNonDeletedElementsMap();if(o!==this.direction){let{nextNode:s,bindingArrow:a}=Qh(t,n,o,i);this.numberOfNodes=1,this.isCreatingChart=!0,this.direction=o,this.pendingNodes=[s,a]}else{this.numberOfNodes+=1;let s=Jh(t,n,o,i,this.numberOfNodes);this.isCreatingChart=!0,this.direction=o,this.pendingNodes=s}if(t.frameId){let s=r.get(t.frameId);vi(s&&Fo(s),"not an ExcalidrawFrameElement"),s&&this.pendingNodes.every(a=>Qt([a],s,r)||qt(a,s,r))&&(this.pendingNodes=this.pendingNodes.map(a=>be(a,r,{frameId:t.frameId})))}}clear(){this.isCreatingChart=!1,this.pendingNodes=null,this.direction=null,this.numberOfNodes=0}},bI=(e,t)=>{for(let[,n]of t)if(n.type==="arrow"&&(n.startBinding?.elementId===e.id||n.endBinding?.elementId===e.id))return!0;return!1};P();import{MIME_TYPES as $d,SVG_NS as eE}from"@excalidraw/common";var tE=e=>new Promise((t,n)=>{let o=new Image;o.onload=()=>{t(o)},o.onerror=i=>{n(i)},o.src=e}),TI=async({fileIds:e,files:t,imageCache:n})=>{let o=new Map,i=new Map;return await Promise.all(e.reduce((r,s)=>{let a=t[s];return a&&!o.has(s)?(o.set(s,!0),r.concat((async()=>{try{if(a.mimeType===$d.binary)throw new Error("Only images can be added to ImageCache");let l=tE(a.dataURL),d={image:l,mimeType:a.mimeType};n.set(s,d);let c=await l;n.set(s,{...d,image:c})}catch{i.set(s,!0)}})())):r},[])),{imageCache:n,updatedFiles:o,erroredFiles:i}},AI=e=>e.filter(t=>_t(t)),nE=e=>e?.nodeName.toLowerCase()==="svg",DI=e=>{let t=new DOMParser().parseFromString(e,$d.svg),n=t.querySelector("svg");if(t.querySelector("parsererror")||!nE(n))throw new Error("Invalid SVG");{n.hasAttribute("xmlns")||n.setAttribute("xmlns",eE);let i=n.getAttribute("width"),r=n.getAttribute("height");(i?.includes("%")||i==="auto")&&(i=null),(r?.includes("%")||r==="auto")&&(r=null);let s=n.getAttribute("viewBox");if(!i||!r){if(i=i||"50",r=r||"50",s){let a=s.match(/\d+ +\d+ +(\d+(?:\.\d+)?) +(\d+(?:\.\d+)?)/);a&&([,i,r]=a)}n.setAttribute("width",i),n.setAttribute("height",r)}return s||n.setAttribute("viewBox",`0 0 ${i} ${r}`),n.outerHTML}};P();var BI=(e,t,n,o=50)=>{if(!e||e.length===0)return[];let i=[],r=Array.isArray(e[0])?e:e.map(m=>[m]),s=r.length,a=Math.max(1,Math.ceil(Math.sqrt(s))),l=[];for(let m=0;m<s;m+=a)l.push(r.slice(m,m+a));let d=0,c=l.map(m=>{let f=0,E=0,h=m.map(g=>{let[x,y,b,w]=Xe(g);return{elements:g,bounds:[x,y,b,w],width:b-x,height:w-y}});return h.forEach((g,x)=>{f+=g.width,x<h.length-1&&(f+=o),g.height>E&&(E=g.height)}),d+=E,{unitBounds:h,width:f,maxHeight:E}}),u=d+Math.max(0,l.length-1)*o,p=n-u/2;return c.forEach(m=>{let{unitBounds:f,width:E,maxHeight:h}=m,g=t-E/2;f.forEach(x=>{let[y,b]=x.bounds,w=g-y,I=p-b;x.elements.forEach(M=>{i.push(ge(M,{x:M.x+w,y:M.y+I}))}),g+=x.width+o}),p+=h+o}),i};P();import{pointCenter as oE,normalizeRadians as Ci,pointFrom as re,pointRotateRads as ot}from"@excalidraw/math";import{MIN_FONT_SIZE as ms,SHIFT_LOCKING_ANGLE as Gi,rescalePoints as Zd,getFontString as Li}from"@excalidraw/common";var WI=(e,t,n,o,i,r,s,a,l,d,c)=>{let u=o.getNonDeletedElementsMap();if(n.length===1){let[p]=n;if(t==="rotation")B(p)||(iE(p,o,a,l,i),Ue(p,o));else if(t){let m=n[0].id,f=u.get(m),E=e.get(m);if(f&&E){let{nextWidth:h,nextHeight:g}=dE(f,E,t,a,l,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r});lE(h,g,f,E,e,o,t,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r})}}return oe(p)&&Ue(p,o),!0}else if(n.length>1){if(t==="rotation")return sE(e,n,o,a,l,i,d,c),!0;if(t){let{nextWidth:p,nextHeight:m,flipByX:f,flipByY:E,originalBoundingBox:h}=cE(n,e,u,t,a,l,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r});return uE(n,u,t,o,e,{shouldResizeFromCenter:r,shouldMaintainAspectRatio:s,flipByX:f,flipByY:E,nextWidth:p,nextHeight:m,originalBoundingBox:h}),!0}}return!1},iE=(e,t,n,o,i)=>{let[r,s,a,l]=Y(e,t.getNonDeletedElementsMap()),d=(r+a)/2,c=(s+l)/2,u;q(e)?u=0:(u=5*Math.PI/2+Math.atan2(o-c,n-d),i&&(u=u+Gi/2,u=u-u%Gi),u=Ci(u));let p=St(e);if(t.mutateElement(e,{angle:u}),p){let m=t.getElement(p);if(m&&!_(e)){let{x:f,y:E}=to(e,m,t.getNonDeletedElementsMap());t.mutateElement(m,{angle:u,x:f,y:E})}}},qd=(e,t,n,o)=>j(e)||Me(e)?{points:Zd(0,t,Zd(1,n,e.points,o),o)}:{},fs=(e,t,n)=>{let o=e.width;if(ce(e)){let s=Ce(e,t);s&&(o=et(s,e))}let r=e.fontSize*(n/o);return r<ms?null:{size:r}},rE=(e,t,n,o,i,r,s)=>{let a=n.getNonDeletedElementsMap(),l=t.width*(s/t.height),d=fs(t,a,l);if(d!==null){if(o.includes("n")||o.includes("s")){let c=re(e.x,e.y),u=ps(c,e.width,e.height,l,s,e.angle,o,!1,i);n.mutateElement(t,{fontSize:d.size,width:l,height:s,x:u.x,y:u.y});return}if(o==="e"||o==="w"){let c=zo(Li({fontSize:t.fontSize,fontFamily:t.fontFamily}),t.lineHeight),u=Math.max(c,r),p=It(t.originalText,Li(t),Math.abs(u)),m=Je(p,Li(t),t.lineHeight),f=m.height,E=re(e.x,e.y),h=ps(E,e.width,e.height,u,f,t.angle,o,!1,i),g={width:Math.abs(u),height:Math.abs(m.height),x:h.x,y:h.y,text:p,autoResize:!1};n.mutateElement(t,g)}}},sE=(e,t,n,o,i,r,s,a)=>{let l=n.getNonDeletedElementsMap(),d=5*Math.PI/2+Math.atan2(i-a,o-s);r&&(d+=Gi/2,d-=d%Gi);for(let c of t)if(!q(c)){let[u,p,m,f]=Y(c,l),E=(u+m)/2,h=(p+f)/2,g=e.get(c.id)?.angle??c.angle,[x,y]=ot(re(E,h),re(s,a),d+g-c.angle),b=B(c)?{points:Ja(c,l)}:{x:c.x+(x-E),y:c.y+(y-h),angle:Ci(d+g)};n.mutateElement(c,b),Ue(c,n,{simultaneouslyUpdated:t});let w=W(c,l);if(w&&!_(c)){let{x:I,y:M}=to(c,w,l);n.mutateElement(w,{x:I,y:M,angle:Ci(d+g)})}}n.triggerUpdate()},VI=(e,t,n,o,i)=>{let[r,s,a,l]=t.length===1?Y(t[0],n):Xe(t),d=(r+a)/2,c=(s+l)/2,u=t.length===1?t[0].angle:0;switch([o,i]=ot(re(o,i),re(d,c),-u),e){case"n":return ot(re(o-(r+a)/2,i-s),re(0,0),u);case"s":return ot(re(o-(r+a)/2,i-l),re(0,0),u);case"w":return ot(re(o-r,i-(s+l)/2),re(0,0),u);case"e":return ot(re(o-a,i-(s+l)/2),re(0,0),u);case"nw":return ot(re(o-r,i-s),re(0,0),u);case"ne":return ot(re(o-a,i-s),re(0,0),u);case"sw":return ot(re(o-r,i-l),re(0,0),u);case"se":return ot(re(o-a,i-l),re(0,0),u);default:return[0,0]}},$I=(e,t)=>{let[,[n,o]]=t.points;return e==="nw"&&(n<0||o<0)||e==="ne"&&n>=0||e==="sw"&&n<=0||e==="se"&&(n>0||o>0)?"end":"origin"},aE=(e,t,n)=>{if(n)return"center";if(t)switch(e){case"n":return"south-side";case"e":return"west-side";case"s":return"north-side";case"w":return"east-side";case"ne":return"bottom-left";case"nw":return"bottom-right";case"se":return"top-left";case"sw":return"top-right"}return["e","se","s"].includes(e)?"top-left":["n","nw","w"].includes(e)?"bottom-right":e==="ne"?"bottom-left":"top-right"},ps=(e,t,n,o,i,r,s,a,l)=>{let d=aE(s,a,l),[c,u]=e;switch(d){case"top-left":return{x:c+(t-o)/2+(o-t)/2*Math.cos(r)+(n-i)/2*Math.sin(r),y:u+(n-i)/2+(o-t)/2*Math.sin(r)+(i-n)/2*Math.cos(r)};case"top-right":return{x:c+(t-o)/2*(Math.cos(r)+1)+(n-i)/2*Math.sin(r),y:u+(n-i)/2+(t-o)/2*Math.sin(r)+(i-n)/2*Math.cos(r)};case"bottom-left":return{x:c+(t-o)/2*(1-Math.cos(r))+(i-n)/2*Math.sin(r),y:u+(n-i)/2*(Math.cos(r)+1)+(o-t)/2*Math.sin(r)};case"bottom-right":return{x:c+(t-o)/2*(Math.cos(r)+1)+(i-n)/2*Math.sin(r),y:u+(n-i)/2*(Math.cos(r)+1)+(t-o)/2*Math.sin(r)};case"center":return{x:c-(o-t)/2,y:u-(i-n)/2};case"east-side":return{x:c+(t-o)/2*(Math.cos(r)+1),y:u+(t-o)/2*Math.sin(r)+(n-i)/2};case"west-side":return{x:c+(t-o)/2*(1-Math.cos(r)),y:u+(o-t)/2*Math.sin(r)+(n-i)/2};case"north-side":return{x:c+(t-o)/2+(n-i)/2*Math.sin(r),y:u+(i-n)/2*(Math.cos(r)-1)};case"south-side":return{x:c+(t-o)/2+(i-n)/2*Math.sin(r),y:u+(n-i)/2*(Math.cos(r)+1)}}},lE=(e,t,n,o,i,r,s,{shouldInformMutation:a=!0,shouldMaintainAspectRatio:l=!1,shouldResizeFromCenter:d=!1}={})=>{if(oe(n)&&oe(o))return rE(o,n,r,s,d,e,t);let c={},u=r.getNonDeletedElementsMap(),p=W(n,u);if(p){let h=i.get(p.id);if(h&&(c={fontSize:h.fontSize}),l){let g={...n,width:e,height:t},x=fs(p,u,et(g,p));if(x===null)return;c={fontSize:x.size}}else{let g=ha(Li(p),p.lineHeight),x=Ea(p.fontSize,p.lineHeight);e=Math.max(e,g),t=Math.max(t,x)}}let m=qd(o,e,t,!0),f=re(o.x,o.y);if(j(o)){let[h,g]=pe(o,i);f=re(h,g)}let E=ps(f,o.width,o.height,e,t,o.angle,s,l,d);if(j(o)&&m.points){let h=o.x-f[0],g=o.y-f[1];E.x+=h,E.y+=g;let x=m.points[0][0],y=m.points[0][1];E.x+=x,E.y+=y,m.points=m.points.map(b=>re(b[0]-x,b[1]-y))}if(e<0&&(E.x=E.x+e),t<0&&(E.y=E.y+t),"scale"in n&&"scale"in o&&r.mutateElement(n,{scale:[(Math.sign(e)||o.scale[0])*o.scale[0],(Math.sign(t)||o.scale[1])*o.scale[1]]}),_(n)&&p&&l){let h=e/n.width*p.fontSize;if(h<ms)return;c.fontSize=h}if(e!==0&&t!==0&&Number.isFinite(E.x)&&Number.isFinite(E.y)){let h={...E,width:Math.abs(e),height:Math.abs(t),...m};r.mutateElement(n,h,{informMutation:a,isDragging:!1}),p&&c!=null&&r.mutateElement(p,{fontSize:c.fontSize}),hn(n,r,s,l),Ue(n,r,{newSize:{width:e,height:t}})}},dE=(e,t,n,o,i,{shouldMaintainAspectRatio:r=!1,shouldResizeFromCenter:s=!1}={})=>{let[a,l,d,c]=zt(t,t.width,t.height,!0),u=re(a,l),p=re(d,c),m=oE(u,p),f=ot(re(o,i),m,-t.angle),[E,h,g,x]=zt(e,e.width,e.height,!0),y=g-E,b=x-h,w=p[0]-u[0],I=p[1]-u[1],M=w/y,D=I/b;n.includes("e")&&(M=(f[0]-u[0])/y),n.includes("s")&&(D=(f[1]-u[1])/b),n.includes("w")&&(M=(p[0]-f[0])/y),n.includes("n")&&(D=(p[1]-f[1])/b);let T=e.width*M,N=e.height*D;if(s&&(T=2*T-t.width,N=2*N-t.height),r){let C=Math.abs(T)/t.width,R=Math.abs(N)/t.height;if(n.length===1&&(N*=C,T*=R),n.length===2){let L=Math.max(C,R);T=t.width*L*Math.sign(T),N=t.height*L*Math.sign(N)}}return{nextWidth:T,nextHeight:N}},cE=(e,t,n,o,i,r,{shouldMaintainAspectRatio:s=!1,shouldResizeFromCenter:a=!1}={})=>{let l=e.map(L=>t.get(L.id)),d=l.reduce((L,$)=>{if(!j($))return L;let H=St($);if(!H)return L;let te=t.get(H)??null;return ce(te)?[...L,{...te,...U.getBoundTextElementPosition($,te,n)}]:L},[]),c=Bt(l.map(L=>L).concat(d)),{minX:u,minY:p,maxX:m,maxY:f,midX:E,midY:h}=c,g=m-u,x=f-p,y={ne:[u,f],se:[u,p],sw:[m,p],nw:[m,f],e:[u,p+x/2],w:[m,p+x/2],n:[u+g/2,f],s:[u+g/2,p]},[b,w]=a?[E,h]:y[o],I=a?2:1,M=Math.max(Math.abs(i-b)/g||0,Math.abs(r-w)/x||0)*I,D=o.includes("e")||o.includes("w")?Math.abs(i-b)*I:g,T=o.includes("n")||o.includes("s")?Math.abs(r-w)*I:x;s&&(D=g*M*Math.sign(i-b),T=x*M*Math.sign(r-w));let N={ne:[i<b,r>w],se:[i<b,r<w],sw:[i>b,r<w],nw:[i>b,r>w],e:[i<b,!1],w:[i>b,!1],n:[!1,r>w],s:[!1,r<w]},[C,R]=N[o].map(L=>L);return{originalBoundingBox:c,nextWidth:D,nextHeight:T,flipByX:C,flipByY:R}},uE=(e,t,n,o,i,{shouldMaintainAspectRatio:r=!1,shouldResizeFromCenter:s=!1,flipByX:a=!1,flipByY:l=!1,nextHeight:d,nextWidth:c,originalBoundingBox:u}={})=>{if(c===void 0&&d===void 0&&a===void 0&&l===void 0||d===0||c===0)return;i||(i=t);let p=e.reduce((I,M)=>{let D=i.get(M.id);return D&&I.push({orig:D,latest:M}),I},[]),m;if(u)m=u;else{let I=p.reduce((M,{orig:D})=>{if(!j(D))return M;let T=St(D);if(!T)return M;let N=i.get(T)??null;return ce(N)?[...M,{...N,...U.getBoundTextElementPosition(D,N,t)}]:M},[]);m=Bt(p.map(({orig:M})=>M).concat(I))}let{minX:f,minY:E,maxX:h,maxY:g,midX:x,midY:y}=m,b=h-f,w=g-E;if(c===void 0&&d===void 0&&(c=b,d=w),r&&(c===void 0?c=d*(b/w):d===void 0?d=c*(w/b):Math.abs(c/d-b/w)>.001&&(c=d*(b/w))),c&&d){let I=n.includes("e")||n.includes("w")?Math.abs(c)/b:1,M=n.includes("n")||n.includes("s")?Math.abs(d)/w:1,D;n.length===1?D=n.includes("e")||n.includes("w")?I:M:D=Math.max(Math.abs(c)/b||0,Math.abs(d)/w||0);let T={ne:[f,g],se:[f,E],sw:[h,E],nw:[h,g],e:[f,E+w/2],w:[h,E+w/2],n:[f+b/2,g],s:[f+b/2,E]},[N,C]=s?[x,y]:T[n],R=r||p.some(S=>S.latest.angle!==0||oe(S.latest)||yl(S.latest));R&&(I=D,M=D);let[L,$]=[a?-1:1,l?-1:1],H=[];for(let{orig:S,latest:Q}of p){if(oe(S)&&ce(S))continue;let Z=S.width*I,ne=S.height*M,an=Ci(S.angle*L*$),it=j(S)||Me(S),Pn=S.x-N,Oi=S.y-C,fo=a&&!it?Z:0,zn=l&&!it?ne:0,Ri=N+L*(Pn*I+fo),ho=C+$*(Oi*M+zn),ln=qd(S,Z*L,ne*$,!1),xe={x:Ri,y:ho,width:Z,height:ne,angle:an,...ln};if(B(S)&&(S.startBinding&&(xe.startBinding={...S.startBinding,fixedPoint:[a?-S.startBinding.fixedPoint[0]+1:S.startBinding.fixedPoint[0],l?-S.startBinding.fixedPoint[1]+1:S.startBinding.fixedPoint[1]]}),S.endBinding&&(xe.endBinding={...S.endBinding,fixedPoint:[a?-S.endBinding.fixedPoint[0]+1:S.endBinding.fixedPoint[0],l?-S.endBinding.fixedPoint[1]+1:S.endBinding.fixedPoint[1]]}),S.fixedSegments&&ln.points&&(xe.fixedSegments=S.fixedSegments.map(De=>({...De,start:ln.points[De.index-1],end:ln.points[De.index]})))),we(S)&&(xe.scale=[S.scale[0]*L,S.scale[1]*$]),oe(S)){let De=fs(S,t,Z);if(!De)return;xe.fontSize=De.size}let dn=i.get(St(S)??"");if(dn)if(R){let De=dn.fontSize*D;if(De<ms)return;xe.boundTextFontSize=De}else xe.boundTextFontSize=dn.fontSize;H.push({element:Q,update:xe})}let te=H.map(({element:S})=>S);for(let{element:S,update:{boundTextFontSize:Q,...Z}}of H){let{width:ne,height:an,angle:it}=Z;o.mutateElement(S,Z),Ue(S,o,{simultaneouslyUpdated:te,newSize:{width:ne,height:an}});let Pn=W(S,t);Pn&&Q&&(o.mutateElement(Pn,{fontSize:Q,angle:j(S)?void 0:it}),hn(S,o,n,!0))}o.triggerUpdate()}};P();import{pointFrom as Ze,pointOnLineSegment as nc,pointRotateRads as ki}from"@excalidraw/math";import{SIDE_RESIZING_THRESHOLD as ys}from"@excalidraw/common";P();import{DEFAULT_TRANSFORM_HANDLE_SPACING as Es,isAndroid as pE,isIOS as mE,isMobileOrTablet as fE}from"@excalidraw/common";import{pointFrom as Kd,pointRotateRads as hE}from"@excalidraw/math";var Qd={mouse:8,pen:16,touch:28},EE=16,ec={e:!0,s:!0,n:!0,w:!0},tS={e:!0,s:!0,n:!0,w:!0},nS={e:!0,s:!0,n:!0,w:!0,rotation:!0},Jd={e:!0,s:!0,n:!0,w:!0,nw:!0,se:!0},hs={e:!0,s:!0,n:!0,w:!0},Rt=(e,t,n,o,i,r,s)=>{let[a,l]=hE(Kd(e+n/2,t+o/2),Kd(i,r),s);return[a-n/2,l-o/2,n,o]},Bi=e=>!(e.viewport.isMobile||e.isTouchScreen&&(pE||mE)),gs=e=>Bi(e)?ec:{},xs=([e,t,n,o,i,r],s,a,l,d={},c=4,u=Es)=>{let p=Qd[l],m=p/a.value,f=p/a.value,E=p/a.value,h=p/a.value,g=n-e,x=o-t,y=c/a.value,b=(p-u*2)/(2*a.value),w={nw:d.nw?void 0:Rt(e-y-E+b,t-y-h+b,m,f,i,r,s),ne:d.ne?void 0:Rt(n+y-b,t-y-h+b,m,f,i,r,s),sw:d.sw?void 0:Rt(e-y-E+b,o+y-b,m,f,i,r,s),se:d.se?void 0:Rt(n+y-b,o+y-b,m,f,i,r,s),rotation:d.rotation?void 0:Rt(e+g/2-m/2,t-y-h+b-EE/a.value,m,f,i,r,s)},I=5*Qd.mouse/a.value;return Math.abs(g)>I&&(d.n||(w.n=Rt(e+g/2-m/2,t-y-h+b,m,f,i,r,s)),d.s||(w.s=Rt(e+g/2-m/2,o+y-b,m,f,i,r,s))),Math.abs(x)>I&&(d.w||(w.w=Rt(e-y-E+b,t+x/2-f/2,m,f,i,r,s)),d.e||(w.e=Rt(n+y-b,t+x/2-f/2,m,f,i,r,s))),w},tc=(e,t,n,o="mouse",i=ec)=>{if(e.locked||B(e))return{};if(e.type==="freedraw"||j(e)){if(e.points.length===2){let[,s]=e.points;s[0]===0||s[1]===0?i=hs:s[0]>0&&s[1]<0?i=Jd:s[0]>0&&s[1]>0?i=hs:s[0]<0&&s[1]>0?i=Jd:s[0]<0&&s[1]<0&&(i=hs)}}else q(e)&&(i={...i,rotation:!0});let r=j(e)?Es+8:we(e)?0:Es;return xs(Y(e,n,!0),e.angle,t,o,i,r,we(e)?0:void 0)},oS=(e,t)=>{if(t.selectedLinearElement?.isEditing)return!1;if(e.length>1)return!0;let n=e[0];return B(n)?!1:j(n)?n.points.length>2&&!fE():!0};var bs=(e,t,n)=>t>=e[0]&&t<=e[0]+e[2]&&n>=e[1]&&n<=e[1]+e[3],gE=(e,t,n,o,i,r,s,a)=>{if(!n.selectedElementIds[e.id])return!1;let{rotation:l,...d}=tc(e,r,t,s,gs(a));if(l&&bs(l,o,i))return"rotation";let c=Object.keys(d).filter(u=>{let p=d[u];return p?bs(p,o,i):!1});if(c.length>0)return c[0];if(Bi(a)){let[u,p,m,f,E,h]=Y(e,t);if(!(j(e)&&e.points.length<=2)){let g=we(e)?0:ys/r.value,x=ys/r.value,y=oc(Ze(u-g,p-g),Ze(m+g,f+g),Ze(E,h),e.angle);for(let[b,w]of Object.entries(y))if(nc(Ze(o,i),w,x))return b}}return!1},uS=(e,t,n,o,i,r,s,a)=>e.reduce((l,d)=>{if(l)return l;let c=gE(d,s,t,n,o,i,r,a);return c?{element:d,transformHandleType:c}:null},null),pS=([e,t,n,o],i,r,s,a,l)=>{let d=xs([e,t,n,o,(e+n)/2,(t+o)/2],0,s,a,gs(l)),c=Object.keys(d).find(u=>{let p=d[u];return p&&bs(p,i,r)});if(c)return c;if(Bi(l)){let u=(e+n)/2,p=(t+o)/2,m=ys/s.value,f=oc(Ze(e-m,t-m),Ze(n+m,o+m),Ze(u,p),0);for(let[E,h]of Object.entries(f))if(nc(Ze(i,r),h,m))return E}return!1},ws=["ns","nesw","ew","nwse"],xE=(e,t)=>{let n=ws.indexOf(e);if(n>=0){let o=Math.round(t/(Math.PI/4));e=ws[(n+o)%ws.length]}return e},mS=e=>{let{element:t,transformHandleType:n}=e,o=t&&Math.sign(t.height)*Math.sign(t.width)===-1,i=null;switch(n){case"n":case"s":i="ns";break;case"w":case"e":i="ew";break;case"nw":case"se":o?i="nesw":i="nwse";break;case"ne":case"sw":o?i="nwse":i="nesw";break;case"rotation":return"grab"}return i&&t&&(i=xE(i,t.angle)),i?`${i}-resize`:""},oc=([e,t],[n,o],i,r)=>{let s=ki(Ze(e,t),i,r),a=ki(Ze(n,t),i,r),l=ki(Ze(e,o),i,r),d=ki(Ze(n,o),i,r);return{n:[s,a],e:[a,d],s:[d,l],w:[l,s]}};P();var gS=(e,t)=>!!(!e.viewModeEnabled&&e.openDialog?.name!=="elementLinkSelector"&&(e.activeTool.type!=="custom"&&(e.editingTextElement||e.activeTool.type!=="selection"&&e.activeTool.type!=="lasso"&&e.activeTool.type!=="eraser"&&e.activeTool.type!=="hand"&&e.activeTool.type!=="laser")||pt(t,e).length));P();import{arrayToMap as rc,findIndex as sc,findLastIndex as ac}from"@excalidraw/common";var Ps=(e,t)=>e.frameId===t||e.id===t,lc=(e,t,n)=>{let o=[],i=[],r=null,s=-1,a=rc(n||pt(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0}));for(;++s<e.length;){let l=e[s];a.get(l.id)?(i.length&&(o=o.concat(i),i=[]),o.push(s),r=s+1):l.isDeleted&&r===s?(r=s+1,i.push(s)):i=[]}return o},wE=e=>{let t=0;return e.reduce((n,o,i)=>(i>0&&e[i-1]!==o-1&&(t=++t),(n[t]||(n[t]=[])).push(o),n),[])},ic=(e,t,n,o)=>{if("containerId"in e&&e.containerId){let i=o.getElement(e.containerId);if(i)return n==="left"?Math.min(t.indexOf(i),t.indexOf(e)):Math.max(t.indexOf(i),t.indexOf(e))}else{let i=e.boundElements?.find(r=>r.type!=="arrow")?.id;if(i){let r=o.getElement(i);if(r)return n==="left"?Math.min(t.indexOf(r),t.indexOf(e)):Math.max(t.indexOf(r),t.indexOf(e))}}},yE=(e,t)=>{let n=-1,o=-1;return e.forEach((i,r)=>{Ps(i,t)&&(n===-1&&(n=r),o=r)}),n===-1?[]:e.slice(n,o+1)},bE=(e,t,n,o,i,r)=>{let s=t[n],a=p=>p.isDeleted?!1:i?p.frameId===i:e.editingGroupId?p.groupIds.includes(e.editingGroupId):!0,l=o==="left"?ac(t,p=>a(p),Math.max(0,n-1)):sc(t,p=>a(p),n+1),d=t[l];if(!d)return-1;if(e.editingGroupId){if(s?.groupIds.join("")===d?.groupIds.join(""))return ic(d,t,o,r)??l;if(!d?.groupIds.includes(e.editingGroupId))return-1}if(!i&&(d.frameId||q(d))){let p=yE(t,d.frameId||d.id);return o==="left"?t.indexOf(p[0]):t.indexOf(p[p.length-1])}if(!d.groupIds.length)return ic(d,t,o,r)??l;let c=e.editingGroupId?d.groupIds[d.groupIds.indexOf(e.editingGroupId)-1]:d.groupIds[d.groupIds.length-1],u=Ae(t,c);return u.length?o==="left"?t.indexOf(u[0]):t.indexOf(u[u.length-1]):l},dc=(e,t)=>t.reduce((n,o)=>{let i=e[o];return n.set(i.id,i),n},new Map),cc=(e,t,n,o)=>{let i=lc(e,t),r=dc(e,i),s=wE(i);n==="right"&&(s=s.reverse());let a=new Set(i.filter(l=>q(e[l])).map(l=>e[l].id));return s.forEach((l,d)=>{let c=l[0],u=l[l.length-1],p=n==="left"?c:u,m=l.some(y=>{let b=e[y];return b.frameId&&a.has(b.frameId)})?null:e[p]?.frameId,f=bE(t,e,p,n,m,o);if(f===-1||p===f)return;let E=n==="left"?e.slice(0,f):e.slice(0,c),h=e.slice(c,u+1),g=n==="left"?e.slice(f,c):e.slice(u+1,f+1),x=n==="left"?e.slice(u+1):e.slice(f+1);e=n==="left"?[...E,...h,...g,...x]:[...E,...g,...h,...x]}),mo(e,r),e},uc=(e,t,n,o,i)=>{let r=lc(e,t,i),s=dc(e,r),a=[],l,d;if(n==="left"){if(o)l=sc(e,f=>Ps(f,o));else if(t.editingGroupId){let f=Ae(e,t.editingGroupId);if(!f.length)return e;l=e.indexOf(f[0])}else l=0;d=r[r.length-1]}else{if(o)d=ac(e,f=>Ps(f,o));else if(t.editingGroupId){let f=Ae(e,t.editingGroupId);if(!f.length)return e;d=e.indexOf(f[f.length-1])}else d=e.length-1;l=r[0]}l===-1&&(l=0);for(let f=l;f<d+1;f++)r.includes(f)||a.push(e[f]);let c=Array.from(s.values()),u=e.slice(0,l),p=e.slice(d+1),m=n==="left"?[...u,...c,...a,...p]:[...u,...a,...c,...p];return mo(m,s),m};function pc(e,t,n,o){let i=rc(pt(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0})),r={regularElements:[],frameChildren:new Map},s=new Set;for(let d of e)i.has(d.id)&&q(d)&&s.add(d.id);for(let d of e)if(i.has(d.id))if(q(d)||d.frameId&&s.has(d.frameId))r.regularElements.push(d);else if(!d.frameId)r.regularElements.push(d);else{let c=r.frameChildren.get(d.frameId)||[];c.push(d),r.frameChildren.set(d.frameId,c)}let a=e,l=Array.from(r.frameChildren.entries());for(let[d,c]of l)a=o(e,t,n,d,c);return o(a,t,n,null,r.regularElements)}var MS=(e,t,n)=>cc(e,t,"left",n),TS=(e,t,n)=>cc(e,t,"right",n),AS=(e,t)=>pc(e,t,"left",uc),DS=(e,t)=>pc(e,t,"right",uc);var kS=e=>e.reduce((t,n)=>t+n.version,0),ld=e=>{let t=5381;for(let n of PE(e))t=(t<<5)+t+n.versionNonce;return t>>>0},dd=e=>{let t=5381;for(let n=0;n<e.length;n++){let o=e.charCodeAt(n);t=(t<<5)+t+o}return t>>>0},OS=e=>e.filter(t=>!t.isDeleted&&!ed(t)),IE=e=>e.filter(t=>!t.isDeleted),RS=e=>!e.isDeleted,Is=e=>IE(e).map(t=>Ji(t.type)?{...t,lastCommittedPoint:null}:t),FS=e=>Is(e),NS=e=>Is(e),HS=e=>Is(e);export{en as AppStateDelta,ee as BASE_PADDING,zp as BINDING_HIGHLIGHT_THICKNESS,Zt as BindableElement,$t as BoundElement,Ne as CaptureUpdateAction,n0 as DEFAULT_LINK_SIZE,ec as DEFAULT_OMIT_SIDES,F as Delta,Qr as DurableIncrement,Wr as ElementBounds,tn as ElementsDelta,Jr as EphemeralIncrement,ie as FIXED_BINDING_DISTANCE,jd as FlowChartCreator,Xd as FlowChartNavigator,ye as HEADING_DOWN,ke as HEADING_LEFT,fe as HEADING_RIGHT,_e as HEADING_UP,Zm as IMAGE_INVERT_FILTER,Sf as INVISIBLY_SMALL_ELEMENT_SIZE,ts as InvalidFractionalIndexError,U as LinearElementEditor,Se as MINIMAL_CROP_SIZE,nS as OMIT_SIDES_FOR_FRAME,tS as OMIT_SIDES_FOR_MULTIPLE_ELEMENTS,Mi as Scene,Pe as ShapeCache,id as Store,uo as StoreChange,es as StoreDelta,bi as StoreIncrement,nn as StoreSnapshot,$e as aabbForElement,Rm as addElementsToFrame,Jh as addNewNodes,Qy as addToGroup,a1 as alignElements,Jp as avoidRectangularCorner,Sl as bindElementsToFramesAfterDuplication,yn as bindLinearElement,Dr as bindOrUnbindLinearElement,Xp as bindOrUnbindLinearElements,Sr as bindPointToSnapToElementOutline,ii as bindingBorderTest,Qa as bindingProperties,Na as bumpVersion,Za as calculateFixedPointForElbowArrowBinding,Ox as canApplyRoundnessTypeToElement,ua as canBecomePolygon,Hl as canChangeRoundness,Mh as canCreateLinkFromElements,m0 as canHaveArrowheads,Bi as canResizeFromSides,An as charWidth,FS as clearElementsForDatabase,NS as clearElementsForExport,HS as clearElementsForLocalStorage,me as compareHeading,to as computeBoundTextPosition,lr as computeContainerDimensionForBoundText,ew as containsCJK,iI as createPlaceholderEmbeddableLabel,as as createSrcDoc,wx as cropElement,Tn as deconstructDiamondElement,Bo as deconstructLinearOrFreeDrawElement,Mn as deconstructRectanguloidElement,Kr as deepCopyElement,LP as defaultGetElementLinkFromSelection,Vx as detectLineHeight,Ut as distanceToElement,mP as distributeElements,gn as doBoundsIntersect,MP as dragNewElement,IP as dragSelectedElements,kf as duplicateElement,b1 as duplicateElements,Ky as editGroupForSelectedElement,he as elementCenterPoint,qt as elementOverlapsWithFrame,xi as elementWithCanvasCache,Qt as elementsAreInFrameBounds,wl as elementsAreInSameGroup,sI as embeddableURLValidator,Pl as excludeElementsInFramesFromSelection,kb as filterElementsEligibleAsFrameChildren,by as fixBindingsAfterDeletion,Ka as fixDuplicatedBindingsAfterDuplication,fr as flipHeading,zb as frameAndChildrenSelectedTogether,Nl as generateFreeDrawShape,ia as generateLinearCollisionShape,Fe as generateRoughOptions,Ea as getApproxMinLineHeight,ha as getApproxMinLineWidth,Ja as getArrowLocalFixedPoints,xf as getArrowheadAngle,Ur as getArrowheadPoints,gf as getArrowheadSize,W as getBoundTextElement,St as getBoundTextElementId,pw as getBoundTextElementPosition,no as getBoundTextMaxHeight,et as getBoundTextMaxWidth,Vr as getBoundsFromPoints,dt as getCenterForBounds,j0 as getClosestElementBounds,Bt as getCommonBoundingBox,Xe as getCommonBounds,cw as getContainerCenter,dr as getContainerCoords,Ce as getContainerElement,Ct as getContainingFrame,yt as getCornerRadius,Vo as getCubicBezierCurveBound,mS as getCursorForResizingElement,_m as getDefaultFrameName,Rx as getDefaultRoundnessTypeForElement,ko as getDiamondPoints,SP as getDragOffsetXY,X0 as getDraggedElementsBounds,Y as getElementAbsoluteCoords,pe as getElementBounds,Nr as getElementLineSegments,Gr as getElementPointsCoords,jl as getElementShape,uS as getElementWithTransformHandleType,Ml as getElementsCompletelyInFrame,Ae as getElementsInGroup,Bb as getElementsInNewFrame,Gb as getElementsInResizingFrame,Tb as getElementsIntersectingFrame,Hb as getElementsOverlappingFrame,Rr as getElementsWithinSelection,oI as getEmbedLink,yx as getFlipAdjustedCropPosition,Kt as getFrameChildren,km as getFrameLikeElements,Nb as getFrameLikeTitle,Jm as getFreeDrawPath2D,ef as getFreeDrawSvgPath,r0 as getFreedrawOutlineAsSegments,tf as getFreedrawOutlinePoints,ni as getGlobalFixedPointForBindableElement,im as getGlobalFixedPoints,Fa as getHeadingForElbowArrowSnap,Vt as getHoveredElementForBinding,AI as getInitializedImageElements,_o as getLineHeightInPx,Yt as getLineWidth,Nx as getLinearElementSubType,yI as getLinkDirectionFromKey,CP as getLinkIdAndTypeFromSelection,sl as getLockedLinearCursorAlignSize,Iu as getMaxCharWidth,eb as getMaximumGroups,Zx as getMinCharWidth,ao as getMinMaxXYFromCurvePathOps,zo as getMinTextElementWidth,bl as getNewGroupIdsForDuplication,IE as getNonDeletedElements,xl as getNonDeletedGroupIds,t1 as getNormalizedDimensions,Rn as getObservedAppState,gs as getOmitSidesForDevice,Yx as getOriginalContainerHeightFromCache,$r as getPerfectElementSize,us as getPredecessors,U0 as getRectangleBoxAbsoluteCoords,qm as getRenderOpacity,$I as getResizeArrowDirection,VI as getResizeOffsetXY,zt as getResizedElementAbsoluteCoords,Cb as getRootElements,kS as getSceneVersion,pt as getSelectedElements,pi as getSelectedElementsByGroup,Or as getSelectedGroupForElement,vm as getSelectedGroupIdForElement,Am as getSelectedGroupIds,mb as getSelectionStateForElements,xy as getSuggestedBindingsForArrows,pb as getTargetElements,Nm as getTargetFrame,uw as getTextElementAngle,Ew as getTextFromElements,Pu as getTextHeight,ga as getTextWidth,pS as getTransformHandleTypeFromCoords,tc as getTransformHandles,xs as getTransformHandlesFromCoords,ta as getUncroppedImageElement,$i as getUncroppedWidthAndHeight,cb as getVisibleAndNonSelectedElements,OS as getVisibleElements,W0 as getVisibleSceneBounds,Lb as groupByFrameLikes,Db as groupsAreAtLeastIntersectingTheFrame,vb as groupsAreCompletelyOutOfFrame,hn as handleBindTextResize,l0 as hasBackground,st as hasBoundTextElement,oS as hasBoundingBox,d0 as hasStrokeColor,u0 as hasStrokeStyle,c0 as hasStrokeWidth,ld as hashElementsVersion,dd as hashString,Be as headingForPoint,oo as headingForPointFromElement,tt as headingForPointIsHorizontal,Oe as headingIsHorizontal,_w as headingIsVertical,rp as hitElementBoundText,ip as hitElementBoundingBox,Ow as hitElementBoundingBoxOnly,op as hitElementItself,En as intersectElementWithLineSegment,kx as isArrowBoundToElement,_ as isArrowElement,Le as isBindableElement,er as isBindingElement,hu as isBindingElementType,Ar as isBindingEnabled,ce as isBoundToContainer,Fx as isBounds,Ab as isCursorInFrame,fu as isCurvedArrow,B as isElbowArrow,e1 as isElementCompletelyInViewport,Hr as isElementContainingFrame,Al as isElementInFrame,Dm as isElementInGroup,Il as isElementInViewport,kn as isElementIntersectingFrame,GP as isElementLink,sa as isEmbeddableElement,Bx as isExcalidrawElement,Jn as isFixedPointBinding,tr as isFlowchartNodeElement,Fo as isFrameElement,q as isFrameLikeElement,Me as isFreeDrawElement,pu as isFreeDrawElementType,nE as isHTMLSVGElement,Oo as isIframeElement,Ro as isIframeLikeElement,we as isImageElement,yl as isInGroup,_t as isInitializedImageElement,ed as isInvisiblySmallElement,bt as isLineElement,j as isLinearElement,Va as isLinearElementSimpleAndAlreadyBound,Ji as isLinearElementType,aa as isMagicFrameElement,Wx as isMeasureTextSupported,bI as isNodeInFlowchart,RS as isNonDeletedElement,mn as isPathALoop,Aa as isPointInElement,Gx as isRectangularElement,la as isRectanguloidElement,Tm as isSelectedViaGroup,mu as isSharpArrow,Cx as isSimpleArrow,ub as isSomeElementSelected,Eu as isTextBindableContainer,oe as isTextElement,da as isUsingAdaptiveRadius,ca as isUsingProportionalRadius,Hx as isValidPolygon,hw as isValidTextContainer,tE as loadHTMLImageElement,kr as makeNextSelectedElementIds,li as maxBindingGap,wy as maybeBindLinearElement,rI as maybeParseEmbedSrc,ja as maybeSuggestBindingsForLinearElementAtCoords,fs as measureFontSizeFromWidth,Je as measureText,AS as moveAllLeft,DS as moveAllRight,MS as moveOneLeft,TS as moveOneRight,be as mutateElement,Fd as newArrowElement,rs as newElement,ge as newElementWith,UP as newEmbeddableElement,jP as newFrameElement,$P as newFreeDrawElement,XP as newIframeElement,qP as newImageElement,ZP as newLinearElement,WP as newMagicFrameElement,Rd as newTextElement,td as normalizeElementOrder,vr as normalizeFixedPoint,DI as normalizeSVG,or as normalizeText,mi as omitGroupsContainingFrameLikes,Om as omitPartialGroups,Ed as orderByFractionalIndex,eo as originalContainerCache,BP as parseElementLinkFromURL,Lu as parseTokens,Fl as pathsCache,vn as pointInsideBounds,BI as positionElementsOnGrid,ba as redrawTextBoundingBox,VP as refreshTextDimensions,Fm as removeAllElementsFromFrame,Tl as removeElementsFromFrame,Jy as removeFromSelectedGroups,i0 as renderElement,o0 as renderSelectionElement,Ob as replaceAllElementsInFrame,qd as rescalePointsInElement,ma as resetOriginalContainerCache,uE as resizeMultipleElements,lE as resizeSingleElement,rE as resizeSingleTextElement,gE as resizeTest,Mm as selectGroup,El as selectGroupsForSelectedElements,gl as selectGroupsFromGivenElements,$x as setCustomTextMetricsProvider,mw as shouldAllowVerticalAlign,Fb as shouldApplyFrameClip,gy as shouldEnableBindingForPointerEvent,Wo as shouldTestInside,gS as showSelectedShapeActions,em as snapToMid,fw as suppportsHorizontalAlign,Xf as syncInvalidIndices,ad as syncInvalidIndicesImmutable,mo as syncMovedIndices,rl as toggleLinePolygonState,p0 as toolIsArrow,WI as transformElements,yy as updateBindings,Ue as updateBoundElements,Ln as updateElbowArrowPoints,Rb as updateFrameMembershipOfSelectedElements,TI as updateImageCache,pa as updateOriginalContainerCache,Ra as validateElbowPoints,Uf as validateFractionalIndices,Tt as vectorToHeading,It as wrapText};
28
+ `),intrinsicSize:{w:550,h:720},sandbox:{allowSameOrigin:n}};return Ft.set(e,p),p}return Ft.set(e,{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}),{link:e,intrinsicSize:o,type:i,sandbox:{allowSameOrigin:n}}},ov=e=>{let t;Wo(e)?t="IFrame element":t=!e.link||e?.link===""?"Empty Web-Embed":e.link;let n=Math.max(Math.min(e.width/2,e.width/t.length),e.width/30),i=Lb.Helvetica,o=Cb({fontSize:n,fontFamily:i});return fi({x:e.x+e.width/2,y:e.y+e.height/2,strokeColor:e.strokeColor!=="transparent"?e.strokeColor:"black",backgroundColor:"transparent",fontFamily:i,fontSize:n,text:Lt(t,o,e.width-20),textAlign:"center",verticalAlign:kb.MIDDLE,angle:e.angle??0})},Qa=(e,t)=>{try{let{hostname:n}=new URL(e),i=n.replace(/^www\./,"");if(t instanceof Set){if(qa.has(i))return i;let r=i.replace(/^([^.]+)/,"*");return qa.has(r)?r:null}let o=t.replace(/^www\./,"");if(i===o)return o}catch{}return null},rv=e=>{let t=e.match(zb);if(t&&t.length===2)return t[1];let n=e.match(Wb);if(n&&n.length===2)return n[1];let i=e.match(Fb);if(i&&i.length===2)return i[1];if(lm.test(e))return`https://giphy.com/embed/${lm.exec(e)[1]}`;let o=e.match(Hb);return o&&o.length===2?o[1]:e},sv=(e,t)=>{if(!e)return!1;if(t!=null)if(typeof t=="function"){let n=t(e);if(typeof n=="boolean")return n}else{if(typeof t=="boolean")return t;if(t instanceof RegExp)return t.test(e);if(Array.isArray(t)){for(let n of t)if(n instanceof RegExp){if(e.match(n))return!0}else if(Qa(e,n))return!0;return!1}}return!!Qa(e,qa)};I();import{invariant as Ja,toBrandedType as Yb}from"@excalidraw/common";import{clamp as Xb,pointFrom as mm}from"@excalidraw/math";var pm=100,fm=100,$b=e=>{let t=[...e].sort((i,o)=>i.start-o.start),n=[];for(let i of t){let o=n[n.length-1];o&&i.start<=o.end?o.end=Math.max(o.end,i.end):n.push({...i})}return n},Em=(e,t,n)=>n.every(i=>e+t<=i.start||e>=i.end),jb=(e,t,n)=>{if(Em(e,t,n))return e;let i=[-1/0,...n.map(a=>a.end)],o=[...n.map(a=>a.start),1/0],r=e,s=1/0;for(let a=0;a<i.length;a++){if(o[a]-i[a]<t)continue;let l=Xb(e,i[a],o[a]-t),d=Math.abs(l-e);d<=s&&(r=l,s=d)}return r},Vb=(e,t)=>{let n=[...t.values()].filter(X),i=new Set([e.id]),o=[e.id],r=[];for(;o.length>0;){let s=o.shift();for(let a of n){let l=a.startBinding?.elementId,d=a.endBinding?.elementId,c;if(l===s?c=d:d===s&&(c=l),!c||i.has(c))continue;i.add(c);let u=t.get(c);u&&we(u)&&(r.push(u),o.push(c))}}return r},Kb=(e,t,n,i,o)=>{let r=t==="left"||t==="right",s=r?e.width:e.height,a=r?e.height:e.width,l=r?fm:pm,d=r?pm:fm,c=r?e.x:e.y,u=r?e.y+e.height/2:e.x+e.width/2,m=t==="right"||t==="down"?c+s+l:c-l-s,p=$b(i.filter(x=>{let y=r?x[0]:x[1],w=r?x[2]:x[3];return y<m+s&&w>m}).map(x=>({start:(r?x[1]:x[0])-d,end:(r?x[3]:x[2])+d}))),h=a+d,f=n*a+(n-1)*d,E=(o===null?null:[o,o-h].filter(x=>Em(x,f,p)).sort((x,y)=>Math.abs(x+f/2-u)-Math.abs(y+f/2-u))[0]??null)??jb(u-f/2,f,p);return{positions:Array.from({length:n},(x,y)=>{let w=E+y*h;return r?{x:m,y:w}:{x:w,y:m}}),crossStart:E}},Zb=(e,t,n)=>{let i={x:t,y:n,width:e.width,height:e.height,roundness:e.roundness,roughness:e.roughness,backgroundColor:e.backgroundColor,strokeColor:e.strokeColor,strokeWidth:e.strokeWidth,opacity:e.opacity,fillStyle:e.fillStyle,strokeStyle:e.strokeStyle},o=e.type==="stickynote"?Br({type:"stickynote",...i,baseHeight:e.baseHeight}):Ni({type:e.type,...i});return Ja(td(o),"not an ExcalidrawFlowchartNodeElement"),o},qb=(e,t,n,i,o,r=null)=>{let s=i.getNonDeletedElementsMap(),a=Vb(e,s).map(u=>lt(u,s)),{positions:l,crossStart:d}=Kb(e,n,o,a,r),c=[];for(let u of l){let m=Zb(e,u.x,u.y),p=Qb(e,m,n,t,i);c.push(m,p)}return{nodes:c,crossStart:d}},Qb=(e,t,n,i,o)=>{let r,s;switch(n){case"up":{r=e.x+e.width/2,s=e.y-6;break}case"down":{r=e.x+e.width/2,s=e.y+e.height+6;break}case"right":{r=e.x+e.width+6,s=e.y+e.height/2;break}case"left":{r=e.x-6,s=e.y+e.height/2;break}}let l,d;switch(n){case"up":{l=t.x+t.width/2-r,d=t.y+t.height-s+6;break}case"down":{l=t.x+t.width/2-r,d=t.y-s-6;break}case"right":{l=t.x-r-6,d=t.y-s+t.height/2;break}case"left":{l=t.x+t.width-r+6,d=t.y-s+t.height/2;break}}let c=Lr({type:"arrow",x:r,y:s,startArrowhead:null,endArrowhead:i.currentItemEndArrowhead,strokeColor:e.strokeColor,strokeStyle:e.strokeStyle,strokeWidth:e.strokeWidth,opacity:e.opacity,roughness:e.roughness,points:[mm(0,0),mm(l,d)],elbowed:!0}),u=o.getNonDeletedElementsMap();Kt(c,e,"orbit","start",o),Kt(c,t,"orbit","end",o);let m=new Map;m.set(e.id,e),m.set(t.id,t),m.set(c.id,c),R.movePoints(c,o,new Map([[1,{point:c.points[1]}]]));let p=Si(c,Yb(new Map([...u.entries(),[e.id,e],[t.id,t],[c.id,c]])),{points:c.points});return{...c,...p,isDeleted:c.isDeleted}},hm=class e{isExploring=!1;sameLevelNodes=[];sameLevelIndex=0;direction=null;visitedNodes=new Set;clear(){this.isExploring=!1,this.sameLevelNodes=[],this.sameLevelIndex=0,this.direction=null,this.visitedNodes.clear()}exploreByDirection(t,n,i){if(!we(t))return null;if(i!==this.direction&&this.clear(),this.visitedNodes.has(t.id)||this.visitedNodes.add(t.id),this.isExploring&&i===this.direction&&this.sameLevelNodes.length>1)return this.sameLevelIndex=(this.sameLevelIndex+1)%this.sameLevelNodes.length,this.sameLevelNodes[this.sameLevelIndex].id;let o=[...e.getSuccessors(t,n,i),...e.getPredecessors(t,n,i)];if(o.length>0)return this.sameLevelIndex=0,this.isExploring=!0,this.sameLevelNodes=o,this.direction=i,this.visitedNodes.add(o[0].id),o[0].id;if(i===this.direction||!this.isExploring){this.isExploring||this.visitedNodes.add(t.id);let s=["up","right","down","left"].filter(a=>a!==i).map(a=>[...e.getSuccessors(t,n,a),...e.getPredecessors(t,n,a)]).flat().filter(a=>!this.visitedNodes.has(a.id));for(let a of s)if(!this.visitedNodes.has(a.id))return this.visitedNodes.add(a.id),this.isExploring=!0,this.direction=i,a.id}return null}static getNodeRelatives(t,n,i,o){let r=[...i.values()].reduce((s,a)=>{let l;if(X(a)&&(l=a[t==="predecessors"?"startBinding":"endBinding"])&&a[t==="predecessors"?"endBinding":"startBinding"]?.elementId===n.id){let d=i.get(l.elementId);if(!d)return s;Ja(we(d),"not an ExcalidrawBindableElement");let c=t==="predecessors"?a.points[a.points.length-1]:[0,0],u=wi(n,lt(n,i),[c[0]+a.x,c[1]+a.y]);s.push({relative:d,heading:u})}return s},[]);switch(o){case"up":return r.filter(s=>fe(s.heading,qe)).map(s=>s.relative);case"down":return r.filter(s=>fe(s.heading,Be)).map(s=>s.relative);case"right":return r.filter(s=>fe(s.heading,he)).map(s=>s.relative);case"left":return r.filter(s=>fe(s.heading,ze)).map(s=>s.relative)}}static getSuccessors(t,n,i){return e.getNodeRelatives("successors",t,n,i)}static getPredecessors(t,n,i){return e.getNodeRelatives("predecessors",t,n,i)}},gm=class{isCreatingChart=!1;numberOfNodes=0;direction=null;clusterCrossStart=null;pendingNodes=null;createNodes(t,n,i,o){let r=o.getNonDeletedElementsMap();i!==this.direction?(this.numberOfNodes=1,this.clusterCrossStart=null):this.numberOfNodes+=1;let{nodes:s,crossStart:a}=qb(t,n,i,o,this.numberOfNodes,this.clusterCrossStart);if(this.isCreatingChart=!0,this.direction=i,this.clusterCrossStart=a,this.pendingNodes=s,t.frameId){let l=r.get(t.frameId);Ja(l&&Yo(l),"not an ExcalidrawFrameElement"),l&&this.pendingNodes.every(d=>Hn([d],l,r)||zn(d,l,r))&&(this.pendingNodes=this.pendingNodes.map(d=>Xe(d,r,{frameId:t.frameId})))}}clear(){this.isCreatingChart=!1,this.pendingNodes=null,this.direction=null,this.numberOfNodes=0,this.clusterCrossStart=null}},yv=(e,t)=>{for(let[,n]of t)if(n.type==="arrow"&&(n.startBinding?.elementId===e.id||n.endBinding?.elementId===e.id))return!0;return!1};I();import{pointDistance as Hi,pointFrom as tl}from"@excalidraw/math";import{invariant as vm}from"@excalidraw/common";I();import{arrayToMap as bm,findIndex as ym,findLastIndex as wm}from"@excalidraw/common";import{isFiniteNumber as Jb}from"@excalidraw/math";var el=(e,t)=>e.frameId===t||e.id===t,Pm=(e,t,n)=>{let i=[],o=[],r=null,s=-1,a=bm(n||qt(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0}));for(;++s<e.length;){let l=e[s];a.get(l.id)?(o.length&&(i=i.concat(o),o=[]),i.push(s),r=s+1):l.isDeleted&&r===s?(r=s+1,o.push(s)):o=[]}return i},ey=e=>{let t=0;return e.reduce((n,i,o)=>(o>0&&e[o-1]!==i-1&&(t=++t),(n[t]||(n[t]=[])).push(i),n),[])},xm=(e,t,n,i)=>{if("containerId"in e&&e.containerId){let o=i.getElement(e.containerId);if(o)return n==="left"?Math.min(t.indexOf(o),t.indexOf(e)):Math.max(t.indexOf(o),t.indexOf(e))}else{let o=e.boundElements?.find(r=>r.type!=="arrow")?.id;if(o){let r=i.getElement(o);if(r)return n==="left"?Math.min(t.indexOf(r),t.indexOf(e)):Math.max(t.indexOf(r),t.indexOf(e))}}},ty=(e,t)=>{let n=-1,i=-1;return e.forEach((o,r)=>{el(o,t)&&(n===-1&&(n=r),i=r)}),n===-1?[]:e.slice(n,i+1)},Sm=(e,t,n,i,o,r)=>{let s=r||sn(e,Wn(n),i);if(!s)return n;let a=Q(s,i),l=V(s)?_e(s,i):null,d=[s.id,a?.id,l?.id].filter(m=>!!m),c=n.findIndex(m=>d.includes(m.id)),u=n.findIndex(m=>m.id===t.id);if(u!==-1&&c!==-1&&u<c){let m=Array.from(n),p=m.splice(u,1)[0];m.splice(c,0,p),o.replaceAllElements(m)}return n},ny=(e,t,n,i,o,r)=>{let s=t[n],a=m=>m.isDeleted?!1:o?m.frameId===o:e.editingGroupId?m.groupIds.includes(e.editingGroupId):!0,l=i==="left"?wm(t,m=>a(m),Math.max(0,n-1)):ym(t,m=>a(m),n+1),d=t[l];if(!d)return-1;if(e.editingGroupId){if(s?.groupIds.join("")===d?.groupIds.join(""))return xm(d,t,i,r)??l;if(!d?.groupIds.includes(e.editingGroupId))return-1}if(!o&&(d.frameId||te(d))){let m=ty(t,d.frameId||d.id);return i==="left"?t.indexOf(m[0]):t.indexOf(m[m.length-1])}if(!d.groupIds.length)return xm(d,t,i,r)??l;let c=e.editingGroupId?d.groupIds[d.groupIds.indexOf(e.editingGroupId)-1]:d.groupIds[d.groupIds.length-1],u=et(t,c);return u.length?i==="left"?t.indexOf(u[0]):t.indexOf(u[u.length-1]):l},Im=(e,t)=>t.reduce((n,i)=>{let o=e[i];return n.set(o.id,o),n},new Map),Mm=(e,t)=>{if(e.length!==t.length)return console.error("z-index reordering failed: resulting array have different lengths"),!1;let n=new Map;for(let i of e)n.set(i.id,(n.get(i.id)||0)+1);for(let i of t){let o=n.get(i.id);if(!o)return console.error("z-index reordering failed: element id mismatch / duplicate ids"),!1;n.set(i.id,o-1)}return!0},Tm=(e,t,n,i)=>{let o=e,r=Pm(e,t),s=Im(e,r),a=ey(r);n==="right"&&(a=a.reverse());let l=new Set(r.filter(d=>te(e[d])).map(d=>e[d].id));return a.forEach((d,c)=>{let u=d[0],m=d[d.length-1],p=n==="left"?u:m,h=d.some(y=>{let w=e[y];return w.frameId&&l.has(w.frameId)})?null:e[p]?.frameId,f=ny(t,e,p,n,h,i);if(f===-1||p===f)return;let g=n==="left"?e.slice(0,f):e.slice(0,u),E=e.slice(u,m+1),b=n==="left"?e.slice(f,u):e.slice(m+1,f+1),x=n==="left"?e.slice(m+1):e.slice(f+1);e=n==="left"?[...g,...E,...b,...x]:[...g,...b,...E,...x]}),Mm(o,e)?(di(e,s),e):o},Am=(e,t,n,i,o)=>{let r=Pm(e,t,o);if(r.length===0)return e;let s=Im(e,r),a=[],l,d;if(n==="left"){if(i)l=ym(e,f=>el(f,i));else if(t.editingGroupId){let f=et(e,t.editingGroupId);if(!f.length)return e;l=e.indexOf(f[0])}else l=0;d=r[r.length-1]}else{if(i)d=wm(e,f=>el(f,i));else if(t.editingGroupId){let f=et(e,t.editingGroupId);if(!f.length)return e;d=e.indexOf(f[f.length-1])}else d=e.length-1;l=r[0]}l===-1&&(l=0);let c=f=>Jb(f)&&f>=0;if(!c(l)||!c(d)||l>d||r.some(f=>f<l||f>d))return e;for(let f=l;f<d+1;f++)r.includes(f)||a.push(e[f]);let u=Array.from(s.values()),m=e.slice(0,l),p=e.slice(d+1),h=n==="left"?[...m,...u,...a,...p]:[...m,...a,...u,...p];return Mm(e,h)?(di(h,s),h):e};function Dm(e,t,n,i){let o=bm(qt(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0})),r={regularElements:[],frameChildren:new Map},s=new Set;for(let d of e)o.has(d.id)&&te(d)&&s.add(d.id);for(let d of e)if(o.has(d.id))if(te(d)||d.frameId&&s.has(d.frameId))r.regularElements.push(d);else if(!d.frameId)r.regularElements.push(d);else{let c=r.frameChildren.get(d.frameId)||[];c.push(d),r.frameChildren.set(d.frameId,c)}let a=e,l=Array.from(r.frameChildren.entries());for(let[d,c]of l)a=i(a,t,n,d,c);return i(a,t,n,null,r.regularElements)}var kv=(e,t,n)=>Tm(e,t,"left",n),Cv=(e,t,n)=>Tm(e,t,"right",n),Nv=(e,t)=>Dm(e,t,"left",Am),Gv=(e,t)=>Dm(e,t,"right",Am);var zr=(e,t,n,i,o,r,s=!1)=>{if(X(t)||!Vt(o)||t.points.length!==2)return!1;if(!s){let l=t.startBinding?.elementId===n.id?0:t.points.length-1,d=R.getPointAtIndexGlobalCoordinates(t,l,i);if(Hi(e,d)<mo*1.5/o.zoom.value)return!1}let a=R.getPointAtIndexGlobalCoordinates(t,r==="end"?t.points.length-1:0,i);return Hi(e,a)>=mo*1.5/o.zoom.value&&jt({element:n,elementsMap:i,point:e,threshold:Le(n,t),overrideShouldTestInside:!0})},iy=(e,t,n,i,o,r,s)=>{let a=new Map,l=r.selectedLinearElement?.initialState.arrowOtherEndpointInitialBinding,d=n?"startBinding":"endBinding",c=n?"endBinding":"startBinding",u=e[d],m=l?.mode==="orbit"&&e[c]?.mode==="inside"?l:e[c];if(u&&t){let p=t&&m&&u.elementId===m.elementId;s||p?u={...u,mode:"inside"}:u={...u,mode:"orbit"};let h=n?0:e.points.length-1,f=Gt(e,d,u,t,i,!0);f&&a.set(h,{point:f})}if(m&&m.mode==="orbit"){let p=i.get(m.elementId);if(p&&we(p)&&Vt(r)){t&&m.elementId===t.id?m={...m,mode:"inside"}:m={...m,mode:"orbit"};let f=n?e.points.length-1:0,g=Gt(e,c,m,p,i);g&&a.set(f,{point:g})}}a.size>0&&R.movePoints(e,o,a,{[d]:u,[c]:m})},Bm=(e,t,n,i,o,r,s)=>{let a=R.getElement(e.elementId,t);if(!a||!Ue(a)||X(a)||!e.hoveredFocusPointBinding||!e.draggedFocusPointBinding)return;let l=e.draggedFocusPointBinding==="start",d=l?a.startBinding:a.endBinding,{x:c,y:u}=e.pointerOffset,m=tl(n.x-c,n.y-u),p=l?"startBinding":"endBinding",h=Qd(m,a,i.getNonDeletedElements(),t,Bt(o.zoom));if(h&&Vt(o)){a[p]&&h.id!==d?.elementId&&Ke(a,e.draggedFocusPointBinding,i);let f=s&&a[p]?.mode==="orbit"?"inside":!s&&a[p]?.mode==="inside"?"orbit":null;(!a[p]||f)&&Kt(a,h,f||"orbit",e.draggedFocusPointBinding,i,m),i.mutateElement(a,{[p]:{...a[p],elementId:h.id,mode:f||a[p]?.mode||"orbit",...Bi(a,h,e.draggedFocusPointBinding,t,m)}})}else{let f=new Map,g=l?0:a.points.length-1;f.set(g,{point:R.createPointAt(a,t,m[0],m[1],r)}),R.movePoints(a,i,f),a[p]&&Ke(a,l?"start":"end",i)}iy(a,h,l,t,i,o,s),h&&Vt(o)&&Sm(m,a,i.getElementsIncludingDeleted(),t,i,h)},Xv=(e,t,n,i)=>{let o=tl(t.origin.x,t.origin.y),r=mo*1.5/i.zoom.value;if(e.startBinding?.elementId){let s=n.get(e.startBinding.elementId);if(s&&we(s)&&!s.isDeleted){let a=Ye(e.startBinding.fixedPoint,s,n);if(zr(a,e,s,n,i,"start")&&Hi(o,a)<=r)return{hitFocusPoint:"start",pointerOffset:{x:o[0]-a[0],y:o[1]-a[1]},arrowOtherEndpointInitialBinding:e.endBinding}}}if(e.endBinding?.elementId){let s=n.get(e.endBinding.elementId);if(s&&we(s)&&!s.isDeleted){let a=Ye(e.endBinding.fixedPoint,s,n);if(zr(a,e,s,n,i,"end")&&Hi(o,a)<=r)return{hitFocusPoint:"end",pointerOffset:{x:o[0]-a[0],y:o[1]-a[1]},arrowOtherEndpointInitialBinding:e.startBinding}}}return{hitFocusPoint:null,pointerOffset:{x:0,y:0},arrowOtherEndpointInitialBinding:null}},$v=(e,t)=>{vm(e.draggedFocusPointBinding,"Must have a dragged focus point at pointer release");let n=R.getElement(e.elementId,t.getNonDeletedElementsMap());vm(n,"Arrow must be in the scene");let i=e.draggedFocusPointBinding==="start"?"startBinding":"endBinding",o=e.draggedFocusPointBinding==="start"?"endBinding":"startBinding",r=n[i]?.elementId,s=n[o]?.elementId,a=r&&t.getNonDeletedElements().find(d=>d.id!==r&&d.id!==s&&we(d)&&d.boundElements?.find(({id:c})=>c===n.id));a&&t.mutateElement(a,{boundElements:a.boundElements?.filter(({id:d})=>d!==n.id)});let l=r&&t.getNonDeletedElementsMap().get(r);return l&&t.mutateElement(l,{boundElements:[...(l.boundElements||[])?.filter(({id:d})=>d!==n.id),{id:n.id,type:"arrow"}]}),{arrowOtherEndpointInitialBinding:null}},jv=(e,t,n,i,o)=>{let r=i.getNonDeletedElementsMap(),s=tl(t,n),a=mo*1.5/o.zoom.value;if(e.startBinding?.elementId){let l=r.get(e.startBinding.elementId);if(l&&we(l)&&!l.isDeleted){let d=Ye(e.startBinding.fixedPoint,l,r);if(zr(d,e,l,r,o,"start")&&Hi(s,d)<=a)return"start"}}if(e.endBinding?.elementId){let l=r.get(e.endBinding.elementId);if(l&&we(l)&&!l.isDeleted){let d=Ye(e.endBinding.fixedPoint,l,r);if(zr(d,e,l,r,o,"end")&&Hi(s,d)<=a)return"end"}}return null};I();import{MIME_TYPES as Lm,SVG_NS as oy}from"@excalidraw/common";var ry=e=>new Promise((t,n)=>{let i=new Image;i.onload=()=>{t(i)},i.onerror=o=>{n(o)},i.src=e}),Qv=async({fileIds:e,files:t,imageCache:n})=>{let i=new Map,o=new Map;return await Promise.all(e.reduce((r,s)=>{let a=t[s];return a&&!i.has(s)?(i.set(s,!0),r.concat((async()=>{try{if(a.mimeType===Lm.binary)throw new Error("Only images can be added to ImageCache");let l=ry(a.dataURL),d={image:l,mimeType:a.mimeType};n.set(s,d);let c=await l;n.set(s,{...d,image:c})}catch{o.set(s,!0)}})())):r},[])),{imageCache:n,updatedFiles:i,erroredFiles:o}},Jv=e=>e.filter(t=>ei(t)),sy=e=>e?.nodeName.toLowerCase()==="svg",eB=e=>{let t=new DOMParser().parseFromString(e,Lm.svg),n=t.querySelector("svg");if(t.querySelector("parsererror")||!sy(n))throw new Error("Invalid SVG");{n.hasAttribute("xmlns")||n.setAttribute("xmlns",oy);let o=n.getAttribute("width"),r=n.getAttribute("height");(o?.includes("%")||o==="auto")&&(o=null),(r?.includes("%")||r==="auto")&&(r=null);let s=n.getAttribute("viewBox");if(!o||!r){if(o=o||"50",r=r||"50",s){let a=s.match(/\d+ +\d+ +(\d+(?:\.\d+)?) +(\d+(?:\.\d+)?)/);a&&([,o,r]=a)}n.setAttribute("width",o),n.setAttribute("height",r)}return s||n.setAttribute("viewBox",`0 0 ${o} ${r}`),n.outerHTML}};I();var rB=(e,t,n,i=50)=>{if(!e||e.length===0)return[];let o=[],r=Array.isArray(e[0])?e:e.map(p=>[p]),s=r.length,a=Math.max(1,Math.ceil(Math.sqrt(s))),l=[];for(let p=0;p<s;p+=a)l.push(r.slice(p,p+a));let d=0,c=l.map(p=>{let h=0,f=0,g=p.map(E=>{let[b,x,y,w]=tt(E);return{elements:E,bounds:[b,x,y,w],width:y-b,height:w-x}});return g.forEach((E,b)=>{h+=E.width,b<g.length-1&&(h+=i),E.height>f&&(f=E.height)}),d+=f,{unitBounds:g,width:h,maxHeight:f}}),u=d+Math.max(0,l.length-1)*i,m=n-u/2;return c.forEach(p=>{let{unitBounds:h,width:f,maxHeight:g}=p,E=t-f/2;h.forEach(b=>{let[x,y]=b.bounds,w=E-x,S=m-y;b.elements.forEach(M=>{o.push(Ae(M,{x:M.x+w,y:M.y+S}))}),E+=b.width+i}),m+=g+i}),o};I();import{pointCenter as ay,normalizeRadians as Hr,pointFrom as me,pointRotateRads as Rt}from"@excalidraw/math";import{MIN_FONT_SIZE as il,SHIFT_LOCKING_ANGLE as Wr,STICKY_NOTE_MIN_SIZE as km,rescalePoints as Cm,getFontString as _r}from"@excalidraw/common";var bB=(e,t,n,i,o,r,s,a,l,d,c)=>{let u=i.getNonDeletedElementsMap();if(n.length===1){let[m]=n;if(t==="rotation")X(m)||(ly(m,i,a,l,o),Ge(m,i));else if(t){let p=n[0].id,h=u.get(p),f=e.get(p);if(h&&f){let{nextWidth:g,nextHeight:E}=py(h,f,t,a,l,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r});my(g,E,h,f,e,i,t,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r})}}return V(m)&&Ge(m,i),!0}else if(n.length>1){if(t==="rotation")return cy(e,n,i,a,l,o,d,c),!0;if(t){let{nextWidth:m,nextHeight:p,flipByX:h,flipByY:f,originalBoundingBox:g}=fy(n,e,u,t,a,l,{shouldMaintainAspectRatio:s,shouldResizeFromCenter:r});return hy(n,u,t,i,e,{shouldResizeFromCenter:r,shouldMaintainAspectRatio:s,flipByX:h,flipByY:f,nextWidth:m,nextHeight:p,originalBoundingBox:g}),!0}}return!1},ly=(e,t,n,i,o)=>{let[r,s,a,l]=Z(e,t.getNonDeletedElementsMap()),d=(r+a)/2,c=(s+l)/2,u;te(e)?u=0:(u=5*Math.PI/2+Math.atan2(i-c,n-d),o&&(u=u+Wr/2,u=u-u%Wr),u=Hr(u));let m=Ct(e),p={angle:u};if(Ue(e)&&(p={...p},e.startBinding&&Ke(e,"start",t),e.endBinding&&Ke(e,"end",t)),t.mutateElement(e,p),m){let h=t.getElement(m);if(h&&!U(e)){let{x:f,y:g}=oi(e,h,t.getNonDeletedElementsMap());t.mutateElement(h,{angle:u,x:f,y:g})}}},Nm=(e,t,n,i)=>q(e)||ye(e)?{points:Cm(0,t,Cm(1,n,e.points,i),i)}:{},ol=(e,t,n)=>{let i=e.width;if(Ie(e)){let s=_e(e,t);s&&(i=kt(s,e))}let r=e.fontSize*(n/i);return r<il?null:{size:r}},dy=(e,t,n,i,o,r,s)=>{let a=n.getNonDeletedElementsMap(),l=t.width*(s/t.height),d=ol(t,a,l);if(d!==null){if(i.includes("n")||i.includes("s")){let c=me(e.x,e.y),u=nl(c,e.width,e.height,l,s,e.angle,i,!1,o);n.mutateElement(t,{fontSize:d.size,width:l,height:s,x:u.x,y:u.y});return}if(i==="e"||i==="w"){let c=nr(_r({fontSize:t.fontSize,fontFamily:t.fontFamily}),t.lineHeight),u=Math.max(c,r),m=Lt(t.originalText,_r(t),Math.abs(u)),p=$e(m,_r(t),t.lineHeight),h=p.height,f=me(e.x,e.y),g=nl(f,e.width,e.height,u,h,t.angle,i,!1,o),E={width:Math.abs(u),height:Math.abs(p.height),x:g.x,y:g.y,text:m,autoResize:!1};n.mutateElement(t,E)}}},cy=(e,t,n,i,o,r,s,a)=>{let l=n.getNonDeletedElementsMap(),d=5*Math.PI/2+Math.atan2(o-a,i-s);r&&(d+=Wr/2,d-=d%Wr);let c=new Map(t.map(u=>[u.id,u]));for(let u of t)if(!te(u)){let[m,p,h,f]=Z(u,l),g=(m+h)/2,E=(p+f)/2,b=e.get(u.id)?.angle??u.angle,[x,y]=Rt(me(g,E),me(s,a),d+b-u.angle),w=X(u)?{points:pc(u,l)}:{x:u.x+(x-g),y:u.y+(y-E),angle:Hr(d+b)};n.mutateElement(u,w),Ge(u,n,{simultaneouslyUpdated:t}),Ue(u)&&(u.startBinding&&(c.has(u.startBinding.elementId)||Ke(u,"start",n)),u.endBinding&&(c.has(u.endBinding.elementId)||Ke(u,"end",n)));let S=Q(u,l);if(S&&!U(u)){let{x:M,y:A}=oi(u,S,l);n.mutateElement(S,{x:M,y:A,angle:Hr(d+b)})}}n.triggerUpdate()},yB=(e,t,n,i,o)=>{let[r,s,a,l]=t.length===1?Z(t[0],n):tt(t),d=(r+a)/2,c=(s+l)/2,u=t.length===1?t[0].angle:0;switch([i,o]=Rt(me(i,o),me(d,c),-u),e){case"n":return Rt(me(i-(r+a)/2,o-s),me(0,0),u);case"s":return Rt(me(i-(r+a)/2,o-l),me(0,0),u);case"w":return Rt(me(i-r,o-(s+l)/2),me(0,0),u);case"e":return Rt(me(i-a,o-(s+l)/2),me(0,0),u);case"nw":return Rt(me(i-r,o-s),me(0,0),u);case"ne":return Rt(me(i-a,o-s),me(0,0),u);case"sw":return Rt(me(i-r,o-l),me(0,0),u);case"se":return Rt(me(i-a,o-l),me(0,0),u);default:return[0,0]}},wB=(e,t)=>{let[,[n,i]]=t.points;return e==="nw"&&(n<0||i<0)||e==="ne"&&n>=0||e==="sw"&&n<=0||e==="se"&&(n>0||i>0)?"end":"origin"},uy=(e,t,n)=>{if(n)return"center";if(t)switch(e){case"n":return"south-side";case"e":return"west-side";case"s":return"north-side";case"w":return"east-side";case"ne":return"bottom-left";case"nw":return"bottom-right";case"se":return"top-left";case"sw":return"top-right"}return["e","se","s"].includes(e)?"top-left":["n","nw","w"].includes(e)?"bottom-right":e==="ne"?"bottom-left":"top-right"},nl=(e,t,n,i,o,r,s,a,l)=>{let d=uy(s,a,l),[c,u]=e;switch(d){case"top-left":return{x:c+(t-i)/2+(i-t)/2*Math.cos(r)+(n-o)/2*Math.sin(r),y:u+(n-o)/2+(i-t)/2*Math.sin(r)+(o-n)/2*Math.cos(r)};case"top-right":return{x:c+(t-i)/2*(Math.cos(r)+1)+(n-o)/2*Math.sin(r),y:u+(n-o)/2+(t-i)/2*Math.sin(r)+(o-n)/2*Math.cos(r)};case"bottom-left":return{x:c+(t-i)/2*(1-Math.cos(r))+(o-n)/2*Math.sin(r),y:u+(n-o)/2*(Math.cos(r)+1)+(i-t)/2*Math.sin(r)};case"bottom-right":return{x:c+(t-i)/2*(Math.cos(r)+1)+(o-n)/2*Math.sin(r),y:u+(n-o)/2*(Math.cos(r)+1)+(t-i)/2*Math.sin(r)};case"center":return{x:c-(i-t)/2,y:u-(o-n)/2};case"east-side":return{x:c+(t-i)/2*(Math.cos(r)+1),y:u+(t-i)/2*Math.sin(r)+(n-o)/2};case"west-side":return{x:c+(t-i)/2*(1-Math.cos(r)),y:u+(i-t)/2*Math.sin(r)+(n-o)/2};case"north-side":return{x:c+(t-i)/2+(n-o)/2*Math.sin(r),y:u+(o-n)/2*(Math.cos(r)-1)};case"south-side":return{x:c+(t-i)/2+(o-n)/2*Math.sin(r),y:u+(n-o)/2*(Math.cos(r)+1)}}},my=(e,t,n,i,o,r,s,{shouldInformMutation:a=!0,shouldMaintainAspectRatio:l=!1,shouldResizeFromCenter:d=!1}={})=>{if(V(n)&&V(i))return dy(i,n,r,s,d,e,t);let c=e<0?-1:1,u=t<0?-1:1;e=Math.abs(e),t=Math.abs(t);let m=r.getNonDeletedElementsMap(),p=Q(n,m),h=be(n),f;if(h?f=p?Ld({fontSize:p.baseFontSize??p.fontSize,fontFamily:p.fontFamily}):{width:km,height:km}:p&&!l&&(f={width:xd(_r(p),p.lineHeight),height:bd(p.fontSize,p.lineHeight)}),f&&(e=Math.max(e,f.width),t=Math.max(t,f.height),l)){let y=Math.max(e/i.width,t/i.height);e=i.width*y,t=i.height*y}let g={};if(p&&!h){let y=o.get(p.id);if(y&&(g={fontSize:y.fontSize}),l){let w={...n,width:e,height:t},S=ol(p,m,kt(w,p));if(S===null)return;g={fontSize:S.size}}}e*=c,t*=u;let E=Nm(i,e,t,!0),b=me(i.x,i.y);if(q(i)){let[y,w]=ue(i,o);b=me(y,w)}let x=nl(b,i.width,i.height,e,t,i.angle,s,l,d);if(q(i)&&E.points){let y=i.x-b[0],w=i.y-b[1];x.x+=y,x.y+=w;let S=E.points[0][0],M=E.points[0][1];x.x+=S,x.y+=M,E.points=E.points.map(A=>me(A[0]-S,A[1]-M))}if(e<0&&(x.x=x.x+e),t<0&&(x.y=x.y+t),"scale"in n&&"scale"in i&&r.mutateElement(n,{scale:[(Math.sign(e)||i.scale[0])*i.scale[0],(Math.sign(t)||i.scale[1])*i.scale[1]]}),U(n)&&p&&l){let y=Math.abs(e)/n.width*p.fontSize;if(y<il)return;g.fontSize=y}if(e!==0&&t!==0&&Number.isFinite(x.x)&&Number.isFinite(x.y)){let y={...x,width:Math.abs(e),height:Math.abs(t),...E};Ue(n)&&(n.startBinding&&(y={...y},n.startBinding&&Ke(n,"start",r)),n.endBinding&&(y={...y,endBinding:null})),r.mutateElement(n,y,{informMutation:a,isDragging:!1}),be(n)?Mi(n,r,{...$s(n,o,s,{proportional:l,fromCenter:d}),bindings:!1}):(p&&g!=null&&r.mutateElement(p,{fontSize:g.fontSize}),ii(n,r,s,l,d,u<0)),Ge(n,r)}},py=(e,t,n,i,o,{shouldMaintainAspectRatio:r=!1,shouldResizeFromCenter:s=!1}={})=>{let[a,l,d,c]=Mn(t,t.width,t.height,!0),u=me(a,l),m=me(d,c),p=ay(u,m),h=Rt(me(i,o),p,-t.angle),[f,g,E,b]=Mn(e,e.width,e.height,!0),x=E-f,y=b-g,w=m[0]-u[0],S=m[1]-u[1],M=w/x,A=S/y;n.includes("e")&&(M=(h[0]-u[0])/x),n.includes("s")&&(A=(h[1]-u[1])/y),n.includes("w")&&(M=(m[0]-h[0])/x),n.includes("n")&&(A=(m[1]-h[1])/y);let T=e.width*M,G=e.height*A;if(s&&(T=2*T-t.width,G=2*G-t.height),r){let v=Math.abs(T)/t.width,N=Math.abs(G)/t.height;if(n.length===1&&(G*=v,T*=N),n.length===2){let k=Math.max(v,N);T=t.width*k*Math.sign(T),G=t.height*k*Math.sign(G)}}return{nextWidth:T,nextHeight:G}},fy=(e,t,n,i,o,r,{shouldMaintainAspectRatio:s=!1,shouldResizeFromCenter:a=!1}={})=>{let l=e.map(k=>t.get(k.id)),d=l.reduce((k,z)=>{if(!q(z))return k;let W=Ct(z);if(!W)return k;let D=t.get(W)??null;return Ie(D)?[...k,{...D,...R.getBoundTextElementPosition(z,D,n)}]:k},[]),c=fn(l.map(k=>k).concat(d)),{minX:u,minY:m,maxX:p,maxY:h,midX:f,midY:g}=c,E=p-u,b=h-m,x={ne:[u,h],se:[u,m],sw:[p,m],nw:[p,h],e:[u,m+b/2],w:[p,m+b/2],n:[u+E/2,h],s:[u+E/2,m]},[y,w]=a?[f,g]:x[i],S=a?2:1,M=Math.max(Math.abs(o-y)/E||0,Math.abs(r-w)/b||0)*S,A=i.includes("e")||i.includes("w")?Math.abs(o-y)*S:E,T=i.includes("n")||i.includes("s")?Math.abs(r-w)*S:b;s&&(A=E*M*Math.sign(o-y),T=b*M*Math.sign(r-w));let G={ne:[o<y,r>w],se:[o<y,r<w],sw:[o>y,r<w],nw:[o>y,r>w],e:[o<y,!1],w:[o>y,!1],n:[!1,r>w],s:[!1,r<w]},[v,N]=G[i].map(k=>k);return{originalBoundingBox:c,nextWidth:A,nextHeight:T,flipByX:v,flipByY:N}},hy=(e,t,n,i,o,{shouldMaintainAspectRatio:r=!1,shouldResizeFromCenter:s=!1,flipByX:a=!1,flipByY:l=!1,nextHeight:d,nextWidth:c,originalBoundingBox:u}={})=>{if(c===void 0&&d===void 0&&a===void 0&&l===void 0||d===0||c===0)return;o||(o=t);let m=e.reduce((S,M)=>{let A=o.get(M.id);return A&&S.push({orig:A,latest:M}),S},[]),p;if(u)p=u;else{let S=m.reduce((M,{orig:A})=>{if(!q(A))return M;let T=Ct(A);if(!T)return M;let G=o.get(T)??null;return Ie(G)?[...M,{...G,...R.getBoundTextElementPosition(A,G,t)}]:M},[]);p=fn([...m.map(({orig:M})=>M),...S])}let{minX:h,minY:f,maxX:g,maxY:E,midX:b,midY:x}=p,y=g-h,w=E-f;if(c===void 0&&d===void 0&&(c=y,d=w),r&&(c===void 0?c=d*(y/w):d===void 0?d=c*(w/y):Math.abs(c/d-y/w)>.001&&(c=d*(y/w))),c&&d){let S=n.includes("e")||n.includes("w")?Math.abs(c)/y:1,M=n.includes("n")||n.includes("s")?Math.abs(d)/w:1,A;n.length===1?A=n.includes("e")||n.includes("w")?S:M:A=Math.max(Math.abs(c)/y||0,Math.abs(d)/w||0);let T={ne:[h,E],se:[h,f],sw:[g,f],nw:[g,E],e:[h,f+w/2],w:[g,f+w/2],n:[h+y/2,E],s:[h+y/2,f]},[G,v]=s?[b,x]:T[n],N=r||m.some(P=>P.latest.angle!==0||V(P.latest)||Nc(P.latest));N&&(S=A,M=A);let[k,z]=[a?-1:1,l?-1:1],W=[];for(let{orig:P,latest:B}of m){if(V(P)&&Ie(P))continue;let C=P.width*S,_=P.height*M,ee=Hr(P.angle*k*z),ne=q(P)||ye(P),ie=P.x-G,oe=P.y-v,De=a&&!ne?C:0,zt=l&&!ne?_:0,_t=G+k*(ie*S+De),yn=v+z*(oe*M+zt),pe=Nm(P,C*k,_*z,!1),re={x:_t,y:yn,width:C,height:_,angle:ee,...pe};if(X(P)&&(P.startBinding&&(re.startBinding={...P.startBinding,fixedPoint:[a?-P.startBinding.fixedPoint[0]+1:P.startBinding.fixedPoint[0],l?-P.startBinding.fixedPoint[1]+1:P.startBinding.fixedPoint[1]]}),P.endBinding&&(re.endBinding={...P.endBinding,fixedPoint:[a?-P.endBinding.fixedPoint[0]+1:P.endBinding.fixedPoint[0],l?-P.endBinding.fixedPoint[1]+1:P.endBinding.fixedPoint[1]]}),P.fixedSegments&&pe.points&&(re.fixedSegments=P.fixedSegments.map(ve=>({...ve,start:pe.points[ve.index-1],end:pe.points[ve.index]})))),Fe(P)&&(re.scale=[P.scale[0]*k,P.scale[1]*z]),V(P)){let ve=ol(P,t,C);if(!ve)return;re.fontSize=ve.size}let Ne=o.get(Ct(P)??"");if(Ne&&!be(P))if(N){let ve=Ne.fontSize*A;if(ve<il)return;re.boundTextFontSize=ve}else re.boundTextFontSize=Ne.fontSize;W.push({element:B,update:re})}let D=W.map(({element:P})=>P),L=new Map(W.map(({element:P})=>[P.id,P]));for(let{element:P,update:{boundTextFontSize:B,...C}}of W){let{angle:_}=C;i.mutateElement(P,C),be(P)?Mi(P,i,{...$s(P,o,n,{proportional:N,fromCenter:s,flip:a||l}),bindings:{simultaneouslyUpdated:D}}):Ge(P,i,{simultaneouslyUpdated:D}),Ue(P)&&(P.startBinding&&(L.has(P.startBinding.elementId)||Ke(P,"start",i)),P.endBinding&&(L.has(P.endBinding.elementId)||Ke(P,"end",i)));let ee=Q(P,t);ee&&B&&!be(P)&&(i.mutateElement(ee,{fontSize:B,angle:q(P)?void 0:_}),ii(P,i,n,!0,s,l))}i.triggerUpdate()}};I();import{pointFrom as It,pointOnLineSegment as _m,pointRotateRads as Yr}from"@excalidraw/math";import{SIDE_RESIZING_THRESHOLD as cl}from"@excalidraw/common";I();import{DEFAULT_TRANSFORM_HANDLE_SPACING as sl}from"@excalidraw/common";import{pointFrom as Gm,pointRotateRads as gy}from"@excalidraw/math";var Om={mouse:8,pen:16,touch:28},Ey=16,Rm={e:!0,s:!0,n:!0,w:!0},DB={e:!0,s:!0,n:!0,w:!0},vB={e:!0,s:!0,n:!0,w:!0,rotation:!0},Fm={e:!0,s:!0,n:!0,w:!0,nw:!0,se:!0},rl={e:!0,s:!0,n:!0,w:!0},bn=(e,t,n,i,o,r,s)=>{let[a,l]=gy(Gm(e+n/2,t+i/2),Gm(o,r),s);return[a-n/2,l-i/2,n,i]},Ur=e=>!(e.formFactor==="phone"&&e.userAgent.isMobileDevice),al=e=>Ur(e)?Rm:{},ll=([e,t,n,i,o,r],s,a,l,d={},c=4,u=sl)=>{let m=Om[l],p=m/a.value,h=m/a.value,f=m/a.value,g=m/a.value,E=n-e,b=i-t,x=c/a.value,y=(m-u*2)/(2*a.value),w={nw:d.nw?void 0:bn(e-x-f+y,t-x-g+y,p,h,o,r,s),ne:d.ne?void 0:bn(n+x-y,t-x-g+y,p,h,o,r,s),sw:d.sw?void 0:bn(e-x-f+y,i+x-y,p,h,o,r,s),se:d.se?void 0:bn(n+x-y,i+x-y,p,h,o,r,s),rotation:d.rotation?void 0:bn(e+E/2-p/2,t-x-g+y-Ey/a.value,p,h,o,r,s)},S=5*Om.mouse/a.value;return Math.abs(E)>S&&(d.n||(w.n=bn(e+E/2-p/2,t-x-g+y,p,h,o,r,s)),d.s||(w.s=bn(e+E/2-p/2,i+x-y,p,h,o,r,s))),Math.abs(b)>S&&(d.w||(w.w=bn(e-x-f+y,t+b/2-h/2,p,h,o,r,s)),d.e||(w.e=bn(n+x-y,t+b/2-h/2,p,h,o,r,s))),w},zm=(e,t,n,i="mouse",o=Rm)=>{if(e.locked||X(e))return{};if(e.type==="freedraw"||q(e)){if(e.points.length===2){let[,s]=e.points;s[0]===0||s[1]===0?o=rl:s[0]>0&&s[1]<0?o=Fm:s[0]>0&&s[1]>0?o=rl:s[0]<0&&s[1]>0?o=Fm:s[0]<0&&s[1]<0&&(o=rl)}}else te(e)&&(o={...o,rotation:!0});let r=q(e)?sl+8:Fe(e)?0:sl;return ll(Z(e,n,!0),e.angle,t,i,o,r,Fe(e)?0:void 0)},BB=(e,t,n)=>{if(t.selectedLinearElement?.isEditing||t.selectedLinearElement?.isDragging)return!1;if(e.length>1)return!0;let i=e[0];return X(i)?!1:q(i)?i.points.length>2&&!n.userAgent.isMobileDevice:!0};var ul=(e,t,n)=>t>=e[0]&&t<=e[0]+e[2]&&n>=e[1]&&n<=e[1]+e[3],xy=(e,t,n,i,o,r,s,a)=>{if(!n.selectedElementIds[e.id])return!1;let{rotation:l,...d}=zm(e,r,t,s,al(a));if(l&&ul(l,i,o))return"rotation";let c=Object.keys(d).filter(u=>{let m=d[u];return m?ul(m,i,o):!1});if(c.length>0)return c[0];if(Ur(a)){let[u,m,p,h,f,g]=Z(e,t);if(!(q(e)&&e.points.length<=2)){let E=Fe(e)?0:cl/r.value,b=cl/r.value,x=Hm(It(u-E,m-E),It(p+E,h+E),It(f,g),e.angle);for(let[y,w]of Object.entries(x))if(_m(It(i,o),w,b))return y}}return!1},RB=(e,t,n,i,o,r,s,a)=>e.reduce((l,d)=>{if(l)return l;let c=xy(d,s,t,n,i,o,r,a);return c?{element:d,transformHandleType:c}:null},null),zB=([e,t,n,i],o,r,s,a,l)=>{let d=ll([e,t,n,i,(e+n)/2,(t+i)/2],0,s,a,al(l)),c=Object.keys(d).find(u=>{let m=d[u];return m&&ul(m,o,r)});if(c)return c;if(Ur(l)){let u=(e+n)/2,m=(t+i)/2,p=cl/s.value,h=Hm(It(e-p,t-p),It(n+p,i+p),It(u,m),0);for(let[f,g]of Object.entries(h))if(_m(It(o,r),g,p))return f}return!1},dl=["ns","nesw","ew","nwse"],by=(e,t)=>{let n=dl.indexOf(e);if(n>=0){let i=Math.round(t/(Math.PI/4));e=dl[(n+i)%dl.length]}return e},_B=e=>{let{element:t,transformHandleType:n}=e,i=t&&Math.sign(t.height)*Math.sign(t.width)===-1,o=null;switch(n){case"n":case"s":o="ns";break;case"w":case"e":o="ew";break;case"nw":case"se":i?o="nesw":o="nwse";break;case"ne":case"sw":i?o="nwse":o="nesw";break;case"rotation":return"grab"}return o&&t&&(o=by(o,t.angle)),o?`${o}-resize`:""},Hm=([e,t],[n,i],o,r)=>{let s=Yr(It(e,t),o,r),a=Yr(It(n,t),o,r),l=Yr(It(e,i),o,r),d=Yr(It(n,i),o,r);return{n:[s,a],e:[a,d],s:[d,l],w:[l,s]}};I();var YB=(e,t)=>!!(!e.viewModeEnabled&&e.openDialog?.name!=="elementLinkSelector"&&(e.activeTool.type!=="custom"&&(e.editingTextElement||e.activeTool.type!=="selection"&&e.activeTool.type!=="lasso"&&e.activeTool.type!=="eraser"&&e.activeTool.type!=="hand"&&e.activeTool.type!=="laser")||qt(t,e).length));I();import{pointFrom as Xr}from"@excalidraw/math";import{DEFAULT_FONT_FAMILY as yy,DEFAULT_FONT_SIZE as wy,TEXT_ALIGN as Py,VERTICAL_ALIGN as Sy,getSizeFromPoints as Iy,randomId as My,arrayToMap as Ty,assertNever as ml,cloneJSON as Ym,getFontString as Ay,getUpdatedTimestamp as Dy,isDevEnv as vy,toBrandedType as By,getLineHeight as Ly,DEFAULT_STICKY_NOTE_SIZE as Wm,isTransparent as ky}from"@excalidraw/common";var $r={width:100,height:0},Kn=100,Cy=(e,t,n)=>{let i=be(e)?Nn(t.strokeColor&&!ky(t.strokeColor)?t.strokeColor:e.strokeColor):null,o=fi({x:0,y:0,textAlign:Py.CENTER,verticalAlign:Sy.MIDDLE,...t,containerId:e.id,strokeColor:i??(t.strokeColor||e.strokeColor),labelPosition:U(e)?Sd:null});return Object.assign(e,{boundElements:(e.boundElements||[]).concat({type:"text",id:o.id}),...i&&i!==e.strokeColor?{strokeColor:i}:null}),sr(o,e,n),[e,o]},Um=(e,t,n,i,o)=>{let r,s;if(Object.assign(e,{startBinding:e?.startBinding||null,endBinding:e.endBinding||null}),t){let c=t?.width??Kn,u=t?.height??Kn,m;t.id&&(m=i.getElement(t.id),m||console.error(`No element for start binding with id ${t.id} found`));let p=t.x||e.x-c,h=t.y||e.y-u/2,f=m?m.type:t.type;if(f){if(f==="text"){let g="";m&&m.type==="text"?g=m.text:t.type==="text"&&(g=t.text),g||console.error(`No text found for start binding text element for ${e.id}`),r=fi({x:p,y:h,type:"text",...m,...t,text:g}),Object.assign(r,{x:t.x||e.x-r.width,y:t.y||e.y-r.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{r=Ni({x:p,y:h,width:c,height:u,...m,...t,type:f});break}default:ml(e,`Unhandled element start type "${t.type}"`,!0)}Kt(e,r,"orbit","start",o)}}if(n){let c=n?.height??Kn,u=n?.width??Kn,m;n.id&&(m=i.getElement(n.id),m||console.error(`No element for end binding with id ${n.id} found`));let p=n.x||e.x+e.width,h=n.y||e.y-c/2,f=m?m.type:n.type;if(f){if(f==="text"){let g="";m&&m.type==="text"?g=m.text:n.type==="text"&&(g=n.text),g||console.error(`No text found for end binding text element for ${e.id}`),s=fi({x:p,y:h,type:"text",...m,...n,text:g}),Object.assign(s,{y:n.y||e.y-s.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{s=Ni({x:p,y:h,width:u,height:c,...m,...n,type:f});break}default:ml(e,`Unhandled element end type "${f}"`,!0)}Kt(e,s,"orbit","end",o)}}if(e.points.length<2)return{linearElement:e,startBoundElement:r,endBoundElement:s};let a=e.points.length-1,l=.5,d=Ym(e.points);return e.points[a][0]>e.points[a-1][0]&&(d[0][0]=l,d[a][0]-=l),e.points[a][0]<e.points[a-1][0]&&(d[0][0]=-l,d[a][0]+=l),e.points[a][1]>e.points[a-1][1]&&(d[0][1]=l,d[a][1]-=l),e.points[a][1]<e.points[a-1][1]&&(d[0][1]=-l,d[a][1]+=l),Object.assign(e,R.getNormalizeElementPointsAndCoords({...e,points:d})),{linearElement:e,startBoundElement:r,endBoundElement:s}},pl=class{excalidrawElements=new Map;add=t=>{t&&this.excalidrawElements.set(t.id,t)};getElements=()=>ga(Array.from(this.excalidrawElements.values()));getElementsMap=()=>By(Ty(this.getElements()));getElement=t=>this.excalidrawElements.get(t)},rL=(e,t)=>{if(!e)return[];let n=Ym(e),i=new pl,o=new Map,r=new Map,s=Dy();for(let d of n){let c,u=d.id;switch(t?.regenerateIds!==!1&&Object.assign(d,{id:My(),created:s}),d.type){case"rectangle":case"ellipse":case"diamond":{let p=d?.label?.text&&d.width===void 0?0:d?.width||Kn,h=d?.label?.text&&d.height===void 0?0:d?.height||Kn;c=Ni({...d,width:p,height:h});break}case"line":{let p=d.width||$r.width,h=d.height||$r.height;c=Tu({width:p,height:h,points:[Xr(0,0),Xr(p,h)],...d});break}case"arrow":{let p=d.width||$r.width,h=d.height||$r.height;c=Lr({width:p,height:h,endArrowhead:"arrow",points:[Xr(0,0),Xr(p,h)],...d,type:"arrow"}),Object.assign(c,Iy(c.points));break}case"text":{let p=d?.fontFamily||yy,h=d?.fontSize||wy,f=d?.lineHeight||Ly(p),g=d.text??"",E=ro(g),b=$e(E,Ay({fontFamily:p,fontSize:h}),f);c=fi({width:b.width,height:b.height,fontFamily:p,fontSize:h,...d});break}case"image":{c=Au({width:d?.width||Kn,height:d?.height||Kn,...d});break}case"frame":{c=Pu({x:0,y:0,...d});break}case"magicframe":{c=Su({x:0,y:0,...d});break}case"freedraw":{c=Mu({...d});break}case"iframe":{c=wu({...d});break}case"stickynote":{let p=d.width||Wm,h=d.height||Wm;c=Na(Br({...d,type:"stickynote",width:p,height:h,baseHeight:d.baseHeight??h}));break}case"embeddable":{c=yu({...d});break}default:c=d,ml(d,`Unhandled element type "${d.type}"`,!0)}i.getElement(c.id)?console.error(`Duplicate id found for ${c.id}`):(i.add(c),o.set(c.id,d),u&&r.set(u,c.id))}let a=i.getElementsMap(),l=new _i(a);for(let[d,c]of o){let u=i.getElement(d);switch(c.type){case"rectangle":case"ellipse":case"diamond":case"stickynote":case"arrow":{if(c.label?.text){let[m,p]=Cy(u,c?.label,l);if(i.add(m),i.add(p),U(m)){let h=c.type==="arrow"?c?.start:void 0,f=c.type==="arrow"?c?.end:void 0;if(h&&h.id){let x=r.get(h.id);x&&Object.assign(h,{id:x})}if(f&&f.id){let x=r.get(f.id);x&&Object.assign(f,{id:x})}let{linearElement:g,startBoundElement:E,endBoundElement:b}=Um(m,h,f,i,l);m=g,i.add(g),i.add(E),i.add(b)}}else switch(c.type){case"arrow":{let{start:m,end:p}=c;if(m&&m.id){let E=r.get(m.id);Object.assign(m,{id:E})}if(p&&p.id){let E=r.get(p.id);Object.assign(p,{id:E})}let{linearElement:h,startBoundElement:f,endBoundElement:g}=Um(u,m,p,i,l);i.add(h),i.add(f),i.add(g);break}}break}}}for(let[d,c]of o){if(c.type!=="frame"&&c.type!=="magicframe")continue;let u=i.getElement(d);if(!u)throw new Error(`Excalidraw element with id ${d} doesn't exist`);let m=[];c.children.forEach(S=>{let M=r.get(S);if(!M)throw new Error(`Element with ${S} wasn't mapped correctly`);let A=i.getElement(M);if(!A)throw new Error(`Frame element with id ${M} doesn't exist`);Object.assign(A,{frameId:u.id}),A?.boundElements?.forEach(T=>{let G=i.getElement(T.id);if(!G)throw new Error(`Bound element with id ${T.id} doesn't exist`);Object.assign(G,{frameId:u.id}),m.push(G)}),m.push(A)});let[p,h,f,g]=tt(m),E=10;p=p-E,h=h-E,f=f+E,g=g+E;let b=u?.x||p,x=u?.y||h,y=u?.width||f-p,w=u?.height||g-h;Object.assign(u,{x:b,y:x,width:y,height:w}),vy()&&c.children.length&&(u?.x||u?.y||u?.width||u?.height)&&console.info("User provided frame attributes are being considered, if you find this inaccurate, please remove any of the attributes - x, y, width and height so frame coordinates and dimensions are calculated automatically")}return i.getElements()};I();var cL=({app:e,event:t})=>{let n=e.state;if(n.selectedLinearElement&&e.lastPointerMoveCoords){if(n.selectedLinearElement.draggedFocusPointBinding)return Bm(n.selectedLinearElement,e.scene.getNonDeletedElementsMap(),e.lastPointerMoveCoords,e.scene,n,e.getEffectiveGridSize(),t.altKey),!0;if(n.selectedLinearElement.hoverPointIndex!==null&&e.lastPointerMoveEvent&&n.selectedLinearElement.initialState.lastClickedPoint>=0&&n.selectedLinearElement.isDragging)return R.handlePointDragging(e.lastPointerMoveEvent,e,e.lastPointerMoveCoords.x,e.lastPointerMoveCoords.y,n.selectedLinearElement),!0}return!1};I();var Ny=e=>{switch(e){case void 0:case null:return null;case"dot":return"circle";case"crowfoot_one":return"cardinality_one";case"crowfoot_many":return"cardinality_many";case"crowfoot_one_or_many":return"cardinality_one_or_many";default:return e}},pL=e=>{let t=Ny(e);return t===null?null:t};I();import{getBoundsFromPoints as Vm,getElementAbsoluteCoords as Gy}from"@excalidraw/element/bounds";import{newArrowElement as Xm,newElement as Oy,newLinearElement as jr}from"@excalidraw/element/newElement";import{ELEMENT_PENDING_DRAW_SHAPE_OPACITY as Fy,getStrokeWidthByKey as Vr,ROUNDNESS as $m}from"@excalidraw/common";import{convexHull as Ry,distanceToLineSegment as zy,elongation as _y,kurtosis as jm,lineSegment as Hy,orientPrincipalAxes as Wy,pointFrom as it,polygonArea as Uy,principalAxes as Yy,principalCoords as Xy,skewness as $y}from"@excalidraw/math";var jy=64,Vy=25,Ky=.15,Zy=.25,qy=.5,Qy=.15,Jy=.3,ew=1.5,Wi=3;function tw(e,t){let n=0;for(let a=1;a<e.length;a++)n+=Math.hypot(e[a][0]-e[a-1][0],e[a][1]-e[a-1][1]);let i=n/(t-1),o=0,r=[e[0]],s=e[0];for(let a=1;a<e.length;a++){let l=e[a],d=Math.hypot(l[0]-s[0],l[1]-s[1]);if(o+d>=i){let c=i-o;for(;c<=d+1e-10;){let u=c/d,m=[s[0]+u*(l[0]-s[0]),s[1]+u*(l[1]-s[1])];if(r.push(m),r.length===t)return r;s=m,o=0,c+=i}o=d-(c-i)}else o+=d;s=l}for(;r.length<t;)r.push(e[e.length-1]);return r}function nw(e){let t=e[0],n=t,i=0;for(let s of e){let a=Math.hypot(s[0]-t[0],s[1]-t[1]);a>i&&(i=a,n=s)}if(i===0)return 0;let o=Hy(t,n),r=0;for(let s of e)Math.hypot(s[0]-n[0],s[1]-n[1])<=qy*i||(r=Math.max(r,zy(s,o)));return r/i}function iw(e){let t=[];for(let n=Wi;n<e.length-Wi;n++){let[i,o]=e[n-Wi],[r,s]=e[n],[a,l]=e[n+Wi],d=r-i,c=s-o,u=a-r,m=l-s;t.push(Math.abs(Math.atan2(d*m-c*u,d*u+c*m)))}return t}function ow(e){let t=iw(e),n=t.reduce((r,s)=>r+s,0);if(n===0)return 0;let i=new Array(t.length).fill(!1),o=0;for(let r=0;r<4;r++){let s=-1,a=0;for(let l=0;l<t.length;l++)!i[l]&&t[l]>a&&(a=t[l],s=l);if(s<0)break;for(let l=s-Wi;l<=s+Wi;l++)l>=0&&l<t.length&&!i[l]&&(o+=t[l],i[l]=!0)}return o/n}function rw(e){let t=tw(e,jy),n=0;for(let m=1;m<t.length;m++)n+=Math.hypot(t[m][0]-t[m-1][0],t[m][1]-t[m-1][1]);let i=Math.hypot(t[t.length-1][0]-t[0][0],t[t.length-1][1]-t[0][1]),o=Wy(t,Yy(t)),r=Xy(t,o).map(([m])=>m),s=Ry(t),[a,l,d,c]=Vm(t),u=(d-a)*(c-l);return{gapRatio:n>0?i/n:0,elongation:_y(o),majorSkew:$y(r),hullFillRatio:u>0?Uy(s)/u:0,cornerTurnShare:ow(t),kurtosisProduct:jm(t.map(([m])=>m))*jm(t.map(([,m])=>m)),shaftDeviationRatio:nw(t)}}var sw=[{type:"rectangle",hullFillRatio:1,cornerTurnShare:.95,kurtosisProduct:1.83},{type:"diamond",hullFillRatio:.5,cornerTurnShare:.95,kurtosisProduct:3.24},{type:"ellipse",hullFillRatio:Math.PI/4,cornerTurnShare:.55,kurtosisProduct:2.25}],aw=.2,lw=.2,dw=.7;function cw(e){let t="freedraw",n=ew;for(let i of sw){let o=Math.hypot((e.hullFillRatio-i.hullFillRatio)/aw,(e.cornerTurnShare-i.cornerTurnShare)/lw,(e.kurtosisProduct-i.kurtosisProduct)/dw);o<n&&(n=o,t=i.type)}return t}function uw(e){return e.elongation>Zy||e.shaftDeviationRatio>Qy?"freedraw":Math.abs(e.majorSkew)>=Jy?"arrow":"line"}function mw(e){return e.gapRatio>Ky?uw(e):cw(e)}function pw(e,t,n){let[i,o,r,s]=t,a=r-i,l=s-o;if(a===0&&l===0)return e[e.length-1];let d=[it(i,o),it((i+r)/2,o),it(r,o),it(r,(o+s)/2),it(r,s),it((i+r)/2,s),it(i,s),it(i,(o+s)/2)],c=-1,u=it(r,s);for(let h of d){let f=Math.hypot(h[0]-n[0],h[1]-n[1]);f>c&&(c=f,u=h)}let m=1/0,p=e[e.length-1];for(let h of e){let f=Math.hypot(h[0]-u[0],h[1]-u[1]);f<m&&(m=f,p=h)}return p}var fw=(e,t,n=1)=>{typeof window<"u"&&(window.LAST_POINTS=e.map(([u,m])=>it(u,m)));let i=Vm(e),[o,r,s,a]=i,l=Math.max(s-o,a-r);if(e.length<3||l*n<Vy)return{type:"freedraw",points:e,boundingBox:i};let d=mw(rw(e));return{type:t?.type==="arrow"&&d!=="arrow"?"freedraw":d,points:e,boundingBox:i}},hw=(e,t,n,i,o)=>{let r=fw(e,i,t.zoom.value),s=r.boundingBox,[a,l,d,c]=s,m=(o??ya([...n.values()])).find(h=>{let[f,g,E,b]=Gy(h,n);return f<=a&&g<=l&&E>=d&&b>=c})?.id??null,p=t.currentItemRoundness==="round"?{type:Xo(r.type)?$m.ADAPTIVE_RADIUS:$m.PROPORTIONAL_RADIUS}:null;switch(r.type){case"rectangle":case"diamond":case"ellipse":return Oy({type:r.type,x:r.boundingBox[0],y:r.boundingBox[1],width:r.boundingBox[2]-r.boundingBox[0],height:r.boundingBox[3]-r.boundingBox[1],groupIds:[],angle:0,frameId:m,roundness:p,roughness:t.currentItemRoughness,backgroundColor:t.currentItemBackgroundColor,strokeColor:t.currentItemStrokeColor,fillStyle:t.currentItemFillStyle,opacity:t.currentItemOpacity,strokeStyle:t.currentItemStrokeStyle,strokeWidth:Vr(r.type,t.currentItemStrokeWidthKey)});case"arrow":{let[h,f]=r.points[0],[g,E]=pw(r.points,r.boundingBox,r.points[0]),b=it(g-h,E-f);if(Math.hypot(g-r.points[0][0],E-r.points[0][1])<60){let S=jr({type:"line",x:h,y:f,points:[it(r.points[0][0]-h,r.points[0][1]-f),b],groupIds:[],frameId:m,locked:!1,angle:0,roundness:p,roughness:t.currentItemRoughness,backgroundColor:t.currentItemBackgroundColor,strokeColor:t.currentItemStrokeColor,fillStyle:t.currentItemFillStyle,opacity:t.currentItemOpacity,strokeStyle:t.currentItemStrokeStyle,strokeWidth:Vr(r.type,t.currentItemStrokeWidthKey)}),M=R.getNormalizeElementPointsAndCoords(S);return jr({...S,...M})}let y=Xm({type:"arrow",x:h,y:f,startArrowhead:t.currentItemStartArrowhead,endArrowhead:t.currentItemEndArrowhead,points:[it(r.points[0][0]-h,r.points[0][1]-f),b],groupIds:[],frameId:m,locked:!1,angle:0,roundness:p,roughness:t.currentItemRoughness,backgroundColor:t.currentItemBackgroundColor,strokeColor:t.currentItemStrokeColor,fillStyle:t.currentItemFillStyle,opacity:t.currentItemOpacity,strokeStyle:t.currentItemStrokeStyle,strokeWidth:Vr(r.type,t.currentItemStrokeWidthKey)}),w=R.getNormalizeElementPointsAndCoords(y);return Xm({...y,...w})}case"line":{let[h,f]=r.points[0],g=r.points[r.points.length-1],E=jr({type:r.type,x:h,y:f,points:[it(r.points[0][0]-h,r.points[0][1]-f),it(g[0]-h,g[1]-f)],groupIds:[],frameId:m,locked:!1,angle:0,roundness:p,roughness:t.currentItemRoughness,backgroundColor:t.currentItemBackgroundColor,strokeColor:t.currentItemStrokeColor,fillStyle:t.currentItemFillStyle,opacity:t.currentItemOpacity,strokeStyle:t.currentItemStrokeStyle,strokeWidth:Vr(r.type,t.currentItemStrokeWidthKey)}),b=R.getNormalizeElementPointsAndCoords(E);return jr({...E,...b})}}},gw=(e,t)=>{if(!e||e.type!==t.type||e.x!==t.x||e.y!==t.y||e.width!==t.width||e.height!==t.height||e.angle!==t.angle)return!1;if(q(e)&&q(t)){if(e.points.length!==t.points.length)return!1;for(let n=0;n<e.points.length;n++)if(e.points[n][0]!==t.points[n][0]||e.points[n][1]!==t.points[n][1])return!1}return!0},SL=(e,t)=>{if(e.state.activeTool.type==="autoshape"){e.drawShape.trail.addPointToPath(t.x,t.y);let n=e.drawShape.trail.getCurrentPoints();if(n.length>=3){let i=hw(n,e.state,e.scene.getNonDeletedElementsMap(),e.state.newElement,e.scene.getNonDeletedFramesLikes());if(i&&!Re(i)){let o=e.state.newElement,r={...i,id:o?.type===i.type?o.id:i.id,created:o?.type===i.type?o.created:i.created,seed:1,opacity:Fy,isDeleted:!1};gw(o,r)||e.setState({newElement:r})}else e.state.newElement!==null&&e.setState({newElement:null})}return!0}return!1};var DL=e=>e.reduce((t,n)=>t+n.version,0),Xu=e=>{let t=5381;for(let n of Ew(e))t=(t<<5)+t+n.versionNonce;return t>>>0},$u=e=>{let t=5381;for(let n=0;n<e.length;n++){let i=e.charCodeAt(n);t=(t<<5)+t+i}return t>>>0},Qe=e=>!e.isDeleted,vL=e=>e.filter(t=>Qe(t)&&!Eu(t)),Wn=e=>e.filter(Qe);export{$n as AppStateDelta,Vh as BASE_ARROW_MIN_LENGTH,ac as BASE_BINDING_GAP,ti as BASE_BINDING_GAP_ELBOW,ce as BASE_PADDING,Fn as BindableElement,On as BoundElement,pt as CaptureUpdateAction,Sd as DEFAULT_BOUND_TEXT_LABEL_POSITION,gx as DEFAULT_BUCKET_FILL_OPTIONS,XM as DEFAULT_LINK_SIZE,Rm as DEFAULT_OMIT_SIDES,j as Delta,Ua as DurableIncrement,ka as ElementBounds,jn as ElementsDelta,Ya as EphemeralIncrement,mo as FOCUS_POINT_SIZE,gm as FlowChartCreator,hm as FlowChartNavigator,Be as HEADING_DOWN,ze as HEADING_LEFT,he as HEADING_RIGHT,qe as HEADING_UP,YE as INVISIBLY_SMALL_ELEMENT_SIZE,fa as InvalidFractionalIndexError,R as LinearElementEditor,We as MINIMAL_CROP_SIZE,vB as OMIT_SIDES_FOR_FRAME,DB as OMIT_SIDES_FOR_MULTIPLE_ELEMENTS,_i as Scene,ht as ShapeCache,Wu as Store,Po as StoreChange,Xa as StoreDelta,Or as StoreIncrement,Vn as StoreSnapshot,lt as aabbForElement,Xg as addElementsToFrame,qb as addNewNodes,LI as addToGroup,XT as alignElements,tg as avoidRectangularCorner,Kt as bindBindingElement,dI as bindBindingElementToFixedPoint,Uc as bindElementsToFramesAfterDuplication,Kh as bindOrUnbindBindingElement,rI as bindOrUnbindBindingElements,Ds as bindPointToSnapToElementOutline,mc as bindingProperties,wa as boundsContainBounds,fd as bumpVersion,og as calculateFixedPointForElbowArrowBinding,Bi as calculateFixedPointForNonElbowArrowBinding,LP as canApplyRoundnessTypeToElement,id as canBecomePolygon,_d as canChangeRoundness,Bb as canCreateLinkFromElements,AS as canHaveArrowheads,Ur as canResizeFromSides,Ii as charWidth,fe as compareHeading,oi as computeBoundTextPosition,BA as computeBucketFillPolygon,Fs as computeContainerDimensionForBoundText,S1 as containsCJK,rL as convertToExcalidrawElements,hw as convertToShape,SL as convertToShapeHandlePointerMoveFromPointerDown,ov as createPlaceholderEmbeddableLabel,Za as createSrcDoc,SP as cropElement,An as deconstructDiamondElement,to as deconstructLinearOrFreeDrawElement,Tn as deconstructRectanguloidElement,Wa as deepCopyElement,jD as defaultGetElementLinkFromSelection,g1 as detectLineHeight,Ut as distanceToElement,BD as distributeElements,xt as doBoundsIntersect,WD as dragNewElement,vb as dragNewTextElement,_D as dragSelectedElements,zx as duplicateElement,$A as duplicateElements,BI as editGroupForSelectedElement,se as elementCenterPoint,zn as elementOverlapsWithFrame,ho as elementWithCanvasCache,Hn as elementsAreInFrameBounds,Cc as elementsAreInSameGroup,Fc as elementsOverlappingBBox,sv as embeddableURLValidator,Ng as excludeElementsInFramesFromSelection,SM as filterElementsEligibleAsFrameChildren,aI as fixBindingsAfterDeletion,uc as fixDuplicatedBindingsAfterDuplication,xs as flipHeading,vM as frameAndChildrenSelectedTogether,zd as generateLinearCollisionShape,mt as generateRoughOptions,VI as getActiveTextElement,ur as getAllHoveredElementAtPoint,bd as getApproxMinLineHeight,xd as getApproxMinLineWidth,pc as getArrowLocalFixedPoints,FE as getArrowheadAngle,pL as getArrowheadForPicker,nt as getArrowheadPoints,OE as getArrowheadSize,iS as getBaseFontSize,oS as getBaseFontSizeUpdate,Le as getBindingGap,lI as getBindingSideMidPoint,sa as getBindingStrategyForDraggingBindingElementEndpoints,Q as getBoundTextElement,Ct as getBoundTextElementId,R1 as getBoundTextElementPosition,so as getBoundTextMaxHeight,kt as getBoundTextMaxWidth,mi as getBoundsFromPoints,on as getCenterForBounds,eS as getColorTargetElement,tS as getColorUpdate,fn as getCommonBoundingBox,tt as getCommonBounds,Ug as getCommonFrameId,O1 as getContainerCenter,zs as getContainerCoords,_e as getContainerElement,_n as getContainingFrame,cn as getCornerRadius,mr as getCubicBezierCurveBound,_B as getCursorForResizingElement,Zg as getDefaultFrameName,kP as getDefaultRoundnessTypeForElement,Rd as getDiamondBaseCorners,Ai as getDiamondPoints,HD as getDragOffsetXY,DT as getDraggedElementsBounds,Z as getElementAbsoluteCoords,ue as getElementBounds,ki as getElementLineSegments,ua as getElementPointsCoords,au as getElementShape,RB as getElementWithTransformHandleType,Yc as getElementsCompletelyInFrame,et as getElementsInGroup,PM as getElementsInNewFrame,wM as getElementsInResizingFrame,hM as getElementsIntersectingFrame,DM as getElementsOverlappingFrame,Oc as getElementsWithinSelection,iv as getEmbedLink,gA as getEndpointBoundTextDragAnchor,IP as getFlipAdjustedCropPosition,Rn as getFrameChildren,Yg as getFrameChildrenInsertionIndex,ya as getFrameLikeElements,AM as getFrameLikeTitle,VM as getFreedrawOutlineAsSegments,AE as getFreedrawOutlinePoints,lu as getFreedrawStrokeCenterPoints,Ye as getGlobalFixedPointForBindableElement,rg as getGlobalFixedPoints,pd as getHeadingForElbowArrowSnap,sn as getHoveredElementForBinding,Qd as getHoveredElementForFocusPoint,Jv as getInitializedImageElements,ir as getLineHeightInPx,Ln as getLineWidth,xS as getLinearElementPathSegments,CP as getLinearElementSubType,VD as getLinkIdAndTypeFromSelection,vc as getLockedLinearCursorAlignSize,Lf as getMaxCharWidth,CI as getMaximumGroups,x1 as getMinCharWidth,po as getMinMaxXYFromCurvePathOps,nr as getMinTextElementWidth,Gc as getNewGroupIdsForDuplication,Wn as getNonDeletedElements,kc as getNonDeletedGroupIds,RT as getNormalizedDimensions,zi as getObservedAppState,al as getOmitSidesForEditorInterface,u1 as getOriginalContainerHeightFromCache,Ca as getPerfectElementSize,ao as getPositionAfterHeightChange,AT as getRectangleBoxAbsoluteCoords,cE as getRenderOpacity,wB as getResizeArrowDirection,yB as getResizeOffsetXY,Mn as getResizedElementAbsoluteCoords,yM as getRootElements,DL as getSceneVersion,qt as getSelectedElements,yr as getSelectedElementsByGroup,pa as getSelectedGroupForElement,vg as getSelectedGroupIdForElement,Ag as getSelectedGroupIds,jI as getSelectionStateForElements,Dh as getSnapOutlineMidPoint,Us as getStickyNoteCornerRadius,fh as getStickyNoteDateLabel,Bd as getStickyNoteFooter,kd as getStickyNoteLayout,Ld as getStickyNoteMinSize,Ys as getStickyNotePathCommands,mh as getStickyNoteRenderPoints,$s as getStickyNoteResizeIntent,$I as getTargetElements,jg as getTargetFrame,Ga as getTextAnchorRatios,fA as getTextBindingForArrowEndpoint,F1 as getTextElementAngle,W1 as getTextFromElements,Bf as getTextHeight,yd as getTextWidth,zB as getTransformHandleTypeFromCoords,zm as getTransformHandles,ll as getTransformHandlesFromCoords,pA as getUnboundArrowEndpointAtPoint,Kl as getUncroppedImageElement,ms as getUncroppedWidthAndHeight,YI as getVisibleAndNonSelectedElements,vL as getVisibleElements,vT as getVisibleSceneBounds,_f as getWrappedTextLines,bM as groupByFrameLikes,EM as groupsAreAtLeastIntersectingTheFrame,xM as groupsAreCompletelyOutOfFrame,ii as handleBindTextResize,Bm as handleFocusPointDrag,jv as handleFocusPointHover,Xv as handleFocusPointPointerDown,$v as handleFocusPointPointerUp,si as hasBackground,Wt as hasBoundTextElement,BB as hasBoundingBox,wS as hasFillStyle,MS as hasFreedrawMode,IS as hasRoughness,PS as hasStrokeColor,vh as hasStrokeStyle,SS as hasStrokeWidth,Xu as hashElementsVersion,$u as hashString,st as headingForPoint,wi as headingForPointFromElement,vt as headingForPointIsHorizontal,at as headingIsHorizontal,$P as headingIsVertical,Rh as hitElementBoundText,Fh as hitElementBoundingBox,WS as hitElementBoundingBoxOnly,jt as hitElementItself,ct as intersectElementWithLineSegment,BP as isArrowBoundToElement,U as isArrowElement,we as isBindableElement,ia as isBindableElementInsideOtherBindable,Ue as isBindingElement,Vp as isBindingElementType,Vt as isBindingEnabled,Ie as isBoundToContainer,Ru as isBucketFillCompatible,gM as isCursorInFrame,$p as isCurvedArrow,X as isElbowArrow,FT as isElementCompletelyInViewport,ba as isElementContainingFrame,$c as isElementInFrame,Dg as isElementInGroup,Rc as isElementInViewport,Ci as isElementIntersectingFrame,KD as isElementLink,NP as isEligibleFrameChildType,ql as isEmbeddableElement,hA as isEndpointBoundText,ed as isExcalidrawElement,sg as isFixedPoint,td as isFlowchartNodeElement,zr as isFocusPointVisible,Yo as isFrameElement,te as isFrameLikeElement,ye as isFreeDrawElement,Yp as isFreeDrawElementType,sy as isHTMLSVGElement,Wo as isIframeElement,Uo as isIframeLikeElement,Fe as isImageElement,Nc as isInGroup,ei as isInitializedImageElement,Eu as isInvisiblySmallElement,Re as isLineElement,q as isLinearElement,jp as isLinearElementType,Ql as isMagicFrameElement,h1 as isMeasureTextSupported,yv as isNodeInFlowchart,Qe as isNonDeletedElement,Nt as isPathALoop,dt as isPointInElement,eo as isRectangularElement,Jl as isRectanguloidElement,LA as isRestylableFill,Tg as isSelectedViaGroup,Xp as isSharpArrow,vP as isSimpleArrow,XI as isSomeElementSelected,dr as isStickyNoteBoundText,be as isStickyNoteElement,Kp as isTextBindableContainer,V as isTextElement,Xo as isUsingAdaptiveRadius,nd as isUsingProportionalRadius,ps as isValidPolygon,H1 as isValidTextContainer,ry as loadHTMLImageElement,ma as makeNextSelectedElementIds,Bt as maxBindingDistance_simple,cL as maybeHandleArrowPointlikeDrag,rv as maybeParseEmbedSrc,ol as measureFontSizeFromWidth,$e as measureText,Nv as moveAllLeft,Gv as moveAllRight,Sm as moveArrowAboveBindable,kv as moveOneLeft,Cv as moveOneRight,Xe as mutateElement,Lr as newArrowElement,Ni as newElement,Ae as newElementWith,yu as newEmbeddableElement,Pu as newFrameElement,Mu as newFreeDrawElement,wu as newIframeElement,Au as newImageElement,Tu as newLinearElement,Su as newMagicFrameElement,Br as newStickyNoteElement,fi as newTextElement,Ny as normalizeArrowhead,Cx as normalizeBoundElementsOrder,zu as normalizeElementOrder,je as normalizeFixedPoint,eB as normalizeSVG,nA as normalizeStickyNote,Ws as normalizeStickyNoteBackgroundColor,Xs as normalizeStickyNoteFontSize,Na as normalizeStickyNoteGeometry,Nn as normalizeStickyNoteStrokeColor,bu as normalizeStickyNoteStyle,ro as normalizeText,Pr as omitGroupsContainingFrameLikes,Wg as omitPartialGroups,_c as orderByFractionalIndex,oo as originalContainerCache,ZD as parseElementLinkFromURL,Rf as parseTokens,$t as pointInsideBounds,_E as pointInsideBoundsInclusive,rB as positionElementsOnGrid,Qs as projectFixedPointOntoDiagonal,fw as recognizeShape,sr as redrawTextBoundingBox,iA as refreshTextDimensions,rS as relayoutStickyNotes,$g as removeAllElementsFromFrame,Xc as removeElementsFromFrame,kI as removeFromSelectedGroups,jM as renderElement,$M as renderSelectionElement,Cu as rendersOpaqueFill,IM as replaceAllElementsInFrame,Nm as rescalePointsInElement,gd as resetOriginalContainerCache,hy as resizeMultipleElements,my as resizeSingleElement,dy as resizeSingleTextElement,xy as resizeTest,Mg as selectGroup,Bc as selectGroupsForSelectedElements,Lc as selectGroupsFromGivenElements,E1 as setCustomTextMetricsProvider,z1 as shouldAllowVerticalAlign,TM as shouldApplyFrameClip,cr as shouldTestInside,YB as showSelectedShapeActions,aa as snapToMid,_1 as suppportsHorizontalAlign,ga as syncInvalidIndices,Hc as syncInvalidIndicesImmutable,di as syncMovedIndices,nS as syncStickyNoteInk,Dc as toggleLinePolygonState,TS as toolIsArrow,bB as transformElements,Ke as unbindBindingElement,sI as updateBindings,Ge as updateBoundElements,Gt as updateBoundPoint,Si as updateElbowArrowPoints,MM as updateFrameMembershipOfSelectedElements,Qv as updateImageCache,hd as updateOriginalContainerCache,Mi as updateStickyNoteLayout,md as validateElbowPoints,Rg as validateFractionalIndices,Yt as vectorToHeading,Lt as wrapText};