tldraw 3.16.0-canary.856874107ebd → 3.16.0-canary.887377ec7acc

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 (369) hide show
  1. package/dist-cjs/index.d.ts +269 -106
  2. package/dist-cjs/index.js +36 -14
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/Tldraw.js +12 -2
  5. package/dist-cjs/lib/Tldraw.js.map +2 -2
  6. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  7. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -4
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  11. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  12. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  13. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  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 -5
  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 +1 -0
  21. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  23. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  24. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +2 -1
  25. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  26. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  27. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  28. package/dist-cjs/lib/shapes/shared/ShapeFill.js +1 -1
  29. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  30. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  31. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +0 -2
  32. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  33. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  34. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  35. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  36. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  37. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  38. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  39. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  40. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  41. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  42. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  43. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  44. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  45. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +10 -2
  46. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  47. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  48. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  49. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  50. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  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 +4 -2
  54. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +9 -4
  56. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +255 -316
  58. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/{primitives/TldrawUiButtonPicker.js → StylePanel/StylePanelButtonPicker.js} +52 -45
  60. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  61. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
  62. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  63. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +23 -22
  64. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  65. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +24 -21
  66. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  67. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  68. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  69. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  70. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  71. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
  72. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  73. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -22
  74. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  75. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  76. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  77. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +3 -3
  78. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +188 -78
  80. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  81. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +10 -1
  82. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  83. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +18 -5
  84. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  85. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +17 -3
  86. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  87. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +176 -166
  88. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  89. package/dist-cjs/lib/ui/components/primitives/layout.js +30 -5
  90. package/dist-cjs/lib/ui/components/primitives/layout.js.map +2 -2
  91. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  92. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  93. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  94. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +8 -24
  95. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  96. package/dist-cjs/lib/ui/context/actions.js +23 -10
  97. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  98. package/dist-cjs/lib/ui/context/components.js +2 -0
  99. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  100. package/dist-cjs/lib/ui/context/events.js.map +1 -1
  101. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  102. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  103. package/dist-cjs/lib/ui/hooks/useTools.js +22 -4
  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 +4 -2
  107. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  108. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  109. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  110. package/dist-cjs/lib/ui/version.js +3 -3
  111. package/dist-cjs/lib/ui/version.js.map +1 -1
  112. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  113. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  114. package/dist-cjs/lib/utils/export/export.js +0 -20
  115. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  116. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  117. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  118. package/dist-esm/index.d.mts +269 -106
  119. package/dist-esm/index.mjs +68 -30
  120. package/dist-esm/index.mjs.map +2 -2
  121. package/dist-esm/lib/Tldraw.mjs +14 -4
  122. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  123. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  124. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  125. package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -4
  126. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  127. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  128. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  129. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  130. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  131. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  132. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  133. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +12 -5
  134. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  135. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  136. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  137. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +1 -0
  138. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  139. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  140. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  141. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +2 -1
  142. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  143. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  144. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  145. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +1 -1
  146. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  147. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  148. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +0 -2
  149. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  150. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  151. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  152. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  153. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  154. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  155. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  156. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  157. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  158. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  159. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  160. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  161. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  162. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +10 -2
  163. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  164. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  165. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  166. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  167. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  168. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  169. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  170. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +4 -2
  171. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  172. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +14 -5
  173. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  174. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +257 -320
  175. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  176. package/dist-esm/lib/ui/components/{primitives/TldrawUiButtonPicker.mjs → StylePanel/StylePanelButtonPicker.mjs} +54 -43
  177. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  178. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
  179. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  180. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +20 -19
  181. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  182. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +21 -18
  183. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  184. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  185. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  186. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  187. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  188. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
  189. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  190. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -22
  191. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  192. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  193. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  194. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +3 -3
  195. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  196. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -80
  197. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  198. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +10 -1
  199. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  200. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +18 -5
  201. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  202. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +18 -4
  203. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  204. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +186 -168
  205. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  206. package/dist-esm/lib/ui/components/primitives/layout.mjs +31 -6
  207. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +2 -2
  208. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  209. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  210. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  211. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +8 -24
  212. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  213. package/dist-esm/lib/ui/context/actions.mjs +23 -10
  214. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  215. package/dist-esm/lib/ui/context/components.mjs +2 -0
  216. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  217. package/dist-esm/lib/ui/context/events.mjs.map +1 -1
  218. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  219. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  220. package/dist-esm/lib/ui/hooks/useTools.mjs +23 -4
  221. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  222. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +4 -2
  223. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  224. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  225. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  226. package/dist-esm/lib/ui/version.mjs +3 -3
  227. package/dist-esm/lib/ui/version.mjs.map +1 -1
  228. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  229. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  230. package/dist-esm/lib/utils/export/export.mjs +0 -20
  231. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  232. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  233. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  234. package/package.json +11 -34
  235. package/src/index.ts +49 -22
  236. package/src/lib/Tldraw.tsx +15 -2
  237. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  238. package/src/lib/defaultExternalContentHandlers.ts +12 -4
  239. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  240. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +6 -5
  241. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +48 -6
  242. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  243. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  244. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  245. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  246. package/src/lib/shapes/frame/FrameShapeUtil.tsx +21 -4
  247. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  248. package/src/lib/shapes/geo/GeoShapeUtil.tsx +1 -0
  249. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  250. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  251. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  252. package/src/lib/shapes/note/NoteShapeUtil.tsx +1 -0
  253. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  254. package/src/lib/shapes/shared/ShapeFill.tsx +1 -1
  255. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  256. package/src/lib/shapes/shared/useEditablePlainText.ts +0 -6
  257. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  258. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  259. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  260. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  261. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  262. package/src/lib/ui/TldrawUi.tsx +33 -12
  263. package/src/lib/ui/assetUrls.ts +13 -10
  264. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +13 -2
  265. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  266. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  267. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  268. package/src/lib/ui/components/MobileStylePanel.tsx +4 -3
  269. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +27 -13
  270. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +260 -381
  271. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +63 -50
  272. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
  273. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +28 -19
  274. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  275. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  276. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  277. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
  278. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -24
  279. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  280. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +5 -5
  281. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +208 -56
  282. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +6 -1
  283. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +52 -32
  284. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +25 -5
  285. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +220 -187
  286. package/src/lib/ui/components/primitives/layout.tsx +79 -5
  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 +11 -24
  290. package/src/lib/ui/context/actions.tsx +23 -10
  291. package/src/lib/ui/context/components.tsx +3 -0
  292. package/src/lib/ui/context/events.tsx +1 -1
  293. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  294. package/src/lib/ui/hooks/useTools.tsx +26 -4
  295. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +2 -0
  296. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +4 -2
  297. package/src/lib/ui/kbd-utils.ts +10 -3
  298. package/src/lib/ui/version.ts +3 -3
  299. package/src/lib/ui.css +365 -245
  300. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  301. package/src/lib/utils/export/copyAs.ts +1 -24
  302. package/src/lib/utils/export/export.ts +0 -36
  303. package/src/lib/utils/export/exportAs.ts +1 -32
  304. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  305. package/src/test/A11y.test.tsx +3 -2
  306. package/src/test/ClickManager.test.ts +7 -6
  307. package/src/test/Editor.test.tsx +20 -19
  308. package/src/test/EraserTool.test.ts +184 -13
  309. package/src/test/HandTool.test.ts +10 -9
  310. package/src/test/HighlightShape.test.ts +2 -1
  311. package/src/test/SelectTool.test.ts +3 -2
  312. package/src/test/TLUserPreferences.test.ts +4 -3
  313. package/src/test/TestEditor.ts +13 -15
  314. package/src/test/TldrawEditor.test.tsx +11 -10
  315. package/src/test/ZoomTool.test.ts +7 -6
  316. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  317. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  318. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  319. package/src/test/arrows-megabus.test.tsx +5 -4
  320. package/src/test/bindings.test.tsx +24 -37
  321. package/src/test/bookmark-shapes.test.ts +1 -8
  322. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  323. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  324. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  325. package/src/test/commands/alignShapes.test.tsx +25 -24
  326. package/src/test/commands/animationSpeed.test.ts +2 -1
  327. package/src/test/commands/centerOnPoint.test.ts +3 -2
  328. package/src/test/commands/clipboard.test.ts +3 -2
  329. package/src/test/commands/createShapes.test.ts +2 -1
  330. package/src/test/commands/deleteShapes.test.ts +2 -1
  331. package/src/test/commands/distributeShapes.test.tsx +11 -10
  332. package/src/test/commands/getSvgString.test.ts +2 -1
  333. package/src/test/commands/packShapes.test.ts +5 -4
  334. package/src/test/commands/resizeShape.test.ts +2 -1
  335. package/src/test/commands/rotateShapes.test.ts +7 -6
  336. package/src/test/commands/setCamera.test.ts +4 -3
  337. package/src/test/commands/setCurrentPage.test.ts +3 -2
  338. package/src/test/commands/stackShapes.test.ts +11 -10
  339. package/src/test/commands/stretch.test.tsx +13 -12
  340. package/src/test/createDeepLink.test.tsx +2 -1
  341. package/src/test/cropping.test.ts +3 -2
  342. package/src/test/custom-clipping.test.ts +436 -0
  343. package/src/test/drawing.test.ts +2 -1
  344. package/src/test/flipShapes.test.ts +4 -3
  345. package/src/test/frames.test.ts +25 -24
  346. package/src/test/getCulledShapes.test.tsx +74 -4
  347. package/src/test/groups.test.tsx +1 -1
  348. package/src/test/handleDeepLink.test.tsx +2 -1
  349. package/src/test/maxShapes.test.ts +3 -2
  350. package/src/test/modifiers.test.ts +5 -4
  351. package/src/test/navigation.test.ts +12 -11
  352. package/src/test/panning.test.ts +2 -1
  353. package/src/test/perf/perf.test.ts +2 -1
  354. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  355. package/src/test/resizing.test.ts +39 -38
  356. package/src/test/select.test.tsx +4 -3
  357. package/src/test/selection-omnibus.test.ts +11 -10
  358. package/src/test/shapeutils.test.ts +4 -3
  359. package/src/test/translating.test.ts +9 -8
  360. package/tldraw.css +673 -537
  361. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  362. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  363. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  364. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  365. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  366. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  367. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  368. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  369. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -110
