@bigbluebutton/tldraw 2.0.0-alpha.33 → 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
@@ -14,12 +14,10 @@ function getFontDefForExport(fontStyle) {
14
14
  key: `${DefaultFontStyle.id}:${fontStyle}`,
15
15
  getElement: async () => {
16
16
  const font = findFont(fontStyle);
17
- if (!font)
18
- return null;
17
+ if (!font) return null;
19
18
  const url = font.$$_url;
20
19
  const fontFaceRule = font.$$_fontface;
21
- if (!url || !fontFaceRule)
22
- return null;
20
+ if (!url || !fontFaceRule) return null;
23
21
  const fontFile = await (await fetch(url)).blob();
24
22
  const base64FontFile = await new Promise((resolve, reject) => {
25
23
  const reader = new FileReader();
@@ -47,8 +45,7 @@ function getFillDefForExport(fill, theme) {
47
45
  return {
48
46
  key: `${DefaultFontStyle.id}:${fill}`,
49
47
  getElement: async () => {
50
- if (fill !== "pattern")
51
- return null;
48
+ if (fill !== "pattern") return null;
52
49
  const t = 8 / 12;
53
50
  const divEl = document.createElement("div");
54
51
  divEl.innerHTML = `
@@ -94,8 +91,7 @@ const generateImage = (dpr, currentZoom, darkMode) => {
94
91
  canvasEl.width = size;
95
92
  canvasEl.height = size;
96
93
  const ctx = canvasEl.getContext("2d");
97
- if (!ctx)
98
- return;
94
+ if (!ctx) return;
99
95
  ctx.fillStyle = darkMode ? "#212529" : "#f8f9fa";
100
96
  ctx.fillRect(0, 0, size, size);
101
97
  ctx.globalCompositeOperation = "destination-out";
@@ -125,8 +121,7 @@ const canvasBlob = (size, fn) => {
125
121
  canvas.width = size[0];
126
122
  canvas.height = size[1];
127
123
  const ctx = canvas.getContext("2d");
128
- if (!ctx)
129
- return "";
124
+ if (!ctx) return "";
130
125
  fn(ctx);
131
126
  return canvas.toDataURL();
132
127
  };
@@ -180,8 +175,7 @@ function usePattern() {
180
175
  }
181
176
  let isCancelled = false;
182
177
  Promise.all(promises).then((urls) => {
183
- if (isCancelled)
184
- return;
178
+ if (isCancelled) return;
185
179
  setBackgroundUrls(urls);
186
180
  setIsReady(true);
187
181
  });
@@ -226,10 +220,8 @@ function PatternFillDefForCanvas() {
226
220
  return /* @__PURE__ */ jsx("g", { ref: containerRef, children: defs });
227
221
  }
228
222
  function findHtmlLayerParent(element) {
229
- if (element.classList.contains("tl-html-layer"))
230
- return element;
231
- if (element.parentElement)
232
- return findHtmlLayerParent(element.parentElement);
223
+ if (element.classList.contains("tl-html-layer")) return element;
224
+ if (element.parentElement) return findHtmlLayerParent(element.parentElement);
233
225
  return null;
234
226
  }
235
227
  export {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/shapes/shared/defaultStyleDefs.tsx"],
4
4
  "sourcesContent": ["import {\n\tDefaultColorThemePalette,\n\tDefaultFontFamilies,\n\tDefaultFontStyle,\n\tHASH_PATTERN_ZOOM_NAMES,\n\tMAX_ZOOM,\n\tSvgExportDef,\n\tTLDefaultColorTheme,\n\tTLDefaultFillStyle,\n\tTLDefaultFontStyle,\n\tTLShapeUtilCanvasSvgDef,\n\tdebugFlags,\n\tuseEditor,\n} from '@bigbluebutton/editor'\nimport { useEffect, useMemo, useRef, useState } from 'react'\n\n/** @public */\nexport function getFontDefForExport(fontStyle: TLDefaultFontStyle): SvgExportDef {\n\treturn {\n\t\tkey: `${DefaultFontStyle.id}:${fontStyle}`,\n\t\tgetElement: async () => {\n\t\t\tconst font = findFont(fontStyle)\n\t\t\tif (!font) return null\n\n\t\t\tconst url = (font as any).$$_url\n\t\t\tconst fontFaceRule = (font as any).$$_fontface\n\t\t\tif (!url || !fontFaceRule) return null\n\n\t\t\tconst fontFile = await (await fetch(url)).blob()\n\t\t\tconst base64FontFile = await new Promise<string>((resolve, reject) => {\n\t\t\t\tconst reader = new FileReader()\n\t\t\t\treader.onload = () => resolve(reader.result as string)\n\t\t\t\treader.onerror = reject\n\t\t\t\treader.readAsDataURL(fontFile)\n\t\t\t})\n\n\t\t\tconst newFontFaceRule = fontFaceRule.replace(url, base64FontFile)\n\t\t\tconst style = document.createElementNS('http://www.w3.org/2000/svg', 'style')\n\t\t\tstyle.textContent = newFontFaceRule\n\t\t\treturn style\n\t\t},\n\t}\n}\n\nfunction findFont(name: TLDefaultFontStyle): FontFace | null {\n\tconst fontFamily = DefaultFontFamilies[name]\n\tfor (const font of document.fonts) {\n\t\tif (fontFamily.includes(font.family)) {\n\t\t\treturn font\n\t\t}\n\t}\n\treturn null\n}\n\n/** @public */\nexport function getFillDefForExport(\n\tfill: TLDefaultFillStyle,\n\ttheme: TLDefaultColorTheme\n): SvgExportDef {\n\treturn {\n\t\tkey: `${DefaultFontStyle.id}:${fill}`,\n\t\tgetElement: async () => {\n\t\t\tif (fill !== 'pattern') return null\n\n\t\t\tconst t = 8 / 12\n\t\t\tconst divEl = document.createElement('div')\n\t\t\tdivEl.innerHTML = `\n\t\t\t\t<svg>\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<mask id=\"hash_pattern_mask\">\n\t\t\t\t\t\t\t<rect x=\"0\" y=\"0\" width=\"8\" height=\"8\" fill=\"white\" />\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstroke=\"black\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<line x1=\"${t * 1}\" y1=\"${t * 3}\" x2=\"${t * 3}\" y2=\"${t * 1}\" />\n\t\t\t\t\t\t\t\t<line x1=\"${t * 5}\" y1=\"${t * 7}\" x2=\"${t * 7}\" y2=\"${t * 5}\" />\n\t\t\t\t\t\t\t\t<line x1=\"${t * 9}\" y1=\"${t * 11}\" x2=\"${t * 11}\" y2=\"${t * 9}\" />\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</mask>\n\t\t\t\t\t\t<pattern\n\t\t\t\t\t\t\tid=\"hash_pattern\"\n\t\t\t\t\t\t\twidth=\"8\"\n\t\t\t\t\t\t\theight=\"8\"\n\t\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<rect x=\"0\" y=\"0\" width=\"8\" height=\"8\" fill=\"${theme.solid}\" mask=\"url(#hash_pattern_mask)\" />\n\t\t\t\t\t\t</pattern>\n\t\t\t\t\t</defs>\n\t\t\t\t</svg>\n\t\t\t`\n\t\t\treturn Array.from(divEl.querySelectorAll('defs > *'))\n\t\t},\n\t}\n}\n\nexport function getFillDefForCanvas(): TLShapeUtilCanvasSvgDef {\n\treturn {\n\t\tkey: `${DefaultFontStyle.id}:pattern`,\n\t\tcomponent: PatternFillDefForCanvas,\n\t}\n}\nconst TILE_PATTERN_SIZE = 8\n\nconst generateImage = (dpr: number, currentZoom: number, darkMode: boolean) => {\n\treturn new Promise<Blob>((resolve, reject) => {\n\t\tconst size = TILE_PATTERN_SIZE * currentZoom * dpr\n\n\t\tconst canvasEl = document.createElement('canvas')\n\t\tcanvasEl.width = size\n\t\tcanvasEl.height = size\n\n\t\tconst ctx = canvasEl.getContext('2d')\n\t\tif (!ctx) return\n\n\t\tctx.fillStyle = darkMode ? '#212529' : '#f8f9fa'\n\t\tctx.fillRect(0, 0, size, size)\n\n\t\t// This essentially generates an inverse of the pattern we're drawing.\n\t\tctx.globalCompositeOperation = 'destination-out'\n\n\t\tctx.lineCap = 'round'\n\t\tctx.lineWidth = 1.25 * currentZoom * dpr\n\n\t\tconst t = 8 / 12\n\t\tconst s = (v: number) => v * currentZoom * dpr\n\n\t\tctx.beginPath()\n\t\tctx.moveTo(s(t * 1), s(t * 3))\n\t\tctx.lineTo(s(t * 3), s(t * 1))\n\n\t\tctx.moveTo(s(t * 5), s(t * 7))\n\t\tctx.lineTo(s(t * 7), s(t * 5))\n\n\t\tctx.moveTo(s(t * 9), s(t * 11))\n\t\tctx.lineTo(s(t * 11), s(t * 9))\n\t\tctx.stroke()\n\n\t\tcanvasEl.toBlob((blob) => {\n\t\t\tif (!blob || debugFlags.throwToBlob.get()) {\n\t\t\t\treject()\n\t\t\t} else {\n\t\t\t\tresolve(blob)\n\t\t\t}\n\t\t})\n\t})\n}\n\nconst canvasBlob = (size: [number, number], fn: (ctx: CanvasRenderingContext2D) => void) => {\n\tconst canvas = document.createElement('canvas')\n\tcanvas.width = size[0]\n\tcanvas.height = size[1]\n\tconst ctx = canvas.getContext('2d')\n\tif (!ctx) return ''\n\tfn(ctx)\n\treturn canvas.toDataURL()\n}\ntype PatternDef = { zoom: number; url: string; darkMode: boolean }\n\nconst getDefaultPatterns = () => {\n\tconst defaultPatterns: PatternDef[] = []\n\tfor (let i = 1; i <= Math.ceil(MAX_ZOOM); i++) {\n\t\tconst whitePixelBlob = canvasBlob([1, 1], (ctx) => {\n\t\t\tctx.fillStyle = DefaultColorThemePalette.lightMode.black.semi\n\t\t\tctx.fillRect(0, 0, 1, 1)\n\t\t})\n\t\tconst blackPixelBlob = canvasBlob([1, 1], (ctx) => {\n\t\t\tctx.fillStyle = DefaultColorThemePalette.darkMode.black.semi\n\t\t\tctx.fillRect(0, 0, 1, 1)\n\t\t})\n\t\tdefaultPatterns.push({\n\t\t\tzoom: i,\n\t\t\turl: whitePixelBlob,\n\t\t\tdarkMode: false,\n\t\t})\n\t\tdefaultPatterns.push({\n\t\t\tzoom: i,\n\t\t\turl: blackPixelBlob,\n\t\t\tdarkMode: true,\n\t\t})\n\t}\n\treturn defaultPatterns\n}\n\nfunction usePattern() {\n\tconst editor = useEditor()\n\tconst dpr = editor.getInstanceState().devicePixelRatio\n\tconst [isReady, setIsReady] = useState(false)\n\tconst defaultPatterns = useMemo(() => getDefaultPatterns(), [])\n\tconst [backgroundUrls, setBackgroundUrls] = useState<PatternDef[]>(defaultPatterns)\n\n\tuseEffect(() => {\n\t\tconst promises: Promise<{ zoom: number; url: string; darkMode: boolean }>[] = []\n\n\t\tfor (let i = 1; i <= Math.ceil(MAX_ZOOM); i++) {\n\t\t\tpromises.push(\n\t\t\t\tgenerateImage(dpr, i, false).then((blob) => ({\n\t\t\t\t\tzoom: i,\n\t\t\t\t\turl: URL.createObjectURL(blob),\n\t\t\t\t\tdarkMode: false,\n\t\t\t\t}))\n\t\t\t)\n\t\t\tpromises.push(\n\t\t\t\tgenerateImage(dpr, i, true).then((blob) => ({\n\t\t\t\t\tzoom: i,\n\t\t\t\t\turl: URL.createObjectURL(blob),\n\t\t\t\t\tdarkMode: true,\n\t\t\t\t}))\n\t\t\t)\n\t\t}\n\n\t\tlet isCancelled = false\n\t\tPromise.all(promises).then((urls) => {\n\t\t\tif (isCancelled) return\n\t\t\tsetBackgroundUrls(urls)\n\t\t\tsetIsReady(true)\n\t\t})\n\n\t\treturn () => {\n\t\t\tisCancelled = true\n\t\t\tsetIsReady(false)\n\t\t}\n\t}, [dpr])\n\n\tconst defs = (\n\t\t<>\n\t\t\t{backgroundUrls.map((item) => {\n\t\t\t\tconst key = item.zoom + (item.darkMode ? '_dark' : '_light')\n\t\t\t\treturn (\n\t\t\t\t\t<pattern\n\t\t\t\t\t\tkey={key}\n\t\t\t\t\t\tid={HASH_PATTERN_ZOOM_NAMES[key]}\n\t\t\t\t\t\twidth={TILE_PATTERN_SIZE}\n\t\t\t\t\t\theight={TILE_PATTERN_SIZE}\n\t\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<image href={item.url} width={TILE_PATTERN_SIZE} height={TILE_PATTERN_SIZE} />\n\t\t\t\t\t</pattern>\n\t\t\t\t)\n\t\t\t})}\n\t\t</>\n\t)\n\n\treturn { defs, isReady }\n}\n\nfunction PatternFillDefForCanvas() {\n\tconst editor = useEditor()\n\tconst containerRef = useRef<SVGGElement>(null)\n\tconst { defs, isReady } = usePattern()\n\n\tuseEffect(() => {\n\t\tif (isReady && editor.environment.isSafari) {\n\t\t\tconst htmlLayer = findHtmlLayerParent(containerRef.current!)\n\t\t\tif (htmlLayer) {\n\t\t\t\t// Wait for `patternContext` to be picked up\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\thtmlLayer.style.display = 'none'\n\n\t\t\t\t\t// Wait for 'display = \"none\"' to take effect\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\thtmlLayer.style.display = ''\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}, [editor, isReady])\n\n\treturn <g ref={containerRef}>{defs}</g>\n}\n\nfunction findHtmlLayerParent(element: Element): HTMLElement | null {\n\tif (element.classList.contains('tl-html-layer')) return element as HTMLElement\n\tif (element.parentElement) return findHtmlLayerParent(element.parentElement)\n\treturn null\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -3,16 +3,14 @@ const MIN_START_PRESSURE = 0.025;
3
3
  const MIN_END_PRESSURE = 0.01;
4
4
  function getStrokePoints(rawInputPoints, options = {}) {
5
5
  const { streamline = 0.5, size = 16, simulatePressure = false } = options;
6
- if (rawInputPoints.length === 0)
7
- return [];
6
+ if (rawInputPoints.length === 0) return [];
8
7
  const t = 0.15 + (1 - streamline) * 0.85;
9
8
  let pts = rawInputPoints.map(Vec2d.From);
10
9
  let pointsRemovedFromNearEnd = 0;
11
10
  if (!simulatePressure) {
12
11
  let pt2 = pts[0];
13
12
  while (pt2) {
14
- if (pt2.z >= MIN_START_PRESSURE)
15
- break;
13
+ if (pt2.z >= MIN_START_PRESSURE) break;
16
14
  pts.shift();
17
15
  pt2 = pts[0];
18
16
  }
@@ -20,8 +18,7 @@ function getStrokePoints(rawInputPoints, options = {}) {
20
18
  if (!simulatePressure) {
21
19
  let pt2 = pts[pts.length - 1];
22
20
  while (pt2) {
23
- if (pt2.z >= MIN_END_PRESSURE)
24
- break;
21
+ if (pt2.z >= MIN_END_PRESSURE) break;
25
22
  pts.pop();
26
23
  pt2 = pts[pts.length - 1];
27
24
  }
@@ -40,8 +37,7 @@ function getStrokePoints(rawInputPoints, options = {}) {
40
37
  ];
41
38
  let pt = pts[1];
42
39
  while (pt) {
43
- if (Vec2d.Dist(pt, pts[0]) > size / 3)
44
- break;
40
+ if (Vec2d.Dist(pt, pts[0]) > size / 3) break;
45
41
  pts[0].z = Math.max(pts[0].z, pt.z);
46
42
  pts.splice(1, 1);
47
43
  pt = pts[1];
@@ -49,8 +45,7 @@ function getStrokePoints(rawInputPoints, options = {}) {
49
45
  const last = pts.pop();
50
46
  pt = pts[pts.length - 1];
51
47
  while (pt) {
52
- if (Vec2d.Dist(pt, last) > size / 3)
53
- break;
48
+ if (Vec2d.Dist(pt, last) > size / 3) break;
54
49
  pts.pop();
55
50
  pt = pts[pts.length - 1];
56
51
  pointsRemovedFromNearEnd++;
@@ -85,8 +80,7 @@ function getStrokePoints(rawInputPoints, options = {}) {
85
80
  }
86
81
  for (let i = 1, n = pts.length; i < n; i++) {
87
82
  point = !t || options.last && i === n - 1 ? pts[i].clone() : pts[i].clone().lrp(prev.point, 1 - t);
88
- if (prev.point.equals(point))
89
- continue;
83
+ if (prev.point.equals(point)) continue;
90
84
  distance = Vec2d.Dist(point, prev.point);
91
85
  totalLength += distance;
92
86
  if (i < 4 && totalLength < size) {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/shapes/shared/freehand/getStrokePoints.ts"],
4
4
  "sourcesContent": ["import { Vec2d, VecLike } from '@bigbluebutton/editor'\nimport type { StrokeOptions, StrokePoint } from './types'\n\nconst MIN_START_PRESSURE = 0.025\nconst MIN_END_PRESSURE = 0.01\n\n/**\n * ## getStrokePoints\n *\n * Get an array of points as objects with an adjusted point, pressure, vector, distance, and\n * runningLength.\n *\n * @param points - An array of points (as `[x, y, pressure]` or `{x, y, pressure}`). Pressure is\n * optional in both cases.\n * @param options - An object with options.\n * @public\n */\nexport function getStrokePoints(\n\trawInputPoints: VecLike[],\n\toptions: StrokeOptions = {}\n): StrokePoint[] {\n\tconst { streamline = 0.5, size = 16, simulatePressure = false } = options\n\n\t// If we don't have any points, return an empty array.\n\tif (rawInputPoints.length === 0) return []\n\n\t// Find the interpolation level between points.\n\tconst t = 0.15 + (1 - streamline) * 0.85\n\n\t// Whatever the input is, make sure that the points are in number[][].\n\tlet pts = rawInputPoints.map(Vec2d.From)\n\n\tlet pointsRemovedFromNearEnd = 0\n\n\tif (!simulatePressure) {\n\t\t// Strip low pressure points from the start of the array.\n\t\tlet pt = pts[0]\n\t\twhile (pt) {\n\t\t\tif (pt.z >= MIN_START_PRESSURE) break\n\t\t\tpts.shift()\n\t\t\tpt = pts[0]\n\t\t}\n\t}\n\n\tif (!simulatePressure) {\n\t\t// Strip low pressure points from the end of the array.\n\t\tlet pt = pts[pts.length - 1]\n\t\twhile (pt) {\n\t\t\tif (pt.z >= MIN_END_PRESSURE) break\n\t\t\tpts.pop()\n\t\t\tpt = pts[pts.length - 1]\n\t\t}\n\t}\n\n\tif (pts.length === 0)\n\t\treturn [\n\t\t\t{\n\t\t\t\tpoint: Vec2d.From(rawInputPoints[0]),\n\t\t\t\tinput: Vec2d.From(rawInputPoints[0]),\n\t\t\t\tpressure: simulatePressure ? 0.5 : 0.15,\n\t\t\t\tvector: new Vec2d(1, 1),\n\t\t\t\tdistance: 0,\n\t\t\t\trunningLength: 0,\n\t\t\t\tradius: 1,\n\t\t\t},\n\t\t]\n\n\t// Strip points that are too close to the first point.\n\tlet pt = pts[1]\n\twhile (pt) {\n\t\tif (Vec2d.Dist(pt, pts[0]) > size / 3) break\n\t\tpts[0].z = Math.max(pts[0].z, pt.z) // Use maximum pressure\n\t\tpts.splice(1, 1)\n\t\tpt = pts[1]\n\t}\n\n\t// Strip points that are too close to the last point.\n\tconst last = pts.pop()!\n\tpt = pts[pts.length - 1]\n\twhile (pt) {\n\t\tif (Vec2d.Dist(pt, last) > size / 3) break\n\t\tpts.pop()\n\t\tpt = pts[pts.length - 1]\n\t\tpointsRemovedFromNearEnd++\n\t}\n\tpts.push(last)\n\n\tconst isComplete =\n\t\toptions.last ||\n\t\t!options.simulatePressure ||\n\t\t(pts.length > 1 && Vec2d.Dist(pts[pts.length - 1], pts[pts.length - 2]) < size) ||\n\t\tpointsRemovedFromNearEnd > 0\n\n\t// Add extra points between the two, to help avoid \"dash\" lines\n\t// for strokes with tapered start and ends. Don't mutate the\n\t// input array!\n\tif (pts.length === 2 && options.simulatePressure) {\n\t\tconst last = pts[1]\n\t\tpts = pts.slice(0, -1)\n\t\tfor (let i = 1; i < 5; i++) {\n\t\t\tconst next = Vec2d.Lrp(pts[0], last, i / 4)\n\t\t\tnext.z = ((pts[0].z + (last.z - pts[0].z)) * i) / 4\n\t\t\tpts.push(next)\n\t\t}\n\t}\n\n\t// The strokePoints array will hold the points for the stroke.\n\t// Start it out with the first point, which needs no adjustment.\n\tconst strokePoints: StrokePoint[] = [\n\t\t{\n\t\t\tpoint: pts[0],\n\t\t\tinput: pts[0],\n\t\t\tpressure: simulatePressure ? 0.5 : pts[0].z,\n\t\t\tvector: new Vec2d(1, 1),\n\t\t\tdistance: 0,\n\t\t\trunningLength: 0,\n\t\t\tradius: 1,\n\t\t},\n\t]\n\n\t// We use the totalLength to keep track of the total distance\n\tlet totalLength = 0\n\n\t// We're set this to the latest point, so we can use it to calculate\n\t// the distance and vector of the next point.\n\tlet prev = strokePoints[0]\n\n\t// Iterate through all of the points, creating StrokePoints.\n\tlet point: Vec2d, distance: number\n\n\tif (isComplete && streamline > 0) {\n\t\tpts.push(pts[pts.length - 1].clone())\n\t}\n\n\tfor (let i = 1, n = pts.length; i < n; i++) {\n\t\tpoint =\n\t\t\t!t || (options.last && i === n - 1) ? pts[i].clone() : pts[i].clone().lrp(prev.point, 1 - t)\n\n\t\t// If the new point is the same as the previous point, skip ahead.\n\t\tif (prev.point.equals(point)) continue\n\n\t\t// How far is the new point from the previous point?\n\t\tdistance = Vec2d.Dist(point, prev.point)\n\n\t\t// Add this distance to the total \"running length\" of the line.\n\t\ttotalLength += distance\n\n\t\t// At the start of the line, we wait until the new point is a\n\t\t// certain distance away from the original point, to avoid noise\n\n\t\tif (i < 4 && totalLength < size) {\n\t\t\tcontinue\n\t\t}\n\n\t\t// Create a new strokepoint (it will be the new \"previous\" one).\n\t\tprev = {\n\t\t\tinput: pts[i],\n\t\t\t// The adjusted point\n\t\t\tpoint,\n\t\t\t// The input pressure (or .5 if not specified)\n\t\t\tpressure: simulatePressure ? 0.5 : pts[i].z,\n\t\t\t// The vector from the current point to the previous point\n\t\t\tvector: Vec2d.Sub(prev.point, point).uni(),\n\t\t\t// The distance between the current point and the previous point\n\t\t\tdistance,\n\t\t\t// The total distance so far\n\t\t\trunningLength: totalLength,\n\t\t\t// The stroke point's radius\n\t\t\tradius: 1,\n\t\t}\n\n\t\t// Push it to the strokePoints array.\n\t\tstrokePoints.push(prev)\n\t}\n\n\t// Set the vector of the first point to be the same as the second point.\n\tif (strokePoints[1]?.vector) {\n\t\tstrokePoints[0].vector = strokePoints[1].vector.clone()\n\t}\n\n\tif (totalLength < 1) {\n\t\tconst maxPressureAmongPoints = Math.max(0.5, ...strokePoints.map((s) => s.pressure))\n\t\tstrokePoints.forEach((s) => (s.pressure = maxPressureAmongPoints))\n\t}\n\n\treturn strokePoints\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["pt", "last"]
7
7
  }
@@ -27,8 +27,7 @@ function setStrokePointRadii(strokePoints, options) {
27
27
  let p;
28
28
  for (let i = 0, n = strokePoints.length; i < n; i++) {
29
29
  strokePoint = strokePoints[i];
30
- if (strokePoint.runningLength > size * 5)
31
- break;
30
+ if (strokePoint.runningLength > size * 5) break;
32
31
  const sp = min(1, strokePoint.distance / size);
33
32
  if (simulatePressure) {
34
33
  const rp = min(1, 1 - sp);
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/shapes/shared/freehand/setStrokePointRadii.ts"],
4
4
  "sourcesContent": ["import { EASINGS } from '@bigbluebutton/editor'\nimport { StrokeOptions, StrokePoint } from './types'\n\nconst { min } = Math\n\n// This is the rate of change for simulated pressure. It could be an option.\nconst RATE_OF_PRESSURE_CHANGE = 0.275\n\n/** @public */\nexport function setStrokePointRadii(strokePoints: StrokePoint[], options: StrokeOptions) {\n\tconst {\n\t\tsize = 16,\n\t\tthinning = 0.5,\n\t\tsimulatePressure = true,\n\t\teasing = (t) => t,\n\t\tstart = {},\n\t\tend = {},\n\t} = options\n\n\tconst { easing: taperStartEase = EASINGS.easeOutQuad } = start\n\tconst { easing: taperEndEase = EASINGS.easeOutCubic } = end\n\n\tconst totalLength = strokePoints[strokePoints.length - 1].runningLength\n\n\tlet firstRadius: number | undefined\n\tlet prevPressure = strokePoints[0].pressure\n\tlet strokePoint: StrokePoint\n\n\tif (!simulatePressure && totalLength < size) {\n\t\tconst max = strokePoints.reduce((max, curr) => Math.max(max, curr.pressure), 0.5)\n\t\tstrokePoints.forEach((sp) => {\n\t\t\tsp.pressure = max\n\t\t\tsp.radius = size * easing(0.5 - thinning * (0.5 - sp.pressure))\n\t\t})\n\t\treturn strokePoints\n\t} else {\n\t\t// Calculate initial pressure based on the average of the first\n\t\t// n number of points. This prevents \"dots\" at the start of the\n\t\t// line. Drawn lines almost always start slow!\n\t\tlet p: number\n\t\tfor (let i = 0, n = strokePoints.length; i < n; i++) {\n\t\t\tstrokePoint = strokePoints[i]\n\t\t\tif (strokePoint.runningLength > size * 5) break\n\t\t\tconst sp = min(1, strokePoint.distance / size)\n\t\t\tif (simulatePressure) {\n\t\t\t\tconst rp = min(1, 1 - sp)\n\t\t\t\tp = min(1, prevPressure + (rp - prevPressure) * (sp * RATE_OF_PRESSURE_CHANGE))\n\t\t\t} else {\n\t\t\t\tp = min(1, prevPressure + (strokePoint.pressure - prevPressure) * 0.5)\n\t\t\t}\n\t\t\tprevPressure = prevPressure + (p - prevPressure) * 0.5\n\t\t}\n\n\t\t// Now calculate pressure and radius for each point\n\t\tfor (let i = 0; i < strokePoints.length; i++) {\n\t\t\tstrokePoint = strokePoints[i]\n\t\t\tif (thinning) {\n\t\t\t\tlet { pressure } = strokePoint\n\t\t\t\tconst sp = min(1, strokePoint.distance / size)\n\t\t\t\tif (simulatePressure) {\n\t\t\t\t\t// If we're simulating pressure, then do so based on the distance\n\t\t\t\t\t// between the current point and the previous point, and the size\n\t\t\t\t\t// of the stroke.\n\t\t\t\t\tconst rp = min(1, 1 - sp)\n\t\t\t\t\tpressure = min(1, prevPressure + (rp - prevPressure) * (sp * RATE_OF_PRESSURE_CHANGE))\n\t\t\t\t} else {\n\t\t\t\t\t// Otherwise, use the input pressure slightly smoothed based on the\n\t\t\t\t\t// distance between the current point and the previous point.\n\t\t\t\t\tpressure = min(\n\t\t\t\t\t\t1,\n\t\t\t\t\t\tprevPressure + (pressure - prevPressure) * (sp * RATE_OF_PRESSURE_CHANGE)\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tstrokePoint.radius = size * easing(0.5 - thinning * (0.5 - pressure))\n\n\t\t\t\tprevPressure = pressure\n\t\t\t} else {\n\t\t\t\tstrokePoint.radius = size / 2\n\t\t\t}\n\n\t\t\tif (firstRadius === undefined) {\n\t\t\t\tfirstRadius = strokePoint.radius\n\t\t\t}\n\t\t}\n\t}\n\n\tconst taperStart =\n\t\tstart.taper === false\n\t\t\t? 0\n\t\t\t: start.taper === true\n\t\t\t? Math.max(size, totalLength)\n\t\t\t: (start.taper as number)\n\n\tconst taperEnd =\n\t\tend.taper === false\n\t\t\t? 0\n\t\t\t: end.taper === true\n\t\t\t? Math.max(size, totalLength)\n\t\t\t: (end.taper as number)\n\n\tif (taperStart || taperEnd) {\n\t\tfor (let i = 0; i < strokePoints.length; i++) {\n\t\t\tstrokePoint = strokePoints[i]\n\t\t\t/*\n\t\t\t\tApply tapering\n\n\t\t\t\tIf the current length is within the taper distance at either the\n\t\t\t\tstart or the end, calculate the taper strengths. Apply the smaller \n\t\t\t\tof the two taper strengths to the radius.\n\t\t\t*/\n\n\t\t\tconst { runningLength } = strokePoint\n\n\t\t\tconst ts = runningLength < taperStart ? taperStartEase(runningLength / taperStart) : 1\n\n\t\t\tconst te =\n\t\t\t\ttotalLength - runningLength < taperEnd\n\t\t\t\t\t? taperEndEase((totalLength - runningLength) / taperEnd)\n\t\t\t\t\t: 1\n\n\t\t\tstrokePoint.radius = Math.max(0.01, strokePoint.radius * Math.min(ts, te))\n\t\t}\n\t}\n\n\treturn strokePoints\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["max"]
7
7
  }
@@ -26,8 +26,7 @@ function svgInk(rawInputPoints, options = {}) {
26
26
  return svg;
27
27
  }
28
28
  function partitionAtElbows(points) {
29
- if (points.length <= 2)
30
- return [points];
29
+ if (points.length <= 2) return [points];
31
30
  const result = [];
32
31
  let currentPartition = [points[0]];
33
32
  for (let i = 1; i < points.length - 1; i++) {
@@ -107,8 +106,7 @@ function circlePath(cx, cy, r) {
107
106
  return "M " + cx + " " + cy + " m -" + r + ", 0 a " + r + "," + r + " 0 1,1 " + r * 2 + ",0 a " + r + "," + r + " 0 1,1 -" + r * 2 + ",0";
108
107
  }
109
108
  function renderPartition(strokePoints, options = {}) {
110
- if (strokePoints.length === 0)
111
- return "";
109
+ if (strokePoints.length === 0) return "";
112
110
  if (strokePoints.length === 1) {
113
111
  return circlePath(strokePoints[0].point.x, strokePoints[0].point.y, strokePoints[0].radius);
114
112
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/shapes/shared/freehand/svgInk.ts"],
4
4
  "sourcesContent": ["import {\n\tVec2d,\n\tVecLike,\n\tassert,\n\taverage,\n\tprecise,\n\tshortAngleDist,\n\ttoDomPrecision,\n} from '@bigbluebutton/editor'\nimport { getStrokeOutlineTracks } from './getStrokeOutlinePoints'\nimport { getStrokePoints } from './getStrokePoints'\nimport { setStrokePointRadii } from './setStrokePointRadii'\nimport { StrokeOptions, StrokePoint } from './types'\n\nexport function svgInk(rawInputPoints: VecLike[], options: StrokeOptions = {}) {\n\tconst { start = {}, end = {} } = options\n\tconst { cap: capStart = true } = start\n\tconst { cap: capEnd = true } = end\n\tassert(!start.taper && !end.taper, 'cap taper not supported here')\n\tassert(!start.easing && !end.easing, 'cap easing not supported here')\n\tassert(capStart && capEnd, 'cap must be true')\n\n\tconst points = getStrokePoints(rawInputPoints, options)\n\tsetStrokePointRadii(points, options)\n\tconst partitions = partitionAtElbows(points)\n\tlet svg = ''\n\tfor (const partition of partitions) {\n\t\tsvg += renderPartition(partition, options)\n\t}\n\n\treturn svg\n}\n\nfunction partitionAtElbows(points: StrokePoint[]): StrokePoint[][] {\n\tif (points.length <= 2) return [points]\n\n\tconst result: StrokePoint[][] = []\n\tlet currentPartition: StrokePoint[] = [points[0]]\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst prevPoint = points[i - 1]\n\t\tconst thisPoint = points[i]\n\t\tconst nextPoint = points[i + 1]\n\t\tconst prevAngle = Vec2d.Angle(prevPoint.point, thisPoint.point)\n\t\tconst nextAngle = Vec2d.Angle(thisPoint.point, nextPoint.point)\n\t\t// acuteness is a normalized representation of how acute the angle is.\n\t\t// 1 is an infinitely thin wedge\n\t\t// 0 is a straight line\n\t\tconst acuteness = Math.abs(shortAngleDist(prevAngle, nextAngle)) / Math.PI\n\t\tif (acuteness > 0.8) {\n\t\t\t// always treat such acute angles as elbows\n\t\t\t// and use the extended .input point as the elbow point for swooshiness in fast zaggy lines\n\t\t\tconst elbowPoint = {\n\t\t\t\t...thisPoint,\n\t\t\t\tpoint: thisPoint.input,\n\t\t\t}\n\t\t\tcurrentPartition.push(elbowPoint)\n\t\t\tresult.push(cleanUpPartition(currentPartition))\n\t\t\tcurrentPartition = [elbowPoint]\n\t\t\tcontinue\n\t\t}\n\t\tcurrentPartition.push(thisPoint)\n\t\tif (acuteness < 0.25) {\n\t\t\t// this is not an elbow, bail out\n\t\t\tcontinue\n\t\t}\n\t\t// so now we have a reasonably acute angle but it might not be an elbow if it's far\n\t\t// away from it's neighbors\n\t\tconst avgRadius = (prevPoint.radius + thisPoint.radius + nextPoint.radius) / 3\n\t\tconst incomingNormalizedDist = Vec2d.Dist(prevPoint.point, thisPoint.point) / avgRadius\n\t\tconst outgoingNormalizedDist = Vec2d.Dist(thisPoint.point, nextPoint.point) / avgRadius\n\t\t// angular dist is a normalized representation of how far away the point is from it's neighbors\n\t\t// (normalized by the radius)\n\t\tconst angularDist = incomingNormalizedDist + outgoingNormalizedDist\n\t\tif (angularDist < 1.5) {\n\t\t\t// if this point is kinda close to its neighbors and it has a reasonably\n\t\t\t// acute angle, it's probably a hard elbow\n\t\t\tcurrentPartition.push(thisPoint)\n\t\t\tresult.push(cleanUpPartition(currentPartition))\n\t\t\tcurrentPartition = [thisPoint]\n\t\t\tcontinue\n\t\t}\n\t}\n\tcurrentPartition.push(points[points.length - 1])\n\tresult.push(cleanUpPartition(currentPartition))\n\n\treturn result\n}\n\nfunction cleanUpPartition(partition: StrokePoint[]) {\n\t// clean up start of partition (remove points that are too close to the start)\n\tconst startPoint = partition[0]\n\twhile (partition.length > 2) {\n\t\tconst nextPoint = partition[1]\n\t\tconst dist = Vec2d.Dist(startPoint.point, nextPoint.point)\n\t\tconst avgRadius = (startPoint.radius + nextPoint.radius) / 2\n\t\tif (dist < avgRadius * 0.5) {\n\t\t\tpartition.splice(1, 1)\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\t// clean up end of partition in the same fashion\n\tconst endPoint = partition[partition.length - 1]\n\twhile (partition.length > 2) {\n\t\tconst prevPoint = partition[partition.length - 2]\n\t\tconst dist = Vec2d.Dist(endPoint.point, prevPoint.point)\n\t\tconst avgRadius = (endPoint.radius + prevPoint.radius) / 2\n\t\tif (dist < avgRadius * 0.5) {\n\t\t\tpartition.splice(partition.length - 2, 1)\n\t\t} else {\n\t\t\tbreak\n\t\t}\n\t}\n\t// now readjust the cap point vectors to point to their nearest neighbors\n\tif (partition.length > 1) {\n\t\tpartition[0] = {\n\t\t\t...partition[0],\n\t\t\tvector: Vec2d.FromAngle(Vec2d.Angle(partition[1].point, partition[0].point)),\n\t\t}\n\t\tpartition[partition.length - 1] = {\n\t\t\t...partition[partition.length - 1],\n\t\t\tvector: Vec2d.FromAngle(\n\t\t\t\tVec2d.Angle(partition[partition.length - 1].point, partition[partition.length - 2].point)\n\t\t\t),\n\t\t}\n\t}\n\treturn partition\n}\n\nfunction circlePath(cx: number, cy: number, r: number) {\n\treturn (\n\t\t'M ' +\n\t\tcx +\n\t\t' ' +\n\t\tcy +\n\t\t' m -' +\n\t\tr +\n\t\t', 0 a ' +\n\t\tr +\n\t\t',' +\n\t\tr +\n\t\t' 0 1,1 ' +\n\t\tr * 2 +\n\t\t',0 a ' +\n\t\tr +\n\t\t',' +\n\t\tr +\n\t\t' 0 1,1 -' +\n\t\tr * 2 +\n\t\t',0'\n\t)\n}\n\nexport function renderPartition(strokePoints: StrokePoint[], options: StrokeOptions = {}): string {\n\tif (strokePoints.length === 0) return ''\n\tif (strokePoints.length === 1) {\n\t\treturn circlePath(strokePoints[0].point.x, strokePoints[0].point.y, strokePoints[0].radius)\n\t}\n\n\tconst { left, right } = getStrokeOutlineTracks(strokePoints, options)\n\tright.reverse()\n\tlet svg = `M${precise(left[0])}T`\n\n\t// draw left track\n\tfor (let i = 1; i < left.length; i++) {\n\t\tsvg += average(left[i - 1], left[i])\n\t}\n\t// draw end cap arc\n\t{\n\t\tconst point = strokePoints[strokePoints.length - 1]\n\t\tconst radius = point.radius\n\t\tconst direction = point.vector.clone().per().neg()\n\t\tconst arcStart = Vec2d.Add(point.point, Vec2d.Mul(direction, radius))\n\t\tconst arcEnd = Vec2d.Add(point.point, Vec2d.Mul(direction, -radius))\n\t\tsvg += `${precise(arcStart)}A${toDomPrecision(radius)},${toDomPrecision(\n\t\t\tradius\n\t\t)} 0 0 1 ${precise(arcEnd)}T`\n\t}\n\t// draw right track\n\tfor (let i = 1; i < right.length; i++) {\n\t\tsvg += average(right[i - 1], right[i])\n\t}\n\t// draw start cap arc\n\t{\n\t\tconst point = strokePoints[0]\n\t\tconst radius = point.radius\n\t\tconst direction = point.vector.clone().per()\n\t\tconst arcStart = Vec2d.Add(point.point, Vec2d.Mul(direction, radius))\n\t\tconst arcEnd = Vec2d.Add(point.point, Vec2d.Mul(direction, -radius))\n\t\tsvg += `${precise(arcStart)}A${toDomPrecision(radius)},${toDomPrecision(\n\t\t\tradius\n\t\t)} 0 0 1 ${precise(arcEnd)}Z`\n\t}\n\treturn svg\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -24,8 +24,7 @@ function useEditableText(id, type, text) {
24
24
  rSkipSelectOnFocus.current = false;
25
25
  requestAnimationFrame(() => {
26
26
  const elm = rInput.current;
27
- if (!elm)
28
- return;
27
+ if (!elm) return;
29
28
  const shape = editor.getShape(id);
30
29
  if (shape) {
31
30
  elm.value = shape.props.text;
@@ -65,10 +64,8 @@ function useEditableText(id, type, text) {
65
64
  }, [editor, id]);
66
65
  const handleKeyDown = useCallback(
67
66
  (e) => {
68
- if (!isEditing)
69
- return;
70
- if (e.ctrlKey || e.metaKey)
71
- stopEventPropagation(e);
67
+ if (!isEditing) return;
68
+ if (e.ctrlKey || e.metaKey) stopEventPropagation(e);
72
69
  switch (e.key) {
73
70
  case "Enter": {
74
71
  if (e.ctrlKey || e.metaKey) {
@@ -91,8 +88,7 @@ function useEditableText(id, type, text) {
91
88
  );
92
89
  const handleChange = useCallback(
93
90
  (e) => {
94
- if (!isEditing)
95
- return;
91
+ if (!isEditing) return;
96
92
  let text2 = TextHelpers.normalizeText(e.currentTarget.value);
97
93
  const untabbedText = text2.replace(/\t/g, INDENT);
98
94
  if (untabbedText !== text2) {
@@ -110,8 +106,7 @@ function useEditableText(id, type, text) {
110
106
  );
111
107
  const isEmpty = text.trim().length === 0;
112
108
  useEffect(() => {
113
- if (!isEditing)
114
- return;
109
+ if (!isEditing) return;
115
110
  const elm = rInput.current;
116
111
  if (elm) {
117
112
  let updateSelection2 = function() {
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/shapes/shared/useEditableText.ts"],
4
4
  "sourcesContent": ["/* eslint-disable no-inner-declarations */\n\nimport {\n\tTLShape,\n\tTLUnknownShape,\n\tgetPointerInfo,\n\tpreventDefault,\n\tstopEventPropagation,\n\tuseEditor,\n\tuseValue,\n} from '@bigbluebutton/editor'\nimport React, { useCallback, useEffect, useRef } from 'react'\nimport { INDENT, TextHelpers } from './TextHelpers'\n\nexport function useEditableText<T extends Extract<TLShape, { props: { text: string } }>>(\n\tid: T['id'],\n\ttype: T['type'],\n\ttext: string\n) {\n\tconst editor = useEditor()\n\n\tconst rInput = useRef<HTMLTextAreaElement>(null)\n\tconst rSkipSelectOnFocus = useRef(false)\n\tconst rSelectionRanges = useRef<Range[] | null>()\n\n\tconst isEditing = useValue('isEditing', () => editor.getEditingShapeId() === id, [editor, id])\n\n\t// If the shape is editing but the input element not focused, focus the element\n\tuseEffect(() => {\n\t\tconst elm = rInput.current\n\t\tif (elm && isEditing && document.activeElement !== elm) {\n\t\t\telm.focus()\n\t\t}\n\t}, [isEditing])\n\n\t// When the label receives focus, set the value to the most recent text value and select all of the text\n\tconst handleFocus = useCallback(() => {\n\t\t// Store and turn off the skipSelectOnFocus flag\n\t\tconst skipSelect = rSkipSelectOnFocus.current\n\t\trSkipSelectOnFocus.current = false\n\n\t\t// On the next frame, if we're not skipping select AND we have text in the element, then focus the text\n\t\trequestAnimationFrame(() => {\n\t\t\tconst elm = rInput.current\n\t\t\tif (!elm) return\n\n\t\t\tconst shape = editor.getShape<TLShape & { props: { text: string } }>(id)\n\n\t\t\tif (shape) {\n\t\t\t\telm.value = shape.props.text\n\t\t\t\tif (elm.value.length && !skipSelect) {\n\t\t\t\t\telm.select()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}, [editor, id])\n\n\t// When the label blurs, deselect all of the text and complete.\n\t// This makes it so that the canvas does not have to be focused\n\t// in order to exit the editing state and complete the editing state\n\tconst handleBlur = useCallback(() => {\n\t\tconst ranges = rSelectionRanges.current\n\n\t\trequestAnimationFrame(() => {\n\t\t\tconst elm = rInput.current\n\t\t\tconst editingShapeId = editor.getEditingShapeId()\n\t\t\t// Did we move to a different shape?\n\t\t\tif (elm && editingShapeId) {\n\t\t\t\t// important! these ^v are two different things\n\t\t\t\t// is that shape OUR shape?\n\t\t\t\tif (editingShapeId === id) {\n\t\t\t\t\tif (ranges) {\n\t\t\t\t\t\tif (!ranges.length) {\n\t\t\t\t\t\t\t// If we don't have any ranges, restore selection\n\t\t\t\t\t\t\t// and select all of the text\n\t\t\t\t\t\t\telm.focus()\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Otherwise, skip the select-all-on-focus behavior\n\t\t\t\t\t\t\t// and restore the selection\n\t\t\t\t\t\t\trSkipSelectOnFocus.current = true\n\t\t\t\t\t\t\telm.focus()\n\t\t\t\t\t\t\tconst selection = window.getSelection()\n\t\t\t\t\t\t\tif (selection) {\n\t\t\t\t\t\t\t\tranges.forEach((range) => selection.addRange(range))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\telm.focus()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twindow.getSelection()?.removeAllRanges()\n\t\t\t\teditor.complete()\n\t\t\t}\n\t\t})\n\t}, [editor, id])\n\n\t// When the user presses ctrl / meta enter, complete the editing state.\n\t// When the user presses tab, indent or unindent the text.\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (!isEditing) return\n\n\t\t\tif (e.ctrlKey || e.metaKey) stopEventPropagation(e)\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase 'Enter': {\n\t\t\t\t\tif (e.ctrlKey || e.metaKey) {\n\t\t\t\t\t\teditor.complete()\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase 'Tab': {\n\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tTextHelpers.unindent(e.currentTarget)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tTextHelpers.indent(e.currentTarget)\n\t\t\t\t\t}\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor, isEditing]\n\t)\n\n\t// When the text changes, update the text value.\n\tconst handleChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLTextAreaElement>) => {\n\t\t\tif (!isEditing) return\n\n\t\t\tlet text = TextHelpers.normalizeText(e.currentTarget.value)\n\n\t\t\t// ------- Bug fix ------------\n\t\t\t// Replace tabs with spaces when pasting\n\t\t\tconst untabbedText = text.replace(/\\t/g, INDENT)\n\t\t\tif (untabbedText !== text) {\n\t\t\t\tconst selectionStart = e.currentTarget.selectionStart\n\t\t\t\te.currentTarget.value = untabbedText\n\t\t\t\te.currentTarget.selectionStart = selectionStart + (untabbedText.length - text.length)\n\t\t\t\te.currentTarget.selectionEnd = selectionStart + (untabbedText.length - text.length)\n\t\t\t\ttext = untabbedText\n\t\t\t}\n\t\t\t// ----------------------------\n\n\t\t\teditor.updateShapes<TLUnknownShape & { props: { text: string } }>([\n\t\t\t\t{ id, type, props: { text } },\n\t\t\t])\n\t\t},\n\t\t[editor, id, type, isEditing]\n\t)\n\n\tconst isEmpty = text.trim().length === 0\n\n\tuseEffect(() => {\n\t\tif (!isEditing) return\n\n\t\tconst elm = rInput.current\n\t\tif (elm) {\n\t\t\tfunction updateSelection() {\n\t\t\t\tconst selection = window.getSelection?.()\n\t\t\t\tif (selection && selection.type !== 'None') {\n\t\t\t\t\tconst ranges: Range[] = []\n\n\t\t\t\t\tif (selection) {\n\t\t\t\t\t\tfor (let i = 0; i < selection.rangeCount; i++) {\n\t\t\t\t\t\t\tranges.push(selection.getRangeAt?.(i))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trSelectionRanges.current = ranges\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdocument.addEventListener('selectionchange', updateSelection)\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener('selectionchange', updateSelection)\n\t\t\t}\n\t\t}\n\t}, [isEditing])\n\n\tconst handleInputPointerDown = useCallback(\n\t\t(e: React.PointerEvent) => {\n\t\t\teditor.dispatch({\n\t\t\t\t...getPointerInfo(e),\n\t\t\t\ttype: 'pointer',\n\t\t\t\tname: 'pointer_down',\n\t\t\t\ttarget: 'shape',\n\t\t\t\tshape: editor.getShape(id)!,\n\t\t\t})\n\n\t\t\tstopEventPropagation(e) // we need to prevent blurring the input\n\t\t},\n\t\t[editor, id]\n\t)\n\n\tconst handleDoubleClick = stopEventPropagation\n\n\treturn {\n\t\trInput,\n\t\tisEditing,\n\t\thandleFocus,\n\t\thandleBlur,\n\t\thandleKeyDown,\n\t\thandleChange,\n\t\thandleInputPointerDown,\n\t\thandleDoubleClick,\n\t\tisEmpty,\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["text", "updateSelection"]
7
7
  }
@@ -123,8 +123,7 @@ class TextShapeUtil extends ShapeUtil {
123
123
  indicator(shape) {
124
124
  const bounds = this.editor.getShapeGeometry(shape).bounds;
125
125
  const editor = useEditor();
126
- if (shape.props.autoSize && editor.getEditingShapeId() === shape.id)
127
- return null;
126
+ if (shape.props.autoSize && editor.getEditingShapeId() === shape.id) return null;
128
127
  return /* @__PURE__ */ jsx("rect", { width: toDomPrecision(bounds.width), height: toDomPrecision(bounds.height) });
129
128
  }
130
129
  toSvg(shape, ctx) {
@@ -205,10 +204,8 @@ class TextShapeUtil extends ShapeUtil {
205
204
  }
206
205
  };
207
206
  onBeforeCreate = (shape) => {
208
- if (!shape.props.autoSize)
209
- return;
210
- if (shape.props.text.trim())
211
- return;
207
+ if (!shape.props.autoSize) return;
208
+ if (shape.props.text.trim()) return;
212
209
  const bounds = this.getMinDimensions(shape);
213
210
  return {
214
211
  ...shape,
@@ -240,12 +237,10 @@ class TextShapeUtil extends ShapeUtil {
240
237
  }
241
238
  };
242
239
  onBeforeUpdate = (prev, next) => {
243
- if (!next.props.autoSize)
244
- return;
240
+ if (!next.props.autoSize) return;
245
241
  const styleDidChange = prev.props.size !== next.props.size || prev.props.align !== next.props.align || prev.props.font !== next.props.font || prev.props.scale !== 1 && next.props.scale === 1;
246
242
  const textDidChange = prev.props.text !== next.props.text;
247
- if (!styleDidChange && !textDidChange)
248
- return;
243
+ if (!styleDidChange && !textDidChange) return;
249
244
  const boundsA = this.getMinDimensions(prev);
250
245
  const boundsB = getTextSize(this.editor, next.props);
251
246
  const wA = boundsA.width * prev.props.scale;
@@ -263,8 +258,7 @@ class TextShapeUtil extends ShapeUtil {
263
258
  break;
264
259
  }
265
260
  default: {
266
- if (textDidChange)
267
- break;
261
+ if (textDidChange) break;
268
262
  delta = new Vec2d(0, (hB - hA) / 2);
269
263
  break;
270
264
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/shapes/text/TextShapeUtil.tsx"],
4
4
  "sourcesContent": ["/* eslint-disable react-hooks/rules-of-hooks */\nimport {\n\tDefaultFontFamilies,\n\tEditor,\n\tHTMLContainer,\n\tRectangle2d,\n\tShapeUtil,\n\tSvgExportContext,\n\tTLOnEditEndHandler,\n\tTLOnResizeHandler,\n\tTLShapeUtilFlag,\n\tTLTextShape,\n\tVec2d,\n\tWeakMapCache,\n\tgetDefaultColorTheme,\n\tstopEventPropagation,\n\ttextShapeMigrations,\n\ttextShapeProps,\n\ttoDomPrecision,\n\tuseEditor,\n} from '@bigbluebutton/editor'\nimport { createTextSvgElementFromSpans } from '../shared/createTextSvgElementFromSpans'\nimport { FONT_FAMILIES, FONT_SIZES, TEXT_PROPS } from '../shared/default-shape-constants'\nimport { getFontDefForExport } from '../shared/defaultStyleDefs'\nimport { resizeScaled } from '../shared/resizeScaled'\nimport { useEditableText } from '../shared/useEditableText'\n\nconst sizeCache = new WeakMapCache<TLTextShape['props'], { height: number; width: number }>()\n\n/** @public */\nexport class TextShapeUtil extends ShapeUtil<TLTextShape> {\n\tstatic override type = 'text' as const\n\tstatic override props = textShapeProps\n\tstatic override migrations = textShapeMigrations\n\n\tgetDefaultProps(): TLTextShape['props'] {\n\t\treturn {\n\t\t\tcolor: 'black',\n\t\t\tsize: 'm',\n\t\t\tw: 8,\n\t\t\ttext: '',\n\t\t\tfont: 'draw',\n\t\t\talign: 'middle',\n\t\t\tautoSize: true,\n\t\t\tscale: 1,\n\t\t}\n\t}\n\n\tgetMinDimensions(shape: TLTextShape) {\n\t\treturn sizeCache.get(shape.props, (props) => getTextSize(this.editor, props))\n\t}\n\n\tgetGeometry(shape: TLTextShape) {\n\t\tconst { scale } = shape.props\n\t\tconst { width, height } = this.getMinDimensions(shape)!\n\t\treturn new Rectangle2d({\n\t\t\twidth: width * scale,\n\t\t\theight: height * scale,\n\t\t\tisFilled: true,\n\t\t})\n\t}\n\n\toverride canEdit = () => true\n\n\toverride isAspectRatioLocked: TLShapeUtilFlag<TLTextShape> = () => true\n\n\tcomponent(shape: TLTextShape) {\n\t\tconst {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tprops: { text, color },\n\t\t} = shape\n\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.getIsDarkMode() })\n\t\tconst { width, height } = this.getMinDimensions(shape)\n\n\t\tconst {\n\t\t\trInput,\n\t\t\tisEmpty,\n\t\t\tisEditing,\n\t\t\thandleFocus,\n\t\t\thandleChange,\n\t\t\thandleKeyDown,\n\t\t\thandleBlur,\n\t\t\thandleInputPointerDown,\n\t\t\thandleDoubleClick,\n\t\t} = useEditableText(id, type, text)\n\n\t\treturn (\n\t\t\t<HTMLContainer id={shape.id}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"tl-text-shape__wrapper tl-text-shadow\"\n\t\t\t\t\tdata-font={shape.props.font}\n\t\t\t\t\tdata-align={shape.props.align}\n\t\t\t\t\tdata-hastext={!isEmpty}\n\t\t\t\t\tdata-isediting={isEditing}\n\t\t\t\t\tdata-textwrap={true}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: FONT_SIZES[shape.props.size],\n\t\t\t\t\t\tlineHeight: FONT_SIZES[shape.props.size] * TEXT_PROPS.lineHeight + 'px',\n\t\t\t\t\t\ttransform: `scale(${shape.props.scale})`,\n\t\t\t\t\t\ttransformOrigin: 'top left',\n\t\t\t\t\t\twidth: Math.max(1, width),\n\t\t\t\t\t\theight: Math.max(FONT_SIZES[shape.props.size] * TEXT_PROPS.lineHeight, height),\n\t\t\t\t\t\tcolor: theme[color].solid,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"tl-text tl-text-content\" dir=\"ltr\">\n\t\t\t\t\t\t{text}\n\t\t\t\t\t</div>\n\t\t\t\t\t{isEditing ? (\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tref={rInput}\n\t\t\t\t\t\t\tclassName=\"tl-text tl-text-input\"\n\t\t\t\t\t\t\tname=\"text\"\n\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\tautoComplete=\"false\"\n\t\t\t\t\t\t\tautoCapitalize=\"false\"\n\t\t\t\t\t\t\tautoCorrect=\"false\"\n\t\t\t\t\t\t\tautoSave=\"false\"\n\t\t\t\t\t\t\tautoFocus={isEditing}\n\t\t\t\t\t\t\tplaceholder=\"\"\n\t\t\t\t\t\t\tspellCheck=\"true\"\n\t\t\t\t\t\t\twrap=\"off\"\n\t\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t\t\tdatatype=\"wysiwyg\"\n\t\t\t\t\t\t\tdefaultValue={text}\n\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\tonTouchEnd={stopEventPropagation}\n\t\t\t\t\t\t\tonContextMenu={stopEventPropagation}\n\t\t\t\t\t\t\tonPointerDown={handleInputPointerDown}\n\t\t\t\t\t\t\tonDoubleClick={handleDoubleClick}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</HTMLContainer>\n\t\t)\n\t}\n\n\tindicator(shape: TLTextShape) {\n\t\tconst bounds = this.editor.getShapeGeometry(shape).bounds\n\t\tconst editor = useEditor()\n\t\tif (shape.props.autoSize && editor.getEditingShapeId() === shape.id) return null\n\t\treturn <rect width={toDomPrecision(bounds.width)} height={toDomPrecision(bounds.height)} />\n\t}\n\n\toverride toSvg(shape: TLTextShape, ctx: SvgExportContext) {\n\t\tctx.addExportDef(getFontDefForExport(shape.props.font))\n\n\t\tconst theme = getDefaultColorTheme({ isDarkMode: this.editor.user.getIsDarkMode() })\n\t\tconst bounds = this.editor.getShapeGeometry(shape).bounds\n\t\tconst text = shape.props.text\n\n\t\tconst width = bounds.width / (shape.props.scale ?? 1)\n\t\tconst height = bounds.height / (shape.props.scale ?? 1)\n\n\t\tconst opts = {\n\t\t\tfontSize: FONT_SIZES[shape.props.size],\n\t\t\tfontFamily: DefaultFontFamilies[shape.props.font],\n\t\t\ttextAlign: shape.props.align,\n\t\t\tverticalTextAlign: 'middle' as const,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tpadding: 0, // no padding?\n\t\t\tlineHeight: TEXT_PROPS.lineHeight,\n\t\t\tfontStyle: 'normal',\n\t\t\tfontWeight: 'normal',\n\t\t\toverflow: 'wrap' as const,\n\t\t}\n\n\t\tconst color = theme[shape.props.color].solid\n\t\tconst groupEl = document.createElementNS('http://www.w3.org/2000/svg', 'g')\n\n\t\tconst textBgEl = createTextSvgElementFromSpans(\n\t\t\tthis.editor,\n\t\t\tthis.editor.textMeasure.measureTextSpans(text, opts),\n\t\t\t{\n\t\t\t\t...opts,\n\t\t\t\tstroke: theme.background,\n\t\t\t\tstrokeWidth: 2,\n\t\t\t\tfill: theme.background,\n\t\t\t\tpadding: 0,\n\t\t\t}\n\t\t)\n\n\t\tconst textElm = textBgEl.cloneNode(true) as SVGTextElement\n\t\ttextElm.setAttribute('fill', color)\n\t\ttextElm.setAttribute('stroke', 'none')\n\n\t\tgroupEl.append(textBgEl)\n\t\tgroupEl.append(textElm)\n\n\t\treturn groupEl\n\t}\n\n\toverride onResize: TLOnResizeHandler<TLTextShape> = (shape, info) => {\n\t\tconst { initialBounds, initialShape, scaleX, handle } = info\n\n\t\tif (info.mode === 'scale_shape' || (handle !== 'right' && handle !== 'left')) {\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\t...resizeScaled(shape, info),\n\t\t\t}\n\t\t} else {\n\t\t\tconst prevWidth = initialBounds.width\n\t\t\tlet nextWidth = prevWidth * scaleX\n\n\t\t\tconst offset = new Vec2d(0, 0)\n\n\t\t\tnextWidth = Math.max(1, Math.abs(nextWidth))\n\n\t\t\tif (handle === 'left') {\n\t\t\t\toffset.x = prevWidth - nextWidth\n\t\t\t\tif (scaleX < 0) {\n\t\t\t\t\toffset.x += nextWidth\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (scaleX < 0) {\n\t\t\t\t\toffset.x -= nextWidth\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst { x, y } = offset.rot(shape.rotation).add(initialShape)\n\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tprops: {\n\t\t\t\t\tw: nextWidth / initialShape.props.scale,\n\t\t\t\t\tautoSize: false,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onBeforeCreate = (shape: TLTextShape) => {\n\t\t// When a shape is created, center the text at the created point.\n\n\t\t// Only center if the shape is set to autosize.\n\t\tif (!shape.props.autoSize) return\n\n\t\t// Only center if the shape is empty when created.\n\t\tif (shape.props.text.trim()) return\n\n\t\tconst bounds = this.getMinDimensions(shape)\n\n\t\treturn {\n\t\t\t...shape,\n\t\t\tx: shape.x - bounds.width / 2,\n\t\t\ty: shape.y - bounds.height / 2,\n\t\t}\n\t}\n\n\toverride onEditEnd: TLOnEditEndHandler<TLTextShape> = (shape) => {\n\t\tconst {\n\t\t\tid,\n\t\t\ttype,\n\t\t\tprops: { text },\n\t\t} = shape\n\n\t\tconst trimmedText = shape.props.text.trimEnd()\n\n\t\tif (trimmedText.length === 0) {\n\t\t\tthis.editor.deleteShapes([shape.id])\n\t\t} else {\n\t\t\tif (trimmedText !== shape.props.text) {\n\t\t\t\tthis.editor.updateShapes([\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\ttext: text.trimEnd(),\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\toverride onBeforeUpdate = (prev: TLTextShape, next: TLTextShape) => {\n\t\tif (!next.props.autoSize) return\n\n\t\tconst styleDidChange =\n\t\t\tprev.props.size !== next.props.size ||\n\t\t\tprev.props.align !== next.props.align ||\n\t\t\tprev.props.font !== next.props.font ||\n\t\t\t(prev.props.scale !== 1 && next.props.scale === 1)\n\n\t\tconst textDidChange = prev.props.text !== next.props.text\n\n\t\t// Only update position if either changed\n\t\tif (!styleDidChange && !textDidChange) return\n\n\t\t// Might return a cached value for the bounds\n\t\tconst boundsA = this.getMinDimensions(prev)\n\n\t\t// Will always be a fresh call to getTextSize\n\t\tconst boundsB = getTextSize(this.editor, next.props)\n\n\t\tconst wA = boundsA.width * prev.props.scale\n\t\tconst hA = boundsA.height * prev.props.scale\n\t\tconst wB = boundsB.width * next.props.scale\n\t\tconst hB = boundsB.height * next.props.scale\n\n\t\tlet delta: Vec2d | undefined\n\n\t\tswitch (next.props.align) {\n\t\t\tcase 'middle': {\n\t\t\t\tdelta = new Vec2d((wB - wA) / 2, textDidChange ? 0 : (hB - hA) / 2)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'end': {\n\t\t\t\tdelta = new Vec2d(wB - wA, textDidChange ? 0 : (hB - hA) / 2)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tif (textDidChange) break\n\t\t\t\tdelta = new Vec2d(0, (hB - hA) / 2)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tif (delta) {\n\t\t\t// account for shape rotation when writing text:\n\t\t\tdelta.rot(next.rotation)\n\t\t\tconst { x, y } = next\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tx: x - delta.x,\n\t\t\t\ty: y - delta.y,\n\t\t\t\tprops: { ...next.props, w: wB },\n\t\t\t}\n\t\t} else {\n\t\t\treturn {\n\t\t\t\t...next,\n\t\t\t\tprops: { ...next.props, w: wB },\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onDoubleClickEdge = (shape: TLTextShape) => {\n\t\t// If the shape has a fixed width, set it to autoSize.\n\t\tif (!shape.props.autoSize) {\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tprops: {\n\t\t\t\t\tautoSize: true,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// If the shape is scaled, reset the scale to 1.\n\t\tif (shape.props.scale !== 1) {\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tprops: {\n\t\t\t\t\tscale: 1,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction getTextSize(editor: Editor, props: TLTextShape['props']) {\n\tconst { font, text, autoSize, size, w } = props\n\n\tconst minWidth = autoSize ? 16 : Math.max(16, w)\n\tconst fontSize = FONT_SIZES[size]\n\n\tconst cw = autoSize\n\t\t? null\n\t\t: // `measureText` floors the number so we need to do the same here to avoid issues.\n\t\t Math.floor(Math.max(minWidth, w))\n\n\tconst result = editor.textMeasure.measureText(text, {\n\t\t...TEXT_PROPS,\n\t\tfontFamily: FONT_FAMILIES[font],\n\t\tfontSize: fontSize,\n\t\tmaxWidth: cw,\n\t})\n\n\t// // If we're autosizing the measureText will essentially `Math.floor`\n\t// // the numbers so `19` rather than `19.3`, this means we must +1 to\n\t// // whatever we get to avoid wrapping.\n\tif (autoSize) {\n\t\tresult.w += 1\n\t}\n\n\treturn {\n\t\twidth: Math.max(minWidth, result.w),\n\t\theight: Math.max(fontSize, result.h),\n\t}\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "AA0FI,SAiBC,KAjBD;AAzFJ;AAAA,EACC;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,qCAAqC;AAC9C,SAAS,eAAe,YAAY,kBAAkB;AACtD,SAAS,2BAA2B;AACpC,SAAS,oBAAoB;AAC7B,SAAS,uBAAuB;AAEhC,MAAM,YAAY,IAAI,aAAsE;AAGrF,MAAM,sBAAsB,UAAuB;AAAA,EACzD,OAAgB,OAAO;AAAA,EACvB,OAAgB,QAAQ;AAAA,EACxB,OAAgB,aAAa;AAAA,EAE7B,kBAAwC;AACvC,WAAO;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,GAAG;AAAA,MACH,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,OAAO;AAAA,IACR;AAAA,EACD;AAAA,EAEA,iBAAiB,OAAoB;AACpC,WAAO,UAAU,IAAI,MAAM,OAAO,CAAC,UAAU,YAAY,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC7E;AAAA,EAEA,YAAY,OAAoB;AAC/B,UAAM,EAAE,MAAM,IAAI,MAAM;AACxB,UAAM,EAAE,OAAO,OAAO,IAAI,KAAK,iBAAiB,KAAK;AACrD,WAAO,IAAI,YAAY;AAAA,MACtB,OAAO,QAAQ;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,UAAU;AAAA,IACX,CAAC;AAAA,EACF;AAAA,EAES,UAAU,MAAM;AAAA,EAEhB,sBAAoD,MAAM;AAAA,EAEnE,UAAU,OAAoB;AAC7B,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,EAAE,MAAM,MAAM;AAAA,IACtB,IAAI;AAEJ,UAAM,QAAQ,qBAAqB,EAAE,YAAY,KAAK,OAAO,KAAK,cAAc,EAAE,CAAC;AACnF,UAAM,EAAE,OAAO,OAAO,IAAI,KAAK,iBAAiB,KAAK;AAErD,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,IAAI,gBAAgB,IAAI,MAAM,IAAI;AAElC,WACC,oBAAC,iBAAc,IAAI,MAAM,IACxB;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,aAAW,MAAM,MAAM;AAAA,QACvB,cAAY,MAAM,MAAM;AAAA,QACxB,gBAAc,CAAC;AAAA,QACf,kBAAgB;AAAA,QAChB,iBAAe;AAAA,QACf,OAAO;AAAA,UACN,UAAU,WAAW,MAAM,MAAM,IAAI;AAAA,UACrC,YAAY,WAAW,MAAM,MAAM,IAAI,IAAI,WAAW,aAAa;AAAA,UACnE,WAAW,SAAS,MAAM,MAAM,KAAK;AAAA,UACrC,iBAAiB;AAAA,UACjB,OAAO,KAAK,IAAI,GAAG,KAAK;AAAA,UACxB,QAAQ,KAAK,IAAI,WAAW,MAAM,MAAM,IAAI,IAAI,WAAW,YAAY,MAAM;AAAA,UAC7E,OAAO,MAAM,KAAK,EAAE;AAAA,QACrB;AAAA,QAEA;AAAA,8BAAC,SAAI,WAAU,2BAA0B,KAAI,OAC3C,gBACF;AAAA,UACC,YACA;AAAA,YAAC;AAAA;AAAA,cACA,KAAK;AAAA,cACL,WAAU;AAAA,cACV,MAAK;AAAA,cACL,UAAU;AAAA,cACV,cAAa;AAAA,cACb,gBAAe;AAAA,cACf,aAAY;AAAA,cACZ,UAAS;AAAA,cACT,WAAW;AAAA,cACX,aAAY;AAAA,cACZ,YAAW;AAAA,cACX,MAAK;AAAA,cACL,KAAI;AAAA,cACJ,UAAS;AAAA,cACT,cAAc;AAAA,cACd,SAAS;AAAA,cACT,UAAU;AAAA,cACV,WAAW;AAAA,cACX,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,eAAe;AAAA,cACf,eAAe;AAAA,cACf,eAAe;AAAA;AAAA,UAChB,IACG;AAAA;AAAA;AAAA,IACL,GACD;AAAA,EAEF;AAAA,EAEA,UAAU,OAAoB;AAC7B,UAAM,SAAS,KAAK,OAAO,iBAAiB,KAAK,EAAE;AACnD,UAAM,SAAS,UAAU;AACzB,QAAI,MAAM,MAAM,YAAY,OAAO,kBAAkB,MAAM,MAAM,GAAI,QAAO;AAC5E,WAAO,oBAAC,UAAK,OAAO,eAAe,OAAO,KAAK,GAAG,QAAQ,eAAe,OAAO,MAAM,GAAG;AAAA,EAC1F;AAAA,EAES,MAAM,OAAoB,KAAuB;AACzD,QAAI,aAAa,oBAAoB,MAAM,MAAM,IAAI,CAAC;AAEtD,UAAM,QAAQ,qBAAqB,EAAE,YAAY,KAAK,OAAO,KAAK,cAAc,EAAE,CAAC;AACnF,UAAM,SAAS,KAAK,OAAO,iBAAiB,KAAK,EAAE;AACnD,UAAM,OAAO,MAAM,MAAM;AAEzB,UAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,SAAS;AACnD,UAAM,SAAS,OAAO,UAAU,MAAM,MAAM,SAAS;AAErD,UAAM,OAAO;AAAA,MACZ,UAAU,WAAW,MAAM,MAAM,IAAI;AAAA,MACrC,YAAY,oBAAoB,MAAM,MAAM,IAAI;AAAA,MAChD,WAAW,MAAM,MAAM;AAAA,MACvB,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,SAAS;AAAA;AAAA,MACT,YAAY,WAAW;AAAA,MACvB,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,UAAU;AAAA,IACX;AAEA,UAAM,QAAQ,MAAM,MAAM,MAAM,KAAK,EAAE;AACvC,UAAM,UAAU,SAAS,gBAAgB,8BAA8B,GAAG;AAE1E,UAAM,WAAW;AAAA,MAChB,KAAK;AAAA,MACL,KAAK,OAAO,YAAY,iBAAiB,MAAM,IAAI;AAAA,MACnD;AAAA,QACC,GAAG;AAAA,QACH,QAAQ,MAAM;AAAA,QACd,aAAa;AAAA,QACb,MAAM,MAAM;AAAA,QACZ,SAAS;AAAA,MACV;AAAA,IACD;AAEA,UAAM,UAAU,SAAS,UAAU,IAAI;AACvC,YAAQ,aAAa,QAAQ,KAAK;AAClC,YAAQ,aAAa,UAAU,MAAM;AAErC,YAAQ,OAAO,QAAQ;AACvB,YAAQ,OAAO,OAAO;AAEtB,WAAO;AAAA,EACR;AAAA,EAES,WAA2C,CAAC,OAAO,SAAS;AACpE,UAAM,EAAE,eAAe,cAAc,QAAQ,OAAO,IAAI;AAExD,QAAI,KAAK,SAAS,iBAAkB,WAAW,WAAW,WAAW,QAAS;AAC7E,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,GAAG,aAAa,OAAO,IAAI;AAAA,MAC5B;AAAA,IACD,OAAO;AACN,YAAM,YAAY,cAAc;AAChC,UAAI,YAAY,YAAY;AAE5B,YAAM,SAAS,IAAI,MAAM,GAAG,CAAC;AAE7B,kBAAY,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,CAAC;AAE3C,UAAI,WAAW,QAAQ;AACtB,eAAO,IAAI,YAAY;AACvB,YAAI,SAAS,GAAG;AACf,iBAAO,KAAK;AAAA,QACb;AAAA,MACD,OAAO;AACN,YAAI,SAAS,GAAG;AACf,iBAAO,KAAK;AAAA,QACb;AAAA,MACD;AAEA,YAAM,EAAE,GAAG,EAAE,IAAI,OAAO,IAAI,MAAM,QAAQ,EAAE,IAAI,YAAY;AAE5D,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACN,GAAG,YAAY,aAAa,MAAM;AAAA,UAClC,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAAA,EAES,iBAAiB,CAAC,UAAuB;AAIjD,QAAI,CAAC,MAAM,MAAM,SAAU;AAG3B,QAAI,MAAM,MAAM,KAAK,KAAK,EAAG;AAE7B,UAAM,SAAS,KAAK,iBAAiB,KAAK;AAE1C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,GAAG,MAAM,IAAI,OAAO,QAAQ;AAAA,MAC5B,GAAG,MAAM,IAAI,OAAO,SAAS;AAAA,IAC9B;AAAA,EACD;AAAA,EAES,YAA6C,CAAC,UAAU;AAChE,UAAM;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,EAAE,KAAK;AAAA,IACf,IAAI;AAEJ,UAAM,cAAc,MAAM,MAAM,KAAK,QAAQ;AAE7C,QAAI,YAAY,WAAW,GAAG;AAC7B,WAAK,OAAO,aAAa,CAAC,MAAM,EAAE,CAAC;AAAA,IACpC,OAAO;AACN,UAAI,gBAAgB,MAAM,MAAM,MAAM;AACrC,aAAK,OAAO,aAAa;AAAA,UACxB;AAAA,YACC;AAAA,YACA;AAAA,YACA,OAAO;AAAA,cACN,MAAM,KAAK,QAAQ;AAAA,YACpB;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAES,iBAAiB,CAAC,MAAmB,SAAsB;AACnE,QAAI,CAAC,KAAK,MAAM,SAAU;AAE1B,UAAM,iBACL,KAAK,MAAM,SAAS,KAAK,MAAM,QAC/B,KAAK,MAAM,UAAU,KAAK,MAAM,SAChC,KAAK,MAAM,SAAS,KAAK,MAAM,QAC9B,KAAK,MAAM,UAAU,KAAK,KAAK,MAAM,UAAU;AAEjD,UAAM,gBAAgB,KAAK,MAAM,SAAS,KAAK,MAAM;AAGrD,QAAI,CAAC,kBAAkB,CAAC,cAAe;AAGvC,UAAM,UAAU,KAAK,iBAAiB,IAAI;AAG1C,UAAM,UAAU,YAAY,KAAK,QAAQ,KAAK,KAAK;AAEnD,UAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM;AACtC,UAAM,KAAK,QAAQ,SAAS,KAAK,MAAM;AACvC,UAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM;AACtC,UAAM,KAAK,QAAQ,SAAS,KAAK,MAAM;AAEvC,QAAI;AAEJ,YAAQ,KAAK,MAAM,OAAO;AAAA,MACzB,KAAK,UAAU;AACd,gBAAQ,IAAI,OAAO,KAAK,MAAM,GAAG,gBAAgB,KAAK,KAAK,MAAM,CAAC;AAClE;AAAA,MACD;AAAA,MACA,KAAK,OAAO;AACX,gBAAQ,IAAI,MAAM,KAAK,IAAI,gBAAgB,KAAK,KAAK,MAAM,CAAC;AAC5D;AAAA,MACD;AAAA,MACA,SAAS;AACR,YAAI,cAAe;AACnB,gBAAQ,IAAI,MAAM,IAAI,KAAK,MAAM,CAAC;AAClC;AAAA,MACD;AAAA,IACD;AAEA,QAAI,OAAO;AAEV,YAAM,IAAI,KAAK,QAAQ;AACvB,YAAM,EAAE,GAAG,EAAE,IAAI;AACjB,aAAO;AAAA,QACN,GAAG;AAAA,QACH,GAAG,IAAI,MAAM;AAAA,QACb,GAAG,IAAI,MAAM;AAAA,QACb,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,MAC/B;AAAA,IACD,OAAO;AACN,aAAO;AAAA,QACN,GAAG;AAAA,QACH,OAAO,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG;AAAA,MAC/B;AAAA,IACD;AAAA,EACD;AAAA,EAES,oBAAoB,CAAC,UAAuB;AAEpD,QAAI,CAAC,MAAM,MAAM,UAAU;AAC1B,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,OAAO;AAAA,UACN,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD;AAGA,QAAI,MAAM,MAAM,UAAU,GAAG;AAC5B,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,OAAO;AAAA,UACN,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,YAAY,QAAgB,OAA6B;AACjE,QAAM,EAAE,MAAM,MAAM,UAAU,MAAM,EAAE,IAAI;AAE1C,QAAM,WAAW,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC;AAC/C,QAAM,WAAW,WAAW,IAAI;AAEhC,QAAM,KAAK,WACR;AAAA;AAAA,IAEA,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,CAAC;AAAA;AAEnC,QAAM,SAAS,OAAO,YAAY,YAAY,MAAM;AAAA,IACnD,GAAG;AAAA,IACH,YAAY,cAAc,IAAI;AAAA,IAC9B;AAAA,IACA,UAAU;AAAA,EACX,CAAC;AAKD,MAAI,UAAU;AACb,WAAO,KAAK;AAAA,EACb;AAEA,SAAO;AAAA,IACN,OAAO,KAAK,IAAI,UAAU,OAAO,CAAC;AAAA,IAClC,QAAQ,KAAK,IAAI,UAAU,OAAO,CAAC;AAAA,EACpC;AACD;",
6
6
  "names": []
7
7
  }
@@ -18,8 +18,7 @@ class Idle extends StateNode {
18
18
  };
19
19
  onKeyDown = (info) => {
20
20
  if (info.key === "Enter") {
21
- if (this.editor.getInstanceState().isReadonly)
22
- return null;
21
+ if (this.editor.getInstanceState().isReadonly) return null;
23
22
  const onlySelectedShape = this.editor.getOnlySelectedShape();
24
23
  if (onlySelectedShape && this.editor.getShapeUtil(onlySelectedShape).canEdit(onlySelectedShape)) {
25
24
  this.editor.setCurrentTool("select");
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/shapes/text/toolStates/Idle.ts"],
4
4
  "sourcesContent": ["import { StateNode, TLEventHandlers } from '@bigbluebutton/editor'\nimport { updateHoveredId } from '../../../tools/selection-logic/updateHoveredId'\n\nexport class Idle extends StateNode {\n\tstatic override id = 'idle'\n\n\toverride onPointerMove: TLEventHandlers['onPointerMove'] = (info) => {\n\t\tswitch (info.target) {\n\t\t\tcase 'shape':\n\t\t\tcase 'canvas': {\n\t\t\t\tupdateHoveredId(this.editor)\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onPointerDown: TLEventHandlers['onPointerDown'] = (info) => {\n\t\tthis.parent.transition('pointing', info)\n\t}\n\n\toverride onEnter = () => {\n\t\tthis.editor.setCursor({ type: 'cross', rotation: 0 })\n\t}\n\n\toverride onKeyDown: TLEventHandlers['onKeyDown'] = (info) => {\n\t\tif (info.key === 'Enter') {\n\t\t\tif (this.editor.getInstanceState().isReadonly) return null\n\t\t\tconst onlySelectedShape = this.editor.getOnlySelectedShape()\n\t\t\t// If the only selected shape is editable, start editing it\n\t\t\tif (\n\t\t\t\tonlySelectedShape &&\n\t\t\t\tthis.editor.getShapeUtil(onlySelectedShape).canEdit(onlySelectedShape)\n\t\t\t) {\n\t\t\t\tthis.editor.setCurrentTool('select')\n\t\t\t\tthis.editor.setEditingShape(onlySelectedShape.id)\n\t\t\t\tthis.editor.root.getCurrent()?.transition('editing_shape', {\n\t\t\t\t\t...info,\n\t\t\t\t\ttarget: 'shape',\n\t\t\t\t\tshape: onlySelectedShape,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\toverride onCancel = () => {\n\t\tthis.editor.setCurrentTool('select')\n\t}\n}\n"],
5
- "mappings": "AAAA,SAAS,iBAAkC;AAC3C,SAAS,uBAAuB;AAEzB,MAAM,aAAa,UAAU;AAAA,EACnC,OAAgB,KAAK;AAAA,EAEZ,gBAAkD,CAAC,SAAS;AACpE,YAAQ,KAAK,QAAQ;AAAA,MACpB,KAAK;AAAA,MACL,KAAK,UAAU;AACd,wBAAgB,KAAK,MAAM;AAAA,MAC5B;AAAA,IACD;AAAA,EACD;AAAA,EAES,gBAAkD,CAAC,SAAS;AACpE,SAAK,OAAO,WAAW,YAAY,IAAI;AAAA,EACxC;AAAA,EAES,UAAU,MAAM;AACxB,SAAK,OAAO,UAAU,EAAE,MAAM,SAAS,UAAU,EAAE,CAAC;AAAA,EACrD;AAAA,EAES,YAA0C,CAAC,SAAS;AAC5D,QAAI,KAAK,QAAQ,SAAS;AACzB,UAAI,KAAK,OAAO,iBAAiB,EAAE;AAAY,eAAO;AACtD,YAAM,oBAAoB,KAAK,OAAO,qBAAqB;AAE3D,UACC,qBACA,KAAK,OAAO,aAAa,iBAAiB,EAAE,QAAQ,iBAAiB,GACpE;AACD,aAAK,OAAO,eAAe,QAAQ;AACnC,aAAK,OAAO,gBAAgB,kBAAkB,EAAE;AAChD,aAAK,OAAO,KAAK,WAAW,GAAG,WAAW,iBAAiB;AAAA,UAC1D,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAES,WAAW,MAAM;AACzB,SAAK,OAAO,eAAe,QAAQ;AAAA,EACpC;AACD;",
5
+ "mappings": "AAAA,SAAS,iBAAkC;AAC3C,SAAS,uBAAuB;AAEzB,MAAM,aAAa,UAAU;AAAA,EACnC,OAAgB,KAAK;AAAA,EAEZ,gBAAkD,CAAC,SAAS;AACpE,YAAQ,KAAK,QAAQ;AAAA,MACpB,KAAK;AAAA,MACL,KAAK,UAAU;AACd,wBAAgB,KAAK,MAAM;AAAA,MAC5B;AAAA,IACD;AAAA,EACD;AAAA,EAES,gBAAkD,CAAC,SAAS;AACpE,SAAK,OAAO,WAAW,YAAY,IAAI;AAAA,EACxC;AAAA,EAES,UAAU,MAAM;AACxB,SAAK,OAAO,UAAU,EAAE,MAAM,SAAS,UAAU,EAAE,CAAC;AAAA,EACrD;AAAA,EAES,YAA0C,CAAC,SAAS;AAC5D,QAAI,KAAK,QAAQ,SAAS;AACzB,UAAI,KAAK,OAAO,iBAAiB,EAAE,WAAY,QAAO;AACtD,YAAM,oBAAoB,KAAK,OAAO,qBAAqB;AAE3D,UACC,qBACA,KAAK,OAAO,aAAa,iBAAiB,EAAE,QAAQ,iBAAiB,GACpE;AACD,aAAK,OAAO,eAAe,QAAQ;AACnC,aAAK,OAAO,gBAAgB,kBAAkB,EAAE;AAChD,aAAK,OAAO,KAAK,WAAW,GAAG,WAAW,iBAAiB;AAAA,UAC1D,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,OAAO;AAAA,QACR,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AAAA,EAES,WAAW,MAAM;AACzB,SAAK,OAAO,eAAe,QAAQ;AAAA,EACpC;AACD;",
6
6
  "names": []
7
7
  }
@@ -29,8 +29,7 @@ class Pointing extends StateNode {
29
29
  ]);
30
30
  this.editor.select(id);
31
31
  this.shape = this.editor.getShape(id);
32
- if (!this.shape)
33
- return;
32
+ if (!this.shape) return;
34
33
  const { shape } = this;
35
34
  this.editor.setCurrentTool("select.resizing", {
36
35
  ...info,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/shapes/text/toolStates/Pointing.ts"],
4
4
  "sourcesContent": ["import { StateNode, TLEventHandlers, TLTextShape, createShapeId } from '@bigbluebutton/editor'\n\nexport class Pointing extends StateNode {\n\tstatic override id = 'pointing'\n\n\tshape?: TLTextShape\n\n\tmarkId = ''\n\n\toverride onExit = () => {\n\t\tthis.editor.setHintingShapes([])\n\t}\n\n\toverride onPointerMove: TLEventHandlers['onPointerMove'] = (info) => {\n\t\tif (this.editor.inputs.isDragging) {\n\t\t\tconst {\n\t\t\t\tinputs: { originPagePoint },\n\t\t\t} = this.editor\n\n\t\t\tconst id = createShapeId()\n\n\t\t\tthis.markId = `creating:${id}`\n\t\t\tthis.editor.mark(this.markId)\n\n\t\t\tthis.editor.createShapes<TLTextShape>([\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tx: originPagePoint.x,\n\t\t\t\t\ty: originPagePoint.y,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tautoSize: false,\n\t\t\t\t\t\tw: 20,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\n\t\t\tthis.editor.select(id)\n\n\t\t\tthis.shape = this.editor.getShape(id)\n\t\t\tif (!this.shape) return\n\n\t\t\tconst { shape } = this\n\n\t\t\tthis.editor.setCurrentTool('select.resizing', {\n\t\t\t\t...info,\n\t\t\t\ttarget: 'selection',\n\t\t\t\thandle: 'right',\n\t\t\t\tisCreating: true,\n\t\t\t\tcreationCursorOffset: { x: 1, y: 1 },\n\t\t\t\tonInteractionEnd: 'text',\n\t\t\t\tonCreate: () => {\n\t\t\t\t\tthis.editor.setEditingShape(shape.id)\n\t\t\t\t\tthis.editor.setCurrentTool('select.editing_shape')\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t}\n\n\toverride onPointerUp = () => {\n\t\tthis.complete()\n\t}\n\n\toverride onComplete = () => {\n\t\tthis.cancel()\n\t}\n\n\toverride onCancel = () => {\n\t\tthis.cancel()\n\t}\n\n\toverride onInterrupt = () => {\n\t\tthis.cancel()\n\t}\n\n\tprivate complete() {\n\t\tthis.editor.mark('creating text shape')\n\t\tconst id = createShapeId()\n\t\tconst { x, y } = this.editor.inputs.currentPagePoint\n\t\tthis.editor\n\t\t\t.createShapes([\n\t\t\t\t{\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\ttext: '',\n\t\t\t\t\t\tautoSize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t])\n\t\t\t.select(id)\n\n\t\tthis.editor.setEditingShape(id)\n\t\tthis.editor.setCurrentTool('select')\n\t\tthis.editor.root.getCurrent()?.transition('editing_shape')\n\t}\n\n\tprivate cancel() {\n\t\tthis.parent.transition('idle')\n\t\tthis.editor.bailToMark(this.markId)\n\t}\n}\n"],
5
- "mappings": "AAAA,SAAS,WAAyC,qBAAqB;AAEhE,MAAM,iBAAiB,UAAU;AAAA,EACvC,OAAgB,KAAK;AAAA,EAErB;AAAA,EAEA,SAAS;AAAA,EAEA,SAAS,MAAM;AACvB,SAAK,OAAO,iBAAiB,CAAC,CAAC;AAAA,EAChC;AAAA,EAES,gBAAkD,CAAC,SAAS;AACpE,QAAI,KAAK,OAAO,OAAO,YAAY;AAClC,YAAM;AAAA,QACL,QAAQ,EAAE,gBAAgB;AAAA,MAC3B,IAAI,KAAK;AAET,YAAM,KAAK,cAAc;AAEzB,WAAK,SAAS,YAAY,EAAE;AAC5B,WAAK,OAAO,KAAK,KAAK,MAAM;AAE5B,WAAK,OAAO,aAA0B;AAAA,QACrC;AAAA,UACC;AAAA,UACA,MAAM;AAAA,UACN,GAAG,gBAAgB;AAAA,UACnB,GAAG,gBAAgB;AAAA,UACnB,OAAO;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,GAAG;AAAA,UACJ;AAAA,QACD;AAAA,MACD,CAAC;AAED,WAAK,OAAO,OAAO,EAAE;AAErB,WAAK,QAAQ,KAAK,OAAO,SAAS,EAAE;AACpC,UAAI,CAAC,KAAK;AAAO;AAEjB,YAAM,EAAE,MAAM,IAAI;AAElB,WAAK,OAAO,eAAe,mBAAmB;AAAA,QAC7C,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,sBAAsB,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACnC,kBAAkB;AAAA,QAClB,UAAU,MAAM;AACf,eAAK,OAAO,gBAAgB,MAAM,EAAE;AACpC,eAAK,OAAO,eAAe,sBAAsB;AAAA,QAClD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAES,cAAc,MAAM;AAC5B,SAAK,SAAS;AAAA,EACf;AAAA,EAES,aAAa,MAAM;AAC3B,SAAK,OAAO;AAAA,EACb;AAAA,EAES,WAAW,MAAM;AACzB,SAAK,OAAO;AAAA,EACb;AAAA,EAES,cAAc,MAAM;AAC5B,SAAK,OAAO;AAAA,EACb;AAAA,EAEQ,WAAW;AAClB,SAAK,OAAO,KAAK,qBAAqB;AACtC,UAAM,KAAK,cAAc;AACzB,UAAM,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO,OAAO;AACpC,SAAK,OACH,aAAa;AAAA,MACb;AAAA,QACC;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD,CAAC,EACA,OAAO,EAAE;AAEX,SAAK,OAAO,gBAAgB,EAAE;AAC9B,SAAK,OAAO,eAAe,QAAQ;AACnC,SAAK,OAAO,KAAK,WAAW,GAAG,WAAW,eAAe;AAAA,EAC1D;AAAA,EAEQ,SAAS;AAChB,SAAK,OAAO,WAAW,MAAM;AAC7B,SAAK,OAAO,WAAW,KAAK,MAAM;AAAA,EACnC;AACD;",
5
+ "mappings": "AAAA,SAAS,WAAyC,qBAAqB;AAEhE,MAAM,iBAAiB,UAAU;AAAA,EACvC,OAAgB,KAAK;AAAA,EAErB;AAAA,EAEA,SAAS;AAAA,EAEA,SAAS,MAAM;AACvB,SAAK,OAAO,iBAAiB,CAAC,CAAC;AAAA,EAChC;AAAA,EAES,gBAAkD,CAAC,SAAS;AACpE,QAAI,KAAK,OAAO,OAAO,YAAY;AAClC,YAAM;AAAA,QACL,QAAQ,EAAE,gBAAgB;AAAA,MAC3B,IAAI,KAAK;AAET,YAAM,KAAK,cAAc;AAEzB,WAAK,SAAS,YAAY,EAAE;AAC5B,WAAK,OAAO,KAAK,KAAK,MAAM;AAE5B,WAAK,OAAO,aAA0B;AAAA,QACrC;AAAA,UACC;AAAA,UACA,MAAM;AAAA,UACN,GAAG,gBAAgB;AAAA,UACnB,GAAG,gBAAgB;AAAA,UACnB,OAAO;AAAA,YACN,MAAM;AAAA,YACN,UAAU;AAAA,YACV,GAAG;AAAA,UACJ;AAAA,QACD;AAAA,MACD,CAAC;AAED,WAAK,OAAO,OAAO,EAAE;AAErB,WAAK,QAAQ,KAAK,OAAO,SAAS,EAAE;AACpC,UAAI,CAAC,KAAK,MAAO;AAEjB,YAAM,EAAE,MAAM,IAAI;AAElB,WAAK,OAAO,eAAe,mBAAmB;AAAA,QAC7C,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,sBAAsB,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,QACnC,kBAAkB;AAAA,QAClB,UAAU,MAAM;AACf,eAAK,OAAO,gBAAgB,MAAM,EAAE;AACpC,eAAK,OAAO,eAAe,sBAAsB;AAAA,QAClD;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EAES,cAAc,MAAM;AAC5B,SAAK,SAAS;AAAA,EACf;AAAA,EAES,aAAa,MAAM;AAC3B,SAAK,OAAO;AAAA,EACb;AAAA,EAES,WAAW,MAAM;AACzB,SAAK,OAAO;AAAA,EACb;AAAA,EAES,cAAc,MAAM;AAC5B,SAAK,OAAO;AAAA,EACb;AAAA,EAEQ,WAAW;AAClB,SAAK,OAAO,KAAK,qBAAqB;AACtC,UAAM,KAAK,cAAc;AACzB,UAAM,EAAE,GAAG,EAAE,IAAI,KAAK,OAAO,OAAO;AACpC,SAAK,OACH,aAAa;AAAA,MACb;AAAA,QACC;AAAA,QACA,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACN,MAAM;AAAA,UACN,UAAU;AAAA,QACX;AAAA,MACD;AAAA,IACD,CAAC,EACA,OAAO,EAAE;AAEX,SAAK,OAAO,gBAAgB,EAAE;AAC9B,SAAK,OAAO,eAAe,QAAQ;AACnC,SAAK,OAAO,KAAK,WAAW,GAAG,WAAW,eAAe;AAAA,EAC1D;AAAA,EAEQ,SAAS;AAChB,SAAK,OAAO,WAAW,MAAM;AAC7B,SAAK,OAAO,WAAW,KAAK,MAAM;AAAA,EACnC;AACD;",
6
6
  "names": []
7
7
  }
@@ -52,8 +52,7 @@ function serializeVideo(id) {
52
52
  canvas.height = video.videoHeight;
53
53
  canvas.getContext("2d").drawImage(video, 0, 0);
54
54
  return canvas.toDataURL("image/png");
55
- } else
56
- throw new Error("Video with id " + splitId + " not found");
55
+ } else throw new Error("Video with id " + splitId + " not found");
57
56
  }
58
57
  const TLVideoUtilComponent = track(function TLVideoUtilComponent2(props) {
59
58
  const { shape, videoUtil } = props;
@@ -128,8 +127,7 @@ const TLVideoUtilComponent = track(function TLVideoUtilComponent2(props) {
128
127
  );
129
128
  React.useEffect(() => {
130
129
  const video = rVideo.current;
131
- if (!video)
132
- return;
130
+ if (!video) return;
133
131
  if (isLoaded && !isEditing && time !== video.currentTime) {
134
132
  video.currentTime = time;
135
133
  }