tldraw 3.16.0-canary.fa3749606e52 → 3.16.0-internal.51e99e128bd4

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 (355) hide show
  1. package/dist-cjs/index.d.ts +171 -5
  2. package/dist-cjs/index.js +17 -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/freehand/svg.js.map +2 -2
  35. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  36. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  37. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  38. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  40. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  41. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  42. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  43. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  44. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  45. package/dist-cjs/lib/ui/TldrawUi.js +14 -0
  46. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  47. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  48. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  49. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  50. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  51. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  52. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  53. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  54. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  56. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  58. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  60. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  61. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  62. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  63. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  64. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  65. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  66. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  67. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  68. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  69. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  70. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  71. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
  72. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  73. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  74. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  75. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  76. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  77. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  78. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  80. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  81. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  82. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  83. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  84. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  85. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  86. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  87. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
  88. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  89. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  90. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  91. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  92. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  93. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
  94. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  95. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +268 -0
  96. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  97. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  98. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  99. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  100. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  101. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  102. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +12 -26
  103. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  104. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  105. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  106. package/dist-cjs/lib/ui/context/actions.js +15 -0
  107. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  108. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  109. package/dist-cjs/lib/ui/hooks/useTools.js +21 -3
  110. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  111. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  112. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +3 -0
  113. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  114. package/dist-cjs/lib/ui/version.js +3 -3
  115. package/dist-cjs/lib/ui/version.js.map +1 -1
  116. package/dist-esm/index.d.mts +171 -5
  117. package/dist-esm/index.mjs +27 -1
  118. package/dist-esm/index.mjs.map +2 -2
  119. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  120. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  121. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  122. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  123. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  124. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  125. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  126. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  127. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  128. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  129. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  130. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  131. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +13 -12
  132. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  133. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  134. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  135. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  136. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  137. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  138. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  139. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  140. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  141. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -3
  142. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +1 -1
  143. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  144. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  145. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  146. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  147. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  148. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  149. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  150. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  151. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  152. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  153. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  154. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  155. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  156. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  157. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  158. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  159. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  160. package/dist-esm/lib/ui/TldrawUi.mjs +16 -2
  161. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  162. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  163. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  164. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  165. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  166. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  167. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  168. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  169. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  170. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  171. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  172. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  173. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  174. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  175. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  176. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  177. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  178. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  179. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  180. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  181. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  182. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  183. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  184. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  185. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  186. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
  187. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  188. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  189. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  190. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  191. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  192. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  193. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  194. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  195. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  196. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  197. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  198. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  199. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  200. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  201. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  202. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
  203. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  204. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  205. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  206. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  207. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  208. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
  209. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  210. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +245 -0
  211. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  212. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  213. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  214. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  215. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  216. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  217. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +12 -26
  218. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  219. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  220. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  221. package/dist-esm/lib/ui/context/actions.mjs +15 -0
  222. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  223. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  224. package/dist-esm/lib/ui/hooks/useTools.mjs +22 -3
  225. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  226. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +3 -0
  227. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  228. package/dist-esm/lib/ui/version.mjs +3 -3
  229. package/dist-esm/lib/ui/version.mjs.map +1 -1
  230. package/package.json +11 -34
  231. package/src/index.ts +21 -0
  232. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  233. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  234. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  235. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +7 -6
  236. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  237. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  238. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  239. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  240. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  241. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  242. package/src/lib/shapes/frame/FrameShapeUtil.tsx +21 -14
  243. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  244. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  245. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  246. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  247. package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -3
  248. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  249. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  250. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  251. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  252. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  253. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  254. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  255. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  256. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  257. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  258. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  259. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  260. package/src/lib/ui/TldrawUi.tsx +17 -2
  261. package/src/lib/ui/assetUrls.ts +13 -10
  262. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  263. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  264. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  265. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  266. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  267. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  268. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  269. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  270. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  271. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  272. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  273. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
  274. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  275. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  276. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  277. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  278. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  279. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  280. package/src/lib/ui/components/menu-items.tsx +8 -0
  281. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
  282. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  283. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  284. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
  285. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +327 -0
  286. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  287. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  288. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  289. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +18 -27
  290. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  291. package/src/lib/ui/context/actions.tsx +15 -0
  292. package/src/lib/ui/context/events.tsx +1 -0
  293. package/src/lib/ui/hooks/useTools.tsx +25 -3
  294. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +3 -0
  295. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +3 -0
  296. package/src/lib/ui/version.ts +3 -3
  297. package/src/lib/ui.css +406 -292
  298. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  299. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  300. package/src/test/A11y.test.tsx +3 -2
  301. package/src/test/ClickManager.test.ts +7 -6
  302. package/src/test/Editor.test.tsx +20 -19
  303. package/src/test/EraserTool.test.ts +184 -13
  304. package/src/test/HandTool.test.ts +10 -9
  305. package/src/test/HighlightShape.test.ts +2 -1
  306. package/src/test/SelectTool.test.ts +3 -2
  307. package/src/test/TLUserPreferences.test.ts +4 -3
  308. package/src/test/TestEditor.ts +13 -15
  309. package/src/test/TldrawEditor.test.tsx +11 -10
  310. package/src/test/ZoomTool.test.ts +7 -6
  311. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  312. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  313. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  314. package/src/test/arrows-megabus.test.tsx +17 -10
  315. package/src/test/bindings.test.tsx +24 -37
  316. package/src/test/bookmark-shapes.test.ts +1 -8
  317. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  318. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  319. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  320. package/src/test/commands/alignShapes.test.tsx +25 -24
  321. package/src/test/commands/animationSpeed.test.ts +2 -1
  322. package/src/test/commands/centerOnPoint.test.ts +3 -2
  323. package/src/test/commands/clipboard.test.ts +3 -2
  324. package/src/test/commands/createShapes.test.ts +2 -1
  325. package/src/test/commands/deleteShapes.test.ts +2 -1
  326. package/src/test/commands/distributeShapes.test.tsx +11 -10
  327. package/src/test/commands/getSvgString.test.ts +2 -1
  328. package/src/test/commands/packShapes.test.ts +5 -4
  329. package/src/test/commands/resizeShape.test.ts +2 -1
  330. package/src/test/commands/rotateShapes.test.ts +7 -6
  331. package/src/test/commands/setCamera.test.ts +4 -3
  332. package/src/test/commands/setCurrentPage.test.ts +3 -2
  333. package/src/test/commands/stackShapes.test.ts +11 -10
  334. package/src/test/commands/stretch.test.tsx +13 -12
  335. package/src/test/createDeepLink.test.tsx +2 -1
  336. package/src/test/cropping.test.ts +3 -2
  337. package/src/test/drawing.test.ts +2 -1
  338. package/src/test/flipShapes.test.ts +4 -3
  339. package/src/test/frames.test.ts +25 -24
  340. package/src/test/getCulledShapes.test.tsx +3 -2
  341. package/src/test/groups.test.tsx +1 -1
  342. package/src/test/handleDeepLink.test.tsx +2 -1
  343. package/src/test/inner-outer-margin.test.ts +315 -0
  344. package/src/test/maxShapes.test.ts +3 -2
  345. package/src/test/modifiers.test.ts +5 -4
  346. package/src/test/navigation.test.ts +12 -11
  347. package/src/test/panning.test.ts +2 -1
  348. package/src/test/perf/perf.test.ts +2 -1
  349. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  350. package/src/test/resizing.test.ts +39 -38
  351. package/src/test/select.test.tsx +4 -3
  352. package/src/test/selection-omnibus.test.ts +11 -10
  353. package/src/test/shapeutils.test.ts +4 -3
  354. package/src/test/translating.test.ts +9 -8
  355. package/tldraw.css +699 -580
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var TldrawUiTooltip_exports = {};
30
+ __export(TldrawUiTooltip_exports, {
31
+ TldrawUiTooltip: () => TldrawUiTooltip,
32
+ TldrawUiTooltipProvider: () => TldrawUiTooltipProvider,
33
+ tooltipManager: () => tooltipManager
34
+ });
35
+ module.exports = __toCommonJS(TldrawUiTooltip_exports);
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var import_editor = require("@tldraw/editor");
38
+ var import_radix_ui = require("radix-ui");
39
+ var import_react = __toESM(require("react"));
40
+ var import_layout = require("./layout");
41
+ const DEFAULT_TOOLTIP_DELAY_MS = 700;
42
+ class TooltipManager {
43
+ static instance = null;
44
+ currentTooltip = (0, import_editor.atom)("current tooltip", null);
45
+ destroyTimeoutId = null;
46
+ static getInstance() {
47
+ if (!TooltipManager.instance) {
48
+ TooltipManager.instance = new TooltipManager();
49
+ }
50
+ return TooltipManager.instance;
51
+ }
52
+ showTooltip(tooltipId, content, targetElement, side, sideOffset, showOnMobile, delayDuration) {
53
+ if (this.destroyTimeoutId) {
54
+ clearTimeout(this.destroyTimeoutId);
55
+ this.destroyTimeoutId = null;
56
+ }
57
+ this.currentTooltip.set({
58
+ id: tooltipId,
59
+ content,
60
+ side,
61
+ sideOffset,
62
+ showOnMobile,
63
+ targetElement,
64
+ delayDuration
65
+ });
66
+ }
67
+ hideTooltip(editor, tooltipId, instant = false) {
68
+ const hide = () => {
69
+ if (this.currentTooltip.get()?.id === tooltipId) {
70
+ this.currentTooltip.set(null);
71
+ this.destroyTimeoutId = null;
72
+ }
73
+ };
74
+ if (editor && !instant) {
75
+ this.destroyTimeoutId = editor.timers.setTimeout(hide, 300);
76
+ } else {
77
+ hide();
78
+ }
79
+ }
80
+ hideAllTooltips() {
81
+ this.currentTooltip.set(null);
82
+ this.destroyTimeoutId = null;
83
+ }
84
+ getCurrentTooltipData() {
85
+ const currentTooltip = this.currentTooltip.get();
86
+ if (!currentTooltip) return null;
87
+ if (!this.supportsHover() && !currentTooltip.showOnMobile) return null;
88
+ return currentTooltip;
89
+ }
90
+ supportsHoverAtom = null;
91
+ supportsHover() {
92
+ if (!this.supportsHoverAtom) {
93
+ const mediaQuery = window.matchMedia("(hover: hover)");
94
+ const supportsHover = (0, import_editor.atom)("has hover", mediaQuery.matches);
95
+ this.supportsHoverAtom = supportsHover;
96
+ mediaQuery.addEventListener("change", (e) => {
97
+ supportsHover.set(e.matches);
98
+ });
99
+ }
100
+ return this.supportsHoverAtom.get();
101
+ }
102
+ }
103
+ const tooltipManager = TooltipManager.getInstance();
104
+ const TooltipSingletonContext = (0, import_react.createContext)(false);
105
+ function TldrawUiTooltipProvider({ children }) {
106
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Tooltip.Provider, { skipDelayDuration: 700, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TooltipSingletonContext.Provider, { value: true, children: [
107
+ children,
108
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipSingleton, {})
109
+ ] }) });
110
+ }
111
+ function TooltipSingleton() {
112
+ const editor = (0, import_editor.useMaybeEditor)();
113
+ const [isOpen, setIsOpen] = (0, import_react.useState)(false);
114
+ const triggerRef = (0, import_react.useRef)(null);
115
+ const isFirstShowRef = (0, import_react.useRef)(true);
116
+ const showTimeoutRef = (0, import_react.useRef)(null);
117
+ const currentTooltip = (0, import_editor.useValue)(
118
+ "current tooltip",
119
+ () => tooltipManager.getCurrentTooltipData(),
120
+ []
121
+ );
122
+ (0, import_react.useEffect)(() => {
123
+ if (showTimeoutRef.current) {
124
+ clearTimeout(showTimeoutRef.current);
125
+ showTimeoutRef.current = null;
126
+ }
127
+ if (currentTooltip && triggerRef.current) {
128
+ const activeRect = currentTooltip.targetElement.getBoundingClientRect();
129
+ const trigger = triggerRef.current;
130
+ trigger.style.position = "fixed";
131
+ trigger.style.left = `${activeRect.left}px`;
132
+ trigger.style.top = `${activeRect.top}px`;
133
+ trigger.style.width = `${activeRect.width}px`;
134
+ trigger.style.height = `${activeRect.height}px`;
135
+ trigger.style.pointerEvents = "none";
136
+ trigger.style.zIndex = "9999";
137
+ if (isFirstShowRef.current && editor) {
138
+ showTimeoutRef.current = editor.timers.setTimeout(() => {
139
+ setIsOpen(true);
140
+ isFirstShowRef.current = false;
141
+ }, currentTooltip.delayDuration ?? editor.options.tooltipDelayMs);
142
+ } else {
143
+ setIsOpen(true);
144
+ }
145
+ } else {
146
+ setIsOpen(false);
147
+ isFirstShowRef.current = true;
148
+ }
149
+ }, [editor, currentTooltip]);
150
+ if (!currentTooltip) {
151
+ return null;
152
+ }
153
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_radix_ui.Tooltip.Root, { open: isOpen, delayDuration: 0, children: [
154
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Tooltip.Trigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: triggerRef }) }),
155
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
156
+ import_radix_ui.Tooltip.Content,
157
+ {
158
+ className: "tlui-tooltip",
159
+ side: currentTooltip.side,
160
+ sideOffset: currentTooltip.sideOffset,
161
+ avoidCollisions: true,
162
+ collisionPadding: 8,
163
+ dir: "ltr",
164
+ children: [
165
+ currentTooltip.content,
166
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Tooltip.Arrow, { className: "tlui-tooltip__arrow" })
167
+ ]
168
+ }
169
+ )
170
+ ] });
171
+ }
172
+ const TldrawUiTooltip = (0, import_react.forwardRef)(
173
+ ({
174
+ children,
175
+ content,
176
+ side,
177
+ sideOffset = 5,
178
+ disabled = false,
179
+ showOnMobile = false,
180
+ delayDuration
181
+ }, ref) => {
182
+ const editor = (0, import_editor.useMaybeEditor)();
183
+ const tooltipId = (0, import_react.useRef)((0, import_editor.uniqueId)());
184
+ const hasProvider = (0, import_react.useContext)(TooltipSingletonContext);
185
+ const orientationCtx = (0, import_layout.useTldrawUiOrientation)();
186
+ const sideToUse = side ?? orientationCtx.tooltipSide;
187
+ (0, import_react.useEffect)(() => {
188
+ const currentTooltipId = tooltipId.current;
189
+ return () => {
190
+ if (hasProvider) {
191
+ tooltipManager.hideTooltip(editor, currentTooltipId, true);
192
+ }
193
+ };
194
+ }, [editor, hasProvider]);
195
+ if (disabled || !content) {
196
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
197
+ }
198
+ if (!hasProvider) {
199
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
200
+ import_radix_ui.Tooltip.Root,
201
+ {
202
+ delayDuration: delayDuration ?? (editor?.options.tooltipDelayMs || DEFAULT_TOOLTIP_DELAY_MS),
203
+ disableHoverableContent: true,
204
+ children: [
205
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Tooltip.Trigger, { asChild: true, ref, children }),
206
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
207
+ import_radix_ui.Tooltip.Content,
208
+ {
209
+ className: "tlui-tooltip",
210
+ side: sideToUse,
211
+ sideOffset,
212
+ avoidCollisions: true,
213
+ collisionPadding: 8,
214
+ dir: "ltr",
215
+ children: [
216
+ content,
217
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_radix_ui.Tooltip.Arrow, { className: "tlui-tooltip__arrow" })
218
+ ]
219
+ }
220
+ )
221
+ ]
222
+ }
223
+ );
224
+ }
225
+ const child = import_react.default.Children.only(children);
226
+ (0, import_editor.assert)(import_react.default.isValidElement(child), "TldrawUiTooltip children must be a single element");
227
+ const handleMouseEnter = (event) => {
228
+ child.props.onMouseEnter?.(event);
229
+ tooltipManager.showTooltip(
230
+ tooltipId.current,
231
+ content,
232
+ event.currentTarget,
233
+ sideToUse,
234
+ sideOffset,
235
+ showOnMobile,
236
+ delayDuration
237
+ );
238
+ };
239
+ const handleMouseLeave = (event) => {
240
+ child.props.onMouseLeave?.(event);
241
+ tooltipManager.hideTooltip(editor, tooltipId.current);
242
+ };
243
+ const handleFocus = (event) => {
244
+ child.props.onFocus?.(event);
245
+ tooltipManager.showTooltip(
246
+ tooltipId.current,
247
+ content,
248
+ event.currentTarget,
249
+ sideToUse,
250
+ sideOffset,
251
+ showOnMobile,
252
+ delayDuration
253
+ );
254
+ };
255
+ const handleBlur = (event) => {
256
+ child.props.onBlur?.(event);
257
+ tooltipManager.hideTooltip(editor, tooltipId.current);
258
+ };
259
+ const childrenWithHandlers = import_react.default.cloneElement(children, {
260
+ onMouseEnter: handleMouseEnter,
261
+ onMouseLeave: handleMouseLeave,
262
+ onFocus: handleFocus,
263
+ onBlur: handleBlur
264
+ });
265
+ return childrenWithHandlers;
266
+ }
267
+ );
268
+ //# sourceMappingURL=TldrawUiTooltip.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/ui/components/primitives/TldrawUiTooltip.tsx"],
4
+ "sourcesContent": ["import { assert, Atom, atom, Editor, uniqueId, useMaybeEditor, useValue } from '@tldraw/editor'\nimport { Tooltip as _Tooltip } from 'radix-ui'\nimport React, {\n\tcreateContext,\n\tforwardRef,\n\tReactNode,\n\tuseContext,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from 'react'\nimport { useTldrawUiOrientation } from './layout'\n\nconst DEFAULT_TOOLTIP_DELAY_MS = 700\n\n/** @public */\nexport interface TldrawUiTooltipProps {\n\tchildren: React.ReactNode\n\tcontent?: string | React.ReactNode\n\tside?: 'top' | 'right' | 'bottom' | 'left'\n\tsideOffset?: number\n\tdisabled?: boolean\n\tshowOnMobile?: boolean\n\tdelayDuration?: number\n}\n\n// Singleton tooltip manager\nclass TooltipManager {\n\tprivate static instance: TooltipManager | null = null\n\tprivate currentTooltip = atom<{\n\t\tid: string\n\t\tcontent: ReactNode\n\t\tside: 'top' | 'right' | 'bottom' | 'left'\n\t\tsideOffset: number\n\t\tshowOnMobile: boolean\n\t\ttargetElement: HTMLElement\n\t\tdelayDuration: number | undefined\n\t} | null>('current tooltip', null)\n\tprivate destroyTimeoutId: number | null = null\n\n\tstatic getInstance(): TooltipManager {\n\t\tif (!TooltipManager.instance) {\n\t\t\tTooltipManager.instance = new TooltipManager()\n\t\t}\n\t\treturn TooltipManager.instance\n\t}\n\n\tshowTooltip(\n\t\ttooltipId: string,\n\t\tcontent: string | React.ReactNode,\n\t\ttargetElement: HTMLElement,\n\t\tside: 'top' | 'right' | 'bottom' | 'left',\n\t\tsideOffset: number,\n\t\tshowOnMobile: boolean,\n\t\tdelayDuration: number | undefined\n\t) {\n\t\t// Clear any existing destroy timeout\n\t\tif (this.destroyTimeoutId) {\n\t\t\tclearTimeout(this.destroyTimeoutId)\n\t\t\tthis.destroyTimeoutId = null\n\t\t}\n\n\t\t// Update current tooltip\n\t\tthis.currentTooltip.set({\n\t\t\tid: tooltipId,\n\t\t\tcontent,\n\t\t\tside,\n\t\t\tsideOffset,\n\t\t\tshowOnMobile,\n\t\t\ttargetElement,\n\t\t\tdelayDuration,\n\t\t})\n\t}\n\n\thideTooltip(editor: Editor | null, tooltipId: string, instant: boolean = false) {\n\t\tconst hide = () => {\n\t\t\t// Only hide if this is the current tooltip\n\t\t\tif (this.currentTooltip.get()?.id === tooltipId) {\n\t\t\t\tthis.currentTooltip.set(null)\n\t\t\t\tthis.destroyTimeoutId = null\n\t\t\t}\n\t\t}\n\n\t\tif (editor && !instant) {\n\t\t\t// Start destroy timeout (1 second)\n\t\t\tthis.destroyTimeoutId = editor.timers.setTimeout(hide, 300)\n\t\t} else {\n\t\t\thide()\n\t\t}\n\t}\n\n\thideAllTooltips() {\n\t\tthis.currentTooltip.set(null)\n\t\tthis.destroyTimeoutId = null\n\t}\n\n\tgetCurrentTooltipData() {\n\t\tconst currentTooltip = this.currentTooltip.get()\n\t\tif (!currentTooltip) return null\n\t\tif (!this.supportsHover() && !currentTooltip.showOnMobile) return null\n\t\treturn currentTooltip\n\t}\n\n\tprivate supportsHoverAtom: Atom<boolean> | null = null\n\tsupportsHover() {\n\t\tif (!this.supportsHoverAtom) {\n\t\t\tconst mediaQuery = window.matchMedia('(hover: hover)')\n\t\t\tconst supportsHover = atom('has hover', mediaQuery.matches)\n\t\t\tthis.supportsHoverAtom = supportsHover\n\t\t\tmediaQuery.addEventListener('change', (e) => {\n\t\t\t\tsupportsHover.set(e.matches)\n\t\t\t})\n\t\t}\n\t\treturn this.supportsHoverAtom.get()\n\t}\n}\n\nexport const tooltipManager = TooltipManager.getInstance()\n\n// Context for the tooltip singleton\nconst TooltipSingletonContext = createContext<boolean>(false)\n\n/** @public */\nexport interface TldrawUiTooltipProviderProps {\n\tchildren: React.ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiTooltipProvider({ children }: TldrawUiTooltipProviderProps) {\n\treturn (\n\t\t<_Tooltip.Provider skipDelayDuration={700}>\n\t\t\t<TooltipSingletonContext.Provider value={true}>\n\t\t\t\t{children}\n\t\t\t\t<TooltipSingleton />\n\t\t\t</TooltipSingletonContext.Provider>\n\t\t</_Tooltip.Provider>\n\t)\n}\n\n// The singleton tooltip component that renders once\nfunction TooltipSingleton() {\n\tconst editor = useMaybeEditor()\n\tconst [isOpen, setIsOpen] = useState(false)\n\tconst triggerRef = useRef<HTMLDivElement>(null)\n\tconst isFirstShowRef = useRef(true)\n\tconst showTimeoutRef = useRef<number | null>(null)\n\n\tconst currentTooltip = useValue(\n\t\t'current tooltip',\n\t\t() => tooltipManager.getCurrentTooltipData(),\n\t\t[]\n\t)\n\n\t// Update open state and trigger position\n\tuseEffect(() => {\n\t\t// Clear any existing show timeout\n\t\tif (showTimeoutRef.current) {\n\t\t\tclearTimeout(showTimeoutRef.current)\n\t\t\tshowTimeoutRef.current = null\n\t\t}\n\n\t\tif (currentTooltip && triggerRef.current) {\n\t\t\t// Position the invisible trigger element over the active element\n\t\t\tconst activeRect = currentTooltip.targetElement.getBoundingClientRect()\n\t\t\tconst trigger = triggerRef.current\n\n\t\t\ttrigger.style.position = 'fixed'\n\t\t\ttrigger.style.left = `${activeRect.left}px`\n\t\t\ttrigger.style.top = `${activeRect.top}px`\n\t\t\ttrigger.style.width = `${activeRect.width}px`\n\t\t\ttrigger.style.height = `${activeRect.height}px`\n\t\t\ttrigger.style.pointerEvents = 'none'\n\t\t\ttrigger.style.zIndex = '9999'\n\n\t\t\t// Handle delay for first show\n\t\t\tif (isFirstShowRef.current && editor) {\n\t\t\t\tshowTimeoutRef.current = editor.timers.setTimeout(() => {\n\t\t\t\t\tsetIsOpen(true)\n\t\t\t\t\tisFirstShowRef.current = false\n\t\t\t\t}, currentTooltip.delayDuration ?? editor.options.tooltipDelayMs)\n\t\t\t} else {\n\t\t\t\t// Subsequent tooltips show immediately\n\t\t\t\tsetIsOpen(true)\n\t\t\t}\n\t\t} else {\n\t\t\t// Hide tooltip immediately\n\t\t\tsetIsOpen(false)\n\t\t\t// Reset first show state after tooltip is hidden\n\t\t\tisFirstShowRef.current = true\n\t\t}\n\t}, [editor, currentTooltip])\n\n\tif (!currentTooltip) {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<_Tooltip.Root open={isOpen} delayDuration={0}>\n\t\t\t<_Tooltip.Trigger asChild>\n\t\t\t\t<div ref={triggerRef} />\n\t\t\t</_Tooltip.Trigger>\n\t\t\t<_Tooltip.Content\n\t\t\t\tclassName=\"tlui-tooltip\"\n\t\t\t\tside={currentTooltip.side}\n\t\t\t\tsideOffset={currentTooltip.sideOffset}\n\t\t\t\tavoidCollisions\n\t\t\t\tcollisionPadding={8}\n\t\t\t\tdir=\"ltr\"\n\t\t\t>\n\t\t\t\t{currentTooltip.content}\n\t\t\t\t<_Tooltip.Arrow className=\"tlui-tooltip__arrow\" />\n\t\t\t</_Tooltip.Content>\n\t\t</_Tooltip.Root>\n\t)\n}\n\n/** @public @react */\nexport const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tcontent,\n\t\t\tside,\n\t\t\tsideOffset = 5,\n\t\t\tdisabled = false,\n\t\t\tshowOnMobile = false,\n\t\t\tdelayDuration,\n\t\t},\n\t\tref\n\t) => {\n\t\tconst editor = useMaybeEditor()\n\t\tconst tooltipId = useRef<string>(uniqueId())\n\t\tconst hasProvider = useContext(TooltipSingletonContext)\n\n\t\tconst orientationCtx = useTldrawUiOrientation()\n\t\tconst sideToUse = side ?? orientationCtx.tooltipSide\n\n\t\tuseEffect(() => {\n\t\t\tconst currentTooltipId = tooltipId.current\n\t\t\treturn () => {\n\t\t\t\tif (hasProvider) {\n\t\t\t\t\ttooltipManager.hideTooltip(editor, currentTooltipId, true)\n\t\t\t\t}\n\t\t\t}\n\t\t}, [editor, hasProvider])\n\n\t\t// Don't show tooltip if disabled, no content, or UI labels are disabled\n\t\tif (disabled || !content) {\n\t\t\treturn <>{children}</>\n\t\t}\n\n\t\t// Fallback to old behavior if no provider\n\t\tif (!hasProvider) {\n\t\t\treturn (\n\t\t\t\t<_Tooltip.Root\n\t\t\t\t\tdelayDuration={\n\t\t\t\t\t\tdelayDuration ?? (editor?.options.tooltipDelayMs || DEFAULT_TOOLTIP_DELAY_MS)\n\t\t\t\t\t}\n\t\t\t\t\tdisableHoverableContent\n\t\t\t\t>\n\t\t\t\t\t<_Tooltip.Trigger asChild ref={ref}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</_Tooltip.Trigger>\n\t\t\t\t\t<_Tooltip.Content\n\t\t\t\t\t\tclassName=\"tlui-tooltip\"\n\t\t\t\t\t\tside={sideToUse}\n\t\t\t\t\t\tsideOffset={sideOffset}\n\t\t\t\t\t\tavoidCollisions\n\t\t\t\t\t\tcollisionPadding={8}\n\t\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t\t<_Tooltip.Arrow className=\"tlui-tooltip__arrow\" />\n\t\t\t\t\t</_Tooltip.Content>\n\t\t\t\t</_Tooltip.Root>\n\t\t\t)\n\t\t}\n\n\t\tconst child = React.Children.only(children)\n\t\tassert(React.isValidElement(child), 'TldrawUiTooltip children must be a single element')\n\n\t\tconst handleMouseEnter = (event: React.MouseEvent<HTMLElement>) => {\n\t\t\tchild.props.onMouseEnter?.(event)\n\t\t\ttooltipManager.showTooltip(\n\t\t\t\ttooltipId.current,\n\t\t\t\tcontent,\n\t\t\t\tevent.currentTarget as HTMLElement,\n\t\t\t\tsideToUse,\n\t\t\t\tsideOffset,\n\t\t\t\tshowOnMobile,\n\t\t\t\tdelayDuration\n\t\t\t)\n\t\t}\n\n\t\tconst handleMouseLeave = (event: React.MouseEvent<HTMLElement>) => {\n\t\t\tchild.props.onMouseLeave?.(event)\n\t\t\ttooltipManager.hideTooltip(editor, tooltipId.current)\n\t\t}\n\n\t\tconst handleFocus = (event: React.FocusEvent<HTMLElement>) => {\n\t\t\tchild.props.onFocus?.(event)\n\t\t\ttooltipManager.showTooltip(\n\t\t\t\ttooltipId.current,\n\t\t\t\tcontent,\n\t\t\t\tevent.currentTarget as HTMLElement,\n\t\t\t\tsideToUse,\n\t\t\t\tsideOffset,\n\t\t\t\tshowOnMobile,\n\t\t\t\tdelayDuration\n\t\t\t)\n\t\t}\n\n\t\tconst handleBlur = (event: React.FocusEvent<HTMLElement>) => {\n\t\t\tchild.props.onBlur?.(event)\n\t\t\ttooltipManager.hideTooltip(editor, tooltipId.current)\n\t\t}\n\n\t\tconst childrenWithHandlers = React.cloneElement(children as React.ReactElement, {\n\t\t\tonMouseEnter: handleMouseEnter,\n\t\t\tonMouseLeave: handleMouseLeave,\n\t\t\tonFocus: handleFocus,\n\t\t\tonBlur: handleBlur,\n\t\t})\n\n\t\treturn childrenWithHandlers\n\t}\n)\n"],
5
+ "mappings": "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",
6
+ "names": ["_Tooltip", "React"]
7
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var layout_exports = {};
30
+ __export(layout_exports, {
31
+ TldrawUiColumn: () => TldrawUiColumn,
32
+ TldrawUiGrid: () => TldrawUiGrid,
33
+ TldrawUiOrientationProvider: () => TldrawUiOrientationProvider,
34
+ TldrawUiRow: () => TldrawUiRow,
35
+ useTldrawUiOrientation: () => useTldrawUiOrientation
36
+ });
37
+ module.exports = __toCommonJS(layout_exports);
38
+ var import_jsx_runtime = require("react/jsx-runtime");
39
+ var import_classnames = __toESM(require("classnames"));
40
+ var import_radix_ui = require("radix-ui");
41
+ var import_react = require("react");
42
+ const TldrawUiOrientationContext = (0, import_react.createContext)({
43
+ orientation: "horizontal",
44
+ tooltipSide: "bottom"
45
+ });
46
+ function TldrawUiOrientationProvider({
47
+ children,
48
+ orientation,
49
+ tooltipSide
50
+ }) {
51
+ const prevContext = useTldrawUiOrientation();
52
+ const tooltipSideToUse = tooltipSide ?? (orientation === prevContext.orientation ? prevContext.tooltipSide : orientation === "horizontal" ? "bottom" : "right");
53
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TldrawUiOrientationContext.Provider, { value: { orientation, tooltipSide: tooltipSideToUse }, children });
54
+ }
55
+ function useTldrawUiOrientation() {
56
+ return (0, import_react.useContext)(TldrawUiOrientationContext);
57
+ }
58
+ const TldrawUiRow = (0, import_react.forwardRef)(
59
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
60
+ const Component = asChild ? import_radix_ui.Slot.Root : "div";
61
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TldrawUiOrientationProvider, { orientation: "horizontal", tooltipSide, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ref, className: (0, import_classnames.default)("tlui-row", className), ...props }) });
62
+ }
63
+ );
64
+ const TldrawUiColumn = (0, import_react.forwardRef)(
65
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
66
+ const Component = asChild ? import_radix_ui.Slot.Root : "div";
67
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TldrawUiOrientationProvider, { orientation: "vertical", tooltipSide, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ref, className: (0, import_classnames.default)("tlui-column", className), ...props }) });
68
+ }
69
+ );
70
+ const TldrawUiGrid = (0, import_react.forwardRef)(
71
+ ({ asChild, className, tooltipSide, ...props }, ref) => {
72
+ const Component = asChild ? import_radix_ui.Slot.Root : "div";
73
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TldrawUiOrientationProvider, { orientation: "horizontal", tooltipSide, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ref, className: (0, import_classnames.default)("tlui-grid", className), ...props }) });
74
+ }
75
+ );
76
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/lib/ui/components/primitives/layout.tsx"],
4
+ "sourcesContent": ["import classNames from 'classnames'\nimport { Slot } from 'radix-ui'\nimport { HTMLAttributes, ReactNode, createContext, forwardRef, useContext } from 'react'\n\n/** @public */\nexport interface TldrawUiOrientationContext {\n\torientation: 'horizontal' | 'vertical'\n\ttooltipSide: 'top' | 'right' | 'bottom' | 'left'\n}\n\nconst TldrawUiOrientationContext = createContext<TldrawUiOrientationContext>({\n\torientation: 'horizontal',\n\ttooltipSide: 'bottom',\n})\n\n/** @public */\nexport interface TldrawUiOrientationProviderProps {\n\tchildren: ReactNode\n\torientation: 'horizontal' | 'vertical'\n\ttooltipSide?: 'top' | 'right' | 'bottom' | 'left'\n}\n/** @public @react */\nexport function TldrawUiOrientationProvider({\n\tchildren,\n\torientation,\n\ttooltipSide,\n}: TldrawUiOrientationProviderProps) {\n\tconst prevContext = useTldrawUiOrientation()\n\t// generally, we want tooltip side to cascade down through the layout - apart from when the\n\t// orientation changes. If the tooltip side is \"bottom\", and then I include some vertical layout\n\t// elements, keeping the tooltip side as bottom will cause the tooltip to overlap elements\n\t// stacked on top of each other. In the absence of a tooltip side, we pick a default side based\n\t// on the orientation whenever the orientation changes.\n\tconst tooltipSideToUse =\n\t\ttooltipSide ??\n\t\t(orientation === prevContext.orientation\n\t\t\t? prevContext.tooltipSide\n\t\t\t: orientation === 'horizontal'\n\t\t\t\t? 'bottom'\n\t\t\t\t: 'right')\n\n\treturn (\n\t\t<TldrawUiOrientationContext.Provider value={{ orientation, tooltipSide: tooltipSideToUse }}>\n\t\t\t{children}\n\t\t</TldrawUiOrientationContext.Provider>\n\t)\n}\n\n/** @public */\nexport function useTldrawUiOrientation() {\n\treturn useContext(TldrawUiOrientationContext)\n}\n\n/** @public */\nexport interface TLUiLayoutProps extends HTMLAttributes<HTMLDivElement> {\n\tchildren: ReactNode\n\ttooltipSide?: 'top' | 'right' | 'bottom' | 'left'\n\tasChild?: boolean\n}\n\n/**\n * A row, usually of UI controls like buttons, select dropdown, checkboxes, etc.\n *\n * @public @react\n */\nexport const TldrawUiRow = forwardRef<HTMLDivElement, TLUiLayoutProps>(\n\t({ asChild, className, tooltipSide, ...props }, ref) => {\n\t\tconst Component = asChild ? Slot.Root : 'div'\n\t\treturn (\n\t\t\t<TldrawUiOrientationProvider orientation=\"horizontal\" tooltipSide={tooltipSide}>\n\t\t\t\t<Component ref={ref} className={classNames('tlui-row', className)} {...props} />\n\t\t\t</TldrawUiOrientationProvider>\n\t\t)\n\t}\n)\n\n/**\n * A column, usually of UI controls like buttons, select dropdown, checkboxes, etc.\n *\n * @public @react\n */\nexport const TldrawUiColumn = forwardRef<HTMLDivElement, TLUiLayoutProps>(\n\t({ asChild, className, tooltipSide, ...props }, ref) => {\n\t\tconst Component = asChild ? Slot.Root : 'div'\n\t\treturn (\n\t\t\t<TldrawUiOrientationProvider orientation=\"vertical\" tooltipSide={tooltipSide}>\n\t\t\t\t<Component ref={ref} className={classNames('tlui-column', className)} {...props} />\n\t\t\t</TldrawUiOrientationProvider>\n\t\t)\n\t}\n)\n\n/**\n * A tight grid 4 elements wide, usually of UI controls like buttons, select dropdown, checkboxes,\n * etc.\n *\n * @public @react */\nexport const TldrawUiGrid = forwardRef<HTMLDivElement, TLUiLayoutProps>(\n\t({ asChild, className, tooltipSide, ...props }, ref) => {\n\t\tconst Component = asChild ? Slot.Root : 'div'\n\t\treturn (\n\t\t\t<TldrawUiOrientationProvider orientation=\"horizontal\" tooltipSide={tooltipSide}>\n\t\t\t\t<Component ref={ref} className={classNames('tlui-grid', className)} {...props} />\n\t\t\t</TldrawUiOrientationProvider>\n\t\t)\n\t}\n)\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CE;AA1CF,wBAAuB;AACvB,sBAAqB;AACrB,mBAAiF;AAQjF,MAAM,iCAA6B,4BAA0C;AAAA,EAC5E,aAAa;AAAA,EACb,aAAa;AACd,CAAC;AASM,SAAS,4BAA4B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACD,GAAqC;AACpC,QAAM,cAAc,uBAAuB;AAM3C,QAAM,mBACL,gBACC,gBAAgB,YAAY,cAC1B,YAAY,cACZ,gBAAgB,eACf,WACA;AAEL,SACC,4CAAC,2BAA2B,UAA3B,EAAoC,OAAO,EAAE,aAAa,aAAa,iBAAiB,GACvF,UACF;AAEF;AAGO,SAAS,yBAAyB;AACxC,aAAO,yBAAW,0BAA0B;AAC7C;AAcO,MAAM,kBAAc;AAAA,EAC1B,CAAC,EAAE,SAAS,WAAW,aAAa,GAAG,MAAM,GAAG,QAAQ;AACvD,UAAM,YAAY,UAAU,qBAAK,OAAO;AACxC,WACC,4CAAC,+BAA4B,aAAY,cAAa,aACrD,sDAAC,aAAU,KAAU,eAAW,kBAAAA,SAAW,YAAY,SAAS,GAAI,GAAG,OAAO,GAC/E;AAAA,EAEF;AACD;AAOO,MAAM,qBAAiB;AAAA,EAC7B,CAAC,EAAE,SAAS,WAAW,aAAa,GAAG,MAAM,GAAG,QAAQ;AACvD,UAAM,YAAY,UAAU,qBAAK,OAAO;AACxC,WACC,4CAAC,+BAA4B,aAAY,YAAW,aACnD,sDAAC,aAAU,KAAU,eAAW,kBAAAA,SAAW,eAAe,SAAS,GAAI,GAAG,OAAO,GAClF;AAAA,EAEF;AACD;AAOO,MAAM,mBAAe;AAAA,EAC3B,CAAC,EAAE,SAAS,WAAW,aAAa,GAAG,MAAM,GAAG,QAAQ;AACvD,UAAM,YAAY,UAAU,qBAAK,OAAO;AACxC,WACC,4CAAC,+BAA4B,aAAY,cAAa,aACrD,sDAAC,aAAU,KAAU,eAAW,kBAAAA,SAAW,aAAa,SAAS,GAAI,GAAG,OAAO,GAChF;AAAA,EAEF;AACD;",
6
+ "names": ["classNames"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx"],
4
- "sourcesContent": ["import { createContext, useContext } from 'react'\nimport { TLUiEventSource } from '../../../context/events'\n\n/** @public */\nexport type TLUiMenuContextType =\n\t| 'panel'\n\t| 'menu'\n\t| 'small-icons'\n\t| 'context-menu'\n\t| 'icons'\n\t| 'keyboard-shortcuts'\n\t| 'helper-buttons'\n\t| 'toolbar'\n\t| 'toolbar-overflow'\n\nconst menuContext = createContext<{\n\ttype: TLUiMenuContextType\n\tsourceId: TLUiEventSource\n} | null>(null)\n\n/** @public */\nexport function useTldrawUiMenuContext() {\n\tconst context = useContext(menuContext)\n\tif (!context) {\n\t\tthrow new Error('useTldrawUiMenuContext must be used within a TldrawUiMenuContextProvider')\n\t}\n\treturn context\n}\n\n/** @public */\nexport interface TLUiMenuContextProviderProps {\n\ttype: TLUiMenuContextType\n\tsourceId: TLUiEventSource\n\tchildren: React.ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiMenuContextProvider({\n\ttype,\n\tsourceId,\n\tchildren,\n}: TLUiMenuContextProviderProps) {\n\treturn <menuContext.Provider value={{ type, sourceId }}>{children}</menuContext.Provider>\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0CQ;AA1CR,mBAA0C;AAe1C,MAAM,kBAAc,4BAGV,IAAI;AAGP,SAAS,yBAAyB;AACxC,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACb,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC3F;AACA,SAAO;AACR;AAUO,SAAS,4BAA4B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACD,GAAiC;AAChC,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,MAAM,SAAS,GAAI,UAAS;AACnE;",
4
+ "sourcesContent": ["import { createContext, useContext } from 'react'\nimport { TLUiEventSource } from '../../../context/events'\n\n/** @public */\nexport type TLUiMenuContextType =\n\t| 'menu'\n\t| 'small-icons'\n\t| 'context-menu'\n\t| 'icons'\n\t| 'keyboard-shortcuts'\n\t| 'helper-buttons'\n\t| 'toolbar'\n\t| 'toolbar-overflow'\n\nconst menuContext = createContext<{\n\ttype: TLUiMenuContextType\n\tsourceId: TLUiEventSource\n} | null>(null)\n\n/** @public */\nexport function useTldrawUiMenuContext() {\n\tconst context = useContext(menuContext)\n\tif (!context) {\n\t\tthrow new Error('useTldrawUiMenuContext must be used within a TldrawUiMenuContextProvider')\n\t}\n\treturn context\n}\n\n/** @public */\nexport interface TLUiMenuContextProviderProps {\n\ttype: TLUiMenuContextType\n\tsourceId: TLUiEventSource\n\tchildren: React.ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiMenuContextProvider({\n\ttype,\n\tsourceId,\n\tchildren,\n}: TLUiMenuContextProviderProps) {\n\treturn <menuContext.Provider value={{ type, sourceId }}>{children}</menuContext.Provider>\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyCQ;AAzCR,mBAA0C;AAc1C,MAAM,kBAAc,4BAGV,IAAI;AAGP,SAAS,yBAAyB;AACxC,QAAM,cAAU,yBAAW,WAAW;AACtC,MAAI,CAAC,SAAS;AACb,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC3F;AACA,SAAO;AACR;AAUO,SAAS,4BAA4B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACD,GAAiC;AAChC,SAAO,4CAAC,YAAY,UAAZ,EAAqB,OAAO,EAAE,MAAM,SAAS,GAAI,UAAS;AACnE;",
6
6
  "names": []
7
7
  }
@@ -35,44 +35,57 @@ var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_classnames = __toESM(require("classnames"));
36
36
  var import_actions = require("../../../context/actions");
37
37
  var import_useTranslation = require("../../../hooks/useTranslation/useTranslation");
38
+ var import_layout = require("../layout");
38
39
  var import_TldrawUiDropdownMenu = require("../TldrawUiDropdownMenu");
39
40
  var import_TldrawUiMenuContext = require("./TldrawUiMenuContext");
40
41
  function TldrawUiMenuGroup({ id, label, className, children }) {
41
- const { type: menuType, sourceId } = (0, import_TldrawUiMenuContext.useTldrawUiMenuContext)();
42
+ const menu = (0, import_TldrawUiMenuContext.useTldrawUiMenuContext)();
43
+ const { orientation } = (0, import_layout.useTldrawUiOrientation)();
42
44
  const msg = (0, import_useTranslation.useTranslation)();
43
- const labelToUse = (0, import_actions.unwrapLabel)(label, menuType);
45
+ const labelToUse = (0, import_actions.unwrapLabel)(label, menu.type);
44
46
  const labelStr = labelToUse ? msg(labelToUse) : void 0;
45
- switch (menuType) {
46
- case "panel": {
47
+ switch (menu.type) {
48
+ case "menu": {
47
49
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
48
- "div",
50
+ import_TldrawUiDropdownMenu.TldrawUiDropdownMenuGroup,
49
51
  {
50
- className: (0, import_classnames.default)("tlui-menu__group", className),
51
- "data-testid": `${sourceId}-group.${id}`,
52
+ className,
53
+ "data-testid": `${menu.sourceId}-group.${id}`,
52
54
  children
53
55
  }
54
56
  );
55
57
  }
56
- case "menu": {
57
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiDropdownMenu.TldrawUiDropdownMenuGroup, { className, "data-testid": `${sourceId}-group.${id}`, children });
58
- }
59
58
  case "context-menu": {
60
59
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
61
60
  "div",
62
61
  {
63
62
  dir: "ltr",
64
63
  className: (0, import_classnames.default)("tlui-menu__group", className),
65
- "data-testid": `${sourceId}-group.${id}`,
64
+ "data-testid": `${menu.sourceId}-group.${id}`,
66
65
  children
67
66
  }
68
67
  );
69
68
  }
70
69
  case "keyboard-shortcuts": {
71
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-shortcuts-dialog__group", "data-testid": `${sourceId}-group.${id}`, children: [
70
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "tlui-shortcuts-dialog__group", "data-testid": `${menu.sourceId}-group.${id}`, children: [
72
71
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h2", { className: "tlui-shortcuts-dialog__group__title", children: labelStr }),
73
72
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "tlui-shortcuts-dialog__group__content", children })
74
73
  ] });
75
74
  }
