@tldraw/editor 3.16.0-internal.a478398270c6 → 3.16.0-internal.f8b97f0c414f

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 (325) hide show
  1. package/dist-cjs/index.d.ts +350 -142
  2. package/dist-cjs/index.js +13 -6
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +10 -8
  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/SVGContainer.js +1 -1
  9. package/dist-cjs/lib/components/SVGContainer.js.map +2 -2
  10. package/dist-cjs/lib/components/Shape.js +11 -36
  11. package/dist-cjs/lib/components/Shape.js.map +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultBrush.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +2 -2
  14. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +15 -24
  15. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +2 -2
  17. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultCursor.js +1 -1
  19. package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +2 -2
  20. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
  21. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
  22. package/dist-cjs/lib/components/default-components/DefaultGrid.js +1 -1
  23. package/dist-cjs/lib/components/default-components/DefaultGrid.js.map +2 -2
  24. package/dist-cjs/lib/components/default-components/DefaultHandles.js +1 -1
  25. package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +2 -2
  26. package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
  27. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
  28. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
  29. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  30. package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js +53 -0
  31. package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js.map +7 -0
  32. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +1 -1
  33. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +2 -2
  34. package/dist-cjs/lib/components/default-components/DefaultSpinner.js +27 -15
  35. package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +3 -3
  36. package/dist-cjs/lib/config/TLUserPreferences.js +15 -3
  37. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  38. package/dist-cjs/lib/editor/Editor.js +174 -180
  39. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  40. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
  41. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
  42. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  43. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +14 -4
  44. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  45. package/dist-cjs/lib/editor/shapes/BaseBoxShapeUtil.js.map +1 -1
  46. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +23 -0
  47. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  48. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.js.map +2 -2
  49. package/dist-cjs/lib/editor/tools/StateNode.js +20 -1
  50. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  51. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  52. package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
  53. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  54. package/dist-cjs/lib/hooks/useCanvasEvents.js +44 -35
  55. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  56. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  57. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  58. package/dist-cjs/lib/hooks/useEditor.js +1 -4
  59. package/dist-cjs/lib/hooks/useEditor.js.map +2 -2
  60. package/dist-cjs/lib/hooks/useEditorComponents.js +2 -0
  61. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  62. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  63. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  64. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  65. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  66. package/dist-cjs/lib/hooks/useHandleEvents.js +3 -3
  67. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  68. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js +4 -1
  69. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  70. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
  71. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  72. package/dist-cjs/lib/hooks/useSelectionEvents.js +4 -4
  73. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  74. package/dist-cjs/lib/{utils/nearestMultiple.js → hooks/useStateAttribute.js} +15 -14
  75. package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
  76. package/dist-cjs/lib/license/LicenseManager.js +140 -53
  77. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  78. package/dist-cjs/lib/license/LicenseProvider.js +39 -1
  79. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  80. package/dist-cjs/lib/license/Watermark.js +75 -13
  81. package/dist-cjs/lib/license/Watermark.js.map +3 -3
  82. package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
  83. package/dist-cjs/lib/options.js +7 -0
  84. package/dist-cjs/lib/options.js.map +2 -2
  85. package/dist-cjs/lib/primitives/Box.js +3 -0
  86. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  87. package/dist-cjs/lib/primitives/Vec.js +0 -4
  88. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  89. package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
  90. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  91. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
  92. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  93. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +3 -1
  94. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  95. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -1
  96. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  97. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +50 -20
  98. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  99. package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -1
  100. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  101. package/dist-cjs/lib/primitives/geometry/geometry-constants.js +2 -2
  102. package/dist-cjs/lib/primitives/geometry/geometry-constants.js.map +2 -2
  103. package/dist-cjs/lib/primitives/intersect.js +4 -4
  104. package/dist-cjs/lib/primitives/intersect.js.map +2 -2
  105. package/dist-cjs/lib/primitives/utils.js +4 -0
  106. package/dist-cjs/lib/primitives/utils.js.map +2 -2
  107. package/dist-cjs/lib/utils/EditorAtom.js +45 -0
  108. package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
  109. package/dist-cjs/lib/utils/dom.js +12 -1
  110. package/dist-cjs/lib/utils/dom.js.map +2 -2
  111. package/dist-cjs/lib/utils/getPointerInfo.js +2 -2
  112. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  113. package/dist-cjs/lib/utils/reparenting.js +2 -35
  114. package/dist-cjs/lib/utils/reparenting.js.map +3 -3
  115. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +0 -1
  116. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  117. package/dist-cjs/version.js +3 -3
  118. package/dist-cjs/version.js.map +1 -1
  119. package/dist-esm/index.d.mts +350 -142
  120. package/dist-esm/index.mjs +24 -8
  121. package/dist-esm/index.mjs.map +2 -2
  122. package/dist-esm/lib/TldrawEditor.mjs +11 -9
  123. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  124. package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
  125. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  126. package/dist-esm/lib/components/SVGContainer.mjs +1 -1
  127. package/dist-esm/lib/components/SVGContainer.mjs.map +2 -2
  128. package/dist-esm/lib/components/Shape.mjs +11 -36
  129. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  130. package/dist-esm/lib/components/default-components/DefaultBrush.mjs +1 -1
  131. package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +2 -2
  132. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +16 -25
  133. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  134. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +2 -2
  135. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
  136. package/dist-esm/lib/components/default-components/DefaultCursor.mjs +1 -1
  137. package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +2 -2
  138. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
  139. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
  140. package/dist-esm/lib/components/default-components/DefaultGrid.mjs +1 -1
  141. package/dist-esm/lib/components/default-components/DefaultGrid.mjs.map +2 -2
  142. package/dist-esm/lib/components/default-components/DefaultHandles.mjs +1 -1
  143. package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +2 -2
  144. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
  145. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
  146. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
  147. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  148. package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs +23 -0
  149. package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs.map +7 -0
  150. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +1 -1
  151. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +2 -2
  152. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +17 -15
  153. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
  154. package/dist-esm/lib/config/TLUserPreferences.mjs +15 -3
  155. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  156. package/dist-esm/lib/editor/Editor.mjs +174 -180
  157. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  158. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
  159. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  160. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  161. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +14 -4
  162. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  163. package/dist-esm/lib/editor/shapes/BaseBoxShapeUtil.mjs.map +1 -1
  164. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -0
  165. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  166. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.mjs.map +2 -2
  167. package/dist-esm/lib/editor/tools/StateNode.mjs +20 -1
  168. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  169. package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
  170. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  171. package/dist-esm/lib/hooks/useCanvasEvents.mjs +47 -37
  172. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  173. package/dist-esm/lib/hooks/useDocumentEvents.mjs +11 -6
  174. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  175. package/dist-esm/lib/hooks/useEditor.mjs +1 -4
  176. package/dist-esm/lib/hooks/useEditor.mjs.map +2 -2
  177. package/dist-esm/lib/hooks/useEditorComponents.mjs +4 -0
  178. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  179. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +2 -3
  180. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  181. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  182. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  183. package/dist-esm/lib/hooks/useHandleEvents.mjs +9 -4
  184. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  185. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
  186. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  187. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
  188. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  189. package/dist-esm/lib/hooks/useSelectionEvents.mjs +6 -5
  190. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  191. package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
  192. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
  193. package/dist-esm/lib/license/LicenseManager.mjs +141 -54
  194. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  195. package/dist-esm/lib/license/LicenseProvider.mjs +39 -2
  196. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  197. package/dist-esm/lib/license/Watermark.mjs +76 -14
  198. package/dist-esm/lib/license/Watermark.mjs.map +3 -3
  199. package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
  200. package/dist-esm/lib/options.mjs +7 -0
  201. package/dist-esm/lib/options.mjs.map +2 -2
  202. package/dist-esm/lib/primitives/Box.mjs +4 -1
  203. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  204. package/dist-esm/lib/primitives/Vec.mjs +0 -4
  205. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  206. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  207. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  208. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
  209. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  210. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +3 -1
  211. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  212. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
  213. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  214. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +53 -21
  215. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  216. package/dist-esm/lib/primitives/geometry/Group2d.mjs +8 -1
  217. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  218. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs +2 -2
  219. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs.map +2 -2
  220. package/dist-esm/lib/primitives/intersect.mjs +5 -5
  221. package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
  222. package/dist-esm/lib/primitives/utils.mjs +4 -0
  223. package/dist-esm/lib/primitives/utils.mjs.map +2 -2
  224. package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
  225. package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
  226. package/dist-esm/lib/utils/dom.mjs +12 -1
  227. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  228. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -2
  229. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  230. package/dist-esm/lib/utils/reparenting.mjs +3 -40
  231. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  232. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +0 -1
  233. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  234. package/dist-esm/version.mjs +3 -3
  235. package/dist-esm/version.mjs.map +1 -1
  236. package/editor.css +327 -315
  237. package/package.json +16 -38
  238. package/src/index.ts +19 -10
  239. package/src/lib/TldrawEditor.tsx +16 -21
  240. package/src/lib/components/MenuClickCapture.tsx +0 -8
  241. package/src/lib/components/SVGContainer.tsx +1 -1
  242. package/src/lib/components/Shape.tsx +12 -33
  243. package/src/lib/components/default-components/DefaultBrush.tsx +1 -1
  244. package/src/lib/components/default-components/DefaultCanvas.tsx +13 -24
  245. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +2 -2
  246. package/src/lib/components/default-components/DefaultCursor.tsx +1 -1
  247. package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
  248. package/src/lib/components/default-components/DefaultGrid.tsx +1 -1
  249. package/src/lib/components/default-components/DefaultHandles.tsx +5 -1
  250. package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
  251. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +6 -2
  252. package/src/lib/components/default-components/DefaultShapeWrapper.tsx +35 -0
  253. package/src/lib/components/default-components/DefaultSnapIndictor.tsx +1 -1
  254. package/src/lib/components/default-components/DefaultSpinner.tsx +12 -12
  255. package/src/lib/config/TLUserPreferences.ts +15 -1
  256. package/src/lib/editor/Editor.test.ts +512 -8
  257. package/src/lib/editor/Editor.ts +252 -267
  258. package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
  259. package/src/lib/editor/derivations/parentsToChildren.ts +1 -1
  260. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
  261. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
  262. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
  263. package/src/lib/editor/managers/FontManager/FontManager.test.ts +38 -27
  264. package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
  265. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
  266. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
  267. package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
  268. package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
  269. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +55 -26
  270. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +14 -1
  271. package/src/lib/editor/shapes/BaseBoxShapeUtil.tsx +2 -2
  272. package/src/lib/editor/shapes/ShapeUtil.ts +108 -8
  273. package/src/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.ts +2 -1
  274. package/src/lib/editor/tools/StateNode.test.ts +285 -0
  275. package/src/lib/editor/tools/StateNode.ts +27 -1
  276. package/src/lib/editor/types/misc-types.ts +73 -7
  277. package/src/lib/exports/getSvgJsx.test.ts +874 -0
  278. package/src/lib/exports/getSvgJsx.tsx +78 -21
  279. package/src/lib/hooks/useCanvasEvents.ts +60 -47
  280. package/src/lib/hooks/useDocumentEvents.ts +11 -6
  281. package/src/lib/hooks/useEditor.tsx +6 -5
  282. package/src/lib/hooks/useEditorComponents.tsx +8 -2
  283. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +2 -2
  284. package/src/lib/hooks/useGestureEvents.ts +2 -2
  285. package/src/lib/hooks/useHandleEvents.ts +9 -4
  286. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
  287. package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
  288. package/src/lib/hooks/useSelectionEvents.ts +6 -5
  289. package/src/lib/hooks/useStateAttribute.ts +15 -0
  290. package/src/lib/license/LicenseManager.test.ts +724 -383
  291. package/src/lib/license/LicenseManager.ts +201 -58
  292. package/src/lib/license/LicenseProvider.tsx +74 -2
  293. package/src/lib/license/Watermark.test.tsx +2 -1
  294. package/src/lib/license/Watermark.tsx +81 -14
  295. package/src/lib/license/useLicenseManagerState.ts +2 -2
  296. package/src/lib/options.ts +8 -0
  297. package/src/lib/primitives/Box.test.ts +126 -0
  298. package/src/lib/primitives/Box.ts +10 -1
  299. package/src/lib/primitives/Vec.ts +0 -5
  300. package/src/lib/primitives/geometry/Arc2d.ts +2 -2
  301. package/src/lib/primitives/geometry/Circle2d.ts +2 -2
  302. package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -1
  303. package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
  304. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  305. package/src/lib/primitives/geometry/Geometry2d.ts +78 -21
  306. package/src/lib/primitives/geometry/Group2d.ts +10 -1
  307. package/src/lib/primitives/geometry/geometry-constants.ts +2 -1
  308. package/src/lib/primitives/intersect.test.ts +946 -0
  309. package/src/lib/primitives/intersect.ts +12 -5
  310. package/src/lib/primitives/utils.ts +11 -0
  311. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  312. package/src/lib/utils/EditorAtom.ts +37 -0
  313. package/src/lib/utils/dom.test.ts +94 -0
  314. package/src/lib/utils/dom.ts +38 -1
  315. package/src/lib/utils/getPointerInfo.ts +2 -1
  316. package/src/lib/utils/reparenting.ts +3 -69
  317. package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
  318. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
  319. package/src/lib/utils/sync/TLLocalSyncClient.ts +0 -1
  320. package/src/version.ts +3 -3
  321. package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
  322. package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
  323. package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
  324. package/src/lib/test/currentToolIdMask.test.ts +0 -49
  325. 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(220, 2%, 65%);
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(210, 6%, 45%);
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;
@@ -774,8 +792,7 @@ input,
774
792
  position: static;
