fix: stabilize tldraw whiteboard assets

This commit is contained in:
lucaronin
2026-05-04 18:34:07 +02:00
parent 38ea51627d
commit e46613b82b
6 changed files with 42 additions and 3 deletions

View File

@@ -416,6 +416,7 @@
.editor__blocknote-container .tldraw-whiteboard .tl-container {
--color-background: var(--card);
--tl-layer-menu-click-capture: 25;
--tl-layer-panels: 30;
--tl-layer-menus: 40;
--tl-layer-toasts: 50;

View File

@@ -17,6 +17,23 @@ const tldrawMock = vi.hoisted(() => ({
Tldraw: vi.fn(),
}))
const assetImportMock = vi.hoisted(() => ({
getAssetUrlsByImport: vi.fn((formatAssetUrl: (assetUrl?: string) => string) => ({
embedIcons: {},
fonts: {
tldraw_draw: formatAssetUrl('/assets/Shantell_Sans-Informal_Regular.woff2'),
},
icons: {
'tool-pencil': `${formatAssetUrl('/assets/0_merged.svg')}#tool-pencil`,
},
translations: {
en: formatAssetUrl(undefined),
},
})),
}))
vi.mock('@tldraw/assets/imports.vite', () => assetImportMock)
vi.mock('tldraw', async () => {
const { createElement } = await import('react')
@@ -65,7 +82,7 @@ function expectNoCdnUrls(urls: Record<string, string>) {
function expectBundledTldrawAssetUrls(assetUrls: MockAssetUrls) {
expect(assetUrls.fonts.tldraw_draw).toContain('Shantell_Sans-Informal_Regular.woff2')
expect(assetUrls.icons['tool-pencil']).toContain('0_merged.svg#tool-pencil')
expect(assetUrls.translations.en).toContain('en.json')
expect(assetUrls.translations.en).toBe('data:application/json;base64,e30K')
expectNoCdnUrls(assetUrls.fonts)
expectNoCdnUrls(assetUrls.icons)
expectNoCdnUrls(assetUrls.translations)
@@ -85,6 +102,7 @@ describe('TldrawWhiteboard', () => {
)
expect(screen.getByTestId('mock-tldraw')).toHaveAttribute('data-draw-font-url')
expect(assetImportMock.getAssetUrlsByImport).toHaveBeenCalledWith(expect.any(Function))
expectBundledTldrawAssetUrls(renderedTldrawAssetUrls())
})
})

View File

@@ -12,7 +12,13 @@ import {
} from 'tldraw'
import 'tldraw/tldraw.css'
const tldrawAssetUrls = getAssetUrlsByImport()
const EMPTY_TLDRAW_TRANSLATION_URL = 'data:application/json;base64,e30K'
function resolveTldrawAssetUrl(assetUrl: string | undefined): string {
return assetUrl ?? EMPTY_TLDRAW_TRANSLATION_URL
}
const tldrawAssetUrls = getAssetUrlsByImport(resolveTldrawAssetUrl)
interface TldrawWhiteboardProps {
boardId: string