@tldraw/editor 3.16.0-canary.f60032f16651 → 3.16.0-canary.faec5de49906

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 (167) hide show
  1. package/dist-cjs/index.d.ts +77 -101
  2. package/dist-cjs/index.js +3 -5
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +6 -6
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/Shape.js +7 -10
  7. package/dist-cjs/lib/components/Shape.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +4 -23
  9. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  11. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +1 -1
  12. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
  14. package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
  17. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  18. package/dist-cjs/lib/config/TLUserPreferences.js +9 -3
  19. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  20. package/dist-cjs/lib/editor/Editor.js +61 -126
  21. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  22. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
  23. package/dist-cjs/lib/editor/derivations/notVisibleShapes.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 +23 -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 +7 -5
  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/license/LicenseManager.js +120 -50
  38. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  39. package/dist-cjs/lib/license/LicenseProvider.js +39 -1
  40. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  41. package/dist-cjs/lib/license/Watermark.js +72 -10
  42. package/dist-cjs/lib/license/Watermark.js.map +3 -3
  43. package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
  44. package/dist-cjs/lib/options.js +7 -0
  45. package/dist-cjs/lib/options.js.map +2 -2
  46. package/dist-cjs/lib/primitives/Box.js +3 -0
  47. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  48. package/dist-cjs/lib/primitives/Vec.js +0 -4
  49. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  50. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +50 -20
  51. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  52. package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -1
  53. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  54. package/dist-cjs/lib/utils/reparenting.js +2 -35
  55. package/dist-cjs/lib/utils/reparenting.js.map +3 -3
  56. package/dist-cjs/version.js +3 -3
  57. package/dist-cjs/version.js.map +1 -1
  58. package/dist-esm/index.d.mts +77 -101
  59. package/dist-esm/index.mjs +3 -5
  60. package/dist-esm/index.mjs.map +2 -2
  61. package/dist-esm/lib/TldrawEditor.mjs +6 -6
  62. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  63. package/dist-esm/lib/components/Shape.mjs +7 -10
  64. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  65. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +4 -23
  66. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  67. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  68. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +1 -1
  69. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
  70. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
  71. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
  72. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
  73. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
  74. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  75. package/dist-esm/lib/config/TLUserPreferences.mjs +9 -3
  76. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  77. package/dist-esm/lib/editor/Editor.mjs +61 -126
  78. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  79. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
  80. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  81. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +9 -4
  82. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  83. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -0
  84. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  85. package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
  86. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  87. package/dist-esm/lib/hooks/useCanvasEvents.mjs +7 -5
  88. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  89. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
  90. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  91. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
  92. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  93. package/dist-esm/lib/license/LicenseManager.mjs +121 -51
  94. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  95. package/dist-esm/lib/license/LicenseProvider.mjs +39 -2
  96. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  97. package/dist-esm/lib/license/Watermark.mjs +72 -10
  98. package/dist-esm/lib/license/Watermark.mjs.map +3 -3
  99. package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
  100. package/dist-esm/lib/options.mjs +7 -0
  101. package/dist-esm/lib/options.mjs.map +2 -2
  102. package/dist-esm/lib/primitives/Box.mjs +4 -1
  103. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  104. package/dist-esm/lib/primitives/Vec.mjs +0 -4
  105. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  106. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +53 -21
  107. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  108. package/dist-esm/lib/primitives/geometry/Group2d.mjs +8 -1
  109. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  110. package/dist-esm/lib/utils/reparenting.mjs +3 -40
  111. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  112. package/dist-esm/version.mjs +3 -3
  113. package/dist-esm/version.mjs.map +1 -1
  114. package/editor.css +308 -290
  115. package/package.json +14 -37
  116. package/src/index.ts +2 -9
  117. package/src/lib/TldrawEditor.tsx +7 -14
  118. package/src/lib/components/Shape.tsx +6 -12
  119. package/src/lib/components/default-components/DefaultCanvas.tsx +5 -22
  120. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  121. package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
  122. package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
  123. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +5 -1
  124. package/src/lib/config/TLUserPreferences.ts +8 -1
  125. package/src/lib/editor/Editor.test.ts +12 -11
  126. package/src/lib/editor/Editor.ts +79 -168
  127. package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
  128. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
  129. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
  130. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
  131. package/src/lib/editor/managers/FontManager/FontManager.test.ts +24 -23
  132. package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
  133. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
  134. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
  135. package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
  136. package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
  137. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +34 -26
  138. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +6 -1
  139. package/src/lib/editor/shapes/ShapeUtil.ts +46 -0
  140. package/src/lib/editor/types/misc-types.ts +0 -6
  141. package/src/lib/exports/getSvgJsx.test.ts +868 -0
  142. package/src/lib/exports/getSvgJsx.tsx +78 -21
  143. package/src/lib/hooks/useCanvasEvents.ts +6 -6
  144. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
  145. package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
  146. package/src/lib/license/LicenseManager.test.ts +648 -383
  147. package/src/lib/license/LicenseManager.ts +173 -53
  148. package/src/lib/license/LicenseProvider.tsx +74 -2
  149. package/src/lib/license/Watermark.test.tsx +2 -1
  150. package/src/lib/license/Watermark.tsx +77 -10
  151. package/src/lib/license/useLicenseManagerState.ts +2 -2
  152. package/src/lib/options.ts +8 -0
  153. package/src/lib/primitives/Box.test.ts +126 -0
  154. package/src/lib/primitives/Box.ts +10 -1
  155. package/src/lib/primitives/Vec.ts +0 -5
  156. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  157. package/src/lib/primitives/geometry/Geometry2d.ts +78 -21
  158. package/src/lib/primitives/geometry/Group2d.ts +10 -1
  159. package/src/lib/utils/reparenting.ts +3 -69
  160. package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
  161. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
  162. package/src/version.ts +3 -3
  163. package/dist-cjs/lib/utils/nearestMultiple.js +0 -34
  164. package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
  165. package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
  166. package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
  167. 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;