775
793
  }
776
794
 
777
- .tl-text-wrapper[data-isediting='false'] .tl-text-input,
778
- .tl-arrow-label[data-isediting='false'] .tl-text-input {
795
+ .tl-text-wrapper[data-isediting='false'] .tl-text-input {
779
796
  opacity: 0;
780
797
  cursor: var(--tl-cursor-default);
781
798
  }
@@ -796,7 +813,7 @@ input,
796
813
 
797
814
  .tl-text-wrapper .tl-text-content {
798
815
  pointer-events: all;
799
- z-index: var(--layer-text-content);
816
+ z-index: var(--tl-layer-text-content);
800
817
  }
801
818
 
802
819
  .tl-text-label__inner > .tl-text-content {
@@ -806,7 +823,7 @@ input,
806
823
  padding: inherit;
807
824
  height: fit-content;
808
825
  width: fit-content;
809
- border-radius: var(--radius-1);
826
+ border-radius: var(--tl-radius-1);
810
827
  max-width: 100%;
811
828
  }
812
829
 
@@ -819,7 +836,7 @@ input,
819
836
  }
820
837
 
821
838
  .tl-text-wrapper[data-isselected='true'] .tl-text-input {
822
- z-index: var(--layer-text-editor);
839
+ z-index: var(--tl-layer-text-editor);
823
840
  pointer-events: all;
824
841
  }
