@tldraw/editor 3.16.0-next.df90ce0ff566 → 3.16.0-next.e57e478c23e0

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 (175) hide show
  1. package/dist-cjs/index.d.ts +134 -110
  2. package/dist-cjs/index.js +3 -5
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +8 -6
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/MenuClickCapture.js +0 -5
  7. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  8. package/dist-cjs/lib/components/Shape.js +7 -10
  9. package/dist-cjs/lib/components/Shape.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +4 -23
  11. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +1 -1
  14. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
  17. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
  19. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  20. package/dist-cjs/lib/config/TLUserPreferences.js +9 -3
  21. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  22. package/dist-cjs/lib/editor/Editor.js +77 -133
  23. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  24. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +9 -4
  25. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  26. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +13 -0
  27. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  28. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  29. package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
  30. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  31. package/dist-cjs/lib/hooks/useCanvasEvents.js +31 -25
  32. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  33. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js +4 -1
  34. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  35. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
  36. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  37. package/dist-cjs/lib/{utils/nearestMultiple.js → hooks/useStateAttribute.js} +15 -14
  38. package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
  39. package/dist-cjs/lib/license/LicenseManager.js +17 -22
  40. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  41. package/dist-cjs/lib/license/LicenseProvider.js +5 -0
  42. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  43. package/dist-cjs/lib/license/Watermark.js +8 -8
  44. package/dist-cjs/lib/license/Watermark.js.map +1 -1
  45. package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
  46. package/dist-cjs/lib/options.js +7 -0
  47. package/dist-cjs/lib/options.js.map +2 -2
  48. package/dist-cjs/lib/primitives/Box.js +3 -0
  49. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  50. package/dist-cjs/lib/primitives/Vec.js +0 -4
  51. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  52. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +26 -18
  53. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  54. package/dist-cjs/lib/primitives/geometry/Group2d.js +3 -0
  55. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  56. package/dist-cjs/lib/utils/EditorAtom.js +45 -0
  57. package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
  58. package/dist-cjs/lib/utils/reparenting.js +2 -35
  59. package/dist-cjs/lib/utils/reparenting.js.map +3 -3
  60. package/dist-cjs/version.js +3 -3
  61. package/dist-cjs/version.js.map +1 -1
  62. package/dist-esm/index.d.mts +134 -110
  63. package/dist-esm/index.mjs +3 -5
  64. package/dist-esm/index.mjs.map +2 -2
  65. package/dist-esm/lib/TldrawEditor.mjs +8 -6
  66. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  67. package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
  68. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  69. package/dist-esm/lib/components/Shape.mjs +7 -10
  70. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  71. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +4 -23
  72. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  73. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  74. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +1 -1
  75. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
  76. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
  77. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
  78. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
  79. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
  80. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  81. package/dist-esm/lib/config/TLUserPreferences.mjs +9 -3
  82. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  83. package/dist-esm/lib/editor/Editor.mjs +77 -133
  84. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  85. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +9 -4
  86. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  87. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +13 -0
  88. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  89. package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
  90. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  91. package/dist-esm/lib/hooks/useCanvasEvents.mjs +32 -26
  92. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  93. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
  94. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  95. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
  96. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  97. package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
  98. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
  99. package/dist-esm/lib/license/LicenseManager.mjs +17 -22
  100. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  101. package/dist-esm/lib/license/LicenseProvider.mjs +5 -0
  102. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  103. package/dist-esm/lib/license/Watermark.mjs +8 -8
  104. package/dist-esm/lib/license/Watermark.mjs.map +1 -1
  105. package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
  106. package/dist-esm/lib/options.mjs +7 -0
  107. package/dist-esm/lib/options.mjs.map +2 -2
  108. package/dist-esm/lib/primitives/Box.mjs +4 -1
  109. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  110. package/dist-esm/lib/primitives/Vec.mjs +0 -4
  111. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  112. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +29 -19
  113. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  114. package/dist-esm/lib/primitives/geometry/Group2d.mjs +3 -0
  115. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  116. package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
  117. package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
  118. package/dist-esm/lib/utils/reparenting.mjs +3 -40
  119. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  120. package/dist-esm/version.mjs +3 -3
  121. package/dist-esm/version.mjs.map +1 -1
  122. package/editor.css +301 -288
  123. package/package.json +14 -37
  124. package/src/index.ts +3 -9
  125. package/src/lib/TldrawEditor.tsx +13 -17
  126. package/src/lib/components/MenuClickCapture.tsx +0 -8
  127. package/src/lib/components/Shape.tsx +6 -12
  128. package/src/lib/components/default-components/DefaultCanvas.tsx +5 -22
  129. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  130. package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
  131. package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
  132. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +5 -1
  133. package/src/lib/config/TLUserPreferences.ts +8 -1
  134. package/src/lib/editor/Editor.test.ts +12 -11
  135. package/src/lib/editor/Editor.ts +108 -193
  136. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
  137. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
  138. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
  139. package/src/lib/editor/managers/FontManager/FontManager.test.ts +24 -23
  140. package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
  141. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
  142. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
  143. package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
  144. package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
  145. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +34 -26
  146. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +6 -1
  147. package/src/lib/editor/shapes/ShapeUtil.ts +35 -0
  148. package/src/lib/editor/types/misc-types.ts +54 -7
  149. package/src/lib/exports/getSvgJsx.test.ts +868 -0
  150. package/src/lib/exports/getSvgJsx.tsx +78 -21
  151. package/src/lib/hooks/useCanvasEvents.ts +45 -38
  152. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
  153. package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
  154. package/src/lib/hooks/useStateAttribute.ts +15 -0
  155. package/src/lib/license/LicenseManager.test.ts +61 -52
  156. package/src/lib/license/LicenseManager.ts +32 -24
  157. package/src/lib/license/LicenseProvider.tsx +8 -0
  158. package/src/lib/license/Watermark.test.tsx +2 -1
  159. package/src/lib/license/Watermark.tsx +8 -8
  160. package/src/lib/license/useLicenseManagerState.ts +2 -2
  161. package/src/lib/options.ts +8 -0
  162. package/src/lib/primitives/Box.test.ts +126 -0
  163. package/src/lib/primitives/Box.ts +10 -1
  164. package/src/lib/primitives/Vec.ts +0 -5
  165. package/src/lib/primitives/geometry/Geometry2d.ts +49 -19
  166. package/src/lib/primitives/geometry/Group2d.ts +4 -0
  167. package/src/lib/utils/EditorAtom.ts +37 -0
  168. package/src/lib/utils/reparenting.ts +3 -69
  169. package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
  170. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
  171. package/src/version.ts +3 -3
  172. package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
  173. package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
  174. package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
  175. package/src/lib/utils/nearestMultiple.ts +0 -13
package/editor.css CHANGED
@@ -5,57 +5,58 @@
5
5
  height: 100%;
6
6
  font-size: 12px;
7
7
  /* Spacing */
8
- --space-1: 2px;
9
- --space-2: 4px;
10
- --space-3: 8px;
11
- --space-4: 12px;
12
- --space-5: 16px;
13
- --space-6: 20px;
14
- --space-7: 28px;
15
- --space-8: 32px;
16
- --space-9: 64px;
17
- --space-10: 72px;
8
+ --tl-space-1: 2px;
9
+ --tl-space-2: 4px;
10
+ --tl-space-3: 8px;
11
+ --tl-space-4: 12px;
12
+ --tl-space-5: 16px;
13
+ --tl-space-6: 20px;
14
+ --tl-space-7: 28px;
15
+ --tl-space-8: 32px;
16
+ --tl-space-9: 64px;
17
+ --tl-space-10: 72px;
18
18
  /* Radius */
19
- --radius-0: 2px;
20
- --radius-1: 4px;
21
- --radius-2: 6px;
22
- --radius-3: 9px;
23
- --radius-4: 11px;
19
+ --tl-radius-0: 2px;
20
+ --tl-radius-1: 4px;
21
+ --tl-radius-2: 6px;
22
+ --tl-radius-3: 9px;
23
+ --tl-radius-4: 11px;
24
24
 
25
25
  /* Canvas z-index */
