tldraw 4.2.2 → 4.2.3

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 (621) hide show
  1. package/dist-cjs/index.d.ts +242 -311
  2. package/dist-cjs/index.js +5 -13
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
  5. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +4 -7
  6. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
  7. package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -5
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/defaultSideEffects.js +1 -6
  11. package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +13 -14
  13. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  14. package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
  15. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +1 -1
  16. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  17. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  18. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  19. package/dist-cjs/lib/shapes/arrow/elbow/elbowArrowSnapLines.js.map +2 -2
  20. package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
  21. package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +10 -4
  22. package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
  23. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +4 -7
  24. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  25. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +1 -1
  26. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  27. package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
  28. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +22 -24
  29. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  30. package/dist-cjs/lib/shapes/draw/getPath.js +11 -20
  31. package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
  32. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +86 -82
  33. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
  34. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +0 -6
  35. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
  37. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +5 -6
  38. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +142 -146
  40. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  41. package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +10 -5
  42. package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +2 -2
  43. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -3
  44. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
  45. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +21 -23
  46. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  47. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +3 -3
  48. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
  49. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +11 -6
  50. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  51. package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
  52. package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +10 -5
  53. package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
  54. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +2 -3
  55. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
  56. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +2 -14
  57. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
  58. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +4 -12
  59. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +3 -3
  60. package/dist-cjs/lib/shapes/shared/ShapeFill.js +2 -2
  61. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  62. package/dist-cjs/lib/shapes/shared/crop.js +0 -1
  63. package/dist-cjs/lib/shapes/shared/crop.js.map +2 -2
  64. package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
  65. package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
  66. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  67. package/dist-cjs/lib/shapes/shared/useEditableRichText.js.map +2 -2
  68. package/dist-cjs/lib/shapes/shared/{useEfficientZoomThreshold.js → useForceSolid.js} +7 -10
  69. package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +7 -0
  70. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +1 -1
  71. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  72. package/dist-cjs/lib/shapes/text/RichTextArea.js +0 -5
  73. package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
  74. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -5
  75. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  76. package/dist-cjs/lib/shapes/text/toolStates/Idle.js +10 -4
  77. package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
  78. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +5 -7
  79. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
  80. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
  81. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +2 -2
  82. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +5 -4
  83. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  84. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +4 -2
  85. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  86. package/dist-cjs/lib/tools/HandTool/HandTool.js +5 -3
  87. package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
  88. package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +2 -3
  89. package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
  90. package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js +1 -1
  91. package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js.map +2 -2
  92. package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js +1 -1
  93. package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js.map +2 -2
  94. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +11 -10
  95. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
  96. package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +5 -6
  97. package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
  98. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +6 -4
  99. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js.map +2 -2
  100. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
  101. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
  102. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +1 -1
  103. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
  104. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +1 -1
  105. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
  106. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +1 -2
  107. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +2 -2
  108. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js +1 -1
  109. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js.map +2 -2
  110. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +6 -8
  111. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  112. package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +11 -38
  113. package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
  114. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +50 -42
  115. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  116. package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js +6 -6
  117. package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
  118. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +1 -1
  119. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
  120. package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +14 -4
  121. package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
  122. package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +1 -1
  123. package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
  124. package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +1 -1
  125. package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
  126. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +2 -2
  127. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
  128. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +13 -4
  129. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  130. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +6 -5
  131. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  132. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +3 -2
  133. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
  134. package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +6 -7
  135. package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
  136. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +11 -13
  137. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  138. package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +4 -15
  139. package/dist-cjs/lib/tools/SelectTool/selectHelpers.js.map +2 -2
  140. package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js +1 -1
  141. package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js.map +2 -2
  142. package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js +3 -3
  143. package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js.map +2 -2
  144. package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js +6 -5
  145. package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
  146. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +3 -1
  147. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
  148. package/dist-cjs/lib/{utils/test-helpers.js → tools/selection-logic/getShouldEnterCropModeOnPointerDown.js} +8 -21
  149. package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +7 -0
  150. package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js +1 -1
  151. package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js.map +2 -2
  152. package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js +1 -1
  153. package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js.map +2 -2
  154. package/dist-cjs/lib/ui/TldrawUi.js +2 -2
  155. package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
  156. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js +9 -3
  157. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
  158. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +3 -1
  159. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
  160. package/dist-cjs/lib/ui/components/CursorChatBubble.js +1 -1
  161. package/dist-cjs/lib/ui/components/CursorChatBubble.js.map +2 -2
  162. package/dist-cjs/lib/ui/components/DefaultDebugPanel.js +21 -1
  163. package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
  164. package/dist-cjs/lib/ui/components/EditLinkDialog.js +1 -11
  165. package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
  166. package/dist-cjs/lib/ui/components/HelperButtons/StopFollowing.js.map +2 -2
  167. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
  168. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  169. package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +15 -2
  170. package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
  171. package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +1 -3
  172. package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
  173. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +0 -6
  174. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
  175. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  176. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +1 -1
  177. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +2 -2
  178. package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js +1 -1
  179. package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js.map +2 -2
  180. package/dist-cjs/lib/ui/components/TopPanel/CenteredTopPanelContainer.js.map +1 -1
  181. package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +32 -0
  182. package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +7 -0
  183. package/dist-cjs/lib/ui/components/menu-items.js +1 -3
  184. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  185. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -3
  186. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  187. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -1
  188. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  189. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +93 -149
  190. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  191. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.js.map +2 -2
  192. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.js.map +2 -2
  193. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +1 -1
  194. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  195. package/dist-cjs/lib/ui/context/actions.js +8 -7
  196. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  197. package/dist-cjs/lib/ui/context/components.js +2 -1
  198. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  199. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  200. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +2 -2
  201. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  202. package/dist-cjs/lib/ui/hooks/useFlatten.js.map +2 -2
  203. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
  204. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
  205. package/dist-cjs/lib/ui/hooks/useTools.js +5 -4
  206. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  207. package/dist-cjs/lib/ui/version.js +3 -3
  208. package/dist-cjs/lib/ui/version.js.map +1 -1
  209. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +6 -16
  210. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  211. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  212. package/dist-cjs/lib/utils/frames/frames.js.map +2 -2
  213. package/dist-cjs/lib/utils/text/richText.js +2 -4
  214. package/dist-cjs/lib/utils/text/richText.js.map +2 -2
  215. package/dist-cjs/lib/utils/text/textDirection.js +51 -0
  216. package/dist-cjs/lib/utils/text/textDirection.js.map +7 -0
  217. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +2 -7
  218. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  219. package/dist-esm/index.d.mts +242 -311
  220. package/dist-esm/index.mjs +5 -14
  221. package/dist-esm/index.mjs.map +2 -2
  222. package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
  223. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +4 -8
  224. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
  225. package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
  226. package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -5
  227. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  228. package/dist-esm/lib/defaultSideEffects.mjs +1 -6
  229. package/dist-esm/lib/defaultSideEffects.mjs.map +2 -2
  230. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +15 -15
  231. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  232. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +1 -1
  233. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  234. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  235. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  236. package/dist-esm/lib/shapes/arrow/elbow/elbowArrowSnapLines.mjs.map +2 -2
  237. package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
  238. package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +10 -4
  239. package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
  240. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +4 -7
  241. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  242. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +1 -1
  243. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  244. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
  245. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +24 -29
  246. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  247. package/dist-esm/lib/shapes/draw/getPath.mjs +11 -21
  248. package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
  249. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +86 -83
  250. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
  251. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +0 -6
  252. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
  253. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
  254. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +5 -6
  255. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  256. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +142 -147
  257. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  258. package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +10 -5
  259. package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +2 -2
  260. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +3 -3
  261. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
  262. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +22 -24
  263. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  264. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +3 -3
  265. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
  266. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +12 -7
  267. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  268. package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
  269. package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +10 -5
  270. package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
  271. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +3 -4
  272. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
  273. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +2 -14
  274. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  275. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +4 -12
  276. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  277. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +2 -2
  278. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  279. package/dist-esm/lib/shapes/shared/crop.mjs +0 -1
  280. package/dist-esm/lib/shapes/shared/crop.mjs.map +2 -2
  281. package/dist-esm/lib/shapes/shared/interpolate-props.mjs +4 -4
  282. package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
  283. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  284. package/dist-esm/lib/shapes/shared/useEditableRichText.mjs.map +2 -2
  285. package/dist-esm/lib/shapes/shared/useForceSolid.mjs +9 -0
  286. package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +7 -0
  287. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +1 -1
  288. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  289. package/dist-esm/lib/shapes/text/RichTextArea.mjs +0 -5
  290. package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
  291. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +2 -5
  292. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  293. package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +10 -4
  294. package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
  295. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +5 -7
  296. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
  297. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +1 -1
  298. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +2 -2
  299. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +5 -4
  300. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  301. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +8 -3
  302. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  303. package/dist-esm/lib/tools/HandTool/HandTool.mjs +5 -3
  304. package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
  305. package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +2 -3
  306. package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
  307. package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs +1 -1
  308. package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs.map +2 -2
  309. package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs +1 -1
  310. package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs.map +2 -2
  311. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +11 -10
  312. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
  313. package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +5 -6
  314. package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
  315. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +6 -4
  316. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs.map +2 -2
  317. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
  318. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
  319. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +1 -1
  320. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
  321. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +1 -1
  322. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
  323. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +1 -2
  324. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +2 -2
  325. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs +1 -1
  326. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs.map +2 -2
  327. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +6 -8
  328. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  329. package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +11 -38
  330. package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
  331. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +51 -43
  332. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  333. package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs +6 -6
  334. package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
  335. package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +1 -1
  336. package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
  337. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +19 -6
  338. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
  339. package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +1 -1
  340. package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
  341. package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +1 -1
  342. package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
  343. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +2 -2
  344. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
  345. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +13 -4
  346. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  347. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +6 -5
  348. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  349. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +3 -2
  350. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
  351. package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +6 -7
  352. package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
  353. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +11 -13
  354. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  355. package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +4 -17
  356. package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs.map +2 -2
  357. package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs +1 -1
  358. package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs.map +2 -2
  359. package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs +3 -3
  360. package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs.map +2 -2
  361. package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs +6 -5
  362. package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
  363. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +3 -1
  364. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
  365. package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +8 -0
  366. package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +7 -0
  367. package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs +1 -1
  368. package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs.map +2 -2
  369. package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs +1 -1
  370. package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs.map +2 -2
  371. package/dist-esm/lib/ui/TldrawUi.mjs +2 -2
  372. package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
  373. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs +8 -2
  374. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
  375. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +3 -1
  376. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
  377. package/dist-esm/lib/ui/components/CursorChatBubble.mjs +1 -1
  378. package/dist-esm/lib/ui/components/CursorChatBubble.mjs.map +2 -2
  379. package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs +30 -3
  380. package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
  381. package/dist-esm/lib/ui/components/EditLinkDialog.mjs +1 -11
  382. package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
  383. package/dist-esm/lib/ui/components/HelperButtons/StopFollowing.mjs.map +2 -2
  384. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +1 -1
  385. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  386. package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs +6 -3
  387. package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
  388. package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +1 -3
  389. package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
  390. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +0 -6
  391. package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
  392. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  393. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +1 -1
  394. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +2 -2
  395. package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs +1 -1
  396. package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs.map +2 -2
  397. package/dist-esm/lib/ui/components/TopPanel/CenteredTopPanelContainer.mjs.map +1 -1
  398. package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +12 -0
  399. package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +7 -0
  400. package/dist-esm/lib/ui/components/menu-items.mjs +5 -4
  401. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  402. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -3
  403. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  404. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +2 -2
  405. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  406. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +95 -157
  407. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  408. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.mjs.map +2 -2
  409. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.mjs.map +2 -2
  410. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +2 -2
  411. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  412. package/dist-esm/lib/ui/context/actions.mjs +8 -7
  413. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  414. package/dist-esm/lib/ui/context/components.mjs +2 -1
  415. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  416. package/dist-esm/lib/ui/hooks/menu-hooks.mjs +4 -1
  417. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  418. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +2 -2
  419. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  420. package/dist-esm/lib/ui/hooks/useFlatten.mjs.map +2 -2
  421. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
  422. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
  423. package/dist-esm/lib/ui/hooks/useTools.mjs +5 -4
  424. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  425. package/dist-esm/lib/ui/version.mjs +3 -3
  426. package/dist-esm/lib/ui/version.mjs.map +1 -1
  427. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +6 -17
  428. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  429. package/dist-esm/lib/utils/export/exportAs.mjs +3 -1
  430. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  431. package/dist-esm/lib/utils/frames/frames.mjs.map +2 -2
  432. package/dist-esm/lib/utils/text/richText.mjs +2 -5
  433. package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
  434. package/dist-esm/lib/utils/text/textDirection.mjs +31 -0
  435. package/dist-esm/lib/utils/text/textDirection.mjs.map +7 -0
  436. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +2 -8
  437. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  438. package/package.json +16 -18
  439. package/src/index.ts +2 -6
  440. package/src/lib/Tldraw.test.tsx +1 -46
  441. package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
  442. package/src/lib/canvas/TldrawSelectionForeground.tsx +9 -20
  443. package/src/lib/defaultEmbedDefinitions.ts +0 -1
  444. package/src/lib/defaultExternalContentHandlers.ts +14 -13
  445. package/src/lib/defaultSideEffects.ts +1 -6
  446. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +133 -40
  447. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +8 -8
  448. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +2 -2
  449. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +16 -16
  450. package/src/lib/shapes/arrow/arrow-types.ts +0 -2
  451. package/src/lib/shapes/arrow/arrowLabel.ts +2 -2
  452. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -2
  453. package/src/lib/shapes/arrow/elbow/elbowArrowSnapLines.tsx +3 -3
  454. package/src/lib/shapes/arrow/shared.ts +4 -4
  455. package/src/lib/shapes/arrow/toolStates/Idle.tsx +14 -4
  456. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +5 -8
  457. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
  458. package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
  459. package/src/lib/shapes/draw/DrawShapeUtil.tsx +26 -30
  460. package/src/lib/shapes/draw/getPath.ts +10 -31
  461. package/src/lib/shapes/draw/toolStates/Drawing.ts +90 -100
  462. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -8
  463. package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
  464. package/src/lib/shapes/frame/FrameShapeUtil.tsx +4 -10
  465. package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +2 -10
  466. package/src/lib/shapes/geo/GeoShapeUtil.tsx +176 -228
  467. package/src/lib/shapes/geo/toolStates/Idle.ts +15 -5
  468. package/src/lib/shapes/geo/toolStates/Pointing.ts +6 -6
  469. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +24 -25
  470. package/src/lib/shapes/line/LineShapeTool.test.ts +6 -6
  471. package/src/lib/shapes/line/LineShapeUtil.test.tsx +5 -5
  472. package/src/lib/shapes/line/toolStates/Pointing.ts +4 -4
  473. package/src/lib/shapes/note/NoteShapeTool.test.ts +1 -2
  474. package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -9
  475. package/src/lib/shapes/note/noteCloning.test.ts +1 -3
  476. package/src/lib/shapes/note/noteHelpers.ts +2 -2
  477. package/src/lib/shapes/note/toolStates/Pointing.ts +10 -5
  478. package/src/lib/shapes/shared/HyperlinkButton.tsx +3 -4
  479. package/src/lib/shapes/shared/PlainTextLabel.tsx +2 -12
  480. package/src/lib/shapes/shared/RichTextLabel.tsx +4 -14
  481. package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
  482. package/src/lib/shapes/shared/crop.ts +0 -1
  483. package/src/lib/shapes/shared/interpolate-props.ts +4 -4
  484. package/src/lib/shapes/shared/useEditablePlainText.ts +3 -7
  485. package/src/lib/shapes/shared/useEditableRichText.ts +3 -7
  486. package/src/lib/shapes/shared/useForceSolid.ts +6 -0
  487. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
  488. package/src/lib/shapes/text/RichTextArea.tsx +0 -5
  489. package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
  490. package/src/lib/shapes/text/TextShapeUtil.tsx +0 -5
  491. package/src/lib/shapes/text/toolStates/Idle.ts +14 -4
  492. package/src/lib/shapes/text/toolStates/Pointing.ts +8 -8
  493. package/src/lib/shapes/video/VideoShapeUtil.tsx +1 -2
  494. package/src/lib/tools/EraserTool/childStates/Erasing.ts +10 -7
  495. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -5
  496. package/src/lib/tools/HandTool/HandTool.ts +5 -3
  497. package/src/lib/tools/HandTool/childStates/Dragging.ts +2 -3
  498. package/src/lib/tools/HandTool/childStates/Pointing.ts +1 -1
  499. package/src/lib/tools/LaserTool/childStates/Lasering.ts +1 -1
  500. package/src/lib/tools/SelectTool/DragAndDropManager.ts +11 -14
  501. package/src/lib/tools/SelectTool/childStates/Brushing.ts +11 -8
  502. package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +6 -7
  503. package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +4 -3
  504. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +1 -1
  505. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +1 -1
  506. package/src/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.ts +1 -2
  507. package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
  508. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +12 -11
  509. package/src/lib/tools/SelectTool/childStates/EditingShape.ts +16 -57
  510. package/src/lib/tools/SelectTool/childStates/Idle.ts +81 -64
  511. package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +8 -7
  512. package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
  513. package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +17 -9
  514. package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +1 -1
  515. package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +1 -1
  516. package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +4 -4
  517. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +14 -4
  518. package/src/lib/tools/SelectTool/childStates/Resizing.ts +10 -8
  519. package/src/lib/tools/SelectTool/childStates/Rotating.ts +3 -2
  520. package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +10 -9
  521. package/src/lib/tools/SelectTool/childStates/Translating.ts +15 -16
  522. package/src/lib/tools/SelectTool/selectHelpers.ts +4 -39
  523. package/src/lib/tools/ZoomTool/ZoomTool.ts +1 -1
  524. package/src/lib/tools/ZoomTool/childStates/Pointing.ts +3 -3
  525. package/src/lib/tools/ZoomTool/childStates/ZoomBrushing.ts +6 -5
  526. package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +3 -1
  527. package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +10 -0
  528. package/src/lib/tools/selection-logic/selectOnCanvasPointerUp.ts +1 -1
  529. package/src/lib/tools/selection-logic/updateHoveredShapeId.ts +1 -1
  530. package/src/lib/ui/TldrawUi.tsx +2 -5
  531. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +9 -1
  532. package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +3 -1
  533. package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
  534. package/src/lib/ui/components/DefaultDebugPanel.tsx +42 -3
  535. package/src/lib/ui/components/EditLinkDialog.tsx +6 -16
  536. package/src/lib/ui/components/HelperButtons/StopFollowing.tsx +2 -2
  537. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +1 -1
  538. package/src/lib/ui/components/OfflineIndicator/OfflineIndicator.tsx +5 -6
  539. package/src/lib/ui/components/PageMenu/PageItemInput.tsx +1 -3
  540. package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +0 -8
  541. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -2
  542. package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +1 -1
  543. package/src/lib/ui/components/Toolbar/DefaultRichTextToolbar.tsx +1 -1
  544. package/src/lib/ui/components/TopPanel/CenteredTopPanelContainer.tsx +1 -1
  545. package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +10 -0
  546. package/src/lib/ui/components/menu-items.tsx +15 -9
  547. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +3 -5
  548. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +2 -2
  549. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +113 -208
  550. package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.tsx +1 -1
  551. package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.tsx +1 -1
  552. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +2 -2
  553. package/src/lib/ui/context/actions.tsx +19 -15
  554. package/src/lib/ui/context/components.tsx +2 -1
  555. package/src/lib/ui/hooks/menu-hooks.ts +19 -9
  556. package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
  557. package/src/lib/ui/hooks/useFlatten.ts +2 -1
  558. package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
  559. package/src/lib/ui/hooks/useTools.tsx +7 -5
  560. package/src/lib/ui/version.ts +3 -3
  561. package/src/lib/ui.css +29 -31
  562. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +48 -12
  563. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +6 -19
  564. package/src/lib/utils/export/exportAs.ts +9 -2
  565. package/src/lib/utils/frames/frames.ts +1 -1
  566. package/src/lib/utils/text/richText.ts +5 -6
  567. package/src/lib/utils/text/textDirection.ts +32 -0
  568. package/src/lib/utils/tldr/buildFromV1Document.ts +19 -21
  569. package/src/test/Editor.test.tsx +41 -78
  570. package/src/test/EraserTool.test.ts +12 -10
  571. package/src/test/SelectTool.test.ts +19 -11
  572. package/src/test/TestEditor.ts +51 -49
  573. package/src/test/TldrawEditor.test.tsx +20 -24
  574. package/src/test/__snapshots__/drawing.test.ts.snap +1257 -3
  575. package/src/test/__snapshots__/resizing.test.ts.snap +12 -3
  576. package/src/test/arrows-megabus.test.tsx +1 -1
  577. package/src/test/bindings.test.tsx +25 -29
  578. package/src/test/bindingsIndex.test.tsx +4 -4
  579. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
  580. package/src/test/commands/createShapes.test.ts +1 -15
  581. package/src/test/commands/getSvgString.test.ts +2 -2
  582. package/src/test/commands/putContent.test.ts +1 -80
  583. package/src/test/commands/setCamera.test.ts +11 -13
  584. package/src/test/commands/stackShapes.test.ts +8 -34
  585. package/src/test/commands/updateShapes.test.ts +5 -21
  586. package/src/test/commands/zoomToBounds.test.ts +3 -19
  587. package/src/test/commands/zoomToSelection.test.ts +3 -14
  588. package/src/test/custom-clipping.test.ts +44 -52
  589. package/src/test/customSnapping.test.tsx +62 -77
  590. package/src/test/drawing.test.ts +10 -17
  591. package/src/test/duplicate.test.ts +1 -1
  592. package/src/test/flipShapes.test.ts +0 -33
  593. package/src/test/frames.test.ts +2 -94
  594. package/src/test/getCulledShapes.test.tsx +3 -11
  595. package/src/test/getShapeAtPoint.test.ts +2 -2
  596. package/src/test/groups.test.tsx +4 -7
  597. package/src/test/modifiers.test.ts +6 -6
  598. package/src/test/resizing.test.ts +22 -16
  599. package/src/test/selection-omnibus.test.ts +13 -13
  600. package/src/test/shapeutils.test.ts +1 -1
  601. package/src/test/spacebarPanning.test.ts +10 -28
  602. package/src/test/styles2.test.tsx +1 -1
  603. package/src/test/styles3.test.ts +5 -5
  604. package/src/test/test-jsx.tsx +57 -72
  605. package/src/test/text.test.ts +17 -15
  606. package/src/test/translating.test.ts +8 -6
  607. package/tldraw.css +41 -45
  608. package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.js.map +0 -7
  609. package/dist-cjs/lib/utils/test-helpers.js.map +0 -7
  610. package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs +0 -12
  611. package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs.map +0 -7
  612. package/dist-esm/lib/utils/test-helpers.mjs +0 -21
  613. package/dist-esm/lib/utils/test-helpers.mjs.map +0 -7
  614. package/src/lib/shapes/draw/DrawShapeUtil.test.ts +0 -146
  615. package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +0 -146
  616. package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +0 -10
  617. package/src/lib/utils/test-helpers.ts +0 -60
  618. package/src/test/commands/cameraState.test.ts +0 -299
  619. package/src/test/commands/createShape.test.ts +0 -64
  620. package/src/test/commands/isShapeOfType.test.ts +0 -44
  621. package/src/test/commands/updateShape.test.ts +0 -67
