@bigbluebutton/tldraw 2.0.0-alpha.34 → 2.0.0-alpha.35

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 (379) hide show
  1. package/dist-cjs/index.js +4 -4
  2. package/dist-cjs/index.js.map +1 -1
  3. package/dist-cjs/lib/Tldraw.js +1 -2
  4. package/dist-cjs/lib/Tldraw.js.map +1 -1
  5. package/dist-cjs/lib/canvas/TldrawHandles.js +1 -2
  6. package/dist-cjs/lib/canvas/TldrawHandles.js.map +1 -1
  7. package/dist-cjs/lib/canvas/TldrawHoveredShapeIndicator.js +1 -2
  8. package/dist-cjs/lib/canvas/TldrawHoveredShapeIndicator.js.map +1 -1
  9. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -2
  10. package/dist-cjs/lib/canvas/TldrawScribble.js.map +1 -1
  11. package/dist-cjs/lib/canvas/TldrawSelectionBackground.js +1 -2
  12. package/dist-cjs/lib/canvas/TldrawSelectionBackground.js.map +1 -1
  13. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +1 -2
  14. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +1 -1
  15. package/dist-cjs/lib/defaultExternalContentHandlers.js +3 -6
  16. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +1 -1
  17. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +7 -14
  18. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +1 -1
  19. package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +1 -2
  20. package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +1 -1
  21. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +6 -12
  22. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +1 -1
  23. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +12 -24
  24. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +1 -1
  25. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -2
  26. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  27. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js +4 -8
  28. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
  29. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +3 -6
  30. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +1 -1
  31. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -2
  32. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +1 -1
  33. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js +4 -8
  34. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +1 -1
  35. package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +1 -2
  36. package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +1 -1
  37. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +2 -4
  38. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +1 -1
  39. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +5 -10
  40. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +1 -1
  41. package/dist-cjs/lib/shapes/line/components/svg.js +1 -2
  42. package/dist-cjs/lib/shapes/line/components/svg.js.map +1 -1
  43. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +5 -10
  44. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +1 -1
  45. package/dist-cjs/lib/shapes/poll/components/CustomizedAxisTick.js +1 -2
  46. package/dist-cjs/lib/shapes/poll/components/CustomizedAxisTick.js.map +1 -1
  47. package/dist-cjs/lib/shapes/poll/components/poll-content.js +1 -2
  48. package/dist-cjs/lib/shapes/poll/components/poll-content.js.map +1 -1
  49. package/dist-cjs/lib/shapes/shared/TextHelpers.js +2 -4
  50. package/dist-cjs/lib/shapes/shared/TextHelpers.js.map +1 -1
  51. package/dist-cjs/lib/shapes/shared/createTextSvgElementFromSpans.js +1 -2
  52. package/dist-cjs/lib/shapes/shared/createTextSvgElementFromSpans.js.map +1 -1
  53. package/dist-cjs/lib/shapes/shared/defaultStyleDefs.js +8 -16
  54. package/dist-cjs/lib/shapes/shared/defaultStyleDefs.js.map +1 -1
  55. package/dist-cjs/lib/shapes/shared/freehand/getStrokePoints.js +6 -12
  56. package/dist-cjs/lib/shapes/shared/freehand/getStrokePoints.js.map +1 -1
  57. package/dist-cjs/lib/shapes/shared/freehand/setStrokePointRadii.js +1 -2
  58. package/dist-cjs/lib/shapes/shared/freehand/setStrokePointRadii.js.map +1 -1
  59. package/dist-cjs/lib/shapes/shared/freehand/svgInk.js +2 -4
  60. package/dist-cjs/lib/shapes/shared/freehand/svgInk.js.map +1 -1
  61. package/dist-cjs/lib/shapes/shared/useEditableText.js +5 -10
  62. package/dist-cjs/lib/shapes/shared/useEditableText.js.map +1 -1
  63. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +6 -12
  64. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +1 -1
  65. package/dist-cjs/lib/shapes/text/toolStates/Idle.js +1 -2
  66. package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +1 -1
  67. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +1 -2
  68. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +1 -1
  69. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +2 -4
  70. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  71. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +2 -4
  72. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +1 -1
  73. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +1 -2
  74. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +1 -1
  75. package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +25 -30
  76. package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +1 -1
  77. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +12 -24
  78. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +1 -1
  79. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +1 -2
  80. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +1 -1
  81. package/dist-cjs/lib/tools/SelectTool/childStates/Cropping.js +8 -16
  82. package/dist-cjs/lib/tools/SelectTool/childStates/Cropping.js.map +1 -1
  83. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +3 -6
  84. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +1 -1
  85. package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +2 -4
  86. package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +1 -1
  87. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +21 -42
  88. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +1 -1
  89. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCropHandle.js +1 -2
  90. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCropHandle.js.map +1 -1
  91. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +1 -2
  92. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +1 -1
  93. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +1 -2
  94. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +1 -1
  95. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +5 -10
  96. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +1 -1
  97. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +2 -4
  98. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +1 -1
  99. package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +1 -2
  100. package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +1 -1
  101. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +4 -8
  102. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +1 -1
  103. package/dist-cjs/lib/tools/SelectTool/children/DraggingHandle.js +3 -6
  104. package/dist-cjs/lib/tools/SelectTool/children/DraggingHandle.js.map +1 -1
  105. package/dist-cjs/lib/tools/selection-logic/updateHoveredId.js +1 -2
  106. package/dist-cjs/lib/tools/selection-logic/updateHoveredId.js.map +1 -1
  107. package/dist-cjs/lib/ui/assetUrls.js +1 -2
  108. package/dist-cjs/lib/ui/assetUrls.js.map +1 -1
  109. package/dist-cjs/lib/ui/components/ActionsMenu.js +2 -4
  110. package/dist-cjs/lib/ui/components/ActionsMenu.js.map +1 -1
  111. package/dist-cjs/lib/ui/components/BackToContent.js +1 -2
  112. package/dist-cjs/lib/ui/components/BackToContent.js.map +1 -1
  113. package/dist-cjs/lib/ui/components/ContextMenu.js +3 -6
  114. package/dist-cjs/lib/ui/components/ContextMenu.js.map +1 -1
  115. package/dist-cjs/lib/ui/components/DebugPanel.js +2 -4
  116. package/dist-cjs/lib/ui/components/DebugPanel.js.map +1 -1
  117. package/dist-cjs/lib/ui/components/EditLinkDialog.js +2 -4
  118. package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +1 -1
  119. package/dist-cjs/lib/ui/components/EmbedDialog.js +1 -2
  120. package/dist-cjs/lib/ui/components/EmbedDialog.js.map +1 -1
  121. package/dist-cjs/lib/ui/components/FollowingIndicator.js +2 -4
  122. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +1 -1
  123. package/dist-cjs/lib/ui/components/HelpMenu.js +2 -4
  124. package/dist-cjs/lib/ui/components/HelpMenu.js.map +1 -1
  125. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog.js +2 -4
  126. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog.js.map +1 -1
  127. package/dist-cjs/lib/ui/components/Menu.js +5 -10
  128. package/dist-cjs/lib/ui/components/Menu.js.map +1 -1
  129. package/dist-cjs/lib/ui/components/NavigationZone/Minimap.js +3 -6
  130. package/dist-cjs/lib/ui/components/NavigationZone/Minimap.js.map +1 -1
  131. package/dist-cjs/lib/ui/components/PageMenu/PageMenu.js +5 -10
  132. package/dist-cjs/lib/ui/components/PageMenu/PageMenu.js.map +1 -1
  133. package/dist-cjs/lib/ui/components/PenModeToggle.js +1 -2
  134. package/dist-cjs/lib/ui/components/PenModeToggle.js.map +1 -1
  135. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +1 -2
  136. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +1 -1
  137. package/dist-cjs/lib/ui/components/StylePanel/StylePanel.js +1 -2
  138. package/dist-cjs/lib/ui/components/StylePanel/StylePanel.js.map +1 -1
  139. package/dist-cjs/lib/ui/components/Toasts.js +1 -2
  140. package/dist-cjs/lib/ui/components/Toasts.js.map +1 -1
  141. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +1 -2
  142. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +1 -1
  143. package/dist-cjs/lib/ui/components/TrashButton.js +1 -2
  144. package/dist-cjs/lib/ui/components/TrashButton.js.map +1 -1
  145. package/dist-cjs/lib/ui/components/primitives/ButtonPicker.js +2 -4
  146. package/dist-cjs/lib/ui/components/primitives/ButtonPicker.js.map +1 -1
  147. package/dist-cjs/lib/ui/components/primitives/Input.js +1 -2
  148. package/dist-cjs/lib/ui/components/primitives/Input.js.map +1 -1
  149. package/dist-cjs/lib/ui/components/primitives/Slider.js +1 -2
  150. package/dist-cjs/lib/ui/components/primitives/Slider.js.map +1 -1
  151. package/dist-cjs/lib/ui/hooks/clipboard/pasteExcalidrawContent.js +2 -4
  152. package/dist-cjs/lib/ui/hooks/clipboard/pasteExcalidrawContent.js.map +1 -1
  153. package/dist-cjs/lib/ui/hooks/menuHelpers.js +5 -10
  154. package/dist-cjs/lib/ui/hooks/menuHelpers.js.map +1 -1
  155. package/dist-cjs/lib/ui/hooks/useActions.js +73 -146
  156. package/dist-cjs/lib/ui/hooks/useActions.js.map +1 -1
  157. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +6 -12
  158. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +1 -1
  159. package/dist-cjs/lib/ui/hooks/useHighDpiCanvas.js +1 -2
  160. package/dist-cjs/lib/ui/hooks/useHighDpiCanvas.js.map +1 -1
  161. package/dist-cjs/lib/ui/hooks/useInsertMedia.js +1 -2
  162. package/dist-cjs/lib/ui/hooks/useInsertMedia.js.map +1 -1
  163. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +8 -16
  164. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +1 -1
  165. package/dist-cjs/lib/ui/hooks/useMenuIsOpen.js +1 -2
  166. package/dist-cjs/lib/ui/hooks/useMenuIsOpen.js.map +1 -1
  167. package/dist-cjs/lib/ui/hooks/useMenuSchema.js +2 -4
  168. package/dist-cjs/lib/ui/hooks/useMenuSchema.js.map +1 -1
  169. package/dist-cjs/lib/ui/hooks/usePreloadAssets.js +2 -4
  170. package/dist-cjs/lib/ui/hooks/usePreloadAssets.js.map +1 -1
  171. package/dist-cjs/lib/ui/hooks/usePreloadIcons.js +1 -2
  172. package/dist-cjs/lib/ui/hooks/usePreloadIcons.js.map +1 -1
  173. package/dist-cjs/lib/ui/hooks/usePrint.js +2 -4
  174. package/dist-cjs/lib/ui/hooks/usePrint.js.map +1 -1
  175. package/dist-cjs/lib/ui/hooks/useRevelantStyles.js +1 -2
  176. package/dist-cjs/lib/ui/hooks/useRevelantStyles.js.map +1 -1
  177. package/dist-cjs/lib/utils/assets/is-gif-animated.js +9 -0
  178. package/dist-cjs/lib/utils/assets/is-gif-animated.js.map +1 -1
  179. package/dist-cjs/lib/utils/export/export.js +2 -4
  180. package/dist-cjs/lib/utils/export/export.js.map +1 -1
  181. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  182. package/dist-cjs/lib/utils/export/exportAs.js.map +1 -1
  183. package/dist-cjs/lib/utils/frames/frames.js +4 -8
  184. package/dist-cjs/lib/utils/frames/frames.js.map +1 -1
  185. package/dist-cjs/lib/utils/static-assets/assetUrls.js +1 -2
  186. package/dist-cjs/lib/utils/static-assets/assetUrls.js.map +1 -1
  187. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +10 -20
  188. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +1 -1
  189. package/dist-cjs/lib/utils/tldr/file.js +1 -2
  190. package/dist-cjs/lib/utils/tldr/file.js.map +1 -1
  191. package/dist-esm/lib/Tldraw.mjs +1 -2
  192. package/dist-esm/lib/Tldraw.mjs.map +1 -1
  193. package/dist-esm/lib/canvas/TldrawHandles.mjs +1 -2
  194. package/dist-esm/lib/canvas/TldrawHandles.mjs.map +1 -1
  195. package/dist-esm/lib/canvas/TldrawHoveredShapeIndicator.mjs +1 -2
  196. package/dist-esm/lib/canvas/TldrawHoveredShapeIndicator.mjs.map +1 -1
  197. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -2
  198. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +1 -1
  199. package/dist-esm/lib/canvas/TldrawSelectionBackground.mjs +1 -2
  200. package/dist-esm/lib/canvas/TldrawSelectionBackground.mjs.map +1 -1
  201. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +1 -2
  202. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +1 -1
  203. package/dist-esm/lib/defaultExternalContentHandlers.mjs +3 -6
  204. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +1 -1
  205. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +7 -14
  206. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +1 -1
  207. package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +1 -2
  208. package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +1 -1
  209. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +6 -12
  210. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +1 -1
  211. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +12 -24
  212. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +1 -1
  213. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -2
  214. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  215. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs +4 -8
  216. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
  217. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +3 -6
  218. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +1 -1
  219. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -2
  220. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +1 -1
  221. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +4 -8
  222. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +1 -1
  223. package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +1 -2
  224. package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +1 -1
  225. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +2 -4
  226. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +1 -1
  227. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +5 -10
  228. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
  229. package/dist-esm/lib/shapes/line/components/svg.mjs +1 -2
  230. package/dist-esm/lib/shapes/line/components/svg.mjs.map +1 -1
  231. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +5 -10
  232. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +1 -1
  233. package/dist-esm/lib/shapes/poll/components/CustomizedAxisTick.mjs +1 -2
  234. package/dist-esm/lib/shapes/poll/components/CustomizedAxisTick.mjs.map +1 -1
  235. package/dist-esm/lib/shapes/poll/components/poll-content.mjs +1 -2
  236. package/dist-esm/lib/shapes/poll/components/poll-content.mjs.map +1 -1
  237. package/dist-esm/lib/shapes/shared/TextHelpers.mjs +2 -4
  238. package/dist-esm/lib/shapes/shared/TextHelpers.mjs.map +1 -1
  239. package/dist-esm/lib/shapes/shared/createTextSvgElementFromSpans.mjs +1 -2
  240. package/dist-esm/lib/shapes/shared/createTextSvgElementFromSpans.mjs.map +1 -1
  241. package/dist-esm/lib/shapes/shared/defaultStyleDefs.mjs +8 -16
  242. package/dist-esm/lib/shapes/shared/defaultStyleDefs.mjs.map +1 -1
  243. package/dist-esm/lib/shapes/shared/freehand/getStrokePoints.mjs +6 -12
  244. package/dist-esm/lib/shapes/shared/freehand/getStrokePoints.mjs.map +1 -1
  245. package/dist-esm/lib/shapes/shared/freehand/setStrokePointRadii.mjs +1 -2
  246. package/dist-esm/lib/shapes/shared/freehand/setStrokePointRadii.mjs.map +1 -1
  247. package/dist-esm/lib/shapes/shared/freehand/svgInk.mjs +2 -4
  248. package/dist-esm/lib/shapes/shared/freehand/svgInk.mjs.map +1 -1
  249. package/dist-esm/lib/shapes/shared/useEditableText.mjs +5 -10
  250. package/dist-esm/lib/shapes/shared/useEditableText.mjs.map +1 -1
  251. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +6 -12
  252. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +1 -1
  253. package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +1 -2
  254. package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +1 -1
  255. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +1 -2
  256. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +1 -1
  257. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +2 -4
  258. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  259. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +2 -4
  260. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +1 -1
  261. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +1 -2
  262. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +1 -1
  263. package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +25 -30
  264. package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +1 -1
  265. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +12 -24
  266. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +1 -1
  267. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +1 -2
  268. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +1 -1
  269. package/dist-esm/lib/tools/SelectTool/childStates/Cropping.mjs +8 -16
  270. package/dist-esm/lib/tools/SelectTool/childStates/Cropping.mjs.map +1 -1
  271. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +3 -6
  272. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +1 -1
  273. package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +2 -4
  274. package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +1 -1
  275. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +21 -42
  276. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +1 -1
  277. package/dist-esm/lib/tools/SelectTool/childStates/PointingCropHandle.mjs +1 -2
  278. package/dist-esm/lib/tools/SelectTool/childStates/PointingCropHandle.mjs.map +1 -1
  279. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +1 -2
  280. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +1 -1
  281. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +1 -2
  282. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +1 -1
  283. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -10
  284. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +1 -1
  285. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +2 -4
  286. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +1 -1
  287. package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +1 -2
  288. package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +1 -1
  289. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +4 -8
  290. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +1 -1
  291. package/dist-esm/lib/tools/SelectTool/children/DraggingHandle.mjs +3 -6
  292. package/dist-esm/lib/tools/SelectTool/children/DraggingHandle.mjs.map +1 -1
  293. package/dist-esm/lib/tools/selection-logic/updateHoveredId.mjs +1 -2
  294. package/dist-esm/lib/tools/selection-logic/updateHoveredId.mjs.map +1 -1
  295. package/dist-esm/lib/ui/assetUrls.mjs +1 -2
  296. package/dist-esm/lib/ui/assetUrls.mjs.map +1 -1
  297. package/dist-esm/lib/ui/components/ActionsMenu.mjs +2 -4
  298. package/dist-esm/lib/ui/components/ActionsMenu.mjs.map +1 -1
  299. package/dist-esm/lib/ui/components/BackToContent.mjs +1 -2
  300. package/dist-esm/lib/ui/components/BackToContent.mjs.map +1 -1
  301. package/dist-esm/lib/ui/components/ContextMenu.mjs +3 -6
  302. package/dist-esm/lib/ui/components/ContextMenu.mjs.map +1 -1
  303. package/dist-esm/lib/ui/components/DebugPanel.mjs +2 -4
  304. package/dist-esm/lib/ui/components/DebugPanel.mjs.map +1 -1
  305. package/dist-esm/lib/ui/components/EditLinkDialog.mjs +2 -4
  306. package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +1 -1
  307. package/dist-esm/lib/ui/components/EmbedDialog.mjs +1 -2
  308. package/dist-esm/lib/ui/components/EmbedDialog.mjs.map +1 -1
  309. package/dist-esm/lib/ui/components/FollowingIndicator.mjs +2 -4
  310. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +1 -1
  311. package/dist-esm/lib/ui/components/HelpMenu.mjs +2 -4
  312. package/dist-esm/lib/ui/components/HelpMenu.mjs.map +1 -1
  313. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog.mjs +2 -4
  314. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog.mjs.map +1 -1
  315. package/dist-esm/lib/ui/components/Menu.mjs +5 -10
  316. package/dist-esm/lib/ui/components/Menu.mjs.map +1 -1
  317. package/dist-esm/lib/ui/components/NavigationZone/Minimap.mjs +3 -6
  318. package/dist-esm/lib/ui/components/NavigationZone/Minimap.mjs.map +1 -1
  319. package/dist-esm/lib/ui/components/PageMenu/PageMenu.mjs +5 -10
  320. package/dist-esm/lib/ui/components/PageMenu/PageMenu.mjs.map +1 -1
  321. package/dist-esm/lib/ui/components/PenModeToggle.mjs +1 -2
  322. package/dist-esm/lib/ui/components/PenModeToggle.mjs.map +1 -1
  323. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +1 -2
  324. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +1 -1
  325. package/dist-esm/lib/ui/components/StylePanel/StylePanel.mjs +1 -2
  326. package/dist-esm/lib/ui/components/StylePanel/StylePanel.mjs.map +1 -1
  327. package/dist-esm/lib/ui/components/Toasts.mjs +1 -2
  328. package/dist-esm/lib/ui/components/Toasts.mjs.map +1 -1
  329. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +1 -2
  330. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +1 -1
  331. package/dist-esm/lib/ui/components/TrashButton.mjs +1 -2
  332. package/dist-esm/lib/ui/components/TrashButton.mjs.map +1 -1
  333. package/dist-esm/lib/ui/components/primitives/ButtonPicker.mjs +2 -4
  334. package/dist-esm/lib/ui/components/primitives/ButtonPicker.mjs.map +1 -1
  335. package/dist-esm/lib/ui/components/primitives/Input.mjs +1 -2
  336. package/dist-esm/lib/ui/components/primitives/Input.mjs.map +1 -1
  337. package/dist-esm/lib/ui/components/primitives/Slider.mjs +1 -2
  338. package/dist-esm/lib/ui/components/primitives/Slider.mjs.map +1 -1
  339. package/dist-esm/lib/ui/hooks/clipboard/pasteExcalidrawContent.mjs +2 -4
  340. package/dist-esm/lib/ui/hooks/clipboard/pasteExcalidrawContent.mjs.map +1 -1
  341. package/dist-esm/lib/ui/hooks/menuHelpers.mjs +5 -10
  342. package/dist-esm/lib/ui/hooks/menuHelpers.mjs.map +1 -1
  343. package/dist-esm/lib/ui/hooks/useActions.mjs +73 -146
  344. package/dist-esm/lib/ui/hooks/useActions.mjs.map +1 -1
  345. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +6 -12
  346. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +1 -1
  347. package/dist-esm/lib/ui/hooks/useHighDpiCanvas.mjs +1 -2
  348. package/dist-esm/lib/ui/hooks/useHighDpiCanvas.mjs.map +1 -1
  349. package/dist-esm/lib/ui/hooks/useInsertMedia.mjs +1 -2
  350. package/dist-esm/lib/ui/hooks/useInsertMedia.mjs.map +1 -1
  351. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +8 -16
  352. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +1 -1
  353. package/dist-esm/lib/ui/hooks/useMenuIsOpen.mjs +1 -2
  354. package/dist-esm/lib/ui/hooks/useMenuIsOpen.mjs.map +1 -1
  355. package/dist-esm/lib/ui/hooks/useMenuSchema.mjs +2 -4
  356. package/dist-esm/lib/ui/hooks/useMenuSchema.mjs.map +1 -1
  357. package/dist-esm/lib/ui/hooks/usePreloadAssets.mjs +2 -4
  358. package/dist-esm/lib/ui/hooks/usePreloadAssets.mjs.map +1 -1
  359. package/dist-esm/lib/ui/hooks/usePreloadIcons.mjs +1 -2
  360. package/dist-esm/lib/ui/hooks/usePreloadIcons.mjs.map +1 -1
  361. package/dist-esm/lib/ui/hooks/usePrint.mjs +2 -4
  362. package/dist-esm/lib/ui/hooks/usePrint.mjs.map +1 -1
  363. package/dist-esm/lib/ui/hooks/useRevelantStyles.mjs +1 -2
  364. package/dist-esm/lib/ui/hooks/useRevelantStyles.mjs.map +1 -1
  365. package/dist-esm/lib/utils/assets/is-gif-animated.mjs +9 -0
  366. package/dist-esm/lib/utils/assets/is-gif-animated.mjs.map +1 -1
  367. package/dist-esm/lib/utils/export/export.mjs +2 -4
  368. package/dist-esm/lib/utils/export/export.mjs.map +1 -1
  369. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  370. package/dist-esm/lib/utils/export/exportAs.mjs.map +1 -1
  371. package/dist-esm/lib/utils/frames/frames.mjs +4 -8
  372. package/dist-esm/lib/utils/frames/frames.mjs.map +1 -1
  373. package/dist-esm/lib/utils/static-assets/assetUrls.mjs +1 -2
  374. package/dist-esm/lib/utils/static-assets/assetUrls.mjs.map +1 -1
  375. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +10 -20
  376. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +1 -1
  377. package/dist-esm/lib/utils/tldr/file.mjs +1 -2
  378. package/dist-esm/lib/utils/tldr/file.mjs.map +1 -1
  379. package/package.json +2 -2