26
- --layer-canvas-hidden: -999999;
27
- --layer-canvas-background: 100;
28
- --layer-canvas-grid: 150;
29
- --layer-watermark: 200;
30
- --layer-canvas-shapes: 300;
31
- --layer-canvas-overlays: 500;
32
- --layer-canvas-blocker: 10000;
26
+ --tl-layer-canvas-hidden: -999999;
27
+ --tl-layer-canvas-background: 100;
28
+ --tl-layer-canvas-grid: 150;
29
+ --tl-layer-watermark: 200;
30
+ --tl-layer-canvas-shapes: 300;
31
+ --tl-layer-canvas-overlays: 500;
32
+ --tl-layer-canvas-in-front: 600;
33
+ --tl-layer-canvas-blocker: 10000;
33
34
 
34
35
  /* Canvas overlays z-index */
35
- --layer-overlays-collaborator-scribble: 10;
36
- --layer-overlays-collaborator-brush: 20;
37
- --layer-overlays-collaborator-shape-indicator: 30;
38
- --layer-overlays-user-scribble: 40;
39
- --layer-overlays-user-brush: 50;
40
- --layer-overlays-user-snapline: 90;
41
- --layer-overlays-selection-fg: 100;
36
+ --tl-layer-overlays-collaborator-scribble: 10;
37
+ --tl-layer-overlays-collaborator-brush: 20;
38
+ --tl-layer-overlays-collaborator-shape-indicator: 30;
39
+ --tl-layer-overlays-user-scribble: 40;
40
+ --tl-layer-overlays-user-brush: 50;
41
+ --tl-layer-overlays-user-snapline: 90;
42
+ --tl-layer-overlays-selection-fg: 100;
42
43
  /* User handles need to be above selection edges / corners, matters for sticky note clone handles */
43
- --layer-overlays-user-handles: 105;
44
- --layer-overlays-user-indicator-hint: 110;
45
- --layer-overlays-custom: 115;
46
- --layer-overlays-collaborator-cursor-hint: 120;
47
- --layer-overlays-collaborator-cursor: 130;
44
+ --tl-layer-overlays-user-handles: 105;
45
+ --tl-layer-overlays-user-indicator-hint: 110;
46
+ --tl-layer-overlays-custom: 115;
47
+ --tl-layer-overlays-collaborator-cursor-hint: 120;
48
+ --tl-layer-overlays-collaborator-cursor: 130;
48
49
 
49
50
  /* Text editor z-index */
50
- --layer-text-container: 1;
51
- --layer-text-content: 3;
52
- --layer-text-editor: 4;
51
+ --tl-layer-text-container: 1;
52
+ --tl-layer-text-content: 3;
53
+ --tl-layer-text-editor: 4;
53
54
 
54
55
  /* Error fallback z-index */
55
- --layer-error-overlay: 1;
56
- --layer-error-canvas: 2;
57
- --layer-error-canvas-after: 3;
58
- --layer-error-content: 4;
56
+ --tl-layer-error-overlay: 1;
57
+ --tl-layer-error-canvas: 2;
58
+ --tl-layer-error-canvas-after: 3;
59
+ --tl-layer-error-content: 4;
59
60
 
60
61
  /* Misc */
61
62
  --tl-zoom: 1;
@@ -120,12 +121,15 @@
120
121
  --tl-font-serif: 'tldraw_serif', serif;
121
122
  --tl-font-mono: 'tldraw_mono', monospace;
122
123
  /* text outline */
123
- --a: calc(min(0.5, 1 / var(--tl-zoom)) * 2px);
124
- --b: calc(min(0.5, 1 / var(--tl-zoom)) * -2px);
124
+ --tl-text-outline-a: calc(min(0.5, 1 / var(--tl-zoom)) * 2px);
125
+ --tl-text-outline-b: calc(min(0.5, 1 / var(--tl-zoom)) * -2px);
125
126
  --tl-text-outline-reference:
126
- 0 var(--b) 0 var(--color-background), 0 var(--a) 0 var(--color-background),
127
- var(--b) var(--b) 0 var(--color-background), var(--a) var(--b) 0 var(--color-background),
128
- var(--a) var(--a) 0 var(--color-background), var(--b) var(--a) 0 var(--color-background);
127
+ 0 var(--tl-text-outline-b) 0 var(--tl-color-background),
128
+ 0 var(--tl-text-outline-a) 0 var(--tl-color-background),
129
+ var(--tl-text-outline-b) var(--tl-text-outline-b) 0 var(--tl-color-background),
130
+ var(--tl-text-outline-a) var(--tl-text-outline-b) 0 var(--tl-color-background),
131
+ var(--tl-text-outline-a) var(--tl-text-outline-a) 0 var(--tl-color-background),
132
+ var(--tl-text-outline-b) var(--tl-text-outline-a) 0 var(--tl-color-background);
129
133
  --tl-text-outline: var(--tl-text-outline-reference);
130
134
  /* own properties */
131
135
  position: relative;
@@ -133,116 +137,118 @@
133
137
  height: 100%;
134
138
  width: 100%;
135
139
  overflow: clip;
136
- color: var(--color-text);
140
+ color: var(--tl-color-text);
137
141
  }
138
142
 
