tldraw 3.16.0-next.f9f54ec051f3 → 4.0.0

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 (542) hide show
  1. package/dist-cjs/index.d.ts +446 -112
  2. package/dist-cjs/index.js +50 -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 +15 -4
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
  13. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  14. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  15. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +4 -3
  16. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  17. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  18. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  19. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +1 -1
  20. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  21. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +4 -4
  22. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  23. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  24. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  25. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  26. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  27. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +20 -13
  28. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  29. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  30. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  31. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js +8 -2
  32. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +2 -2
  33. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +3 -2
  34. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  35. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  36. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  37. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  38. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  40. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  41. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  42. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  43. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -5
  44. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  45. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +4 -4
  46. package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
  47. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  48. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  49. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  50. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  51. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  52. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +3 -5
  53. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  54. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  55. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  56. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  57. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  58. package/dist-cjs/lib/shapes/text/PlainTextArea.js +3 -2
  59. package/dist-cjs/lib/shapes/text/PlainTextArea.js.map +2 -2
  60. package/dist-cjs/lib/shapes/text/RichTextArea.js +3 -3
  61. package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
  62. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  63. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  64. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  65. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  66. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  67. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  68. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  69. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  70. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +3 -1
  71. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  72. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  73. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  74. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  75. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  76. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  77. package/dist-cjs/lib/ui/components/A11y.js +1 -1
  78. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  80. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  81. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  82. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  83. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  84. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  85. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  86. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  87. package/dist-cjs/lib/ui/components/InputModeMenu.js +77 -0
  88. package/dist-cjs/lib/ui/components/InputModeMenu.js.map +7 -0
  89. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  90. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  91. package/dist-cjs/lib/ui/components/LanguageMenu.js +1 -0
  92. package/dist-cjs/lib/ui/components/LanguageMenu.js.map +2 -2
  93. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +5 -3
  94. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  95. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +2 -1
  96. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  97. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  98. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  99. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  100. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  101. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  102. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  103. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +3 -2
  104. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  105. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  106. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  107. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  108. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  109. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +13 -4
  110. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  111. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +249 -279
  112. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  113. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +147 -0
  114. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  115. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +70 -0
  116. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  117. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +26 -25
  118. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  119. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +47 -43
  120. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  121. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  122. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  123. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +2 -0
  124. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  125. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
  126. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  127. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  128. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  129. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  130. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  131. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +2 -1
  132. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  133. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  134. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  135. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +10 -5
  136. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  137. package/dist-cjs/lib/ui/components/menu-items.js +8 -0
  138. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  139. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +11 -2
  140. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  141. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +5 -3
  142. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js.map +2 -2
  143. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  144. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  145. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +18 -5
  146. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  147. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +33 -7
  148. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  149. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +317 -0
  150. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  151. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  152. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  153. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js +3 -0
  154. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  155. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  156. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  157. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  158. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -20
  159. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  160. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  161. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  162. package/dist-cjs/lib/ui/context/actions.js +44 -30
  163. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  164. package/dist-cjs/lib/ui/context/components.js +2 -0
  165. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  166. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  167. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +1 -1
  168. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
  169. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  170. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  171. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  172. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  173. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  174. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +14 -1
  175. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  176. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  177. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  178. package/dist-cjs/lib/ui/version.js +4 -4
  179. package/dist-cjs/lib/ui/version.js.map +1 -1
  180. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  181. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  182. package/dist-cjs/lib/utils/export/export.js +0 -20
  183. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  184. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  185. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  186. package/dist-esm/index.d.mts +446 -112
  187. package/dist-esm/index.mjs +93 -29
  188. package/dist-esm/index.mjs.map +2 -2
  189. package/dist-esm/lib/Tldraw.mjs +14 -4
  190. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  191. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  192. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  193. package/dist-esm/lib/defaultExternalContentHandlers.mjs +15 -4
  194. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  195. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  196. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  197. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  198. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  199. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +4 -3
  200. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  201. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  202. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  203. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +1 -1
  204. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  205. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +4 -5
  206. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  207. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  208. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  209. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  210. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  211. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +21 -13
  212. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  213. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  214. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  215. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +9 -3
  216. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +2 -2
  217. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +4 -2
  218. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  219. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  220. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  221. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  222. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  223. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  224. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  225. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  226. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  227. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -5
  228. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  229. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +5 -5
  230. package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
  231. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  232. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  233. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  234. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  235. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  236. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +3 -6
  237. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  238. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  239. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  240. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  241. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  242. package/dist-esm/lib/shapes/text/PlainTextArea.mjs +4 -3
  243. package/dist-esm/lib/shapes/text/PlainTextArea.mjs.map +2 -2
  244. package/dist-esm/lib/shapes/text/RichTextArea.mjs +3 -4
  245. package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
  246. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  247. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  248. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  249. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  250. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  251. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  252. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  253. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  254. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +3 -1
  255. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  256. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  257. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  258. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  259. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  260. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  261. package/dist-esm/lib/ui/components/A11y.mjs +1 -2
  262. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  263. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  264. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  265. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  266. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  267. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  268. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  269. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  270. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  271. package/dist-esm/lib/ui/components/InputModeMenu.mjs +57 -0
  272. package/dist-esm/lib/ui/components/InputModeMenu.mjs.map +7 -0
  273. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  274. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  275. package/dist-esm/lib/ui/components/LanguageMenu.mjs +1 -0
  276. package/dist-esm/lib/ui/components/LanguageMenu.mjs.map +2 -2
  277. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +5 -5
  278. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  279. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +2 -1
  280. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  281. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  282. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  283. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  284. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  286. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  287. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +3 -3
  288. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  289. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  290. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  291. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  292. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  293. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +18 -5
  294. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  295. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +251 -283
  296. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  297. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +135 -0
  298. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  299. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +50 -0
  300. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  301. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +23 -22
  302. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  303. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +44 -40
  304. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  305. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  306. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  307. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +2 -0
  308. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  309. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
  310. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  311. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  312. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  313. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  314. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  315. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +2 -1
  316. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  317. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  318. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  319. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +10 -5
  320. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  321. package/dist-esm/lib/ui/components/menu-items.mjs +8 -0
  322. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  323. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +11 -3
  324. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  325. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs +6 -4
  326. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs.map +2 -2
  327. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  328. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  329. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +18 -5
  330. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  331. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +33 -7
  332. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  333. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +295 -0
  334. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  335. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  336. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  337. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs +3 -0
  338. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  339. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  340. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  341. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  342. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -22
  343. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  344. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  345. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  346. package/dist-esm/lib/ui/context/actions.mjs +44 -30
  347. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  348. package/dist-esm/lib/ui/context/components.mjs +2 -0
  349. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  350. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  351. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +1 -2
  352. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
  353. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  354. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  355. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  356. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  357. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +14 -1
  358. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  359. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  360. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  361. package/dist-esm/lib/ui/version.mjs +4 -4
  362. package/dist-esm/lib/ui/version.mjs.map +1 -1
  363. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  364. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  365. package/dist-esm/lib/utils/export/export.mjs +0 -20
  366. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  367. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  368. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  369. package/package.json +11 -34
  370. package/src/index.ts +71 -22
  371. package/src/lib/Tldraw.tsx +15 -2
  372. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  373. package/src/lib/defaultExternalContentHandlers.ts +26 -4
  374. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +85 -14
  375. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +103 -8
  376. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +48 -6
  377. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  378. package/src/lib/shapes/arrow/arrow-types.ts +3 -5
  379. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  380. package/src/lib/shapes/arrow/arrowTargetState.ts +36 -4
  381. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  382. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +1 -1
  383. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +4 -5
  384. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  385. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  386. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  387. package/src/lib/shapes/frame/FrameShapeUtil.tsx +30 -14
  388. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  389. package/src/lib/shapes/frame/components/FrameLabelInput.tsx +10 -3
  390. package/src/lib/shapes/geo/GeoShapeUtil.tsx +4 -2
  391. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  392. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  393. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  394. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  395. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  396. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  397. package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -4
  398. package/src/lib/shapes/shared/HyperlinkButton.tsx +5 -5
  399. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  400. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  401. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  402. package/src/lib/shapes/shared/useEditablePlainText.ts +3 -10
  403. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  404. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  405. package/src/lib/shapes/text/PlainTextArea.tsx +4 -3
  406. package/src/lib/shapes/text/RichTextArea.tsx +3 -4
  407. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  408. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  409. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  410. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  411. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  412. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +6 -2
  413. package/src/lib/tools/SelectTool/childStates/Translating.ts +0 -1
  414. package/src/lib/ui/TldrawUi.tsx +33 -12
  415. package/src/lib/ui/assetUrls.ts +13 -10
  416. package/src/lib/ui/components/A11y.tsx +1 -2
  417. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  418. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  419. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  420. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  421. package/src/lib/ui/components/InputModeMenu.tsx +65 -0
  422. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  423. package/src/lib/ui/components/LanguageMenu.tsx +1 -0
  424. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +8 -4
  425. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +2 -1
  426. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  427. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  428. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  429. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +4 -4
  430. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  431. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  432. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +30 -12
  433. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +263 -343
  434. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +73 -50
  435. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +65 -0
  436. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +31 -22
  437. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  438. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  439. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -0
  440. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
  441. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  442. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  443. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +1 -0
  444. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  445. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +21 -11
  446. package/src/lib/ui/components/menu-items.tsx +10 -0
  447. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +7 -3
  448. package/src/lib/ui/components/primitives/TldrawUiInput.tsx +6 -3
  449. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  450. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +52 -32
  451. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +55 -12
  452. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +386 -0
  453. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  454. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +4 -0
  455. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  456. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  457. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +221 -19
  458. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  459. package/src/lib/ui/context/actions.tsx +51 -32
  460. package/src/lib/ui/context/components.tsx +3 -0
  461. package/src/lib/ui/context/events.tsx +4 -1
  462. package/src/lib/ui/hooks/useClipboardEvents.ts +1 -2
  463. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  464. package/src/lib/ui/hooks/useTools.tsx +140 -10
  465. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +13 -0
  466. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +14 -1
  467. package/src/lib/ui/kbd-utils.ts +10 -3
  468. package/src/lib/ui/version.ts +4 -4
  469. package/src/lib/ui.css +448 -294
  470. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  471. package/src/lib/utils/export/copyAs.ts +1 -24
  472. package/src/lib/utils/export/export.ts +0 -36
  473. package/src/lib/utils/export/exportAs.ts +1 -32
  474. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  475. package/src/test/A11y.test.tsx +3 -2
  476. package/src/test/ClickManager.test.ts +7 -6
  477. package/src/test/Editor.test.tsx +20 -19
  478. package/src/test/EraserTool.test.ts +184 -13
  479. package/src/test/HandTool.test.ts +10 -9
  480. package/src/test/HighlightShape.test.ts +2 -1
  481. package/src/test/SelectTool.test.ts +3 -2
  482. package/src/test/TLUserPreferences.test.ts +4 -3
  483. package/src/test/TestEditor.ts +21 -17
  484. package/src/test/TldrawEditor.test.tsx +11 -10
  485. package/src/test/ZoomTool.test.ts +7 -6
  486. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  487. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  488. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  489. package/src/test/arrows-megabus.test.tsx +17 -10
  490. package/src/test/bindings.test.tsx +24 -37
  491. package/src/test/bookmark-shapes.test.ts +1 -8
  492. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  493. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  494. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  495. package/src/test/commands/alignShapes.test.tsx +25 -24
  496. package/src/test/commands/animationSpeed.test.ts +2 -1
  497. package/src/test/commands/centerOnPoint.test.ts +3 -2
  498. package/src/test/commands/clipboard.test.ts +3 -2
  499. package/src/test/commands/createShapes.test.ts +2 -1
  500. package/src/test/commands/deleteShapes.test.ts +2 -1
  501. package/src/test/commands/distributeShapes.test.tsx +11 -10
  502. package/src/test/commands/getSvgString.test.ts +2 -1
  503. package/src/test/commands/packShapes.test.ts +5 -4
  504. package/src/test/commands/resizeShape.test.ts +2 -1
  505. package/src/test/commands/rotateShapes.test.ts +7 -6
  506. package/src/test/commands/setCamera.test.ts +17 -3
  507. package/src/test/commands/setCurrentPage.test.ts +3 -2
  508. package/src/test/commands/stackShapes.test.ts +11 -10
  509. package/src/test/commands/stretch.test.tsx +13 -12
  510. package/src/test/createDeepLink.test.tsx +2 -1
  511. package/src/test/cropping.test.ts +3 -2
  512. package/src/test/custom-clipping.test.ts +436 -0
  513. package/src/test/drawing.test.ts +2 -1
  514. package/src/test/flipShapes.test.ts +4 -3
  515. package/src/test/frames.test.ts +40 -24
  516. package/src/test/getCulledShapes.test.tsx +74 -4
  517. package/src/test/groups.test.tsx +1 -1
  518. package/src/test/handleDeepLink.test.tsx +2 -1
  519. package/src/test/inner-outer-margin.test.ts +315 -0
  520. package/src/test/maxShapes.test.ts +3 -2
  521. package/src/test/modifiers.test.ts +5 -4
  522. package/src/test/navigation.test.ts +12 -11
  523. package/src/test/panning.test.ts +2 -1
  524. package/src/test/perf/perf.test.ts +2 -1
  525. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  526. package/src/test/resizing.test.ts +39 -38
  527. package/src/test/select.test.tsx +4 -3
  528. package/src/test/selection-omnibus.test.ts +11 -10
  529. package/src/test/shapeutils.test.ts +4 -3
  530. package/src/test/translating.test.ts +9 -8
  531. package/tldraw.css +756 -584
  532. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  533. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  534. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  535. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +0 -142
  536. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  537. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  538. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  539. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  540. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +0 -115
  541. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  542. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -109
package/tldraw.css CHANGED
@@ -9,57 +9,58 @@
9
9
  height: 100%;
10
10
  font-size: 12px;
11
11
  /* Spacing */
12
- --space-1: 2px;
13
- --space-2: 4px;
14
- --space-3: 8px;
15
- --space-4: 12px;
16
- --space-5: 16px;
17
- --space-6: 20px;
18
- --space-7: 28px;
19
- --space-8: 32px;
20
- --space-9: 64px;
21
- --space-10: 72px;
12
+ --tl-space-1: 2px;
13
+ --tl-space-2: 4px;
14
+ --tl-space-3: 8px;
15
+ --tl-space-4: 12px;
16
+ --tl-space-5: 16px;
17
+ --tl-space-6: 20px;
18
+ --tl-space-7: 28px;
19
+ --tl-space-8: 32px;
20
+ --tl-space-9: 64px;
21
+ --tl-space-10: 72px;
22
22
  /* Radius */
23
- --radius-0: 2px;
24
- --radius-1: 4px;
25
- --radius-2: 6px;
26
- --radius-3: 9px;
27
- --radius-4: 11px;
23
+ --tl-radius-0: 2px;
24
+ --tl-radius-1: 4px;
25
+ --tl-radius-2: 6px;
26
+ --tl-radius-3: 9px;
27
+ --tl-radius-4: 11px;
28
28
 
29
29
  /* Canvas z-index */
30
- --layer-canvas-hidden: -999999;
31
- --layer-canvas-background: 100;
32
- --layer-canvas-grid: 150;
33
- --layer-watermark: 200;
34
- --layer-canvas-shapes: 300;
35
- --layer-canvas-overlays: 500;
36
- --layer-canvas-blocker: 10000;
30
+ --tl-layer-canvas-hidden: -999999;
31
+ --tl-layer-canvas-background: 100;
32
+ --tl-layer-canvas-grid: 150;
33
+ --tl-layer-watermark: 200;
34
+ --tl-layer-canvas-shapes: 300;
35
+ --tl-layer-canvas-overlays: 500;
36
+ --tl-layer-canvas-in-front: 600;
37
+ --tl-layer-canvas-blocker: 10000;
37
38
 
38
39
  /* Canvas overlays z-index */
39
- --layer-overlays-collaborator-scribble: 10;
40
- --layer-overlays-collaborator-brush: 20;
41
- --layer-overlays-collaborator-shape-indicator: 30;
42
- --layer-overlays-user-scribble: 40;
43
- --layer-overlays-user-brush: 50;
44
- --layer-overlays-user-snapline: 90;
45
- --layer-overlays-selection-fg: 100;
40
+ --tl-layer-overlays-collaborator-scribble: 10;
41
+ --tl-layer-overlays-collaborator-brush: 20;
42
+ --tl-layer-overlays-collaborator-shape-indicator: 30;
43
+ --tl-layer-overlays-user-scribble: 40;
44
+ --tl-layer-overlays-user-brush: 50;
45
+ --tl-layer-overlays-user-snapline: 90;
46
+ --tl-layer-overlays-selection-fg: 100;
46
47
  /* User handles need to be above selection edges / corners, matters for sticky note clone handles */
47
- --layer-overlays-user-handles: 105;
48
- --layer-overlays-user-indicator-hint: 110;
49
- --layer-overlays-custom: 115;
50
- --layer-overlays-collaborator-cursor-hint: 120;
51
- --layer-overlays-collaborator-cursor: 130;
48
+ --tl-layer-overlays-user-handles: 105;
49
+ --tl-layer-overlays-user-indicator-hint: 110;
50
+ --tl-layer-overlays-custom: 115;
51
+ --tl-layer-overlays-collaborator-cursor-hint: 120;
52
+ --tl-layer-overlays-collaborator-cursor: 130;
52
53
 
53
54
  /* Text editor z-index */
54
- --layer-text-container: 1;
55
- --layer-text-content: 3;
56
- --layer-text-editor: 4;
55
+ --tl-layer-text-container: 1;
56
+ --tl-layer-text-content: 3;
57
+ --tl-layer-text-editor: 4;
57
58
 