@@ -676,11 +689,17 @@ input,
676
689
  }
677
690
 
678
691
  .tl-text-measure {
692
+ z-index: var(--tl-layer-canvas-hidden);
693
+ opacity: 0;
694
+ visibility: hidden;
695
+
696
+ /* pointer-events: all; */
697
+ /* opacity: 1; */
698
+ /* z-index: 99999; */
699
+
679
700
  position: absolute;
680
- z-index: var(--layer-canvas-hidden);
681
701
  top: 0px;
682
702
  left: 0px;
683
- opacity: 0;
684
703
  width: max-content;
685
704
  box-sizing: border-box;
686
705
  pointer-events: none;
@@ -691,7 +710,6 @@ input,
691
710
  border: none;
692
711
  user-select: none;
693
712
  contain: style paint;
694
- visibility: hidden;
695
713
  /* N.B. This property, while discouraged ("intended for Document Type Definition (DTD) designers") is necessary for ensuring correct mixed RTL/LTR behavior when exporting SVGs. */
696
714
  unicode-bidi: plaintext;
697
715
  -webkit-user-select: none;
@@ -740,8 +758,8 @@ input,
740
758
  }
741
759
 
742
760
  .tl-text-input::selection {
743
- background: var(--color-selected);
744
- color: var(--color-selected-contrast);
761
+ background: var(--tl-color-selected);
762
+ color: var(--tl-color-selected-contrast);
745
763
  text-shadow: none;
746
764
  }
747
765
 
@@ -751,7 +769,7 @@ input,
751
769
  display: flex;
752
770
  justify-content: center;
753
771
  align-items: center;
754
- color: var(--color-text);
772
+ color: var(--tl-color-text);
755
773
  text-shadow: var(--tl-text-outline);
756
774
  line-height: inherit;
757
775
  position: absolute;
@@ -795,7 +813,7 @@ input,
795
813
 
796
814
  .tl-text-wrapper .tl-text-content {
797
815
  pointer-events: all;
798
- z-index: var(--layer-text-content);
816
+ z-index: var(--tl-layer-text-content);
799
817
  }
800
818
 
801
819
  .tl-text-label__inner > .tl-text-content {
@@ -805,7 +823,7 @@ input,
805
823
  padding: inherit;
806
824
  height: fit-content;
807
825
  width: fit-content;
808
- border-radius: var(--radius-1);
826
+ border-radius: var(--tl-radius-1);
809
827
  max-width: 100%;
810
828
  }
811
829
 
@@ -818,7 +836,7 @@ input,
818
836
  }
819
837
 
820
838
  .tl-text-wrapper[data-isselected='true'] .tl-text-input {
821
- z-index: var(--layer-text-editor);
839
+ z-index: var(--tl-layer-text-editor);
822
840
  pointer-events: all;
823
841
  }
824
842
 
@@ -913,7 +931,7 @@ input,
913
931
  }
914
932
 