825
842
 
@@ -914,7 +931,7 @@ input,
914
931
  }
915
932
 
916
933
  .tl-rich-text a {
917
- color: var(--color-primary);
934
+ color: var(--tl-color-primary);
918
935
  text-decoration: underline;
919
936
  }
920
937
 
@@ -937,14 +954,14 @@ input,
937
954
  }
938
955
 
939
956
  .tl-theme__dark .tl-rich-text mark {
940
- background-color: var(--color-text-highlight);
957
+ background-color: var(--tl-color-text-highlight);
941
958
  color: currentColor;
942
959
  }
943
960
 
944
961
  @supports (color: color(display-p3 1 1 1)) {
945
962
  @media (color-gamut: p3) {
946
963
  .tl-container:not(.tl-theme__force-sRGB) .tl-rich-text mark {
947
- background-color: var(--color-text-highlight-p3);
964
+ background-color: var(--tl-color-text-highlight-p3);
948
965
  }
949
966
  }
950
967
  }
@@ -956,26 +973,26 @@ input,
956
973
  /* --------------------- Loading -------------------- */
957
974
 
958
975
  .tl-loading {
959
- background-color: var(--color-background);
960
- color: var(--color-text-1);
976
+ background-color: var(--tl-color-background);
977
+ color: var(--tl-color-text-1);
961
978
  height: 100%;
962
979
  width: 100%;
963
980
  display: flex;
964
981
  flex-direction: column;
965
982
  justify-content: center;
966
983
  align-items: center;
967
- gap: var(--space-2);
984
+ gap: var(--tl-space-2);
968
985
  font-size: 14px;
969
986
  font-weight: 500;
970
987
  opacity: 0;
971
- animation: fade-in 0.2s ease-in-out forwards;
988
+ animation: tl-fade-in 0.2s ease-in-out forwards;
972
989
  animation-delay: 0.2s;
973
990
  position: absolute;
974
991
  inset: 0px;
975
- z-index: var(--layer-canvas-blocker);
992
+ z-index: var(--tl-layer-canvas-blocker);
976
993
  }
