tldraw 3.15.3 → 3.16.0-canary.016d4c2889b7

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 (436) hide show
  1. package/dist-cjs/index.d.ts +264 -10
  2. package/dist-cjs/index.js +32 -2
  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/TldrawCropHandles.js.map +2 -2
  7. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  8. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js +6 -4
  10. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +25 -39
  12. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  13. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +16 -4
  14. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  15. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  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 +3 -0
  20. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  21. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  22. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  23. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  24. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  25. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +18 -12
  26. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  27. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  28. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  29. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  30. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  31. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  32. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  33. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  34. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  35. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  36. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  37. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  38. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  40. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  41. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  42. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  43. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  44. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  45. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  46. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  47. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  48. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  49. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  50. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  51. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  52. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  53. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  54. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +4 -0
  55. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  56. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -15
  57. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  58. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +5 -0
  59. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  60. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  61. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
  62. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  63. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  64. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  65. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  66. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  67. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  68. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  69. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  70. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  71. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  72. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +46 -6
  73. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  74. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  75. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  76. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  77. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  78. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  79. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  80. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  81. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  82. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  83. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  84. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  85. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  86. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  87. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  88. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  89. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  90. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -140
  91. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  92. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  93. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  94. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  95. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  96. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  97. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  98. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  99. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  100. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  101. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  102. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  103. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  104. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  105. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  106. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +5 -16
  107. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  108. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  109. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  110. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  111. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  112. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +1 -0
  113. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  114. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +30 -7
  115. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  116. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +262 -0
  117. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  118. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  119. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  120. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  121. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  122. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  123. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -20
  124. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  125. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  126. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  127. package/dist-cjs/lib/ui/context/actions.js +45 -9
  128. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  129. package/dist-cjs/lib/ui/context/components.js +2 -0
  130. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  131. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  132. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  133. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  134. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  135. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  136. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +8 -0
  137. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  138. package/dist-cjs/lib/ui/kbd-utils.js +11 -4
  139. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  140. package/dist-cjs/lib/ui/version.js +3 -3
  141. package/dist-cjs/lib/ui/version.js.map +1 -1
  142. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
  143. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  144. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +3 -2
  145. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  146. package/dist-esm/index.d.mts +264 -10
  147. package/dist-esm/index.mjs +50 -4
  148. package/dist-esm/index.mjs.map +2 -2
  149. package/dist-esm/lib/Tldraw.mjs +14 -4
  150. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  151. package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
  152. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  153. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  154. package/dist-esm/lib/defaultExternalContentHandlers.mjs +6 -4
  155. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  156. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +28 -39
  157. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  158. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +19 -5
  159. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  160. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  161. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  162. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  163. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  164. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +3 -0
  165. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  166. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  167. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  168. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  169. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  170. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +19 -12
  171. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  172. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  173. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  174. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  175. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  176. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  177. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  178. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  179. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  180. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  181. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  182. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  183. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  184. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  185. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  186. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  187. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  188. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  189. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  190. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  191. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  192. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  193. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  194. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  195. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  196. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  197. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  198. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  199. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +4 -0
  200. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  201. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -15
  202. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  203. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +5 -0
  204. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  205. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  206. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
  207. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  208. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  209. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  210. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  211. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  212. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  213. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  214. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  215. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  216. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  217. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +46 -6
  218. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  219. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  220. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  221. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  222. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  223. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  224. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  225. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  226. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  227. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  228. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  229. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  230. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  231. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  232. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  233. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  234. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  235. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -140
  236. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  237. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  238. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  239. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  240. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  241. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  242. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  243. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  244. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  245. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  246. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  247. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  248. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  249. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  250. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  251. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +6 -6
  252. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  253. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  254. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  255. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  256. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  257. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +1 -0
  258. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  259. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +30 -7
  260. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  261. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +239 -0
  262. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  263. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  264. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  265. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  266. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  267. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  268. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -22
  269. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  270. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  271. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  272. package/dist-esm/lib/ui/context/actions.mjs +45 -9
  273. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  274. package/dist-esm/lib/ui/context/components.mjs +2 -0
  275. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  276. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  277. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  278. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  279. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  280. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +8 -0
  281. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  282. package/dist-esm/lib/ui/kbd-utils.mjs +11 -4
  283. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  284. package/dist-esm/lib/ui/version.mjs +3 -3
  285. package/dist-esm/lib/ui/version.mjs.map +1 -1
  286. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
  287. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  288. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +3 -2
  289. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  290. package/package.json +11 -34
  291. package/src/index.ts +35 -2
  292. package/src/lib/Tldraw.tsx +15 -2
  293. package/src/lib/canvas/TldrawCropHandles.tsx +2 -0
  294. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  295. package/src/lib/defaultExternalContentHandlers.ts +14 -5
  296. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  297. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  298. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +12 -11
  299. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +29 -42
  300. package/src/lib/shapes/arrow/arrowLabel.ts +23 -3
  301. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  302. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  303. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +3 -0
  304. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  305. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  306. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  307. package/src/lib/shapes/frame/FrameShapeUtil.tsx +29 -14
  308. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  309. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  310. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  311. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  312. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  313. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  314. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  315. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  316. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  317. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  318. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  319. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  320. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  321. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  322. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  323. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  324. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  325. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +4 -0
  326. package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -24
  327. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +7 -0
  328. package/src/lib/tools/SelectTool/childStates/Translating.ts +0 -1
  329. package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -0
  330. package/src/lib/ui/TldrawUi.tsx +33 -12
  331. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  332. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  333. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  334. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  335. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +38 -6
  336. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  337. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  338. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  339. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  340. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  341. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  342. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  343. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  344. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -107
  345. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  346. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  347. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  348. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  349. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  350. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +17 -12
  351. package/src/lib/ui/components/menu-items.tsx +8 -0
  352. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -37
  353. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  354. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  355. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +1 -0
  356. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +51 -12
  357. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +325 -0
  358. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  359. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  360. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  361. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +221 -19
  362. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  363. package/src/lib/ui/context/actions.tsx +45 -9
  364. package/src/lib/ui/context/components.tsx +3 -0
  365. package/src/lib/ui/context/events.tsx +5 -3
  366. package/src/lib/ui/hooks/menu-hooks.ts +1 -0
  367. package/src/lib/ui/hooks/useTools.tsx +140 -10
  368. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +8 -0
  369. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +8 -0
  370. package/src/lib/ui/kbd-utils.ts +12 -4
  371. package/src/lib/ui/version.ts +3 -3
  372. package/src/lib/ui.css +409 -292
  373. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +21 -7
  374. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
  375. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +28 -7
  376. package/src/lib/utils/tldr/buildFromV1Document.ts +2 -1
  377. package/src/test/A11y.test.tsx +3 -2
  378. package/src/test/ClickManager.test.ts +7 -6
  379. package/src/test/Editor.test.tsx +20 -19
  380. package/src/test/EraserTool.test.ts +184 -13
  381. package/src/test/HandTool.test.ts +10 -9
  382. package/src/test/HighlightShape.test.ts +2 -1
  383. package/src/test/SelectTool.test.ts +40 -13
  384. package/src/test/TLUserPreferences.test.ts +4 -3
  385. package/src/test/TestEditor.ts +13 -15
  386. package/src/test/TldrawEditor.test.tsx +11 -10
  387. package/src/test/ZoomTool.test.ts +7 -6
  388. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  389. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  390. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  391. package/src/test/arrows-megabus.test.tsx +17 -10
  392. package/src/test/bindings.test.tsx +24 -37
  393. package/src/test/bookmark-shapes.test.ts +1 -8
  394. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  395. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  396. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  397. package/src/test/commands/alignShapes.test.tsx +25 -24
  398. package/src/test/commands/animationSpeed.test.ts +2 -1
  399. package/src/test/commands/centerOnPoint.test.ts +3 -2
  400. package/src/test/commands/clipboard.test.ts +3 -2
  401. package/src/test/commands/createShapes.test.ts +2 -1
  402. package/src/test/commands/deletePage.test.ts +84 -1
  403. package/src/test/commands/deleteShapes.test.ts +2 -1
  404. package/src/test/commands/distributeShapes.test.tsx +11 -10
  405. package/src/test/commands/getSvgString.test.ts +2 -1
  406. package/src/test/commands/packShapes.test.ts +5 -4
  407. package/src/test/commands/resizeShape.test.ts +2 -1
  408. package/src/test/commands/rotateShapes.test.ts +7 -6
  409. package/src/test/commands/setCamera.test.ts +4 -3
  410. package/src/test/commands/setCurrentPage.test.ts +3 -2
  411. package/src/test/commands/stackShapes.test.ts +11 -10
  412. package/src/test/commands/stretch.test.tsx +13 -12
  413. package/src/test/createDeepLink.test.tsx +2 -1
  414. package/src/test/cropping.test.ts +3 -2
  415. package/src/test/custom-clipping.test.ts +436 -0
  416. package/src/test/drawing.test.ts +2 -1
  417. package/src/test/flipShapes.test.ts +4 -3
  418. package/src/test/frames.test.ts +25 -24
  419. package/src/test/getCulledShapes.test.tsx +3 -2
  420. package/src/test/groups.test.tsx +1 -1
  421. package/src/test/handleDeepLink.test.tsx +2 -1
  422. package/src/test/inner-outer-margin.test.ts +315 -0
  423. package/src/test/maxShapes.test.ts +3 -2
  424. package/src/test/modifiers.test.ts +5 -4
  425. package/src/test/navigation.test.ts +12 -11
  426. package/src/test/panning.test.ts +2 -1
  427. package/src/test/perf/perf.test.ts +2 -1
  428. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  429. package/src/test/resizing.test.ts +39 -38
  430. package/src/test/select.test.tsx +4 -3
  431. package/src/test/selection-omnibus.test.ts +11 -10
  432. package/src/test/shapeutils.test.ts +4 -3
  433. package/src/test/translating.test.ts +9 -8
  434. package/tldraw.css +714 -603
  435. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  436. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
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;
@@ -681,7 +694,7 @@ input,
681
694
 
682
695
  .tl-text-measure {
683
696
  position: absolute;
684
- z-index: var(--layer-canvas-hidden);
697
+ z-index: var(--tl-layer-canvas-hidden);
685
698
  top: 0px;
686
699
  left: 0px;
687
700
  opacity: 0;
@@ -744,8 +757,8 @@ input,
744
757
  }
745
758
 
746
759
  .tl-text-input::selection {
747
- background: var(--color-selected);
748
- color: var(--color-selected-contrast);
760
+ background: var(--tl-color-selected);
761
+ color: var(--tl-color-selected-contrast);
749
762
  text-shadow: none;
750
763
  }
751
764
 
@@ -755,7 +768,7 @@ input,
755
768
  display: flex;
756
769
  justify-content: center;
757
770
  align-items: center;
758
- color: var(--color-text);
771
+ color: var(--tl-color-text);
759
772
  text-shadow: var(--tl-text-outline);
760
773
  line-height: inherit;
761
774
  position: absolute;
@@ -778,8 +791,7 @@ input,
778
791
  position: static;
779
792
  }
780
793
 
781
- .tl-text-wrapper[data-isediting='false'] .tl-text-input,
782
- .tl-arrow-label[data-isediting='false'] .tl-text-input {
794
+ .tl-text-wrapper[data-isediting='false'] .tl-text-input {
783
795
  opacity: 0;
784
796
  cursor: var(--tl-cursor-default);
785
797
  }
@@ -800,7 +812,7 @@ input,
800
812
 
801
813
  .tl-text-wrapper .tl-text-content {
802
814
  pointer-events: all;
803
- z-index: var(--layer-text-content);
815
+ z-index: var(--tl-layer-text-content);
804
816
  }
805
817
 
806
818
  .tl-text-label__inner > .tl-text-content {
@@ -810,7 +822,7 @@ input,
810
822
  padding: inherit;
811
823
  height: fit-content;
812
824
  width: fit-content;
813
- border-radius: var(--radius-1);
825
+ border-radius: var(--tl-radius-1);
814
826
  max-width: 100%;
815
827
  }
816
828
 
@@ -823,7 +835,7 @@ input,
823
835
  }
824
836
 
825
837
  .tl-text-wrapper[data-isselected='true'] .tl-text-input {
826
- z-index: var(--layer-text-editor);
838
+ z-index: var(--tl-layer-text-editor);
827
839
  pointer-events: all;
828
840
  }
829
841
 
@@ -918,7 +930,7 @@ input,
918
930
  }
919
931
 
920
932
  .tl-rich-text a {
921
- color: var(--color-primary);
933
+ color: var(--tl-color-primary);
922
934
  text-decoration: underline;
923
935
  }
924
936
 
@@ -941,14 +953,14 @@ input,
941
953
  }
942
954
 
943
955
  .tl-theme__dark .tl-rich-text mark {
944
- background-color: var(--color-text-highlight);
956
+ background-color: var(--tl-color-text-highlight);
945
957
  color: currentColor;
946
958
  }
947
959
 
948
960
  @supports (color: color(display-p3 1 1 1)) {
949
961
  @media (color-gamut: p3) {
950
962
  .tl-container:not(.tl-theme__force-sRGB) .tl-rich-text mark {
951
- background-color: var(--color-text-highlight-p3);
963
+ background-color: var(--tl-color-text-highlight-p3);
952
964
  }
953
965
  }
954
966
  }