915
933
  .tl-rich-text a {
916
- color: var(--color-primary);
934
+ color: var(--tl-color-primary);
917
935
  text-decoration: underline;
918
936
  }
919
937
 
@@ -936,14 +954,14 @@ input,
936
954
  }
937
955
 
938
956
  .tl-theme__dark .tl-rich-text mark {
939
- background-color: var(--color-text-highlight);
957
+ background-color: var(--tl-color-text-highlight);
940
958
  color: currentColor;
941
959
  }
942
960
 
943
961
  @supports (color: color(display-p3 1 1 1)) {
944
962
  @media (color-gamut: p3) {
945
963
  .tl-container:not(.tl-theme__force-sRGB) .tl-rich-text mark {
946
- background-color: var(--color-text-highlight-p3);
964
+ background-color: var(--tl-color-text-highlight-p3);
947
965
  }
948
966
  }
949
967
  }
@@ -955,15 +973,15 @@ input,
955
973
  /* --------------------- Loading -------------------- */
956
974
 
957
975
  .tl-loading {
958
- background-color: var(--color-background);
959
- color: var(--color-text-1);
976
+ background-color: var(--tl-color-background);
977
+ color: var(--tl-color-text-1);
960
978
  height: 100%;
961
979
  width: 100%;
962
980
  display: flex;
963
981
  flex-direction: column;
964
982
  justify-content: center;
965
983
  align-items: center;
966
- gap: var(--space-2);
984
+ gap: var(--tl-space-2);
967
985
  font-size: 14px;
968
986
  font-weight: 500;
969
987
  opacity: 0;
@@ -971,7 +989,7 @@ input,
971
989
  animation-delay: 0.2s;
972
990
  position: absolute;
973
991
  inset: 0px;
974
- z-index: var(--layer-canvas-blocker);
992
+ z-index: var(--tl-layer-canvas-blocker);
975
993
  }
976
994
 
977
995
  @keyframes tl-fade-in {
@@ -1004,8 +1022,8 @@ input,
1004
1022
  }
1005
1023
 
1006
1024
  .tl-brush__default {
1007
- stroke: var(--color-brush-stroke);
1008
- fill: var(--color-brush-fill);
1025
+ stroke: var(--tl-color-brush-stroke);
1026
+ fill: var(--tl-color-brush-fill);
1009
1027
  }
1010
1028
 
1011
1029
  /* -------------------- Scribble -------------------- */
@@ -1020,13 +1038,13 @@ input,
1020
1038
  /* ---------------------- Snaps --------------------- */
1021
1039
 
1022
1040
  .tl-snap-indicator {
1023
- stroke: var(--color-snap);
1041
+ stroke: var(--tl-color-snap);
1024
1042
  stroke-width: calc(1px * var(--tl-scale));
1025
1043
  fill: none;
1026
1044
  }
1027
1045
 
1028
1046
  .tl-snap-point {
1029
- stroke: var(--color-snap);
1047
+ stroke: var(--tl-color-snap);
1030
1048
  stroke-width: calc(1px * var(--tl-scale));
1031
1049
  fill: none;
1032
1050
  }
@@ -1046,7 +1064,7 @@ input,
1046
1064
  justify-content: center;
1047
1065
  font-size: 12px;
1048
1066
  font-weight: 400;
1049
- color: var(--color-text-1);
1067
+ color: var(--tl-color-text-1);
1050
1068
  padding: 13px;
1051
1069
  cursor: var(--tl-cursor-pointer);
1052
1070
  border: none;
@@ -1064,13 +1082,13 @@ input,
1064
1082
  display: block;
1065
1083
  width: calc(100% - 12px);
1066
1084
  height: calc(100% - 12px);
1067
- border-radius: var(--radius-1);
1068
- background-color: var(--color-background);
1085
+ border-radius: var(--tl-radius-1);
1086
+ background-color: var(--tl-color-background);
1069
1087
  pointer-events: none;
1070
1088
  }
1071
1089
 
1072
1090
  .tl-hyperlink-button:focus-visible {
1073
- color: var(--color-selected);
1091
+ color: var(--tl-color-selected);
1074
1092
  }
1075
1093
 
1076
1094
  .tl-hyperlink__icon {
@@ -1097,8 +1115,8 @@ input,
1097
1115
  }
1098
1116
 
1099
1117
  .tl-handle__fg {
1100
- fill: var(--color-selected-contrast);
1101
- stroke: var(--color-selection-stroke);
1118
+ fill: var(--tl-color-selected-contrast);
1119
+ stroke: var(--tl-color-selection-stroke);
1102
1120
  stroke-width: calc(1.5px * var(--tl-scale));
1103
1121
  pointer-events: none;
1104
1122
  }
