tldraw 3.16.0-internal.a478398270c6 → 3.16.0-next.15f085081fd5

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 (534) hide show
  1. package/dist-cjs/index.d.ts +316 -23
  2. package/dist-cjs/index.js +34 -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/TldrawImage.js +5 -2
  7. package/dist-cjs/lib/TldrawImage.js.map +3 -3
  8. package/dist-cjs/lib/canvas/TldrawCropHandles.js +1 -1
  9. package/dist-cjs/lib/canvas/TldrawCropHandles.js.map +2 -2
  10. package/dist-cjs/lib/canvas/TldrawHandles.js +1 -1
  11. package/dist-cjs/lib/canvas/TldrawHandles.js.map +2 -2
  12. package/dist-cjs/lib/canvas/TldrawOverlays.js +1 -1
  13. package/dist-cjs/lib/canvas/TldrawOverlays.js.map +2 -2
  14. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  15. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  16. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +279 -271
  17. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
  18. package/dist-cjs/lib/defaultExternalContentHandlers.js +6 -4
  19. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  20. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +27 -44
  21. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +16 -4
  23. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  24. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  25. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  26. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  27. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  28. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +3 -0
  29. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  30. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -6
  31. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  33. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  34. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +20 -17
  35. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  37. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  38. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  39. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  40. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  41. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  42. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -4
  43. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  44. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  45. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  46. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +20 -5
  47. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  48. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -5
  49. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  50. package/dist-cjs/lib/shapes/shared/PathBuilder.js +21 -3
  51. package/dist-cjs/lib/shapes/shared/PathBuilder.js.map +2 -2
  52. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -0
  53. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  54. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +5 -2
  55. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  56. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  57. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  58. package/dist-cjs/lib/shapes/shared/SvgTextLabel.js +4 -3
  59. package/dist-cjs/lib/shapes/shared/SvgTextLabel.js.map +2 -2
  60. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  61. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  62. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  63. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +7 -13
  64. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  65. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  66. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  67. package/dist-cjs/lib/styles.js.map +2 -2
  68. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  69. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  70. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  71. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  72. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +7 -1
  73. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
  74. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +43 -22
  75. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  76. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -15
  77. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  78. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +5 -0
  79. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  80. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +8 -0
  81. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  82. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +8 -0
  83. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
  84. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +8 -0
  85. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  86. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
  87. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  88. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  89. package/dist-cjs/lib/ui/components/A11y.js +14 -12
  90. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  91. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  92. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  93. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  94. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  95. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  96. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  97. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  98. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  99. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +57 -7
  100. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  101. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -2
  102. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  103. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  104. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  105. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  106. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  107. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +4 -5
  108. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  109. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  110. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  111. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  112. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  113. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  114. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  115. package/dist-cjs/lib/ui/components/Spinner.js +2 -25
  116. package/dist-cjs/lib/ui/components/Spinner.js.map +2 -2
  117. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  118. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  119. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -139
  120. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  121. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  122. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  123. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  124. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  125. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +21 -7
  126. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +3 -3
  127. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  128. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  129. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  130. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  131. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  132. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  133. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  134. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  135. package/dist-cjs/lib/ui/components/menu-items.js +22 -0
  136. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  137. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButtonIcon.js.map +2 -2
  138. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +7 -16
  139. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  140. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  141. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  142. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js +1 -1
  143. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js.map +2 -2
  144. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +35 -1
  145. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js.map +2 -2
  146. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  147. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  148. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +6 -2
  149. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  150. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +31 -7
  151. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  152. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +262 -0
  153. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  154. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  155. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  156. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  157. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  158. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  159. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  160. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -22
  161. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  162. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  163. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  164. package/dist-cjs/lib/ui/context/actions.js +72 -9
  165. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  166. package/dist-cjs/lib/ui/context/components.js +2 -0
  167. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  168. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  169. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  170. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
  171. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
  172. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  173. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  174. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  175. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +12 -0
  176. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  177. package/dist-cjs/lib/ui/kbd-utils.js +11 -4
  178. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  179. package/dist-cjs/lib/ui/version.js +3 -3
  180. package/dist-cjs/lib/ui/version.js.map +1 -1
  181. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
  182. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  183. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +3 -2
  184. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  185. package/dist-esm/index.d.mts +316 -23
  186. package/dist-esm/index.mjs +57 -5
  187. package/dist-esm/index.mjs.map +2 -2
  188. package/dist-esm/lib/Tldraw.mjs +14 -4
  189. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  190. package/dist-esm/lib/TldrawImage.mjs +5 -2
  191. package/dist-esm/lib/TldrawImage.mjs.map +2 -2
  192. package/dist-esm/lib/canvas/TldrawCropHandles.mjs +1 -1
  193. package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
  194. package/dist-esm/lib/canvas/TldrawHandles.mjs +1 -1
  195. package/dist-esm/lib/canvas/TldrawHandles.mjs.map +2 -2
  196. package/dist-esm/lib/canvas/TldrawOverlays.mjs +1 -1
  197. package/dist-esm/lib/canvas/TldrawOverlays.mjs.map +2 -2
  198. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  199. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  200. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +279 -271
  201. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
  202. package/dist-esm/lib/defaultExternalContentHandlers.mjs +6 -4
  203. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  204. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +30 -44
  205. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  206. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +19 -5
  207. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  208. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  209. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  210. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  211. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  212. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +3 -0
  213. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  214. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -6
  215. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  216. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  217. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  218. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +21 -17
  219. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  220. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  221. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  222. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  223. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  224. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  225. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  226. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -4
  227. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  228. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  229. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  230. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +21 -5
  231. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  232. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -5
  233. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  234. package/dist-esm/lib/shapes/shared/PathBuilder.mjs +22 -3
  235. package/dist-esm/lib/shapes/shared/PathBuilder.mjs.map +2 -2
  236. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -0
  237. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  238. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +5 -2
  239. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  240. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  241. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  242. package/dist-esm/lib/shapes/shared/SvgTextLabel.mjs +4 -3
  243. package/dist-esm/lib/shapes/shared/SvgTextLabel.mjs.map +2 -2
  244. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  245. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  246. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  247. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +8 -13
  248. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  249. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  250. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  251. package/dist-esm/lib/styles.mjs.map +2 -2
  252. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  253. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  254. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  255. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  256. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +7 -1
  257. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
  258. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +43 -22
  259. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  260. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -15
  261. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  262. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +5 -0
  263. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  264. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +8 -0
  265. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  266. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +8 -0
  267. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
  268. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +8 -0
  269. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  270. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
  271. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  272. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  273. package/dist-esm/lib/ui/components/A11y.mjs +14 -12
  274. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  275. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  276. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  277. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  278. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  279. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  280. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  281. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  282. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  283. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +57 -7
  284. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -3
  286. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  287. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  288. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  289. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  290. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  291. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +4 -5
  292. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  293. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  294. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  295. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  296. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  297. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  298. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  299. package/dist-esm/lib/ui/components/Spinner.mjs +3 -26
  300. package/dist-esm/lib/ui/components/Spinner.mjs.map +2 -2
  301. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  302. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  303. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -139
  304. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  305. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  306. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  307. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  308. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  309. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +23 -9
  310. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +3 -3
  311. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  312. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  313. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  314. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  315. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  316. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  317. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  318. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  319. package/dist-esm/lib/ui/components/menu-items.mjs +22 -0
  320. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  321. package/dist-esm/lib/ui/components/primitives/Button/TldrawUiButtonIcon.mjs.map +2 -2
  322. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +8 -6
  323. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  324. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  325. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  326. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs +1 -1
  327. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs.map +2 -2
  328. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs +36 -2
  329. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs.map +2 -2
  330. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  331. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  332. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +6 -2
  333. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  334. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +31 -7
  335. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  336. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +239 -0
  337. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  338. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  339. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  340. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  341. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  342. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  343. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  344. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -24
  345. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  346. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  347. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  348. package/dist-esm/lib/ui/context/actions.mjs +72 -9
  349. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  350. package/dist-esm/lib/ui/context/components.mjs +2 -0
  351. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  352. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  353. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  354. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
  355. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
  356. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  357. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  358. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +12 -0
  359. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  360. package/dist-esm/lib/ui/kbd-utils.mjs +11 -4
  361. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  362. package/dist-esm/lib/ui/version.mjs +3 -3
  363. package/dist-esm/lib/ui/version.mjs.map +1 -1
  364. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
  365. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  366. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +3 -2
  367. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  368. package/package.json +12 -34
  369. package/src/index.ts +42 -3
  370. package/src/lib/Tldraw.tsx +15 -2
  371. package/src/lib/TldrawImage.tsx +6 -2
  372. package/src/lib/canvas/TldrawCropHandles.tsx +3 -1
  373. package/src/lib/canvas/TldrawHandles.tsx +5 -1
  374. package/src/lib/canvas/TldrawOverlays.tsx +1 -1
  375. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  376. package/src/lib/canvas/TldrawSelectionForeground.tsx +5 -1
  377. package/src/lib/defaultExternalContentHandlers.ts +14 -5
  378. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  379. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  380. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +12 -11
  381. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +30 -46
  382. package/src/lib/shapes/arrow/arrowLabel.ts +23 -3
  383. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  384. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  385. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +3 -0
  386. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  387. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -7
  388. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  389. package/src/lib/shapes/frame/FrameShapeUtil.tsx +30 -21
  390. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  391. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  392. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  393. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -4
  394. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  395. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  396. package/src/lib/shapes/line/LineShapeUtil.tsx +25 -6
  397. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  398. package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -4
  399. package/src/lib/shapes/shared/PathBuilder.test.tsx +1 -1
  400. package/src/lib/shapes/shared/PathBuilder.tsx +35 -1
  401. package/src/lib/shapes/shared/PlainTextLabel.tsx +1 -0
  402. package/src/lib/shapes/shared/RichTextLabel.tsx +4 -0
  403. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  404. package/src/lib/shapes/shared/SvgTextLabel.tsx +4 -2
  405. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  406. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  407. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  408. package/src/lib/shapes/text/TextShapeUtil.tsx +8 -14
  409. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  410. package/src/lib/styles.tsx +3 -1
  411. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  412. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  413. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +8 -1
  414. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +54 -30
  415. package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -24
  416. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +7 -0
  417. package/src/lib/tools/SelectTool/childStates/Resizing.ts +12 -1
  418. package/src/lib/tools/SelectTool/childStates/Rotating.ts +11 -0
  419. package/src/lib/tools/SelectTool/childStates/Translating.ts +11 -1
  420. package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -0
  421. package/src/lib/ui/TldrawUi.tsx +33 -12
  422. package/src/lib/ui/components/A11y.tsx +15 -13
  423. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  424. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  425. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  426. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  427. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +46 -6
  428. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -2
  429. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  430. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  431. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +4 -5
  432. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  433. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  434. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  435. package/src/lib/ui/components/Spinner.tsx +2 -24
  436. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  437. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -106
  438. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  439. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  440. package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +25 -9
  441. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  442. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  443. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  444. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +17 -12
  445. package/src/lib/ui/components/menu-items.tsx +25 -0
  446. package/src/lib/ui/components/primitives/Button/TldrawUiButtonIcon.tsx +2 -2
  447. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -35
  448. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  449. package/src/lib/ui/components/primitives/TldrawUiDialog.tsx +1 -1
  450. package/src/lib/ui/components/primitives/TldrawUiIcon.tsx +41 -3
  451. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  452. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +6 -1
  453. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +56 -12
  454. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +325 -0
  455. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  456. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +2 -2
  457. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  458. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  459. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +224 -23
  460. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  461. package/src/lib/ui/context/actions.tsx +74 -10
  462. package/src/lib/ui/context/components.tsx +3 -0
  463. package/src/lib/ui/context/events.tsx +6 -2
  464. package/src/lib/ui/hooks/menu-hooks.ts +1 -0
  465. package/src/lib/ui/hooks/useKeyboardShortcuts.ts +3 -2
  466. package/src/lib/ui/hooks/useTools.tsx +142 -11
  467. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +12 -0
  468. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +12 -0
  469. package/src/lib/ui/kbd-utils.ts +12 -4
  470. package/src/lib/ui/version.ts +3 -3
  471. package/src/lib/ui.css +417 -314
  472. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +21 -7
  473. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
  474. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +28 -7
  475. package/src/lib/utils/tldr/buildFromV1Document.ts +2 -1
  476. package/src/test/A11y.test.tsx +3 -2
  477. package/src/test/ClickManager.test.ts +7 -6
  478. package/src/test/Editor.test.tsx +21 -20
  479. package/src/test/EraserTool.test.ts +184 -13
  480. package/src/test/HandTool.test.ts +10 -9
  481. package/src/test/HighlightShape.test.ts +2 -1
  482. package/src/test/SelectTool.test.ts +40 -13
  483. package/src/test/TLUserPreferences.test.ts +4 -3
  484. package/src/test/TestEditor.ts +13 -15
  485. package/src/test/TldrawEditor.test.tsx +11 -10
  486. package/src/test/ZoomTool.test.ts +7 -6
  487. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  488. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  489. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  490. package/src/test/arrows-megabus.test.tsx +17 -10
  491. package/src/test/bindings.test.tsx +24 -37
  492. package/src/test/bookmark-shapes.test.ts +1 -8
  493. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  494. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  495. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  496. package/src/test/commands/alignShapes.test.tsx +25 -24
  497. package/src/test/commands/animationSpeed.test.ts +2 -1
  498. package/src/test/commands/centerOnPoint.test.ts +3 -2
  499. package/src/test/commands/clipboard.test.ts +3 -2
  500. package/src/test/commands/createShapes.test.ts +2 -1
  501. package/src/test/commands/deletePage.test.ts +84 -1
  502. package/src/test/commands/deleteShapes.test.ts +2 -1
  503. package/src/test/commands/distributeShapes.test.tsx +11 -10
  504. package/src/test/commands/getSvgString.test.ts +2 -1
  505. package/src/test/commands/packShapes.test.ts +5 -4
  506. package/src/test/commands/resizeShape.test.ts +2 -1
  507. package/src/test/commands/rotateShapes.test.ts +7 -6
  508. package/src/test/commands/setCamera.test.ts +4 -3
  509. package/src/test/commands/setCurrentPage.test.ts +3 -2
  510. package/src/test/commands/stackShapes.test.ts +11 -10
  511. package/src/test/commands/stretch.test.tsx +13 -12
  512. package/src/test/createDeepLink.test.tsx +2 -1
  513. package/src/test/cropping.test.ts +3 -2
  514. package/src/test/drawing.test.ts +2 -1
  515. package/src/test/flipShapes.test.ts +4 -3
  516. package/src/test/frames.test.ts +25 -24
  517. package/src/test/getCulledShapes.test.tsx +3 -2
  518. package/src/test/groups.test.tsx +2 -2
  519. package/src/test/handleDeepLink.test.tsx +2 -1
  520. package/src/test/inner-outer-margin.test.ts +315 -0
  521. package/src/test/maxShapes.test.ts +3 -2
  522. package/src/test/modifiers.test.ts +5 -4
  523. package/src/test/navigation.test.ts +264 -9
  524. package/src/test/panning.test.ts +2 -1
  525. package/src/test/perf/perf.test.ts +2 -1
  526. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  527. package/src/test/resizing.test.ts +39 -38
  528. package/src/test/select.test.tsx +4 -3
  529. package/src/test/selection-omnibus.test.ts +11 -10
  530. package/src/test/shapeutils.test.ts +398 -48
  531. package/src/test/translating.test.ts +10 -9
  532. package/tldraw.css +737 -627
  533. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  534. 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(220, 2%, 65%);
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(210, 6%, 45%);
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,26 +972,26 @@ 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;
975
- animation: fade-in 0.2s ease-in-out forwards;
987
+ animation: tl-fade-in 0.2s ease-in-out forwards;
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
- @keyframes fade-in {
994
+ @keyframes tl-fade-in {
983
995
  0% {
984
996
  opacity: 0;
985
997
  }
@@ -988,6 +1000,19 @@ input,
988
1000
  }
989
1001
  }
