@tldraw/editor 3.15.0-canary.603f7f65a1ab → 3.15.0-canary.604030fd2dae

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 (30) hide show
  1. package/dist-cjs/index.d.ts +40 -37
  2. package/dist-cjs/index.js +16 -16
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/config/TLUserPreferences.js +7 -1
  5. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  6. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +7 -2
  7. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  8. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +0 -1
  9. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  10. package/dist-cjs/version.js +3 -3
  11. package/dist-cjs/version.js.map +1 -1
  12. package/dist-esm/index.d.mts +40 -37
  13. package/dist-esm/index.mjs +41 -41
  14. package/dist-esm/index.mjs.map +2 -2
  15. package/dist-esm/lib/config/TLUserPreferences.mjs +7 -1
  16. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  17. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +7 -2
  18. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  19. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +0 -1
  20. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  21. package/dist-esm/version.mjs +3 -3
  22. package/dist-esm/version.mjs.map +1 -1
  23. package/package.json +7 -7
  24. package/src/index.ts +62 -62
  25. package/src/lib/config/TLUserPreferences.ts +7 -0
  26. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +21 -0
  27. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +8 -0
  28. package/src/lib/license/LicenseManager.test.ts +1 -1
  29. package/src/lib/utils/sync/TLLocalSyncClient.ts +0 -1
  30. package/src/version.ts +3 -3
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'
@@ -388,11 +373,8 @@ export {
388
373
  polygonIntersectsPolyline,
389
374
  polygonsIntersect,
390
375
  } from './lib/primitives/intersect'
376
+ export { Mat, type MatLike, type MatModel } from './lib/primitives/Mat'
391
377
  export {
392
- HALF_PI,
393
- PI,
394
- PI2,
395
- SIN,
396
378
  angleDistance,
397
379
  approximately,
398
380
  areAnglesCompatible,
@@ -409,23 +391,36 @@ export {
409
391
  getPointOnCircle,
410
392
  getPointsOnArc,
411
393
  getPolygonVertices,
394
+ HALF_PI,
412
395
  isSafeFloat,
413
396
  perimeterOfEllipse,
397
+ PI,
398
+ PI2,
414
399
  pointInPolygon,
415
400
  precise,
416
401
  radiansToDegrees,
417
402
  rangeIntersection,
418
403
  shortAngleDist,
404
+ SIN,
419
405
  snapAngle,
420
406
  toDomPrecision,
421
407
  toFixed,
422
408
  toPrecision,
423
409
  } from './lib/primitives/utils'
410
+ export { Vec, type VecLike } from './lib/primitives/Vec'
424
411
  export {
425
- ReadonlySharedStyleMap,
426
- SharedStyleMap,
427
- type SharedStyle,
428
- } from './lib/utils/SharedStylesMap'
412
+ ErrorScreen,
413
+ LoadingScreen,
414
+ TldrawEditor,
415
+ useOnMount,
416
+ type LoadingScreenProps,
417
+ type TldrawEditorBaseProps,
418
+ type TldrawEditorProps,
419
+ type TldrawEditorStoreProps,
420
+ type TldrawEditorWithoutStoreProps,
421
+ type TldrawEditorWithStoreProps,
422
+ type TLOnMountHandler,
423
+ } from './lib/TldrawEditor'
429
424
  export { dataUrlToFile, getDefaultCdnBaseUrl } from './lib/utils/assets'
430
425
  export { clampToBrowserMaxCanvasSize, type CanvasMaxSize } from './lib/utils/browserCanvasMaxSize'