@@ -1108,7 +1126,7 @@ input,
1108
1126
  }
1109
1127
 
1110
1128
  .tl-handle__clone > .tl-handle__fg {
1111
- fill: var(--color-selection-stroke);
1129
+ fill: var(--tl-color-selection-stroke);
1112
1130
  stroke: none;
1113
1131
  }
1114
1132
 
@@ -1118,7 +1136,7 @@ input,
1118
1136
 
1119
1137
  @media (pointer: coarse) {
1120
1138
  .tl-handle__bg:active {
1121
- fill: var(--color-selection-fill);
1139
+ fill: var(--tl-color-selection-fill);
1122
1140
  }
1123
1141
 
1124
1142
  .tl-handle__create {
@@ -1174,13 +1192,13 @@ input,
1174
1192
  stroke-linejoin: round;
1175
1193
  /* content-visibility: auto; */
1176
1194
  transform-origin: top left;
1177
- color: var(--color-text-1);
1195
+ color: var(--tl-color-text-1);
1178
1196
  }
1179
1197
 
1180
1198
  /* -------------------- Group shape ------------------ */
1181
1199
 
1182
1200
  .tl-group {
1183
- stroke: var(--color-text);
1201
+ stroke: var(--tl-color-text);
1184
1202
  stroke-width: calc(1px * var(--tl-scale));
1185
1203
  opacity: 0.5;
1186
1204
  }
@@ -1198,12 +1216,12 @@ input,
1198
1216
  justify-content: center;
1199
1217
  align-items: center;
1200
1218
  text-align: center;
1201
- color: var(--color-text);
1219
+ color: var(--tl-color-text);
1202
1220
  text-shadow: var(--tl-text-outline);
1203
1221
  }
1204
1222
 
1205
1223
  .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1206
- border-radius: var(--radius-1);
1224
+ border-radius: var(--tl-radius-1);
1207
1225
  box-sizing: content-box;
1208
1226
  height: max-content;
1209
1227
  width: max-content;
@@ -1214,22 +1232,22 @@ input,
1214
1232
  }
1215
1233
 
1216
1234
  .tl-arrow-hint {
1217
- stroke: var(--color-text-1);
1235
+ stroke: var(--tl-color-text-1);
1218
1236
  fill: none;
1219
1237
  stroke-linecap: round;
1220
1238
  overflow: visible;
1221
1239
  }
1222
1240
 
1223
1241
  .tl-arrow-hint-handle {
1224
- fill: var(--color-selected-contrast);
1225
- stroke: var(--color-selection-stroke);
1242
+ fill: var(--tl-color-selected-contrast);
1243
+ stroke: var(--tl-color-selection-stroke);
1226
1244
  stroke-width: calc(1.5px * var(--tl-scale));
1227
1245
  r: calc(4px * var(--tl-scale));
1228
1246
  }
1229
1247
 
1230
1248
  .tl-arrow-hint-snap {
1231
1249
  stroke: transparent;
1232
- fill: var(--color-selection-fill);
1250
+ fill: var(--tl-color-selection-fill);
1233
1251
  r: calc(12px * var(--tl-scale));
1234
1252
  }
1235
1253
 
@@ -1249,40 +1267,40 @@ input,
1249
1267
  width: 100%;
1250
1268
  height: 100%;
1251
1269
  position: relative;
1252
- border: 1px solid var(--color-panel-contrast);
1253
- background-color: var(--color-panel);
1254
- border-radius: var(--radius-2);
1270
+ border: 1px solid var(--tl-color-panel-contrast);
1271
+ background-color: var(--tl-color-panel);
1272
+ border-radius: var(--tl-radius-2);
1255
1273
  display: flex;
1256
1274
  flex-direction: column;
1257
1275
  overflow: hidden;
1258
1276
  }
1259
1277
 
1260
1278
  .tl-bookmark__container--safariExport {
1261
- border: 1px solid var(--color-divider);
1279
+ border: 1px solid var(--tl-color-divider);
1262
1280
  }
1263
1281
 
1264
1282
  .tl-bookmark__image_container {
1265
1283
  flex: 1 1 100%;
1266
1284
  overflow: hidden;
1267
- border-top-left-radius: var(--radius-1);
1268
- border-top-right-radius: var(--radius-1);
1285
+ border-top-left-radius: var(--tl-radius-1);
1286
+ border-top-right-radius: var(--tl-radius-1);
1269
1287
  width: 100%;
1270
1288
  height: 100%;
1271
1289
  display: flex;
1272
1290
  justify-content: flex-end;
1273
1291
  align-items: flex-start;
1274
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1292
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1275
1293
  }