@@ -960,15 +972,15 @@ input,
960
972
  /* --------------------- Loading -------------------- */
961
973
 
962
974
  .tl-loading {
963
- background-color: var(--color-background);
964
- color: var(--color-text-1);
975
+ background-color: var(--tl-color-background);
976
+ color: var(--tl-color-text-1);
965
977
  height: 100%;
966
978
  width: 100%;
967
979
  display: flex;
968
980
  flex-direction: column;
969
981
  justify-content: center;
970
982
  align-items: center;
971
- gap: var(--space-2);
983
+ gap: var(--tl-space-2);
972
984
  font-size: 14px;
973
985
  font-weight: 500;
974
986
  opacity: 0;
@@ -976,7 +988,7 @@ input,
976
988
  animation-delay: 0.2s;
977
989
  position: absolute;
978
990
  inset: 0px;
979
- z-index: var(--layer-canvas-blocker);
991
+ z-index: var(--tl-layer-canvas-blocker);
980
992
  }
981
993
 
982
994
  @keyframes tl-fade-in {
@@ -1009,8 +1021,8 @@ input,
1009
1021
  }
1010
1022
 
1011
1023
  .tl-brush__default {
1012
- stroke: var(--color-brush-stroke);
1013
- fill: var(--color-brush-fill);
1024
+ stroke: var(--tl-color-brush-stroke);
1025
+ fill: var(--tl-color-brush-fill);
1014
1026
  }
1015
1027
 
1016
1028
  /* -------------------- Scribble -------------------- */
@@ -1025,13 +1037,13 @@ input,
1025
1037
  /* ---------------------- Snaps --------------------- */
1026
1038
 
1027
1039
  .tl-snap-indicator {
1028
- stroke: var(--color-snap);
1040
+ stroke: var(--tl-color-snap);
1029
1041
  stroke-width: calc(1px * var(--tl-scale));
1030
1042
  fill: none;
1031
1043
  }
1032
1044
 
1033
1045
  .tl-snap-point {
1034
- stroke: var(--color-snap);
1046
+ stroke: var(--tl-color-snap);
1035
1047
  stroke-width: calc(1px * var(--tl-scale));
1036
1048
  fill: none;
1037
1049
  }
@@ -1051,7 +1063,7 @@ input,
1051
1063
  justify-content: center;
1052
1064
  font-size: 12px;
1053
1065
  font-weight: 400;
1054
- color: var(--color-text-1);
1066
+ color: var(--tl-color-text-1);
1055
1067
  padding: 13px;
1056
1068
  cursor: var(--tl-cursor-pointer);
1057
1069
  border: none;
@@ -1069,13 +1081,13 @@ input,
1069
1081
  display: block;
1070
1082
  width: calc(100% - 12px);
1071
1083
  height: calc(100% - 12px);
1072
- border-radius: var(--radius-1);
1073
- background-color: var(--color-background);
1084
+ border-radius: var(--tl-radius-1);
1085
+ background-color: var(--tl-color-background);
1074
1086
  pointer-events: none;
1075
1087
  }
1076
1088
 
1077
1089
  .tl-hyperlink-button:focus-visible {
1078
- color: var(--color-selected);
1090
+ color: var(--tl-color-selected);
1079
1091
  }
1080
1092
 
1081
1093
  .tl-hyperlink__icon {
@@ -1102,8 +1114,8 @@ input,
1102
1114
  }
1103
1115
 
1104
1116
  .tl-handle__fg {
1105
- fill: var(--color-selected-contrast);
1106
- stroke: var(--color-selection-stroke);
1117
+ fill: var(--tl-color-selected-contrast);
1118
+ stroke: var(--tl-color-selection-stroke);
1107
1119
  stroke-width: calc(1.5px * var(--tl-scale));
1108
1120
  pointer-events: none;
1109
1121
  }
@@ -1113,7 +1125,7 @@ input,
1113
1125
  }
1114
1126
 
1115
1127
  .tl-handle__clone > .tl-handle__fg {
1116
- fill: var(--color-selection-stroke);
1128
+ fill: var(--tl-color-selection-stroke);
1117
1129
  stroke: none;
1118
1130
  }
1119
1131
 
@@ -1123,7 +1135,7 @@ input,
1123
1135
 
1124
1136
  @media (pointer: coarse) {
1125
1137
  .tl-handle__bg:active {
1126
- fill: var(--color-selection-fill);
1138
+ fill: var(--tl-color-selection-fill);
1127
1139
  }
1128
1140
 
1129
1141
  .tl-handle__create {
@@ -1179,20 +1191,20 @@ input,
1179
1191
  stroke-linejoin: round;
1180
1192
  /* content-visibility: auto; */
1181
1193
  transform-origin: top left;
1182
- color: var(--color-text-1);
1194
+ color: var(--tl-color-text-1);
1183
1195
  }
1184
1196
 
1185
1197
  /* -------------------- Group shape ------------------ */
1186
1198
 
1187
1199
  .tl-group {
1188
- stroke: var(--color-text);
1200
+ stroke: var(--tl-color-text);
1189
1201
  stroke-width: calc(1px * var(--tl-scale));
1190
1202
  opacity: 0.5;
1191
1203
  }
1192
1204
 
1193
1205
  /* --------------------- Arrow shape -------------------- */
1194
1206
 
1195
- .tl-arrow-label {
1207
+ .tl-shape[data-shape-type='arrow'] .tl-text-label {
1196
1208
  position: absolute;
1197
1209
  top: -1px;
1198
1210
  left: -1px;
@@ -1203,56 +1215,38 @@ input,
1203
1215
  justify-content: center;
1204
1216
  align-items: center;
1205
1217
  text-align: center;
1206
- color: var(--color-text);
1218
+ color: var(--tl-color-text);
1207
1219
  text-shadow: var(--tl-text-outline);
1208
1220
  }
1209
1221
 
1210
- .tl-arrow-label[data-isediting='true'] p {
1211
- opacity: 0;
1212
- }
1213
-
1214
- .tl-arrow-label__inner {
1215
- border-radius: var(--radius-1);
1222
+ .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1223
+ border-radius: var(--tl-radius-1);
1216
1224
  box-sizing: content-box;
1217
- position: relative;
1218
1225
  height: max-content;
1219
1226
  width: max-content;
1220
- pointer-events: none;
1221
- display: flex;
1222
- justify-content: center;
1223
- align-items: center;
1224
1227
  }
1225
1228
 
1226
- .tl-arrow-label .tl-arrow {
1227
- position: relative;
1229
+ .tl-shape[data-shape-type='arrow'] .tl-text {
1228
1230
  height: max-content;
1229
- padding: inherit;
1230
- overflow: visible;
1231
- }
1232
-
1233
- .tl-arrow-label textarea {
1234
- padding: inherit;
1235
- /* Don't allow textarea to be zero width */
1236
- min-width: 4px;
1237
1231
  }
1238
1232
 
1239
1233
  .tl-arrow-hint {
1240
- stroke: var(--color-text-1);
1234
+ stroke: var(--tl-color-text-1);
1241
1235
  fill: none;
1242
1236
  stroke-linecap: round;
1243
1237
  overflow: visible;
1244
1238
  }
1245
1239
 
1246
1240
  .tl-arrow-hint-handle {
1247
- fill: var(--color-selected-contrast);
1248
- stroke: var(--color-selection-stroke);
1241
+ fill: var(--tl-color-selected-contrast);
1242
+ stroke: var(--tl-color-selection-stroke);
1249
1243
  stroke-width: calc(1.5px * var(--tl-scale));
1250
1244
  r: calc(4px * var(--tl-scale));
1251
1245
  }
1252
1246
 
1253
1247
  .tl-arrow-hint-snap {
1254
1248
  stroke: transparent;
1255
- fill: var(--color-selection-fill);
1249
+ fill: var(--tl-color-selection-fill);
1256
1250
  r: calc(12px * var(--tl-scale));
1257
1251
  }
1258
1252
 
@@ -1272,40 +1266,40 @@ input,
1272
1266
  width: 100%;
1273
1267
  height: 100%;
1274
1268
  position: relative;
1275
- border: 1px solid var(--color-panel-contrast);
1276
- background-color: var(--color-panel);
1277
- border-radius: var(--radius-2);
1269
+ border: 1px solid var(--tl-color-panel-contrast);
1270
+ background-color: var(--tl-color-panel);
1271
+ border-radius: var(--tl-radius-2);
1278
1272
  display: flex;
1279
1273
  flex-direction: column;
1280
1274
  overflow: hidden;
1281
1275
  }
1282
1276
 
1283
1277
  .tl-bookmark__container--safariExport {
1284
- border: 1px solid var(--color-divider);
1278
+ border: 1px solid var(--tl-color-divider);
1285
1279
  }
1286
1280
 
1287
1281
  .tl-bookmark__image_container {
1288
1282
  flex: 1 1 100%;
1289
1283
  overflow: hidden;
1290
- border-top-left-radius: var(--radius-1);
1291
- border-top-right-radius: var(--radius-1);
1284
+ border-top-left-radius: var(--tl-radius-1);
1285
+ border-top-right-radius: var(--tl-radius-1);
1292
1286
  width: 100%;
1293
1287
  height: 100%;
1294
1288
  display: flex;
1295
1289
  justify-content: flex-end;
1296
1290
  align-items: flex-start;
1297
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1291
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1298
1292
  }
1299
1293
 
1300
1294
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1301
- background-color: var(--color-panel);
1295
+ background-color: var(--tl-color-panel);
1302
1296
  }
1303
1297
 
1304
1298
  .tl-bookmark__placeholder {
1305
1299
  width: 100%;
1306
1300
  height: 100%;
1307
- background-color: var(--color-muted-2);
1308
- border-bottom: 1px solid var(--color-muted-2);
1301
+ background-color: var(--tl-color-muted-2);
1302
+ border-bottom: 1px solid var(--tl-color-muted-2);
1309
1303
  }
1310
1304
 
1311
1305
  .tl-bookmark__image {
@@ -1313,12 +1307,12 @@ input,
1313
1307
  height: 100%;
1314
1308
  object-fit: cover;
1315
1309
  object-position: center;
1316
- border-bottom: 1px solid var(--color-muted-2);
1310
+ border-bottom: 1px solid var(--tl-color-muted-2);
1317
1311
  }
1318
1312
 
1319
1313
  .tl-bookmark__copy_container {
1320
- background-color: var(--color-muted-0);
1321
- padding: var(--space-4);
1314
+ background-color: var(--tl-color-muted-0);
1315
+ padding: var(--tl-space-4);
1322
1316
  pointer-events: all;
1323
1317
  display: flex;
1324
1318
  flex-direction: column;
@@ -1338,7 +1332,7 @@ input,
1338
1332
  font-size: 16px;
1339
1333
  line-height: 1.6;
1340
1334
  font-weight: bold;
1341
- padding-bottom: var(--space-2);
1335
+ padding-bottom: var(--tl-space-2);
1342
1336
  overflow: hidden;
1343
1337
  max-height: calc((16px * 1.6) * 2);
1344
1338
  -webkit-box-orient: vertical;
@@ -1358,19 +1352,19 @@ input,
1358
1352
  line-clamp: 3;
1359
1353
  text-overflow: ellipsis;
1360
1354
  display: -webkit-box;
1361
- color: var(--color-text-2);
1362
- margin: var(--space-2) 0px;
1355
+ color: var(--tl-color-text-2);
1356
+ margin: var(--tl-space-2) 0px;
1363
1357
  }
1364
1358
 
1365
1359
  .tl-bookmark__heading + .tl-bookmark__link,
1366
1360
  .tl-bookmark__description + .tl-bookmark__link {
1367
- margin-top: var(--space-3);
1361
+ margin-top: var(--tl-space-3);
1368
1362
  }
1369
1363
  .tl-bookmark__link {
1370
1364
  font-size: 12px;
1371
1365
  pointer-events: all;
1372
1366
  display: flex;
1373
- color: var(--color-text-2);
1367
+ color: var(--tl-color-text-2);
1374
1368
  align-items: center;
1375
1369
  cursor: var(--tl-cursor-pointer);
1376
1370
  width: fit-content;
@@ -1412,7 +1406,7 @@ input,
1412
1406
  width: 100%;
1413
1407
  height: 100%;
1414
1408
  pointer-events: all;
1415
- /* background-color: var(--color-background); */
1409
+ /* background-color: var(--tl-color-background); */
1416
1410
 
1417
1411
  display: flex;
1418
1412
  justify-content: center;
@@ -1441,7 +1435,7 @@ input,
1441
1435
  height: 100%;
1442
1436
  pointer-events: all;
1443
1437
  opacity: 1;
1444
- z-index: var(--layer-text-container);
1438
+ z-index: var(--tl-layer-text-container);
1445
1439
  border-radius: 1px;
1446
1440
  }
1447
1441
 
@@ -1457,22 +1451,22 @@ input,
1457
1451
  }
1458
1452
 
1459
1453
  .tl-frame__creating {
1460
- stroke: var(--color-selected);
1454
+ stroke: var(--tl-color-selected);
1461
1455
  fill: none;
1462
1456
  }
1463
1457
 
