tldraw 3.16.0-canary.ca347c5375a5 → 3.16.0-canary.cd9f62cbecbb

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 (278) hide show
  1. package/dist-cjs/index.d.ts +130 -6
  2. package/dist-cjs/index.js +14 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  5. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  6. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
  7. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  8. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  9. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  11. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  12. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  13. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  14. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  15. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  16. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +12 -12
  17. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  18. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  19. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  20. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  21. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  23. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  24. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  25. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  26. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -3
  27. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +1 -1
  28. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  29. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  30. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  31. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  33. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  34. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  35. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  36. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  37. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  38. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  39. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  40. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  41. package/dist-cjs/lib/ui/TldrawUi.js +14 -0
  42. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  43. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  44. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  45. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  46. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  47. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  48. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  49. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  50. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  51. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  52. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  53. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  54. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  56. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  58. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  60. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  61. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  62. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  63. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  64. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  65. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
  66. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  67. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  68. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  69. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  70. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  71. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  72. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  73. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  74. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  75. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  76. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  77. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  78. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  80. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  81. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
  82. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  83. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  84. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  85. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  86. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  87. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
  88. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  89. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +253 -0
  90. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  91. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  92. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  93. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  94. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  95. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  96. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +153 -20
  97. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  98. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  99. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  100. package/dist-cjs/lib/ui/context/actions.js +15 -0
  101. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  102. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  103. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  104. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  105. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  106. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +3 -0
  107. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  108. package/dist-cjs/lib/ui/version.js +3 -3
  109. package/dist-cjs/lib/ui/version.js.map +1 -1
  110. package/dist-esm/index.d.mts +130 -6
  111. package/dist-esm/index.mjs +25 -1
  112. package/dist-esm/index.mjs.map +2 -2
  113. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  114. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  115. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  116. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  117. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  118. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  119. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  120. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  121. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  122. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  123. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  124. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  125. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +13 -12
  126. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  127. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  128. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  129. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  130. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  131. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  132. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  133. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  134. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  135. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -3
  136. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
  137. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  138. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  139. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  140. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  141. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  142. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  143. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  144. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  145. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  146. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  147. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  148. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  149. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  150. package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
  151. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  152. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  153. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  154. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  155. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  156. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  157. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  158. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  159. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  160. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  161. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  162. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  163. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  164. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  165. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  166. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  167. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  168. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  169. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  170. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  171. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  172. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  173. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  174. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
  175. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  176. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  177. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  178. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  179. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  180. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  181. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  182. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  183. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  184. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  185. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  186. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  187. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  188. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  189. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  190. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
  191. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  192. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  193. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  194. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  195. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  196. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
  197. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  198. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +230 -0
  199. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  200. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  201. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  202. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  203. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  204. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  205. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +161 -22
  206. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  207. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  208. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  209. package/dist-esm/lib/ui/context/actions.mjs +15 -0
  210. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  211. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  212. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  213. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  214. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +3 -0
  215. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  216. package/dist-esm/lib/ui/version.mjs +3 -3
  217. package/dist-esm/lib/ui/version.mjs.map +1 -1
  218. package/package.json +3 -3
  219. package/src/index.ts +20 -0
  220. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  221. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  222. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  223. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  224. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  225. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  226. package/src/lib/shapes/frame/FrameShapeUtil.tsx +21 -14
  227. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  228. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  229. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  230. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  231. package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -3
  232. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  233. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  234. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  235. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  236. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  237. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  238. package/src/lib/tools/SelectTool/childStates/Translating.ts +0 -1
  239. package/src/lib/ui/TldrawUi.tsx +17 -2
  240. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  241. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  242. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  243. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  244. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  245. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  246. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  247. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  248. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  249. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  250. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  251. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
  252. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  253. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  254. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  255. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  256. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  257. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  258. package/src/lib/ui/components/menu-items.tsx +8 -0
  259. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
  260. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  261. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  262. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
  263. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +301 -0
  264. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  265. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  266. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  267. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +220 -19
  268. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  269. package/src/lib/ui/context/actions.tsx +15 -0
  270. package/src/lib/ui/context/events.tsx +2 -0
  271. package/src/lib/ui/hooks/useTools.tsx +140 -10
  272. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +3 -0
  273. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +3 -0
  274. package/src/lib/ui/version.ts +3 -3
  275. package/src/lib/ui.css +406 -292
  276. package/src/test/arrows-megabus.test.tsx +12 -6
  277. package/src/test/inner-outer-margin.test.ts +315 -0
  278. package/tldraw.css +699 -580
@@ -36,6 +36,7 @@ var import_TldrawUiButtonLabel = require("../Button/TldrawUiButtonLabel");
36
36
  var import_TldrawUiDropdownMenu = require("../TldrawUiDropdownMenu");
37
37
  var import_TldrawUiKbd = require("../TldrawUiKbd");
38
38
  var import_TldrawUiToolbar = require("../TldrawUiToolbar");
39
+ var import_TldrawUiTooltip = require("../TldrawUiTooltip");
39
40
  var import_TldrawUiMenuContext = require("./TldrawUiMenuContext");