package/src/lib/ui.css CHANGED
@@ -1,15 +1,15 @@
1
1
  /* @tldraw/ui */
2
2
 
3
3
  .tl-container {
4
- --layer-above: 1;
5
- --layer-focused-input: 10;
6
- --layer-menu-click-capture: 250;
7
- --layer-panels: 300;
8
- --layer-menus: 400;
9
- --layer-toasts: 650;
10
- --layer-cursor: 700;
11
- --layer-header-footer: 999;
12
- --layer-following-indicator: 1000;
4
+ --tl-layer-above: 1;
5
+ --tl-layer-focused-input: 10;
6
+ --tl-layer-menu-click-capture: 250;
7
+ --tl-layer-panels: 300;
8
+ --tl-layer-menus: 400;
9
+ --tl-layer-toasts: 650;
10
+ --tl-layer-cursor: 700;
11
+ --tl-layer-header-footer: 999;
12
+ --tl-layer-following-indicator: 1000;
13
13
  }
14
14
 
15
15
  /* Button */
@@ -33,23 +33,23 @@
33
33
  text-rendering: optimizeLegibility;
34
34
  font-size: 12px;
35
35
  gap: 0px;
36
- color: var(--color-text-1);
36
+ color: var(--tl-color-text-1);
37
37
  z-index: 0;
38
38
  }
39
39
 
40
40
  .tlui-button:disabled {
41
- color: var(--color-text-3);
41
+ color: var(--tl-color-text-3);
42
42
  text-shadow: none;
43
43
  cursor: default;
44
44
  }
45
45
 
46
46
  .tlui-button:disabled .tlui-kbd {
47
- color: var(--color-text-3);
47
+ color: var(--tl-color-text-3);
48
48
  }
49
49
 
50
50
  .tlui-button > * {
51
51
  position: relative;
52
- z-index: var(--layer-above);
52
+ z-index: var(--tl-layer-above);
53
53
  }
54
54
 
55
55
  .tlui-button__label {
@@ -65,7 +65,7 @@
65
65
  */
66
66
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button:focus-visible {
67
67
  border-radius: 10px;
68
- outline: 2px solid var(--color-focus);
68
+ outline: 2px solid var(--tl-color-focus);
69
69
  outline-offset: -5px;
70
70
  }
71
71
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button__tool:focus-visible {
@@ -73,7 +73,7 @@
73
73
  }
74
74
  .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
75
75
  border-radius: 10px;
76
- outline: 2px solid var(--color-focus);
76
+ outline: 2px solid var(--tl-color-focus);
77
77
  outline-offset: -5px;
78
78
  }
79
79
 
@@ -82,8 +82,8 @@
82
82
  content: '';
83
83
  position: absolute;
84
84
  inset: 4px;
85
- border-radius: var(--radius-2);
86
- background: var(--color-muted-2);
85
+ border-radius: var(--tl-radius-2);
86
+ background: var(--tl-color-muted-2);
87
87
  opacity: 0;
88
88
  }
89
89
 
@@ -93,18 +93,18 @@
93
93
 
94
94
  .tlui-button[data-isactive='true']::after,
95
95
  .tlui-button[data-isactive='true']:not(:disabled, :focus-visible):active:after {
96
- background: var(--color-hint);
96
+ background: var(--tl-color-hint);
97
97
  opacity: 1;
98
98
  }
99
99
 
100
100
  .tlui-button[aria-expanded='true'][data-direction='left'] {
101
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
101
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
102
102
  opacity: 1;
103
103
  }
104
104
 
105
105
  @media (hover: hover) {
106
106
  .tlui-button[aria-expanded='true'][data-direction='left']:not(:hover)::after {
107
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
107
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
108
108
  opacity: 1;
109
109
  }
110
110
 
@@ -118,18 +118,18 @@
118
118
  }
119
119
 
120
120
  .tlui-button__icon + .tlui-button__label {
121
- margin-left: var(--space-2);
121
+ margin-left: var(--tl-space-2);
122
122
  }
123
123
 
124
124
  /* Low button */
125
125
 
126
126
  .tlui-button__low {
127
- border-radius: var(--radius-3);
128
- background-color: var(--color-low);
127
+ border-radius: var(--tl-radius-3);
128
+ background-color: var(--tl-color-low);
129
129
  }
130
130
 
131
131
  .tlui-button__low::after {
132
- background-color: var(--color-muted-2);
132
+ background-color: var(--tl-color-muted-2);
133
133
  opacity: 0;
134
134
  }
135
135
 
@@ -142,21 +142,21 @@
142
142
  /* Primary / danger buttons */
143
143
 
144
144
  .tlui-button__primary {
145
- color: var(--color-primary);
145
+ color: var(--tl-color-primary);
146
146
  }
147
147
 
148
148
  .tlui-button__danger {
149
- color: var(--color-danger);
149
+ color: var(--tl-color-danger);
150
150
  text-shadow: none;
151
151
  }
152
152
 
153
153
  @media (hover: hover) {
154
154
  .tlui-button__primary:not(:disabled, :focus-visible):hover {
155
- color: var(--color-primary);
155
+ color: var(--tl-color-primary);
156
156
  }
157
157
 
158
158
  .tlui-button__danger:not(:disabled, :focus-visible):hover {
159
- color: var(--color-danger);
159
+ color: var(--tl-color-danger);
160
160
  text-shadow: none;
161
161
  }
162
162
  }
@@ -173,7 +173,7 @@
173
173
 
174
174
  .tlui-button__menu::after {
175
175
  inset: 4px;
176
- border-radius: var(--radius-2);
176
+ border-radius: var(--tl-radius-2);
177
177
  }
178
178
 