139
143
  .tl-theme__light {
140
144
  /* Canvas */
141
- --color-snap: hsl(0, 76%, 60%);
142
- --color-selection-fill: hsl(210, 100%, 56%, 24%);
143
- --color-selection-stroke: hsl(214, 84%, 56%);
144
- --color-background: hsl(210, 20%, 98%);
145
- --color-brush-fill: hsl(0, 0%, 56%, 10.2%);
146
- --color-brush-stroke: hsl(0, 0%, 56%, 25.1%);
147
- --color-grid: hsl(0, 0%, 43%);
145
+ --tl-color-snap: hsl(0, 76%, 60%);
146
+ --tl-color-selection-fill: hsl(210, 100%, 56%, 24%);
147
+ --tl-color-selection-stroke: hsl(214, 84%, 56%);
148
+ --tl-color-background: hsl(210, 20%, 98%);
149
+ --tl-color-brush-fill: hsl(0, 0%, 56%, 10.2%);
150
+ --tl-color-brush-stroke: hsl(0, 0%, 56%, 25.1%);
151
+ --tl-color-grid: hsl(0, 0%, 43%);
148
152
  /* UI */
149
- --color-low: hsl(204, 16%, 94%);
150
- --color-low-border: hsl(204, 16%, 92%);
151
- --color-culled: hsl(204, 14%, 93%);
152
- --color-muted-none: hsl(0, 0%, 0%, 0%);
153
- --color-muted-0: hsl(0, 0%, 0%, 2%);
154
- --color-muted-1: hsl(0, 0%, 0%, 10%);
155
- --color-muted-2: hsl(0, 0%, 0%, 4.3%);
156
- --color-hint: hsl(0, 0%, 0%, 5.5%);
157
- --color-overlay: hsl(0, 0%, 0%, 20%);
158
- --color-divider: hsl(0, 0%, 91%);
159
- --color-panel: hsl(0, 0%, 99%);
160
- --color-panel-contrast: hsl(0, 0%, 100%);
161
- --color-panel-overlay: hsl(0, 0%, 100%, 82%);
162
- --color-panel-transparent: hsla(0, 0%, 99%, 0%);
163
- --color-selected: hsl(214, 84%, 56%);
164
- --color-selected-contrast: hsl(0, 0%, 100%);
165
- --color-focus: hsl(219, 65%, 50%);
153
+ --tl-color-low: hsl(204, 16%, 94%);
154
+ --tl-color-low-border: hsl(204, 16%, 92%);
155
+ --tl-color-culled: hsl(204, 14%, 93%);
156
+ --tl-color-muted-none: hsl(0, 0%, 0%, 0%);
157
+ --tl-color-muted-0: hsl(0, 0%, 0%, 2%);
158
+ --tl-color-muted-1: hsl(0, 0%, 0%, 10%);
159
+ --tl-color-muted-2: hsl(0, 0%, 0%, 4.3%);
160
+ --tl-color-hint: hsl(0, 0%, 0%, 5.5%);
161
+ --tl-color-overlay: hsl(0, 0%, 0%, 20%);
162
+ --tl-color-divider: hsl(0, 0%, 91%);
163
+ --tl-color-panel: hsl(0, 0%, 99%);
164
+ --tl-color-panel-contrast: hsl(0, 0%, 100%);
165
+ --tl-color-panel-overlay: hsl(0, 0%, 100%, 82%);
166
+ --tl-color-panel-transparent: hsla(0, 0%, 99%, 0%);
167
+ --tl-color-selected: hsl(214, 84%, 56%);
168
+ --tl-color-selected-contrast: hsl(0, 0%, 100%);
169
+ --tl-color-focus: hsl(219, 65%, 50%);
170
+ --tl-color-tooltip: hsla(200, 14%, 4%, 1);
166
171
  /* Text */
167
- --color-text: hsl(0, 0%, 0%);
168
- --color-text-0: hsl(0, 0%, 11%);
169
- --color-text-1: hsl(0, 0%, 18%);
170
- --color-text-3: hsl(204, 4%, 45%);
171
- --color-text-shadow: hsl(0, 0%, 100%);
172
- --color-text-highlight: hsl(52, 100%, 50%);
173
- --color-text-highlight-p3: color(display-p3 0.972 0.8205 0.05);
172
+ --tl-color-text: hsl(0, 0%, 0%);
173
+ --tl-color-text-0: hsl(0, 0%, 11%);
174
+ --tl-color-text-1: hsl(0, 0%, 18%);
175
+ --tl-color-text-3: hsl(204, 4%, 45%);
176
+ --tl-color-text-shadow: hsl(0, 0%, 100%);
177
+ --tl-color-text-highlight: hsl(52, 100%, 50%);
178
+ --tl-color-text-highlight-p3: color(display-p3 0.972 0.8205 0.05);
174
179
  /* Named */
175
- --color-primary: hsl(214, 84%, 56%);
176
- --color-success: hsl(123, 46%, 34%);
177
- --color-info: hsl(201, 98%, 41%);
178
- --color-warning: hsl(27, 98%, 47%);
179
- --color-danger: hsl(0, 90%, 43%);
180
- --color-laser: hsl(0, 100%, 50%);
180
+ --tl-color-primary: hsl(214, 84%, 56%);
181
+ --tl-color-success: hsl(123, 46%, 34%);
182
+ --tl-color-info: hsl(201, 98%, 41%);
183
+ --tl-color-warning: hsl(27, 98%, 47%);
184
+ --tl-color-danger: hsl(0, 90%, 43%);
185
+ --tl-color-laser: hsl(0, 100%, 50%);
181
186
  /* Shadows */
182
- --shadow-1: 0px 1px 2px hsl(0, 0%, 0%, 25%), 0px 1px 3px hsl(0, 0%, 0%, 9%);
183
- --shadow-2:
187
+ --tl-shadow-1: 0px 1px 2px hsl(0, 0%, 0%, 25%), 0px 1px 3px hsl(0, 0%, 0%, 9%);
188
+ --tl-shadow-2:
184
189
  0px 0px 2px hsl(0, 0%, 0%, 16%), 0px 2px 3px hsl(0, 0%, 0%, 24%),
185
- 0px 2px 6px hsl(0, 0%, 0%, 0.1), inset 0px 0px 0px 1px var(--color-panel-contrast);
186
- --shadow-3:
190
+ 0px 2px 6px hsl(0, 0%, 0%, 0.1), inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
191
+ --tl-shadow-3:
187
192
  0px 1px 2px hsl(0, 0%, 0%, 28%), 0px 2px 6px hsl(0, 0%, 0%, 14%),
188
- inset 0px 0px 0px 1px var(--color-panel-contrast);
189
- --shadow-4:
193
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
194
+ --tl-shadow-4:
190
195
  0px 0px 3px hsl(0, 0%, 0%, 19%), 0px 5px 4px hsl(0, 0%, 0%, 16%),
191
- 0px 2px 16px hsl(0, 0%, 0%, 6%), inset 0px 0px 0px 1px var(--color-panel-contrast);
196
+ 0px 2px 16px hsl(0, 0%, 0%, 6%), inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
192
197
  }
193
198
 
194
199
  .tl-theme__dark {
195
200
  /* Canvas */
196
- --color-snap: hsl(0, 76%, 60%);
197
- --color-selection-fill: hsl(209, 100%, 57%, 20%);
198
- --color-selection-stroke: hsl(214, 84%, 56%);
199
- --color-background: hsl(240, 5%, 6.5%);
200
- --color-brush-fill: hsl(0, 0%, 71%, 5.1%);
201
- --color-brush-stroke: hsl(0, 0%, 71%, 25.1%);
202
- --color-grid: hsl(0, 0%, 40%);
201
+ --tl-color-snap: hsl(0, 76%, 60%);
202
+ --tl-color-selection-fill: hsl(209, 100%, 57%, 20%);
203
+ --tl-color-selection-stroke: hsl(214, 84%, 56%);
204
+ --tl-color-background: hsl(240, 5%, 6.5%);
205
+ --tl-color-brush-fill: hsl(0, 0%, 71%, 5.1%);
206
+ --tl-color-brush-stroke: hsl(0, 0%, 71%, 25.1%);
207
+ --tl-color-grid: hsl(0, 0%, 40%);
203
208
  /* UI */
204
- --color-low: hsl(260, 4.5%, 10.5%);
205
- --color-low-border: hsl(207, 10%, 10%);
206
- --color-culled: hsl(210, 11%, 19%);
207
- --color-muted-none: hsl(0, 0%, 100%, 0%);
208
- --color-muted-0: hsl(0, 0%, 100%, 2%);
209
- --color-muted-1: hsl(0, 0%, 100%, 10%);
210
- --color-muted-2: hsl(0, 0%, 100%, 5%);
211
- --color-hint: hsl(0, 0%, 100%, 7%);
212
- --color-overlay: hsl(0, 0%, 0%, 50%);
213
- --color-divider: hsl(240, 9%, 22%);
214
- --color-panel: hsl(235, 6.8%, 13.5%);
215
- --color-panel-contrast: hsl(245, 12%, 23%);
216
- --color-panel-overlay: hsl(210, 10%, 24%, 82%);
217
- --color-panel-transparent: hsla(235, 6.8%, 13.5%, 0%);
218
- --color-selected: hsl(217, 89%, 61%);
219
- --color-selected-contrast: hsl(0, 0%, 100%);
220
- --color-focus: hsl(217, 76%, 80%);
209
+ --tl-color-low: hsl(260, 4.5%, 10.5%);
210
+ --tl-color-low-border: hsl(207, 10%, 10%);
211
+ --tl-color-culled: hsl(210, 11%, 19%);
212
+ --tl-color-muted-none: hsl(0, 0%, 100%, 0%);
213
+ --tl-color-muted-0: hsl(0, 0%, 100%, 2%);
214
+ --tl-color-muted-1: hsl(0, 0%, 100%, 10%);
215
+ --tl-color-muted-2: hsl(0, 0%, 100%, 5%);
216
+ --tl-color-hint: hsl(0, 0%, 100%, 7%);
217
+ --tl-color-overlay: hsl(0, 0%, 0%, 50%);
218
+ --tl-color-divider: hsl(240, 9%, 22%);
219
+ --tl-color-panel: hsl(235, 6.8%, 13.5%);
220
+ --tl-color-panel-contrast: hsl(245, 12%, 23%);
221
+ --tl-color-panel-overlay: hsl(210, 10%, 24%, 82%);
222
+ --tl-color-panel-transparent: hsla(235, 6.8%, 13.5%, 0%);
223
+ --tl-color-selected: hsl(217, 89%, 61%);
224
+ --tl-color-selected-contrast: hsl(0, 0%, 100%);
225
+ --tl-color-focus: hsl(217, 76%, 80%);
226
+ --tl-color-tooltip: hsla(0, 0%, 100%, 1);
221
227
  /* Text */
222
- --color-text: hsl(210, 17%, 98%);
223
- --color-text-0: hsl(0, 9%, 94%);
224
- --color-text-1: hsl(0, 0%, 85%);
225
- --color-text-3: hsl(204, 4%, 75%);
226
- --color-text-shadow: hsl(210, 13%, 18%);
227
- --color-text-highlight: hsl(52, 100%, 41%);
228
- --color-text-highlight-p3: color(display-p3 0.8078 0.6225 0.0312);
228
+ --tl-color-text: hsl(210, 17%, 98%);
229
+ --tl-color-text-0: hsl(0, 9%, 94%);
230
+ --tl-color-text-1: hsl(0, 0%, 85%);
231
+ --tl-color-text-3: hsl(204, 4%, 75%);
232
+ --tl-color-text-shadow: hsl(210, 13%, 18%);
233
+ --tl-color-text-highlight: hsl(52, 100%, 41%);
234
+ --tl-color-text-highlight-p3: color(display-p3 0.8078 0.6225 0.0312);
229
235
  /* Named */
230
- --color-primary: hsl(214, 84%, 56%);
231
- --color-success: hsl(123, 38%, 57%);
232
- --color-info: hsl(199, 92%, 56%);
233
- --color-warning: hsl(36, 100%, 57%);
234
- --color-danger: hsl(0, 82%, 66%);
235
- --color-laser: hsl(0, 100%, 50%);
236
+ --tl-color-primary: hsl(214, 84%, 56%);
237
+ --tl-color-success: hsl(123, 38%, 57%);
238
+ --tl-color-info: hsl(199, 92%, 56%);
239
+ --tl-color-warning: hsl(36, 100%, 57%);
240
+ --tl-color-danger: hsl(0, 82%, 66%);
241
+ --tl-color-laser: hsl(0, 100%, 50%);
236
242
  /* Shadows */
237
- --shadow-1:
243
+ --tl-shadow-1:
238
244
  0px 1px 2px hsl(0, 0%, 0%, 16.1%), 0px 1px 3px hsl(0, 0%, 0%, 22%),
239
- inset 0px 0px 0px 1px var(--color-panel-contrast);
240
- --shadow-2:
245
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
246
+ --tl-shadow-2:
241
247
  0px 1px 3px hsl(0, 0%, 0%, 66.6%), 0px 2px 6px hsl(0, 0%, 0%, 33%),
242
- inset 0px 0px 0px 1px var(--color-panel-contrast);
243
- --shadow-3:
248
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
249
+ --tl-shadow-3:
244
250
  0px 1px 3px hsl(0, 0%, 0%, 50%), 0px 2px 12px hsl(0, 0%, 0%, 50%),
245
- inset 0px 0px 0px 1px var(--color-panel-contrast);
251
+ inset 0px 0px 0px 1px var(--tl-color-panel-contrast);
246
252
  }