990
1002
 
1003
+ .tl-spinner {
1004
+ animation: tl-spin 1s linear infinite;
1005
+ }
1006
+
1007
+ @keyframes tl-spin {
1008
+ 0% {
1009
+ transform: rotate(0deg);
1010
+ }
1011
+ 100% {
1012
+ transform: rotate(360deg);
1013
+ }
1014
+ }
1015
+
991
1016
  /* ---------------------- Brush --------------------- */
992
1017
 
993
1018
  .tl-brush {
@@ -996,8 +1021,8 @@ input,
996
1021
  }
997
1022
 
998
1023
  .tl-brush__default {
999
- stroke: var(--color-brush-stroke);
1000
- fill: var(--color-brush-fill);
1024
+ stroke: var(--tl-color-brush-stroke);
1025
+ fill: var(--tl-color-brush-fill);
1001
1026
  }
1002
1027
 
1003
1028
  /* -------------------- Scribble -------------------- */
@@ -1012,13 +1037,13 @@ input,
1012
1037
  /* ---------------------- Snaps --------------------- */
1013
1038
 
1014
1039
  .tl-snap-indicator {
1015
- stroke: var(--color-snap);
1040
+ stroke: var(--tl-color-snap);
1016
1041
  stroke-width: calc(1px * var(--tl-scale));
1017
1042
  fill: none;
1018
1043
  }
1019
1044
 
1020
1045
  .tl-snap-point {
1021
- stroke: var(--color-snap);
1046
+ stroke: var(--tl-color-snap);
1022
1047
  stroke-width: calc(1px * var(--tl-scale));
1023
1048
  fill: none;
1024
1049
  }
@@ -1038,7 +1063,7 @@ input,
1038
1063
  justify-content: center;
1039
1064
  font-size: 12px;
1040
1065
  font-weight: 400;
1041
- color: var(--color-text-1);
1066
+ color: var(--tl-color-text-1);
1042
1067
  padding: 13px;
1043
1068
  cursor: var(--tl-cursor-pointer);
1044
1069
  border: none;
@@ -1056,13 +1081,13 @@ input,
1056
1081
  display: block;
1057
1082
  width: calc(100% - 12px);
1058
1083
  height: calc(100% - 12px);
1059
- border-radius: var(--radius-1);
1060
- background-color: var(--color-background);
1084
+ border-radius: var(--tl-radius-1);
1085
+ background-color: var(--tl-color-background);
1061
1086
  pointer-events: none;
1062
1087
  }
1063
1088
 
1064
1089
  .tl-hyperlink-button:focus-visible {
1065
- color: var(--color-selected);
1090
+ color: var(--tl-color-selected);
1066
1091
  }
1067
1092
 
1068
1093
  .tl-hyperlink__icon {
@@ -1089,8 +1114,8 @@ input,
1089
1114
  }
1090
1115
 
1091
1116
  .tl-handle__fg {
1092
- fill: var(--color-selected-contrast);
1093
- stroke: var(--color-selection-stroke);
1117
+ fill: var(--tl-color-selected-contrast);
1118
+ stroke: var(--tl-color-selection-stroke);
1094
1119
  stroke-width: calc(1.5px * var(--tl-scale));
1095
1120
  pointer-events: none;
1096
1121
  }
@@ -1100,7 +1125,7 @@ input,
1100
1125
  }
1101
1126
 
1102
1127
  .tl-handle__clone > .tl-handle__fg {
1103
- fill: var(--color-selection-stroke);
1128
+ fill: var(--tl-color-selection-stroke);
1104
1129
  stroke: none;
1105
1130
  }
1106
1131
 
@@ -1110,7 +1135,7 @@ input,
1110
1135
 
1111
1136
  @media (pointer: coarse) {
1112
1137
  .tl-handle__bg:active {
1113
- fill: var(--color-selection-fill);
1138
+ fill: var(--tl-color-selection-fill);
1114
1139
  }
1115
1140
 
1116
1141
  .tl-handle__create {
@@ -1166,20 +1191,20 @@ input,
1166
1191
  stroke-linejoin: round;
1167
1192
  /* content-visibility: auto; */
1168
1193
  transform-origin: top left;
1169
- color: var(--color-text-1);
1194
+ color: var(--tl-color-text-1);
1170
1195
  }
1171
1196
 
1172
1197
  /* -------------------- Group shape ------------------ */
1173
1198
 
1174
1199
  .tl-group {
1175
- stroke: var(--color-text);
1200
+ stroke: var(--tl-color-text);
1176
1201
  stroke-width: calc(1px * var(--tl-scale));
1177
1202
  opacity: 0.5;
1178
1203
  }
1179
1204
 
1180
1205
  /* --------------------- Arrow shape -------------------- */
1181
1206
 
1182
- .tl-arrow-label {
1207
+ .tl-shape[data-shape-type='arrow'] .tl-text-label {
1183
1208
  position: absolute;
1184
1209
  top: -1px;
1185
1210
  left: -1px;
@@ -1190,56 +1215,38 @@ input,
1190
1215
  justify-content: center;
1191
1216
  align-items: center;
1192
1217
  text-align: center;
1193
- color: var(--color-text);
1218
+ color: var(--tl-color-text);
1194
1219
  text-shadow: var(--tl-text-outline);
1195
1220
  }
1196
1221
 
1197
- .tl-arrow-label[data-isediting='true'] p {
1198
- opacity: 0;
1199
- }
1200
-
1201
- .tl-arrow-label__inner {
1202
- border-radius: var(--radius-1);
1222
+ .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1223
+ border-radius: var(--tl-radius-1);
1203
1224
  box-sizing: content-box;
1204
- position: relative;
1205
1225
  height: max-content;
1206
1226
  width: max-content;
1207
- pointer-events: none;
1208
- display: flex;
1209
- justify-content: center;
1210
- align-items: center;
1211
1227
  }
1212
1228
 
1213
- .tl-arrow-label .tl-arrow {
1214
- position: relative;
1229
+ .tl-shape[data-shape-type='arrow'] .tl-text {
1215
1230
  height: max-content;
1216
- padding: inherit;
1217
- overflow: visible;
1218
- }
1219
-
1220
- .tl-arrow-label textarea {
1221
- padding: inherit;
1222
- /* Don't allow textarea to be zero width */
1223
- min-width: 4px;
1224
1231
  }
1225
1232
 
1226
1233
  .tl-arrow-hint {
1227
- stroke: var(--color-text-1);
1234
+ stroke: var(--tl-color-text-1);
1228
1235
  fill: none;
1229
1236
  stroke-linecap: round;
1230
1237
  overflow: visible;
1231
1238
  }
1232
1239
 
1233
1240
  .tl-arrow-hint-handle {
1234
- fill: var(--color-selected-contrast);
1235
- stroke: var(--color-selection-stroke);
1241
+ fill: var(--tl-color-selected-contrast);
1242
+ stroke: var(--tl-color-selection-stroke);
1236
1243
  stroke-width: calc(1.5px * var(--tl-scale));
1237
1244
  r: calc(4px * var(--tl-scale));
1238
1245
  }
1239
1246
 
1240
1247
  .tl-arrow-hint-snap {
1241
1248
  stroke: transparent;
1242
- fill: var(--color-selection-fill);
1249
+ fill: var(--tl-color-selection-fill);
1243
1250
  r: calc(12px * var(--tl-scale));
1244
1251
  }
1245
1252
 
@@ -1259,40 +1266,40 @@ input,
1259
1266
  width: 100%;
1260
1267
  height: 100%;
1261
1268
  position: relative;
1262
- border: 1px solid var(--color-panel-contrast);
1263
- background-color: var(--color-panel);
1264
- 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);
1265
1272
  display: flex;
1266
1273
  flex-direction: column;
1267
1274
  overflow: hidden;
1268
1275
  }
1269
1276
 
1270
1277
  .tl-bookmark__container--safariExport {
1271
- border: 1px solid var(--color-divider);
1278
+ border: 1px solid var(--tl-color-divider);
1272
1279
  }
1273
1280
 
1274
1281
  .tl-bookmark__image_container {
1275
1282
  flex: 1 1 100%;
1276
1283
  overflow: hidden;
1277
- border-top-left-radius: var(--radius-1);
1278
- 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);
1279
1286
  width: 100%;
1280
1287
  height: 100%;
1281
1288
  display: flex;
1282
1289
  justify-content: flex-end;
1283
1290
  align-items: flex-start;
1284
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1291
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1285
1292
  }
1286
1293
 
1287
1294
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1288
- background-color: var(--color-panel);
1295
+ background-color: var(--tl-color-panel);
1289
1296
  }
1290
1297
 
1291
1298
  .tl-bookmark__placeholder {
1292
1299
  width: 100%;
1293
1300
  height: 100%;
1294
- background-color: var(--color-muted-2);
1295
- 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);
1296
1303
  }
1297
1304
 
1298
1305
  .tl-bookmark__image {
@@ -1300,12 +1307,12 @@ input,
1300
1307
  height: 100%;
1301
1308
  object-fit: cover;
1302
1309
  object-position: center;
1303
- border-bottom: 1px solid var(--color-muted-2);
1310
+ border-bottom: 1px solid var(--tl-color-muted-2);
1304
1311
  }
1305
1312
 