1464
1458
  .tl-frame-heading {
1465
- --frame-padding-x: 6px;
1466
- --frame-height: 24px;
1467
- --frame-minimum-width: 32px;
1468
- --frame-offset-width: 16px;
1459
+ --tl-frame-padding-x: 6px;
1460
+ --tl-frame-height: 24px;
1461
+ --tl-frame-minimum-width: 32px;
1462
+ --tl-frame-offset-width: 16px;
1469
1463
  display: flex;
1470
1464
  align-items: center;
1471
1465
  position: absolute;
1472
1466
  transform-origin: 0% 100%;
1473
1467
  overflow: hidden;
1474
1468
  max-width: 100%;
1475
- min-width: var(--frame-minimum-width);
1469
+ min-width: var(--tl-frame-minimum-width);
1476
1470
  height: auto;
1477
1471
  font-size: 12px;
1478
1472
  padding-bottom: 4px;
@@ -1484,18 +1478,18 @@ input,
1484
1478
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1485
1479
  transform-origin: 0% 100%;
1486
1480
  display: flex;
1487
- height: var(--frame-height);
1481
+ height: var(--tl-frame-height);
1488
1482
  width: 100%;
1489
1483
  align-items: center;
1490
- border-radius: var(--radius-1);
1484
+ border-radius: var(--tl-radius-1);
1491
1485
  }
1492
1486
 
1493
1487
  .tl-frame-label {
1494
1488
  pointer-events: all;
1495
1489
  overflow: hidden;
1496
1490
  text-overflow: ellipsis;
1497
- padding: 0px var(--frame-padding-x);
1498
- border-radius: var(--radius-1);
1491
+ padding: 0px var(--tl-frame-padding-x);
1492
+ border-radius: var(--tl-radius-1);
1499
1493
  position: relative;
1500
1494
  font-size: inherit;
1501
1495
  white-space: pre;
@@ -1505,12 +1499,12 @@ input,
1505
1499
  color: transparent;
1506
1500
  white-space: pre;
1507
1501
  width: auto;
1508
- min-width: var(--frame-minimum-width);
1502
+ min-width: var(--tl-frame-minimum-width);
1509
1503
  height: 100%;
1510
1504
  overflow: visible;
1511
- background-color: var(--color-panel);
1512
- border-color: var(--color-selected);
1513
- box-shadow: inset 0px 0px 0px 1.5px var(--color-selected);
1505
+ background-color: var(--tl-color-panel);
1506
+ border-color: var(--tl-color-selected);
1507
+ box-shadow: inset 0px 0px 0px 1.5px var(--tl-color-selected);
1514
1508
  }
1515
1509
 
1516
1510
  .tl-frame-name-input {
@@ -1518,7 +1512,7 @@ input,
1518
1512
  border: none;
1519
1513
  background: none;
1520
1514
  outline: none;
1521
- padding: 0px var(--frame-padding-x);
1515
+ padding: 0px var(--tl-frame-padding-x);
1522
1516
  inset: 0px;
1523
1517
  height: 100%;
1524
1518
  width: 100%;
@@ -1526,8 +1520,8 @@ input,
1526
1520
  font-family: inherit;
1527
1521
  font-weight: inherit;
1528
1522
  width: 100%;
1529
- color: var(--color-text-1);
1530
- border-radius: var(--radius-1);
1523
+ color: var(--tl-color-text-1);
1524
+ border-radius: var(--tl-radius-1);
1531
1525
  user-select: all;
1532
1526
  -webkit-user-select: text;
1533
1527
  white-space: pre;
@@ -1547,7 +1541,7 @@ input,
1547
1541
 
1548
1542
  .tl-embed {
1549
1543
  border: none;
1550
- border-radius: var(--radius-2);
1544
+ border-radius: var(--tl-radius-2);
1551
1545
  }
1552
1546
 
1553
1547
  /* -------------- Shape error boundary -------------- */
@@ -1555,11 +1549,11 @@ input,
1555
1549
  .tl-shape-error-boundary {
1556
1550
  width: 100%;
1557
1551
  height: 100%;
1558
- background-color: var(--color-muted-1);
1552
+ background-color: var(--tl-color-muted-1);
1559
1553
  border-width: calc(1px * var(--tl-scale));
1560
- border-color: var(--color-muted-1);
1554
+ border-color: var(--tl-color-muted-1);
1561
1555
  border-style: solid;
1562
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1556
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1563
1557
  display: flex;
1564
1558
  flex-direction: column;
1565
1559
  align-items: center;
@@ -1568,7 +1562,7 @@ input,
1568
1562
  position: relative;
1569
1563
  pointer-events: all;
1570
1564
  overflow: hidden;
1571
- padding: var(--space-2);
1565
+ padding: var(--tl-space-2);
1572
1566
  }
1573
1567
 
1574
1568
  .tl-shape-error-boundary::before {
@@ -1576,7 +1570,7 @@ input,
1576
1570
  content: 'Error';
1577
1571
  font-size: 12px;
1578
1572
  font-family: inherit;
1579
- color: var(--color-text-0);
1573
+ color: var(--tl-color-text-0);
1580
1574
  }
1581
1575
 
1582
1576
  /* ----------------- Error boundary ----------------- */
@@ -1587,9 +1581,9 @@ input,
1587
1581
  display: flex;
1588
1582
  align-items: center;
1589
1583
  justify-content: center;
1590
- padding: var(--space-4);
1591
- background-color: var(--color-background);
1592
- color: var(--color-text-1);
1584
+ padding: var(--tl-space-4);
1585
+ background-color: var(--tl-color-background);
1586
+ color: var(--tl-color-text-1);
1593
1587
  position: absolute;
1594
1588
  }
1595
1589
 
@@ -1598,8 +1592,8 @@ input,
1598
1592
  inset: 0px;
1599
1593
  height: 100%;
1600
1594
  width: 100%;
1601
- z-index: var(--layer-error-overlay);
1602
- background-color: var(--color-overlay);
1595
+ z-index: var(--tl-layer-error-overlay);
1596
+ background-color: var(--tl-color-overlay);
1603
1597
  }
1604
1598
 
1605
1599
  .tl-error-boundary__content * {
@@ -1614,7 +1608,7 @@ input,
1614
1608
  inset: 0px;
1615
1609
  height: 100%;
1616
1610
  width: 100%;
1617
- z-index: var(--layer-error-canvas);
1611
+ z-index: var(--tl-layer-error-canvas);
1618
1612
  }
1619
1613
 
1620
1614
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1627,7 +1621,7 @@ it from receiving any pointer events or affecting the cursor. */
1627
1621
  inset: 0px;
1628
1622
  height: 100%;
1629
1623
  width: 100%;
1630
- z-index: var(--layer-error-canvas-after);
1624
+ z-index: var(--tl-layer-error-canvas-after);
1631
1625
  pointer-events: all;
1632
1626
  }
1633
1627
 
@@ -1637,16 +1631,16 @@ it from receiving any pointer events or affecting the cursor. */
1637
1631
  max-width: 100%;
1638
1632
  width: 400px;
1639
1633
  max-height: 100%;
1640
- background-color: var(--color-panel);
1634
+ background-color: var(--tl-color-panel);
1641
1635
  padding: 16px;
1642
1636
  border-radius: 16px;
1643
- box-shadow: var(--shadow-2);
1637
+ box-shadow: var(--tl-shadow-2);
1644
1638
  font-size: 14px;
1645
1639
  font-weight: 400;
1646
1640
  display: flex;
1647
1641
  flex-direction: column;
1648
1642
  overflow: auto;
1649
- z-index: var(--layer-error-content);
1643
+ z-index: var(--tl-layer-error-content);
1650
1644
  gap: 12px;
1651
1645
  }
1652
1646
 
@@ -1661,10 +1655,10 @@ it from receiving any pointer events or affecting the cursor. */
1661
1655
  }
1662
1656
 
1663
1657
  .tl-error-boundary__content h4 {
1664
- border: 1px solid var(--color-low-border);
1658
+ border: 1px solid var(--tl-color-low-border);
1665
1659
  margin: -6px 0 0 0;
1666
- padding: var(--space-5);
1667
- border-radius: var(--radius-2);
1660
+ padding: var(--tl-space-5);
1661
+ border-radius: var(--tl-radius-2);
1668
1662
  font-weight: normal;
1669
1663
  }
1670
1664
 
@@ -1674,10 +1668,10 @@ it from receiving any pointer events or affecting the cursor. */
1674
1668
  }
1675
1669
 
1676
1670
  .tl-error-boundary__content pre {
1677
- background-color: var(--color-muted-2);
1671
+ background-color: var(--tl-color-muted-2);
1678
1672
  margin-top: 0;
1679
- padding: var(--space-5);
1680
- border-radius: var(--radius-2);
1673
+ padding: var(--tl-space-5);
1674
+ border-radius: var(--tl-radius-2);
1681
1675
  overflow: auto;
1682
1676
  font-size: 12px;
1683
1677
  max-height: 320px;
@@ -1689,15 +1683,15 @@ it from receiving any pointer events or affecting the cursor. */
1689
1683
  font-family: inherit;
1690
1684
  font-size: 14px;
1691
1685
  font-weight: 500;
1692
- padding: var(--space-4);
1693
- border-radius: var(--radius-3);
1686
+ padding: var(--tl-space-4);
1687
+ border-radius: var(--tl-radius-3);
1694
1688
  cursor: var(--tl-cursor-pointer);
1695
1689
  color: inherit;
1696
1690
  background-color: transparent;
1697
1691
  }
1698
1692
 
1699
1693
  .tl-error-boundary__content a {
1700
- color: var(--color-selected);
1694
+ color: var(--tl-color-selected);
1701
1695
  font-weight: 500;
1702
1696
  text-decoration: none;
1703
1697
  }
@@ -1709,31 +1703,31 @@ it from receiving any pointer events or affecting the cursor. */
1709
1703
 
1710
1704
  .tl-error-boundary__content__error button {
1711
1705
  position: absolute;
1712
- top: var(--space-2);
1713
- right: var(--space-2);
1706
+ top: var(--tl-space-2);
1707
+ right: var(--tl-space-2);
1714
1708
  font-size: 12px;
1715
- padding: var(--space-2) var(--space-3);
1716
- background-color: var(--color-panel);
1717
- border-radius: var(--radius-1);
1709
+ padding: var(--tl-space-2) var(--tl-space-3);
1710
+ background-color: var(--tl-color-panel);
1711
+ border-radius: var(--tl-radius-1);
1718
1712
  }
1719
1713
 
1720
1714
  .tl-error-boundary__content__actions {
1721
1715
  display: flex;
1722
1716
  justify-content: space-between;
1723
- gap: var(--space-4);
1717
+ gap: var(--tl-space-4);
1724
1718
  margin: 0px;
1725
1719
  margin-left: -4px;
1726
1720
  }
1727
1721
  .tl-error-boundary__content__actions__group {
1728
1722
  display: flex;
1729
- gap: var(--space-4);
1723
+ gap: var(--tl-space-4);
1730
1724
  }
1731
1725
  .tl-error-boundary__content .tl-error-boundary__reset {
1732
- color: var(--color-danger);
1726
+ color: var(--tl-color-danger);
1733
1727
  }
1734
1728
  .tl-error-boundary__content .tl-error-boundary__refresh {
1735
- background-color: var(--color-primary);
1736
- color: var(--color-selected-contrast);
1729
+ background-color: var(--tl-color-primary);
1730
+ color: var(--tl-color-selected-contrast);
1737
1731
  }
1738
1732
  .tl-container__focused:not(.tl-container__no-focus-ring)
1739
1733
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1745,7 +1739,7 @@ it from receiving any pointer events or affecting the cursor. */
1745
1739
 
1746
1740
  .tl-hit-test-blocker {
1747
1741
  position: absolute;
1748
- z-index: var(--layer-canvas-blocker);
1742
+ z-index: var(--tl-layer-canvas-blocker);
1749
1743
  inset: 0px;
1750
1744
  width: 100%;
1751
1745
  height: 100%;
@@ -1765,32 +1759,32 @@ it from receiving any pointer events or affecting the cursor. */
1765
1759
 
1766
1760
  .tl-handle__bg:hover {
1767
1761
  cursor: var(--tl-cursor-grab);
1768
- fill: var(--color-selection-fill);
1762
+ fill: var(--tl-color-selection-fill);
1769
1763
  }
1770
1764
 
1771
1765
  .tl-bookmark__link:hover {
1772
- color: var(--color-selected);
1766
+ color: var(--tl-color-selected);
1773
1767
  }
1774
1768
 
1775
1769
  .tl-hyperlink-button:hover {
1776
- color: var(--color-selected);
1770
+ color: var(--tl-color-selected);
1777
1771
  }
1778
1772
 
1779
1773
  .tl-error-boundary__content button:hover {
1780
- background-color: var(--color-low);
1774
+ background-color: var(--tl-color-low);
1781
1775
  }
1782
1776
  .tl-error-boundary__content a:hover {
1783
- color: var(--color-text-1);
1777
+ color: var(--tl-color-text-1);
1784
1778
  }
1785
1779
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1786
- background-color: var(--color-primary);
1780
+ background-color: var(--tl-color-primary);
1787
1781
  opacity: 0.9;
1788
1782
  }
1789
1783
 
1790
1784
  /* These three rules help preserve clicking into specific points in text areas *while*
1791
1785
  * already in edit mode when jumping from shape to shape. */
1792
1786
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1793
- z-index: var(--layer-text-editor);
1787
+ z-index: var(--tl-layer-text-editor);
1794
1788
  pointer-events: all;