247
253
 
248
254
  .tl-counter-scaled {
@@ -268,7 +274,7 @@
268
274
  }
269
275
 
270
276
  .tl-container__focused {
271
- outline: 1px solid var(--color-low);
277
+ outline: 1px solid var(--tl-color-low);
272
278
  }
273
279
 
274
280
  input,
@@ -284,7 +290,7 @@ input,
284
290
  inset: 0px;
285
291
  height: 100%;
286
292
  width: 100%;
287
- color: var(--color-text);
293
+ color: var(--tl-color-text);
288
294
  cursor: var(--tl-cursor);
289
295
  overflow: clip;
290
296
  content-visibility: auto;
@@ -292,9 +298,16 @@ input,
292
298
  contain: strict;
293
299
  }
294
300
 
301
+ .tl-canvas__in-front {
302
+ position: absolute;
303
+ inset: 0;
304
+ pointer-events: none;
305
+ z-index: var(--tl-layer-canvas-in-front);
306
+ }
307
+
295
308
  .tl-shapes {
296
309
  position: relative;
297
- z-index: var(--layer-canvas-shapes);
310
+ z-index: var(--tl-layer-canvas-shapes);
298
311
  }
299
312
 
300
313
  .tl-overlays {
@@ -305,7 +318,7 @@ input,
305
318
  width: 100%;
306
319
  contain: strict;
307
320
  pointer-events: none;
308
- z-index: var(--layer-canvas-overlays);
321
+ z-index: var(--tl-layer-canvas-overlays);
309
322
  }
310
323
 
311
324
  .tl-overlays__item {
@@ -329,7 +342,7 @@ input,
329
342
  /* ------------------- Background ------------------- */
330
343
 
331
344
  .tl-background__wrapper {
332
- z-index: var(--layer-canvas-background);
345
+ z-index: var(--tl-layer-canvas-background);
333
346
  position: absolute;
334
347
  inset: 0px;
335
348
  height: 100%;
@@ -337,7 +350,7 @@ input,
337
350
  }
338
351
 
339
352
  .tl-background {
340
- background-color: var(--color-background);
353
+ background-color: var(--tl-color-background);
341
354
  width: 100%;
342
355
  height: 100%;
343
356
  }
@@ -351,12 +364,12 @@ input,
351
364
  height: 100%;
352
365
  touch-action: none;
353
366
  pointer-events: none;
354
- z-index: var(--layer-canvas-grid);
367
+ z-index: var(--tl-layer-canvas-grid);
355
368
  contain: strict;
356
369
  }
357
370
 
358
371
  .tl-grid-dot {
359
- fill: var(--color-grid);
372
+ fill: var(--tl-color-grid);
360
373
  }
361
374
 
362
375
  /* --------------------- Layers --------------------- */
@@ -374,54 +387,54 @@ input,
374
387
 
375
388
  /* back of the stack, behind user's stuff */
376
389
  .tl-collaborator__scribble {
377
- z-index: var(--layer-overlays-collaborator-scribble);
390
+ z-index: var(--tl-layer-overlays-collaborator-scribble);
378
391
  }
379
392
 
380
393
  .tl-collaborator__brush {
381
- z-index: var(--layer-overlays-collaborator-brush);
394
+ z-index: var(--tl-layer-overlays-collaborator-brush);
382
395
  }
383
396
 
384
397
  .tl-collaborator__shape-indicator {
385
- z-index: var(--layer-overlays-collaborator-shape-indicator);
398
+ z-index: var(--tl-layer-overlays-collaborator-shape-indicator);
386
399
  }
387
400
 
388
401
  .tl-user-scribble {
389
- z-index: var(--layer-overlays-user-scribble);
402
+ z-index: var(--tl-layer-overlays-user-scribble);
390
403
  }
391
404
 
392
405
  .tl-user-brush {
393
- z-index: var(--layer-overlays-user-brush);
406
+ z-index: var(--tl-layer-overlays-user-brush);
394
407
  }
395
408
 
396
409
  .tl-user-handles {
397
- z-index: var(--layer-overlays-user-handles);
410
+ z-index: var(--tl-layer-overlays-user-handles);
398
411
  }
399
412
 
400
413
  .tl-user-snapline {
401
- z-index: var(--layer-overlays-user-snapline);
414
+ z-index: var(--tl-layer-overlays-user-snapline);
402
415
  }
403
416
 
404
417
  .tl-selection__fg {
405
418
  pointer-events: none;
406
- z-index: var(--layer-overlays-selection-fg);
419
+ z-index: var(--tl-layer-overlays-selection-fg);
407
420
  }
408
421
 
409
422
  .tl-user-indicator__hint {
410
- z-index: var(--layer-overlays-user-indicator-hint);
423
+ z-index: var(--tl-layer-overlays-user-indicator-hint);
411
424
  stroke-width: calc(2.5px * var(--tl-scale));
412
425
  }
413
426
 
414
427
  .tl-custom-overlays {
415
- z-index: var(--layer-overlays-custom);
428
+ z-index: var(--tl-layer-overlays-custom);
416
429
  }
417
430
 
418
431
  /* behind collaborator cursor */
419
432
  .tl-collaborator__cursor-hint {
420
- z-index: var(--layer-overlays-collaborator-cursor-hint);
433
+ z-index: var(--tl-layer-overlays-collaborator-cursor-hint);
421
434
  }
422
435
 
423
436
  .tl-collaborator__cursor {
424
- z-index: var(--layer-overlays-collaborator-cursor);
437
+ z-index: var(--tl-layer-overlays-collaborator-cursor);
425
438
  }
426
439
 