58
59
  /* Error fallback z-index */
59
- --layer-error-overlay: 1;
60
- --layer-error-canvas: 2;
61
- --layer-error-canvas-after: 3;
62
- --layer-error-content: 4;
60
+ --tl-layer-error-overlay: 1;
61
+ --tl-layer-error-canvas: 2;
62
+ --tl-layer-error-canvas-after: 3;
63
+ --tl-layer-error-content: 4;
63
64
 
64
65
  /* Misc */
65
66
  --tl-zoom: 1;
@@ -124,12 +125,15 @@
124
125
  --tl-font-serif: 'tldraw_serif', serif;
125
126
  --tl-font-mono: 'tldraw_mono', monospace;
126
127
  /* text outline */
127
- --a: calc(min(0.5, 1 / var(--tl-zoom)) * 2px);
128
- --b: calc(min(0.5, 1 / var(--tl-zoom)) * -2px);
128
+ --tl-text-outline-a: calc(min(0.5, 1 / var(--tl-zoom)) * 2px);
129
+ --tl-text-outline-b: calc(min(0.5, 1 / var(--tl-zoom)) * -2px);
129
130
  --tl-text-outline-reference:
130
- 0 var(--b) 0 var(--color-background), 0 var(--a) 0 var(--color-background),
131
- var(--b) var(--b) 0 var(--color-background), var(--a) var(--b) 0 var(--color-background),
132
- var(--a) var(--a) 0 var(--color-background), var(--b) var(--a) 0 var(--color-background);
131
+ 0 var(--tl-text-outline-b) 0 var(--tl-color-background),
132
+ 0 var(--tl-text-outline-a) 0 var(--tl-color-background),
133
+ var(--tl-text-outline-b) var(--tl-text-outline-b) 0 var(--tl-color-background),
134
+ var(--tl-text-outline-a) var(--tl-text-outline-b) 0 var(--tl-color-background),
135
+ var(--tl-text-outline-a) var(--tl-text-outline-a) 0 var(--tl-color-background),
136
+ var(--tl-text-outline-b) var(--tl-text-outline-a) 0 var(--tl-color-background);
133
137
  --tl-text-outline: var(--tl-text-outline-reference);
134
138
  /* own properties */
135
139
  position: relative;
@@ -137,116 +141,118 @@
137
141
  height: 100%;
138
142
  width: 100%;
139
143
  overflow: clip;
140
- color: var(--color-text);
144
+ color: var(--tl-color-text);
141
145
  }
142
146
 
143
147
  .tl-theme__light {
144
148
  /* Canvas */
145
- --color-snap: hsl(0, 76%, 60%);
146
- --color-selection-fill: hsl(210, 100%, 56%, 24%);
147
- --color-selection-stroke: hsl(214, 84%, 56%);
148
- --color-background: hsl(210, 20%, 98%);
149
- --color-brush-fill: hsl(0, 0%, 56%, 10.2%);
150
- --color-brush-stroke: hsl(0, 0%, 56%, 25.1%);
151
- --color-grid: hsl(0, 0%, 43%);
149
+ --tl-color-snap: hsl(0, 76%, 60%);
150
+ --tl-color-selection-fill: hsl(210, 100%, 56%, 24%);
151
+ --tl-color-selection-stroke: hsl(214, 84%, 56%);
152
+ --tl-color-background: hsl(210, 20%, 98%);
153
+ --tl-color-brush-fill: hsl(0, 0%, 56%, 10.2%);
154
+ --tl-color-brush-stroke: hsl(0, 0%, 56%, 25.1%);
155
+ --tl-color-grid: hsl(0, 0%, 43%);
152
156
  /* UI */
153
- --color-low: hsl(204, 16%, 94%);
154
- --color-low-border: hsl(204, 16%, 92%);
155
- --color-culled: hsl(204, 14%, 93%);
156
- --color-muted-none: hsl(0, 0%, 0%, 0%);
157
- --color-muted-0: hsl(0, 0%, 0%, 2%);
158
- --color-muted-1: hsl(0, 0%, 0%, 10%);
159
- --color-muted-2: hsl(0, 0%, 0%, 4.3%);
160
- --color-hint: hsl(0, 0%, 0%, 5.5%);
161
- --color-overlay: hsl(0, 0%, 0%, 20%);
162
- --color-divider: hsl(0, 0%, 91%);
163
- --color-panel: hsl(0, 0%, 99%);
164
- --color-panel-contrast: hsl(0, 0%, 100%);
165
- --color-panel-overlay: hsl(0, 0%, 100%, 82%);
166
- --color-panel-transparent: hsla(0, 0%, 99%, 0%);
167
- --color-selected: hsl(214, 84%, 56%);
168
- --color-selected-contrast: hsl(0, 0%, 100%);
169
- --color-focus: hsl(219, 65%, 50%);
157
+ --tl-color-low: hsl(204, 16%, 94%);
158
+ --tl-color-low-border: hsl(204, 16%, 92%);
159
+ --tl-color-culled: hsl(204, 14%, 93%);
160
+ --tl-color-muted-none: hsl(0, 0%, 0%, 0%);
161
+ --tl-color-muted-0: hsl(0, 0%, 0%, 2%);
162
+ --tl-color-muted-1: hsl(0, 0%, 0%, 10%);
163
+ --tl-color-muted-2: hsl(0, 0%, 0%, 4.3%);
164
+ --tl-color-hint: hsl(0, 0%, 0%, 5.5%);
165
+ --tl-color-overlay: hsl(0, 0%, 0%, 20%);
166
+ --tl-color-divider: hsl(0, 0%, 91%);
167
+ --tl-color-panel: hsl(0, 0%, 99%);
168
+ --tl-color-panel-contrast: hsl(0, 0%, 100%);
169
+ --tl-color-panel-overlay: hsl(0, 0%, 100%, 82%);
170
+ --tl-color-panel-transparent: hsla(0, 0%, 99%, 0%);
171
+ --tl-color-selected: hsl(214, 84%, 56%);
172
+ --tl-color-selected-contrast: hsl(0, 0%, 100%);
173
+ --tl-color-focus: hsl(219, 65%, 50%);
174
+ --tl-color-tooltip: hsla(200, 14%, 4%, 1);
170
175
  /* Text */
171
- --color-text: hsl(0, 0%, 0%);
172
- --color-text-0: hsl(0, 0%, 11%);
173
- --color-text-1: hsl(0, 0%, 18%);
174
- --color-text-3: hsl(204, 4%, 45%);
175
- --color-text-shadow: hsl(0, 0%, 100%);
176
- --color-text-highlight: hsl(52, 100%, 50%);
177
- --color-text-highlight-p3: color(display-p3 0.972 0.8205 0.05);
176
+ --tl-color-text: hsl(0, 0%, 0%);
177
+ --tl-color-text-0: hsl(0, 0%, 11%);
178
+ --tl-color-text-1: hsl(0, 0%, 18%);
179
+ --tl-color-text-3: hsl(204, 4%, 45%);
180
+ --tl-color-text-shadow: hsl(0, 0%, 100%);
181
+ --tl-color-text-highlight: hsl(52, 100%, 50%);
182
+ --tl-color-text-highlight-p3: color(display-p3 0.972 0.8205 0.05);
178
183
  /* Named */
179
- --color-primary: hsl(214, 84%, 56%);
180
- --color-success: hsl(123, 46%, 34%);
181
- --color-info: hsl(201, 98%, 41%);
182
- --color-warning: hsl(27, 98%, 47%);
183
- --color-danger: hsl(0, 90%, 43%);
184
- --color-laser: hsl(0, 100%, 50%);
184
+ --tl-color-primary: hsl(214, 84%, 56%);
185
+ --tl-color-success: hsl(123, 46%, 34%);
186
+ --tl-color-info: hsl(201, 98%, 41%);
187
+ --tl-color-warning: hsl(27, 98%, 47%);
188
+ --tl-color-danger: hsl(0, 90%, 43%);
189
+ --tl-color-laser: hsl(0, 100%, 50%);
185
190
  /* Shadows */
186
- --shadow-1: 0px 1px 2px hsl(0, 0%, 0%, 25%), 0px 1px 3px hsl(0, 0%, 0%, 9%);
187
- --shadow-2:
191
+ --tl-shadow-1: 0px 1px 2px hsl(0, 0%, 0%, 25%), 0px 1px 3px hsl(0, 0%, 0%, 9%);
192
+ --tl-shadow-2:
188
193
  0px 0px 2px hsl(0, 0%, 0%, 16%), 0px 2px 3px hsl(0, 0%, 0%, 24%),
189
- 0px 2px 6px hsl(0, 0%, 0%, 0.1), inset 0px 0px 0px 1px var(--color-panel-contrast);
190
- --shadow-3:
194
+ 0px 2px 6px hsl(0, 0%, 0%, 0.1), inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
195
+ --tl-shadow-3:
191
196
  0px 1px 2px hsl(0, 0%, 0%, 28%), 0px 2px 6px hsl(0, 0%, 0%, 14%),
192
- inset 0px 0px 0px 1px var(--color-panel-contrast);
193
- --shadow-4:
197
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
198
+ --tl-shadow-4:
194
199
  0px 0px 3px hsl(0, 0%, 0%, 19%), 0px 5px 4px hsl(0, 0%, 0%, 16%),
195
- 0px 2px 16px hsl(0, 0%, 0%, 6%), inset 0px 0px 0px 1px var(--color-panel-contrast);
200
+ 0px 2px 16px hsl(0, 0%, 0%, 6%), inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
196
201
  }
197
202
 
198
203
  .tl-theme__dark {
199
204
  /* Canvas */
200
- --color-snap: hsl(0, 76%, 60%);
201
- --color-selection-fill: hsl(209, 100%, 57%, 20%);
202
- --color-selection-stroke: hsl(214, 84%, 56%);
203
- --color-background: hsl(240, 5%, 6.5%);
204
- --color-brush-fill: hsl(0, 0%, 71%, 5.1%);
205
- --color-brush-stroke: hsl(0, 0%, 71%, 25.1%);
206
- --color-grid: hsl(0, 0%, 40%);
205
+ --tl-color-snap: hsl(0, 76%, 60%);
206
+ --tl-color-selection-fill: hsl(209, 100%, 57%, 20%);
207
+ --tl-color-selection-stroke: hsl(214, 84%, 56%);
208
+ --tl-color-background: hsl(240, 5%, 6.5%);
209
+ --tl-color-brush-fill: hsl(0, 0%, 71%, 5.1%);
210
+ --tl-color-brush-stroke: hsl(0, 0%, 71%, 25.1%);
211
+ --tl-color-grid: hsl(0, 0%, 40%);
207
212
  /* UI */
208
- --color-low: hsl(260, 4.5%, 10.5%);
209
- --color-low-border: hsl(207, 10%, 10%);
210
- --color-culled: hsl(210, 11%, 19%);
211
- --color-muted-none: hsl(0, 0%, 100%, 0%);
212
- --color-muted-0: hsl(0, 0%, 100%, 2%);
213
- --color-muted-1: hsl(0, 0%, 100%, 10%);
214
- --color-muted-2: hsl(0, 0%, 100%, 5%);
215
- --color-hint: hsl(0, 0%, 100%, 7%);
216
- --color-overlay: hsl(0, 0%, 0%, 50%);
217
- --color-divider: hsl(240, 9%, 22%);
218
- --color-panel: hsl(235, 6.8%, 13.5%);
219
- --color-panel-contrast: hsl(245, 12%, 23%);
220
- --color-panel-overlay: hsl(210, 10%, 24%, 82%);
221
- --color-panel-transparent: hsla(235, 6.8%, 13.5%, 0%);
222
- --color-selected: hsl(217, 89%, 61%);
223
- --color-selected-contrast: hsl(0, 0%, 100%);
224
- --color-focus: hsl(217, 76%, 80%);
213
+ --tl-color-low: hsl(260, 4.5%, 10.5%);
214
+ --tl-color-low-border: hsl(207, 10%, 10%);
215
+ --tl-color-culled: hsl(210, 11%, 19%);
216
+ --tl-color-muted-none: hsl(0, 0%, 100%, 0%);
217
+ --tl-color-muted-0: hsl(0, 0%, 100%, 2%);
218
+ --tl-color-muted-1: hsl(0, 0%, 100%, 10%);
219
+ --tl-color-muted-2: hsl(0, 0%, 100%, 5%);
220
+ --tl-color-hint: hsl(0, 0%, 100%, 7%);
221
+ --tl-color-overlay: hsl(0, 0%, 0%, 50%);
222
+ --tl-color-divider: hsl(240, 9%, 22%);
223
+ --tl-color-panel: hsl(235, 6.8%, 13.5%);
224
+ --tl-color-panel-contrast: hsl(245, 12%, 23%);
225
+ --tl-color-panel-overlay: hsl(210, 10%, 24%, 82%);
226
+ --tl-color-panel-transparent: hsla(235, 6.8%, 13.5%, 0%);
227
+ --tl-color-selected: hsl(217, 89%, 61%);
228
+ --tl-color-selected-contrast: hsl(0, 0%, 100%);
229
+ --tl-color-focus: hsl(217, 76%, 80%);
230
+ --tl-color-tooltip: hsla(0, 0%, 100%, 1);
225
231
  /* Text */
226
- --color-text: hsl(210, 17%, 98%);
227
- --color-text-0: hsl(0, 9%, 94%);
228
- --color-text-1: hsl(0, 0%, 85%);
229
- --color-text-3: hsl(204, 4%, 75%);
230
- --color-text-shadow: hsl(210, 13%, 18%);
231
- --color-text-highlight: hsl(52, 100%, 41%);
232
- --color-text-highlight-p3: color(display-p3 0.8078 0.6225 0.0312);
232
+ --tl-color-text: hsl(210, 17%, 98%);
233
+ --tl-color-text-0: hsl(0, 9%, 94%);
234
+ --tl-color-text-1: hsl(0, 0%, 85%);
235
+ --tl-color-text-3: hsl(204, 4%, 75%);
236
+ --tl-color-text-shadow: hsl(210, 13%, 18%);
237
+ --tl-color-text-highlight: hsl(52, 100%, 41%);
238
+ --tl-color-text-highlight-p3: color(display-p3 0.8078 0.6225 0.0312);
233
239
  /* Named */
234
- --color-primary: hsl(214, 84%, 56%);
235
- --color-success: hsl(123, 38%, 57%);
236
- --color-info: hsl(199, 92%, 56%);
237
- --color-warning: hsl(36, 100%, 57%);
238
- --color-danger: hsl(0, 82%, 66%);
239
- --color-laser: hsl(0, 100%, 50%);
240
+ --tl-color-primary: hsl(214, 84%, 56%);
241
+ --tl-color-success: hsl(123, 38%, 57%);
242
+ --tl-color-info: hsl(199, 92%, 56%);
243
+ --tl-color-warning: hsl(36, 100%, 57%);
244
+ --tl-color-danger: hsl(0, 82%, 66%);
245
+ --tl-color-laser: hsl(0, 100%, 50%);
240
246
  /* Shadows */
241
- --shadow-1:
247
+ --tl-shadow-1:
242
248
  0px 1px 2px hsl(0, 0%, 0%, 16.1%), 0px 1px 3px hsl(0, 0%, 0%, 22%),
243
- inset 0px 0px 0px 1px var(--color-panel-contrast);
244
- --shadow-2:
249
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
250
+ --tl-shadow-2:
245
251
  0px 1px 3px hsl(0, 0%, 0%, 66.6%), 0px 2px 6px hsl(0, 0%, 0%, 33%),
246
- inset 0px 0px 0px 1px var(--color-panel-contrast);
247
- --shadow-3:
252
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
253
+ --tl-shadow-3:
248
254
  0px 1px 3px hsl(0, 0%, 0%, 50%), 0px 2px 12px hsl(0, 0%, 0%, 50%),
249
- inset 0px 0px 0px 1px var(--color-panel-contrast);
255
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
250
256
  }
251
257
 
252
258
  .tl-counter-scaled {
@@ -272,7 +278,7 @@
272
278
  }
273
279
 
274
280
  .tl-container__focused {
275
- outline: 1px solid var(--color-low);
281
+ outline: 1px solid var(--tl-color-low);
276
282
  }
277
283
 
278
284
  input,
@@ -288,7 +294,7 @@ input,
288
294
  inset: 0px;
289
295
  height: 100%;
290
296
  width: 100%;
291
- color: var(--color-text);
297
+ color: var(--tl-color-text);
292
298
  cursor: var(--tl-cursor);
293
299
  overflow: clip;
294
300
  content-visibility: auto;
@@ -296,9 +302,16 @@ input,
296
302
  contain: strict;
297
303
  }
298
304
 
305
+ .tl-canvas__in-front {
306
+ position: absolute;
307
+ inset: 0;
308
+ pointer-events: none;
309
+ z-index: var(--tl-layer-canvas-in-front);
310
+ }
311
+
299
312
  .tl-shapes {
300
313
  position: relative;
301
- z-index: var(--layer-canvas-shapes);
314
+ z-index: var(--tl-layer-canvas-shapes);
302
315
  }
303
316
 
304
317
  .tl-overlays {
@@ -309,7 +322,7 @@ input,
309
322
  width: 100%;
310
323
  contain: strict;
311
324
  pointer-events: none;
312
- z-index: var(--layer-canvas-overlays);
325
+ z-index: var(--tl-layer-canvas-overlays);
313
326
  }
314
327
 
