@tldraw/editor 3.15.0-next.f1dfcef63951 → 3.15.0

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 (143) hide show
  1. package/dist-cjs/index.d.ts +58 -44
  2. package/dist-cjs/index.js +18 -16
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/components/SVGContainer.js +1 -1
  5. package/dist-cjs/lib/components/SVGContainer.js.map +2 -2
  6. package/dist-cjs/lib/components/default-components/DefaultBrush.js +1 -1
  7. package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
  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 +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultCursor.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +2 -2
  14. package/dist-cjs/lib/components/default-components/DefaultGrid.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultGrid.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultHandles.js +1 -1
  17. package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +1 -1
  19. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  20. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +1 -1
  21. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +2 -2
  22. package/dist-cjs/lib/components/default-components/DefaultSpinner.js +27 -15
  23. package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +3 -3
  24. package/dist-cjs/lib/config/TLUserPreferences.js +7 -1
  25. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  26. package/dist-cjs/lib/editor/Editor.js +24 -8
  27. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  28. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +96 -101
  29. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
  30. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +7 -2
  31. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  32. package/dist-cjs/lib/editor/tools/StateNode.js +20 -1
  33. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  34. package/dist-cjs/lib/hooks/useEditorComponents.js.map +1 -1
  35. package/dist-cjs/lib/license/Watermark.js +2 -2
  36. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  37. package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
  38. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  39. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
  40. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  41. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +3 -1
  42. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  43. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -1
  44. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  45. package/dist-cjs/lib/primitives/geometry/geometry-constants.js +2 -2
  46. package/dist-cjs/lib/primitives/geometry/geometry-constants.js.map +2 -2
  47. package/dist-cjs/lib/primitives/intersect.js +4 -4
  48. package/dist-cjs/lib/primitives/intersect.js.map +2 -2
  49. package/dist-cjs/lib/primitives/utils.js +4 -0
  50. package/dist-cjs/lib/primitives/utils.js.map +2 -2
  51. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +0 -1
  52. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  53. package/dist-cjs/version.js +3 -3
  54. package/dist-cjs/version.js.map +1 -1
  55. package/dist-esm/index.d.mts +58 -44
  56. package/dist-esm/index.mjs +43 -41
  57. package/dist-esm/index.mjs.map +2 -2
  58. package/dist-esm/lib/components/SVGContainer.mjs +1 -1
  59. package/dist-esm/lib/components/SVGContainer.mjs.map +2 -2
  60. package/dist-esm/lib/components/default-components/DefaultBrush.mjs +1 -1
  61. package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +2 -2
  62. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
  63. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  64. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  65. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
  66. package/dist-esm/lib/components/default-components/DefaultCursor.mjs +1 -1
  67. package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +2 -2
  68. package/dist-esm/lib/components/default-components/DefaultGrid.mjs +1 -1
  69. package/dist-esm/lib/components/default-components/DefaultGrid.mjs.map +2 -2
  70. package/dist-esm/lib/components/default-components/DefaultHandles.mjs +1 -1
  71. package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +2 -2
  72. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +1 -1
  73. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  74. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +1 -1
  75. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +2 -2
  76. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +17 -15
  77. package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
  78. package/dist-esm/lib/config/TLUserPreferences.mjs +7 -1
  79. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  80. package/dist-esm/lib/editor/Editor.mjs +24 -8
  81. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  82. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +96 -101
  83. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
  84. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +7 -2
  85. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  86. package/dist-esm/lib/editor/tools/StateNode.mjs +20 -1
  87. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  88. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +1 -1
  89. package/dist-esm/lib/license/Watermark.mjs +2 -2
  90. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  91. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  92. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  93. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
  94. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  95. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +3 -1
  96. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  97. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
  98. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  99. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs +2 -2
  100. package/dist-esm/lib/primitives/geometry/geometry-constants.mjs.map +2 -2
  101. package/dist-esm/lib/primitives/intersect.mjs +5 -5
  102. package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
  103. package/dist-esm/lib/primitives/utils.mjs +4 -0
  104. package/dist-esm/lib/primitives/utils.mjs.map +2 -2
  105. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +0 -1
  106. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  107. package/dist-esm/version.mjs +3 -3
  108. package/dist-esm/version.mjs.map +1 -1
  109. package/editor.css +17 -4
  110. package/package.json +9 -8
  111. package/src/index.ts +63 -62
  112. package/src/lib/components/SVGContainer.tsx +1 -1
  113. package/src/lib/components/default-components/DefaultBrush.tsx +1 -1
  114. package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
  115. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  116. package/src/lib/components/default-components/DefaultCursor.tsx +1 -1
  117. package/src/lib/components/default-components/DefaultGrid.tsx +1 -1
  118. package/src/lib/components/default-components/DefaultHandles.tsx +5 -1
  119. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +1 -1
  120. package/src/lib/components/default-components/DefaultSnapIndictor.tsx +1 -1
  121. package/src/lib/components/default-components/DefaultSpinner.tsx +12 -12
  122. package/src/lib/config/TLUserPreferences.ts +7 -0
  123. package/src/lib/editor/Editor.test.ts +407 -0
  124. package/src/lib/editor/Editor.ts +35 -9
  125. package/src/lib/editor/managers/TextManager/TextManager.ts +108 -128
  126. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +21 -0
  127. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +8 -0
  128. package/src/lib/editor/tools/StateNode.test.ts +285 -0
  129. package/src/lib/editor/tools/StateNode.ts +27 -1
  130. package/src/lib/hooks/useEditorComponents.tsx +1 -1
  131. package/src/lib/license/LicenseManager.test.ts +1 -1
  132. package/src/lib/license/Watermark.tsx +2 -2
  133. package/src/lib/primitives/geometry/Arc2d.ts +2 -2
  134. package/src/lib/primitives/geometry/Circle2d.ts +2 -2
  135. package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -1
  136. package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
  137. package/src/lib/primitives/geometry/geometry-constants.ts +2 -1
  138. package/src/lib/primitives/intersect.test.ts +946 -0
  139. package/src/lib/primitives/intersect.ts +12 -5
  140. package/src/lib/primitives/utils.ts +11 -0
  141. package/src/lib/utils/sync/TLLocalSyncClient.ts +0 -1
  142. package/src/version.ts +3 -3
  143. package/src/lib/test/currentToolIdMask.test.ts +0 -49