1276
1294
 
1277
1295
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1278
- background-color: var(--color-panel);
1296
+ background-color: var(--tl-color-panel);
1279
1297
  }
1280
1298
 
1281
1299
  .tl-bookmark__placeholder {
1282
1300
  width: 100%;
1283
1301
  height: 100%;
1284
- background-color: var(--color-muted-2);
1285
- border-bottom: 1px solid var(--color-muted-2);
1302
+ background-color: var(--tl-color-muted-2);
1303
+ border-bottom: 1px solid var(--tl-color-muted-2);
1286
1304
  }
1287
1305
 
1288
1306
  .tl-bookmark__image {
@@ -1290,12 +1308,12 @@ input,
1290
1308
  height: 100%;
1291
1309
  object-fit: cover;
1292
1310
  object-position: center;
1293
- border-bottom: 1px solid var(--color-muted-2);
1311
+ border-bottom: 1px solid var(--tl-color-muted-2);
1294
1312
  }
1295
1313
 
1296
1314
  .tl-bookmark__copy_container {
1297
- background-color: var(--color-muted-0);
1298
- padding: var(--space-4);
1315
+ background-color: var(--tl-color-muted-0);
1316
+ padding: var(--tl-space-4);
1299
1317
  pointer-events: all;
1300
1318
  display: flex;
1301
1319
  flex-direction: column;
@@ -1315,7 +1333,7 @@ input,
1315
1333
  font-size: 16px;
1316
1334
  line-height: 1.6;
1317
1335
  font-weight: bold;
1318
- padding-bottom: var(--space-2);
1336
+ padding-bottom: var(--tl-space-2);
1319
1337
  overflow: hidden;
1320
1338
  max-height: calc((16px * 1.6) * 2);
1321
1339
  -webkit-box-orient: vertical;
@@ -1335,19 +1353,19 @@ input,
1335
1353
  line-clamp: 3;
1336
1354
  text-overflow: ellipsis;
1337
1355
  display: -webkit-box;
1338
- color: var(--color-text-2);
1339
- margin: var(--space-2) 0px;
1356
+ color: var(--tl-color-text-2);
1357
+ margin: var(--tl-space-2) 0px;
1340
1358
  }
1341
1359
 
1342
1360
  .tl-bookmark__heading + .tl-bookmark__link,
1343
1361
  .tl-bookmark__description + .tl-bookmark__link {
1344
- margin-top: var(--space-3);
1362
+ margin-top: var(--tl-space-3);
1345
1363
  }
1346
1364
  .tl-bookmark__link {
1347
1365
  font-size: 12px;
1348
1366
  pointer-events: all;
1349
1367
  display: flex;
1350
- color: var(--color-text-2);
1368
+ color: var(--tl-color-text-2);
1351
1369
  align-items: center;
1352
1370
  cursor: var(--tl-cursor-pointer);
1353
1371
  width: fit-content;
@@ -1389,7 +1407,7 @@ input,
1389
1407
  width: 100%;
1390
1408
  height: 100%;
1391
1409
  pointer-events: all;
1392
- /* background-color: var(--color-background); */
1410
+ /* background-color: var(--tl-color-background); */
1393
1411
 
1394
1412
  display: flex;
1395
1413
  justify-content: center;
@@ -1418,7 +1436,7 @@ input,
1418
1436
  height: 100%;
1419
1437
  pointer-events: all;
1420
1438
  opacity: 1;
1421
- z-index: var(--layer-text-container);
1439
+ z-index: var(--tl-layer-text-container);
1422
1440
  border-radius: 1px;
1423
1441
  }
1424
1442
 
@@ -1434,22 +1452,22 @@ input,
1434
1452
  }
1435
1453
 
1436
1454
  .tl-frame__creating {
1437
- stroke: var(--color-selected);
1455
+ stroke: var(--tl-color-selected);
1438
1456
  fill: none;
1439
1457
  }
1440
1458
 