977
994
 
978
- @keyframes fade-in {
995
+ @keyframes tl-fade-in {
979
996
  0% {
980
997
  opacity: 0;
981
998
  }
@@ -984,6 +1001,19 @@ input,
984
1001
  }
985
1002
  }
986
1003
 
1004
+ .tl-spinner {
1005
+ animation: tl-spin 1s linear infinite;
1006
+ }
1007
+
1008
+ @keyframes tl-spin {
1009
+ 0% {
1010
+ transform: rotate(0deg);
1011
+ }
1012
+ 100% {
1013
+ transform: rotate(360deg);
1014
+ }
1015
+ }
1016
+
987
1017
  /* ---------------------- Brush --------------------- */
988
1018
 
989
1019
  .tl-brush {
@@ -992,8 +1022,8 @@ input,
992
1022
  }
993
1023
 
994
1024
  .tl-brush__default {
995
- stroke: var(--color-brush-stroke);
996
- fill: var(--color-brush-fill);
1025
+ stroke: var(--tl-color-brush-stroke);
1026
+ fill: var(--tl-color-brush-fill);
997
1027
  }
998
1028
 
999
1029
  /* -------------------- Scribble -------------------- */
@@ -1008,13 +1038,13 @@ input,
1008
1038
  /* ---------------------- Snaps --------------------- */
1009
1039
 
1010
1040
  .tl-snap-indicator {
1011
- stroke: var(--color-snap);
1041
+ stroke: var(--tl-color-snap);
1012
1042
  stroke-width: calc(1px * var(--tl-scale));
1013
1043
  fill: none;
1014
1044
  }
1015
1045
 
1016
1046
  .tl-snap-point {
1017
- stroke: var(--color-snap);
1047
+ stroke: var(--tl-color-snap);
1018
1048
  stroke-width: calc(1px * var(--tl-scale));
1019
1049
  fill: none;
1020
1050
  }
@@ -1034,7 +1064,7 @@ input,
1034
1064
  justify-content: center;
1035
1065
  font-size: 12px;
1036
1066
  font-weight: 400;
1037
- color: var(--color-text-1);
1067
+ color: var(--tl-color-text-1);
1038
1068
  padding: 13px;
1039
1069
  cursor: var(--tl-cursor-pointer);
1040
1070
  border: none;
@@ -1052,13 +1082,13 @@ input,
1052
1082
  display: block;
1053
1083
  width: calc(100% - 12px);
1054
1084
  height: calc(100% - 12px);
1055
- border-radius: var(--radius-1);
1056
- background-color: var(--color-background);
1085
+ border-radius: var(--tl-radius-1);
1086
+ background-color: var(--tl-color-background);
1057
1087
  pointer-events: none;
1058
1088
  }
1059
1089
 
1060
1090
  .tl-hyperlink-button:focus-visible {
1061
- color: var(--color-selected);
1091
+ color: var(--tl-color-selected);
1062
1092
  }
1063
1093
 
1064
1094
  .tl-hyperlink__icon {
@@ -1085,8 +1115,8 @@ input,
1085
1115
  }
1086
1116
 
1087
1117
  .tl-handle__fg {
1088
- fill: var(--color-selected-contrast);
1089
- stroke: var(--color-selection-stroke);
1118
+ fill: var(--tl-color-selected-contrast);
1119
+ stroke: var(--tl-color-selection-stroke);
1090
1120
  stroke-width: calc(1.5px * var(--tl-scale));
1091
1121
  pointer-events: none;
1092
1122
  }
@@ -1096,7 +1126,7 @@ input,
1096
1126
  }
1097
1127
 
1098
1128
  .tl-handle__clone > .tl-handle__fg {
1099
- fill: var(--color-selection-stroke);
1129
+ fill: var(--tl-color-selection-stroke);
1100
1130
  stroke: none;
1101
1131
  }
1102
1132
 
@@ -1106,7 +1136,7 @@ input,
1106
1136
 