40
41
  function TldrawUiMenuItem({
41
42
  disabled = false,
@@ -48,7 +49,8 @@ function TldrawUiMenuItem({
48
49
  iconLeft,
49
50
  onSelect,
50
51
  noClose,
51
- isSelected
52
+ isSelected,
53
+ onDragStart
52
54
  }) {
53
55
  const { type: menuType, sourceId } = (0, import_TldrawUiMenuContext.useTldrawUiMenuContext)();
54
56
  const msg = (0, import_useTranslation.useTranslation)();
@@ -67,7 +69,6 @@ function TldrawUiMenuItem({
67
69
  type: "menu",
68
70
  "data-testid": `${sourceId}.${id}`,
69
71
  disabled,
70
- title: titleStr,
71
72
  onClick: (e) => {
72
73
  if (noClose) {
73
74
  (0, import_editor.preventDefault)(e);
@@ -92,7 +93,6 @@ function TldrawUiMenuItem({
92
93
  import_radix_ui.ContextMenu.Item,
93
94
  {
94
95
  dir: "ltr",
95
- title: titleStr,
96
96
  draggable: false,
97
97
  className: "tlui-button tlui-button__menu",
98
98
  "data-testid": `${sourceId}.${id}`,
@@ -113,22 +113,6 @@ function TldrawUiMenuItem({
113
113
  }
114
114
  );
115
115
  }
116
- case "panel": {
117
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
118
- import_TldrawUiButton.TldrawUiButton,
119
- {
120
- "data-testid": `${sourceId}.${id}`,
121
- type: "menu",
122
- title: titleStr,
123
- disabled,
124
- onClick: () => onSelect(sourceId),
125
- children: [
126
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonLabel.TldrawUiButtonLabel, { children: labelStr }),
127
- spinner ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Spinner.Spinner, {}) : icon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon })
128
- ]
129
- }
130
- );
131
- }
132
116
  case "small-icons":
133
117
  case "icons": {
134
118
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -162,6 +146,21 @@ function TldrawUiMenuItem({
162
146
  ] });
163
147
  }
164
148
  case "toolbar": {
149
+ if (onDragStart) {
150
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
151
+ DraggableToolbarButton,
152
+ {
153
+ id,
154
+ icon,
155
+ onSelect,
156
+ onDragStart,
157
+ labelToUse,
158
+ titleStr,
159
+ disabled,
160
+ isSelected
161
+ }
162
+ );
163
+ }
165
164
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
166
165
  import_TldrawUiToolbar.TldrawUiToolbarButton,
167
166
  {
@@ -182,13 +181,28 @@ function TldrawUiMenuItem({
182
181
  );
183
182
  }
184
183
  case "toolbar-overflow": {
184
+ if (onDragStart) {
185
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
186
+ DraggableToolbarButton,
187
+ {
188
+ id,
189
+ icon,
190
+ onSelect,
191
+ onDragStart,
192
+ labelToUse,
193
+ titleStr,
194
+ disabled,
195
+ isSelected,
196
+ overflow: true
197
+ }
198
+ );
199
+ }
185
200
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
186
201
  import_TldrawUiToolbar.TldrawUiToolbarButton,
187
202
  {
188
203
  "aria-label": labelStr,
189
204
  "aria-pressed": isSelected ? "true" : "false",
190
205
  isActive: isSelected,
191
- className: "tlui-button-grid__button",
192
206
  "data-testid": `tools.more.${id}`,
193
207
  "data-value": id,
194
208
  disabled,
@@ -204,4 +218,123 @@ function TldrawUiMenuItem({
204
218
  }
205
219
  }
206
220
  }
221
+ function useDraggableEvents(onDragStart, onSelect) {
222
+ const editor = (0, import_editor.useEditor)();
223
+ const events = (0, import_react.useMemo)(() => {
224
+ let state = { name: "idle" };
225
+ function handlePointerDown(e) {
226
+ state = {
227
+ name: "pointing",
228
+ screenSpaceStart: { x: e.clientX, y: e.clientY }
229
+ };
230
+ e.currentTarget.setPointerCapture(e.pointerId);
231
+ }
232
+ function handlePointerMove(e) {
233
+ if (e.isSpecialRedispatchedEvent) return;
234
+ if (state.name === "pointing") {
235
+ const distanceSq = import_editor.Vec.Dist2(state.screenSpaceStart, { x: e.clientX, y: e.clientY });
236
+ if (distanceSq > (editor.getInstanceState().isCoarsePointer ? editor.options.coarseDragDistanceSquared : editor.options.dragDistanceSquared)) {
237
+ const screenSpaceStart = state.screenSpaceStart;
238
+ state = {
239
+ name: "dragging",
240
+ screenSpaceStart
241
+ };
242
+ editor.run(() => {
243
+ editor.setCurrentTool("select");
244
+ editor.dispatch({
245
+ type: "pointer",
246
+ target: "canvas",
247
+ name: "pointer_down",
248
+ ...(0, import_editor.getPointerInfo)(e),
249
+ point: screenSpaceStart
250
+ });
251
+ editor.selectNone();
252
+ onDragStart?.("toolbar", {
253
+ type: "pointer",
254
+ target: "canvas",
255
+ name: "pointer_move",
256
+ ...(0, import_editor.getPointerInfo)(e),
257
+ point: screenSpaceStart
258
+ });
259
+ import_TldrawUiTooltip.tooltipManager.hideAllTooltips();
260
+ });
261
+ }
262
+ }
263
+ }
264
+ function handlePointerUp(e) {
265
+ if (e.isSpecialRedispatchedEvent) return;
266
+ e.currentTarget.releasePointerCapture(e.pointerId);
267
+ editor.dispatch({
268
+ type: "pointer",
269
+ target: "canvas",
270
+ name: "pointer_up",
271
+ ...(0, import_editor.getPointerInfo)(e)
272
+ });
273
+ }
274
+ function handleClick() {
275
+ if (state.name === "dragging" || state.name === "dragged") {
276
+ state = { name: "idle" };
277
+ return true;
278
+ }
279
+ state = { name: "idle" };
280
+ onSelect?.("toolbar");
281
+ }
282
+ return {
283
+ onPointerDown: handlePointerDown,
284
+ onPointerMove: handlePointerMove,
285
+ onPointerUp: handlePointerUp,
286
+ onClick: handleClick
287
+ };
288
+ }, [onDragStart, editor, onSelect]);
289
+ return events;
290
+ }
291
+ function DraggableToolbarButton({
292
+ id,
293
+ labelToUse,
294
+ titleStr,
295
+ disabled,
296
+ isSelected,
297
+ icon,
298
+ onSelect,
299
+ onDragStart,
300
+ overflow
301
+ }) {
302
+ const events = useDraggableEvents(onDragStart, onSelect);
303
+ if (overflow) {
304
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
305
+ import_TldrawUiToolbar.TldrawUiToolbarButton,
306
+ {
307
+ "aria-label": labelToUse,
308
+ "aria-pressed": isSelected ? "true" : "false",
309
+ isActive: isSelected,
310
+ className: "tlui-button-grid__button",
311
+ "data-testid": `tools.more.${id}`,
312
+ "data-value": id,
313
+ disabled,
314
+ title: titleStr,
315
+ type: "icon",
316
+ ...events,
317
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon })
318
+ }
319
+ );
320
+ }
321
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
322
+ import_TldrawUiToolbar.TldrawUiToolbarButton,
323
+ {
324
+ "aria-label": labelToUse,
325
+ "aria-pressed": isSelected ? "true" : "false",
326
+ "data-testid": `tools.${id}`,
327
+ "data-value": id,
328
+ disabled,
329
+ onTouchStart: (e) => {
330
+ (0, import_editor.preventDefault)(e);
331
+ onSelect("toolbar");
332
+ },
333
+ title: titleStr,
334
+ type: "tool",
335
+ ...events,
336
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon })
337
+ }
338
+ );
339
+ }
207
340
  //# sourceMappingURL=TldrawUiMenuItem.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx"],