1441
1459
  .tl-frame-heading {
1442
- --frame-padding-x: 6px;
1443
- --frame-height: 24px;
1444
- --frame-minimum-width: 32px;
1445
- --frame-offset-width: 16px;
1460
+ --tl-frame-padding-x: 6px;
1461
+ --tl-frame-height: 24px;
1462
+ --tl-frame-minimum-width: 32px;
1463
+ --tl-frame-offset-width: 16px;
1446
1464
  display: flex;
1447
1465
  align-items: center;
1448
1466
  position: absolute;
1449
1467
  transform-origin: 0% 100%;
1450
1468
  overflow: hidden;
1451
1469
  max-width: 100%;
1452
- min-width: var(--frame-minimum-width);
1470
+ min-width: var(--tl-frame-minimum-width);
1453
1471
  height: auto;
1454
1472
  font-size: 12px;
1455
1473
  padding-bottom: 4px;
@@ -1461,18 +1479,18 @@ input,
1461
1479
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1462
1480
  transform-origin: 0% 100%;
1463
1481
  display: flex;
1464
- height: var(--frame-height);
1482
+ height: var(--tl-frame-height);
1465
1483
  width: 100%;
1466
1484
  align-items: center;
1467
- border-radius: var(--radius-1);
1485
+ border-radius: var(--tl-radius-1);
1468
1486
  }
1469
1487
 
1470
1488
  .tl-frame-label {
1471
1489
  pointer-events: all;
1472
1490
  overflow: hidden;
1473
1491
  text-overflow: ellipsis;
1474
- padding: 0px var(--frame-padding-x);
1475
- border-radius: var(--radius-1);
1492
+ padding: 0px var(--tl-frame-padding-x);
1493
+ border-radius: var(--tl-radius-1);
1476
1494
  position: relative;
1477
1495
  font-size: inherit;
1478
1496
  white-space: pre;
@@ -1482,12 +1500,12 @@ input,
1482
1500
  color: transparent;
1483
1501
  white-space: pre;
1484
1502
  width: auto;
1485
- min-width: var(--frame-minimum-width);
1503
+ min-width: var(--tl-frame-minimum-width);
1486
1504
  height: 100%;
1487
1505
  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);
1506
+ background-color: var(--tl-color-panel);
1507
+ border-color: var(--tl-color-selected);
1508
+ box-shadow: inset 0px 0px 0px 1.5px var(--tl-color-selected);
1491
1509
  }
1492
1510
 
1493
1511
  .tl-frame-name-input {
@@ -1495,7 +1513,7 @@ input,
1495
1513
  border: none;
1496
1514
  background: none;
1497
1515
  outline: none;
1498
- padding: 0px var(--frame-padding-x);
1516
+ padding: 0px var(--tl-frame-padding-x);
1499
1517
  inset: 0px;
1500
1518
  height: 100%;
1501
1519
  width: 100%;
@@ -1503,8 +1521,8 @@ input,
1503
1521
  font-family: inherit;
1504
1522
  font-weight: inherit;
1505
1523
  width: 100%;
1506
- color: var(--color-text-1);
1507
- border-radius: var(--radius-1);
1524
+ color: var(--tl-color-text-1);
1525
+ border-radius: var(--tl-radius-1);
1508
1526
  user-select: all;
1509
1527
  -webkit-user-select: text;
1510
1528
  white-space: pre;
@@ -1524,7 +1542,7 @@ input,
1524
1542
 
1525
1543
  .tl-embed {
1526
1544
  border: none;
1527
- border-radius: var(--radius-2);
1545
+ border-radius: var(--tl-radius-2);
1528
1546
  }
1529
1547
 
1530
1548
  /* -------------- Shape error boundary -------------- */
@@ -1532,11 +1550,11 @@ input,
1532
1550
  .tl-shape-error-boundary {
1533
1551
  width: 100%;
1534
1552
  height: 100%;
1535
- background-color: var(--color-muted-1);
1553
+ background-color: var(--tl-color-muted-1);
1536
1554
  border-width: calc(1px * var(--tl-scale));
1537
- border-color: var(--color-muted-1);
1555
+ border-color: var(--tl-color-muted-1);
1538
1556
  border-style: solid;
1539
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1557
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1540
1558
  display: flex;
1541
1559
  flex-direction: column;
1542
1560
  align-items: center;
@@ -1545,7 +1563,7 @@ input,
1545
1563
  position: relative;
1546
1564
  pointer-events: all;
1547
1565
  overflow: hidden;
1548
- padding: var(--space-2);
1566
+ padding: var(--tl-space-2);
1549
1567
  }
1550
1568
 
1551
1569
  .tl-shape-error-boundary::before {
@@ -1553,7 +1571,7 @@ input,
1553
1571
  content: 'Error';
1554
1572
  font-size: 12px;
1555
1573
  font-family: inherit;
1556
- color: var(--color-text-0);
1574
+ color: var(--tl-color-text-0);
1557
1575
  }
1558
1576
 
1559
1577
  /* ----------------- Error boundary ----------------- */
@@ -1564,9 +1582,9 @@ input,
1564
1582
  display: flex;
1565
1583
  align-items: center;
1566
1584
  justify-content: center;
1567
- padding: var(--space-4);
1568
- background-color: var(--color-background);
1569
- color: var(--color-text-1);
1585
+ padding: var(--tl-space-4);
1586
+ background-color: var(--tl-color-background);
1587
+ color: var(--tl-color-text-1);
1570
1588
  position: absolute;
1571
1589
  }