431
426
  export {
@@ -461,9 +456,9 @@ export {
461
456
  getFontsFromRichText,
462
457
  type RichTextFontVisitor,
463
458
  type RichTextFontVisitorState,
464
- type TLTextOptions,
465
459
  type TiptapEditor,
466
460
  type TiptapNode,
461
+ type TLTextOptions,
467
462
  } from './lib/utils/richText'
468
463
  export {
469
464
  applyRotationToSnapshotShapes,
@@ -471,9 +466,14 @@ export {
471
466
  type TLRotationSnapshot,
472
467
  } from './lib/utils/rotation'
473
468
  export { runtime, setRuntimeOverrides } from './lib/utils/runtime'
469
+ export {
470
+ ReadonlySharedStyleMap,
471
+ SharedStyleMap,
472
+ type SharedStyle,
473
+ } from './lib/utils/SharedStylesMap'
474
+ export { hardReset } from './lib/utils/sync/hardReset'
474
475
  export { LocalIndexedDb, Table, type StoreName } from './lib/utils/sync/LocalIndexedDb'
475
476
  export { type TLStoreWithStatus } from './lib/utils/sync/StoreWithStatus'
476
- export { hardReset } from './lib/utils/sync/hardReset'
477
477
  export { uniq } from './lib/utils/uniq'
478
478
  export { openWindow } from './lib/utils/window-open'
479
479
 
@@ -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,
@@ -24,6 +24,7 @@ describe('UserPreferencesManager', () => {
24
24
  color: '#FF802B',
25
25
  locale: 'en',
26
26
  animationSpeed: 1,
27
+ areKeyboardShortcutsEnabled: true,
27
28
  edgeScrollSpeed: 1,
28
29
  colorScheme: 'light',
29
30
  isSnapMode: false,
@@ -229,6 +230,7 @@ describe('UserPreferencesManager', () => {
229
230
  locale: mockUserPreferences.locale,
230
231
  color: mockUserPreferences.color,
231
232
  animationSpeed: mockUserPreferences.animationSpeed,
233
+ areKeyboardShortcutsEnabled: mockUserPreferences.areKeyboardShortcutsEnabled,
232
234
  isSnapMode: mockUserPreferences.isSnapMode,
233
235
  colorScheme: mockUserPreferences.colorScheme,
234
236
  isDarkMode: false, // light mode
@@ -362,6 +364,21 @@ describe('UserPreferencesManager', () => {
362
364
  })
363
365
  })
364
366
 
367
+ describe('getAreKeyboardShortcutsEnabled', () => {
368
+ it('should return user keyboard shortcuts', () => {
369
+ expect(userPreferencesManager.getAreKeyboardShortcutsEnabled()).toBe(
370
+ mockUserPreferences.areKeyboardShortcutsEnabled
371
+ )
372
+ })
373
+
374
+ it('should return default keyboard shortcuts when null', () => {
375
+ userPreferencesAtom.set({ ...mockUserPreferences, areKeyboardShortcutsEnabled: null })
376
+ expect(userPreferencesManager.getAreKeyboardShortcutsEnabled()).toBe(
377
+ defaultUserPreferences.areKeyboardShortcutsEnabled
378
+ )
379
+ })
380
+ })
381
+
365
382
  describe('getEdgeScrollSpeed', () => {
366
383
  it('should return user edge scroll speed', () => {
367
384
  expect(userPreferencesManager.getEdgeScrollSpeed()).toBe(
@@ -483,6 +500,7 @@ describe('UserPreferencesManager', () => {
483
500
  color: null,
484
501
  locale: null,
485
502
  animationSpeed: null,
503
+ areKeyboardShortcutsEnabled: null,
486
504
  edgeScrollSpeed: null,
487
505
  isSnapMode: null,
488
506
  isWrapMode: null,
@@ -496,6 +514,9 @@ describe('UserPreferencesManager', () => {
496
514
  expect(userPreferencesManager.getColor()).toBe(defaultUserPreferences.color)
497
515
  expect(userPreferencesManager.getLocale()).toBe(defaultUserPreferences.locale)
498
516
  expect(userPreferencesManager.getAnimationSpeed()).toBe(defaultUserPreferences.animationSpeed)
517
+ expect(userPreferencesManager.getAreKeyboardShortcutsEnabled()).toBe(
518
+ defaultUserPreferences.areKeyboardShortcutsEnabled
519
+ )
499
520
  expect(userPreferencesManager.getEdgeScrollSpeed()).toBe(
500
521
  defaultUserPreferences.edgeScrollSpeed
501
522
  )
@@ -43,6 +43,7 @@ export class UserPreferencesManager {
43
43
  locale: this.getLocale(),
44
44
  color: this.getColor(),
45
45
  animationSpeed: this.getAnimationSpeed(),
46
+ areKeyboardShortcutsEnabled: this.getAreKeyboardShortcutsEnabled(),
46
47
  isSnapMode: this.getIsSnapMode(),
47
48
  colorScheme: this.user.userPreferences.get().colorScheme,
48
49
  isDarkMode: this.getIsDarkMode(),
@@ -75,6 +76,13 @@ export class UserPreferencesManager {
75
76
  return this.user.userPreferences.get().animationSpeed ?? defaultUserPreferences.animationSpeed
76
77
  }
77
78
 
79
+ @computed getAreKeyboardShortcutsEnabled() {
80
+ return (
81
+ this.user.userPreferences.get().areKeyboardShortcutsEnabled ??
82
+ defaultUserPreferences.areKeyboardShortcutsEnabled
83
+ )
84
+ }
85
+
78
86
  @computed getId() {
79
87
  return this.user.userPreferences.get().id
80
88
  }
@@ -417,7 +417,7 @@ function importPrivateKey(pemContents: string) {
417
417
  // base64 decode the string to get the binary data
418
418
  const binaryDerString = atob(pemContents)
419
419
  // convert from a binary string to an ArrayBuffer
420
- const binaryDer = str2ab(binaryDerString) as Uint8Array
420
+ const binaryDer = str2ab(binaryDerString)
421
421
 
422
422
  return crypto.subtle.importKey(
423
423
  'pkcs8',
@@ -266,7 +266,6 @@ export class TLLocalSyncClient {
266
266
 
267
267
  private isPersisting = false
268
268
  private didLastWriteError = false
269
- // eslint-disable-next-line no-restricted-globals
270
269
  private scheduledPersistTimeout: ReturnType<typeof setTimeout> | null = null
271
270
 
272
271
  /**
package/src/version.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '3.15.0-canary.603f7f65a1ab'
4
+ export const version = '3.15.0-canary.604030fd2dae'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-07-03T13:47:17.885Z',
8
- patch: '2025-07-03T13:47:17.885Z',
7
+ minor: '2025-07-07T08:54:33.954Z',
8
+ patch: '2025-07-07T08:54:33.954Z',
9
9
  }