1107
1137
  @media (pointer: coarse) {
1108
1138
  .tl-handle__bg:active {
1109
- fill: var(--color-selection-fill);
1139
+ fill: var(--tl-color-selection-fill);
1110
1140
  }
1111
1141
 
1112
1142
  .tl-handle__create {
@@ -1162,20 +1192,20 @@ input,
1162
1192
  stroke-linejoin: round;
1163
1193
  /* content-visibility: auto; */
1164
1194
  transform-origin: top left;
1165
- color: var(--color-text-1);
1195
+ color: var(--tl-color-text-1);
1166
1196
  }
1167
1197
 
1168
1198
  /* -------------------- Group shape ------------------ */
1169
1199
 
1170
1200
  .tl-group {
1171
- stroke: var(--color-text);
1201
+ stroke: var(--tl-color-text);
1172
1202
  stroke-width: calc(1px * var(--tl-scale));
1173
1203
  opacity: 0.5;
1174
1204
  }
1175
1205
 
1176
1206
  /* --------------------- Arrow shape -------------------- */
1177
1207
 
1178
- .tl-arrow-label {
1208
+ .tl-shape[data-shape-type='arrow'] .tl-text-label {
1179
1209
  position: absolute;
1180
1210
  top: -1px;
1181
1211
  left: -1px;
@@ -1186,56 +1216,38 @@ input,
1186
1216
  justify-content: center;
1187
1217
  align-items: center;
1188
1218
  text-align: center;
1189
- color: var(--color-text);
1219
+ color: var(--tl-color-text);
1190
1220
  text-shadow: var(--tl-text-outline);
1191
1221
  }
1192
1222
 
1193
- .tl-arrow-label[data-isediting='true'] p {
1194
- opacity: 0;
1195
- }
1196
-
1197
- .tl-arrow-label__inner {
1198
- border-radius: var(--radius-1);
1223
+ .tl-shape[data-shape-type='arrow'] .tl-text-label__inner {
1224
+ border-radius: var(--tl-radius-1);
1199
1225
  box-sizing: content-box;
1200
- position: relative;
1201
1226
  height: max-content;
1202
1227
  width: max-content;
1203
- pointer-events: none;
1204
- display: flex;
1205
- justify-content: center;
1206
- align-items: center;
1207
1228
  }
1208
1229
 
1209
- .tl-arrow-label .tl-arrow {
1210
- position: relative;
1230
+ .tl-shape[data-shape-type='arrow'] .tl-text {
1211
1231
  height: max-content;
1212
- padding: inherit;
1213
- overflow: visible;
1214
- }
1215
-
1216
- .tl-arrow-label textarea {
1217
- padding: inherit;
1218
- /* Don't allow textarea to be zero width */
1219
- min-width: 4px;
1220
1232
  }
1221
1233
 
1222
1234
  .tl-arrow-hint {
1223
- stroke: var(--color-text-1);
1235
+ stroke: var(--tl-color-text-1);
1224
1236
  fill: none;
1225
1237
  stroke-linecap: round;
1226
1238
  overflow: visible;
1227
1239
  }
1228
1240
 
1229
1241
  .tl-arrow-hint-handle {
1230
- fill: var(--color-selected-contrast);
1231
- stroke: var(--color-selection-stroke);
1242
+ fill: var(--tl-color-selected-contrast);
1243
+ stroke: var(--tl-color-selection-stroke);
1232
1244
  stroke-width: calc(1.5px * var(--tl-scale));
1233
1245
  r: calc(4px * var(--tl-scale));
1234
1246
  }
1235
1247
 
1236
1248
  .tl-arrow-hint-snap {
1237
1249
  stroke: transparent;
1238
- fill: var(--color-selection-fill);
1250
+ fill: var(--tl-color-selection-fill);
1239
1251
  r: calc(12px * var(--tl-scale));
1240
1252
  }
1241
1253
 
@@ -1255,40 +1267,40 @@ input,
1255
1267
  width: 100%;
1256
1268
  height: 100%;
1257
1269
  position: relative;
1258
- border: 1px solid var(--color-panel-contrast);
1259
- background-color: var(--color-panel);
1260
- 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);
1261
1273
  display: flex;
1262
1274
  flex-direction: column;
1263
1275
  overflow: hidden;
1264
1276
  }
1265
1277
 
1266
1278
  .tl-bookmark__container--safariExport {
1267
- border: 1px solid var(--color-divider);
1279
+ border: 1px solid var(--tl-color-divider);
1268
1280
  }
1269
1281
 
1270
1282
  .tl-bookmark__image_container {
1271
1283
  flex: 1 1 100%;
1272
1284
  overflow: hidden;
1273
- border-top-left-radius: var(--radius-1);
1274
- 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);
1275
1287
  width: 100%;
1276
1288
  height: 100%;
1277
1289
  display: flex;
1278
1290
  justify-content: flex-end;
1279
1291
  align-items: flex-start;
1280
- box-shadow: inset 0px 0px 0px 1px var(--color-divider);
1292
+ box-shadow: inset 0px 0px 0px 1px var(--tl-color-divider);
1281
1293
  }
1282
1294
 
1283
1295
  .tl-bookmark__image_container > .tl-hyperlink-button::after {
1284
- background-color: var(--color-panel);
1296
+ background-color: var(--tl-color-panel);
1285
1297
  }
1286
1298
 
1287
1299
  .tl-bookmark__placeholder {
1288
1300
  width: 100%;
1289
1301
  height: 100%;
1290
- background-color: var(--color-muted-2);
1291
- 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);
1292
1304
  }
1293
1305
 
1294
1306
  .tl-bookmark__image {
@@ -1296,12 +1308,12 @@ input,
1296
1308
  height: 100%;
1297
1309
  object-fit: cover;
1298
1310
  object-position: center;
1299
- border-bottom: 1px solid var(--color-muted-2);
1311
+ border-bottom: 1px solid var(--tl-color-muted-2);
1300
1312
  }
1301
1313
 