427
440
  .tl-cursor {
@@ -442,32 +455,32 @@ input,
442
455
  .tl-selection__fg__outline {
443
456
  fill: none;
444
457
  pointer-events: none;
445
- stroke: var(--color-selection-stroke);
458
+ stroke: var(--tl-color-selection-stroke);
446
459
  stroke-width: calc(1.5px * var(--tl-scale));
447
460
  }
448
461
 
449
462
  .tl-corner-handle {
450
463
  pointer-events: none;
451
- stroke: var(--color-selection-stroke);
452
- fill: var(--color-background);
464
+ stroke: var(--tl-color-selection-stroke);
465
+ fill: var(--tl-color-background);
453
466
  stroke-width: calc(1.5px * var(--tl-scale));
454
467
  }
455
468
 
456
469
  .tl-text-handle {
457
470
  pointer-events: none;
458
- fill: var(--color-selection-stroke);
471
+ fill: var(--tl-color-selection-stroke);
459
472
  }
460
473
 
461
474
  .tl-corner-crop-handle {
462
475
  pointer-events: none;
463
476
  fill: none;
464
- stroke: var(--color-selection-stroke);
477
+ stroke: var(--tl-color-selection-stroke);
465
478
  }
466
479
 
467
480
  .tl-corner-crop-edge-handle {
468
481
  pointer-events: none;
469
482
  fill: none;
470
- stroke: var(--color-selection-stroke);
483
+ stroke: var(--tl-color-selection-stroke);
471
484
  }
472
485
 
473
486
  .tl-mobile-rotate__bg {
@@ -477,8 +490,8 @@ input,
477
490
 
478
491
  .tl-mobile-rotate__fg {
479
492
  pointer-events: none;
480
- stroke: var(--color-selection-stroke);
481
- fill: var(--color-background);
493
+ stroke: var(--tl-color-selection-stroke);
494
+ fill: var(--tl-color-background);
482
495
  stroke-width: calc(1.5px * var(--tl-scale));
483
496
  }
484
497
 
@@ -508,8 +521,8 @@ input,
508
521
  text-overflow: ellipsis;
509
522
  font-size: 12px;
510
523
  font-family: var(--font-body);
511
- border-radius: var(--radius-2);
512
- color: var(--color-selected-contrast);
524
+ border-radius: var(--tl-radius-2);
525
+ color: var(--tl-color-selected-contrast);
513
526
  }
514
527
 
515
528
  .tl-nametag-title {
@@ -527,7 +540,7 @@ input,
527
540
  font-size: 12px;
528
541
  font-family: var(--font-body);
529
542
  text-shadow: var(--tl-text-outline);
530
- color: var(--color-selected-contrast);
543
+ color: var(--tl-color-selected-contrast);
531
544
  }
532
545
 
533
546
  .tl-nametag-chat {
@@ -536,31 +549,31 @@ input,
536
549
  left: 13px;
537
550
  width: fit-content;
538
551
  height: fit-content;
539
- color: var(--color-selected-contrast);
552
+ color: var(--tl-color-selected-contrast);
540
553
  white-space: nowrap;
541
554
  position: absolute;
542
555
  padding: 3px 6px;
543
556
  font-size: 12px;
544
557
  font-family: var(--font-body);
545
558
  opacity: 1;
546
- border-radius: var(--radius-2);
559
+ border-radius: var(--tl-radius-2);
547
560
  }
548
561
 
549
562
  .tl-cursor-chat {
550
563
  position: absolute;
551
- color: var(--color-selected-contrast);
564
+ color: var(--tl-color-selected-contrast);
552
565
  white-space: nowrap;
553
566
  padding: 3px 6px;
554
567
  font-size: 12px;
555
568
  font-family: var(--font-body);
556
569
  pointer-events: none;
557
- z-index: var(--layer-cursor);
570
+ z-index: var(--tl-layer-cursor);
558
571
  margin-top: 16px;
559
572
  margin-left: 13px;
560
573
  opacity: 1;
561
574
  border: none;
562
575
  user-select: text;
563
- border-radius: var(--radius-2);
576
+ border-radius: var(--tl-radius-2);
564
577
  }
565
578
 
566
579
  .tl-cursor-chat .tl-cursor-chat__bubble {
@@ -568,13 +581,13 @@ input,
568
581
  }
569
582
 
570
583
  .tl-cursor-chat::selection {
571
- background: var(--color-selected);
572
- color: var(--color-selected-contrast);
584
+ background: var(--tl-color-selected);
585
+ color: var(--tl-color-selected-contrast);
573
586
  text-shadow: none;
574
587
  }
575
588
 
576
589
  .tl-cursor-chat::placeholder {
577
- color: var(--color-selected-contrast);
590
+ color: var(--tl-color-selected-contrast);
578
591
  opacity: 0.7;
579
592
  }
580
593
 
@@ -645,7 +658,7 @@ input,
645
658
  background: none;
646
659
  border-image: none;
647
660
  border: 0px;
648
- caret-color: var(--color-text);
661
+ caret-color: var(--tl-color-text);
649
662
  color: inherit;
650
663
  column-count: initial !important;
651
664
  display: inline-block;
@@ -677,7 +690,7 @@ input,
677
690
 
678
691
  .tl-text-measure {
679
692
  position: absolute;
680
- z-index: var(--layer-canvas-hidden);
693
+ z-index: var(--tl-layer-canvas-hidden);
681
694
  top: 0px;
682
695
  left: 0px;
683
696
  opacity: 0;
@@ -740,8 +753,8 @@ input,
740
753
  }
741
754
 
742
755
  .tl-text-input::selection {
743
- background: var(--color-selected);
744
- color: var(--color-selected-contrast);
756
+ background: var(--tl-color-selected);
757
+ color: var(--tl-color-selected-contrast);
745
758
  text-shadow: none;
746
759
  }
747
760
 
@@ -751,7 +764,7 @@ input,
751
764
  display: flex;
752
765
  justify-content: center;
753
766
  align-items: center;
754
- color: var(--color-text);
767
+ color: var(--tl-color-text);
755
768
  text-shadow: var(--tl-text-outline);
756
769
  line-height: inherit;
757
770
  position: absolute;
@@ -795,7 +808,7 @@ input,
795
808
 
796
809
  .tl-text-wrapper .tl-text-content {
797
810
  pointer-events: all;
798
- z-index: var(--layer-text-content);
811
+ z-index: var(--tl-layer-text-content);
799
812
  }
800
813
 
801
814
  .tl-text-label__inner > .tl-text-content {
@@ -805,7 +818,7 @@ input,
805
818
  padding: inherit;
806
819
  height: fit-content;
807
820
  width: fit-content;
808
- border-radius: var(--radius-1);
821
+ border-radius: var(--tl-radius-1);
809
822
  max-width: 100%;
810
823
  }
811
824
 
@@ -818,7 +831,7 @@ input,
818
831
  }
819
832
 
820
833
  .tl-text-wrapper[data-isselected='true'] .tl-text-input {
821
- z-index: var(--layer-text-editor);
834
+ z-index: var(--tl-layer-text-editor);
822
835
  pointer-events: all;
823
836
  }
824
837
 
@@ -913,7 +926,7 @@ input,
913
926
  }
914
927
 
915
928
  .tl-rich-text a {
916
- color: var(--color-primary);
929
+ color: var(--tl-color-primary);
917
930
  text-decoration: underline;
918
931
  }
919
932
 
@@ -936,14 +949,14 @@ input,
936
949
  }
937
950
 
938
951
  .tl-theme__dark .tl-rich-text mark {
939
- background-color: var(--color-text-highlight);
952
+ background-color: var(--tl-color-text-highlight);
940
953
  color: currentColor;
941
954
  }
942
955
 
943
956
  @supports (color: color(display-p3 1 1 1)) {
944
957
  @media (color-gamut: p3) {
945
958
  .tl-container:not(.tl-theme__force-sRGB) .tl-rich-text mark {
946
- background-color: var(--color-text-highlight-p3);
959
+ background-color: var(--tl-color-text-highlight-p3);
947
960
  }
948
961
  }
949
962
  }
@@ -955,15 +968,15 @@ input,
955
968
  /* --------------------- Loading -------------------- */
956
969
 
957
970
  .tl-loading {
958
- background-color: var(--color-background);
959
- color: var(--color-text-1);
971
+ background-color: var(--tl-color-background);
972
+ color: var(--tl-color-text-1);
960
973
  height: 100%;
961
974
  width: 100%;
962
975
  display: flex;
963
976
  flex-direction: column;
964
977
  justify-content: center;
965
978
  align-items: center;
966
- gap: var(--space-2);
979
+ gap: var(--tl-space-2);
967
980
  font-size: 14px;
968
981
  font-weight: 500;
969
982
  opacity: 0;
@@ -971,7 +984,7 @@ input,
971
984
  animation-delay: 0.2s;
972
985
  position: absolute;
973
986
  inset: 0px;
974
- z-index: var(--layer-canvas-blocker);
987
+ z-index: var(--tl-layer-canvas-blocker);
975
988
  }
