tldraw 4.3.0-next.f4772c19540d → 4.4.0-canary.29afdff6bb04

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