1572
1590
 
@@ -1575,8 +1593,8 @@ input,
1575
1593
  inset: 0px;
1576
1594
  height: 100%;
1577
1595
  width: 100%;
1578
- z-index: var(--layer-error-overlay);
1579
- background-color: var(--color-overlay);
1596
+ z-index: var(--tl-layer-error-overlay);
1597
+ background-color: var(--tl-color-overlay);
1580
1598
  }
1581
1599
 
1582
1600
  .tl-error-boundary__content * {
@@ -1591,7 +1609,7 @@ input,
1591
1609
  inset: 0px;
1592
1610
  height: 100%;
1593
1611
  width: 100%;
1594
- z-index: var(--layer-error-canvas);
1612
+ z-index: var(--tl-layer-error-canvas);
1595
1613
  }
1596
1614
 
1597
1615
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1604,7 +1622,7 @@ it from receiving any pointer events or affecting the cursor. */
1604
1622
  inset: 0px;
1605
1623
  height: 100%;
1606
1624
  width: 100%;
1607
- z-index: var(--layer-error-canvas-after);
1625
+ z-index: var(--tl-layer-error-canvas-after);
1608
1626
  pointer-events: all;
1609
1627
  }
1610
1628
 
@@ -1614,16 +1632,16 @@ it from receiving any pointer events or affecting the cursor. */
1614
1632
  max-width: 100%;
1615
1633
  width: 400px;
1616
1634
  max-height: 100%;
1617
- background-color: var(--color-panel);
1635
+ background-color: var(--tl-color-panel);
1618
1636
  padding: 16px;
1619
1637
  border-radius: 16px;
1620
- box-shadow: var(--shadow-2);
1638
+ box-shadow: var(--tl-shadow-2);
1621
1639
  font-size: 14px;
1622
1640
  font-weight: 400;
1623
1641
  display: flex;
1624
1642
  flex-direction: column;
1625
1643
  overflow: auto;
1626
- z-index: var(--layer-error-content);
1644
+ z-index: var(--tl-layer-error-content);
1627
1645
  gap: 12px;
1628
1646
  }
1629
1647
 
@@ -1638,10 +1656,10 @@ it from receiving any pointer events or affecting the cursor. */
1638
1656
  }
1639
1657
 
1640
1658
  .tl-error-boundary__content h4 {
1641
- border: 1px solid var(--color-low-border);
1659
+ border: 1px solid var(--tl-color-low-border);
1642
1660
  margin: -6px 0 0 0;
1643
- padding: var(--space-5);
1644
- border-radius: var(--radius-2);
1661
+ padding: var(--tl-space-5);
1662
+ border-radius: var(--tl-radius-2);
1645
1663
  font-weight: normal;
1646
1664
  }
1647
1665
 
@@ -1651,10 +1669,10 @@ it from receiving any pointer events or affecting the cursor. */
1651
1669
  }
1652
1670
 
1653
1671
  .tl-error-boundary__content pre {
1654
- background-color: var(--color-muted-2);
1672
+ background-color: var(--tl-color-muted-2);
1655
1673
  margin-top: 0;
1656
- padding: var(--space-5);
1657
- border-radius: var(--radius-2);
1674
+ padding: var(--tl-space-5);
1675
+ border-radius: var(--tl-radius-2);
1658
1676
  overflow: auto;
1659
1677
  font-size: 12px;
1660
1678
  max-height: 320px;
@@ -1666,15 +1684,15 @@ it from receiving any pointer events or affecting the cursor. */
1666
1684
  font-family: inherit;
1667
1685
  font-size: 14px;
1668
1686
  font-weight: 500;
1669
- padding: var(--space-4);
1670
- border-radius: var(--radius-3);
1687
+ padding: var(--tl-space-4);
1688
+ border-radius: var(--tl-radius-3);
1671
1689
  cursor: var(--tl-cursor-pointer);
1672
1690
  color: inherit;
1673
1691
  background-color: transparent;
1674
1692
  }