@@ -32,13 +32,11 @@ const usePreloadFont = (id, font) => {
32
32
  };
33
33
  const fontInstance = new FontFace(id, `url(${url})`, descriptors);
34
34
  fontInstance.load().then(() => {
35
- if (cancelled)
36
- return;
35
+ if (cancelled) return;
37
36
  document.fonts.add(fontInstance);
38
37
  setState(0 /* SUCCESS */);
39
38
  }).catch((err) => {
40
- if (cancelled)
41
- return;
39
+ if (cancelled) return;
42
40
  console.error(err);
43
41
  setState(1 /* FAILED */);
44
42
  });
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/hooks/usePreloadAssets.ts"],
4
4
  "sourcesContent": ["import { useEffect, useMemo, useState } from 'react'\nimport { TLEditorAssetUrls } from '../../utils/static-assets/assetUrls'\n\nexport type TLTypeFace = {\n\turl: string\n\tdisplay?: any // FontDisplay\n\tfeatureSettings?: string\n\tstretch?: string\n\tstyle?: string\n\tunicodeRange?: string\n\tvariant?: string\n\tweight?: string\n}\n\nexport type TLTypeFaces = {\n\tdraw: TLTypeFace\n\tmonospace: TLTypeFace\n\tserif: TLTypeFace\n\tsansSerif: TLTypeFace\n}\n\nenum PreloadStatus {\n\tSUCCESS,\n\tFAILED,\n\tWAITING,\n}\n\nconst usePreloadFont = (id: string, font: TLTypeFace): PreloadStatus => {\n\tconst [state, setState] = useState<PreloadStatus>(PreloadStatus.WAITING)\n\n\tuseEffect(() => {\n\t\tconst {\n\t\t\turl,\n\t\t\tstyle = 'normal',\n\t\t\tweight = '500',\n\t\t\tdisplay,\n\t\t\tfeatureSettings,\n\t\t\tstretch,\n\t\t\tunicodeRange,\n\t\t\tvariant,\n\t\t} = font\n\n\t\tlet cancelled = false\n\t\tsetState(PreloadStatus.WAITING)\n\n\t\tconst descriptors: FontFaceDescriptors = {\n\t\t\tstyle,\n\t\t\tweight,\n\t\t\tdisplay,\n\t\t\tfeatureSettings,\n\t\t\tstretch,\n\t\t\tunicodeRange,\n\t\t\t// @ts-expect-error\n\t\t\tvariant,\n\t\t}\n\n\t\tconst fontInstance = new FontFace(id, `url(${url})`, descriptors)\n\n\t\tfontInstance\n\t\t\t.load()\n\t\t\t.then(() => {\n\t\t\t\tif (cancelled) return\n\t\t\t\tdocument.fonts.add(fontInstance)\n\t\t\t\tsetState(PreloadStatus.SUCCESS)\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tif (cancelled) return\n\t\t\t\tconsole.error(err)\n\t\t\t\tsetState(PreloadStatus.FAILED)\n\t\t\t})\n\n\t\t// @ts-expect-error\n\t\tfontInstance.$$_url = url\n\n\t\t// @ts-expect-error\n\t\tfontInstance.$$_fontface = `\n@font-face {\n\tfont-family: ${fontInstance.family};\n\tfont-stretch: ${fontInstance.stretch};\n\tfont-weight: ${fontInstance.weight};\n\tfont-style: ${fontInstance.style};\n\tsrc: url(\"${url}\") format(\"woff2\")\n}`\n\n\t\treturn () => {\n\t\t\tdocument.fonts.delete(fontInstance)\n\t\t\tcancelled = true\n\t\t}\n\t}, [id, font])\n\n\treturn state\n}\n\nfunction getTypefaces(assetUrls: TLEditorAssetUrls) {\n\treturn {\n\t\tdraw: { url: assetUrls.fonts.draw },\n\t\tserif: { url: assetUrls.fonts.serif },\n\t\tsansSerif: { url: assetUrls.fonts.sansSerif },\n\t\tmonospace: { url: assetUrls.fonts.monospace },\n\t}\n}\n\n// todo: Expose this via a public API (prop on <Tldraw>).\n\nexport function usePreloadAssets(assetUrls: TLEditorAssetUrls) {\n\tconst typefaces = useMemo(() => getTypefaces(assetUrls), [assetUrls])\n\n\tconst results = [\n\t\tusePreloadFont('tldraw_draw', typefaces.draw),\n\t\tusePreloadFont('tldraw_serif', typefaces.serif),\n\t\tusePreloadFont('tldraw_sans', typefaces.sansSerif),\n\t\tusePreloadFont('tldraw_mono', typefaces.monospace),\n\t]\n\n\treturn {\n\t\t// If any of the results have errored, then preloading has failed\n\t\terror: results.some((result) => result === PreloadStatus.FAILED),\n\t\t// If any of the results are waiting, then we're not done yet\n\t\tdone: !results.some((result) => result === PreloadStatus.WAITING),\n\t}\n}\n"],
5
- "mappings": "AAAA,SAAS,WAAW,SAAS,gBAAgB;AAqB7C,IAAK,gBAAL,kBAAKA,mBAAL;AACC,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAHI,SAAAA;AAAA,GAAA;AAML,MAAM,iBAAiB,CAAC,IAAY,SAAoC;AACvE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,eAAqB;AAEvE,YAAU,MAAM;AACf,UAAM;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,IAAI;AAEJ,QAAI,YAAY;AAChB,aAAS,eAAqB;AAE9B,UAAM,cAAmC;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,IACD;AAEA,UAAM,eAAe,IAAI,SAAS,IAAI,OAAO,GAAG,KAAK,WAAW;AAEhE,iBACE,KAAK,EACL,KAAK,MAAM;AACX,UAAI;AAAW;AACf,eAAS,MAAM,IAAI,YAAY;AAC/B,eAAS,eAAqB;AAAA,IAC/B,CAAC,EACA,MAAM,CAAC,QAAQ;AACf,UAAI;AAAW;AACf,cAAQ,MAAM,GAAG;AACjB,eAAS,cAAoB;AAAA,IAC9B,CAAC;AAGF,iBAAa,SAAS;AAGtB,iBAAa,cAAc;AAAA;AAAA,gBAEb,aAAa,MAAM;AAAA,iBAClB,aAAa,OAAO;AAAA,gBACrB,aAAa,MAAM;AAAA,eACpB,aAAa,KAAK;AAAA,aACpB,GAAG;AAAA;AAGd,WAAO,MAAM;AACZ,eAAS,MAAM,OAAO,YAAY;AAClC,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,IAAI,IAAI,CAAC;AAEb,SAAO;AACR;AAEA,SAAS,aAAa,WAA8B;AACnD,SAAO;AAAA,IACN,MAAM,EAAE,KAAK,UAAU,MAAM,KAAK;AAAA,IAClC,OAAO,EAAE,KAAK,UAAU,MAAM,MAAM;AAAA,IACpC,WAAW,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,IAC5C,WAAW,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,EAC7C;AACD;AAIO,SAAS,iBAAiB,WAA8B;AAC9D,QAAM,YAAY,QAAQ,MAAM,aAAa,SAAS,GAAG,CAAC,SAAS,CAAC;AAEpE,QAAM,UAAU;AAAA,IACf,eAAe,eAAe,UAAU,IAAI;AAAA,IAC5C,eAAe,gBAAgB,UAAU,KAAK;AAAA,IAC9C,eAAe,eAAe,UAAU,SAAS;AAAA,IACjD,eAAe,eAAe,UAAU,SAAS;AAAA,EAClD;AAEA,SAAO;AAAA;AAAA,IAEN,OAAO,QAAQ,KAAK,CAAC,WAAW,WAAW,cAAoB;AAAA;AAAA,IAE/D,MAAM,CAAC,QAAQ,KAAK,CAAC,WAAW,WAAW,eAAqB;AAAA,EACjE;AACD;",
5
+ "mappings": "AAAA,SAAS,WAAW,SAAS,gBAAgB;AAqB7C,IAAK,gBAAL,kBAAKA,mBAAL;AACC,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AACA,EAAAA,8BAAA;AAHI,SAAAA;AAAA,GAAA;AAML,MAAM,iBAAiB,CAAC,IAAY,SAAoC;AACvE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,eAAqB;AAEvE,YAAU,MAAM;AACf,UAAM;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,MACR,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,IAAI;AAEJ,QAAI,YAAY;AAChB,aAAS,eAAqB;AAE9B,UAAM,cAAmC;AAAA,MACxC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAEA;AAAA,IACD;AAEA,UAAM,eAAe,IAAI,SAAS,IAAI,OAAO,GAAG,KAAK,WAAW;AAEhE,iBACE,KAAK,EACL,KAAK,MAAM;AACX,UAAI,UAAW;AACf,eAAS,MAAM,IAAI,YAAY;AAC/B,eAAS,eAAqB;AAAA,IAC/B,CAAC,EACA,MAAM,CAAC,QAAQ;AACf,UAAI,UAAW;AACf,cAAQ,MAAM,GAAG;AACjB,eAAS,cAAoB;AAAA,IAC9B,CAAC;AAGF,iBAAa,SAAS;AAGtB,iBAAa,cAAc;AAAA;AAAA,gBAEb,aAAa,MAAM;AAAA,iBAClB,aAAa,OAAO;AAAA,gBACrB,aAAa,MAAM;AAAA,eACpB,aAAa,KAAK;AAAA,aACpB,GAAG;AAAA;AAGd,WAAO,MAAM;AACZ,eAAS,MAAM,OAAO,YAAY;AAClC,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,IAAI,IAAI,CAAC;AAEb,SAAO;AACR;AAEA,SAAS,aAAa,WAA8B;AACnD,SAAO;AAAA,IACN,MAAM,EAAE,KAAK,UAAU,MAAM,KAAK;AAAA,IAClC,OAAO,EAAE,KAAK,UAAU,MAAM,MAAM;AAAA,IACpC,WAAW,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,IAC5C,WAAW,EAAE,KAAK,UAAU,MAAM,UAAU;AAAA,EAC7C;AACD;AAIO,SAAS,iBAAiB,WAA8B;AAC9D,QAAM,YAAY,QAAQ,MAAM,aAAa,SAAS,GAAG,CAAC,SAAS,CAAC;AAEpE,QAAM,UAAU;AAAA,IACf,eAAe,eAAe,UAAU,IAAI;AAAA,IAC5C,eAAe,gBAAgB,UAAU,KAAK;AAAA,IAC9C,eAAe,eAAe,UAAU,SAAS;AAAA,IACjD,eAAe,eAAe,UAAU,SAAS;AAAA,EAClD;AAEA,SAAO;AAAA;AAAA,IAEN,OAAO,QAAQ,KAAK,CAAC,WAAW,WAAW,cAAoB;AAAA;AAAA,IAE/D,MAAM,CAAC,QAAQ,KAAK,CAAC,WAAW,WAAW,eAAqB;AAAA,EACjE;AACD;",
6
6
  "names": ["PreloadStatus"]