1306
1313
  .tl-bookmark__copy_container {
1307
- background-color: var(--color-muted-0);
1308
- padding: var(--space-4);
1314
+ background-color: var(--tl-color-muted-0);
1315
+ padding: var(--tl-space-4);
1309
1316
  pointer-events: all;
1310
1317
  display: flex;
1311
1318
  flex-direction: column;
@@ -1325,7 +1332,7 @@ input,
1325
1332
  font-size: 16px;
1326
1333
  line-height: 1.6;
1327
1334
  font-weight: bold;
1328
- padding-bottom: var(--space-2);
1335
+ padding-bottom: var(--tl-space-2);
1329
1336
  overflow: hidden;
1330
1337
  max-height: calc((16px * 1.6) * 2);
1331
1338
  -webkit-box-orient: vertical;
@@ -1345,19 +1352,19 @@ input,
1345
1352
  line-clamp: 3;
1346
1353
  text-overflow: ellipsis;
1347
1354
  display: -webkit-box;
1348
- color: var(--color-text-2);
1349
- margin: var(--space-2) 0px;
1355
+ color: var(--tl-color-text-2);
1356
+ margin: var(--tl-space-2) 0px;
1350
1357
  }
1351
1358
 
1352
1359
  .tl-bookmark__heading + .tl-bookmark__link,
1353
1360
  .tl-bookmark__description + .tl-bookmark__link {
1354
- margin-top: var(--space-3);
1361
+ margin-top: var(--tl-space-3);
1355
1362
  }
1356
1363
  .tl-bookmark__link {
1357
1364
  font-size: 12px;
1358
1365
  pointer-events: all;
1359
1366
  display: flex;
1360
- color: var(--color-text-2);
1367
+ color: var(--tl-color-text-2);
1361
1368
  align-items: center;
1362
1369
  cursor: var(--tl-cursor-pointer);
1363
1370
  width: fit-content;
@@ -1399,7 +1406,7 @@ input,
1399
1406
  width: 100%;
1400
1407
  height: 100%;
1401
1408
  pointer-events: all;
1402
- /* background-color: var(--color-background); */
1409
+ /* background-color: var(--tl-color-background); */
1403
1410
 
1404
1411
  display: flex;
1405
1412
  justify-content: center;
@@ -1428,7 +1435,7 @@ input,
1428
1435
  height: 100%;
1429
1436
  pointer-events: all;
1430
1437
  opacity: 1;
1431
- z-index: var(--layer-text-container);
1438
+ z-index: var(--tl-layer-text-container);
1432
1439
  border-radius: 1px;
1433
1440
  }
1434
1441
 
@@ -1444,22 +1451,22 @@ input,
1444
1451
  }
1445
1452
 
1446
1453
  .tl-frame__creating {
1447
- stroke: var(--color-selected);
1454
+ stroke: var(--tl-color-selected);
1448
1455
  fill: none;
1449
1456
  }
1450
1457
 
1451
1458
  .tl-frame-heading {
1452
- --frame-padding-x: 6px;
1453
- --frame-height: 24px;
1454
- --frame-minimum-width: 32px;
1455
- --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;
1456
1463
  display: flex;
1457
1464
  align-items: center;
1458
1465
  position: absolute;
1459
1466
  transform-origin: 0% 100%;
1460
1467
  overflow: hidden;
1461
1468
  max-width: 100%;
1462
- min-width: var(--frame-minimum-width);
1469
+ min-width: var(--tl-frame-minimum-width);
1463
1470
  height: auto;
1464
1471
  font-size: 12px;
1465
1472
  padding-bottom: 4px;
@@ -1471,18 +1478,18 @@ input,
1471
1478
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1472
1479
  transform-origin: 0% 100%;
1473
1480
  display: flex;
1474
- height: var(--frame-height);
1481
+ height: var(--tl-frame-height);
1475
1482
  width: 100%;
1476
1483
  align-items: center;
1477
- border-radius: var(--radius-1);
1484
+ border-radius: var(--tl-radius-1);
1478
1485
  }
1479
1486
 
1480
1487
  .tl-frame-label {
1481
1488
  pointer-events: all;
1482
1489
  overflow: hidden;
1483
1490
  text-overflow: ellipsis;
1484
- padding: 0px var(--frame-padding-x);
1485
- border-radius: var(--radius-1);
1491
+ padding: 0px var(--tl-frame-padding-x);
1492
+ border-radius: var(--tl-radius-1);
1486
1493
  position: relative;
1487
1494
  font-size: inherit;
1488
1495
  white-space: pre;
@@ -1492,12 +1499,12 @@ input,
1492
1499
  color: transparent;
1493
1500
  white-space: pre;
1494
1501
  width: auto;
1495
- min-width: var(--frame-minimum-width);
1502
+ min-width: var(--tl-frame-minimum-width);
1496
1503
  height: 100%;
1497
1504
  overflow: visible;
1498
- background-color: var(--color-panel);
1499
- border-color: var(--color-selected);
1500
- 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);
1501
1508
  }
1502
1509
 
1503
1510
  .tl-frame-name-input {
@@ -1505,7 +1512,7 @@ input,
1505
1512
  border: none;
1506
1513
  background: none;
1507
1514
  outline: none;
1508
- padding: 0px var(--frame-padding-x);
1515
+ padding: 0px var(--tl-frame-padding-x);
1509
1516
  inset: 0px;
1510
1517
  height: 100%;
1511
1518
  width: 100%;
@@ -1513,8 +1520,8 @@ input,
1513
1520
  font-family: inherit;
1514
1521
  font-weight: inherit;
1515
1522
  width: 100%;
1516
- color: var(--color-text-1);
1517
- border-radius: var(--radius-1);
1523
+ color: var(--tl-color-text-1);
1524
+ border-radius: var(--tl-radius-1);
1518
1525
  user-select: all;
1519
1526
  -webkit-user-select: text;
1520
1527
  white-space: pre;
@@ -1534,7 +1541,7 @@ input,
1534
1541
 
1535
1542
  .tl-embed {
1536
1543
  border: none;
1537
- border-radius: var(--radius-2);
1544
+ border-radius: var(--tl-radius-2);
1538
1545
  }
1539
1546
 
1540
1547
  /* -------------- Shape error boundary -------------- */
@@ -1542,11 +1549,11 @@ input,
1542
1549
  .tl-shape-error-boundary {
1543
1550
  width: 100%;
1544
1551
  height: 100%;
1545
- background-color: var(--color-muted-1);
1552
+ background-color: var(--tl-color-muted-1);
1546
1553
  border-width: calc(1px * var(--tl-scale));
1547
- border-color: var(--color-muted-1);
1554
+ border-color: var(--tl-color-muted-1);
1548
1555
  border-style: solid;
1549
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1556
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1550
1557
  display: flex;
1551
1558
  flex-direction: column;
1552
1559
  align-items: center;
@@ -1555,7 +1562,7 @@ input,
1555
1562
  position: relative;
1556
1563
  pointer-events: all;
1557
1564
  overflow: hidden;
1558
- padding: var(--space-2);
1565
+ padding: var(--tl-space-2);
1559
1566
  }
1560
1567
 
1561
1568
  .tl-shape-error-boundary::before {
@@ -1563,7 +1570,7 @@ input,
1563
1570
  content: 'Error';
1564
1571
  font-size: 12px;
1565
1572
  font-family: inherit;
1566
- color: var(--color-text-0);
1573
+ color: var(--tl-color-text-0);
1567
1574
  }
1568
1575
 
1569
1576
  /* ----------------- Error boundary ----------------- */
@@ -1574,9 +1581,9 @@ input,
1574
1581
  display: flex;
1575
1582
  align-items: center;
1576
1583
  justify-content: center;
1577
- padding: var(--space-4);
1578
- background-color: var(--color-background);
1579
- 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);
1580
1587
  position: absolute;
1581
1588
  }
1582
1589
 
@@ -1585,8 +1592,8 @@ input,
1585
1592
  inset: 0px;
1586
1593
  height: 100%;
1587
1594
  width: 100%;
1588
- z-index: var(--layer-error-overlay);
1589
- background-color: var(--color-overlay);
1595
+ z-index: var(--tl-layer-error-overlay);
1596
+ background-color: var(--tl-color-overlay);
1590
1597
  }
1591
1598
 
1592
1599
  .tl-error-boundary__content * {
@@ -1601,7 +1608,7 @@ input,
1601
1608
  inset: 0px;
1602
1609
  height: 100%;
1603
1610
  width: 100%;
1604
- z-index: var(--layer-error-canvas);
1611
+ z-index: var(--tl-layer-error-canvas);
1605
1612
  }
1606
1613
 
1607
1614
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1614,7 +1621,7 @@ it from receiving any pointer events or affecting the cursor. */
1614
1621
  inset: 0px;
1615
1622
  height: 100%;
1616
1623
  width: 100%;
1617
- z-index: var(--layer-error-canvas-after);
1624
+ z-index: var(--tl-layer-error-canvas-after);
1618
1625
  pointer-events: all;
1619
1626
  }
1620
1627
 
@@ -1624,16 +1631,16 @@ it from receiving any pointer events or affecting the cursor. */
1624
1631
  max-width: 100%;
1625
1632
  width: 400px;
1626
1633
  max-height: 100%;
1627
- background-color: var(--color-panel);
1634
+ background-color: var(--tl-color-panel);
1628
1635
  padding: 16px;
1629
1636
  border-radius: 16px;
1630
- box-shadow: var(--shadow-2);
1637
+ box-shadow: var(--tl-shadow-2);
1631
1638
  font-size: 14px;
1632
1639
  font-weight: 400;
1633
1640
  display: flex;
1634
1641
  flex-direction: column;
1635
1642
  overflow: auto;
1636
- z-index: var(--layer-error-content);
1643
+ z-index: var(--tl-layer-error-content);
1637
1644
  gap: 12px;
1638
1645
  }
1639
1646
 
@@ -1648,10 +1655,10 @@ it from receiving any pointer events or affecting the cursor. */
1648
1655
  }
1649
1656
 
1650
1657
  .tl-error-boundary__content h4 {
1651
- border: 1px solid var(--color-low-border);
1658
+ border: 1px solid var(--tl-color-low-border);
1652
1659
  margin: -6px 0 0 0;
1653
- padding: var(--space-5);
1654
- border-radius: var(--radius-2);
1660
+ padding: var(--tl-space-5);
1661
+ border-radius: var(--tl-radius-2);
1655
1662
  font-weight: normal;
1656
1663
  }
1657
1664
 
@@ -1661,10 +1668,10 @@ it from receiving any pointer events or affecting the cursor. */
1661
1668
  }
1662
1669
 
1663
1670
  .tl-error-boundary__content pre {
1664
- background-color: var(--color-muted-2);
1671
+ background-color: var(--tl-color-muted-2);
1665
1672
  margin-top: 0;
1666
- padding: var(--space-5);
1667
- border-radius: var(--radius-2);
1673
+ padding: var(--tl-space-5);
1674
+ border-radius: var(--tl-radius-2);
1668
1675
  overflow: auto;
1669
1676
  font-size: 12px;
1670
1677
  max-height: 320px;
@@ -1676,15 +1683,15 @@ it from receiving any pointer events or affecting the cursor. */
1676
1683
  font-family: inherit;
1677
1684
  font-size: 14px;
1678
1685
  font-weight: 500;
1679
- padding: var(--space-4);
1680
- border-radius: var(--radius-3);
1686
+ padding: var(--tl-space-4);
1687
+ border-radius: var(--tl-radius-3);
1681
1688
  cursor: var(--tl-cursor-pointer);
1682
1689
  color: inherit;
1683
1690
  background-color: transparent;
1684
1691
  }
1685
1692
 
1686
1693
  .tl-error-boundary__content a {
1687
- color: var(--color-selected);
1694
+ color: var(--tl-color-selected);
1688
1695
  font-weight: 500;
1689
1696
  text-decoration: none;
1690
1697
  }
@@ -1696,31 +1703,31 @@ it from receiving any pointer events or affecting the cursor. */
1696
1703
 
1697
1704
  .tl-error-boundary__content__error button {
1698
1705
  position: absolute;
1699
- top: var(--space-2);
1700
- right: var(--space-2);
1706
+ top: var(--tl-space-2);
1707
+ right: var(--tl-space-2);
1701
1708
  font-size: 12px;
1702
- padding: var(--space-2) var(--space-3);
1703
- background-color: var(--color-panel);
1704
- 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);
1705
1712
  }
1706
1713
 
1707
1714
  .tl-error-boundary__content__actions {
1708
1715
  display: flex;
1709
1716
  justify-content: space-between;
1710
- gap: var(--space-4);
1717
+ gap: var(--tl-space-4);
1711
1718
  margin: 0px;
1712
1719
  margin-left: -4px;
1713
1720
  }