179
179
  .tlui-button__menu > .tlui-icon + .tlui-button__label {
@@ -203,13 +203,21 @@
203
203
 
204
204
  .tlui-main-toolbar__lock-button {
205
205
  position: absolute;
206
- top: 4px;
207
- right: 0px;
208
206
  pointer-events: all;
209
207
  height: 40px;
210
208
  width: 40px;
209
+ border-radius: var(--tl-radius-2);
210
+ }
211
+
212
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__lock-button {
213
+ top: 4px;
214
+ right: 0px;
211
215
  min-width: 0px;
212
- border-radius: var(--radius-2);
216
+ }
217
+
218
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__lock-button {
219
+ bottom: 0px;
220
+ min-height: 0px;
213
221
  }
214
222
 
215
223
  .tlui-main-toolbar__lock-button::after {
@@ -232,24 +240,24 @@
232
240
  }
233
241
 
234
242
  .tlui-button__tool[aria-pressed='true'] {
235
- color: var(--color-selected-contrast);
243
+ color: var(--tl-color-selected-contrast);
236
244
  }
237
245
 
238
246
  .tlui-button__tool[aria-pressed='true']:not(:disabled, :focus-visible):active {
239
- color: var(--color-selected-contrast);
247
+ color: var(--tl-color-selected-contrast);
240
248
  }
241
249
 
242
250
  .tlui-button__tool[aria-pressed='true']:not(:disabled)::after {
243
- background: var(--color-selected);
251
+ background: var(--tl-color-selected);
244
252
  opacity: 1;
245
253
  }
246
254
 
247
- .tlui-layout__mobile .tlui-button__tool {
255
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool {
248
256
  height: 48px;
249
257
  width: 43px;
250
258
  }
251
259
 
252
- .tlui-layout__mobile .tlui-button__tool > .tlui-icon {
260
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool > .tlui-icon {
253
261
  height: 16px;
254
262
  width: 16px;
255
263
  }
@@ -266,6 +274,18 @@
266
274
  margin-right: -2px;
267
275
  }
268
276
 
277
+ /* Column layout */
278
+
279
+ .tlui-column {
280
+ display: flex;
281
+ flex-direction: column;
282
+ padding: 2px 0;
283
+ }
284
+ .tlui-column > * {
285
+ margin-top: -2px;
286
+ margin-bottom: -2px;
287
+ }
288
+
269
289
  /* Grid layout */
270
290
 
271
291
  .tlui-grid {
@@ -301,9 +321,9 @@
301
321
  pointer-events: none;
302
322
  user-select: none;
303
323
  contain: strict;
304
- z-index: var(--layer-panels);
324
+ z-index: var(--tl-layer-panels);
305
325
  transform: translate3d(0, 0, 0);
306
- --sab: env(safe-area-inset-bottom);
326
+ --tl-sab: env(safe-area-inset-bottom);
307
327
  font-weight: 500;
308
328
  line-height: 1.6;
309
329
  -webkit-font-smoothing: antialiased;
@@ -356,11 +376,11 @@
356
376
  justify-content: flex-start;
357
377
  align-items: flex-start;
358
378
  width: min-content;
359
- gap: var(--space-3);
360
- margin: var(--space-2) var(--space-3);
379
+ gap: var(--tl-space-3);
380
+ margin: var(--tl-space-2) var(--tl-space-3);
361
381
  white-space: nowrap;
362
382
  pointer-events: none;
363
- z-index: var(--layer-panels);
383
+ z-index: var(--tl-layer-panels);
364
384
  }
365
385
 
366
386
  /* ---------------------- Icon ---------------------- */
@@ -388,7 +408,7 @@
388
408
 
389
409
  .tlui-slider__container {
390
410
  width: 100%;
391
- padding: 0px var(--space-4);
411
+ padding: 0px var(--tl-space-4);
392
412
  }
393
413
 
394
414
  .tlui-slider {
@@ -414,7 +434,7 @@
414
434
  content: '';
415
435
  height: 3px;
416
436
  width: 100%;
417
- background-color: var(--color-muted-1);
437
+ background-color: var(--tl-color-muted-1);
418
438
  border-radius: 14px;
419
439
  }
420
440
 
@@ -423,7 +443,7 @@
423
443
  top: calc(50% - 2px);
424
444
  left: 0px;
425
445
  height: 3px;
426
- background-color: var(--color-selected);
446
+ background-color: var(--tl-color-selected);
427
447
  border-radius: 14px;
428
448
  }
429
449
 
@@ -435,16 +455,16 @@
435
455
  height: 18px;
436
456
  position: relative;
437
457
  top: -1px;
438
- background-color: var(--color-panel);
458
+ background-color: var(--tl-color-panel);
439
459
  border-radius: 999px;
440
- box-shadow: inset 0px 0px 0px 2px var(--color-text-1);
460
+ box-shadow: inset 0px 0px 0px 2px var(--tl-color-text-1);
441
461
  }
442
462
 
443
463
  .tlui-slider__thumb:active {
444
464
  cursor: grabbing;
445
465
  box-shadow:
446
- inset 0px 0px 0px 2px var(--color-text-1),
447
- var(--shadow-1);
466
+ inset 0px 0px 0px 2px var(--tl-color-text-1),
467
+ var(--tl-shadow-1);
448
468
  }
449
469
 
450
470
  /* ---------------------- Input --------------------- */
@@ -453,7 +473,7 @@
453
473
  background: none;
454
474
  margin: 0px;
455
475
  position: relative;
456
- z-index: var(--layer-above);
476
+ z-index: var(--tl-layer-above);
457
477
  height: 40px;
458
478
  max-height: 40px;
459
479
  display: flex;
@@ -462,8 +482,8 @@
462
482
  font-family: inherit;
463
483
  font-size: 12px;
464
484
  font-weight: inherit;
465
- color: var(--color-text-1);
466
- padding: var(--space-4);
485
+ color: var(--tl-color-text-1);
486
+ padding: var(--tl-space-4);
467
487
  padding-left: 0px;
468
488
  border: none;
469
489
  outline: none;
@@ -479,8 +499,8 @@
479
499
  height: 44px;
480
500
  display: flex;
481
501
  align-items: center;
482
- gap: var(--space-4);
483
- color: var(--color-text);
502
+ gap: var(--tl-space-4);
503
+ color: var(--tl-color-text);
484
504
  }
485
505
 
486
506
  .tlui-input__wrapper > .tlui-icon {
@@ -512,7 +532,7 @@
512
532
  grid-auto-columns: minmax(1em, auto);
513
533
  align-self: bottom;
514
534
  color: currentColor;
515
- margin-left: var(--space-4);
535
+ margin-left: var(--tl-space-4);
516
536
  }
517
537
 
518
538
  .tlui-kbd > span {
@@ -529,13 +549,13 @@
529
549
  }
530
550
 
531
551
  .tlui-kbd:not(:last-child) {
532
- margin-right: var(--space-2);
552
+ margin-right: var(--tl-space-2);
533
553
  }
534
554
 
535
555
  /* Focus Mode Button */
536
556
 
537
557
  .tlui-focus-button {
538
- z-index: var(--layer-panels);
558
+ z-index: var(--tl-layer-panels);
539
559
  pointer-events: all;
540
560
  }
541
561
 
@@ -546,16 +566,16 @@
546
566
  }
547
567
 
548
568
  .tlui-menu {
549
- z-index: var(--layer-menus);
569
+ z-index: var(--tl-layer-menus);
550
570
  height: fit-content;
551
571
  width: fit-content;
552
- border-radius: var(--radius-3);
572
+ border-radius: var(--tl-radius-3);
553
573
  pointer-events: all;
554
574
  touch-action: auto;
555
575
  overflow-y: auto;
556
576
  overscroll-behavior: none;
557
- background-color: var(--color-panel);
558
- box-shadow: var(--shadow-3);
577
+ background-color: var(--tl-color-panel);
578
+ box-shadow: var(--tl-shadow-3);
559
579
  }
560
580
 
561
581
  .tlui-menu::-webkit-scrollbar {
@@ -573,7 +593,7 @@
573
593
  }
574
594
 
575
595
  .tlui-menu__group {
576
- border-bottom: 1px solid var(--color-divider);
596
+ border-bottom: 1px solid var(--tl-color-divider);
577
597
  }
578
598
  .tlui-menu__group:nth-last-of-type(1) {
579
599
  border-bottom: none;
@@ -583,23 +603,23 @@
583
603
 
584
604
  .tlui-menu__submenu__trigger[data-state='open']::after {
585
605
  opacity: 1;
586
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
606
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
587
607
  }
588
608
 
589
609
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
590
610
  opacity: 1;
591
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
611
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
592
612
  }
593
613
 
594
614
  @media (hover: hover) {
595
615
  .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
596
616
  opacity: 1;
597
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
617
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
598
618
  }
599
619
 
600
620
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
601
621
  opacity: 1;
602
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
622
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
603
623
  }
604
624
  }
605
625
 
@@ -624,7 +644,7 @@
624
644
  .tlui-menu-click-capture {
625
645
  position: fixed;
626
646
  inset: 0;
627
- z-index: var(--layer-menu-click-capture);
647
+ z-index: var(--tl-layer-menu-click-capture);
628
648
  }
629
649
 
630
650
  /* --------------------- Popover -------------------- */
@@ -640,10 +660,10 @@
640
660
  max-height: calc(var(--radix-popover-content-available-height) - 8px);
641
661
  margin: 0px;
642
662
  border: none;