1302
1314
  .tl-bookmark__copy_container {
1303
- background-color: var(--color-muted-0);
1304
- padding: var(--space-4);
1315
+ background-color: var(--tl-color-muted-0);
1316
+ padding: var(--tl-space-4);
1305
1317
  pointer-events: all;
1306
1318
  display: flex;
1307
1319
  flex-direction: column;
@@ -1321,7 +1333,7 @@ input,
1321
1333
  font-size: 16px;
1322
1334
  line-height: 1.6;
1323
1335
  font-weight: bold;
1324
- padding-bottom: var(--space-2);
1336
+ padding-bottom: var(--tl-space-2);
1325
1337
  overflow: hidden;
1326
1338
  max-height: calc((16px * 1.6) * 2);
1327
1339
  -webkit-box-orient: vertical;
@@ -1341,19 +1353,19 @@ input,
1341
1353
  line-clamp: 3;
1342
1354
  text-overflow: ellipsis;
1343
1355
  display: -webkit-box;
1344
- color: var(--color-text-2);
1345
- margin: var(--space-2) 0px;
1356
+ color: var(--tl-color-text-2);
1357
+ margin: var(--tl-space-2) 0px;
1346
1358
  }
1347
1359
 
1348
1360
  .tl-bookmark__heading + .tl-bookmark__link,
1349
1361
  .tl-bookmark__description + .tl-bookmark__link {
1350
- margin-top: var(--space-3);
1362
+ margin-top: var(--tl-space-3);
1351
1363
  }
1352
1364
  .tl-bookmark__link {
1353
1365
  font-size: 12px;
1354
1366
  pointer-events: all;
1355
1367
  display: flex;
1356
- color: var(--color-text-2);
1368
+ color: var(--tl-color-text-2);
1357
1369
  align-items: center;
1358
1370
  cursor: var(--tl-cursor-pointer);
1359
1371
  width: fit-content;
@@ -1395,7 +1407,7 @@ input,
1395
1407
  width: 100%;
1396
1408
  height: 100%;
1397
1409
  pointer-events: all;
1398
- /* background-color: var(--color-background); */
1410
+ /* background-color: var(--tl-color-background); */
1399
1411
 
1400
1412
  display: flex;
1401
1413
  justify-content: center;
@@ -1424,7 +1436,7 @@ input,
1424
1436
  height: 100%;
1425
1437
  pointer-events: all;
1426
1438
  opacity: 1;
1427
- z-index: var(--layer-text-container);
1439
+ z-index: var(--tl-layer-text-container);
1428
1440
  border-radius: 1px;
1429
1441
  }
1430
1442
 
@@ -1440,22 +1452,22 @@ input,
1440
1452
  }
1441
1453
 
1442
1454
  .tl-frame__creating {
1443
- stroke: var(--color-selected);
1455
+ stroke: var(--tl-color-selected);
1444
1456
  fill: none;
1445
1457
  }
1446
1458
 
1447
1459
  .tl-frame-heading {
1448
- --frame-padding-x: 6px;
1449
- --frame-height: 24px;
1450
- --frame-minimum-width: 32px;
1451
- --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;
1452
1464
  display: flex;
1453
1465
  align-items: center;
1454
1466
  position: absolute;
1455
1467
  transform-origin: 0% 100%;
1456
1468
  overflow: hidden;
1457
1469
  max-width: 100%;
1458
- min-width: var(--frame-minimum-width);
1470
+ min-width: var(--tl-frame-minimum-width);
1459
1471
  height: auto;
1460
1472
  font-size: 12px;
1461
1473
  padding-bottom: 4px;
@@ -1467,18 +1479,18 @@ input,
1467
1479
  /* scale from bottom left corner so we can pin it to the top left corner of the frame */
1468
1480
  transform-origin: 0% 100%;
1469
1481
  display: flex;
1470
- height: var(--frame-height);
1482
+ height: var(--tl-frame-height);
1471
1483
  width: 100%;
1472
1484
  align-items: center;
1473
- border-radius: var(--radius-1);
1485
+ border-radius: var(--tl-radius-1);
1474
1486
  }
1475
1487
 
1476
1488
  .tl-frame-label {
1477
1489
  pointer-events: all;
1478
1490
  overflow: hidden;
1479
1491
  text-overflow: ellipsis;
1480
- padding: 0px var(--frame-padding-x);
1481
- border-radius: var(--radius-1);
1492
+ padding: 0px var(--tl-frame-padding-x);
1493
+ border-radius: var(--tl-radius-1);
1482
1494
  position: relative;
1483
1495
  font-size: inherit;
1484
1496
  white-space: pre;
@@ -1488,12 +1500,12 @@ input,
1488
1500
  color: transparent;
1489
1501
  white-space: pre;
1490
1502
  width: auto;
1491
- min-width: var(--frame-minimum-width);
1503
+ min-width: var(--tl-frame-minimum-width);
1492
1504
  height: 100%;
1493
1505
  overflow: visible;
1494
- background-color: var(--color-panel);
1495
- border-color: var(--color-selected);
1496
- 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);
1497
1509
  }
1498
1510
 