4
- "sourcesContent": ["import { exhaustiveSwitchError, preventDefault } from '@tldraw/editor'\nimport { ContextMenu as _ContextMenu } from 'radix-ui'\nimport { useState } from 'react'\nimport { unwrapLabel } from '../../../context/actions'\nimport { TLUiEventSource } from '../../../context/events'\nimport { useReadonly } from '../../../hooks/useReadonly'\nimport { TLUiTranslationKey } from '../../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../../hooks/useTranslation/useTranslation'\nimport { kbdStr } from '../../../kbd-utils'\nimport { Spinner } from '../../Spinner'\nimport { TldrawUiButton } from '../Button/TldrawUiButton'\nimport { TldrawUiButtonIcon } from '../Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonLabel } from '../Button/TldrawUiButtonLabel'\nimport { TldrawUiDropdownMenuItem } from '../TldrawUiDropdownMenu'\nimport { TLUiIconJsx } from '../TldrawUiIcon'\nimport { TldrawUiKbd } from '../TldrawUiKbd'\nimport { TldrawUiToolbarButton } from '../TldrawUiToolbar'\nimport { useTldrawUiMenuContext } from './TldrawUiMenuContext'\n\n/** @public */\nexport interface TLUiMenuItemProps<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n> {\n\tid: string\n\t/**\n\t * The icon to display on the item. Icons are only shown in certain menu types.\n\t */\n\ticon?: IconType | TLUiIconJsx\n\t/**\n\t * An icon to display to the left of the menu item.\n\t */\n\ticonLeft?: IconType | TLUiIconJsx\n\t/**\n\t * The keyboard shortcut to display on the item.\n\t */\n\tkbd?: string\n\t/**\n\t * The label to display on the item. If it's a string, it will be translated. If it's an object, the keys will be used as the language keys and the values will be translated.\n\t */\n\tlabel?: TranslationKey | { [key: string]: TranslationKey }\n\t/**\n\t * If the editor is in readonly mode and the item is not marked as readonlyok, it will not be rendered.\n\t */\n\treadonlyOk?: boolean\n\t/**\n\t * The function to call when the item is clicked.\n\t */\n\tonSelect(source: TLUiEventSource): Promise<void> | void\n\t/**\n\t * Whether this item should be disabled.\n\t */\n\tdisabled?: boolean\n\t/**\n\t * Prevent the menu from closing when the item is clicked\n\t */\n\tnoClose?: boolean\n\t/**\n\t * Whether to show a spinner on the item.\n\t */\n\tspinner?: boolean\n\t/**\n\t * Whether the item is selected.\n\t */\n\tisSelected?: boolean\n}\n\n/** @public @react */\nexport function TldrawUiMenuItem<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n>({\n\tdisabled = false,\n\tspinner = false,\n\treadonlyOk = false,\n\tid,\n\tkbd,\n\tlabel,\n\ticon,\n\ticonLeft,\n\tonSelect,\n\tnoClose,\n\tisSelected,\n}: TLUiMenuItemProps<TranslationKey, IconType>) {\n\tconst { type: menuType, sourceId } = useTldrawUiMenuContext()\n\n\tconst msg = useTranslation()\n\n\tconst [disableClicks, setDisableClicks] = useState(false)\n\n\tconst isReadonlyMode = useReadonly()\n\tif (isReadonlyMode && !readonlyOk) return null\n\n\tconst labelToUse = unwrapLabel(label, menuType)\n\tconst kbdToUse = kbd ? kbdStr(kbd) : undefined\n\n\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\tconst titleStr = labelStr && kbdToUse ? `${labelStr} ${kbdToUse}` : labelStr\n\n\tswitch (menuType) {\n\t\tcase 'menu': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiDropdownMenuItem>\n\t\t\t\t\t<TldrawUiButton\n\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (noClose) {\n\t\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonSelect(sourceId)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{iconLeft && <TldrawUiButtonIcon icon={iconLeft} small />}\n\t\t\t\t\t\t<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>\n\t\t\t\t\t\t{kbd && <TldrawUiKbd>{kbd}</TldrawUiKbd>}\n\t\t\t\t\t</TldrawUiButton>\n\t\t\t\t</TldrawUiDropdownMenuItem>\n\t\t\t)\n\t\t}\n\t\tcase 'context-menu': {\n\t\t\t// Hide disabled context menu items\n\t\t\tif (disabled) return null\n\n\t\t\treturn (\n\t\t\t\t<_ContextMenu.Item\n\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\tdraggable={false}\n\t\t\t\t\tclassName=\"tlui-button tlui-button__menu\"\n\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\tif (noClose) preventDefault(e)\n\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSelect(sourceId)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"tlui-button__label\" draggable={false}>\n\t\t\t\t\t\t{labelStr}\n\t\t\t\t\t</span>\n\t\t\t\t\t{iconLeft && <TldrawUiButtonIcon icon={iconLeft} small />}\n\t\t\t\t\t{kbd && <TldrawUiKbd>{kbd}</TldrawUiKbd>}\n\t\t\t\t\t{spinner && <Spinner />}\n\t\t\t\t</_ContextMenu.Item>\n\t\t\t)\n\t\t}\n\t\tcase 'panel': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiButton\n\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect(sourceId)}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>\n\t\t\t\t\t{spinner ? <Spinner /> : icon && <TldrawUiButtonIcon icon={icon} />}\n\t\t\t\t</TldrawUiButton>\n\t\t\t)\n\t\t}\n\t\tcase 'small-icons':\n\t\tcase 'icons': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect(sourceId)}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} small />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tcase 'keyboard-shortcuts': {\n\t\t\tif (!kbd) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Menu item '${label}' isn't shown in the keyboard shortcuts dialog because it doesn't have a keyboard shortcut.`\n\t\t\t\t)\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair\" data-testid={`${sourceId}.${id}`}>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair__key\">{labelStr}</div>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair__value\">\n\t\t\t\t\t\t<TldrawUiKbd visibleOnMobileLayout>{kbd}</TldrawUiKbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'helper-buttons': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiButton type=\"low\" onClick={() => onSelect(sourceId)}>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t\t<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>\n\t\t\t\t</TldrawUiButton>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\taria-label={labelStr}\n\t\t\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\t\t\tdata-testid={`tools.${id}`}\n\t\t\t\t\tdata-value={id}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\tonTouchStart={(e) => {\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\tonSelect('toolbar')\n\t\t\t\t\t}}\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\ttype=\"tool\"\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar-overflow': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\taria-label={labelStr}\n\t\t\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\t\t\tisActive={isSelected}\n\t\t\t\t\tclassName=\"tlui-button-grid__button\"\n\t\t\t\t\tdata-testid={`tools.more.${id}`}\n\t\t\t\t\tdata-value={id}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tdefault: {\n\t\t\tthrow exhaustiveSwitchError(menuType)\n\t\t}\n\t}\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\texhaustiveSwitchError,\n\tgetPointerInfo,\n\tpreventDefault,\n\tTLPointerEventInfo,\n\tuseEditor,\n\tVec,\n\tVecModel,\n} from '@tldraw/editor'\nimport { ContextMenu as _ContextMenu } from 'radix-ui'\nimport { useMemo, useState } from 'react'\nimport { unwrapLabel } from '../../../context/actions'\nimport { TLUiEventSource } from '../../../context/events'\nimport { useReadonly } from '../../../hooks/useReadonly'\nimport { TLUiToolItem } from '../../../hooks/useTools'\nimport { TLUiTranslationKey } from '../../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../../hooks/useTranslation/useTranslation'\nimport { kbdStr } from '../../../kbd-utils'\nimport { Spinner } from '../../Spinner'\nimport { TldrawUiButton } from '../Button/TldrawUiButton'\nimport { TldrawUiButtonIcon } from '../Button/TldrawUiButtonIcon'\nimport { TldrawUiButtonLabel } from '../Button/TldrawUiButtonLabel'\nimport { TldrawUiDropdownMenuItem } from '../TldrawUiDropdownMenu'\nimport { TLUiIconJsx } from '../TldrawUiIcon'\nimport { TldrawUiKbd } from '../TldrawUiKbd'\nimport { TldrawUiToolbarButton } from '../TldrawUiToolbar'\nimport { tooltipManager } from '../TldrawUiTooltip'\nimport { useTldrawUiMenuContext } from './TldrawUiMenuContext'\n\n/** @public */\nexport interface TLUiMenuItemProps<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n> {\n\tid: string\n\t/**\n\t * The icon to display on the item. Icons are only shown in certain menu types.\n\t */\n\ticon?: IconType | TLUiIconJsx\n\t/**\n\t * An icon to display to the left of the menu item.\n\t */\n\ticonLeft?: IconType | TLUiIconJsx\n\t/**\n\t * The keyboard shortcut to display on the item.\n\t */\n\tkbd?: string\n\t/**\n\t * The label to display on the item. If it's a string, it will be translated. If it's an object, the keys will be used as the language keys and the values will be translated.\n\t */\n\tlabel?: TranslationKey | { [key: string]: TranslationKey }\n\t/**\n\t * If the editor is in readonly mode and the item is not marked as readonlyok, it will not be rendered.\n\t */\n\treadonlyOk?: boolean\n\t/**\n\t * The function to call when the item is clicked.\n\t */\n\tonSelect(source: TLUiEventSource): Promise<void> | void\n\t/**\n\t * Whether this item should be disabled.\n\t */\n\tdisabled?: boolean\n\t/**\n\t * Prevent the menu from closing when the item is clicked\n\t */\n\tnoClose?: boolean\n\t/**\n\t * Whether to show a spinner on the item.\n\t */\n\tspinner?: boolean\n\t/**\n\t * Whether the item is selected.\n\t */\n\tisSelected?: boolean\n\t/**\n\t * The function to call when the item is dragged. If this is provided, the item will be draggable.\n\t */\n\tonDragStart?(source: TLUiEventSource, info: TLPointerEventInfo): void\n}\n\n/** @public @react */\nexport function TldrawUiMenuItem<\n\tTranslationKey extends string = string,\n\tIconType extends string = string,\n>({\n\tdisabled = false,\n\tspinner = false,\n\treadonlyOk = false,\n\tid,\n\tkbd,\n\tlabel,\n\ticon,\n\ticonLeft,\n\tonSelect,\n\tnoClose,\n\tisSelected,\n\tonDragStart,\n}: TLUiMenuItemProps<TranslationKey, IconType>) {\n\tconst { type: menuType, sourceId } = useTldrawUiMenuContext()\n\n\tconst msg = useTranslation()\n\n\tconst [disableClicks, setDisableClicks] = useState(false)\n\n\tconst isReadonlyMode = useReadonly()\n\tif (isReadonlyMode && !readonlyOk) return null\n\n\tconst labelToUse = unwrapLabel(label, menuType)\n\tconst kbdToUse = kbd ? kbdStr(kbd) : undefined\n\n\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\tconst titleStr = labelStr && kbdToUse ? `${labelStr} ${kbdToUse}` : labelStr\n\n\tswitch (menuType) {\n\t\tcase 'menu': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiDropdownMenuItem>\n\t\t\t\t\t<TldrawUiButton\n\t\t\t\t\t\ttype=\"menu\"\n\t\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (noClose) {\n\t\t\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tonSelect(sourceId)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{iconLeft && <TldrawUiButtonIcon icon={iconLeft} small />}\n\t\t\t\t\t\t<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>\n\t\t\t\t\t\t{kbd && <TldrawUiKbd>{kbd}</TldrawUiKbd>}\n\t\t\t\t\t</TldrawUiButton>\n\t\t\t\t</TldrawUiDropdownMenuItem>\n\t\t\t)\n\t\t}\n\t\tcase 'context-menu': {\n\t\t\t// Hide disabled context menu items\n\t\t\tif (disabled) return null\n\n\t\t\treturn (\n\t\t\t\t<_ContextMenu.Item\n\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\tdraggable={false}\n\t\t\t\t\tclassName=\"tlui-button tlui-button__menu\"\n\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\tonSelect={(e) => {\n\t\t\t\t\t\tif (noClose) preventDefault(e)\n\t\t\t\t\t\tif (disableClicks) {\n\t\t\t\t\t\t\tsetDisableClicks(false)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tonSelect(sourceId)\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"tlui-button__label\" draggable={false}>\n\t\t\t\t\t\t{labelStr}\n\t\t\t\t\t</span>\n\t\t\t\t\t{iconLeft && <TldrawUiButtonIcon icon={iconLeft} small />}\n\t\t\t\t\t{kbd && <TldrawUiKbd>{kbd}</TldrawUiKbd>}\n\t\t\t\t\t{spinner && <Spinner />}\n\t\t\t\t</_ContextMenu.Item>\n\t\t\t)\n\t\t}\n\t\tcase 'small-icons':\n\t\tcase 'icons': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\tdata-testid={`${sourceId}.${id}`}\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect(sourceId)}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} small />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tcase 'keyboard-shortcuts': {\n\t\t\tif (!kbd) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Menu item '${label}' isn't shown in the keyboard shortcuts dialog because it doesn't have a keyboard shortcut.`\n\t\t\t\t)\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair\" data-testid={`${sourceId}.${id}`}>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair__key\">{labelStr}</div>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__key-pair__value\">\n\t\t\t\t\t\t<TldrawUiKbd visibleOnMobileLayout>{kbd}</TldrawUiKbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'helper-buttons': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiButton type=\"low\" onClick={() => onSelect(sourceId)}>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t\t<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>\n\t\t\t\t</TldrawUiButton>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar': {\n\t\t\tif (onDragStart) {\n\t\t\t\treturn (\n\t\t\t\t\t<DraggableToolbarButton\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\ticon={icon}\n\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\tonDragStart={onDragStart}\n\t\t\t\t\t\tlabelToUse={labelToUse}\n\t\t\t\t\t\ttitleStr={titleStr}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\taria-label={labelStr}\n\t\t\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\t\t\tdata-testid={`tools.${id}`}\n\t\t\t\t\tdata-value={id}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\tonTouchStart={(e) => {\n\t\t\t\t\t\tpreventDefault(e)\n\t\t\t\t\t\tonSelect('toolbar')\n\t\t\t\t\t}}\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\ttype=\"tool\"\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar-overflow': {\n\t\t\tif (onDragStart) {\n\t\t\t\treturn (\n\t\t\t\t\t<DraggableToolbarButton\n\t\t\t\t\t\tid={id}\n\t\t\t\t\t\ticon={icon}\n\t\t\t\t\t\tonSelect={onSelect}\n\t\t\t\t\t\tonDragStart={onDragStart}\n\t\t\t\t\t\tlabelToUse={labelToUse}\n\t\t\t\t\t\ttitleStr={titleStr}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\toverflow\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<TldrawUiToolbarButton\n\t\t\t\t\taria-label={labelStr}\n\t\t\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\t\t\tisActive={isSelected}\n\t\t\t\t\tdata-testid={`tools.more.${id}`}\n\t\t\t\t\tdata-value={id}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => onSelect('toolbar')}\n\t\t\t\t\ttitle={titleStr}\n\t\t\t\t\ttype=\"icon\"\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t\t</TldrawUiToolbarButton>\n\t\t\t)\n\t\t}\n\t\tdefault: {\n\t\t\tthrow exhaustiveSwitchError(menuType)\n\t\t}\n\t}\n}\n\nfunction useDraggableEvents(\n\tonDragStart: TLUiToolItem['onDragStart'],\n\tonSelect: TLUiToolItem['onSelect']\n) {\n\tconst editor = useEditor()\n\tconst events = useMemo(() => {\n\t\tlet state = { name: 'idle' } as\n\t\t\t| {\n\t\t\t\t\tname: 'idle'\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tname: 'pointing'\n\t\t\t\t\tscreenSpaceStart: VecModel\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tname: 'dragging'\n\t\t\t\t\tscreenSpaceStart: VecModel\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\tname: 'dragged'\n\t\t\t }\n\n\t\tfunction handlePointerDown(e: React.PointerEvent<HTMLButtonElement>) {\n\t\t\tstate = {\n\t\t\t\tname: 'pointing',\n\t\t\t\tscreenSpaceStart: { x: e.clientX, y: e.clientY },\n\t\t\t}\n\n\t\t\te.currentTarget.setPointerCapture(e.pointerId)\n\t\t}\n\n\t\tfunction handlePointerMove(e: React.PointerEvent<HTMLButtonElement>) {\n\t\t\tif ((e as any).isSpecialRedispatchedEvent) return\n\n\t\t\tif (state.name === 'pointing') {\n\t\t\t\tconst distanceSq = Vec.Dist2(state.screenSpaceStart, { x: e.clientX, y: e.clientY })\n\t\t\t\tif (\n\t\t\t\t\tdistanceSq >\n\t\t\t\t\t(editor.getInstanceState().isCoarsePointer\n\t\t\t\t\t\t? editor.options.coarseDragDistanceSquared\n\t\t\t\t\t\t: editor.options.dragDistanceSquared)\n\t\t\t\t) {\n\t\t\t\t\tconst screenSpaceStart = state.screenSpaceStart\n\t\t\t\t\tstate = {\n\t\t\t\t\t\tname: 'dragging',\n\t\t\t\t\t\tscreenSpaceStart,\n\t\t\t\t\t}\n\n\t\t\t\t\teditor.run(() => {\n\t\t\t\t\t\teditor.setCurrentTool('select')\n\n\t\t\t\t\t\t// Set origin point\n\t\t\t\t\t\teditor.dispatch({\n\t\t\t\t\t\t\ttype: 'pointer',\n\t\t\t\t\t\t\ttarget: 'canvas',\n\t\t\t\t\t\t\tname: 'pointer_down',\n\t\t\t\t\t\t\t...getPointerInfo(e),\n\t\t\t\t\t\t\tpoint: screenSpaceStart,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\t// Pointer down potentially selects shapes, so we need to deselect them.\n\t\t\t\t\t\teditor.selectNone()\n\n\t\t\t\t\t\t// start drag\n\t\t\t\t\t\tonDragStart?.('toolbar', {\n\t\t\t\t\t\t\ttype: 'pointer',\n\t\t\t\t\t\t\ttarget: 'canvas',\n\t\t\t\t\t\t\tname: 'pointer_move',\n\t\t\t\t\t\t\t...getPointerInfo(e),\n\t\t\t\t\t\t\tpoint: screenSpaceStart,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\ttooltipManager.hideAllTooltips()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction handlePointerUp(e: React.PointerEvent<HTMLButtonElement>) {\n\t\t\tif ((e as any).isSpecialRedispatchedEvent) return\n\n\t\t\te.currentTarget.releasePointerCapture(e.pointerId)\n\n\t\t\teditor.dispatch({\n\t\t\t\ttype: 'pointer',\n\t\t\t\ttarget: 'canvas',\n\t\t\t\tname: 'pointer_up',\n\t\t\t\t...getPointerInfo(e),\n\t\t\t})\n\t\t}\n\n\t\tfunction handleClick() {\n\t\t\tif (state.name === 'dragging' || state.name === 'dragged') {\n\t\t\t\tstate = { name: 'idle' }\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tstate = { name: 'idle' }\n\t\t\tonSelect?.('toolbar')\n\t\t}\n\n\t\treturn {\n\t\t\tonPointerDown: handlePointerDown,\n\t\t\tonPointerMove: handlePointerMove,\n\t\t\tonPointerUp: handlePointerUp,\n\t\t\tonClick: handleClick,\n\t\t}\n\t}, [onDragStart, editor, onSelect])\n\n\treturn events\n}\n\nfunction DraggableToolbarButton({\n\tid,\n\tlabelToUse,\n\ttitleStr,\n\tdisabled,\n\tisSelected,\n\ticon,\n\tonSelect,\n\tonDragStart,\n\toverflow,\n}: {\n\tid: string\n\tdisabled: boolean\n\tlabelToUse?: string\n\ttitleStr?: string\n\tisSelected?: boolean\n\ticon: TLUiMenuItemProps['icon']\n\tonSelect: TLUiMenuItemProps['onSelect']\n\tonDragStart: TLUiMenuItemProps['onDragStart']\n\toverflow?: boolean\n}) {\n\tconst events = useDraggableEvents(onDragStart, onSelect)\n\n\tif (overflow) {\n\t\treturn (\n\t\t\t<TldrawUiToolbarButton\n\t\t\t\taria-label={labelToUse}\n\t\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\t\tisActive={isSelected}\n\t\t\t\tclassName=\"tlui-button-grid__button\"\n\t\t\t\tdata-testid={`tools.more.${id}`}\n\t\t\t\tdata-value={id}\n\t\t\t\tdisabled={disabled}\n\t\t\t\ttitle={titleStr}\n\t\t\t\ttype=\"icon\"\n\t\t\t\t{...events}\n\t\t\t>\n\t\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t\t</TldrawUiToolbarButton>\n\t\t)\n\t}\n\n\treturn (\n\t\t<TldrawUiToolbarButton\n\t\t\taria-label={labelToUse}\n\t\t\taria-pressed={isSelected ? 'true' : 'false'}\n\t\t\tdata-testid={`tools.${id}`}\n\t\t\tdata-value={id}\n\t\t\tdisabled={disabled}\n\t\t\tonTouchStart={(e) => {\n\t\t\t\tpreventDefault(e)\n\t\t\t\tonSelect('toolbar')\n\t\t\t}}\n\t\t\ttitle={titleStr}\n\t\t\ttype=\"tool\"\n\t\t\t{...events}\n\t\t>\n\t\t\t<TldrawUiButtonIcon icon={icon!} />\n\t\t</TldrawUiToolbarButton>\n\t)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["_ContextMenu"]
7
7
  }