643
- border-radius: var(--radius-3);
644
- background-color: var(--color-panel);
645
- box-shadow: var(--shadow-3);
646
- z-index: var(--layer-menus);
663
+ border-radius: var(--tl-radius-3);
664
+ background-color: var(--tl-color-panel);
665
+ box-shadow: var(--tl-shadow-3);
666
+ z-index: var(--tl-layer-menus);
647
667
  overflow: hidden;
648
668
  overflow-y: auto;
649
669
  touch-action: auto;
@@ -656,22 +676,22 @@
656
676
 
657
677
  .tlui-menu-zone {
658
678
  position: relative;
659
- z-index: var(--layer-panels);
679
+ z-index: var(--tl-layer-panels);
660
680
  width: fit-content;
661
- border-right: 2px solid var(--color-background);
662
- border-bottom: 2px solid var(--color-background);
663
- border-bottom-right-radius: var(--radius-4);
664
- background-color: var(--color-low);
681
+ border-right: 2px solid var(--tl-color-background);
682
+ border-bottom: 2px solid var(--tl-color-background);
683
+ border-bottom-right-radius: var(--tl-radius-4);
684
+ background-color: var(--tl-color-low);
665
685
  }
666
686
 
667
687
  .tlui-menu-zone *[data-state='open']::after {
668
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
688
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
669
689
  opacity: 1;
670
690
  }
671
691
 
672
692
  @media (hover: hover) {
673
693
  .tlui-menu-zone *[data-state='open']:not(:hover)::after {
674
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
694
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
675
695
  opacity: 1;
676
696
  }
677
697
  }
@@ -697,8 +717,8 @@
697
717
  align-items: center;
698
718
  width: 100%;
699
719
  height: 40px;
700
- padding-left: var(--space-4);
701
- border-bottom: 1px solid var(--color-divider);
720
+ padding-left: var(--tl-space-4);
721
+ border-bottom: 1px solid var(--tl-color-divider);
702
722
  }
703
723
 
704
724
  .tlui-page-menu__header > .tlui-button:nth-of-type(1) {
@@ -706,7 +726,7 @@
706
726
  }
707
727
 
708
728
  .tlui-page-menu__header__title {
709
- color: var(--color-text);
729
+ color: var(--tl-color-text);
710
730
  font-size: 12px;
711
731
  flex-grow: 2;
712
732
  }
@@ -791,7 +811,7 @@
791
811
  display: inline-flex;
792
812
  align-items: center;
793
813
  justify-content: center;
794
- color: var(--color-text);
814
+ color: var(--tl-color-text);
795
815
  }
796
816
 
797
817
  .tlui-page_menu__item__sortable {
@@ -804,7 +824,7 @@
804
824
  flex-direction: row;
805
825
  align-items: center;
806
826
  overflow: hidden;
807
- z-index: var(--layer-above);
827
+ z-index: var(--tl-layer-above);
808
828
  }
809
829
 
810
830
  .tlui-page_menu__item__sortable__title {
@@ -816,7 +836,7 @@
816
836
  }
817
837
 
818
838
  .tlui-page_menu__item__sortable:focus-visible {
819
- z-index: var(--layer-focused-input);
839
+ z-index: var(--tl-layer-focused-input);
820
840
  }
821
841
 
822
842
  .tlui-page_menu__item__sortable__handle {
@@ -825,7 +845,7 @@
825
845
  min-width: 0px;
826
846
  height: 40px;
827
847
  cursor: grab;
828
- color: var(--color-text-3);
848
+ color: var(--tl-color-text-3);
829
849
  flex-shrink: 0;
830
850
  margin-right: -9px;
831
851
  }
@@ -867,13 +887,13 @@
867
887
  }
868
888
 
869
889
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
870
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
890
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
871
891
  opacity: 1;
872
892
  }
873
893
 
874
894
  @media (hover: hover) {
875
895
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']:not(:hover)::after {
876
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
896
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
877
897
  opacity: 1;
878
898
  }
879
899
  }
@@ -909,7 +929,7 @@
909
929
  top: 48px;
910
930
  left: -9999px;
911
931
  padding: 8px 16px;
912
- z-index: var(--layer-toasts);
932
+ z-index: var(--tl-layer-toasts);
913
933
  }
914
934
 