1795
1789
  }
1796
1790
  }
@@ -1798,15 +1792,15 @@ it from receiving any pointer events or affecting the cursor. */
1798
1792
  /* @tldraw/ui */
1799
1793
 
1800
1794
  .tl-container {
1801
- --layer-above: 1;
1802
- --layer-focused-input: 10;
1803
- --layer-menu-click-capture: 250;
1804
- --layer-panels: 300;
1805
- --layer-menus: 400;
1806
- --layer-toasts: 650;
1807
- --layer-cursor: 700;
1808
- --layer-header-footer: 999;
1809
- --layer-following-indicator: 1000;
1795
+ --tl-layer-above: 1;
1796
+ --tl-layer-focused-input: 10;
1797
+ --tl-layer-menu-click-capture: 250;
1798
+ --tl-layer-panels: 300;
1799
+ --tl-layer-menus: 400;
1800
+ --tl-layer-toasts: 650;
1801
+ --tl-layer-cursor: 700;
1802
+ --tl-layer-header-footer: 999;
1803
+ --tl-layer-following-indicator: 1000;
1810
1804
  }
1811
1805
 
1812
1806
  /* Button */
@@ -1830,23 +1824,23 @@ it from receiving any pointer events or affecting the cursor. */
1830
1824
  text-rendering: optimizeLegibility;
1831
1825
  font-size: 12px;
1832
1826
  gap: 0px;
1833
- color: var(--color-text-1);
1827
+ color: var(--tl-color-text-1);
1834
1828
  z-index: 0;
1835
1829
  }
1836
1830
 
1837
1831
  .tlui-button:disabled {
1838
- color: var(--color-text-3);
1832
+ color: var(--tl-color-text-3);
1839
1833
  text-shadow: none;
1840
1834
  cursor: default;
1841
1835
  }
1842
1836
 
1843
1837
  .tlui-button:disabled .tlui-kbd {
1844
- color: var(--color-text-3);
1838
+ color: var(--tl-color-text-3);
1845
1839
  }
1846
1840
 
1847
1841
  .tlui-button > * {
1848
1842
  position: relative;
1849
- z-index: var(--layer-above);
1843
+ z-index: var(--tl-layer-above);
1850
1844
  }
1851
1845
 
1852
1846
  .tlui-button__label {
@@ -1862,7 +1856,7 @@ it from receiving any pointer events or affecting the cursor. */
1862
1856
  */
1863
1857
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button:focus-visible {
1864
1858
  border-radius: 10px;
1865
- outline: 2px solid var(--color-focus);
1859
+ outline: 2px solid var(--tl-color-focus);
1866
1860
  outline-offset: -5px;
1867
1861
  }
1868
1862
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button__tool:focus-visible {
@@ -1870,7 +1864,7 @@ it from receiving any pointer events or affecting the cursor. */
1870
1864
  }
1871
1865
  .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
1872
1866
  border-radius: 10px;
1873
- outline: 2px solid var(--color-focus);
1867
+ outline: 2px solid var(--tl-color-focus);
1874
1868
  outline-offset: -5px;
1875
1869
  }
1876
1870
 
@@ -1879,8 +1873,8 @@ it from receiving any pointer events or affecting the cursor. */
1879
1873
  content: '';
1880
1874
  position: absolute;
1881
1875
  inset: 4px;
1882
- border-radius: var(--radius-2);
1883
- background: var(--color-muted-2);
1876
+ border-radius: var(--tl-radius-2);
1877
+ background: var(--tl-color-muted-2);
1884
1878
  opacity: 0;
1885
1879
  }
1886
1880
 
@@ -1890,18 +1884,18 @@ it from receiving any pointer events or affecting the cursor. */
1890
1884
 
1891
1885
  .tlui-button[data-isactive='true']::after,
1892
1886
  .tlui-button[data-isactive='true']:not(:disabled, :focus-visible):active:after {
1893
- background: var(--color-hint);
1887
+ background: var(--tl-color-hint);
1894
1888
  opacity: 1;
1895
1889
  }
1896
1890
 
