@yoopta/embed 6.0.0-beta.7 → 6.0.0-beta.8
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/commands/index.d.ts +22 -9
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/hooks/useEmbedUrl.d.ts +18 -0
- package/dist/hooks/useEmbedUrl.d.ts.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/plugin/{index.d.ts → embed-plugin.d.ts} +1 -1
- package/dist/plugin/embed-plugin.d.ts.map +1 -0
- package/dist/types.d.ts +52 -14
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/oembed.d.ts +16 -0
- package/dist/utils/oembed.d.ts.map +1 -0
- package/dist/utils/providers.d.ts +41 -19
- package/dist/utils/providers.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/plugin/index.d.ts.map +0 -1
- package/dist/providers/DailyMotion.d.ts +0 -4
- package/dist/providers/DailyMotion.d.ts.map +0 -1
- package/dist/providers/Figma.d.ts +0 -4
- package/dist/providers/Figma.d.ts.map +0 -1
- package/dist/providers/Instagram.d.ts +0 -15
- package/dist/providers/Instagram.d.ts.map +0 -1
- package/dist/providers/Loom.d.ts +0 -3
- package/dist/providers/Loom.d.ts.map +0 -1
- package/dist/providers/Twitter.d.ts +0 -4
- package/dist/providers/Twitter.d.ts.map +0 -1
- package/dist/providers/Vimeo.d.ts +0 -4
- package/dist/providers/Vimeo.d.ts.map +0 -1
- package/dist/providers/Wistia.d.ts +0 -4
- package/dist/providers/Wistia.d.ts.map +0 -1
- package/dist/providers/Youtube.d.ts +0 -4
- package/dist/providers/Youtube.d.ts.map +0 -1
package/dist/commands/index.d.ts
CHANGED
|
@@ -1,23 +1,36 @@
|
|
|
1
1
|
import type { YooEditor, YooptaPathIndex } from '@yoopta/editor';
|
|
2
|
-
import type { EmbedElement, EmbedElementProps, EmbedSizes } from '../types';
|
|
2
|
+
import type { EmbedElement, EmbedElementProps, EmbedProvider, EmbedSizes } from '../types';
|
|
3
3
|
type EmbedElementOptions = {
|
|
4
|
-
props?:
|
|
5
|
-
sizes?: EmbedSizes;
|
|
6
|
-
provider?: {
|
|
7
|
-
url: string;
|
|
8
|
-
};
|
|
9
|
-
};
|
|
4
|
+
props?: Partial<EmbedElementProps>;
|
|
10
5
|
};
|
|
11
6
|
type InsertEmbedOptions = EmbedElementOptions & {
|
|
12
7
|
at?: YooptaPathIndex;
|
|
13
8
|
focus?: boolean;
|
|
14
9
|
};
|
|
15
|
-
|
|
10
|
+
type InsertEmbedFromUrlOptions = {
|
|
11
|
+
url: string;
|
|
12
|
+
at?: YooptaPathIndex;
|
|
13
|
+
focus?: boolean;
|
|
14
|
+
fetchMeta?: boolean;
|
|
15
|
+
maxWidth?: number;
|
|
16
|
+
};
|
|
17
|
+
type UpdateEmbedUrlOptions = {
|
|
18
|
+
blockId: string;
|
|
19
|
+
url: string;
|
|
20
|
+
fetchMeta?: boolean;
|
|
21
|
+
maxWidth?: number;
|
|
22
|
+
};
|
|
23
|
+
export type EmbedCommandsType = {
|
|
16
24
|
buildEmbedElements: (editor: YooEditor, options?: Partial<EmbedElementOptions>) => EmbedElement;
|
|
17
25
|
insertEmbed: (editor: YooEditor, options?: Partial<InsertEmbedOptions>) => void;
|
|
26
|
+
insertEmbedFromUrl: (editor: YooEditor, options: InsertEmbedFromUrlOptions) => Promise<string | null>;
|
|
18
27
|
deleteEmbed: (editor: YooEditor, blockId: string) => void;
|
|
19
28
|
updateEmbed: (editor: YooEditor, blockId: string, props: Partial<EmbedElementProps>) => void;
|
|
29
|
+
updateEmbedUrl: (editor: YooEditor, options: UpdateEmbedUrlOptions) => Promise<void>;
|
|
30
|
+
updateEmbedSizes: (editor: YooEditor, blockId: string, sizes: EmbedSizes) => void;
|
|
31
|
+
isValidEmbedUrl: (editor: YooEditor, url: string) => boolean;
|
|
32
|
+
parseUrl: (editor: YooEditor, url: string) => EmbedProvider | null;
|
|
20
33
|
};
|
|
21
|
-
export declare const EmbedCommands:
|
|
34
|
+
export declare const EmbedCommands: EmbedCommandsType;
|
|
22
35
|
export {};
|
|
23
36
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGjE,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EAEb,UAAU,EACX,MAAM,UAAU,CAAC;AAYlB,KAAK,mBAAmB,GAAG;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpC,CAAC;AAEF,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAC9C,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAMF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kBAAkB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,KAAK,YAAY,CAAC;IAChG,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;IAChF,kBAAkB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtG,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC7F,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,gBAAgB,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAClF,eAAe,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7D,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,IAAI,CAAC;CACpE,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,iBAgK3B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { EmbedProvider, EmbedProviderMeta, EmbedSizes } from '../types';
|
|
2
|
+
export type UseEmbedUrlState = {
|
|
3
|
+
url: string;
|
|
4
|
+
provider: EmbedProvider | null;
|
|
5
|
+
sizes: EmbedSizes;
|
|
6
|
+
isValid: boolean;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
error: string | null;
|
|
9
|
+
};
|
|
10
|
+
export type UseEmbedUrlActions = {
|
|
11
|
+
setUrl: (url: string) => void;
|
|
12
|
+
parseUrl: (url: string) => EmbedProvider | null;
|
|
13
|
+
fetchMeta: () => Promise<EmbedProviderMeta | undefined>;
|
|
14
|
+
reset: () => void;
|
|
15
|
+
};
|
|
16
|
+
export type UseEmbedUrlReturn = UseEmbedUrlState & UseEmbedUrlActions;
|
|
17
|
+
export declare function useEmbedUrl(maxWidth?: number): UseEmbedUrlReturn;
|
|
18
|
+
//# sourceMappingURL=useEmbedUrl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEmbedUrl.d.ts","sourceRoot":"","sources":["../../src/hooks/useEmbedUrl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI7E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,GAAG,IAAI,CAAC;IAChD,SAAS,EAAE,MAAM,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAAC;IACxD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAWtE,wBAAgB,WAAW,CAAC,QAAQ,GAAE,MAAY,GAAG,iBAAiB,CA+ErE"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { Embed } from './plugin';
|
|
2
|
-
import { EmbedElement, EmbedElementProps } from './types';
|
|
1
|
+
import { Embed } from './plugin/embed-plugin';
|
|
3
2
|
export { EmbedCommands } from './commands';
|
|
3
|
+
export type { EmbedCommandsType } from './commands';
|
|
4
|
+
export type { EmbedAspectRatio, EmbedElement, EmbedElementMap, EmbedElementProps, EmbedPluginElements, EmbedPluginOptions, EmbedProvider, EmbedProviderMeta, EmbedProviderRenderProps, EmbedProviderType, EmbedSizes, OEmbedResponse, ProviderConfig, } from './types';
|
|
5
|
+
export { useEmbedUrl } from './hooks/useEmbedUrl';
|
|
6
|
+
export type { UseEmbedUrlReturn, UseEmbedUrlState, UseEmbedUrlActions } from './hooks/useEmbedUrl';
|
|
7
|
+
export { calculateEmbedDimensions, detectProvider, getOEmbedUrl, getProviderAspectRatio, getProviderConfig, getSupportedProviders, isEmbedUrl, parseEmbedUrl, PROVIDER_CONFIGS, } from './utils/providers';
|
|
8
|
+
export { extractProviderMeta, fetchOEmbed, fetchOEmbedViaProxy, } from './utils/oembed';
|
|
4
9
|
export default Embed;
|
|
5
|
-
export { EmbedElement, EmbedElementProps };
|
|
6
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAG9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGpD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,GACf,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGnG,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,aAAa,EACb,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,eAAe,KAAK,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{generateId as i,buildBlockData as r,Blocks as o,Elements as s,YooptaPlugin as n}from"@yoopta/editor";const d={youtube:e=>{const t=e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/);return t&&11===t[2].length?t[2]:null},vimeo:e=>new URL(e).pathname.split("/")[1],dailymotion:e=>{const t=e.match(/^.+dailymotion.com\/(embed|hub)\/([^_]+)[^#]*(#embed=([^_&]+))?/);return null!==t?void 0!==t[4]?t[4]:t[2]:null},wistia:e=>{try{const t=e.match(/(?:https?:\/\/)?(?:fast\.)?wistia\.(?:com|net)\/embed\/iframe\/([a-zA-Z0-9]+)/);if(t)return t[1];const i=e.match(/(?:https?:\/\/)?(?:www\.)?wistia\.com\/medias\/([a-zA-Z0-9]+)/);return i?i[1]:null}catch(e){return console.error("Error extracting Wistia ID:",e),null}},loom:e=>{try{const t=e.match(/(?:https?:\/\/)?(?:www\.)?loom\.com\/share\/([a-zA-Z0-9]+)/);return t?t[1]:null}catch(e){return console.error("Error extracting Loom ID:",e),null}},twitter:function(e){const t=e.match(/\/status\/(\d+)/);return t?t[1]:null},figma:function(e){const t=new URL(e).searchParams,i=t.get("node-id");return t.get("node-id")?i:"unknown"},instagram:function(e){const t=e.match(/(?:https?:\/\/)?(?:www\.)?instagram\.com(?:\/p\/|\/reel\/|\/tv\/)([^\/?#&]+).*$/);return t?t[1]:null}},m={buildEmbedElements:(e,t={})=>{var r,o;const s=Object.assign(Object.assign({},t.props),{nodeType:"void"});if(null===(r=s.provider)||void 0===r?void 0:r.url){const e=s.provider.url,t=(n=e).includes("youtube.com")||n.includes("youtu.be")?"youtube":n.includes("vimeo.com")?"vimeo":n.includes("dailymotion.com")||n.includes("dai.ly")?"dailymotion":n.includes("loom.com")?"loom":n.includes("wistia.com")||n.includes("wistia.net")?"wistia":n.includes("twitter")||n.includes("https://x.com")?"twitter":n.includes("figma")?"figma":n.includes("instagram.com")?"instagram":null,i=t?null===(o=d[t])||void 0===o?void 0:o.call(d,e):null,r={type:t,id:i,url:e};t&&i||(r.id=e),s.provider=r}var n;return{id:i(),type:"embed",children:[{text:""}],props:s}},insertEmbed:(e,t={})=>{const{at:i,focus:s,props:n}=t,d=m.buildEmbedElements(e,{props:n}),a=r({value:[d],type:"Embed",meta:{align:"center",depth:0}});o.insertBlock(e,a.type,{focus:s,at:i,blockData:a})},deleteEmbed:(e,t)=>{o.deleteBlock(e,{blockId:t})},updateEmbed:(e,t,i)=>{s.updateElement(e,{blockId:t,type:"embed",props:i})}},a={left:"flex-start",center:"center",right:"flex-end"},l=new n({type:"Embed",elements:e("embed",{render:i=>t("div",Object.assign({},i.attributes,{children:[e("embed",{src:i.element.props.provider.url,width:i.element.props.sizes.width,height:i.element.props.sizes.height,contentEditable:!1}),i.children]})),props:{sizes:{width:0,height:0},provider:null,nodeType:"void"},nodeType:"void"}),options:{display:{title:"Embed",description:"For embed videos, google maps and more"},shortcuts:["instagram","twitter","youtube","vimeo","dailymotion","figma"]},commands:m,parsers:{html:{deserialize:{nodeNames:["IFRAME"],parse:e=>{if("IFRAME"===e.nodeName){const t=new URL(e.getAttribute("src")||"");return{id:i(),type:"embed",children:[{text:""}],props:{provider:{id:t.href,type:t.hostname,url:t.href},sizes:{width:e.getAttribute("width")?parseInt(e.getAttribute("width")||"650",10):650,height:e.getAttribute("height")?parseInt(e.getAttribute("height")||"400",10):400}}}}}},serialize:(e,t,i)=>{const{align:r="center",depth:o=0}=i||{},s=a[r]||"center",n={youtube:e=>`https://www.youtube.com/embed/${e}`,vimeo:e=>`https://player.vimeo.com/embed/${e}`,dailymotion:e=>`https://www.dailymotion.com/embed/embed/${e}`,figma:e=>`https://www.figma.com/embed?embed_host=share&url=${e}`,loom:e=>`https://www.loom.com/embed/${e}?hide_owner=true&hide_share=true&hide_title=true&hideEmbedTopBar=true`,instagram:e=>`https://www.instagram.com/p/${e}/embed`,wistia:e=>`https://fast.wistia.net/embed/iframe/${e}?videoFoam=false`,twitter:e=>`https://platform.twitter.com/widgets/tweet.html?id=${e}`};let d=e.props.provider.url;return n[e.props.provider.type]&&(d=n[e.props.provider.type](e.props.provider.id)),`<div style="margin-left: ${20*o}px; display: flex; width: 100%; justify-content: ${s}">\n <iframe data-meta-align="${r}" data-meta-depth="${o}" src="${d}" width="${e.props.sizes.width}" height="${e.props.sizes.height}"></iframe> </div>`}},markdown:{serialize:(e,t)=>`\n`}}});export{m as EmbedCommands,l as default};
|
|
1
|
+
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{generateId as o,buildBlockData as i,Blocks as n,Elements as r,YooptaPlugin as d}from"@yoopta/editor";import{useState as a,useCallback as s}from"react";function l(e,t,o,i){return new(o||(o=Promise))(function(n,r){function d(e){try{s(i.next(e))}catch(e){r(e)}}function a(e){try{s(i.throw(e))}catch(e){r(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof o?t:new o(function(e){e(t)})).then(d,a)}s((i=i.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;const u=[{type:"youtube",name:"YouTube",patterns:[/(?:youtube\.com\/(?:watch\?v=|embed\/|v\/)|youtu\.be\/)([a-zA-Z0-9_-]{11})/,/youtube\.com\/shorts\/([a-zA-Z0-9_-]{11})/],extractId:e=>{for(const t of u[0].patterns){const o=e.match(t);if(null==o?void 0:o[1])return o[1]}return null},buildEmbedUrl:e=>`https://www.youtube.com/embed/${e}`,aspectRatio:{width:16,height:9},oEmbedUrl:e=>`https://www.youtube.com/oembed?url=${encodeURIComponent(e)}&format=json`},{type:"vimeo",name:"Vimeo",patterns:[/vimeo\.com\/(\d+)/,/player\.vimeo\.com\/video\/(\d+)/],extractId:e=>{for(const t of u[1].patterns){const o=e.match(t);if(null==o?void 0:o[1])return o[1]}return null},buildEmbedUrl:e=>`https://player.vimeo.com/video/${e}`,aspectRatio:{width:16,height:9},oEmbedUrl:e=>`https://vimeo.com/api/oembed.json?url=${encodeURIComponent(e)}`},{type:"dailymotion",name:"Dailymotion",patterns:[/dailymotion\.com\/video\/([a-zA-Z0-9]+)/,/dailymotion\.com\/embed\/video\/([a-zA-Z0-9]+)/,/dai\.ly\/([a-zA-Z0-9]+)/],extractId:e=>{for(const t of u[2].patterns){const o=e.match(t);if(null==o?void 0:o[1])return o[1]}return null},buildEmbedUrl:e=>`https://www.dailymotion.com/embed/video/${e}`,aspectRatio:{width:16,height:9},oEmbedUrl:e=>`https://www.dailymotion.com/services/oembed?url=${encodeURIComponent(e)}&format=json`},{type:"loom",name:"Loom",patterns:[/loom\.com\/share\/([a-zA-Z0-9]+)/,/loom\.com\/embed\/([a-zA-Z0-9]+)/],extractId:e=>{for(const t of u[3].patterns){const o=e.match(t);if(null==o?void 0:o[1])return o[1]}return null},buildEmbedUrl:e=>`https://www.loom.com/embed/${e}?hide_owner=true&hide_share=true&hide_title=true&hideEmbedTopBar=true`,aspectRatio:{width:16,height:9}},{type:"wistia",name:"Wistia",patterns:[/wistia\.(?:com|net)\/embed\/iframe\/([a-zA-Z0-9]+)/,/wistia\.com\/medias\/([a-zA-Z0-9]+)/],extractId:e=>{for(const t of u[4].patterns){const o=e.match(t);if(null==o?void 0:o[1])return o[1]}return null},buildEmbedUrl:e=>`https://fast.wistia.net/embed/iframe/${e}?videoFoam=false`,aspectRatio:{width:16,height:9}},{type:"twitter",name:"Twitter",patterns:[/(?:twitter\.com|x\.com)\/\w+\/status\/(\d+)/],extractId:e=>{var t;const o=e.match(/\/status\/(\d+)/);return null!==(t=null==o?void 0:o[1])&&void 0!==t?t:null},buildEmbedUrl:e=>`https://platform.twitter.com/embed/Tweet.html?id=${e}&theme=light`,aspectRatio:{width:550,height:600}},{type:"instagram",name:"Instagram",patterns:[/instagram\.com\/(?:p|reel|tv)\/([a-zA-Z0-9_-]+)/],extractId:e=>{var t;const o=e.match(/instagram\.com\/(?:p|reel|tv)\/([a-zA-Z0-9_-]+)/);return null!==(t=null==o?void 0:o[1])&&void 0!==t?t:null},buildEmbedUrl:e=>`https://www.instagram.com/p/${e}/embed`,aspectRatio:{width:1,height:1}},{type:"figma",name:"Figma",patterns:[/figma\.com\/(file|proto|design)\/([a-zA-Z0-9]+)/],extractId:e=>e,buildEmbedUrl:(e,t)=>`https://www.figma.com/embed?embed_host=share&url=${encodeURIComponent(t)}`,aspectRatio:{width:16,height:9}},{type:"codepen",name:"CodePen",patterns:[/codepen\.io\/([a-zA-Z0-9_-]+)\/(?:pen|full|details|debug)\/([a-zA-Z0-9]+)/],extractId:e=>{const t=e.match(/codepen\.io\/([a-zA-Z0-9_-]+)\/(?:pen|full|details|debug)\/([a-zA-Z0-9]+)/);return t?`${t[1]}/${t[2]}`:null},buildEmbedUrl:e=>{const[t,o]=e.split("/");return`https://codepen.io/${t}/embed/${o}?default-tab=result&theme-id=dark`},aspectRatio:{width:16,height:9}},{type:"codesandbox",name:"CodeSandbox",patterns:[/codesandbox\.io\/(?:s|embed)\/([a-zA-Z0-9-]+)/],extractId:e=>{var t;const o=e.match(/codesandbox\.io\/(?:s|embed)\/([a-zA-Z0-9-]+)/);return null!==(t=null==o?void 0:o[1])&&void 0!==t?t:null},buildEmbedUrl:e=>`https://codesandbox.io/embed/${e}?fontsize=14&hidenavigation=1&theme=dark`,aspectRatio:{width:16,height:9}},{type:"spotify",name:"Spotify",patterns:[/open\.spotify\.com\/(track|album|playlist|episode|show)\/([a-zA-Z0-9]+)/],extractId:e=>{const t=e.match(/open\.spotify\.com\/(track|album|playlist|episode|show)\/([a-zA-Z0-9]+)/);return t?`${t[1]}/${t[2]}`:null},buildEmbedUrl:e=>`https://open.spotify.com/embed/${e}`,aspectRatio:{width:300,height:380}},{type:"soundcloud",name:"SoundCloud",patterns:[/soundcloud\.com\/([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)/],extractId:e=>e,buildEmbedUrl:(e,t)=>`https://w.soundcloud.com/player/?url=${encodeURIComponent(t)}&color=%23ff5500&auto_play=false&hide_related=true&show_comments=false&show_user=true&show_reposts=false&show_teaser=false`,aspectRatio:{width:100,height:166}},{type:"google-maps",name:"Google Maps",patterns:[/google\.com\/maps\/embed/,/google\.com\/maps\/place/,/google\.com\/maps\/@/,/maps\.google\.com/],extractId:e=>e,buildEmbedUrl:(e,t)=>t.includes("/maps/embed")?t:`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(t)}!5e0!3m2!1sen!2sus!4v0`,aspectRatio:{width:16,height:9}}];function c(e){return u.find(t=>t.type===e)}function m(e){const t=e.toLowerCase().trim();for(const e of u)for(const o of e.patterns)if(o.test(t))return e.type;return"unknown"}function p(e){return"unknown"!==m(e)}function h(e){if(!e)return null;try{const t=m(e);if("unknown"===t)return{type:"unknown",id:e,url:e,embedUrl:e};const o=c(t);if(!o)return null;const i=o.extractId(e);if(!i)return null;return{type:t,id:i,url:e,embedUrl:o.buildEmbedUrl(i,e)}}catch(e){return null}}function b(e){var t;const o=c(e);return null!==(t=null==o?void 0:o.aspectRatio)&&void 0!==t?t:{width:16,height:9}}function f(e,t=650){const o=b(e);return{width:t,height:Math.round(t*o.height/o.width)}}function v(e){const t=c(m(e));return(null==t?void 0:t.oEmbedUrl)?t.oEmbedUrl(e):null}function g(){return u.map(e=>({type:e.type,name:e.name}))}function y(e){return l(this,void 0,void 0,function*(){const t=v(e);if(!t)return null;try{const e=yield fetch(t);if(!e.ok)return null;return yield e.json()}catch(e){return null}})}function w(e){if(e)return{title:e.title,description:void 0,thumbnailUrl:e.thumbnail_url,authorName:e.author_name,authorUrl:e.author_url}}function E(e,t){return l(this,void 0,void 0,function*(){try{const o=yield fetch(`${t}?url=${encodeURIComponent(e)}`);return o.ok?yield o.json():null}catch(e){return null}})}u.reduce((e,t)=>Object.assign(Object.assign({},e),{[t.type]:t.extractId}),{});const x={buildEmbedElements:(e,t={})=>{var i,n,r,d;const a={provider:null!==(n=null===(i=t.props)||void 0===i?void 0:i.provider)&&void 0!==n?n:null,sizes:null!==(d=null===(r=t.props)||void 0===r?void 0:r.sizes)&&void 0!==d?d:{width:650,height:400},nodeType:"void"};return{id:o(),type:"embed",children:[{text:""}],props:a}},insertEmbed:(e,t={})=>{const{at:o,focus:r,props:d}=t,a=x.buildEmbedElements(e,{props:d}),s=i({value:[a],type:"Embed",meta:{align:"center",depth:0}});n.insertBlock(e,s.type,{focus:r,at:o,blockData:s})},insertEmbedFromUrl:(e,t)=>l(void 0,void 0,void 0,function*(){const{url:o,at:r,focus:d,fetchMeta:a=!1,maxWidth:s=650}=t,l=h(o);if(!l)return console.warn("[Embed] Could not parse URL:",o),null;const u=f(l.type,s);let c;if(a)try{c=w(yield y(o))}catch(e){}const m=Object.assign(Object.assign({},l),{meta:c}),p=x.buildEmbedElements(e,{props:{provider:m,sizes:u}}),b=i({value:[p],type:"Embed",meta:{align:"center",depth:0}});return n.insertBlock(e,b.type,{focus:d,at:r,blockData:b}),b.id}),deleteEmbed:(e,t)=>{n.deleteBlock(e,{blockId:t})},updateEmbed:(e,t,o)=>{r.updateElement(e,{blockId:t,type:"embed",props:o})},updateEmbedUrl:(e,t)=>l(void 0,void 0,void 0,function*(){const{blockId:o,url:i,fetchMeta:n=!1,maxWidth:r=650}=t,d=h(i);if(!d)return void console.warn("[Embed] Could not parse URL:",i);const a=f(d.type,r);let s;if(n)try{s=w(yield y(i))}catch(e){}const l=Object.assign(Object.assign({},d),{meta:s});x.updateEmbed(e,o,{provider:l,sizes:a})}),updateEmbedSizes:(e,t,o)=>{x.updateEmbed(e,t,{sizes:o})},isValidEmbedUrl:(e,t)=>p(t),parseUrl:(e,t)=>h(t)},$={left:"flex-start",center:"center",right:"flex-end"},U=new d({type:"Embed",elements:e("embed",{render:o=>{var i,n;return t("div",Object.assign({contentEditable:!1},o.attributes,{children:[e("iframe",{title:null===(i=o.element.props.provider)||void 0===i?void 0:i.type,src:null===(n=o.element.props.provider)||void 0===n?void 0:n.embedUrl,width:o.element.props.sizes.width,height:o.element.props.sizes.height,allowFullScreen:!0,frameBorder:0}),o.children]}))},props:{provider:null,sizes:{width:650,height:400},nodeType:"void"},nodeType:"void"}),options:{display:{title:"Embed",description:"Embed videos, maps, code, and more"},shortcuts:["embed","youtube","vimeo","twitter","instagram","figma","codepen","spotify"],maxWidth:650},commands:x,parsers:{html:{deserialize:{nodeNames:["IFRAME","DIV"],parse:e=>{var t,i,n,r;if("IFRAME"===e.nodeName){const n=e.getAttribute("src");if(!n)return;const r=h(n);if(!r)return;const d=parseInt(null!==(t=e.getAttribute("width"))&&void 0!==t?t:"650",10),a=parseInt(null!==(i=e.getAttribute("height"))&&void 0!==i?i:"400",10);return{id:o(),type:"embed",children:[{text:""}],props:{provider:r,sizes:{width:d,height:a},nodeType:"void"}}}if("DIV"===e.nodeName&&e.hasAttribute("data-yoopta-embed")){const t=e.querySelector("iframe");if(!t)return;const i=t.getAttribute("src");if(!i)return;const d=h(i);if(!d)return;const a=parseInt(null!==(n=t.getAttribute("width"))&&void 0!==n?n:"650",10),s=parseInt(null!==(r=t.getAttribute("height"))&&void 0!==r?r:"400",10);return{id:o(),type:"embed",children:[{text:""}],props:{provider:d,sizes:{width:a,height:s},nodeType:"void"}}}}},serialize:(e,t,o)=>{var i;const{align:n="center",depth:r=0}=null!=o?o:{},d=null!==(i=$[n])&&void 0!==i?i:"center",{provider:a,sizes:s}=e.props;return a?`<div data-yoopta-embed data-provider="${a.type}" data-meta-align="${n}" data-meta-depth="${r}" style="margin-left: ${20*r}px; display: flex; width: 100%; justify-content: ${d};">\n <iframe src="${a.embedUrl}" width="${s.width}" height="${s.height}" frameborder="0" allowfullscreen></iframe>\n </div>`:`<div data-meta-align="${n}" data-meta-depth="${r}" style="margin-left: ${20*r}px;">\x3c!-- Empty embed --\x3e</div>`}},markdown:{serialize:e=>{var t,o;const{provider:i}=e.props;return i?`[${null!==(o=null===(t=i.meta)||void 0===t?void 0:t.title)&&void 0!==o?o:i.type}](${i.url})\n`:""}},email:{serialize:(e,t,o)=>{var i,n,r,d;const{align:a="center",depth:s=0}=null!=o?o:{},l=null!==(i=$[a])&&void 0!==i?i:"center",{provider:u,sizes:c}=e.props;if(!u)return"";const m=(null===(n=u.meta)||void 0===n?void 0:n.thumbnailUrl)?`<img src="${u.meta.thumbnailUrl}" width="${c.width}" height="${c.height}" alt="${null!==(d=null===(r=u.meta)||void 0===r?void 0:r.title)&&void 0!==d?d:"Embedded content"}" style="border-radius: 8px; max-width: 100%;" />`:`<div style="width: ${c.width}px; height: ${c.height}px; background: #f0f0f0; border-radius: 8px; display: flex; align-items: center; justify-content: center;">\n <span style="color: #666;">Click to view ${u.type} content</span>\n </div>`;return`\n <table style="width: 100%;">\n <tbody>\n <tr>\n <td style="margin-left: ${20*s}px; display: flex; justify-content: ${l}; padding: 1rem 0;">\n <a href="${u.url}" target="_blank" rel="noopener noreferrer" style="text-decoration: none;">\n ${m}\n </a>\n </td>\n </tr>\n </tbody>\n </table>\n `}}}}),z={url:"",provider:null,sizes:{width:650,height:400},isValid:!1,isLoading:!1,error:null};function I(e=650){const[t,o]=a(z),i=s(t=>{const i=t.trim();if(!i)return void o(z);const n=p(i),r=h(i);let d={width:e,height:400};r&&(d=f(r.type,e)),o({url:i,provider:r,sizes:d,isValid:n,isLoading:!1,error:n?null:"Unsupported URL format"})},[e]),n=s(e=>h(e),[]),r=s(()=>l(this,void 0,void 0,function*(){if(t.url&&t.isValid){o(e=>Object.assign(Object.assign({},e),{isLoading:!0,error:null}));try{const e=w(yield y(t.url));return e&&t.provider?o(t=>Object.assign(Object.assign({},t),{provider:t.provider?Object.assign(Object.assign({},t.provider),{meta:e}):null,isLoading:!1})):o(e=>Object.assign(Object.assign({},e),{isLoading:!1})),e}catch(e){return void o(e=>Object.assign(Object.assign({},e),{isLoading:!1,error:"Failed to fetch metadata"}))}}}),[t.url,t.isValid,t.provider]),d=s(()=>{o(z)},[]);return Object.assign(Object.assign({},t),{setUrl:i,parseUrl:n,fetchMeta:r,reset:d})}export{x as EmbedCommands,u as PROVIDER_CONFIGS,f as calculateEmbedDimensions,U as default,m as detectProvider,w as extractProviderMeta,y as fetchOEmbed,E as fetchOEmbedViaProxy,v as getOEmbedUrl,b as getProviderAspectRatio,c as getProviderConfig,g as getSupportedProviders,p as isEmbedUrl,h as parseEmbedUrl,I as useEmbedUrl};
|
|
@@ -2,4 +2,4 @@ import { YooptaPlugin } from '@yoopta/editor';
|
|
|
2
2
|
import type { EmbedElementMap, EmbedPluginOptions } from '../types';
|
|
3
3
|
declare const Embed: YooptaPlugin<EmbedElementMap, EmbedPluginOptions>;
|
|
4
4
|
export { Embed };
|
|
5
|
-
//# sourceMappingURL=
|
|
5
|
+
//# sourceMappingURL=embed-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embed-plugin.d.ts","sourceRoot":"","sources":["../../src/plugin/embed-plugin.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAc,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,eAAe,EAAqB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAevF,QAAA,MAAM,KAAK,mDAyIT,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,34 +1,72 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { SlateElement } from '@yoopta/editor';
|
|
2
2
|
import type { RenderElementProps } from 'slate-react';
|
|
3
|
-
export type
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export type EmbedProviderType = 'youtube' | 'vimeo' | 'dailymotion' | 'wistia' | 'loom' | 'twitter' | 'figma' | 'instagram' | 'codepen' | 'codesandbox' | 'spotify' | 'soundcloud' | 'google-maps' | 'unknown';
|
|
4
|
+
export type EmbedProviderMeta = {
|
|
5
|
+
title?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
thumbnailUrl?: string;
|
|
8
|
+
authorName?: string;
|
|
9
|
+
authorUrl?: string;
|
|
6
10
|
};
|
|
7
|
-
export type EmbedProviderTypes = 'youtube' | 'vimeo' | 'dailymotion' | 'wistia' | 'loom' | 'twitter' | 'figma' | 'instagram' | string | null;
|
|
8
11
|
export type EmbedProvider = {
|
|
9
|
-
type:
|
|
12
|
+
type: EmbedProviderType;
|
|
10
13
|
id: string;
|
|
11
|
-
url
|
|
14
|
+
url: string;
|
|
15
|
+
embedUrl: string;
|
|
16
|
+
meta?: EmbedProviderMeta;
|
|
17
|
+
};
|
|
18
|
+
export type EmbedSizes = {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
export type EmbedAspectRatio = {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
12
25
|
};
|
|
13
26
|
export type EmbedElementProps = {
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
provider: EmbedProvider | null;
|
|
28
|
+
sizes: EmbedSizes;
|
|
29
|
+
nodeType: 'void';
|
|
16
30
|
};
|
|
17
31
|
export type EmbedPluginElements = 'embed';
|
|
18
32
|
export type EmbedElement = SlateElement<'embed', EmbedElementProps>;
|
|
19
33
|
export type EmbedPluginOptions = {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
maxHeight?: number | 'auto';
|
|
23
|
-
};
|
|
34
|
+
maxWidth?: number;
|
|
35
|
+
defaultSizes?: EmbedSizes;
|
|
24
36
|
};
|
|
25
|
-
export type
|
|
37
|
+
export type EmbedProviderRenderProps = {
|
|
26
38
|
provider: EmbedProvider;
|
|
27
39
|
blockId: string;
|
|
28
40
|
width: number;
|
|
29
41
|
height: number;
|
|
42
|
+
isLoading?: boolean;
|
|
43
|
+
error?: string | null;
|
|
30
44
|
} & Pick<RenderElementProps, 'attributes' | 'children'>;
|
|
31
45
|
export type EmbedElementMap = {
|
|
32
46
|
embed: EmbedElement;
|
|
33
47
|
};
|
|
48
|
+
export type OEmbedResponse = {
|
|
49
|
+
type: 'video' | 'photo' | 'link' | 'rich';
|
|
50
|
+
version: string;
|
|
51
|
+
title?: string;
|
|
52
|
+
author_name?: string;
|
|
53
|
+
author_url?: string;
|
|
54
|
+
provider_name?: string;
|
|
55
|
+
provider_url?: string;
|
|
56
|
+
thumbnail_url?: string;
|
|
57
|
+
thumbnail_width?: number;
|
|
58
|
+
thumbnail_height?: number;
|
|
59
|
+
html?: string;
|
|
60
|
+
width?: number;
|
|
61
|
+
height?: number;
|
|
62
|
+
};
|
|
63
|
+
export type ProviderConfig = {
|
|
64
|
+
type: EmbedProviderType;
|
|
65
|
+
name: string;
|
|
66
|
+
patterns: RegExp[];
|
|
67
|
+
extractId: (url: string) => string | null;
|
|
68
|
+
buildEmbedUrl: (id: string, url: string) => string;
|
|
69
|
+
aspectRatio: EmbedAspectRatio;
|
|
70
|
+
oEmbedUrl?: (url: string) => string;
|
|
71
|
+
};
|
|
34
72
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EmbedProviderMeta, OEmbedResponse } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch oEmbed data for a URL
|
|
4
|
+
* Note: This requires CORS support or a proxy for most providers
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchOEmbed(url: string): Promise<OEmbedResponse | null>;
|
|
7
|
+
/**
|
|
8
|
+
* Extract provider metadata from oEmbed response
|
|
9
|
+
*/
|
|
10
|
+
export declare function extractProviderMeta(oembedData: OEmbedResponse | null): EmbedProviderMeta | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Fetch oEmbed data via a proxy (for production use)
|
|
13
|
+
* You can implement your own proxy endpoint
|
|
14
|
+
*/
|
|
15
|
+
export declare function fetchOEmbedViaProxy(url: string, proxyUrl: string): Promise<OEmbedResponse | null>;
|
|
16
|
+
//# sourceMappingURL=oembed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oembed.d.ts","sourceRoot":"","sources":["../../src/utils/oembed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGlE;;;GAGG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoB7E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAUpG;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAYhC"}
|
|
@@ -1,21 +1,43 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export declare function
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import type { EmbedAspectRatio, EmbedProvider, EmbedProviderType, ProviderConfig } from '../types';
|
|
2
|
+
export declare const PROVIDER_CONFIGS: ProviderConfig[];
|
|
3
|
+
/**
|
|
4
|
+
* Get provider config by type
|
|
5
|
+
*/
|
|
6
|
+
export declare function getProviderConfig(type: EmbedProviderType): ProviderConfig | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Detect provider type from URL
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectProvider(url: string): EmbedProviderType;
|
|
11
|
+
/**
|
|
12
|
+
* Check if URL is a valid embed URL
|
|
13
|
+
*/
|
|
14
|
+
export declare function isEmbedUrl(url: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Parse URL and extract provider info
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseEmbedUrl(url: string): EmbedProvider | null;
|
|
19
|
+
/**
|
|
20
|
+
* Get aspect ratio for provider
|
|
21
|
+
*/
|
|
22
|
+
export declare function getProviderAspectRatio(type: EmbedProviderType): EmbedAspectRatio;
|
|
23
|
+
/**
|
|
24
|
+
* Calculate dimensions based on aspect ratio and max width
|
|
25
|
+
*/
|
|
26
|
+
export declare function calculateEmbedDimensions(type: EmbedProviderType, maxWidth?: number): {
|
|
27
|
+
width: number;
|
|
28
|
+
height: number;
|
|
20
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Get oEmbed URL for provider
|
|
32
|
+
*/
|
|
33
|
+
export declare function getOEmbedUrl(url: string): string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Get list of supported providers for display
|
|
36
|
+
*/
|
|
37
|
+
export declare function getSupportedProviders(): {
|
|
38
|
+
type: EmbedProviderType;
|
|
39
|
+
name: string;
|
|
40
|
+
}[];
|
|
41
|
+
export declare const getProvider: typeof detectProvider;
|
|
42
|
+
export declare const ProviderGetters: Record<EmbedProviderType, (url: string) => string | null>;
|
|
21
43
|
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/utils/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAMnG,eAAO,MAAM,gBAAgB,EAAE,cAAc,EA8N5C,CAAC;AAMF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,GAAG,SAAS,CAErF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAY7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgC/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,CAGhF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,iBAAiB,EACvB,QAAQ,GAAE,MAAY,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAMnC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAKnF;AAMD,eAAO,MAAM,WAAW,uBAAiB,CAAC;AAE1C,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAOnF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yoopta/embed",
|
|
3
|
-
"version": "6.0.0-beta.
|
|
3
|
+
"version": "6.0.0-beta.8",
|
|
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": "
|
|
38
|
+
"gitHead": "dca941dd88adfad95b7c0f2b51c65ada6dd91b49"
|
|
39
39
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugin/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwC,MAAM,gBAAgB,CAAC;AAGpF,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAcpE,QAAA,MAAM,KAAK,mDA+FT,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DailyMotion.d.ts","sourceRoot":"","sources":["../../src/providers/DailyMotion.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAKpD,QAAA,MAAM,WAAW,sDAAuD,mBAAmB,4CAkD1F,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Figma.d.ts","sourceRoot":"","sources":["../../src/providers/Figma.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,QAAA,MAAM,KAAK,sDAAuD,mBAAmB,4CA8BpF,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type React from 'react';
|
|
2
|
-
type InstagramProps = {
|
|
3
|
-
provider: {
|
|
4
|
-
id: string;
|
|
5
|
-
url: string;
|
|
6
|
-
};
|
|
7
|
-
width: number | 'auto';
|
|
8
|
-
height: number | 'auto';
|
|
9
|
-
blockId: string;
|
|
10
|
-
attributes: any;
|
|
11
|
-
children: React.ReactNode;
|
|
12
|
-
};
|
|
13
|
-
declare const Instagram: React.FC<InstagramProps>;
|
|
14
|
-
export default Instagram;
|
|
15
|
-
//# sourceMappingURL=Instagram.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Instagram.d.ts","sourceRoot":"","sources":["../../src/providers/Instagram.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE;QACR,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,GAAG,CAAC;IAChB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA4BvC,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
package/dist/providers/Loom.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Loom.d.ts","sourceRoot":"","sources":["../../src/providers/Loom.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,IAAI,sDAAuD,mBAAmB,4CAqD1F,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Twitter.d.ts","sourceRoot":"","sources":["../../src/providers/Twitter.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,QAAA,MAAM,OAAO,gDAAiD,mBAAmB,4CAyDhF,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Vimeo.d.ts","sourceRoot":"","sources":["../../src/providers/Vimeo.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAIpD,QAAA,MAAM,KAAK,sDAAuD,mBAAmB,4CAmDpF,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Wistia.d.ts","sourceRoot":"","sources":["../../src/providers/Wistia.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,QAAA,MAAM,MAAM,sDAAuD,mBAAmB,4CA4CrF,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Youtube.d.ts","sourceRoot":"","sources":["../../src/providers/Youtube.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,QAAA,MAAM,OAAO,sDAAuD,mBAAmB,4CAyCtF,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
|