@@ -24,6 +24,7 @@ module.exports = __toCommonJS(TldrawUiContextProvider_exports);
24
24
  var import_jsx_runtime = require("react/jsx-runtime");
25
25
  var import_editor = require("@tldraw/editor");
26
26
  var import_assetUrls = require("../assetUrls");
27
+ var import_TldrawUiTooltip = require("../components/primitives/TldrawUiTooltip");
27
28
  var import_useTools = require("../hooks/useTools");
28
29
  var import_useTranslation = require("../hooks/useTranslation/useTranslation");
29
30
  var import_overrides = require("../overrides");
@@ -45,14 +46,14 @@ const TldrawUiContextProvider = (0, import_editor.track)(function TldrawUiContex
45
46
  children
46
47
  }) {
47
48
  const editor = (0, import_editor.useMaybeEditor)();
48
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_overrides.MimeTypeContext.Provider, { value: mediaMimeTypes, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_asset_urls.AssetUrlsProvider, { assetUrls: (0, import_assetUrls.useDefaultUiAssetUrlsWithOverrides)(assetUrls), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
49
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_overrides.MimeTypeContext.Provider, { value: mediaMimeTypes, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiTooltip.TldrawUiTooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_asset_urls.AssetUrlsProvider, { assetUrls: (0, import_assetUrls.useDefaultUiAssetUrlsWithOverrides)(assetUrls), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
49
50
  import_useTranslation.TldrawUiTranslationProvider,
50
51
  {
51
52
  overrides: (0, import_overrides.useMergedTranslationOverrides)(overrides),
52
53
  locale: editor?.user.getLocale() ?? import_editor.defaultUserPreferences.locale,
53
54
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_events.TldrawUiEventsProvider, { onEvent: onUiEvent, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_toasts.TldrawUiToastsProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_dialogs.TldrawUiDialogsProvider, { context: "tla", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_a11y.TldrawUiA11yProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_breakpoints.BreakPointProvider, { forceMobile, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.TldrawUiComponentsProvider, { overrides: components, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InternalProviders, { overrides, children }) }) }) }) }) }) })
54
55
  }