976
989
 
977
990
  @keyframes tl-fade-in {
@@ -1004,8 +1017,8 @@ input,
1004
1017
  }
1005
1018
 
1006
1019
  .tl-brush__default {
1007
- stroke: var(--color-brush-stroke);
1008
- fill: var(--color-brush-fill);
1020
+ stroke: var(--tl-color-brush-stroke);
1021
+ fill: var(--tl-color-brush-fill);
1009
1022
  }
1010
1023
 
1011
1024
  /* -------------------- Scribble -------------------- */
@@ -1020,13 +1033,13 @@ input,
1020
1033
  /* ---------------------- Snaps --------------------- */
1021
1034
 
1022
1035
  .tl-snap-indicator {
1023
- stroke: var(--color-snap);
1036
+ stroke: var(--tl-color-snap);
1024
1037
  stroke-width: calc(1px * var(--tl-scale));
1025
1038
  fill: none;
1026
1039
  }
1027
1040
 
1028
1041
  .tl-snap-point {
1029
- stroke: var(--color-snap);
1042
+ stroke: var(--tl-color-snap);
1030
1043
  stroke-width: calc(1px * var(--tl-scale));
1031
1044
  fill: none;
1032
1045
  }
@@ -1046,7 +1059,7 @@ input,
1046
1059
  justify-content: center;
1047
1060
  font-size: 12px;
1048
1061
  font-weight: 400;
1049
- color: var(--color-text-1);
1062
+ color: var(--tl-color-text-1);
1050
1063
  padding: 13px;
1051
1064
  cursor: var(--tl-cursor-pointer);
1052
1065
  border: none;
@@ -1064,13 +1077,13 @@ input,
1064
1077
  display: block;
1065
1078
  width: calc(100% - 12px);
1066
1079
  height: calc(100% - 12px);
1067
- border-radius: var(--radius-1);
1068
- background-color: var(--color-background);
1080
+ border-radius: var(--tl-radius-1);
1081
+ background-color: var(--tl-color-background);
1069
1082
  pointer-events: none;
1070
1083
  }
1071
1084
 
1072
1085
  .tl-hyperlink-button:focus-visible {
1073
- color: var(--color-selected);
1086
+ color: var(--tl-color-selected);
1074
1087
  }
1075
1088
 
1076
1089
  .tl-hyperlink__icon {
@@ -1097,8 +1110,8 @@ input,
1097
1110
  }
1098
1111
 
1099
1112
  .tl-handle__fg {
1100
- fill: var(--color-selected-contrast);
1101
- stroke: var(--color-selection-stroke);
1113
+ fill: var(--tl-color-selected-contrast);
1114
+ stroke: var(--tl-color-selection-stroke);
1102
1115
  stroke-width: calc(1.5px * var(--tl-scale));
1103
1116
  pointer-events: none;
1104
1117
  }
@@ -1108,7 +1121,7 @@ input,
1108
1121
  }
1109
1122
 
1110
1123
  .tl-handle__clone > .tl-handle__fg {
1111
- fill: var(--color-selection-stroke);
1124
+ fill: var(--tl-color-selection-stroke);
1112
1125
  stroke: none;
1113
1126
  }
1114
1127
 
@@ -1118,7 +1131,7 @@ input,
1118
1131
 
1119
1132
  @media (pointer: coarse) {
1120
1133
  .tl-handle__bg:active {
1121
- fill: var(--color-selection-fill);
1134
+ fill: var(--tl-color-selection-fill);
1122
1135
  }
1123
1136
 
1124
1137
  .tl-handle__create {
@@ -1174,13 +1187,13 @@ input,
1174
1187
  stroke-linejoin: round;
1175
1188
  /* content-visibility: auto; */
1176
1189
  transform-origin: top left;
1177
- color: var(--color-text-1);
1190
+ color: var(--tl-color-text-1);
1178
1191
  }
1179
1192
 
1180
1193
  /* -------------------- Group shape ------------------ */
1181
1194
 
1182
1195
  .tl-group {
1183
- stroke: var(--color-text);
1196
+ stroke: var(--tl-color-text);
1184
1197
  stroke-width: calc(1px * var(--tl-scale));
1185
1198
  opacity: 0.5;
1186
1199
  }
@@ -1198,12 +1211,12 @@ input,
1198
1211
  justify-content: center;
1199
1212
  align-items: center;
1200
1213
  text-align: center;
1201
- color: var(--color-text);
1214
+ color: var(--tl-color-text);
1202
1215
  text-shadow: var(--tl-text-outline);
1203
1216
  }
1204
1217
 
1205
1218
  .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1206
- border-radius: var(--radius-1);
1219
+ border-radius: var(--tl-radius-1);
1207
1220
  box-sizing: content-box;
1208
1221
  height: max-content;
1209
1222
  width: max-content;
@@ -1214,22 +1227,22 @@ input,
1214
1227
  }
1215
1228
 
1216
1229
  .tl-arrow-hint {
1217
- stroke: var(--color-text-1);
1230
+ stroke: var(--tl-color-text-1);
1218
1231
  fill: none;
1219
1232
  stroke-linecap: round;
1220
1233
  overflow: visible;
1221
1234
  }
1222
1235
 
1223
1236
  .tl-arrow-hint-handle {
1224
- fill: var(--color-selected-contrast);
1225
- stroke: var(--color-selection-stroke);
1237
+ fill: var(--tl-color-selected-contrast);
1238
+ stroke: var(--tl-color-selection-stroke);
1226
1239
  stroke-width: calc(1.5px * var(--tl-scale));
1227
1240
  r: calc(4px * var(--tl-scale));
1228
1241
  }
1229
1242
 
1230
1243
  .tl-arrow-hint-snap {
1231
1244
  stroke: transparent;
1232
- fill: var(--color-selection-fill);
1245
+ fill: var(--tl-color-selection-fill);
1233
1246
  r: calc(12px * var(--tl-scale));
1234
1247
  }
1235
1248
 
@@ -1249,40 +1262,40 @@ input,
1249
1262
  width: 100%;
1250
1263
  height: 100%;
1251
1264
  position: relative;
1252
- border: 1px solid var(--color-panel-contrast);
1253
- background-color: var(--color-panel);
1254
- border-radius: var(--radius-2);
1265
+ border: 1px solid var(--tl-color-panel-contrast);
1266
+ background-color: var(--tl-color-panel);
1267
+ border-radius: var(--tl-radius-2);
1255
1268
  display: flex;
1256
1269
  flex-direction: column;
1257
1270
  overflow: hidden;
1258
1271
  }
1259
1272
 
1260
1273
  .tl-bookmark__container--safariExport {
1261
- border: 1px solid var(--color-divider);
1274
+ border: 1px solid var(--tl-color-divider);
1262
1275
  }
1263
1276
 
1264
1277
  .tl-bookmark__image_container {
1265
1278
  flex: 1 1 100%;
1266
1279
  overflow: hidden;
1267
- border-top-left-radius: var(--radius-1);
1268
- border-top-right-radius: var(--radius-1);
1280
+ border-top-left-radius: var(--tl-radius-1);
1281
+ border-top-right-radius: var(--tl-radius-1);
1269
1282
  width: 100%;
1270
1283
  height: 100%;
1271
1284
  display: flex;
1272
1285
  justify-content: flex-end;
1273
1286
  align-items: flex-start;
1274
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1287
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1275
1288
  }
1276
1289
 
1277
1290
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1278
- background-color: var(--color-panel);
1291
+ background-color: var(--tl-color-panel);
1279
1292
  }
1280
1293
 
1281
1294
  .tl-bookmark__placeholder {
1282
1295
  width: 100%;
1283
1296
  height: 100%;
1284
- background-color: var(--color-muted-2);
1285
- border-bottom: 1px solid var(--color-muted-2);
1297
+ background-color: var(--tl-color-muted-2);
1298
+ border-bottom: 1px solid var(--tl-color-muted-2);
1286
1299
  }
1287
1300
 
1288
1301
  .tl-bookmark__image {
@@ -1290,12 +1303,12 @@ input,
1290
1303
  height: 100%;
1291
1304
  object-fit: cover;
1292
1305
  object-position: center;
1293
- border-bottom: 1px solid var(--color-muted-2);
1306
+ border-bottom: 1px solid var(--tl-color-muted-2);
1294
1307
  }
1295
1308
 