package/editor.css CHANGED
@@ -167,7 +167,7 @@
167
167
  --color-text: hsl(0, 0%, 0%);
168
168
  --color-text-0: hsl(0, 0%, 11%);
169
169
  --color-text-1: hsl(0, 0%, 18%);
170
- --color-text-3: hsl(220, 2%, 65%);
170
+ --color-text-3: hsl(204, 4%, 45%);
171
171
  --color-text-shadow: hsl(0, 0%, 100%);
172
172
  --color-text-highlight: hsl(52, 100%, 50%);
173
173
  --color-text-highlight-p3: color(display-p3 0.972 0.8205 0.05);
@@ -222,7 +222,7 @@
222
222
  --color-text: hsl(210, 17%, 98%);
223
223
  --color-text-0: hsl(0, 9%, 94%);
224
224
  --color-text-1: hsl(0, 0%, 85%);
225
- --color-text-3: hsl(210, 6%, 45%);
225
+ --color-text-3: hsl(204, 4%, 75%);
226
226
  --color-text-shadow: hsl(210, 13%, 18%);
227
227
  --color-text-highlight: hsl(52, 100%, 41%);
228
228
  --color-text-highlight-p3: color(display-p3 0.8078 0.6225 0.0312);
@@ -968,14 +968,14 @@ input,
968
968
  font-size: 14px;
969
969
  font-weight: 500;
970
970
  opacity: 0;
971
- animation: fade-in 0.2s ease-in-out forwards;
971
+ animation: tl-fade-in 0.2s ease-in-out forwards;
972
972
  animation-delay: 0.2s;
973
973
  position: absolute;