55
- ) }) });
56
+ ) }) }) });
56
57
  });
57
58
  function InternalProviders({
58
59
  overrides,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/context/TldrawUiContextProvider.tsx"],
4
- "sourcesContent": ["import { RecursivePartial, defaultUserPreferences, track, useMaybeEditor } from '@tldraw/editor'\nimport { ReactNode } from 'react'\nimport { TLUiAssetUrls, useDefaultUiAssetUrlsWithOverrides } from '../assetUrls'\nimport { ToolsProvider } from '../hooks/useTools'\nimport { TldrawUiTranslationProvider } from '../hooks/useTranslation/useTranslation'\nimport {\n\tMimeTypeContext,\n\tTLUiOverrides,\n\tuseMergedOverrides,\n\tuseMergedTranslationOverrides,\n} from '../overrides'\nimport { TldrawUiA11yProvider } from './a11y'\nimport { ActionsProvider } from './actions'\nimport { AssetUrlsProvider } from './asset-urls'\nimport { BreakPointProvider } from './breakpoints'\nimport { TLUiComponents, TldrawUiComponentsProvider } from './components'\nimport { TldrawUiDialogsProvider } from './dialogs'\nimport { TLUiEventHandler, TldrawUiEventsProvider } from './events'\nimport { TldrawUiToastsProvider } from './toasts'\n\n/** @public */\nexport interface TLUiContextProviderProps {\n\t/**\n\t * Urls for where to find fonts and other assets for the UI.\n\t */\n\tassetUrls?: RecursivePartial<TLUiAssetUrls>\n\n\t/**\n\t * Overrides for the UI.\n\t */\n\toverrides?: TLUiOverrides | TLUiOverrides[]\n\n\t/**\n\t * Overrides for the UI components.\n\t */\n\tcomponents?: TLUiComponents\n\n\t/**\n\t * Callback for when an event occurs in the UI.\n\t */\n\tonUiEvent?: TLUiEventHandler\n\n\t/**\n\t * Whether to always should the mobile breakpoints.\n\t */\n\tforceMobile?: boolean\n\n\t/**\n\t * The component's children.\n\t */\n\tchildren?: ReactNode\n\n\t/**\n\t * Supported mime types for media files.\n\t */\n\tmediaMimeTypes?: string[]\n}\n\n/** @public @react */\nexport const TldrawUiContextProvider = track(function TldrawUiContextProvider({\n\toverrides,\n\tcomponents,\n\tassetUrls,\n\tonUiEvent,\n\tforceMobile,\n\tmediaMimeTypes,\n\tchildren,\n}: TLUiContextProviderProps) {\n\t// To allow mounting the sidebar without an editor running, we use a 'maybe' editor here\n\t// The sidebar makes use of toasts and dialogs etc, which typically require an editor to be present\n\t// but we are overriding the providers to allow them to be used without an editor.\n\tconst editor = useMaybeEditor()\n\treturn (\n\t\t<MimeTypeContext.Provider value={mediaMimeTypes}>\n\t\t\t<AssetUrlsProvider assetUrls={useDefaultUiAssetUrlsWithOverrides(assetUrls)}>\n\t\t\t\t<TldrawUiTranslationProvider\n\t\t\t\t\toverrides={useMergedTranslationOverrides(overrides)}\n\t\t\t\t\tlocale={editor?.user.getLocale() ?? defaultUserPreferences.locale}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiEventsProvider onEvent={onUiEvent}>\n\t\t\t\t\t\t<TldrawUiToastsProvider>\n\t\t\t\t\t\t\t<TldrawUiDialogsProvider context={'tla'}>\n\t\t\t\t\t\t\t\t<TldrawUiA11yProvider>\n\t\t\t\t\t\t\t\t\t<BreakPointProvider forceMobile={forceMobile}>\n\t\t\t\t\t\t\t\t\t\t<TldrawUiComponentsProvider overrides={components}>\n\t\t\t\t\t\t\t\t\t\t\t<InternalProviders overrides={overrides}>{children}</InternalProviders>\n\t\t\t\t\t\t\t\t\t\t</TldrawUiComponentsProvider>\n\t\t\t\t\t\t\t\t\t</BreakPointProvider>\n\t\t\t\t\t\t\t\t</TldrawUiA11yProvider>\n\t\t\t\t\t\t\t</TldrawUiDialogsProvider>\n\t\t\t\t\t\t</TldrawUiToastsProvider>\n\t\t\t\t\t</TldrawUiEventsProvider>\n\t\t\t\t</TldrawUiTranslationProvider>\n\t\t\t</AssetUrlsProvider>\n\t\t</MimeTypeContext.Provider>\n\t)\n})\n\nfunction InternalProviders({\n\toverrides,\n\tchildren,\n}: Omit<TLUiContextProviderProps, 'assetBaseUrl'>) {\n\tconst mergedOverrides = useMergedOverrides(overrides)\n\treturn (\n\t\t<ActionsProvider overrides={mergedOverrides.actions}>\n\t\t\t<ToolsProvider overrides={mergedOverrides.tools}>{children}</ToolsProvider>\n\t\t</ActionsProvider>\n\t)\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqFW;AArFX,oBAAgF;AAEhF,uBAAkE;AAClE,sBAA8B;AAC9B,4BAA4C;AAC5C,uBAKO;AACP,kBAAqC;AACrC,qBAAgC;AAChC,wBAAkC;AAClC,yBAAmC;AACnC,wBAA2D;AAC3D,qBAAwC;AACxC,oBAAyD;AACzD,oBAAuC;AAyChC,MAAM,8BAA0B,qBAAM,SAASA,yBAAwB;AAAA,EAC7E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA6B;AAI5B,QAAM,aAAS,8BAAe;AAC9B,SACC,4CAAC,iCAAgB,UAAhB,EAAyB,OAAO,gBAChC,sDAAC,uCAAkB,eAAW,qDAAmC,SAAS,GACzE;AAAA,IAAC;AAAA;AAAA,MACA,eAAW,gDAA8B,SAAS;AAAA,MAClD,QAAQ,QAAQ,KAAK,UAAU,KAAK,qCAAuB;AAAA,MAE3D,sDAAC,wCAAuB,SAAS,WAChC,sDAAC,wCACA,sDAAC,0CAAwB,SAAS,OACjC,sDAAC,oCACA,sDAAC,yCAAmB,aACnB,sDAAC,gDAA2B,WAAW,YACtC,sDAAC,qBAAkB,WAAuB,UAAS,GACpD,GACD,GACD,GACD,GACD,GACD;AAAA;AAAA,EACD,GACD,GACD;AAEF,CAAC;AAED,SAAS,kBAAkB;AAAA,EAC1B;AAAA,EACA;AACD,GAAmD;AAClD,QAAM,sBAAkB,qCAAmB,SAAS;AACpD,SACC,4CAAC,kCAAgB,WAAW,gBAAgB,SAC3C,sDAAC,iCAAc,WAAW,gBAAgB,OAAQ,UAAS,GAC5D;AAEF;",
4
+ "sourcesContent": ["import { RecursivePartial, defaultUserPreferences, track, useMaybeEditor } from '@tldraw/editor'\nimport { ReactNode } from 'react'\nimport { TLUiAssetUrls, useDefaultUiAssetUrlsWithOverrides } from '../assetUrls'\nimport { TldrawUiTooltipProvider } from '../components/primitives/TldrawUiTooltip'\nimport { ToolsProvider } from '../hooks/useTools'\nimport { TldrawUiTranslationProvider } from '../hooks/useTranslation/useTranslation'\nimport {\n\tMimeTypeContext,\n\tTLUiOverrides,\n\tuseMergedOverrides,\n\tuseMergedTranslationOverrides,\n} from '../overrides'\nimport { TldrawUiA11yProvider } from './a11y'\nimport { ActionsProvider } from './actions'\nimport { AssetUrlsProvider } from './asset-urls'\nimport { BreakPointProvider } from './breakpoints'\nimport { TLUiComponents, TldrawUiComponentsProvider } from './components'\nimport { TldrawUiDialogsProvider } from './dialogs'\nimport { TLUiEventHandler, TldrawUiEventsProvider } from './events'\nimport { TldrawUiToastsProvider } from './toasts'\n\n/** @public */\nexport interface TLUiContextProviderProps {\n\t/**\n\t * Urls for where to find fonts and other assets for the UI.\n\t */\n\tassetUrls?: RecursivePartial<TLUiAssetUrls>\n\n\t/**\n\t * Overrides for the UI.\n\t */\n\toverrides?: TLUiOverrides | TLUiOverrides[]\n\n\t/**\n\t * Overrides for the UI components.\n\t */\n\tcomponents?: TLUiComponents\n\n\t/**\n\t * Callback for when an event occurs in the UI.\n\t */\n\tonUiEvent?: TLUiEventHandler\n\n\t/**\n\t * Whether to always should the mobile breakpoints.\n\t */\n\tforceMobile?: boolean\n\n\t/**\n\t * The component's children.\n\t */\n\tchildren?: ReactNode\n\n\t/**\n\t * Supported mime types for media files.\n\t */\n\tmediaMimeTypes?: string[]\n}\n\n/** @public @react */\nexport const TldrawUiContextProvider = track(function TldrawUiContextProvider({\n\toverrides,\n\tcomponents,\n\tassetUrls,\n\tonUiEvent,\n\tforceMobile,\n\tmediaMimeTypes,\n\tchildren,\n}: TLUiContextProviderProps) {\n\t// To allow mounting the sidebar without an editor running, we use a 'maybe' editor here\n\t// The sidebar makes use of toasts and dialogs etc, which typically require an editor to be present\n\t// but we are overriding the providers to allow them to be used without an editor.\n\tconst editor = useMaybeEditor()\n\treturn (\n\t\t<MimeTypeContext.Provider value={mediaMimeTypes}>\n\t\t\t<TldrawUiTooltipProvider>\n\t\t\t\t<AssetUrlsProvider assetUrls={useDefaultUiAssetUrlsWithOverrides(assetUrls)}>\n\t\t\t\t\t<TldrawUiTranslationProvider\n\t\t\t\t\t\toverrides={useMergedTranslationOverrides(overrides)}\n\t\t\t\t\t\tlocale={editor?.user.getLocale() ?? defaultUserPreferences.locale}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TldrawUiEventsProvider onEvent={onUiEvent}>\n\t\t\t\t\t\t\t<TldrawUiToastsProvider>\n\t\t\t\t\t\t\t\t<TldrawUiDialogsProvider context={'tla'}>\n\t\t\t\t\t\t\t\t\t<TldrawUiA11yProvider>\n\t\t\t\t\t\t\t\t\t\t<BreakPointProvider forceMobile={forceMobile}>\n\t\t\t\t\t\t\t\t\t\t\t<TldrawUiComponentsProvider overrides={components}>\n\t\t\t\t\t\t\t\t\t\t\t\t<InternalProviders overrides={overrides}>{children}</InternalProviders>\n\t\t\t\t\t\t\t\t\t\t\t</TldrawUiComponentsProvider>\n\t\t\t\t\t\t\t\t\t\t</BreakPointProvider>\n\t\t\t\t\t\t\t\t\t</TldrawUiA11yProvider>\n\t\t\t\t\t\t\t\t</TldrawUiDialogsProvider>\n\t\t\t\t\t\t\t</TldrawUiToastsProvider>\n\t\t\t\t\t\t</TldrawUiEventsProvider>\n\t\t\t\t\t</TldrawUiTranslationProvider>\n\t\t\t\t</AssetUrlsProvider>\n\t\t\t</TldrawUiTooltipProvider>\n\t\t</MimeTypeContext.Provider>\n\t)\n})\n\nfunction InternalProviders({\n\toverrides,\n\tchildren,\n}: Omit<TLUiContextProviderProps, 'assetBaseUrl'>) {\n\tconst mergedOverrides = useMergedOverrides(overrides)\n\treturn (\n\t\t<ActionsProvider overrides={mergedOverrides.actions}>\n\t\t\t<ToolsProvider overrides={mergedOverrides.tools}>{children}</ToolsProvider>\n\t\t</ActionsProvider>\n\t)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuFY;AAvFZ,oBAAgF;AAEhF,uBAAkE;AAClE,6BAAwC;AACxC,sBAA8B;AAC9B,4BAA4C;AAC5C,uBAKO;AACP,kBAAqC;AACrC,qBAAgC;AAChC,wBAAkC;AAClC,yBAAmC;AACnC,wBAA2D;AAC3D,qBAAwC;AACxC,oBAAyD;AACzD,oBAAuC;AAyChC,MAAM,8BAA0B,qBAAM,SAASA,yBAAwB;AAAA,EAC7E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAA6B;AAI5B,QAAM,aAAS,8BAAe;AAC9B,SACC,4CAAC,iCAAgB,UAAhB,EAAyB,OAAO,gBAChC,sDAAC,kDACA,sDAAC,uCAAkB,eAAW,qDAAmC,SAAS,GACzE;AAAA,IAAC;AAAA;AAAA,MACA,eAAW,gDAA8B,SAAS;AAAA,MAClD,QAAQ,QAAQ,KAAK,UAAU,KAAK,qCAAuB;AAAA,MAE3D,sDAAC,wCAAuB,SAAS,WAChC,sDAAC,wCACA,sDAAC,0CAAwB,SAAS,OACjC,sDAAC,oCACA,sDAAC,yCAAmB,aACnB,sDAAC,gDAA2B,WAAW,YACtC,sDAAC,qBAAkB,WAAuB,UAAS,GACpD,GACD,GACD,GACD,GACD,GACD;AAAA;AAAA,EACD,GACD,GACD,GACD;AAEF,CAAC;AAED,SAAS,kBAAkB;AAAA,EAC1B;AAAA,EACA;AACD,GAAmD;AAClD,QAAM,sBAAkB,qCAAmB,SAAS;AACpD,SACC,4CAAC,kCAAgB,WAAW,gBAAgB,SAC3C,sDAAC,iCAAc,WAAW,gBAAgB,OAAQ,UAAS,GAC5D;AAEF;",
6
6
  "names": ["TldrawUiContextProvider"]
7
7
  }
@@ -1148,6 +1148,21 @@ function ActionsProvider({ overrides, children }) {
1148
1148
  },
1149
1149
  checkbox: true
1150
1150
  },
1151
+ {
1152
+ id: "toggle-ui-labels",
1153
+ label: {
1154
+ default: "action.toggle-ui-labels",
1155
+ menu: "action.toggle-ui-labels.menu"
1156
+ },
1157
+ readonlyOk: true,
1158
+ onSelect(source) {
1159
+ trackEvent("toggle-ui-labels", { source });
1160
+ editor.user.updateUserPreferences({
1161
+ showUiLabels: !editor.user.getShowUiLabels()
1162
+ });
1163
+ },
1164
+ checkbox: true
1165
+ },
1151
1166
  {
1152
1167
  id: "toggle-edge-scrolling",
1153
1168
  label: {