1296
1309
  .tl-bookmark__copy_container {
1297
- background-color: var(--color-muted-0);
1298
- padding: var(--space-4);
1310
+ background-color: var(--tl-color-muted-0);
1311
+ padding: var(--tl-space-4);
1299
1312
  pointer-events: all;
1300
1313
  display: flex;
1301
1314
  flex-direction: column;
@@ -1315,7 +1328,7 @@ input,
1315
1328
  font-size: 16px;
1316
1329
  line-height: 1.6;
1317
1330
  font-weight: bold;
1318
- padding-bottom: var(--space-2);
1331
+ padding-bottom: var(--tl-space-2);
1319
1332
  overflow: hidden;
1320
1333
  max-height: calc((16px * 1.6) * 2);
1321
1334
  -webkit-box-orient: vertical;
@@ -1335,19 +1348,19 @@ input,
1335
1348
  line-clamp: 3;
1336
1349
  text-overflow: ellipsis;
1337
1350
  display: -webkit-box;
1338
- color: var(--color-text-2);
1339
- margin: var(--space-2) 0px;
1351
+ color: var(--tl-color-text-2);
1352
+ margin: var(--tl-space-2) 0px;
1340
1353
  }
1341
1354
 
1342
1355
  .tl-bookmark__heading + .tl-bookmark__link,
1343
1356
  .tl-bookmark__description + .tl-bookmark__link {
1344
- margin-top: var(--space-3);
1357
+ margin-top: var(--tl-space-3);
1345
1358
  }
1346
1359
  .tl-bookmark__link {
1347
1360
  font-size: 12px;
1348
1361
  pointer-events: all;
1349
1362
  display: flex;
1350
- color: var(--color-text-2);
1363
+ color: var(--tl-color-text-2);
1351
1364
  align-items: center;
1352
1365
  cursor: var(--tl-cursor-pointer);
1353
1366
  width: fit-content;
@@ -1389,7 +1402,7 @@ input,
1389
1402
  width: 100%;
1390
1403
  height: 100%;
1391
1404
  pointer-events: all;
1392
- /* background-color: var(--color-background); */
1405
+ /* background-color: var(--tl-color-background); */
1393
1406
 
1394
1407
  display: flex;
1395
1408
  justify-content: center;
@@ -1418,7 +1431,7 @@ input,
1418
1431
  height: 100%;
1419
1432
  pointer-events: all;
1420
1433
  opacity: 1;
1421
- z-index: var(--layer-text-container);
1434
+ z-index: var(--tl-layer-text-container);
1422
1435
  border-radius: 1px;
1423
1436
  }
1424
1437
 
@@ -1434,22 +1447,22 @@ input,
1434
1447
  }
1435
1448
 
1436
1449
  .tl-frame__creating {
1437
- stroke: var(--color-selected);
1450
+ stroke: var(--tl-color-selected);
1438
1451
  fill: none;
1439
1452
  }
1440
1453
 
1441
1454
  .tl-frame-heading {
1442
- --frame-padding-x: 6px;
1443
- --frame-height: 24px;
1444
- --frame-minimum-width: 32px;
1445
- --frame-offset-width: 16px;
1455
+ --tl-frame-padding-x: 6px;
1456
+ --tl-frame-height: 24px;
1457
+ --tl-frame-minimum-width: 32px;
1458
+ --tl-frame-offset-width: 16px;
1446
1459
  display: flex;
1447
1460
  align-items: center;
1448
1461
  position: absolute;
1449
1462
  transform-origin: 0% 100%;
1450
1463
  overflow: hidden;
1451
1464
  max-width: 100%;
1452
- min-width: var(--frame-minimum-width);
1465
+ min-width: var(--tl-frame-minimum-width);
1453
1466
  height: auto;
1454
1467
  font-size: 12px;
1455
1468
  padding-bottom: 4px;
@@ -1461,18 +1474,18 @@ input,
1461
1474
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1462
1475
  transform-origin: 0% 100%;
1463
1476
  display: flex;
1464
- height: var(--frame-height);
1477
+ height: var(--tl-frame-height);
1465
1478
  width: 100%;
1466
1479
  align-items: center;
1467
- border-radius: var(--radius-1);
1480
+ border-radius: var(--tl-radius-1);
1468
1481
  }
1469
1482
 
1470
1483
  .tl-frame-label {
1471
1484
  pointer-events: all;
1472
1485
  overflow: hidden;
1473
1486
  text-overflow: ellipsis;
1474
- padding: 0px var(--frame-padding-x);
1475
- border-radius: var(--radius-1);
1487
+ padding: 0px var(--tl-frame-padding-x);
1488
+ border-radius: var(--tl-radius-1);
1476
1489
  position: relative;
1477
1490
  font-size: inherit;
1478
1491
  white-space: pre;
@@ -1482,12 +1495,12 @@ input,
1482
1495
  color: transparent;
1483
1496
  white-space: pre;
1484
1497
  width: auto;
1485
- min-width: var(--frame-minimum-width);
1498
+ min-width: var(--tl-frame-minimum-width);
1486
1499
  height: 100%;
1487
1500
  overflow: visible;
1488
- background-color: var(--color-panel);
1489
- border-color: var(--color-selected);
1490
- box-shadow: inset 0px 0px 0px 1.5px var(--color-selected);
1501
+ background-color: var(--tl-color-panel);
1502
+ border-color: var(--tl-color-selected);
1503
+ box-shadow: inset 0px 0px 0px 1.5px var(--tl-color-selected);
1491
1504
  }
1492
1505
 
1493
1506
  .tl-frame-name-input {
@@ -1495,7 +1508,7 @@ input,
1495
1508
  border: none;
1496
1509
  background: none;
1497
1510
  outline: none;
1498
- padding: 0px var(--frame-padding-x);
1511
+ padding: 0px var(--tl-frame-padding-x);
1499
1512
  inset: 0px;
1500
1513
  height: 100%;
1501
1514
  width: 100%;
@@ -1503,8 +1516,8 @@ input,
1503
1516
  font-family: inherit;
1504
1517
  font-weight: inherit;
1505
1518
  width: 100%;
1506
- color: var(--color-text-1);
1507
- border-radius: var(--radius-1);
1519
+ color: var(--tl-color-text-1);
1520
+ border-radius: var(--tl-radius-1);
1508
1521
  user-select: all;
1509
1522
  -webkit-user-select: text;
1510
1523
  white-space: pre;
@@ -1524,7 +1537,7 @@ input,
1524
1537
 
1525
1538
  .tl-embed {
1526
1539
  border: none;
1527
- border-radius: var(--radius-2);
1540
+ border-radius: var(--tl-radius-2);
1528
1541
  }
1529
1542
 
1530
1543
  /* -------------- Shape error boundary -------------- */
@@ -1532,11 +1545,11 @@ input,
1532
1545
  .tl-shape-error-boundary {
1533
1546
  width: 100%;
1534
1547
  height: 100%;
1535
- background-color: var(--color-muted-1);
1548
+ background-color: var(--tl-color-muted-1);
1536
1549
  border-width: calc(1px * var(--tl-scale));
1537
- border-color: var(--color-muted-1);
1550
+ border-color: var(--tl-color-muted-1);
1538
1551
  border-style: solid;
1539
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1552
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1540
1553
  display: flex;
1541
1554
  flex-direction: column;
1542
1555
  align-items: center;
@@ -1545,7 +1558,7 @@ input,
1545
1558
  position: relative;
1546
1559
  pointer-events: all;
1547
1560
  overflow: hidden;
1548
- padding: var(--space-2);
1561
+ padding: var(--tl-space-2);
1549
1562
  }
1550
1563
 
1551
1564
  .tl-shape-error-boundary::before {
@@ -1553,7 +1566,7 @@ input,
1553
1566
  content: 'Error';
1554
1567
  font-size: 12px;
1555
1568
  font-family: inherit;
1556
- color: var(--color-text-0);
1569
+ color: var(--tl-color-text-0);
1557
1570
  }
1558
1571
 
1559
1572
  /* ----------------- Error boundary ----------------- */
@@ -1564,9 +1577,9 @@ input,
1564
1577
  display: flex;
1565
1578
  align-items: center;
1566
1579
  justify-content: center;
1567
- padding: var(--space-4);
1568
- background-color: var(--color-background);
1569
- color: var(--color-text-1);
1580
+ padding: var(--tl-space-4);
1581
+ background-color: var(--tl-color-background);
1582
+ color: var(--tl-color-text-1);
1570
1583
  position: absolute;
1571
1584
  }