@@ -24,7 +24,7 @@ import { TldrawUiDropdownMenuItem } from '../TldrawUiDropdownMenu'
24
24
  import { TLUiIconJsx } from '../TldrawUiIcon'
25
25
  import { TldrawUiKbd } from '../TldrawUiKbd'
26
26
  import { TldrawUiToolbarButton } from '../TldrawUiToolbar'
27
- import { hideAllTooltips } from '../TldrawUiTooltip'
27
+ import { tooltipManager } from '../TldrawUiTooltip'
28
28
  import { useTldrawUiMenuContext } from './TldrawUiMenuContext'
29
29
 
30
30
  /** @public */
@@ -349,7 +349,7 @@ function useDraggableEvents(
349
349
  point: screenSpaceStart,
350
350
  })
351
351
 
352
- hideAllTooltips()
352
+ tooltipManager.hideAllTooltips()
353
353
  editor.getContainer().focus()
354
354
  })
355
355
  }
@@ -6,7 +6,10 @@ import {
6
6
  HALF_PI,
7
7
  PageRecordType,
8
8
  Result,
9
+ TLBookmarkShape,
9
10
  TLEmbedShape,
11
+ TLFrameShape,
12
+ TLGroupShape,
10
13
  TLImageShape,
11
14
  TLShape,
12
15
  TLShapeId,
@@ -324,7 +327,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
324
327
  .getSelectedShapes()
325
328
  .filter(
326
329
  (shape): shape is TLTextShape =>
327
- editor.isShapeOfType(shape, 'text') && shape.props.autoSize === false
330
+ editor.isShapeOfType<TLTextShape>(shape, 'text') && shape.props.autoSize === false
328
331
  )
329
332
  editor.updateShapes(
330
333
  shapes.map((shape) => {
@@ -359,7 +362,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
359
362
  return
360
363
  }
361
364
  const shape = editor.getShape(ids[0])
362
- if (!shape || !editor.isShapeOfType(shape, 'embed')) {
365
+ if (!shape || !editor.isShapeOfType<TLEmbedShape>(shape, 'embed')) {
363
366
  console.error(warnMsg)
364
367
  return
365
368
  }
@@ -375,7 +378,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
375
378
  if (editor.root.getCurrent()?.id === 'zoom') return
376
379
 
377
380
  trackEvent('zoom-tool', { source })
378
- if (!(editor.inputs.getShiftKey() || editor.inputs.getCtrlKey())) {
381
+ if (!(editor.inputs.shiftKey || editor.inputs.ctrlKey)) {
379
382
  const currentTool = editor.root.getCurrent()
380
383
  if (currentTool && currentTool.getCurrent()?.id === 'idle') {
381
384
  editor.setCurrentTool('zoom', { onInteractionEnd: currentTool.id, maskAs: 'zoom' })
@@ -398,7 +401,8 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
398
401
  const creationPromises: Promise<Result<any, any>>[] = []
399
402
 
400
403
  for (const shape of shapes) {
401
- if (!shape || !editor.isShapeOfType(shape, 'embed') || !shape.props.url) continue
404
+ if (!shape || !editor.isShapeOfType<TLEmbedShape>(shape, 'embed') || !shape.props.url)
405
+ continue
402
406
 
403
407
  const center = editor.getShapePageBounds(shape)?.center
404
408
 
@@ -437,7 +441,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
437
441
  const createList: TLShapePartial[] = []
438
442
  const deleteList: TLShapeId[] = []
439
443
  for (const shape of shapes) {
440
- if (!editor.isShapeOfType(shape, 'bookmark')) continue
444
+ if (!editor.isShapeOfType<TLBookmarkShape>(shape, 'bookmark')) continue
441
445
 
442
446
  const { url } = shape.props
443
447
 
@@ -548,7 +552,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
548
552
 
549
553
  trackEvent('group-shapes', { source })
550
554
  const onlySelectedShape = editor.getOnlySelectedShape()
551
- if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'group')) {
555
+ if (onlySelectedShape && editor.isShapeOfType<TLGroupShape>(onlySelectedShape, 'group')) {
552
556
  editor.markHistoryStoppingPoint('ungroup')
553
557
  editor.ungroupShapes(editor.getSelectedShapeIds())
554
558
  } else {
@@ -568,7 +572,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
568
572
  const selectedShapes = editor.getSelectedShapes()
569
573
  if (
570
574
  selectedShapes.length > 0 &&
571
- selectedShapes.every((shape) => editor.isShapeOfType(shape, 'frame'))
575
+ selectedShapes.every((shape) => editor.isShapeOfType<TLFrameShape>(shape, 'frame'))
572
576
  ) {
573
577
  editor.markHistoryStoppingPoint('remove-frame')
574
578
  removeFrame(
@@ -586,7 +590,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
586
590
 
587
591
  trackEvent('fit-frame-to-content', { source })
588
592
  const onlySelectedShape = editor.getOnlySelectedShape()
589
- if (onlySelectedShape && editor.isShapeOfType(onlySelectedShape, 'frame')) {
593
+ if (onlySelectedShape && editor.isShapeOfType<TLFrameShape>(onlySelectedShape, 'frame')) {
590
594
  editor.markHistoryStoppingPoint('fit-frame-to-content')
591
595
  fitFrameToContent(editor, onlySelectedShape.id)
592
596
  }
@@ -973,7 +977,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
973
977
  helpers.paste(
974
978
  clipboardItems,
975
979
  source,
976
- source === 'context-menu' ? editor.inputs.getCurrentPagePoint() : undefined
980
+ source === 'context-menu' ? editor.inputs.currentPagePoint : undefined
977
981
  )
978
982
  })
979
983
  .catch(() => {
@@ -1037,7 +1041,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
1037
1041
  if (!canApplySelectionAction()) return
1038
1042
  if (mustGoBackToSelectToolFirst()) return
1039
1043
 
1040
- const isFine = editor.inputs.getAltKey()
1044
+ const isFine = editor.inputs.altKey
1041
1045
  trackEvent('rotate-cw', { source, fine: isFine })
1042
1046
  editor.markHistoryStoppingPoint('rotate-cw')
1043
1047
  editor.run(() => {
@@ -1060,7 +1064,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
1060
1064
  if (!canApplySelectionAction()) return
1061
1065
  if (mustGoBackToSelectToolFirst()) return
1062
1066
 
1063
- const isFine = editor.inputs.getAltKey()
1067
+ const isFine = editor.inputs.altKey
1064
1068
  trackEvent('rotate-ccw', { source, fine: isFine })
1065
1069
  editor.markHistoryStoppingPoint('rotate-ccw')
1066
1070
  editor.run(() => {
@@ -1092,7 +1096,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
1092
1096
  readonlyOk: true,
1093
1097
  onSelect(source) {
1094
1098
  trackEvent('zoom-in', { source, towardsCursor: true })
1095
- editor.zoomIn(editor.inputs.getCurrentScreenPoint(), {
1099
+ editor.zoomIn(editor.inputs.currentScreenPoint, {
1096
1100
  animation: { duration: editor.options.animationMediumMs },
1097
1101
  })
1098
1102
  },
@@ -1116,7 +1120,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
1116
1120
  readonlyOk: true,
1117
1121
  onSelect(source) {
1118
1122
  trackEvent('zoom-out', { source, towardsCursor: true })
1119
- editor.zoomOut(editor.inputs.getCurrentScreenPoint(), {
1123
+ editor.zoomOut(editor.inputs.currentScreenPoint, {
1120
1124
  animation: { duration: editor.options.animationMediumMs },
1121
1125
  })
1122
1126
  },
@@ -1595,8 +1599,8 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
1595
1599
  const onlySelectedShape = editor.getOnlySelectedShape()
1596
1600
  if (
1597
1601
  onlySelectedShape &&
1598
- (editor.isShapeOfType(onlySelectedShape, 'image') ||
1599
- editor.isShapeOfType(onlySelectedShape, 'video'))
1602
+ (editor.isShapeOfType<TLImageShape>(onlySelectedShape, 'image') ||
1603
+ editor.isShapeOfType<TLVideoShape>(onlySelectedShape, 'video'))
1600
1604
  ) {
1601
1605
  const firstToolbarButton = editor
1602
1606
  .getContainer()
@@ -42,6 +42,7 @@ import {
42
42
  } from '../components/Toolbar/DefaultRichTextToolbar'
43
43
  import { DefaultToolbar } from '../components/Toolbar/DefaultToolbar'
44
44
  import { DefaultVideoToolbar } from '../components/Toolbar/DefaultVideoToolbar'
45
+ import { DefaultTopPanel } from '../components/TopPanel/DefaultTopPanel'
45
46
  import { DefaultZoomMenu, TLUiZoomMenuProps } from '../components/ZoomMenu/DefaultZoomMenu'
46
47
  import { useShowCollaborationUi } from '../hooks/useCollaborationStatus'
47
48
 
@@ -116,7 +117,7 @@ export function TldrawUiComponentsProvider({
116
117
  MenuPanel: DefaultMenuPanel,
117
118
  SharePanel: showCollaborationUi ? DefaultSharePanel : null,
118
119
  CursorChatBubble: showCollaborationUi ? CursorChatBubble : null,
119
- TopPanel: null,
120
+ TopPanel: showCollaborationUi ? DefaultTopPanel : null,
120
121
  Dialogs: DefaultDialogs,
121
122
  Toasts: DefaultToasts,
122
123
  A11y: DefaultA11yAnnouncer,
@@ -1,4 +1,14 @@
1
- import { Editor, useEditor, useValue } from '@tldraw/editor'
1
+ import {
2
+ Editor,
3
+ TLArrowShape,
4
+ TLDrawShape,
5
+ TLGroupShape,
6
+ TLImageShape,
7
+ TLLineShape,
8
+ TLTextShape,
9
+ useEditor,
10
+ useValue,
11
+ } from '@tldraw/editor'
2
12
  import { getArrowBindings } from '../../shapes/arrow/shared'
3
13
 
4
14
  function shapesWithUnboundArrows(editor: Editor) {
@@ -9,7 +19,7 @@ function shapesWithUnboundArrows(editor: Editor) {
9
19
 
10
20
  return selectedShapes.filter((shape) => {
11
21
  if (!shape) return false
12
- if (editor.isShapeOfType(shape, 'arrow')) {
22
+ if (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {
13
23
  const bindings = getArrowBindings(editor, shape)
14
24
  if (bindings.start || bindings.end) return false
15
25
  }
@@ -42,7 +52,7 @@ export const useAllowGroup = () => {
42
52
  if (selectedShapes.length < 2) return false
43
53
 
44
54
  for (const shape of selectedShapes) {
45
- if (editor.isShapeOfType(shape, 'arrow')) {
55
+ if (editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) {
46
56
  const bindings = getArrowBindings(editor, shape)
47
57
  if (bindings.start) {
48
58
  // if the other shape is not among the selected shapes...
@@ -153,7 +163,7 @@ export function useShowAutoSizeToggle() {
153
163
  const selectedShapes = editor.getSelectedShapes()
154
164
  return (
155
165
  selectedShapes.length === 1 &&
156
- editor.isShapeOfType(selectedShapes[0], 'text') &&
166
+ editor.isShapeOfType<TLTextShape>(selectedShapes[0], 'text') &&
157
167
  selectedShapes[0].props.autoSize === false
158
168
  )
159
169
  },
@@ -186,11 +196,11 @@ export function useOnlyFlippableShape() {
186
196
  const shape = editor.getOnlySelectedShape()
187
197
  return (
188
198
  shape &&
189
- (editor.isShapeOfType(shape, 'group') ||
190
- editor.isShapeOfType(shape, 'image') ||
191
- editor.isShapeOfType(shape, 'arrow') ||
192
- editor.isShapeOfType(shape, 'line') ||
193
- editor.isShapeOfType(shape, 'draw'))
199
+ (editor.isShapeOfType<TLGroupShape>(shape, 'group') ||
200
+ editor.isShapeOfType<TLImageShape>(shape, 'image') ||
201
+ editor.isShapeOfType<TLArrowShape>(shape, 'arrow') ||
202
+ editor.isShapeOfType<TLLineShape>(shape, 'line') ||
203
+ editor.isShapeOfType<TLDrawShape>(shape, 'draw'))
194
204
  )
195
205
  },
196
206
  [editor]
@@ -783,9 +783,9 @@ export function useNativeClipboardEvents() {
783
783
  // | Y | N | Y |
784
784
  // | N | Y | Y |
785
785
  // | Y | Y | N |
786
- if (editor.inputs.getShiftKey()) pasteAtCursor = true
786
+ if (editor.inputs.shiftKey) pasteAtCursor = true
787
787
  if (editor.user.getIsPasteAtCursorMode()) pasteAtCursor = !pasteAtCursor
788
- if (pasteAtCursor) point = editor.inputs.getCurrentPagePoint()
788
+ if (pasteAtCursor) point = editor.inputs.currentPagePoint
789
789
 
790
790
  const pasteFromEvent = () => {
791
791
  if (e.clipboardData) {
@@ -3,6 +3,7 @@ import {
3
3
  Editor,
4
4
  IndexKey,
5
5
  TLImageAsset,
6
+ TLImageShape,
6
7
  TLShape,
7
8
  TLShapeId,
8
9
  Vec,
@@ -165,7 +166,7 @@ export async function flattenShapesToImages(
165
166
  const shapeId = createShapeId()
166
167
 
167
168
  // create an image shape in the same place as the shapes
168
- editor.createShape({
169
+ editor.createShape<TLImageShape>({
169
170
  id: shapeId,
170
171
  type: 'image',
171
172
  index,
@@ -93,7 +93,7 @@ export function useKeyboardShortcuts() {
93
93
 
94
94
  editor.inputs.keys.add('Comma')
95
95
 
96
- const { x, y, z } = editor.inputs.getCurrentPagePoint()
96
+ const { x, y, z } = editor.inputs.currentPagePoint
97
97
  const screenpoints = editor.pageToScreen({ x, y })
98
98
 
99
99
  const info: TLPointerEventInfo = {
@@ -120,7 +120,7 @@ export function useKeyboardShortcuts() {
120
120
 
121
121
  editor.inputs.keys.delete('Comma')
122
122
 
123
- const { x, y, z } = editor.inputs.getCurrentScreenPoint()
123
+ const { x, y, z } = editor.inputs.currentScreenPoint
124
124
  const info: TLPointerEventInfo = {
125
125
  type: 'pointer',
126
126
  name: 'pointer_up',
@@ -4,13 +4,13 @@ import {
4
4
  Editor,
5
5
  GeoShapeGeoStyle,
6
6
  getIndicesBetween,
7
+ TLLineShape,
7
8
  TLPointerEventInfo,
8
9
  TLShapeId,
9
10
  toRichText,
10
11
  useMaybeEditor,
11
12
  } from '@tldraw/editor'
12
13
  import * as React from 'react'
13
- import { startEditingShapeWithRichText } from '../../tools/SelectTool/selectHelpers'
14
14
  import { EmbedDialog } from '../components/EmbedDialog'
15
15
  import { TLUiIconJsx } from '../components/primitives/TldrawUiIcon'
16
16
  import { useA11y } from '../context/a11y'
@@ -195,7 +195,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
195
195
  onDragFromToolbarToCreateShape(editor, info, {
196
196
  createShape: (id) => {
197
197
  const [start, end] = getIndicesBetween(null, null, 2)
198
- editor.createShape({
198
+ editor.createShape<TLLineShape>({
199
199
  id,
200
200
  type: 'line',
201
201
  props: {
@@ -240,7 +240,8 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
240
240
  createShape: (id) =>
241
241
  editor.createShape({ id, type: 'text', props: { richText: toRichText('Text') } }),
242
242
  onDragEnd: (id) => {
243
- startEditingShapeWithRichText(editor, id, { selectAll: true })
243
+ editor.setEditingShape(id)
244
+ editor.emit('select-all-text', { shapeId: id })
244
245
  },
245
246
  })
246
247
  trackEvent('drag-tool', { source, id: 'text' })
@@ -269,7 +270,8 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
269
270
  onDragFromToolbarToCreateShape(editor, info, {
270
271
  createShape: (id) => editor.createShape({ id, type: 'note' }),
271
272
  onDragEnd: (id) => {
272
- startEditingShapeWithRichText(editor, id, { selectAll: true })
273
+ editor.setEditingShape(id)
274
+ editor.emit('select-all-text', { shapeId: id })
273
275
  },
274
276
  })
275
277
  trackEvent('drag-tool', { source, id: 'note' })
@@ -359,7 +361,7 @@ export function onDragFromToolbarToCreateShape(
359
361
  info: TLPointerEventInfo,
360
362
  opts: OnDragFromToolbarToCreateShapesOpts
361
363
  ) {
362
- const { x, y } = editor.inputs.getCurrentPagePoint()
364
+ const { x, y } = editor.inputs.currentPagePoint
363
365
 
364
366
  const stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')
365
367
  editor.setCurrentTool('select.translating')
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '4.2.2'
4
+ export const version = '4.2.3'
5
5
  export const publishDates = {
6
6
  major: '2025-09-18T14:39:22.803Z',
7
- minor: '2025-11-19T11:53:58.692Z',
8
- patch: '2026-01-07T11:19:27.083Z',
7
+ minor: '2025-11-19T11:47:45.748Z',
8
+ patch: '2026-01-08T10:11:20.530Z',
9
9
  }
package/src/lib/ui.css CHANGED
@@ -514,10 +514,12 @@
514
514
  /* If mobile use 16px as font size */
515
515
  /* On iOS, font size under 16px in an input will make the page zoom into the input 🤦‍♂️ */
516
516
  /* https://css-tricks.com/16px-or-larger-text-prevents-ios-form-zoom/ */
517
- @supports (-webkit-touch-callout: none) {
518
- /* CSS specific to iOS devices */
519
- .tlui-input {
520
- font-size: 16px;
517
+ @media (max-width: 600px) {
518
+ @supports (-webkit-touch-callout: none) {
519
+ /* CSS specific to iOS devices */
520
+ .tlui-input {
521
+ font-size: 16px;
522
+ }
521
523
  }
522
524
  }
523
525
 
@@ -609,31 +611,25 @@
609
611
 
610
612
  /* Submenu triggers */
611
613
 
612
- .tlui-menu__submenu__trigger {
613
- --gradient-angle: 90deg;
614
- }
615
-
616
- .tlui-menu__submenu__trigger[data-direction='left'] {
617
- --gradient-angle: 270deg;
614
+ .tlui-menu__submenu__trigger[data-state='open']::after {
615
+ opacity: 1;
616
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
618
617
  }
619
618
 
620
- .tlui-menu__submenu__trigger[data-state='open']::after {
619
+ .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
621
620
  opacity: 1;
622
- background: linear-gradient(
623
- var(--gradient-angle),
624
- rgba(144, 144, 144, 0) 0%,
625
- var(--tl-color-muted-2) 100%
626
- );
621
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
627
622
  }
628
623
 
629
624
  @media (hover: hover) {
630
- .tlui-menu__submenu__trigger:is(:hover, [data-state='open'])::after {
625
+ .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
631
626
  opacity: 1;
632
- background: linear-gradient(
633
- var(--gradient-angle),
634
- rgba(144, 144, 144, 0) 0%,
635
- var(--tl-color-muted-2) 100%
636
- );
627
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
628
+ }
629
+
630
+ .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
631
+ opacity: 1;
632
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
637
633
  }
638
634
  }
639
635
 
@@ -912,8 +908,10 @@
912
908
  }
913
909
  }
914
910
 
915
- .tl-container[data-coarse='true'] .tlui-page_menu__item__submenu > .tlui-button {
916
- opacity: 1;
911
+ @media (any-pointer: coarse) {
912
+ .tlui-page_menu__item__submenu > .tlui-button {
913
+ opacity: 1;
914
+ }
917
915
  }
918
916
 
919
917
  .tlui-button__icon {
@@ -952,15 +950,16 @@
952
950
 
953
951
  .tlui-offline-indicator {
954
952
  display: flex;
955
- color: var(--tl-color-background);
956
- background-color: var(--tl-color-text);
957
- border: none;
958
- width: 32px;
959
- height: 32px;
953
+ flex-direction: row;
954
+ gap: var(--tl-space-3);
955
+ color: var(--tl-color-text);
956
+ background-color: var(--tl-color-low);
957
+ border: 3px solid var(--tl-color-background);
958
+ padding: 0px var(--tl-space-5);
959
+ height: 42px;
960
960
  align-items: center;
961
961
  justify-content: center;
962
962
  border-radius: 99px;
963
- cursor: default;
964
963
  opacity: 0;
965
964
  animation: tl-fade-in;
966
965
  animation-duration: 0.12s;
@@ -1278,7 +1277,6 @@ tldraw? probably.
1278
1277
  position: relative;
1279
1278
  background: var(--tl-color-panel);
1280
1279
  box-shadow: var(--tl-shadow-2);
1281
- contain: layout style paint;
1282
1280
  }
1283
1281
 
1284
1282
  .tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
@@ -730,11 +730,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
730
730
  "isComplete": false,
731
731
  "isPen": false,
732
732
  "scale": 1,
733
- "scaleX": 1,
734
- "scaleY": 1,
735
733
  "segments": [
736
734
  {
737
- "points": "AAAAAAA4jgaOBgA4",
735
+ "points": [
736
+ {
737
+ "x": 0,
738
+ "y": 0,
739
+ "z": 0.5,
740
+ },
741
+ {
742
+ "x": 0.0001,
743
+ "y": 0.0001,
744
+ "z": 0.5,
745
+ },
746
+ ],
738
747
  "type": "free",
739
748
  },
740
749
  ],
@@ -761,11 +770,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
761
770
  "isComplete": false,
762
771
  "isPen": false,
763
772
  "scale": 1,
764
- "scaleX": 1,
765
- "scaleY": 1,
766
773
  "segments": [
767
774
  {
768
- "points": "AAAAAAA4jgaOBgA4",
775
+ "points": [
776
+ {
777
+ "x": 0,
778
+ "y": 0,
779
+ "z": 0.5,
780
+ },
781
+ {
782
+ "x": 0.0001,
783
+ "y": 0.0001,
784
+ "z": 0.5,
785
+ },
786
+ ],
769
787
  "type": "free",
770
788
  },
771
789
  ],
@@ -1375,11 +1393,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
1375
1393
  "isComplete": false,
1376
1394
  "isPen": false,
1377
1395
  "scale": 1,
1378
- "scaleX": 1,
1379
- "scaleY": 1,
1380
1396
  "segments": [
1381
1397
  {
1382
- "points": "AAAAAAA4jgaOBgA4",
1398
+ "points": [
1399
+ {
1400
+ "x": 0,
1401
+ "y": 0,
1402
+ "z": 0.5,
1403
+ },
1404
+ {
1405
+ "x": 0.0001,
1406
+ "y": 0.0001,
1407
+ "z": 0.5,
1408
+ },
1409
+ ],
1383
1410
  "type": "free",
1384
1411
  },
1385
1412
  ],
@@ -1406,11 +1433,20 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
1406
1433
  "isComplete": false,
1407
1434
  "isPen": false,
1408
1435
  "scale": 1,
1409
- "scaleX": 1,
1410
- "scaleY": 1,
1411
1436
  "segments": [
1412
1437
  {
1413
- "points": "AAAAAAA4jgaOBgA4",
1438
+ "points": [
1439
+ {
1440
+ "x": 0,
1441
+ "y": 0,
1442
+ "z": 0.5,
1443
+ },
1444
+ {
1445
+ "x": 0.0001,
1446
+ "y": 0.0001,
1447
+ "z": 0.5,
1448
+ },
1449
+ ],
1414
1450
  "type": "free",
1415
1451
  },
1416
1452
  ],
@@ -16,9 +16,7 @@ import {
16
16
  TLShapeId,
17
17
  Vec,
18
18
  VecLike,
19
- VecModel,
20
19
  ZERO_INDEX_KEY,
21
- b64Vecs,
22
20
  compact,
23
21
  createBindingId,
24
22
  createShapeId,
@@ -135,7 +133,6 @@ export async function putExcalidrawContent(
135
133
  ...base,
136
134
  type: 'geo',
137
135
  props: {
138
- ...editor.getShapeUtil('geo').getDefaultProps(),
139
136
  geo: element.type,
140
137
  url: element.link ?? '',
141
138
  w: element.width,
@@ -151,25 +148,21 @@ export async function putExcalidrawContent(
151
148
  break
152
149
  }
153
150
  case 'freedraw': {
154
- const points: VecModel[] = element.points.map(([x, y, z = 0.5]: number[]) => ({
155
- x,
156
- y,
157
- z,
158
- }))
159
- const base64Points = b64Vecs.encodePoints(points)
160
-
161
151
  tldrawContent.shapes.push({
162
152
  ...base,
163
153
  type: 'draw',
164
154
  props: {
165
- ...editor.getShapeUtil('draw').getDefaultProps(),
166
155
  dash: getDash(element),
167
156
  size: strokeWidthsToSizes[element.strokeWidth],
168
157
  color: colorsToColors[element.strokeColor] ?? 'black',
169
158
  segments: [
170
159
  {
171
160
  type: 'free',
172
- points: base64Points,
161
+ points: element.points.map(([x, y, z = 0.5]: number[]) => ({
162
+ x,
163
+ y,
164
+ z,
165
+ })),
173
166
  },
174
167
  ],
175
168
  },
@@ -187,7 +180,6 @@ export async function putExcalidrawContent(
187
180
  ...base,
188
181
  type: 'line',
189
182
  props: {
190
- ...editor.getShapeUtil('line').getDefaultProps(),
191
183
  dash: getDash(element),
192
184
  size: strokeWidthsToSizes[element.strokeWidth],
193
185
  color: colorsToColors[element.strokeColor] ?? 'black',
@@ -229,7 +221,6 @@ export async function putExcalidrawContent(
229
221
  ...base,
230
222
  type: 'arrow',
231
223
  props: {
232
- ...editor.getShapeUtil('arrow').getDefaultProps(),
233
224
  richText: toRichText(text),
234
225
  kind: element.elbowed ? 'elbow' : 'arc',
235
226
  bend: getBend(element, start, end),
@@ -252,7 +243,6 @@ export async function putExcalidrawContent(
252
243
  toId: startTargetId,
253
244
  props: {
254
245
  terminal: 'start',
255
- snap: 'none',
256
246
  normalizedAnchor: { x: 0.5, y: 0.5 },
257
247
  isPrecise: false,
258
248
  isExact: false,
@@ -269,7 +259,6 @@ export async function putExcalidrawContent(
269
259
  toId: endTargetId,
270
260
  props: {
271
261
  terminal: 'end',
272
- snap: 'none',
273
262
  normalizedAnchor: { x: 0.5, y: 0.5 },
274
263
  isPrecise: false,
275
264
  isExact: false,
@@ -286,7 +275,6 @@ export async function putExcalidrawContent(
286
275
  ...base,
287
276
  type: 'text',
288
277
  props: {
289
- ...editor.getShapeUtil('text').getDefaultProps(),
290
278
  size,
291
279
  scale,
292
280
  font: fontFamilyToFontType[element.fontFamily] ?? 'draw',
@@ -322,7 +310,6 @@ export async function putExcalidrawContent(
322
310
  ...base,
323
311
  type: 'image',
324
312
  props: {
325
- ...editor.getShapeUtil('image').getDefaultProps(),
326
313
  w: element.width,
327
314
  h: element.height,
328
315
  assetId,
@@ -334,7 +321,7 @@ export async function putExcalidrawContent(
334
321
  index = getIndexAbove(index)
335
322
  }
336
323
 
337
- const p = point ?? (editor.inputs.getShiftKey() ? editor.inputs.getCurrentPagePoint() : undefined)
324
+ const p = point ?? (editor.inputs.shiftKey ? editor.inputs.currentPagePoint : undefined)
338
325
 
339
326
  editor.putContentOntoCurrentPage(tldrawContent, {
340
327
  point: p,
@@ -1,4 +1,11 @@
1
- import { Editor, sanitizeId, TLExportType, TLImageExportOptions, TLShapeId } from '@tldraw/editor'
1
+ import {
2
+ Editor,
3
+ sanitizeId,
4
+ TLExportType,
5
+ TLFrameShape,
6
+ TLImageExportOptions,
7
+ TLShapeId,
8
+ } from '@tldraw/editor'
2
9
 
3
10
  /** @public */
4
11
  export interface ExportAsOptions extends TLImageExportOptions {
@@ -28,7 +35,7 @@ export async function exportAs(
28
35
  name = `shapes at ${getTimestamp()}`
29
36
  if (ids.length === 1) {
30
37
  const first = editor.getShape(ids[0])!
31
- if (editor.isShapeOfType(first, 'frame')) {
38
+ if (editor.isShapeOfType<TLFrameShape>(first, 'frame')) {
32
39
  name = first.props.name || 'frame'
33
40
  } else {
34
41
  name = `${sanitizeId(first.id)} at ${getTimestamp()}`