7
7
  }
@@ -14,8 +14,7 @@ function usePreloadIcons() {
14
14
  return image.decode();
15
15
  })
16
16
  );
17
- if (cancelled)
18
- return;
17
+ if (cancelled) return;
19
18
  setIsLoaded(true);
20
19
  }
21
20
  loadImages();
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/hooks/usePreloadIcons.ts"],
4
4
  "sourcesContent": ["import { useEffect, useState } from 'react'\nimport { iconTypes } from '../icon-types'\nimport { useAssetUrls } from './useAssetUrls'\n\n/** @internal */\nexport function usePreloadIcons(): boolean {\n\tconst [isLoaded, setIsLoaded] = useState<boolean>(false)\n\tconst assetUrls = useAssetUrls()\n\n\tuseEffect(() => {\n\t\tlet cancelled = false\n\t\tasync function loadImages() {\n\t\t\t// Run through all of the icons and load them. It doesn't matter\n\t\t\t// if any of the images don't load; though we expect that they would.\n\t\t\t// Instead, we just want to make sure that the browser has cached\n\t\t\t// all of the icons it can so that they're available when we need them.\n\n\t\t\tawait Promise.allSettled(\n\t\t\t\ticonTypes.map((icon) => {\n\t\t\t\t\tconst image = new Image()\n\t\t\t\t\timage.src = assetUrls.icons[icon]\n\t\t\t\t\treturn image.decode()\n\t\t\t\t})\n\t\t\t)\n\n\t\t\tif (cancelled) return\n\t\t\tsetIsLoaded(true)\n\t\t}\n\n\t\tloadImages()\n\n\t\treturn () => {\n\t\t\tcancelled = true\n\t\t}\n\t}, [isLoaded, assetUrls])\n\n\treturn isLoaded\n}\n"],
5
- "mappings": "AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAGtB,SAAS,kBAA2B;AAC1C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAkB,KAAK;AACvD,QAAM,YAAY,aAAa;AAE/B,YAAU,MAAM;AACf,QAAI,YAAY;AAChB,mBAAe,aAAa;AAM3B,YAAM,QAAQ;AAAA,QACb,UAAU,IAAI,CAAC,SAAS;AACvB,gBAAM,QAAQ,IAAI,MAAM;AACxB,gBAAM,MAAM,UAAU,MAAM,IAAI;AAChC,iBAAO,MAAM,OAAO;AAAA,QACrB,CAAC;AAAA,MACF;AAEA,UAAI;AAAW;AACf,kBAAY,IAAI;AAAA,IACjB;AAEA,eAAW;AAEX,WAAO,MAAM;AACZ,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,UAAU,SAAS,CAAC;AAExB,SAAO;AACR;",
5
+ "mappings": "AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAC1B,SAAS,oBAAoB;AAGtB,SAAS,kBAA2B;AAC1C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAkB,KAAK;AACvD,QAAM,YAAY,aAAa;AAE/B,YAAU,MAAM;AACf,QAAI,YAAY;AAChB,mBAAe,aAAa;AAM3B,YAAM,QAAQ;AAAA,QACb,UAAU,IAAI,CAAC,SAAS;AACvB,gBAAM,QAAQ,IAAI,MAAM;AACxB,gBAAM,MAAM,UAAU,MAAM,IAAI;AAChC,iBAAO,MAAM,OAAO;AAAA,QACrB,CAAC;AAAA,MACF;AAEA,UAAI,UAAW;AACf,kBAAY,IAAI;AAAA,IACjB;AAEA,eAAW;AAEX,WAAO,MAAM;AACZ,kBAAY;AAAA,IACb;AAAA,EACD,GAAG,CAAC,UAAU,SAAS,CAAC;AAExB,SAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -9,10 +9,8 @@ function usePrint() {
9
9
  const el = document.createElement("div");
10
10
  const style = document.createElement("style");
11
11
  const clearElements = (printEl, styleEl) => {
12
- if (printEl)
13
- printEl.innerHTML = "";
14
- if (styleEl && document.head.contains(styleEl))
15
- document.head.removeChild(styleEl);
12
+ if (printEl) printEl.innerHTML = "";
13
+ if (styleEl && document.head.contains(styleEl)) document.head.removeChild(styleEl);
16
14
  if (printEl && document.body.contains(printEl)) {
17
15
  document.body.removeChild(printEl);
18
16
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/hooks/usePrint.ts"],
4
4
  "sourcesContent": ["import { uniqueId, useEditor } from '@bigbluebutton/editor'\nimport { useCallback, useRef } from 'react'\n\n/** @internal */\nexport function usePrint() {\n\tconst editor = useEditor()\n\tconst prevPrintEl = useRef<HTMLDivElement | null>(null)\n\tconst prevStyleEl = useRef<HTMLStyleElement | null>(null)\n\n\treturn useCallback(\n\t\tasync function printSelectionOrPages() {\n\t\t\tconst el = document.createElement('div')\n\t\t\tconst style = document.createElement('style')\n\n\t\t\tconst clearElements = (printEl: HTMLDivElement | null, styleEl: HTMLStyleElement | null) => {\n\t\t\t\tif (printEl) printEl.innerHTML = ''\n\t\t\t\tif (styleEl && document.head.contains(styleEl)) document.head.removeChild(styleEl)\n\t\t\t\tif (printEl && document.body.contains(printEl)) {\n\t\t\t\t\tdocument.body.removeChild(printEl)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Always make sure we have a clean root element.\n\t\t\tclearElements(prevPrintEl.current, prevStyleEl.current)\n\t\t\tprevPrintEl.current = el\n\t\t\tprevStyleEl.current = style\n\n\t\t\t// Random because this isn't for end users\n\t\t\tconst className = `tl-print-surface-${uniqueId()}`\n\n\t\t\tel.className = className\n\t\t\t// NOTE: Works in most envs except safari, needs further review\n\t\t\tconst enableMargins = false\n\t\t\t// NOTE: Currently buggy needs further investigation\n\t\t\tconst allowAllPages = false\n\t\t\tstyle.innerHTML = `\n\t\t\t.${className} {\n\t\t\t\tdisplay: none;\n\t\t\t}\n\n\t\t\t.${className} svg {\n\t\t\t\tmax-width: 100%;\n\t\t\t\theight: 100%;\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t@media print {\t\t\t\t \n\t\t\t\thtml, body {\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t}\n\n\t\t\t\tbody {\n\t\t\t\t\tposition: relative;\n\t\t\t\t}\n\n\t\t\t\tbody > * {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.tldraw__editor {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.${className} {\n\t\t\t\t\tdisplay: block !important;\n\t\t\t\t\tbackground: white;\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tmax-width: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item {\n\t\t\t\t\tpadding: 10mm;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tmin-height: 100%;\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\tpage-break-after: always;\n\t\t\t\t\tposition: relative;\n\t\t\t\t\toverflow: hidden;\n\t\t\t\t\theight: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__main {\n\t\t\t\t\tflex: 1;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\talign-items: center;\n\t\t\t\t\tjustify-content: center;\n\t\t\t\t\tmax-height: 100%;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__header {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__footer {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t\ttext-align: right;\n\t\t\t\t}\n\n\t\t\t\t.${className}__item__footer__hide {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t${\n\t\t\t\t\t!enableMargins\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: `\n\t\t\t\t\t/**\n\t\t\t\t\t * Note: Safari doesn't support removing the page margins to remove them all!\n\t\t\t\t\t */\n\t\t\t\t\t@page {\n\t\t\t\t\t\tmargin:0;\n\t\t\t\t\t}\n\n\t\t\t\t\t.${className} .${className}__item__header {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\n\t\t\t\t\t.${className} .${className}__item__footer {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\t\t\t\t`\n\t\t\t\t}\n\t\t\t}\n\n\t\t`\n\n\t\t\tconst beforePrintHandler = () => {\n\t\t\t\tdocument.head.appendChild(style)\n\t\t\t\tdocument.body.appendChild(el)\n\t\t\t}\n\n\t\t\tconst afterPrintHandler = () => {\n\t\t\t\teditor.once('change-history', () => {\n\t\t\t\t\tclearElements(el, style)\n\t\t\t\t})\n\t\t\t}\n\n\t\t\twindow.addEventListener('beforeprint', beforePrintHandler)\n\t\t\twindow.addEventListener('afterprint', afterPrintHandler)\n\n\t\t\tfunction addPageToPrint(title: string, footer: string | null, svg: SVGElement) {\n\t\t\t\ttry {\n\t\t\t\t\tel.innerHTML += `<div class=\"${className}__item\">\n <div class=\"${className}__item__header\">\n ${title.replace(/</g, '&lt;').replace(/>/g, '&gt;')}\n </div>\n <div class=\"${className}__item__main\">\n ${svg.outerHTML}\n </div>\n <div class=\"${className}__item__footer ${className}__item__footer__${footer ? '' : 'hide'}\">\n ${footer ?? ''}\n </div>\n </div>`\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction triggerPrint() {\n\t\t\t\tif (editor.environment.isChromeForIos) {\n\t\t\t\t\tbeforePrintHandler()\n\t\t\t\t\twindow.print()\n\t\t\t\t} else if (editor.environment.isSafari) {\n\t\t\t\t\tbeforePrintHandler()\n\t\t\t\t\t// eslint-disable-next-line deprecation/deprecation\n\t\t\t\t\tdocument.execCommand('print', false)\n\t\t\t\t} else {\n\t\t\t\t\twindow.print()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst selectedShapeIds = editor.getSelectedShapeIds()\n\t\t\tconst currentPageId = editor.getCurrentPageId()\n\t\t\tconst pages = editor.getPages()\n\n\t\t\tconst preserveAspectRatio = 'xMidYMid meet'\n\n\t\t\tconst svgOpts = {\n\t\t\t\tscale: 1,\n\t\t\t\tbackground: false,\n\t\t\t\tdarkMode: false,\n\t\t\t\tpreserveAspectRatio,\n\t\t\t}\n\n\t\t\tif (editor.getSelectedShapeIds().length > 0) {\n\t\t\t\t// Print the selected ids from the current page\n\t\t\t\tconst svg = await editor.getSvg(selectedShapeIds, svgOpts)\n\n\t\t\t\tif (svg) {\n\t\t\t\t\tconst page = pages.find((p) => p.id === currentPageId)\n\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page?.name}`, null, svg)\n\t\t\t\t\ttriggerPrint()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (allowAllPages) {\n\t\t\t\t\t// Print all pages\n\t\t\t\t\tfor (let i = 0; i < pages.length; i++) {\n\t\t\t\t\t\tconst page = pages[i]\n\t\t\t\t\t\tconst svg = await editor.getSvg(editor.getSortedChildIdsForParent(page.id), svgOpts)\n\t\t\t\t\t\tif (svg) {\n\t\t\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page.name}`, `${i}/${pages.length}`, svg)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttriggerPrint()\n\t\t\t\t} else {\n\t\t\t\t\tconst page = editor.getCurrentPage()\n\t\t\t\t\tconst svg = await editor.getSvg(editor.getSortedChildIdsForParent(page.id), svgOpts)\n\t\t\t\t\tif (svg) {\n\t\t\t\t\t\taddPageToPrint(`tldraw \u2014 ${page.name}`, null, svg)\n\t\t\t\t\t\ttriggerPrint()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\twindow.removeEventListener('beforeprint', beforePrintHandler)\n\t\t\twindow.removeEventListener('afterprint', afterPrintHandler)\n\t\t},\n\t\t[editor]\n\t)\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "AAAA,SAAS,UAAU,iBAAiB;AACpC,SAAS,aAAa,cAAc;AAG7B,SAAS,WAAW;AAC1B,QAAM,SAAS,UAAU;AACzB,QAAM,cAAc,OAA8B,IAAI;AACtD,QAAM,cAAc,OAAgC,IAAI;AAExD,SAAO;AAAA,IACN,eAAe,wBAAwB;AACtC,YAAM,KAAK,SAAS,cAAc,KAAK;AACvC,YAAM,QAAQ,SAAS,cAAc,OAAO;AAE5C,YAAM,gBAAgB,CAAC,SAAgC,YAAqC;AAC3F,YAAI,QAAS,SAAQ,YAAY;AACjC,YAAI,WAAW,SAAS,KAAK,SAAS,OAAO,EAAG,UAAS,KAAK,YAAY,OAAO;AACjF,YAAI,WAAW,SAAS,KAAK,SAAS,OAAO,GAAG;AAC/C,mBAAS,KAAK,YAAY,OAAO;AAAA,QAClC;AAAA,MACD;AAGA,oBAAc,YAAY,SAAS,YAAY,OAAO;AACtD,kBAAY,UAAU;AACtB,kBAAY,UAAU;AAGtB,YAAM,YAAY,oBAAoB,SAAS,CAAC;AAEhD,SAAG,YAAY;AAEf,YAAM,gBAAgB;AAEtB,YAAM,gBAAgB;AACtB,YAAM,YAAY;AAAA,MACf,SAAS;AAAA;AAAA;AAAA;AAAA,MAIT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAyBR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQT,SAAS;AAAA;AAAA;AAAA;AAAA,OAIT,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,OAKT,SAAS;AAAA;AAAA;AAAA;AAAA,MAKX,CAAC,gBACE,KACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQA,SAAS,KAAK,SAAS;AAAA;AAAA;AAAA;AAAA,QAIvB,SAAS,KAAK,SAAS;AAAA;AAAA;AAAA,KAI3B;AAAA;AAAA;AAAA;AAKD,YAAM,qBAAqB,MAAM;AAChC,iBAAS,KAAK,YAAY,KAAK;AAC/B,iBAAS,KAAK,YAAY,EAAE;AAAA,MAC7B;AAEA,YAAM,oBAAoB,MAAM;AAC/B,eAAO,KAAK,kBAAkB,MAAM;AACnC,wBAAc,IAAI,KAAK;AAAA,QACxB,CAAC;AAAA,MACF;AAEA,aAAO,iBAAiB,eAAe,kBAAkB;AACzD,aAAO,iBAAiB,cAAc,iBAAiB;AAEvD,eAAS,eAAe,OAAe,QAAuB,KAAiB;AAC9E,YAAI;AACH,aAAG,aAAa,eAAe,SAAS;AAAA,sBACvB,SAAS;AAAA,YACnB,MAAM,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,MAAM,CAAC;AAAA;AAAA,sBAEvC,SAAS;AAAA,YACnB,IAAI,SAAS;AAAA;AAAA,sBAEH,SAAS,kBAAkB,SAAS,mBAAmB,SAAS,KAAK,MAAM;AAAA,YACrF,UAAU,EAAE;AAAA;AAAA;AAAA,QAGpB,SAAS,GAAG;AACX,kBAAQ,MAAM,CAAC;AAAA,QAChB;AAAA,MACD;AAEA,eAAS,eAAe;AACvB,YAAI,OAAO,YAAY,gBAAgB;AACtC,6BAAmB;AACnB,iBAAO,MAAM;AAAA,QACd,WAAW,OAAO,YAAY,UAAU;AACvC,6BAAmB;AAEnB,mBAAS,YAAY,SAAS,KAAK;AAAA,QACpC,OAAO;AACN,iBAAO,MAAM;AAAA,QACd;AAAA,MACD;AAEA,YAAM,mBAAmB,OAAO,oBAAoB;AACpD,YAAM,gBAAgB,OAAO,iBAAiB;AAC9C,YAAM,QAAQ,OAAO,SAAS;AAE9B,YAAM,sBAAsB;AAE5B,YAAM,UAAU;AAAA,QACf,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,MACD;AAEA,UAAI,OAAO,oBAAoB,EAAE,SAAS,GAAG;AAE5C,cAAM,MAAM,MAAM,OAAO,OAAO,kBAAkB,OAAO;AAEzD,YAAI,KAAK;AACR,gBAAM,OAAO,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,aAAa;AACrD,yBAAe,iBAAY,MAAM,IAAI,IAAI,MAAM,GAAG;AAClD,uBAAa;AAAA,QACd;AAAA,MACD,OAAO;AACN,YAAI,eAAe;AAElB,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACtC,kBAAM,OAAO,MAAM,CAAC;AACpB,kBAAM,MAAM,MAAM,OAAO,OAAO,OAAO,2BAA2B,KAAK,EAAE,GAAG,OAAO;AACnF,gBAAI,KAAK;AACR,6BAAe,iBAAY,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,MAAM,MAAM,IAAI,GAAG;AAAA,YACpE;AAAA,UACD;AACA,uBAAa;AAAA,QACd,OAAO;AACN,gBAAM,OAAO,OAAO,eAAe;AACnC,gBAAM,MAAM,MAAM,OAAO,OAAO,OAAO,2BAA2B,KAAK,EAAE,GAAG,OAAO;AACnF,cAAI,KAAK;AACR,2BAAe,iBAAY,KAAK,IAAI,IAAI,MAAM,GAAG;AACjD,yBAAa;AAAA,UACd;AAAA,QACD;AAAA,MACD;AAEA,aAAO,oBAAoB,eAAe,kBAAkB;AAC5D,aAAO,oBAAoB,cAAc,iBAAiB;AAAA,IAC3D;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AACD;",
6
6
  "names": []
7
7
  }
@@ -20,8 +20,7 @@ function useRelevantStyles() {
20
20
  styles.applyValue(style, editor.getStyleForNextShape(style));
21
21
  }
22
22
  }
23
- if (styles.size === 0 && !hasShape)
24
- return null;
23
+ if (styles.size === 0 && !hasShape) return null;
25
24
  return { styles, opacity: editor.getSharedOpacity() };
26
25
  },