1675
1693
 
1676
1694
  .tl-error-boundary__content a {
1677
- color: var(--color-selected);
1695
+ color: var(--tl-color-selected);
1678
1696
  font-weight: 500;
1679
1697
  text-decoration: none;
1680
1698
  }
@@ -1686,31 +1704,31 @@ it from receiving any pointer events or affecting the cursor. */
1686
1704
 
1687
1705
  .tl-error-boundary__content__error button {
1688
1706
  position: absolute;
1689
- top: var(--space-2);
1690
- right: var(--space-2);
1707
+ top: var(--tl-space-2);
1708
+ right: var(--tl-space-2);
1691
1709
  font-size: 12px;
1692
- padding: var(--space-2) var(--space-3);
1693
- background-color: var(--color-panel);
1694
- border-radius: var(--radius-1);
1710
+ padding: var(--tl-space-2) var(--tl-space-3);
1711
+ background-color: var(--tl-color-panel);
1712
+ border-radius: var(--tl-radius-1);
1695
1713
  }
1696
1714
 
1697
1715
  .tl-error-boundary__content__actions {
1698
1716
  display: flex;
1699
1717
  justify-content: space-between;
1700
- gap: var(--space-4);
1718
+ gap: var(--tl-space-4);
1701
1719
  margin: 0px;
1702
1720
  margin-left: -4px;
1703
1721
  }
1704
1722
  .tl-error-boundary__content__actions__group {
1705
1723
  display: flex;
1706
- gap: var(--space-4);
1724
+ gap: var(--tl-space-4);
1707
1725
  }
1708
1726
  .tl-error-boundary__content .tl-error-boundary__reset {
1709
- color: var(--color-danger);
1727
+ color: var(--tl-color-danger);
1710
1728
  }
1711
1729
  .tl-error-boundary__content .tl-error-boundary__refresh {
1712
- background-color: var(--color-primary);
1713
- color: var(--color-selected-contrast);
1730
+ background-color: var(--tl-color-primary);
1731
+ color: var(--tl-color-selected-contrast);
1714
1732
  }
1715
1733
  .tl-container__focused:not(.tl-container__no-focus-ring)
1716
1734
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1722,7 +1740,7 @@ it from receiving any pointer events or affecting the cursor. */
1722
1740
 
1723
1741
  .tl-hit-test-blocker {
1724
1742
  position: absolute;
1725
- z-index: var(--layer-canvas-blocker);
1743
+ z-index: var(--tl-layer-canvas-blocker);
1726
1744
  inset: 0px;
1727
1745
  width: 100%;
1728
1746
  height: 100%;
@@ -1742,32 +1760,32 @@ it from receiving any pointer events or affecting the cursor. */
1742
1760
 
1743
1761
  .tl-handle__bg:hover {
1744
1762
  cursor: var(--tl-cursor-grab);
1745
- fill: var(--color-selection-fill);
1763
+ fill: var(--tl-color-selection-fill);
1746
1764
  }
1747
1765
 
1748
1766
  .tl-bookmark__link:hover {
1749
- color: var(--color-selected);
1767
+ color: var(--tl-color-selected);
1750
1768
  }
1751
1769
 
1752
1770
  .tl-hyperlink-button:hover {
1753
- color: var(--color-selected);
1771
+ color: var(--tl-color-selected);
1754
1772
  }
1755
1773
 
1756
1774
  .tl-error-boundary__content button:hover {
1757
- background-color: var(--color-low);
1775
+ background-color: var(--tl-color-low);
1758
1776
  }
1759
1777
  .tl-error-boundary__content a:hover {
1760
- color: var(--color-text-1);
1778
+ color: var(--tl-color-text-1);
1761
1779
  }
1762
1780
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1763
- background-color: var(--color-primary);
1781
+ background-color: var(--tl-color-primary);
1764
1782
  opacity: 0.9;
1765
1783
  }
1766
1784
 
1767
1785
  /* These three rules help preserve clicking into specific points in text areas *while*
1768
1786
  * already in edit mode when jumping from shape to shape. */
1769
1787
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1770
- z-index: var(--layer-text-editor);
1788
+ z-index: var(--tl-layer-text-editor);
1771
1789
  pointer-events: all;
1772
1790
  }
1773
1791
  }