@yoopta/embed 6.0.0-beta.14 → 6.0.0-beta.15

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoopta/embed",
3
- "version": "6.0.0-beta.14",
3
+ "version": "6.0.0-beta.15",
4
4
  "description": "Embed plugin for Yoopta Editor",
5
5
  "author": "Darginec05 <devopsbanda@gmail.com>",
6
6
  "homepage": "https://github.com/Darginec05/Yoopta-Editor#readme",
@@ -35,5 +35,5 @@
35
35
  "bugs": {
36
36
  "url": "https://github.com/Darginec05/Yoopta-Editor/issues"
37
37
  },
38
- "gitHead": "3a160adbd49ef53630833c71b7fd33103cb51cd7"
38
+ "gitHead": "c21b520a04123c02742c1c2a494d9ba9ef2ff558"
39
39
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/providers.ts","../src/utils/oembed.ts","../src/commands/index.ts","../src/plugin/embed-plugin.tsx","../src/hooks/useEmbedUrl.ts","../src/index.ts"],"sourcesContent":["import type { EmbedAspectRatio, EmbedProvider, EmbedProviderType, ProviderConfig } from '../types';\n\n// ============================================================================\n// Provider Configurations\n// ============================================================================\n\nexport const PROVIDER_CONFIGS: ProviderConfig[] = [\n // YouTube\n {\n type: 'youtube',\n name: 'YouTube',\n patterns: [\n /(?:youtube\\.com\\/(?:watch\\?v=|embed\\/|v\\/)|youtu\\.be\\/)([a-zA-Z0-9_-]{11})/,\n /youtube\\.com\\/shorts\\/([a-zA-Z0-9_-]{11})/,\n ],\n extractId: (url: string) => {\n for (const pattern of PROVIDER_CONFIGS[0].patterns) {\n const match = url.match(pattern);\n if (match?.[1]) return match[1];\n }\n return null;\n },\n buildEmbedUrl: (id: string) => `https://www.youtube.com/embed/${id}`,\n aspectRatio: { width: 16, height: 9 },\n oEmbedUrl: (url: string) => `https://www.youtube.com/oembed?url=${encodeURIComponent(url)}&format=json`,\n },\n\n // Vimeo\n {\n type: 'vimeo',\n name: 'Vimeo',\n patterns: [/vimeo\\.com\\/(\\d+)/, /player\\.vimeo\\.com\\/video\\/(\\d+)/],\n extractId: (url: string) => {\n for (const pattern of PROVIDER_CONFIGS[1].patterns) {\n const match = url.match(pattern);\n if (match?.[1]) return match[1];\n }\n return null;\n },\n buildEmbedUrl: (id: string) => `https://player.vimeo.com/video/${id}`,\n aspectRatio: { width: 16, height: 9 },\n oEmbedUrl: (url: string) => `https://vimeo.com/api/oembed.json?url=${encodeURIComponent(url)}`,\n },\n\n // Dailymotion\n {\n type: 'dailymotion',\n name: 'Dailymotion',\n patterns: [\n /dailymotion\\.com\\/video\\/([a-zA-Z0-9]+)/,\n /dailymotion\\.com\\/embed\\/video\\/([a-zA-Z0-9]+)/,\n /dai\\.ly\\/([a-zA-Z0-9]+)/,\n ],\n extractId: (url: string) => {\n for (const pattern of PROVIDER_CONFIGS[2].patterns) {\n const match = url.match(pattern);\n if (match?.[1]) return match[1];\n }\n return null;\n },\n buildEmbedUrl: (id: string) => `https://www.dailymotion.com/embed/video/${id}`,\n aspectRatio: { width: 16, height: 9 },\n oEmbedUrl: (url: string) => `https://www.dailymotion.com/services/oembed?url=${encodeURIComponent(url)}&format=json`,\n },\n\n // Loom\n {\n type: 'loom',\n name: 'Loom',\n patterns: [/loom\\.com\\/share\\/([a-zA-Z0-9]+)/, /loom\\.com\\/embed\\/([a-zA-Z0-9]+)/],\n extractId: (url: string) => {\n for (const pattern of PROVIDER_CONFIGS[3].patterns) {\n const match = url.match(pattern);\n if (match?.[1]) return match[1];\n }\n return null;\n },\n buildEmbedUrl: (id: string) =>\n `https://www.loom.com/embed/${id}?hide_owner=true&hide_share=true&hide_title=true&hideEmbedTopBar=true`,\n aspectRatio: { width: 16, height: 9 },\n },\n\n // Wistia\n {\n type: 'wistia',\n name: 'Wistia',\n patterns: [\n /wistia\\.(?:com|net)\\/embed\\/iframe\\/([a-zA-Z0-9]+)/,\n /wistia\\.com\\/medias\\/([a-zA-Z0-9]+)/,\n ],\n extractId: (url: string) => {\n for (const pattern of PROVIDER_CONFIGS[4].patterns) {\n const match = url.match(pattern);\n if (match?.[1]) return match[1];\n }\n return null;\n },\n buildEmbedUrl: (id: string) => `https://fast.wistia.net/embed/iframe/${id}?videoFoam=false`,\n aspectRatio: { width: 16, height: 9 },\n },\n\n // Twitter/X\n {\n type: 'twitter',\n name: 'Twitter',\n patterns: [\n /(?:twitter\\.com|x\\.com)\\/\\w+\\/status\\/(\\d+)/,\n ],\n extractId: (url: string) => {\n const match = url.match(/\\/status\\/(\\d+)/);\n return match?.[1] ?? null;\n },\n buildEmbedUrl: (id: string) =>\n `https://platform.twitter.com/embed/Tweet.html?id=${id}&theme=light`,\n aspectRatio: { width: 550, height: 600 }, // Twitter has variable height\n },\n\n // Instagram\n {\n type: 'instagram',\n name: 'Instagram',\n patterns: [\n /instagram\\.com\\/(?:p|reel|tv)\\/([a-zA-Z0-9_-]+)/,\n ],\n extractId: (url: string) => {\n const match = url.match(/instagram\\.com\\/(?:p|reel|tv)\\/([a-zA-Z0-9_-]+)/);\n return match?.[1] ?? null;\n },\n buildEmbedUrl: (id: string) => `https://www.instagram.com/p/${id}/embed`,\n aspectRatio: { width: 1, height: 1 }, // Square for Instagram\n },\n\n // Figma\n {\n type: 'figma',\n name: 'Figma',\n patterns: [\n /figma\\.com\\/(file|proto|design)\\/([a-zA-Z0-9]+)/,\n ],\n extractId: (url: string) => url,\n buildEmbedUrl: (_id: string, url: string) =>\n `https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(url)}`,\n aspectRatio: { width: 16, height: 9 },\n },\n\n // CodePen\n {\n type: 'codepen',\n name: 'CodePen',\n patterns: [\n /codepen\\.io\\/([a-zA-Z0-9_-]+)\\/(?:pen|full|details|debug)\\/([a-zA-Z0-9]+)/,\n ],\n extractId: (url: string) => {\n const match = url.match(/codepen\\.io\\/([a-zA-Z0-9_-]+)\\/(?:pen|full|details|debug)\\/([a-zA-Z0-9]+)/);\n if (match) return `${match[1]}/${match[2]}`;\n return null;\n },\n buildEmbedUrl: (id: string) => {\n const [user, penId] = id.split('/');\n return `https://codepen.io/${user}/embed/${penId}?default-tab=result&theme-id=dark`;\n },\n aspectRatio: { width: 16, height: 9 },\n },\n\n // CodeSandbox\n {\n type: 'codesandbox',\n name: 'CodeSandbox',\n patterns: [\n /codesandbox\\.io\\/(?:s|embed)\\/([a-zA-Z0-9-]+)/,\n ],\n extractId: (url: string) => {\n const match = url.match(/codesandbox\\.io\\/(?:s|embed)\\/([a-zA-Z0-9-]+)/);\n return match?.[1] ?? null;\n },\n buildEmbedUrl: (id: string) =>\n `https://codesandbox.io/embed/${id}?fontsize=14&hidenavigation=1&theme=dark`,\n aspectRatio: { width: 16, height: 9 },\n },\n\n // Spotify\n {\n type: 'spotify',\n name: 'Spotify',\n patterns: [\n /open\\.spotify\\.com\\/(track|album|playlist|episode|show)\\/([a-zA-Z0-9]+)/,\n ],\n extractId: (url: string) => {\n const match = url.match(/open\\.spotify\\.com\\/(track|album|playlist|episode|show)\\/([a-zA-Z0-9]+)/);\n if (match) return `${match[1]}/${match[2]}`;\n return null;\n },\n buildEmbedUrl: (id: string) => `https://open.spotify.com/embed/${id}`,\n aspectRatio: { width: 300, height: 380 }, // Spotify player is more square\n },\n\n // SoundCloud\n {\n type: 'soundcloud',\n name: 'SoundCloud',\n patterns: [\n /soundcloud\\.com\\/([a-zA-Z0-9_-]+)\\/([a-zA-Z0-9_-]+)/,\n ],\n extractId: (url: string) => url,\n buildEmbedUrl: (_id: string, url: string) =>\n `https://w.soundcloud.com/player/?url=${encodeURIComponent(url)}&color=%23ff5500&auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&show_teaser=false`,\n aspectRatio: { width: 100, height: 166 }, // SoundCloud is tall and narrow\n },\n\n // Google Maps\n {\n type: 'google-maps',\n name: 'Google Maps',\n patterns: [\n /google\\.com\\/maps\\/embed/,\n /google\\.com\\/maps\\/place/,\n /google\\.com\\/maps\\/@/,\n /maps\\.google\\.com/,\n ],\n extractId: (url: string) => url,\n buildEmbedUrl: (_id: string, url: string) => {\n // If it's already an embed URL, return as is\n if (url.includes('/maps/embed')) return url;\n // Otherwise, try to convert to embed format\n return `https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d0!2d0!3d0!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s${encodeURIComponent(url)}!5e0!3m2!1sen!2sus!4v0`;\n },\n aspectRatio: { width: 16, height: 9 },\n },\n];\n\n// ============================================================================\n// Provider Detection & Parsing\n// ============================================================================\n\n/**\n * Get provider config by type\n */\nexport function getProviderConfig(type: EmbedProviderType): ProviderConfig | undefined {\n return PROVIDER_CONFIGS.find((config) => config.type === type);\n}\n\n/**\n * Detect provider type from URL\n */\nexport function detectProvider(url: string): EmbedProviderType {\n const normalizedUrl = url.toLowerCase().trim();\n\n for (const config of PROVIDER_CONFIGS) {\n for (const pattern of config.patterns) {\n if (pattern.test(normalizedUrl)) {\n return config.type;\n }\n }\n }\n\n return 'unknown';\n}\n\n/**\n * Check if URL is a valid embed URL\n */\nexport function isEmbedUrl(url: string): boolean {\n return detectProvider(url) !== 'unknown';\n}\n\n/**\n * Parse URL and extract provider info\n */\nexport function parseEmbedUrl(url: string): EmbedProvider | null {\n if (!url) return null;\n\n try {\n const providerType = detectProvider(url);\n\n if (providerType === 'unknown') {\n return {\n type: 'unknown',\n id: url,\n url,\n embedUrl: url,\n };\n }\n\n const config = getProviderConfig(providerType);\n if (!config) return null;\n\n const id = config.extractId(url);\n if (!id) return null;\n\n const embedUrl = config.buildEmbedUrl(id, url);\n\n return {\n type: providerType,\n id,\n url,\n embedUrl,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Get aspect ratio for provider\n */\nexport function getProviderAspectRatio(type: EmbedProviderType): EmbedAspectRatio {\n const config = getProviderConfig(type);\n return config?.aspectRatio ?? { width: 16, height: 9 };\n}\n\n/**\n * Calculate dimensions based on aspect ratio and max width\n */\nexport function calculateEmbedDimensions(\n type: EmbedProviderType,\n maxWidth: number = 650,\n): { width: number; height: number } {\n const aspectRatio = getProviderAspectRatio(type);\n const width = maxWidth;\n const height = Math.round((maxWidth * aspectRatio.height) / aspectRatio.width);\n\n return { width, height };\n}\n\n/**\n * Get oEmbed URL for provider\n */\nexport function getOEmbedUrl(url: string): string | null {\n const providerType = detectProvider(url);\n const config = getProviderConfig(providerType);\n\n if (!config?.oEmbedUrl) return null;\n\n return config.oEmbedUrl(url);\n}\n\n/**\n * Get list of supported providers for display\n */\nexport function getSupportedProviders(): { type: EmbedProviderType; name: string }[] {\n return PROVIDER_CONFIGS.map((config) => ({\n type: config.type,\n name: config.name,\n }));\n}\n\n// ============================================================================\n// Legacy exports (for backward compatibility)\n// ============================================================================\n\nexport const getProvider = detectProvider;\n\nexport const ProviderGetters: Record<EmbedProviderType, (url: string) => string | null> =\n PROVIDER_CONFIGS.reduce<Record<EmbedProviderType, (url: string) => string | null>>(\n (result, config) => ({\n ...result,\n [config.type]: config.extractId,\n }),\n {} as Record<EmbedProviderType, (url: string) => string | null>,\n );\n","import type { EmbedProviderMeta, OEmbedResponse } from '../types';\nimport { getOEmbedUrl } from './providers';\n\n/**\n * Fetch oEmbed data for a URL\n * Note: This requires CORS support or a proxy for most providers\n */\nexport async function fetchOEmbed(url: string): Promise<OEmbedResponse | null> {\n const oEmbedUrl = getOEmbedUrl(url);\n\n if (!oEmbedUrl) {\n return null;\n }\n\n try {\n const response = await fetch(oEmbedUrl);\n\n if (!response.ok) {\n return null;\n }\n\n const data: OEmbedResponse = await response.json();\n return data;\n } catch {\n // oEmbed often fails due to CORS, this is expected\n return null;\n }\n}\n\n/**\n * Extract provider metadata from oEmbed response\n */\nexport function extractProviderMeta(oembedData: OEmbedResponse | null): EmbedProviderMeta | undefined {\n if (!oembedData) return undefined;\n\n return {\n title: oembedData.title,\n description: undefined, // oEmbed doesn't usually include description\n thumbnailUrl: oembedData.thumbnail_url,\n authorName: oembedData.author_name,\n authorUrl: oembedData.author_url,\n };\n}\n\n/**\n * Fetch oEmbed data via a proxy (for production use)\n * You can implement your own proxy endpoint\n */\nexport async function fetchOEmbedViaProxy(\n url: string,\n proxyUrl: string,\n): Promise<OEmbedResponse | null> {\n try {\n const response = await fetch(`${proxyUrl}?url=${encodeURIComponent(url)}`);\n\n if (!response.ok) {\n return null;\n }\n\n return await response.json();\n } catch {\n return null;\n }\n}\n\n","import type { YooEditor, YooptaPathIndex } from '@yoopta/editor';\nimport { Blocks, Elements, buildBlockData, generateId } from '@yoopta/editor';\n\nimport type {\n EmbedElement,\n EmbedElementProps,\n EmbedProvider,\n EmbedProviderMeta,\n EmbedSizes,\n} from '../types';\nimport {\n calculateEmbedDimensions,\n isEmbedUrl,\n parseEmbedUrl,\n} from '../utils/providers';\nimport { extractProviderMeta, fetchOEmbed } from '../utils/oembed';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype EmbedElementOptions = {\n props?: Partial<EmbedElementProps>;\n};\n\ntype InsertEmbedOptions = EmbedElementOptions & {\n at?: YooptaPathIndex;\n focus?: boolean;\n};\n\ntype InsertEmbedFromUrlOptions = {\n url: string;\n at?: YooptaPathIndex;\n focus?: boolean;\n fetchMeta?: boolean;\n maxWidth?: number;\n};\n\ntype UpdateEmbedUrlOptions = {\n blockId: string;\n url: string;\n fetchMeta?: boolean;\n maxWidth?: number;\n};\n\n// ============================================================================\n// Commands Type\n// ============================================================================\n\nexport type EmbedCommandsType = {\n buildEmbedElements: (editor: YooEditor, options?: Partial<EmbedElementOptions>) => EmbedElement;\n insertEmbed: (editor: YooEditor, options?: Partial<InsertEmbedOptions>) => void;\n insertEmbedFromUrl: (editor: YooEditor, options: InsertEmbedFromUrlOptions) => Promise<string | null>;\n deleteEmbed: (editor: YooEditor, blockId: string) => void;\n updateEmbed: (editor: YooEditor, blockId: string, props: Partial<EmbedElementProps>) => void;\n updateEmbedUrl: (editor: YooEditor, options: UpdateEmbedUrlOptions) => Promise<void>;\n updateEmbedSizes: (editor: YooEditor, blockId: string, sizes: EmbedSizes) => void;\n isValidEmbedUrl: (editor: YooEditor, url: string) => boolean;\n parseUrl: (editor: YooEditor, url: string) => EmbedProvider | null;\n};\n\n// ============================================================================\n// Commands Implementation\n// ============================================================================\n\nexport const EmbedCommands: EmbedCommandsType = {\n /**\n * Build embed element with default or custom props\n */\n buildEmbedElements: (editor: YooEditor, options = {}): EmbedElement => {\n const defaultSizes = { width: 650, height: 400 };\n\n const embedProps: EmbedElementProps = {\n provider: options.props?.provider ?? null,\n sizes: options.props?.sizes ?? defaultSizes,\n nodeType: 'void',\n };\n\n return {\n id: generateId(),\n type: 'embed',\n children: [{ text: '' }],\n props: embedProps,\n };\n },\n\n /**\n * Insert embed block with optional props\n */\n insertEmbed: (editor: YooEditor, options = {}): void => {\n const { at, focus, props } = options;\n const embed = EmbedCommands.buildEmbedElements(editor, { props });\n\n const block = buildBlockData({\n value: [embed],\n type: 'Embed',\n meta: { align: 'center', depth: 0 },\n });\n\n Blocks.insertBlock(editor, block.type, { focus, at, blockData: block });\n },\n\n /**\n * Insert embed from URL with automatic provider detection\n */\n insertEmbedFromUrl: async (\n editor: YooEditor,\n options: InsertEmbedFromUrlOptions,\n ): Promise<string | null> => {\n const { url, at, focus, fetchMeta = false, maxWidth = 650 } = options;\n\n // Parse the URL\n const provider = parseEmbedUrl(url);\n if (!provider) {\n console.warn('[Embed] Could not parse URL:', url);\n return null;\n }\n\n // Calculate dimensions based on provider aspect ratio\n const sizes = calculateEmbedDimensions(provider.type, maxWidth);\n\n // Optionally fetch oEmbed metadata\n let meta: EmbedProviderMeta | undefined;\n if (fetchMeta) {\n try {\n const oembedData = await fetchOEmbed(url);\n meta = extractProviderMeta(oembedData);\n } catch {\n // Silently fail - metadata is optional\n }\n }\n\n const providerWithMeta: EmbedProvider = {\n ...provider,\n meta,\n };\n\n // Build and insert the embed\n const embed = EmbedCommands.buildEmbedElements(editor, {\n props: {\n provider: providerWithMeta,\n sizes,\n },\n });\n\n const block = buildBlockData({\n value: [embed],\n type: 'Embed',\n meta: { align: 'center', depth: 0 },\n });\n\n Blocks.insertBlock(editor, block.type, { focus, at, blockData: block });\n\n return block.id;\n },\n\n /**\n * Delete embed block\n */\n deleteEmbed: (editor: YooEditor, blockId: string): void => {\n Blocks.deleteBlock(editor, { blockId });\n },\n\n /**\n * Update embed element props\n */\n updateEmbed: (editor: YooEditor, blockId: string, props: Partial<EmbedElementProps>): void => {\n Elements.updateElement(editor, { blockId, type: 'embed', props });\n },\n\n /**\n * Update embed URL (re-parses and updates provider)\n */\n updateEmbedUrl: async (editor: YooEditor, options: UpdateEmbedUrlOptions): Promise<void> => {\n const { blockId, url, fetchMeta = false, maxWidth = 650 } = options;\n\n const provider = parseEmbedUrl(url);\n if (!provider) {\n console.warn('[Embed] Could not parse URL:', url);\n return;\n }\n\n const sizes = calculateEmbedDimensions(provider.type, maxWidth);\n\n let meta: EmbedProviderMeta | undefined;\n if (fetchMeta) {\n try {\n const oembedData = await fetchOEmbed(url);\n meta = extractProviderMeta(oembedData);\n } catch {\n // Silently fail\n }\n }\n\n const providerWithMeta: EmbedProvider = {\n ...provider,\n meta,\n };\n\n EmbedCommands.updateEmbed(editor, blockId, {\n provider: providerWithMeta,\n sizes,\n });\n },\n\n /**\n * Update embed sizes only\n */\n updateEmbedSizes: (editor: YooEditor, blockId: string, sizes: EmbedSizes): void => {\n EmbedCommands.updateEmbed(editor, blockId, { sizes });\n },\n\n /**\n * Check if URL is a valid embed URL\n */\n isValidEmbedUrl: (_editor: YooEditor, url: string): boolean => {\n return isEmbedUrl(url);\n },\n\n /**\n * Parse URL and return provider info (utility)\n */\n parseUrl: (_editor: YooEditor, url: string): EmbedProvider | null => {\n return parseEmbedUrl(url);\n },\n};\n","import { YooptaPlugin, generateId } from '@yoopta/editor';\n\nimport { EmbedCommands } from '../commands';\nimport type { EmbedElementMap, EmbedElementProps, EmbedPluginOptions } from '../types';\nimport { parseEmbedUrl } from '../utils/providers';\n\nconst ALIGNS_TO_JUSTIFY: Record<string, string> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\nconst DEFAULT_EMBED_PROPS: EmbedElementProps = {\n provider: null,\n sizes: { width: 650, height: 400 },\n nodeType: 'void',\n};\n\nconst Embed = new YooptaPlugin<EmbedElementMap, EmbedPluginOptions>({\n type: 'Embed',\n elements: (\n <embed\n render={(props) => <div contentEditable={false} {...props.attributes}>\n <iframe\n title={props.element.props.provider?.type}\n src={props.element.props.provider?.embedUrl}\n width={props.element.props.sizes.width}\n height={props.element.props.sizes.height}\n allowFullScreen\n frameBorder={0}\n />\n {props.children}\n </div>}\n props={DEFAULT_EMBED_PROPS}\n nodeType=\"void\"\n />\n ),\n options: {\n display: {\n title: 'Embed',\n description: 'Embed videos, maps, code, and more',\n },\n shortcuts: ['embed', 'youtube', 'vimeo', 'twitter', 'instagram', 'figma', 'codepen', 'spotify'],\n maxWidth: 650,\n },\n commands: EmbedCommands,\n parsers: {\n html: {\n deserialize: {\n nodeNames: ['IFRAME', 'DIV'],\n parse: (el) => {\n // Handle IFRAME elements\n if (el.nodeName === 'IFRAME') {\n const src = el.getAttribute('src');\n if (!src) return;\n\n const provider = parseEmbedUrl(src);\n if (!provider) return;\n\n const width = parseInt(el.getAttribute('width') ?? '650', 10);\n const height = parseInt(el.getAttribute('height') ?? '400', 10);\n\n return {\n id: generateId(),\n type: 'embed',\n children: [{ text: '' }],\n props: {\n provider,\n sizes: { width, height },\n nodeType: 'void',\n } as EmbedElementProps,\n };\n }\n\n // Handle DIV with data-yoopta-embed attribute\n if (el.nodeName === 'DIV' && el.hasAttribute('data-yoopta-embed')) {\n const iframe = el.querySelector('iframe');\n if (!iframe) return;\n\n const src = iframe.getAttribute('src');\n if (!src) return;\n\n const provider = parseEmbedUrl(src);\n if (!provider) return;\n\n const width = parseInt(iframe.getAttribute('width') ?? '650', 10);\n const height = parseInt(iframe.getAttribute('height') ?? '400', 10);\n\n return {\n id: generateId(),\n type: 'embed',\n children: [{ text: '' }],\n props: {\n provider,\n sizes: { width, height },\n nodeType: 'void',\n } as EmbedElementProps,\n };\n }\n },\n },\n serialize: (element, _text, blockMeta) => {\n const { align = 'center', depth = 0 } = blockMeta ?? {};\n const justify = ALIGNS_TO_JUSTIFY[align] ?? 'center';\n const { provider, sizes } = element.props as EmbedElementProps;\n\n if (!provider) {\n return `<div data-meta-align=\"${align}\" data-meta-depth=\"${depth}\" style=\"margin-left: ${depth * 20}px;\"><!-- Empty embed --></div>`;\n }\n\n return `<div data-yoopta-embed data-provider=\"${provider.type}\" data-meta-align=\"${align}\" data-meta-depth=\"${depth}\" style=\"margin-left: ${depth * 20}px; display: flex; width: 100%; justify-content: ${justify};\">\n <iframe src=\"${provider.embedUrl}\" width=\"${sizes.width}\" height=\"${sizes.height}\" frameborder=\"0\" allowfullscreen></iframe>\n </div>`;\n },\n },\n markdown: {\n serialize: (element) => {\n const { provider } = element.props as EmbedElementProps;\n if (!provider) return '';\n\n // Markdown doesn't support embeds natively, output as link\n return `[${provider.meta?.title ?? provider.type}](${provider.url})\\n`;\n },\n },\n email: {\n serialize: (element, _text, blockMeta) => {\n const { align = 'center', depth = 0 } = blockMeta ?? {};\n const justify = ALIGNS_TO_JUSTIFY[align] ?? 'center';\n const { provider, sizes } = element.props as EmbedElementProps;\n\n if (!provider) return '';\n\n // Email clients don't support iframes, show link with thumbnail if available\n const thumbnailHtml = provider.meta?.thumbnailUrl\n ? `<img src=\"${provider.meta.thumbnailUrl}\" width=\"${sizes.width}\" height=\"${sizes.height}\" alt=\"${provider.meta?.title ?? 'Embedded content'}\" style=\"border-radius: 8px; max-width: 100%;\" />`\n : `<div style=\"width: ${sizes.width}px; height: ${sizes.height}px; background: #f0f0f0; border-radius: 8px; display: flex; align-items: center; justify-content: center;\">\n <span style=\"color: #666;\">Click to view ${provider.type} content</span>\n </div>`;\n\n return `\n <table style=\"width: 100%;\">\n <tbody>\n <tr>\n <td style=\"margin-left: ${depth * 20}px; display: flex; justify-content: ${justify}; padding: 1rem 0;\">\n <a href=\"${provider.url}\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"text-decoration: none;\">\n ${thumbnailHtml}\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n `;\n },\n },\n },\n});\n\nexport { Embed };\n","import { useCallback, useState } from 'react';\n\nimport type { EmbedProvider, EmbedProviderMeta, EmbedSizes } from '../types';\nimport { extractProviderMeta, fetchOEmbed } from '../utils/oembed';\nimport { calculateEmbedDimensions, isEmbedUrl, parseEmbedUrl } from '../utils/providers';\n\nexport type UseEmbedUrlState = {\n url: string;\n provider: EmbedProvider | null;\n sizes: EmbedSizes;\n isValid: boolean;\n isLoading: boolean;\n error: string | null;\n};\n\nexport type UseEmbedUrlActions = {\n setUrl: (url: string) => void;\n parseUrl: (url: string) => EmbedProvider | null;\n fetchMeta: () => Promise<EmbedProviderMeta | undefined>;\n reset: () => void;\n};\n\nexport type UseEmbedUrlReturn = UseEmbedUrlState & UseEmbedUrlActions;\n\nconst DEFAULT_STATE: UseEmbedUrlState = {\n url: '',\n provider: null,\n sizes: { width: 650, height: 400 },\n isValid: false,\n isLoading: false,\n error: null,\n};\n\nexport function useEmbedUrl(maxWidth: number = 650): UseEmbedUrlReturn {\n const [state, setState] = useState<UseEmbedUrlState>(DEFAULT_STATE);\n\n const setUrl = useCallback(\n (url: string) => {\n const trimmedUrl = url.trim();\n\n if (!trimmedUrl) {\n setState(DEFAULT_STATE);\n return;\n }\n\n const isValid = isEmbedUrl(trimmedUrl);\n const provider = parseEmbedUrl(trimmedUrl);\n\n let sizes = { width: maxWidth, height: 400 };\n if (provider) {\n sizes = calculateEmbedDimensions(provider.type, maxWidth);\n }\n\n setState({\n url: trimmedUrl,\n provider,\n sizes,\n isValid,\n isLoading: false,\n error: isValid ? null : 'Unsupported URL format',\n });\n },\n [maxWidth],\n );\n\n const parseUrl = useCallback((url: string): EmbedProvider | null => {\n return parseEmbedUrl(url);\n }, []);\n\n const fetchMeta = useCallback(async (): Promise<EmbedProviderMeta | undefined> => {\n if (!state.url || !state.isValid) {\n return undefined;\n }\n\n setState((prev) => ({ ...prev, isLoading: true, error: null }));\n\n try {\n const oembedData = await fetchOEmbed(state.url);\n const meta = extractProviderMeta(oembedData);\n\n if (meta && state.provider) {\n setState((prev) => ({\n ...prev,\n provider: prev.provider ? { ...prev.provider, meta } : null,\n isLoading: false,\n }));\n } else {\n setState((prev) => ({ ...prev, isLoading: false }));\n }\n\n return meta;\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isLoading: false,\n error: 'Failed to fetch metadata',\n }));\n return undefined;\n }\n }, [state.url, state.isValid, state.provider]);\n\n const reset = useCallback(() => {\n setState(DEFAULT_STATE);\n }, []);\n\n return {\n ...state,\n setUrl,\n parseUrl,\n fetchMeta,\n reset,\n };\n}\n\n","// Plugin\nimport { Embed } from './plugin/embed-plugin';\n\n// Commands\nexport { EmbedCommands } from './commands';\nexport type { EmbedCommandsType } from './commands';\n\n// Types\nexport type {\n EmbedAspectRatio,\n EmbedElement,\n EmbedElementMap,\n EmbedElementProps,\n EmbedPluginElements,\n EmbedPluginOptions,\n EmbedProvider,\n EmbedProviderMeta,\n EmbedProviderRenderProps,\n EmbedProviderType,\n EmbedSizes,\n OEmbedResponse,\n ProviderConfig,\n} from './types';\n\n// Hooks\nexport { useEmbedUrl } from './hooks/useEmbedUrl';\nexport type { UseEmbedUrlReturn, UseEmbedUrlState, UseEmbedUrlActions } from './hooks/useEmbedUrl';\n\n// Utils\nexport {\n calculateEmbedDimensions,\n detectProvider,\n getOEmbedUrl,\n getProviderAspectRatio,\n getProviderConfig,\n getSupportedProviders,\n isEmbedUrl,\n parseEmbedUrl,\n PROVIDER_CONFIGS,\n} from './utils/providers';\n\nexport {\n extractProviderMeta,\n fetchOEmbed,\n fetchOEmbedViaProxy,\n} from './utils/oembed';\n\n// Default export\nexport default Embed;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}