915
935
  .tl-skip-to-main-content:focus {
@@ -921,11 +941,11 @@
921
941
  .tlui-offline-indicator {
922
942
  display: flex;
923
943
  flex-direction: row;
924
- gap: var(--space-3);
925
- color: var(--color-text);
926
- background-color: var(--color-low);
927
- border: 3px solid var(--color-background);
928
- padding: 0px var(--space-5);
944
+ gap: var(--tl-space-3);
945
+ color: var(--tl-color-text);
946
+ background-color: var(--tl-color-low);
947
+ border: 3px solid var(--tl-color-background);
948
+ padding: 0px var(--tl-space-5);
929
949
  height: 42px;
930
950
  align-items: center;
931
951
  justify-content: center;
@@ -940,10 +960,10 @@
940
960
  /* ------------------- Style panel ------------------ */
941
961
 
942
962
  .tlui-style-panel__wrapper {
943
- box-shadow: var(--shadow-2);
944
- border-radius: var(--radius-3);
963
+ box-shadow: var(--tl-shadow-2);
964
+ border-radius: var(--tl-radius-3);
945
965
  pointer-events: all;
946
- background-color: var(--color-panel);
966
+ background-color: var(--tl-color-panel);
947
967
  height: fit-content;
948
968
  max-height: 100%;
949
969
  margin: 8px;
@@ -952,7 +972,7 @@
952
972
  overscroll-behavior: none;
953
973
  overflow-y: auto;
954
974
  overflow-x: hidden;
955
- color: var(--color-text);
975
+ color: var(--tl-color-text);
956
976
  }
957
977
  /* if the style panel is the only child (ie no share menu), increase the margin */
958
978
  .tlui-style-panel__wrapper:only-child {
@@ -961,7 +981,7 @@
961
981
 
962
982
  .tlui-style-panel {
963
983
  position: relative;
964
- z-index: var(--layer-panels);
984
+ z-index: var(--tl-layer-panels);
965
985
  pointer-events: all;
966
986
  width: 148px;
967
987
  max-width: 148px;
@@ -969,7 +989,7 @@
969
989
 
970
990
  .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
971
991
  border-radius: 10px;
972
- outline: 2px solid var(--color-text);
992
+ outline: 2px solid var(--tl-color-text);
973
993
  outline-offset: -5px;
974
994
  }
975
995
 
@@ -987,8 +1007,22 @@
987
1007
  flex-direction: column;
988
1008
  }
989
1009
 
990
- .tlui-style-panel__section:nth-of-type(n + 2):not(:last-child) {
991
- border-bottom: 1px solid var(--color-divider);
1010
+ /*
1011
+ add a border to the bottom of all but the last section. we have to handle empty sections too, which
1012
+ are hidden and shouldn't be counted
1013
+ */
1014
+ .tlui-style-panel__section:not(:nth-last-child(-n + 1 of .tlui-style-panel__section:not(:empty))) {
1015
+ border-bottom: 1px solid var(--tl-color-divider);
1016
+ }
1017
+ /*
1018
+ if a section ends with a slider and we're adding a border, we need some extra space for visual
1019
+ balance. we need to handle empty sections as above. is this the most complex css selector in all of
1020
+ tldraw? probably.
1021
+ */
1022
+ .tlui-style-panel__section:has(.tlui-slider__container:last-child):not(
1023
+ :nth-last-child(-n + 1 of .tlui-style-panel__section:not(:empty))
1024
+ ) {
1025
+ margin-bottom: 7px;
992
1026
  }
993
1027
 
994
1028
  .tlui-style-panel__section:empty {
@@ -997,19 +1031,19 @@
997
1031
 
998
1032
  .tlui-style-panel__section__common:not(:only-child) {
999
1033
  margin-bottom: 7px;
1000
- border-bottom: 1px solid var(--color-divider);
1034
+ border-bottom: 1px solid var(--tl-color-divider);
1001
1035
  }
1002
1036
 
1003
1037
  .tlui-style-panel__dropdown-picker:only-child {
1004
- width: 100%;
1038
+ flex: 1;
1005
1039
  }
1006
1040
 
1007
1041
  .tlui-style-panel__double-select-picker {
1008
1042
  display: flex;
1009
1043
  grid-template-columns: 1fr auto;
1010
1044
  align-items: center;
1011
- padding-left: var(--space-4);
1012
- color: var(--color-text-1);
1045
+ padding-left: var(--tl-space-4);
1046
+ color: var(--tl-color-text-1);
1013
1047
  font-size: 12px;
1014
1048
  }
1015
1049
 
@@ -1023,13 +1057,16 @@
1023
1057
 
1024
1058
  .tlui-style-panel .tlui-button[data-state='open']::after {
1025
1059
  opacity: 1;
1026
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1060
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1027
1061
  }
1028
1062
 
1029
1063
  @media (hover: hover) {
1064
+ .tlui-style-panel .tlui-button[aria-expanded='true'] {
1065
+ background: none;
1066
+ }
1030
1067
  .tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
1031
1068
  opacity: 1;
1032
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1069
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1033
1070
  }
1034
1071
  }
1035
1072
 
@@ -1039,14 +1076,14 @@
1039
1076
  .tlui-style-panel__section__common .tlui-style-panel__subheading,
1040
1077
  .tlui-style-panel__subheading + .tlui-slider__container {
1041
1078
  margin: 0;
1042
- padding: var(--space-2) var(--space-3) 0px var(--space-4);
1079
+ padding: var(--tl-space-2) var(--tl-space-3) 0px var(--tl-space-4);
1043
1080
  font-size: 12px;
1044
1081
  font-weight: inherit;
1045
1082
  line-height: inherit;
1046
1083
  }
1047
1084
 
1048
1085
  .tlui-style-panel .tlui-style-panel__subheading:nth-of-type(1) {
1049
- padding-top: var(--space-3);
1086
+ padding-top: var(--tl-space-3);
1050
1087
  }
1051
1088
 
1052
1089
  .tlui-style-panel__subheading + .tlui-slider__container {
@@ -1057,11 +1094,11 @@
1057
1094
 
1058
1095
  .tlui-layout__bottom {
1059
1096
  grid-row: 2;
1097
+ width: 100%;
1060
1098
  }
1061
1099
 
1062
1100
  .tlui-layout__bottom__main {
1063
1101
  width: 100%;
1064
- position: relative;
1065
1102
  display: flex;
1066
1103
  align-items: flex-end;
1067
1104
  justify-content: center;
@@ -1073,11 +1110,10 @@
1073
1110
  display: flex;
1074
1111
  width: min-content;
1075
1112
  flex-direction: column;
1076
- z-index: var(--layer-panels);
1113
+ z-index: var(--tl-layer-panels);
1077
1114
  pointer-events: all;
1078
1115
  position: absolute;
1079
1116
  left: 0px;
1080
- bottom: 0px;
1081
1117
  }
1082
1118
 
1083
1119
  .tlui-navigation-panel::before {
@@ -1087,10 +1123,10 @@
1087
1123
  z-index: -1;
1088
1124
  inset: -2px -2px 0px 0px;
1089
1125
  border-radius: 0;
1090
- border-top: 2px solid var(--color-background);
1091
- border-right: 2px solid var(--color-background);
1092
- border-top-right-radius: var(--radius-4);
1093
- background-color: var(--color-low);
1126
+ border-top: 2px solid var(--tl-color-background);
1127
+ border-right: 2px solid var(--tl-color-background);
1128
+ border-top-right-radius: var(--tl-radius-4);
1129
+ background-color: var(--tl-color-low);
1094
1130
  }
1095
1131
 
1096
1132
  .tlui-navigation-panel[data-a11y='true']::before {
@@ -1104,7 +1140,7 @@
1104
1140
  height: 96px;
1105
1141
  min-height: 96px;
1106
1142
  overflow: hidden;
1107
- padding: var(--space-3);
1143
+ padding: var(--tl-space-3);
1108
1144
  padding-top: 0px;
1109
1145
  }
1110
1146
 
@@ -1124,7 +1160,23 @@
1124
1160
  align-items: center;
1125
1161
  justify-content: center;
1126
1162
  flex-grow: 2;
1127
- padding-bottom: calc(var(--space-3) + var(--sab));
1163
+ }
1164
+
1165
+ .tlui-main-toolbar--horizontal {
1166
+ padding-bottom: calc(var(--tl-space-3) + var(--tl-sab));
1167
+ max-width: 100%;
1168
+ }
1169
+
1170
+ .tlui-main-toolbar--vertical {
1171
+ position: absolute;
1172
+ left: 0;
1173
+ top: 90px; /* height of page menu + 'back to content' button */
1174
+ bottom: 140px; /* height of expanded mini-map */
1175
+ padding-left: calc(var(--tl-space-3) + var(--tl-sab));
1176
+ }
1177
+
1178
+ [data-breakpoints-below*='6'] .tlui-main-toolbar--vertical {
1179
+ bottom: 90px; /* collapsed mini-map, but same as top to keep things looking even */
1128
1180
  }
1129
1181
 
1130
1182
  /* Centered Content */
@@ -1132,73 +1184,145 @@
1132
1184
  position: relative;
1133
1185
  width: fit-content;
1134
1186
  display: flex;
1135
- gap: var(--space-3);
1136
- align-items: flex-end;
1187
+ gap: var(--tl-space-3);
1188
+ align-items: flex-start;
1189
+ }
1190
+
1191
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__inner {
1192
+ flex-direction: column;
1137
1193
  }
1138
1194
 
1139
- .tlui-main-toolbar__left {
1195
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__left {
1140
1196
  width: fit-content;
1141
1197
  }
1198
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__left {
1199
+ display: flex;
1200
+ height: fit-content;
1201
+ }
1142
1202
 
1143
1203
  /* Row of controls + lock button */
1144
1204
  .tlui-main-toolbar__extras {
1145
1205
  position: relative;
1146
- z-index: var(--layer-above);
1147
- width: 100%;
1206
+ z-index: var(--tl-layer-above);
1148
1207
  pointer-events: none;
1149
- top: 6px;
1150
- height: 48px;
1208
+ align-self: stretch;
1151
1209
  }
1152
1210
 
1153
1211
  .tlui-main-toolbar__extras:empty {
1154
1212
  display: none;
1155
1213
  }
1156
1214
 
1215
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras {
1216
+ height: 48px;
1217
+ top: 6px;
1218
+ }
1219
+
1220
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras {
1221
+ width: 48px;
1222
+ order: 1;
1223
+ }
1224
+
1157
1225
  .tlui-main-toolbar__extras__controls {
1158
- display: flex;
1159
1226
  position: relative;
1160
- flex-direction: row;
1161
- z-index: var(--layer-above);
1162
- background-color: var(--color-low);
1163
- border-top-left-radius: var(--radius-4);
1164
- border-top-right-radius: var(--radius-4);
1165
- border: 2px solid var(--color-background);
1227
+ z-index: var(--tl-layer-above);
1228
+ background-color: var(--tl-color-low);
1229
+ border: 2px solid var(--tl-color-background);
1230
+ pointer-events: all;
1231
+ }
1232
+
1233
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras__controls {
1234
+ border-top-left-radius: var(--tl-radius-4);
1235
+ border-top-right-radius: var(--tl-radius-4);
1166
1236
  margin-left: 8px;
1167
1237
  margin-right: 0px;
1168
- pointer-events: all;
1238
+ width: fit-content;
1239
+ }
1240
+
1241
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras__controls {
1242
+ border-top-right-radius: var(--tl-radius-4);
1243
+ border-bottom-right-radius: var(--tl-radius-4);
1244
+ margin-top: 8px;
1245
+ margin-left: -2px;
1246
+ margin-bottom: 0px;
1169
1247
  width: fit-content;
1170
1248
  }
1171
1249
 
1172
1250
  .tlui-main-toolbar__tools {
1173
- display: flex;
1174
- flex-direction: row;
1175
- align-items: center;
1176
- border-radius: var(--radius-4);
1177
- z-index: var(--layer-panels);
1251
+ border-radius: var(--tl-radius-4);
1252
+ z-index: var(--tl-layer-panels);
1178
1253
  pointer-events: all;
1179
1254
  position: relative;
1180
- background: var(--color-panel);
1181
- box-shadow: var(--shadow-2);
1255
+ background: var(--tl-color-panel);
1256
+ box-shadow: var(--tl-shadow-2);
1182
1257
  }
1183
1258
 
1184
- .tlui-main-toolbar__overflow {
1259
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
1260
+ align-self: flex-end;
1261
+ }
1262
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__mobile-style-panel {
1263
+ align-self: flex-start;
1264
+ }
1265
+
1266
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
1185
1267
  width: 40px;
1186
1268
  margin-left: 2px;
1187
1269
  }
1270
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__overflow {
1271
+ height: 40px;
1272
+ margin-top: 2px;
1273
+ }
1188
1274
 
1189
- .tlui-layout__mobile .tlui-main-toolbar__overflow {
1275
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
1190
1276
  width: 32px;
1191
1277
  padding: 0px;
1192
1278
  }
1193
1279
 
1194
- .tlui-main-toolbar *[data-state='open']::after {
1195
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1280
+ .tlui-main-toolbar--horizontal *[data-state='open']::after {
1281
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1282
+ opacity: 1;
1283
+ }
1284
+ .tlui-main-toolbar--vertical *[data-state='open']::after {
1285
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1196
1286
  opacity: 1;
1197
1287
  }
1198
1288
 
1289
+ .tlui-main-toolbar__overflow-content {
1290
+ touch-action: none;
1291
+ }
1292
+
1293
+ .tlui-main-toolbar__tools [data-toolbar-visible='false'],
1294
+ .tlui-main-toolbar__overflow-content [data-toolbar-visible='false'] {
1295
+ display: none;
1296
+ }
1297
+
1298
+ .tlui-main-toolbar__group:empty {
1299
+ display: none;
1300
+ }
1301
+ .tlui-row.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
1302
+ border-right: 1px solid var(--color-divider);
1303
+ margin-right: 2px;
1304
+ }
1305
+ .tlui-column.tlui-main-toolbar__group:not(
1306
+ :nth-last-child(-n + 1 of [data-toolbar-visible='true'])
1307
+ ) {
1308
+ border-bottom: 1px solid var(--color-divider);
1309
+ margin-bottom: 2px;
1310
+ }
1311
+ .tlui-grid.tlui-main-toolbar__group {
1312
+ grid-column: 1 / span 4;
1313
+ }
1314
+ .tlui-grid.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
1315
+ border-bottom: 1px solid var(--color-divider);
1316
+ margin-bottom: 2px;
1317
+ }
1318
+
1199
1319
  @media (hover: hover) {
1200
- .tlui-main-toolbar *[data-state='open']:not(:hover)::after {
1201
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1320
+ .tlui-main-toolbar--horizontal *[data-state='open']:not(:hover)::after {
1321
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1322
+ opacity: 1;
1323
+ }
1324
+ .tlui-main-toolbar--vertical *[data-state='open']:not(:hover)::after {
1325
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1202
1326
  opacity: 1;
1203
1327
  }
1204
1328
  }
@@ -1209,44 +1333,40 @@
1209
1333
  font-size: 12px;
1210
1334
  padding: 2px 8px;
1211
1335
  border-radius: 4px;
1212
- background-color: var(--color-tooltip);
1336
+ background-color: var(--tl-color-tooltip);
1213
1337
  box-shadow: none;
1214
- color: var(--color-text-shadow);
1338
+ color: var(--tl-color-text-shadow);
1215
1339
  max-width: 400px;
1216
1340
  width: fit-content;
1217
1341
  text-align: center;
1218
- pointer-events: none;
1219
1342
  will-change: transform, opacity;
1220
1343
  z-index: 2;
1221
1344
  }
1222
1345
 
1223
1346
  .tlui-tooltip__arrow {
1224
- fill: var(--color-tooltip);
1347
+ fill: var(--tl-color-tooltip);
1225
1348
  will-change: opacity;
1226
1349
  }
1227
1350
 
1228
1351
  [data-radix-popper-content-wrapper]:has(.tlui-tooltip) {
1229
- z-index: var(--layer-toasts) !important;
1230
- }
1231
-
1232
- [data-radix-popper-content-wrapper]:has(.tlui-tooltip[data-should-animate='true']) {
1233
- transition: all 0.1s ease-out;
1352
+ z-index: var(--tl-layer-toasts) !important;
1353
+ pointer-events: none;
1234
1354
  }
1235
1355
 
1236
1356
  /* ------------------- Debug panel ------------------ */
1237
1357
 
1238
1358
  .tlui-debug-panel {
1239
- background-color: var(--color-low);
1359
+ background-color: var(--tl-color-low);
1240
1360
  width: 100%;
1241
1361
  display: grid;
1242
1362
  align-items: center;
1243
1363
  grid-template-columns: 1fr auto auto auto;
1244
1364
  justify-content: space-between;
1245
- padding-left: var(--space-4);
1246
- border-top: 1px solid var(--color-background);
1365
+ padding-left: var(--tl-space-4);
1366
+ border-top: 1px solid var(--tl-color-background);
1247
1367
  font-size: 12px;
1248
- color: var(--color-text-1);
1249
- z-index: var(--layer-panels);
1368
+ color: var(--tl-color-text-1);
1369
+ z-index: var(--tl-layer-panels);
1250
1370
  pointer-events: all;
1251
1371
  }
1252
1372
 
@@ -1262,7 +1382,7 @@
1262
1382
 
1263
1383
  .tlui-debug-panel__fps__slow {
1264
1384
  font-weight: bold;
1265
- color: var(--color-danger);
1385
+ color: var(--tl-color-danger);
1266
1386
  }
1267
1387
 
1268
1388
  .tlui-a11y-audit {
@@ -1272,7 +1392,7 @@
1272
1392
  .tlui-a11y-audit th,
1273
1393
  .tlui-a11y-audit td {
1274
1394
  padding: 8px;
1275
- border: 1px solid var(--color-low-border);
1395
+ border: 1px solid var(--tl-color-low-border);
1276
1396
  }
1277
1397
 
1278
1398
  /* --------------------- Toasts --------------------- */
@@ -1285,10 +1405,10 @@
1285
1405
  align-items: flex-end;
1286
1406
  justify-content: flex-end;
1287
1407
  flex-direction: column;
1288
- gap: var(--space-3);
1408
+ gap: var(--tl-space-3);
1289
1409
  pointer-events: none;
1290
- padding: 0px var(--space-3) 64px 0px;
1291
- z-index: var(--layer-toasts);
1410
+ padding: 0px var(--tl-space-3) 64px 0px;
1411
+ z-index: var(--tl-layer-toasts);
1292
1412
  }
1293
1413
 
1294
1414
  .tlui-toast__viewport > * {
@@ -1297,34 +1417,34 @@
1297
1417
 
1298
1418
  .tlui-toast__icon {
1299
1419
  padding-top: 11px;
1300
- padding-left: var(--space-4);
1301
- color: var(--color-text-1);
1420
+ padding-left: var(--tl-space-4);
1421
+ color: var(--tl-color-text-1);
1302
1422
  }
1303
1423
 
1304
1424
  .tlui-toast__container {
1305
1425
  min-width: 200px;
1306
1426
  display: flex;
1307
1427
  flex-direction: row;
1308
- background-color: var(--color-panel);
1309
- box-shadow: var(--shadow-2);
1310
- border-radius: var(--radius-3);
1428
+ background-color: var(--tl-color-panel);
1429
+ box-shadow: var(--tl-shadow-2);
1430
+ border-radius: var(--tl-radius-3);
1311
1431
  font-size: 12px;
1312
1432
  }
1313
1433
 
1314
1434
  .tlui-toast__container[data-severity='success'] .tlui-icon {
1315
- color: var(--color-success);
1435
+ color: var(--tl-color-success);
1316
1436
  }
1317
1437
 
1318
1438
  .tlui-toast__container[data-severity='info'] .tlui-icon {
1319
- color: var(--color-info);
1439
+ color: var(--tl-color-info);
1320
1440
  }
1321
1441
 
1322
1442
  .tlui-toast__container[data-severity='warning'] .tlui-icon {
1323
- color: var(--color-warning);
1443
+ color: var(--tl-color-warning);
1324
1444
  }
1325
1445
 
1326
1446
  .tlui-toast__container[data-severity='error'] .tlui-icon {
1327
- color: var(--color-danger);
1447
+ color: var(--tl-color-danger);
1328
1448
  }
1329
1449
 
1330
1450
  .tlui-toast__main {
@@ -1333,27 +1453,27 @@
1333
1453
  }
1334
1454
 
1335
1455
  .tlui-toast__content {
1336
- padding: var(--space-4);
1456
+ padding: var(--tl-space-4);
1337
1457
  display: flex;
1338
1458
  line-height: 1.4;
1339
1459
  flex-direction: column;
1340
- gap: var(--space-3);
1460
+ gap: var(--tl-space-3);
1341
1461
  }
1342
1462
 
1343
1463
  .tlui-toast__main[data-actions='true'] .tlui-toast__content {
1344
- padding-bottom: var(--space-2);
1464
+ padding-bottom: var(--tl-space-2);
1345
1465
  }
1346
1466
 
1347
1467
  .tlui-toast__title {
1348
1468
  font-weight: bold;
1349
- color: var(--color-text-1);
1469
+ color: var(--tl-color-text-1);
1350
1470
  /* this makes the default toast look better */
1351
1471
  line-height: 16px;
1352
1472
  }
1353
1473
 
1354
1474
  .tlui-toast__description {
1355
- color: var(--color-text-1);
1356
- padding: var(--space-3);
1475
+ color: var(--tl-color-text-1);
1476
+ padding: var(--tl-space-3);
1357
1477
  margin: 0px;
1358
1478
  padding: 0px;
1359
1479
  }
@@ -1405,14 +1525,14 @@
1405
1525
  left: 0px;
1406
1526
  width: 100%;
1407
1527
  height: 100%;
1408
- z-index: var(--layer-canvas-overlays);
1409
- background-color: var(--color-overlay);
1528
+ z-index: var(--tl-layer-canvas-overlays);
1529
+ background-color: var(--tl-color-overlay);
1410
1530
  pointer-events: all;
1411
1531
  animation: tl-fade-in 0.12s ease-out;
1412
1532
  display: grid;
1413
1533
  place-items: center;
1414
1534
  overflow-y: auto;
1415
- padding: 0px var(--space-3);
1535
+ padding: 0px var(--tl-space-3);
1416
1536
  }
1417
1537
 
1418
1538
  .tlui-dialog__content {
@@ -1420,9 +1540,9 @@
1420
1540
  flex-direction: column;
1421
1541
  position: relative;
1422
1542
  cursor: default;
1423
- background-color: var(--color-panel);
1424
- box-shadow: var(--shadow-3);
1425
- border-radius: var(--radius-3);
1543
+ background-color: var(--tl-color-panel);
1544
+ box-shadow: var(--tl-shadow-3);
1545
+ border-radius: var(--tl-radius-3);
1426
1546
  font-size: 12px;
1427
1547
  overflow: hidden;
1428
1548
  min-width: 300px;
@@ -1435,9 +1555,9 @@
1435
1555
  display: flex;
1436
1556
  align-items: center;
1437
1557
  flex: 0;
1438
- z-index: var(--layer-header-footer);
1439
- padding-left: var(--space-4);
1440
- color: var(--color-text);
1558
+ z-index: var(--tl-layer-header-footer);
1559
+ padding-left: var(--tl-space-4);
1560
+ color: var(--tl-color-text);
1441
1561
  height: 40px;
1442
1562
  }
1443
1563
 
@@ -1446,7 +1566,7 @@
1446
1566
  font-weight: inherit;
1447
1567
  font-size: 12px;
1448
1568
  margin: 0px;
1449
- color: var(--color-text-1);
1569
+ color: var(--tl-color-text-1);
1450
1570
  }