1714
1721
  .tl-error-boundary__content__actions__group {
1715
1722
  display: flex;
1716
- gap: var(--space-4);
1723
+ gap: var(--tl-space-4);
1717
1724
  }
1718
1725
  .tl-error-boundary__content .tl-error-boundary__reset {
1719
- color: var(--color-danger);
1726
+ color: var(--tl-color-danger);
1720
1727
  }
1721
1728
  .tl-error-boundary__content .tl-error-boundary__refresh {
1722
- background-color: var(--color-primary);
1723
- color: var(--color-selected-contrast);
1729
+ background-color: var(--tl-color-primary);
1730
+ color: var(--tl-color-selected-contrast);
1724
1731
  }
1725
1732
  .tl-container__focused:not(.tl-container__no-focus-ring)
1726
1733
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1732,7 +1739,7 @@ it from receiving any pointer events or affecting the cursor. */
1732
1739
 
1733
1740
  .tl-hit-test-blocker {
1734
1741
  position: absolute;
1735
- z-index: var(--layer-canvas-blocker);
1742
+ z-index: var(--tl-layer-canvas-blocker);
1736
1743
  inset: 0px;
1737
1744
  width: 100%;
1738
1745
  height: 100%;
@@ -1752,32 +1759,32 @@ it from receiving any pointer events or affecting the cursor. */
1752
1759
 
1753
1760
  .tl-handle__bg:hover {
1754
1761
  cursor: var(--tl-cursor-grab);
1755
- fill: var(--color-selection-fill);
1762
+ fill: var(--tl-color-selection-fill);
1756
1763
  }
1757
1764
 
1758
1765
  .tl-bookmark__link:hover {
1759
- color: var(--color-selected);
1766
+ color: var(--tl-color-selected);
1760
1767
  }
1761
1768
 
1762
1769
  .tl-hyperlink-button:hover {
1763
- color: var(--color-selected);
1770
+ color: var(--tl-color-selected);
1764
1771
  }
1765
1772
 
1766
1773
  .tl-error-boundary__content button:hover {
1767
- background-color: var(--color-low);
1774
+ background-color: var(--tl-color-low);
1768
1775
  }
1769
1776
  .tl-error-boundary__content a:hover {
1770
- color: var(--color-text-1);
1777
+ color: var(--tl-color-text-1);
1771
1778
  }
1772
1779
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1773
- background-color: var(--color-primary);
1780
+ background-color: var(--tl-color-primary);
1774
1781
  opacity: 0.9;
1775
1782
  }
1776
1783
 
1777
1784
  /* These three rules help preserve clicking into specific points in text areas *while*
1778
1785
  * already in edit mode when jumping from shape to shape. */
1779
1786
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1780
- z-index: var(--layer-text-editor);
1787
+ z-index: var(--tl-layer-text-editor);
1781
1788
  pointer-events: all;
1782
1789
  }
1783
1790
  }
@@ -1785,15 +1792,15 @@ it from receiving any pointer events or affecting the cursor. */
1785
1792
  /* @tldraw/ui */
1786
1793
 
1787
1794
  .tl-container {
1788
- --layer-above: 1;
1789
- --layer-focused-input: 10;
1790
- --layer-menu-click-capture: 250;
1791
- --layer-panels: 300;
1792
- --layer-menus: 400;
1793
- --layer-toasts: 650;
1794
- --layer-cursor: 700;
1795
- --layer-header-footer: 999;
1796
- --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;
1797
1804
  }
1798
1805
 
1799
1806
  /* Button */
@@ -1817,23 +1824,23 @@ it from receiving any pointer events or affecting the cursor. */
1817
1824
  text-rendering: optimizeLegibility;
1818
1825
  font-size: 12px;
1819
1826
  gap: 0px;
1820
- color: var(--color-text-1);
1827
+ color: var(--tl-color-text-1);
1821
1828
  z-index: 0;
1822
1829
  }
1823
1830
 
1824
1831
  .tlui-button:disabled {
1825
- color: var(--color-text-3);
1832
+ color: var(--tl-color-text-3);
1826
1833
  text-shadow: none;
1827
1834
  cursor: default;
1828
1835
  }
1829
1836
 
1830
1837
  .tlui-button:disabled .tlui-kbd {
1831
- color: var(--color-text-3);
1838
+ color: var(--tl-color-text-3);
1832
1839
  }
1833
1840
 
1834
1841
  .tlui-button > * {
1835
1842
  position: relative;
1836
- z-index: var(--layer-above);
1843
+ z-index: var(--tl-layer-above);
1837
1844
  }
1838
1845
 
1839
1846
  .tlui-button__label {
@@ -1849,7 +1856,7 @@ it from receiving any pointer events or affecting the cursor. */
1849
1856
  */
1850
1857
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button:focus-visible {
1851
1858
  border-radius: 10px;
1852
- outline: 2px solid var(--color-focus);
1859
+ outline: 2px solid var(--tl-color-focus);
1853
1860
  outline-offset: -5px;
1854
1861
  }
1855
1862
  .tl-container__focused:not(.tl-container__no-focus-ring) .tlui-button__tool:focus-visible {
@@ -1857,7 +1864,7 @@ it from receiving any pointer events or affecting the cursor. */
1857
1864
  }
1858
1865
  .tlui-slider__container:has(.tlui-slider__thumb:focus-visible) {
1859
1866
  border-radius: 10px;
1860
- outline: 2px solid var(--color-focus);
1867
+ outline: 2px solid var(--tl-color-focus);
1861
1868
  outline-offset: -5px;
1862
1869
  }
1863
1870
 
@@ -1866,8 +1873,8 @@ it from receiving any pointer events or affecting the cursor. */
1866
1873
  content: '';
1867
1874
  position: absolute;
1868
1875
  inset: 4px;
1869
- border-radius: var(--radius-2);
1870
- background: var(--color-muted-2);
1876
+ border-radius: var(--tl-radius-2);
1877
+ background: var(--tl-color-muted-2);
1871
1878
  opacity: 0;
1872
1879
  }
1873
1880
 
@@ -1877,18 +1884,18 @@ it from receiving any pointer events or affecting the cursor. */
1877
1884
 
1878
1885
  .tlui-button[data-isactive='true']::after,
1879
1886
  .tlui-button[data-isactive='true']:not(:disabled, :focus-visible):active:after {
1880
- background: var(--color-hint);
1887
+ background: var(--tl-color-hint);
1881
1888
  opacity: 1;
1882
1889
  }
1883
1890
 
1884
- .tlui-button[aria-expanded='true'][data-direction='left']::after {
1885
- 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%);
1886
1893
  opacity: 1;
1887
1894
  }
1888
1895
 
1889
1896
  @media (hover: hover) {
1890
1897
  .tlui-button[aria-expanded='true'][data-direction='left']:not(:hover)::after {
1891
- 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%);
1892
1899
  opacity: 1;
1893
1900
  }
1894
1901
 
@@ -1902,18 +1909,18 @@ it from receiving any pointer events or affecting the cursor. */
1902
1909
  }
1903
1910
 
1904
1911
  .tlui-button__icon + .tlui-button__label {
1905
- margin-left: var(--space-2);
1912
+ margin-left: var(--tl-space-2);
1906
1913
  }
1907
1914
 
1908
1915
  /* Low button */
1909
1916
 
1910
1917
  .tlui-button__low {
1911
- border-radius: var(--radius-3);
1912
- background-color: var(--color-low);
1918
+ border-radius: var(--tl-radius-3);
1919
+ background-color: var(--tl-color-low);
1913
1920
  }
1914
1921
 
1915
1922
  .tlui-button__low::after {
1916
- background-color: var(--color-muted-2);
1923
+ background-color: var(--tl-color-muted-2);
1917
1924
  opacity: 0;
1918
1925
  }
1919
1926
 
@@ -1926,31 +1933,25 @@ it from receiving any pointer events or affecting the cursor. */
1926
1933
  /* Primary / danger buttons */
1927
1934
 
1928
1935
  .tlui-button__primary {
1929
- color: var(--color-primary);
1936
+ color: var(--tl-color-primary);
1930
1937
  }
1931
1938
 
1932
1939
  .tlui-button__danger {
1933
- color: var(--color-danger);
1940
+ color: var(--tl-color-danger);
1934
1941
  text-shadow: none;
1935
1942
  }
1936
1943
 
1937
1944
  @media (hover: hover) {
1938
1945
  .tlui-button__primary:not(:disabled, :focus-visible):hover {
1939
- color: var(--color-primary);
1946
+ color: var(--tl-color-primary);
1940
1947
  }
1941
1948
 
1942
1949
  .tlui-button__danger:not(:disabled, :focus-visible):hover {
1943
- color: var(--color-danger);
1950
+ color: var(--tl-color-danger);
1944
1951
  text-shadow: none;
1945
1952
  }
1946
1953
  }
1947
1954
 
1948
- /* Panel button */
1949
-
1950
- .tlui-button__panel {
1951
- position: relative;
1952
- }
1953
-
1954
1955
  /* Menu button */
1955
1956
 
