@excalidraw/excalidraw 0.17.1-7441-0269e5a → 0.17.1-7441-4c9a6f4

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 (660) hide show
  1. package/dist/browser/excalidraw-assets/{chunk-V52YQ6TH.js → chunk-LZCCI7PN.js} +1181 -1675
  2. package/dist/browser/excalidraw-assets/{image-MZHH7VY4.js → image-CG4AV2NT.js} +1 -1
  3. package/dist/browser/excalidraw-assets/{image-2MHILQWB.css → image-EO7USLQY.css} +1 -1
  4. package/dist/browser/index.css +1 -1
  5. package/dist/browser/index.js +1 -1
  6. package/dist/packages/excalidraw/actions/actionAddToLibrary.js +59 -0
  7. package/dist/packages/excalidraw/actions/actionAlign.js +124 -0
  8. package/dist/packages/excalidraw/actions/actionBoundText.js +213 -0
  9. package/dist/packages/excalidraw/actions/actionCanvas.js +354 -0
  10. package/dist/packages/excalidraw/actions/actionClipboard.js +221 -0
  11. package/dist/packages/excalidraw/actions/actionDeleteSelected.js +129 -0
  12. package/dist/packages/excalidraw/actions/actionDistribute.js +56 -0
  13. package/dist/packages/excalidraw/actions/actionDuplicateSelection.js +181 -0
  14. package/dist/packages/excalidraw/actions/actionElementLock.js +89 -0
  15. package/dist/packages/excalidraw/actions/actionExport.js +195 -0
  16. package/dist/packages/excalidraw/actions/actionFinalize.js +150 -0
  17. package/dist/packages/excalidraw/actions/actionFlip.js +52 -0
  18. package/dist/packages/excalidraw/actions/actionFrame.js +113 -0
  19. package/dist/packages/excalidraw/actions/actionGroup.js +162 -0
  20. package/dist/packages/excalidraw/actions/actionHistory.js +57 -0
  21. package/dist/packages/excalidraw/actions/actionLinearEditor.js +41 -0
  22. package/dist/packages/excalidraw/actions/actionMenu.js +53 -0
  23. package/dist/packages/excalidraw/actions/actionNavigate.js +43 -0
  24. package/dist/packages/excalidraw/actions/actionProperties.js +683 -0
  25. package/dist/packages/excalidraw/actions/actionSelectAll.js +40 -0
  26. package/dist/packages/excalidraw/actions/actionStyles.js +118 -0
  27. package/dist/packages/excalidraw/actions/actionToggleGridMode.js +27 -0
  28. package/dist/packages/excalidraw/actions/actionToggleObjectsSnapMode.js +26 -0
  29. package/dist/packages/excalidraw/actions/actionToggleStats.js +19 -0
  30. package/dist/packages/excalidraw/actions/actionToggleViewMode.js +25 -0
  31. package/dist/packages/excalidraw/actions/actionToggleZenMode.js +25 -0
  32. package/dist/packages/excalidraw/actions/actionZindex.js +86 -0
  33. package/dist/packages/excalidraw/actions/index.js +25 -0
  34. package/dist/packages/excalidraw/actions/manager.js +110 -0
  35. package/dist/packages/excalidraw/actions/register.js +5 -0
  36. package/dist/packages/excalidraw/actions/shortcuts.js +52 -0
  37. package/dist/packages/excalidraw/align.js +36 -0
  38. package/dist/packages/excalidraw/analytics.js +30 -0
  39. package/dist/packages/excalidraw/appState.js +222 -0
  40. package/dist/packages/excalidraw/charts.js +365 -0
  41. package/dist/packages/excalidraw/clients.js +34 -0
  42. package/dist/packages/excalidraw/clipboard.js +351 -0
  43. package/dist/packages/excalidraw/colors.js +124 -0
  44. package/dist/packages/excalidraw/components/Actions.js +127 -0
  45. package/dist/packages/excalidraw/components/Actions.scss +92 -0
  46. package/dist/packages/excalidraw/components/ActiveConfirmDialog.js +22 -0
  47. package/dist/packages/excalidraw/components/App.js +6177 -0
  48. package/dist/packages/excalidraw/components/Avatar.js +15 -0
  49. package/dist/packages/excalidraw/components/Avatar.scss +7 -0
  50. package/dist/packages/excalidraw/components/BraveMeasureTextError.js +6 -0
  51. package/dist/packages/excalidraw/components/Button.js +14 -0
  52. package/dist/packages/excalidraw/components/Button.scss +7 -0
  53. package/dist/packages/excalidraw/components/ButtonIconCycle.js +11 -0
  54. package/dist/packages/excalidraw/components/ButtonIconSelect.js +6 -0
  55. package/dist/packages/excalidraw/components/ButtonSelect.js +3 -0
  56. package/dist/packages/excalidraw/components/Card.js +14 -0
  57. package/dist/packages/excalidraw/components/Card.scss +57 -0
  58. package/dist/packages/excalidraw/components/CheckboxItem.js +10 -0
  59. package/dist/packages/excalidraw/components/CheckboxItem.scss +91 -0
  60. package/dist/packages/excalidraw/components/ColorPicker/ColorInput.js +67 -0
  61. package/dist/packages/excalidraw/components/ColorPicker/ColorPicker.js +138 -0
  62. package/dist/packages/excalidraw/components/ColorPicker/ColorPicker.scss +441 -0
  63. package/dist/packages/excalidraw/components/ColorPicker/CustomColorList.js +24 -0
  64. package/dist/packages/excalidraw/components/ColorPicker/HotkeyLabel.js +8 -0
  65. package/dist/packages/excalidraw/components/ColorPicker/Picker.js +86 -0
  66. package/dist/packages/excalidraw/components/ColorPicker/PickerColorList.js +33 -0
  67. package/dist/packages/excalidraw/components/ColorPicker/PickerHeading.js +3 -0
  68. package/dist/packages/excalidraw/components/ColorPicker/ShadeList.js +44 -0
  69. package/dist/packages/excalidraw/components/ColorPicker/TopPicks.js +27 -0
  70. package/dist/packages/excalidraw/components/ColorPicker/colorPickerUtils.js +83 -0
  71. package/dist/packages/excalidraw/components/ColorPicker/keyboardNavHandlers.js +174 -0
  72. package/dist/packages/excalidraw/components/ConfirmDialog.js +27 -0
  73. package/dist/packages/excalidraw/components/ConfirmDialog.scss +11 -0
  74. package/dist/packages/excalidraw/components/ContextMenu.js +56 -0
  75. package/dist/packages/excalidraw/components/ContextMenu.scss +98 -0
  76. package/dist/packages/excalidraw/components/DarkModeToggle.js +16 -0
  77. package/dist/packages/excalidraw/components/DefaultSidebar.js +48 -0
  78. package/dist/packages/excalidraw/components/Dialog.js +74 -0
  79. package/dist/packages/excalidraw/components/Dialog.scss +48 -0
  80. package/dist/packages/excalidraw/components/DialogActionButton.js +9 -0
  81. package/dist/packages/excalidraw/components/DialogActionButton.scss +47 -0
  82. package/dist/packages/excalidraw/components/ErrorDialog.js +18 -0
  83. package/dist/packages/excalidraw/components/ExcalidrawLogo.js +7 -0
  84. package/dist/packages/excalidraw/components/ExcalidrawLogo.scss +73 -0
  85. package/dist/packages/excalidraw/components/ExportDialog.scss +129 -0
  86. package/dist/packages/excalidraw/components/EyeDropper.js +130 -0
  87. package/dist/packages/excalidraw/components/EyeDropper.scss +48 -0
  88. package/dist/packages/excalidraw/components/FilledButton.js +7 -0
  89. package/dist/packages/excalidraw/components/FilledButton.scss +191 -0
  90. package/dist/packages/excalidraw/components/FixedSideContainer.js +4 -0
  91. package/dist/packages/excalidraw/components/FixedSideContainer.scss +40 -0
  92. package/dist/packages/excalidraw/components/FollowMode/FollowMode.js +7 -0
  93. package/dist/packages/excalidraw/components/FollowMode/FollowMode.scss +59 -0
  94. package/dist/packages/excalidraw/components/HandButton.js +9 -0
  95. package/dist/packages/excalidraw/components/HelpButton.js +4 -0
  96. package/dist/packages/excalidraw/components/HelpDialog.js +79 -0
  97. package/dist/packages/excalidraw/components/HelpDialog.scss +130 -0
  98. package/dist/packages/excalidraw/components/HintViewer.js +97 -0
  99. package/dist/packages/excalidraw/components/HintViewer.scss +37 -0
  100. package/dist/packages/excalidraw/components/IconPicker.js +99 -0
  101. package/dist/packages/excalidraw/components/IconPicker.scss +143 -0
  102. package/dist/packages/excalidraw/components/ImageExportDialog.js +127 -0
  103. package/dist/packages/excalidraw/components/ImageExportDialog.scss +173 -0
  104. package/dist/packages/excalidraw/components/InitializeApp.js +16 -0
  105. package/dist/packages/excalidraw/components/InlineIcon.js +10 -0
  106. package/dist/packages/excalidraw/components/Island.js +5 -0
  107. package/dist/packages/excalidraw/components/Island.scss +16 -0
  108. package/dist/packages/excalidraw/components/JSONExportDialog.js +35 -0
  109. package/dist/packages/excalidraw/components/LaserTool/LaserPathManager.js +225 -0
  110. package/dist/packages/excalidraw/components/LaserTool/LaserPointerButton.js +10 -0
  111. package/dist/packages/excalidraw/components/LaserTool/LaserTool.js +15 -0
  112. package/dist/packages/excalidraw/components/LaserTool/LaserToolOverlay.scss +20 -0
  113. package/dist/packages/excalidraw/components/LayerUI.js +189 -0
  114. package/dist/packages/excalidraw/components/LayerUI.scss +112 -0
  115. package/dist/packages/excalidraw/components/LibraryMenu.js +99 -0
  116. package/dist/packages/excalidraw/components/LibraryMenu.scss +150 -0
  117. package/dist/packages/excalidraw/components/LibraryMenuBrowseButton.js +8 -0
  118. package/dist/packages/excalidraw/components/LibraryMenuControlButtons.js +6 -0
  119. package/dist/packages/excalidraw/components/LibraryMenuHeaderContent.js +126 -0
  120. package/dist/packages/excalidraw/components/LibraryMenuItems.js +138 -0
  121. package/dist/packages/excalidraw/components/LibraryMenuItems.scss +99 -0
  122. package/dist/packages/excalidraw/components/LibraryMenuSection.js +21 -0
  123. package/dist/packages/excalidraw/components/LibraryUnit.js +52 -0
  124. package/dist/packages/excalidraw/components/LibraryUnit.scss +185 -0
  125. package/dist/packages/excalidraw/components/LoadingMessage.js +24 -0
  126. package/dist/packages/excalidraw/components/LockButton.js +14 -0
  127. package/dist/packages/excalidraw/components/MagicButton.js +9 -0
  128. package/dist/packages/excalidraw/components/MagicSettings.js +46 -0
  129. package/dist/packages/excalidraw/components/MagicSettings.scss +18 -0
  130. package/dist/packages/excalidraw/components/MobileMenu.js +45 -0
  131. package/dist/packages/excalidraw/components/Modal.js +23 -0
  132. package/dist/packages/excalidraw/components/Modal.scss +121 -0
  133. package/dist/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirm.js +31 -0
  134. package/dist/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirm.scss +126 -0
  135. package/dist/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmActions.js +32 -0
  136. package/dist/packages/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.js +19 -0
  137. package/dist/packages/excalidraw/components/Paragraph.js +4 -0
  138. package/dist/packages/excalidraw/components/PasteChartDialog.js +63 -0
  139. package/dist/packages/excalidraw/components/PasteChartDialog.scss +46 -0
  140. package/dist/packages/excalidraw/components/PenModeButton.js +13 -0
  141. package/dist/packages/excalidraw/components/Popover.js +111 -0
  142. package/dist/packages/excalidraw/components/Popover.scss +8 -0
  143. package/dist/packages/excalidraw/components/ProjectName.js +30 -0
  144. package/dist/packages/excalidraw/components/ProjectName.scss +25 -0
  145. package/dist/packages/excalidraw/components/PublishLibrary.js +214 -0
  146. package/dist/packages/excalidraw/components/PublishLibrary.scss +172 -0
  147. package/dist/packages/excalidraw/components/RadioGroup.js +8 -0
  148. package/dist/packages/excalidraw/components/RadioGroup.scss +91 -0
  149. package/dist/packages/excalidraw/components/Section.js +8 -0
  150. package/dist/packages/excalidraw/components/ShareableLinkDialog.js +33 -0
  151. package/dist/packages/excalidraw/components/ShareableLinkDialog.scss +91 -0
  152. package/dist/packages/excalidraw/components/Sidebar/Sidebar.js +145 -0
  153. package/dist/packages/excalidraw/components/Sidebar/Sidebar.scss +176 -0
  154. package/dist/packages/excalidraw/components/Sidebar/SidebarHeader.js +16 -0
  155. package/dist/packages/excalidraw/components/Sidebar/SidebarTab.js +6 -0
  156. package/dist/packages/excalidraw/components/Sidebar/SidebarTabTrigger.js +6 -0
  157. package/dist/packages/excalidraw/components/Sidebar/SidebarTabTriggers.js +6 -0
  158. package/dist/packages/excalidraw/components/Sidebar/SidebarTabs.js +17 -0
  159. package/dist/packages/excalidraw/components/Sidebar/SidebarTrigger.js +18 -0
  160. package/dist/packages/excalidraw/components/Sidebar/SidebarTrigger.scss +37 -0
  161. package/dist/packages/excalidraw/components/Sidebar/common.js +2 -0
  162. package/dist/packages/excalidraw/components/Spinner.js +14 -0
  163. package/dist/packages/excalidraw/components/Spinner.scss +49 -0
  164. package/dist/packages/excalidraw/components/Stack.js +24 -0
  165. package/dist/packages/excalidraw/components/Stack.scss +19 -0
  166. package/dist/packages/excalidraw/components/Stats.js +13 -0
  167. package/dist/packages/excalidraw/components/Stats.scss +54 -0
  168. package/dist/packages/excalidraw/components/Switch.js +10 -0
  169. package/dist/packages/excalidraw/components/Switch.scss +118 -0
  170. package/dist/packages/excalidraw/components/TTDDialog/MermaidToExcalidraw.js +58 -0
  171. package/dist/packages/excalidraw/components/TTDDialog/MermaidToExcalidraw.scss +10 -0
  172. package/dist/packages/excalidraw/components/TTDDialog/TTDDialog.js +194 -0
  173. package/dist/packages/excalidraw/components/TTDDialog/TTDDialog.scss +315 -0
  174. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogInput.js +28 -0
  175. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogOutput.js +8 -0
  176. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogPanel.js +11 -0
  177. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogPanels.js +4 -0
  178. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogSubmitShortcut.js +5 -0
  179. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogTab.js +6 -0
  180. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogTabTrigger.js +6 -0
  181. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogTabTriggers.js +6 -0
  182. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogTabs.js +39 -0
  183. package/dist/packages/excalidraw/components/TTDDialog/TTDDialogTrigger.js +16 -0
  184. package/dist/packages/excalidraw/components/TTDDialog/common.js +88 -0
  185. package/dist/packages/excalidraw/components/TextField.js +25 -0
  186. package/dist/packages/excalidraw/components/TextField.scss +109 -0
  187. package/dist/packages/excalidraw/components/TextInput.scss +7 -0
  188. package/dist/packages/excalidraw/components/Toast.js +30 -0
  189. package/dist/packages/excalidraw/components/Toast.scss +49 -0
  190. package/dist/packages/excalidraw/components/ToolButton.js +72 -0
  191. package/dist/packages/excalidraw/components/ToolIcon.scss +184 -0
  192. package/dist/packages/excalidraw/components/Toolbar.scss +50 -0
  193. package/dist/packages/excalidraw/components/Tooltip.js +60 -0
  194. package/dist/packages/excalidraw/components/Tooltip.scss +47 -0
  195. package/dist/packages/excalidraw/components/Trans.js +139 -0
  196. package/dist/packages/excalidraw/components/UserList.js +96 -0
  197. package/dist/packages/excalidraw/components/UserList.scss +136 -0
  198. package/dist/packages/excalidraw/components/canvases/InteractiveCanvas.js +120 -0
  199. package/dist/packages/excalidraw/components/canvases/StaticCanvas.js +85 -0
  200. package/dist/packages/excalidraw/components/canvases/index.js +3 -0
  201. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenu.js +24 -0
  202. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenu.scss +148 -0
  203. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuContent.js +21 -0
  204. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuGroup.js +6 -0
  205. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuItem.js +23 -0
  206. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuItemContent.js +7 -0
  207. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.js +5 -0
  208. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuItemLink.js +9 -0
  209. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuSeparator.js +8 -0
  210. package/dist/packages/excalidraw/components/dropdownMenu/DropdownMenuTrigger.js +12 -0
  211. package/dist/packages/excalidraw/components/dropdownMenu/common.js +20 -0
  212. package/dist/packages/excalidraw/components/dropdownMenu/dropdownMenuUtils.js +27 -0
  213. package/dist/packages/excalidraw/components/footer/Footer.js +25 -0
  214. package/dist/packages/excalidraw/components/footer/FooterCenter.js +14 -0
  215. package/dist/packages/excalidraw/components/footer/FooterCenter.scss +11 -0
  216. package/dist/packages/excalidraw/components/hoc/withInternalFallback.js +57 -0
  217. package/dist/packages/excalidraw/components/icons.js +220 -0
  218. package/dist/packages/excalidraw/components/live-collaboration/LiveCollaborationTrigger.js +13 -0
  219. package/dist/packages/excalidraw/components/live-collaboration/LiveCollaborationTrigger.scss +72 -0
  220. package/dist/packages/excalidraw/components/main-menu/DefaultItems.js +116 -0
  221. package/dist/packages/excalidraw/components/main-menu/DefaultItems.scss +21 -0
  222. package/dist/packages/excalidraw/components/main-menu/MainMenu.js +36 -0
  223. package/dist/packages/excalidraw/components/welcome-screen/WelcomeScreen.Center.js +69 -0
  224. package/dist/packages/excalidraw/components/welcome-screen/WelcomeScreen.Hints.js +20 -0
  225. package/dist/packages/excalidraw/components/welcome-screen/WelcomeScreen.js +11 -0
  226. package/dist/packages/excalidraw/components/welcome-screen/WelcomeScreen.scss +285 -0
  227. package/dist/packages/excalidraw/constants.js +312 -0
  228. package/dist/packages/excalidraw/context/tunnels.js +21 -0
  229. package/dist/packages/excalidraw/context/ui-appState.js +3 -0
  230. package/dist/packages/excalidraw/css/app.scss +39 -0
  231. package/dist/packages/excalidraw/css/styles.scss +757 -0
  232. package/dist/packages/excalidraw/css/theme.scss +252 -0
  233. package/dist/packages/excalidraw/css/variables.module.scss +174 -0
  234. package/dist/packages/excalidraw/cursor.js +72 -0
  235. package/dist/packages/excalidraw/data/EditorLocalStorage.js +42 -0
  236. package/dist/packages/excalidraw/data/ai/types.js +1 -0
  237. package/dist/packages/excalidraw/data/blob.js +378 -0
  238. package/dist/packages/excalidraw/data/encode.js +231 -0
  239. package/dist/packages/excalidraw/data/encryption.js +53 -0
  240. package/dist/packages/excalidraw/data/filesystem.js +65 -0
  241. package/dist/packages/excalidraw/data/image.js +91 -0
  242. package/dist/packages/excalidraw/data/index.js +120 -0
  243. package/dist/packages/excalidraw/data/json.js +93 -0
  244. package/dist/packages/excalidraw/data/library.js +376 -0
  245. package/dist/packages/excalidraw/data/magic.js +73 -0
  246. package/dist/packages/excalidraw/data/resave.js +22 -0
  247. package/dist/packages/excalidraw/data/restore.js +438 -0
  248. package/dist/packages/excalidraw/data/transform.js +442 -0
  249. package/dist/packages/excalidraw/data/types.js +1 -0
  250. package/dist/packages/excalidraw/data/url.js +30 -0
  251. package/dist/packages/excalidraw/distribute.js +58 -0
  252. package/dist/packages/excalidraw/element/ElementCanvasButtons.js +31 -0
  253. package/dist/packages/excalidraw/element/ElementCanvasButtons.scss +14 -0
  254. package/dist/packages/excalidraw/element/Hyperlink.js +350 -0
  255. package/dist/packages/excalidraw/element/Hyperlink.scss +70 -0
  256. package/dist/packages/excalidraw/element/binding.js +412 -0
  257. package/dist/packages/excalidraw/element/bounds.js +613 -0
  258. package/dist/packages/excalidraw/element/collision.js +727 -0
  259. package/dist/packages/excalidraw/element/dragElements.js +119 -0
  260. package/dist/packages/excalidraw/element/embeddable.js +305 -0
  261. package/dist/packages/excalidraw/element/image.js +91 -0
  262. package/dist/packages/excalidraw/element/index.js +24 -0
  263. package/dist/packages/excalidraw/element/linearElementEditor.js +867 -0
  264. package/dist/packages/excalidraw/element/mutateElement.js +112 -0
  265. package/dist/packages/excalidraw/element/newElement.js +389 -0
  266. package/dist/packages/excalidraw/element/resizeElements.js +597 -0
  267. package/dist/packages/excalidraw/element/resizeTest.js +95 -0
  268. package/dist/packages/excalidraw/element/showSelectedShapeActions.js +9 -0
  269. package/dist/packages/excalidraw/element/sizeHelpers.js +131 -0
  270. package/dist/packages/excalidraw/element/sortElements.js +104 -0
  271. package/dist/packages/excalidraw/element/textElement.js +716 -0
  272. package/dist/packages/excalidraw/element/textWysiwyg.js +500 -0
  273. package/dist/packages/excalidraw/element/transformHandles.js +155 -0
  274. package/dist/packages/excalidraw/element/typeChecks.js +141 -0
  275. package/dist/packages/excalidraw/element/types.js +1 -0
  276. package/dist/packages/excalidraw/emitter.js +36 -0
  277. package/dist/packages/excalidraw/errors.js +20 -0
  278. package/dist/packages/excalidraw/frame.js +373 -0
  279. package/dist/packages/excalidraw/ga.js +268 -0
  280. package/dist/packages/excalidraw/gadirections.js +18 -0
  281. package/dist/packages/excalidraw/galines.js +32 -0
  282. package/dist/packages/excalidraw/gapoints.js +30 -0
  283. package/dist/packages/excalidraw/gatransforms.js +23 -0
  284. package/dist/packages/excalidraw/gesture.js +9 -0
  285. package/dist/packages/excalidraw/groups.js +225 -0
  286. package/dist/packages/excalidraw/history.js +190 -0
  287. package/dist/packages/excalidraw/hooks/useCallbackRefState.js +6 -0
  288. package/dist/packages/excalidraw/hooks/useCreatePortalContainer.js +32 -0
  289. package/dist/packages/excalidraw/hooks/useLibraryItemSvg.js +62 -0
  290. package/dist/packages/excalidraw/hooks/useOutsideClick.js +67 -0
  291. package/dist/packages/excalidraw/hooks/useScrollPosition.js +23 -0
  292. package/dist/packages/excalidraw/hooks/useStable.js +6 -0
  293. package/dist/packages/excalidraw/hooks/useTransition.js +7 -0
  294. package/dist/packages/excalidraw/i18n.js +137 -0
  295. package/dist/packages/excalidraw/index-node.d.ts +1 -0
  296. package/dist/packages/excalidraw/index-node.js +73 -0
  297. package/{types → dist/packages}/excalidraw/index.d.ts +1 -1
  298. package/dist/packages/excalidraw/index.js +116 -0
  299. package/dist/packages/excalidraw/jotai.js +18 -0
  300. package/dist/packages/excalidraw/keys.js +84 -0
  301. package/dist/packages/excalidraw/locales/ar-SA.json +525 -0
  302. package/dist/packages/excalidraw/locales/az-AZ.json +525 -0
  303. package/dist/packages/excalidraw/locales/bg-BG.json +525 -0
  304. package/dist/packages/excalidraw/locales/bn-BD.json +525 -0
  305. package/dist/packages/excalidraw/locales/ca-ES.json +525 -0
  306. package/dist/packages/excalidraw/locales/cs-CZ.json +525 -0
  307. package/dist/packages/excalidraw/locales/da-DK.json +525 -0
  308. package/dist/packages/excalidraw/locales/de-DE.json +525 -0
  309. package/dist/packages/excalidraw/locales/el-GR.json +525 -0
  310. package/dist/packages/excalidraw/locales/en.json +535 -0
  311. package/dist/packages/excalidraw/locales/es-ES.json +525 -0
  312. package/dist/packages/excalidraw/locales/eu-ES.json +525 -0
  313. package/dist/packages/excalidraw/locales/fa-IR.json +525 -0
  314. package/dist/packages/excalidraw/locales/fi-FI.json +525 -0
  315. package/dist/packages/excalidraw/locales/fr-FR.json +525 -0
  316. package/dist/packages/excalidraw/locales/gl-ES.json +525 -0
  317. package/dist/packages/excalidraw/locales/he-IL.json +525 -0
  318. package/dist/packages/excalidraw/locales/hi-IN.json +525 -0
  319. package/dist/packages/excalidraw/locales/hu-HU.json +525 -0
  320. package/dist/packages/excalidraw/locales/id-ID.json +525 -0
  321. package/dist/packages/excalidraw/locales/it-IT.json +525 -0
  322. package/dist/packages/excalidraw/locales/ja-JP.json +525 -0
  323. package/dist/packages/excalidraw/locales/kaa.json +525 -0
  324. package/dist/packages/excalidraw/locales/kab-KAB.json +525 -0
  325. package/dist/packages/excalidraw/locales/kk-KZ.json +525 -0
  326. package/dist/packages/excalidraw/locales/km-KH.json +525 -0
  327. package/dist/packages/excalidraw/locales/ko-KR.json +525 -0
  328. package/dist/packages/excalidraw/locales/ku-TR.json +525 -0
  329. package/dist/packages/excalidraw/locales/lt-LT.json +525 -0
  330. package/dist/packages/excalidraw/locales/lv-LV.json +525 -0
  331. package/dist/packages/excalidraw/locales/mr-IN.json +525 -0
  332. package/dist/packages/excalidraw/locales/my-MM.json +525 -0
  333. package/dist/packages/excalidraw/locales/nb-NO.json +525 -0
  334. package/dist/packages/excalidraw/locales/nl-NL.json +525 -0
  335. package/dist/packages/excalidraw/locales/nn-NO.json +525 -0
  336. package/dist/packages/excalidraw/locales/oc-FR.json +525 -0
  337. package/dist/packages/excalidraw/locales/pa-IN.json +525 -0
  338. package/dist/packages/excalidraw/locales/percentages.json +56 -0
  339. package/dist/packages/excalidraw/locales/pl-PL.json +525 -0
  340. package/dist/packages/excalidraw/locales/pt-BR.json +525 -0
  341. package/dist/packages/excalidraw/locales/pt-PT.json +525 -0
  342. package/dist/packages/excalidraw/locales/ro-RO.json +525 -0
  343. package/dist/packages/excalidraw/locales/ru-RU.json +525 -0
  344. package/dist/packages/excalidraw/locales/si-LK.json +525 -0
  345. package/dist/packages/excalidraw/locales/sk-SK.json +525 -0
  346. package/dist/packages/excalidraw/locales/sl-SI.json +525 -0
  347. package/dist/packages/excalidraw/locales/sv-SE.json +525 -0
  348. package/dist/packages/excalidraw/locales/ta-IN.json +525 -0
  349. package/dist/packages/excalidraw/locales/th-TH.json +525 -0
  350. package/dist/packages/excalidraw/locales/tr-TR.json +525 -0
  351. package/dist/packages/excalidraw/locales/uk-UA.json +525 -0
  352. package/dist/packages/excalidraw/locales/vi-VN.json +525 -0
  353. package/dist/packages/excalidraw/locales/zh-CN.json +525 -0
  354. package/dist/packages/excalidraw/locales/zh-HK.json +525 -0
  355. package/dist/packages/excalidraw/locales/zh-TW.json +525 -0
  356. package/dist/packages/excalidraw/math.js +364 -0
  357. package/dist/packages/excalidraw/points.js +38 -0
  358. package/dist/packages/excalidraw/polyfill.js +32 -0
  359. package/dist/packages/excalidraw/random.js +11 -0
  360. package/dist/packages/excalidraw/renderer/renderElement.js +871 -0
  361. package/dist/packages/excalidraw/renderer/renderScene.js +859 -0
  362. package/dist/packages/excalidraw/renderer/renderSnaps.js +114 -0
  363. package/dist/packages/excalidraw/renderer/roundRect.js +28 -0
  364. package/dist/packages/excalidraw/scene/Fonts.js +71 -0
  365. package/dist/packages/excalidraw/scene/Renderer.js +65 -0
  366. package/dist/packages/excalidraw/scene/Scene.js +230 -0
  367. package/dist/packages/excalidraw/scene/Shape.js +322 -0
  368. package/dist/packages/excalidraw/scene/ShapeCache.js +42 -0
  369. package/dist/packages/excalidraw/scene/comparisons.js +67 -0
  370. package/dist/packages/excalidraw/scene/export.js +304 -0
  371. package/dist/packages/excalidraw/scene/index.js +5 -0
  372. package/dist/packages/excalidraw/scene/scroll.js +35 -0
  373. package/dist/packages/excalidraw/scene/scrollbars.js +85 -0
  374. package/dist/packages/excalidraw/scene/selection.js +134 -0
  375. package/dist/packages/excalidraw/scene/types.js +1 -0
  376. package/dist/packages/excalidraw/scene/zoom.js +22 -0
  377. package/dist/packages/excalidraw/shapes.js +84 -0
  378. package/dist/packages/excalidraw/snapping.js +838 -0
  379. package/dist/packages/excalidraw/types.js +6 -0
  380. package/dist/packages/excalidraw/utility-types.js +1 -0
  381. package/dist/packages/excalidraw/utils.js +668 -0
  382. package/dist/packages/excalidraw/zindex.js +349 -0
  383. package/dist/packages/utils/bbox.js +42 -0
  384. package/dist/packages/utils/export.js +109 -0
  385. package/dist/packages/utils/withinBounds.js +125 -0
  386. package/dist/public/fonts/Assistant-Bold.woff2 +0 -0
  387. package/dist/public/fonts/Assistant-Medium.woff2 +0 -0
  388. package/dist/public/fonts/Assistant-Regular.woff2 +0 -0
  389. package/dist/public/fonts/Assistant-SemiBold.woff2 +0 -0
  390. package/dist/public/fonts/Cascadia.ttf +0 -0
  391. package/dist/public/fonts/Cascadia.woff2 +0 -0
  392. package/dist/public/fonts/FG_Virgil.ttf +0 -0
  393. package/dist/public/fonts/FG_Virgil.woff2 +0 -0
  394. package/dist/public/fonts/Virgil.woff2 +0 -0
  395. package/dist/public/fonts/fonts.css +38 -0
  396. package/package.json +8 -5
  397. package/dist/index.css +0 -5796
  398. package/dist/index.js +0 -71898
  399. /package/{types → dist/packages}/excalidraw/actions/actionAddToLibrary.d.ts +0 -0
  400. /package/{types → dist/packages}/excalidraw/actions/actionAlign.d.ts +0 -0
  401. /package/{types → dist/packages}/excalidraw/actions/actionBoundText.d.ts +0 -0
  402. /package/{types → dist/packages}/excalidraw/actions/actionCanvas.d.ts +0 -0
  403. /package/{types → dist/packages}/excalidraw/actions/actionClipboard.d.ts +0 -0
  404. /package/{types → dist/packages}/excalidraw/actions/actionDeleteSelected.d.ts +0 -0
  405. /package/{types → dist/packages}/excalidraw/actions/actionDistribute.d.ts +0 -0
  406. /package/{types → dist/packages}/excalidraw/actions/actionDuplicateSelection.d.ts +0 -0
  407. /package/{types → dist/packages}/excalidraw/actions/actionElementLock.d.ts +0 -0
  408. /package/{types → dist/packages}/excalidraw/actions/actionExport.d.ts +0 -0
  409. /package/{types → dist/packages}/excalidraw/actions/actionFinalize.d.ts +0 -0
  410. /package/{types → dist/packages}/excalidraw/actions/actionFlip.d.ts +0 -0
  411. /package/{types → dist/packages}/excalidraw/actions/actionFrame.d.ts +0 -0
  412. /package/{types → dist/packages}/excalidraw/actions/actionGroup.d.ts +0 -0
  413. /package/{types → dist/packages}/excalidraw/actions/actionHistory.d.ts +0 -0
  414. /package/{types → dist/packages}/excalidraw/actions/actionLinearEditor.d.ts +0 -0
  415. /package/{types → dist/packages}/excalidraw/actions/actionMenu.d.ts +0 -0
  416. /package/{types → dist/packages}/excalidraw/actions/actionNavigate.d.ts +0 -0
  417. /package/{types → dist/packages}/excalidraw/actions/actionProperties.d.ts +0 -0
  418. /package/{types → dist/packages}/excalidraw/actions/actionSelectAll.d.ts +0 -0
  419. /package/{types → dist/packages}/excalidraw/actions/actionStyles.d.ts +0 -0
  420. /package/{types → dist/packages}/excalidraw/actions/actionToggleGridMode.d.ts +0 -0
  421. /package/{types → dist/packages}/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +0 -0
  422. /package/{types → dist/packages}/excalidraw/actions/actionToggleStats.d.ts +0 -0
  423. /package/{types → dist/packages}/excalidraw/actions/actionToggleViewMode.d.ts +0 -0
  424. /package/{types → dist/packages}/excalidraw/actions/actionToggleZenMode.d.ts +0 -0
  425. /package/{types → dist/packages}/excalidraw/actions/actionZindex.d.ts +0 -0
  426. /package/{types → dist/packages}/excalidraw/actions/index.d.ts +0 -0
  427. /package/{types → dist/packages}/excalidraw/actions/manager.d.ts +0 -0
  428. /package/{types → dist/packages}/excalidraw/actions/register.d.ts +0 -0
  429. /package/{types → dist/packages}/excalidraw/actions/shortcuts.d.ts +0 -0
  430. /package/{types → dist/packages}/excalidraw/actions/types.d.ts +0 -0
  431. /package/{types/excalidraw/index-node.d.ts → dist/packages/excalidraw/actions/types.js} +0 -0
  432. /package/{types → dist/packages}/excalidraw/align.d.ts +0 -0
  433. /package/{types → dist/packages}/excalidraw/analytics.d.ts +0 -0
  434. /package/{types → dist/packages}/excalidraw/appState.d.ts +0 -0
  435. /package/{types → dist/packages}/excalidraw/charts.d.ts +0 -0
  436. /package/{types → dist/packages}/excalidraw/clients.d.ts +0 -0
  437. /package/{types → dist/packages}/excalidraw/clipboard.d.ts +0 -0
  438. /package/{types → dist/packages}/excalidraw/colors.d.ts +0 -0
  439. /package/{types → dist/packages}/excalidraw/components/Actions.d.ts +0 -0
  440. /package/{types → dist/packages}/excalidraw/components/ActiveConfirmDialog.d.ts +0 -0
  441. /package/{types → dist/packages}/excalidraw/components/App.d.ts +0 -0
  442. /package/{types → dist/packages}/excalidraw/components/Avatar.d.ts +0 -0
  443. /package/{types → dist/packages}/excalidraw/components/BraveMeasureTextError.d.ts +0 -0
  444. /package/{types → dist/packages}/excalidraw/components/Button.d.ts +0 -0
  445. /package/{types → dist/packages}/excalidraw/components/ButtonIconCycle.d.ts +0 -0
  446. /package/{types → dist/packages}/excalidraw/components/ButtonIconSelect.d.ts +0 -0
  447. /package/{types → dist/packages}/excalidraw/components/ButtonSelect.d.ts +0 -0
  448. /package/{types → dist/packages}/excalidraw/components/Card.d.ts +0 -0
  449. /package/{types → dist/packages}/excalidraw/components/CheckboxItem.d.ts +0 -0
  450. /package/{types → dist/packages}/excalidraw/components/ColorPicker/ColorInput.d.ts +0 -0
  451. /package/{types → dist/packages}/excalidraw/components/ColorPicker/ColorPicker.d.ts +0 -0
  452. /package/{types → dist/packages}/excalidraw/components/ColorPicker/CustomColorList.d.ts +0 -0
  453. /package/{types → dist/packages}/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +0 -0
  454. /package/{types → dist/packages}/excalidraw/components/ColorPicker/Picker.d.ts +0 -0
  455. /package/{types → dist/packages}/excalidraw/components/ColorPicker/PickerColorList.d.ts +0 -0
  456. /package/{types → dist/packages}/excalidraw/components/ColorPicker/PickerHeading.d.ts +0 -0
  457. /package/{types → dist/packages}/excalidraw/components/ColorPicker/ShadeList.d.ts +0 -0
  458. /package/{types → dist/packages}/excalidraw/components/ColorPicker/TopPicks.d.ts +0 -0
  459. /package/{types → dist/packages}/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +0 -0
  460. /package/{types → dist/packages}/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +0 -0
  461. /package/{types → dist/packages}/excalidraw/components/ConfirmDialog.d.ts +0 -0
  462. /package/{types → dist/packages}/excalidraw/components/ContextMenu.d.ts +0 -0
  463. /package/{types → dist/packages}/excalidraw/components/DarkModeToggle.d.ts +0 -0
  464. /package/{types → dist/packages}/excalidraw/components/DefaultSidebar.d.ts +0 -0
  465. /package/{types → dist/packages}/excalidraw/components/Dialog.d.ts +0 -0
  466. /package/{types → dist/packages}/excalidraw/components/DialogActionButton.d.ts +0 -0
  467. /package/{types → dist/packages}/excalidraw/components/ErrorDialog.d.ts +0 -0
  468. /package/{types → dist/packages}/excalidraw/components/ExcalidrawLogo.d.ts +0 -0
  469. /package/{types → dist/packages}/excalidraw/components/EyeDropper.d.ts +0 -0
  470. /package/{types → dist/packages}/excalidraw/components/FilledButton.d.ts +0 -0
  471. /package/{types → dist/packages}/excalidraw/components/FixedSideContainer.d.ts +0 -0
  472. /package/{types → dist/packages}/excalidraw/components/FollowMode/FollowMode.d.ts +0 -0
  473. /package/{types → dist/packages}/excalidraw/components/HandButton.d.ts +0 -0
  474. /package/{types → dist/packages}/excalidraw/components/HelpButton.d.ts +0 -0
  475. /package/{types → dist/packages}/excalidraw/components/HelpDialog.d.ts +0 -0
  476. /package/{types → dist/packages}/excalidraw/components/HintViewer.d.ts +0 -0
  477. /package/{types → dist/packages}/excalidraw/components/IconPicker.d.ts +0 -0
  478. /package/{types → dist/packages}/excalidraw/components/ImageExportDialog.d.ts +0 -0
  479. /package/{types → dist/packages}/excalidraw/components/InitializeApp.d.ts +0 -0
  480. /package/{types → dist/packages}/excalidraw/components/InlineIcon.d.ts +0 -0
  481. /package/{types → dist/packages}/excalidraw/components/Island.d.ts +0 -0
  482. /package/{types → dist/packages}/excalidraw/components/JSONExportDialog.d.ts +0 -0
  483. /package/{types → dist/packages}/excalidraw/components/LaserTool/LaserPathManager.d.ts +0 -0
  484. /package/{types → dist/packages}/excalidraw/components/LaserTool/LaserPointerButton.d.ts +0 -0
  485. /package/{types → dist/packages}/excalidraw/components/LaserTool/LaserTool.d.ts +0 -0
  486. /package/{types → dist/packages}/excalidraw/components/LayerUI.d.ts +0 -0
  487. /package/{types → dist/packages}/excalidraw/components/LibraryMenu.d.ts +0 -0
  488. /package/{types → dist/packages}/excalidraw/components/LibraryMenuBrowseButton.d.ts +0 -0
  489. /package/{types → dist/packages}/excalidraw/components/LibraryMenuControlButtons.d.ts +0 -0
  490. /package/{types → dist/packages}/excalidraw/components/LibraryMenuHeaderContent.d.ts +0 -0
  491. /package/{types → dist/packages}/excalidraw/components/LibraryMenuItems.d.ts +0 -0
  492. /package/{types → dist/packages}/excalidraw/components/LibraryMenuSection.d.ts +0 -0
  493. /package/{types → dist/packages}/excalidraw/components/LibraryUnit.d.ts +0 -0
  494. /package/{types → dist/packages}/excalidraw/components/LoadingMessage.d.ts +0 -0
  495. /package/{types → dist/packages}/excalidraw/components/LockButton.d.ts +0 -0
  496. /package/{types → dist/packages}/excalidraw/components/MagicButton.d.ts +0 -0
  497. /package/{types → dist/packages}/excalidraw/components/MagicSettings.d.ts +0 -0
  498. /package/{types → dist/packages}/excalidraw/components/MobileMenu.d.ts +0 -0
  499. /package/{types → dist/packages}/excalidraw/components/Modal.d.ts +0 -0
  500. /package/{types → dist/packages}/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +0 -0
  501. /package/{types → dist/packages}/excalidraw/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +0 -0
  502. /package/{types → dist/packages}/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +0 -0
  503. /package/{types → dist/packages}/excalidraw/components/Paragraph.d.ts +0 -0
  504. /package/{types → dist/packages}/excalidraw/components/PasteChartDialog.d.ts +0 -0
  505. /package/{types → dist/packages}/excalidraw/components/PenModeButton.d.ts +0 -0
  506. /package/{types → dist/packages}/excalidraw/components/Popover.d.ts +0 -0
  507. /package/{types → dist/packages}/excalidraw/components/ProjectName.d.ts +0 -0
  508. /package/{types → dist/packages}/excalidraw/components/PublishLibrary.d.ts +0 -0
  509. /package/{types → dist/packages}/excalidraw/components/RadioGroup.d.ts +0 -0
  510. /package/{types → dist/packages}/excalidraw/components/Section.d.ts +0 -0
  511. /package/{types → dist/packages}/excalidraw/components/ShareableLinkDialog.d.ts +0 -0
  512. /package/{types → dist/packages}/excalidraw/components/Sidebar/Sidebar.d.ts +0 -0
  513. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarHeader.d.ts +0 -0
  514. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarTab.d.ts +0 -0
  515. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +0 -0
  516. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +0 -0
  517. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarTabs.d.ts +0 -0
  518. /package/{types → dist/packages}/excalidraw/components/Sidebar/SidebarTrigger.d.ts +0 -0
  519. /package/{types → dist/packages}/excalidraw/components/Sidebar/common.d.ts +0 -0
  520. /package/{types → dist/packages}/excalidraw/components/Spinner.d.ts +0 -0
  521. /package/{types → dist/packages}/excalidraw/components/Stack.d.ts +0 -0
  522. /package/{types → dist/packages}/excalidraw/components/Stats.d.ts +0 -0
  523. /package/{types → dist/packages}/excalidraw/components/Switch.d.ts +0 -0
  524. /package/{types → dist/packages}/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +0 -0
  525. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialog.d.ts +0 -0
  526. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +0 -0
  527. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +0 -0
  528. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +0 -0
  529. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +0 -0
  530. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogSubmitShortcut.d.ts +0 -0
  531. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +0 -0
  532. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +0 -0
  533. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +0 -0
  534. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +0 -0
  535. /package/{types → dist/packages}/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -0
  536. /package/{types → dist/packages}/excalidraw/components/TTDDialog/common.d.ts +0 -0
  537. /package/{types → dist/packages}/excalidraw/components/TextField.d.ts +0 -0
  538. /package/{types → dist/packages}/excalidraw/components/Toast.d.ts +0 -0
  539. /package/{types → dist/packages}/excalidraw/components/ToolButton.d.ts +0 -0
  540. /package/{types → dist/packages}/excalidraw/components/Tooltip.d.ts +0 -0
  541. /package/{types → dist/packages}/excalidraw/components/Trans.d.ts +0 -0
  542. /package/{types → dist/packages}/excalidraw/components/UserList.d.ts +0 -0
  543. /package/{types → dist/packages}/excalidraw/components/canvases/InteractiveCanvas.d.ts +0 -0
  544. /package/{types → dist/packages}/excalidraw/components/canvases/StaticCanvas.d.ts +0 -0
  545. /package/{types → dist/packages}/excalidraw/components/canvases/index.d.ts +0 -0
  546. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +0 -0
  547. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +0 -0
  548. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +0 -0
  549. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +0 -0
  550. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +0 -0
  551. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +0 -0
  552. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +0 -0
  553. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuSeparator.d.ts +0 -0
  554. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +0 -0
  555. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/common.d.ts +0 -0
  556. /package/{types → dist/packages}/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +0 -0
  557. /package/{types → dist/packages}/excalidraw/components/footer/Footer.d.ts +0 -0
  558. /package/{types → dist/packages}/excalidraw/components/footer/FooterCenter.d.ts +0 -0
  559. /package/{types → dist/packages}/excalidraw/components/hoc/withInternalFallback.d.ts +0 -0
  560. /package/{types → dist/packages}/excalidraw/components/icons.d.ts +0 -0
  561. /package/{types → dist/packages}/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -0
  562. /package/{types → dist/packages}/excalidraw/components/main-menu/DefaultItems.d.ts +0 -0
  563. /package/{types → dist/packages}/excalidraw/components/main-menu/MainMenu.d.ts +0 -0
  564. /package/{types → dist/packages}/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -0
  565. /package/{types → dist/packages}/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -0
  566. /package/{types → dist/packages}/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -0
  567. /package/{types → dist/packages}/excalidraw/constants.d.ts +0 -0
  568. /package/{types → dist/packages}/excalidraw/context/tunnels.d.ts +0 -0
  569. /package/{types → dist/packages}/excalidraw/context/ui-appState.d.ts +0 -0
  570. /package/{types → dist/packages}/excalidraw/cursor.d.ts +0 -0
  571. /package/{types → dist/packages}/excalidraw/data/EditorLocalStorage.d.ts +0 -0
  572. /package/{types → dist/packages}/excalidraw/data/ai/types.d.ts +0 -0
  573. /package/{types → dist/packages}/excalidraw/data/blob.d.ts +0 -0
  574. /package/{types → dist/packages}/excalidraw/data/encode.d.ts +0 -0
  575. /package/{types → dist/packages}/excalidraw/data/encryption.d.ts +0 -0
  576. /package/{types → dist/packages}/excalidraw/data/filesystem.d.ts +0 -0
  577. /package/{types → dist/packages}/excalidraw/data/image.d.ts +0 -0
  578. /package/{types → dist/packages}/excalidraw/data/index.d.ts +0 -0
  579. /package/{types → dist/packages}/excalidraw/data/json.d.ts +0 -0
  580. /package/{types → dist/packages}/excalidraw/data/library.d.ts +0 -0
  581. /package/{types → dist/packages}/excalidraw/data/magic.d.ts +0 -0
  582. /package/{types → dist/packages}/excalidraw/data/resave.d.ts +0 -0
  583. /package/{types → dist/packages}/excalidraw/data/restore.d.ts +0 -0
  584. /package/{types → dist/packages}/excalidraw/data/transform.d.ts +0 -0
  585. /package/{types → dist/packages}/excalidraw/data/types.d.ts +0 -0
  586. /package/{types → dist/packages}/excalidraw/data/url.d.ts +0 -0
  587. /package/{types → dist/packages}/excalidraw/distribute.d.ts +0 -0
  588. /package/{types → dist/packages}/excalidraw/element/ElementCanvasButtons.d.ts +0 -0
  589. /package/{types → dist/packages}/excalidraw/element/Hyperlink.d.ts +0 -0
  590. /package/{types → dist/packages}/excalidraw/element/binding.d.ts +0 -0
  591. /package/{types → dist/packages}/excalidraw/element/bounds.d.ts +0 -0
  592. /package/{types → dist/packages}/excalidraw/element/collision.d.ts +0 -0
  593. /package/{types → dist/packages}/excalidraw/element/dragElements.d.ts +0 -0
  594. /package/{types → dist/packages}/excalidraw/element/embeddable.d.ts +0 -0
  595. /package/{types → dist/packages}/excalidraw/element/image.d.ts +0 -0
  596. /package/{types → dist/packages}/excalidraw/element/index.d.ts +0 -0
  597. /package/{types → dist/packages}/excalidraw/element/linearElementEditor.d.ts +0 -0
  598. /package/{types → dist/packages}/excalidraw/element/mutateElement.d.ts +0 -0
  599. /package/{types → dist/packages}/excalidraw/element/newElement.d.ts +0 -0
  600. /package/{types → dist/packages}/excalidraw/element/resizeElements.d.ts +0 -0
  601. /package/{types → dist/packages}/excalidraw/element/resizeTest.d.ts +0 -0
  602. /package/{types → dist/packages}/excalidraw/element/showSelectedShapeActions.d.ts +0 -0
  603. /package/{types → dist/packages}/excalidraw/element/sizeHelpers.d.ts +0 -0
  604. /package/{types → dist/packages}/excalidraw/element/sortElements.d.ts +0 -0
  605. /package/{types → dist/packages}/excalidraw/element/textElement.d.ts +0 -0
  606. /package/{types → dist/packages}/excalidraw/element/textWysiwyg.d.ts +0 -0
  607. /package/{types → dist/packages}/excalidraw/element/transformHandles.d.ts +0 -0
  608. /package/{types → dist/packages}/excalidraw/element/typeChecks.d.ts +0 -0
  609. /package/{types → dist/packages}/excalidraw/element/types.d.ts +0 -0
  610. /package/{types → dist/packages}/excalidraw/emitter.d.ts +0 -0
  611. /package/{types → dist/packages}/excalidraw/errors.d.ts +0 -0
  612. /package/{types → dist/packages}/excalidraw/frame.d.ts +0 -0
  613. /package/{types → dist/packages}/excalidraw/ga.d.ts +0 -0
  614. /package/{types → dist/packages}/excalidraw/gadirections.d.ts +0 -0
  615. /package/{types → dist/packages}/excalidraw/galines.d.ts +0 -0
  616. /package/{types → dist/packages}/excalidraw/gapoints.d.ts +0 -0
  617. /package/{types → dist/packages}/excalidraw/gatransforms.d.ts +0 -0
  618. /package/{types → dist/packages}/excalidraw/gesture.d.ts +0 -0
  619. /package/{types → dist/packages}/excalidraw/groups.d.ts +0 -0
  620. /package/{types → dist/packages}/excalidraw/history.d.ts +0 -0
  621. /package/{types → dist/packages}/excalidraw/hooks/useCallbackRefState.d.ts +0 -0
  622. /package/{types → dist/packages}/excalidraw/hooks/useCreatePortalContainer.d.ts +0 -0
  623. /package/{types → dist/packages}/excalidraw/hooks/useLibraryItemSvg.d.ts +0 -0
  624. /package/{types → dist/packages}/excalidraw/hooks/useOutsideClick.d.ts +0 -0
  625. /package/{types → dist/packages}/excalidraw/hooks/useScrollPosition.d.ts +0 -0
  626. /package/{types → dist/packages}/excalidraw/hooks/useStable.d.ts +0 -0
  627. /package/{types → dist/packages}/excalidraw/hooks/useTransition.d.ts +0 -0
  628. /package/{types → dist/packages}/excalidraw/i18n.d.ts +0 -0
  629. /package/{types → dist/packages}/excalidraw/jotai.d.ts +0 -0
  630. /package/{types → dist/packages}/excalidraw/keys.d.ts +0 -0
  631. /package/{types → dist/packages}/excalidraw/math.d.ts +0 -0
  632. /package/{types → dist/packages}/excalidraw/points.d.ts +0 -0
  633. /package/{types → dist/packages}/excalidraw/polyfill.d.ts +0 -0
  634. /package/{types → dist/packages}/excalidraw/random.d.ts +0 -0
  635. /package/{types → dist/packages}/excalidraw/renderer/renderElement.d.ts +0 -0
  636. /package/{types → dist/packages}/excalidraw/renderer/renderScene.d.ts +0 -0
  637. /package/{types → dist/packages}/excalidraw/renderer/renderSnaps.d.ts +0 -0
  638. /package/{types → dist/packages}/excalidraw/renderer/roundRect.d.ts +0 -0
  639. /package/{types → dist/packages}/excalidraw/scene/Fonts.d.ts +0 -0
  640. /package/{types → dist/packages}/excalidraw/scene/Renderer.d.ts +0 -0
  641. /package/{types → dist/packages}/excalidraw/scene/Scene.d.ts +0 -0
  642. /package/{types → dist/packages}/excalidraw/scene/Shape.d.ts +0 -0
  643. /package/{types → dist/packages}/excalidraw/scene/ShapeCache.d.ts +0 -0
  644. /package/{types → dist/packages}/excalidraw/scene/comparisons.d.ts +0 -0
  645. /package/{types → dist/packages}/excalidraw/scene/export.d.ts +0 -0
  646. /package/{types → dist/packages}/excalidraw/scene/index.d.ts +0 -0
  647. /package/{types → dist/packages}/excalidraw/scene/scroll.d.ts +0 -0
  648. /package/{types → dist/packages}/excalidraw/scene/scrollbars.d.ts +0 -0
  649. /package/{types → dist/packages}/excalidraw/scene/selection.d.ts +0 -0
  650. /package/{types → dist/packages}/excalidraw/scene/types.d.ts +0 -0
  651. /package/{types → dist/packages}/excalidraw/scene/zoom.d.ts +0 -0
  652. /package/{types → dist/packages}/excalidraw/shapes.d.ts +0 -0
  653. /package/{types → dist/packages}/excalidraw/snapping.d.ts +0 -0
  654. /package/{types → dist/packages}/excalidraw/types.d.ts +0 -0
  655. /package/{types → dist/packages}/excalidraw/utility-types.d.ts +0 -0
  656. /package/{types → dist/packages}/excalidraw/utils.d.ts +0 -0
  657. /package/{types → dist/packages}/excalidraw/zindex.d.ts +0 -0
  658. /package/{types → dist/packages}/utils/bbox.d.ts +0 -0
  659. /package/{types → dist/packages}/utils/export.d.ts +0 -0
  660. /package/{types → dist/packages}/utils/withinBounds.d.ts +0 -0