315
328
  .tl-overlays__item {
@@ -333,7 +346,7 @@ input,
333
346
  /* ------------------- Background ------------------- */
334
347
 
335
348
  .tl-background__wrapper {
336
- z-index: var(--layer-canvas-background);
349
+ z-index: var(--tl-layer-canvas-background);
337
350
  position: absolute;
338
351
  inset: 0px;
339
352
  height: 100%;
@@ -341,7 +354,7 @@ input,
341
354
  }
342
355
 
343
356
  .tl-background {
344
- background-color: var(--color-background);
357
+ background-color: var(--tl-color-background);
345
358
  width: 100%;
346
359
  height: 100%;
347
360
  }
@@ -355,12 +368,12 @@ input,
355
368
  height: 100%;
356
369
  touch-action: none;
357
370
  pointer-events: none;
358
- z-index: var(--layer-canvas-grid);
371
+ z-index: var(--tl-layer-canvas-grid);
359
372
  contain: strict;
360
373
  }
361
374
 
362
375
  .tl-grid-dot {
363
- fill: var(--color-grid);
376
+ fill: var(--tl-color-grid);
364
377
  }
365
378
 
366
379
  /* --------------------- Layers --------------------- */
@@ -378,54 +391,54 @@ input,
378
391
 
379
392
  /* back of the stack, behind user's stuff */
380
393
  .tl-collaborator__scribble {
381
- z-index: var(--layer-overlays-collaborator-scribble);
394
+ z-index: var(--tl-layer-overlays-collaborator-scribble);
382
395
  }
383
396
 
384
397
  .tl-collaborator__brush {
385
- z-index: var(--layer-overlays-collaborator-brush);
398
+ z-index: var(--tl-layer-overlays-collaborator-brush);
386
399
  }
387
400
 
388
401
  .tl-collaborator__shape-indicator {
389
- z-index: var(--layer-overlays-collaborator-shape-indicator);
402
+ z-index: var(--tl-layer-overlays-collaborator-shape-indicator);
390
403
  }
391
404
 
392
405
  .tl-user-scribble {
393
- z-index: var(--layer-overlays-user-scribble);
406
+ z-index: var(--tl-layer-overlays-user-scribble);
394
407
  }
395
408
 
396
409
  .tl-user-brush {
397
- z-index: var(--layer-overlays-user-brush);
410
+ z-index: var(--tl-layer-overlays-user-brush);
398
411
  }
399
412
 
400
413
  .tl-user-handles {
401
- z-index: var(--layer-overlays-user-handles);
414
+ z-index: var(--tl-layer-overlays-user-handles);
402
415
  }
403
416
 
404
417
  .tl-user-snapline {
405
- z-index: var(--layer-overlays-user-snapline);
418
+ z-index: var(--tl-layer-overlays-user-snapline);
406
419
  }
407
420
 
408
421
  .tl-selection__fg {
409
422
  pointer-events: none;
410
- z-index: var(--layer-overlays-selection-fg);
423
+ z-index: var(--tl-layer-overlays-selection-fg);
411
424
  }
412
425
 
413
426
  .tl-user-indicator__hint {
414
- z-index: var(--layer-overlays-user-indicator-hint);
427
+ z-index: var(--tl-layer-overlays-user-indicator-hint);
415
428
  stroke-width: calc(2.5px * var(--tl-scale));
416
429
  }
417
430
 
418
431
  .tl-custom-overlays {
419
- z-index: var(--layer-overlays-custom);
432
+ z-index: var(--tl-layer-overlays-custom);
420
433
  }
421
434
 
422
435
  /* behind collaborator cursor */
423
436
  .tl-collaborator__cursor-hint {
424
- z-index: var(--layer-overlays-collaborator-cursor-hint);
437
+ z-index: var(--tl-layer-overlays-collaborator-cursor-hint);
425
438
  }
426
439
 
427
440
  .tl-collaborator__cursor {
428
- z-index: var(--layer-overlays-collaborator-cursor);
441
+ z-index: var(--tl-layer-overlays-collaborator-cursor);
429
442
  }
430
443
 
431
444
  .tl-cursor {
@@ -446,32 +459,32 @@ input,
446
459
  .tl-selection__fg__outline {
447
460
  fill: none;
448
461
  pointer-events: none;
449
- stroke: var(--color-selection-stroke);
462
+ stroke: var(--tl-color-selection-stroke);
450
463
  stroke-width: calc(1.5px * var(--tl-scale));
451
464
  }
452
465
 
453
466
  .tl-corner-handle {
454
467
  pointer-events: none;
455
- stroke: var(--color-selection-stroke);
456
- fill: var(--color-background);
468
+ stroke: var(--tl-color-selection-stroke);
469
+ fill: var(--tl-color-background);
457
470
  stroke-width: calc(1.5px * var(--tl-scale));
458
471
  }
459
472
 
460
473
  .tl-text-handle {
461
474
  pointer-events: none;
462
- fill: var(--color-selection-stroke);
475
+ fill: var(--tl-color-selection-stroke);
463
476
  }
464
477
 
465
478
  .tl-corner-crop-handle {
466
479
  pointer-events: none;
467
480
  fill: none;
468
- stroke: var(--color-selection-stroke);
481
+ stroke: var(--tl-color-selection-stroke);
469
482
  }
470
483
 
471
484
  .tl-corner-crop-edge-handle {
472
485
  pointer-events: none;
473
486
  fill: none;
474
- stroke: var(--color-selection-stroke);
487
+ stroke: var(--tl-color-selection-stroke);
475
488
  }
476
489
 
477
490
  .tl-mobile-rotate__bg {
@@ -481,8 +494,8 @@ input,
481
494
 
482
495
  .tl-mobile-rotate__fg {
483
496
  pointer-events: none;
484
- stroke: var(--color-selection-stroke);
485
- fill: var(--color-background);
497
+ stroke: var(--tl-color-selection-stroke);
498
+ fill: var(--tl-color-background);
486
499
  stroke-width: calc(1.5px * var(--tl-scale));
487
500
  }
488
501
 
@@ -512,8 +525,8 @@ input,
512
525
  text-overflow: ellipsis;
513
526
  font-size: 12px;
514
527
  font-family: var(--font-body);
515
- border-radius: var(--radius-2);
516
- color: var(--color-selected-contrast);
528
+ border-radius: var(--tl-radius-2);
529
+ color: var(--tl-color-selected-contrast);
517
530
  }
518
531
 
519
532
  .tl-nametag-title {
@@ -531,7 +544,7 @@ input,
531
544
  font-size: 12px;
532
545
  font-family: var(--font-body);
533
546
  text-shadow: var(--tl-text-outline);
534
- color: var(--color-selected-contrast);
547
+ color: var(--tl-color-selected-contrast);
535
548
  }
536
549
 
537
550
  .tl-nametag-chat {
@@ -540,31 +553,31 @@ input,
540
553
  left: 13px;
541
554
  width: fit-content;
542
555
  height: fit-content;
543
- color: var(--color-selected-contrast);
556
+ color: var(--tl-color-selected-contrast);
544
557
  white-space: nowrap;
545
558
  position: absolute;
546
559
  padding: 3px 6px;
547
560
  font-size: 12px;
548
561
  font-family: var(--font-body);
549
562
  opacity: 1;
550
- border-radius: var(--radius-2);
563
+ border-radius: var(--tl-radius-2);
551
564
  }
552
565
 
553
566
  .tl-cursor-chat {
554
567
  position: absolute;
555
- color: var(--color-selected-contrast);
568
+ color: var(--tl-color-selected-contrast);
556
569
  white-space: nowrap;
557
570
  padding: 3px 6px;
558
571
  font-size: 12px;
559
572
  font-family: var(--font-body);
560
573
  pointer-events: none;
561
- z-index: var(--layer-cursor);
574
+ z-index: var(--tl-layer-cursor);
562
575
  margin-top: 16px;
563
576
  margin-left: 13px;
564
577
  opacity: 1;
565
578
  border: none;
566
579
  user-select: text;
567
- border-radius: var(--radius-2);
580
+ border-radius: var(--tl-radius-2);
568
581
  }
569
582
 
570
583
  .tl-cursor-chat .tl-cursor-chat__bubble {
@@ -572,13 +585,13 @@ input,
572
585
  }
573
586
 
574
587
  .tl-cursor-chat::selection {
575
- background: var(--color-selected);
576
- color: var(--color-selected-contrast);
588
+ background: var(--tl-color-selected);
589
+ color: var(--tl-color-selected-contrast);
577
590
  text-shadow: none;
578
591
  }
579
592
 
580
593
  .tl-cursor-chat::placeholder {
581
- color: var(--color-selected-contrast);
594
+ color: var(--tl-color-selected-contrast);
582
595
  opacity: 0.7;
583
596
  }
584
597
 
@@ -649,7 +662,7 @@ input,
649
662
  background: none;
650
663
  border-image: none;
651
664
  border: 0px;
652
- caret-color: var(--color-text);
665
+ caret-color: var(--tl-color-text);
653
666
  color: inherit;
654
667
  column-count: initial !important;
655
668
  display: inline-block;
@@ -680,11 +693,17 @@ input,
680
693
  }
681
694
 
682
695
  .tl-text-measure {
696
+ z-index: var(--tl-layer-canvas-hidden);
697
+ opacity: 0;
698
+ visibility: hidden;
699
+
700
+ /* pointer-events: all; */
701
+ /* opacity: 1; */
702
+ /* z-index: 99999; */
703
+
683
704
  position: absolute;
684
- z-index: var(--layer-canvas-hidden);
685
705
  top: 0px;
686
706
  left: 0px;
687
- opacity: 0;
688
707
  width: max-content;
689
708
  box-sizing: border-box;
690
709
  pointer-events: none;
@@ -695,7 +714,6 @@ input,
695
714
  border: none;
696
715
  user-select: none;
697
716
  contain: style paint;
698
- visibility: hidden;
699
717
  /* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
700
718
  unicode-bidi: plaintext;
701
719
  -webkit-user-select: none;
@@ -744,8 +762,8 @@ input,
744
762
  }
745
763
 
746
764
  .tl-text-input::selection {
747
- background: var(--color-selected);
748
- color: var(--color-selected-contrast);
765
+ background: var(--tl-color-selected);
766
+ color: var(--tl-color-selected-contrast);
749
767
  text-shadow: none;
750
768
  }
751
769
 
@@ -755,7 +773,7 @@ input,
755
773
  display: flex;
756
774
  justify-content: center;
757
775
  align-items: center;
758
- color: var(--color-text);
776
+ color: var(--tl-color-text);
759
777
  text-shadow: var(--tl-text-outline);
760
778
  line-height: inherit;
761
779
  position: absolute;
@@ -799,7 +817,7 @@ input,
799
817
 
800
818
  .tl-text-wrapper .tl-text-content {
801
819
  pointer-events: all;
802
- z-index: var(--layer-text-content);
820
+ z-index: var(--tl-layer-text-content);
803
821
  }
804
822
 
805
823
  .tl-text-label__inner > .tl-text-content {
@@ -809,7 +827,7 @@ input,
809
827
  padding: inherit;
810
828
  height: fit-content;
811
829
  width: fit-content;
812
- border-radius: var(--radius-1);
830
+ border-radius: var(--tl-radius-1);
813
831
  max-width: 100%;
814
832
  }
815
833
 
@@ -822,7 +840,7 @@ input,
822
840
  }
823
841
 
824
842
  .tl-text-wrapper[data-isselected='true'] .tl-text-input {
825
- z-index: var(--layer-text-editor);
843
+ z-index: var(--tl-layer-text-editor);
826
844
  pointer-events: all;
827
845
  }
828
846
 
@@ -917,7 +935,7 @@ input,
917
935
  }
918
936
 
919
937
  .tl-rich-text a {
920
- color: var(--color-primary);
938
+ color: var(--tl-color-primary);
921
939
  text-decoration: underline;
922
940
  }
923
941
 
@@ -940,14 +958,14 @@ input,
940
958
  }
941
959
 
942
960
  .tl-theme__dark .tl-rich-text mark {
943
- background-color: var(--color-text-highlight);
961
+ background-color: var(--tl-color-text-highlight);
944
962
  color: currentColor;
945
963
  }
946
964
 
947
965
  @supports (color: color(display-p3 1 1 1)) {
948
966
  @media (color-gamut: p3) {
949
967
  .tl-container:not(.tl-theme__force-sRGB) .tl-rich-text mark {
950
- background-color: var(--color-text-highlight-p3);
968
+ background-color: var(--tl-color-text-highlight-p3);
951
969
  }
952
970
  }
953
971
  }
@@ -959,15 +977,15 @@ input,
959
977
  /* --------------------- Loading -------------------- */
960
978
 
961
979
  .tl-loading {
962
- background-color: var(--color-background);
963
- color: var(--color-text-1);
980
+ background-color: var(--tl-color-background);
981
+ color: var(--tl-color-text-1);
964
982
  height: 100%;
965
983
  width: 100%;
966
984
  display: flex;
967
985
  flex-direction: column;
968
986
  justify-content: center;
969
987
  align-items: center;
970
- gap: var(--space-2);
988
+ gap: var(--tl-space-2);
971
989
  font-size: 14px;
972
990
  font-weight: 500;
973
991
  opacity: 0;
@@ -975,7 +993,7 @@ input,
975
993
  animation-delay: 0.2s;
976
994
  position: absolute;
977
995
  inset: 0px;
978
- z-index: var(--layer-canvas-blocker);
996
+ z-index: var(--tl-layer-canvas-blocker);
979
997
  }
980
998
 
981
999
  @keyframes tl-fade-in {
@@ -1008,8 +1026,8 @@ input,
1008
1026
  }
1009
1027
 
1010
1028
  .tl-brush__default {
1011
- stroke: var(--color-brush-stroke);
1012
- fill: var(--color-brush-fill);
1029
+ stroke: var(--tl-color-brush-stroke);
1030
+ fill: var(--tl-color-brush-fill);
1013
1031
  }
1014
1032
 
1015
1033
  /* -------------------- Scribble -------------------- */
@@ -1024,13 +1042,13 @@ input,
1024
1042
  /* ---------------------- Snaps --------------------- */
1025
1043
 
1026
1044
  .tl-snap-indicator {
1027
- stroke: var(--color-snap);
1045
+ stroke: var(--tl-color-snap);
1028
1046
  stroke-width: calc(1px * var(--tl-scale));
1029
1047
  fill: none;
1030
1048
  }
1031
1049
 
1032
1050
  .tl-snap-point {
1033
- stroke: var(--color-snap);
1051
+ stroke: var(--tl-color-snap);
1034
1052
  stroke-width: calc(1px * var(--tl-scale));
1035
1053
  fill: none;
1036
1054
  }
@@ -1050,7 +1068,7 @@ input,
1050
1068
  justify-content: center;
1051
1069
  font-size: 12px;
1052
1070
  font-weight: 400;
1053
- color: var(--color-text-1);
1071
+ color: var(--tl-color-text-1);
1054
1072
  padding: 13px;
1055
1073
  cursor: var(--tl-cursor-pointer);
1056
1074
  border: none;
@@ -1068,13 +1086,13 @@ input,
1068
1086
  display: block;
1069
1087
  width: calc(100% - 12px);
1070
1088
  height: calc(100% - 12px);
1071
- border-radius: var(--radius-1);
1072
- background-color: var(--color-background);
1089
+ border-radius: var(--tl-radius-1);
1090
+ background-color: var(--tl-color-background);
1073
1091
  pointer-events: none;
1074
1092
  }
1075
1093
 
1076
1094
  .tl-hyperlink-button:focus-visible {
1077
- color: var(--color-selected);
1095
+ color: var(--tl-color-selected);
1078
1096
  }
1079
1097
 
1080
1098
  .tl-hyperlink__icon {
@@ -1101,8 +1119,8 @@ input,
1101
1119
  }
1102
1120
 
1103
1121
  .tl-handle__fg {
1104
- fill: var(--color-selected-contrast);
1105
- stroke: var(--color-selection-stroke);
1122
+ fill: var(--tl-color-selected-contrast);
1123
+ stroke: var(--tl-color-selection-stroke);
1106
1124
  stroke-width: calc(1.5px * var(--tl-scale));
1107
1125
  pointer-events: none;
1108
1126
  }
@@ -1112,7 +1130,7 @@ input,
1112
1130
  }
1113
1131
 
1114
1132
  .tl-handle__clone > .tl-handle__fg {
1115
- fill: var(--color-selection-stroke);
1133
+ fill: var(--tl-color-selection-stroke);
1116
1134
  stroke: none;
1117
1135
  }
1118
1136
 
@@ -1122,7 +1140,7 @@ input,
1122
1140
 
1123
1141
  @media (pointer: coarse) {
1124
1142
  .tl-handle__bg:active {
1125
- fill: var(--color-selection-fill);
1143
+ fill: var(--tl-color-selection-fill);
1126
1144
  }
1127
1145
 
1128
1146
  .tl-handle__create {
@@ -1178,13 +1196,13 @@ input,
1178
1196
  stroke-linejoin: round;
1179
1197
  /* content-visibility: auto; */
1180
1198
  transform-origin: top left;
1181
- color: var(--color-text-1);
1199
+ color: var(--tl-color-text-1);
1182
1200
  }
1183
1201
 
1184
1202
  /* -------------------- Group shape ------------------ */
1185
1203
 
1186
1204
  .tl-group {
1187
- stroke: var(--color-text);
1205
+ stroke: var(--tl-color-text);
1188
1206
  stroke-width: calc(1px * var(--tl-scale));
1189
1207
  opacity: 0.5;
1190
1208
  }
@@ -1202,12 +1220,12 @@ input,
1202
1220
  justify-content: center;
1203
1221
  align-items: center;
1204
1222
  text-align: center;
1205
- color: var(--color-text);
1223
+ color: var(--tl-color-text);
1206
1224
  text-shadow: var(--tl-text-outline);
1207
1225
  }
