@excalidraw/excalidraw 0.17.1-7441-4e2c539 → 0.17.1-a38e82f

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 (249) hide show
  1. package/CHANGELOG.md +52 -2
  2. package/dist/browser/dev/excalidraw-assets-dev/chunk-5VWQDKDR.js +20279 -0
  3. package/dist/browser/dev/excalidraw-assets-dev/chunk-5VWQDKDR.js.map +7 -0
  4. package/dist/browser/dev/excalidraw-assets-dev/{chunk-2W5GQUR4.js → chunk-IM4WTX2M.js} +12 -6
  5. package/dist/browser/dev/excalidraw-assets-dev/chunk-IM4WTX2M.js.map +7 -0
  6. package/dist/browser/dev/excalidraw-assets-dev/{en-OC6JWP3X.js → en-IOBA4CS2.js} +4 -2
  7. package/dist/browser/dev/excalidraw-assets-dev/image-LK4UNFRZ.css +6 -0
  8. package/dist/browser/dev/excalidraw-assets-dev/image-LK4UNFRZ.css.map +7 -0
  9. package/dist/browser/dev/excalidraw-assets-dev/{image-HYNUJ3XL.js → image-VKDAL6BQ.js} +2 -4
  10. package/dist/browser/dev/excalidraw-assets-dev/roundRect-T5BX56ZF.js +161 -0
  11. package/dist/browser/dev/excalidraw-assets-dev/roundRect-T5BX56ZF.js.map +7 -0
  12. package/dist/browser/dev/index.css +189 -129
  13. package/dist/browser/dev/index.css.map +3 -3
  14. package/dist/browser/dev/index.js +34707 -26
  15. package/dist/browser/dev/index.js.map +4 -4
  16. package/dist/browser/prod/excalidraw-assets/chunk-LIG3S5TN.js +11 -0
  17. package/dist/browser/prod/excalidraw-assets/chunk-N2C5DK3B.js +55 -0
  18. package/dist/browser/prod/excalidraw-assets/en-WFZVQ7I6.js +1 -0
  19. package/dist/browser/prod/excalidraw-assets/image-4AT7LYMR.js +1 -0
  20. package/dist/browser/prod/excalidraw-assets/image-X66R2EM5.css +1 -0
  21. package/dist/browser/prod/excalidraw-assets/roundRect-2ACQK4DA.js +1 -0
  22. package/dist/browser/prod/index.css +1 -1
  23. package/dist/browser/prod/index.js +203 -1
  24. package/dist/{prod/en-RLIAOBCI.json → dev/en-TDNWCAOT.json} +9 -5
  25. package/dist/dev/index.css +189 -129
  26. package/dist/dev/index.css.map +3 -3
  27. package/dist/dev/index.js +38445 -39402
  28. package/dist/dev/index.js.map +4 -4
  29. package/dist/excalidraw/actions/actionAddToLibrary.d.ts +12 -12
  30. package/dist/excalidraw/actions/actionAlign.d.ts +6 -6
  31. package/dist/excalidraw/actions/actionAlign.js +2 -1
  32. package/dist/excalidraw/actions/actionBoundText.d.ts +8 -8
  33. package/dist/excalidraw/actions/actionBoundText.js +8 -8
  34. package/dist/excalidraw/actions/actionCanvas.d.ts +46 -46
  35. package/dist/excalidraw/actions/actionClipboard.d.ts +27 -27
  36. package/dist/excalidraw/actions/actionClipboard.js +9 -2
  37. package/dist/excalidraw/actions/actionDeleteSelected.d.ts +12 -12
  38. package/dist/excalidraw/actions/actionDeleteSelected.js +3 -2
  39. package/dist/excalidraw/actions/actionDistribute.d.ts +2 -2
  40. package/dist/excalidraw/actions/actionDistribute.js +1 -1
  41. package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +1 -1
  42. package/dist/excalidraw/actions/actionDuplicateSelection.js +4 -3
  43. package/dist/excalidraw/actions/actionElementLock.d.ts +8 -8
  44. package/dist/excalidraw/actions/actionExport.d.ts +35 -35
  45. package/dist/excalidraw/actions/actionExport.js +4 -4
  46. package/dist/excalidraw/actions/actionFinalize.d.ts +7 -7
  47. package/dist/excalidraw/actions/actionFinalize.js +7 -6
  48. package/dist/excalidraw/actions/actionFlip.d.ts +2 -2
  49. package/dist/excalidraw/actions/actionFlip.js +11 -11
  50. package/dist/excalidraw/actions/actionFrame.d.ts +13 -13
  51. package/dist/excalidraw/actions/actionFrame.js +1 -1
  52. package/dist/excalidraw/actions/actionGroup.d.ts +8 -8
  53. package/dist/excalidraw/actions/actionGroup.js +3 -2
  54. package/dist/excalidraw/actions/actionLinearEditor.d.ts +4 -4
  55. package/dist/excalidraw/actions/actionLinearEditor.js +1 -1
  56. package/dist/excalidraw/{element/Hyperlink.d.ts → actions/actionLink.d.ts} +28 -50
  57. package/dist/excalidraw/actions/actionLink.js +40 -0
  58. package/dist/excalidraw/actions/actionMenu.d.ts +11 -11
  59. package/dist/excalidraw/actions/actionNavigate.d.ts +8 -8
  60. package/dist/excalidraw/actions/actionNavigate.js +1 -1
  61. package/dist/excalidraw/actions/actionProperties.d.ts +64 -64
  62. package/dist/excalidraw/actions/actionProperties.js +32 -27
  63. package/dist/excalidraw/actions/actionSelectAll.d.ts +4 -4
  64. package/dist/excalidraw/actions/actionSelectAll.js +1 -1
  65. package/dist/excalidraw/actions/actionStyles.d.ts +6 -6
  66. package/dist/excalidraw/actions/actionStyles.js +4 -4
  67. package/dist/excalidraw/actions/actionToggleGridMode.d.ts +4 -4
  68. package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -4
  69. package/dist/excalidraw/actions/actionToggleStats.d.ts +4 -4
  70. package/dist/excalidraw/actions/actionToggleViewMode.d.ts +4 -4
  71. package/dist/excalidraw/actions/actionToggleZenMode.d.ts +4 -4
  72. package/dist/excalidraw/actions/index.d.ts +1 -1
  73. package/dist/excalidraw/actions/index.js +1 -1
  74. package/dist/excalidraw/actions/manager.js +2 -1
  75. package/dist/excalidraw/align.d.ts +2 -2
  76. package/dist/excalidraw/align.js +2 -2
  77. package/dist/excalidraw/animated-trail.d.ts +33 -0
  78. package/dist/excalidraw/animated-trail.js +96 -0
  79. package/dist/excalidraw/animation-frame-handler.d.ts +16 -0
  80. package/dist/excalidraw/animation-frame-handler.js +55 -0
  81. package/dist/excalidraw/appState.d.ts +1 -1
  82. package/dist/excalidraw/appState.js +1 -3
  83. package/dist/excalidraw/clipboard.js +5 -5
  84. package/dist/excalidraw/components/Actions.d.ts +3 -3
  85. package/dist/excalidraw/components/Actions.js +18 -7
  86. package/dist/excalidraw/components/App.d.ts +32 -17
  87. package/dist/excalidraw/components/App.js +474 -339
  88. package/dist/excalidraw/components/Button.d.ts +1 -1
  89. package/dist/excalidraw/components/FilledButton.d.ts +2 -2
  90. package/dist/excalidraw/components/FilledButton.js +27 -3
  91. package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
  92. package/dist/excalidraw/components/ImageExportDialog.d.ts +2 -1
  93. package/dist/excalidraw/components/ImageExportDialog.js +16 -12
  94. package/dist/excalidraw/components/JSONExportDialog.js +1 -1
  95. package/dist/excalidraw/components/{LaserTool/LaserPointerButton.d.ts → LaserPointerButton.d.ts} +1 -1
  96. package/dist/excalidraw/components/{LaserTool/LaserPointerButton.js → LaserPointerButton.js} +2 -2
  97. package/dist/excalidraw/components/LayerUI.js +3 -3
  98. package/dist/excalidraw/components/MobileMenu.js +1 -1
  99. package/dist/excalidraw/components/ProjectName.d.ts +0 -1
  100. package/dist/excalidraw/components/ProjectName.js +1 -1
  101. package/dist/excalidraw/components/SVGLayer.d.ts +8 -0
  102. package/dist/excalidraw/components/SVGLayer.js +20 -0
  103. package/dist/excalidraw/components/ShareableLinkDialog.js +10 -10
  104. package/dist/excalidraw/components/Stack.d.ts +2 -2
  105. package/dist/excalidraw/components/TTDDialog/common.js +10 -1
  106. package/dist/excalidraw/components/TextField.d.ts +5 -2
  107. package/dist/excalidraw/components/TextField.js +6 -3
  108. package/dist/excalidraw/components/Toast.d.ts +3 -2
  109. package/dist/excalidraw/components/Toast.js +2 -2
  110. package/dist/excalidraw/components/ToolButton.js +2 -1
  111. package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -2
  112. package/dist/excalidraw/components/canvases/InteractiveCanvas.js +6 -5
  113. package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +4 -3
  114. package/dist/excalidraw/components/canvases/StaticCanvas.js +7 -5
  115. package/dist/excalidraw/components/dropdownMenu/DropdownMenuContent.js +22 -2
  116. package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
  117. package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +19 -0
  118. package/dist/excalidraw/{element → components/hyperlink}/Hyperlink.js +40 -115
  119. package/dist/excalidraw/components/hyperlink/helpers.d.ts +7 -0
  120. package/dist/excalidraw/components/hyperlink/helpers.js +49 -0
  121. package/dist/excalidraw/components/icons.d.ts +2 -1
  122. package/dist/excalidraw/components/icons.js +2 -1
  123. package/dist/excalidraw/components/live-collaboration/LiveCollaborationTrigger.js +3 -2
  124. package/dist/excalidraw/components/main-menu/DefaultItems.js +5 -2
  125. package/dist/excalidraw/constants.d.ts +8 -0
  126. package/dist/excalidraw/constants.js +10 -0
  127. package/dist/excalidraw/data/blob.js +13 -14
  128. package/dist/excalidraw/data/filesystem.d.ts +1 -1
  129. package/dist/excalidraw/data/index.d.ts +2 -1
  130. package/dist/excalidraw/data/index.js +20 -16
  131. package/dist/excalidraw/data/json.d.ts +1 -1
  132. package/dist/excalidraw/data/json.js +5 -3
  133. package/dist/excalidraw/data/resave.d.ts +1 -1
  134. package/dist/excalidraw/data/resave.js +2 -2
  135. package/dist/excalidraw/data/restore.js +8 -13
  136. package/dist/excalidraw/data/transform.js +13 -9
  137. package/dist/excalidraw/distribute.d.ts +2 -2
  138. package/dist/excalidraw/distribute.js +2 -2
  139. package/dist/excalidraw/element/ElementCanvasButtons.d.ts +3 -2
  140. package/dist/excalidraw/element/ElementCanvasButtons.js +4 -4
  141. package/dist/excalidraw/element/binding.d.ts +9 -9
  142. package/dist/excalidraw/element/binding.js +61 -59
  143. package/dist/excalidraw/element/bounds.d.ts +5 -5
  144. package/dist/excalidraw/element/bounds.js +29 -32
  145. package/dist/excalidraw/element/collision.d.ts +11 -11
  146. package/dist/excalidraw/element/collision.js +49 -46
  147. package/dist/excalidraw/element/containerCache.d.ts +11 -0
  148. package/dist/excalidraw/element/containerCache.js +14 -0
  149. package/dist/excalidraw/element/dragElements.js +10 -19
  150. package/dist/excalidraw/element/embeddable.d.ts +11 -12
  151. package/dist/excalidraw/element/embeddable.js +17 -27
  152. package/dist/excalidraw/element/image.js +1 -2
  153. package/dist/excalidraw/element/index.d.ts +0 -1
  154. package/dist/excalidraw/element/index.js +0 -1
  155. package/dist/excalidraw/element/linearElementEditor.d.ts +35 -35
  156. package/dist/excalidraw/element/linearElementEditor.js +79 -80
  157. package/dist/excalidraw/element/newElement.d.ts +4 -6
  158. package/dist/excalidraw/element/newElement.js +11 -16
  159. package/dist/excalidraw/element/resizeElements.d.ts +6 -6
  160. package/dist/excalidraw/element/resizeElements.js +40 -46
  161. package/dist/excalidraw/element/resizeTest.d.ts +3 -3
  162. package/dist/excalidraw/element/resizeTest.js +4 -4
  163. package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
  164. package/dist/excalidraw/element/sizeHelpers.js +2 -2
  165. package/dist/excalidraw/element/textElement.d.ts +18 -20
  166. package/dist/excalidraw/element/textElement.js +80 -111
  167. package/dist/excalidraw/element/textWysiwyg.d.ts +1 -6
  168. package/dist/excalidraw/element/textWysiwyg.js +15 -37
  169. package/dist/excalidraw/element/transformHandles.d.ts +4 -4
  170. package/dist/excalidraw/element/transformHandles.js +6 -6
  171. package/dist/excalidraw/element/typeChecks.js +4 -1
  172. package/dist/excalidraw/element/types.d.ts +24 -11
  173. package/dist/excalidraw/emitter.d.ts +5 -9
  174. package/dist/excalidraw/emitter.js +12 -12
  175. package/dist/excalidraw/frame.d.ts +26 -20
  176. package/dist/excalidraw/frame.js +157 -84
  177. package/dist/excalidraw/groups.d.ts +3 -3
  178. package/dist/excalidraw/groups.js +11 -3
  179. package/dist/excalidraw/history.d.ts +1 -1
  180. package/dist/excalidraw/index.d.ts +7 -3
  181. package/dist/excalidraw/index.js +14 -5
  182. package/dist/excalidraw/laser-trails.d.ts +19 -0
  183. package/dist/excalidraw/laser-trails.js +95 -0
  184. package/dist/excalidraw/locales/en.json +9 -5
  185. package/dist/excalidraw/reactUtils.d.ts +14 -0
  186. package/dist/excalidraw/reactUtils.js +45 -0
  187. package/dist/excalidraw/renderer/helpers.d.ts +13 -0
  188. package/dist/excalidraw/renderer/helpers.js +39 -0
  189. package/dist/excalidraw/renderer/interactiveScene.d.ts +20 -0
  190. package/dist/excalidraw/renderer/{renderScene.js → interactiveScene.js} +199 -474
  191. package/dist/excalidraw/renderer/renderElement.d.ts +6 -6
  192. package/dist/excalidraw/renderer/renderElement.js +54 -366
  193. package/dist/excalidraw/renderer/staticScene.d.ts +11 -0
  194. package/dist/excalidraw/renderer/staticScene.js +205 -0
  195. package/dist/excalidraw/renderer/staticSvgScene.d.ts +5 -0
  196. package/dist/excalidraw/renderer/staticSvgScene.js +385 -0
  197. package/dist/excalidraw/scene/Fonts.js +2 -1
  198. package/dist/excalidraw/scene/Renderer.d.ts +1 -1
  199. package/dist/excalidraw/scene/Renderer.js +32 -20
  200. package/dist/excalidraw/scene/Scene.d.ts +10 -9
  201. package/dist/excalidraw/scene/Scene.js +45 -21
  202. package/dist/excalidraw/scene/Shape.d.ts +3 -1
  203. package/dist/excalidraw/scene/Shape.js +7 -5
  204. package/dist/excalidraw/scene/ShapeCache.d.ts +2 -1
  205. package/dist/excalidraw/scene/ShapeCache.js +1 -0
  206. package/dist/excalidraw/scene/comparisons.js +2 -1
  207. package/dist/excalidraw/scene/export.d.ts +3 -0
  208. package/dist/excalidraw/scene/export.js +20 -40
  209. package/dist/excalidraw/scene/index.d.ts +0 -1
  210. package/dist/excalidraw/scene/index.js +0 -1
  211. package/dist/excalidraw/scene/scrollbars.d.ts +1 -1
  212. package/dist/excalidraw/scene/scrollbars.js +1 -1
  213. package/dist/excalidraw/scene/selection.d.ts +5 -5
  214. package/dist/excalidraw/scene/selection.js +16 -14
  215. package/dist/excalidraw/scene/types.d.ts +11 -5
  216. package/dist/excalidraw/snapping.d.ts +7 -7
  217. package/dist/excalidraw/snapping.js +21 -20
  218. package/dist/excalidraw/types.d.ts +11 -12
  219. package/dist/excalidraw/utility-types.d.ts +5 -0
  220. package/dist/excalidraw/utils.d.ts +25 -16
  221. package/dist/excalidraw/utils.js +52 -45
  222. package/dist/{dev/en-RLIAOBCI.json → prod/en-TDNWCAOT.json} +9 -5
  223. package/dist/prod/index.css +1 -1
  224. package/dist/prod/index.js +45 -45
  225. package/dist/utils/export.d.ts +0 -6
  226. package/dist/utils/export.js +0 -6
  227. package/dist/utils/index.d.ts +3 -0
  228. package/dist/utils/index.js +3 -0
  229. package/dist/utils/withinBounds.js +2 -1
  230. package/package.json +4 -4
  231. package/dist/browser/dev/excalidraw-assets-dev/chunk-2W5GQUR4.js.map +0 -7
  232. package/dist/browser/dev/excalidraw-assets-dev/chunk-SUHLFFEF.js +0 -53449
  233. package/dist/browser/dev/excalidraw-assets-dev/chunk-SUHLFFEF.js.map +0 -7
  234. package/dist/browser/dev/excalidraw-assets-dev/image-NOPDRTTM.css +0 -5797
  235. package/dist/browser/dev/excalidraw-assets-dev/image-NOPDRTTM.css.map +0 -7
  236. package/dist/browser/prod/excalidraw-assets/chunk-HE2P7BQ6.js +0 -257
  237. package/dist/browser/prod/excalidraw-assets/chunk-OWLL6VOG.js +0 -11
  238. package/dist/browser/prod/excalidraw-assets/en-ERQOR3OC.js +0 -1
  239. package/dist/browser/prod/excalidraw-assets/image-DZ6B4AID.js +0 -1
  240. package/dist/browser/prod/excalidraw-assets/image-J2QCCYAR.css +0 -1
  241. package/dist/excalidraw/components/LaserTool/LaserPathManager.d.ts +0 -28
  242. package/dist/excalidraw/components/LaserTool/LaserPathManager.js +0 -225
  243. package/dist/excalidraw/components/LaserTool/LaserTool.d.ts +0 -8
  244. package/dist/excalidraw/components/LaserTool/LaserTool.js +0 -15
  245. package/dist/excalidraw/renderer/renderScene.d.ts +0 -25
  246. package/dist/excalidraw/vite.config.d.mts +0 -2
  247. package/dist/excalidraw/vite.config.mjs +0 -13
  248. /package/dist/browser/dev/excalidraw-assets-dev/{en-OC6JWP3X.js.map → en-IOBA4CS2.js.map} +0 -0
  249. /package/dist/browser/dev/excalidraw-assets-dev/{image-HYNUJ3XL.js.map → image-VKDAL6BQ.js.map} +0 -0
