@excalidraw/excalidraw 0.18.0-432a46e → 0.18.0-58f7d33

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 (411) hide show
  1. package/dist/dev/{chunk-ZG3EI5XS.js → chunk-KKJLIRJU.js} +2 -2
  2. package/dist/dev/{chunk-ZG3EI5XS.js.map → chunk-KKJLIRJU.js.map} +1 -1
  3. package/dist/dev/{chunk-S7W4OWSF.js → chunk-LEJJ2YZY.js} +461 -192
  4. package/dist/dev/chunk-LEJJ2YZY.js.map +7 -0
  5. package/dist/dev/{chunk-LMHBUWQS.js → chunk-X3RYHLJU.js} +2 -1
  6. package/dist/dev/chunk-X3RYHLJU.js.map +7 -0
  7. package/dist/dev/data/{image-5HAY2PCR.js → image-U2IPNUKJ.js} +3 -3
  8. package/dist/dev/index.css +43 -46
  9. package/dist/dev/index.css.map +2 -2
  10. package/dist/dev/index.js +678 -190
  11. package/dist/dev/index.js.map +4 -4
  12. package/dist/dev/locales/{en-OZCJJ2HN.js → en-CKWC2GMK.js} +2 -2
  13. package/dist/dev/subset-shared.chunk.js +1 -1
  14. package/dist/dev/subset-worker.chunk.js +1 -1
  15. package/dist/prod/{chunk-6U3AYISY.js → chunk-IUH5AXLB.js} +1 -1
  16. package/dist/prod/{chunk-U24AOZ3B.js → chunk-QUX7WTVH.js} +1 -1
  17. package/dist/prod/chunk-RQK6WG4F.js +33 -0
  18. package/dist/prod/data/image-UQDATCXC.js +1 -0
  19. package/dist/prod/index.css +1 -1
  20. package/dist/prod/index.js +14 -14
  21. package/dist/prod/locales/{en-B4ZKOASM.js → en-SBO6ZHT2.js} +1 -1
  22. package/dist/prod/subset-shared.chunk.js +1 -1
  23. package/dist/prod/subset-worker.chunk.js +1 -1
  24. package/dist/types/{packages/common → common}/src/colors.d.ts +1 -0
  25. package/dist/types/{packages/common → common}/src/constants.d.ts +3 -0
  26. package/dist/types/{packages/common → common}/src/utils.d.ts +5 -1
  27. package/dist/types/{packages/element → element}/src/binding.d.ts +2 -1
  28. package/dist/types/{packages/element → element}/src/bounds.d.ts +5 -0
  29. package/dist/types/{packages/element → element}/src/collision.d.ts +1 -1
  30. package/dist/types/{packages/element → element}/src/heading.d.ts +0 -1
  31. package/dist/types/{packages/element → element}/src/textElement.d.ts +2 -1
  32. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionAddToLibrary.d.ts +3 -0
  33. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionBoundText.d.ts +2 -0
  34. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionCanvas.d.ts +192 -3
  35. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionClipboard.d.ts +6 -0
  36. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionCropEditor.d.ts +1 -0
  37. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionDeleteSelected.d.ts +3 -0
  38. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionElementLink.d.ts +1 -0
  39. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionElementLock.d.ts +2 -1
  40. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionEmbeddable.d.ts +1 -0
  41. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionExport.d.ts +9 -0
  42. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionFinalize.d.ts +2 -0
  43. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionFrame.d.ts +4 -0
  44. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionGroup.d.ts +2 -0
  45. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionLinearEditor.d.ts +1 -0
  46. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionLink.d.ts +1 -0
  47. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionMenu.d.ts +3 -0
  48. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionNavigate.d.ts +2 -0
  49. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionProperties.d.ts +15 -0
  50. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionSelectAll.d.ts +1 -0
  51. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionStyles.d.ts +1 -0
  52. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleGridMode.d.ts +1 -0
  53. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleObjectsSnapMode.d.ts +1 -0
  54. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleSearchMenu.d.ts +2 -0
  55. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleStats.d.ts +1 -1
  56. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleViewMode.d.ts +1 -1
  57. package/dist/types/{packages/excalidraw → excalidraw}/actions/actionToggleZenMode.d.ts +1 -1
  58. package/dist/types/{packages/excalidraw → excalidraw}/actions/types.d.ts +1 -1
  59. package/dist/types/{packages/excalidraw → excalidraw}/animated-trail.d.ts +7 -1
  60. package/dist/types/{packages/excalidraw → excalidraw}/appState.d.ts +1 -0
  61. package/dist/types/{packages/excalidraw → excalidraw}/components/App.d.ts +9 -4
  62. package/dist/types/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +7 -0
  63. package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/colorPickerUtils.d.ts +1 -1
  64. package/dist/types/{packages/excalidraw → excalidraw}/components/icons.d.ts +1 -0
  65. package/dist/types/excalidraw/eraser/index.d.ts +14 -0
  66. package/dist/types/excalidraw/lasso/index.d.ts +15 -0
  67. package/dist/types/excalidraw/lasso/utils.d.ts +12 -0
  68. package/dist/types/{packages/excalidraw → excalidraw}/types.d.ts +2 -1
  69. package/dist/types/{packages/math → math}/src/polygon.d.ts +1 -0
  70. package/dist/types/{packages/math → math}/src/segment.d.ts +1 -1
  71. package/dist/types/{packages/math → math}/src/types.d.ts +1 -0
  72. package/package.json +19 -2
  73. package/dist/dev/chunk-LMHBUWQS.js.map +0 -7
  74. package/dist/dev/chunk-S7W4OWSF.js.map +0 -7
  75. package/dist/prod/chunk-LRITYP5X.js +0 -31
  76. package/dist/prod/data/image-W3GRS73V.js +0 -1
  77. package/dist/types/excalidraw-app/app_constants.d.ts +0 -44
  78. package/dist/types/packages/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +0 -8
  79. package/dist/types/packages/excalidraw/tests/fixtures/diagramFixture.d.ts +0 -504
  80. package/dist/types/packages/excalidraw/tests/fixtures/elementFixture.d.ts +0 -7
  81. package/dist/types/packages/excalidraw/tests/helpers/api.d.ts +0 -89
  82. package/dist/types/packages/excalidraw/tests/helpers/colorize.d.ts +0 -2
  83. package/dist/types/packages/excalidraw/tests/helpers/mocks.d.ts +0 -5
  84. package/dist/types/packages/excalidraw/tests/helpers/polyfills.d.ts +0 -36
  85. package/dist/types/packages/excalidraw/tests/helpers/ui.d.ts +0 -189
  86. package/dist/types/packages/excalidraw/tests/queries/dom.d.ts +0 -2
  87. package/dist/types/packages/excalidraw/tests/queries/toolQueries.d.ts +0 -2
  88. package/dist/types/packages/excalidraw/tests/test-utils.d.ts +0 -139
  89. /package/dist/dev/data/{image-5HAY2PCR.js.map → image-U2IPNUKJ.js.map} +0 -0
  90. /package/dist/dev/locales/{en-OZCJJ2HN.js.map → en-CKWC2GMK.js.map} +0 -0
  91. /package/dist/types/{packages/common → common}/src/binary-heap.d.ts +0 -0
  92. /package/dist/types/{packages/common → common}/src/font-metadata.d.ts +0 -0
  93. /package/dist/types/{packages/common → common}/src/index.d.ts +0 -0
  94. /package/dist/types/{packages/common → common}/src/keys.d.ts +0 -0
  95. /package/dist/types/{packages/common → common}/src/points.d.ts +0 -0
  96. /package/dist/types/{packages/common → common}/src/promise-pool.d.ts +0 -0
  97. /package/dist/types/{packages/common → common}/src/queue.d.ts +0 -0
  98. /package/dist/types/{packages/common → common}/src/random.d.ts +0 -0
  99. /package/dist/types/{packages/common → common}/src/url.d.ts +0 -0
  100. /package/dist/types/{packages/common → common}/src/utility-types.d.ts +0 -0
  101. /package/dist/types/{packages/element → element}/src/Shape.d.ts +0 -0
  102. /package/dist/types/{packages/element → element}/src/ShapeCache.d.ts +0 -0
  103. /package/dist/types/{packages/element → element}/src/align.d.ts +0 -0
  104. /package/dist/types/{packages/element → element}/src/comparisons.d.ts +0 -0
  105. /package/dist/types/{packages/element → element}/src/containerCache.d.ts +0 -0
  106. /package/dist/types/{packages/element → element}/src/cropElement.d.ts +0 -0
  107. /package/dist/types/{packages/element → element}/src/distance.d.ts +0 -0
  108. /package/dist/types/{packages/element → element}/src/distribute.d.ts +0 -0
  109. /package/dist/types/{packages/element → element}/src/dragElements.d.ts +0 -0
  110. /package/dist/types/{packages/element → element}/src/duplicate.d.ts +0 -0
  111. /package/dist/types/{packages/element → element}/src/elbowArrow.d.ts +0 -0
  112. /package/dist/types/{packages/element → element}/src/elementLink.d.ts +0 -0
  113. /package/dist/types/{packages/element → element}/src/embeddable.d.ts +0 -0
  114. /package/dist/types/{packages/element → element}/src/flowchart.d.ts +0 -0
  115. /package/dist/types/{packages/element → element}/src/fractionalIndex.d.ts +0 -0
  116. /package/dist/types/{packages/element → element}/src/frame.d.ts +0 -0
  117. /package/dist/types/{packages/element → element}/src/groups.d.ts +0 -0
  118. /package/dist/types/{packages/element → element}/src/image.d.ts +0 -0
  119. /package/dist/types/{packages/element → element}/src/index.d.ts +0 -0
  120. /package/dist/types/{packages/element → element}/src/linearElementEditor.d.ts +0 -0
  121. /package/dist/types/{packages/element → element}/src/mutateElement.d.ts +0 -0
  122. /package/dist/types/{packages/element → element}/src/newElement.d.ts +0 -0
  123. /package/dist/types/{packages/element → element}/src/renderElement.d.ts +0 -0
  124. /package/dist/types/{packages/element → element}/src/resizeElements.d.ts +0 -0
  125. /package/dist/types/{packages/element → element}/src/resizeTest.d.ts +0 -0
  126. /package/dist/types/{packages/element → element}/src/selection.d.ts +0 -0
  127. /package/dist/types/{packages/element → element}/src/shapes.d.ts +0 -0
  128. /package/dist/types/{packages/element → element}/src/showSelectedShapeActions.d.ts +0 -0
  129. /package/dist/types/{packages/element → element}/src/sizeHelpers.d.ts +0 -0
  130. /package/dist/types/{packages/element → element}/src/sortElements.d.ts +0 -0
  131. /package/dist/types/{packages/element → element}/src/textMeasurements.d.ts +0 -0
  132. /package/dist/types/{packages/element → element}/src/textWrapping.d.ts +0 -0
  133. /package/dist/types/{packages/element → element}/src/transformHandles.d.ts +0 -0
  134. /package/dist/types/{packages/element → element}/src/typeChecks.d.ts +0 -0
  135. /package/dist/types/{packages/element → element}/src/types.d.ts +0 -0
  136. /package/dist/types/{packages/element → element}/src/utils.d.ts +0 -0
  137. /package/dist/types/{packages/element → element}/src/zindex.d.ts +0 -0
  138. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionAlign.d.ts +0 -0
  139. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionDistribute.d.ts +0 -0
  140. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionDuplicateSelection.d.ts +0 -0
  141. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionFlip.d.ts +0 -0
  142. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionHistory.d.ts +0 -0
  143. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionTextAutoResize.d.ts +0 -0
  144. /package/dist/types/{packages/excalidraw → excalidraw}/actions/actionZindex.d.ts +0 -0
  145. /package/dist/types/{packages/excalidraw → excalidraw}/actions/index.d.ts +0 -0
  146. /package/dist/types/{packages/excalidraw → excalidraw}/actions/manager.d.ts +0 -0
  147. /package/dist/types/{packages/excalidraw → excalidraw}/actions/register.d.ts +0 -0
  148. /package/dist/types/{packages/excalidraw → excalidraw}/actions/shortcuts.d.ts +0 -0
  149. /package/dist/types/{packages/excalidraw → excalidraw}/analytics.d.ts +0 -0
  150. /package/dist/types/{packages/excalidraw → excalidraw}/animation-frame-handler.d.ts +0 -0
  151. /package/dist/types/{packages/excalidraw → excalidraw}/change.d.ts +0 -0
  152. /package/dist/types/{packages/excalidraw → excalidraw}/charts.d.ts +0 -0
  153. /package/dist/types/{packages/excalidraw → excalidraw}/clients.d.ts +0 -0
  154. /package/dist/types/{packages/excalidraw → excalidraw}/clipboard.d.ts +0 -0
  155. /package/dist/types/{packages/excalidraw → excalidraw}/components/Actions.d.ts +0 -0
  156. /package/dist/types/{packages/excalidraw → excalidraw}/components/ActiveConfirmDialog.d.ts +0 -0
  157. /package/dist/types/{packages/excalidraw → excalidraw}/components/Avatar.d.ts +0 -0
  158. /package/dist/types/{packages/excalidraw → excalidraw}/components/BraveMeasureTextError.d.ts +0 -0
  159. /package/dist/types/{packages/excalidraw → excalidraw}/components/Button.d.ts +0 -0
  160. /package/dist/types/{packages/excalidraw → excalidraw}/components/ButtonIcon.d.ts +0 -0
  161. /package/dist/types/{packages/excalidraw → excalidraw}/components/ButtonIconCycle.d.ts +0 -0
  162. /package/dist/types/{packages/excalidraw → excalidraw}/components/ButtonIconSelect.d.ts +0 -0
  163. /package/dist/types/{packages/excalidraw → excalidraw}/components/ButtonSelect.d.ts +0 -0
  164. /package/dist/types/{packages/excalidraw → excalidraw}/components/ButtonSeparator.d.ts +0 -0
  165. /package/dist/types/{packages/excalidraw → excalidraw}/components/Card.d.ts +0 -0
  166. /package/dist/types/{packages/excalidraw → excalidraw}/components/CheckboxItem.d.ts +0 -0
  167. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/ColorInput.d.ts +0 -0
  168. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/ColorPicker.d.ts +0 -0
  169. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/CustomColorList.d.ts +0 -0
  170. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/Picker.d.ts +0 -0
  171. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/PickerColorList.d.ts +0 -0
  172. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/PickerHeading.d.ts +0 -0
  173. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/ShadeList.d.ts +0 -0
  174. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/TopPicks.d.ts +0 -0
  175. /package/dist/types/{packages/excalidraw → excalidraw}/components/ColorPicker/keyboardNavHandlers.d.ts +0 -0
  176. /package/dist/types/{packages/excalidraw → excalidraw}/components/CommandPalette/CommandPalette.d.ts +0 -0
  177. /package/dist/types/{packages/excalidraw → excalidraw}/components/CommandPalette/defaultCommandPaletteItems.d.ts +0 -0
  178. /package/dist/types/{packages/excalidraw → excalidraw}/components/CommandPalette/types.d.ts +0 -0
  179. /package/dist/types/{packages/excalidraw → excalidraw}/components/ConfirmDialog.d.ts +0 -0
  180. /package/dist/types/{packages/excalidraw → excalidraw}/components/ContextMenu.d.ts +0 -0
  181. /package/dist/types/{packages/excalidraw → excalidraw}/components/DarkModeToggle.d.ts +0 -0
  182. /package/dist/types/{packages/excalidraw → excalidraw}/components/DefaultSidebar.d.ts +0 -0
  183. /package/dist/types/{packages/excalidraw → excalidraw}/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -0
  184. /package/dist/types/{packages/excalidraw → excalidraw}/components/Dialog.d.ts +0 -0
  185. /package/dist/types/{packages/excalidraw → excalidraw}/components/DialogActionButton.d.ts +0 -0
  186. /package/dist/types/{packages/excalidraw → excalidraw}/components/ElementCanvasButtons.d.ts +0 -0
  187. /package/dist/types/{packages/excalidraw → excalidraw}/components/ElementLinkDialog.d.ts +0 -0
  188. /package/dist/types/{packages/excalidraw → excalidraw}/components/ErrorDialog.d.ts +0 -0
  189. /package/dist/types/{packages/excalidraw → excalidraw}/components/ExcalidrawLogo.d.ts +0 -0
  190. /package/dist/types/{packages/excalidraw → excalidraw}/components/EyeDropper.d.ts +0 -0
  191. /package/dist/types/{packages/excalidraw → excalidraw}/components/FilledButton.d.ts +0 -0
  192. /package/dist/types/{packages/excalidraw → excalidraw}/components/FixedSideContainer.d.ts +0 -0
  193. /package/dist/types/{packages/excalidraw → excalidraw}/components/FollowMode/FollowMode.d.ts +0 -0
  194. /package/dist/types/{packages/excalidraw → excalidraw}/components/FontPicker/FontPicker.d.ts +0 -0
  195. /package/dist/types/{packages/excalidraw → excalidraw}/components/FontPicker/FontPickerList.d.ts +0 -0
  196. /package/dist/types/{packages/excalidraw → excalidraw}/components/FontPicker/FontPickerTrigger.d.ts +0 -0
  197. /package/dist/types/{packages/excalidraw → excalidraw}/components/FontPicker/keyboardNavHandlers.d.ts +0 -0
  198. /package/dist/types/{packages/excalidraw → excalidraw}/components/HandButton.d.ts +0 -0
  199. /package/dist/types/{packages/excalidraw → excalidraw}/components/HelpButton.d.ts +0 -0
  200. /package/dist/types/{packages/excalidraw → excalidraw}/components/HelpDialog.d.ts +0 -0
  201. /package/dist/types/{packages/excalidraw → excalidraw}/components/HintViewer.d.ts +0 -0
  202. /package/dist/types/{packages/excalidraw → excalidraw}/components/IconPicker.d.ts +0 -0
  203. /package/dist/types/{packages/excalidraw → excalidraw}/components/ImageExportDialog.d.ts +0 -0
  204. /package/dist/types/{packages/excalidraw → excalidraw}/components/InitializeApp.d.ts +0 -0
  205. /package/dist/types/{packages/excalidraw → excalidraw}/components/InlineIcon.d.ts +0 -0
  206. /package/dist/types/{packages/excalidraw → excalidraw}/components/Island.d.ts +0 -0
  207. /package/dist/types/{packages/excalidraw → excalidraw}/components/JSONExportDialog.d.ts +0 -0
  208. /package/dist/types/{packages/excalidraw → excalidraw}/components/LaserPointerButton.d.ts +0 -0
  209. /package/dist/types/{packages/excalidraw → excalidraw}/components/LayerUI.d.ts +0 -0
  210. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenu.d.ts +0 -0
  211. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenuBrowseButton.d.ts +0 -0
  212. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenuControlButtons.d.ts +0 -0
  213. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenuHeaderContent.d.ts +0 -0
  214. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenuItems.d.ts +0 -0
  215. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryMenuSection.d.ts +0 -0
  216. /package/dist/types/{packages/excalidraw → excalidraw}/components/LibraryUnit.d.ts +0 -0
  217. /package/dist/types/{packages/excalidraw → excalidraw}/components/LoadingMessage.d.ts +0 -0
  218. /package/dist/types/{packages/excalidraw → excalidraw}/components/LockButton.d.ts +0 -0
  219. /package/dist/types/{packages/excalidraw → excalidraw}/components/MagicButton.d.ts +0 -0
  220. /package/dist/types/{packages/excalidraw → excalidraw}/components/MobileMenu.d.ts +0 -0
  221. /package/dist/types/{packages/excalidraw → excalidraw}/components/Modal.d.ts +0 -0
  222. /package/dist/types/{packages/excalidraw → excalidraw}/components/OverwriteConfirm/OverwriteConfirm.d.ts +0 -0
  223. /package/dist/types/{packages/excalidraw → excalidraw}/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +0 -0
  224. /package/dist/types/{packages/excalidraw → excalidraw}/components/OverwriteConfirm/OverwriteConfirmState.d.ts +0 -0
  225. /package/dist/types/{packages/excalidraw → excalidraw}/components/Paragraph.d.ts +0 -0
  226. /package/dist/types/{packages/excalidraw → excalidraw}/components/PasteChartDialog.d.ts +0 -0
  227. /package/dist/types/{packages/excalidraw → excalidraw}/components/PenModeButton.d.ts +0 -0
  228. /package/dist/types/{packages/excalidraw → excalidraw}/components/Popover.d.ts +0 -0
  229. /package/dist/types/{packages/excalidraw → excalidraw}/components/ProjectName.d.ts +0 -0
  230. /package/dist/types/{packages/excalidraw → excalidraw}/components/PropertiesPopover.d.ts +0 -0
  231. /package/dist/types/{packages/excalidraw → excalidraw}/components/PublishLibrary.d.ts +0 -0
  232. /package/dist/types/{packages/excalidraw → excalidraw}/components/QuickSearch.d.ts +0 -0
  233. /package/dist/types/{packages/excalidraw → excalidraw}/components/RadioGroup.d.ts +0 -0
  234. /package/dist/types/{packages/excalidraw → excalidraw}/components/Range.d.ts +0 -0
  235. /package/dist/types/{packages/excalidraw → excalidraw}/components/SVGLayer.d.ts +0 -0
  236. /package/dist/types/{packages/excalidraw → excalidraw}/components/ScrollableList.d.ts +0 -0
  237. /package/dist/types/{packages/excalidraw → excalidraw}/components/SearchMenu.d.ts +0 -0
  238. /package/dist/types/{packages/excalidraw → excalidraw}/components/Section.d.ts +0 -0
  239. /package/dist/types/{packages/excalidraw → excalidraw}/components/ShareableLinkDialog.d.ts +0 -0
  240. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/Sidebar.d.ts +0 -0
  241. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarHeader.d.ts +0 -0
  242. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarTab.d.ts +0 -0
  243. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarTabTrigger.d.ts +0 -0
  244. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarTabTriggers.d.ts +0 -0
  245. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarTabs.d.ts +0 -0
  246. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/SidebarTrigger.d.ts +0 -0
  247. /package/dist/types/{packages/excalidraw → excalidraw}/components/Sidebar/common.d.ts +0 -0
  248. /package/dist/types/{packages/excalidraw → excalidraw}/components/Spinner.d.ts +0 -0
  249. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stack.d.ts +0 -0
  250. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/Angle.d.ts +0 -0
  251. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/CanvasGrid.d.ts +0 -0
  252. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/Collapsible.d.ts +0 -0
  253. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/Dimension.d.ts +0 -0
  254. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/DragInput.d.ts +0 -0
  255. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/FontSize.d.ts +0 -0
  256. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/MultiAngle.d.ts +0 -0
  257. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/MultiDimension.d.ts +0 -0
  258. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/MultiFontSize.d.ts +0 -0
  259. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/MultiPosition.d.ts +0 -0
  260. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/Position.d.ts +0 -0
  261. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/index.d.ts +0 -0
  262. /package/dist/types/{packages/excalidraw → excalidraw}/components/Stats/utils.d.ts +0 -0
  263. /package/dist/types/{packages/excalidraw → excalidraw}/components/Switch.d.ts +0 -0
  264. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/MermaidToExcalidraw.d.ts +0 -0
  265. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialog.d.ts +0 -0
  266. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogInput.d.ts +0 -0
  267. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogOutput.d.ts +0 -0
  268. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogPanel.d.ts +0 -0
  269. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogPanels.d.ts +0 -0
  270. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogSubmitShortcut.d.ts +0 -0
  271. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogTab.d.ts +0 -0
  272. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogTabTrigger.d.ts +0 -0
  273. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogTabTriggers.d.ts +0 -0
  274. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogTabs.d.ts +0 -0
  275. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/TTDDialogTrigger.d.ts +0 -0
  276. /package/dist/types/{packages/excalidraw → excalidraw}/components/TTDDialog/common.d.ts +0 -0
  277. /package/dist/types/{packages/excalidraw → excalidraw}/components/TextField.d.ts +0 -0
  278. /package/dist/types/{packages/excalidraw → excalidraw}/components/Toast.d.ts +0 -0
  279. /package/dist/types/{packages/excalidraw → excalidraw}/components/ToolButton.d.ts +0 -0
  280. /package/dist/types/{packages/excalidraw → excalidraw}/components/Tooltip.d.ts +0 -0
  281. /package/dist/types/{packages/excalidraw → excalidraw}/components/Trans.d.ts +0 -0
  282. /package/dist/types/{packages/excalidraw → excalidraw}/components/UserList.d.ts +0 -0
  283. /package/dist/types/{packages/excalidraw → excalidraw}/components/canvases/InteractiveCanvas.d.ts +0 -0
  284. /package/dist/types/{packages/excalidraw → excalidraw}/components/canvases/NewElementCanvas.d.ts +0 -0
  285. /package/dist/types/{packages/excalidraw → excalidraw}/components/canvases/StaticCanvas.d.ts +0 -0
  286. /package/dist/types/{packages/excalidraw → excalidraw}/components/canvases/index.d.ts +0 -0
  287. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenu.d.ts +0 -0
  288. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuContent.d.ts +0 -0
  289. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuGroup.d.ts +0 -0
  290. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuItem.d.ts +0 -0
  291. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuItemContent.d.ts +0 -0
  292. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +0 -0
  293. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuItemCustom.d.ts +0 -0
  294. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuItemLink.d.ts +0 -0
  295. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuSeparator.d.ts +0 -0
  296. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/DropdownMenuTrigger.d.ts +0 -0
  297. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/common.d.ts +0 -0
  298. /package/dist/types/{packages/excalidraw → excalidraw}/components/dropdownMenu/dropdownMenuUtils.d.ts +0 -0
  299. /package/dist/types/{packages/excalidraw → excalidraw}/components/footer/Footer.d.ts +0 -0
  300. /package/dist/types/{packages/excalidraw → excalidraw}/components/footer/FooterCenter.d.ts +0 -0
  301. /package/dist/types/{packages/excalidraw → excalidraw}/components/hoc/withInternalFallback.d.ts +0 -0
  302. /package/dist/types/{packages/excalidraw → excalidraw}/components/hyperlink/Hyperlink.d.ts +0 -0
  303. /package/dist/types/{packages/excalidraw → excalidraw}/components/hyperlink/helpers.d.ts +0 -0
  304. /package/dist/types/{packages/excalidraw → excalidraw}/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -0
  305. /package/dist/types/{packages/excalidraw → excalidraw}/components/main-menu/DefaultItems.d.ts +0 -0
  306. /package/dist/types/{packages/excalidraw → excalidraw}/components/main-menu/MainMenu.d.ts +0 -0
  307. /package/dist/types/{packages/excalidraw → excalidraw}/components/shapes.d.ts +0 -0
  308. /package/dist/types/{packages/excalidraw → excalidraw}/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -0
  309. /package/dist/types/{packages/excalidraw → excalidraw}/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -0
  310. /package/dist/types/{packages/excalidraw → excalidraw}/components/welcome-screen/WelcomeScreen.d.ts +0 -0
  311. /package/dist/types/{packages/excalidraw → excalidraw}/context/tunnels.d.ts +0 -0
  312. /package/dist/types/{packages/excalidraw → excalidraw}/context/ui-appState.d.ts +0 -0
  313. /package/dist/types/{packages/excalidraw → excalidraw}/cursor.d.ts +0 -0
  314. /package/dist/types/{packages/excalidraw → excalidraw}/data/EditorLocalStorage.d.ts +0 -0
  315. /package/dist/types/{packages/excalidraw → excalidraw}/data/ai/types.d.ts +0 -0
  316. /package/dist/types/{packages/excalidraw → excalidraw}/data/blob.d.ts +0 -0
  317. /package/dist/types/{packages/excalidraw → excalidraw}/data/encode.d.ts +0 -0
  318. /package/dist/types/{packages/excalidraw → excalidraw}/data/encryption.d.ts +0 -0
  319. /package/dist/types/{packages/excalidraw → excalidraw}/data/filesystem.d.ts +0 -0
  320. /package/dist/types/{packages/excalidraw → excalidraw}/data/image.d.ts +0 -0
  321. /package/dist/types/{packages/excalidraw → excalidraw}/data/index.d.ts +0 -0
  322. /package/dist/types/{packages/excalidraw → excalidraw}/data/json.d.ts +0 -0
  323. /package/dist/types/{packages/excalidraw → excalidraw}/data/library.d.ts +0 -0
  324. /package/dist/types/{packages/excalidraw → excalidraw}/data/reconcile.d.ts +0 -0
  325. /package/dist/types/{packages/excalidraw → excalidraw}/data/resave.d.ts +0 -0
  326. /package/dist/types/{packages/excalidraw → excalidraw}/data/restore.d.ts +0 -0
  327. /package/dist/types/{packages/excalidraw → excalidraw}/data/transform.d.ts +0 -0
  328. /package/dist/types/{packages/excalidraw → excalidraw}/data/types.d.ts +0 -0
  329. /package/dist/types/{packages/excalidraw → excalidraw}/deburr.d.ts +0 -0
  330. /package/dist/types/{packages/excalidraw → excalidraw}/editor-jotai.d.ts +0 -0
  331. /package/dist/types/{packages/excalidraw → excalidraw}/emitter.d.ts +0 -0
  332. /package/dist/types/{packages/excalidraw → excalidraw}/errors.d.ts +0 -0
  333. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Cascadia/index.d.ts +0 -0
  334. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/ComicShanns/index.d.ts +0 -0
  335. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Emoji/index.d.ts +0 -0
  336. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/ExcalidrawFontFace.d.ts +0 -0
  337. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Excalifont/index.d.ts +0 -0
  338. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Fonts.d.ts +0 -0
  339. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Helvetica/index.d.ts +0 -0
  340. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Liberation/index.d.ts +0 -0
  341. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Lilita/index.d.ts +0 -0
  342. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Nunito/index.d.ts +0 -0
  343. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Virgil/index.d.ts +0 -0
  344. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/Xiaolai/index.d.ts +0 -0
  345. /package/dist/types/{packages/excalidraw → excalidraw}/fonts/index.d.ts +0 -0
  346. /package/dist/types/{packages/excalidraw → excalidraw}/gesture.d.ts +0 -0
  347. /package/dist/types/{packages/excalidraw → excalidraw}/history.d.ts +0 -0
  348. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useCallbackRefState.d.ts +0 -0
  349. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useCopiedIndicator.d.ts +0 -0
  350. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useCreatePortalContainer.d.ts +0 -0
  351. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useEmitter.d.ts +0 -0
  352. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useLibraryItemSvg.d.ts +0 -0
  353. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useOutsideClick.d.ts +0 -0
  354. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useScrollPosition.d.ts +0 -0
  355. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useStable.d.ts +0 -0
  356. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useStableCallback.d.ts +0 -0
  357. /package/dist/types/{packages/excalidraw → excalidraw}/hooks/useTransition.d.ts +0 -0
  358. /package/dist/types/{packages/excalidraw → excalidraw}/i18n.d.ts +0 -0
  359. /package/dist/types/{packages/excalidraw → excalidraw}/index-node.d.ts +0 -0
  360. /package/dist/types/{packages/excalidraw → excalidraw}/index.d.ts +0 -0
  361. /package/dist/types/{packages/excalidraw → excalidraw}/laser-trails.d.ts +0 -0
  362. /package/dist/types/{packages/excalidraw → excalidraw}/mermaid.d.ts +0 -0
  363. /package/dist/types/{packages/excalidraw → excalidraw}/polyfill.d.ts +0 -0
  364. /package/dist/types/{packages/excalidraw → excalidraw}/reactUtils.d.ts +0 -0
  365. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/helpers.d.ts +0 -0
  366. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/interactiveScene.d.ts +0 -0
  367. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/renderNewElementScene.d.ts +0 -0
  368. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/renderSnaps.d.ts +0 -0
  369. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/roundRect.d.ts +0 -0
  370. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/staticScene.d.ts +0 -0
  371. /package/dist/types/{packages/excalidraw → excalidraw}/renderer/staticSvgScene.d.ts +0 -0
  372. /package/dist/types/{packages/excalidraw → excalidraw}/scene/Renderer.d.ts +0 -0
  373. /package/dist/types/{packages/excalidraw → excalidraw}/scene/Scene.d.ts +0 -0
  374. /package/dist/types/{packages/excalidraw → excalidraw}/scene/export.d.ts +0 -0
  375. /package/dist/types/{packages/excalidraw → excalidraw}/scene/index.d.ts +0 -0
  376. /package/dist/types/{packages/excalidraw → excalidraw}/scene/normalize.d.ts +0 -0
  377. /package/dist/types/{packages/excalidraw → excalidraw}/scene/scroll.d.ts +0 -0
  378. /package/dist/types/{packages/excalidraw → excalidraw}/scene/scrollbars.d.ts +0 -0
  379. /package/dist/types/{packages/excalidraw → excalidraw}/scene/types.d.ts +0 -0
  380. /package/dist/types/{packages/excalidraw → excalidraw}/scene/zoom.d.ts +0 -0
  381. /package/dist/types/{packages/excalidraw → excalidraw}/snapping.d.ts +0 -0
  382. /package/dist/types/{packages/excalidraw → excalidraw}/store.d.ts +0 -0
  383. /package/dist/types/{packages/excalidraw → excalidraw}/subset/harfbuzz/harfbuzz-bindings.d.ts +0 -0
  384. /package/dist/types/{packages/excalidraw → excalidraw}/subset/harfbuzz/harfbuzz-loader.d.ts +0 -0
  385. /package/dist/types/{packages/excalidraw → excalidraw}/subset/harfbuzz/harfbuzz-wasm.d.ts +0 -0
  386. /package/dist/types/{packages/excalidraw → excalidraw}/subset/subset-main.d.ts +0 -0
  387. /package/dist/types/{packages/excalidraw → excalidraw}/subset/subset-shared.chunk.d.ts +0 -0
  388. /package/dist/types/{packages/excalidraw → excalidraw}/subset/subset-worker.chunk.d.ts +0 -0
  389. /package/dist/types/{packages/excalidraw → excalidraw}/subset/woff2/woff2-bindings.d.ts +0 -0
  390. /package/dist/types/{packages/excalidraw → excalidraw}/subset/woff2/woff2-loader.d.ts +0 -0
  391. /package/dist/types/{packages/excalidraw → excalidraw}/subset/woff2/woff2-wasm.d.ts +0 -0
  392. /package/dist/types/{packages/excalidraw → excalidraw}/visualdebug.d.ts +0 -0
  393. /package/dist/types/{packages/excalidraw → excalidraw}/workers.d.ts +0 -0
  394. /package/dist/types/{packages/excalidraw → excalidraw}/wysiwyg/textWysiwyg.d.ts +0 -0
  395. /package/dist/types/{packages/math → math}/src/angle.d.ts +0 -0
  396. /package/dist/types/{packages/math → math}/src/curve.d.ts +0 -0
  397. /package/dist/types/{packages/math → math}/src/ellipse.d.ts +0 -0
  398. /package/dist/types/{packages/math → math}/src/index.d.ts +0 -0
  399. /package/dist/types/{packages/math → math}/src/line.d.ts +0 -0
  400. /package/dist/types/{packages/math → math}/src/point.d.ts +0 -0
  401. /package/dist/types/{packages/math → math}/src/range.d.ts +0 -0
  402. /package/dist/types/{packages/math → math}/src/rectangle.d.ts +0 -0
  403. /package/dist/types/{packages/math → math}/src/triangle.d.ts +0 -0
  404. /package/dist/types/{packages/math → math}/src/utils.d.ts +0 -0
  405. /package/dist/types/{packages/math → math}/src/vector.d.ts +0 -0
  406. /package/dist/types/{packages/utils → utils}/src/bbox.d.ts +0 -0
  407. /package/dist/types/{packages/utils → utils}/src/collision.d.ts +0 -0
  408. /package/dist/types/{packages/utils → utils}/src/export.d.ts +0 -0
  409. /package/dist/types/{packages/utils → utils}/src/index.d.ts +0 -0
  410. /package/dist/types/{packages/utils → utils}/src/shape.d.ts +0 -0
  411. /package/dist/types/{packages/utils → utils}/src/withinBounds.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  define_import_meta_env_default