27
26
  [editor]
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/hooks/useRevelantStyles.ts"],
4
4
  "sourcesContent": ["import {\n\tDefaultColorStyle,\n\tDefaultDashStyle,\n\tDefaultFillStyle,\n\tDefaultSizeStyle,\n\tReadonlySharedStyleMap,\n\tSharedStyle,\n\tSharedStyleMap,\n\tuseEditor,\n\tuseValue,\n} from '@bigbluebutton/editor'\n\nconst selectToolStyles = [DefaultColorStyle, DefaultDashStyle, DefaultFillStyle, DefaultSizeStyle]\n\nexport function useRelevantStyles(): {\n\tstyles: ReadonlySharedStyleMap\n\topacity: SharedStyle<number>\n} | null {\n\tconst editor = useEditor()\n\treturn useValue(\n\t\t'getRelevantStyles',\n\t\t() => {\n\t\t\tconst styles = new SharedStyleMap(editor.getSharedStyles())\n\t\t\tconst hasShape =\n\t\t\t\teditor.getSelectedShapeIds().length > 0 || !!editor.root.getCurrent()?.shapeType\n\n\t\t\tif (styles.size === 0 && editor.isIn('select') && editor.getSelectedShapeIds().length === 0) {\n\t\t\t\tfor (const style of selectToolStyles) {\n\t\t\t\t\tstyles.applyValue(style, editor.getStyleForNextShape(style))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (styles.size === 0 && !hasShape) return null\n\t\t\treturn { styles, opacity: editor.getSharedOpacity() }\n\t\t},\n\t\t[editor]\n\t)\n}\n"],
5
- "mappings": "AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,MAAM,mBAAmB,CAAC,mBAAmB,kBAAkB,kBAAkB,gBAAgB;AAE1F,SAAS,oBAGP;AACR,QAAM,SAAS,UAAU;AACzB,SAAO;AAAA,IACN;AAAA,IACA,MAAM;AACL,YAAM,SAAS,IAAI,eAAe,OAAO,gBAAgB,CAAC;AAC1D,YAAM,WACL,OAAO,oBAAoB,EAAE,SAAS,KAAK,CAAC,CAAC,OAAO,KAAK,WAAW,GAAG;AAExE,UAAI,OAAO,SAAS,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,oBAAoB,EAAE,WAAW,GAAG;AAC5F,mBAAW,SAAS,kBAAkB;AACrC,iBAAO,WAAW,OAAO,OAAO,qBAAqB,KAAK,CAAC;AAAA,QAC5D;AAAA,MACD;AAEA,UAAI,OAAO,SAAS,KAAK,CAAC;AAAU,eAAO;AAC3C,aAAO,EAAE,QAAQ,SAAS,OAAO,iBAAiB,EAAE;AAAA,IACrD;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AACD;",
5
+ "mappings": "AAAA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,MAAM,mBAAmB,CAAC,mBAAmB,kBAAkB,kBAAkB,gBAAgB;AAE1F,SAAS,oBAGP;AACR,QAAM,SAAS,UAAU;AACzB,SAAO;AAAA,IACN;AAAA,IACA,MAAM;AACL,YAAM,SAAS,IAAI,eAAe,OAAO,gBAAgB,CAAC;AAC1D,YAAM,WACL,OAAO,oBAAoB,EAAE,SAAS,KAAK,CAAC,CAAC,OAAO,KAAK,WAAW,GAAG;AAExE,UAAI,OAAO,SAAS,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,oBAAoB,EAAE,WAAW,GAAG;AAC5F,mBAAW,SAAS,kBAAkB;AACrC,iBAAO,WAAW,OAAO,OAAO,qBAAqB,KAAK,CAAC;AAAA,QAC5D;AAAA,MACD;AAEA,UAAI,OAAO,SAAS,KAAK,CAAC,SAAU,QAAO;AAC3C,aAAO,EAAE,QAAQ,SAAS,OAAO,iBAAiB,EAAE;AAAA,IACrD;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AACD;",
6
6
  "names": []
7
7
  }