@@ -7,7 +7,7 @@ import { mutateElement } from "./mutateElement";
7
7
  import { getFontString } from "../utils";
8
8
  import { updateBoundElements } from "./binding";
9
9
  import Scene from "../scene/Scene";
10
- import { getApproxMinLineWidth, getBoundTextElement, getBoundTextElementId, getContainerElement, handleBindTextResize, getBoundTextMaxWidth, getApproxMinLineHeight, measureText, getBoundTextMaxHeight, } from "./textElement";
10
+ import { getApproxMinLineWidth, getBoundTextElement, getBoundTextElementId, getContainerElement, handleBindTextResize, getBoundTextMaxWidth, getApproxMinLineHeight, } from "./textElement";
11
11
  import { LinearElementEditor } from "./linearElementEditor";
12
12
  export const normalizeAngle = (angle) => {
13
13
  if (angle < 0) {
@@ -19,43 +19,43 @@ export const normalizeAngle = (angle) => {
19
19
  return angle;
20
20
  };
21
21
  // Returns true when transform (resizing/rotation) happened
22
- export const transformElements = (pointerDownState, transformHandleType, selectedElements, resizeArrowDirection, shouldRotateWithDiscreteAngle, shouldResizeFromCenter, shouldMaintainAspectRatio, pointerX, pointerY, centerX, centerY, appState) => {
22
+ export const transformElements = (originalElements, transformHandleType, selectedElements, elementsMap, shouldRotateWithDiscreteAngle, shouldResizeFromCenter, shouldMaintainAspectRatio, pointerX, pointerY, centerX, centerY) => {
23
23
  if (selectedElements.length === 1) {
24
24
  const [element] = selectedElements;
25
25
  if (transformHandleType === "rotation") {
26
- rotateSingleElement(element, pointerX, pointerY, shouldRotateWithDiscreteAngle, pointerDownState.originalElements);
27
- updateBoundElements(element);
26
+ rotateSingleElement(element, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle);
27
+ updateBoundElements(element, elementsMap);
28
28
  }
29
29
  else if (isTextElement(element) &&
30
30
  (transformHandleType === "nw" ||
31
31
  transformHandleType === "ne" ||
32
32
  transformHandleType === "sw" ||
33
33
  transformHandleType === "se")) {
34
- resizeSingleTextElement(element, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
35
- updateBoundElements(element);
34
+ resizeSingleTextElement(element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
35
+ updateBoundElements(element, elementsMap);
36
36
  }
37
37
  else if (transformHandleType) {
38
- resizeSingleElement(pointerDownState.originalElements, shouldMaintainAspectRatio, element, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
38
+ resizeSingleElement(originalElements, shouldMaintainAspectRatio, element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
39
39
  }
40
40
  return true;
41
41
  }
42
42
  else if (selectedElements.length > 1) {
43
43
  if (transformHandleType === "rotation") {
44
- rotateMultipleElements(pointerDownState, selectedElements, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY);
44
+ rotateMultipleElements(originalElements, selectedElements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY);
45
45
  return true;
46
46
  }
47
47
  else if (transformHandleType === "nw" ||
48
48
  transformHandleType === "ne" ||
49
49
  transformHandleType === "sw" ||
50
50
  transformHandleType === "se") {
51
- resizeMultipleElements(pointerDownState, selectedElements, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
51
+ resizeMultipleElements(originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
52
52
  return true;
53
53
  }
54
54
  }
55
55
  return false;
56
56
  };
57
- const rotateSingleElement = (element, pointerX, pointerY, shouldRotateWithDiscreteAngle, originalElements) => {
58
- const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
57
+ const rotateSingleElement = (element, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle) => {
58
+ const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
59
59
  const cx = (x1 + x2) / 2;
60
60
  const cy = (y1 + y2) / 2;
61
61
  let angle;
@@ -84,24 +84,22 @@ const rescalePointsInElement = (element, width, height, normalizePoints) => isLi
84
84
  points: rescalePoints(0, width, rescalePoints(1, height, element.points, normalizePoints), normalizePoints),
85
85
  }
86
86
  : {};
87
- const measureFontSizeFromWidth = (element, nextWidth, nextHeight) => {
87
+ const measureFontSizeFromWidth = (element, elementsMap, nextWidth) => {
88
88
  // We only use width to scale font on resize
89
89
  let width = element.width;
90
90
  const hasContainer = isBoundToContainer(element);
91
91
  if (hasContainer) {
92
- const container = getContainerElement(element);
92
+ const container = getContainerElement(element, elementsMap);
93
93
  if (container) {
94
- width = getBoundTextMaxWidth(container);
94
+ width = getBoundTextMaxWidth(container, element);
95
95
  }
96
96
  }
97
97
  const nextFontSize = element.fontSize * (nextWidth / width);
98
98
  if (nextFontSize < MIN_FONT_SIZE) {
99
99
  return null;
100
100
  }
101
- const metrics = measureText(element.text, getFontString({ fontSize: nextFontSize, fontFamily: element.fontFamily }), element.lineHeight);
102
101
  return {
103
102
  size: nextFontSize,
104
- baseline: metrics.baseline + (nextHeight - metrics.height),
105
103
  };
106
104
  };
107
105
  const getSidesForTransformHandle = (transformHandleType, shouldResizeFromCenter) => {
@@ -116,8 +114,8 @@ const getSidesForTransformHandle = (transformHandleType, shouldResizeFromCenter)
116
114
  (shouldResizeFromCenter && /^(w|nw|sw)$/.test(transformHandleType)),
117
115
  };
118
116
  };
119
- const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
120
- const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
117
+ const resizeSingleTextElement = (element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
118
+ const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
121
119
  const cx = (x1 + x2) / 2;
122
120
  const cy = (y1 + y2) / 2;
123
121
  // rotation pointer with reverse angle
@@ -140,7 +138,7 @@ const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromC
140
138
  if (scale > 0) {
141
139
  const nextWidth = element.width * scale;
142
140
  const nextHeight = element.height * scale;
143
- const metrics = measureFontSizeFromWidth(element, nextWidth, nextHeight);
141
+ const metrics = measureFontSizeFromWidth(element, elementsMap, nextWidth);
144
142
  if (metrics === null) {
145
143
  return;
146
144
  }
@@ -154,13 +152,12 @@ const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromC
154
152
  fontSize: metrics.size,
155
153
  width: nextWidth,
156
154
  height: nextHeight,
157
- baseline: metrics.baseline,
158
155
  x: nextElementX,
159
156
  y: nextElementY,
160
157
  });
161
158
  }
162
159
  };
163
- export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio, element, transformHandleDirection, shouldResizeFromCenter, pointerX, pointerY) => {
160
+ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio, element, elementsMap, transformHandleDirection, shouldResizeFromCenter, pointerX, pointerY) => {
164
161
  const stateAtResizeStart = originalElements.get(element.id);
165
162
  // Gets bounds corners
166
163
  const [x1, y1, x2, y2] = getResizedElementAbsoluteCoords(stateAtResizeStart, stateAtResizeStart.width, stateAtResizeStart.height, true);
@@ -180,7 +177,7 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
180
177
  let scaleX = atStartBoundsWidth / boundsCurrentWidth;
181
178
  let scaleY = atStartBoundsHeight / boundsCurrentHeight;
182
179
  let boundTextFont = {};
183
- const boundTextElement = getBoundTextElement(element);
180
+ const boundTextElement = getBoundTextElement(element, elementsMap);
184
181
  if (transformHandleDirection.includes("e")) {
185
182
  scaleX = (rotatedPointer[0] - startTopLeft[0]) / boundsCurrentWidth;
186
183
  }
@@ -224,7 +221,6 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
224
221
  if (stateOfBoundTextElementAtResize) {
225
222
  boundTextFont = {
226
223
  fontSize: stateOfBoundTextElementAtResize.fontSize,
227
- baseline: stateOfBoundTextElementAtResize.baseline,
228
224
  };
229
225
  }
230
226
  if (shouldMaintainAspectRatio) {
@@ -233,13 +229,12 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
233
229
  width: eleNewWidth,
234
230
  height: eleNewHeight,
235
231
  };
236
- const nextFont = measureFontSizeFromWidth(boundTextElement, getBoundTextMaxWidth(updatedElement), getBoundTextMaxHeight(updatedElement, boundTextElement));
232
+ const nextFont = measureFontSizeFromWidth(boundTextElement, elementsMap, getBoundTextMaxWidth(updatedElement, boundTextElement));
237
233
  if (nextFont === null) {
238
234
  return;
239
235
  }
240
236
  boundTextFont = {
241
237
  fontSize: nextFont.size,
242
- baseline: nextFont.baseline,
243
238
  };
244
239
  }
245
240
  else {
@@ -358,25 +353,24 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
358
353
  Number.isFinite(resizedElement.x) &&
359
354
  Number.isFinite(resizedElement.y)) {
360
355
  mutateElement(element, resizedElement);
361
- updateBoundElements(element, {
356
+ updateBoundElements(element, elementsMap, {
362
357
  newSize: { width: resizedElement.width, height: resizedElement.height },
363
358
  });
364
359
  if (boundTextElement && boundTextFont != null) {
365
360
  mutateElement(boundTextElement, {
366
361
  fontSize: boundTextFont.fontSize,
367
- baseline: boundTextFont.baseline,
368
362
  });
369
363
  }
370
- handleBindTextResize(element, transformHandleDirection, shouldMaintainAspectRatio);
364
+ handleBindTextResize(element, elementsMap, transformHandleDirection, shouldMaintainAspectRatio);
371
365
  }
372
366
  };
373
- export const resizeMultipleElements = (pointerDownState, selectedElements, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
367
+ export const resizeMultipleElements = (originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
374
368
  // map selected elements to the original elements. While it never should
375
369
  // happen that pointerDownState.originalElements won't contain the selected
376
370
  // elements during resize, this coupling isn't guaranteed, so to ensure
377
371
  // type safety we need to transform only those elements we filter.
378
372
  const targetElements = selectedElements.reduce((acc, element) => {
379
- const origElement = pointerDownState.originalElements.get(element.id);
373
+ const origElement = originalElements.get(element.id);
380
374
  if (origElement) {
381
375
  acc.push({ orig: origElement, latest: element });
382
376
  }
@@ -394,11 +388,11 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
394
388
  if (!textId) {
395
389
  return acc;
396
390
  }
397
- const text = pointerDownState.originalElements.get(textId) ?? null;
391
+ const text = originalElements.get(textId) ?? null;
398
392
  if (!isBoundToContainer(text)) {
399
393
  return acc;
400
394
  }
401
- const xy = LinearElementEditor.getBoundTextElementPosition(orig, text);
395
+ const xy = LinearElementEditor.getBoundTextElementPosition(orig, text, elementsMap);
402
396
  return [...acc, { ...text, ...xy }];
403
397
  }, []);
404
398
  const { minX, minY, maxX, maxY, midX, midY } = getCommonBoundingBox(targetElements.map(({ orig }) => orig).concat(boundTextElements));
@@ -487,14 +481,13 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
487
481
  }
488
482
  }
489
483
  if (isTextElement(orig)) {
490
- const metrics = measureFontSizeFromWidth(orig, width, height);
484
+ const metrics = measureFontSizeFromWidth(orig, elementsMap, width);
491
485
  if (!metrics) {
492
486
  return;
493
487
  }
494
488
  update.fontSize = metrics.size;
495
- update.baseline = metrics.baseline;
496
489
  }
497
- const boundTextElement = pointerDownState.originalElements.get(getBoundTextElementId(orig) ?? "");
490
+ const boundTextElement = originalElements.get(getBoundTextElementId(orig) ?? "");
498
491
  if (boundTextElement) {
499
492
  const newFontSize = boundTextElement.fontSize * scale;
500
493
  if (newFontSize < MIN_FONT_SIZE) {
@@ -511,22 +504,22 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
511
504
  for (const { element, update: { boundTextFontSize, ...update }, } of elementsAndUpdates) {
512
505
  const { width, height, angle } = update;
513
506
  mutateElement(element, update, false);
514
- updateBoundElements(element, {
507
+ updateBoundElements(element, elementsMap, {
515
508
  simultaneouslyUpdated: elementsToUpdate,
516
509
  newSize: { width, height },
517
510
  });
518
- const boundTextElement = getBoundTextElement(element);
511
+ const boundTextElement = getBoundTextElement(element, elementsMap);
519
512
  if (boundTextElement && boundTextFontSize) {
520
513
  mutateElement(boundTextElement, {
521
514
  fontSize: boundTextFontSize,
522
515
  angle: isLinearElement(element) ? undefined : angle,
523
516
  }, false);
524
- handleBindTextResize(element, transformHandleType, true);
517
+ handleBindTextResize(element, elementsMap, transformHandleType, true);
525
518
  }
526
519
  }
527
520
  Scene.getScene(elementsAndUpdates[0].element)?.informMutation();
528
521
  };
529
- const rotateMultipleElements = (pointerDownState, elements, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY) => {
522
+ const rotateMultipleElements = (originalElements, elements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY) => {
530
523
  let centerAngle = (5 * Math.PI) / 2 + Math.atan2(pointerY - centerY, pointerX - centerX);
531
524
  if (shouldRotateWithDiscreteAngle) {
532
525
  centerAngle += SHIFT_LOCKING_ANGLE / 2;
@@ -535,19 +528,20 @@ const rotateMultipleElements = (pointerDownState, elements, pointerX, pointerY,
535
528
  elements
536
529
  .filter((element) => !isFrameLikeElement(element))
537
530
  .forEach((element) => {
538
- const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
531
+ const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
539
532
  const cx = (x1 + x2) / 2;
540
533
  const cy = (y1 + y2) / 2;
541
- const origAngle = pointerDownState.originalElements.get(element.id)?.angle ??
542
- element.angle;
534
+ const origAngle = originalElements.get(element.id)?.angle ?? element.angle;
543
535
  const [rotatedCX, rotatedCY] = rotate(cx, cy, centerX, centerY, centerAngle + origAngle - element.angle);
544
536
  mutateElement(element, {
545
537
  x: element.x + (rotatedCX - cx),
546
538
  y: element.y + (rotatedCY - cy),
547
539
  angle: normalizeAngle(centerAngle + origAngle),
548
540
  }, false);
549
- updateBoundElements(element, { simultaneouslyUpdated: elements });
550
- const boundText = getBoundTextElement(element);
541
+ updateBoundElements(element, elementsMap, {
542
+ simultaneouslyUpdated: elements,
543
+ });
544
+ const boundText = getBoundTextElement(element, elementsMap);
551
545
  if (boundText && !isArrowElement(element)) {
552
546
  mutateElement(boundText, {
553
547
  x: boundText.x + (rotatedCX - cx),
@@ -558,9 +552,9 @@ const rotateMultipleElements = (pointerDownState, elements, pointerX, pointerY,
558
552
  });
559
553
  Scene.getScene(elements[0])?.informMutation();
560
554
  };
561
- export const getResizeOffsetXY = (transformHandleType, selectedElements, x, y) => {
555
+ export const getResizeOffsetXY = (transformHandleType, selectedElements, elementsMap, x, y) => {
562
556
  const [x1, y1, x2, y2] = selectedElements.length === 1
563
- ? getElementAbsoluteCoords(selectedElements[0])
557
+ ? getElementAbsoluteCoords(selectedElements[0], elementsMap)
564
558
  : getCommonBounds(selectedElements);
565
559
  const cx = (x1 + x2) / 2;
566
560
  const cy = (y1 + y2) / 2;
@@ -1,9 +1,9 @@
1
- import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement } from "./types";
1
+ import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement, ElementsMap } from "./types";
2
2
  import { MaybeTransformHandleType } from "./transformHandles";
3
3
  import { AppState, Zoom } from "../types";
4
4
  import { Bounds } from "./bounds";
5
- export declare const resizeTest: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
6
- export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => {
5
+ export declare const resizeTest: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
6
+ export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType, elementsMap: ElementsMap) => {
7
7
  element: NonDeletedExcalidrawElement;
8
8
  transformHandleType: MaybeTransformHandleType;
9
9
  } | null;
@@ -3,11 +3,11 @@ const isInsideTransformHandle = (transformHandle, x, y) => x >= transformHandle[
3
3
  x <= transformHandle[0] + transformHandle[2] &&
4
4
  y >= transformHandle[1] &&
5
5
  y <= transformHandle[1] + transformHandle[3];
6
- export const resizeTest = (element, appState, x, y, zoom, pointerType) => {
6
+ export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType) => {
7
7
  if (!appState.selectedElementIds[element.id]) {
8
8
  return false;
9
9
  }
10
- const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, pointerType);
10
+ const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType);
11
11
  if (rotationTransformHandle &&
12
12
  isInsideTransformHandle(rotationTransformHandle, x, y)) {
13
13
  return "rotation";
@@ -24,12 +24,12 @@ export const resizeTest = (element, appState, x, y, zoom, pointerType) => {
24
24
  }
25
25
  return false;
26
26
  };
27
- export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType) => {
27
+ export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap) => {
28
28
  return elements.reduce((result, element) => {
29
29
  if (result) {
30
30
  return result;
31
31
  }
32
- const transformHandleType = resizeTest(element, appState, scenePointerX, scenePointerY, zoom, pointerType);
32
+ const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType);
33
33
  return transformHandleType ? { element, transformHandleType } : null;
34
34
  }, null);
35
35
  };
@@ -1,4 +1,4 @@
1
- import { ExcalidrawElement } from "./types";
1
+ import { ElementsMap, ExcalidrawElement } from "./types";
2
2
  import { AppState, Zoom } from "../types";
3
3
  export declare const isInvisiblySmallElement: (element: ExcalidrawElement) => boolean;
4
4
  export declare const isElementInViewport: (element: ExcalidrawElement, width: number, height: number, viewTransformations: {
@@ -7,7 +7,7 @@ export declare const isElementInViewport: (element: ExcalidrawElement, width: nu
7
7
  offsetTop: number;
8
8
  scrollX: number;
9
9
  scrollY: number;
10
- }) => boolean;
10
+ }, elementsMap: ElementsMap) => boolean;
11
11
  /**
12
12
  * Makes a perfect shape or diagonal/horizontal/vertical line
13
13
  */
@@ -9,8 +9,8 @@ export const isInvisiblySmallElement = (element) => {
9
9
  }
10
10
  return element.width === 0 && element.height === 0;
11
11
  };
12
- export const isElementInViewport = (element, width, height, viewTransformations) => {
13
- const [x1, y1, x2, y2] = getElementBounds(element); // scene coordinates
12
+ export const isElementInViewport = (element, width, height, viewTransformations, elementsMap) => {
13
+ const [x1, y1, x2, y2] = getElementBounds(element, elementsMap); // scene coordinates
14
14
  const topLeftSceneCoords = viewportCoordsToSceneCoords({
15
15
  clientX: viewTransformations.offsetLeft,
16
16
  clientY: viewTransformations.offsetTop,
@@ -1,22 +1,19 @@
1
- import { ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
1
+ import { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
2
2
  import { MaybeTransformHandleType } from "./transformHandles";
3
3
  import { AppState } from "../types";
4
4
  import { ExtractSetType } from "../utility-types";
5
5
  export declare const normalizeText: (text: string) => string;
6
- export declare const splitIntoLines: (text: string) => string[];
7
- export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null) => void;
8
- export declare const bindTextToShapeAfterDuplication: (sceneElements: ExcalidrawElement[], oldElements: ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
9
- export declare const handleBindTextResize: (container: NonDeletedExcalidrawElement, transformHandleType: MaybeTransformHandleType, shouldMaintainAspectRatio?: boolean) => void;
10
- export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => {
6
+ export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap) => void;
7
+ export declare const bindTextToShapeAfterDuplication: (newElements: ExcalidrawElement[], oldElements: ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
8
+ export declare const handleBindTextResize: (container: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleType: MaybeTransformHandleType, shouldMaintainAspectRatio?: boolean) => void;
9
+ export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
11
10
  x: number;
12
11
  y: number;
13
12
  };
14
13
  export declare const measureText: (text: string, font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"]) => {
15
14
  width: number;
16
15
  height: number;
17
- baseline: number;
18
16
  };
19
- export declare const measureBaseline: (text: string, font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"], wrapInContainer?: boolean) => number;
20
17
  /**
21
18
  * To get unitless line-height (if unknown) we can calculate it by dividing
22
19
  * height-per-line by fontSize.
@@ -29,6 +26,10 @@ export declare const detectLineHeight: (textElement: ExcalidrawTextElement) => n
29
26
  * aligning with the W3C spec.
30
27
  */
31
28
  export declare const getLineHeightInPx: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
29
+ /**
30
+ * Calculates vertical offset for a text with alphabetic baseline.
31
+ */
32
+ export declare const getVerticalOffset: (fontFamily: ExcalidrawTextElement["fontFamily"], fontSize: ExcalidrawTextElement["fontSize"], lineHeightPx: number) => number;
32
33
  export declare const getApproxMinLineHeight: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
33
34
  export declare const getTextWidth: (text: string, font: FontString) => number;
34
35
  export declare const getTextHeight: (text: string, fontSize: number, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
@@ -43,11 +44,9 @@ export declare const getMinCharWidth: (font: FontString) => number;
43
44
  export declare const getMaxCharWidth: (font: FontString) => number;
44
45
  export declare const getApproxCharsToFitInWidth: (font: FontString, width: number) => number;
45
46
  export declare const getBoundTextElementId: (container: ExcalidrawElement | null) => string | null;
46
- export declare const getBoundTextElement: (element: ExcalidrawElement | null) => ExcalidrawTextElementWithContainer | null;
47
- export declare const getContainerElement: (element: (ExcalidrawElement & {
48
- containerId: ExcalidrawElement["id"] | null;
49
- }) | null) => ExcalidrawElement | null;
50
- export declare const getContainerCenter: (container: ExcalidrawElement, appState: AppState) => {
47
+ export declare const getBoundTextElement: (element: ExcalidrawElement | null, elementsMap: ElementsMap) => ExcalidrawTextElementWithContainer | null;
48
+ export declare const getContainerElement: (element: ExcalidrawTextElement | null, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
49
+ export declare const getContainerCenter: (container: ExcalidrawElement, appState: AppState, elementsMap: ElementsMap) => {
51
50
  x: number;
52
51
  y: number;
53
52
  };
@@ -55,21 +54,20 @@ export declare const getContainerCoords: (container: NonDeletedExcalidrawElement
55
54
  x: number;
56
55
  y: number;
57
56
  };
58
- export declare const getTextElementAngle: (textElement: ExcalidrawTextElement) => number;
59
- export declare const getBoundTextElementOffset: (boundTextElement: ExcalidrawTextElement | null) => number;
60
- export declare const getBoundTextElementPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => {
57
+ export declare const getTextElementAngle: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null) => number;
58
+ export declare const getBoundTextElementPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
61
59
  x: number;
62
60
  y: number;
63
61
  } | undefined;
64
- export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[]) => boolean;
65
- export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[]) => boolean;
66
- export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number) => ExcalidrawTextContainer | null;
62
+ export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
63
+ export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
64
+ export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
67
65
  declare const VALID_CONTAINER_TYPES: Set<string>;
68
66
  export declare const isValidTextContainer: (element: {
69
67
  type: ExcalidrawElementType;
70
68
  }) => boolean;
71
69
  export declare const computeContainerDimensionForBoundText: (dimension: number, containerType: ExtractSetType<typeof VALID_CONTAINER_TYPES>) => number;
72
- export declare const getBoundTextMaxWidth: (container: ExcalidrawElement, boundTextElement?: ExcalidrawTextElement | null) => number;
70
+ export declare const getBoundTextMaxWidth: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElement | null) => number;
73
71
  export declare const getBoundTextMaxHeight: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => number;
74
72
  export declare const isMeasureTextSupported: () => boolean;
75
73
  export declare const getDefaultLineHeight: (fontFamily: FontFamilyValues) => number & {