1897
- .tlui-button[aria-expanded='true'][data-direction='left']::after {
1898
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1891
+ .tlui-button[aria-expanded='true'][data-direction='left'] {
1892
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1899
1893
  opacity: 1;
1900
1894
  }
1901
1895
 
1902
1896
  @media (hover: hover) {
1903
1897
  .tlui-button[aria-expanded='true'][data-direction='left']:not(:hover)::after {
1904
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1898
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
1905
1899
  opacity: 1;
1906
1900
  }
1907
1901
 
@@ -1915,18 +1909,18 @@ it from receiving any pointer events or affecting the cursor. */
1915
1909
  }
1916
1910
 
1917
1911
  .tlui-button__icon + .tlui-button__label {
1918
- margin-left: var(--space-2);
1912
+ margin-left: var(--tl-space-2);
1919
1913
  }
1920
1914
 
1921
1915
  /* Low button */
1922
1916
 
1923
1917
  .tlui-button__low {
1924
- border-radius: var(--radius-3);
1925
- background-color: var(--color-low);
1918
+ border-radius: var(--tl-radius-3);
1919
+ background-color: var(--tl-color-low);
1926
1920
  }
1927
1921
 
1928
1922
  .tlui-button__low::after {
1929
- background-color: var(--color-muted-2);
1923
+ background-color: var(--tl-color-muted-2);
1930
1924
  opacity: 0;
1931
1925
  }
1932
1926
 
@@ -1939,31 +1933,25 @@ it from receiving any pointer events or affecting the cursor. */
1939
1933
  /* Primary / danger buttons */
1940
1934
 
1941
1935
  .tlui-button__primary {
1942
- color: var(--color-primary);
1936
+ color: var(--tl-color-primary);
1943
1937
  }
1944
1938
 
1945
1939
  .tlui-button__danger {
1946
- color: var(--color-danger);
1940
+ color: var(--tl-color-danger);
1947
1941
  text-shadow: none;
1948
1942
  }
1949
1943
 
1950
1944
  @media (hover: hover) {
1951
1945
  .tlui-button__primary:not(:disabled, :focus-visible):hover {
1952
- color: var(--color-primary);
1946
+ color: var(--tl-color-primary);
1953
1947
  }
1954
1948
 
1955
1949
  .tlui-button__danger:not(:disabled, :focus-visible):hover {
1956
- color: var(--color-danger);
1950
+ color: var(--tl-color-danger);
1957
1951
  text-shadow: none;
1958
1952
  }
1959
1953
  }
1960
1954
 
1961
- /* Panel button */
1962
-
1963
- .tlui-button__panel {
1964
- position: relative;
1965
- }
1966
-
1967
1955
  /* Menu button */
1968
1956
 
1969
1957
  .tlui-button__menu {
@@ -1976,7 +1964,7 @@ it from receiving any pointer events or affecting the cursor. */
1976
1964
 
1977
1965
  .tlui-button__menu::after {
1978
1966
  inset: 4px;
1979
- border-radius: var(--radius-2);
1967
+ border-radius: var(--tl-radius-2);
1980
1968
  }
1981
1969
 
1982
1970
  .tlui-button__menu > .tlui-icon + .tlui-button__label {
@@ -2004,18 +1992,26 @@ it from receiving any pointer events or affecting the cursor. */
2004
1992
 
2005
1993
  /* Tool lock button */
2006
1994
 
2007
- .tlui-toolbar__lock-button {
1995
+ .tlui-main-toolbar__lock-button {
2008
1996
  position: absolute;
2009
- top: 4px;
2010
- right: 0px;
2011
1997
  pointer-events: all;
2012
1998
  height: 40px;
2013
1999
  width: 40px;
2000
+ border-radius: var(--tl-radius-2);
2001
+ }
2002
+
2003
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__lock-button {
2004
+ top: 4px;
2005
+ right: 0px;
2014
2006
  min-width: 0px;
2015
- border-radius: var(--radius-2);
2016
2007
  }
2017
2008
 
2018
- .tlui-toolbar__lock-button::after {
2009
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__lock-button {
2010
+ bottom: 0px;
2011
+ min-height: 0px;
2012
+ }
2013
+
2014
+ .tlui-main-toolbar__lock-button::after {
2019
2015
  top: 4px;
2020
2016
  left: 8px;
2021
2017
  inset: 4px;
@@ -2027,16 +2023,6 @@ it from receiving any pointer events or affecting the cursor. */
2027
2023
  position: relative;
2028
2024
  height: 48px;
2029
2025
  width: 48px;
2030
- margin-left: -2px;
2031
- margin-right: -2px;
2032
- }
2033
-
2034
- .tlui-button__tool:nth-of-type(1) {
2035
- margin-left: 0px;
2036
- }
2037
-
2038
- .tlui-button__tool:nth-last-of-type(1) {
2039
- margin-right: 0px;
2040
2026
  }
2041
2027
 
2042
2028
  .tlui-button__tool::after {
@@ -2045,69 +2031,64 @@ it from receiving any pointer events or affecting the cursor. */
2045
2031
  }
2046
2032
 
2047
2033
  .tlui-button__tool[aria-pressed='true'] {
2048
- color: var(--color-selected-contrast);
2034
+ color: var(--tl-color-selected-contrast);
2049
2035
  }
2050
2036
 
2051
2037
  .tlui-button__tool[aria-pressed='true']:not(:disabled, :focus-visible):active {
2052
- color: var(--color-selected-contrast);
2038
+ color: var(--tl-color-selected-contrast);
2053
2039
  }
2054
2040
 
2055
2041
  .tlui-button__tool[aria-pressed='true']:not(:disabled)::after {
2056
- background: var(--color-selected);
2042
+ background: var(--tl-color-selected);
2057
2043
  opacity: 1;
2058
2044
  }
2059
2045
 
2060
- .tlui-layout__mobile .tlui-button__tool {
2046
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool {
2061
2047
  height: 48px;
2062
2048
  width: 43px;
2063
2049
  }
2064
2050
 
2065
- .tlui-layout__mobile .tlui-button__tool > .tlui-icon {
2051
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool > .tlui-icon {
2066
2052
  height: 16px;
2067
2053
  width: 16px;
2068
2054
  }
2069
2055
 
2070
- /* Button Row */
2056
+ /* Row layout */
2071
2057
 
2072
- .tlui-buttons__horizontal {
2058
+ .tlui-row {
2073
2059
  display: flex;
2074
2060
  flex-direction: row;
2061
+ padding: 0 2px;
2075
2062
  }
2076
- .tlui-buttons__horizontal > * {
2063
+ .tlui-row > * {
2077
2064
  margin-left: -2px;
2078
2065
  margin-right: -2px;
2079
2066
  }
2080
- .tlui-buttons__horizontal > *:nth-child(1) {
2081
- margin-left: 0px;
2067
+
2068
+ /* Column layout */
2069
+
2070
+ .tlui-column {
2071
+ display: flex;
2072
+ flex-direction: column;
2073
+ padding: 2px 0;
2082
2074
  }
2083
- .tlui-buttons__horizontal > *:nth-last-child(1) {
2084
- margin-right: 0px;
2075
+ .tlui-column > * {
2076
+ margin-top: -2px;
2077
+ margin-bottom: -2px;
2085
2078
  }
2086
2079
 
2087
- /* Button Grid */
2080
+ /* Grid layout */
2088
2081
 
2089
- .tlui-buttons__grid {
2082
+ .tlui-grid {
2090
2083
  display: grid;
2091
- grid-template-columns: repeat(4, auto);
2084
+ grid-template-columns: repeat(4, 1fr);
2092
2085
  grid-auto-flow: row;
2093
2086
  overflow: hidden;
2087
+ padding: 2px;
2094
2088
  }
2095
- .tlui-buttons__grid > .tlui-button {
2089
+ .tlui-grid > * {
2096
2090
  margin: -2px;
2097
2091
  }
2098
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n),
2099
- .tlui-buttons__vertical-align > .tlui-button:nth-of-type(3n) {
2100
- margin-right: 0px;
2101
- }
2102
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n - 3) {
2103
- margin-left: 0px;
2104
- }
2105
- .tlui-buttons__grid > .tlui-button:nth-of-type(-n + 4) {
2106
- margin-top: 0px;
2107
- }
2108
- .tlui-buttons__grid > .tlui-button:nth-last-of-type(-n + 4) {
2109
- margin-bottom: 0px;
2110
- }
2111
2092
 
2112
2093
  /* Zoom button */
2113
2094
 
@@ -2131,9 +2112,9 @@ it from receiving any pointer events or affecting the cursor. */
2131
2112
  pointer-events: none;
2132
2113
  user-select: none;
2133
2114
  contain: strict;
2134
- z-index: var(--layer-panels);
2115
+ z-index: var(--tl-layer-panels);
2135
2116
  transform: translate3d(0, 0, 0);
2136
- --sab: env(safe-area-inset-bottom);
2117
+ --tl-sab: env(safe-area-inset-bottom);
2137
2118
  font-weight: 500;
2138
2119
  line-height: 1.6;
2139
2120
  -webkit-font-smoothing: antialiased;
@@ -2186,11 +2167,11 @@ it from receiving any pointer events or affecting the cursor. */
2186
2167
  justify-content: flex-start;
2187
2168
  align-items: flex-start;
2188
2169
  width: min-content;
2189
- gap: var(--space-3);
2190
- margin: var(--space-2) var(--space-3);
2170
+ gap: var(--tl-space-3);
2171
+ margin: var(--tl-space-2) var(--tl-space-3);
2191
2172
  white-space: nowrap;
2192
2173
  pointer-events: none;
2193
- z-index: var(--layer-panels);
2174
+ z-index: var(--tl-layer-panels);
2194
2175
  }
2195
2176
 
2196
2177
  /* ---------------------- Icon ---------------------- */
@@ -2218,7 +2199,7 @@ it from receiving any pointer events or affecting the cursor. */
2218
2199
 
2219
2200
  .tlui-slider__container {
2220
2201
  width: 100%;
2221
- padding: 0px var(--space-4);
2202
+ padding: 0px var(--tl-space-4);
2222
2203
  }
2223
2204
 
2224
2205
  .tlui-slider {
@@ -2244,7 +2225,7 @@ it from receiving any pointer events or affecting the cursor. */
2244
2225
  content: '';
2245
2226
  height: 3px;
2246
2227
  width: 100%;
2247
- background-color: var(--color-muted-1);
2228
+ background-color: var(--tl-color-muted-1);
2248
2229
  border-radius: 14px;
2249
2230
  }
2250
2231
 
@@ -2253,7 +2234,7 @@ it from receiving any pointer events or affecting the cursor. */
2253
2234
  top: calc(50% - 2px);
2254
2235
  left: 0px;
2255
2236
  height: 3px;
2256
- background-color: var(--color-selected);
2237
+ background-color: var(--tl-color-selected);
2257
2238
  border-radius: 14px;
2258
2239
  }
2259
2240
 
@@ -2265,16 +2246,16 @@ it from receiving any pointer events or affecting the cursor. */
2265
2246
  height: 18px;
2266
2247
  position: relative;
2267
2248
  top: -1px;
2268
- background-color: var(--color-panel);
2249
+ background-color: var(--tl-color-panel);
2269
2250
  border-radius: 999px;
2270
- box-shadow: inset 0px 0px 0px 2px var(--color-text-1);
2251
+ box-shadow: inset 0px 0px 0px 2px var(--tl-color-text-1);
2271
2252
  }
2272
2253
 
2273
2254
  .tlui-slider__thumb:active {
2274
2255
  cursor: grabbing;
2275
2256
  box-shadow:
2276
- inset 0px 0px 0px 2px var(--color-text-1),
2277
- var(--shadow-1);
2257
+ inset 0px 0px 0px 2px var(--tl-color-text-1),
2258
+ var(--tl-shadow-1);
2278
2259
  }
2279
2260
 
2280
2261
  /* ---------------------- Input --------------------- */
@@ -2283,7 +2264,7 @@ it from receiving any pointer events or affecting the cursor. */
2283
2264
  background: none;
2284
2265
  margin: 0px;
2285
2266
  position: relative;
2286
- z-index: var(--layer-above);
2267
+ z-index: var(--tl-layer-above);
2287
2268
  height: 40px;
2288
2269
  max-height: 40px;
2289
2270
  display: flex;
@@ -2292,8 +2273,8 @@ it from receiving any pointer events or affecting the cursor. */
2292
2273
  font-family: inherit;
2293
2274
  font-size: 12px;
2294
2275
  font-weight: inherit;
2295
- color: var(--color-text-1);
2296
- padding: var(--space-4);
2276
+ color: var(--tl-color-text-1);
2277
+ padding: var(--tl-space-4);
2297
2278
  padding-left: 0px;
2298
2279
  border: none;
2299
2280
  outline: none;
@@ -2309,8 +2290,8 @@ it from receiving any pointer events or affecting the cursor. */
2309
2290
  height: 44px;
2310
2291
  display: flex;
2311
2292
  align-items: center;
2312
- gap: var(--space-4);
2313
- color: var(--color-text);
2293
+ gap: var(--tl-space-4);
2294
+ color: var(--tl-color-text);
2314
2295
  }
2315
2296
 
2316
2297
  .tlui-input__wrapper > .tlui-icon {
@@ -2342,7 +2323,7 @@ it from receiving any pointer events or affecting the cursor. */
2342
2323
  grid-auto-columns: minmax(1em, auto);
2343
2324
  align-self: bottom;
2344
2325
  color: currentColor;
2345
- margin-left: var(--space-4);
2326
+ margin-left: var(--tl-space-4);
2346
2327
  }
2347
2328
 
2348
2329
  .tlui-kbd > span {
@@ -2359,13 +2340,13 @@ it from receiving any pointer events or affecting the cursor. */
2359
2340
  }
2360
2341
 
2361
2342
  .tlui-kbd:not(:last-child) {
2362
- margin-right: var(--space-2);
2343
+ margin-right: var(--tl-space-2);
2363
2344
  }
2364
2345
 
2365
2346
  /* Focus Mode Button */
2366
2347
 
2367
2348
  .tlui-focus-button {
2368
- z-index: var(--layer-panels);
2349
+ z-index: var(--tl-layer-panels);
2369
2350
  pointer-events: all;
2370
2351
  }
2371
2352
 
@@ -2376,16 +2357,16 @@ it from receiving any pointer events or affecting the cursor. */
2376
2357
  }
2377
2358
 
2378
2359
  .tlui-menu {
2379
- z-index: var(--layer-menus);
2360
+ z-index: var(--tl-layer-menus);
2380
2361
  height: fit-content;
2381
2362
  width: fit-content;
2382
- border-radius: var(--radius-3);
2363
+ border-radius: var(--tl-radius-3);
2383
2364
  pointer-events: all;
2384
2365
  touch-action: auto;
2385
2366
  overflow-y: auto;
2386
2367
  overscroll-behavior: none;
2387
- background-color: var(--color-panel);
2388
- box-shadow: var(--shadow-3);
2368
+ background-color: var(--tl-color-panel);
2369
+ box-shadow: var(--tl-shadow-3);
2389
2370
  }
2390
2371
 
2391
2372
  .tlui-menu::-webkit-scrollbar {
@@ -2403,7 +2384,7 @@ it from receiving any pointer events or affecting the cursor. */
2403
2384
  }
2404
2385
 
2405
2386
  .tlui-menu__group {
2406
- border-bottom: 1px solid var(--color-divider);
2387
+ border-bottom: 1px solid var(--tl-color-divider);
2407
2388
  }
2408
2389
  .tlui-menu__group:nth-last-of-type(1) {
2409
2390
  border-bottom: none;
@@ -2413,23 +2394,23 @@ it from receiving any pointer events or affecting the cursor. */
2413
2394
 
2414
2395
  .tlui-menu__submenu__trigger[data-state='open']::after {
2415
2396
  opacity: 1;
2416
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2397
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2417
2398
  }
2418
2399
 
2419
2400
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
2420
2401
  opacity: 1;
2421
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2402
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2422
2403
  }
2423
2404
 
2424
2405
  @media (hover: hover) {
2425
2406
  .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
2426
2407
  opacity: 1;
2427
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2408
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2428
2409
  }
2429
2410
 
2430
2411
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
2431
2412
  opacity: 1;
2432
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2413
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2433
2414
  }
2434
2415
  }
2435
2416
 
@@ -2454,7 +2435,7 @@ it from receiving any pointer events or affecting the cursor. */
2454
2435
  .tlui-menu-click-capture {
2455
2436
  position: fixed;
2456
2437
  inset: 0;
2457
- z-index: var(--layer-menu-click-capture);
2438
+ z-index: var(--tl-layer-menu-click-capture);
2458
2439
  }
2459
2440
 
2460
2441
  /* --------------------- Popover -------------------- */
@@ -2470,10 +2451,10 @@ it from receiving any pointer events or affecting the cursor. */
2470
2451
  max-height: calc(var(--radix-popover-content-available-height) - 8px);
2471
2452
  margin: 0px;
2472
2453
  border: none;
2473
- border-radius: var(--radius-3);
2474
- background-color: var(--color-panel);
2475
- box-shadow: var(--shadow-3);
2476
- z-index: var(--layer-menus);
2454
+ border-radius: var(--tl-radius-3);
2455
+ background-color: var(--tl-color-panel);
2456
+ box-shadow: var(--tl-shadow-3);
2457
+ z-index: var(--tl-layer-menus);
2477
2458
  overflow: hidden;
2478
2459
  overflow-y: auto;
2479
2460
  touch-action: auto;
@@ -2486,22 +2467,22 @@ it from receiving any pointer events or affecting the cursor. */
2486
2467
 
2487
2468
  .tlui-menu-zone {
2488
2469
  position: relative;
2489
- z-index: var(--layer-panels);
2470
+ z-index: var(--tl-layer-panels);
2490
2471
  width: fit-content;
2491
- border-right: 2px solid var(--color-background);
2492
- border-bottom: 2px solid var(--color-background);
2493
- border-bottom-right-radius: var(--radius-4);
2494
- background-color: var(--color-low);
2472
+ border-right: 2px solid var(--tl-color-background);
2473
+ border-bottom: 2px solid var(--tl-color-background);
2474
+ border-bottom-right-radius: var(--tl-radius-4);
2475
+ background-color: var(--tl-color-low);
2495
2476
  }
2496
2477
 
2497
2478
  .tlui-menu-zone *[data-state='open']::after {
2498
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2479
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2499
2480
  opacity: 1;
2500
2481
  }
2501
2482
 
2502
2483
  @media (hover: hover) {
2503
2484
  .tlui-menu-zone *[data-state='open']:not(:hover)::after {
2504
- background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2485
+ background: linear-gradient(180deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2505
2486
  opacity: 1;
2506
2487
  }
2507
2488
  }
@@ -2527,8 +2508,8 @@ it from receiving any pointer events or affecting the cursor. */
2527
2508
  align-items: center;
2528
2509
  width: 100%;
2529
2510
  height: 40px;
2530
- padding-left: var(--space-4);
2531
- border-bottom: 1px solid var(--color-divider);
2511
+ padding-left: var(--tl-space-4);
2512
+ border-bottom: 1px solid var(--tl-color-divider);
2532
2513
  }
2533
2514
 
2534
2515
  .tlui-page-menu__header > .tlui-button:nth-of-type(1) {
@@ -2536,7 +2517,7 @@ it from receiving any pointer events or affecting the cursor. */
2536
2517
  }
2537
2518
 
2538
2519
  .tlui-page-menu__header__title {
2539
- color: var(--color-text);
2520
+ color: var(--tl-color-text);
2540
2521
  font-size: 12px;
2541
2522
  flex-grow: 2;
2542
2523
  }
@@ -2621,7 +2602,7 @@ it from receiving any pointer events or affecting the cursor. */
2621
2602
  display: inline-flex;
2622
2603
  align-items: center;
2623
2604
  justify-content: center;
2624
- color: var(--color-text);
2605
+ color: var(--tl-color-text);
2625
2606
  }
2626
2607
 
2627
2608
  .tlui-page_menu__item__sortable {
@@ -2634,7 +2615,7 @@ it from receiving any pointer events or affecting the cursor. */
2634
2615
  flex-direction: row;
2635
2616
  align-items: center;
2636
2617
  overflow: hidden;
2637
- z-index: var(--layer-above);
2618
+ z-index: var(--tl-layer-above);
2638
2619
  }
2639
2620
 
2640
2621
  .tlui-page_menu__item__sortable__title {
@@ -2646,7 +2627,7 @@ it from receiving any pointer events or affecting the cursor. */
2646
2627
  }
2647
2628
 
2648
2629
  .tlui-page_menu__item__sortable:focus-visible {
2649
- z-index: var(--layer-focused-input);
2630
+ z-index: var(--tl-layer-focused-input);
2650
2631
  }
2651
2632
 
2652
2633
  .tlui-page_menu__item__sortable__handle {
@@ -2655,7 +2636,7 @@ it from receiving any pointer events or affecting the cursor. */
2655
2636
  min-width: 0px;
2656
2637
  height: 40px;
2657
2638
  cursor: grab;
2658
- color: var(--color-text-3);
2639
+ color: var(--tl-color-text-3);
2659
2640
  flex-shrink: 0;
2660
2641
  margin-right: -9px;
2661
2642
  }
@@ -2697,13 +2678,13 @@ it from receiving any pointer events or affecting the cursor. */
2697
2678
  }
2698
2679
 
2699
2680
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
2700
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2681
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2701
2682
  opacity: 1;
2702
2683
  }
2703
2684
 
2704
2685
  @media (hover: hover) {
2705
2686
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']:not(:hover)::after {
2706
- background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2687
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2707
2688
  opacity: 1;
2708
2689
  }
2709
2690
  }
@@ -2739,7 +2720,7 @@ it from receiving any pointer events or affecting the cursor. */
2739
2720
  top: 48px;
2740
2721
  left: -9999px;
2741
2722
  padding: 8px 16px;
2742
- z-index: var(--layer-toasts);
2723
+ z-index: var(--tl-layer-toasts);
2743
2724
  }
2744
2725
 