1499
1511
  .tl-frame-name-input {
@@ -1501,7 +1513,7 @@ input,
1501
1513
  border: none;
1502
1514
  background: none;
1503
1515
  outline: none;
1504
- padding: 0px var(--frame-padding-x);
1516
+ padding: 0px var(--tl-frame-padding-x);
1505
1517
  inset: 0px;
1506
1518
  height: 100%;
1507
1519
  width: 100%;
@@ -1509,8 +1521,8 @@ input,
1509
1521
  font-family: inherit;
1510
1522
  font-weight: inherit;
1511
1523
  width: 100%;
1512
- color: var(--color-text-1);
1513
- border-radius: var(--radius-1);
1524
+ color: var(--tl-color-text-1);
1525
+ border-radius: var(--tl-radius-1);
1514
1526
  user-select: all;
1515
1527
  -webkit-user-select: text;
1516
1528
  white-space: pre;
@@ -1530,7 +1542,7 @@ input,
1530
1542
 
1531
1543
  .tl-embed {
1532
1544
  border: none;
1533
- border-radius: var(--radius-2);
1545
+ border-radius: var(--tl-radius-2);
1534
1546
  }
1535
1547
 
1536
1548
  /* -------------- Shape error boundary -------------- */
@@ -1538,11 +1550,11 @@ input,
1538
1550
  .tl-shape-error-boundary {
1539
1551
  width: 100%;
1540
1552
  height: 100%;
1541
- background-color: var(--color-muted-1);
1553
+ background-color: var(--tl-color-muted-1);
1542
1554
  border-width: calc(1px * var(--tl-scale));
1543
- border-color: var(--color-muted-1);
1555
+ border-color: var(--tl-color-muted-1);
1544
1556
  border-style: solid;
1545
- border-radius: calc(var(--radius-1) * var(--tl-scale));
1557
+ border-radius: calc(var(--tl-radius-1) * var(--tl-scale));
1546
1558
  display: flex;
1547
1559
  flex-direction: column;
1548
1560
  align-items: center;
@@ -1551,7 +1563,7 @@ input,
1551
1563
  position: relative;
1552
1564
  pointer-events: all;
1553
1565
  overflow: hidden;
1554
- padding: var(--space-2);
1566
+ padding: var(--tl-space-2);
1555
1567
  }
1556
1568
 
1557
1569
  .tl-shape-error-boundary::before {
@@ -1559,7 +1571,7 @@ input,
1559
1571
  content: 'Error';
1560
1572
  font-size: 12px;
1561
1573
  font-family: inherit;
1562
- color: var(--color-text-0);
1574
+ color: var(--tl-color-text-0);
1563
1575
  }
1564
1576
 
1565
1577
  /* ----------------- Error boundary ----------------- */
@@ -1570,9 +1582,9 @@ input,
1570
1582
  display: flex;
1571
1583
  align-items: center;
1572
1584
  justify-content: center;
1573
- padding: var(--space-4);
1574
- background-color: var(--color-background);
1575
- 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);
1576
1588
  position: absolute;
1577
1589
  }
1578
1590
 
@@ -1581,8 +1593,8 @@ input,
1581
1593
  inset: 0px;
1582
1594
  height: 100%;
1583
1595
  width: 100%;
1584
- z-index: var(--layer-error-overlay);
1585
- background-color: var(--color-overlay);
1596
+ z-index: var(--tl-layer-error-overlay);
1597
+ background-color: var(--tl-color-overlay);
1586
1598
  }
1587
1599
 
1588
1600
  .tl-error-boundary__content * {
@@ -1597,7 +1609,7 @@ input,
1597
1609
  inset: 0px;
1598
1610
  height: 100%;
1599
1611
  width: 100%;
1600
- z-index: var(--layer-error-canvas);
1612
+ z-index: var(--tl-layer-error-canvas);
1601
1613
  }
1602
1614
 
1603
1615
  /* some browsers seem to have some weird interactions between stacking contexts
@@ -1610,7 +1622,7 @@ it from receiving any pointer events or affecting the cursor. */
1610
1622
  inset: 0px;
1611
1623
  height: 100%;
1612
1624
  width: 100%;
1613
- z-index: var(--layer-error-canvas-after);
1625
+ z-index: var(--tl-layer-error-canvas-after);
1614
1626
  pointer-events: all;
1615
1627
  }
1616
1628
 
@@ -1620,16 +1632,16 @@ it from receiving any pointer events or affecting the cursor. */
1620
1632
  max-width: 100%;
1621
1633
  width: 400px;
1622
1634
  max-height: 100%;
1623
- background-color: var(--color-panel);
1635
+ background-color: var(--tl-color-panel);
1624
1636
  padding: 16px;
1625
1637
  border-radius: 16px;
1626
- box-shadow: var(--shadow-2);
1638
+ box-shadow: var(--tl-shadow-2);
1627
1639
  font-size: 14px;
1628
1640
  font-weight: 400;
1629
1641
  display: flex;
1630
1642
  flex-direction: column;
1631
1643
  overflow: auto;
1632
- z-index: var(--layer-error-content);
1644
+ z-index: var(--tl-layer-error-content);
1633
1645
  gap: 12px;
1634
1646
  }
1635
1647
 
@@ -1644,10 +1656,10 @@ it from receiving any pointer events or affecting the cursor. */
1644
1656
  }
1645
1657
 
1646
1658
  .tl-error-boundary__content h4 {
1647
- border: 1px solid var(--color-low-border);
1659
+ border: 1px solid var(--tl-color-low-border);
1648
1660
  margin: -6px 0 0 0;
1649
- padding: var(--space-5);
1650
- border-radius: var(--radius-2);
1661
+ padding: var(--tl-space-5);
1662
+ border-radius: var(--tl-radius-2);
1651
1663
  font-weight: normal;
1652
1664
  }
1653
1665
 