1451
1571
 
1452
1572
  .tlui-dialog__header__close {
@@ -1454,16 +1574,16 @@
1454
1574
  }
1455
1575
 
1456
1576
  .tlui-dialog__body {
1457
- padding: var(--space-4) var(--space-4);
1577
+ padding: var(--tl-space-4) var(--tl-space-4);
1458
1578
  flex: 0 1;
1459
1579
  overflow-y: auto;
1460
1580
  overflow-x: hidden;
1461
- color: var(--color-text-1);
1581
+ color: var(--tl-color-text-1);
1462
1582
  user-select: all;
1463
1583
  -webkit-user-select: text;
1464
1584
  }
1465
1585
  .tlui-dialog__body a {
1466
- color: var(--color-selected);
1586
+ color: var(--tl-color-selected);
1467
1587
  }
1468
1588
 
1469
1589
  .tlui-dialog__body ul,
@@ -1471,13 +1591,13 @@
1471
1591
  padding-left: 16px;
1472
1592
  display: flex;
1473
1593
  flex-direction: column;
1474
- gap: var(--space-2);
1594
+ gap: var(--tl-space-2);
1475
1595
  }
1476
1596
 
1477
1597
  .tlui-dialog__footer {
1478
1598
  position: relative;
1479
1599
  min-height: 12px;
1480
- z-index: var(--layer-header-footer);
1600
+ z-index: var(--tl-layer-header-footer);
1481
1601
  }