1956
1957
  .tlui-button__menu {
@@ -1963,7 +1964,7 @@ it from receiving any pointer events or affecting the cursor. */
1963
1964
 
1964
1965
  .tlui-button__menu::after {
1965
1966
  inset: 4px;
1966
- border-radius: var(--radius-2);
1967
+ border-radius: var(--tl-radius-2);
1967
1968
  }
1968
1969
 
1969
1970
  .tlui-button__menu > .tlui-icon + .tlui-button__label {
@@ -1991,18 +1992,26 @@ it from receiving any pointer events or affecting the cursor. */
1991
1992
 
1992
1993
  /* Tool lock button */
1993
1994
 
1994
- .tlui-toolbar__lock-button {
1995
+ .tlui-main-toolbar__lock-button {
1995
1996
  position: absolute;
1996
- top: 4px;
1997
- right: 0px;
1998
1997
  pointer-events: all;
1999
1998
  height: 40px;
2000
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;
2001
2006
  min-width: 0px;
2002
- border-radius: var(--radius-2);
2003
2007
  }
2004
2008
 
2005
- .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 {
2006
2015
  top: 4px;
2007
2016
  left: 8px;
2008
2017
  inset: 4px;
@@ -2014,16 +2023,6 @@ it from receiving any pointer events or affecting the cursor. */
2014
2023
  position: relative;
2015
2024
  height: 48px;
2016
2025
  width: 48px;
2017
- margin-left: -2px;
2018
- margin-right: -2px;
2019
- }
2020
-
2021
- .tlui-button__tool:nth-of-type(1) {
2022
- margin-left: 0px;
2023
- }
2024
-
2025
- .tlui-button__tool:nth-last-of-type(1) {
2026
- margin-right: 0px;
2027
2026
  }
2028
2027
 
2029
2028
  .tlui-button__tool::after {
@@ -2032,69 +2031,64 @@ it from receiving any pointer events or affecting the cursor. */
2032
2031
  }
2033
2032
 
2034
2033
  .tlui-button__tool[aria-pressed='true'] {
2035
- color: var(--color-selected-contrast);
2034
+ color: var(--tl-color-selected-contrast);
2036
2035
  }
2037
2036
 
2038
2037
  .tlui-button__tool[aria-pressed='true']:not(:disabled, :focus-visible):active {
2039
- color: var(--color-selected-contrast);
2038
+ color: var(--tl-color-selected-contrast);
2040
2039
  }
2041
2040
 
2042
2041
  .tlui-button__tool[aria-pressed='true']:not(:disabled)::after {
2043
- background: var(--color-selected);
2042
+ background: var(--tl-color-selected);
2044
2043
  opacity: 1;
2045
2044
  }
2046
2045
 
2047
- .tlui-layout__mobile .tlui-button__tool {
2046
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool {
2048
2047
  height: 48px;
2049
2048
  width: 43px;
2050
2049
  }
2051
2050
 
2052
- .tlui-layout__mobile .tlui-button__tool > .tlui-icon {
2051
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-button__tool > .tlui-icon {
2053
2052
  height: 16px;
2054
2053
  width: 16px;
2055
2054
  }
2056
2055
 
2057
- /* Button Row */
2056
+ /* Row layout */
2058
2057
 
2059
- .tlui-buttons__horizontal {
2058
+ .tlui-row {
2060
2059
  display: flex;
2061
2060
  flex-direction: row;
2061
+ padding: 0 2px;
2062
2062
  }
2063
- .tlui-buttons__horizontal > * {
2063
+ .tlui-row > * {
2064
2064
  margin-left: -2px;
2065
2065
  margin-right: -2px;
2066
2066
  }
2067
- .tlui-buttons__horizontal > *:nth-child(1) {
2068
- margin-left: 0px;
2067
+
2068
+ /* Column layout */
2069
+
2070
+ .tlui-column {
2071
+ display: flex;
2072
+ flex-direction: column;
2073
+ padding: 2px 0;
2069
2074
  }
2070
- .tlui-buttons__horizontal > *:nth-last-child(1) {
2071
- margin-right: 0px;
2075
+ .tlui-column > * {
2076
+ margin-top: -2px;
2077
+ margin-bottom: -2px;
2072
2078
  }
2073
2079
 
2074
- /* Button Grid */
2080
+ /* Grid layout */
2075
2081
 
2076
- .tlui-buttons__grid {
2082
+ .tlui-grid {
2077
2083
  display: grid;
2078
- grid-template-columns: repeat(4, auto);
2084
+ grid-template-columns: repeat(4, 1fr);
2079
2085
  grid-auto-flow: row;
2080
2086
  overflow: hidden;
2087
+ padding: 2px;
2081
2088
  }
2082
- .tlui-buttons__grid > .tlui-button {
2089
+ .tlui-grid > * {
2083
2090
  margin: -2px;
2084
2091
  }
2085
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n),
2086
- .tlui-buttons__vertical-align > .tlui-button:nth-of-type(3n) {
2087
- margin-right: 0px;
2088
- }
2089
- .tlui-buttons__grid > .tlui-button:nth-of-type(4n - 3) {
2090
- margin-left: 0px;
2091
- }
2092
- .tlui-buttons__grid > .tlui-button:nth-of-type(-n + 4) {
2093
- margin-top: 0px;
2094
- }
2095
- .tlui-buttons__grid > .tlui-button:nth-last-of-type(-n + 4) {
2096
- margin-bottom: 0px;
2097
- }
2098
2092
 
2099
2093
  /* Zoom button */
2100
2094
 
@@ -2118,9 +2112,9 @@ it from receiving any pointer events or affecting the cursor. */
2118
2112
  pointer-events: none;
2119
2113
  user-select: none;
2120
2114
  contain: strict;
2121
- z-index: var(--layer-panels);
2115
+ z-index: var(--tl-layer-panels);
2122
2116
  transform: translate3d(0, 0, 0);
2123
- --sab: env(safe-area-inset-bottom);
2117
+ --tl-sab: env(safe-area-inset-bottom);
2124
2118
  font-weight: 500;
2125
2119
  line-height: 1.6;
2126
2120
  -webkit-font-smoothing: antialiased;
@@ -2173,11 +2167,11 @@ it from receiving any pointer events or affecting the cursor. */
2173
2167
  justify-content: flex-start;
2174
2168
  align-items: flex-start;
2175
2169
  width: min-content;
2176
- gap: var(--space-3);
2177
- margin: var(--space-2) var(--space-3);
2170
+ gap: var(--tl-space-3);
2171
+ margin: var(--tl-space-2) var(--tl-space-3);
2178
2172
  white-space: nowrap;
2179
2173
  pointer-events: none;
2180
- z-index: var(--layer-panels);
2174
+ z-index: var(--tl-layer-panels);
2181
2175
  }
2182
2176
 
2183
2177
  /* ---------------------- Icon ---------------------- */
@@ -2205,7 +2199,7 @@ it from receiving any pointer events or affecting the cursor. */
2205
2199
 
2206
2200
  .tlui-slider__container {
2207
2201
  width: 100%;
2208
- padding: 0px var(--space-4);
2202
+ padding: 0px var(--tl-space-4);
2209
2203
  }
2210
2204
 
2211
2205
  .tlui-slider {
@@ -2231,7 +2225,7 @@ it from receiving any pointer events or affecting the cursor. */
2231
2225
  content: '';
2232
2226
  height: 3px;
2233
2227
  width: 100%;
2234
- background-color: var(--color-muted-1);
2228
+ background-color: var(--tl-color-muted-1);
2235
2229
  border-radius: 14px;
2236
2230
  }
2237
2231
 
@@ -2240,7 +2234,7 @@ it from receiving any pointer events or affecting the cursor. */
2240
2234
  top: calc(50% - 2px);
2241
2235
  left: 0px;
2242
2236
  height: 3px;
2243
- background-color: var(--color-selected);
2237
+ background-color: var(--tl-color-selected);
2244
2238
  border-radius: 14px;
2245
2239
  }
2246
2240
 
@@ -2252,16 +2246,16 @@ it from receiving any pointer events or affecting the cursor. */
2252
2246
  height: 18px;
2253
2247
  position: relative;
2254
2248
  top: -1px;
2255
- background-color: var(--color-panel);
2249
+ background-color: var(--tl-color-panel);
2256
2250
  border-radius: 999px;
2257
- box-shadow: inset 0px 0px 0px 2px var(--color-text-1);
2251
+ box-shadow: inset 0px 0px 0px 2px var(--tl-color-text-1);
2258
2252
  }
2259
2253
 
2260
2254
  .tlui-slider__thumb:active {
2261
2255
  cursor: grabbing;
2262
2256
  box-shadow:
2263
- inset 0px 0px 0px 2px var(--color-text-1),
2264
- var(--shadow-1);
2257
+ inset 0px 0px 0px 2px var(--tl-color-text-1),
2258
+ var(--tl-shadow-1);
2265
2259
  }
2266
2260
 
2267
2261
  /* ---------------------- Input --------------------- */
@@ -2270,7 +2264,7 @@ it from receiving any pointer events or affecting the cursor. */
2270
2264
  background: none;
2271
2265
  margin: 0px;
2272
2266
  position: relative;
2273
- z-index: var(--layer-above);
2267
+ z-index: var(--tl-layer-above);
2274
2268
  height: 40px;
2275
2269
  max-height: 40px;
2276
2270
  display: flex;
@@ -2279,8 +2273,8 @@ it from receiving any pointer events or affecting the cursor. */
2279
2273
  font-family: inherit;
2280
2274
  font-size: 12px;
2281
2275
  font-weight: inherit;
2282
- color: var(--color-text-1);
2283
- padding: var(--space-4);
2276
+ color: var(--tl-color-text-1);
2277
+ padding: var(--tl-space-4);
2284
2278
  padding-left: 0px;
2285
2279
  border: none;
2286
2280
  outline: none;
@@ -2296,8 +2290,8 @@ it from receiving any pointer events or affecting the cursor. */
2296
2290
  height: 44px;
2297
2291
  display: flex;
2298
2292
  align-items: center;
2299
- gap: var(--space-4);
2300
- color: var(--color-text);
2293
+ gap: var(--tl-space-4);
2294
+ color: var(--tl-color-text);
2301
2295
  }
2302
2296
 
2303
2297
  .tlui-input__wrapper > .tlui-icon {
@@ -2329,7 +2323,7 @@ it from receiving any pointer events or affecting the cursor. */
2329
2323
  grid-auto-columns: minmax(1em, auto);
2330
2324
  align-self: bottom;
2331
2325
  color: currentColor;
2332
- margin-left: var(--space-4);
2326
+ margin-left: var(--tl-space-4);
2333
2327
  }
2334
2328
 
2335
2329
  .tlui-kbd > span {
@@ -2346,13 +2340,13 @@ it from receiving any pointer events or affecting the cursor. */
2346
2340
  }
2347
2341
 
2348
2342
  .tlui-kbd:not(:last-child) {
2349
- margin-right: var(--space-2);
2343
+ margin-right: var(--tl-space-2);
2350
2344
  }
2351
2345
 
2352
2346
  /* Focus Mode Button */
2353
2347
 
2354
2348
  .tlui-focus-button {
2355
- z-index: var(--layer-panels);
2349
+ z-index: var(--tl-layer-panels);
2356
2350
  pointer-events: all;
2357
2351
  }
2358
2352
 
@@ -2363,16 +2357,16 @@ it from receiving any pointer events or affecting the cursor. */
2363
2357
  }
2364
2358
 
2365
2359
  .tlui-menu {
2366
- z-index: var(--layer-menus);
2360
+ z-index: var(--tl-layer-menus);
2367
2361
  height: fit-content;
2368
2362
  width: fit-content;
2369
- border-radius: var(--radius-3);
2363
+ border-radius: var(--tl-radius-3);
2370
2364
  pointer-events: all;
2371
2365
  touch-action: auto;
2372
2366
  overflow-y: auto;
2373
2367
  overscroll-behavior: none;
2374
- background-color: var(--color-panel);
2375
- box-shadow: var(--shadow-3);
2368
+ background-color: var(--tl-color-panel);
2369
+ box-shadow: var(--tl-shadow-3);
2376
2370
  }
2377
2371
 
2378
2372
  .tlui-menu::-webkit-scrollbar {
@@ -2390,7 +2384,7 @@ it from receiving any pointer events or affecting the cursor. */
2390
2384
  }
2391
2385
 
2392
2386
  .tlui-menu__group {
2393
- border-bottom: 1px solid var(--color-divider);
2387
+ border-bottom: 1px solid var(--tl-color-divider);
2394
2388
  }
2395
2389
  .tlui-menu__group:nth-last-of-type(1) {
2396
2390
  border-bottom: none;
@@ -2400,23 +2394,23 @@ it from receiving any pointer events or affecting the cursor. */
2400
2394
 
2401
2395
  .tlui-menu__submenu__trigger[data-state='open']::after {
2402
2396
  opacity: 1;
2403
- 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%);
2404
2398
  }
2405
2399
 
2406
2400
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']::after {
2407
2401
  opacity: 1;
2408
- 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%);
2409
2403
  }
2410
2404
 
2411
2405
  @media (hover: hover) {
2412
2406
  .tlui-menu__submenu__trigger[data-state='open']:not(:hover)::after {
2413
2407
  opacity: 1;
2414
- 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%);
2415
2409
  }
2416
2410
 
2417
2411
  .tlui-menu__submenu__trigger[data-direction='left'][data-state='open']:not(:hover)::after {
2418
2412
  opacity: 1;
2419
- 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%);
2420
2414
  }
2421
2415
  }
2422
2416
 
@@ -2441,7 +2435,7 @@ it from receiving any pointer events or affecting the cursor. */
2441
2435
  .tlui-menu-click-capture {
2442
2436
  position: fixed;
2443
2437
  inset: 0;
2444
- z-index: var(--layer-menu-click-capture);
2438
+ z-index: var(--tl-layer-menu-click-capture);
2445
2439
  }
2446
2440
 
2447
2441
  /* --------------------- Popover -------------------- */
@@ -2457,10 +2451,10 @@ it from receiving any pointer events or affecting the cursor. */
2457
2451
  max-height: calc(var(--radix-popover-content-available-height) - 8px);
2458
2452
  margin: 0px;
2459
2453
  border: none;
2460
- border-radius: var(--radius-3);
2461
- background-color: var(--color-panel);
2462
- box-shadow: var(--shadow-3);
2463
- 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);
2464
2458
  overflow: hidden;
2465
2459
  overflow-y: auto;
2466
2460
  touch-action: auto;
@@ -2473,22 +2467,22 @@ it from receiving any pointer events or affecting the cursor. */
2473
2467
 
2474
2468
  .tlui-menu-zone {
2475
2469
  position: relative;
2476
- z-index: var(--layer-panels);
2470
+ z-index: var(--tl-layer-panels);
2477
2471
  width: fit-content;
2478
- border-right: 2px solid var(--color-background);
2479
- border-bottom: 2px solid var(--color-background);
2480
- border-bottom-right-radius: var(--radius-4);
2481
- 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);
2482
2476
  }
2483
2477
 
2484
2478
  .tlui-menu-zone *[data-state='open']::after {
2485
- 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%);
2486
2480
  opacity: 1;
2487
2481
  }
2488
2482
 
2489
2483
  @media (hover: hover) {
2490
2484
  .tlui-menu-zone *[data-state='open']:not(:hover)::after {
2491
- 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%);
2492
2486
  opacity: 1;
2493
2487
  }
2494
2488
  }
@@ -2514,8 +2508,8 @@ it from receiving any pointer events or affecting the cursor. */
2514
2508
  align-items: center;
2515
2509
  width: 100%;
2516
2510
  height: 40px;
2517
- padding-left: var(--space-4);
2518
- border-bottom: 1px solid var(--color-divider);
2511
+ padding-left: var(--tl-space-4);
2512
+ border-bottom: 1px solid var(--tl-color-divider);
2519
2513
  }
2520
2514
 
2521
2515
  .tlui-page-menu__header > .tlui-button:nth-of-type(1) {
@@ -2523,7 +2517,7 @@ it from receiving any pointer events or affecting the cursor. */
2523
2517
  }
2524
2518
 
2525
2519
  .tlui-page-menu__header__title {
2526
- color: var(--color-text);
2520
+ color: var(--tl-color-text);
2527
2521
  font-size: 12px;
2528
2522
  flex-grow: 2;
2529
2523
  }