75
+ case "toolbar": {
76
+ const Layout = orientation === "horizontal" ? import_layout.TldrawUiRow : import_layout.TldrawUiColumn;
77
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Layout, { className: "tlui-main-toolbar__group", "data-testid": `${menu.sourceId}-group.${id}`, children });
78
+ }
79
+ case "toolbar-overflow": {
80
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
81
+ import_layout.TldrawUiGrid,
82
+ {
83
+ className: "tlui-main-toolbar__group",
84
+ "data-testid": `${menu.sourceId}-group.${id}`,
85
+ children
86
+ }
87
+ );
88
+ }
76
89
  default: {
77
90
  return children;
78
91
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx"],
4
- "sourcesContent": ["import classNames from 'classnames'\nimport { ReactNode } from 'react'\nimport { unwrapLabel } from '../../../context/actions'\nimport { TLUiTranslationKey } from '../../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../../hooks/useTranslation/useTranslation'\nimport { TldrawUiDropdownMenuGroup } from '../TldrawUiDropdownMenu'\nimport { useTldrawUiMenuContext } from './TldrawUiMenuContext'\n\n/** @public */\nexport interface TLUiMenuGroupProps<TranslationKey extends string = string> {\n\tid: 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\tclassName?: string\n\tchildren?: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiMenuGroup({ id, label, className, children }: TLUiMenuGroupProps) {\n\tconst { type: menuType, sourceId } = useTldrawUiMenuContext()\n\tconst msg = useTranslation()\n\tconst labelToUse = unwrapLabel(label, menuType)\n\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\n\tswitch (menuType) {\n\t\tcase 'panel': {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={classNames('tlui-menu__group', className)}\n\t\t\t\t\tdata-testid={`${sourceId}-group.${id}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'menu': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiDropdownMenuGroup className={className} data-testid={`${sourceId}-group.${id}`}>\n\t\t\t\t\t{children}\n\t\t\t\t</TldrawUiDropdownMenuGroup>\n\t\t\t)\n\t\t}\n\t\tcase 'context-menu': {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\tclassName={classNames('tlui-menu__group', className)}\n\t\t\t\t\tdata-testid={`${sourceId}-group.${id}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'keyboard-shortcuts': {\n\t\t\t// todo: if groups need a label, let's give em a label\n\t\t\treturn (\n\t\t\t\t<div className=\"tlui-shortcuts-dialog__group\" data-testid={`${sourceId}-group.${id}`}>\n\t\t\t\t\t<h2 className=\"tlui-shortcuts-dialog__group__title\">{labelStr}</h2>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__group__content\">{children}</div>\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tdefault: {\n\t\t\treturn children\n\t\t}\n\t}\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BI;AA7BJ,wBAAuB;AAEvB,qBAA4B;AAE5B,4BAA+B;AAC/B,kCAA0C;AAC1C,iCAAuC;AAchC,SAAS,kBAAkB,EAAE,IAAI,OAAO,WAAW,SAAS,GAAuB;AACzF,QAAM,EAAE,MAAM,UAAU,SAAS,QAAI,mDAAuB;AAC5D,QAAM,UAAM,sCAAe;AAC3B,QAAM,iBAAa,4BAAY,OAAO,QAAQ;AAC9C,QAAM,WAAW,aAAa,IAAI,UAAgC,IAAI;AAEtE,UAAQ,UAAU;AAAA,IACjB,KAAK,SAAS;AACb,aACC;AAAA,QAAC;AAAA;AAAA,UACA,eAAW,kBAAAA,SAAW,oBAAoB,SAAS;AAAA,UACnD,eAAa,GAAG,QAAQ,UAAU,EAAE;AAAA,UAEnC;AAAA;AAAA,MACF;AAAA,IAEF;AAAA,IACA,KAAK,QAAQ;AACZ,aACC,4CAAC,yDAA0B,WAAsB,eAAa,GAAG,QAAQ,UAAU,EAAE,IACnF,UACF;AAAA,IAEF;AAAA,IACA,KAAK,gBAAgB;AACpB,aACC;AAAA,QAAC;AAAA;AAAA,UACA,KAAI;AAAA,UACJ,eAAW,kBAAAA,SAAW,oBAAoB,SAAS;AAAA,UACnD,eAAa,GAAG,QAAQ,UAAU,EAAE;AAAA,UAEnC;AAAA;AAAA,MACF;AAAA,IAEF;AAAA,IACA,KAAK,sBAAsB;AAE1B,aACC,6CAAC,SAAI,WAAU,gCAA+B,eAAa,GAAG,QAAQ,UAAU,EAAE,IACjF;AAAA,oDAAC,QAAG,WAAU,uCAAuC,oBAAS;AAAA,QAC9D,4CAAC,SAAI,WAAU,yCAAyC,UAAS;AAAA,SAClE;AAAA,IAEF;AAAA,IACA,SAAS;AACR,aAAO;AAAA,IACR;AAAA,EACD;AACD;",
4
+ "sourcesContent": ["import classNames from 'classnames'\nimport { ReactNode } from 'react'\nimport { unwrapLabel } from '../../../context/actions'\nimport { TLUiTranslationKey } from '../../../hooks/useTranslation/TLUiTranslationKey'\nimport { useTranslation } from '../../../hooks/useTranslation/useTranslation'\nimport { TldrawUiColumn, TldrawUiGrid, TldrawUiRow, useTldrawUiOrientation } from '../layout'\nimport { TldrawUiDropdownMenuGroup } from '../TldrawUiDropdownMenu'\nimport { useTldrawUiMenuContext } from './TldrawUiMenuContext'\n\n/** @public */\nexport interface TLUiMenuGroupProps<TranslationKey extends string = string> {\n\tid: 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\tclassName?: string\n\tchildren?: ReactNode\n}\n\n/** @public @react */\nexport function TldrawUiMenuGroup({ id, label, className, children }: TLUiMenuGroupProps) {\n\tconst menu = useTldrawUiMenuContext()\n\tconst { orientation } = useTldrawUiOrientation()\n\tconst msg = useTranslation()\n\tconst labelToUse = unwrapLabel(label, menu.type)\n\tconst labelStr = labelToUse ? msg(labelToUse as TLUiTranslationKey) : undefined\n\n\tswitch (menu.type) {\n\t\tcase 'menu': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiDropdownMenuGroup\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tdata-testid={`${menu.sourceId}-group.${id}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</TldrawUiDropdownMenuGroup>\n\t\t\t)\n\t\t}\n\t\tcase 'context-menu': {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tdir=\"ltr\"\n\t\t\t\t\tclassName={classNames('tlui-menu__group', className)}\n\t\t\t\t\tdata-testid={`${menu.sourceId}-group.${id}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'keyboard-shortcuts': {\n\t\t\t// todo: if groups need a label, let's give em a label\n\t\t\treturn (\n\t\t\t\t<div className=\"tlui-shortcuts-dialog__group\" data-testid={`${menu.sourceId}-group.${id}`}>\n\t\t\t\t\t<h2 className=\"tlui-shortcuts-dialog__group__title\">{labelStr}</h2>\n\t\t\t\t\t<div className=\"tlui-shortcuts-dialog__group__content\">{children}</div>\n\t\t\t\t</div>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar': {\n\t\t\tconst Layout = orientation === 'horizontal' ? TldrawUiRow : TldrawUiColumn\n\t\t\treturn (\n\t\t\t\t<Layout className=\"tlui-main-toolbar__group\" data-testid={`${menu.sourceId}-group.${id}`}>\n\t\t\t\t\t{children}\n\t\t\t\t</Layout>\n\t\t\t)\n\t\t}\n\t\tcase 'toolbar-overflow': {\n\t\t\treturn (\n\t\t\t\t<TldrawUiGrid\n\t\t\t\t\tclassName=\"tlui-main-toolbar__group\"\n\t\t\t\t\tdata-testid={`${menu.sourceId}-group.${id}`}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</TldrawUiGrid>\n\t\t\t)\n\t\t}\n\t\tdefault: {\n\t\t\treturn children\n\t\t}\n\t}\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BI;AA/BJ,wBAAuB;AAEvB,qBAA4B;AAE5B,4BAA+B;AAC/B,oBAAkF;AAClF,kCAA0C;AAC1C,iCAAuC;AAchC,SAAS,kBAAkB,EAAE,IAAI,OAAO,WAAW,SAAS,GAAuB;AACzF,QAAM,WAAO,mDAAuB;AACpC,QAAM,EAAE,YAAY,QAAI,sCAAuB;AAC/C,QAAM,UAAM,sCAAe;AAC3B,QAAM,iBAAa,4BAAY,OAAO,KAAK,IAAI;AAC/C,QAAM,WAAW,aAAa,IAAI,UAAgC,IAAI;AAEtE,UAAQ,KAAK,MAAM;AAAA,IAClB,KAAK,QAAQ;AACZ,aACC;AAAA,QAAC;AAAA;AAAA,UACA;AAAA,UACA,eAAa,GAAG,KAAK,QAAQ,UAAU,EAAE;AAAA,UAExC;AAAA;AAAA,MACF;AAAA,IAEF;AAAA,IACA,KAAK,gBAAgB;AACpB,aACC;AAAA,QAAC;AAAA;AAAA,UACA,KAAI;AAAA,UACJ,eAAW,kBAAAA,SAAW,oBAAoB,SAAS;AAAA,UACnD,eAAa,GAAG,KAAK,QAAQ,UAAU,EAAE;AAAA,UAExC;AAAA;AAAA,MACF;AAAA,IAEF;AAAA,IACA,KAAK,sBAAsB;AAE1B,aACC,6CAAC,SAAI,WAAU,gCAA+B,eAAa,GAAG,KAAK,QAAQ,UAAU,EAAE,IACtF;AAAA,oDAAC,QAAG,WAAU,uCAAuC,oBAAS;AAAA,QAC9D,4CAAC,SAAI,WAAU,yCAAyC,UAAS;AAAA,SAClE;AAAA,IAEF;AAAA,IACA,KAAK,WAAW;AACf,YAAM,SAAS,gBAAgB,eAAe,4BAAc;AAC5D,aACC,4CAAC,UAAO,WAAU,4BAA2B,eAAa,GAAG,KAAK,QAAQ,UAAU,EAAE,IACpF,UACF;AAAA,IAEF;AAAA,IACA,KAAK,oBAAoB;AACxB,aACC;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,eAAa,GAAG,KAAK,QAAQ,UAAU,EAAE;AAAA,UAExC;AAAA;AAAA,MACF;AAAA,IAEF;AAAA,IACA,SAAS;AACR,aAAO;AAAA,IACR;AAAA,EACD;AACD;",
6
6
  "names": ["classNames"]
7
7
  }
@@ -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,
@@ -68,7 +69,6 @@ function TldrawUiMenuItem({
68
69
  type: "menu",
69
70
  "data-testid": `${sourceId}.${id}`,
70
71
  disabled,
71
- title: titleStr,
72
72
  onClick: (e) => {
73
73
  if (noClose) {
74
74
  (0, import_editor.preventDefault)(e);
@@ -93,7 +93,6 @@ function TldrawUiMenuItem({
93
93
  import_radix_ui.ContextMenu.Item,
94
94
  {
95
95
  dir: "ltr",
96
- title: titleStr,
97
96
  draggable: false,
98
97
  className: "tlui-button tlui-button__menu",
99
98
  "data-testid": `${sourceId}.${id}`,
@@ -114,22 +113,6 @@ function TldrawUiMenuItem({
114
113
  }
115
114
  );
116
115
  }
117
- case "panel": {
118
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
119
- import_TldrawUiButton.TldrawUiButton,
120
- {
121
- "data-testid": `${sourceId}.${id}`,
122
- type: "menu",
123
- title: titleStr,
124
- disabled,
125
- onClick: () => onSelect(sourceId),
126
- children: [
127
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonLabel.TldrawUiButtonLabel, { children: labelStr }),
128
- spinner ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Spinner.Spinner, {}) : icon && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_TldrawUiButtonIcon.TldrawUiButtonIcon, { icon })
129
- ]
130
- }
131
- );
132
- }
133
116
  case "small-icons":
134
117
  case "icons": {
135
118
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -220,7 +203,6 @@ function TldrawUiMenuItem({
220
203
  "aria-label": labelStr,
221
204
  "aria-pressed": isSelected ? "true" : "false",
222
205
  isActive: isSelected,
223
- className: "tlui-button-grid__button",
224
206
  "data-testid": `tools.more.${id}`,
225
207
  "data-value": id,
226
208
  disabled,
@@ -243,35 +225,39 @@ function useDraggableEvents(onDragStart, onSelect) {
243
225
  function handlePointerDown(e) {
244
226
  state = {
245
227
  name: "pointing",
246
- start: editor.inputs.currentPagePoint.clone()
228
+ screenSpaceStart: { x: e.clientX, y: e.clientY }
247
229
  };
248
230
  e.currentTarget.setPointerCapture(e.pointerId);
249
231
  }
250
232
  function handlePointerMove(e) {
251
233
  if (e.isSpecialRedispatchedEvent) return;
252
234
  if (state.name === "pointing") {
253
- const distance = import_editor.Vec.Dist2(state.start, editor.inputs.currentPagePoint);
254
- if (distance > (editor.getInstanceState().isCoarsePointer ? editor.options.coarseDragDistanceSquared : editor.options.dragDistanceSquared)) {
255
- const start = state.start;
235
+ const distanceSq = import_editor.Vec.Dist2(state.screenSpaceStart, { x: e.clientX, y: e.clientY });
236
+ if (distanceSq > (editor.getInstanceState().isCoarsePointer ? editor.options.uiCoarseDragDistanceSquared : editor.options.uiDragDistanceSquared)) {
237
+ const screenSpaceStart = state.screenSpaceStart;
256
238
  state = {
257
239
  name: "dragging",
258
- start
240
+ screenSpaceStart
259
241
  };
260
242
  editor.run(() => {
243
+ editor.setCurrentTool("select");
261
244
  editor.dispatch({
262
245
  type: "pointer",
263
246
  target: "canvas",
264
247
  name: "pointer_down",
265
248
  ...(0, import_editor.getPointerInfo)(e),
266
- point: start
249
+ point: screenSpaceStart
267
250
  });
268
251
  editor.selectNone();
269
252
  onDragStart?.("toolbar", {
270
253
  type: "pointer",
271
254
  target: "canvas",
272
255
  name: "pointer_move",
273
- ...(0, import_editor.getPointerInfo)(e)
256
+ ...(0, import_editor.getPointerInfo)(e),
257
+ point: screenSpaceStart
274
258
  });
259
+ import_TldrawUiTooltip.tooltipManager.hideAllTooltips();
260
+ editor.getContainer().focus();
275
261
  });
276
262
  }
277
263
  }