1208
1226
 
1209
1227
  .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1210
- border-radius: var(--radius-1);
1228
+ border-radius: var(--tl-radius-1);
1211
1229
  box-sizing: content-box;
1212
1230
  height: max-content;
1213
1231
  width: max-content;
@@ -1218,22 +1236,22 @@ input,
1218
1236
  }
1219
1237
 
1220
1238
  .tl-arrow-hint {
1221
- stroke: var(--color-text-1);
1239
+ stroke: var(--tl-color-text-1);
1222
1240
  fill: none;
1223
1241
  stroke-linecap: round;
1224
1242
  overflow: visible;
1225
1243
  }
1226
1244
 
1227
1245
  .tl-arrow-hint-handle {
1228
- fill: var(--color-selected-contrast);
1229
- stroke: var(--color-selection-stroke);
1246
+ fill: var(--tl-color-selected-contrast);
1247
+ stroke: var(--tl-color-selection-stroke);
1230
1248
  stroke-width: calc(1.5px * var(--tl-scale));
1231
1249
  r: calc(4px * var(--tl-scale));
1232
1250
  }
1233
1251
 
1234
1252
  .tl-arrow-hint-snap {
1235
1253
  stroke: transparent;
1236
- fill: var(--color-selection-fill);
1254
+ fill: var(--tl-color-selection-fill);
1237
1255
  r: calc(12px * var(--tl-scale));
1238
1256
  }
1239
1257
 
@@ -1253,40 +1271,40 @@ input,
1253
1271
  width: 100%;
1254
1272
  height: 100%;
1255
1273
  position: relative;
1256
- border: 1px solid var(--color-panel-contrast);
1257
- background-color: var(--color-panel);
1258
- border-radius: var(--radius-2);
1274
+ border: 1px solid var(--tl-color-panel-contrast);
1275
+ background-color: var(--tl-color-panel);
1276
+ border-radius: var(--tl-radius-2);
1259
1277
  display: flex;
1260
1278
  flex-direction: column;
1261
1279
  overflow: hidden;
1262
1280
  }
1263
1281
 
1264
1282
  .tl-bookmark__container--safariExport {
1265
- border: 1px solid var(--color-divider);
1283
+ border: 1px solid var(--tl-color-divider);
1266
1284
  }
1267
1285
 
1268
1286
  .tl-bookmark__image_container {
1269
1287
  flex: 1 1 100%;
1270
1288
  overflow: hidden;
1271
- border-top-left-radius: var(--radius-1);
1272
- border-top-right-radius: var(--radius-1);
1289
+ border-top-left-radius: var(--tl-radius-1);
1290
+ border-top-right-radius: var(--tl-radius-1);
1273
1291
  width: 100%;
1274
1292
  height: 100%;
1275
1293
  display: flex;
1276
1294
  justify-content: flex-end;
1277
1295
  align-items: flex-start;
1278
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1296
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1279
1297
  }
1280
1298
 
1281
1299
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1282
- background-color: var(--color-panel);
1300
+ background-color: var(--tl-color-panel);
1283
1301
  }
1284
1302
 
1285
1303
  .tl-bookmark__placeholder {
1286
1304
  width: 100%;
1287
1305
  height: 100%;
1288
- background-color: var(--color-muted-2);
1289
- border-bottom: 1px solid var(--color-muted-2);
1306
+ background-color: var(--tl-color-muted-2);
1307
+ border-bottom: 1px solid var(--tl-color-muted-2);
1290
1308
  }
1291
1309
 
1292
1310
  .tl-bookmark__image {
@@ -1294,12 +1312,12 @@ input,
1294
1312
  height: 100%;
1295
1313
  object-fit: cover;
1296
1314
  object-position: center;
1297
- border-bottom: 1px solid var(--color-muted-2);
1315
+ border-bottom: 1px solid var(--tl-color-muted-2);
1298
1316
  }
1299
1317
 
1300
1318
  .tl-bookmark__copy_container {
1301
- background-color: var(--color-muted-0);
1302
- padding: var(--space-4);
1319
+ background-color: var(--tl-color-muted-0);
1320
+ padding: var(--tl-space-4);
1303
1321
  pointer-events: all;
1304
1322
  display: flex;
1305
1323
  flex-direction: column;
@@ -1319,7 +1337,7 @@ input,
1319
1337
  font-size: 16px;
1320
1338
  line-height: 1.6;
1321
1339
  font-weight: bold;
1322
- padding-bottom: var(--space-2);
1340
+ padding-bottom: var(--tl-space-2);
1323
1341
  overflow: hidden;
1324
1342
  max-height: calc((16px * 1.6) * 2);
1325
1343
  -webkit-box-orient: vertical;
@@ -1339,19 +1357,19 @@ input,
1339
1357
  line-clamp: 3;
1340
1358
  text-overflow: ellipsis;
1341
1359
  display: -webkit-box;
1342
- color: var(--color-text-2);
1343
- margin: var(--space-2) 0px;
1360
+ color: var(--tl-color-text-2);
1361
+ margin: var(--tl-space-2) 0px;
1344
1362
  }
1345
1363
 
1346
1364
  .tl-bookmark__heading + .tl-bookmark__link,
1347
1365
  .tl-bookmark__description + .tl-bookmark__link {
1348
- margin-top: var(--space-3);
1366
+ margin-top: var(--tl-space-3);
1349
1367
  }
1350
1368
  .tl-bookmark__link {
1351
1369
  font-size: 12px;
1352
1370
  pointer-events: all;
1353
1371
  display: flex;
1354
- color: var(--color-text-2);
1372
+ color: var(--tl-color-text-2);
1355
1373
  align-items: center;
1356
1374
  cursor: var(--tl-cursor-pointer);
1357
1375
  width: fit-content;
@@ -1393,7 +1411,7 @@ input,
1393
1411
  width: 100%;
1394
1412
  height: 100%;
1395
1413
  pointer-events: all;
1396
- /* background-color: var(--color-background); */
1414
+ /* background-color: var(--tl-color-background); */
1397
1415
 
1398
1416
  display: flex;
1399
1417
  justify-content: center;
@@ -1422,7 +1440,7 @@ input,
1422
1440
  height: 100%;
1423
1441
  pointer-events: all;
1424
1442
  opacity: 1;
1425
- z-index: var(--layer-text-container);
1443
+ z-index: var(--tl-layer-text-container);
1426
1444
  border-radius: 1px;
1427
1445
  }
1428
1446
 
@@ -1438,22 +1456,22 @@ input,
1438
1456
  }
1439
1457
 
1440
1458
  .tl-frame__creating {
1441
- stroke: var(--color-selected);
1459
+ stroke: var(--tl-color-selected);
1442
1460
  fill: none;
1443
1461
  }
1444
1462
 
1445
1463
  .tl-frame-heading {
1446
- --frame-padding-x: 6px;
1447
- --frame-height: 24px;
1448
- --frame-minimum-width: 32px;
1449
- --frame-offset-width: 16px;
1464
+ --tl-frame-padding-x: 6px;
1465
+ --tl-frame-height: 24px;
1466
+ --tl-frame-minimum-width: 32px;
1467
+ --tl-frame-offset-width: 16px;
1450
1468
  display: flex;
1451
1469
  align-items: center;
1452
1470
  position: absolute;
1453
1471
  transform-origin: 0% 100%;
1454
1472
  overflow: hidden;
1455
1473
  max-width: 100%;
1456
- min-width: var(--frame-minimum-width);
1474
+ min-width: var(--tl-frame-minimum-width);
1457
1475
  height: auto;
1458
1476
  font-size: 12px;
1459
1477
  padding-bottom: 4px;
@@ -1465,18 +1483,18 @@ input,
1465
1483
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1466
1484
  transform-origin: 0% 100%;
1467
1485
  display: flex;
1468
- height: var(--frame-height);
1486
+ height: var(--tl-frame-height);
1469
1487
  width: 100%;
1470
1488
  align-items: center;
1471
- border-radius: var(--radius-1);
1489
+ border-radius: var(--tl-radius-1);
1472
1490
  }
1473
1491
 
1474
1492
  .tl-frame-label {
1475
1493
  pointer-events: all;
1476
1494
  overflow: hidden;
1477
1495
  text-overflow: ellipsis;
1478
- padding: 0px var(--frame-padding-x);
1479
- border-radius: var(--radius-1);
1496
+ padding: 0px var(--tl-frame-padding-x);
1497
+ border-radius: var(--tl-radius-1);
1480
1498
  position: relative;
1481
1499
  font-size: inherit;
1482
1500
  white-space: pre;
@@ -1486,12 +1504,12 @@ input,
1486
1504
  color: transparent;
1487
1505
  white-space: pre;
1488
1506
  width: auto;
1489
- min-width: var(--frame-minimum-width);
1507
+ min-width: var(--tl-frame-minimum-width);
1490
1508
  height: 100%;
1491
1509
  overflow: visible;
1492
- background-color: var(--color-panel);
1493
- border-color: var(--color-selected);
1494
- box-shadow: inset 0px 0px 0px 1.5px var(--color-selected);
1510
+ background-color: var(--tl-color-panel);
1511
+ border-color: var(--tl-color-selected);
1512
+ box-shadow: inset 0px 0px 0px 1.5px var(--tl-color-selected);
1495
1513
  }
1496
1514
 
1497
1515
  .tl-frame-name-input {
@@ -1499,7 +1517,7 @@ input,
1499
1517
  border: none;
1500
1518
  background: none;
1501
1519
  outline: none;
1502
- padding: 0px var(--frame-padding-x);
1520
+ padding: 0px var(--tl-frame-padding-x);
1503
1521
  inset: 0px;
1504
1522
  height: 100%;
1505
1523
  width: 100%;
@@ -1507,8 +1525,8 @@ input,
1507
1525
  font-family: inherit;
1508
1526
  font-weight: inherit;
1509
1527
  width: 100%;
1510
- color: var(--color-text-1);
1511
- border-radius: var(--radius-1);
1528
+ color: var(--tl-color-text-1);
1529
+ border-radius: var(--tl-radius-1);
1512
1530
  user-select: all;
1513
1531
  -webkit-user-select: text;
1514
1532
  white-space: pre;
@@ -1528,7 +1546,7 @@ input,
1528
1546
 
1529
1547
  .tl-embed {
1530
1548
  border: none;
1531
- border-radius: var(--radius-2);
1549
+ border-radius: var(--tl-radius-2);
1532
1550
  }
1533
1551
 
1534
1552
  /* -------------- Shape error boundary -------------- */
@@ -1536,11 +1554,11 @@ input,
1536
1554
  .tl-shape-error-boundary {
1537
1555
  width: 100%;
1538
1556
  height: 100%;
1539
- background-color: var(--color-muted-1);
1557
+ background-color: var(--tl-color-muted-1);
1540
1558
  border-width: calc(1px * var(--tl-scale));
1541
- border-color: var(--color-muted-1);
1559
+ border-color: var(--tl-color-muted-1);
1542
1560
  border-style: solid;
1543
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1561
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1544
1562
  display: flex;
1545
1563
  flex-direction: column;
1546
1564
  align-items: center;
@@ -1549,7 +1567,7 @@ input,
1549
1567
  position: relative;
1550
1568
  pointer-events: all;
1551
1569
  overflow: hidden;
1552
- padding: var(--space-2);
1570
+ padding: var(--tl-space-2);
1553
1571
  }
1554
1572
 
1555
1573
  .tl-shape-error-boundary::before {
@@ -1557,7 +1575,7 @@ input,
1557
1575
  content: 'Error';
1558
1576
  font-size: 12px;
1559
1577
  font-family: inherit;
1560
- color: var(--color-text-0);
1578
+ color: var(--tl-color-text-0);
1561
1579
  }
1562
1580
 
1563
1581
  /* ----------------- Error boundary ----------------- */
@@ -1568,9 +1586,9 @@ input,
1568
1586
  display: flex;
1569
1587
  align-items: center;
1570
1588
  justify-content: center;
1571
- padding: var(--space-4);
1572
- background-color: var(--color-background);
1573
- color: var(--color-text-1);
1589
+ padding: var(--tl-space-4);
1590
+ background-color: var(--tl-color-background);
1591
+ color: var(--tl-color-text-1);
1574
1592
  position: absolute;
1575
1593
  }
1576
1594
 
@@ -1579,8 +1597,8 @@ input,
1579
1597
  inset: 0px;
1580
1598
  height: 100%;
1581
1599
  width: 100%;
1582
- z-index: var(--layer-error-overlay);
1583
- background-color: var(--color-overlay);
1600
+ z-index: var(--tl-layer-error-overlay);
1601
+ background-color: var(--tl-color-overlay);
1584
1602
  }
1585
1603
 
1586
1604
  .tl-error-boundary__content * {
@@ -1595,7 +1613,7 @@ input,
1595
1613
  inset: 0px;
1596
1614
  height: 100%;
1597
1615
  width: 100%;
1598
- z-index: var(--layer-error-canvas);
1616
+ z-index: var(--tl-layer-error-canvas);
1599
1617
  }
1600
1618
 
1601
1619
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1608,7 +1626,7 @@ it from receiving any pointer events or affecting the cursor. */
1608
1626
  inset: 0px;
1609
1627
  height: 100%;
1610
1628
  width: 100%;
1611
- z-index: var(--layer-error-canvas-after);
1629
+ z-index: var(--tl-layer-error-canvas-after);
1612
1630
  pointer-events: all;
1613
1631
  }
1614
1632
 
@@ -1618,16 +1636,16 @@ it from receiving any pointer events or affecting the cursor. */
1618
1636
  max-width: 100%;
1619
1637
  width: 400px;
1620
1638
  max-height: 100%;
1621
- background-color: var(--color-panel);
1639
+ background-color: var(--tl-color-panel);
1622
1640
  padding: 16px;
1623
1641
  border-radius: 16px;
1624
- box-shadow: var(--shadow-2);
1642
+ box-shadow: var(--tl-shadow-2);
1625
1643
  font-size: 14px;
1626
1644
  font-weight: 400;
1627
1645
  display: flex;
1628
1646
  flex-direction: column;
1629
1647
  overflow: auto;
1630
- z-index: var(--layer-error-content);
1648
+ z-index: var(--tl-layer-error-content);
1631
1649
  gap: 12px;
1632
1650
  }
1633
1651
 
@@ -1642,10 +1660,10 @@ it from receiving any pointer events or affecting the cursor. */
1642
1660
  }
1643
1661
 
1644
1662
  .tl-error-boundary__content h4 {
1645
- border: 1px solid var(--color-low-border);
1663
+ border: 1px solid var(--tl-color-low-border);
1646
1664
  margin: -6px 0 0 0;
1647
- padding: var(--space-5);
1648
- border-radius: var(--radius-2);
1665
+ padding: var(--tl-space-5);
1666
+ border-radius: var(--tl-radius-2);
1649
1667
  font-weight: normal;
1650
1668
  }
1651
1669
 
@@ -1655,10 +1673,10 @@ it from receiving any pointer events or affecting the cursor. */
1655
1673
  }
1656
1674
 
1657
1675
  .tl-error-boundary__content pre {
1658
- background-color: var(--color-muted-2);
1676
+ background-color: var(--tl-color-muted-2);
1659
1677
  margin-top: 0;
1660
- padding: var(--space-5);
1661
- border-radius: var(--radius-2);
1678
+ padding: var(--tl-space-5);
1679
+ border-radius: var(--tl-radius-2);
1662
1680
  overflow: auto;
1663
1681
  font-size: 12px;
1664
1682
  max-height: 320px;
@@ -1670,15 +1688,15 @@ it from receiving any pointer events or affecting the cursor. */
1670
1688
  font-family: inherit;
1671
1689
  font-size: 14px;
1672
1690
  font-weight: 500;
1673
- padding: var(--space-4);
1674
- border-radius: var(--radius-3);
1691
+ padding: var(--tl-space-4);
1692
+ border-radius: var(--tl-radius-3);
1675
1693
  cursor: var(--tl-cursor-pointer);
1676
1694
  color: inherit;
1677
1695
  background-color: transparent;
1678
1696
  }
1679
1697
 
1680
1698
  .tl-error-boundary__content a {
1681
- color: var(--color-selected);
1699
+ color: var(--tl-color-selected);
1682
1700
  font-weight: 500;
1683
1701
  text-decoration: none;
1684
1702
  }
@@ -1690,31 +1708,31 @@ it from receiving any pointer events or affecting the cursor. */
1690
1708
 
1691
1709
  .tl-error-boundary__content__error button {
1692
1710
  position: absolute;
1693
- top: var(--space-2);
1694
- right: var(--space-2);
1711
+ top: var(--tl-space-2);
1712
+ right: var(--tl-space-2);
1695
1713
  font-size: 12px;
1696
- padding: var(--space-2) var(--space-3);
1697
- background-color: var(--color-panel);
1698
- border-radius: var(--radius-1);
1714
+ padding: var(--tl-space-2) var(--tl-space-3);
1715
+ background-color: var(--tl-color-panel);
1716
+ border-radius: var(--tl-radius-1);
1699
1717
  }
1700
1718
 
1701
1719
  .tl-error-boundary__content__actions {
1702
1720
  display: flex;
1703
1721
  justify-content: space-between;
1704
- gap: var(--space-4);
1722
+ gap: var(--tl-space-4);
1705
1723
  margin: 0px;
1706
1724
  margin-left: -4px;
1707
1725
  }
1708
1726
  .tl-error-boundary__content__actions__group {
1709
1727
  display: flex;
1710
- gap: var(--space-4);
1728
+ gap: var(--tl-space-4);
1711
1729
  }
