tldraw 3.15.1 → 3.16.0-canary.01f62b6d4455

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 (430) hide show
  1. package/dist-cjs/index.d.ts +271 -9
  2. package/dist-cjs/index.js +28 -2
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/canvas/TldrawCropHandles.js.map +2 -2
  5. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  6. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  7. package/dist-cjs/lib/defaultExternalContentHandlers.js +1 -0
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  9. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +25 -39
  10. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  11. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +16 -4
  12. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  13. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  14. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  15. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  16. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  17. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +3 -0
  18. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  19. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  20. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  21. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  22. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  23. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +12 -12
  24. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  25. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  26. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  27. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  28. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  29. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  30. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  31. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  32. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  33. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -3
  34. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +1 -1
  35. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +20 -2
  36. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  37. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  38. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  40. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  41. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  42. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  43. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  44. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  45. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  46. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  47. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  48. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  49. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  50. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  51. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  52. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +43 -22
  53. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  54. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -15
  55. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  56. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +5 -0
  57. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  58. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +8 -0
  59. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  60. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +8 -0
  61. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
  62. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +8 -0
  63. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  64. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
  65. package/dist-cjs/lib/ui/TldrawUi.js +14 -0
  66. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  67. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  68. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  69. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  70. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  71. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  72. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  73. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +40 -0
  74. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  75. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  76. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  77. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  78. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  80. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  81. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  82. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  83. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  84. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  85. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  86. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  87. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  88. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  89. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  90. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  91. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
  92. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  93. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  94. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  95. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  96. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  97. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  98. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  99. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  100. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  101. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  102. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  103. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  104. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  105. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  106. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  107. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
  108. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  109. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  110. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  111. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  112. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  113. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -0
  114. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  115. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
  116. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  117. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +268 -0
  118. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  119. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  120. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  121. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  122. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  123. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  124. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -20
  125. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  126. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  127. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  128. package/dist-cjs/lib/ui/context/actions.js +29 -7
  129. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  130. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  131. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  132. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  133. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  134. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  135. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +7 -0
  136. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  137. package/dist-cjs/lib/ui/kbd-utils.js +2 -1
  138. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  139. package/dist-cjs/lib/ui/version.js +3 -3
  140. package/dist-cjs/lib/ui/version.js.map +1 -1
  141. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
  142. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  143. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +3 -2
  144. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  145. package/dist-esm/index.d.mts +271 -9
  146. package/dist-esm/index.mjs +44 -3
  147. package/dist-esm/index.mjs.map +2 -2
  148. package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
  149. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  150. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  151. package/dist-esm/lib/defaultExternalContentHandlers.mjs +1 -0
  152. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  153. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +28 -39
  154. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  155. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +19 -5
  156. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  157. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  158. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  159. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  160. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  161. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +3 -0
  162. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  163. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  164. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  165. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  166. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  167. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +13 -12
  168. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  169. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  170. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  171. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  172. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  173. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  174. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  175. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  176. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  177. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -3
  178. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
  179. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +21 -2
  180. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  181. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  182. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  183. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  184. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  185. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  186. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  187. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  188. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  189. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  190. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  191. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  192. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  193. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  194. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  195. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  196. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +43 -22
  197. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  198. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -15
  199. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  200. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +5 -0
  201. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  202. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +8 -0
  203. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  204. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +8 -0
  205. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
  206. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +8 -0
  207. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  208. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
  209. package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
  210. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  211. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  212. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  213. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  214. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  215. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  216. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  217. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +40 -0
  218. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  219. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  220. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  221. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  222. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  223. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  224. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  225. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  226. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  227. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  228. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  229. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  230. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  231. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  232. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  233. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  234. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  235. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
  236. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  237. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  238. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  239. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  240. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  241. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  242. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  243. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  244. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  245. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  246. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  247. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  248. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  249. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  250. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  251. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
  252. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  253. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  254. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  255. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  256. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  257. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +1 -0
  258. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  259. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
  260. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  261. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +245 -0
  262. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  263. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  264. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  265. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  266. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  267. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  268. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -22
  269. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  270. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  271. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  272. package/dist-esm/lib/ui/context/actions.mjs +29 -7
  273. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  274. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  275. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  276. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  277. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  278. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +7 -0
  279. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  280. package/dist-esm/lib/ui/kbd-utils.mjs +2 -1
  281. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  282. package/dist-esm/lib/ui/version.mjs +3 -3
  283. package/dist-esm/lib/ui/version.mjs.map +1 -1
  284. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
  285. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  286. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +3 -2
  287. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  288. package/package.json +9 -33
  289. package/src/index.ts +32 -1
  290. package/src/lib/canvas/TldrawCropHandles.tsx +2 -0
  291. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  292. package/src/lib/defaultExternalContentHandlers.ts +2 -1
  293. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  294. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  295. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +12 -11
  296. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +29 -42
  297. package/src/lib/shapes/arrow/arrowLabel.ts +23 -3
  298. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  299. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  300. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +3 -0
  301. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  302. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  303. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  304. package/src/lib/shapes/frame/FrameShapeUtil.tsx +21 -14
  305. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  306. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  307. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  308. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  309. package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -3
  310. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  311. package/src/lib/shapes/line/LineShapeUtil.tsx +25 -3
  312. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  313. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  314. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  315. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  316. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  317. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  318. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  319. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  320. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  321. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  322. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +54 -30
  323. package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -24
  324. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +7 -0
  325. package/src/lib/tools/SelectTool/childStates/Resizing.ts +12 -1
  326. package/src/lib/tools/SelectTool/childStates/Rotating.ts +11 -0
  327. package/src/lib/tools/SelectTool/childStates/Translating.ts +11 -1
  328. package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -0
  329. package/src/lib/ui/TldrawUi.tsx +17 -2
  330. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  331. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  332. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  333. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +32 -0
  334. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  335. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  336. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  337. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  338. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  339. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  340. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  341. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  342. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
  343. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  344. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  345. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  346. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  347. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  348. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +17 -12
  349. package/src/lib/ui/components/menu-items.tsx +8 -0
  350. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
  351. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  352. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  353. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +1 -0
  354. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
  355. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +327 -0
  356. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  357. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  358. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  359. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +221 -19
  360. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  361. package/src/lib/ui/context/actions.tsx +29 -7
  362. package/src/lib/ui/context/events.tsx +4 -2
  363. package/src/lib/ui/hooks/menu-hooks.ts +1 -0
  364. package/src/lib/ui/hooks/useTools.tsx +140 -10
  365. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +7 -0
  366. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +7 -0
  367. package/src/lib/ui/kbd-utils.ts +2 -1
  368. package/src/lib/ui/version.ts +3 -3
  369. package/src/lib/ui.css +406 -292
  370. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +21 -7
  371. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
  372. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +28 -7
  373. package/src/lib/utils/tldr/buildFromV1Document.ts +2 -1
  374. package/src/test/A11y.test.tsx +3 -2
  375. package/src/test/ClickManager.test.ts +7 -6
  376. package/src/test/Editor.test.tsx +20 -19
  377. package/src/test/EraserTool.test.ts +184 -13
  378. package/src/test/HandTool.test.ts +10 -9
  379. package/src/test/HighlightShape.test.ts +2 -1
  380. package/src/test/SelectTool.test.ts +40 -13
  381. package/src/test/TLUserPreferences.test.ts +4 -3
  382. package/src/test/TestEditor.ts +13 -15
  383. package/src/test/TldrawEditor.test.tsx +11 -10
  384. package/src/test/ZoomTool.test.ts +7 -6
  385. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  386. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  387. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  388. package/src/test/arrows-megabus.test.tsx +17 -10
  389. package/src/test/bindings.test.tsx +24 -37
  390. package/src/test/bookmark-shapes.test.ts +1 -8
  391. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  392. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  393. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  394. package/src/test/commands/alignShapes.test.tsx +25 -24
  395. package/src/test/commands/animationSpeed.test.ts +2 -1
  396. package/src/test/commands/centerOnPoint.test.ts +3 -2
  397. package/src/test/commands/clipboard.test.ts +3 -2
  398. package/src/test/commands/createShapes.test.ts +2 -1
  399. package/src/test/commands/deletePage.test.ts +84 -1
  400. package/src/test/commands/deleteShapes.test.ts +2 -1
  401. package/src/test/commands/distributeShapes.test.tsx +11 -10
  402. package/src/test/commands/getSvgString.test.ts +2 -1
  403. package/src/test/commands/packShapes.test.ts +5 -4
  404. package/src/test/commands/resizeShape.test.ts +2 -1
  405. package/src/test/commands/rotateShapes.test.ts +7 -6
  406. package/src/test/commands/setCamera.test.ts +4 -3
  407. package/src/test/commands/setCurrentPage.test.ts +3 -2
  408. package/src/test/commands/stackShapes.test.ts +11 -10
  409. package/src/test/commands/stretch.test.tsx +13 -12
  410. package/src/test/createDeepLink.test.tsx +2 -1
  411. package/src/test/cropping.test.ts +3 -2
  412. package/src/test/drawing.test.ts +2 -1
  413. package/src/test/flipShapes.test.ts +4 -3
  414. package/src/test/frames.test.ts +25 -24
  415. package/src/test/getCulledShapes.test.tsx +3 -2
  416. package/src/test/groups.test.tsx +1 -1
  417. package/src/test/handleDeepLink.test.tsx +2 -1
  418. package/src/test/inner-outer-margin.test.ts +315 -0
  419. package/src/test/maxShapes.test.ts +3 -2
  420. package/src/test/modifiers.test.ts +5 -4
  421. package/src/test/navigation.test.ts +12 -11
  422. package/src/test/panning.test.ts +2 -1
  423. package/src/test/perf/perf.test.ts +2 -1
  424. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  425. package/src/test/resizing.test.ts +39 -38
  426. package/src/test/select.test.tsx +4 -3
  427. package/src/test/selection-omnibus.test.ts +11 -10
  428. package/src/test/shapeutils.test.ts +398 -48
  429. package/src/test/translating.test.ts +9 -8
  430. package/tldraw.css +703 -603
