@tldraw/editor 3.11.0-canary.f529c521e249 → 3.11.1

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 (103) hide show
  1. package/CHANGELOG.md +114 -2
  2. package/dist-cjs/index.d.ts +23 -9
  3. package/dist-cjs/index.js +1 -1
  4. package/dist-cjs/index.js.map +2 -2
  5. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +4 -4
  6. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  7. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +34 -26
  8. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +2 -2
  9. package/dist-cjs/lib/config/TLUserPreferences.js +1 -1
  10. package/dist-cjs/lib/config/TLUserPreferences.js.map +1 -1
  11. package/dist-cjs/lib/config/createTLStore.js +2 -1
  12. package/dist-cjs/lib/config/createTLStore.js.map +2 -2
  13. package/dist-cjs/lib/constants.js +1 -1
  14. package/dist-cjs/lib/constants.js.map +2 -2
  15. package/dist-cjs/lib/editor/Editor.js +25 -26
  16. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  17. package/dist-cjs/lib/editor/managers/FocusManager.js +15 -0
  18. package/dist-cjs/lib/editor/managers/FocusManager.js.map +2 -2
  19. package/dist-cjs/lib/editor/managers/UserPreferencesManager.js +1 -1
  20. package/dist-cjs/lib/editor/managers/UserPreferencesManager.js.map +2 -2
  21. package/dist-cjs/lib/exports/StyleEmbedder.js +32 -3
  22. package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
  23. package/dist-cjs/lib/exports/cssRules.js +127 -0
  24. package/dist-cjs/lib/exports/cssRules.js.map +7 -0
  25. package/dist-cjs/lib/exports/exportToSvg.js.map +1 -1
  26. package/dist-cjs/lib/exports/getSvgJsx.js +1 -1
  27. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  28. package/dist-cjs/lib/exports/parseCss.js +0 -44
  29. package/dist-cjs/lib/exports/parseCss.js.map +2 -2
  30. package/dist-cjs/lib/hooks/useGestureEvents.js +12 -6
  31. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  32. package/dist-cjs/lib/hooks/useLocalStore.js +3 -0
  33. package/dist-cjs/lib/hooks/useLocalStore.js.map +2 -2
  34. package/dist-cjs/lib/license/Watermark.js +7 -1
  35. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  36. package/dist-cjs/lib/options.js +2 -1
  37. package/dist-cjs/lib/options.js.map +2 -2
  38. package/dist-cjs/lib/utils/sync/LocalIndexedDb.js +8 -0
  39. package/dist-cjs/lib/utils/sync/LocalIndexedDb.js.map +2 -2
  40. package/dist-cjs/version.js +3 -3
  41. package/dist-cjs/version.js.map +1 -1
  42. package/dist-esm/index.d.mts +23 -9
  43. package/dist-esm/index.mjs +4 -2
  44. package/dist-esm/index.mjs.map +2 -2
  45. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +4 -4
  46. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  47. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +34 -26
  48. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +2 -2
  49. package/dist-esm/lib/config/TLUserPreferences.mjs +1 -1
  50. package/dist-esm/lib/config/TLUserPreferences.mjs.map +1 -1
  51. package/dist-esm/lib/config/createTLStore.mjs +2 -1
  52. package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
  53. package/dist-esm/lib/constants.mjs +1 -1
  54. package/dist-esm/lib/constants.mjs.map +2 -2
  55. package/dist-esm/lib/editor/Editor.mjs +25 -26
  56. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  57. package/dist-esm/lib/editor/managers/FocusManager.mjs +15 -0
  58. package/dist-esm/lib/editor/managers/FocusManager.mjs.map +2 -2
  59. package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs +1 -1
  60. package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs.map +2 -2
  61. package/dist-esm/lib/exports/StyleEmbedder.mjs +34 -5
  62. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
  63. package/dist-esm/lib/exports/cssRules.mjs +107 -0
  64. package/dist-esm/lib/exports/cssRules.mjs.map +7 -0
  65. package/dist-esm/lib/exports/exportToSvg.mjs.map +1 -1
  66. package/dist-esm/lib/exports/getSvgJsx.mjs +1 -1
  67. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  68. package/dist-esm/lib/exports/parseCss.mjs +0 -44
  69. package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
  70. package/dist-esm/lib/hooks/useGestureEvents.mjs +12 -6
  71. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  72. package/dist-esm/lib/hooks/useLocalStore.mjs +3 -0
  73. package/dist-esm/lib/hooks/useLocalStore.mjs.map +2 -2
  74. package/dist-esm/lib/license/Watermark.mjs +7 -1
  75. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  76. package/dist-esm/lib/options.mjs +2 -1
  77. package/dist-esm/lib/options.mjs.map +2 -2
  78. package/dist-esm/lib/utils/sync/LocalIndexedDb.mjs +8 -0
  79. package/dist-esm/lib/utils/sync/LocalIndexedDb.mjs.map +2 -2
  80. package/dist-esm/version.mjs +3 -3
  81. package/dist-esm/version.mjs.map +1 -1
  82. package/editor.css +11 -1
  83. package/package.json +10 -7
  84. package/src/index.ts +4 -1
  85. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +4 -4
  86. package/src/lib/components/default-components/DefaultShapeIndicators.tsx +52 -31
  87. package/src/lib/config/TLUserPreferences.ts +1 -1
  88. package/src/lib/config/createTLStore.ts +1 -0
  89. package/src/lib/constants.ts +1 -1
  90. package/src/lib/editor/Editor.ts +27 -29
  91. package/src/lib/editor/managers/FocusManager.ts +18 -0
  92. package/src/lib/editor/managers/UserPreferencesManager.ts +1 -1
  93. package/src/lib/exports/StyleEmbedder.ts +38 -9
  94. package/src/lib/exports/cssRules.ts +126 -0
  95. package/src/lib/exports/exportToSvg.tsx +1 -1
  96. package/src/lib/exports/getSvgJsx.tsx +1 -1
  97. package/src/lib/exports/parseCss.ts +0 -45
  98. package/src/lib/hooks/useGestureEvents.ts +12 -6
  99. package/src/lib/hooks/useLocalStore.ts +3 -0
  100. package/src/lib/license/Watermark.tsx +7 -1
  101. package/src/lib/options.ts +6 -0
  102. package/src/lib/utils/sync/LocalIndexedDb.ts +9 -0
  103. package/src/version.ts +3 -3