1572
1585
 
@@ -1575,8 +1588,8 @@ input,
1575
1588
  inset: 0px;
1576
1589
  height: 100%;
1577
1590
  width: 100%;
1578
- z-index: var(--layer-error-overlay);
1579
- background-color: var(--color-overlay);
1591
+ z-index: var(--tl-layer-error-overlay);
1592
+ background-color: var(--tl-color-overlay);
1580
1593
  }
1581
1594
 
1582
1595
  .tl-error-boundary__content * {
@@ -1591,7 +1604,7 @@ input,
1591
1604
  inset: 0px;
1592
1605
  height: 100%;
1593
1606
  width: 100%;
1594
- z-index: var(--layer-error-canvas);
1607
+ z-index: var(--tl-layer-error-canvas);
1595
1608
  }
1596
1609
 
1597
1610
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1604,7 +1617,7 @@ it from receiving any pointer events or affecting the cursor. */
1604
1617
  inset: 0px;
1605
1618
  height: 100%;
1606
1619
  width: 100%;
1607
- z-index: var(--layer-error-canvas-after);
1620
+ z-index: var(--tl-layer-error-canvas-after);
1608
1621
  pointer-events: all;
1609
1622
  }
1610
1623
 
@@ -1614,16 +1627,16 @@ it from receiving any pointer events or affecting the cursor. */
1614
1627
  max-width: 100%;
1615
1628
  width: 400px;
1616
1629
  max-height: 100%;
1617
- background-color: var(--color-panel);
1630
+ background-color: var(--tl-color-panel);
1618
1631
  padding: 16px;
1619
1632
  border-radius: 16px;
1620
- box-shadow: var(--shadow-2);
1633
+ box-shadow: var(--tl-shadow-2);
1621
1634
  font-size: 14px;
1622
1635
  font-weight: 400;
1623
1636
  display: flex;
1624
1637
  flex-direction: column;
1625
1638
  overflow: auto;
1626
- z-index: var(--layer-error-content);
1639
+ z-index: var(--tl-layer-error-content);
1627
1640
  gap: 12px;
1628
1641
  }
1629
1642
 
@@ -1638,10 +1651,10 @@ it from receiving any pointer events or affecting the cursor. */
1638
1651
  }
1639
1652
 
1640
1653
  .tl-error-boundary__content h4 {
1641
- border: 1px solid var(--color-low-border);
1654
+ border: 1px solid var(--tl-color-low-border);
1642
1655
  margin: -6px 0 0 0;
1643
- padding: var(--space-5);
1644
- border-radius: var(--radius-2);
1656
+ padding: var(--tl-space-5);
1657
+ border-radius: var(--tl-radius-2);
1645
1658
  font-weight: normal;
1646
1659
  }
1647
1660
 
@@ -1651,10 +1664,10 @@ it from receiving any pointer events or affecting the cursor. */
1651
1664
  }
1652
1665
 
1653
1666
  .tl-error-boundary__content pre {
1654
- background-color: var(--color-muted-2);
1667
+ background-color: var(--tl-color-muted-2);
1655
1668
  margin-top: 0;
1656
- padding: var(--space-5);
1657
- border-radius: var(--radius-2);
1669
+ padding: var(--tl-space-5);
1670
+ border-radius: var(--tl-radius-2);
1658
1671
  overflow: auto;
1659
1672
  font-size: 12px;
1660
1673
  max-height: 320px;
@@ -1666,15 +1679,15 @@ it from receiving any pointer events or affecting the cursor. */
1666
1679
  font-family: inherit;
1667
1680
  font-size: 14px;
1668
1681
  font-weight: 500;
1669
- padding: var(--space-4);
1670
- border-radius: var(--radius-3);
1682
+ padding: var(--tl-space-4);
1683
+ border-radius: var(--tl-radius-3);
1671
1684
  cursor: var(--tl-cursor-pointer);
1672
1685
  color: inherit;
1673
1686
  background-color: transparent;
1674
1687
  }
1675
1688
 
1676
1689
  .tl-error-boundary__content a {
1677
- color: var(--color-selected);
1690
+ color: var(--tl-color-selected);
1678
1691
  font-weight: 500;
1679
1692
  text-decoration: none;
1680
1693
  }
@@ -1686,31 +1699,31 @@ it from receiving any pointer events or affecting the cursor. */
1686
1699
 
1687
1700
  .tl-error-boundary__content__error button {
1688
1701
  position: absolute;
1689
- top: var(--space-2);
1690
- right: var(--space-2);
1702
+ top: var(--tl-space-2);
1703
+ right: var(--tl-space-2);
1691
1704
  font-size: 12px;
1692
- padding: var(--space-2) var(--space-3);
1693
- background-color: var(--color-panel);
1694
- border-radius: var(--radius-1);
1705
+ padding: var(--tl-space-2) var(--tl-space-3);
1706
+ background-color: var(--tl-color-panel);
1707
+ border-radius: var(--tl-radius-1);
1695
1708
  }
1696
1709
 
1697
1710
  .tl-error-boundary__content__actions {
1698
1711
  display: flex;
1699
1712
  justify-content: space-between;
1700
- gap: var(--space-4);
1713
+ gap: var(--tl-space-4);
1701
1714
  margin: 0px;
1702
1715
  margin-left: -4px;
1703
1716
  }
1704
1717
  .tl-error-boundary__content__actions__group {
1705
1718
  display: flex;
1706
- gap: var(--space-4);
1719
+ gap: var(--tl-space-4);
1707
1720
  }
1708
1721
  .tl-error-boundary__content .tl-error-boundary__reset {
1709
- color: var(--color-danger);
1722
+ color: var(--tl-color-danger);
1710
1723
  }
1711
1724
  .tl-error-boundary__content .tl-error-boundary__refresh {
1712
- background-color: var(--color-primary);
1713
- color: var(--color-selected-contrast);
1725
+ background-color: var(--tl-color-primary);
1726
+ color: var(--tl-color-selected-contrast);
1714
1727
  }
1715
1728
  .tl-container__focused:not(.tl-container__no-focus-ring)
1716
1729
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1722,7 +1735,7 @@ it from receiving any pointer events or affecting the cursor. */
1722
1735
 
1723
1736
  .tl-hit-test-blocker {
1724
1737
  position: absolute;
1725
- z-index: var(--layer-canvas-blocker);
1738
+ z-index: var(--tl-layer-canvas-blocker);
1726
1739
  inset: 0px;
1727
1740
  width: 100%;
1728
1741
  height: 100%;
@@ -1742,32 +1755,32 @@ it from receiving any pointer events or affecting the cursor. */
1742
1755
 
1743
1756
  .tl-handle__bg:hover {
1744
1757
  cursor: var(--tl-cursor-grab);
1745
- fill: var(--color-selection-fill);
1758
+ fill: var(--tl-color-selection-fill);
1746
1759
  }
1747
1760
 
1748
1761
  .tl-bookmark__link:hover {
1749
- color: var(--color-selected);
1762
+ color: var(--tl-color-selected);
1750
1763
  }
1751
1764
 
1752
1765
  .tl-hyperlink-button:hover {
1753
- color: var(--color-selected);
1766
+ color: var(--tl-color-selected);
1754
1767
  }
1755
1768
 
1756
1769
  .tl-error-boundary__content button:hover {
1757
- background-color: var(--color-low);
1770
+ background-color: var(--tl-color-low);
1758
1771
  }
1759
1772
  .tl-error-boundary__content a:hover {
1760
- color: var(--color-text-1);
1773
+ color: var(--tl-color-text-1);
1761
1774
  }
1762
1775
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1763
- background-color: var(--color-primary);
1776
+ background-color: var(--tl-color-primary);
1764
1777
  opacity: 0.9;
1765
1778
  }
1766
1779
 
1767
1780
  /* These three rules help preserve clicking into specific points in text areas *while*
1768
1781
  * already in edit mode when jumping from shape to shape. */
1769
1782
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1770
- z-index: var(--layer-text-editor);
1783
+ z-index: var(--tl-layer-text-editor);
1771
1784
  pointer-events: all;
1772
1785
  }
1773
1786
  }