974
974
  inset: 0px;
975
975
  z-index: var(--layer-canvas-blocker);
976
976
  }
977
977
 
978
- @keyframes fade-in {
978
+ @keyframes tl-fade-in {
979
979
  0% {
980
980
  opacity: 0;
981
981
  }
@@ -984,6 +984,19 @@ input,
984
984
  }
985
985
  }
986
986
 
987
+ .tl-spinner {
988
+ animation: tl-spin 1s linear infinite;
989
+ }
990
+
991
+ @keyframes tl-spin {
992
+ 0% {
993
+ transform: rotate(0deg);
994
+ }
995
+ 100% {
996
+ transform: rotate(360deg);
997
+ }
998
+ }
999
+
987
1000
  /* ---------------------- Brush --------------------- */
988
1001
 
989
1002
  .tl-brush {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/editor",
3
- "description": "A tiny little drawing app (editor).",
4
- "version": "3.15.0-next.f1dfcef63951",
3
+ "description": "tldraw infinite canvas SDK (editor).",
4
+ "version": "3.15.0",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -17,6 +17,7 @@
17
17
  },
18
18
  "keywords": [
19
19
  "tldraw",
20
+ "sdk",
20
21
  "drawing",
21
22
  "app",
22
23
  "development",
@@ -48,12 +49,12 @@
48
49
  "@tiptap/core": "^2.9.1",
49
50
  "@tiptap/pm": "^2.9.1",
50
51
  "@tiptap/react": "^2.9.1",
51
- "@tldraw/state": "3.15.0-next.f1dfcef63951",
52
- "@tldraw/state-react": "3.15.0-next.f1dfcef63951",
53
- "@tldraw/store": "3.15.0-next.f1dfcef63951",
54
- "@tldraw/tlschema": "3.15.0-next.f1dfcef63951",
55
- "@tldraw/utils": "3.15.0-next.f1dfcef63951",
56
- "@tldraw/validate": "3.15.0-next.f1dfcef63951",
52
+ "@tldraw/state": "3.15.0",
53
+ "@tldraw/state-react": "3.15.0",
54
+ "@tldraw/store": "3.15.0",
55
+ "@tldraw/tlschema": "3.15.0",
56
+ "@tldraw/utils": "3.15.0",
57
+ "@tldraw/validate": "3.15.0",
57
58
  "@types/core-js": "^2.5.8",
58
59
  "@use-gesture/react": "^10.3.1",
59
60
  "classnames": "^2.5.1",
package/src/index.ts CHANGED
@@ -18,27 +18,6 @@ export * from '@tldraw/utils'
18
18
  // eslint-disable-next-line local/no-export-star
19
19
  export * from '@tldraw/validate'
20
20
 
21
- export {
22
- ErrorScreen,
23
- LoadingScreen,
24
- TldrawEditor,
25
- useOnMount,
26
- type LoadingScreenProps,
27
- type TLOnMountHandler,
28
- type TldrawEditorBaseProps,
29
- type TldrawEditorProps,
30
- type TldrawEditorStoreProps,
31
- type TldrawEditorWithStoreProps,
32
- type TldrawEditorWithoutStoreProps,
33
- } from './lib/TldrawEditor'
34
- export {
35
- ErrorBoundary,
36
- OptionalErrorBoundary,
37
- type TLErrorBoundaryProps,
38
- } from './lib/components/ErrorBoundary'
39
- export { HTMLContainer, type HTMLContainerProps } from './lib/components/HTMLContainer'
40
- export { MenuClickCapture } from './lib/components/MenuClickCapture'
41
- export { SVGContainer, type SVGContainerProps } from './lib/components/SVGContainer'
42
21
  export { DefaultBackground } from './lib/components/default-components/DefaultBackground'
43
22
  export { DefaultBrush, type TLBrushProps } from './lib/components/default-components/DefaultBrush'
44
23
  export {
@@ -94,6 +73,26 @@ export {
94
73
  } from './lib/components/default-components/DefaultSnapIndictor'
95
74
  export { DefaultSpinner } from './lib/components/default-components/DefaultSpinner'
96
75
  export { DefaultSvgDefs } from './lib/components/default-components/DefaultSvgDefs'
76
+ export {
77
+ ErrorBoundary,
78
+ OptionalErrorBoundary,
79
+ type TLErrorBoundaryProps,
80
+ } from './lib/components/ErrorBoundary'
81
+ export { HTMLContainer, type HTMLContainerProps } from './lib/components/HTMLContainer'
82
+ export { MenuClickCapture } from './lib/components/MenuClickCapture'
83
+ export { SVGContainer, type SVGContainerProps } from './lib/components/SVGContainer'
84
+ export {
85
+ createTLSchemaFromUtils,
86
+ createTLStore,
87
+ inlineBase64AssetStore,
88
+ type TLStoreBaseOptions,
89
+ type TLStoreEventInfo,
90
+ type TLStoreOptions,
91
+ type TLStoreSchemaOptions,
92
+ } from './lib/config/createTLStore'
93
+ export { createTLUser, useTldrawUser, type TLUser } from './lib/config/createTLUser'
94
+ export { type TLAnyBindingUtilConstructor } from './lib/config/defaultBindings'
95
+ export { coreShapes, type TLAnyShapeUtilConstructor } from './lib/config/defaultShapes'
97
96
  export {
98
97
  getSnapshot,
99
98
  loadSnapshot,
@@ -101,42 +100,23 @@ export {
101
100
  type TLLoadSnapshotOptions,
102
101
  } from './lib/config/TLEditorSnapshot'
103
102
  export {
104
- TAB_ID,
105
103
  createSessionStateSnapshotSignal,
106
104
  extractSessionStateFromLegacySnapshot,
107
105
  loadSessionStateSnapshotIntoStore,
106
+ TAB_ID,
108
107
  type TLLoadSessionStateSnapshotOptions,
109
108
  type TLSessionStateSnapshot,
110
109
  } from './lib/config/TLSessionStateSnapshot'
111
110
  export {
112
- USER_COLORS,
113
111
  defaultUserPreferences,
114
112
  getFreshUserPreferences,
115
113
  getUserPreferences,
116
114
  setUserPreferences,
115
+ USER_COLORS,
117
116
  userTypeValidator,
118
117
  type TLUserPreferences,
119
118
  } from './lib/config/TLUserPreferences'
120
- export {
121
- createTLSchemaFromUtils,
122
- createTLStore,
123
- inlineBase64AssetStore,
124
- type TLStoreBaseOptions,
125
- type TLStoreEventInfo,
126
- type TLStoreOptions,
127
- type TLStoreSchemaOptions,
128
- } from './lib/config/createTLStore'
129
- export { createTLUser, useTldrawUser, type TLUser } from './lib/config/createTLUser'
130
- export { type TLAnyBindingUtilConstructor } from './lib/config/defaultBindings'
131
- export { coreShapes, type TLAnyShapeUtilConstructor } from './lib/config/defaultShapes'
132
119
  export { DEFAULT_ANIMATION_OPTIONS, DEFAULT_CAMERA_OPTIONS, SIDES } from './lib/constants'
133
- export {
134
- Editor,
135
- type TLEditorOptions,
136
- type TLEditorRunOptions,
137
- type TLRenderingShape,
138
- type TLResizeShapeOptions,
139
- } from './lib/editor/Editor'
140
120
  export {
141
121
  BindingUtil,
142
122
  type BindingOnChangeOptions,
@@ -147,6 +127,13 @@ export {
147
127
  type BindingOnShapeIsolateOptions,
148
128
  type TLBindingUtilConstructor,
149
129
  } from './lib/editor/bindings/BindingUtil'
130
+ export {
131
+ Editor,
132
+ type TLEditorOptions,
133
+ type TLEditorRunOptions,
134
+ type TLRenderingShape,
135
+ type TLResizeShapeOptions,
136
+ } from './lib/editor/Editor'
150
137
  export { ClickManager, type TLClickState } from './lib/editor/managers/ClickManager/ClickManager'
151
138
  export { EdgeScrollManager } from './lib/editor/managers/EdgeScrollManager/EdgeScrollManager'
152
139
  export {
@@ -179,6 +166,7 @@ export {
179
166
  } from './lib/editor/managers/TextManager/TextManager'
180
167
  export { UserPreferencesManager } from './lib/editor/managers/UserPreferencesManager/UserPreferencesManager'
181
168
  export { BaseBoxShapeUtil, type TLBaseBoxShape } from './lib/editor/shapes/BaseBoxShapeUtil'
169
+ export { GroupShapeUtil } from './lib/editor/shapes/group/GroupShapeUtil'
182
170
  export {
183
171
  ShapeUtil,
184
172
  type TLCropInfo,
@@ -195,7 +183,6 @@ export {
195
183
  type TLShapeUtilCanvasSvgDef,
196
184
  type TLShapeUtilConstructor,
197
185
  } from './lib/editor/shapes/ShapeUtil'
198
- export { GroupShapeUtil } from './lib/editor/shapes/group/GroupShapeUtil'
199
186
  export {
200
187
  getPerfectDashProps,
201
188
  type PerfectDashTerminal,
@@ -205,22 +192,16 @@ export { resizeScaled } from './lib/editor/shapes/shared/resizeScaled'
205
192
  export { BaseBoxShapeTool } from './lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool'
206
193
  export { maybeSnapToGrid } from './lib/editor/tools/BaseBoxShapeTool/children/Pointing'
207
194
  export { StateNode, type TLStateNodeConstructor } from './lib/editor/tools/StateNode'
208
- export {
209
- useDelaySvgExport,
210
- useSvgExportContext,
211
- type SvgExportContext,
212
- type SvgExportDef,
213
- } from './lib/editor/types/SvgExportContext'
214
195
  export { type TLContent } from './lib/editor/types/clipboard-types'
215
196
  export { type TLEventMap, type TLEventMapHandler } from './lib/editor/types/emit-types'
216
197
  export {
217
198
  EVENT_NAME_MAP,
218
199
  type TLBaseEventInfo,
219
- type TLCLickEventName,
220
200
  type TLCancelEvent,
221
201
  type TLCancelEventInfo,
222
202
  type TLClickEvent,
223
203
  type TLClickEventInfo,
204
+ type TLCLickEventName,
224
205
  type TLCompleteEvent,
225
206
  type TLCompleteEventInfo,
226
207
  type TLEnterEventHandler,
@@ -289,6 +270,12 @@ export {
289
270
  type TLResizeHandle,
290
271
  type TLSelectionHandle,
291
272
  } from './lib/editor/types/selection-types'
273
+ export {
274
+ useDelaySvgExport,
275
+ useSvgExportContext,
276
+ type SvgExportContext,
277
+ type SvgExportDef,
278
+ } from './lib/editor/types/SvgExportContext'
292
279
  export { getSvgAsImage } from './lib/exports/getSvgAsImage'
293
280
  export { tlenv } from './lib/globals/environment'
294
281
  export { tlmenus } from './lib/globals/menus'
@@ -352,8 +339,6 @@ export {
352
339
  type SelectionEdge,
353
340
  type SelectionHandle,
354
341
  } from './lib/primitives/Box'
355
- export { Mat, type MatLike, type MatModel } from './lib/primitives/Mat'
356
- export { Vec, type VecLike } from './lib/primitives/Vec'
357
342
  export { EASINGS } from './lib/primitives/easings'
358
343
  export { Arc2d } from './lib/primitives/geometry/Arc2d'
359
344
  export { Circle2d } from './lib/primitives/geometry/Circle2d'
@@ -361,6 +346,7 @@ export { CubicBezier2d } from './lib/primitives/geometry/CubicBezier2d'
361
346
  export { CubicSpline2d } from './lib/primitives/geometry/CubicSpline2d'
362
347
  export { Edge2d } from './lib/primitives/geometry/Edge2d'
363
348
  export { Ellipse2d } from './lib/primitives/geometry/Ellipse2d'
349
+ export { getVerticesCountForArcLength } from './lib/primitives/geometry/geometry-constants'
364
350
  export {
365
351
  Geometry2d,
366
352
  Geometry2dFilters,
@@ -388,11 +374,8 @@ export {
388
374
  polygonIntersectsPolyline,
389
375
  polygonsIntersect,
390
376
  } from './lib/primitives/intersect'
377
+ export { Mat, type MatLike, type MatModel } from './lib/primitives/Mat'
391
378
  export {
392
- HALF_PI,
393
- PI,
394
- PI2,
395
- SIN,
396
379
  angleDistance,
397
380
  approximately,
398
381
  areAnglesCompatible,
@@ -409,23 +392,36 @@ export {
409
392
  getPointOnCircle,
410
393
  getPointsOnArc,
411
394
  getPolygonVertices,
395
+ HALF_PI,
412
396
  isSafeFloat,
413
397
  perimeterOfEllipse,
398
+ PI,
399
+ PI2,
414
400
  pointInPolygon,
415
401
  precise,
416
402
  radiansToDegrees,
417
403
  rangeIntersection,
418
404
  shortAngleDist,
405
+ SIN,
419
406
  snapAngle,
420
407
  toDomPrecision,
421
408
  toFixed,
422
409
  toPrecision,
423
410
  } from './lib/primitives/utils'
411
+ export { Vec, type VecLike } from './lib/primitives/Vec'
424
412
  export {
425
- ReadonlySharedStyleMap,
426
- SharedStyleMap,
427
- type SharedStyle,
428
- } from './lib/utils/SharedStylesMap'
413
+ ErrorScreen,
414
+ LoadingScreen,
415
+ TldrawEditor,
416
+ useOnMount,
417
+ type LoadingScreenProps,
418
+ type TldrawEditorBaseProps,
419
+ type TldrawEditorProps,
420
+ type TldrawEditorStoreProps,
421
+ type TldrawEditorWithoutStoreProps,
422
+ type TldrawEditorWithStoreProps,
423
+ type TLOnMountHandler,
424
+ } from './lib/TldrawEditor'
429
425
  export { dataUrlToFile, getDefaultCdnBaseUrl } from './lib/utils/assets'
430
426
  export { clampToBrowserMaxCanvasSize, type CanvasMaxSize } from './lib/utils/browserCanvasMaxSize'
431
427
  export {
@@ -461,9 +457,9 @@ export {
461
457
  getFontsFromRichText,
462
458
  type RichTextFontVisitor,
463
459
  type RichTextFontVisitorState,
464
- type TLTextOptions,
465
460
  type TiptapEditor,
466
461
  type TiptapNode,
462
+ type TLTextOptions,
467
463
  } from './lib/utils/richText'
468
464
  export {
469
465
  applyRotationToSnapshotShapes,
@@ -471,9 +467,14 @@ export {
471
467
  type TLRotationSnapshot,
472
468
  } from './lib/utils/rotation'
473
469
  export { runtime, setRuntimeOverrides } from './lib/utils/runtime'
470
+ export {
471
+ ReadonlySharedStyleMap,
472
+ SharedStyleMap,
473
+ type SharedStyle,
474
+ } from './lib/utils/SharedStylesMap'
475
+ export { hardReset } from './lib/utils/sync/hardReset'
474
476
  export { LocalIndexedDb, Table, type StoreName } from './lib/utils/sync/LocalIndexedDb'
475
477
  export { type TLStoreWithStatus } from './lib/utils/sync/StoreWithStatus'
476
- export { hardReset } from './lib/utils/sync/hardReset'
477
478
  export { uniq } from './lib/utils/uniq'
478
479
  export { openWindow } from './lib/utils/window-open'
479
480
 
@@ -7,7 +7,7 @@ export type SVGContainerProps = React.ComponentProps<'svg'>
7
7
  /** @public @react */
8
8
  export function SVGContainer({ children, className = '', ...rest }: SVGContainerProps) {
9
9
  return (
10
- <svg {...rest} className={classNames('tl-svg-container', className)}>
10
+ <svg {...rest} className={classNames('tl-svg-container', className)} aria-hidden="true">
11
11
  {children}
12
12
  </svg>
13
13
  )
@@ -21,7 +21,7 @@ export const DefaultBrush = ({ brush, color, opacity, className }: TLBrushProps)
21
21
  const h = toDomPrecision(Math.max(1, brush.h))
22
22
 
23
23
  return (
24
- <svg className="tl-overlays__item" ref={rSvg}>
24
+ <svg className="tl-overlays__item" ref={rSvg} aria-hidden="true">
25
25
  {color ? (
26
26
  <g className="tl-brush" opacity={opacity}>
27
27
  <rect width={w} height={h} fill={color} opacity={0.75} />
@@ -139,7 +139,7 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
139
139
  data-testid="canvas"
140
140
  {...events}
141
141
  >
142
- <svg className="tl-svg-context">
142
+ <svg className="tl-svg-context" aria-hidden="true">
143
143
  <defs>
144
144
  {shapeSvgDefs}
145
145
  <CursorDef />
@@ -39,7 +39,7 @@ export function DefaultCollaboratorHint({
39
39
  const cursorHintId = useSharedSafeId('cursor_hint')
40
40
 
41
41
  return (
42
- <svg ref={rSvg} className={classNames('tl-overlays__item', className)}>
42
+ <svg ref={rSvg} className={classNames('tl-overlays__item', className)} aria-hidden="true">
43
43
  <use
44
44
  href={`#${cursorHintId}`}
45
45
  color={color}
@@ -33,7 +33,7 @@ export const DefaultCursor = memo(function DefaultCursor({
33
33
 
34
34
  return (
35
35
  <div ref={rCursor} className={classNames('tl-overlays__item', className)}>
36
- <svg className="tl-cursor">
36
+ <svg className="tl-cursor" aria-hidden="true">
37
37
  <use href={`#${cursorId}`} color={color} />
38
38
  </svg>
39
39
  {chatMessage ? (
@@ -16,7 +16,7 @@ export function DefaultGrid({ x, y, z, size }: TLGridProps) {
16
16
  const editor = useEditor()
17
17
  const { gridSteps } = editor.options
18
18
  return (
19
- <svg className="tl-grid" version="1.1" xmlns="http://www.w3.org/2000/svg">
19
+ <svg className="tl-grid" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
20
20
  <defs>
21
21
  {gridSteps.map(({ min, mid, step }, i) => {
22
22
  const s = step * size * z
@@ -7,5 +7,9 @@ export interface TLHandlesProps {
7
7
 
8
8
  /** @public @react */
9
9
  export const DefaultHandles = ({ children }: TLHandlesProps) => {
10
- return <svg className="tl-user-handles tl-overlays__item">{children}</svg>
10
+ return (
11
+ <svg className="tl-user-handles tl-overlays__item" aria-hidden="true">
12
+ {children}
13
+ </svg>
14
+ )
11
15
  }
@@ -86,7 +86,7 @@ export const DefaultShapeIndicator = memo(function DefaultShapeIndicator({
86
86
  }, [hidden])
87
87
 
88
88
  return (
89
- <svg ref={rIndicator} className={classNames('tl-overlays__item', className)}>
89
+ <svg ref={rIndicator} className={classNames('tl-overlays__item', className)} aria-hidden="true">
90
90
  <g className="tl-shape-indicator" stroke={color ?? 'var(--color-selected)'} opacity={opacity}>
91
91
  <InnerIndicator editor={editor} id={shapeId} />
92
92
  </g>
@@ -163,7 +163,7 @@ export interface TLSnapIndicatorProps {
163
163
  /** @public @react */
164
164
  export function DefaultSnapIndicator({ className, line, zoom }: TLSnapIndicatorProps) {
165
165
  return (
166
- <svg className={classNames('tl-overlays__item', className)}>
166
+ <svg className={classNames('tl-overlays__item', className)} aria-hidden="true">
167
167
  {line.type === 'points' ? (
168
168
  <PointsSnapIndicator {...line} zoom={zoom} />
169
169
  ) : line.type === 'gaps' ? (
@@ -1,19 +1,19 @@
1
+ import classNames from 'classnames'
2
+
1
3
  /** @public @react */
2
- export function DefaultSpinner() {
4
+ export function DefaultSpinner(props: React.SVGProps<SVGSVGElement>) {
3
5
  return (
4
- <svg width={16} height={16} viewBox="0 0 16 16" aria-hidden="false">
6
+ <svg
7
+ width={16}
8
+ height={16}
9
+ viewBox="0 0 16 16"
10
+ aria-hidden="false"
11
+ {...props}
12
+ className={classNames('tl-spinner', props.className)}
13
+ >
5
14
  <g strokeWidth={2} fill="none" fillRule="evenodd">
6
15
  <circle strokeOpacity={0.25} cx={8} cy={8} r={7} stroke="currentColor" />
7
- <path strokeLinecap="round" d="M15 8c0-4.5-4.5-7-7-7" stroke="currentColor">
8
- <animateTransform
9
- attributeName="transform"
10
- type="rotate"
11
- from="0 8 8"
12
- to="360 8 8"
13
- dur="1s"
14
- repeatCount="indefinite"
15
- />
16
- </path>
16
+ <path strokeLinecap="round" d="M15 8c0-4.5-4.5-7-7-7" stroke="currentColor" />
17
17
  </g>
18
18
  </svg>
19
19
  )
@@ -17,6 +17,7 @@ export interface TLUserPreferences {
17
17
  // N.B. These are duplicated in TLdrawAppUser.
18
18
  locale?: string | null
19
19
  animationSpeed?: number | null
20
+ areKeyboardShortcutsEnabled?: boolean | null
20
21
  edgeScrollSpeed?: number | null
21
22
  colorScheme?: 'light' | 'dark' | 'system'
22
23
  isSnapMode?: boolean | null
@@ -44,6 +45,7 @@ export const userTypeValidator: T.Validator<TLUserPreferences> = T.object<TLUser
44
45
  // N.B. These are duplicated in TLdrawAppUser.
45
46
  locale: T.string.nullable().optional(),
46
47
  animationSpeed: T.number.nullable().optional(),
48
+ areKeyboardShortcutsEnabled: T.boolean.nullable().optional(),
47
49
  edgeScrollSpeed: T.number.nullable().optional(),
48
50
  colorScheme: T.literalEnum('light', 'dark', 'system').optional(),
49
51
  isSnapMode: T.boolean.nullable().optional(),
@@ -61,6 +63,7 @@ const Versions = {
61
63
  AddDynamicSizeMode: 6,
62
64
  AllowSystemColorScheme: 7,
63
65
  AddPasteAtCursor: 8,
66
+ AddKeyboardShortcuts: 9,
64
67
  } as const
65
68
 
66
69
  const CURRENT_VERSION = Math.max(...Object.values(Versions))
@@ -96,6 +99,9 @@ function migrateSnapshot(data: { version: number; user: any }) {
96
99
  if (data.version < Versions.AddPasteAtCursor) {
97
100
  data.user.isPasteAtCursorMode = false
98
101
  }
102
+ if (data.version < Versions.AddKeyboardShortcuts) {
103
+ data.user.areKeyboardShortcutsEnabled = true
104
+ }
99
105
 
100
106
  // finally
101
107
  data.version = CURRENT_VERSION
@@ -139,6 +145,7 @@ export const defaultUserPreferences = Object.freeze({
139
145
  // N.B. These are duplicated in TLdrawAppUser.
140
146
  edgeScrollSpeed: 1,
141
147
  animationSpeed: userPrefersReducedMotion() ? 0 : 1,
148
+ areKeyboardShortcutsEnabled: true,
142
149
  isSnapMode: false,
143
150
  isWrapMode: false,
144
151
  isDynamicSizeMode: false,