@@ -2608,7 +2602,7 @@ it from receiving any pointer events or affecting the cursor. */
2608
2602
  display: inline-flex;
2609
2603
  align-items: center;
2610
2604
  justify-content: center;
2611
- color: var(--color-text);
2605
+ color: var(--tl-color-text);
2612
2606
  }
2613
2607
 
2614
2608
  .tlui-page_menu__item__sortable {
@@ -2621,7 +2615,7 @@ it from receiving any pointer events or affecting the cursor. */
2621
2615
  flex-direction: row;
2622
2616
  align-items: center;
2623
2617
  overflow: hidden;
2624
- z-index: var(--layer-above);
2618
+ z-index: var(--tl-layer-above);
2625
2619
  }
2626
2620
 
2627
2621
  .tlui-page_menu__item__sortable__title {
@@ -2633,7 +2627,7 @@ it from receiving any pointer events or affecting the cursor. */
2633
2627
  }
2634
2628
 
2635
2629
  .tlui-page_menu__item__sortable:focus-visible {
2636
- z-index: var(--layer-focused-input);
2630
+ z-index: var(--tl-layer-focused-input);
2637
2631
  }
2638
2632
 
2639
2633
  .tlui-page_menu__item__sortable__handle {
@@ -2642,7 +2636,7 @@ it from receiving any pointer events or affecting the cursor. */
2642
2636
  min-width: 0px;
2643
2637
  height: 40px;
2644
2638
  cursor: grab;
2645
- color: var(--color-text-3);
2639
+ color: var(--tl-color-text-3);
2646
2640
  flex-shrink: 0;
2647
2641
  margin-right: -9px;
2648
2642
  }
@@ -2684,13 +2678,13 @@ it from receiving any pointer events or affecting the cursor. */
2684
2678
  }
2685
2679
 
2686
2680
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']::after {
2687
- 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%);
2688
2682
  opacity: 1;
2689
2683
  }
2690
2684
 
2691
2685
  @media (hover: hover) {
2692
2686
  .tlui-page_menu__item__submenu > .tlui-button[data-state='open']:not(:hover)::after {
2693
- 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%);
2694
2688
  opacity: 1;
2695
2689
  }
2696
2690
  }
@@ -2726,7 +2720,7 @@ it from receiving any pointer events or affecting the cursor. */
2726
2720
  top: 48px;
2727
2721
  left: -9999px;
2728
2722
  padding: 8px 16px;
2729
- z-index: var(--layer-toasts);
2723
+ z-index: var(--tl-layer-toasts);
2730
2724
  }
2731
2725
 
2732
2726
  .tl-skip-to-main-content:focus {
@@ -2738,17 +2732,17 @@ it from receiving any pointer events or affecting the cursor. */
2738
2732
  .tlui-offline-indicator {
2739
2733
  display: flex;
2740
2734
  flex-direction: row;
2741
- gap: var(--space-3);
2742
- color: var(--color-text);
2743
- background-color: var(--color-low);
2744
- border: 3px solid var(--color-background);
2745
- 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);
2746
2740
  height: 42px;
2747
2741
  align-items: center;
2748
2742
  justify-content: center;
2749
2743
  border-radius: 99px;
2750
2744
  opacity: 0;
2751
- animation: fade-in;
2745
+ animation: tl-fade-in;
2752
2746
  animation-duration: 0.12s;
2753
2747
  animation-delay: 2s;
2754
2748
  animation-fill-mode: forwards;
@@ -2757,10 +2751,10 @@ it from receiving any pointer events or affecting the cursor. */
2757
2751
  /* ------------------- Style panel ------------------ */
2758
2752
 
2759
2753
  .tlui-style-panel__wrapper {
2760
- box-shadow: var(--shadow-2);
2761
- border-radius: var(--radius-3);
2754
+ box-shadow: var(--tl-shadow-2);
2755
+ border-radius: var(--tl-radius-3);
2762
2756
  pointer-events: all;
2763
- background-color: var(--color-panel);
2757
+ background-color: var(--tl-color-panel);
2764
2758
  height: fit-content;
2765
2759
  max-height: 100%;
2766
2760
  margin: 8px;
@@ -2769,7 +2763,7 @@ it from receiving any pointer events or affecting the cursor. */
2769
2763
  overscroll-behavior: none;
2770
2764
  overflow-y: auto;
2771
2765
  overflow-x: hidden;
2772
- color: var(--color-text);
2766
+ color: var(--tl-color-text);
2773
2767
  }
2774
2768
  /* if the style panel is the only child (ie no share menu), increase the margin */
2775
2769
  .tlui-style-panel__wrapper:only-child {
@@ -2778,12 +2772,18 @@ it from receiving any pointer events or affecting the cursor. */
2778
2772
 
2779
2773
  .tlui-style-panel {
2780
2774
  position: relative;
2781
- z-index: var(--layer-panels);
2775
+ z-index: var(--tl-layer-panels);
2782
2776
  pointer-events: all;
2783
2777
  width: 148px;
2784
2778
  max-width: 148px;
2785
2779
  }
2786
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
+
2787
2787
  .tlui-style-panel::-webkit-scrollbar {
2788
2788
  display: none;
2789
2789
  }
@@ -2799,7 +2799,7 @@ it from receiving any pointer events or affecting the cursor. */
2799
2799
  }
2800
2800
 
2801
2801
  .tlui-style-panel__section:nth-of-type(n + 2):not(:last-child) {
2802
- border-bottom: 1px solid var(--color-divider);
2802
+ border-bottom: 1px solid var(--tl-color-divider);
2803
2803
  }
2804
2804
 
2805
2805
  .tlui-style-panel__section:empty {
@@ -2808,23 +2808,19 @@ it from receiving any pointer events or affecting the cursor. */
2808
2808
 
2809
2809
  .tlui-style-panel__section__common:not(:only-child) {
2810
2810
  margin-bottom: 7px;
2811
- border-bottom: 1px solid var(--color-divider);
2811
+ border-bottom: 1px solid var(--tl-color-divider);
2812
2812
  }
2813
2813
 
2814
- .tlui-style-panel__row {
2815
- display: flex;
2816
- }
2817
- /* Only really used for the alignment picker */
2818
- .tlui-style-panel__row__extra-button {
2819
- margin-left: -2px;
2814
+ .tlui-style-panel__dropdown-picker:only-child {
2815
+ width: 100%;
2820
2816
  }
2821
2817
 
2822
2818
  .tlui-style-panel__double-select-picker {
2823
2819
  display: flex;
2824
2820
  grid-template-columns: 1fr auto;
2825
2821
  align-items: center;
2826
- padding-left: var(--space-4);
2827
- color: var(--color-text-1);
2822
+ padding-left: var(--tl-space-4);
2823
+ color: var(--tl-color-text-1);
2828
2824
  font-size: 12px;
2829
2825
  }
2830
2826
 
@@ -2838,25 +2834,48 @@ it from receiving any pointer events or affecting the cursor. */
2838
2834
 
2839
2835
  .tlui-style-panel .tlui-button[data-state='open']::after {
2840
2836
  opacity: 1;
2841
- 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%);
2842
2838
  }
2843
2839
 
2844
2840
  @media (hover: hover) {
2841
+ .tlui-style-panel .tlui-button[aria-expanded='true'] {
2842
+ background: none;
2843
+ }
2845
2844
  .tlui-style-panel .tlui-button[data-state='open']:not(:hover)::after {
2846
2845
  opacity: 1;
2847
- 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%);
2848
2847
  }
2849
2848
  }
2850
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
+
2851
2870
  /* --------------------- Bottom --------------------- */
2852
2871
 
2853
2872
  .tlui-layout__bottom {
2854
2873
  grid-row: 2;
2874
+ width: 100%;
2855
2875
  }
2856
2876
 
2857
2877
  .tlui-layout__bottom__main {
2858
2878
  width: 100%;
2859
- position: relative;
2860
2879
  display: flex;
2861
2880
  align-items: flex-end;
2862
2881
  justify-content: center;
@@ -2868,11 +2887,10 @@ it from receiving any pointer events or affecting the cursor. */
2868
2887
  display: flex;
2869
2888
  width: min-content;
2870
2889
  flex-direction: column;
2871
- z-index: var(--layer-panels);
2890
+ z-index: var(--tl-layer-panels);
2872
2891
  pointer-events: all;
2873
2892
  position: absolute;
2874
2893
  left: 0px;
2875
- bottom: 0px;
2876
2894
  }
2877
2895
 
2878
2896
  .tlui-navigation-panel::before {
@@ -2882,30 +2900,16 @@ it from receiving any pointer events or affecting the cursor. */
2882
2900
  z-index: -1;
2883
2901
  inset: -2px -2px 0px 0px;
2884
2902
  border-radius: 0;
2885
- border-top: 2px solid var(--color-background);
2886
- border-right: 2px solid var(--color-background);
2887
- border-top-right-radius: var(--radius-4);
2888
- 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);
2889
2907
  }
2890
2908
 
2891
2909
  .tlui-navigation-panel[data-a11y='true']::before {
2892
2910
  display: none;
2893
2911
  }
2894
2912
 
2895
- .tlui-navigation-panel__toggle .tlui-icon {
2896
- opacity: 0.24;
2897
- }
2898
-
2899
- .tlui-navigation-panel__toggle:active .tlui-icon {
2900
- opacity: 1;
2901
- }
2902
-
2903
- @media (hover: hover) {
2904
- .tlui-navigation-panel__toggle:hover .tlui-icon {
2905
- opacity: 1;
2906
- }
2907
- }
2908
-
2909
2913
  /* Minimap */
2910
2914
 
2911
2915
  .tlui-minimap {
@@ -2913,7 +2917,7 @@ it from receiving any pointer events or affecting the cursor. */
2913
2917
  height: 96px;
2914
2918
  min-height: 96px;
2915
2919
  overflow: hidden;
2916
- padding: var(--space-3);
2920
+ padding: var(--tl-space-3);
2917
2921
  padding-top: 0px;
2918
2922
  }
2919
2923
 
@@ -2926,114 +2930,220 @@ it from receiving any pointer events or affecting the cursor. */
2926
2930
  /* --------------------- Toolbar -------------------- */
2927
2931
 
2928
2932
  /* Wide container */