@@ -0,0 +1,378 @@
1
+ import { nanoid } from "nanoid";
2
+ import { cleanAppStateForExport } from "../appState";
3
+ import { IMAGE_MIME_TYPES, MIME_TYPES } from "../constants";
4
+ import { clearElementsForExport } from "../element";
5
+ import { CanvasError, ImageSceneDataError } from "../errors";
6
+ import { t } from "../i18n";
7
+ import { calculateScrollCenter } from "../scene";
8
+ import { bytesToHexString, isPromiseLike } from "../utils";
9
+ import { nativeFileSystemSupported } from "./filesystem";
10
+ import { isValidExcalidrawData, isValidLibrary } from "./json";
11
+ import { restore, restoreLibraryItems } from "./restore";
12
+ const parseFileContents = async (blob) => {
13
+ let contents;
14
+ if (blob.type === MIME_TYPES.png) {
15
+ try {
16
+ return await (await import("./image")).decodePngMetadata(blob);
17
+ }
18
+ catch (error) {
19
+ if (error.message === "INVALID") {
20
+ throw new ImageSceneDataError(t("alerts.imageDoesNotContainScene"), "IMAGE_NOT_CONTAINS_SCENE_DATA");
21
+ }
22
+ else {
23
+ throw new ImageSceneDataError(t("alerts.cannotRestoreFromImage"));
24
+ }
25
+ }
26
+ }
27
+ else {
28
+ if ("text" in Blob) {
29
+ contents = await blob.text();
30
+ }
31
+ else {
32
+ contents = await new Promise((resolve) => {
33
+ const reader = new FileReader();
34
+ reader.readAsText(blob, "utf8");
35
+ reader.onloadend = () => {
36
+ if (reader.readyState === FileReader.DONE) {
37
+ resolve(reader.result);
38
+ }
39
+ };
40
+ });
41
+ }
42
+ if (blob.type === MIME_TYPES.svg) {
43
+ try {
44
+ return await (await import("./image")).decodeSvgMetadata({
45
+ svg: contents,
46
+ });
47
+ }
48
+ catch (error) {
49
+ if (error.message === "INVALID") {
50
+ throw new ImageSceneDataError(t("alerts.imageDoesNotContainScene"), "IMAGE_NOT_CONTAINS_SCENE_DATA");
51
+ }
52
+ else {
53
+ throw new ImageSceneDataError(t("alerts.cannotRestoreFromImage"));
54
+ }
55
+ }
56
+ }
57
+ }
58
+ return contents;
59
+ };
60
+ export const getMimeType = (blob) => {
61
+ let name;
62
+ if (typeof blob === "string") {
63
+ name = blob;
64
+ }
65
+ else {
66
+ if (blob.type) {
67
+ return blob.type;
68
+ }
69
+ name = blob.name || "";
70
+ }
71
+ if (/\.(excalidraw|json)$/.test(name)) {
72
+ return MIME_TYPES.json;
73
+ }
74
+ else if (/\.png$/.test(name)) {
75
+ return MIME_TYPES.png;
76
+ }
77
+ else if (/\.jpe?g$/.test(name)) {
78
+ return MIME_TYPES.jpg;
79
+ }
80
+ else if (/\.svg$/.test(name)) {
81
+ return MIME_TYPES.svg;
82
+ }
83
+ return "";
84
+ };
85
+ export const getFileHandleType = (handle) => {
86
+ if (!handle) {
87
+ return null;
88
+ }
89
+ return handle.name.match(/\.(json|excalidraw|png|svg)$/)?.[1] || null;
90
+ };
91
+ export const isImageFileHandleType = (type) => {
92
+ return type === "png" || type === "svg";
93
+ };
94
+ export const isImageFileHandle = (handle) => {
95
+ const type = getFileHandleType(handle);
96
+ return type === "png" || type === "svg";
97
+ };
98
+ export const isSupportedImageFile = (blob) => {
99
+ const { type } = blob || {};
100
+ return !!type && Object.values(IMAGE_MIME_TYPES).includes(type);
101
+ };
102
+ export const loadSceneOrLibraryFromBlob = async (blob,
103
+ /** @see restore.localAppState */
104
+ localAppState, localElements,
105
+ /** FileSystemHandle. Defaults to `blob.handle` if defined, otherwise null. */
106
+ fileHandle) => {
107
+ const contents = await parseFileContents(blob);
108
+ let data;
109
+ try {
110
+ try {
111
+ data = JSON.parse(contents);
112
+ }
113
+ catch (error) {
114
+ if (isSupportedImageFile(blob)) {
115
+ throw new ImageSceneDataError(t("alerts.imageDoesNotContainScene"), "IMAGE_NOT_CONTAINS_SCENE_DATA");
116
+ }
117
+ throw error;
118
+ }
119
+ if (isValidExcalidrawData(data)) {
120
+ return {
121
+ type: MIME_TYPES.excalidraw,
122
+ data: restore({
123
+ elements: clearElementsForExport(data.elements || []),
124
+ appState: {
125
+ theme: localAppState?.theme,
126
+ fileHandle: fileHandle || blob.handle || null,
127
+ ...cleanAppStateForExport(data.appState || {}),
128
+ ...(localAppState
129
+ ? calculateScrollCenter(data.elements || [], localAppState)
130
+ : {}),
131
+ },
132
+ files: data.files,
133
+ }, localAppState, localElements, { repairBindings: true, refreshDimensions: false }),
134
+ };
135
+ }
136
+ else if (isValidLibrary(data)) {
137
+ return {
138
+ type: MIME_TYPES.excalidrawlib,
139
+ data,
140
+ };
141
+ }
142
+ throw new Error(t("alerts.couldNotLoadInvalidFile"));
143
+ }
144
+ catch (error) {
145
+ if (error instanceof ImageSceneDataError) {
146
+ throw error;
147
+ }
148
+ throw new Error(t("alerts.couldNotLoadInvalidFile"));
149
+ }
150
+ };
151
+ export const loadFromBlob = async (blob,
152
+ /** @see restore.localAppState */
153
+ localAppState, localElements,
154
+ /** FileSystemHandle. Defaults to `blob.handle` if defined, otherwise null. */
155
+ fileHandle) => {
156
+ const ret = await loadSceneOrLibraryFromBlob(blob, localAppState, localElements, fileHandle);
157
+ if (ret.type !== MIME_TYPES.excalidraw) {
158
+ throw new Error(t("alerts.couldNotLoadInvalidFile"));
159
+ }
160
+ return ret.data;
161
+ };
162
+ export const parseLibraryJSON = (json, defaultStatus = "unpublished") => {
163
+ const data = JSON.parse(json);
164
+ if (!isValidLibrary(data)) {
165
+ throw new Error("Invalid library");
166
+ }
167
+ const libraryItems = data.libraryItems || data.library;
168
+ return restoreLibraryItems(libraryItems, defaultStatus);
169
+ };
170
+ export const loadLibraryFromBlob = async (blob, defaultStatus = "unpublished") => {
171
+ return parseLibraryJSON(await parseFileContents(blob), defaultStatus);
172
+ };
173
+ export const canvasToBlob = async (canvas) => {
174
+ return new Promise(async (resolve, reject) => {
175
+ try {
176
+ if (isPromiseLike(canvas)) {
177
+ canvas = await canvas;
178
+ }
179
+ canvas.toBlob((blob) => {
180
+ if (!blob) {
181
+ return reject(new CanvasError(t("canvasError.canvasTooBig"), "CANVAS_POSSIBLY_TOO_BIG"));
182
+ }
183
+ resolve(blob);
184
+ });
185
+ }
186
+ catch (error) {
187
+ reject(error);
188
+ }
189
+ });
190
+ };
191
+ /** generates SHA-1 digest from supplied file (if not supported, falls back
192
+ to a 40-char base64 random id) */
193
+ export const generateIdFromFile = async (file) => {
194
+ try {
195
+ const hashBuffer = await window.crypto.subtle.digest("SHA-1", await blobToArrayBuffer(file));
196
+ return bytesToHexString(new Uint8Array(hashBuffer));
197
+ }
198
+ catch (error) {
199
+ console.error(error);
200
+ // length 40 to align with the HEX length of SHA-1 (which is 160 bit)
201
+ return nanoid(40);
202
+ }
203
+ };
204
+ export const getDataURL = async (file) => {
205
+ return new Promise((resolve, reject) => {
206
+ const reader = new FileReader();
207
+ reader.onload = () => {
208
+ const dataURL = reader.result;
209
+ resolve(dataURL);
210
+ };
211
+ reader.onerror = (error) => reject(error);
212
+ reader.readAsDataURL(file);
213
+ });
214
+ };
215
+ export const dataURLToFile = (dataURL, filename = "") => {
216
+ const dataIndexStart = dataURL.indexOf(",");
217
+ const byteString = atob(dataURL.slice(dataIndexStart + 1));
218
+ const mimeType = dataURL.slice(0, dataIndexStart).split(":")[1].split(";")[0];
219
+ const ab = new ArrayBuffer(byteString.length);
220
+ const ia = new Uint8Array(ab);
221
+ for (let i = 0; i < byteString.length; i++) {
222
+ ia[i] = byteString.charCodeAt(i);
223
+ }
224
+ return new File([ab], filename, { type: mimeType });
225
+ };
226
+ export const resizeImageFile = async (file, opts) => {
227
+ // SVG files shouldn't a can't be resized
228
+ if (file.type === MIME_TYPES.svg) {
229
+ return file;
230
+ }
231
+ const [pica, imageBlobReduce] = await Promise.all([
232
+ import("pica").then((res) => res.default),
233
+ // a wrapper for pica for better API
234
+ import("image-blob-reduce").then((res) => res.default),
235
+ ]);
236
+ // CRA's minification settings break pica in WebWorkers, so let's disable
237
+ // them for now
238
+ // https://github.com/nodeca/image-blob-reduce/issues/21#issuecomment-757365513
239
+ const reduce = imageBlobReduce({
240
+ pica: pica({ features: ["js", "wasm"] }),
241
+ });
242
+ if (opts.outputType) {
243
+ const { outputType } = opts;
244
+ reduce._create_blob = function (env) {
245
+ return this.pica.toBlob(env.out_canvas, outputType, 0.8).then((blob) => {
246
+ env.out_blob = blob;
247
+ return env;
248
+ });
249
+ };
250
+ }
251
+ if (!isSupportedImageFile(file)) {
252
+ throw new Error(t("errors.unsupportedFileType"));
253
+ }
254
+ return new File([await reduce.toBlob(file, { max: opts.maxWidthOrHeight })], file.name, {
255
+ type: opts.outputType || file.type,
256
+ });
257
+ };
258
+ export const SVGStringToFile = (SVGString, filename = "") => {
259
+ return new File([new TextEncoder().encode(SVGString)], filename, {
260
+ type: MIME_TYPES.svg,
261
+ });
262
+ };
263
+ export const ImageURLToFile = async (imageUrl, filename = "") => {
264
+ let response;
265
+ try {
266
+ response = await fetch(imageUrl);
267
+ }
268
+ catch (error) {
269
+ throw new Error(t("errors.failedToFetchImage"));
270
+ }
271
+ if (!response.ok) {
272
+ throw new Error(t("errors.failedToFetchImage"));
273
+ }
274
+ const blob = await response.blob();
275
+ if (blob.type && isSupportedImageFile(blob)) {
276
+ const name = filename || blob.name || "";
277
+ return new File([blob], name, { type: blob.type });
278
+ }
279
+ throw new Error(t("errors.unsupportedFileType"));
280
+ };
281
+ export const getFileFromEvent = async (event) => {
282
+ const file = event.dataTransfer.files.item(0);
283
+ const fileHandle = await getFileHandle(event);
284
+ return { file: file ? await normalizeFile(file) : null, fileHandle };
285
+ };
286
+ export const getFileHandle = async (event) => {
287
+ if (nativeFileSystemSupported) {
288
+ try {
289
+ const item = event.dataTransfer.items[0];
290
+ const handle = (await item.getAsFileSystemHandle()) || null;
291
+ return handle;
292
+ }
293
+ catch (error) {
294
+ console.warn(error.name, error.message);
295
+ return null;
296
+ }
297
+ }
298
+ return null;
299
+ };
300
+ /**
301
+ * attempts to detect if a buffer is a valid image by checking its leading bytes
302
+ */
303
+ const getActualMimeTypeFromImage = (buffer) => {
304
+ let mimeType = null;
305
+ const first8Bytes = `${[...new Uint8Array(buffer).slice(0, 8)].join(" ")} `;
306
+ // uint8 leading bytes
307
+ const headerBytes = {
308
+ // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header
309
+ png: "137 80 78 71 13 10 26 10 ",
310
+ // https://en.wikipedia.org/wiki/JPEG#Syntax_and_structure
311
+ // jpg is a bit wonky. Checking the first three bytes should be enough,
312
+ // but may yield false positives. (https://stackoverflow.com/a/23360709/927631)
313
+ jpg: "255 216 255 ",
314
+ // https://en.wikipedia.org/wiki/GIF#Example_GIF_file
315
+ gif: "71 73 70 56 57 97 ",
316
+ };
317
+ if (first8Bytes === headerBytes.png) {
318
+ mimeType = MIME_TYPES.png;
319
+ }
320
+ else if (first8Bytes.startsWith(headerBytes.jpg)) {
321
+ mimeType = MIME_TYPES.jpg;
322
+ }
323
+ else if (first8Bytes.startsWith(headerBytes.gif)) {
324
+ mimeType = MIME_TYPES.gif;
325
+ }
326
+ return mimeType;
327
+ };
328
+ export const createFile = (blob, mimeType, name) => {
329
+ return new File([blob], name || "", {
330
+ type: mimeType,
331
+ });
332
+ };
333
+ /** attempts to detect correct mimeType if none is set, or if an image
334
+ * has an incorrect extension.
335
+ * Note: doesn't handle missing .excalidraw/.excalidrawlib extension */
336
+ export const normalizeFile = async (file) => {
337
+ if (!file.type) {
338
+ if (file?.name?.endsWith(".excalidrawlib")) {
339
+ file = createFile(await blobToArrayBuffer(file), MIME_TYPES.excalidrawlib, file.name);
340
+ }
341
+ else if (file?.name?.endsWith(".excalidraw")) {
342
+ file = createFile(await blobToArrayBuffer(file), MIME_TYPES.excalidraw, file.name);
343
+ }
344
+ else {
345
+ const buffer = await blobToArrayBuffer(file);
346
+ const mimeType = getActualMimeTypeFromImage(buffer);
347
+ if (mimeType) {
348
+ file = createFile(buffer, mimeType, file.name);
349
+ }
350
+ }
351
+ // when the file is an image, make sure the extension corresponds to the
352
+ // actual mimeType (this is an edge case, but happens sometime)
353
+ }
354
+ else if (isSupportedImageFile(file)) {
355
+ const buffer = await blobToArrayBuffer(file);
356
+ const mimeType = getActualMimeTypeFromImage(buffer);
357
+ if (mimeType && mimeType !== file.type) {
358
+ file = createFile(buffer, mimeType, file.name);
359
+ }
360
+ }
361
+ return file;
362
+ };
363
+ export const blobToArrayBuffer = (blob) => {
364
+ if ("arrayBuffer" in blob) {
365
+ return blob.arrayBuffer();
366
+ }
367
+ // Safari
368
+ return new Promise((resolve, reject) => {
369
+ const reader = new FileReader();
370
+ reader.onload = (event) => {
371
+ if (!event.target?.result) {
372
+ return reject(new Error("Couldn't convert blob to ArrayBuffer"));
373
+ }
374
+ resolve(event.target.result);
375
+ };
376
+ reader.readAsArrayBuffer(blob);
377
+ });
378
+ };
@@ -0,0 +1,231 @@
1
+ import { deflate, inflate } from "pako";
2
+ import { encryptData, decryptData } from "./encryption";
3
+ // -----------------------------------------------------------------------------
4
+ // byte (binary) strings
5
+ // -----------------------------------------------------------------------------
6
+ // fast, Buffer-compatible implem
7
+ export const toByteString = (data) => {
8
+ return new Promise((resolve, reject) => {
9
+ const blob = typeof data === "string"
10
+ ? new Blob([new TextEncoder().encode(data)])
11
+ : new Blob([data instanceof Uint8Array ? data : new Uint8Array(data)]);
12
+ const reader = new FileReader();
13
+ reader.onload = (event) => {
14
+ if (!event.target || typeof event.target.result !== "string") {
15
+ return reject(new Error("couldn't convert to byte string"));
16
+ }
17
+ resolve(event.target.result);
18
+ };
19
+ reader.readAsBinaryString(blob);
20
+ });
21
+ };
22
+ const byteStringToArrayBuffer = (byteString) => {
23
+ const buffer = new ArrayBuffer(byteString.length);
24
+ const bufferView = new Uint8Array(buffer);
25
+ for (let i = 0, len = byteString.length; i < len; i++) {
26
+ bufferView[i] = byteString.charCodeAt(i);
27
+ }
28
+ return buffer;
29
+ };
30
+ const byteStringToString = (byteString) => {
31
+ return new TextDecoder("utf-8").decode(byteStringToArrayBuffer(byteString));
32
+ };
33
+ // -----------------------------------------------------------------------------
34
+ // base64
35
+ // -----------------------------------------------------------------------------
36
+ /**
37
+ * @param isByteString set to true if already byte string to prevent bloat
38
+ * due to reencoding
39
+ */
40
+ export const stringToBase64 = async (str, isByteString = false) => {
41
+ return isByteString ? window.btoa(str) : window.btoa(await toByteString(str));
42
+ };
43
+ // async to align with stringToBase64
44
+ export const base64ToString = async (base64, isByteString = false) => {
45
+ return isByteString
46
+ ? window.atob(base64)
47
+ : byteStringToString(window.atob(base64));
48
+ };
49
+ /**
50
+ * Encodes (and potentially compresses via zlib) text to byte string
51
+ */
52
+ export const encode = async ({ text, compress, }) => {
53
+ let deflated;
54
+ if (compress !== false) {
55
+ try {
56
+ deflated = await toByteString(deflate(text));
57
+ }
58
+ catch (error) {
59
+ console.error("encode: cannot deflate", error);
60
+ }
61
+ }
62
+ return {
63
+ version: "1",
64
+ encoding: "bstring",
65
+ compressed: !!deflated,
66
+ encoded: deflated || (await toByteString(text)),
67
+ };
68
+ };
69
+ export const decode = async (data) => {
70
+ let decoded;
71
+ switch (data.encoding) {
72
+ case "bstring":
73
+ // if compressed, do not double decode the bstring
74
+ decoded = data.compressed
75
+ ? data.encoded
76
+ : await byteStringToString(data.encoded);
77
+ break;
78
+ default:
79
+ throw new Error(`decode: unknown encoding "${data.encoding}"`);
80
+ }
81
+ if (data.compressed) {
82
+ return inflate(new Uint8Array(byteStringToArrayBuffer(decoded)), {
83
+ to: "string",
84
+ });
85
+ }
86
+ return decoded;
87
+ };
88
+ // -----------------------------------------------------------------------------
89
+ const CONCAT_BUFFERS_VERSION = 1;
90
+ /** how many bytes we use to encode how many bytes the next chunk has.
91
+ * Corresponds to DataView setter methods (setUint32, setUint16, etc).
92
+ *
93
+ * NOTE ! values must not be changed, which would be backwards incompatible !
94
+ */
95
+ const VERSION_DATAVIEW_BYTES = 4;
96
+ const NEXT_CHUNK_SIZE_DATAVIEW_BYTES = 4;
97
+ // -----------------------------------------------------------------------------
98
+ const DATA_VIEW_BITS_MAP = { 1: 8, 2: 16, 4: 32 };
99
+ /**
100
+ * abstraction over DataView that serves as a typed getter/setter in case
101
+ * you're using constants for the byte size and want to ensure there's no
102
+ * discrepenancy in the encoding across refactors.
103
+ *
104
+ * DataView serves for an endian-agnostic handling of numbers in ArrayBuffers.
105
+ */
106
+ function dataView(buffer, bytes, offset, value) {
107
+ if (value != null) {
108
+ if (value > Math.pow(2, DATA_VIEW_BITS_MAP[bytes]) - 1) {
109
+ throw new Error(`attempting to set value higher than the allocated bytes (value: ${value}, bytes: ${bytes})`);
110
+ }
111
+ const method = `setUint${DATA_VIEW_BITS_MAP[bytes]}`;
112
+ new DataView(buffer.buffer)[method](offset, value);
113
+ return buffer;
114
+ }
115
+ const method = `getUint${DATA_VIEW_BITS_MAP[bytes]}`;
116
+ return new DataView(buffer.buffer)[method](offset);
117
+ }
118
+ // -----------------------------------------------------------------------------
119
+ /**
120
+ * Resulting concatenated buffer has this format:
121
+ *
122
+ * [
123
+ * VERSION chunk (4 bytes)
124
+ * LENGTH chunk 1 (4 bytes)
125
+ * DATA chunk 1 (up to 2^32 bits)
126
+ * LENGTH chunk 2 (4 bytes)
127
+ * DATA chunk 2 (up to 2^32 bits)
128
+ * ...
129
+ * ]
130
+ *
131
+ * @param buffers each buffer (chunk) must be at most 2^32 bits large (~4GB)
132
+ */
133
+ const concatBuffers = (...buffers) => {
134
+ const bufferView = new Uint8Array(VERSION_DATAVIEW_BYTES +
135
+ NEXT_CHUNK_SIZE_DATAVIEW_BYTES * buffers.length +
136
+ buffers.reduce((acc, buffer) => acc + buffer.byteLength, 0));
137
+ let cursor = 0;
138
+ // as the first chunk we'll encode the version for backwards compatibility
139
+ dataView(bufferView, VERSION_DATAVIEW_BYTES, cursor, CONCAT_BUFFERS_VERSION);
140
+ cursor += VERSION_DATAVIEW_BYTES;
141
+ for (const buffer of buffers) {
142
+ dataView(bufferView, NEXT_CHUNK_SIZE_DATAVIEW_BYTES, cursor, buffer.byteLength);
143
+ cursor += NEXT_CHUNK_SIZE_DATAVIEW_BYTES;
144
+ bufferView.set(buffer, cursor);
145
+ cursor += buffer.byteLength;
146
+ }
147
+ return bufferView;
148
+ };
149
+ /** can only be used on buffers created via `concatBuffers()` */
150
+ const splitBuffers = (concatenatedBuffer) => {
151
+ const buffers = [];
152
+ let cursor = 0;
153
+ // first chunk is the version
154
+ const version = dataView(concatenatedBuffer, NEXT_CHUNK_SIZE_DATAVIEW_BYTES, cursor);
155
+ // If version is outside of the supported versions, throw an error.
156
+ // This usually means the buffer wasn't encoded using this API, so we'd only
157
+ // waste compute.
158
+ if (version > CONCAT_BUFFERS_VERSION) {
159
+ throw new Error(`invalid version ${version}`);
160
+ }
161
+ cursor += VERSION_DATAVIEW_BYTES;
162
+ while (true) {
163
+ const chunkSize = dataView(concatenatedBuffer, NEXT_CHUNK_SIZE_DATAVIEW_BYTES, cursor);
164
+ cursor += NEXT_CHUNK_SIZE_DATAVIEW_BYTES;
165
+ buffers.push(concatenatedBuffer.slice(cursor, cursor + chunkSize));
166
+ cursor += chunkSize;
167
+ if (cursor >= concatenatedBuffer.byteLength) {
168
+ break;
169
+ }
170
+ }
171
+ return buffers;
172
+ };
173
+ // helpers for (de)compressing data with JSON metadata including encryption
174
+ // -----------------------------------------------------------------------------
175
+ /** @private */
176
+ const _encryptAndCompress = async (data, encryptionKey) => {
177
+ const { encryptedBuffer, iv } = await encryptData(encryptionKey, deflate(data));
178
+ return { iv, buffer: new Uint8Array(encryptedBuffer) };
179
+ };
180
+ /**
181
+ * The returned buffer has following format:
182
+ * `[]` refers to a buffers wrapper (see `concatBuffers`)
183
+ *
184
+ * [
185
+ * encodingMetadataBuffer,
186
+ * iv,
187
+ * [
188
+ * contentsMetadataBuffer
189
+ * contentsBuffer
190
+ * ]
191
+ * ]
192
+ */
193
+ export const compressData = async (dataBuffer, options) => {
194
+ const fileInfo = {
195
+ version: 2,
196
+ compression: "pako@1",
197
+ encryption: "AES-GCM",
198
+ };
199
+ const encodingMetadataBuffer = new TextEncoder().encode(JSON.stringify(fileInfo));
200
+ const contentsMetadataBuffer = new TextEncoder().encode(JSON.stringify(options.metadata || null));
201
+ const { iv, buffer } = await _encryptAndCompress(concatBuffers(contentsMetadataBuffer, dataBuffer), options.encryptionKey);
202
+ return concatBuffers(encodingMetadataBuffer, iv, buffer);
203
+ };
204
+ /** @private */
205
+ const _decryptAndDecompress = async (iv, decryptedBuffer, decryptionKey, isCompressed) => {
206
+ decryptedBuffer = new Uint8Array(await decryptData(iv, decryptedBuffer, decryptionKey));
207
+ if (isCompressed) {
208
+ return inflate(decryptedBuffer);
209
+ }
210
+ return decryptedBuffer;
211
+ };
212
+ export const decompressData = async (bufferView, options) => {
213
+ // first chunk is encoding metadata (ignored for now)
214
+ const [encodingMetadataBuffer, iv, buffer] = splitBuffers(bufferView);
215
+ const encodingMetadata = JSON.parse(new TextDecoder().decode(encodingMetadataBuffer));
216
+ try {
217
+ const [contentsMetadataBuffer, contentsBuffer] = splitBuffers(await _decryptAndDecompress(iv, buffer, options.decryptionKey, !!encodingMetadata.compression));
218
+ const metadata = JSON.parse(new TextDecoder().decode(contentsMetadataBuffer));
219
+ return {
220
+ /** metadata source is always JSON so we can decode it here */
221
+ metadata,
222
+ /** data can be anything so the caller must decode it */
223
+ data: contentsBuffer,
224
+ };
225
+ }
226
+ catch (error) {
227
+ console.error(`Error during decompressing and decrypting the file.`, encodingMetadata);
228
+ throw error;
229
+ }
230
+ };
231
+ // -----------------------------------------------------------------------------
@@ -0,0 +1,53 @@
1
+ import { ENCRYPTION_KEY_BITS } from "../constants";
2
+ import { blobToArrayBuffer } from "./blob";
3
+ export const IV_LENGTH_BYTES = 12;
4
+ export const createIV = () => {
5
+ const arr = new Uint8Array(IV_LENGTH_BYTES);
6
+ return window.crypto.getRandomValues(arr);
7
+ };
8
+ export const generateEncryptionKey = async (returnAs) => {
9
+ const key = await window.crypto.subtle.generateKey({
10
+ name: "AES-GCM",
11
+ length: ENCRYPTION_KEY_BITS,
12
+ }, true, // extractable
13
+ ["encrypt", "decrypt"]);
14
+ return (returnAs === "cryptoKey"
15
+ ? key
16
+ : (await window.crypto.subtle.exportKey("jwk", key)).k);
17
+ };
18
+ export const getCryptoKey = (key, usage) => window.crypto.subtle.importKey("jwk", {
19
+ alg: "A128GCM",
20
+ ext: true,
21
+ k: key,
22
+ key_ops: ["encrypt", "decrypt"],
23
+ kty: "oct",
24
+ }, {
25
+ name: "AES-GCM",
26
+ length: ENCRYPTION_KEY_BITS,
27
+ }, false, // extractable
28
+ [usage]);
29
+ export const encryptData = async (key, data) => {
30
+ const importedKey = typeof key === "string" ? await getCryptoKey(key, "encrypt") : key;
31
+ const iv = createIV();
32
+ const buffer = typeof data === "string"
33
+ ? new TextEncoder().encode(data)
34
+ : data instanceof Uint8Array
35
+ ? data
36
+ : data instanceof Blob
37
+ ? await blobToArrayBuffer(data)
38
+ : data;
39
+ // We use symmetric encryption. AES-GCM is the recommended algorithm and
40
+ // includes checks that the ciphertext has not been modified by an attacker.
41
+ const encryptedBuffer = await window.crypto.subtle.encrypt({
42
+ name: "AES-GCM",
43
+ iv,
44
+ }, importedKey, buffer);
45
+ return { encryptedBuffer, iv };
46
+ };
47
+ export const decryptData = async (iv, encrypted, privateKey) => {
48
+ const key = await getCryptoKey(privateKey, "decrypt");
49
+ return window.crypto.subtle.decrypt({
50
+ name: "AES-GCM",
51
+ iv,
52
+ }, key, encrypted);
53
+ };