1482
1602
 
1483
1603
  .tlui-dialog__footer__actions {
@@ -1497,15 +1617,15 @@
1497
1617
  .tlui-edit-link-dialog {
1498
1618
  display: flex;
1499
1619
  flex-direction: column;
1500
- gap: var(--space-4);
1501
- color: var(--color-text);
1620
+ gap: var(--tl-space-4);
1621
+ color: var(--tl-color-text);
1502
1622
  }
1503
1623
 
1504
1624
  .tlui-edit-link-dialog__input {
1505
- background-color: var(--color-muted-2);
1625
+ background-color: var(--tl-color-muted-2);
1506
1626
  flex-grow: 2;
1507
- border-radius: var(--radius-2);
1508
- padding: 0px var(--space-4);
1627
+ border-radius: var(--tl-radius-2);
1628
+ padding: 0px var(--tl-space-4);
1509
1629
  }
1510
1630
 
1511
1631
  /* Embed Dialog */
@@ -1513,15 +1633,15 @@
1513
1633
  .tlui-embed__spacer {
1514
1634
  flex-grow: 2;
1515
1635
  min-height: 0px;
1516
- margin-left: calc(-1 * var(--space-4));
1517
- margin-top: calc(-1 * var(--space-4));
1636
+ margin-left: calc(-1 * var(--tl-space-4));
1637
+ margin-top: calc(-1 * var(--tl-space-4));
1518
1638
  pointer-events: none;
1519
1639
  }
1520
1640
 
1521
1641
  .tlui-embed-dialog__list {
1522
1642
  display: flex;
1523
1643
  flex-direction: column;
1524
- padding: 0px var(--space-3) var(--space-4) var(--space-3);
1644
+ padding: 0px var(--tl-space-3) var(--tl-space-4) var(--tl-space-3);
1525
1645
  }
1526
1646
 
1527
1647
  .tlui-embed-dialog__item__image {
@@ -1533,49 +1653,49 @@
1533
1653
  background-size: contain;
1534
1654
  background-repeat: no-repeat;
1535
1655
  background-position: center center;
1536
- background-color: var(--color-selected-contrast);
1537
- border-radius: var(--radius-1);
1656
+ background-color: var(--tl-color-selected-contrast);
1657
+ border-radius: var(--tl-radius-1);
1538
1658
  }
1539
1659
 
1540
1660
  .tlui-embed-dialog__enter {
1541
1661
  display: flex;
1542
1662
  flex-direction: column;
1543
- gap: var(--space-4);
1544
- color: var(--color-text-1);
1663
+ gap: var(--tl-space-4);
1664
+ color: var(--tl-color-text-1);
1545
1665
  }
1546
1666
 
1547
1667
  .tlui-embed-dialog__input {
1548
- background-color: var(--color-muted-2);
1668
+ background-color: var(--tl-color-muted-2);
1549
1669
  flex-grow: 2;
1550
- border-radius: var(--radius-2);
1551
- padding: 0px var(--space-4);
1670
+ border-radius: var(--tl-radius-2);
1671
+ padding: 0px var(--tl-space-4);
1552
1672
  }
1553
1673
 
1554
1674
  .tlui-embed-dialog__warning {
1555
- color: var(--color-danger);
1675
+ color: var(--tl-color-danger);
1556
1676
  text-shadow: none;
1557
1677
  }
1558
1678
 
1559
1679
  .tlui-embed-dialog__instruction__link {
1560
1680
  display: flex;
1561
- gap: var(--space-1);
1562
- margin-top: var(--space-4);
1681
+ gap: var(--tl-space-1);
1682
+ margin-top: var(--tl-space-4);
1563
1683
  }
1564
1684
 
1565
1685
  .tlui-embed-dialog__enter a {
1566
- color: var(--color-text-1);
1686
+ color: var(--tl-color-text-1);
1567
1687
  }
1568
1688
 
1569
1689
  /* --------------- Keyboard shortcuts --------------- */
1570
1690
 
1571
1691
  .tlui-shortcuts-dialog__header {
1572
- border-bottom: 1px solid var(--color-divider);
1692
+ border-bottom: 1px solid var(--tl-color-divider);
1573
1693
  }
1574
1694
 
1575
1695
  .tlui-shortcuts-dialog__body {
1576
1696
  position: relative;
1577
1697
  columns: 3;
1578
- column-gap: var(--space-9);
1698
+ column-gap: var(--tl-space-9);
1579
1699
  pointer-events: all;
1580
1700
  touch-action: auto;
1581
1701
 
@@ -1593,14 +1713,14 @@
1593
1713
 
1594
1714
  .tlui-shortcuts-dialog__group {
1595
1715
  break-inside: avoid-column;
1596
- padding-bottom: var(--space-6);
1716
+ padding-bottom: var(--tl-space-6);
1597
1717
  }
1598
1718
 
1599
1719
  .tlui-shortcuts-dialog__group__title {
1600
1720
  font-size: inherit;
1601
1721
  font-weight: inherit;
1602
1722
  margin: 0px;
1603
- color: var(--color-text-3);
1723
+ color: var(--tl-color-text-3);
1604
1724
  height: 32px;
1605
1725
  display: flex;
1606
1726
  align-items: center;
@@ -1609,12 +1729,12 @@
1609
1729
  .tlui-shortcuts-dialog__group__content {
1610
1730
  display: flex;
1611
1731
  flex-direction: column;
1612
- color: var(--color-text-1);
1732
+ color: var(--tl-color-text-1);
1613
1733
  }
1614
1734
 
1615
1735
  .tlui-shortcuts-dialog__key-pair {
1616
1736
  display: flex;
1617
- gap: var(--space-4);
1737
+ gap: var(--tl-space-4);
1618
1738
  align-items: center;
1619
1739
  justify-content: space-between;
1620
1740
  height: 32px;
@@ -1641,12 +1761,12 @@
1641
1761
  height: 24px;
1642
1762
  background: linear-gradient(
1643
1763
  to bottom,
1644
- var(--color-panel-transparent) 0%,
1645
- var(--color-panel) 90%,
1646
- var(--color-panel) 100%
1764
+ var(--tl-color-panel-transparent) 0%,
1765
+ var(--tl-color-panel) 90%,
1766
+ var(--tl-color-panel) 100%
1647
1767
  );
1648
- border-bottom-left-radius: var(--radius-3);
1649
- border-bottom-right-radius: var(--radius-3);
1768
+ border-bottom-left-radius: var(--tl-radius-3);
1769
+ border-bottom-right-radius: var(--tl-radius-3);
1650
1770
  pointer-events: none;
1651
1771
  }
1652
1772
 
@@ -1661,10 +1781,10 @@
1661
1781
  .tlui-help-menu {
1662
1782
  pointer-events: all;
1663
1783
  position: absolute;
1664
- bottom: var(--space-2);
1665
- right: var(--space-2);
1666
- z-index: var(--layer-panels);
1667
- border: 2px solid var(--color-background);
1784
+ bottom: var(--tl-space-2);
1785
+ right: var(--tl-space-2);
1786
+ z-index: var(--tl-layer-panels);
1787
+ border: 2px solid var(--tl-color-background);
1668
1788
  border-radius: 100%;
1669
1789
  }
1670
1790
 
@@ -1675,7 +1795,7 @@
1675
1795
  display: flex;
1676
1796
  flex-direction: row;
1677
1797
  justify-content: flex-end;
1678
- z-index: var(--layer-panels);
1798
+ z-index: var(--tl-layer-panels);
1679
1799
  align-items: center;
1680
1800
  padding-top: 2px;
1681
1801
  padding-right: 4px;
@@ -1691,7 +1811,7 @@
1691
1811
  border: none;
1692
1812
  cursor: pointer;
1693
1813
  pointer-events: all;
1694
- border-radius: var(--radius-1);
1814
+ border-radius: var(--tl-radius-1);
1695
1815
  padding-right: 1px;
1696
1816
  height: 100%;
1697
1817
  }
@@ -1704,8 +1824,8 @@
1704
1824
  .tlui-people-menu__avatar {
1705
1825
  height: 24px;
1706
1826
  width: 24px;
1707
- border: 2px solid var(--color-background);
1708
- background-color: var(--color-low);
1827
+ border: 2px solid var(--tl-color-background);
1828
+ background-color: var(--tl-color-low);
1709
1829
  border-radius: 100%;
1710
1830
  display: flex;
1711
1831
  align-items: center;
@@ -1714,7 +1834,7 @@
1714
1834
  font-size: 10px;
1715
1835
  font-weight: bold;
1716
1836
  text-align: center;
1717
- color: var(--color-selected-contrast);
1837
+ color: var(--tl-color-selected-contrast);
1718
1838
  z-index: 2;
1719
1839
  }
1720
1840
 
@@ -1728,7 +1848,7 @@
1728
1848
 
1729
1849
  @media (hover: hover) {
1730
1850
  .tlui-people-menu__avatars-button:hover .tlui-people-menu__avatar {
1731
- border-color: var(--color-low);
1851
+ border-color: var(--tl-color-low);
1732
1852
  }
1733
1853
  }
1734
1854
 
@@ -1736,12 +1856,12 @@
1736
1856
  min-width: 0px;
1737
1857
  font-size: 11px;
1738
1858
  font-weight: 600;
1739
- color: var(--color-text-1);
1859
+ color: var(--tl-color-text-1);
1740
1860
  font-family: inherit;
1741
1861
  padding: 0px 4px;
1742
1862
  }
1743
1863
  .tlui-people-menu__more::after {
1744
- border-radius: var(--radius-2);
1864
+ border-radius: var(--tl-radius-2);
1745
1865
  inset: 0px;
1746
1866
  }
1747
1867
 
@@ -1770,7 +1890,7 @@
1770
1890
  }