2745
2726
  .tl-skip-to-main-content:focus {
@@ -2751,11 +2732,11 @@ it from receiving any pointer events or affecting the cursor. */
2751
2732
  .tlui-offline-indicator {
2752
2733
  display: flex;
2753
2734
  flex-direction: row;
2754
- gap: var(--space-3);
2755
- color: var(--color-text);
2756
- background-color: var(--color-low);
2757
- border: 3px solid var(--color-background);
2758
- padding: 0px var(--space-5);
2735
+ gap: var(--tl-space-3);
2736
+ color: var(--tl-color-text);
2737
+ background-color: var(--tl-color-low);
2738
+ border: 3px solid var(--tl-color-background);
2739
+ padding: 0px var(--tl-space-5);
2759
2740
  height: 42px;
2760
2741
  align-items: center;
2761
2742
  justify-content: center;
@@ -2770,10 +2751,10 @@ it from receiving any pointer events or affecting the cursor. */
2770
2751
  /* ------------------- Style panel ------------------ */
2771
2752
 
2772
2753
  .tlui-style-panel__wrapper {
2773
- box-shadow: var(--shadow-2);
2774
- border-radius: var(--radius-3);
2754
+ box-shadow: var(--tl-shadow-2);
2755
+ border-radius: var(--tl-radius-3);
2775
2756
  pointer-events: all;
2776
- background-color: var(--color-panel);
2757
+ background-color: var(--tl-color-panel);
2777
2758
  height: fit-content;
2778
2759
  max-height: 100%;
2779
2760
  margin: 8px;
@@ -2782,7 +2763,7 @@ it from receiving any pointer events or affecting the cursor. */
2782
2763
  overscroll-behavior: none;
2783
2764
  overflow-y: auto;
2784
2765
  overflow-x: hidden;
2785
- color: var(--color-text);
2766
+ color: var(--tl-color-text);
2786
2767
  }
2787
2768
  /* if the style panel is the only child (ie no share menu), increase the margin */
2788
2769
  .tlui-style-panel__wrapper:only-child {
@@ -2791,12 +2772,18 @@ it from receiving any pointer events or affecting the cursor. */
2791
2772
 
2792
2773
  .tlui-style-panel {
2793
2774
  position: relative;
2794
- z-index: var(--layer-panels);
2775
+ z-index: var(--tl-layer-panels);
2795
2776
  pointer-events: all;
2796
2777
  width: 148px;
2797
2778
  max-width: 148px;
2798
2779
  }
2799
2780
 
2781
+ .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
2782
+ border-radius: 10px;
2783
+ outline: 2px solid var(--tl-color-text);
2784
+ outline-offset: -5px;
2785
+ }
2786
+
2800
2787
  .tlui-style-panel::-webkit-scrollbar {
2801
2788
  display: none;
2802
2789
  }
@@ -2812,7 +2799,7 @@ it from receiving any pointer events or affecting the cursor. */
2812
2799
  }
2813
2800
 
2814
2801
  .tlui-style-panel__section:nth-of-type(n + 2):not(:last-child) {
2815
- border-bottom: 1px solid var(--color-divider);
2802
+ border-bottom: 1px solid var(--tl-color-divider);
2816
2803
  }
2817
2804
 
2818
2805
  .tlui-style-panel__section:empty {
@@ -2821,23 +2808,19 @@ it from receiving any pointer events or affecting the cursor. */
2821
2808
 
2822
2809
  .tlui-style-panel__section__common:not(:only-child) {
2823
2810
  margin-bottom: 7px;
2824
- border-bottom: 1px solid var(--color-divider);
2811
+ border-bottom: 1px solid var(--tl-color-divider);
2825
2812
  }
2826
2813
 
2827
- .tlui-style-panel__row {
2828
- display: flex;
2829
- }
2830
- /* Only really used for the alignment picker */
2831
- .tlui-style-panel__row__extra-button {
2832
- margin-left: -2px;
2814
+ .tlui-style-panel__dropdown-picker:only-child {
2815
+ width: 100%;
2833
2816
  }
2834
2817
 
2835
2818
  .tlui-style-panel__double-select-picker {
2836
2819
  display: flex;
2837
2820
  grid-template-columns: 1fr auto;
2838
2821
  align-items: center;
2839
- padding-left: var(--space-4);
2840
- color: var(--color-text-1);
2822
+ padding-left: var(--tl-space-4);
2823
+ color: var(--tl-color-text-1);
2841
2824
  font-size: 12px;
2842
2825
  }
2843
2826
 
@@ -2851,25 +2834,48 @@ it from receiving any pointer events or affecting the cursor. */
2851
2834
 
2852
2835
  .tlui-style-panel .tlui-button[data-state='open']::after {
2853
2836
  opacity: 1;
2854
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2837
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2855
2838
  }
2856
2839
 
2857
2840
  @media (hover: hover) {
2841
+ .tlui-style-panel .tlui-button[aria-expanded='true'] {
2842
+ background: none;
2843
+ }
2858
2844
  .tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
2859
2845
  opacity: 1;
2860
- background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
2846
+ background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
2861
2847
  }
2862
2848
  }
2863
2849
 
2850
+ /* Accessibility subheadings */
2851
+
2852
+ .tlui-style-panel__section .tlui-style-panel__subheading,
2853
+ .tlui-style-panel__section__common .tlui-style-panel__subheading,
2854
+ .tlui-style-panel__subheading + .tlui-slider__container {
2855
+ margin: 0;
2856
+ padding: var(--tl-space-2) var(--tl-space-3) 0px var(--tl-space-4);
2857
+ font-size: 12px;
2858
+ font-weight: inherit;
2859
+ line-height: inherit;
2860
+ }
2861
+
2862
+ .tlui-style-panel .tlui-style-panel__subheading:nth-of-type(1) {
2863
+ padding-top: var(--tl-space-3);
2864
+ }
2865
+
2866
+ .tlui-style-panel__subheading + .tlui-slider__container {
2867
+ padding-top: 0px;
2868
+ }
2869
+
2864
2870
  /* --------------------- Bottom --------------------- */
2865
2871
 
2866
2872
  .tlui-layout__bottom {
2867
2873
  grid-row: 2;
2874
+ width: 100%;
2868
2875
  }
2869
2876
 
2870
2877
  .tlui-layout__bottom__main {
2871
2878
  width: 100%;
2872
- position: relative;
2873
2879
  display: flex;
2874
2880
  align-items: flex-end;
2875
2881
  justify-content: center;
@@ -2881,11 +2887,10 @@ it from receiving any pointer events or affecting the cursor. */
2881
2887
  display: flex;
2882
2888
  width: min-content;
2883
2889
  flex-direction: column;
2884
- z-index: var(--layer-panels);
2890
+ z-index: var(--tl-layer-panels);
2885
2891
  pointer-events: all;
2886
2892
  position: absolute;
2887
2893
  left: 0px;
2888
- bottom: 0px;
2889
2894
  }
2890
2895
 
2891
2896
  .tlui-navigation-panel::before {
@@ -2895,10 +2900,10 @@ it from receiving any pointer events or affecting the cursor. */
2895
2900
  z-index: -1;
2896
2901
  inset: -2px -2px 0px 0px;
2897
2902
  border-radius: 0;
2898
- border-top: 2px solid var(--color-background);
2899
- border-right: 2px solid var(--color-background);
2900
- border-top-right-radius: var(--radius-4);
2901
- background-color: var(--color-low);
2903
+ border-top: 2px solid var(--tl-color-background);
2904
+ border-right: 2px solid var(--tl-color-background);
2905
+ border-top-right-radius: var(--tl-radius-4);
2906
+ background-color: var(--tl-color-low);
2902
2907
  }
2903
2908
 
2904
2909
  .tlui-navigation-panel[data-a11y='true']::before {
@@ -2912,7 +2917,7 @@ it from receiving any pointer events or affecting the cursor. */
2912
2917
  height: 96px;
2913
2918
  min-height: 96px;
2914
2919
  overflow: hidden;
2915
- padding: var(--space-3);
2920
+ padding: var(--tl-space-3);
2916
2921
  padding-top: 0px;
2917
2922
  }
2918
2923
 
@@ -2925,114 +2930,220 @@ it from receiving any pointer events or affecting the cursor. */
2925
2930
  /* --------------------- Toolbar -------------------- */
2926
2931
 
2927
2932
  /* Wide container */
2928
- .tlui-toolbar {
2933
+ .tlui-main-toolbar {
2929
2934
  grid-column: 1 / span 3;
2930
2935
  grid-row: 1;
2931
2936
  display: flex;
2932
2937
  align-items: center;
2933
2938
  justify-content: center;
2934
2939
  flex-grow: 2;
2935
- padding-bottom: calc(var(--space-3) + var(--sab));
2940
+ }
2941
+
2942
+ .tlui-main-toolbar--horizontal {
2943
+ padding-bottom: calc(var(--tl-space-3) + var(--tl-sab));
2944
+ max-width: 100%;
2945
+ }
2946
+
2947
+ .tlui-main-toolbar--vertical {
2948
+ position: absolute;
2949
+ left: 0;
2950
+ top: 90px; /* height of page menu + 'back to content' button */
2951
+ bottom: 140px; /* height of expanded mini-map */
2952
+ padding-left: calc(var(--tl-space-3) + var(--tl-sab));
2953
+ }
2954
+
2955
+ [data-breakpoints-below*='6'] .tlui-main-toolbar--vertical {
2956
+ bottom: 90px; /* collapsed mini-map, but same as top to keep things looking even */
2936
2957
  }
2937
2958
 
2938
2959
  /* Centered Content */
2939
- .tlui-toolbar__inner {
2960
+ .tlui-main-toolbar__inner {
2940
2961
  position: relative;
2941
2962
  width: fit-content;
2942
2963
  display: flex;
2943
- gap: var(--space-3);
2944
- align-items: flex-end;
2964
+ gap: var(--tl-space-3);
2965
+ align-items: flex-start;
2945
2966
  }
2946
2967
 
2947
- .tlui-toolbar__left {
2968
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__inner {
2969
+ flex-direction: column;
2970
+ }
2971
+
2972
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__left {
2948
2973
  width: fit-content;
2949
2974
  }
2975
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__left {
2976
+ display: flex;
2977
+ height: fit-content;
2978
+ }
2950
2979
 
2951
2980
  /* Row of controls + lock button */
2952
- .tlui-toolbar__extras {
2981
+ .tlui-main-toolbar__extras {
2953
2982
  position: relative;
2954
- z-index: var(--layer-above);
2955
- width: 100%;
2983
+ z-index: var(--tl-layer-above);
2956
2984
  pointer-events: none;
2957
- top: 6px;
2958
- height: 48px;
2985
+ align-self: stretch;
2959
2986
  }
2960
2987
 
2961
- .tlui-toolbar__extras:empty {
2988
+ .tlui-main-toolbar__extras:empty {
2962
2989
  display: none;
2963
2990
  }
2964
2991
 
2965
- .tlui-toolbar__extras__controls {
2966
- display: flex;
2992
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras {
2993
+ height: 48px;
2994
+ top: 6px;
2995
+ }
2996
+
2997
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras {
2998
+ width: 48px;
2999
+ order: 1;
3000
+ }
3001
+
3002
+ .tlui-main-toolbar__extras__controls {
2967
3003
  position: relative;
2968
- flex-direction: row;
2969
- z-index: var(--layer-above);
2970
- background-color: var(--color-low);
2971
- border-top-left-radius: var(--radius-4);
2972
- border-top-right-radius: var(--radius-4);
2973
- border: 2px solid var(--color-background);
3004
+ z-index: var(--tl-layer-above);
3005
+ background-color: var(--tl-color-low);
3006
+ border: 2px solid var(--tl-color-background);
3007
+ pointer-events: all;
3008
+ }
3009
+
3010
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__extras__controls {
3011
+ border-top-left-radius: var(--tl-radius-4);
3012
+ border-top-right-radius: var(--tl-radius-4);
2974
3013
  margin-left: 8px;
2975
3014
  margin-right: 0px;
2976
- pointer-events: all;
2977
3015
  width: fit-content;
2978
3016
  }
2979
3017
 
2980
- .tlui-toolbar__tools {
2981
- display: flex;
2982
- flex-direction: row;
2983
- align-items: center;
2984
- border-radius: var(--radius-4);
2985
- z-index: var(--layer-panels);
3018
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__extras__controls {
3019
+ border-top-right-radius: var(--tl-radius-4);
3020
+ border-bottom-right-radius: var(--tl-radius-4);
3021
+ margin-top: 8px;
3022
+ margin-left: -2px;
3023
+ margin-bottom: 0px;
3024
+ width: fit-content;
3025
+ }
3026
+
3027
+ .tlui-main-toolbar__tools {
3028
+ border-radius: var(--tl-radius-4);
3029
+ z-index: var(--tl-layer-panels);
2986
3030
  pointer-events: all;
2987
3031
  position: relative;
2988
- background: var(--color-panel);
2989
- box-shadow: var(--shadow-2);
3032
+ background: var(--tl-color-panel);
3033
+ box-shadow: var(--tl-shadow-2);
2990
3034
  }
2991
- .tlui-toolbar__tools__list {
2992
- display: flex;
2993
- flex-direction: row;
2994
- align-items: center;
3035
+
3036
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
3037
+ align-self: flex-end;
3038
+ }
3039
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__mobile-style-panel {
3040
+ align-self: flex-start;
2995
3041
  }
2996
3042
 
2997
- .tlui-toolbar__overflow {
3043
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
2998
3044
  width: 40px;
3045
+ margin-left: 2px;
3046
+ }
3047
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__overflow {
3048
+ height: 40px;
3049
+ margin-top: 2px;
2999
3050
  }
3000
3051
 
3001
- .tlui-layout__mobile .tlui-toolbar__overflow {
3052
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
3002
3053
  width: 32px;
3003
3054
  padding: 0px;
3004
3055
  }
3005
3056
 
3006
- .tlui-toolbar *[data-state='open']::after {
3007
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
3057
+ .tlui-main-toolbar--horizontal *[data-state='open']::after {
3058
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3059
+ opacity: 1;
3060
+ }
3061
+ .tlui-main-toolbar--vertical *[data-state='open']::after {
3062
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3008
3063
  opacity: 1;
3009
3064
  }
3010
3065
 
3066
+ .tlui-main-toolbar__overflow-content {
3067
+ touch-action: none;
3068
+ }
3069
+
3070
+ .tlui-main-toolbar__tools [data-toolbar-visible='false'],
3071
+ .tlui-main-toolbar__overflow-content [data-toolbar-visible='false'] {
3072
+ display: none;
3073
+ }
3074
+
3075
+ .tlui-main-toolbar__group:empty {
3076
+ display: none;
3077
+ }
3078
+ .tlui-row.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
3079
+ border-right: 1px solid var(--color-divider);
3080
+ margin-right: 2px;
3081
+ }
3082
+ .tlui-column.tlui-main-toolbar__group:not(
3083
+ :nth-last-child(-n + 1 of [data-toolbar-visible='true'])
3084
+ ) {
3085
+ border-bottom: 1px solid var(--color-divider);
3086
+ margin-bottom: 2px;
3087
+ }
3088
+ .tlui-grid.tlui-main-toolbar__group {
3089
+ grid-column: 1 / span 4;
3090
+ }
3091
+ .tlui-grid.tlui-main-toolbar__group:not(:nth-last-child(-n + 1 of [data-toolbar-visible='true'])) {
3092
+ border-bottom: 1px solid var(--color-divider);
3093
+ margin-bottom: 2px;
3094
+ }
3095
+
3011
3096
  @media (hover: hover) {
3012
- .tlui-toolbar *[data-state='open']:not(:hover)::after {
3013
- background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
3097
+ .tlui-main-toolbar--horizontal *[data-state='open']:not(:hover)::after {
3098
+ background: linear-gradient(0deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3099
+ opacity: 1;
3100
+ }
3101
+ .tlui-main-toolbar--vertical *[data-state='open']:not(:hover)::after {
3102
+ background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
3014
3103
  opacity: 1;
3015
3104
  }
3016
3105
  }
3017
3106
 
3018
- .tlui-layout__mobile .tlui-toolbar {
3019
- transition: transform 0.15s ease-out 0.05s;
3107
+ /* ------------------- Tooltip -------------------- */
3108
+
3109
+ .tlui-tooltip {
3110
+ font-size: 12px;
3111
+ padding: 2px 8px;
3112
+ border-radius: 4px;
3113
+ background-color: var(--tl-color-tooltip);
3114
+ box-shadow: none;
3115
+ color: var(--tl-color-text-shadow);
3116
+ max-width: 400px;
3117
+ width: fit-content;
3118
+ text-align: center;
3119
+ will-change: transform, opacity;
3120
+ z-index: 2;
3121
+ }
3122
+
3123
+ .tlui-tooltip__arrow {
3124
+ fill: var(--tl-color-tooltip);
3125
+ will-change: opacity;
3126
+ }
3127
+
3128
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip) {
3129
+ z-index: var(--tl-layer-toasts) !important;
3130
+ pointer-events: none;
3020
3131
  }
3021
3132
 
3022
3133
  /* ------------------- Debug panel ------------------ */
3023
3134
 
3024
3135
  .tlui-debug-panel {
3025
- background-color: var(--color-low);
3136
+ background-color: var(--tl-color-low);
3026
3137
  width: 100%;
3027
3138
  display: grid;
3028
3139
  align-items: center;
3029
3140
  grid-template-columns: 1fr auto auto auto;
3030
3141
  justify-content: space-between;
3031
- padding-left: var(--space-4);
3032
- border-top: 1px solid var(--color-background);
3142
+ padding-left: var(--tl-space-4);
3143
+ border-top: 1px solid var(--tl-color-background);
3033
3144
  font-size: 12px;
3034
- color: var(--color-text-1);
3035
- z-index: var(--layer-panels);
3145
+ color: var(--tl-color-text-1);
3146
+ z-index: var(--tl-layer-panels);
3036
3147
  pointer-events: all;
3037
3148
  }
3038
3149
 
@@ -3048,7 +3159,7 @@ it from receiving any pointer events or affecting the cursor. */
3048
3159
 
3049
3160
  .tlui-debug-panel__fps__slow {
3050
3161
  font-weight: bold;
3051
- color: var(--color-danger);
3162
+ color: var(--tl-color-danger);
3052
3163
  }
3053
3164
 
3054
3165
  .tlui-a11y-audit {
@@ -3058,7 +3169,7 @@ it from receiving any pointer events or affecting the cursor. */
3058
3169
  .tlui-a11y-audit th,
3059
3170
  .tlui-a11y-audit td {
3060
3171
  padding: 8px;
3061
- border: 1px solid var(--color-low-border);
3172
+ border: 1px solid var(--tl-color-low-border);
3062
3173
  }
3063
3174
 
3064
3175
  /* --------------------- Toasts --------------------- */
@@ -3071,10 +3182,10 @@ it from receiving any pointer events or affecting the cursor. */
3071
3182
  align-items: flex-end;
3072
3183
  justify-content: flex-end;
3073
3184
  flex-direction: column;
3074
- gap: var(--space-3);
3185
+ gap: var(--tl-space-3);
3075
3186
  pointer-events: none;
3076
- padding: 0px var(--space-3) 64px 0px;
3077
- z-index: var(--layer-toasts);
3187
+ padding: 0px var(--tl-space-3) 64px 0px;
3188
+ z-index: var(--tl-layer-toasts);
3078
3189
  }
3079
3190
 
3080
3191
  .tlui-toast__viewport > * {
@@ -3083,34 +3194,34 @@ it from receiving any pointer events or affecting the cursor. */
3083
3194
 
3084
3195
  .tlui-toast__icon {
3085
3196
  padding-top: 11px;
3086
- padding-left: var(--space-4);
3087
- color: var(--color-text-1);
3197
+ padding-left: var(--tl-space-4);
3198
+ color: var(--tl-color-text-1);
3088
3199
  }
3089
3200
 
3090
3201
  .tlui-toast__container {
3091
3202
  min-width: 200px;
3092
3203
  display: flex;
3093
3204
  flex-direction: row;
3094
- background-color: var(--color-panel);
3095
- box-shadow: var(--shadow-2);
3096
- border-radius: var(--radius-3);
3205
+ background-color: var(--tl-color-panel);
3206
+ box-shadow: var(--tl-shadow-2);
3207
+ border-radius: var(--tl-radius-3);
3097
3208
  font-size: 12px;
3098
3209
  }
3099
3210
 
3100
3211
  .tlui-toast__container[data-severity='success'] .tlui-icon {
3101
- color: var(--color-success);
3212
+ color: var(--tl-color-success);
3102
3213
  }
3103
3214
 
3104
3215
  .tlui-toast__container[data-severity='info'] .tlui-icon {
3105
- color: var(--color-info);
3216
+ color: var(--tl-color-info);
3106
3217
  }
3107
3218
 
3108
3219
  .tlui-toast__container[data-severity='warning'] .tlui-icon {
3109
- color: var(--color-warning);
3220
+ color: var(--tl-color-warning);
3110
3221
  }
3111
3222
 
3112
3223
  .tlui-toast__container[data-severity='error'] .tlui-icon {
3113
- color: var(--color-danger);
3224
+ color: var(--tl-color-danger);
3114
3225
  }
3115
3226
 
3116
3227
  .tlui-toast__main {
@@ -3119,27 +3230,27 @@ it from receiving any pointer events or affecting the cursor. */
3119
3230
  }
3120
3231
 
3121
3232
  .tlui-toast__content {
3122
- padding: var(--space-4);
3233
+ padding: var(--tl-space-4);
3123
3234
  display: flex;
3124
3235
  line-height: 1.4;
3125
3236
  flex-direction: column;
3126
- gap: var(--space-3);
3237
+ gap: var(--tl-space-3);
3127
3238
  }
3128
3239
 
3129
3240
  .tlui-toast__main[data-actions='true'] .tlui-toast__content {
3130
- padding-bottom: var(--space-2);
3241
+ padding-bottom: var(--tl-space-2);
3131
3242
  }
3132
3243
 
3133
3244
  .tlui-toast__title {
3134
3245
  font-weight: bold;
3135
- color: var(--color-text-1);
3246
+ color: var(--tl-color-text-1);
3136
3247
  /* this makes the default toast look better */
3137
3248
  line-height: 16px;
3138
3249
  }
3139
3250
 
3140
3251
  .tlui-toast__description {
3141
- color: var(--color-text-1);
3142
- padding: var(--space-3);
3252
+ color: var(--tl-color-text-1);
3253
+ padding: var(--tl-space-3);
3143
3254
  margin: 0px;
3144
3255
  padding: 0px;
3145
3256
  }
@@ -3191,14 +3302,14 @@ it from receiving any pointer events or affecting the cursor. */
3191
3302
  left: 0px;
3192
3303
  width: 100%;
3193
3304
  height: 100%;
3194
- z-index: var(--layer-canvas-overlays);
3195
- background-color: var(--color-overlay);
3305
+ z-index: var(--tl-layer-canvas-overlays);
3306
+ background-color: var(--tl-color-overlay);
3196
3307
  pointer-events: all;
3197
3308
  animation: tl-fade-in 0.12s ease-out;
3198
3309
  display: grid;
3199
3310
  place-items: center;
3200
3311
  overflow-y: auto;
3201
- padding: 0px var(--space-3);
3312
+ padding: 0px var(--tl-space-3);
3202
3313
  }
3203
3314
 
3204
3315
  .tlui-dialog__content {
@@ -3206,9 +3317,9 @@ it from receiving any pointer events or affecting the cursor. */
3206
3317
  flex-direction: column;
3207
3318
  position: relative;
3208
3319
  cursor: default;
3209
- background-color: var(--color-panel);
3210
- box-shadow: var(--shadow-3);
3211
- border-radius: var(--radius-3);
3320
+ background-color: var(--tl-color-panel);
3321
+ box-shadow: var(--tl-shadow-3);
3322
+ border-radius: var(--tl-radius-3);
3212
3323
  font-size: 12px;
3213
3324
  overflow: hidden;
3214
3325
  min-width: 300px;
@@ -3221,9 +3332,9 @@ it from receiving any pointer events or affecting the cursor. */
3221
3332
  display: flex;
3222
3333
  align-items: center;
3223
3334
  flex: 0;
3224
- z-index: var(--layer-header-footer);
3225
- padding-left: var(--space-4);
3226
- color: var(--color-text);
3335
+ z-index: var(--tl-layer-header-footer);
3336
+ padding-left: var(--tl-space-4);
3337
+ color: var(--tl-color-text);
3227
3338
  height: 40px;
3228
3339
  }
3229
3340
 
@@ -3232,7 +3343,7 @@ it from receiving any pointer events or affecting the cursor. */
3232
3343
  font-weight: inherit;
3233
3344
  font-size: 12px;
3234
3345
  margin: 0px;
3235
- color: var(--color-text-1);
3346
+ color: var(--tl-color-text-1);
3236
3347
  }
3237
3348
 
3238
3349
  .tlui-dialog__header__close {
@@ -3240,16 +3351,16 @@ it from receiving any pointer events or affecting the cursor. */
3240
3351
  }
3241
3352
 
3242
3353
  .tlui-dialog__body {
3243
- padding: var(--space-4) var(--space-4);
3354
+ padding: var(--tl-space-4) var(--tl-space-4);
3244
3355
  flex: 0 1;
3245
3356
  overflow-y: auto;
3246
3357
  overflow-x: hidden;
3247
- color: var(--color-text-1);
3358
+ color: var(--tl-color-text-1);
3248
3359
  user-select: all;
3249
3360
  -webkit-user-select: text;
3250
3361
  }
3251
3362
  .tlui-dialog__body a {
3252
- color: var(--color-selected);
3363
+ color: var(--tl-color-selected);
3253
3364
  }
3254
3365
 
3255
3366
  .tlui-dialog__body ul,
@@ -3257,13 +3368,13 @@ it from receiving any pointer events or affecting the cursor. */
3257
3368
  padding-left: 16px;
3258
3369
  display: flex;
3259
3370
  flex-direction: column;
3260
- gap: var(--space-2);
3371
+ gap: var(--tl-space-2);
3261
3372
  }
3262
3373
 
3263
3374
  .tlui-dialog__footer {
3264
3375
  position: relative;
3265
3376
  min-height: 12px;
3266
- z-index: var(--layer-header-footer);
3377
+ z-index: var(--tl-layer-header-footer);
3267
3378
  }
3268
3379
 
3269
3380
  .tlui-dialog__footer__actions {
@@ -3283,15 +3394,15 @@ it from receiving any pointer events or affecting the cursor. */
3283
3394
  .tlui-edit-link-dialog {
3284
3395
  display: flex;
3285
3396
  flex-direction: column;
3286
- gap: var(--space-4);
3287
- color: var(--color-text);
3397
+ gap: var(--tl-space-4);
3398
+ color: var(--tl-color-text);
3288
3399
  }
3289
3400
 
3290
3401
  .tlui-edit-link-dialog__input {
3291
- background-color: var(--color-muted-2);
3402
+ background-color: var(--tl-color-muted-2);
3292
3403
  flex-grow: 2;
3293
- border-radius: var(--radius-2);
3294
- padding: 0px var(--space-4);
3404
+ border-radius: var(--tl-radius-2);
3405
+ padding: 0px var(--tl-space-4);
3295
3406
  }
3296
3407
 
3297
3408
  /* Embed Dialog */
@@ -3299,15 +3410,15 @@ it from receiving any pointer events or affecting the cursor. */
3299
3410
  .tlui-embed__spacer {
3300
3411
  flex-grow: 2;
3301
3412
  min-height: 0px;
3302
- margin-left: calc(-1 * var(--space-4));
3303
- margin-top: calc(-1 * var(--space-4));
3413
+ margin-left: calc(-1 * var(--tl-space-4));
3414
+ margin-top: calc(-1 * var(--tl-space-4));
3304
3415
  pointer-events: none;
3305
3416
  }
3306
3417
 
3307
3418
  .tlui-embed-dialog__list {
3308
3419
  display: flex;
3309
3420
  flex-direction: column;
3310
- padding: 0px var(--space-3) var(--space-4) var(--space-3);
3421
+ padding: 0px var(--tl-space-3) var(--tl-space-4) var(--tl-space-3);
3311
3422
  }
3312
3423
 
3313
3424
  .tlui-embed-dialog__item__image {
@@ -3319,49 +3430,49 @@ it from receiving any pointer events or affecting the cursor. */
3319
3430
  background-size: contain;
3320
3431
  background-repeat: no-repeat;
3321
3432
  background-position: center center;
3322
- background-color: var(--color-selected-contrast);
3323
- border-radius: var(--radius-1);
3433
+ background-color: var(--tl-color-selected-contrast);
3434
+ border-radius: var(--tl-radius-1);
3324
3435
  }
3325
3436
 
3326
3437
  .tlui-embed-dialog__enter {
3327
3438
  display: flex;
3328
3439
  flex-direction: column;
3329
- gap: var(--space-4);
3330
- color: var(--color-text-1);
3440
+ gap: var(--tl-space-4);
3441
+ color: var(--tl-color-text-1);
3331
3442
  }
3332
3443
 
3333
3444
  .tlui-embed-dialog__input {
3334
- background-color: var(--color-muted-2);
3445
+ background-color: var(--tl-color-muted-2);
3335
3446
  flex-grow: 2;
3336
- border-radius: var(--radius-2);
3337
- padding: 0px var(--space-4);
3447
+ border-radius: var(--tl-radius-2);
3448
+ padding: 0px var(--tl-space-4);
3338
3449
  }
3339
3450
 
3340
3451
  .tlui-embed-dialog__warning {
3341
- color: var(--color-danger);
3452
+ color: var(--tl-color-danger);
3342
3453
  text-shadow: none;
3343
3454
  }
3344
3455
 
3345
3456
  .tlui-embed-dialog__instruction__link {
3346
3457
  display: flex;
3347
- gap: var(--space-1);
3348
- margin-top: var(--space-4);
3458
+ gap: var(--tl-space-1);
3459
+ margin-top: var(--tl-space-4);
3349
3460
  }
3350
3461
 
3351
3462
  .tlui-embed-dialog__enter a {
3352
- color: var(--color-text-1);
3463
+ color: var(--tl-color-text-1);
3353
3464
  }
3354
3465
 
3355
3466
  /* --------------- Keyboard shortcuts --------------- */
3356
3467
 
3357
3468
  .tlui-shortcuts-dialog__header {
3358
- border-bottom: 1px solid var(--color-divider);
3469
+ border-bottom: 1px solid var(--tl-color-divider);
3359
3470
  }
3360
3471
 
3361
3472
  .tlui-shortcuts-dialog__body {
3362
3473
  position: relative;
3363
3474
  columns: 3;
3364
- column-gap: var(--space-9);
3475
+ column-gap: var(--tl-space-9);
3365
3476
  pointer-events: all;
3366
3477
  touch-action: auto;
3367
3478
 
@@ -3379,14 +3490,14 @@ it from receiving any pointer events or affecting the cursor. */
3379
3490
 
3380
3491
  .tlui-shortcuts-dialog__group {
3381
3492
  break-inside: avoid-column;
3382
- padding-bottom: var(--space-6);
3493
+ padding-bottom: var(--tl-space-6);
3383
3494
  }
3384
3495
 
3385
3496
  .tlui-shortcuts-dialog__group__title {
3386
3497
  font-size: inherit;
3387
3498
  font-weight: inherit;
3388
3499
  margin: 0px;
3389
- color: var(--color-text-3);
3500
+ color: var(--tl-color-text-3);
3390
3501
  height: 32px;
3391
3502
  display: flex;
3392
3503
  align-items: center;
@@ -3395,12 +3506,12 @@ it from receiving any pointer events or affecting the cursor. */
3395
3506
  .tlui-shortcuts-dialog__group__content {
3396
3507
  display: flex;
3397
3508
  flex-direction: column;
3398
- color: var(--color-text-1);
3509
+ color: var(--tl-color-text-1);
3399
3510
  }
3400
3511
 
3401
3512
  .tlui-shortcuts-dialog__key-pair {
3402
3513
  display: flex;
3403
- gap: var(--space-4);
3514
+ gap: var(--tl-space-4);
3404
3515
  align-items: center;
3405
3516
  justify-content: space-between;
3406
3517
  height: 32px;
@@ -3427,12 +3538,12 @@ it from receiving any pointer events or affecting the cursor. */
3427
3538
  height: 24px;
3428
3539
  background: linear-gradient(
3429
3540
  to bottom,
3430
- var(--color-panel-transparent) 0%,
3431
- var(--color-panel) 90%,
3432
- var(--color-panel) 100%
3541
+ var(--tl-color-panel-transparent) 0%,
3542
+ var(--tl-color-panel) 90%,
3543
+ var(--tl-color-panel) 100%
3433
3544
  );
3434
- border-bottom-left-radius: var(--radius-3);
3435
- border-bottom-right-radius: var(--radius-3);
3545
+ border-bottom-left-radius: var(--tl-radius-3);
3546
+ border-bottom-right-radius: var(--tl-radius-3);
3436
3547
  pointer-events: none;
3437
3548
  }
3438
3549
 
@@ -3447,10 +3558,10 @@ it from receiving any pointer events or affecting the cursor. */
3447
3558
  .tlui-help-menu {
3448
3559
  pointer-events: all;
3449
3560
  position: absolute;
3450
- bottom: var(--space-2);
3451
- right: var(--space-2);
3452
- z-index: var(--layer-panels);
3453
- border: 2px solid var(--color-background);
3561
+ bottom: var(--tl-space-2);
3562
+ right: var(--tl-space-2);
3563
+ z-index: var(--tl-layer-panels);
3564
+ border: 2px solid var(--tl-color-background);
3454
3565
  border-radius: 100%;
3455
3566
  }
3456
3567
 
@@ -3461,7 +3572,7 @@ it from receiving any pointer events or affecting the cursor. */
3461
3572
  display: flex;
3462
3573
  flex-direction: row;
3463
3574
  justify-content: flex-end;
3464
- z-index: var(--layer-panels);
3575
+ z-index: var(--tl-layer-panels);
3465
3576
  align-items: center;
3466
3577
  padding-top: 2px;
3467
3578
  padding-right: 4px;
@@ -3477,7 +3588,7 @@ it from receiving any pointer events or affecting the cursor. */
3477
3588
  border: none;
3478
3589
  cursor: pointer;
3479
3590
  pointer-events: all;
3480
- border-radius: var(--radius-1);
3591
+ border-radius: var(--tl-radius-1);
3481
3592
  padding-right: 1px;
3482
3593
  height: 100%;
3483
3594
  }
@@ -3490,8 +3601,8 @@ it from receiving any pointer events or affecting the cursor. */
3490
3601
  .tlui-people-menu__avatar {
3491
3602
  height: 24px;
3492
3603
  width: 24px;
3493
- border: 2px solid var(--color-background);
3494
- background-color: var(--color-low);
3604
+ border: 2px solid var(--tl-color-background);
3605
+ background-color: var(--tl-color-low);
3495
3606
  border-radius: 100%;
3496
3607
  display: flex;
3497
3608
  align-items: center;
@@ -3500,7 +3611,7 @@ it from receiving any pointer events or affecting the cursor. */
3500
3611
  font-size: 10px;
3501
3612
  font-weight: bold;
3502
3613
  text-align: center;
3503
- color: var(--color-selected-contrast);
3614
+ color: var(--tl-color-selected-contrast);
3504
3615
  z-index: 2;
3505
3616
  }
3506
3617
 
@@ -3514,7 +3625,7 @@ it from receiving any pointer events or affecting the cursor. */
3514
3625
 
3515
3626
  @media (hover: hover) {
3516
3627
  .tlui-people-menu__avatars-button:hover .tlui-people-menu__avatar {
3517
- border-color: var(--color-low);
3628
+ border-color: var(--tl-color-low);
3518
3629
  }
3519
3630
  }
3520
3631
 
@@ -3522,12 +3633,12 @@ it from receiving any pointer events or affecting the cursor. */
3522
3633
  min-width: 0px;
3523
3634
  font-size: 11px;
3524
3635
  font-weight: 600;
3525
- color: var(--color-text-1);
3636
+ color: var(--tl-color-text-1);
3526
3637
  font-family: inherit;
3527
3638
  padding: 0px 4px;
3528
3639
  }
3529
3640
  .tlui-people-menu__more::after {
3530
- border-radius: var(--radius-2);
3641
+ border-radius: var(--tl-radius-2);
3531
3642
  inset: 0px;
3532
3643
  }
3533
3644
 
@@ -3556,7 +3667,7 @@ it from receiving any pointer events or affecting the cursor. */
3556
3667
  }
3557
3668
 
3558
3669
  .tlui-people-menu__section:not(:last-child) {
3559
- border-bottom: 1px solid var(--color-divider);
3670
+ border-bottom: 1px solid var(--tl-color-divider);
3560
3671
  }
3561
3672
 
3562
3673
  .tlui-people-menu__user {
@@ -3575,7 +3686,7 @@ it from receiving any pointer events or affecting the cursor. */
3575
3686
  text-overflow: ellipsis;
3576
3687
  white-space: nowrap;
3577
3688
  font-size: 12px;
3578
- color: var(--color-text-1);
3689
+ color: var(--tl-color-text-1);
3579
3690
  max-width: 100%;
3580
3691
  flex-grow: 1;
3581
3692
  flex-shrink: 100;
@@ -3587,7 +3698,7 @@ it from receiving any pointer events or affecting the cursor. */
3587
3698
  text-overflow: ellipsis;
3588
3699
  white-space: nowrap;
3589
3700
  font-size: 12px;
3590
- color: var(--color-text-3);
3701
+ color: var(--tl-color-text-3);
3591
3702
  flex-grow: 100;
3592
3703
  flex-shrink: 0;
3593
3704
  margin-left: 4px;
@@ -3678,7 +3789,7 @@ it from receiving any pointer events or affecting the cursor. */
3678
3789
  inset: 0px;
3679
3790
  border-width: 2px;
3680
3791
  border-style: solid;
3681
- z-index: var(--layer-following-indicator);
3792
+ z-index: var(--tl-layer-following-indicator);
3682
3793
  pointer-events: none;
3683
3794
  }
3684
3795
 
@@ -3697,7 +3808,7 @@ it from receiving any pointer events or affecting the cursor. */
3697
3808
  }
3698
3809
 
3699
3810
  .tlui-contextual-toolbar [data-isactive='true']::after {
3700
- background-color: var(--color-muted-2);
3811
+ background-color: var(--tl-color-muted-2);
3701
3812
  opacity: 1;
3702
3813
  }
3703
3814
 
@@ -3713,7 +3824,7 @@ it from receiving any pointer events or affecting the cursor. */
3713
3824
 
3714
3825
  .tlui-contextual-toolbar[data-visible='true'] {
3715
3826
  opacity: 1;
3716
- z-index: var(--layer-menus);
3827
+ z-index: var(--tl-layer-menus);
3717
3828
  }
3718
3829
 
3719
3830
  .tlui-contextual-toolbar[data-interactive='true'],
@@ -3772,7 +3883,7 @@ it from receiving any pointer events or affecting the cursor. */
3772
3883
 
3773
3884
  @keyframes tlui-slide-in {
3774
3885
  from {
3775
- transform: translateX(calc(100% + var(--space-3)));
3886
+ transform: translateX(calc(100% + var(--tl-space-3)));
3776
3887
  }
3777
3888
  to {
3778
3889
  transform: translateX(0px);
@@ -3784,7 +3895,7 @@ it from receiving any pointer events or affecting the cursor. */
3784
3895
  transform: translateX(var(--radix-toast-swipe-end-x));
3785
3896
  }
3786
3897
  to {
3787
- transform: translateX(calc(100% + var(--space-3)));
3898
+ transform: translateX(calc(100% + var(--tl-space-3)));
3788
3899
  }
3789
3900
  }
3790
3901