@@ -25,6 +25,10 @@ function isAnimated(buffer) {
25
25
  offset += hasColorTable ? 3 * Math.pow(2, colorTableSize + 1) : 0;
26
26
  while (imagesCount < 2 && offset < view.length) {
27
27
  switch (view[offset]) {
28
+ // Image descriptor block. According to specification there could be any
29
+ // number of these blocks (even zero). When there is more than one image
30
+ // descriptor browsers will display animation (they shouldn't when there
31
+ // is no delays defined, but they do it anyway).
28
32
  case 44:
29
33
  imagesCount += 1;
30
34
  hasColorTable = view[offset + 9] & 128;
@@ -33,13 +37,18 @@ function isAnimated(buffer) {
33
37
  offset += hasColorTable ? 3 * Math.pow(2, colorTableSize + 1) : 0;
34
38
  offset += getDataBlocksLength(view, offset + 1) + 1;
35
39
  break;
40
+ // Skip all extension blocks. In theory this "plain text extension" blocks
41
+ // could be frames of animation, but no browser renders them.
36
42
  case 33:
37
43
  offset += 2;
38
44
  offset += getDataBlocksLength(view, offset);
39
45
  break;
46
+ // Stop processing on trailer block,
47
+ // all data after this point will is ignored by decoders
40
48
  case 59:
41
49
  offset = view.length;
42
50
  break;
51
+ // Oops! This GIF seems to be invalid
43
52
  default:
44
53
  offset = view.length;
45
54
  break;
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/assets/is-gif-animated.ts"],
4
4
  "sourcesContent": ["// =========================\n// Modified code originally from <https://github.com/qzb/is-animated>\n//\n// # [MIT License](https://spdx.org/licenses/MIT)\n//\n// Copyright (c) 2016 J\u00F3zef Soko\u0142owski <j.k.sokolowski@gmail.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// =========================\n\n/** Returns total length of data blocks sequence */\nfunction getDataBlocksLength(buffer: Uint8Array, offset: number): number {\n\tlet length = 0\n\n\twhile (buffer[offset + length]) {\n\t\tlength += buffer[offset + length] + 1\n\t}\n\n\treturn length + 1\n}\n\n/**\n * Checks if buffer contains GIF image\n *\n * @public\n */\nexport function isGIF(buffer: ArrayBuffer): boolean {\n\tconst enc = new TextDecoder('ascii')\n\tconst header = enc.decode(buffer.slice(0, 3))\n\treturn header === 'GIF'\n}\n\n/**\n * Checks if buffer contains animated GIF image\n *\n * @public\n */\nexport function isAnimated(buffer: ArrayBuffer): boolean {\n\tconst view = new Uint8Array(buffer)\n\tlet hasColorTable, colorTableSize\n\tlet offset = 0\n\tlet imagesCount = 0\n\n\t// Check if this is this image has valid GIF header.\n\t// If not return false. Chrome, FF and IE doesn't handle GIFs with invalid version.\n\tif (!isGIF(buffer)) {\n\t\treturn false\n\t}\n\n\t// Skip header, logical screen descriptor and global color table\n\n\thasColorTable = view[10] & 0x80 // 0b10000000\n\tcolorTableSize = view[10] & 0x07 // 0b00000111\n\n\toffset += 6 // skip header\n\toffset += 7 // skip logical screen descriptor\n\toffset += hasColorTable ? 3 * Math.pow(2, colorTableSize + 1) : 0 // skip global color table\n\n\t// Find if there is more than one image descriptor\n\n\twhile (imagesCount < 2 && offset < view.length) {\n\t\tswitch (view[offset]) {\n\t\t\t// Image descriptor block. According to specification there could be any\n\t\t\t// number of these blocks (even zero). When there is more than one image\n\t\t\t// descriptor browsers will display animation (they shouldn't when there\n\t\t\t// is no delays defined, but they do it anyway).\n\t\t\tcase 0x2c:\n\t\t\t\timagesCount += 1\n\n\t\t\t\thasColorTable = view[offset + 9] & 0x80 // 0b10000000\n\t\t\t\tcolorTableSize = view[offset + 9] & 0x07 // 0b00000111\n\n\t\t\t\toffset += 10 // skip image descriptor\n\t\t\t\toffset += hasColorTable ? 3 * Math.pow(2, colorTableSize + 1) : 0 // skip local color table\n\t\t\t\toffset += getDataBlocksLength(view, offset + 1) + 1 // skip image data\n\n\t\t\t\tbreak\n\n\t\t\t// Skip all extension blocks. In theory this \"plain text extension\" blocks\n\t\t\t// could be frames of animation, but no browser renders them.\n\t\t\tcase 0x21:\n\t\t\t\toffset += 2 // skip introducer and label\n\t\t\t\toffset += getDataBlocksLength(view, offset) // skip this block and following data blocks\n\n\t\t\t\tbreak\n\n\t\t\t// Stop processing on trailer block,\n\t\t\t// all data after this point will is ignored by decoders\n\t\t\tcase 0x3b:\n\t\t\t\toffset = view.length // fast forward to end of buffer\n\t\t\t\tbreak\n\n\t\t\t// Oops! This GIF seems to be invalid\n\t\t\tdefault:\n\t\t\t\t// fast forward to end of buffer\n\t\t\t\toffset = view.length\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\treturn imagesCount > 1\n}\n"],
5
- "mappings": "AAeA,SAAS,oBAAoB,QAAoB,QAAwB;AACxE,MAAI,SAAS;AAEb,SAAO,OAAO,SAAS,MAAM,GAAG;AAC/B,cAAU,OAAO,SAAS,MAAM,IAAI;AAAA,EACrC;AAEA,SAAO,SAAS;AACjB;AAOO,SAAS,MAAM,QAA8B;AACnD,QAAM,MAAM,IAAI,YAAY,OAAO;AACnC,QAAM,SAAS,IAAI,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;AAC5C,SAAO,WAAW;AACnB;AAOO,SAAS,WAAW,QAA8B;AACxD,QAAM,OAAO,IAAI,WAAW,MAAM;AAClC,MAAI,eAAe;AACnB,MAAI,SAAS;AACb,MAAI,cAAc;AAIlB,MAAI,CAAC,MAAM,MAAM,GAAG;AACnB,WAAO;AAAA,EACR;AAIA,kBAAgB,KAAK,EAAE,IAAI;AAC3B,mBAAiB,KAAK,EAAE,IAAI;AAE5B,YAAU;AACV,YAAU;AACV,YAAU,gBAAgB,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI;AAIhE,SAAO,cAAc,KAAK,SAAS,KAAK,QAAQ;AAC/C,YAAQ,KAAK,MAAM,GAAG;AAAA,MAKrB,KAAK;AACJ,uBAAe;AAEf,wBAAgB,KAAK,SAAS,CAAC,IAAI;AACnC,yBAAiB,KAAK,SAAS,CAAC,IAAI;AAEpC,kBAAU;AACV,kBAAU,gBAAgB,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI;AAChE,kBAAU,oBAAoB,MAAM,SAAS,CAAC,IAAI;AAElD;AAAA,MAID,KAAK;AACJ,kBAAU;AACV,kBAAU,oBAAoB,MAAM,MAAM;AAE1C;AAAA,MAID,KAAK;AACJ,iBAAS,KAAK;AACd;AAAA,MAGD;AAEC,iBAAS,KAAK;AACd;AAAA,IACF;AAAA,EACD;AAEA,SAAO,cAAc;AACtB;",
5
+ "mappings": "AAeA,SAAS,oBAAoB,QAAoB,QAAwB;AACxE,MAAI,SAAS;AAEb,SAAO,OAAO,SAAS,MAAM,GAAG;AAC/B,cAAU,OAAO,SAAS,MAAM,IAAI;AAAA,EACrC;AAEA,SAAO,SAAS;AACjB;AAOO,SAAS,MAAM,QAA8B;AACnD,QAAM,MAAM,IAAI,YAAY,OAAO;AACnC,QAAM,SAAS,IAAI,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;AAC5C,SAAO,WAAW;AACnB;AAOO,SAAS,WAAW,QAA8B;AACxD,QAAM,OAAO,IAAI,WAAW,MAAM;AAClC,MAAI,eAAe;AACnB,MAAI,SAAS;AACb,MAAI,cAAc;AAIlB,MAAI,CAAC,MAAM,MAAM,GAAG;AACnB,WAAO;AAAA,EACR;AAIA,kBAAgB,KAAK,EAAE,IAAI;AAC3B,mBAAiB,KAAK,EAAE,IAAI;AAE5B,YAAU;AACV,YAAU;AACV,YAAU,gBAAgB,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI;AAIhE,SAAO,cAAc,KAAK,SAAS,KAAK,QAAQ;AAC/C,YAAQ,KAAK,MAAM,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,MAKrB,KAAK;AACJ,uBAAe;AAEf,wBAAgB,KAAK,SAAS,CAAC,IAAI;AACnC,yBAAiB,KAAK,SAAS,CAAC,IAAI;AAEpC,kBAAU;AACV,kBAAU,gBAAgB,IAAI,KAAK,IAAI,GAAG,iBAAiB,CAAC,IAAI;AAChE,kBAAU,oBAAoB,MAAM,SAAS,CAAC,IAAI;AAElD;AAAA;AAAA;AAAA,MAID,KAAK;AACJ,kBAAU;AACV,kBAAU,oBAAoB,MAAM,MAAM;AAE1C;AAAA;AAAA;AAAA,MAID,KAAK;AACJ,iBAAS,KAAK;AACd;AAAA;AAAA,MAGD;AAEC,iBAAS,KAAK;AACd;AAAA,IACF;AAAA,EACD;AAEA,SAAO,cAAc;AACtB;",
6
6
  "names": []
7
7
  }
@@ -46,8 +46,7 @@ async function getSvgAsImage(svg, isSafari, options) {
46
46
  };
47
47
  image.src = dataUrl;
48
48
  });
49
- if (!canvas)
50
- return null;
49
+ if (!canvas) return null;
51
50
  const blob = await new Promise(
52
51
  (resolve) => canvas.toBlob(
53
52
  (blob2) => {
@@ -60,8 +59,7 @@ async function getSvgAsImage(svg, isSafari, options) {
60
59
  quality
61
60
  )
62
61
  );
63
- if (!blob)
64
- return null;
62
+ if (!blob) return null;
65
63
  const view = new DataView(await blob.arrayBuffer());
66
64
  return PngHelpers.setPhysChunk(view, effectiveScale, {
67
65
  type: "image/" + type
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/export/export.ts"],
4
4
  "sourcesContent": ["import { PngHelpers, debugFlags } from '@bigbluebutton/editor'\nimport { getBrowserCanvasMaxSize } from '../../shapes/shared/getBrowserCanvasMaxSize'\n\n/** @public */\nexport async function getSvgAsImage(\n\tsvg: SVGElement,\n\tisSafari: boolean,\n\toptions: {\n\t\ttype: 'svg' | 'png' | 'jpeg' | 'webp'\n\t\tquality: number\n\t\tscale: number\n\t}\n) {\n\tconst { type, quality, scale } = options\n\n\tconst width = +svg.getAttribute('width')!\n\tconst height = +svg.getAttribute('height')!\n\tlet scaledWidth = width * scale\n\tlet scaledHeight = height * scale\n\n\tconst dataUrl = await getSvgAsDataUrl(svg)\n\n\tconst canvasSizes = await getBrowserCanvasMaxSize()\n\tif (width > canvasSizes.maxWidth) {\n\t\tscaledWidth = canvasSizes.maxWidth\n\t\tscaledHeight = (scaledWidth / width) * height\n\t}\n\tif (height > canvasSizes.maxHeight) {\n\t\tscaledHeight = canvasSizes.maxHeight\n\t\tscaledWidth = (scaledHeight / height) * width\n\t}\n\tif (scaledWidth * scaledHeight > canvasSizes.maxArea) {\n\t\tconst ratio = Math.sqrt(canvasSizes.maxArea / (scaledWidth * scaledHeight))\n\t\tscaledWidth *= ratio\n\t\tscaledHeight *= ratio\n\t}\n\n\tscaledWidth = Math.floor(scaledWidth)\n\tscaledHeight = Math.floor(scaledHeight)\n\tconst effectiveScale = scaledWidth / width\n\n\tconst canvas = await new Promise<HTMLCanvasElement | null>((resolve) => {\n\t\tconst image = new Image()\n\t\timage.crossOrigin = 'anonymous'\n\n\t\timage.onload = async () => {\n\t\t\t// safari will fire `onLoad` before the fonts in the SVG are\n\t\t\t// actually loaded. just waiting around a while is brittle, but\n\t\t\t// there doesn't seem to be any better solution for now :( see\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=219770\n\t\t\tif (isSafari) {\n\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 250))\n\t\t\t}\n\n\t\t\tconst canvas = document.createElement('canvas') as HTMLCanvasElement\n\t\t\tconst ctx = canvas.getContext('2d')!\n\n\t\t\tcanvas.width = scaledWidth\n\t\t\tcanvas.height = scaledHeight\n\n\t\t\tctx.imageSmoothingEnabled = true\n\t\t\tctx.imageSmoothingQuality = 'high'\n\t\t\tctx.drawImage(image, 0, 0, scaledWidth, scaledHeight)\n\n\t\t\tURL.revokeObjectURL(dataUrl)\n\n\t\t\tresolve(canvas)\n\t\t}\n\n\t\timage.onerror = () => {\n\t\t\tresolve(null)\n\t\t}\n\n\t\timage.src = dataUrl\n\t})\n\n\tif (!canvas) return null\n\n\tconst blob = await new Promise<Blob | null>((resolve) =>\n\t\tcanvas.toBlob(\n\t\t\t(blob) => {\n\t\t\t\tif (!blob || debugFlags.throwToBlob.get()) {\n\t\t\t\t\tresolve(null)\n\t\t\t\t}\n\t\t\t\tresolve(blob)\n\t\t\t},\n\t\t\t'image/' + type,\n\t\t\tquality\n\t\t)\n\t)\n\n\tif (!blob) return null\n\n\tconst view = new DataView(await blob.arrayBuffer())\n\treturn PngHelpers.setPhysChunk(view, effectiveScale, {\n\t\ttype: 'image/' + type,\n\t})\n}\n\n/** @public */\nexport async function getSvgAsDataUrl(svg: SVGElement) {\n\tconst clone = svg.cloneNode(true) as SVGGraphicsElement\n\tclone.setAttribute('encoding', 'UTF-8\"')\n\n\tconst fileReader = new FileReader()\n\tconst imgs = Array.from(clone.querySelectorAll('image')) as SVGImageElement[]\n\n\tfor (const img of imgs) {\n\t\tconst src = img.getAttribute('xlink:href')\n\t\tif (src) {\n\t\t\tif (!src.startsWith('data:')) {\n\t\t\t\tconst blob = await (await fetch(src)).blob()\n\t\t\t\tconst base64 = await new Promise<string>((resolve, reject) => {\n\t\t\t\t\tfileReader.onload = () => resolve(fileReader.result as string)\n\t\t\t\t\tfileReader.onerror = () => reject(fileReader.error)\n\t\t\t\t\tfileReader.readAsDataURL(blob)\n\t\t\t\t})\n\t\t\t\timg.setAttribute('xlink:href', base64)\n\t\t\t}\n\t\t}\n\t}\n\n\tconst svgStr = new XMLSerializer().serializeToString(clone)\n\t// NOTE: `unescape` works everywhere although deprecated\n\t// eslint-disable-next-line deprecation/deprecation\n\tconst base64SVG = window.btoa(unescape(encodeURIComponent(svgStr)))\n\treturn `data:image/svg+xml;base64,${base64SVG}`\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["resolve", "canvas", "blob"]
7
7
  }
@@ -25,8 +25,7 @@ function exportAs(editor, ids, format = "png", opts = {}) {
25
25
  quality: 1,
26
26
  scale: 2
27
27
  }).then((image) => {
28
- if (!image)
29
- throw Error();
28
+ if (!image) throw Error();
30
29
  const dataURL = URL.createObjectURL(image);
31
30
  downloadDataURLAsFile(dataURL, `${name}.${format}`);
32
31
  URL.revokeObjectURL(dataURL);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/export/exportAs.ts"],
4
4
  "sourcesContent": ["import { Editor, TLFrameShape, TLShapeId, TLSvgOptions } from '@bigbluebutton/editor'\nimport { getSvgAsDataUrl, getSvgAsImage } from './export'\n\n/** @public */\nexport type TLExportType = 'svg' | 'png' | 'jpeg' | 'webp' | 'json'\n\n/**\n * Export the given shapes as files.\n *\n * @param editor - The editor instance.\n * @param ids - The ids of the shapes to export.\n * @param format - The format to export as.\n * @param opts - Options for the export.\n *\n * @public\n */\nexport function exportAs(\n\teditor: Editor,\n\tids: TLShapeId[],\n\tformat: TLExportType = 'png',\n\topts = {} as Partial<TLSvgOptions>\n) {\n\treturn editor\n\t\t.getSvg(ids?.length ? ids : [...editor.getCurrentPageShapeIds()], opts)\n\t\t.then((svg) => {\n\t\t\tif (!svg) {\n\t\t\t\tthrow new Error('Could not construct SVG.')\n\t\t\t}\n\n\t\t\tlet name = 'shapes' + getTimestamp()\n\n\t\t\tif (ids.length === 1) {\n\t\t\t\tconst first = editor.getShape(ids[0])!\n\t\t\t\tif (editor.isShapeOfType<TLFrameShape>(first, 'frame')) {\n\t\t\t\t\tname = first.props.name ?? 'frame'\n\t\t\t\t} else {\n\t\t\t\t\tname = first.id.replace(/:/, '_')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tswitch (format) {\n\t\t\t\tcase 'svg': {\n\t\t\t\t\tgetSvgAsDataUrl(svg).then((dataURL) => downloadDataURLAsFile(dataURL, `${name}.svg`))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tcase 'webp':\n\t\t\t\tcase 'png': {\n\t\t\t\t\tgetSvgAsImage(svg, editor.environment.isSafari, {\n\t\t\t\t\t\ttype: format,\n\t\t\t\t\t\tquality: 1,\n\t\t\t\t\t\tscale: 2,\n\t\t\t\t\t}).then((image) => {\n\t\t\t\t\t\tif (!image) throw Error()\n\t\t\t\t\t\tconst dataURL = URL.createObjectURL(image)\n\t\t\t\t\t\tdownloadDataURLAsFile(dataURL, `${name}.${format}`)\n\t\t\t\t\t\tURL.revokeObjectURL(dataURL)\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tcase 'json': {\n\t\t\t\t\tconst data = editor.getContentFromCurrentPage(ids)\n\t\t\t\t\tconst blob = new Blob([JSON.stringify(data, null, 4)], { type: 'application/json' })\n\t\t\t\t\tconst dataURL = URL.createObjectURL(blob)\n\t\t\t\t\tdownloadDataURLAsFile(dataURL, `${name || 'shapes'}.json`)\n\t\t\t\t\tURL.revokeObjectURL(dataURL)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(`Export type ${format} not supported.`)\n\t\t\t}\n\t\t})\n}\n\nfunction getTimestamp() {\n\tconst now = new Date()\n\n\tconst year = String(now.getFullYear()).slice(2)\n\tconst month = String(now.getMonth() + 1).padStart(2, '0')\n\tconst day = String(now.getDate()).padStart(2, '0')\n\tconst hours = String(now.getHours()).padStart(2, '0')\n\tconst minutes = String(now.getMinutes()).padStart(2, '0')\n\tconst seconds = String(now.getSeconds()).padStart(2, '0')\n\n\treturn ` at ${year}-${month}-${day} ${hours}.${minutes}.${seconds}`\n}\n\nfunction downloadDataURLAsFile(dataUrl: string, filename: string) {\n\tconst link = document.createElement('a')\n\tlink.href = dataUrl\n\tlink.download = filename\n\tlink.click()\n}\n"],
5
- "mappings": "AACA,SAAS,iBAAiB,qBAAqB;AAexC,SAAS,SACf,QACA,KACA,SAAuB,OACvB,OAAO,CAAC,GACP;AACD,SAAO,OACL,OAAO,KAAK,SAAS,MAAM,CAAC,GAAG,OAAO,uBAAuB,CAAC,GAAG,IAAI,EACrE,KAAK,CAAC,QAAQ;AACd,QAAI,CAAC,KAAK;AACT,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC3C;AAEA,QAAI,OAAO,WAAW,aAAa;AAEnC,QAAI,IAAI,WAAW,GAAG;AACrB,YAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,CAAC;AACpC,UAAI,OAAO,cAA4B,OAAO,OAAO,GAAG;AACvD,eAAO,MAAM,MAAM,QAAQ;AAAA,MAC5B,OAAO;AACN,eAAO,MAAM,GAAG,QAAQ,KAAK,GAAG;AAAA,MACjC;AAAA,IACD;AAEA,YAAQ,QAAQ;AAAA,MACf,KAAK,OAAO;AACX,wBAAgB,GAAG,EAAE,KAAK,CAAC,YAAY,sBAAsB,SAAS,GAAG,IAAI,MAAM,CAAC;AACpF;AAAA,MACD;AAAA,MACA,KAAK;AAAA,MACL,KAAK,OAAO;AACX,sBAAc,KAAK,OAAO,YAAY,UAAU;AAAA,UAC/C,MAAM;AAAA,UACN,SAAS;AAAA,UACT,OAAO;AAAA,QACR,CAAC,EAAE,KAAK,CAAC,UAAU;AAClB,cAAI,CAAC;AAAO,kBAAM,MAAM;AACxB,gBAAM,UAAU,IAAI,gBAAgB,KAAK;AACzC,gCAAsB,SAAS,GAAG,IAAI,IAAI,MAAM,EAAE;AAClD,cAAI,gBAAgB,OAAO;AAAA,QAC5B,CAAC;AACD;AAAA,MACD;AAAA,MAEA,KAAK,QAAQ;AACZ,cAAM,OAAO,OAAO,0BAA0B,GAAG;AACjD,cAAM,OAAO,IAAI,KAAK,CAAC,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACnF,cAAM,UAAU,IAAI,gBAAgB,IAAI;AACxC,8BAAsB,SAAS,GAAG,QAAQ,QAAQ,OAAO;AACzD,YAAI,gBAAgB,OAAO;AAC3B;AAAA,MACD;AAAA,MAEA;AACC,cAAM,IAAI,MAAM,eAAe,MAAM,iBAAiB;AAAA,IACxD;AAAA,EACD,CAAC;AACH;AAEA,SAAS,eAAe;AACvB,QAAM,MAAM,oBAAI,KAAK;AAErB,QAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC;AAC9C,QAAM,QAAQ,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,QAAQ,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACpD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AAExD,SAAO,OAAO,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO;AAClE;AAEA,SAAS,sBAAsB,SAAiB,UAAkB;AACjE,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO;AACZ,OAAK,WAAW;AAChB,OAAK,MAAM;AACZ;",
5
+ "mappings": "AACA,SAAS,iBAAiB,qBAAqB;AAexC,SAAS,SACf,QACA,KACA,SAAuB,OACvB,OAAO,CAAC,GACP;AACD,SAAO,OACL,OAAO,KAAK,SAAS,MAAM,CAAC,GAAG,OAAO,uBAAuB,CAAC,GAAG,IAAI,EACrE,KAAK,CAAC,QAAQ;AACd,QAAI,CAAC,KAAK;AACT,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC3C;AAEA,QAAI,OAAO,WAAW,aAAa;AAEnC,QAAI,IAAI,WAAW,GAAG;AACrB,YAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,CAAC;AACpC,UAAI,OAAO,cAA4B,OAAO,OAAO,GAAG;AACvD,eAAO,MAAM,MAAM,QAAQ;AAAA,MAC5B,OAAO;AACN,eAAO,MAAM,GAAG,QAAQ,KAAK,GAAG;AAAA,MACjC;AAAA,IACD;AAEA,YAAQ,QAAQ;AAAA,MACf,KAAK,OAAO;AACX,wBAAgB,GAAG,EAAE,KAAK,CAAC,YAAY,sBAAsB,SAAS,GAAG,IAAI,MAAM,CAAC;AACpF;AAAA,MACD;AAAA,MACA,KAAK;AAAA,MACL,KAAK,OAAO;AACX,sBAAc,KAAK,OAAO,YAAY,UAAU;AAAA,UAC/C,MAAM;AAAA,UACN,SAAS;AAAA,UACT,OAAO;AAAA,QACR,CAAC,EAAE,KAAK,CAAC,UAAU;AAClB,cAAI,CAAC,MAAO,OAAM,MAAM;AACxB,gBAAM,UAAU,IAAI,gBAAgB,KAAK;AACzC,gCAAsB,SAAS,GAAG,IAAI,IAAI,MAAM,EAAE;AAClD,cAAI,gBAAgB,OAAO;AAAA,QAC5B,CAAC;AACD;AAAA,MACD;AAAA,MAEA,KAAK,QAAQ;AACZ,cAAM,OAAO,OAAO,0BAA0B,GAAG;AACjD,cAAM,OAAO,IAAI,KAAK,CAAC,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACnF,cAAM,UAAU,IAAI,gBAAgB,IAAI;AACxC,8BAAsB,SAAS,GAAG,QAAQ,QAAQ,OAAO;AACzD,YAAI,gBAAgB,OAAO;AAC3B;AAAA,MACD;AAAA,MAEA;AACC,cAAM,IAAI,MAAM,eAAe,MAAM,iBAAiB;AAAA,IACxD;AAAA,EACD,CAAC;AACH;AAEA,SAAS,eAAe;AACvB,QAAM,MAAM,oBAAI,KAAK;AAErB,QAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC;AAC9C,QAAM,QAAQ,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,QAAQ,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACpD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AAExD,SAAO,OAAO,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO;AAClE;AAEA,SAAS,sBAAsB,SAAiB,UAAkB;AACjE,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO;AACZ,OAAK,WAAW;AAChB,OAAK,MAAM;AACZ;",
6
6
  "names": []
7
7
  }
@@ -7,8 +7,7 @@ function removeFrame(editor, ids) {
7
7
  const frames = compact(
8
8
  ids.map((id) => editor.getShape(id)).filter((f) => f && editor.isShapeOfType(f, "frame"))
9
9
  );
10
- if (!frames.length)
11
- return;
10
+ if (!frames.length) return;
12
11
  const allChildren = [];
13
12
  editor.batch(() => {
14
13
  frames.map((frame) => {
@@ -25,12 +24,10 @@ function removeFrame(editor, ids) {
25
24
  const DEFAULT_FRAME_PADDING = 50;
26
25
  function fitFrameToContent(editor, id, opts = {}) {
27
26
  const frame = editor.getShape(id);
28
- if (!frame)
29
- return;
27
+ if (!frame) return;
30
28
  const childIds = editor.getSortedChildIdsForParent(frame.id);
31
29
  const children = compact(childIds.map((id2) => editor.getShape(id2)));
32
- if (!children.length)
33
- return;
30
+ if (!children.length) return;
34
31
  const bounds = Box2d.FromPoints(
35
32
  children.flatMap((shape) => {
36
33
  const geometry = editor.getShapeGeometry(shape.id);
@@ -42,8 +39,7 @@ function fitFrameToContent(editor, id, opts = {}) {
42
39
  const h = bounds.h + 2 * padding;
43
40
  const dx = padding - bounds.minX;
44
41
  const dy = padding - bounds.minY;
45
- if (dx === 0 && dy === 0 && frame.props.w === w && frame.props.h === h)
46
- return;
42
+ if (dx === 0 && dy === 0 && frame.props.w === w && frame.props.h === h) return;
47
43
  const diff = new Vec2d(dx, dy).rot(frame.rotation);
48
44
  editor.batch(() => {
49
45
  const changes = childIds.map((child) => {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/frames/frames.ts"],
4
4
  "sourcesContent": ["import {\n\tBox2d,\n\tEditor,\n\tTLFrameShape,\n\tTLShapeId,\n\tTLShapePartial,\n\tVec2d,\n\tcompact,\n} from '@bigbluebutton/editor'\n\n/**\n * Remove a frame.\n *\n * @param editor - tlraw editor instance.\n * @param ids - Ids of the frames you wish to remove.\n *\n * @public\n */\nexport function removeFrame(editor: Editor, ids: TLShapeId[]) {\n\tconst frames = compact(\n\t\tids\n\t\t\t.map((id) => editor.getShape<TLFrameShape>(id))\n\t\t\t.filter((f) => f && editor.isShapeOfType<TLFrameShape>(f, 'frame'))\n\t)\n\tif (!frames.length) return\n\n\tconst allChildren: TLShapeId[] = []\n\teditor.batch(() => {\n\t\tframes.map((frame) => {\n\t\t\tconst children = editor.getSortedChildIdsForParent(frame.id)\n\t\t\tif (children.length) {\n\t\t\t\teditor.reparentShapes(children, frame.parentId, frame.index)\n\t\t\t\tallChildren.push(...children)\n\t\t\t}\n\t\t})\n\t\teditor.setSelectedShapes(allChildren)\n\t\teditor.deleteShapes(ids)\n\t})\n}\n\n/** @internal */\nexport const DEFAULT_FRAME_PADDING = 50\n\n/**\n * Fit a frame to its content.\n *\n * @param id - Id of the frame you wish to fit to content.\n * @param editor - tlraw editor instance.\n * @param opts - Options for fitting the frame.\n *\n * @public\n */\nexport function fitFrameToContent(editor: Editor, id: TLShapeId, opts = {} as { padding: number }) {\n\tconst frame = editor.getShape<TLFrameShape>(id)\n\tif (!frame) return\n\n\tconst childIds = editor.getSortedChildIdsForParent(frame.id)\n\tconst children = compact(childIds.map((id) => editor.getShape(id)))\n\tif (!children.length) return\n\n\tconst bounds = Box2d.FromPoints(\n\t\tchildren.flatMap((shape) => {\n\t\t\tconst geometry = editor.getShapeGeometry(shape.id)\n\t\t\treturn editor.getShapeLocalTransform(shape)!.applyToPoints(geometry.vertices)\n\t\t})\n\t)\n\n\tconst { padding = DEFAULT_FRAME_PADDING } = opts\n\tconst w = bounds.w + 2 * padding\n\tconst h = bounds.h + 2 * padding\n\tconst dx = padding - bounds.minX\n\tconst dy = padding - bounds.minY\n\t// The shapes already perfectly fit the frame.\n\tif (dx === 0 && dy === 0 && frame.props.w === w && frame.props.h === h) return\n\n\tconst diff = new Vec2d(dx, dy).rot(frame.rotation)\n\teditor.batch(() => {\n\t\tconst changes: TLShapePartial[] = childIds.map((child) => {\n\t\t\tconst shape = editor.getShape(child)!\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tx: shape.x + dx,\n\t\t\t\ty: shape.y + dy,\n\t\t\t}\n\t\t})\n\n\t\tchanges.push({\n\t\t\tid: frame.id,\n\t\t\ttype: frame.type,\n\t\t\tx: frame.x - diff.x,\n\t\t\ty: frame.y - diff.y,\n\t\t\tprops: {\n\t\t\t\tw,\n\t\t\t\th,\n\t\t\t},\n\t\t})\n\n\t\teditor.updateShapes(changes)\n\t})\n}\n"],
5
- "mappings": "AAAA;AAAA,EACC;AAAA,EAKA;AAAA,EACA;AAAA,OACM;AAUA,SAAS,YAAY,QAAgB,KAAkB;AAC7D,QAAM,SAAS;AAAA,IACd,IACE,IAAI,CAAC,OAAO,OAAO,SAAuB,EAAE,CAAC,EAC7C,OAAO,CAAC,MAAM,KAAK,OAAO,cAA4B,GAAG,OAAO,CAAC;AAAA,EACpE;AACA,MAAI,CAAC,OAAO;AAAQ;AAEpB,QAAM,cAA2B,CAAC;AAClC,SAAO,MAAM,MAAM;AAClB,WAAO,IAAI,CAAC,UAAU;AACrB,YAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,UAAI,SAAS,QAAQ;AACpB,eAAO,eAAe,UAAU,MAAM,UAAU,MAAM,KAAK;AAC3D,oBAAY,KAAK,GAAG,QAAQ;AAAA,MAC7B;AAAA,IACD,CAAC;AACD,WAAO,kBAAkB,WAAW;AACpC,WAAO,aAAa,GAAG;AAAA,EACxB,CAAC;AACF;AAGO,MAAM,wBAAwB;AAW9B,SAAS,kBAAkB,QAAgB,IAAe,OAAO,CAAC,GAA0B;AAClG,QAAM,QAAQ,OAAO,SAAuB,EAAE;AAC9C,MAAI,CAAC;AAAO;AAEZ,QAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,QAAM,WAAW,QAAQ,SAAS,IAAI,CAACA,QAAO,OAAO,SAASA,GAAE,CAAC,CAAC;AAClE,MAAI,CAAC,SAAS;AAAQ;AAEtB,QAAM,SAAS,MAAM;AAAA,IACpB,SAAS,QAAQ,CAAC,UAAU;AAC3B,YAAM,WAAW,OAAO,iBAAiB,MAAM,EAAE;AACjD,aAAO,OAAO,uBAAuB,KAAK,EAAG,cAAc,SAAS,QAAQ;AAAA,IAC7E,CAAC;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,sBAAsB,IAAI;AAC5C,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,KAAK,UAAU,OAAO;AAC5B,QAAM,KAAK,UAAU,OAAO;AAE5B,MAAI,OAAO,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM;AAAG;AAExE,QAAM,OAAO,IAAI,MAAM,IAAI,EAAE,EAAE,IAAI,MAAM,QAAQ;AACjD,SAAO,MAAM,MAAM;AAClB,UAAM,UAA4B,SAAS,IAAI,CAAC,UAAU;AACzD,YAAM,QAAQ,OAAO,SAAS,KAAK;AACnC,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,GAAG,MAAM,IAAI;AAAA,QACb,GAAG,MAAM,IAAI;AAAA,MACd;AAAA,IACD,CAAC;AAED,YAAQ,KAAK;AAAA,MACZ,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,OAAO;AAAA,QACN;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO,aAAa,OAAO;AAAA,EAC5B,CAAC;AACF;",
5
+ "mappings": "AAAA;AAAA,EACC;AAAA,EAKA;AAAA,EACA;AAAA,OACM;AAUA,SAAS,YAAY,QAAgB,KAAkB;AAC7D,QAAM,SAAS;AAAA,IACd,IACE,IAAI,CAAC,OAAO,OAAO,SAAuB,EAAE,CAAC,EAC7C,OAAO,CAAC,MAAM,KAAK,OAAO,cAA4B,GAAG,OAAO,CAAC;AAAA,EACpE;AACA,MAAI,CAAC,OAAO,OAAQ;AAEpB,QAAM,cAA2B,CAAC;AAClC,SAAO,MAAM,MAAM;AAClB,WAAO,IAAI,CAAC,UAAU;AACrB,YAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,UAAI,SAAS,QAAQ;AACpB,eAAO,eAAe,UAAU,MAAM,UAAU,MAAM,KAAK;AAC3D,oBAAY,KAAK,GAAG,QAAQ;AAAA,MAC7B;AAAA,IACD,CAAC;AACD,WAAO,kBAAkB,WAAW;AACpC,WAAO,aAAa,GAAG;AAAA,EACxB,CAAC;AACF;AAGO,MAAM,wBAAwB;AAW9B,SAAS,kBAAkB,QAAgB,IAAe,OAAO,CAAC,GAA0B;AAClG,QAAM,QAAQ,OAAO,SAAuB,EAAE;AAC9C,MAAI,CAAC,MAAO;AAEZ,QAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,QAAM,WAAW,QAAQ,SAAS,IAAI,CAACA,QAAO,OAAO,SAASA,GAAE,CAAC,CAAC;AAClE,MAAI,CAAC,SAAS,OAAQ;AAEtB,QAAM,SAAS,MAAM;AAAA,IACpB,SAAS,QAAQ,CAAC,UAAU;AAC3B,YAAM,WAAW,OAAO,iBAAiB,MAAM,EAAE;AACjD,aAAO,OAAO,uBAAuB,KAAK,EAAG,cAAc,SAAS,QAAQ;AAAA,IAC7E,CAAC;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,sBAAsB,IAAI;AAC5C,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,KAAK,UAAU,OAAO;AAC5B,QAAM,KAAK,UAAU,OAAO;AAE5B,MAAI,OAAO,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,EAAG;AAExE,QAAM,OAAO,IAAI,MAAM,IAAI,EAAE,EAAE,IAAI,MAAM,QAAQ;AACjD,SAAO,MAAM,MAAM;AAClB,UAAM,UAA4B,SAAS,IAAI,CAAC,UAAU;AACzD,YAAM,QAAQ,OAAO,SAAS,KAAK;AACnC,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,GAAG,MAAM,IAAI;AAAA,QACb,GAAG,MAAM,IAAI;AAAA,MACd;AAAA,IACD,CAAC;AAED,YAAQ,KAAK;AAAA,MACZ,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,OAAO;AAAA,QACN;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO,aAAa,OAAO;AAAA,EAC5B,CAAC;AACF;",
6
6
  "names": ["id"]
7
7
  }
@@ -13,8 +13,7 @@ function setDefaultEditorAssetUrls(assetUrls) {
13
13
  }
14
14
  function useDefaultEditorAssetsWithOverrides(overrides) {
15
15
  return useMemo(() => {
16
- if (!overrides)
17
- return defaultEditorAssetUrls;
16
+ if (!overrides) return defaultEditorAssetUrls;
18
17
  return {
19
18
  fonts: { ...defaultEditorAssetUrls.fonts, ...overrides?.fonts }
20
19
  };
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/static-assets/assetUrls.ts"],
4
4
  "sourcesContent": ["import { RecursivePartial } from '@bigbluebutton/editor'\nimport { useMemo } from 'react'\nimport { version } from '../../ui/version'\n\n/** @public */\nexport type TLEditorAssetUrls = {\n\tfonts: {\n\t\tmonospace: string\n\t\tserif: string\n\t\tsansSerif: string\n\t\tdraw: string\n\t}\n}\n\n/** @public */\nexport let defaultEditorAssetUrls: TLEditorAssetUrls = {\n\tfonts: {\n\t\tdraw: `https://unpkg.com/@bigbluebutton/assets@${version}/fonts/Shantell_Sans-Normal-SemiBold.woff2`,\n\t\tserif: `https://unpkg.com/@bigbluebutton/assets@${version}/fonts/IBMPlexSerif-Medium.woff2`,\n\t\tsansSerif: `https://unpkg.com/@bigbluebutton/assets@${version}/fonts/IBMPlexSans-Medium.woff2`,\n\t\tmonospace: `https://unpkg.com/@bigbluebutton/assets@${version}/fonts/IBMPlexMono-Medium.woff2`,\n\t},\n}\n\n/** @public */\nexport function setDefaultEditorAssetUrls(assetUrls: TLEditorAssetUrls) {\n\tdefaultEditorAssetUrls = assetUrls\n}\n\n/** @internal */\nexport function useDefaultEditorAssetsWithOverrides(\n\toverrides?: RecursivePartial<TLEditorAssetUrls>\n): TLEditorAssetUrls {\n\treturn useMemo(() => {\n\t\tif (!overrides) return defaultEditorAssetUrls\n\n\t\treturn {\n\t\t\tfonts: { ...defaultEditorAssetUrls.fonts, ...overrides?.fonts },\n\t\t}\n\t}, [overrides])\n}\n"],
5
- "mappings": "AACA,SAAS,eAAe;AACxB,SAAS,eAAe;AAajB,IAAI,yBAA4C;AAAA,EACtD,OAAO;AAAA,IACN,MAAM,2CAA2C,OAAO;AAAA,IACxD,OAAO,2CAA2C,OAAO;AAAA,IACzD,WAAW,2CAA2C,OAAO;AAAA,IAC7D,WAAW,2CAA2C,OAAO;AAAA,EAC9D;AACD;AAGO,SAAS,0BAA0B,WAA8B;AACvE,2BAAyB;AAC1B;AAGO,SAAS,oCACf,WACoB;AACpB,SAAO,QAAQ,MAAM;AACpB,QAAI,CAAC;AAAW,aAAO;AAEvB,WAAO;AAAA,MACN,OAAO,EAAE,GAAG,uBAAuB,OAAO,GAAG,WAAW,MAAM;AAAA,IAC/D;AAAA,EACD,GAAG,CAAC,SAAS,CAAC;AACf;",
5
+ "mappings": "AACA,SAAS,eAAe;AACxB,SAAS,eAAe;AAajB,IAAI,yBAA4C;AAAA,EACtD,OAAO;AAAA,IACN,MAAM,2CAA2C,OAAO;AAAA,IACxD,OAAO,2CAA2C,OAAO;AAAA,IACzD,WAAW,2CAA2C,OAAO;AAAA,IAC7D,WAAW,2CAA2C,OAAO;AAAA,EAC9D;AACD;AAGO,SAAS,0BAA0B,WAA8B;AACvE,2BAAyB;AAC1B;AAGO,SAAS,oCACf,WACoB;AACpB,SAAO,QAAQ,MAAM;AACpB,QAAI,CAAC,UAAW,QAAO;AAEvB,WAAO;AAAA,MACN,OAAO,EAAE,GAAG,uBAAuB,OAAO,GAAG,WAAW,MAAM;AAAA,IAC/D;AAAA,EACD,GAAG,CAAC,SAAS,CAAC;AACf;",
6
6
  "names": []
7
7
  }
@@ -82,8 +82,7 @@ function buildFromV1Document(editor, document) {
82
82
  const v1GroupShapeIdsToV1ChildIds = /* @__PURE__ */ new Map();
83
83
  const v1Shapes = Object.values(v1Page.shapes ?? {}).sort((a, b) => a.childIndex < b.childIndex ? -1 : 1).slice(0, MAX_SHAPES_PER_PAGE);
84
84
  v1Shapes.forEach((v1Shape) => {
85
- if (v1Shape.type !== "group" /* Group */)
86
- return;
85
+ if (v1Shape.type !== "group" /* Group */) return;
87
86
  const shapeId = createShapeId();
88
87
  v1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId);
89
88
  v1GroupShapeIdsToV1ChildIds.set(v1Shape.id, []);
@@ -435,8 +434,7 @@ function buildFromV1Document(editor, document) {
435
434
  }
436
435
  const targetId = v1ShapeIdsToV2ShapeIds.get(binding.toId);
437
436
  const targetShape = editor.getShape(targetId);
438
- if (!targetShape)
439
- continue;
437
+ if (!targetShape) continue;
440
438
  if (targetId) {
441
439
  const bounds2 = editor.getShapePageBounds(targetId);
442
440
  const v2ShapeFresh = editor.getShape(v2ShapeId);
@@ -485,35 +483,27 @@ function buildFromV1Document(editor, document) {
485
483
  });
486
484
  }
487
485
  function coerceNumber(n) {
488
- if (typeof n !== "number")
489
- return 0;
490
- if (Number.isNaN(n))
491
- return 0;
492
- if (!Number.isFinite(n))
493
- return 0;
486
+ if (typeof n !== "number") return 0;
487
+ if (Number.isNaN(n)) return 0;
488
+ if (!Number.isFinite(n)) return 0;
494
489
  return n;
495
490
  }
496
491
  function coerceDimension(d) {
497
492
  const n = coerceNumber(d);
498
- if (n <= 0)
499
- return 1;
493
+ if (n <= 0) return 1;
500
494
  return n;
501
495
  }
502
496
  async function tryMigrateAsset(editor, placeholderAsset) {
503
497
  try {
504
- if (placeholderAsset.type === "bookmark" || !placeholderAsset.props.src)
505
- return;
498
+ if (placeholderAsset.type === "bookmark" || !placeholderAsset.props.src) return;
506
499
  const response = await fetch(placeholderAsset.props.src);
507
- if (!response.ok)
508
- return;
500
+ if (!response.ok) return;
509
501
  const file = new File([await response.blob()], placeholderAsset.props.name, {
510
502
  type: response.headers.get("content-type") ?? placeholderAsset.props.mimeType ?? void 0
511
503
  });
512
504
  const newAsset = await editor.getAssetForExternalContent({ type: "file", file });
513
- if (!newAsset)
514
- throw new Error("Could not get asset for external content");
515
- if (newAsset.type === "bookmark")
516
- return;
505
+ if (!newAsset) throw new Error("Could not get asset for external content");
506
+ if (newAsset.type === "bookmark") return;
517
507
  editor.updateAssets([
518
508
  {
519
509
  id: placeholderAsset.id,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/tldr/buildFromV1Document.ts"],
4
4
  "sourcesContent": ["import {\n\tAssetRecordType,\n\tEditor,\n\tMAX_SHAPES_PER_PAGE,\n\tPageRecordType,\n\tTLArrowShape,\n\tTLArrowShapeArrowheadStyle,\n\tTLArrowShapeTerminal,\n\tTLAsset,\n\tTLAssetId,\n\tTLDefaultColorStyle,\n\tTLDefaultDashStyle,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultSizeStyle,\n\tTLDrawShape,\n\tTLGeoShape,\n\tTLImageShape,\n\tTLNoteShape,\n\tTLPageId,\n\tTLShapeId,\n\tTLTextShape,\n\tTLVideoShape,\n\tVec2d,\n\tVec2dModel,\n\tclamp,\n\tcreateShapeId,\n} from '@bigbluebutton/editor'\n\nconst TLDRAW_V1_VERSION = 15.5\n\n/** @internal */\nexport function buildFromV1Document(editor: Editor, document: LegacyTldrawDocument) {\n\teditor.batch(() => {\n\t\tdocument = migrate(document, TLDRAW_V1_VERSION)\n\t\t// Cancel any interactions / states\n\t\teditor.cancel().cancel().cancel().cancel()\n\n\t\tconst firstPageId = editor.getPages()[0].id\n\n\t\t// Set the current page to the first page\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\t// Delete all pages except first page\n\t\tfor (const page of editor.getPages().slice(1)) {\n\t\t\teditor.deletePage(page.id)\n\t\t}\n\n\t\t// Delete all of the shapes on the current page\n\t\teditor.selectAll()\n\t\teditor.deleteShapes(editor.getSelectedShapeIds())\n\n\t\t// Create assets\n\t\tconst v1AssetIdsToV2AssetIds = new Map<string, TLAssetId>()\n\n\t\tObject.values(document.assets ?? {}).forEach((v1Asset) => {\n\t\t\tswitch (v1Asset.type) {\n\t\t\t\tcase TDAssetType.Image: {\n\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\tconst placeholderAsset: TLAsset = {\n\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\tisAnimated: false,\n\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\tsrc: v1Asset.src,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t}\n\t\t\t\t\teditor.createAssets([placeholderAsset])\n\t\t\t\t\ttryMigrateAsset(editor, placeholderAsset)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase TDAssetType.Video:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\t\teditor.createAssets([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\t\t\tisAnimated: true,\n\t\t\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\t\t\tsrc: v1Asset.src,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t])\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t})\n\n\t\t// Create pages\n\n\t\tconst v1PageIdsToV2PageIds = new Map<string, TLPageId>()\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page, i) => {\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, editor.getCurrentPageId())\n\t\t\t\t} else {\n\t\t\t\t\tconst pageId = PageRecordType.createId()\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, pageId)\n\t\t\t\t\teditor.createPage({ name: v1Page.name ?? 'Page', id: pageId })\n\t\t\t\t}\n\t\t\t})\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page) => {\n\t\t\t\t// Set the current page id to the current page\n\t\t\t\teditor.setCurrentPage(v1PageIdsToV2PageIds.get(v1Page.id)!)\n\n\t\t\t\tconst v1ShapeIdsToV2ShapeIds = new Map<string, TLShapeId>()\n\t\t\t\tconst v1GroupShapeIdsToV1ChildIds = new Map<string, string[]>()\n\n\t\t\t\tconst v1Shapes = Object.values(v1Page.shapes ?? {})\n\t\t\t\t\t.sort((a, b) => (a.childIndex < b.childIndex ? -1 : 1))\n\t\t\t\t\t.slice(0, MAX_SHAPES_PER_PAGE)\n\n\t\t\t\t// Groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TDShapeType.Group) return\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.id, [])\n\t\t\t\t})\n\n\t\t\t\tfunction decideNotToCreateShape(v1Shape: TDShape) {\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.delete(v1Shape.id)\n\t\t\t\t\tconst v1GroupParent = v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)\n\t\t\t\t\tif (v1GroupParent) {\n\t\t\t\t\t\tconst ids = v1GroupShapeIdsToV1ChildIds\n\t\t\t\t\t\t\t.get(v1Shape.parentId)!\n\t\t\t\t\t\t\t.filter((id) => id !== v1Shape.id)\n\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.parentId, ids)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Non-groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\t// Skip groups for now, we'll create groups via the app's API\n\t\t\t\t\tif (v1Shape.type === TDShapeType.Group) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\n\t\t\t\t\tif (v1Shape.parentId !== v1Page.id) {\n\t\t\t\t\t\t// If the parent is a group, then add the shape to the group's children\n\t\t\t\t\t\tif (v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)) {\n\t\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.get(v1Shape.parentId)!.push(v1Shape.id)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('parent does not exist', v1Shape)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// First, try to find the shape's parent among the existing groups\n\t\t\t\t\tconst parentId = v1PageIdsToV2PageIds.get(v1Page.id)!\n\n\t\t\t\t\tconst inCommon = {\n\t\t\t\t\t\tid: shapeId,\n\t\t\t\t\t\tparentId,\n\t\t\t\t\t\tx: coerceNumber(v1Shape.point[0]),\n\t\t\t\t\t\ty: coerceNumber(v1Shape.point[1]),\n\t\t\t\t\t\trotation: 0,\n\t\t\t\t\t\tisLocked: !!v1Shape.isLocked,\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (v1Shape.type) {\n\t\t\t\t\t\tcase TDShapeType.Sticky: {\n\t\t\t\t\t\t\teditor.createShapes<TLNoteShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'note',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.text ?? '',\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\talign: getV2Align(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Rectangle: {\n\t\t\t\t\t\t\teditor.createShapes<TLGeoShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'rectangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.label ?? '',\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.label ?? '',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Triangle: {\n\t\t\t\t\t\t\teditor.createShapes<TLGeoShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'triangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.label ?? '',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Ellipse: {\n\t\t\t\t\t\t\teditor.createShapes<TLGeoShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'ellipse',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.radius[0]) * 2,\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.radius[1]) * 2,\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.label ?? '',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Draw: {\n\t\t\t\t\t\t\tif (v1Shape.points.length === 0) {\n\t\t\t\t\t\t\t\tdecideNotToCreateShape(v1Shape)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes<TLDrawShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'draw',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tisPen: false,\n\t\t\t\t\t\t\t\t\t\tisComplete: v1Shape.isComplete,\n\t\t\t\t\t\t\t\t\t\tsegments: [{ type: 'free', points: v1Shape.points.map(getV2Point) }],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Arrow: {\n\t\t\t\t\t\t\tconst v1Bend = coerceNumber(v1Shape.bend)\n\t\t\t\t\t\t\tconst v1Start = getV2Point(v1Shape.handles.start.point)\n\t\t\t\t\t\t\tconst v1End = getV2Point(v1Shape.handles.end.point)\n\t\t\t\t\t\t\tconst dist = Vec2d.Dist(v1Start, v1End)\n\t\t\t\t\t\t\tconst v2Bend = (dist * -v1Bend) / 2\n\n\t\t\t\t\t\t\t// Could also be a line... but we'll use it as an arrow anyway\n\t\t\t\t\t\t\teditor.createShapes<TLArrowShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.label ?? '',\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tarrowheadStart: getV2Arrowhead(v1Shape.decorations?.start),\n\t\t\t\t\t\t\t\t\t\tarrowheadEnd: getV2Arrowhead(v1Shape.decorations?.end),\n\t\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\t\ttype: 'point',\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.start.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.start.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\t\ttype: 'point',\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.end.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.end.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tbend: v2Bend,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Text: {\n\t\t\t\t\t\t\teditor.createShapes<TLTextShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\ttext: v1Shape.text ?? ' ',\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2TextSize(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\talign: getV2Align(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t\tscale: v1Shape.style.scale ?? 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Image: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes<TLImageShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TDShapeType.Video: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes<TLVideoShape>([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rotation = coerceNumber(v1Shape.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(shapeId)\n\t\t\t\t\t\teditor.rotateShapesBy([shapeId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Create groups\n\t\t\t\tv1GroupShapeIdsToV1ChildIds.forEach((v1ChildIds, v1GroupId) => {\n\t\t\t\t\tconst v2ChildShapeIds = v1ChildIds.map((id) => v1ShapeIdsToV2ShapeIds.get(id)!)\n\t\t\t\t\tconst v2GroupId = v1ShapeIdsToV2ShapeIds.get(v1GroupId)!\n\t\t\t\t\teditor.groupShapes(v2ChildShapeIds, v2GroupId)\n\n\t\t\t\t\tconst v1Group = v1Page.shapes[v1GroupId]\n\t\t\t\t\tconst rotation = coerceNumber(v1Group.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(v2GroupId)\n\t\t\t\t\t\teditor.rotateShapesBy([v2GroupId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Bind arrows to shapes\n\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TDShapeType.Arrow) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst v2ShapeId = v1ShapeIdsToV2ShapeIds.get(v1Shape.id)!\n\t\t\t\t\tconst util = editor.getShapeUtil<TLArrowShape>('arrow')\n\n\t\t\t\t\t// dumb but necessary\n\t\t\t\t\teditor.inputs.ctrlKey = false\n\n\t\t\t\t\tfor (const handleId of ['start', 'end'] as const) {\n\t\t\t\t\t\tconst bindingId = v1Shape.handles[handleId].bindingId\n\t\t\t\t\t\tif (bindingId) {\n\t\t\t\t\t\t\tconst binding = v1Page.bindings[bindingId]\n\t\t\t\t\t\t\tif (!binding) {\n\t\t\t\t\t\t\t\t// arrow has a reference to a binding that no longer exists\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst targetId = v1ShapeIdsToV2ShapeIds.get(binding.toId)!\n\n\t\t\t\t\t\t\tconst targetShape = editor.getShape(targetId)!\n\n\t\t\t\t\t\t\t// (unexpected) We didn't create the target shape\n\t\t\t\t\t\t\tif (!targetShape) continue\n\n\t\t\t\t\t\t\tif (targetId) {\n\t\t\t\t\t\t\t\tconst bounds = editor.getShapePageBounds(targetId)!\n\n\t\t\t\t\t\t\t\tconst v2ShapeFresh = editor.getShape<TLArrowShape>(v2ShapeId)!\n\n\t\t\t\t\t\t\t\tconst nx = clamp((coerceNumber(binding.point[0]) + 0.5) / 2, 0.2, 0.8)\n\t\t\t\t\t\t\t\tconst ny = clamp((coerceNumber(binding.point[1]) + 0.5) / 2, 0.2, 0.8)\n\n\t\t\t\t\t\t\t\tconst point = editor.getPointInShapeSpace(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\tx: bounds.minX + bounds.width * nx,\n\t\t\t\t\t\t\t\t\ty: bounds.minY + bounds.height * ny,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tconst handles = editor.getShapeHandles(v2ShapeFresh)!\n\t\t\t\t\t\t\t\tconst change = util.onHandleChange!(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\thandle: {\n\t\t\t\t\t\t\t\t\t\t...handles.find((h) => h.id === handleId)!,\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisPrecise: point.x !== 0.5 || point.y !== 0.5,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tif (change) {\n\t\t\t\t\t\t\t\t\tif (change.props?.[handleId]) {\n\t\t\t\t\t\t\t\t\t\tconst terminal = change.props?.[handleId] as TLArrowShapeTerminal\n\t\t\t\t\t\t\t\t\t\tif (terminal.type === 'binding') {\n\t\t\t\t\t\t\t\t\t\t\tterminal.isExact = binding.distance === 0\n\n\t\t\t\t\t\t\t\t\t\t\tif (terminal.boundShapeId !== targetId) {\n\t\t\t\t\t\t\t\t\t\t\t\tconsole.warn('Hit the wrong shape!')\n\t\t\t\t\t\t\t\t\t\t\t\tterminal.boundShapeId = targetId\n\t\t\t\t\t\t\t\t\t\t\t\tterminal.normalizedAnchor = { x: 0.5, y: 0.5 }\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\teditor.updateShapes([change])\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\n\t\t// Set the current page to the first page again\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\teditor.history.clear()\n\t\teditor.selectNone()\n\t\teditor.updateViewportScreenBounds()\n\n\t\tconst bounds = editor.getCurrentPageBounds()\n\t\tif (bounds) {\n\t\t\teditor.zoomToBounds(bounds, 1)\n\t\t}\n\t})\n}\n\nfunction coerceNumber(n: unknown): number {\n\tif (typeof n !== 'number') return 0\n\tif (Number.isNaN(n)) return 0\n\tif (!Number.isFinite(n)) return 0\n\treturn n\n}\n\nfunction coerceDimension(d: unknown): number {\n\tconst n = coerceNumber(d)\n\tif (n <= 0) return 1\n\treturn n\n}\n\n/**\n * We want to move assets over to our new S3 bucket & extract any relevant metadata. That process is\n * async though, where the rest of our migration is synchronous.\n *\n * We'll write placeholder assets to the app using the old asset URLs, then kick off a process async\n * to try and download the real assets, extract the metadata, and upload them to our new bucket.\n * It's not a big deal if this fails though.\n */\nasync function tryMigrateAsset(editor: Editor, placeholderAsset: TLAsset) {\n\ttry {\n\t\tif (placeholderAsset.type === 'bookmark' || !placeholderAsset.props.src) return\n\n\t\tconst response = await fetch(placeholderAsset.props.src)\n\t\tif (!response.ok) return\n\n\t\tconst file = new File([await response.blob()], placeholderAsset.props.name, {\n\t\t\ttype: response.headers.get('content-type') ?? placeholderAsset.props.mimeType ?? undefined,\n\t\t})\n\n\t\tconst newAsset = await editor.getAssetForExternalContent({ type: 'file', file })\n\t\tif (!newAsset) throw new Error('Could not get asset for external content')\n\t\tif (newAsset.type === 'bookmark') return\n\n\t\teditor.updateAssets([\n\t\t\t{\n\t\t\t\tid: placeholderAsset.id,\n\t\t\t\ttype: placeholderAsset.type,\n\t\t\t\tprops: {\n\t\t\t\t\t...newAsset.props,\n\t\t\t\t\tname: placeholderAsset.props.name,\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t} catch (err) {\n\t\t// not a big deal, we'll just keep the placeholder asset\n\t}\n}\n\nfunction migrate(document: LegacyTldrawDocument, newVersion: number): LegacyTldrawDocument {\n\tconst { version = 0 } = document\n\n\tif (!document.assets) {\n\t\tdocument.assets = {}\n\t}\n\n\t// Remove unused assets when loading a document\n\tconst assetIdsInUse = new Set<string>()\n\n\tObject.values(document.pages).forEach((page) =>\n\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\tconst { parentId, children, assetId } = shape\n\n\t\t\tif (assetId) {\n\t\t\t\tassetIdsInUse.add(assetId)\n\t\t\t}\n\n\t\t\t// Fix missing parent bug\n\t\t\tif (parentId !== page.id && !page.shapes[parentId]) {\n\t\t\t\tconsole.warn('Encountered a shape with a missing parent!')\n\t\t\t\tshape.parentId = page.id\n\t\t\t}\n\n\t\t\tif (shape.type === TDShapeType.Group && children) {\n\t\t\t\tchildren.forEach((childId) => {\n\t\t\t\t\tif (!page.shapes[childId]) {\n\t\t\t\t\t\tconsole.warn('Encountered a parent with a missing child!', shape.id, childId)\n\t\t\t\t\t\tchildren?.splice(children.indexOf(childId), 1)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// TODO: Remove the shape if it has no children\n\t\t\t}\n\t\t})\n\t)\n\n\tObject.keys(document.assets).forEach((assetId) => {\n\t\tif (!assetIdsInUse.has(assetId)) {\n\t\t\tdelete document.assets[assetId]\n\t\t}\n\t})\n\n\tif (version !== newVersion) {\n\t\tif (version < 14) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.shapes)\n\t\t\t\t\t.filter((shape) => shape.type === TDShapeType.Text)\n\t\t\t\t\t.forEach((shape) => {\n\t\t\t\t\t\tif ((shape as TextShape).style.font === undefined) {\n\t\t\t\t\t\t\t;(shape as TextShape).style.font === FontStyle.Script\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Lowercase styles, move binding meta to binding\n\t\tif (version <= 13) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.bindings).forEach((binding) => {\n\t\t\t\t\tObject.assign(binding, (binding as any).meta)\n\t\t\t\t})\n\n\t\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\t\tObject.entries(shape.style).forEach(([id, style]) => {\n\t\t\t\t\t\tif (typeof style === 'string') {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tshape.style[id] = style.toLowerCase()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tif (shape.type === TDShapeType.Arrow) {\n\t\t\t\t\t\tif (shape.decorations) {\n\t\t\t\t\t\t\tObject.entries(shape.decorations).forEach(([id, decoration]) => {\n\t\t\t\t\t\t\t\tif ((decoration as unknown) === 'Arrow') {\n\t\t\t\t\t\t\t\t\tshape.decorations = {\n\t\t\t\t\t\t\t\t\t\t...shape.decorations,\n\t\t\t\t\t\t\t\t\t\t[id]: Decoration.Arrow,\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Add document name and file system handle\n\t\tif (version <= 13.1 && document.name == null) {\n\t\t\tdocument.name = 'New Document'\n\t\t}\n\n\t\tif (version < 15 && document.assets == null) {\n\t\t\tdocument.assets = {}\n\t\t}\n\n\t\tObject.values(document.pages).forEach((page) => {\n\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\tif (version < 15.2) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(shape.type === TDShapeType.Image || shape.type === TDShapeType.Video) &&\n\t\t\t\t\t\tshape.style.isFilled == null\n\t\t\t\t\t) {\n\t\t\t\t\t\tshape.style.isFilled = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (version < 15.3) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tshape.type === TDShapeType.Rectangle ||\n\t\t\t\t\t\tshape.type === TDShapeType.Triangle ||\n\t\t\t\t\t\tshape.type === TDShapeType.Ellipse ||\n\t\t\t\t\t\tshape.type === TDShapeType.Arrow\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ('text' in shape && typeof shape.text === 'string') {\n\t\t\t\t\t\t\tshape.label = shape.text\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.label) {\n\t\t\t\t\t\t\tshape.label = ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.labelPoint) {\n\t\t\t\t\t\t\tshape.labelPoint = [0.5, 0.5]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\t// Cleanup\n\tObject.values(document.pageStates).forEach((pageState) => {\n\t\tpageState.selectedIds = pageState.selectedIds.filter((id) => {\n\t\t\treturn document.pages[pageState.id].shapes[id] !== undefined\n\t\t})\n\t\tpageState.bindingId = undefined\n\t\tpageState.editingId = undefined\n\t\tpageState.hoveredId = undefined\n\t\tpageState.pointedId = undefined\n\t})\n\n\tdocument.version = newVersion\n\n\treturn document\n}\n\n/* -------------------- TLV1 Types -------------------- */\n\ninterface TLV1Handle {\n\tid: string\n\tindex: number\n\tpoint: number[]\n}\n\ninterface TLV1Binding {\n\tid: string\n\ttoId: string\n\tfromId: string\n}\n\ninterface TLV1Shape {\n\tid: string\n\ttype: string\n\tparentId: string\n\tchildIndex: number\n\tname: string\n\tpoint: number[]\n\tassetId?: string\n\trotation?: number\n\tchildren?: string[]\n\thandles?: Record<string, TLV1Handle>\n\tisGhost?: boolean\n\tisHidden?: boolean\n\tisLocked?: boolean\n\tisGenerated?: boolean\n\tisAspectRatioLocked?: boolean\n}\n\nenum TDShapeType {\n\tSticky = 'sticky',\n\tEllipse = 'ellipse',\n\tRectangle = 'rectangle',\n\tTriangle = 'triangle',\n\tDraw = 'draw',\n\tArrow = 'arrow',\n\tText = 'text',\n\tGroup = 'group',\n\tImage = 'image',\n\tVideo = 'video',\n}\n\nenum ColorStyle {\n\tWhite = 'white',\n\tLightGray = 'lightGray',\n\tGray = 'gray',\n\tBlack = 'black',\n\tGreen = 'green',\n\tCyan = 'cyan',\n\tBlue = 'blue',\n\tIndigo = 'indigo',\n\tViolet = 'violet',\n\tRed = 'red',\n\tOrange = 'orange',\n\tYellow = 'yellow',\n}\n\nenum SizeStyle {\n\tSmall = 'small',\n\tMedium = 'medium',\n\tLarge = 'large',\n}\n\nenum DashStyle {\n\tDraw = 'draw',\n\tSolid = 'solid',\n\tDashed = 'dashed',\n\tDotted = 'dotted',\n}\n\nenum AlignStyle {\n\tStart = 'start',\n\tMiddle = 'middle',\n\tEnd = 'end',\n\tJustify = 'justify',\n}\n\nenum FontStyle {\n\tScript = 'script',\n\tSans = 'sans',\n\tSerif = 'serif',\n\tMono = 'mono',\n}\n\ntype ShapeStyles = {\n\tcolor: ColorStyle\n\tsize: SizeStyle\n\tdash: DashStyle\n\tfont?: FontStyle\n\ttextAlign?: AlignStyle\n\tisFilled?: boolean\n\tscale?: number\n}\n\ninterface TDBaseShape extends TLV1Shape {\n\tstyle: ShapeStyles\n\ttype: TDShapeType\n\tlabel?: string\n\thandles?: Record<string, TDHandle>\n}\n\ninterface DrawShape extends TDBaseShape {\n\ttype: TDShapeType.Draw\n\tpoints: number[][]\n\tisComplete: boolean\n}\n\n// The extended handle (used for arrows)\ninterface TDHandle extends TLV1Handle {\n\tcanBind?: boolean\n\tbindingId?: string\n}\n\ninterface RectangleShape extends TDBaseShape {\n\ttype: TDShapeType.Rectangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\ninterface EllipseShape extends TDBaseShape {\n\ttype: TDShapeType.Ellipse\n\tradius: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\ninterface TriangleShape extends TDBaseShape {\n\ttype: TDShapeType.Triangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\nenum Decoration {\n\tArrow = 'arrow',\n}\n\n// The shape created with the arrow tool\ninterface ArrowShape extends TDBaseShape {\n\ttype: TDShapeType.Arrow\n\tbend: number\n\thandles: {\n\t\tstart: TDHandle\n\t\tbend: TDHandle\n\t\tend: TDHandle\n\t}\n\tdecorations?: {\n\t\tstart?: Decoration\n\t\tend?: Decoration\n\t\tmiddle?: Decoration\n\t}\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\ninterface ArrowBinding extends TLV1Binding {\n\thandleId: keyof ArrowShape['handles']\n\tdistance: number\n\tpoint: number[]\n}\n\ntype TDBinding = ArrowBinding\n\ninterface ImageShape extends TDBaseShape {\n\ttype: TDShapeType.Image\n\tsize: number[]\n\tassetId: string\n}\n\ninterface VideoShape extends TDBaseShape {\n\ttype: TDShapeType.Video\n\tsize: number[]\n\tassetId: string\n\tisPlaying: boolean\n\tcurrentTime: number\n}\n\n// The shape created by the text tool\ninterface TextShape extends TDBaseShape {\n\ttype: TDShapeType.Text\n\ttext: string\n}\n\n// The shape created by the sticky tool\ninterface StickyShape extends TDBaseShape {\n\ttype: TDShapeType.Sticky\n\tsize: number[]\n\ttext: string\n}\n\n// The shape created when multiple shapes are grouped\ninterface GroupShape extends TDBaseShape {\n\ttype: TDShapeType.Group\n\tsize: number[]\n\tchildren: string[]\n}\n\ntype TDShape =\n\t| RectangleShape\n\t| EllipseShape\n\t| TriangleShape\n\t| DrawShape\n\t| ArrowShape\n\t| TextShape\n\t| GroupShape\n\t| StickyShape\n\t| ImageShape\n\t| VideoShape\n\ntype TDPage = {\n\tid: string\n\tname?: string\n\tchildIndex?: number\n\tshapes: Record<string, TDShape>\n\tbindings: Record<string, TDBinding>\n}\n\ninterface TLV1Bounds {\n\tminX: number\n\tminY: number\n\tmaxX: number\n\tmaxY: number\n\twidth: number\n\theight: number\n\trotation?: number\n}\n\ninterface TLV1PageState {\n\tid: string\n\tselectedIds: string[]\n\tcamera: {\n\t\tpoint: number[]\n\t\tzoom: number\n\t}\n\tbrush?: TLV1Bounds | null\n\tpointedId?: string | null\n\thoveredId?: string | null\n\teditingId?: string | null\n\tbindingId?: string | null\n}\n\nenum TDAssetType {\n\tImage = 'image',\n\tVideo = 'video',\n}\n\ninterface TDImageAsset extends TLV1Asset {\n\ttype: TDAssetType.Image\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\ninterface TDVideoAsset extends TLV1Asset {\n\ttype: TDAssetType.Video\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\ninterface TLV1Asset {\n\tid: string\n\ttype: string\n}\n\ntype TDAsset = TDImageAsset | TDVideoAsset\n\ntype TDAssets = Record<string, TDAsset>\n\n/** @internal */\nexport interface LegacyTldrawDocument {\n\tid: string\n\tname: string\n\tversion: number\n\tpages: Record<string, TDPage>\n\tpageStates: Record<string, TLV1PageState>\n\tassets: TDAssets\n}\n\n/* ------------------ Translations ------------------ */\n\nconst v1ColorsToV2Colors: Record<ColorStyle, TLDefaultColorStyle> = {\n\t[ColorStyle.White]: 'black',\n\t[ColorStyle.Black]: 'black',\n\t[ColorStyle.LightGray]: 'grey',\n\t[ColorStyle.Gray]: 'grey',\n\t[ColorStyle.Green]: 'light-green',\n\t[ColorStyle.Cyan]: 'green',\n\t[ColorStyle.Blue]: 'light-blue',\n\t[ColorStyle.Indigo]: 'blue',\n\t[ColorStyle.Orange]: 'orange',\n\t[ColorStyle.Yellow]: 'yellow',\n\t[ColorStyle.Red]: 'red',\n\t[ColorStyle.Violet]: 'light-violet',\n}\n\nconst v1FontsToV2Fonts: Record<FontStyle, TLDefaultFontStyle> = {\n\t[FontStyle.Mono]: 'mono',\n\t[FontStyle.Sans]: 'sans',\n\t[FontStyle.Script]: 'draw',\n\t[FontStyle.Serif]: 'serif',\n}\n\nconst v1AlignsToV2Aligns: Record<AlignStyle, TLDefaultHorizontalAlignStyle> = {\n\t[AlignStyle.Start]: 'start',\n\t[AlignStyle.Middle]: 'middle',\n\t[AlignStyle.End]: 'end',\n\t[AlignStyle.Justify]: 'start',\n}\n\nconst v1TextSizesToV2TextSizes: Record<SizeStyle, TLDefaultSizeStyle> = {\n\t[SizeStyle.Small]: 's',\n\t[SizeStyle.Medium]: 'l',\n\t[SizeStyle.Large]: 'xl',\n}\n\nconst v1SizesToV2Sizes: Record<SizeStyle, TLDefaultSizeStyle> = {\n\t[SizeStyle.Small]: 'm',\n\t[SizeStyle.Medium]: 'l',\n\t[SizeStyle.Large]: 'xl',\n}\n\nconst v1DashesToV2Dashes: Record<DashStyle, TLDefaultDashStyle> = {\n\t[DashStyle.Solid]: 'solid',\n\t[DashStyle.Dashed]: 'dashed',\n\t[DashStyle.Dotted]: 'dotted',\n\t[DashStyle.Draw]: 'draw',\n}\n\nfunction getV2Color(color: ColorStyle | undefined): TLDefaultColorStyle {\n\treturn color ? v1ColorsToV2Colors[color] ?? 'black' : 'black'\n}\n\nfunction getV2Font(font: FontStyle | undefined): TLDefaultFontStyle {\n\treturn font ? v1FontsToV2Fonts[font] ?? 'draw' : 'draw'\n}\n\nfunction getV2Align(align: AlignStyle | undefined): TLDefaultHorizontalAlignStyle {\n\treturn align ? v1AlignsToV2Aligns[align] ?? 'middle' : 'middle'\n}\n\nfunction getV2TextSize(size: SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? v1TextSizesToV2TextSizes[size] ?? 'm' : 'm'\n}\n\nfunction getV2Size(size: SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? v1SizesToV2Sizes[size] ?? 'l' : 'l'\n}\n\nfunction getV2Dash(dash: DashStyle | undefined): TLDefaultDashStyle {\n\treturn dash ? v1DashesToV2Dashes[dash] ?? 'draw' : 'draw'\n}\n\nfunction getV2Point(point: number[]): Vec2dModel {\n\treturn {\n\t\tx: coerceNumber(point[0]),\n\t\ty: coerceNumber(point[1]),\n\t\tz: point[2] == null ? 0.5 : coerceNumber(point[2]),\n\t}\n}\n\nfunction getV2Arrowhead(decoration: Decoration | undefined): TLArrowShapeArrowheadStyle {\n\treturn decoration === Decoration.Arrow ? 'arrow' : 'none'\n}\n\nfunction getV2Fill(isFilled: boolean | undefined, color: ColorStyle) {\n\treturn isFilled\n\t\t? color === ColorStyle.Black || color === ColorStyle.White\n\t\t\t? 'semi'\n\t\t\t: 'solid'\n\t\t: 'none'\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["bounds", "TDShapeType", "ColorStyle", "SizeStyle", "DashStyle", "AlignStyle", "FontStyle", "Decoration", "TDAssetType"]
7
7
  }
@@ -204,8 +204,7 @@ async function parseAndLoadDocument(editor, document, msg, addToast, onV1FileLoa
204
204
  }
205
205
  editor.updateInstanceState({ isFocused });
206
206
  });
207
- if (forceDarkMode)
208
- editor.user.updateUserPreferences({ isDarkMode: true });
207
+ if (forceDarkMode) editor.user.updateUserPreferences({ isDarkMode: true });
209
208
  }
210
209
  export {
211
210
  TLDRAW_FILE_EXTENSION,