@tldraw/editor 3.11.0-canary.13bfc642c301 → 3.11.0-canary.3758de89732a
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.
- package/dist-cjs/index.d.ts +23 -9
- package/dist-cjs/index.js +1 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +4 -4
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +37 -25
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +2 -2
- package/dist-cjs/lib/config/TLUserPreferences.js +1 -1
- package/dist-cjs/lib/config/TLUserPreferences.js.map +1 -1
- package/dist-cjs/lib/editor/Editor.js +11 -9
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/FocusManager.js +15 -0
- package/dist-cjs/lib/editor/managers/FocusManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager.js +1 -1
- package/dist-cjs/lib/editor/managers/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/exports/getSvgJsx.js +1 -1
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/license/Watermark.js +7 -1
- package/dist-cjs/lib/license/Watermark.js.map +2 -2
- package/dist-cjs/lib/options.js +2 -1
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +23 -9
- package/dist-esm/index.mjs +4 -2
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +4 -4
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +37 -25
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs +1 -1
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +1 -1
- package/dist-esm/lib/editor/Editor.mjs +11 -9
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/FocusManager.mjs +15 -0
- package/dist-esm/lib/editor/managers/FocusManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +1 -1
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/license/Watermark.mjs +7 -1
- package/dist-esm/lib/license/Watermark.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +2 -1
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +1 -1
- package/package.json +7 -7
- package/src/index.ts +4 -1
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +4 -4
- package/src/lib/components/default-components/DefaultShapeIndicators.tsx +51 -28
- package/src/lib/config/TLUserPreferences.ts +1 -1
- package/src/lib/editor/Editor.ts +13 -10
- package/src/lib/editor/managers/FocusManager.ts +18 -0
- package/src/lib/editor/managers/UserPreferencesManager.ts +1 -1
- package/src/lib/exports/getSvgJsx.tsx +1 -1
- package/src/lib/license/Watermark.tsx +7 -1
- package/src/lib/options.ts +6 -0
- package/src/version.ts +3 -3
package/src/lib/editor/Editor.ts
CHANGED
|
@@ -6328,21 +6328,22 @@ export class Editor extends EventEmitter<TLEventMap> {
|
|
|
6328
6328
|
*
|
|
6329
6329
|
* @example
|
|
6330
6330
|
* ```ts
|
|
6331
|
-
* editor.stackShapes([box1, box2], 'horizontal'
|
|
6332
|
-
* editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal'
|
|
6331
|
+
* editor.stackShapes([box1, box2], 'horizontal')
|
|
6332
|
+
* editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal')
|
|
6333
6333
|
* ```
|
|
6334
6334
|
*
|
|
6335
6335
|
* @param shapes - The shapes (or shape ids) to stack.
|
|
6336
6336
|
* @param operation - Whether to stack horizontally or vertically.
|
|
6337
|
-
* @param gap - The gap to leave between shapes.
|
|
6337
|
+
* @param gap - The gap to leave between shapes. By default, uses the editor's `adjacentShapeMargin` option.
|
|
6338
6338
|
*
|
|
6339
6339
|
* @public
|
|
6340
6340
|
*/
|
|
6341
6341
|
stackShapes(
|
|
6342
6342
|
shapes: TLShapeId[] | TLShape[],
|
|
6343
6343
|
operation: 'horizontal' | 'vertical',
|
|
6344
|
-
gap
|
|
6344
|
+
gap?: number
|
|
6345
6345
|
): this {
|
|
6346
|
+
const _gap = gap ?? this.options.adjacentShapeMargin
|
|
6346
6347
|
const ids =
|
|
6347
6348
|
typeof shapes[0] === 'string'
|
|
6348
6349
|
? (shapes as TLShapeId[])
|
|
@@ -6400,7 +6401,7 @@ export class Editor extends EventEmitter<TLEventMap> {
|
|
|
6400
6401
|
}
|
|
6401
6402
|
|
|
6402
6403
|
const len = shapeClustersToStack.length
|
|
6403
|
-
if ((
|
|
6404
|
+
if ((_gap === 0 && len < 3) || len < 2) return this
|
|
6404
6405
|
|
|
6405
6406
|
let val: 'x' | 'y'
|
|
6406
6407
|
let min: 'minX' | 'minY'
|
|
@@ -6421,7 +6422,7 @@ export class Editor extends EventEmitter<TLEventMap> {
|
|
|
6421
6422
|
|
|
6422
6423
|
let shapeGap: number = 0
|
|
6423
6424
|
|
|
6424
|
-
if (
|
|
6425
|
+
if (_gap === 0) {
|
|
6425
6426
|
// note: this is not used in the current tldraw.com; there we use a specified stack
|
|
6426
6427
|
|
|
6427
6428
|
const gaps: Record<number, number> = {}
|
|
@@ -6461,7 +6462,7 @@ export class Editor extends EventEmitter<TLEventMap> {
|
|
|
6461
6462
|
}
|
|
6462
6463
|
} else {
|
|
6463
6464
|
// If a gap was provided, then use that instead.
|
|
6464
|
-
shapeGap =
|
|
6465
|
+
shapeGap = _gap
|
|
6465
6466
|
}
|
|
6466
6467
|
|
|
6467
6468
|
const changes: TLShapePartial[] = []
|
|
@@ -6500,17 +6501,19 @@ export class Editor extends EventEmitter<TLEventMap> {
|
|
|
6500
6501
|
*
|
|
6501
6502
|
* @example
|
|
6502
6503
|
* ```ts
|
|
6503
|
-
* editor.packShapes([box1, box2]
|
|
6504
|
+
* editor.packShapes([box1, box2])
|
|
6504
6505
|
* editor.packShapes(editor.getSelectedShapeIds(), 32)
|
|
6505
6506
|
* ```
|
|
6506
6507
|
*
|
|
6507
6508
|
*
|
|
6508
6509
|
* @param shapes - The shapes (or shape ids) to pack.
|
|
6509
|
-
* @param gap - The padding to apply to the packed shapes. Defaults to
|
|
6510
|
+
* @param gap - The padding to apply to the packed shapes. Defaults to the editor's `adjacentShapeMargin` option.
|
|
6510
6511
|
*/
|
|
6511
|
-
packShapes(shapes: TLShapeId[] | TLShape[],
|
|
6512
|
+
packShapes(shapes: TLShapeId[] | TLShape[], _gap?: number): this {
|
|
6512
6513
|
if (this.getIsReadonly()) return this
|
|
6513
6514
|
|
|
6515
|
+
const gap = _gap ?? this.options.adjacentShapeMargin
|
|
6516
|
+
|
|
6514
6517
|
const ids =
|
|
6515
6518
|
typeof shapes[0] === 'string'
|
|
6516
6519
|
? (shapes as TLShapeId[])
|
|
@@ -30,6 +30,9 @@ export class FocusManager {
|
|
|
30
30
|
editor.updateInstanceState({ isFocused: !!autoFocus })
|
|
31
31
|
}
|
|
32
32
|
this.updateContainerClass()
|
|
33
|
+
|
|
34
|
+
document.body.addEventListener('keydown', this.handleKeyDown.bind(this))
|
|
35
|
+
document.body.addEventListener('mousedown', this.handleMouseDown.bind(this))
|
|
33
36
|
}
|
|
34
37
|
|
|
35
38
|
/**
|
|
@@ -50,6 +53,19 @@ export class FocusManager {
|
|
|
50
53
|
} else {
|
|
51
54
|
container.classList.remove('tl-container__focused')
|
|
52
55
|
}
|
|
56
|
+
container.classList.add('tl-container__no-focus-ring')
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private handleKeyDown(keyEvent: KeyboardEvent) {
|
|
60
|
+
const container = this.editor.getContainer()
|
|
61
|
+
if (keyEvent.key === 'Tab') {
|
|
62
|
+
container.classList.remove('tl-container__no-focus-ring')
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private handleMouseDown() {
|
|
67
|
+
const container = this.editor.getContainer()
|
|
68
|
+
container.classList.add('tl-container__no-focus-ring')
|
|
53
69
|
}
|
|
54
70
|
|
|
55
71
|
focus() {
|
|
@@ -62,6 +78,8 @@ export class FocusManager {
|
|
|
62
78
|
}
|
|
63
79
|
|
|
64
80
|
dispose() {
|
|
81
|
+
document.body.removeEventListener('keydown', this.handleKeyDown.bind(this))
|
|
82
|
+
document.body.removeEventListener('mousedown', this.handleMouseDown.bind(this))
|
|
65
83
|
this.disposeSideEffectListener?.()
|
|
66
84
|
}
|
|
67
85
|
}
|
|
@@ -80,7 +80,7 @@ export class UserPreferencesManager {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
@computed getName() {
|
|
83
|
-
return this.user.userPreferences.get().name ?? defaultUserPreferences.name
|
|
83
|
+
return this.user.userPreferences.get().name?.trim() ?? defaultUserPreferences.name
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
@computed getLocale() {
|
|
@@ -354,7 +354,7 @@ function SvgExport({
|
|
|
354
354
|
key: uniqueId(),
|
|
355
355
|
getElement: async () => {
|
|
356
356
|
const declaration = await editor.fonts.toEmbeddedCssDeclaration(font)
|
|
357
|
-
return <style>{declaration}</style>
|
|
357
|
+
return <style nonce={editor.options.nonce}>{declaration}</style>
|
|
358
358
|
},
|
|
359
359
|
})
|
|
360
360
|
}
|
|
@@ -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
|
})
|
package/src/lib/options.ts
CHANGED
|
@@ -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
|
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.
|
|
4
|
+
export const version = '3.11.0-canary.3758de89732a'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2024-09-13T14:36:29.063Z',
|
|
7
|
-
minor: '2025-03-
|
|
8
|
-
patch: '2025-03-
|
|
7
|
+
minor: '2025-03-15T13:28:31.594Z',
|
|
8
|
+
patch: '2025-03-15T13:28:31.594Z',
|
|
9
9
|
}
|