2929
- .tlui-toolbar {
2933
+ .tlui-main-toolbar {
2930
2934
  grid-column: 1 / span 3;
2931
2935
  grid-row: 1;
2932
2936
  display: flex;
2933
2937
  align-items: center;
2934
2938
  justify-content: center;
2935
2939
  flex-grow: 2;
2936
- 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 */
2937
2957
  }
2938
2958
 
2939
2959
  /* Centered Content */
2940
- .tlui-toolbar__inner {
2960
+ .tlui-main-toolbar__inner {
2941
2961
  position: relative;
2942
2962
  width: fit-content;
2943
2963
  display: flex;
2944
- gap: var(--space-3);
2945
- align-items: flex-end;
2964
+ gap: var(--tl-space-3);
2965
+ align-items: flex-start;
2966
+ }
2967
+
2968
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__inner {
2969
+ flex-direction: column;
2946
2970
  }
2947
2971
 
2948
- .tlui-toolbar__left {
2972
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__left {
2949
2973
  width: fit-content;
2950
2974
  }
2975
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__left {
2976
+ display: flex;
2977
+ height: fit-content;
2978
+ }
2951
2979
 
2952
2980
  /* Row of controls + lock button */
2953
- .tlui-toolbar__extras {
2981
+ .tlui-main-toolbar__extras {
2954
2982
  position: relative;
2955
- z-index: var(--layer-above);
2956
- width: 100%;
2983
+ z-index: var(--tl-layer-above);
2957
2984
  pointer-events: none;
2958
- top: 6px;
2959
- height: 48px;
2985
+ align-self: stretch;
2960
2986
  }
2961
2987
 
2962
- .tlui-toolbar__extras:empty {
2988
+ .tlui-main-toolbar__extras:empty {
2963
2989
  display: none;
2964
2990
  }
2965
2991
 
2966
- .tlui-toolbar__extras__controls {
2967
- 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 {
2968
3003
  position: relative;
2969
- flex-direction: row;
2970
- z-index: var(--layer-above);
2971
- background-color: var(--color-low);
2972
- border-top-left-radius: var(--radius-4);
2973
- border-top-right-radius: var(--radius-4);
2974
- 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);
2975
3013
  margin-left: 8px;
2976
3014
  margin-right: 0px;
2977
- pointer-events: all;
2978
3015
  width: fit-content;
2979
3016
  }
2980
3017
 
2981
- .tlui-toolbar__tools {
2982
- display: flex;
2983
- flex-direction: row;
2984
- align-items: center;
2985
- border-radius: var(--radius-4);
2986
- 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);
2987
3030
  pointer-events: all;
2988
3031
  position: relative;
2989
- background: var(--color-panel);
2990
- box-shadow: var(--shadow-2);
3032
+ background: var(--tl-color-panel);
3033
+ box-shadow: var(--tl-shadow-2);
2991
3034
  }
2992
- .tlui-toolbar__tools__list {
2993
- display: flex;
2994
- flex-direction: row;
2995
- 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;
2996
3041
  }
2997
3042
 
2998
- .tlui-toolbar__overflow {
3043
+ .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
2999
3044
  width: 40px;
3045
+ margin-left: 2px;
3046
+ }
3047
+ .tlui-main-toolbar--vertical .tlui-main-toolbar__overflow {
3048
+ height: 40px;
3049
+ margin-top: 2px;
3000
3050
  }
3001
3051
 
3002
- .tlui-layout__mobile .tlui-toolbar__overflow {
3052
+ .tlui-layout__mobile .tlui-main-toolbar--horizontal .tlui-main-toolbar__overflow {
3003
3053
  width: 32px;
3004
3054
  padding: 0px;
3005
3055
  }
3006
3056
 
3007
- .tlui-toolbar *[data-state='open']::after {
3008
- 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%);
3009
3063
  opacity: 1;
3010
3064
  }
3011
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
+
3012
3096
  @media (hover: hover) {
3013
- .tlui-toolbar *[data-state='open']:not(:hover)::after {
3014
- 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%);
3015
3099
  opacity: 1;
3016
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%);
3103
+ opacity: 1;
3104
+ }
3105
+ }
3106
+
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;
3017
3121
  }
3018
3122
 
3019
- .tlui-layout__mobile .tlui-toolbar {
3020
- transition: transform 0.15s ease-out 0.05s;
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;
3021
3131
  }
3022
3132
 
3023
3133
  /* ------------------- Debug panel ------------------ */
3024
3134
 
3025
3135
  .tlui-debug-panel {
3026
- background-color: var(--color-low);
3136
+ background-color: var(--tl-color-low);
3027
3137
  width: 100%;
3028
3138
  display: grid;
3029
3139
  align-items: center;
3030
3140
  grid-template-columns: 1fr auto auto auto;
3031
3141
  justify-content: space-between;
3032
- padding-left: var(--space-4);
3033
- border-top: 1px solid var(--color-background);
3142
+ padding-left: var(--tl-space-4);
3143
+ border-top: 1px solid var(--tl-color-background);
3034
3144
  font-size: 12px;
3035
- color: var(--color-text-1);
3036
- z-index: var(--layer-panels);
3145
+ color: var(--tl-color-text-1);
3146
+ z-index: var(--tl-layer-panels);
3037
3147
  pointer-events: all;
3038
3148
  }
3039
3149
 
@@ -3049,7 +3159,7 @@ it from receiving any pointer events or affecting the cursor. */
3049
3159
 
3050
3160
  .tlui-debug-panel__fps__slow {
3051
3161
  font-weight: bold;
3052
- color: var(--color-danger);
3162
+ color: var(--tl-color-danger);
3053
3163
  }
3054
3164
 
3055
3165
  .tlui-a11y-audit {
@@ -3059,7 +3169,7 @@ it from receiving any pointer events or affecting the cursor. */
3059
3169
  .tlui-a11y-audit th,
3060
3170
  .tlui-a11y-audit td {
3061
3171
  padding: 8px;
3062
- border: 1px solid var(--color-low-border);
3172
+ border: 1px solid var(--tl-color-low-border);
3063
3173
  }
3064
3174
 
3065
3175
  /* --------------------- Toasts --------------------- */
@@ -3072,10 +3182,10 @@ it from receiving any pointer events or affecting the cursor. */
3072
3182
  align-items: flex-end;
3073
3183
  justify-content: flex-end;
3074
3184
  flex-direction: column;
3075
- gap: var(--space-3);
3185
+ gap: var(--tl-space-3);
3076
3186
  pointer-events: none;
3077
- padding: 0px var(--space-3) 64px 0px;
3078
- z-index: var(--layer-toasts);
3187
+ padding: 0px var(--tl-space-3) 64px 0px;
3188
+ z-index: var(--tl-layer-toasts);
3079
3189
  }
3080
3190
 
3081
3191
  .tlui-toast__viewport > * {
@@ -3084,34 +3194,34 @@ it from receiving any pointer events or affecting the cursor. */
3084
3194
 
3085
3195
  .tlui-toast__icon {
3086
3196
  padding-top: 11px;
3087
- padding-left: var(--space-4);
3088
- color: var(--color-text-1);
3197
+ padding-left: var(--tl-space-4);
3198
+ color: var(--tl-color-text-1);
3089
3199
  }
3090
3200
 
3091
3201
  .tlui-toast__container {
3092
3202
  min-width: 200px;
3093
3203
  display: flex;
3094
3204
  flex-direction: row;
3095
- background-color: var(--color-panel);
3096
- box-shadow: var(--shadow-2);
3097
- 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);
3098
3208
  font-size: 12px;
3099
3209
  }
3100
3210
 
3101
3211
  .tlui-toast__container[data-severity='success'] .tlui-icon {
3102
- color: var(--color-success);
3212
+ color: var(--tl-color-success);
3103
3213
  }
3104
3214
 
3105
3215
  .tlui-toast__container[data-severity='info'] .tlui-icon {
3106
- color: var(--color-info);
3216
+ color: var(--tl-color-info);
3107
3217
  }
3108
3218
 
3109
3219
  .tlui-toast__container[data-severity='warning'] .tlui-icon {
3110
- color: var(--color-warning);
3220
+ color: var(--tl-color-warning);
3111
3221
  }
3112
3222
 
3113
3223
  .tlui-toast__container[data-severity='error'] .tlui-icon {
3114
- color: var(--color-danger);
3224
+ color: var(--tl-color-danger);
3115
3225
  }
3116
3226
 
3117
3227
  .tlui-toast__main {
@@ -3120,27 +3230,27 @@ it from receiving any pointer events or affecting the cursor. */
3120
3230
  }
3121
3231
 
3122
3232
  .tlui-toast__content {
3123
- padding: var(--space-4);
3233
+ padding: var(--tl-space-4);
3124
3234
  display: flex;
3125
3235
  line-height: 1.4;
3126
3236
  flex-direction: column;
3127
- gap: var(--space-3);
3237
+ gap: var(--tl-space-3);
3128
3238
  }
3129
3239
 
3130
3240
  .tlui-toast__main[data-actions='true'] .tlui-toast__content {
3131
- padding-bottom: var(--space-2);
3241
+ padding-bottom: var(--tl-space-2);
3132
3242
  }
3133
3243
 
3134
3244
  .tlui-toast__title {
3135
3245
  font-weight: bold;
3136
- color: var(--color-text-1);
3246
+ color: var(--tl-color-text-1);
3137
3247
  /* this makes the default toast look better */
3138
3248
  line-height: 16px;
3139
3249
  }
3140
3250
 
3141
3251
  .tlui-toast__description {
3142
- color: var(--color-text-1);
3143
- padding: var(--space-3);
3252
+ color: var(--tl-color-text-1);
3253
+ padding: var(--tl-space-3);
3144
3254
  margin: 0px;
3145
3255
  padding: 0px;
3146
3256
  }
@@ -3163,11 +3273,11 @@ it from receiving any pointer events or affecting the cursor. */
3163
3273
 
3164
3274
  @media (prefers-reduced-motion: no-preference) {
3165
3275
  .tlui-toast__container[data-state='open'] {
3166
- animation: slide-in 200ms cubic-bezier(0.785, 0.135, 0.15, 0.86);
3276
+ animation: tlui-slide-in 200ms cubic-bezier(0.785, 0.135, 0.15, 0.86);
3167
3277
  }
3168
3278
 
3169
3279
  .tlui-toast__container[data-state='closed'] {
3170
- animation: hide 100ms ease-in;
3280
+ animation: tlui-fade-out 100ms ease-in;
3171
3281
  }
3172
3282
 
3173
3283
  .tlui-toast__container[data-swipe='move'] {
@@ -3180,7 +3290,7 @@ it from receiving any pointer events or affecting the cursor. */
3180
3290
  }
3181
3291
 
3182
3292
  .tlui-toast__container[data-swipe='end'] {
3183
- animation: swipe-out 100ms ease-out;
3293
+ animation: tlui-slide-out 100ms ease-out;
3184
3294
  }
3185
3295
  }
3186
3296
 
@@ -3192,14 +3302,14 @@ it from receiving any pointer events or affecting the cursor. */
3192
3302
  left: 0px;
3193
3303
  width: 100%;
3194
3304
  height: 100%;
3195
- z-index: var(--layer-canvas-overlays);
3196
- background-color: var(--color-overlay);
3305
+ z-index: var(--tl-layer-canvas-overlays);
3306
+ background-color: var(--tl-color-overlay);
3197
3307
  pointer-events: all;
3198
- animation: fadeIn 0.12s ease-out;
3308
+ animation: tl-fade-in 0.12s ease-out;
3199
3309
  display: grid;
3200
3310
  place-items: center;
3201
3311
  overflow-y: auto;
3202
- padding: 0px var(--space-3);
3312
+ padding: 0px var(--tl-space-3);
3203
3313
  }
3204
3314
 
3205
3315
  .tlui-dialog__content {
@@ -3207,9 +3317,9 @@ it from receiving any pointer events or affecting the cursor. */
3207
3317
  flex-direction: column;
3208
3318
  position: relative;
3209
3319
  cursor: default;
3210
- background-color: var(--color-panel);
3211
- box-shadow: var(--shadow-3);
3212
- 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);
3213
3323
  font-size: 12px;
3214
3324
  overflow: hidden;
3215
3325
  min-width: 300px;
@@ -3222,9 +3332,9 @@ it from receiving any pointer events or affecting the cursor. */
3222
3332
  display: flex;
3223
3333
  align-items: center;
3224
3334
  flex: 0;
3225
- z-index: var(--layer-header-footer);
3226
- padding-left: var(--space-4);
3227
- 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);
3228
3338
  height: 40px;
3229
3339
  }
3230
3340
 
@@ -3233,7 +3343,7 @@ it from receiving any pointer events or affecting the cursor. */
3233
3343
  font-weight: inherit;
3234
3344
  font-size: 12px;
3235
3345
  margin: 0px;
3236
- color: var(--color-text-1);
3346
+ color: var(--tl-color-text-1);
3237
3347
  }
3238
3348
 
3239
3349
  .tlui-dialog__header__close {
@@ -3241,16 +3351,16 @@ it from receiving any pointer events or affecting the cursor. */
3241
3351
  }
3242
3352
 
3243
3353
  .tlui-dialog__body {
3244
- padding: var(--space-4) var(--space-4);
3354
+ padding: var(--tl-space-4) var(--tl-space-4);
3245
3355
  flex: 0 1;
3246
3356
  overflow-y: auto;
3247
3357
  overflow-x: hidden;
3248
- color: var(--color-text-1);
3358
+ color: var(--tl-color-text-1);
3249
3359
  user-select: all;
3250
3360
  -webkit-user-select: text;
3251
3361
  }
3252
3362
  .tlui-dialog__body a {
3253
- color: var(--color-selected);
3363
+ color: var(--tl-color-selected);
3254
3364
  }
3255
3365
 
3256
3366
  .tlui-dialog__body ul,
@@ -3258,13 +3368,13 @@ it from receiving any pointer events or affecting the cursor. */
3258
3368
  padding-left: 16px;
3259
3369
  display: flex;
3260
3370
  flex-direction: column;
3261
- gap: var(--space-2);
3371
+ gap: var(--tl-space-2);
3262
3372
  }
3263
3373
 
3264
3374
  .tlui-dialog__footer {
3265
3375
  position: relative;
3266
3376
  min-height: 12px;
3267
- z-index: var(--layer-header-footer);
3377
+ z-index: var(--tl-layer-header-footer);
3268
3378
  }
3269
3379
 
3270
3380
  .tlui-dialog__footer__actions {
@@ -3284,15 +3394,15 @@ it from receiving any pointer events or affecting the cursor. */
3284
3394
  .tlui-edit-link-dialog {
3285
3395
  display: flex;
3286
3396
  flex-direction: column;
3287
- gap: var(--space-4);
3288
- color: var(--color-text);
3397
+ gap: var(--tl-space-4);
3398
+ color: var(--tl-color-text);
3289
3399
  }
3290
3400
 
3291
3401
  .tlui-edit-link-dialog__input {
3292
- background-color: var(--color-muted-2);
3402
+ background-color: var(--tl-color-muted-2);
3293
3403
  flex-grow: 2;
3294
- border-radius: var(--radius-2);
3295
- padding: 0px var(--space-4);
3404
+ border-radius: var(--tl-radius-2);
3405
+ padding: 0px var(--tl-space-4);
3296
3406
  }
3297
3407
 
3298
3408
  /* Embed Dialog */
@@ -3300,15 +3410,15 @@ it from receiving any pointer events or affecting the cursor. */
3300
3410
  .tlui-embed__spacer {
3301
3411
  flex-grow: 2;
3302
3412
  min-height: 0px;
3303
- margin-left: calc(-1 * var(--space-4));
3304
- 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));
3305
3415
  pointer-events: none;