package/src/index.ts CHANGED
@@ -22,8 +22,19 @@ export {
22
22
  } from './lib/shapes/shared/PathBuilder'
23
23
  export { usePrefersReducedMotion } from './lib/shapes/shared/usePrefersReducedMotion'
24
24
  export { DefaultA11yAnnouncer, useSelectedShapesAnnouncer } from './lib/ui/components/A11y'
25
+ export { AccessibilityMenu } from './lib/ui/components/AccessibilityMenu'
25
26
  export { ColorSchemeMenu } from './lib/ui/components/ColorSchemeMenu'
26
27
  export { DefaultDialogs } from './lib/ui/components/Dialogs'
28
+ export {
29
+ TldrawUiColumn,
30
+ TldrawUiGrid,
31
+ TldrawUiOrientationProvider,
32
+ TldrawUiRow,
33
+ useTldrawUiOrientation,
34
+ type TldrawUiOrientationContext,
35
+ type TldrawUiOrientationProviderProps,
36
+ type TLUiLayoutProps,
37
+ } from './lib/ui/components/primitives/layout'
27
38
  export {
28
39
  TldrawUiMenuActionCheckboxItem,
29
40
  type TLUiMenuActionCheckboxItemProps,
@@ -41,6 +52,7 @@ export { TldrawUiTranslationProvider } from './lib/ui/hooks/useTranslation/useTr
41
52
  // eslint-disable-next-line local/no-export-star
42
53
  export * from '@tldraw/editor'
43
54
  export { ArrowBindingUtil } from './lib/bindings/arrow/ArrowBindingUtil'
55
+ export { TldrawCropHandles, type TldrawCropHandlesProps } from './lib/canvas/TldrawCropHandles'
44
56
  export { TldrawHandles } from './lib/canvas/TldrawHandles'
45
57
  export { TldrawArrowHints, TldrawOverlays } from './lib/canvas/TldrawOverlays'
46
58
  export { TldrawScribble } from './lib/canvas/TldrawScribble'
@@ -71,6 +83,7 @@ export {
71
83
  defaultHandleExternalTldrawContent,
72
84
  defaultHandleExternalUrlAsset,
73
85
  defaultHandleExternalUrlContent,
86
+ getAssetInfo,
74
87
  getMediaAssetInfoPartial,
75
88
  registerDefaultExternalContentHandlers,
76
89
  type TLDefaultExternalContentHandlerOpts,
@@ -153,6 +166,9 @@ export {
153
166
  type TLDefaultFont,
154
167
  type TLDefaultFonts,
155
168
  } from './lib/shapes/shared/defaultFonts'
169
+ export { getStrokePoints } from './lib/shapes/shared/freehand/getStrokePoints'
170
+ export { getSvgPathFromStrokePoints } from './lib/shapes/shared/freehand/svg'
171
+ export { type StrokeOptions, type StrokePoint } from './lib/shapes/shared/freehand/types'
156
172
  export {
157
173
  PlainTextLabel,
158
174
  TextLabel,
@@ -183,6 +199,7 @@ export { TldrawImage, type TldrawImageProps } from './lib/TldrawImage'
183
199
  export { EraserTool } from './lib/tools/EraserTool/EraserTool'
184
200
  export { HandTool } from './lib/tools/HandTool/HandTool'
185
201
  export { LaserTool } from './lib/tools/LaserTool/LaserTool'
202
+ export { getHitShapeOnCanvasPointerDown } from './lib/tools/selection-logic/getHitShapeOnCanvasPointerDown'
186
203
  export { SelectTool } from './lib/tools/SelectTool/SelectTool'
187
204
  export { ZoomTool } from './lib/tools/ZoomTool/ZoomTool'
188
205
  export {
@@ -250,6 +267,7 @@ export {
250
267
  EditSubmenu,
251
268
  ExportFileContentSubMenu,
252
269
  ExtrasGroup,
270
+ LockGroup,
253
271
  MiscMenuGroup,
254
272
  PreferencesGroup,
255
273
  UndoRedoGroup,
@@ -290,6 +308,7 @@ export {
290
308
  ToggleSnapModeItem,
291
309
  ToggleToolLockItem,
292
310
  ToggleTransparentBgMenuItem,
311
+ ToggleUiLabelsItem,
293
312
  ToggleWrapModeItem,
294
313
  UngroupMenuItem,
295
314
  UnlockAllMenuItem,
@@ -408,6 +427,12 @@ export {
408
427
  type TLUiToolbarToggleGroupProps,
409
428
  type TLUiToolbarToggleItemProps,
410
429
  } from './lib/ui/components/primitives/TldrawUiToolbar'
430
+ export {
431
+ TldrawUiTooltip,
432
+ TldrawUiTooltipProvider,
433
+ type TldrawUiTooltipProps,
434
+ type TldrawUiTooltipProviderProps,
435
+ } from './lib/ui/components/primitives/TldrawUiTooltip'
411
436
  export {
412
437
  DefaultQuickActions,
413
438
  type TLUiQuickActionsProps,
@@ -499,6 +524,10 @@ export {
499
524
  OverflowingToolbar,
500
525
  type OverflowingToolbarProps,
501
526
  } from './lib/ui/components/Toolbar/OverflowingToolbar'
527
+ export {
528
+ ToggleToolLockedButton,
529
+ type ToggleToolLockedButtonProps,
530
+ } from './lib/ui/components/Toolbar/ToggleToolLockedButton'
502
531
  export {
503
532
  CenteredTopPanelContainer,
504
533
  type CenteredTopPanelContainerProps,
@@ -568,7 +597,7 @@ export {
568
597
  type TLUiToastsContextType,
569
598
  type TLUiToastsProviderProps,
570
599
  } from './lib/ui/context/toasts'
571
- export { useCanRedo, useCanUndo } from './lib/ui/hooks/menu-hooks'
600
+ export { useCanRedo, useCanUndo, useUnlockedSelectedShapesCount } from './lib/ui/hooks/menu-hooks'
572
601
  export { useMenuClipboardEvents, useNativeClipboardEvents } from './lib/ui/hooks/useClipboardEvents'
573
602
  export {
574
603
  useCollaborationStatus,
@@ -582,7 +611,9 @@ export { useMenuIsOpen } from './lib/ui/hooks/useMenuIsOpen'
582
611
  export { useReadonly } from './lib/ui/hooks/useReadonly'
583
612
  export { useRelevantStyles } from './lib/ui/hooks/useRelevantStyles'
584
613
  export {
614
+ onDragFromToolbarToCreateShape,
585
615
  useTools,
616
+ type OnDragFromToolbarToCreateShapesOpts,
586
617
  type TLUiToolItem,
587
618
  type TLUiToolsContextType,
588
619
  type TLUiToolsProviderProps,
@@ -2,6 +2,7 @@ import { toDomPrecision } from '@tldraw/editor'
2
2
  import classNames from 'classnames'
3
3
  import { useTranslation } from '../ui/hooks/useTranslation/useTranslation'
4
4
 
5
+ /** @public */
5
6
  export interface TldrawCropHandlesProps {
6
7
  size: number
7
8
  width: number
@@ -9,6 +10,7 @@ export interface TldrawCropHandlesProps {
9
10
  hideAlternateHandles: boolean
10
11
  }
11
12
 
13
+ /** @public @react */
12
14
  export function TldrawCropHandles({
13
15
  size,
14
16
  width,
@@ -31,7 +31,7 @@ export function TldrawScribble({ scribble, zoom, color, opacity, className }: TL
31
31
  <path
32
32
  className="tl-scribble"
33
33
  d={d}
34
- fill={color ?? `var(--color-${scribble.color})`}
34
+ fill={color ?? `var(--tl-color-${scribble.color})`}
35
35
  opacity={opacity ?? scribble.opacity}
36
36
  />
37
37
  </svg>
@@ -915,7 +915,8 @@ function runFileChecks(file: File, options: TLDefaultExternalContentHandlerOpts)
915
915
  return true
916
916
  }
917
917
 
918
- async function getAssetInfo(
918
+ /** @public */
919
+ export async function getAssetInfo(
919
920
  file: File,
920
921
  options: TLDefaultExternalContentHandlerOpts,
921
922
  assetId?: TLAssetId
@@ -1,4 +1,5 @@
1
1
  import { TLArrowShape, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../../../test/TestEditor'
3
4
  import { ArrowShapeUtil } from './ArrowShapeUtil'
4
5
  import { updateArrowTargetState } from './arrowTargetState'
@@ -12,7 +13,7 @@ const ids = {
12
13
  arrow1: createShapeId('arrow1'),
13
14
  }
14
15
 
15
- jest.useFakeTimers()
16
+ vi.useFakeTimers()
16
17
 
17
18
  window.requestAnimationFrame = function requestAnimationFrame(cb) {
18
19
  return setTimeout(cb, 1000 / 60)
@@ -1,4 +1,5 @@
1
1
  import { IndexKey, TLArrowShape, TLShapeId, Vec, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../../../test/TestEditor'
3
4
  import { getArrowTargetState } from './arrowTargetState'
4
5
  import { getArrowBindings } from './shared'
@@ -13,7 +14,7 @@ global.cancelAnimationFrame = function cancelAnimationFrame(id) {
13
14
  clearTimeout(id)
14
15
  }
15
16
 
16
- jest.useFakeTimers()
17
+ vi.useFakeTimers()
17
18
 
18
19
  const ids = {
19
20
  box1: createShapeId('box1'),
@@ -242,7 +243,7 @@ describe('When pointing an end shape', () => {
242
243
  },
243
244
  })
244
245
 
245
- jest.advanceTimersByTime(1000)
246
+ vi.advanceTimersByTime(1000)
246
247
 
247
248
  arrow = editor.getCurrentPageShapes()[editor.getCurrentPageShapes().length - 1]
248
249
 
@@ -306,7 +307,7 @@ describe('When pointing an end shape', () => {
306
307
  })
307
308
 
308
309
  // Give time for the velocity to die down
309
- jest.advanceTimersByTime(1000)
310
+ vi.advanceTimersByTime(1000)
310
311
 
311
312
  arrow = editor.getCurrentPageShapes()[editor.getCurrentPageShapes().length - 1]
312
313
 
@@ -1,4 +1,5 @@
1
- import { HALF_PI, TLArrowShape, TLShapeId, createShapeId } from '@tldraw/editor'
1
+ import { HALF_PI, TLArrowShape, TLShapeId, createShapeId, toRichText } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../../../test/TestEditor'
3
4
  import { createOrUpdateArrowBinding, getArrowBindings } from './shared'
4
5
 
@@ -12,7 +13,7 @@ const ids = {
12
13
  arrow1: createShapeId('arrow1'),
13
14
  }
14
15
 
15
- jest.useFakeTimers()
16
+ vi.useFakeTimers()
16
17
 
17
18
  window.requestAnimationFrame = function requestAnimationFrame(cb) {
18
19
  return setTimeout(cb, 1000 / 60)
@@ -217,7 +218,7 @@ describe('Other cases when arrow are moved', () => {
217
218
  // When box one is not selected, unbinds box1 and keeps binding to box2
218
219
  editor.select(ids.arrow1, ids.box2, ids.box3)
219
220
  editor.alignShapes(editor.getSelectedShapeIds(), 'right')
220
- jest.advanceTimersByTime(1000)
221
+ vi.advanceTimersByTime(1000)
221
222
 
222
223
  expect(bindings()).toMatchObject({
223
224
  start: { toId: ids.box1, props: { isPrecise: false } },
@@ -227,7 +228,7 @@ describe('Other cases when arrow are moved', () => {
227
228
  // maintains bindings if they would still be over the same shape (but makes them precise), but unbinds others
228
229
  editor.select(ids.arrow1, ids.box3)
229
230
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
230
- jest.advanceTimersByTime(1000)
231
+ vi.advanceTimersByTime(1000)
231
232
 
232
233
  expect(bindings()).toMatchObject({
233
234
  start: { toId: ids.box1, props: { isPrecise: true } },
@@ -244,7 +245,7 @@ describe('Other cases when arrow are moved', () => {
244
245
  // When box one is not selected, unbinds box1 and keeps binding to box2
245
246
  editor.select(ids.arrow1, ids.box2, ids.box3)
246
247
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
247
- jest.advanceTimersByTime(1000)
248
+ vi.advanceTimersByTime(1000)
248
249
 
249
250
  expect(bindings()).toMatchObject({
250
251
  start: { toId: ids.box1, props: { isPrecise: false } },
@@ -254,7 +255,7 @@ describe('Other cases when arrow are moved', () => {
254
255
  // unbinds when only the arrow is selected (not its bound shapes) if the arrow itself has moved
255
256
  editor.select(ids.arrow1, ids.box3, ids.box4)
256
257
  editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
257
- jest.advanceTimersByTime(1000)
258
+ vi.advanceTimersByTime(1000)
258
259
 
259
260
  // The arrow didn't actually move
260
261
  expect(bindings()).toMatchObject({
@@ -265,7 +266,7 @@ describe('Other cases when arrow are moved', () => {
265
266
  // The arrow will not move because it is still bound to another shape
266
267
  editor.updateShapes([{ id: ids.box4, type: 'geo', y: -600 }])
267
268
  editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
268
- jest.advanceTimersByTime(1000)
269
+ vi.advanceTimersByTime(1000)
269
270
 
270
271
  expect(bindings()).toMatchObject({
271
272
  start: undefined,
@@ -333,7 +334,7 @@ describe('Arrow labels', () => {
333
334
  editor.setCurrentTool('arrow').pointerDown(10, 10).pointerMove(100, 100).pointerUp()
334
335
  const arrowId = editor.getOnlySelectedShape()!.id
335
336
  editor.updateShapes<TLArrowShape>([
336
- { id: arrowId, type: 'arrow', props: { text: 'Test Label' } },
337
+ { id: arrowId, type: 'arrow', props: { richText: toRichText('Test Label') } },
337
338
  ])
338
339
  })
339
340
 
@@ -341,7 +342,7 @@ describe('Arrow labels', () => {
341
342
  const arrowId = editor.getOnlySelectedShape()!.id
342
343
  expect(arrow(arrowId)).toMatchObject({
343
344
  props: {
344
- text: 'Test Label',
345
+ richText: toRichText('Test Label'),
345
346
  },
346
347
  })
347
348
  })
@@ -349,11 +350,11 @@ describe('Arrow labels', () => {
349
350
  it('should update the label of an arrow', () => {
350
351
  const arrowId = editor.getOnlySelectedShape()!.id
351
352
  editor.updateShapes<TLArrowShape>([
352
- { id: arrowId, type: 'arrow', props: { text: 'New Label' } },
353
+ { id: arrowId, type: 'arrow', props: { richText: toRichText('New Label') } },
353
354
  ])
354
355
  expect(arrow(arrowId)).toMatchObject({
355
356
  props: {
356
- text: 'New Label',
357
+ richText: toRichText('New Label'),
357
358
  },
358
359
  })
359
360
  })
@@ -31,13 +31,16 @@ import {
31
31
  clamp,
32
32
  debugFlags,
33
33
  exhaustiveSwitchError,
34
+ getColorValue,
34
35
  getDefaultColorTheme,
36
+ getFontsFromRichText,
35
37
  invLerp,
36
38
  lerp,
37
39
  mapObjectMapValues,
38
40
  maybeSnapToGrid,
39
41
  structuredClone,
40
42
  toDomPrecision,
43
+ toRichText,
41
44
  track,
42
45
  useEditor,
43
46
  useIsEditing,
@@ -46,12 +49,11 @@ import {
46
49
  } from '@tldraw/editor'
47
50
  import React, { useMemo } from 'react'
48
51
  import { updateArrowTerminal } from '../../bindings/arrow/ArrowBindingUtil'
52
+ import { isEmptyRichText, renderPlaintextFromRichText } from '../../utils/text/richText'
49
53
  import { PathBuilder } from '../shared/PathBuilder'
50
- import { PlainTextLabel } from '../shared/PlainTextLabel'
54
+ import { RichTextLabel, RichTextSVG } from '../shared/RichTextLabel'
51
55
  import { ShapeFill } from '../shared/ShapeFill'
52
- import { SvgTextLabel } from '../shared/SvgTextLabel'
53
56
  import { ARROW_LABEL_PADDING, STROKE_SIZES, TEXT_PROPS } from '../shared/default-shape-constants'
54
- import { DefaultFontFaces } from '../shared/defaultFonts'
55
57
  import { getFillDefForCanvas, getFillDefForExport } from '../shared/defaultStyleDefs'
56
58
  import { useDefaultColorTheme } from '../shared/useDefaultColorTheme'
57
59
  import { getArrowBodyPath, getArrowHandlePath } from './ArrowPath'
@@ -156,8 +158,13 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
156
158
  }
157
159
 
158
160
  override getFontFaces(shape: TLArrowShape) {
159
- if (!shape.props.text) return EMPTY_ARRAY
160
- return [DefaultFontFaces[`tldraw_${shape.props.font}`].normal.normal]
161
+ if (isEmptyRichText(shape.props.richText)) return EMPTY_ARRAY
162
+
163
+ return getFontsFromRichText(this.editor, shape.props.richText, {
164
+ family: `tldraw_${shape.props.font}`,
165
+ weight: 'normal',
166
+ style: 'normal',
167
+ })
161
168
  }
162
169
 
163
170
  override getDefaultProps(): TLArrowShape['props'] {
@@ -174,7 +181,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
174
181
  end: { x: 2, y: 0 },
175
182
  arrowheadStart: 'none',
176
183
  arrowheadEnd: 'arrow',
177
- text: '',
184
+ richText: toRichText(''),
178
185
  labelPosition: 0.5,
179
186
  font: 'draw',
180
187
  scale: 1,
@@ -204,7 +211,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
204
211
  : new Polyline2d({ points: info.route.points })
205
212
 
206
213
  let labelGeom
207
- if (isEditing || shape.props.text.trim()) {
214
+ if (isEditing || !isEmptyRichText(shape.props.richText)) {
208
215
  const labelPosition = getArrowLabelPosition(this.editor, shape)
209
216
  if (debugFlags.debugGeometry.get()) {
210
217
  debugGeom.push(...labelPosition.debugGeom)
@@ -276,7 +283,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
276
283
  }
277
284
 
278
285
  override getText(shape: TLArrowShape) {
279
- return shape.props.text
286
+ return renderPlaintextFromRichText(this.editor, shape.props.richText)
280
287
  }
281
288
 
282
289
  override onHandleDrag(shape: TLArrowShape, info: TLHandleDragInfo<TLArrowShape>) {
@@ -757,7 +764,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
757
764
  const labelPosition = getArrowLabelPosition(this.editor, shape)
758
765
  const isSelected = shape.id === this.editor.getOnlySelectedShapeId()
759
766
  const isEditing = this.editor.getEditingShapeId() === shape.id
760
- const showArrowLabel = isEditing || shape.props.text
767
+ const showArrowLabel = isEditing || !isEmptyRichText(shape.props.richText)
761
768
 
762
769
  return (
763
770
  <>
@@ -771,17 +778,16 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
771
778
  )}
772
779
  </SVGContainer>
773
780
  {showArrowLabel && (
774
- <PlainTextLabel
781
+ <RichTextLabel
775
782
  shapeId={shape.id}
776
- classNamePrefix="tl-arrow"
777
783
  type="arrow"
778
784
  font={shape.props.font}
779
785
  fontSize={getArrowLabelFontSize(shape)}
780
786
  lineHeight={TEXT_PROPS.lineHeight}
781
787
  align="middle"
782
788
  verticalAlign="middle"
783
- text={shape.props.text}
784
- labelColor={theme[shape.props.labelColor].solid}
789
+ labelColor={getColorValue(theme, shape.props.labelColor, 'solid')}
790
+ richText={shape.props.richText}
785
791
  textWidth={labelPosition.box.w - ARROW_LABEL_PADDING * 2 * shape.props.scale}
786
792
  isSelected={isSelected}
787
793
  padding={0}
@@ -806,9 +812,9 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
806
812
  const { start, end } = getArrowTerminalsInArrowSpace(this.editor, shape, info?.bindings)
807
813
  const geometry = this.editor.getShapeGeometry<Group2d>(shape)
808
814
  const bounds = geometry.bounds
815
+ const isEmpty = isEmptyRichText(shape.props.richText)
809
816
 
810
- const labelGeometry =
811
- isEditing || shape.props.text.trim() ? (geometry.children[1] as Rectangle2d) : null
817
+ const labelGeometry = isEditing || !isEmpty ? (geometry.children[1] as Rectangle2d) : null
812
818
 
813
819
  if (Vec.Equals(start, end)) return null
814
820
 
@@ -847,7 +853,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
847
853
  <defs>
848
854
  <ArrowClipPath
849
855
  radius={3.5 * shape.props.scale}
850
- hasText={shape.props.text.trim().length > 0}
856
+ hasText={!isEmpty}
851
857
  bounds={bounds}
852
858
  labelBounds={labelBounds}
853
859
  as={clipStartArrowhead && as ? as : ''}
@@ -905,7 +911,7 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
905
911
  }
906
912
 
907
913
  override onEditStart(shape: TLArrowShape) {
908
- if (shape.props.text.trim() === '') {
914
+ if (isEmptyRichText(shape.props.richText)) {
909
915
  // editing text for the first time, so set the position to the default:
910
916
  const labelPosition = getArrowLabelDefaultPosition(this.editor, shape)
911
917
  this.editor.updateShape<TLArrowShape>({
@@ -916,26 +922,6 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
916
922
  }
917
923
  }
918
924
 
919
- override onEditEnd(shape: TLArrowShape) {
920
- const {
921
- id,
922
- type,
923
- props: { text },
924
- } = shape
925
-
926
- if (text.trimEnd() !== shape.props.text) {
927
- this.editor.updateShapes<TLArrowShape>([
928
- {
929
- id,
930
- type,
931
- props: {
932
- text: text.trimEnd(),
933
- },
934
- },
935
- ])
936
- }
937
- }
938
-
939
925
  override toSvg(shape: TLArrowShape, ctx: SvgExportContext) {
940
926
  ctx.addExportDef(getFillDefForExport(shape.props.fill))
941
927
  const theme = getDefaultColorTheme(ctx)
@@ -944,13 +930,13 @@ export class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
944
930
  return (
945
931
  <g transform={`scale(${scaleFactor})`}>
946
932
  <ArrowSvg shape={shape} shouldDisplayHandles={false} />
947
- <SvgTextLabel
933
+ <RichTextSVG
948
934
  fontSize={getArrowLabelFontSize(shape)}
949
935
  font={shape.props.font}
950
936
  align="middle"
951
937
  verticalAlign="middle"
952
- text={shape.props.text}
953
- labelColor={theme[shape.props.labelColor].solid}
938
+ labelColor={getColorValue(theme, shape.props.labelColor, 'solid')}
939
+ richText={shape.props.richText}
954
940
  bounds={getArrowLabelPosition(this.editor, shape)
955
941
  .box.clone()
956
942
  .expandBy(-ARROW_LABEL_PADDING * shape.props.scale)}
@@ -1031,6 +1017,7 @@ const ArrowSvg = track(function ArrowSvg({
1031
1017
  if (!geometry) return null
1032
1018
  const bounds = Box.ZeroFix(geometry.bounds)
1033
1019
  const bindings = getArrowBindings(editor, shape)
1020
+ const isEmpty = isEmptyRichText(shape.props.richText)
1034
1021
 
1035
1022
  if (!info?.isValid) return null
1036
1023
 
@@ -1081,7 +1068,7 @@ const ArrowSvg = track(function ArrowSvg({
1081
1068
  <clipPath id={clipPathId}>
1082
1069
  <ArrowClipPath
1083
1070
  radius={3.5 * shape.props.scale}
1084
- hasText={isEditing || shape.props.text.trim().length > 0}
1071
+ hasText={isEditing || !isEmpty}
1085
1072
  bounds={bounds}
1086
1073
  labelBounds={labelPosition.box}
1087
1074
  as={clipStartArrowhead && as ? as : ''}
@@ -1091,7 +1078,7 @@ const ArrowSvg = track(function ArrowSvg({
1091
1078
  </defs>
1092
1079
  <g
1093
1080
  fill="none"
1094
- stroke={theme[shape.props.color].solid}
1081
+ stroke={getColorValue(theme, shape.props.color, 'solid')}
1095
1082
  strokeWidth={strokeWidth}
1096
1083
  strokeLinejoin="round"
1097
1084
  strokeLinecap="round"
@@ -9,13 +9,17 @@ import {
9
9
  Polygon2d,
10
10
  Polyline2d,
11
11
  TLArrowShape,
12
+ TLShape,
12
13
  Vec,
13
14
  VecLike,
14
15
  clamp,
15
16
  createComputedCache,
16
17
  exhaustiveSwitchError,
17
18
  getChangedKeys,
19
+ pointInPolygon,
20
+ toRichText,
18
21
  } from '@tldraw/editor'
22
+ import { isEmptyRichText, renderHtmlFromRichTextForMeasurement } from '../../utils/text/richText'
19
23
  import {
20
24
  ARROW_LABEL_FONT_SIZES,
21
25
  ARROW_LABEL_PADDING,
@@ -59,14 +63,18 @@ const labelSizeCache = createComputedCache(
59
63
 
60
64
  const bodyGeom = getArrowBodyGeometry(editor, shape)
61
65
  // We use 'i' as a default label to measure against as a minimum width.
62
- const text = shape.props.text || 'i'
66
+ const isEmpty = isEmptyRichText(shape.props.richText)
67
+ const html = renderHtmlFromRichTextForMeasurement(
68
+ editor,
69
+ isEmpty ? toRichText('i') : shape.props.richText
70
+ )
63
71
 
64
72
  const bodyBounds = bodyGeom.bounds
65
73
 
66
74
  const fontSize = getArrowLabelFontSize(shape)
67
75
 
68
76
  // First we measure the text with no constraints
69
- const { w, h } = editor.textMeasure.measureText(text, {
77
+ const { w, h } = editor.textMeasure.measureHtml(html, {
70
78
  ...TEXT_PROPS,
71
79
  fontFamily: FONT_FAMILIES[shape.props.font],
72
80
  fontSize,
@@ -96,7 +104,7 @@ const labelSizeCache = createComputedCache(
96
104
  }
97
105
 
98
106
  if (shouldSquish) {
99
- const { w: squishedWidth, h: squishedHeight } = editor.textMeasure.measureText(text, {
107
+ const { w: squishedWidth, h: squishedHeight } = editor.textMeasure.measureHtml(html, {
100
108
  ...TEXT_PROPS,
101
109
  fontFamily: FONT_FAMILIES[shape.props.font],
102
110
  fontSize,
@@ -292,3 +300,15 @@ export function getArrowLabelDefaultPosition(editor: Editor, shape: TLArrowShape
292
300
  exhaustiveSwitchError(info, 'type')
293
301
  }
294
302
  }
303
+
304
+ /** @internal */
305
+ export function isOverArrowLabel(editor: Editor, shape: TLShape) {
306
+ if (!editor.isShapeOfType<TLArrowShape>(shape, 'arrow')) return false
307
+
308
+ const pointInShapeSpace = editor.getPointInShapeSpace(shape, editor.inputs.currentPagePoint)
309
+ // How should we handle multiple labels? Do shapes ever have multiple labels?
310
+ const labelGeometry = editor.getShapeGeometry<Group2d>(shape).children[1]
311
+ // Knowing what we know about arrows... if the shape has no text in its label,
312
+ // then the label geometry should not be there.
313
+ return labelGeometry && pointInPolygon(pointInShapeSpace, labelGeometry.vertices)
314
+ }
@@ -94,7 +94,7 @@ export function updateArrowTargetState({
94
94
  const target = editor.getShapeAtPoint(pointInPageSpace, {
95
95
  hitInside: true,
96
96
  hitFrameInside: true,
97
- margin: arrowKind === 'elbow' ? 8 : 0,
97
+ margin: arrowKind === 'elbow' ? 8 : [8, 0],
98
98
  filter: (targetShape) => {
99
99
  return (
100
100
  !targetShape.isLocked &&
@@ -187,6 +187,7 @@ export function updateArrowTargetState({
187
187
  }
188
188
 
189
189
  const shouldSnapCenter = !isExact && precise && targetGeometryInTargetSpace.isClosed
190
+ // const shouldSnapEdges = !isExact && (precise || !targetGeometryInTargetSpace.isClosed)
190
191
  const shouldSnapEdges =
191
192
  !isExact && ((precise && arrowKind === 'elbow') || !targetGeometryInTargetSpace.isClosed)
192
193
  const shouldSnapEdgePoints =
@@ -98,7 +98,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
98
98
  y={fullBox.minY - 3}
99
99
  fontSize={10}
100
100
  fill="black"
101
- stroke="var(--color-background)"
101
+ stroke="var(--tl-color-background)"
102
102
  strokeWidth={2}
103
103
  paintOrder="stroke"
104
104
  >
@@ -109,7 +109,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
109
109
  y={info.A.expanded.y}
110
110
  fontSize={10}
111
111
  fill="black"
112
- stroke="var(--color-background)"
112
+ stroke="var(--tl-color-background)"
113
113
  strokeWidth={2}
114
114
  paintOrder="stroke"
115
115
  >
@@ -121,7 +121,7 @@ export function ElbowArrowDebug({ arrow }: { arrow: TLArrowShape }) {
121
121
  y={info.B.expanded.y}
122
122
  fontSize={10}
123
123
  fill="black"
124
- stroke="var(--color-background)"
124
+ stroke="var(--tl-color-background)"
125
125
  strokeWidth={2}
126
126
  paintOrder="stroke"
127
127
  >
@@ -118,6 +118,7 @@ export class Pointing extends StateNode {
118
118
  const change = util.onHandleDrag?.(shape, {
119
119
  handle: { ...startHandle, x: 0, y: 0 },
120
120
  isPrecise: true,
121
+ isCreatingShape: true,
121
122
  initial: initial,
122
123
  })
123
124
 
@@ -145,6 +146,7 @@ export class Pointing extends StateNode {
145
146
  const change = util.onHandleDrag?.(shape, {
146
147
  handle: { ...startHandle, x: 0, y: 0 },
147
148
  isPrecise: this.isPrecise,
149
+ isCreatingShape: true,
148
150
  initial: initial,
149
151
  })
150
152
 
@@ -162,6 +164,7 @@ export class Pointing extends StateNode {
162
164
  const change = util.onHandleDrag?.(this.editor.getShape(shape)!, {
163
165
  handle: { ...endHandle, x: point.x, y: point.y },
164
166
  isPrecise: false,
167
+ isCreatingShape: true,
165
168
  initial: initial,
166
169
  })
167
170
 
@@ -1,5 +1,4 @@
1
1
  import { TestEditor } from '../../../test/TestEditor'
2
- import { DrawShapeTool } from './DrawShapeTool'
3
2
 
4
3
  let editor: TestEditor
5
4
 
@@ -10,10 +9,6 @@ afterEach(() => {
10
9
  editor?.dispose()
11
10
  })
12
11
 
13
- describe(DrawShapeTool, () => {
14
- return
15
- })
16
-
17
12
  describe('When in the idle state', () => {
18
13
  it('Returns to select on cancel', () => {
19
14
  editor.setCurrentTool('draw')
@@ -14,6 +14,7 @@ import {
14
14
  VecLike,
15
15
  drawShapeMigrations,
16
16
  drawShapeProps,
17
+ getColorValue,
17
18
  last,
18
19
  lerp,
19
20
  rng,
@@ -289,7 +290,7 @@ function DrawShapeSvg({ shape, zoomOverride }: { shape: TLDrawShape; zoomOverrid
289
290
  <path
290
291
  d={svgInk(allPointsFromSegments, options)}
291
292
  strokeLinecap="round"
292
- fill={theme[shape.props.color].solid}
293
+ fill={getColorValue(theme, shape.props.color, 'solid')}
293
294
  />
294
295
  </>
295
296
  )
@@ -313,8 +314,8 @@ function DrawShapeSvg({ shape, zoomOverride }: { shape: TLDrawShape; zoomOverrid
313
314
  <path
314
315
  d={solidStrokePath}
315
316
  strokeLinecap="round"
316
- fill={isDot ? theme[shape.props.color].solid : 'none'}
317
- stroke={theme[shape.props.color].solid}
317
+ fill={isDot ? getColorValue(theme, shape.props.color, 'solid') : 'none'}
318
+ stroke={getColorValue(theme, shape.props.color, 'solid')}
318
319
  strokeWidth={sw}
319
320
  strokeDasharray={isDot ? 'none' : getDrawShapeStrokeDashArray(shape, sw, dotAdjustment)}
320
321
  strokeDashoffset="0"
@@ -144,7 +144,7 @@ export class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
144
144
  border: 0,
145
145
  boxShadow: getRotatedBoxShadow(pageRotation),
146
146
  borderRadius: embedInfo?.definition.overrideOutlineRadius ?? 8,
147
- background: embedInfo?.definition.backgroundColor ?? 'var(--color-background)',
147
+ background: embedInfo?.definition.backgroundColor ?? 'var(--tl-color-background)',
148
148
  width: w,
149
149
  height: h,
150
150
  }}