@tldraw/editor 4.5.0-canary.fe0a82f04c21 → 4.5.0-internal.b3f4cb985cc3
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 +24 -2
- package/dist-cjs/index.js +5 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +5 -4
- package/dist-cjs/lib/TldrawEditor.js.map +3 -3
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +3 -2
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +5 -3
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/config/TLSessionStateSnapshot.js +2 -1
- package/dist-cjs/lib/config/TLSessionStateSnapshot.js.map +2 -2
- package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +58 -18
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +62 -6
- package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js +4 -3
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +2 -2
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +2 -3
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
- package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
- package/dist-cjs/lib/exports/FontEmbedder.js +9 -8
- package/dist-cjs/lib/exports/FontEmbedder.js.map +2 -2
- package/dist-cjs/lib/exports/StyleEmbedder.js +27 -15
- package/dist-cjs/lib/exports/StyleEmbedder.js.map +3 -3
- package/dist-cjs/lib/exports/domUtils.js +15 -0
- package/dist-cjs/lib/exports/domUtils.js.map +2 -2
- package/dist-cjs/lib/exports/embedMedia.js +15 -12
- package/dist-cjs/lib/exports/embedMedia.js.map +2 -2
- package/dist-cjs/lib/exports/exportToSvg.js +8 -7
- package/dist-cjs/lib/exports/exportToSvg.js.map +2 -2
- package/dist-cjs/lib/exports/getSvgAsImage.js +180 -29
- package/dist-cjs/lib/exports/getSvgAsImage.js.map +3 -3
- package/dist-cjs/lib/exports/getSvgJsx.js +21 -9
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/globals/environment.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +4 -4
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useDocumentEvents.js +13 -11
- package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +3 -3
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useScreenBounds.js +10 -6
- package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
- package/dist-cjs/lib/hooks/useViewportHeight.js +13 -11
- package/dist-cjs/lib/hooks/useViewportHeight.js.map +3 -3
- package/dist-cjs/lib/utils/browserCanvasMaxSize.js.map +2 -2
- package/dist-cjs/lib/utils/dom.js +8 -4
- package/dist-cjs/lib/utils/dom.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 +24 -2
- package/dist-esm/index.mjs +6 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +5 -4
- package/dist-esm/lib/TldrawEditor.mjs.map +3 -3
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +2 -1
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +5 -3
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/config/TLSessionStateSnapshot.mjs +2 -1
- package/dist-esm/lib/config/TLSessionStateSnapshot.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +59 -19
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +64 -6
- package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +4 -3
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +2 -2
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +2 -3
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
- package/dist-esm/lib/exports/FontEmbedder.mjs +9 -8
- package/dist-esm/lib/exports/FontEmbedder.mjs.map +2 -2
- package/dist-esm/lib/exports/StyleEmbedder.mjs +29 -16
- package/dist-esm/lib/exports/StyleEmbedder.mjs.map +3 -3
- package/dist-esm/lib/exports/domUtils.mjs +15 -0
- package/dist-esm/lib/exports/domUtils.mjs.map +2 -2
- package/dist-esm/lib/exports/embedMedia.mjs +16 -13
- package/dist-esm/lib/exports/embedMedia.mjs.map +2 -2
- package/dist-esm/lib/exports/exportToSvg.mjs +8 -7
- package/dist-esm/lib/exports/exportToSvg.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgAsImage.mjs +180 -29
- package/dist-esm/lib/exports/getSvgAsImage.mjs.map +3 -3
- package/dist-esm/lib/exports/getSvgJsx.mjs +21 -9
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/globals/environment.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +10 -5
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useDocumentEvents.mjs +13 -11
- package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +4 -4
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useScreenBounds.mjs +10 -6
- package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
- package/dist-esm/lib/hooks/useViewportHeight.mjs +13 -11
- package/dist-esm/lib/hooks/useViewportHeight.mjs.map +3 -3
- package/dist-esm/lib/utils/browserCanvasMaxSize.mjs.map +2 -2
- package/dist-esm/lib/utils/dom.mjs +8 -4
- package/dist-esm/lib/utils/dom.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/package.json +7 -7
- package/src/index.ts +2 -0
- package/src/lib/TldrawEditor.tsx +6 -4
- package/src/lib/components/default-components/CanvasShapeIndicators.tsx +2 -1
- package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +7 -3
- package/src/lib/config/TLSessionStateSnapshot.ts +3 -1
- package/src/lib/config/TLUserPreferences.ts +2 -0
- package/src/lib/editor/Editor.ts +62 -15
- package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +7 -6
- package/src/lib/editor/managers/FocusManager/FocusManager.ts +10 -7
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +1 -0
- package/src/lib/editor/managers/FontManager/FontManager.ts +4 -3
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +4 -5
- package/src/lib/editor/managers/TextManager/TextManager.ts +2 -2
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +2 -0
- package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +3 -3
- package/src/lib/editor/types/misc-types.ts +8 -2
- package/src/lib/exports/FontEmbedder.ts +10 -9
- package/src/lib/exports/StyleEmbedder.ts +33 -15
- package/src/lib/exports/domUtils.ts +20 -0
- package/src/lib/exports/embedMedia.ts +23 -17
- package/src/lib/exports/exportToSvg.tsx +8 -7
- package/src/lib/exports/getSvgAsImage.ts +292 -31
- package/src/lib/exports/getSvgJsx.test.ts +103 -101
- package/src/lib/exports/getSvgJsx.tsx +33 -10
- package/src/lib/globals/environment.ts +3 -0
- package/src/lib/hooks/useCanvasEvents.ts +10 -7
- package/src/lib/hooks/useDocumentEvents.ts +16 -11
- package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +4 -7
- package/src/lib/hooks/useScreenBounds.ts +10 -6
- package/src/lib/hooks/useViewportHeight.ts +13 -11
- package/src/lib/test/TestEditor.ts +1 -0
- package/src/lib/utils/browserCanvasMaxSize.ts +2 -0
- package/src/lib/utils/dom.ts +17 -8
- package/src/version.ts +3 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { throttle } from '@tldraw/utils'
|
|
2
2
|
import { useLayoutEffect } from 'react'
|
|
3
|
+
import { getOwnerWindow } from '../exports/domUtils'
|
|
3
4
|
import { useEditor } from './useEditor'
|
|
4
5
|
|
|
5
6
|
export function useScreenBounds(ref: React.RefObject<HTMLElement | null>) {
|
|
@@ -21,7 +22,8 @@ export function useScreenBounds(ref: React.RefObject<HTMLElement | null>) {
|
|
|
21
22
|
// Rather than running getClientRects on every frame, we'll
|
|
22
23
|
// run it once a second or when the window resizes.
|
|
23
24
|
const interval = editor.timers.setInterval(updateBounds, 1000)
|
|
24
|
-
|
|
25
|
+
const win = editor.getContainerWindow()
|
|
26
|
+
win.addEventListener('resize', updateBounds)
|
|
25
27
|
|
|
26
28
|
const resizeObserver = new ResizeObserver((entries) => {
|
|
27
29
|
if (!entries[0].contentRect) return
|
|
@@ -42,7 +44,7 @@ export function useScreenBounds(ref: React.RefObject<HTMLElement | null>) {
|
|
|
42
44
|
|
|
43
45
|
return () => {
|
|
44
46
|
clearInterval(interval)
|
|
45
|
-
|
|
47
|
+
win.removeEventListener('resize', updateBounds)
|
|
46
48
|
resizeObserver.disconnect()
|
|
47
49
|
scrollingParent?.removeEventListener('scroll', updateBounds)
|
|
48
50
|
updateBounds.cancel()
|
|
@@ -56,12 +58,14 @@ export function useScreenBounds(ref: React.RefObject<HTMLElement | null>) {
|
|
|
56
58
|
* https://github.com/excalidraw/excalidraw/blob/48c3465b19f10ec755b3eb84e21a01a468e96e43/packages/excalidraw/utils.ts#L600
|
|
57
59
|
*/
|
|
58
60
|
const getNearestScrollableContainer = (element: HTMLElement): HTMLElement | Document => {
|
|
61
|
+
const doc = element.ownerDocument
|
|
62
|
+
const win = getOwnerWindow(element)
|
|
59
63
|
let parent = element.parentElement
|
|
60
64
|
while (parent) {
|
|
61
|
-
if (parent ===
|
|
62
|
-
return
|
|
65
|
+
if (parent === doc.body) {
|
|
66
|
+
return doc
|
|
63
67
|
}
|
|
64
|
-
const { overflowY } =
|
|
68
|
+
const { overflowY } = win.getComputedStyle(parent)
|
|
65
69
|
const hasScrollableContent = parent.scrollHeight > parent.clientHeight
|
|
66
70
|
if (
|
|
67
71
|
hasScrollableContent &&
|
|
@@ -71,5 +75,5 @@ const getNearestScrollableContainer = (element: HTMLElement): HTMLElement | Docu
|
|
|
71
75
|
}
|
|
72
76
|
parent = parent.parentElement
|
|
73
77
|
}
|
|
74
|
-
return
|
|
78
|
+
return doc
|
|
75
79
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useLayoutEffect, useState } from 'react'
|
|
2
|
+
import { useMaybeEditor } from './useEditor'
|
|
2
3
|
|
|
3
4
|
/*!
|
|
4
5
|
* BSD License: https://github.com/outline/rich-markdown-editor/blob/main/LICENSE
|
|
@@ -12,26 +13,27 @@ import { useLayoutEffect, useState } from 'react'
|
|
|
12
13
|
*/
|
|
13
14
|
/** @public */
|
|
14
15
|
export function useViewportHeight(): number {
|
|
15
|
-
const
|
|
16
|
+
const editor = useMaybeEditor()
|
|
17
|
+
const win = editor?.getContainerWindow() ?? window
|
|
18
|
+
const vv = win.visualViewport
|
|
16
19
|
const [height, setHeight] = useState<number>(() =>
|
|
17
|
-
|
|
20
|
+
vv ? vv.height + vv.offsetTop : win.innerHeight
|
|
18
21
|
)
|
|
19
22
|
|
|
20
23
|
useLayoutEffect(() => {
|
|
24
|
+
const win = editor?.getContainerWindow() ?? window
|
|
21
25
|
const handleResize = () => {
|
|
22
|
-
const
|
|
23
|
-
setHeight(() =>
|
|
24
|
-
visualViewport ? visualViewport.height + visualViewport.offsetTop : window.innerHeight
|
|
25
|
-
)
|
|
26
|
+
const vv = win.visualViewport
|
|
27
|
+
setHeight(() => (vv ? vv.height + vv.offsetTop : win.innerHeight))
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
win.visualViewport?.addEventListener('resize', handleResize)
|
|
31
|
+
win.visualViewport?.addEventListener('scroll', handleResize)
|
|
30
32
|
|
|
31
33
|
return () => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
win.visualViewport?.removeEventListener('resize', handleResize)
|
|
35
|
+
win.visualViewport?.removeEventListener('scroll', handleResize)
|
|
34
36
|
}
|
|
35
|
-
}, [])
|
|
37
|
+
}, [editor])
|
|
36
38
|
return height
|
|
37
39
|
}
|
|
@@ -8,6 +8,7 @@ class CustomTool extends StateNode {
|
|
|
8
8
|
|
|
9
9
|
export class TestEditor extends Editor {
|
|
10
10
|
constructor(options: Partial<Omit<TLEditorOptions, 'store'>> = {}) {
|
|
11
|
+
// eslint-disable-next-line no-restricted-globals
|
|
11
12
|
const elm = document.createElement('div')
|
|
12
13
|
elm.tabIndex = 0
|
|
13
14
|
|
|
@@ -94,6 +94,7 @@ const TEST_SIZES = {
|
|
|
94
94
|
* @returns The maximum size of the canvas for the given dimension.
|
|
95
95
|
*/
|
|
96
96
|
function getCanvasSize(dimension: 'width' | 'height' | 'area'): number {
|
|
97
|
+
// eslint-disable-next-line no-restricted-globals
|
|
97
98
|
const cropCvs = document.createElement('canvas')
|
|
98
99
|
cropCvs.width = 1
|
|
99
100
|
cropCvs.height = 1
|
|
@@ -103,6 +104,7 @@ function getCanvasSize(dimension: 'width' | 'height' | 'area'): number {
|
|
|
103
104
|
const w = dimension === 'height' ? 1 : size
|
|
104
105
|
const h = dimension === 'width' ? 1 : size
|
|
105
106
|
|
|
107
|
+
// eslint-disable-next-line no-restricted-globals
|
|
106
108
|
const testCvs = document.createElement('canvas')
|
|
107
109
|
testCvs.width = w
|
|
108
110
|
testCvs.height = h
|
package/src/lib/utils/dom.ts
CHANGED
|
@@ -98,13 +98,22 @@ export const setStyleProperty = (
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
/** @internal */
|
|
101
|
-
export function
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
(
|
|
107
|
-
|
|
108
|
-
|
|
101
|
+
export function elementShouldCaptureKeys(el: Element | null, includeButtonsAndMenus = true) {
|
|
102
|
+
if (!el) return false
|
|
103
|
+
|
|
104
|
+
const tagName = el.tagName.toLowerCase()
|
|
105
|
+
return (
|
|
106
|
+
(el as HTMLElement).isContentEditable ||
|
|
107
|
+
tagName === 'input' ||
|
|
108
|
+
tagName === 'textarea' ||
|
|
109
|
+
(includeButtonsAndMenus && tagName === 'select') ||
|
|
110
|
+
(includeButtonsAndMenus && tagName === 'button') ||
|
|
111
|
+
el.classList.contains('tlui-slider__thumb')
|
|
109
112
|
)
|
|
110
113
|
}
|
|
114
|
+
|
|
115
|
+
/** @internal */
|
|
116
|
+
export function activeElementShouldCaptureKeys(includeButtonsAndMenus = true, doc?: Document) {
|
|
117
|
+
// eslint-disable-next-line no-restricted-globals
|
|
118
|
+
return elementShouldCaptureKeys((doc ?? document).activeElement, includeButtonsAndMenus)
|
|
119
|
+
}
|
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 = '4.5.0-
|
|
4
|
+
export const version = '4.5.0-internal.b3f4cb985cc3'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '2026-03-
|
|
8
|
-
patch: '2026-03-
|
|
7
|
+
minor: '2026-03-11T15:43:43.431Z',
|
|
8
|
+
patch: '2026-03-11T15:43:43.431Z',
|
|
9
9
|
}
|