@@ -135,7 +135,6 @@ export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
135
135
 
136
136
  let initDistanceBetweenFingers = 1 // the distance between the two fingers when the pinch starts
137
137
  let initZoom = 1 // the browser's zoom level when the pinch starts
138
- let currZoom = 1 // the current zoom level according to the pinch gesture recognizer
139
138
  let currDistanceBetweenFingers = 0
140
139
  const initPointBetweenFingers = new Vec()
141
140
  const prevPointBetweenFingers = new Vec()
@@ -239,7 +238,7 @@ export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
239
238
 
240
239
  switch (pinchState) {
241
240
  case 'zooming': {
242
- currZoom = offset[0]
241
+ const currZoom = offset[0] ** editor.getCameraOptions().zoomSpeed
243
242
 
244
243
  editor.dispatch({
245
244
  type: 'pinch',
@@ -278,7 +277,7 @@ export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
278
277
  if (event instanceof WheelEvent) return
279
278
  if (!(event.target === elm || elm?.contains(event.target as Node))) return
280
279
 
281
- const scale = offset[0]
280
+ const scale = offset[0] ** editor.getCameraOptions().zoomSpeed
282
281
 
283
282
  pinchState = 'not sure'
284
283
 
@@ -309,14 +308,21 @@ export function useGestureEvents(ref: React.RefObject<HTMLDivElement>) {
309
308
  target: ref,
310
309
  eventOptions: { passive: false },
311
310
  pinch: {
312
- from: () => [editor.getZoomLevel(), 0], // Return the camera z to use when pinch starts
311
+ from: () => {
312
+ const { zoomSpeed } = editor.getCameraOptions()
313
+ const level = editor.getZoomLevel() ** (1 / zoomSpeed)
314
+ return [level, 0]
315
+ }, // Return the camera z to use when pinch starts
313
316
  scaleBounds: () => {
314
317
  const baseZoom = editor.getBaseZoom()
315
- const zoomSteps = editor.getCameraOptions().zoomSteps
318
+ const { zoomSteps, zoomSpeed } = editor.getCameraOptions()
316
319
  const zoomMin = zoomSteps[0] * baseZoom
317
320
  const zoomMax = zoomSteps[zoomSteps.length - 1] * baseZoom
318
321
 
319
- return { from: editor.getZoomLevel(), max: zoomMax, min: zoomMin }
322
+ return {
323
+ max: zoomMax ** (1 / zoomSpeed),
324
+ min: zoomMin ** (1 / zoomSpeed),
325
+ }
320
326
  },
321
327
  },
322
328
  })
@@ -52,6 +52,9 @@ export function useLocalStore(
52
52
 
53
53
  return asset.props.src
54
54
  },
55
+ remove: async (assetIds) => {
56
+ await client.db.removeAssets(assetIds)
57
+ },
55
58
  ...rest.assets,
56
59
  }
57
60
 
@@ -85,6 +85,7 @@ const WatermarkInner = memo(function WatermarkInner({ src }: { src: string }) {
85
85
  })
86
86
 
87
87
  const LicenseStyles = memo(function LicenseStyles() {
88
+ const editor = useEditor()
88
89
  const className = LicenseManager.className
89
90
 
90
91
  const CSS = `/* ------------------- SEE LICENSE -------------------
@@ -156,8 +157,13 @@ To remove the watermark, please purchase a license at tldraw.dev.
156
157
  animation: delayed_link 0.2s forwards ease-in-out;
157
158
  animation-delay: 0.32s;
158
159
  }
160
+
161
+ .${className} > a:focus-visible {
162
+ opacity: 1;
163
+ }
159
164
  }
160
165
 
166
+
161
167
  @keyframes delayed_link {
162
168
  0% {
163
169
  cursor: inherit;
@@ -171,5 +177,5 @@ To remove the watermark, please purchase a license at tldraw.dev.
171
177
  }
172
178
  }`
173
179
 
174
- return <style>{CSS}</style>
180
+ return <style nonce={editor.options.nonce}>{CSS}</style>
175
181
  })
@@ -75,6 +75,11 @@ export interface TldrawOptions {
75
75
  * away and let the fonts load in in the background.
76
76
  */
77
77
  readonly maxFontsToLoadBeforeRender: number
78
+ /**
79
+ * If you have a CSP policy that blocks inline styles, you can use this prop to provide a
80
+ * nonce to use in the editor's styles.
81
+ */
82
+ readonly nonce: string | undefined
78
83
  }
79
84
 
80
85
  /** @public */
@@ -121,4 +126,5 @@ export const defaultTldrawOptions = {
121
126
  exportProvider: Fragment,
122
127
  enableToolbarKeyboardShortcuts: true,
123
128
  maxFontsToLoadBeforeRender: Infinity,
129
+ nonce: undefined,
124
130
  } as const satisfies TldrawOptions
@@ -303,6 +303,15 @@ export class LocalIndexedDb {
303
303
  await assetsStore.put(blob, assetId)
304
304
  })
305
305
  }
306
+
307
+ async removeAssets(assetId: string[]) {
308
+ await this.tx('readwrite', [Table.Assets], async (tx) => {
309
+ const assetsStore = tx.objectStore(Table.Assets)
310
+ for (const id of assetId) {
311
+ await assetsStore.delete(id)
312
+ }
313
+ })
314
+ }
306
315
  }
307
316
 
308
317
  /** @internal */
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.11.0-canary.f529c521e249'
4
+ export const version = '3.11.1'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-03-11T14:54:49.451Z',
8
- patch: '2025-03-11T14:54:49.451Z',
7
+ minor: '2025-03-20T14:45:59.625Z',
8
+ patch: '2025-04-03T10:34:39.217Z',
9
9
  }