1712
1730
  .tl-error-boundary__content .tl-error-boundary__reset {
1713
- color: var(--color-danger);
1731
+ color: var(--tl-color-danger);
1714
1732
  }
1715
1733
  .tl-error-boundary__content .tl-error-boundary__refresh {
1716
- background-color: var(--color-primary);
1717
- color: var(--color-selected-contrast);
1734
+ background-color: var(--tl-color-primary);
1735
+ color: var(--tl-color-selected-contrast);
1718
1736
  }
1719
1737
  .tl-container__focused:not(.tl-container__no-focus-ring)
1720
1738
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1726,7 +1744,7 @@ it from receiving any pointer events or affecting the cursor. */
1726
1744
 
1727
1745
  .tl-hit-test-blocker {
1728
1746
  position: absolute;
1729
- z-index: var(--layer-canvas-blocker);
1747
+ z-index: var(--tl-layer-canvas-blocker);
1730
1748
  inset: 0px;
1731
1749
  width: 100%;
1732
1750
  height: 100%;
@@ -1746,32 +1764,32 @@ it from receiving any pointer events or affecting the cursor. */
1746
1764
 
1747
1765
  .tl-handle__bg:hover {
1748
1766
  cursor: var(--tl-cursor-grab);
1749
- fill: var(--color-selection-fill);
1767
+ fill: var(--tl-color-selection-fill);
1750
1768
  }
1751
1769
 
1752
1770
  .tl-bookmark__link:hover {
1753
- color: var(--color-selected);
1771
+ color: var(--tl-color-selected);
1754
1772
  }
1755
1773
 
1756
1774
  .tl-hyperlink-button:hover {
1757
- color: var(--color-selected);
1775
+ color: var(--tl-color-selected);
1758
1776
  }
1759
1777
 
1760
1778
  .tl-error-boundary__content button:hover {
1761
- background-color: var(--color-low);
1779
+ background-color: var(--tl-color-low);
1762
1780
  }
1763
1781
  .tl-error-boundary__content a:hover {
1764
- color: var(--color-text-1);
1782
+ color: var(--tl-color-text-1);
1765
1783
  }
1766
1784
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1767
- background-color: var(--color-primary);
1785
+ background-color: var(--tl-color-primary);
1768
1786
  opacity: 0.9;
1769
1787
  }
1770
1788
 
1771
1789
  /* These three rules help preserve clicking into specific points in text areas *while*
1772
1790
  * already in edit mode when jumping from shape to shape. */
1773
1791
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1774
- z-index: var(--layer-text-editor);
1792
+ z-index: var(--tl-layer-text-editor);
1775
1793
  pointer-events: all;
1776
1794
  }
1777
1795
  }
@@ -1779,15 +1797,15 @@ it from receiving any pointer events or affecting the cursor. */
1779
1797
  /* @tldraw/ui */
1780
1798
 
1781
1799
  .tl-container {
1782
- --layer-above: 1;
1783
- --layer-focused-input: 10;
1784
- --layer-menu-click-capture: 250;
1785
- --layer-panels: 300;
1786
- --layer-menus: 400;
1787
- --layer-toasts: 650;
1788
- --layer-cursor: 700;
1789
- --layer-header-footer: 999;
1790
- --layer-following-indicator: 1000;
1800
+ --tl-layer-above: 1;
1801
+ --tl-layer-focused-input: 10;
1802
+ --tl-layer-menu-click-capture: 250;
1803
+ --tl-layer-panels: 300;
1804
+ --tl-layer-menus: 400;
1805
+ --tl-layer-toasts: 650;
1806
+ --tl-layer-cursor: 700;
1807
+ --tl-layer-header-footer: 999;
1808
+ --tl-layer-following-indicator: 1000;
1791
1809
  }
1792
1810
 
1793
1811
  /* Button */
@@ -1811,23 +1829,23 @@ it from receiving any pointer events or affecting the cursor. */
1811
1829
  text-rendering: optimizeLegibility;
1812
1830
  font-size: 12px;
1813
1831
  gap: 0px;
1814
- color: var(--color-text-1);
1832
+ color: var(--tl-color-text-1);
1815
1833
  z-index: 0;
1816
1834
  }
1817
1835
 
1818
1836
  .tlui-button:disabled {
1819
- color: var(--color-text-3);
1837
+ color: var(--tl-color-text-3);
1820
1838
  text-shadow: none;
1821
1839
  cursor: default;
1822
1840
  }
1823
1841
 
1824
1842
  .tlui-button:disabled .tlui-kbd {
1825
- color: var(--color-text-3);
1843
+ color: var(--tl-color-text-3);
1826
1844
  }
1827
1845
 
1828
1846
  .tlui-button > * {
1829
1847
  position: relative;
1830
- z-index: var(--layer-above);
1848
+ z-index: var(--tl-layer-above);
1831
1849
  }
1832
1850
 
1833
1851
  .tlui-button__label {
@@ -1843,7 +1861,7 @@ it from receiving any pointer events or affecting the cursor. */
1843
1861
  */
1844
1862
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button:focus-visible {
1845
1863
  border-radius: 10px;
1846
- outline: 2px solid var(--color-focus);
1864
+ outline: 2px solid var(--tl-color-focus);
1847
1865
  outline-offset: -5px;
1848
1866
  }
1849
1867
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button__tool:focus-visible {
@@ -1851,7 +1869,7 @@ it from receiving any pointer events or affecting the cursor. */
1851
1869
  }
1852
1870
  .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
1853
1871
  border-radius: 10px;
1854
- outline: 2px solid var(--color-focus);
1872
+ outline: 2px solid var(--tl-color-focus);
1855
1873
  outline-offset: -5px;
1856
1874
  }
1857
1875
 
@@ -1860,8 +1878,8 @@ it from receiving any pointer events or affecting the cursor. */
1860
1878
  content: '';
1861
1879
  position: absolute;
1862
1880
  inset: 4px;
1863
- border-radius: var(--radius-2);
1864
- background: var(--color-muted-2);
1881
+ border-radius: var(--tl-radius-2);
1882
+ background: var(--tl-color-muted-2);
1865
1883
  opacity: 0;
1866
1884
  }
1867
1885
 
@@ -1871,18 +1889,18 @@ it from receiving any pointer events or affecting the cursor. */
1871
1889
 
1872
1890
  .tlui-button[data-isactive='true']::after,
1873
1891
  .tlui-button[data-isactive='true']:not(:disabled, :focus-visible):active:after {
1874
- background: var(--color-hint);
1892
+ background: var(--tl-color-hint);
1875
1893
  opacity: 1;
1876
1894
  }
1877
1895
 
1878
- .tlui-button[aria-expanded='true'][data-direction='left']::after {
1879
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1896
+ .tlui-button[aria-expanded='true'][data-direction='left'] {
1897
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1880
1898
  opacity: 1;
1881
1899
  }
1882
1900
 
1883
1901
  @media (hover: hover) {
1884
1902
  .tlui-button[aria-expanded='true'][data-direction='left']:not(:hover)::after {
1885
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1903
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1886
1904
  opacity: 1;
1887
1905
  }
1888
1906
 
@@ -1896,18 +1914,18 @@ it from receiving any pointer events or affecting the cursor. */
1896
1914
  }
1897
1915
 
1898
1916
  .tlui-button__icon + .tlui-button__label {
1899
- margin-left: var(--space-2);
1917
+ margin-left: var(--tl-space-2);
1900
1918
  }
1901
1919
 
1902
1920
  /* Low button */
1903
1921
 
1904
1922
  .tlui-button__low {
1905
- border-radius: var(--radius-3);
1906
- background-color: var(--color-low);
1923
+ border-radius: var(--tl-radius-3);
1924
+ background-color: var(--tl-color-low);
1907
1925
  }
1908
1926
 
1909
1927
  .tlui-button__low::after {
1910
- background-color: var(--color-muted-2);
1928
+ background-color: var(--tl-color-muted-2);
1911
1929
  opacity: 0;
1912
1930
  }
1913
1931
 
@@ -1920,31 +1938,25 @@ it from receiving any pointer events or affecting the cursor. */
1920
1938
  /* Primary / danger buttons */
1921
1939
 
1922
1940
  .tlui-button__primary {
1923
- color: var(--color-primary);
1941
+ color: var(--tl-color-primary);
1924
1942
  }
1925
1943
 
1926
1944
  .tlui-button__danger {
1927
- color: var(--color-danger);
1945
+ color: var(--tl-color-danger);
1928
1946
  text-shadow: none;
1929
1947
  }
1930
1948
 
1931
1949
  @media (hover: hover) {
1932
1950
  .tlui-button__primary:not(:disabled, :focus-visible):hover {
1933
- color: var(--color-primary);
1951
+ color: var(--tl-color-primary);
1934
1952
  }
1935
1953
 
1936
1954
  .tlui-button__danger:not(:disabled, :focus-visible):hover {
1937
- color: var(--color-danger);
1955
+ color: var(--tl-color-danger);
1938
1956
  text-shadow: none;
1939
1957
  }
1940
1958
  }
1941
1959
 
1942
- /* Panel button */
1943
-
1944
- .tlui-button__panel {
1945
- position: relative;
1946
- }
1947
-
1948
1960
  /* Menu button */
1949
1961
 
1950
1962
  .tlui-button__menu {
@@ -1952,12 +1964,12 @@ it from receiving any pointer events or affecting the cursor. */
1952
1964
  min-height: 40px;
1953
1965
  width: 100%;
1954
1966
  gap: 8px;
1955
- margin: -4px 0px;
1967
+ margin-top: -4px;
1956
1968
  }
1957
1969
 
1958
1970
  .tlui-button__menu::after {
1959
1971
  inset: 4px;
1960
- border-radius: var(--radius-2);
1972
+ border-radius: var(--tl-radius-2);
1961
1973
  }
1962
1974
 
1963
1975
  .tlui-button__menu > .tlui-icon + .tlui-button__label {
@@ -1985,18 +1997,26 @@ it from receiving any pointer events or affecting the cursor. */
1985
1997
 
1986
1998
  /* Tool lock button */
1987
1999
 
1988
- .tlui-toolbar__lock-button {
2000
+ .tlui-main-toolbar__lock-button {
1989
2001
  position: absolute;
1990
- top: 4px;
1991
- right: 0px;
1992
2002
  pointer-events: all;
1993
2003
  height: 40px;
1994
2004
  width: 40px;
2005
+ border-radius: var(--tl-radius-2);
2006
+ }
2007
+
2008
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__lock-button {
2009
+ top: 4px;
2010
+ right: 0px;
1995
2011
  min-width: 0px;
1996
- border-radius: var(--radius-2);
1997
2012
  }
1998
2013
 
1999
- .tlui-toolbar__lock-button::after {
2014
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__lock-button {
2015
+ bottom: 0px;
2016
+ min-height: 0px;
2017
+ }
2018
+
2019
+ .tlui-main-toolbar__lock-button::after {
2000
2020
  top: 4px;
2001
2021
  left: 8px;
2002
2022
  inset: 4px;
@@ -2008,16 +2028,6 @@ it from receiving any pointer events or affecting the cursor. */
2008
2028
  position: relative;
2009
2029
  height: 48px;
2010
2030
  width: 48px;
2011
- margin-left: -2px;
2012
- margin-right: -2px;
2013
- }
2014
-
2015
- .tlui-button__tool:nth-of-type(1) {
2016
- margin-left: 0px;
2017
- }
2018
-
2019
- .tlui-button__tool:nth-last-of-type(1) {
2020
- margin-right: 0px;
2021
2031
  }
2022
2032
 
2023
2033
  .tlui-button__tool::after {
@@ -2026,69 +2036,64 @@ it from receiving any pointer events or affecting the cursor. */
2026
2036
  }
2027
2037
 
2028
2038
  .tlui-button__tool[aria-pressed='true'] {
2029
- color: var(--color-selected-contrast);
2039
+ color: var(--tl-color-selected-contrast);
2030
2040
  }
2031
2041
 
2032
2042
  .tlui-button__tool[aria-pressed='true']:not(:disabled, :focus-visible):active {
2033
- color: var(--color-selected-contrast);
2043
+ color: var(--tl-color-selected-contrast);
2034
2044
  }
2035
2045
 
2036
2046
  .tlui-button__tool[aria-pressed='true']:not(:disabled)::after {
2037
- background: var(--color-selected);
2047
+ background: var(--tl-color-selected);
2038
2048
  opacity: 1;
2039
2049
  }
2040
2050
 
2041
- .tlui-layout__mobile .tlui-button__tool {
2051
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool {
2042
2052
  height: 48px;
2043
2053
  width: 43px;
2044
2054
  }
2045
2055
 
2046
- .tlui-layout__mobile .tlui-button__tool > .tlui-icon {
2056
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool > .tlui-icon {
2047
2057
  height: 16px;
2048
2058
  width: 16px;
2049
2059
  }
2050
2060
 
2051
- /* Button Row */
2061
+ /* Row layout */
2052
2062
 
2053
- .tlui-buttons__horizontal {
2063
+ .tlui-row {
2054
2064
  display: flex;
2055
2065
  flex-direction: row;
2066
+ padding: 0 2px;
2056
2067
  }
2057
- .tlui-buttons__horizontal > * {
2068
+ .tlui-row > * {
2058
2069
  margin-left: -2px;
2059
2070
  margin-right: -2px;
2060
2071
  }
2061
- .tlui-buttons__horizontal > *:nth-child(1) {
2062
- margin-left: 0px;
2072
+
2073
+ /* Column layout */
2074
+
2075
+ .tlui-column {
2076
+ display: flex;
2077
+ flex-direction: column;
2078
+ padding: 2px 0;
2063
2079
  }
2064
- .tlui-buttons__horizontal > *:nth-last-child(1) {
2065
- margin-right: 0px;
2080
+ .tlui-column > * {
2081
+ margin-top: -2px;
2082
+ margin-bottom: -2px;
2066
2083
  }
2067
2084
 
2068
- /* Button Grid */
2085
+ /* Grid layout */
2069
2086
 
2070
- .tlui-buttons__grid {
2087
+ .tlui-grid {
2071
2088
  display: grid;
2072
- grid-template-columns: repeat(4, auto);
2089
+ grid-template-columns: repeat(4, 1fr);
2073
2090
  grid-auto-flow: row;
2074
2091
  overflow: hidden;
2092
+ padding: 2px;
2075
2093
  }
2076
- .tlui-buttons__grid > .tlui-button {
2094
+ .tlui-grid > * {
2077
2095
  margin: -2px;
2078
2096
  }
2079
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n),
2080
- .tlui-buttons__vertical-align > .tlui-button:nth-of-type(3n) {
2081
- margin-right: 0px;
2082
- }
2083
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n - 3) {
2084
- margin-left: 0px;
2085
- }
2086
- .tlui-buttons__grid > .tlui-button:nth-of-type(-n + 4) {
2087
- margin-top: 0px;
2088
- }
2089
- .tlui-buttons__grid > .tlui-button:nth-last-of-type(-n + 4) {
2090
- margin-bottom: 0px;
2091
- }
2092
2097
 
2093
2098
  /* Zoom button */
2094
2099
 
@@ -2112,9 +2117,9 @@ it from receiving any pointer events or affecting the cursor. */
2112
2117
  pointer-events: none;
2113
2118
  user-select: none;
2114
2119
  contain: strict;
2115
- z-index: var(--layer-panels);
2120
+ z-index: var(--tl-layer-panels);
2116
2121
  transform: translate3d(0, 0, 0);
2117
- --sab: env(safe-area-inset-bottom);
2122
+ --tl-sab: env(safe-area-inset-bottom);
2118
2123
  font-weight: 500;
2119
2124
  line-height: 1.6;
2120
2125
  -webkit-font-smoothing: antialiased;
@@ -2167,11 +2172,11 @@ it from receiving any pointer events or affecting the cursor. */
2167
2172
  justify-content: flex-start;
2168
2173
  align-items: flex-start;
2169
2174
  width: min-content;
2170
- gap: var(--space-3);
2171
- margin: var(--space-2) var(--space-3);
2175
+ gap: var(--tl-space-3);
2176
+ margin: var(--tl-space-2) var(--tl-space-3);
2172
2177
  white-space: nowrap;
2173
2178
  pointer-events: none;
2174
- z-index: var(--layer-panels);
2179
+ z-index: var(--tl-layer-panels);
2175
2180
  }
2176
2181
 
2177
2182
  /* ---------------------- Icon ---------------------- */
@@ -2199,7 +2204,7 @@ it from receiving any pointer events or affecting the cursor. */
2199
2204
 
2200
2205
  .tlui-slider__container {
2201
2206
  width: 100%;
2202
- padding: 0px var(--space-4);
2207
+ padding: 0px var(--tl-space-4);
2203
2208
  }
2204
2209
 
2205
2210
  .tlui-slider {
@@ -2225,7 +2230,7 @@ it from receiving any pointer events or affecting the cursor. */
2225
2230
  content: '';
2226
2231
  height: 3px;
2227
2232
  width: 100%;
2228
- background-color: var(--color-muted-1);
2233
+ background-color: var(--tl-color-muted-1);
2229
2234
  border-radius: 14px;
2230
2235
  }
2231
2236
 
@@ -2234,7 +2239,7 @@ it from receiving any pointer events or affecting the cursor. */
2234
2239
  top: calc(50% - 2px);
2235
2240
  left: 0px;
2236
2241
  height: 3px;
2237
- background-color: var(--color-selected);
2242
+ background-color: var(--tl-color-selected);
2238
2243
  border-radius: 14px;
2239
2244
  }
2240
2245
 
@@ -2246,16 +2251,16 @@ it from receiving any pointer events or affecting the cursor. */
2246
2251
  height: 18px;
2247
2252
  position: relative;
2248
2253
  top: -1px;
2249
- background-color: var(--color-panel);
2254
+ background-color: var(--tl-color-panel);
2250
2255
  border-radius: 999px;
2251
- box-shadow: inset 0px 0px 0px 2px var(--color-text-1);
2256
+ box-shadow: inset 0px 0px 0px 2px var(--tl-color-text-1);
2252
2257
  }
2253
2258
 
2254
2259
  .tlui-slider__thumb:active {
2255
2260
  cursor: grabbing;
2256
2261
  box-shadow:
2257
- inset 0px 0px 0px 2px var(--color-text-1),
2258
- var(--shadow-1);
2262
+ inset 0px 0px 0px 2px var(--tl-color-text-1),
2263
+ var(--tl-shadow-1);
2259
2264
  }
2260
2265
 
2261
2266
  /* ---------------------- Input --------------------- */
@@ -2264,7 +2269,7 @@ it from receiving any pointer events or affecting the cursor. */
2264
2269
  background: none;
2265
2270
  margin: 0px;
2266
2271
  position: relative;
2267
- z-index: var(--layer-above);
2272
+ z-index: var(--tl-layer-above);
2268
2273
  height: 40px;
2269
2274
  max-height: 40px;
2270
2275
  display: flex;
@@ -2273,8 +2278,8 @@ it from receiving any pointer events or affecting the cursor. */
2273
2278
  font-family: inherit;
2274
2279
  font-size: 12px;
2275
2280
  font-weight: inherit;
2276
- color: var(--color-text-1);
2277
- padding: var(--space-4);
2281
+ color: var(--tl-color-text-1);
2282
+ padding: var(--tl-space-4);
2278
2283
  padding-left: 0px;
2279
2284
  border: none;
2280
2285
  outline: none;
@@ -2285,13 +2290,17 @@ it from receiving any pointer events or affecting the cursor. */
2285
2290
  -webkit-user-select: auto !important;
2286
2291
  }
2287
2292
 
2293
+ .tlui-input::placeholder {
2294
+ color: var(--tl-color-text-3);
2295
+ }
2296
+
2288
2297
  .tlui-input__wrapper {
2289
2298
  width: 100%;
2290
2299
  height: 44px;
2291
2300
  display: flex;
2292
2301
  align-items: center;
2293
- gap: var(--space-4);
2294
- color: var(--color-text);
2302
+ gap: var(--tl-space-4);
2303
+ color: var(--tl-color-text);
2295
2304
  }
2296
2305
 
2297
2306
  .tlui-input__wrapper > .tlui-icon {
@@ -2323,7 +2332,7 @@ it from receiving any pointer events or affecting the cursor. */
2323
2332
  grid-auto-columns: minmax(1em, auto);
2324
2333
  align-self: bottom;
2325
2334
  color: currentColor;
2326
- margin-left: var(--space-4);
2335
+ margin-left: var(--tl-space-4);
2327
2336
  }
2328
2337
 
2329
2338
  .tlui-kbd > span {
@@ -2340,13 +2349,13 @@ it from receiving any pointer events or affecting the cursor. */
2340
2349
  }
2341
2350
 
2342
2351
  .tlui-kbd:not(:last-child) {
2343
- margin-right: var(--space-2);
2352
+ margin-right: var(--tl-space-2);
2344
2353
  }
2345
2354
 
2346
2355
  /* Focus Mode Button */
2347
2356
 
2348
2357
  .tlui-focus-button {
2349
- z-index: var(--layer-panels);
2358
+ z-index: var(--tl-layer-panels);
2350
2359
  pointer-events: all;
2351
2360
  }
2352
2361
 
@@ -2357,16 +2366,22 @@ it from receiving any pointer events or affecting the cursor. */
2357
2366
  }
2358
2367
 
2359
2368
  .tlui-menu {
2360
- z-index: var(--layer-menus);
2369
+ z-index: var(--tl-layer-menus);
2361
2370
  height: fit-content;
2362
2371
  width: fit-content;
2363
- border-radius: var(--radius-3);
2372
+ border-radius: var(--tl-radius-3);
2364
2373
  pointer-events: all;
2365
2374
  touch-action: auto;
2366
2375
  overflow-y: auto;
2367
2376
  overscroll-behavior: none;
2368
- background-color: var(--color-panel);
2369
- box-shadow: var(--shadow-3);
2377
+ background-color: var(--tl-color-panel);
2378
+ box-shadow: var(--tl-shadow-3);
2379
+ }
2380
+
2381
+ @media (max-height: 600px) {
2382
+ .tlui-menu {
2383
+ max-height: 70vh;
2384
+ }
2370
2385
  }
2371
2386
 
2372
2387
  .tlui-menu::-webkit-scrollbar {
@@ -2384,7 +2399,7 @@ it from receiving any pointer events or affecting the cursor. */
2384
2399
  }
2385
2400
 
2386
2401
  .tlui-menu__group {
2387
- border-bottom: 1px solid var(--color-divider);
2402
+ border-bottom: 1px solid var(--tl-color-divider);
2388
2403
  }
2389
2404
  .tlui-menu__group:nth-last-of-type(1) {
2390
2405
  border-bottom: none;
@@ -2394,23 +2409,23 @@ it from receiving any pointer events or affecting the cursor. */
2394
2409
 
2395
2410
  .tlui-menu__submenu__trigger[data-state='open']::after {
2396
2411
  opacity: 1;
2397
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2412
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2398
2413
  }
2399
2414
 
2400
2415
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
2401
2416
  opacity: 1;
2402
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2417
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2403
2418
  }
2404
2419
 
2405
2420
  @media (hover: hover) {
2406
2421
  .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
2407
2422
  opacity: 1;
2408
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2423
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2409
2424
  }
2410
2425
 
2411
2426
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
2412
2427
  opacity: 1;
2413
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2428
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2414
2429
  }
2415
2430
  }
2416
2431
 
@@ -2435,7 +2450,7 @@ it from receiving any pointer events or affecting the cursor. */
2435
2450
  .tlui-menu-click-capture {
2436
2451
  position: fixed;
2437
2452
  inset: 0;
2438
- z-index: var(--layer-menu-click-capture);
2453
+ z-index: var(--tl-layer-menu-click-capture);
2439
2454
  }
2440
2455
 
2441
2456
  /* --------------------- Popover -------------------- */
@@ -2451,10 +2466,10 @@ it from receiving any pointer events or affecting the cursor. */
2451
2466
  max-height: calc(var(--radix-popover-content-available-height) - 8px);
2452
2467
  margin: 0px;
2453
2468
  border: none;
2454
- border-radius: var(--radius-3);
2455
- background-color: var(--color-panel);
2456
- box-shadow: var(--shadow-3);
2457
- z-index: var(--layer-menus);
2469
+ border-radius: var(--tl-radius-3);
2470
+ background-color: var(--tl-color-panel);
2471
+ box-shadow: var(--tl-shadow-3);
2472
+ z-index: var(--tl-layer-menus);
2458
2473
  overflow: hidden;
2459
2474
  overflow-y: auto;
2460
2475
  touch-action: auto;
@@ -2467,22 +2482,22 @@ it from receiving any pointer events or affecting the cursor. */
2467
2482
 
2468
2483
  .tlui-menu-zone {
2469
2484
  position: relative;
2470
- z-index: var(--layer-panels);
2485
+ z-index: var(--tl-layer-panels);
2471
2486
  width: fit-content;
2472
- border-right: 2px solid var(--color-background);
2473
- border-bottom: 2px solid var(--color-background);
2474
- border-bottom-right-radius: var(--radius-4);
2475
- background-color: var(--color-low);
2487
+ border-right: 2px solid var(--tl-color-background);
2488
+ border-bottom: 2px solid var(--tl-color-background);
2489
+ border-bottom-right-radius: var(--tl-radius-4);
2490
+ background-color: var(--tl-color-low);
2476
2491
  }
2477
2492
 
2478
2493
  .tlui-menu-zone *[data-state='open']::after {
2479
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2494
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2480
2495
  opacity: 1;
2481
2496
  }
2482
2497
 
2483
2498
  @media (hover: hover) {
2484
2499
  .tlui-menu-zone *[data-state='open']:not(:hover)::after {
2485
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2500
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2486
2501
  opacity: 1;
2487
2502
  }
2488
2503
  }
@@ -2508,8 +2523,8 @@ it from receiving any pointer events or affecting the cursor. */
2508
2523
  align-items: center;
2509
2524
  width: 100%;
2510
2525
  height: 40px;
2511
- padding-left: var(--space-4);
2512
- border-bottom: 1px solid var(--color-divider);
2526
+ padding-left: var(--tl-space-4);
2527
+ border-bottom: 1px solid var(--tl-color-divider);
2513
2528
  }
2514
2529
 
2515
2530
  .tlui-page-menu__header > .tlui-button:nth-of-type(1) {
@@ -2517,7 +2532,7 @@ it from receiving any pointer events or affecting the cursor. */
2517
2532
  }
2518
2533
 
2519
2534
  .tlui-page-menu__header__title {
2520
- color: var(--color-text);
2535
+ color: var(--tl-color-text);
2521
2536
  font-size: 12px;
2522
2537
  flex-grow: 2;
2523
2538
  }
@@ -2602,7 +2617,7 @@ it from receiving any pointer events or affecting the cursor. */
2602
2617
  display: inline-flex;
2603
2618
  align-items: center;
2604
2619
  justify-content: center;
2605
- color: var(--color-text);
2620
+ color: var(--tl-color-text);
2606
2621
  }
2607
2622
 
2608
2623
  .tlui-page_menu__item__sortable {
@@ -2615,7 +2630,7 @@ it from receiving any pointer events or affecting the cursor. */
2615
2630
  flex-direction: row;
2616
2631
  align-items: center;
2617
2632
  overflow: hidden;
2618
- z-index: var(--layer-above);
2633
+ z-index: var(--tl-layer-above);
2619
2634
  }
2620
2635
 
2621
2636
  .tlui-page_menu__item__sortable__title {
@@ -2627,7 +2642,7 @@ it from receiving any pointer events or affecting the cursor. */
2627
2642
  }
2628
2643
 
2629
2644
  .tlui-page_menu__item__sortable:focus-visible {
2630
- z-index: var(--layer-focused-input);
2645
+ z-index: var(--tl-layer-focused-input);
2631
2646
  }
2632
2647
 
2633
2648
  .tlui-page_menu__item__sortable__handle {
@@ -2636,7 +2651,7 @@ it from receiving any pointer events or affecting the cursor. */
2636
2651
  min-width: 0px;
2637
2652
  height: 40px;
2638
2653
  cursor: grab;
2639
- color: var(--color-text-3);
2654
+ color: var(--tl-color-text-3);
2640
2655
  flex-shrink: 0;
2641
2656
  margin-right: -9px;
2642
2657
  }
@@ -2678,13 +2693,13 @@ it from receiving any pointer events or affecting the cursor. */
2678
2693
  }
