feat(editor): add embed iframe provider excalidraw (#10997)

This commit is contained in:
donteatfriedrice
2025-03-20 03:14:42 +00:00
parent 54ee2ee5ec
commit 46ed76ecb0
3 changed files with 44 additions and 1 deletions

View File

@@ -0,0 +1,41 @@
import { EmbedIframeConfigExtension } from '../../extension/embed-iframe-config';
import {
type EmbedIframeUrlValidationOptions,
validateEmbedIframeUrl,
} from '../../utils';
const EXCALIDRAW_DEFAULT_WIDTH_IN_SURFACE = 640;
const EXCALIDRAW_DEFAULT_HEIGHT_IN_SURFACE = 480;
const EXCALIDRAW_DEFAULT_HEIGHT_IN_NOTE = 480;
const EXCALIDRAW_DEFAULT_WIDTH_PERCENT = 100;
const excalidrawUrlValidationOptions: EmbedIframeUrlValidationOptions = {
protocols: ['https:'],
hostnames: ['excalidraw.com'],
};
const excalidrawConfig = {
name: 'excalidraw',
match: (url: string) =>
validateEmbedIframeUrl(url, excalidrawUrlValidationOptions),
buildOEmbedUrl: (url: string) => {
const match = validateEmbedIframeUrl(url, excalidrawUrlValidationOptions);
if (!match) {
return undefined;
}
return url;
},
useOEmbedUrlDirectly: true,
options: {
widthInSurface: EXCALIDRAW_DEFAULT_WIDTH_IN_SURFACE,
heightInSurface: EXCALIDRAW_DEFAULT_HEIGHT_IN_SURFACE,
heightInNote: EXCALIDRAW_DEFAULT_HEIGHT_IN_NOTE,
widthPercent: EXCALIDRAW_DEFAULT_WIDTH_PERCENT,
allow: 'clipboard-read; clipboard-write',
style: 'border: 0; border-radius: 8px;',
allowFullscreen: true,
},
};
export const ExcalidrawEmbedConfig =
EmbedIframeConfigExtension(excalidrawConfig);

View File

@@ -1,3 +1,4 @@
import { ExcalidrawEmbedConfig } from './excalidraw';
import { GoogleDriveEmbedConfig } from './google-drive';
import { MiroEmbedConfig } from './miro';
import { SpotifyEmbedConfig } from './spotify';
@@ -6,4 +7,5 @@ export const EmbedIframeConfigExtensions = [
SpotifyEmbedConfig,
GoogleDriveEmbedConfig,
MiroEmbedConfig,
ExcalidrawEmbedConfig,
];

View File

@@ -35,7 +35,7 @@ const miroConfig = {
heightInSurface: MIRO_DEFAULT_HEIGHT_IN_SURFACE,
heightInNote: MIRO_DEFAULT_HEIGHT_IN_NOTE,
widthPercent: MIRO_DEFAULT_WIDTH_PERCENT,
allow: 'fullscreen; clipboard-read; clipboard-write',
allow: 'clipboard-read; clipboard-write',
style: 'border: 0; border-radius: 8px;',
allowFullscreen: true,
},