1771
1891
 
1772
1892
  .tlui-people-menu__section:not(:last-child) {
1773
- border-bottom: 1px solid var(--color-divider);
1893
+ border-bottom: 1px solid var(--tl-color-divider);
1774
1894
  }
1775
1895
 
1776
1896
  .tlui-people-menu__user {
@@ -1789,7 +1909,7 @@
1789
1909
  text-overflow: ellipsis;
1790
1910
  white-space: nowrap;
1791
1911
  font-size: 12px;
1792
- color: var(--color-text-1);
1912
+ color: var(--tl-color-text-1);
1793
1913
  max-width: 100%;
1794
1914
  flex-grow: 1;
1795
1915
  flex-shrink: 100;
@@ -1801,7 +1921,7 @@
1801
1921
  text-overflow: ellipsis;
1802
1922
  white-space: nowrap;
1803
1923
  font-size: 12px;
1804
- color: var(--color-text-3);
1924
+ color: var(--tl-color-text-3);
1805
1925
  flex-grow: 100;
1806
1926
  flex-shrink: 0;
1807
1927
  margin-left: 4px;
@@ -1892,7 +2012,7 @@
1892
2012
  inset: 0px;
1893
2013
  border-width: 2px;
1894
2014
  border-style: solid;
1895
- z-index: var(--layer-following-indicator);
2015
+ z-index: var(--tl-layer-following-indicator);
1896
2016
  pointer-events: none;
1897
2017
  }
1898
2018
 
@@ -1911,7 +2031,7 @@
1911
2031
  }
1912
2032
 
1913
2033
  .tlui-contextual-toolbar [data-isactive='true']::after {
1914
- background-color: var(--color-muted-2);
2034
+ background-color: var(--tl-color-muted-2);
1915
2035
  opacity: 1;
1916
2036
  }
1917
2037
 
@@ -1927,7 +2047,7 @@
1927
2047
 
1928
2048
  .tlui-contextual-toolbar[data-visible='true'] {
1929
2049
  opacity: 1;
1930
- z-index: var(--layer-menus);
2050
+ z-index: var(--tl-layer-menus);
1931
2051
  }
1932
2052
 
1933
2053
  .tlui-contextual-toolbar[data-interactive='true'],
@@ -1986,7 +2106,7 @@
1986
2106
 
1987
2107
  @keyframes tlui-slide-in {
1988
2108
  from {
1989
- transform: translateX(calc(100% + var(--space-3)));
2109
+ transform: translateX(calc(100% + var(--tl-space-3)));
1990
2110
  }
1991
2111
  to {
1992
2112
  transform: translateX(0px);
@@ -1998,6 +2118,6 @@
1998
2118
  transform: translateX(var(--radix-toast-swipe-end-x));
1999
2119
  }
2000
2120
  to {
2001
- transform: translateX(calc(100% + var(--space-3)));
2121
+ transform: translateX(calc(100% + var(--tl-space-3)));
2002
2122
  }
2003
2123
  }