@tldraw/editor 3.16.0-next.f9f54ec051f3 → 3.16.0-next.fe14f1b4181f
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 +110 -9
- package/dist-cjs/index.js +3 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +8 -2
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/MenuClickCapture.js +0 -5
- package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
- package/dist-cjs/lib/components/Shape.js +7 -10
- package/dist-cjs/lib/components/Shape.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +4 -23
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +1 -1
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/config/TLUserPreferences.js +9 -3
- package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +63 -24
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +9 -4
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +13 -0
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
- package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +31 -25
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
- package/dist-cjs/lib/{utils/nearestMultiple.js → hooks/useStateAttribute.js} +15 -14
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
- package/dist-cjs/lib/license/Watermark.js +6 -6
- package/dist-cjs/lib/license/Watermark.js.map +1 -1
- package/dist-cjs/lib/options.js +7 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +3 -0
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/utils/EditorAtom.js +45 -0
- package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +110 -9
- package/dist-esm/index.mjs +3 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +8 -2
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
- package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
- package/dist-esm/lib/components/Shape.mjs +7 -10
- package/dist-esm/lib/components/Shape.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +4 -23
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +1 -1
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs +9 -3
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +63 -24
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +9 -4
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +13 -0
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +32 -26
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
- package/dist-esm/lib/license/Watermark.mjs +6 -6
- package/dist-esm/lib/license/Watermark.mjs.map +1 -1
- package/dist-esm/lib/options.mjs +7 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +4 -1
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
- package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +301 -288
- package/package.json +14 -37
- package/src/index.ts +2 -0
- package/src/lib/TldrawEditor.tsx +13 -6
- package/src/lib/components/MenuClickCapture.tsx +0 -8
- package/src/lib/components/Shape.tsx +6 -12
- package/src/lib/components/default-components/DefaultCanvas.tsx +5 -22
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
- package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +5 -1
- package/src/lib/config/TLUserPreferences.ts +8 -1
- package/src/lib/editor/Editor.test.ts +12 -11
- package/src/lib/editor/Editor.ts +88 -47
- package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
- package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +24 -23
- package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
- package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +34 -26
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +6 -1
- package/src/lib/editor/shapes/ShapeUtil.ts +14 -0
- package/src/lib/editor/types/misc-types.ts +54 -1
- package/src/lib/exports/getSvgJsx.test.ts +868 -0
- package/src/lib/exports/getSvgJsx.tsx +78 -21
- package/src/lib/hooks/useCanvasEvents.ts +45 -38
- package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
- package/src/lib/hooks/useStateAttribute.ts +15 -0
- package/src/lib/license/LicenseManager.test.ts +3 -1
- package/src/lib/license/Watermark.test.tsx +2 -1
- package/src/lib/license/Watermark.tsx +6 -6
- package/src/lib/options.ts +8 -0
- package/src/lib/primitives/Box.test.ts +126 -0
- package/src/lib/primitives/Box.ts +10 -1
- package/src/lib/utils/EditorAtom.ts +37 -0
- package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
- package/src/version.ts +3 -3
- package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
- package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
- package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
- package/src/lib/utils/nearestMultiple.ts +0 -13
|
@@ -1,28 +1,29 @@
|
|
|
1
|
+
import { Mock, Mocked, vi } from 'vitest'
|
|
1
2
|
import { Vec } from '../../../primitives/Vec'
|
|
2
3
|
import { Editor } from '../../Editor'
|
|
3
4
|
import { TickManager } from './TickManager'
|
|
4
5
|
|
|
5
6
|
// Mock the Editor class
|
|
6
|
-
|
|
7
|
+
vi.mock('../../Editor')
|
|
7
8
|
|
|
8
9
|
// Mock Date.now to control time
|
|
9
|
-
const mockDateNow =
|
|
10
|
+
const mockDateNow = vi.fn()
|
|
10
11
|
Date.now = mockDateNow
|
|
11
12
|
|
|
12
13
|
// Mock requestAnimationFrame and cancelAnimationFrame
|
|
13
|
-
const mockRequestAnimationFrame =
|
|
14
|
-
const mockCancelAnimationFrame =
|
|
14
|
+
const mockRequestAnimationFrame = vi.fn()
|
|
15
|
+
const mockCancelAnimationFrame = vi.fn()
|
|
15
16
|
global.requestAnimationFrame = mockRequestAnimationFrame
|
|
16
17
|
global.cancelAnimationFrame = mockCancelAnimationFrame
|
|
17
18
|
|
|
18
19
|
describe('TickManager', () => {
|
|
19
|
-
let editor:
|
|
20
|
+
let editor: Mocked<Editor>
|
|
20
21
|
let tickManager: TickManager
|
|
21
|
-
let mockEmit:
|
|
22
|
-
let mockDisposablesAdd:
|
|
22
|
+
let mockEmit: Mock
|
|
23
|
+
let mockDisposablesAdd: Mock
|
|
23
24
|
|
|
24
25
|
beforeEach(() => {
|
|
25
|
-
|
|
26
|
+
vi.clearAllMocks()
|
|
26
27
|
|
|
27
28
|
// Reset time
|
|
28
29
|
mockDateNow.mockReturnValue(1000)
|
|
@@ -37,8 +38,8 @@ describe('TickManager', () => {
|
|
|
37
38
|
|
|
38
39
|
mockCancelAnimationFrame.mockImplementation(() => {})
|
|
39
40
|
|
|
40
|
-
mockEmit =
|
|
41
|
-
mockDisposablesAdd =
|
|
41
|
+
mockEmit = vi.fn()
|
|
42
|
+
mockDisposablesAdd = vi.fn()
|
|
42
43
|
|
|
43
44
|
editor = {
|
|
44
45
|
emit: mockEmit,
|
|
@@ -90,7 +91,7 @@ describe('TickManager', () => {
|
|
|
90
91
|
})
|
|
91
92
|
|
|
92
93
|
it('should cancel existing RAF before starting new one', () => {
|
|
93
|
-
const mockCancel =
|
|
94
|
+
const mockCancel = vi.fn()
|
|
94
95
|
tickManager.cancelRaf = mockCancel
|
|
95
96
|
|
|
96
97
|
tickManager.start()
|
|
@@ -143,7 +144,7 @@ describe('TickManager', () => {
|
|
|
143
144
|
})
|
|
144
145
|
|
|
145
146
|
it('should update pointer velocity', () => {
|
|
146
|
-
const updatePointerVelocitySpy =
|
|
147
|
+
const updatePointerVelocitySpy = vi.spyOn(tickManager as any, 'updatePointerVelocity')
|
|
147
148
|
tickManager.now = 1000
|
|
148
149
|
mockDateNow.mockReturnValue(1016)
|
|
149
150
|
|
|
@@ -176,7 +177,7 @@ describe('TickManager', () => {
|
|
|
176
177
|
})
|
|
177
178
|
|
|
178
179
|
it('should cancel RAF if exists', () => {
|
|
179
|
-
const mockCancel =
|
|
180
|
+
const mockCancel = vi.fn()
|
|
180
181
|
tickManager.cancelRaf = mockCancel
|
|
181
182
|
|
|
182
183
|
tickManager.dispose()
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { atom } from '@tldraw/state'
|
|
2
|
+
import { Mocked, vi } from 'vitest'
|
|
2
3
|
import { TLUserPreferences, defaultUserPreferences } from '../../../config/TLUserPreferences'
|
|
3
4
|
import { TLUser } from '../../../config/createTLUser'
|
|
4
5
|
import { UserPreferencesManager } from './UserPreferencesManager'
|
|
5
6
|
|
|
6
7
|
// Mock window.matchMedia
|
|
7
|
-
const mockMatchMedia =
|
|
8
|
-
|
|
9
|
-
writable: true,
|
|
10
|
-
value: mockMatchMedia,
|
|
11
|
-
})
|
|
8
|
+
const mockMatchMedia = vi.fn()
|
|
9
|
+
window.matchMedia = mockMatchMedia
|
|
12
10
|
|
|
13
11
|
describe('UserPreferencesManager', () => {
|
|
14
|
-
let mockUser:
|
|
12
|
+
let mockUser: Mocked<TLUser>
|
|
15
13
|
let mockUserPreferences: TLUserPreferences
|
|
16
14
|
let userPreferencesAtom: any
|
|
17
15
|
let userPreferencesManager: UserPreferencesManager
|
|
@@ -25,6 +23,7 @@ describe('UserPreferencesManager', () => {
|
|
|
25
23
|
locale: 'en',
|
|
26
24
|
animationSpeed: 1,
|
|
27
25
|
areKeyboardShortcutsEnabled: true,
|
|
26
|
+
showUiLabels: false,
|
|
28
27
|
edgeScrollSpeed: 1,
|
|
29
28
|
colorScheme: 'light',
|
|
30
29
|
isSnapMode: false,
|
|
@@ -35,14 +34,14 @@ describe('UserPreferencesManager', () => {
|
|
|
35
34
|
})
|
|
36
35
|
|
|
37
36
|
beforeEach(() => {
|
|
38
|
-
|
|
37
|
+
vi.clearAllMocks()
|
|
39
38
|
|
|
40
39
|
mockUserPreferences = createMockUserPreferences()
|
|
41
40
|
userPreferencesAtom = atom('userPreferences', mockUserPreferences)
|
|
42
41
|
|
|
43
42
|
mockUser = {
|
|
44
43
|
userPreferences: userPreferencesAtom,
|
|
45
|
-
setUserPreferences:
|
|
44
|
+
setUserPreferences: vi.fn((prefs) => {
|
|
46
45
|
userPreferencesAtom.set(prefs)
|
|
47
46
|
}),
|
|
48
47
|
}
|
|
@@ -50,8 +49,8 @@ describe('UserPreferencesManager', () => {
|
|
|
50
49
|
// Default matchMedia mock - no dark mode preference
|
|
51
50
|
mockMatchMedia.mockReturnValue({
|
|
52
51
|
matches: false,
|
|
53
|
-
addEventListener:
|
|
54
|
-
removeEventListener:
|
|
52
|
+
addEventListener: vi.fn(),
|
|
53
|
+
removeEventListener: vi.fn(),
|
|
55
54
|
})
|
|
56
55
|
})
|
|
57
56
|
|
|
@@ -65,17 +64,14 @@ describe('UserPreferencesManager', () => {
|
|
|
65
64
|
expect(userPreferencesManager.systemColorScheme.get()).toBe('light')
|
|
66
65
|
|
|
67
66
|
// Restore matchMedia
|
|
68
|
-
|
|
69
|
-
writable: true,
|
|
70
|
-
value: mockMatchMedia,
|
|
71
|
-
})
|
|
67
|
+
window.matchMedia = mockMatchMedia
|
|
72
68
|
})
|
|
73
69
|
|
|
74
70
|
it('should initialize with light system color scheme when dark mode not preferred', () => {
|
|
75
71
|
mockMatchMedia.mockReturnValue({
|
|
76
72
|
matches: false,
|
|
77
|
-
addEventListener:
|
|
78
|
-
removeEventListener:
|
|
73
|
+
addEventListener: vi.fn(),
|
|
74
|
+
removeEventListener: vi.fn(),
|
|
79
75
|
})
|
|
80
76
|
|
|
81
77
|
userPreferencesManager = new UserPreferencesManager(mockUser, false)
|
|
@@ -86,8 +82,8 @@ describe('UserPreferencesManager', () => {
|
|
|
86
82
|
it('should initialize with dark system color scheme when dark mode preferred', () => {
|
|
87
83
|
mockMatchMedia.mockReturnValue({
|
|
88
84
|
matches: true,
|
|
89
|
-
addEventListener:
|
|
90
|
-
removeEventListener:
|
|
85
|
+
addEventListener: vi.fn(),
|
|
86
|
+
removeEventListener: vi.fn(),
|
|
91
87
|
})
|
|
92
88
|
|
|
93
89
|
userPreferencesManager = new UserPreferencesManager(mockUser, false)
|
|
@@ -96,8 +92,8 @@ describe('UserPreferencesManager', () => {
|
|
|
96
92
|
})
|
|
97
93
|
|
|
98
94
|
it('should set up media query listener for color scheme changes', () => {
|
|
99
|
-
const mockAddEventListener =
|
|
100
|
-
const mockRemoveEventListener =
|
|
95
|
+
const mockAddEventListener = vi.fn()
|
|
96
|
+
const mockRemoveEventListener = vi.fn()
|
|
101
97
|
|
|
102
98
|
mockMatchMedia.mockReturnValue({
|
|
103
99
|
matches: false,
|
|
@@ -111,7 +107,7 @@ describe('UserPreferencesManager', () => {
|
|
|
111
107
|
})
|
|
112
108
|
|
|
113
109
|
it('should handle media query change events', () => {
|
|
114
|
-
const mockAddEventListener =
|
|
110
|
+
const mockAddEventListener = vi.fn()
|
|
115
111
|
let changeHandler: (e: MediaQueryListEvent) => void
|
|
116
112
|
|
|
117
113
|
mockMatchMedia.mockReturnValue({
|
|
@@ -122,7 +118,7 @@ describe('UserPreferencesManager', () => {
|
|
|
122
118
|
}
|
|
123
119
|
mockAddEventListener(event, handler)
|
|
124
120
|
},
|
|
125
|
-
removeEventListener:
|
|
121
|
+
removeEventListener: vi.fn(),
|
|
126
122
|
})
|
|
127
123
|
|
|
128
124
|
userPreferencesManager = new UserPreferencesManager(mockUser, false)
|
|
@@ -152,11 +148,11 @@ describe('UserPreferencesManager', () => {
|
|
|
152
148
|
|
|
153
149
|
describe('dispose', () => {
|
|
154
150
|
it('should remove media query listener on dispose', () => {
|
|
155
|
-
const mockRemoveEventListener =
|
|
151
|
+
const mockRemoveEventListener = vi.fn()
|
|
156
152
|
|
|
157
153
|
mockMatchMedia.mockReturnValue({
|
|
158
154
|
matches: false,
|
|
159
|
-
addEventListener:
|
|
155
|
+
addEventListener: vi.fn(),
|
|
160
156
|
removeEventListener: mockRemoveEventListener,
|
|
161
157
|
})
|
|
162
158
|
|
|
@@ -169,8 +165,8 @@ describe('UserPreferencesManager', () => {
|
|
|
169
165
|
it('should call all disposables', () => {
|
|
170
166
|
userPreferencesManager = new UserPreferencesManager(mockUser, false)
|
|
171
167
|
|
|
172
|
-
const mockDisposable1 =
|
|
173
|
-
const mockDisposable2 =
|
|
168
|
+
const mockDisposable1 = vi.fn()
|
|
169
|
+
const mockDisposable2 = vi.fn()
|
|
174
170
|
|
|
175
171
|
userPreferencesManager.disposables.add(mockDisposable1)
|
|
176
172
|
userPreferencesManager.disposables.add(mockDisposable2)
|
|
@@ -231,6 +227,7 @@ describe('UserPreferencesManager', () => {
|
|
|
231
227
|
color: mockUserPreferences.color,
|
|
232
228
|
animationSpeed: mockUserPreferences.animationSpeed,
|
|
233
229
|
areKeyboardShortcutsEnabled: mockUserPreferences.areKeyboardShortcutsEnabled,
|
|
230
|
+
showUiLabels: mockUserPreferences.showUiLabels,
|
|
234
231
|
isSnapMode: mockUserPreferences.isSnapMode,
|
|
235
232
|
colorScheme: mockUserPreferences.colorScheme,
|
|
236
233
|
isDarkMode: false, // light mode
|
|
@@ -379,6 +376,17 @@ describe('UserPreferencesManager', () => {
|
|
|
379
376
|
})
|
|
380
377
|
})
|
|
381
378
|
|
|
379
|
+
describe('getShowUiLabels', () => {
|
|
380
|
+
it('should return user show ui labels setting', () => {
|
|
381
|
+
expect(userPreferencesManager.getShowUiLabels()).toBe(mockUserPreferences.showUiLabels)
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
it('should return default show ui labels when null', () => {
|
|
385
|
+
userPreferencesAtom.set({ ...mockUserPreferences, showUiLabels: null })
|
|
386
|
+
expect(userPreferencesManager.getShowUiLabels()).toBe(defaultUserPreferences.showUiLabels)
|
|
387
|
+
})
|
|
388
|
+
})
|
|
389
|
+
|
|
382
390
|
describe('getEdgeScrollSpeed', () => {
|
|
383
391
|
it('should return user edge scroll speed', () => {
|
|
384
392
|
expect(userPreferencesManager.getEdgeScrollSpeed()).toBe(
|
|
@@ -13,7 +13,7 @@ export class UserPreferencesManager {
|
|
|
13
13
|
private readonly user: TLUser,
|
|
14
14
|
private readonly inferDarkMode: boolean
|
|
15
15
|
) {
|
|
16
|
-
if (typeof window === 'undefined' || !
|
|
16
|
+
if (typeof window === 'undefined' || !window.matchMedia) return
|
|
17
17
|
|
|
18
18
|
const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
|
|
19
19
|
if (darkModeMediaQuery?.matches) {
|
|
@@ -49,6 +49,7 @@ export class UserPreferencesManager {
|
|
|
49
49
|
isDarkMode: this.getIsDarkMode(),
|
|
50
50
|
isWrapMode: this.getIsWrapMode(),
|
|
51
51
|
isDynamicResizeMode: this.getIsDynamicResizeMode(),
|
|
52
|
+
showUiLabels: this.getShowUiLabels(),
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
|
|
@@ -119,4 +120,8 @@ export class UserPreferencesManager {
|
|
|
119
120
|
defaultUserPreferences.isPasteAtCursorMode
|
|
120
121
|
)
|
|
121
122
|
}
|
|
123
|
+
|
|
124
|
+
@computed getShowUiLabels() {
|
|
125
|
+
return this.user.userPreferences.get().showUiLabels ?? defaultUserPreferences.showUiLabels
|
|
126
|
+
}
|
|
122
127
|
}
|
|
@@ -341,6 +341,20 @@ export abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknownShape> {
|
|
|
341
341
|
return false
|
|
342
342
|
}
|
|
343
343
|
|
|
344
|
+
/**
|
|
345
|
+
* By default, the bounds of an image export are the bounds of all the shapes it contains, plus
|
|
346
|
+
* some padding. If an export includes a shape where `isExportBoundsContainer` is true, then the
|
|
347
|
+
* padding is skipped _if the bounds of that shape contains all the other shapes_. This is
|
|
348
|
+
* useful in cases like annotating on top of an image, where you usually want to avoid extra
|
|
349
|
+
* padding around the image if you don't need it.
|
|
350
|
+
*
|
|
351
|
+
* @param _shape - The shape to check
|
|
352
|
+
* @returns True if this shape should be treated as an export bounds container
|
|
353
|
+
*/
|
|
354
|
+
isExportBoundsContainer(_shape: Shape): boolean {
|
|
355
|
+
return false
|
|
356
|
+
}
|
|
357
|
+
|
|
344
358
|
/**
|
|
345
359
|
* Get a JSX element for the shape (as an HTML element) to be rendered as part of the canvas background - behind any other shape content.
|
|
346
360
|
*
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BoxModel } from '@tldraw/tlschema'
|
|
1
|
+
import { BoxModel, TLShape } from '@tldraw/tlschema'
|
|
2
2
|
import { Box } from '../../primitives/Box'
|
|
3
3
|
import { VecLike } from '../../primitives/Vec'
|
|
4
4
|
|
|
@@ -206,3 +206,56 @@ export interface TLUpdatePointerOptions {
|
|
|
206
206
|
isPen?: boolean
|
|
207
207
|
button?: number
|
|
208
208
|
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Options to {@link Editor.getShapeAtPoint}.
|
|
212
|
+
*
|
|
213
|
+
* @public
|
|
214
|
+
*/
|
|
215
|
+
export interface TLGetShapeAtPointOptions {
|
|
216
|
+
/**
|
|
217
|
+
* The margin to apply to the shape.
|
|
218
|
+
* If a number, it will be applied to both the inside and outside of the shape.
|
|
219
|
+
* If an array, the first element will be applied to the inside of the shape, and the second element will be applied to the outside.
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```ts
|
|
223
|
+
* // Get the shape at the center of the screen
|
|
224
|
+
* const shape = editor.getShapeAtProps({
|
|
225
|
+
* margin: 10,
|
|
226
|
+
* })
|
|
227
|
+
*
|
|
228
|
+
* // Get the shape at the center of the screen with a 10px inner margin and a 5px outer margin
|
|
229
|
+
* const shape = editor.getShapeAtProps({
|
|
230
|
+
* margin: [10, 5],
|
|
231
|
+
* })
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
margin?: number | [number, number]
|
|
235
|
+
/**
|
|
236
|
+
* Whether to register hits inside of shapes (beyond the margin), such as the inside of a solid shape.
|
|
237
|
+
*/
|
|
238
|
+
hitInside?: boolean
|
|
239
|
+
/**
|
|
240
|
+
* Whether to register hits on locked shapes.
|
|
241
|
+
*/
|
|
242
|
+
hitLocked?: boolean
|
|
243
|
+
/**
|
|
244
|
+
* Whether to register hits on labels.
|
|
245
|
+
*/
|
|
246
|
+
hitLabels?: boolean
|
|
247
|
+
/**
|
|
248
|
+
* Whether to only return hits on shapes that are currently being rendered.
|
|
249
|
+
* todo: rename this to hitCulled or hitNotRendering
|
|
250
|
+
*/
|
|
251
|
+
renderingOnly?: boolean
|
|
252
|
+
/**
|
|
253
|
+
* Whether to register hits on the inside of frame shapes.
|
|
254
|
+
* todo: rename this to hitInsideFrames
|
|
255
|
+
*/
|
|
256
|
+
hitFrameInside?: boolean
|
|
257
|
+
/**
|
|
258
|
+
* A filter function to apply to the shapes.
|
|
259
|
+
*/
|
|
260
|
+
filter?(shape: TLShape): boolean
|
|
261
|
+
}
|