3306
3416
  }
3307
3417
 
3308
3418
  .tlui-embed-dialog__list {
3309
3419
  display: flex;
3310
3420
  flex-direction: column;
3311
- 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);
3312
3422
  }
3313
3423
 
3314
3424
  .tlui-embed-dialog__item__image {
@@ -3320,49 +3430,49 @@ it from receiving any pointer events or affecting the cursor. */
3320
3430
  background-size: contain;
3321
3431
  background-repeat: no-repeat;
3322
3432
  background-position: center center;
3323
- background-color: var(--color-selected-contrast);
3324
- border-radius: var(--radius-1);
3433
+ background-color: var(--tl-color-selected-contrast);
3434
+ border-radius: var(--tl-radius-1);
3325
3435
  }
3326
3436
 
3327
3437
  .tlui-embed-dialog__enter {
3328
3438
  display: flex;
3329
3439
  flex-direction: column;
3330
- gap: var(--space-4);
3331
- color: var(--color-text-1);
3440
+ gap: var(--tl-space-4);
3441
+ color: var(--tl-color-text-1);
3332
3442
  }
3333
3443
 
3334
3444
  .tlui-embed-dialog__input {
3335
- background-color: var(--color-muted-2);
3445
+ background-color: var(--tl-color-muted-2);
3336
3446
  flex-grow: 2;
3337
- border-radius: var(--radius-2);
3338
- padding: 0px var(--space-4);
3447
+ border-radius: var(--tl-radius-2);
3448
+ padding: 0px var(--tl-space-4);
3339
3449
  }
3340
3450
 
3341
3451
  .tlui-embed-dialog__warning {
3342
- color: var(--color-danger);
3452
+ color: var(--tl-color-danger);
3343
3453
  text-shadow: none;
3344
3454
  }
3345
3455
 
3346
3456
  .tlui-embed-dialog__instruction__link {
3347
3457
  display: flex;
3348
- gap: var(--space-1);
3349
- margin-top: var(--space-4);
3458
+ gap: var(--tl-space-1);
3459
+ margin-top: var(--tl-space-4);
3350
3460
  }
3351
3461
 
3352
3462
  .tlui-embed-dialog__enter a {
3353
- color: var(--color-text-1);
3463
+ color: var(--tl-color-text-1);
3354
3464
  }
3355
3465
 
3356
3466
  /* --------------- Keyboard shortcuts --------------- */
3357
3467
 
3358
3468
  .tlui-shortcuts-dialog__header {
3359
- border-bottom: 1px solid var(--color-divider);
3469
+ border-bottom: 1px solid var(--tl-color-divider);
3360
3470
  }
3361
3471
 
3362
3472
  .tlui-shortcuts-dialog__body {
3363
3473
  position: relative;
3364
3474
  columns: 3;
3365
- column-gap: var(--space-9);
3475
+ column-gap: var(--tl-space-9);
3366
3476
  pointer-events: all;
3367
3477
  touch-action: auto;
3368
3478
 
@@ -3380,14 +3490,14 @@ it from receiving any pointer events or affecting the cursor. */
3380
3490
 
3381
3491
  .tlui-shortcuts-dialog__group {
3382
3492
  break-inside: avoid-column;
3383
- padding-bottom: var(--space-6);
3493
+ padding-bottom: var(--tl-space-6);
3384
3494
  }
3385
3495
 
3386
3496
  .tlui-shortcuts-dialog__group__title {
3387
3497
  font-size: inherit;
3388
3498
  font-weight: inherit;
3389
3499
  margin: 0px;
3390
- color: var(--color-text-3);
3500
+ color: var(--tl-color-text-3);
3391
3501
  height: 32px;
3392
3502
  display: flex;
3393
3503
  align-items: center;
@@ -3396,12 +3506,12 @@ it from receiving any pointer events or affecting the cursor. */
3396
3506
  .tlui-shortcuts-dialog__group__content {
3397
3507
  display: flex;
3398
3508
  flex-direction: column;
3399
- color: var(--color-text-1);
3509
+ color: var(--tl-color-text-1);
3400
3510
  }
3401
3511
 
3402
3512
  .tlui-shortcuts-dialog__key-pair {
3403
3513
  display: flex;
3404
- gap: var(--space-4);
3514
+ gap: var(--tl-space-4);
3405
3515
  align-items: center;
3406
3516
  justify-content: space-between;
3407
3517
  height: 32px;
@@ -3428,12 +3538,12 @@ it from receiving any pointer events or affecting the cursor. */
3428
3538
  height: 24px;
3429
3539
  background: linear-gradient(
3430
3540
  to bottom,
3431
- var(--color-panel-transparent) 0%,
3432
- var(--color-panel) 90%,
3433
- var(--color-panel) 100%
3541
+ var(--tl-color-panel-transparent) 0%,
3542
+ var(--tl-color-panel) 90%,
3543
+ var(--tl-color-panel) 100%
3434
3544
  );
3435
- border-bottom-left-radius: var(--radius-3);
3436
- 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);
3437
3547
  pointer-events: none;
3438
3548
  }
3439
3549
 
@@ -3448,10 +3558,10 @@ it from receiving any pointer events or affecting the cursor. */
3448
3558
  .tlui-help-menu {
3449
3559
  pointer-events: all;
3450
3560
  position: absolute;
3451
- bottom: var(--space-2);
3452
- right: var(--space-2);
3453
- z-index: var(--layer-panels);
3454
- 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);
3455
3565
  border-radius: 100%;
3456
3566
  }
3457
3567
 
@@ -3462,7 +3572,7 @@ it from receiving any pointer events or affecting the cursor. */
3462
3572
  display: flex;
3463
3573
  flex-direction: row;
3464
3574
  justify-content: flex-end;
3465
- z-index: var(--layer-panels);
3575
+ z-index: var(--tl-layer-panels);
3466
3576
  align-items: center;
3467
3577
  padding-top: 2px;
3468
3578
  padding-right: 4px;
@@ -3478,7 +3588,7 @@ it from receiving any pointer events or affecting the cursor. */
3478
3588
  border: none;
3479
3589
  cursor: pointer;
3480
3590
  pointer-events: all;
3481
- border-radius: var(--radius-1);
3591
+ border-radius: var(--tl-radius-1);
3482
3592
  padding-right: 1px;
3483
3593
  height: 100%;
3484
3594
  }
@@ -3491,8 +3601,8 @@ it from receiving any pointer events or affecting the cursor. */
3491
3601
  .tlui-people-menu__avatar {
3492
3602
  height: 24px;
3493
3603
  width: 24px;
3494
- border: 2px solid var(--color-background);
3495
- background-color: var(--color-low);
3604
+ border: 2px solid var(--tl-color-background);
3605
+ background-color: var(--tl-color-low);
3496
3606
  border-radius: 100%;
3497
3607
  display: flex;
3498
3608
  align-items: center;
@@ -3501,7 +3611,7 @@ it from receiving any pointer events or affecting the cursor. */
3501
3611
  font-size: 10px;
3502
3612
  font-weight: bold;
3503
3613
  text-align: center;
3504
- color: var(--color-selected-contrast);
3614
+ color: var(--tl-color-selected-contrast);
3505
3615
  z-index: 2;
3506
3616
  }
3507
3617
 
@@ -3515,7 +3625,7 @@ it from receiving any pointer events or affecting the cursor. */
3515
3625
 
3516
3626
  @media (hover: hover) {
3517
3627
  .tlui-people-menu__avatars-button:hover .tlui-people-menu__avatar {
3518
- border-color: var(--color-low);
3628
+ border-color: var(--tl-color-low);
3519
3629
  }
3520
3630
  }
3521
3631
 
@@ -3523,12 +3633,12 @@ it from receiving any pointer events or affecting the cursor. */
3523
3633
  min-width: 0px;
3524
3634
  font-size: 11px;
3525
3635
  font-weight: 600;
3526
- color: var(--color-text-1);
3636
+ color: var(--tl-color-text-1);
3527
3637
  font-family: inherit;
3528
3638
  padding: 0px 4px;
3529
3639
  }
3530
3640
  .tlui-people-menu__more::after {
3531
- border-radius: var(--radius-2);
3641
+ border-radius: var(--tl-radius-2);
3532
3642
  inset: 0px;
3533
3643
  }
3534
3644
 
@@ -3557,7 +3667,7 @@ it from receiving any pointer events or affecting the cursor. */
3557
3667
  }
3558
3668
 
3559
3669
  .tlui-people-menu__section:not(:last-child) {
3560
- border-bottom: 1px solid var(--color-divider);
3670
+ border-bottom: 1px solid var(--tl-color-divider);
3561
3671
  }
3562
3672
 
3563
3673
  .tlui-people-menu__user {
@@ -3576,7 +3686,7 @@ it from receiving any pointer events or affecting the cursor. */
3576
3686
  text-overflow: ellipsis;
3577
3687
  white-space: nowrap;
3578
3688
  font-size: 12px;
3579
- color: var(--color-text-1);
3689
+ color: var(--tl-color-text-1);
3580
3690
  max-width: 100%;
3581
3691
  flex-grow: 1;
3582
3692
  flex-shrink: 100;
@@ -3588,7 +3698,7 @@ it from receiving any pointer events or affecting the cursor. */
3588
3698
  text-overflow: ellipsis;
3589
3699
  white-space: nowrap;
3590
3700
  font-size: 12px;
3591
- color: var(--color-text-3);
3701
+ color: var(--tl-color-text-3);
3592
3702
  flex-grow: 100;
3593
3703
  flex-shrink: 0;
3594
3704
  margin-left: 4px;
@@ -3679,7 +3789,7 @@ it from receiving any pointer events or affecting the cursor. */
3679
3789
  inset: 0px;
3680
3790
  border-width: 2px;
3681
3791
  border-style: solid;
3682
- z-index: var(--layer-following-indicator);
3792
+ z-index: var(--tl-layer-following-indicator);
3683
3793
  pointer-events: none;
3684
3794
  }
3685
3795
 
@@ -3698,7 +3808,7 @@ it from receiving any pointer events or affecting the cursor. */
3698
3808
  }
3699
3809
 
3700
3810
  .tlui-contextual-toolbar [data-isactive='true']::after {
3701
- background-color: var(--color-muted-2);
3811
+ background-color: var(--tl-color-muted-2);
3702
3812
  opacity: 1;
3703
3813
  }
3704
3814
 
@@ -3714,7 +3824,7 @@ it from receiving any pointer events or affecting the cursor. */
3714
3824
 
3715
3825
  .tlui-contextual-toolbar[data-visible='true'] {
3716
3826
  opacity: 1;
3717
- z-index: var(--layer-menus);
3827
+ z-index: var(--tl-layer-menus);
3718
3828
  }
3719
3829
 
3720
3830
  .tlui-contextual-toolbar[data-interactive='true'],
@@ -3762,7 +3872,7 @@ it from receiving any pointer events or affecting the cursor. */
3762
3872
  }
3763
3873
 
3764
3874
  /* ------------------- Animations ------------------- */
3765
- @keyframes hide {
3875
+ @keyframes tlui-fade-out {
3766
3876
  0% {
3767
3877
  opacity: 1;
3768
3878
  }
@@ -3771,21 +3881,21 @@ it from receiving any pointer events or affecting the cursor. */
3771
3881
  }
3772
3882
  }
3773
3883
 
3774
- @keyframes slide-in {
3884
+ @keyframes tlui-slide-in {
3775
3885
  from {
3776
- transform: translateX(calc(100% + var(--space-3)));
3886
+ transform: translateX(calc(100% + var(--tl-space-3)));
3777
3887
  }
3778
3888
  to {
3779
3889
  transform: translateX(0px);
3780
3890
  }
3781
3891
  }
3782
3892
 
3783
- @keyframes swipe-out {
3893
+ @keyframes tlui-slide-out {
3784
3894
  from {
3785
3895
  transform: translateX(var(--radix-toast-swipe-end-x));
3786
3896
  }
3787
3897
  to {
3788
- transform: translateX(calc(100% + var(--space-3)));
3898
+ transform: translateX(calc(100% + var(--tl-space-3)));
3789
3899
  }
3790
3900
  }
3791
3901