3
- } from "./chunk-ZG3EI5XS.js";
3
+ } from "./chunk-KKJLIRJU.js";
4
4
  import {
5
5
  __publicField
6
6
  } from "./chunk-XDFCUUT6.js";
@@ -103,6 +103,7 @@ var BinaryHeap = class {
103
103
 
104
104
  // ../common/src/colors.ts
105
105
  import oc from "open-color";
106
+ var COLOR_OUTLINE_CONTRAST_THRESHOLD = 240;
106
107
  var pick = (source, keys) => {
107
108
  return keys.reduce((acc, key) => {
108
109
  if (key in source) {
@@ -263,7 +264,8 @@ var YOUTUBE_STATES = {
263
264
  };
264
265
  var ENV = {
265
266
  TEST: "test",
266
- DEVELOPMENT: "development"
267
+ DEVELOPMENT: "development",
268
+ PRODUCTION: "production"
267
269
  };
268
270
  var CLASSES = {
269
271
  SHAPE_ACTIONS_MENU: "App-menu__left",
@@ -410,6 +412,9 @@ var DEFAULT_EXPORT_PADDING = 10;
410
412
  var DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;
411
413
  var MAX_ALLOWED_FILE_BYTES = 4 * 1024 * 1024;
412
414
  var SVG_NS = "http://www.w3.org/2000/svg";
415
+ var SVG_DOCUMENT_PREAMBLE = `<?xml version="1.0" standalone="no"?>
416
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
417
+ `;
413
418
  var VERSIONS = {
414
419
  excalidraw: 2,
415
420
  excalidrawLibrary: 2
@@ -479,6 +484,7 @@ var LIBRARY_DISABLED_TYPES = /* @__PURE__ */ new Set([
479
484
  ]);
480
485
  var TOOL_TYPE = {
481
486
  selection: "selection",
487
+ lasso: "lasso",
482
488
  rectangle: "rectangle",
483
489
  diamond: "diamond",
484
490
  ellipse: "ellipse",
@@ -935,9 +941,9 @@ var distanceToLineSegment = (point, line2) => {
935
941
  const dy = y - yy;
936
942
  return Math.sqrt(dx * dx + dy * dy);
937
943
  };
938
- function lineSegmentIntersectionPoints(l, s) {
944
+ function lineSegmentIntersectionPoints(l, s, threshold) {
939
945
  const candidate = linesIntersectAt(line(l[0], l[1]), line(s[0], s[1]));
940
- if (!candidate || !pointOnLineSegment(candidate, s) || !pointOnLineSegment(candidate, l)) {
946
+ if (!candidate || !pointOnLineSegment(candidate, s, threshold) || !pointOnLineSegment(candidate, l, threshold)) {
941
947
  return null;
942
948
  }
943
949
  return candidate;
@@ -1131,6 +1137,27 @@ var polygonIncludesPoint = (point, polygon2) => {
1131
1137
  }
1132
1138
  return inside;
1133
1139
  };
1140
+ var polygonIncludesPointNonZero = (point, polygon2) => {
1141
+ const [x, y] = point;
1142
+ let windingNumber = 0;
1143
+ for (let i = 0; i < polygon2.length; i++) {
1144
+ const j = (i + 1) % polygon2.length;
1145
+ const [xi, yi] = polygon2[i];
1146
+ const [xj, yj] = polygon2[j];
1147
+ if (yi <= y) {
1148
+ if (yj > y) {
1149
+ if ((xj - xi) * (y - yi) - (x - xi) * (yj - yi) > 0) {
1150
+ windingNumber++;
1151
+ }
1152
+ }
1153
+ } else if (yj <= y) {
1154
+ if ((xj - xi) * (y - yi) - (x - xi) * (yj - yi) < 0) {
1155
+ windingNumber--;
1156
+ }
1157
+ }
1158
+ }
1159
+ return windingNumber !== 0;
1160
+ };
1134
1161
  var pointOnPolygon = (p, poly, threshold = PRECISION) => {
1135
1162
  let on = false;
1136
1163
  for (let i = 0, l = poly.length - 1; i < l; i++) {
@@ -1469,7 +1496,8 @@ var updateActiveTool = (appState, data) => {
1469
1496
  lastActiveTool: data.lastActiveToolBeforeEraser === void 0 ? appState.activeTool.lastActiveTool : data.lastActiveToolBeforeEraser,
1470
1497
  type: data.type,
1471
1498
  customType: null,
1472
- locked: data.locked ?? appState.activeTool.locked
1499
+ locked: data.locked ?? appState.activeTool.locked,
1500
+ fromSelection: data.fromSelection ?? false
1473
1501
  };
1474
1502
  };
1475
1503
  var getShortcutKey = (shortcut) => {
@@ -1627,6 +1655,7 @@ var arrayToList = (array) => array.reduce((acc, curr, index) => {
1627
1655
  }, []);
1628
1656
  var isTestEnv = () => define_import_meta_env_default.MODE === ENV.TEST;
1629
1657
  var isDevEnv = () => define_import_meta_env_default.MODE === ENV.DEVELOPMENT;
1658
+ var isProdEnv = () => define_import_meta_env_default.MODE === ENV.PRODUCTION;
1630
1659
  var isServerEnv = () => typeof process !== "undefined" && true;
1631
1660
  var wrapEvent = (name, nativeEvent) => {
1632
1661
  return new CustomEvent(name, {
@@ -1838,6 +1867,12 @@ var escapeDoubleQuotes = (str) => {
1838
1867
  return str.replace(/"/g, "&quot;");
1839
1868
  };
1840
1869
  var castArray = (value) => Array.isArray(value) ? value : [value];
1870
+ var elementCenterPoint = (element, xOffset = 0, yOffset = 0) => {
1871
+ const { x, y, width, height } = element;
1872
+ const centerXPoint = x + width / 2 + xOffset;
1873
+ const centerYPoint = y + height / 2 + yOffset;
1874
+ return pointFrom(centerXPoint, centerYPoint);
1875
+ };
1841
1876
 
1842
1877
  // ../common/src/random.ts
1843
1878
  var random = new Random(Date.now());
@@ -2107,6 +2142,9 @@ var pointInEllipse = (p, ellipse2) => {
2107
2142
  return rotatedPointX / halfWidth * (rotatedPointX / halfWidth) + rotatedPointY / halfHeight * (rotatedPointY / halfHeight) <= 1;
2108
2143
  };
2109
2144
 
2145
+ // ../element/src/bounds.ts
2146
+ import { pointsOnBezierCurves as pointsOnBezierCurves2 } from "points-on-curve";
2147
+
2110
2148
  // ../element/src/ShapeCache.ts
2111
2149
  import { RoughGenerator } from "roughjs/bin/generator";
2112
2150
 
@@ -2407,10 +2445,7 @@ function deconstructRectanguloidElement(element, offset = 0) {
2407
2445
  const sides2 = [top2, right2, bottom2, left2];
2408
2446
  return [sides2, []];
2409
2447
  }
2410
- const center = pointFrom(
2411
- element.x + element.width / 2,
2412
- element.y + element.height / 2
2413
- );
2448
+ const center = elementCenterPoint(element);
2414
2449
  const r = rectangle(
2415
2450
  pointFrom(element.x, element.y),
2416
2451
  pointFrom(element.x + element.width, element.y + element.height)
@@ -2576,10 +2611,7 @@ function deconstructDiamondElement(element, offset = 0) {
2576
2611
  );
2577
2612
  return [[topRight, bottomRight, bottomLeft, topLeft], []];
2578
2613
  }
2579
- const center = pointFrom(
2580
- element.x + element.width / 2,
2581
- element.y + element.height / 2
2582
- );
2614
+ const center = elementCenterPoint(element);
2583
2615
  const [top, right, bottom, left] = [
2584
2616
  pointFrom(element.x + topX, element.y + topY),
2585
2617
  pointFrom(element.x + rightX, element.y + rightY),
@@ -2760,10 +2792,7 @@ var intersectElementWithLineSegment = (element, line2, offset = 0) => {
2760
2792
  }
2761
2793
  };
2762
2794
  var intersectRectanguloidWithLineSegment = (element, l, offset = 0) => {
2763
- const center = pointFrom(
2764
- element.x + element.width / 2,
2765
- element.y + element.height / 2
2766
- );
2795
+ const center = elementCenterPoint(element);
2767
2796
  const rotatedA = pointRotateRads(
2768
2797
  l[0],
2769
2798
  center,
@@ -2793,10 +2822,7 @@ var intersectRectanguloidWithLineSegment = (element, l, offset = 0) => {
2793
2822
  );
2794
2823
  };
2795
2824
  var intersectDiamondWithLineSegment = (element, l, offset = 0) => {
2796
- const center = pointFrom(
2797
- element.x + element.width / 2,
2798
- element.y + element.height / 2
2799
- );
2825
+ const center = elementCenterPoint(element);
2800
2826
  const rotatedA = pointRotateRads(l[0], center, -element.angle);
2801
2827
  const rotatedB = pointRotateRads(l[1], center, -element.angle);
2802
2828
  const [sides, curves] = deconstructDiamondElement(element, offset);
@@ -2814,10 +2840,7 @@ var intersectDiamondWithLineSegment = (element, l, offset = 0) => {
2814
2840
  );
2815
2841
  };
2816
2842
  var intersectEllipseWithLineSegment = (element, l, offset = 0) => {
2817
- const center = pointFrom(
2818
- element.x + element.width / 2,
2819
- element.y + element.height / 2
2820
- );
2843
+ const center = elementCenterPoint(element);
2821
2844
  const rotatedA = pointRotateRads(l[0], center, -element.angle);
2822
2845
  const rotatedB = pointRotateRads(l[1], center, -element.angle);
2823
2846
  return ellipseLineIntersectionPoints(
@@ -2863,10 +2886,7 @@ var distanceToBindableElement = (element, p) => {
2863
2886
  }
2864
2887
  };
2865
2888
  var distanceToRectanguloidElement = (element, p) => {
2866
- const center = pointFrom(
2867
- element.x + element.width / 2,
2868
- element.y + element.height / 2
2869
- );
2889
+ const center = elementCenterPoint(element);
2870
2890
  const rotatedPoint = pointRotateRads(p, center, -element.angle);
2871
2891
  const [sides, corners] = deconstructRectanguloidElement(element);
2872
2892
  return Math.min(
@@ -2875,10 +2895,7 @@ var distanceToRectanguloidElement = (element, p) => {
2875
2895
  );
2876
2896
  };
2877
2897
  var distanceToDiamondElement = (element, p) => {
2878
- const center = pointFrom(
2879
- element.x + element.width / 2,
2880
- element.y + element.height / 2
2881
- );
2898
+ const center = elementCenterPoint(element);
2882
2899
  const rotatedPoint = pointRotateRads(p, center, -element.angle);
2883
2900
  const [sides, curves] = deconstructDiamondElement(element);
2884
2901
  return Math.min(
@@ -2887,10 +2904,7 @@ var distanceToDiamondElement = (element, p) => {
2887
2904
  );
2888
2905
  };
2889
2906
  var distanceToEllipseElement = (element, p) => {
2890
- const center = pointFrom(
2891
- element.x + element.width / 2,
2892
- element.y + element.height / 2
2893
- );
2907
+ const center = elementCenterPoint(element);
2894
2908
  return ellipseDistanceFromPoint(
2895
2909
  // Instead of rotating the ellipse, rotate the point to the inverse angle
2896
2910
  pointRotateRads(p, center, -element.angle),
@@ -2903,19 +2917,6 @@ var HEADING_RIGHT = [1, 0];
2903
2917
  var HEADING_DOWN = [0, 1];
2904
2918
  var HEADING_LEFT = [-1, 0];
2905
2919
  var HEADING_UP = [0, -1];
2906
- var headingForDiamond = (a, b) => {
2907
- const angle = radiansToDegrees(
2908
- normalizeRadians(Math.atan2(b[1] - a[1], b[0] - a[0]))
2909
- );
2910
- if (angle >= 315 || angle < 45) {
2911
- return HEADING_UP;
2912
- } else if (angle >= 45 && angle < 135) {
2913
- return HEADING_RIGHT;
2914
- } else if (angle >= 135 && angle < 225) {
2915
- return HEADING_DOWN;
2916
- }
2917
- return HEADING_LEFT;
2918
- };
2919
2920
  var vectorToHeading = (vec) => {
2920
2921
  const [x, y] = vec;
2921
2922
  const absX = Math.abs(x);
@@ -2933,69 +2934,135 @@ var headingForPoint = (p, o) => vectorToHeading(vectorFromPoint(p, o));
2933
2934
  var headingForPointIsHorizontal = (p, o) => headingIsHorizontal(headingForPoint(p, o));
2934
2935
  var compareHeading = (a, b) => a[0] === b[0] && a[1] === b[1];
2935
2936
  var headingIsHorizontal = (a) => compareHeading(a, HEADING_RIGHT) || compareHeading(a, HEADING_LEFT);
2936
- var headingForPointFromElement = (element, aabb, p) => {
2937
- const SEARCH_CONE_MULTIPLIER = 2;
2937
+ var headingForPointFromDiamondElement = (element, aabb, point) => {
2938
2938
  const midPoint = getCenterForBounds(aabb);
2939
- if (element.type === "diamond") {
2940
- if (p[0] < element.x) {
2941
- return HEADING_LEFT;
2942
- } else if (p[1] < element.y) {
2943
- return HEADING_UP;
2944
- } else if (p[0] > element.x + element.width) {
2945
- return HEADING_RIGHT;
2946
- } else if (p[1] > element.y + element.height) {
2947
- return HEADING_DOWN;
2948
- }
2949
- const top = pointRotateRads(
2950
- pointScaleFromOrigin(
2951
- pointFrom(element.x + element.width / 2, element.y),
2952
- midPoint,
2953
- SEARCH_CONE_MULTIPLIER
2954
- ),
2955
- midPoint,
2956
- element.angle
2939
+ if (isDevEnv() || isTestEnv()) {
2940
+ invariant(
2941
+ element.width > 0 && element.height > 0,
2942
+ "Diamond element has no width or height"
2957
2943
  );
2958
- const right = pointRotateRads(
2959
- pointScaleFromOrigin(
2960
- pointFrom(element.x + element.width, element.y + element.height / 2),
2961
- midPoint,
2962
- SEARCH_CONE_MULTIPLIER
2963
- ),
2964
- midPoint,
2965
- element.angle
2944
+ invariant(
2945
+ !pointsEqual(midPoint, point),
2946
+ "The point is too close to the element mid point to determine heading"
2966
2947
  );
2967
- const bottom = pointRotateRads(
2968
- pointScaleFromOrigin(
2969
- pointFrom(element.x + element.width / 2, element.y + element.height),
2970
- midPoint,
2971
- SEARCH_CONE_MULTIPLIER
2948
+ }
2949
+ const SHRINK = 0.95;
2950
+ const top = pointFromVector(
2951
+ vectorScale(
2952
+ vectorFromPoint(
2953
+ pointRotateRads(
2954
+ pointFrom(element.x + element.width / 2, element.y),
2955
+ midPoint,
2956
+ element.angle
2957
+ ),
2958
+ midPoint
2972
2959
  ),
2973
- midPoint,
2974
- element.angle
2975
- );
2976
- const left = pointRotateRads(
2977
- pointScaleFromOrigin(
2978
- pointFrom(element.x, element.y + element.height / 2),
2979
- midPoint,
2980
- SEARCH_CONE_MULTIPLIER
2960
+ SHRINK
2961
+ ),
2962
+ midPoint
2963
+ );
2964
+ const right = pointFromVector(
2965
+ vectorScale(
2966
+ vectorFromPoint(
2967
+ pointRotateRads(
2968
+ pointFrom(
2969
+ element.x + element.width,
2970
+ element.y + element.height / 2
2971
+ ),
2972
+ midPoint,
2973
+ element.angle
2974
+ ),
2975
+ midPoint
2981
2976
  ),
2982
- midPoint,
2983
- element.angle
2984
- );
2985
- if (triangleIncludesPoint([top, right, midPoint], p)) {
2986
- return headingForDiamond(top, right);
2987
- } else if (triangleIncludesPoint(
2988
- [right, bottom, midPoint],
2989
- p
2990
- )) {
2991
- return headingForDiamond(right, bottom);
2992
- } else if (triangleIncludesPoint(
2993
- [bottom, left, midPoint],
2994
- p
2995
- )) {
2996
- return headingForDiamond(bottom, left);
2997
- }
2998
- return headingForDiamond(left, top);
2977
+ SHRINK
2978
+ ),
2979
+ midPoint
2980
+ );
2981
+ const bottom = pointFromVector(
2982
+ vectorScale(
2983
+ vectorFromPoint(
2984
+ pointRotateRads(
2985
+ pointFrom(
2986
+ element.x + element.width / 2,
2987
+ element.y + element.height
2988
+ ),
2989
+ midPoint,
2990
+ element.angle
2991
+ ),
2992
+ midPoint
2993
+ ),
2994
+ SHRINK
2995
+ ),
2996
+ midPoint
2997
+ );
2998
+ const left = pointFromVector(
2999
+ vectorScale(
3000
+ vectorFromPoint(
3001
+ pointRotateRads(
3002
+ pointFrom(element.x, element.y + element.height / 2),
3003
+ midPoint,
3004
+ element.angle
3005
+ ),
3006
+ midPoint
3007
+ ),
3008
+ SHRINK
3009
+ ),
3010
+ midPoint
3011
+ );
3012
+ if (vectorCross(vectorFromPoint(point, top), vectorFromPoint(top, right)) <= 0 && vectorCross(vectorFromPoint(point, top), vectorFromPoint(top, left)) > 0) {
3013
+ return headingForPoint(top, midPoint);
3014
+ } else if (vectorCross(
3015
+ vectorFromPoint(point, right),
3016
+ vectorFromPoint(right, bottom)
3017
+ ) <= 0 && vectorCross(vectorFromPoint(point, right), vectorFromPoint(right, top)) > 0) {
3018
+ return headingForPoint(right, midPoint);
3019
+ } else if (vectorCross(
3020
+ vectorFromPoint(point, bottom),
3021
+ vectorFromPoint(bottom, left)
3022
+ ) <= 0 && vectorCross(
3023
+ vectorFromPoint(point, bottom),
3024
+ vectorFromPoint(bottom, right)
3025
+ ) > 0) {
3026
+ return headingForPoint(bottom, midPoint);
3027
+ } else if (vectorCross(vectorFromPoint(point, left), vectorFromPoint(left, top)) <= 0 && vectorCross(vectorFromPoint(point, left), vectorFromPoint(left, bottom)) > 0) {
3028
+ return headingForPoint(left, midPoint);
3029
+ }
3030
+ if (vectorCross(
3031
+ vectorFromPoint(point, midPoint),
3032
+ vectorFromPoint(top, midPoint)
3033
+ ) <= 0 && vectorCross(
3034
+ vectorFromPoint(point, midPoint),
3035
+ vectorFromPoint(right, midPoint)
3036
+ ) > 0) {
3037
+ const p2 = element.width > element.height ? top : right;
3038
+ return headingForPoint(p2, midPoint);
3039
+ } else if (vectorCross(
3040
+ vectorFromPoint(point, midPoint),
3041
+ vectorFromPoint(right, midPoint)
3042
+ ) <= 0 && vectorCross(
3043
+ vectorFromPoint(point, midPoint),
3044
+ vectorFromPoint(bottom, midPoint)
3045
+ ) > 0) {
3046
+ const p2 = element.width > element.height ? bottom : right;
3047
+ return headingForPoint(p2, midPoint);
3048
+ } else if (vectorCross(
3049
+ vectorFromPoint(point, midPoint),
3050
+ vectorFromPoint(bottom, midPoint)
3051
+ ) <= 0 && vectorCross(
3052
+ vectorFromPoint(point, midPoint),
3053
+ vectorFromPoint(left, midPoint)
3054
+ ) > 0) {
3055
+ const p2 = element.width > element.height ? bottom : left;
3056
+ return headingForPoint(p2, midPoint);
3057
+ }
3058
+ const p = element.width > element.height ? top : left;
3059
+ return headingForPoint(p, midPoint);
3060
+ };
3061
+ var headingForPointFromElement = (element, aabb, p) => {
3062
+ const SEARCH_CONE_MULTIPLIER = 2;
3063
+ const midPoint = getCenterForBounds(aabb);
3064
+ if (element.type === "diamond") {
3065
+ return headingForPointFromDiamondElement(element, aabb, p);
2999
3066
  }
3000
3067
  const topLeft = pointScaleFromOrigin(
3001
3068
  pointFrom(aabb[0], aabb[1]),
@@ -3539,13 +3606,7 @@ var getHeadingForElbowArrowSnap = (p, otherPoint, bindableElement, aabb, element
3539
3606
  );
3540
3607
  if (!distance2) {
3541
3608
  return vectorToHeading(
3542
- vectorFromPoint(
3543
- p,
3544
- pointFrom(
3545
- bindableElement.x + bindableElement.width / 2,
3546
- bindableElement.y + bindableElement.height / 2
3547
- )
3548
- )
3609
+ vectorFromPoint(p, elementCenterPoint(bindableElement))
3549
3610
  );
3550
3611
  }
3551
3612
  return headingForPointFromElement(bindableElement, aabb, p);
@@ -3639,10 +3700,7 @@ var bindPointToSnapToElementOutline = (arrow, bindableElement, startOrEnd) => {
3639
3700
  return edgePoint;
3640
3701
  };
3641
3702
  var avoidRectangularCorner = (element, p) => {
3642
- const center = pointFrom(
3643
- element.x + element.width / 2,
3644
- element.y + element.height / 2
3645
- );
3703
+ const center = elementCenterPoint(element);
3646
3704
  const nonRotatedPoint = pointRotateRads(p, center, -element.angle);
3647
3705
  if (nonRotatedPoint[0] < element.x && nonRotatedPoint[1] < element.y) {
3648
3706
  if (nonRotatedPoint[1] - element.y > -FIXED_BINDING_DISTANCE) {
@@ -3713,10 +3771,7 @@ var avoidRectangularCorner = (element, p) => {
3713
3771
  };
3714
3772
  var snapToMid = (element, p, tolerance = 0.05) => {
3715
3773
  const { x, y, width, height, angle } = element;
3716
- const center = pointFrom(
3717
- x + width / 2 - 0.1,
3718
- y + height / 2 - 0.1
3719
- );
3774
+ const center = elementCenterPoint(element, -0.1, -0.1);
3720
3775
  const nonRotated = pointRotateRads(p, center, -angle);
3721
3776
  const verticalThrehsold = clamp(tolerance * height, 5, 80);
3722
3777
  const horizontalThrehsold = clamp(tolerance * width, 5, 80);
@@ -3761,10 +3816,7 @@ var updateBoundPoint = (linearElement, startOrEnd, binding, bindableElement, ele
3761
3816
  startOrEnd === "startBinding" ? "start" : "end",
3762
3817
  elementsMap
3763
3818
  ).fixedPoint;
3764
- const globalMidPoint = pointFrom(
3765
- bindableElement.x + bindableElement.width / 2,
3766
- bindableElement.y + bindableElement.height / 2
3767
- );
3819
+ const globalMidPoint = elementCenterPoint(bindableElement);
3768
3820
  const global = pointFrom(
3769
3821
  bindableElement.x + fixedPoint[0] * bindableElement.width,
3770
3822
  bindableElement.y + fixedPoint[1] * bindableElement.height
@@ -3800,10 +3852,7 @@ var updateBoundPoint = (linearElement, startOrEnd, binding, bindableElement, ele
3800
3852
  edgePointIndex,
3801
3853
  elementsMap
3802
3854
  );
3803
- const center = pointFrom(
3804
- bindableElement.x + bindableElement.width / 2,
3805
- bindableElement.y + bindableElement.height / 2
3806
- );
3855
+ const center = elementCenterPoint(bindableElement);
3807
3856
  const interceptorLength = pointDistance(adjacentPoint, edgePointAbsolute) + pointDistance(adjacentPoint, center) + Math.max(bindableElement.width, bindableElement.height) * 2;
3808
3857
  const intersections = [
3809
3858
  ...intersectElementWithLineSegment(
@@ -3910,7 +3959,7 @@ var getLinearElementEdgeCoors = (linearElement, startOrEnd, elementsMap) => {
3910
3959
  )
3911
3960
  );
3912
3961
  };
3913
- var fixBindingsAfterDuplication = (newElements, oldIdToDuplicatedId, duplicatedElementsMap) => {
3962
+ var fixDuplicatedBindingsAfterDuplication = (newElements, oldIdToDuplicatedId, duplicatedElementsMap) => {
3914
3963
  for (const element of newElements) {
3915
3964
  if ("boundElements" in element && element.boundElements) {
3916
3965
  Object.assign(element, {
@@ -3966,6 +4015,151 @@ var fixBindingsAfterDuplication = (newElements, oldIdToDuplicatedId, duplicatedE
3966
4015
  }
3967
4016
  }
3968
4017
  };
4018
+ var fixReversedBindingsForBindables = (original, duplicate, originalElements, elementsWithClones, oldIdToDuplicatedId) => {
4019
+ original.boundElements?.forEach((binding, idx) => {
4020
+ if (binding.type !== "arrow") {
4021
+ return;
4022
+ }
4023
+ const oldArrow = elementsWithClones.find((el) => el.id === binding.id);
4024
+ if (!isBindingElement(oldArrow)) {
4025
+ return;
4026
+ }
4027
+ if (originalElements.has(binding.id)) {
4028
+ const newArrowId = oldIdToDuplicatedId.get(binding.id) ?? binding.id;
4029
+ const newArrow = elementsWithClones.find(
4030
+ (el) => el.id === newArrowId
4031
+ );
4032
+ mutateElement(newArrow, {
4033
+ startBinding: oldArrow.startBinding?.elementId === binding.id ? {
4034
+ ...oldArrow.startBinding,
4035
+ elementId: duplicate.id
4036
+ } : newArrow.startBinding,
4037
+ endBinding: oldArrow.endBinding?.elementId === binding.id ? {
4038
+ ...oldArrow.endBinding,
4039
+ elementId: duplicate.id
4040
+ } : newArrow.endBinding
4041
+ });
4042
+ mutateElement(duplicate, {
4043
+ boundElements: [
4044
+ ...(duplicate.boundElements ?? []).filter(
4045
+ (el) => el.id !== binding.id && el.id !== newArrowId
4046
+ ),
4047
+ {
4048
+ type: "arrow",
4049
+ id: newArrowId
4050
+ }
4051
+ ]
4052
+ });
4053
+ } else {
4054
+ mutateElement(oldArrow, {
4055
+ startBinding: oldArrow.startBinding?.elementId === original.id ? {
4056
+ ...oldArrow.startBinding,
4057
+ elementId: duplicate.id
4058
+ } : oldArrow.startBinding,
4059
+ endBinding: oldArrow.endBinding?.elementId === original.id ? {
4060
+ ...oldArrow.endBinding,
4061
+ elementId: duplicate.id
4062
+ } : oldArrow.endBinding
4063
+ });
4064
+ mutateElement(duplicate, {
4065
+ boundElements: [
4066
+ ...duplicate.boundElements ?? [],
4067
+ {
4068
+ type: "arrow",
4069
+ id: oldArrow.id
4070
+ }
4071
+ ]
4072
+ });
4073
+ mutateElement(original, {
4074
+ boundElements: original.boundElements?.filter((_, i) => i !== idx) ?? null
4075
+ });
4076
+ }
4077
+ });
4078
+ };
4079
+ var fixReversedBindingsForArrows = (original, duplicate, originalElements, bindingProp, oldIdToDuplicatedId, elementsWithClones) => {
4080
+ const oldBindableId = original[bindingProp]?.elementId;
4081
+ if (oldBindableId) {
4082
+ if (originalElements.has(oldBindableId)) {
4083
+ const newBindableId = oldIdToDuplicatedId.get(oldBindableId) ?? oldBindableId;
4084
+ const newBindable = elementsWithClones.find(
4085
+ (el) => el.id === newBindableId
4086
+ );
4087
+ mutateElement(duplicate, {
4088
+ [bindingProp]: {
4089
+ ...original[bindingProp],
4090
+ elementId: newBindableId
4091
+ }
4092
+ });
4093
+ mutateElement(newBindable, {
4094
+ boundElements: [
4095
+ ...(newBindable.boundElements ?? []).filter(
4096
+ (el) => el.id !== original.id && el.id !== duplicate.id
4097
+ ),
4098
+ {
4099
+ id: duplicate.id,
4100
+ type: "arrow"
4101
+ }
4102
+ ]
4103
+ });
4104
+ } else {
4105
+ const originalBindable = elementsWithClones.find(
4106
+ (el) => el.id === oldBindableId
4107
+ );
4108
+ if (originalBindable) {
4109
+ mutateElement(duplicate, {
4110
+ [bindingProp]: original[bindingProp]
4111
+ });
4112
+ mutateElement(original, {
4113
+ [bindingProp]: null
4114
+ });
4115
+ mutateElement(originalBindable, {
4116
+ boundElements: [
4117
+ ...originalBindable.boundElements?.filter(
4118
+ (el) => el.id !== original.id
4119
+ ) ?? [],
4120
+ {
4121
+ id: duplicate.id,
4122
+ type: "arrow"
4123
+ }
4124
+ ]
4125
+ });
4126
+ }
4127
+ }
4128
+ }
4129
+ };
4130
+ var fixReversedBindings = (originalElements, elementsWithClones, oldIdToDuplicatedId) => {
4131
+ for (const original of originalElements.values()) {
4132
+ const duplicate = elementsWithClones.find(
4133
+ (el) => el.id === oldIdToDuplicatedId.get(original.id)
4134
+ );
4135
+ if (isBindableElement(original) && isBindableElement(duplicate)) {
4136
+ fixReversedBindingsForBindables(
4137
+ original,
4138
+ duplicate,
4139
+ originalElements,
4140
+ elementsWithClones,
4141
+ oldIdToDuplicatedId
4142
+ );
4143
+ } else if (isArrowElement(original) && isArrowElement(duplicate)) {
4144
+ fixReversedBindingsForArrows(
4145
+ original,
4146
+ duplicate,
4147
+ originalElements,
4148
+ "startBinding",
4149
+ oldIdToDuplicatedId,
4150
+ elementsWithClones
4151
+ );
4152
+ fixReversedBindingsForArrows(
4153
+ original,
4154
+ duplicate,
4155
+ originalElements,
4156
+ "endBinding",
4157
+ oldIdToDuplicatedId,
4158
+ elementsWithClones
4159
+ );
4160
+ }
4161
+ }
4162
+ };
3969
4163
  var fixBindingsAfterDeletion = (sceneElements, deletedElements) => {
3970
4164
  const elements = arrayToMap(sceneElements);
3971
4165
  for (const element of deletedElements) {
@@ -4005,10 +4199,7 @@ var maxBindingGap = (element, elementWidth, elementHeight, zoom) => {
4005
4199
  );
4006
4200
  };
4007
4201
  var determineFocusDistance = (element, a, b) => {
4008
- const center = pointFrom(
4009
- element.x + element.width / 2,
4010
- element.y + element.height / 2
4011
- );
4202
+ const center = elementCenterPoint(element);
4012
4203
  if (pointsEqual(a, b)) {
4013
4204
  return 0;
4014
4205
  }
@@ -4111,10 +4302,7 @@ var determineFocusDistance = (element, a, b) => {
4111
4302
  return signedDistanceRatio;
4112
4303
  };
4113
4304
  var determineFocusPoint = (element, focus, adjacentPoint) => {
4114
- const center = pointFrom(
4115
- element.x + element.width / 2,
4116
- element.y + element.height / 2
4117
- );
4305
+ const center = elementCenterPoint(element);
4118
4306
  if (focus === 0) {
4119
4307
  return center;
4120
4308
  }
@@ -4392,10 +4580,7 @@ var getGlobalFixedPointForBindableElement = (fixedPointRatio, element) => {
4392
4580
  element.x + element.width * fixedX,
4393
4581
  element.y + element.height * fixedY
4394
4582
  ),
4395
- pointFrom(
4396
- element.x + element.width / 2,
4397
- element.y + element.height / 2
4398
- ),
4583
+ elementCenterPoint(element),
4399
4584
  element.angle
4400
4585
  );
4401
4586
  };
@@ -6443,13 +6628,19 @@ var satisfiesWordInvariant = (word) => {
6443
6628
  // ../element/src/textElement.ts
6444
6629
  var redrawTextBoundingBox = (textElement, container, elementsMap, informMutation = true) => {
6445
6630
  let maxWidth = void 0;
6631
+ if (!isProdEnv()) {
6632
+ invariant(
6633
+ !container || !isArrowElement(container) || textElement.angle === 0,
6634
+ "text element angle must be 0 if bound to arrow container"
6635
+ );
6636
+ }
6446
6637
  const boundTextUpdates = {
6447
6638
  x: textElement.x,
6448
6639
  y: textElement.y,
6449
6640
  text: textElement.text,
6450
6641
  width: textElement.width,
6451
6642
  height: textElement.height,
6452
- angle: container?.angle ?? textElement.angle
6643
+ angle: container ? isArrowElement(container) ? 0 : container.angle : textElement.angle
6453
6644
  };
6454
6645
  boundTextUpdates.text = textElement.text;
6455
6646
  if (container || !textElement.autoResize) {
@@ -6667,7 +6858,10 @@ var getContainerCoords = (container) => {
6667
6858
  };
6668
6859
  };
6669
6860
  var getTextElementAngle = (textElement, container) => {
6670
- if (!container || isArrowElement(container)) {
6861
+ if (isArrowElement(container)) {
6862
+ return 0;
6863
+ }
6864
+ if (!container) {
6671
6865
  return textElement.angle;
6672
6866
  }
6673
6867
  return container.angle;
@@ -8308,6 +8502,7 @@ var _LinearElementEditor = class _LinearElementEditor {
8308
8502
  this.elementId = element.id;
8309
8503
  if (!pointsEqual(element.points[0], pointFrom(0, 0))) {
8310
8504
  console.error("Linear element is not normalized", Error().stack);
8505
+ _LinearElementEditor.normalizePoints(element);
8311
8506
  }
8312
8507
  this.selectedPointsIndices = null;
8313
8508
  this.lastUncommittedPoint = null;
@@ -9706,7 +9901,7 @@ var aabbForElement = (element, offset) => {
9706
9901
  midX: element.x + element.width / 2,
9707
9902
  midY: element.y + element.height / 2
9708
9903
  };
9709
- const center = pointFrom(bbox.midX, bbox.midY);
9904
+ const center = elementCenterPoint(element);
9710
9905
  const [topLeftX, topLeftY] = pointRotateRads(
9711
9906
  pointFrom(bbox.minX, bbox.minY),
9712
9907
  center,
@@ -9791,7 +9986,7 @@ var cropElement = (element, transformHandle, naturalWidth, naturalHeight, pointe
9791
9986
  const croppedTop = (element.crop?.y ?? 0) / naturalHeightToUncropped;
9792
9987
  const rotatedPointer = pointRotateRads(
9793
9988
  pointFrom(pointerX, pointerY),
9794
- pointFrom(element.x + element.width / 2, element.y + element.height / 2),
9989
+ elementCenterPoint(element),
9795
9990
  -element.angle
9796
9991
  );
9797
9992
  pointerX = rotatedPointer[0];
@@ -11463,40 +11658,62 @@ var getElementAbsoluteCoords = (element, elementsMap, includeBoundText = false)
11463
11658
  ];
11464
11659
  };
11465
11660
  var getElementLineSegments = (element, elementsMap) => {
11661
+ const shape = getElementShape(element, elementsMap);
11466
11662
  const [x1, y1, x2, y2, cx, cy] = getElementAbsoluteCoords(
11467
11663
  element,
11468
11664
  elementsMap
11469
11665
  );
11470
11666
  const center = pointFrom(cx, cy);
11471
- if (isLinearElement(element) || isFreeDrawElement(element)) {
11472
- const segments = [];
11667
+ if (shape.type === "polycurve") {
11668
+ const curves = shape.data;
11669
+ const points = curves.map((curve2) => pointsOnBezierCurves2(curve2, 10)).flat();
11473
11670
  let i = 0;
11474
- while (i < element.points.length - 1) {
11671
+ const segments = [];
11672
+ while (i < points.length - 1) {
11475
11673
  segments.push(
11476
11674
  lineSegment(
11477
- pointRotateRads(
11478
- pointFrom(
11479
- element.points[i][0] + element.x,
11480
- element.points[i][1] + element.y
11481
- ),
11482
- center,
11483
- element.angle
11484
- ),
11485
- pointRotateRads(
11486
- pointFrom(
11487
- element.points[i + 1][0] + element.x,
11488
- element.points[i + 1][1] + element.y
11489
- ),
11490
- center,
11491
- element.angle
11492
- )
11675
+ pointFrom(points[i][0], points[i][1]),
11676
+ pointFrom(points[i + 1][0], points[i + 1][1])
11493
11677
  )
11494
11678
  );
11495
11679
  i++;
11496
11680
  }
11497
11681
  return segments;
11682
+ } else if (shape.type === "polyline") {
11683
+ return shape.data;
11684
+ } else if (_isRectanguloidElement(element)) {
11685
+ const [sides, corners] = deconstructRectanguloidElement(element);
11686
+ const cornerSegments = corners.map((corner) => getSegmentsOnCurve(corner, center, element.angle)).flat();
11687
+ const rotatedSides = getRotatedSides(sides, center, element.angle);
11688
+ return [...rotatedSides, ...cornerSegments];
11689
+ } else if (element.type === "diamond") {
11690
+ const [sides, corners] = deconstructDiamondElement(element);
11691
+ const cornerSegments = corners.map((corner) => getSegmentsOnCurve(corner, center, element.angle)).flat();
11692
+ const rotatedSides = getRotatedSides(sides, center, element.angle);
11693
+ return [...rotatedSides, ...cornerSegments];
11694
+ } else if (shape.type === "polygon") {
11695
+ if (isTextElement(element)) {
11696
+ const container = getContainerElement(element, elementsMap);
11697
+ if (container && isLinearElement(container)) {
11698
+ const segments2 = [
11699
+ lineSegment(pointFrom(x1, y1), pointFrom(x2, y1)),
11700
+ lineSegment(pointFrom(x2, y1), pointFrom(x2, y2)),
11701
+ lineSegment(pointFrom(x2, y2), pointFrom(x1, y2)),
11702
+ lineSegment(pointFrom(x1, y2), pointFrom(x1, y1))
11703
+ ];
11704
+ return segments2;
11705
+ }
11706
+ }
11707
+ const points = shape.data;
11708
+ const segments = [];
11709
+ for (let i = 0; i < points.length - 1; i++) {
11710
+ segments.push(lineSegment(points[i], points[i + 1]));
11711
+ }
11712
+ return segments;
11713
+ } else if (shape.type === "ellipse") {
11714
+ return getSegmentsOnEllipse(element);
11498
11715
  }
11499
- const [nw, ne, sw, se, n, s, w, e] = [
11716
+ const [nw, ne, sw, se, , , w, e] = [
11500
11717
  [x1, y1],
11501
11718
  [x2, y1],
11502
11719
  [x1, y2],
@@ -11506,26 +11723,6 @@ var getElementLineSegments = (element, elementsMap) => {
11506
11723
  [x1, cy],
11507
11724
  [x2, cy]
11508
11725
  ].map((point) => pointRotateRads(point, center, element.angle));
11509
- if (element.type === "diamond") {
11510
- return [
11511
- lineSegment(n, w),
11512
- lineSegment(n, e),
11513
- lineSegment(s, w),
11514
- lineSegment(s, e)
11515
- ];
11516
- }
11517
- if (element.type === "ellipse") {
11518
- return [
11519
- lineSegment(n, w),
11520
- lineSegment(n, e),
11521
- lineSegment(s, w),
11522
- lineSegment(s, e),
11523
- lineSegment(n, w),
11524
- lineSegment(n, e),
11525
- lineSegment(s, w),
11526
- lineSegment(s, e)
11527
- ];
11528
- }
11529
11726
  return [
11530
11727
  lineSegment(nw, ne),
11531
11728
  lineSegment(sw, se),
@@ -11537,6 +11734,63 @@ var getElementLineSegments = (element, elementsMap) => {
11537
11734
  lineSegment(se, w)
11538
11735
  ];
11539
11736
  };
11737
+ var _isRectanguloidElement = (element) => {
11738
+ return element != null && (element.type === "rectangle" || element.type === "image" || element.type === "iframe" || element.type === "embeddable" || element.type === "frame" || element.type === "magicframe" || element.type === "text" && !element.containerId);
11739
+ };
11740
+ var getRotatedSides = (sides, center, angle) => {
11741
+ return sides.map((side) => {
11742
+ return lineSegment(
11743
+ pointRotateRads(side[0], center, angle),
11744
+ pointRotateRads(side[1], center, angle)
11745
+ );
11746
+ });
11747
+ };
11748
+ var getSegmentsOnCurve = (curve2, center, angle) => {
11749
+ const points = pointsOnBezierCurves2(curve2, 10);
11750
+ let i = 0;
11751
+ const segments = [];
11752
+ while (i < points.length - 1) {
11753
+ segments.push(
11754
+ lineSegment(
11755
+ pointRotateRads(
11756
+ pointFrom(points[i][0], points[i][1]),
11757
+ center,
11758
+ angle
11759
+ ),
11760
+ pointRotateRads(
11761
+ pointFrom(points[i + 1][0], points[i + 1][1]),
11762
+ center,
11763
+ angle
11764
+ )
11765
+ )
11766
+ );
11767
+ i++;
11768
+ }
11769
+ return segments;
11770
+ };
11771
+ var getSegmentsOnEllipse = (ellipse2) => {
11772
+ const center = pointFrom(
11773
+ ellipse2.x + ellipse2.width / 2,
11774
+ ellipse2.y + ellipse2.height / 2
11775
+ );
11776
+ const a = ellipse2.width / 2;
11777
+ const b = ellipse2.height / 2;
11778
+ const segments = [];
11779
+ const points = [];
11780
+ const n = 90;
11781
+ const deltaT = Math.PI * 2 / n;
11782
+ for (let i = 0; i < n; i++) {
11783
+ const t = i * deltaT;
11784
+ const x = center[0] + a * Math.cos(t);
11785
+ const y = center[1] + b * Math.sin(t);
11786
+ points.push(pointRotateRads(pointFrom(x, y), center, ellipse2.angle));
11787
+ }
11788
+ for (let i = 0; i < points.length - 1; i++) {
11789
+ segments.push(lineSegment(points[i], points[i + 1]));
11790
+ }
11791
+ segments.push(lineSegment(points[points.length - 1], points[0]));
11792
+ return segments;
11793
+ };
11540
11794
  var getDiamondPoints = (element) => {
11541
11795
  const topX = Math.floor(element.width / 2) + 1;
11542
11796
  const topY = 0;
@@ -12145,6 +12399,7 @@ var getDefaultAppState = () => {
12145
12399
  type: "selection",
12146
12400
  customType: null,
12147
12401
  locked: DEFAULT_ELEMENT_PROPS.locked,
12402
+ fromSelection: false,
12148
12403
  lastActiveTool: null
12149
12404
  },
12150
12405
  penMode: false,
@@ -17109,6 +17364,7 @@ var getExportSize = (elements, exportPadding, scale) => {
17109
17364
  // data/restore.ts
17110
17365
  var AllowedExcalidrawActiveTools = {
17111
17366
  selection: true,
17367
+ lasso: true,
17112
17368
  text: true,
17113
17369
  rectangle: true,
17114
17370
  diamond: true,
@@ -17187,7 +17443,7 @@ var restoreElementWithProperties = (element, extra) => {
17187
17443
  if ("customData" in element || "customData" in extra) {
17188
17444
  base.customData = "customData" in extra ? extra.customData : element.customData;
17189
17445
  }
17190
- return {
17446
+ const ret = {
17191
17447
  // spread the original element properties to not lose unknown ones
17192
17448
  // for forward-compatibility
17193
17449
  ...element,
@@ -17196,6 +17452,9 @@ var restoreElementWithProperties = (element, extra) => {
17196
17452
  ...getNormalizedDimensions(base),
17197
17453
  ...extra
17198
17454
  };
17455
+ delete ret.strokeSharpness;
17456
+ delete ret.boundElementIds;
17457
+ return ret;
17199
17458
  };
17200
17459
  var restoreElement = (element) => {
17201
17460
  element = { ...element };
@@ -17348,6 +17607,7 @@ var repairContainerElement = (container, elementsMap) => {
17348
17607
  };
17349
17608
  var repairBoundElement = (boundElement, elementsMap) => {
17350
17609
  const container = boundElement.containerId ? elementsMap.get(boundElement.containerId) : null;
17610
+ boundElement.angle = isArrowElement(container) ? 0 : container?.angle ?? 0;
17351
17611
  if (!container) {
17352
17612
  boundElement.containerId = null;
17353
17613
  return;
@@ -17593,7 +17853,7 @@ var parseFileContents = async (blob) => {
17593
17853
  let contents;
17594
17854
  if (blob.type === MIME_TYPES.png) {
17595
17855
  try {
17596
- return await (await import("./data/image-5HAY2PCR.js")).decodePngMetadata(blob);
17856
+ return await (await import("./data/image-U2IPNUKJ.js")).decodePngMetadata(blob);
17597
17857
  } catch (error) {
17598
17858
  if (error.message === "INVALID") {
17599
17859
  throw new ImageSceneDataError(
@@ -17982,6 +18242,7 @@ var decodePngMetadata = async (blob) => {
17982
18242
  };
17983
18243
 
17984
18244
  export {
18245
+ COLOR_OUTLINE_CONTRAST_THRESHOLD,
17985
18246
  MAX_CUSTOM_COLORS_USED_IN_CANVAS,
17986
18247
  COLORS_PER_ROW,
17987
18248
  DEFAULT_CHART_COLOR_INDEX,
@@ -18059,6 +18320,7 @@ export {
18059
18320
  DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT,
18060
18321
  MAX_ALLOWED_FILE_BYTES,
18061
18322
  SVG_NS,
18323
+ SVG_DOCUMENT_PREAMBLE,
18062
18324
  VERSIONS,
18063
18325
  BOUND_TEXT_PADDING,
18064
18326
  VERTICAL_ALIGN,
@@ -18105,7 +18367,11 @@ export {
18105
18367
  pointRotateRads,
18106
18368
  pointCenter,
18107
18369
  pointDistance,
18370
+ lineSegment,
18108
18371
  pointOnLineSegment,
18372
+ lineSegmentIntersectionPoints,
18373
+ polygonFromPoints,
18374
+ polygonIncludesPointNonZero,
18109
18375
  rangeInclusive,
18110
18376
  rangesOverlap,
18111
18377
  rangeIntersection,
@@ -18196,6 +18462,7 @@ export {
18196
18462
  isUsingAdaptiveRadius,
18197
18463
  canApplyRoundnessTypeToElement,
18198
18464
  getDefaultRoundnessTypeForElement,
18465
+ shouldTestInside,
18199
18466
  hitElementItself,
18200
18467
  hitElementBoundingBox,
18201
18468
  hitElementBoundingBoxOnly,
@@ -18249,7 +18516,8 @@ export {
18249
18516
  updateBoundElements,
18250
18517
  bindPointToSnapToElementOutline,
18251
18518
  calculateFixedPointForElbowArrowBinding,
18252
- fixBindingsAfterDuplication,
18519
+ fixDuplicatedBindingsAfterDuplication,
18520
+ fixReversedBindings,
18253
18521
  fixBindingsAfterDeletion,
18254
18522
  maxBindingGap,
18255
18523
  bindingProperties,
@@ -18348,6 +18616,7 @@ export {
18348
18616
  getFreeDrawSvgPath,
18349
18617
  ShapeCache,
18350
18618
  getElementAbsoluteCoords,
18619
+ getElementLineSegments,
18351
18620
  getElementBounds,
18352
18621
  getCommonBounds,
18353
18622
  getDraggedElementsBounds,
@@ -18439,4 +18708,4 @@ export {
18439
18708
  createFile,
18440
18709
  normalizeFile
18441
18710
  };
18442
- //# sourceMappingURL=chunk-S7W4OWSF.js.map
18711
+ //# sourceMappingURL=chunk-LEJJ2YZY.js.map