@@ -1657,10 +1669,10 @@ it from receiving any pointer events or affecting the cursor. */
1657
1669
  }
1658
1670
 
1659
1671
  .tl-error-boundary__content pre {
1660
- background-color: var(--color-muted-2);
1672
+ background-color: var(--tl-color-muted-2);
1661
1673
  margin-top: 0;
1662
- padding: var(--space-5);
1663
- border-radius: var(--radius-2);
1674
+ padding: var(--tl-space-5);
1675
+ border-radius: var(--tl-radius-2);
1664
1676
  overflow: auto;
1665
1677
  font-size: 12px;
1666
1678
  max-height: 320px;
@@ -1672,15 +1684,15 @@ it from receiving any pointer events or affecting the cursor. */
1672
1684
  font-family: inherit;
1673
1685
  font-size: 14px;
1674
1686
  font-weight: 500;
1675
- padding: var(--space-4);
1676
- border-radius: var(--radius-3);
1687
+ padding: var(--tl-space-4);
1688
+ border-radius: var(--tl-radius-3);
1677
1689
  cursor: var(--tl-cursor-pointer);
1678
1690
  color: inherit;
1679
1691
  background-color: transparent;
1680
1692
  }
1681
1693
 
1682
1694
  .tl-error-boundary__content a {
1683
- color: var(--color-selected);
1695
+ color: var(--tl-color-selected);
1684
1696
  font-weight: 500;
1685
1697
  text-decoration: none;
1686
1698
  }
@@ -1692,31 +1704,31 @@ it from receiving any pointer events or affecting the cursor. */
1692
1704
 
1693
1705
  .tl-error-boundary__content__error button {
1694
1706
  position: absolute;
1695
- top: var(--space-2);
1696
- right: var(--space-2);
1707
+ top: var(--tl-space-2);
1708
+ right: var(--tl-space-2);
1697
1709
  font-size: 12px;
1698
- padding: var(--space-2) var(--space-3);
1699
- background-color: var(--color-panel);
1700
- 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);
1701
1713
  }
1702
1714
 
1703
1715
  .tl-error-boundary__content__actions {
1704
1716
  display: flex;
1705
1717
  justify-content: space-between;
1706
- gap: var(--space-4);
1718
+ gap: var(--tl-space-4);
1707
1719
  margin: 0px;
1708
1720
  margin-left: -4px;
1709
1721
  }
1710
1722
  .tl-error-boundary__content__actions__group {
1711
1723
  display: flex;
1712
- gap: var(--space-4);
1724
+ gap: var(--tl-space-4);
1713
1725
  }
1714
1726
  .tl-error-boundary__content .tl-error-boundary__reset {
1715
- color: var(--color-danger);
1727
+ color: var(--tl-color-danger);
1716
1728
  }
1717
1729
  .tl-error-boundary__content .tl-error-boundary__refresh {
1718
- background-color: var(--color-primary);
1719
- color: var(--color-selected-contrast);
1730
+ background-color: var(--tl-color-primary);
1731
+ color: var(--tl-color-selected-contrast);
1720
1732
  }
1721
1733
  .tl-container__focused:not(.tl-container__no-focus-ring)
1722
1734
  .tlui-button.tl-error-boundary__refresh:focus-visible {
@@ -1728,7 +1740,7 @@ it from receiving any pointer events or affecting the cursor. */
1728
1740
 
1729
1741
  .tl-hit-test-blocker {
1730
1742
  position: absolute;
1731
- z-index: var(--layer-canvas-blocker);
1743
+ z-index: var(--tl-layer-canvas-blocker);
1732
1744
  inset: 0px;
1733
1745
  width: 100%;
1734
1746
  height: 100%;
@@ -1748,32 +1760,32 @@ it from receiving any pointer events or affecting the cursor. */
1748
1760
 
1749
1761
  .tl-handle__bg:hover {
1750
1762
  cursor: var(--tl-cursor-grab);
1751
- fill: var(--color-selection-fill);
1763
+ fill: var(--tl-color-selection-fill);
1752
1764
  }
1753
1765
 
1754
1766
  .tl-bookmark__link:hover {
1755
- color: var(--color-selected);
1767
+ color: var(--tl-color-selected);
1756
1768
  }
1757
1769
 
1758
1770
  .tl-hyperlink-button:hover {
1759
- color: var(--color-selected);
1771
+ color: var(--tl-color-selected);
1760
1772
  }
1761
1773
 
1762
1774
  .tl-error-boundary__content button:hover {
1763
- background-color: var(--color-low);
1775
+ background-color: var(--tl-color-low);
1764
1776
  }
1765
1777
  .tl-error-boundary__content a:hover {
1766
- color: var(--color-text-1);
1778
+ color: var(--tl-color-text-1);
1767
1779
  }
1768
1780
  .tl-error-boundary__content .tl-error-boundary__refresh:hover {
1769
- background-color: var(--color-primary);
1781
+ background-color: var(--tl-color-primary);
1770
1782
  opacity: 0.9;
1771
1783
  }
1772
1784
 
1773
1785
  /* These three rules help preserve clicking into specific points in text areas *while*
1774
1786
  * already in edit mode when jumping from shape to shape. */
1775
1787
  .tl-canvas[data-iseditinganything='true'] .tl-text-wrapper:hover .tl-text-input {
1776
- z-index: var(--layer-text-editor);
1788
+ z-index: var(--tl-layer-text-editor);
1777
1789
  pointer-events: all;
1778
1790
  }
1779
1791
  }