2679
2694
 
2680
2695
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
2681
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2696
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2682
2697
  opacity: 1;
2683
2698
  }
2684
2699
 
2685
2700
  @media (hover: hover) {
2686
2701
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']:not(:hover)::after {
2687
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2702
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2688
2703
  opacity: 1;
2689
2704
  }
2690
2705
  }
@@ -2720,7 +2735,7 @@ it from receiving any pointer events or affecting the cursor. */
2720
2735
  top: 48px;
2721
2736
  left: -9999px;
2722
2737
  padding: 8px 16px;
2723
- z-index: var(--layer-toasts);
2738
+ z-index: var(--tl-layer-toasts);
2724
2739
  }
2725
2740
 
2726
2741
  .tl-skip-to-main-content:focus {
@@ -2732,11 +2747,11 @@ it from receiving any pointer events or affecting the cursor. */
2732
2747
  .tlui-offline-indicator {
2733
2748
  display: flex;
2734
2749
  flex-direction: row;
2735
- gap: var(--space-3);
2736
- color: var(--color-text);
2737
- background-color: var(--color-low);
2738
- border: 3px solid var(--color-background);
2739
- padding: 0px var(--space-5);
2750
+ gap: var(--tl-space-3);
2751
+ color: var(--tl-color-text);
2752
+ background-color: var(--tl-color-low);
2753
+ border: 3px solid var(--tl-color-background);
2754
+ padding: 0px var(--tl-space-5);
2740
2755
  height: 42px;
2741
2756
  align-items: center;
2742
2757
  justify-content: center;
@@ -2751,10 +2766,10 @@ it from receiving any pointer events or affecting the cursor. */
2751
2766
  /* ------------------- Style panel ------------------ */
2752
2767
 
2753
2768
  .tlui-style-panel__wrapper {
2754
- box-shadow: var(--shadow-2);
2755
- border-radius: var(--radius-3);
2769
+ box-shadow: var(--tl-shadow-2);
2770
+ border-radius: var(--tl-radius-3);
2756
2771
  pointer-events: all;
2757
- background-color: var(--color-panel);
2772
+ background-color: var(--tl-color-panel);
2758
2773
  height: fit-content;
2759
2774
  max-height: 100%;
2760
2775
  margin: 8px;
@@ -2763,7 +2778,7 @@ it from receiving any pointer events or affecting the cursor. */
2763
2778
  overscroll-behavior: none;
2764
2779
  overflow-y: auto;
2765
2780
  overflow-x: hidden;
2766
- color: var(--color-text);
2781
+ color: var(--tl-color-text);
2767
2782
  }
2768
2783
  /* if the style panel is the only child (ie no share menu), increase the margin */
2769
2784
  .tlui-style-panel__wrapper:only-child {
@@ -2772,12 +2787,18 @@ it from receiving any pointer events or affecting the cursor. */
2772
2787
 
2773
2788
  .tlui-style-panel {
2774
2789
  position: relative;
2775
- z-index: var(--layer-panels);
2790
+ z-index: var(--tl-layer-panels);
2776
2791
  pointer-events: all;
2777
2792
  width: 148px;
2778
2793
  max-width: 148px;
2779
2794
  }
2780
2795
 
2796
+ .tlui-style-panel[data-enhanced-a11y-mode='true'] .tlui-button[data-isactive='true'] {
2797
+ border-radius: 10px;
2798
+ outline: 2px solid var(--tl-color-text);
2799
+ outline-offset: -5px;
2800
+ }
2801
+
2781
2802
  .tlui-style-panel::-webkit-scrollbar {
2782
2803
  display: none;
2783
2804
  }
@@ -2792,33 +2813,56 @@ it from receiving any pointer events or affecting the cursor. */
2792
2813
  flex-direction: column;
2793
2814
  }
2794
2815
 
2795
- .tlui-style-panel__section:nth-of-type(n + 2):not(:last-child) {
2796
- border-bottom: 1px solid var(--color-divider);
2816
+ /*
2817
+ add a border to the bottom of all but the last section. we have to handle empty sections too, which
2818
+ are hidden and shouldn't be counted
2819
+ */
2820
+ .tlui-style-panel__section:not(:nth-last-child(-n + 1 of .tlui-style-panel__section:not(:empty))) {
2821
+ border-bottom: 1px solid var(--tl-color-divider);
2822
+ }
2823
+ /*
2824
+ if a section ends with a slider and we're adding a border, we need some extra space for visual
2825
+ balance. we need to handle empty sections as above. is this the most complex css selector in all of
2826
+ tldraw? probably.
2827
+ */
2828
+ .tlui-style-panel__section:has(.tlui-slider__container:last-child):not(
2829
+ :nth-last-child(-n + 1 of .tlui-style-panel__section:not(:empty))
2830
+ ) {
2831
+ margin-bottom: 7px;
2797
2832
  }
2798
2833
 
2799
2834
  .tlui-style-panel__section:empty {
2800
2835
  display: none;
2801
2836
  }
2802
2837
 
2838
+ /*
2839
+ * This is used in a couple places, like Align and Vertical Align.
2840
+ * It's because we have a toolbar with a Toggle Group but then an adjacent button
2841
+ * next to it that opens a popup.
2842
+ */
2843
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) {
2844
+ flex-wrap: wrap;
2845
+ }
2846
+
2847
+ .tlui-style-panel__section .tlui-toolbar:has(.tlui-toolbar) .tlui-style-panel__subheading {
2848
+ margin-left: -2px;
2849
+ }
2850
+
2803
2851
  .tlui-style-panel__section__common:not(:only-child) {
2804
2852
  margin-bottom: 7px;
2805
- border-bottom: 1px solid var(--color-divider);
2853
+ border-bottom: 1px solid var(--tl-color-divider);
2806
2854
  }
2807
2855
 
2808
- .tlui-style-panel__row {
2809
- display: flex;
2810
- }
2811
- /* Only really used for the alignment picker */
2812
- .tlui-style-panel__row__extra-button {
2813
- margin-left: -2px;
2856
+ .tlui-style-panel__dropdown-picker:only-child {
2857
+ flex: 1;
2814
2858
  }
2815
2859
 
2816
2860
  .tlui-style-panel__double-select-picker {
2817
2861
  display: flex;
2818
2862
  grid-template-columns: 1fr auto;
2819
2863
  align-items: center;
2820
- padding-left: var(--space-4);
2821
- color: var(--color-text-1);
2864
+ padding-left: var(--tl-space-4);
2865
+ color: var(--tl-color-text-1);
2822
2866
  font-size: 12px;
2823
2867
  }
2824
2868
 
@@ -2832,25 +2876,48 @@ it from receiving any pointer events or affecting the cursor. */
2832
2876
 
2833
2877
  .tlui-style-panel .tlui-button[data-state='open']::after {
2834
2878
  opacity: 1;
2835
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2879
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2836
2880
  }
2837
2881
 
2838
2882
  @media (hover: hover) {
2883
+ .tlui-style-panel .tlui-button[aria-expanded='true'] {
2884
+ background: none;
2885
+ }
2839
2886
  .tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
2840
2887
  opacity: 1;
2841
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2888
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2842
2889
  }
2843
2890
  }
2844
2891
 
2892
+ /* Accessibility subheadings */
2893
+
2894
+ .tlui-style-panel__section .tlui-style-panel__subheading,
2895
+ .tlui-style-panel__section__common .tlui-style-panel__subheading,
2896
+ .tlui-style-panel__subheading + .tlui-slider__container {
2897
+ margin: 0;
2898
+ padding: var(--tl-space-2) var(--tl-space-3) 0px var(--tl-space-4);
2899
+ font-size: 12px;
2900
+ font-weight: inherit;
2901
+ line-height: inherit;
2902
+ }
2903
+
2904
+ .tlui-style-panel .tlui-style-panel__subheading:nth-of-type(1) {
2905
+ padding-top: var(--tl-space-3);
2906
+ }
2907
+
2908
+ .tlui-style-panel__subheading + .tlui-slider__container {
2909
+ padding-top: 0px;
2910
+ }
2911
+
2845
2912
  /* --------------------- Bottom --------------------- */
2846
2913
 
2847
2914
  .tlui-layout__bottom {
2848
2915
  grid-row: 2;
2916
+ width: 100%;
2849
2917
  }
2850
2918
 
2851
2919
  .tlui-layout__bottom__main {
2852
2920
  width: 100%;
2853
- position: relative;
2854
2921
  display: flex;
2855
2922
  align-items: flex-end;
2856
2923
  justify-content: center;
@@ -2862,11 +2929,10 @@ it from receiving any pointer events or affecting the cursor. */
2862
2929
  display: flex;
2863
2930
  width: min-content;
2864
2931
  flex-direction: column;
2865
- z-index: var(--layer-panels);
2932
+ z-index: var(--tl-layer-panels);
2866
2933
  pointer-events: all;
2867
2934
  position: absolute;
2868
2935
  left: 0px;
2869
- bottom: 0px;
2870
2936
  }
2871
2937
 
2872
2938
  .tlui-navigation-panel::before {
@@ -2876,10 +2942,10 @@ it from receiving any pointer events or affecting the cursor. */
2876
2942
  z-index: -1;
2877
2943
  inset: -2px -2px 0px 0px;
2878
2944
  border-radius: 0;
2879
- border-top: 2px solid var(--color-background);
2880
- border-right: 2px solid var(--color-background);
2881
- border-top-right-radius: var(--radius-4);
2882
- background-color: var(--color-low);
2945
+ border-top: 2px solid var(--tl-color-background);
2946
+ border-right: 2px solid var(--tl-color-background);
2947
+ border-top-right-radius: var(--tl-radius-4);
2948
+ background-color: var(--tl-color-low);
2883
2949
  }
2884
2950
 
2885
2951
  .tlui-navigation-panel[data-a11y='true']::before {
@@ -2893,7 +2959,7 @@ it from receiving any pointer events or affecting the cursor. */
2893
2959
  height: 96px;
2894
2960
  min-height: 96px;
2895
2961
  overflow: hidden;
2896
- padding: var(--space-3);
2962
+ padding: var(--tl-space-3);
2897
2963
  padding-top: 0px;
2898
2964
  }
2899
2965
 
@@ -2906,114 +2972,220 @@ it from receiving any pointer events or affecting the cursor. */
2906
2972
  /* --------------------- Toolbar -------------------- */
2907
2973
 
2908
2974
  /* Wide container */
2909
- .tlui-toolbar {
2975
+ .tlui-main-toolbar {
2910
2976
  grid-column: 1 / span 3;
2911
2977
  grid-row: 1;
2912
2978
  display: flex;
2913
2979
  align-items: center;
2914
2980
  justify-content: center;
2915
2981
  flex-grow: 2;
2916
- padding-bottom: calc(var(--space-3) + var(--sab));
2982
+ }
2983
+
2984
+ .tlui-main-toolbar--horizontal {
2985
+ padding-bottom: calc(var(--tl-space-3) + var(--tl-sab));
2986
+ max-width: 100%;
2987
+ }
2988
+
2989
+ .tlui-main-toolbar--vertical {
2990
+ position: absolute;
2991
+ left: 0;
2992
+ top: 90px; /* height of page menu + 'back to content' button */
2993
+ bottom: 140px; /* height of expanded mini-map */
2994
+ padding-left: calc(var(--tl-space-3) + var(--tl-sab));
2995
+ }
2996
+
2997
+ [data-breakpoints-below*='6'] .tlui-main-toolbar--vertical {
2998
+ bottom: 90px; /* collapsed mini-map, but same as top to keep things looking even */
2917
2999
  }
2918
3000
 
2919
3001
  /* Centered Content */
2920
- .tlui-toolbar__inner {
3002
+ .tlui-main-toolbar__inner {
2921
3003
  position: relative;
2922
3004
  width: fit-content;
2923
3005
  display: flex;
2924
- gap: var(--space-3);
2925
- align-items: flex-end;
3006
+ gap: var(--tl-space-3);
3007
+ align-items: flex-start;
2926
3008
  }
2927
3009
 
2928
- .tlui-toolbar__left {
3010
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__inner {
3011
+ flex-direction: column;
3012
+ }
3013
+
3014
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__left {
2929
3015
  width: fit-content;
2930
3016
  }
3017
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__left {
3018
+ display: flex;
3019
+ height: fit-content;
3020
+ }
2931
3021
 
2932
3022
  /* Row of controls + lock button */
2933
- .tlui-toolbar__extras {
3023
+ .tlui-main-toolbar__extras {
2934
3024
  position: relative;
2935
- z-index: var(--layer-above);
2936
- width: 100%;
3025
+ z-index: var(--tl-layer-above);
2937
3026
  pointer-events: none;
2938
- top: 6px;
2939
- height: 48px;
3027
+ align-self: stretch;
2940
3028
  }
2941
3029
 
2942
- .tlui-toolbar__extras:empty {
3030
+ .tlui-main-toolbar__extras:empty {
2943
3031
  display: none;
2944
3032
  }
2945
3033
 
2946
- .tlui-toolbar__extras__controls {
2947
- display: flex;
3034
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras {
3035
+ height: 48px;
3036
+ top: 6px;
3037
+ }
3038
+
3039
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras {
3040
+ width: 48px;
3041
+ order: 1;
3042
+ }
3043
+
3044
+ .tlui-main-toolbar__extras__controls {
2948
3045
  position: relative;
2949
- flex-direction: row;
2950
- z-index: var(--layer-above);
2951
- background-color: var(--color-low);
2952
- border-top-left-radius: var(--radius-4);
2953
- border-top-right-radius: var(--radius-4);
2954
- border: 2px solid var(--color-background);
3046
+ z-index: var(--tl-layer-above);
3047
+ background-color: var(--tl-color-low);
3048
+ border: 2px solid var(--tl-color-background);
3049
+ pointer-events: all;
3050
+ }
3051
+
3052
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras__controls {
3053
+ border-top-left-radius: var(--tl-radius-4);
3054
+ border-top-right-radius: var(--tl-radius-4);
2955
3055
  margin-left: 8px;
2956
3056
  margin-right: 0px;
2957
- pointer-events: all;
2958
3057
  width: fit-content;
2959
3058
  }
2960
3059
 
2961
- .tlui-toolbar__tools {
2962
- display: flex;
2963
- flex-direction: row;
2964
- align-items: center;
2965
- border-radius: var(--radius-4);
2966
- z-index: var(--layer-panels);
3060
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras__controls {
3061
+ border-top-right-radius: var(--tl-radius-4);
3062
+ border-bottom-right-radius: var(--tl-radius-4);
3063
+ margin-top: 8px;
3064
+ margin-left: -2px;
3065
+ margin-bottom: 0px;
3066
+ width: fit-content;
3067
+ }
3068
+
3069
+ .tlui-main-toolbar__tools {
3070
+ border-radius: var(--tl-radius-4);
3071
+ z-index: var(--tl-layer-panels);
2967
3072
  pointer-events: all;
2968
3073
  position: relative;
2969
- background: var(--color-panel);
2970
- box-shadow: var(--shadow-2);
3074
+ background: var(--tl-color-panel);
3075
+ box-shadow: var(--tl-shadow-2);
2971
3076
  }
2972
- .tlui-toolbar__tools__list {
2973
- display: flex;
2974
- flex-direction: row;
2975
- align-items: center;
3077
+
3078
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
3079
+ align-self: flex-end;
3080
+ }
3081
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__mobile-style-panel {
3082
+ align-self: flex-start;
2976
3083
  }
2977
3084
 
2978
- .tlui-toolbar__overflow {
3085
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
2979
3086
  width: 40px;
3087
+ margin-left: 2px;
3088
+ }
3089
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__overflow {
3090
+ height: 40px;
3091
+ margin-top: 2px;
2980
3092
  }
2981
3093
 
2982
- .tlui-layout__mobile .tlui-toolbar__overflow {
3094
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
2983
3095
  width: 32px;
2984
3096
  padding: 0px;
2985
3097
  }
2986
3098
 
2987
- .tlui-toolbar *[data-state='open']::after {
2988
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
3099
+ .tlui-main-toolbar--horizontal *[data-state='open']::after {
3100
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2989
3101
  opacity: 1;
2990
3102
  }
3103
+ .tlui-main-toolbar--vertical *[data-state='open']::after {
3104
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3105
+ opacity: 1;
3106
+ }
3107
+
3108
+ .tlui-main-toolbar__overflow-content {
3109
+ touch-action: none;
3110
+ }
3111
+
3112
+ .tlui-main-toolbar__tools [data-toolbar-visible='false'],
3113
+ .tlui-main-toolbar__overflow-content [data-toolbar-visible='false'] {
3114
+ display: none;
3115
+ }
3116
+
3117
+ .tlui-main-toolbar__group:empty {
3118
+ display: none;
3119
+ }
3120
+ .tlui-row.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
3121
+ border-right: 1px solid var(--color-divider);
3122
+ margin-right: 2px;
3123
+ }
3124
+ .tlui-column.tlui-main-toolbar__group:not(
3125
+ :nth-last-child(-n + 1 of [data-toolbar-visible='true'])
3126
+ ) {
3127
+ border-bottom: 1px solid var(--color-divider);
3128
+ margin-bottom: 2px;
3129
+ }
3130
+ .tlui-grid.tlui-main-toolbar__group {
3131
+ grid-column: 1 / span 4;
3132
+ }
3133
+ .tlui-grid.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
3134
+ border-bottom: 1px solid var(--color-divider);
3135
+ margin-bottom: 2px;
3136
+ }
2991
3137
 
2992
3138
  @media (hover: hover) {
2993
- .tlui-toolbar *[data-state='open']:not(:hover)::after {
2994
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
3139
+ .tlui-main-toolbar--horizontal *[data-state='open']:not(:hover)::after {
3140
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3141
+ opacity: 1;
3142
+ }
3143
+ .tlui-main-toolbar--vertical *[data-state='open']:not(:hover)::after {
3144
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2995
3145
  opacity: 1;
2996
3146
  }
2997
3147
  }
2998
3148
 
2999
- .tlui-layout__mobile .tlui-toolbar {
3000
- transition: transform 0.15s ease-out 0.05s;
3149
+ /* ------------------- Tooltip -------------------- */
3150
+
3151
+ .tlui-tooltip {
3152
+ font-size: 12px;
3153
+ padding: 2px 8px;
3154
+ border-radius: 4px;
3155
+ background-color: var(--tl-color-tooltip);
3156
+ box-shadow: none;
3157
+ color: var(--tl-color-text-shadow);
3158
+ max-width: 400px;
3159
+ width: fit-content;
3160
+ text-align: center;
3161
+ will-change: transform, opacity;
3162
+ z-index: 2;
3163
+ }
3164
+
3165
+ .tlui-tooltip__arrow {
3166
+ fill: var(--tl-color-tooltip);
3167
+ will-change: opacity;
3168
+ }
3169
+
3170
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip) {
3171
+ z-index: var(--tl-layer-toasts) !important;
3172
+ pointer-events: none;
3001
3173
  }
3002
3174
 
3003
3175
  /* ------------------- Debug panel ------------------ */
3004
3176
 
3005
3177
  .tlui-debug-panel {
3006
- background-color: var(--color-low);
3178
+ background-color: var(--tl-color-low);
3007
3179
  width: 100%;
3008
3180
  display: grid;
3009
3181
  align-items: center;
3010
3182
  grid-template-columns: 1fr auto auto auto;
3011
3183
  justify-content: space-between;
3012
- padding-left: var(--space-4);
3013
- border-top: 1px solid var(--color-background);
3184
+ padding-left: var(--tl-space-4);
3185
+ border-top: 1px solid var(--tl-color-background);
3014
3186
  font-size: 12px;
3015
- color: var(--color-text-1);
3016
- z-index: var(--layer-panels);
3187
+ color: var(--tl-color-text-1);
3188
+ z-index: var(--tl-layer-panels);
3017
3189
  pointer-events: all;
3018
3190
  }
3019
3191
 
@@ -3029,7 +3201,7 @@ it from receiving any pointer events or affecting the cursor. */
3029
3201
 
3030
3202
  .tlui-debug-panel__fps__slow {
3031
3203
  font-weight: bold;
3032
- color: var(--color-danger);
3204
+ color: var(--tl-color-danger);
3033
3205
  }
3034
3206
 
3035
3207
  .tlui-a11y-audit {
@@ -3039,7 +3211,7 @@ it from receiving any pointer events or affecting the cursor. */
3039
3211
  .tlui-a11y-audit th,
3040
3212
  .tlui-a11y-audit td {
3041
3213
  padding: 8px;
3042
- border: 1px solid var(--color-low-border);
3214
+ border: 1px solid var(--tl-color-low-border);
3043
3215
  }
3044
3216
 
3045
3217
  /* --------------------- Toasts --------------------- */
@@ -3052,10 +3224,10 @@ it from receiving any pointer events or affecting the cursor. */
3052
3224
  align-items: flex-end;
3053
3225
  justify-content: flex-end;
3054
3226
  flex-direction: column;
3055
- gap: var(--space-3);
3227
+ gap: var(--tl-space-3);
3056
3228
  pointer-events: none;
3057
- padding: 0px var(--space-3) 64px 0px;
3058
- z-index: var(--layer-toasts);
3229
+ padding: 0px var(--tl-space-3) 64px 0px;
3230
+ z-index: var(--tl-layer-toasts);
3059
3231
  }
3060
3232
 
3061
3233
  .tlui-toast__viewport > * {
@@ -3064,34 +3236,34 @@ it from receiving any pointer events or affecting the cursor. */
3064
3236
 
3065
3237
  .tlui-toast__icon {
3066
3238
  padding-top: 11px;
3067
- padding-left: var(--space-4);
3068
- color: var(--color-text-1);
3239
+ padding-left: var(--tl-space-4);
3240
+ color: var(--tl-color-text-1);
3069
3241
  }
3070
3242
 
3071
3243
  .tlui-toast__container {
3072
3244
  min-width: 200px;
3073
3245
  display: flex;
3074
3246
  flex-direction: row;
3075
- background-color: var(--color-panel);
3076
- box-shadow: var(--shadow-2);
3077
- border-radius: var(--radius-3);
3247
+ background-color: var(--tl-color-panel);
3248
+ box-shadow: var(--tl-shadow-2);
3249
+ border-radius: var(--tl-radius-3);
3078
3250
  font-size: 12px;
3079
3251
  }
3080
3252
 
3081
3253
  .tlui-toast__container[data-severity='success'] .tlui-icon {
3082
- color: var(--color-success);
3254
+ color: var(--tl-color-success);
3083
3255
  }
3084
3256
 
3085
3257
  .tlui-toast__container[data-severity='info'] .tlui-icon {
3086
- color: var(--color-info);
3258
+ color: var(--tl-color-info);
3087
3259
  }
3088
3260
 
3089
3261
  .tlui-toast__container[data-severity='warning'] .tlui-icon {
3090
- color: var(--color-warning);
3262
+ color: var(--tl-color-warning);
3091
3263
  }
3092
3264
 
3093
3265
  .tlui-toast__container[data-severity='error'] .tlui-icon {
3094
- color: var(--color-danger);
3266
+ color: var(--tl-color-danger);
3095
3267
  }
3096
3268
 
3097
3269
  .tlui-toast__main {
@@ -3100,27 +3272,27 @@ it from receiving any pointer events or affecting the cursor. */
3100
3272
  }
3101
3273
 
3102
3274
  .tlui-toast__content {
3103
- padding: var(--space-4);
3275
+ padding: var(--tl-space-4);
3104
3276
  display: flex;
3105
3277
  line-height: 1.4;
3106
3278
  flex-direction: column;
3107
- gap: var(--space-3);
3279
+ gap: var(--tl-space-3);
3108
3280
  }
3109
3281
 
3110
3282
  .tlui-toast__main[data-actions='true'] .tlui-toast__content {
3111
- padding-bottom: var(--space-2);
3283
+ padding-bottom: var(--tl-space-2);
3112
3284
  }
3113
3285
 
3114
3286
  .tlui-toast__title {
3115
3287
  font-weight: bold;
3116
- color: var(--color-text-1);
3288
+ color: var(--tl-color-text-1);
3117
3289
  /* this makes the default toast look better */
3118
3290
  line-height: 16px;
3119
3291
  }
3120
3292
 
3121
3293
  .tlui-toast__description {
3122
- color: var(--color-text-1);
3123
- padding: var(--space-3);
3294
+ color: var(--tl-color-text-1);
3295
+ padding: var(--tl-space-3);
3124
3296
  margin: 0px;
3125
3297
  padding: 0px;
3126
3298
  }
@@ -3172,14 +3344,14 @@ it from receiving any pointer events or affecting the cursor. */
3172
3344
  left: 0px;
3173
3345
  width: 100%;
3174
3346
  height: 100%;
3175
- z-index: var(--layer-canvas-overlays);
3176
- background-color: var(--color-overlay);
3347
+ z-index: var(--tl-layer-canvas-overlays);
3348
+ background-color: var(--tl-color-overlay);
3177
3349
  pointer-events: all;
3178
3350
  animation: tl-fade-in 0.12s ease-out;
3179
3351
  display: grid;
3180
3352
  place-items: center;
3181
3353
  overflow-y: auto;
3182
- padding: 0px var(--space-3);
3354
+ padding: 0px var(--tl-space-3);
3183
3355
  }
3184
3356
 
3185
3357
  .tlui-dialog__content {
@@ -3187,9 +3359,9 @@ it from receiving any pointer events or affecting the cursor. */
3187
3359
  flex-direction: column;
3188
3360
  position: relative;
3189
3361
  cursor: default;
3190
- background-color: var(--color-panel);
3191
- box-shadow: var(--shadow-3);
3192
- border-radius: var(--radius-3);
3362
+ background-color: var(--tl-color-panel);
3363
+ box-shadow: var(--tl-shadow-3);
3364
+ border-radius: var(--tl-radius-3);
3193
3365
  font-size: 12px;
3194
3366
  overflow: hidden;
3195
3367
  min-width: 300px;
@@ -3202,9 +3374,9 @@ it from receiving any pointer events or affecting the cursor. */
3202
3374
  display: flex;
3203
3375
  align-items: center;
3204
3376
  flex: 0;
3205
- z-index: var(--layer-header-footer);
3206
- padding-left: var(--space-4);
3207
- color: var(--color-text);
3377
+ z-index: var(--tl-layer-header-footer);
3378
+ padding-left: var(--tl-space-4);
3379
+ color: var(--tl-color-text);
3208
3380
  height: 40px;
3209
3381
  }
3210
3382
 
@@ -3213,7 +3385,7 @@ it from receiving any pointer events or affecting the cursor. */
3213
3385
  font-weight: inherit;
3214
3386
  font-size: 12px;
3215
3387
  margin: 0px;
3216
- color: var(--color-text-1);
3388
+ color: var(--tl-color-text-1);
3217
3389
  }
3218
3390
 
3219
3391
  .tlui-dialog__header__close {
@@ -3221,16 +3393,16 @@ it from receiving any pointer events or affecting the cursor. */
3221
3393
  }
3222
3394
 
3223
3395
  .tlui-dialog__body {
3224
- padding: var(--space-4) var(--space-4);
3396
+ padding: var(--tl-space-4) var(--tl-space-4);
3225
3397
  flex: 0 1;
3226
3398
  overflow-y: auto;
3227
3399
  overflow-x: hidden;
3228
- color: var(--color-text-1);
3400
+ color: var(--tl-color-text-1);
3229
3401
  user-select: all;
3230
3402
  -webkit-user-select: text;
3231
3403
  }
3232
3404
  .tlui-dialog__body a {
3233
- color: var(--color-selected);
3405
+ color: var(--tl-color-selected);
3234
3406
  }
3235
3407
 
3236
3408
  .tlui-dialog__body ul,
@@ -3238,13 +3410,13 @@ it from receiving any pointer events or affecting the cursor. */
3238
3410
  padding-left: 16px;
3239
3411
  display: flex;
3240
3412
  flex-direction: column;
3241
- gap: var(--space-2);
3413
+ gap: var(--tl-space-2);
3242
3414
  }
3243
3415
 
3244
3416
  .tlui-dialog__footer {
3245
3417
  position: relative;
3246
3418
  min-height: 12px;
3247
- z-index: var(--layer-header-footer);
3419
+ z-index: var(--tl-layer-header-footer);
3248
3420
  }
3249
3421
 
3250
3422
  .tlui-dialog__footer__actions {
@@ -3264,15 +3436,15 @@ it from receiving any pointer events or affecting the cursor. */
3264
3436
  .tlui-edit-link-dialog {
3265
3437
  display: flex;
3266
3438
  flex-direction: column;
3267
- gap: var(--space-4);
3268
- color: var(--color-text);
3439
+ gap: var(--tl-space-4);
3440
+ color: var(--tl-color-text);
3269
3441
  }
3270
3442
 
3271
3443
  .tlui-edit-link-dialog__input {
3272
- background-color: var(--color-muted-2);
3444
+ background-color: var(--tl-color-muted-2);
3273
3445
  flex-grow: 2;
3274
- border-radius: var(--radius-2);
3275
- padding: 0px var(--space-4);
3446
+ border-radius: var(--tl-radius-2);
3447
+ padding: 0px var(--tl-space-4);
3276
3448
  }
3277
3449
 
3278
3450
  /* Embed Dialog */
@@ -3280,15 +3452,15 @@ it from receiving any pointer events or affecting the cursor. */
3280
3452
  .tlui-embed__spacer {
3281
3453
  flex-grow: 2;
3282
3454
  min-height: 0px;
3283
- margin-left: calc(-1 * var(--space-4));
3284
- margin-top: calc(-1 * var(--space-4));
3455
+ margin-left: calc(-1 * var(--tl-space-4));
3456
+ margin-top: calc(-1 * var(--tl-space-4));
3285
3457
  pointer-events: none;
3286
3458
  }
3287
3459
 
3288
3460
  .tlui-embed-dialog__list {
3289
3461
  display: flex;
3290
3462
  flex-direction: column;
3291
- padding: 0px var(--space-3) var(--space-4) var(--space-3);
3463
+ padding: 0px var(--tl-space-3) var(--tl-space-4) var(--tl-space-3);
3292
3464
  }
3293
3465
 
3294
3466
  .tlui-embed-dialog__item__image {
@@ -3300,49 +3472,49 @@ it from receiving any pointer events or affecting the cursor. */
3300
3472
  background-size: contain;
3301
3473
  background-repeat: no-repeat;
3302
3474
  background-position: center center;
3303
- background-color: var(--color-selected-contrast);
3304
- border-radius: var(--radius-1);
3475
+ background-color: var(--tl-color-selected-contrast);
3476
+ border-radius: var(--tl-radius-1);
3305
3477
  }
3306
3478
 
3307
3479
  .tlui-embed-dialog__enter {
3308
3480
  display: flex;
3309
3481
  flex-direction: column;
3310
- gap: var(--space-4);
3311
- color: var(--color-text-1);
3482
+ gap: var(--tl-space-4);
3483
+ color: var(--tl-color-text-1);
3312
3484
  }
3313
3485
 
3314
3486
  .tlui-embed-dialog__input {
3315
- background-color: var(--color-muted-2);
3487
+ background-color: var(--tl-color-muted-2);
3316
3488
  flex-grow: 2;
3317
- border-radius: var(--radius-2);
3318
- padding: 0px var(--space-4);
3489
+ border-radius: var(--tl-radius-2);
3490
+ padding: 0px var(--tl-space-4);
3319
3491
  }
3320
3492
 
3321
3493
  .tlui-embed-dialog__warning {
3322
- color: var(--color-danger);
3494
+ color: var(--tl-color-danger);
3323
3495
  text-shadow: none;
3324
3496
  }
3325
3497
 
3326
3498
  .tlui-embed-dialog__instruction__link {
3327
3499
  display: flex;
3328
- gap: var(--space-1);
3329
- margin-top: var(--space-4);
3500
+ gap: var(--tl-space-1);
3501
+ margin-top: var(--tl-space-4);
3330
3502
  }
3331
3503
 
3332
3504
  .tlui-embed-dialog__enter a {
3333
- color: var(--color-text-1);
3505
+ color: var(--tl-color-text-1);
3334
3506
  }
3335
3507
 
3336
3508
  /* --------------- Keyboard shortcuts --------------- */
3337
3509
 
3338
3510
  .tlui-shortcuts-dialog__header {
3339
- border-bottom: 1px solid var(--color-divider);
3511
+ border-bottom: 1px solid var(--tl-color-divider);
3340
3512
  }
3341
3513
 
3342
3514
  .tlui-shortcuts-dialog__body {
3343
3515
  position: relative;
3344
3516
  columns: 3;
3345
- column-gap: var(--space-9);
3517
+ column-gap: var(--tl-space-9);
3346
3518
  pointer-events: all;
3347
3519
  touch-action: auto;
3348
3520
 
@@ -3360,14 +3532,14 @@ it from receiving any pointer events or affecting the cursor. */
3360
3532
 
3361
3533
  .tlui-shortcuts-dialog__group {
3362
3534
  break-inside: avoid-column;
3363
- padding-bottom: var(--space-6);
3535
+ padding-bottom: var(--tl-space-6);
3364
3536
  }
3365
3537
 
3366
3538
  .tlui-shortcuts-dialog__group__title {
3367
3539
  font-size: inherit;
3368
3540
  font-weight: inherit;
3369
3541
  margin: 0px;
3370
- color: var(--color-text-3);
3542
+ color: var(--tl-color-text-3);
3371
3543
  height: 32px;
3372
3544
  display: flex;
3373
3545
  align-items: center;
@@ -3376,12 +3548,12 @@ it from receiving any pointer events or affecting the cursor. */
3376
3548
  .tlui-shortcuts-dialog__group__content {
3377
3549
  display: flex;
3378
3550
  flex-direction: column;
3379
- color: var(--color-text-1);
3551
+ color: var(--tl-color-text-1);
3380
3552
  }
3381
3553
 
3382
3554
  .tlui-shortcuts-dialog__key-pair {
3383
3555
  display: flex;
3384
- gap: var(--space-4);
3556
+ gap: var(--tl-space-4);
3385
3557
  align-items: center;
3386
3558
  justify-content: space-between;
3387
3559
  height: 32px;
@@ -3408,12 +3580,12 @@ it from receiving any pointer events or affecting the cursor. */
3408
3580
  height: 24px;
3409
3581
  background: linear-gradient(
3410
3582
  to bottom,
3411
- var(--color-panel-transparent) 0%,
3412
- var(--color-panel) 90%,
3413
- var(--color-panel) 100%
3583
+ var(--tl-color-panel-transparent) 0%,
3584
+ var(--tl-color-panel) 90%,
3585
+ var(--tl-color-panel) 100%
3414
3586
  );
3415
- border-bottom-left-radius: var(--radius-3);
3416
- border-bottom-right-radius: var(--radius-3);
3587
+ border-bottom-left-radius: var(--tl-radius-3);
3588
+ border-bottom-right-radius: var(--tl-radius-3);
3417
3589
  pointer-events: none;
3418
3590
  }
3419
3591
 
@@ -3428,10 +3600,10 @@ it from receiving any pointer events or affecting the cursor. */
3428
3600
  .tlui-help-menu {
3429
3601
  pointer-events: all;
3430
3602
  position: absolute;
3431
- bottom: var(--space-2);
3432
- right: var(--space-2);
3433
- z-index: var(--layer-panels);
3434
- border: 2px solid var(--color-background);
3603
+ bottom: var(--tl-space-2);
3604
+ right: var(--tl-space-2);
3605
+ z-index: var(--tl-layer-panels);
3606
+ border: 2px solid var(--tl-color-background);
3435
3607
  border-radius: 100%;
3436
3608
  }
3437
3609
 
@@ -3442,7 +3614,7 @@ it from receiving any pointer events or affecting the cursor. */
3442
3614
  display: flex;
3443
3615
  flex-direction: row;
3444
3616
  justify-content: flex-end;
3445
- z-index: var(--layer-panels);
3617
+ z-index: var(--tl-layer-panels);
3446
3618
  align-items: center;
3447
3619
  padding-top: 2px;
3448
3620
  padding-right: 4px;
@@ -3458,7 +3630,7 @@ it from receiving any pointer events or affecting the cursor. */
3458
3630
  border: none;
3459
3631
  cursor: pointer;
3460
3632
  pointer-events: all;
3461
- border-radius: var(--radius-1);
3633
+ border-radius: var(--tl-radius-1);
3462
3634
  padding-right: 1px;
3463
3635
  height: 100%;
3464
3636
  }
@@ -3471,8 +3643,8 @@ it from receiving any pointer events or affecting the cursor. */
3471
3643
  .tlui-people-menu__avatar {
3472
3644
  height: 24px;
3473
3645
  width: 24px;
3474
- border: 2px solid var(--color-background);
3475
- background-color: var(--color-low);
3646
+ border: 2px solid var(--tl-color-background);
3647
+ background-color: var(--tl-color-low);
3476
3648
  border-radius: 100%;
3477
3649
  display: flex;
3478
3650
  align-items: center;
@@ -3481,7 +3653,7 @@ it from receiving any pointer events or affecting the cursor. */
3481
3653
  font-size: 10px;
3482
3654
  font-weight: bold;
3483
3655
  text-align: center;
3484
- color: var(--color-selected-contrast);
3656
+ color: var(--tl-color-selected-contrast);
3485
3657
  z-index: 2;
3486
3658
  }
3487
3659
 
@@ -3495,7 +3667,7 @@ it from receiving any pointer events or affecting the cursor. */
3495
3667
 
3496
3668
  @media (hover: hover) {
3497
3669
  .tlui-people-menu__avatars-button:hover .tlui-people-menu__avatar {
3498
- border-color: var(--color-low);
3670
+ border-color: var(--tl-color-low);
3499
3671
  }
3500
3672
  }
3501
3673
 
@@ -3503,12 +3675,12 @@ it from receiving any pointer events or affecting the cursor. */
3503
3675
  min-width: 0px;
3504
3676
  font-size: 11px;
3505
3677
  font-weight: 600;
3506
- color: var(--color-text-1);
3678
+ color: var(--tl-color-text-1);
3507
3679
  font-family: inherit;
3508
3680
  padding: 0px 4px;
3509
3681
  }
3510
3682
  .tlui-people-menu__more::after {
3511
- border-radius: var(--radius-2);
3683
+ border-radius: var(--tl-radius-2);
3512
3684
  inset: 0px;
3513
3685
  }
3514
3686
 
@@ -3537,7 +3709,7 @@ it from receiving any pointer events or affecting the cursor. */
3537
3709
  }
3538
3710
 
3539
3711
  .tlui-people-menu__section:not(:last-child) {
3540
- border-bottom: 1px solid var(--color-divider);
3712
+ border-bottom: 1px solid var(--tl-color-divider);
3541
3713
  }
3542
3714
 
3543
3715
  .tlui-people-menu__user {
@@ -3556,7 +3728,7 @@ it from receiving any pointer events or affecting the cursor. */
3556
3728
  text-overflow: ellipsis;
3557
3729
  white-space: nowrap;
3558
3730
  font-size: 12px;
3559
- color: var(--color-text-1);
3731
+ color: var(--tl-color-text-1);
3560
3732
  max-width: 100%;
3561
3733
  flex-grow: 1;
3562
3734
  flex-shrink: 100;
@@ -3568,7 +3740,7 @@ it from receiving any pointer events or affecting the cursor. */
3568
3740
  text-overflow: ellipsis;
3569
3741
  white-space: nowrap;
3570
3742
  font-size: 12px;
3571
- color: var(--color-text-3);
3743
+ color: var(--tl-color-text-3);
3572
3744
  flex-grow: 100;
3573
3745
  flex-shrink: 0;
3574
3746
  margin-left: 4px;
@@ -3659,7 +3831,7 @@ it from receiving any pointer events or affecting the cursor. */
3659
3831
  inset: 0px;
3660
3832
  border-width: 2px;
3661
3833
  border-style: solid;
3662
- z-index: var(--layer-following-indicator);
3834
+ z-index: var(--tl-layer-following-indicator);
3663
3835
  pointer-events: none;
3664
3836
  }
3665
3837
 
@@ -3678,7 +3850,7 @@ it from receiving any pointer events or affecting the cursor. */
3678
3850
  }
3679
3851
 
3680
3852
  .tlui-contextual-toolbar [data-isactive='true']::after {
3681
- background-color: var(--color-muted-2);
3853
+ background-color: var(--tl-color-muted-2);
3682
3854
  opacity: 1;
3683
3855
  }
3684
3856
 
@@ -3694,7 +3866,7 @@ it from receiving any pointer events or affecting the cursor. */
3694
3866
 
3695
3867
  .tlui-contextual-toolbar[data-visible='true'] {
3696
3868
  opacity: 1;
3697
- z-index: var(--layer-menus);
3869
+ z-index: var(--tl-layer-menus);
3698
3870
  }
3699
3871
 
3700
3872
  .tlui-contextual-toolbar[data-interactive='true'],
@@ -3753,7 +3925,7 @@ it from receiving any pointer events or affecting the cursor. */
3753
3925
 
3754
3926
  @keyframes tlui-slide-in {
3755
3927
  from {
3756
- transform: translateX(calc(100% + var(--space-3)));
3928
+ transform: translateX(calc(100% + var(--tl-space-3)));
3757
3929
  }
3758
3930
  to {
3759
3931
  transform: translateX(0px);
@@ -3765,7 +3937,7 @@ it from receiving any pointer events or affecting the cursor. */
3765
3937
  transform: translateX(var(--radix-toast-swipe-end-x));
3766
3938
  }
3767
3939
  to {
3768
- transform: translateX(calc(100% + var(--space-3)));
3940
+ transform: translateX(calc(100% + var(--tl-space-3)));
3769
3941
  }
3770
3942
  }
3771
3943