@grapesjs/studio-sdk-plugins 1.0.13 → 1.0.14-rc.0

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.
@@ -1 +1 @@
1
- "use strict";require("grapesjs");var g=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(g||{}),h=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(h||{});const v="app.grapesjs.com",P="app-stage.grapesjs.com",f=[v,P,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],k="license:check:start",R="license:check:end",U=()=>typeof window<"u",x=({isDev:e,isStage:o})=>`${e?"":`https://${o?P:v}`}/api`,I=()=>{const e=U()&&window.location.hostname;return!!e&&(f.includes(e)||f.some(o=>e.endsWith(o)))};async function $({path:e,baseApiUrl:o,method:r="GET",headers:n={},params:c,body:l}){const t=`${o||x({isDev:!1,isStage:!1})}${e}`,i={method:r,headers:{"Content-Type":"application/json",...n}};l&&(i.body=JSON.stringify(l));const a=c?new URLSearchParams(c).toString():"",s=a?`?${a}`:"",u=await fetch(`${t}${s}`,i);if(!u.ok)throw new Error(`HTTP error! status: ${u.status}`);return u.json()}const T={[g.free]:0,[g.startup]:10,[g.business]:20,[g.enterprise]:30};function O(e){const o=e;return o.init=r=>n=>e(n,r),o}const M=e=>O(e);async function B({editor:e,plan:o,pluginName:r,licenseKey:n,cleanup:c}){let l="",d=!1;const t=I(),i=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),c()},a=(s={})=>{var b;const{error:u,sdkLicense:y}=s,p=(b=s.plan)==null?void 0:b.category;if(!(y||s.license)||u)i(u||"Invalid license");else if(p){const A=T[o],L=T[p];A>L&&i({pluginRequiredPlan:o,licensePlan:p})}};e.on(k,s=>{l=s==null?void 0:s.baseApiUrl,d=!0}),e.on(R,s=>{a(s)}),setTimeout(async()=>{if(!d){if(t)return;if(n){const s=await E({licenseKey:n,pluginName:r,baseApiUrl:l});s&&a(s)}else i("The `licenseKey` option not provided")}},2e3)}async function E(e){const{licenseKey:o,pluginName:r,baseApiUrl:n}=e;try{return(await $({baseApiUrl:n,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(c){return console.error("Error during SDK license check:",c),!1}}const j=e=>{const o={};for(const r of Object.keys(e)){let n=e[r];n&&(Array.isArray(n)?n=n.map(c=>c.toString()).join(","):n=n.toString(),o[r]=n)}return new URLSearchParams(o)},m=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:n="high"}=e,c=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=j(t);return`${a}?${s}`},l=t=>{var i,a,s;return((i=t[n])==null?void 0:i.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},d=t=>{const i=l(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:i,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:"YouTube Videos",search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:i}){var b;const a={maxResults:25,q:t,pageToken:i==null?void 0:i.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),u={...a,...s};u.part?u.part.includes("snippet")||u.part.push("snippet"):u.part=["snippet"];const p=await(await fetch(c(u))).json();return(b=p.items)!=null&&b.length?{items:p.items.map(d),nextPageCustomData:{token:p.nextPageToken},isLastPage:!p.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:i})=>({type:"column",onClick:()=>i(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},D="youtubeAssetProvider",G=function(e,o){const{skipVideoComponent:r}=o,n=m(o);e.runCommand(h.assetProviderAdd,{provider:n});const c="search-on-youtube",l="video";if(!r){const d=e.Components.getType(l).model.prototype;e.Components.addType(l,{model:{getYoutubeTraits(){const[t,...i]=d.getYoutubeTraits.apply(this);return[t,{id:c,type:"button",label:e.I18n.t("youtube.searchBtn"),command:()=>{e.AssetManager.open({select:a=>{e.Assets.close(),this.set({videoId:a.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...i]}}})}B({editor:e,licenseKey:o.licenseKey,plan:g.startup,pluginName:D,cleanup:()=>{if(e.runCommand(h.assetProviderRemove,{id:n.id}),!r){const d=e.Components.getType(l).model.prototype;e.Components.addType(l,{model:{getYoutubeTraits(){return d.getYoutubeTraits.apply(this).filter(t=>t.id!==c)}}})}}})},N=M(G);module.exports=N;
1
+ "use strict";require("grapesjs");var g=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(g||{}),h=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(h||{});const T="app.grapesjs.com",P="app-stage.grapesjs.com",f=[T,P,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],k="license:check:start",R="license:check:end",I=()=>typeof window<"u",U=({isDev:e,isStage:o})=>`${e?"":`https://${o?P:T}`}/api`,x=()=>{const e=I()&&window.location.hostname;return!!e&&(f.includes(e)||f.some(o=>e.endsWith(o)))};async function $({path:e,baseApiUrl:o,method:r="GET",headers:i={},params:c,body:u}){const t=`${o||U({isDev:!1,isStage:!1})}${e}`,n={method:r,headers:{"Content-Type":"application/json",...i}};u&&(n.body=JSON.stringify(u));const a=c?new URLSearchParams(c).toString():"",s=a?`?${a}`:"",l=await fetch(`${t}${s}`,n);if(!l.ok)throw new Error(`HTTP error! status: ${l.status}`);return l.json()}const v={[g.free]:0,[g.startup]:10,[g.business]:20,[g.enterprise]:30};function M(e){const o=e;return o.init=r=>i=>e(i,r),o}const O=e=>M(e);async function B({editor:e,plan:o,pluginName:r,licenseKey:i,cleanup:c}){let u="",d=!1;const t=x(),n=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),c()},a=(s={})=>{var b;const{error:l,sdkLicense:y}=s,p=(b=s.plan)==null?void 0:b.category;if(!(y||s.license)||l)n(l||"Invalid license");else if(p){const A=v[o],L=v[p];A>L&&n({pluginRequiredPlan:o,licensePlan:p})}};e.on(k,s=>{u=s==null?void 0:s.baseApiUrl,d=!0}),e.on(R,s=>{a(s)}),setTimeout(async()=>{if(!d){if(t)return;if(i){const s=await E({licenseKey:i,pluginName:r,baseApiUrl:u});s&&a(s)}else n("The `licenseKey` option not provided")}},2e3)}async function E(e){const{licenseKey:o,pluginName:r,baseApiUrl:i}=e;try{return(await $({baseApiUrl:i,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(c){return console.error("Error during SDK license check:",c),!1}}const j=e=>{const o={};for(const r of Object.keys(e)){let i=e[r];i&&(Array.isArray(i)?i=i.map(c=>c.toString()).join(","):i=i.toString(),o[r]=i)}return new URLSearchParams(o)},m=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:i="high"}=e,c=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=j(t);return`${a}?${s}`},u=t=>{var n,a,s;return((n=t[i])==null?void 0:n.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},d=t=>{const n=u(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:n,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:({editor:t})=>t.I18n.t("youtubeAssetProvider.providerLabel"),search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:n}){var b;const a={maxResults:25,q:t,pageToken:n==null?void 0:n.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),l={...a,...s};l.part?l.part.includes("snippet")||l.part.push("snippet"):l.part=["snippet"];const p=await(await fetch(c(l))).json();return(b=p.items)!=null&&b.length?{items:p.items.map(d),nextPageCustomData:{token:p.nextPageToken},isLastPage:!p.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:n})=>({type:"column",onClick:()=>n(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},D={youtubeAssetProvider:{searchBtn:"Search on YouTube",providerLabel:"YouTube Videos"}},G="youtubeAssetProvider",N=function(e,o){const{skipVideoComponent:r,i18n:i={}}=o,c=m(o);e.runCommand(h.assetProviderAdd,{provider:c});const u="search-on-youtube",d="video";if(!r){const t=e.Components.getType(d).model.prototype;e.Components.addType(d,{model:{getYoutubeTraits(){const[n,...a]=t.getYoutubeTraits.apply(this);return[n,{id:u,type:"button",label:e.I18n.t("youtubeAssetProvider.searchBtn"),command:()=>{e.AssetManager.open({providerId:c.id,providers:[],types:[],select:s=>{e.Assets.close(),this.set({videoId:s.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...a]}}})}e.I18n.addMessages({en:D,...i}),B({editor:e,licenseKey:o.licenseKey,plan:g.startup,pluginName:G,cleanup:()=>{if(e.runCommand(h.assetProviderRemove,{id:c.id}),!r){const t=e.Components.getType(d).model.prototype;e.Components.addType(d,{model:{getYoutubeTraits(){return t.getYoutubeTraits.apply(this).filter(n=>n.id!==u)}}})}}})},W=O(N);module.exports=W;
@@ -1,7 +1,7 @@
1
1
  import "grapesjs";
2
2
  var g = /* @__PURE__ */ ((e) => (e.free = "free", e.startup = "startup", e.business = "business", e.enterprise = "enterprise", e))(g || {}), h = /* @__PURE__ */ ((e) => (e.toastAdd = "studio:toastAdd", e.dialogOpen = "studio:dialogOpen", e.dialogClose = "studio:dialogClose", e.sidebarLeftSet = "studio:sidebarLeft:set", e.sidebarLeftGet = "studio:sidebarLeft:get", e.sidebarLeftToggle = "studio:sidebarLeft:toggle", e.sidebarRightSet = "studio:sidebarRight:set", e.sidebarRightGet = "studio:sidebarRight:get", e.sidebarRightToggle = "studio:sidebarRight:toggle", e.sidebarTopSet = "studio:sidebarTop:set", e.sidebarTopGet = "studio:sidebarTop:get", e.sidebarTopToggle = "studio:sidebarTop:toggle", e.sidebarBottomSet = "studio:sidebarBottom:set", e.sidebarBottomGet = "studio:sidebarBottom:get", e.sidebarBottomToggle = "studio:sidebarBottom:toggle", e.symbolAdd = "studio:symbolAdd", e.symbolDetach = "studio:symbolDetach", e.symbolOverride = "studio:symbolOverride", e.symbolPropagateStyles = "studio:propagateStyles", e.getPagesConfig = "studio:getPagesConfig", e.setPagesConfig = "studio:setPagesConfig", e.getPageSettings = "studio:getPageSettings", e.setPageSettings = "studio:setPageSettings", e.projectFiles = "studio:projectFiles", e.canvasReload = "studio:canvasReload", e.getBlocksPanel = "studio:getBlocksPanel", e.setBlocksPanel = "studio:setBlocksPanel", e.getStateContextMenu = "studio:getStateContextMenu", e.setStateContextMenu = "studio:setStateContextMenu", e.contextMenuComponent = "studio:contextMenuComponent", e.layoutAdd = "studio:layoutAdd", e.layoutRemove = "studio:layoutRemove", e.layoutToggle = "studio:layoutToggle", e.getStateTheme = "studio:getStateTheme", e.setStateTheme = "studio:setStateTheme", e.assetProviderGet = "studio:assetProviderGet", e.assetProviderAdd = "studio:assetProviderAdd", e.assetProviderRemove = "studio:assetProviderRemove", e))(h || {});
3
- const v = "app.grapesjs.com", P = "app-stage.grapesjs.com", f = [
4
- v,
3
+ const T = "app.grapesjs.com", P = "app-stage.grapesjs.com", f = [
4
+ T,
5
5
  P,
6
6
  "localhost",
7
7
  "127.0.0.1",
@@ -11,82 +11,82 @@ const v = "app.grapesjs.com", P = "app-stage.grapesjs.com", f = [
11
11
  // For stackblitz.com demos
12
12
  "-sandpack.codesandbox.io"
13
13
  // For Sandpack demos
14
- ], k = "license:check:start", R = "license:check:end", U = () => typeof window < "u", x = ({ isDev: e, isStage: o }) => `${e ? "" : `https://${o ? P : v}`}/api`, I = () => {
15
- const e = U() && window.location.hostname;
14
+ ], k = "license:check:start", R = "license:check:end", I = () => typeof window < "u", U = ({ isDev: e, isStage: o }) => `${e ? "" : `https://${o ? P : T}`}/api`, x = () => {
15
+ const e = I() && window.location.hostname;
16
16
  return !!e && (f.includes(e) || f.some((o) => e.endsWith(o)));
17
17
  };
18
18
  async function $({
19
19
  path: e,
20
20
  baseApiUrl: o,
21
21
  method: r = "GET",
22
- headers: n = {},
22
+ headers: i = {},
23
23
  params: l,
24
- body: c
24
+ body: u
25
25
  }) {
26
- const t = `${o || x({ isDev: !1, isStage: !1 })}${e}`, i = {
26
+ const t = `${o || U({ isDev: !1, isStage: !1 })}${e}`, n = {
27
27
  method: r,
28
28
  headers: {
29
29
  "Content-Type": "application/json",
30
- ...n
30
+ ...i
31
31
  }
32
32
  };
33
- c && (i.body = JSON.stringify(c));
34
- const a = l ? new URLSearchParams(l).toString() : "", s = a ? `?${a}` : "", u = await fetch(`${t}${s}`, i);
35
- if (!u.ok)
36
- throw new Error(`HTTP error! status: ${u.status}`);
37
- return u.json();
33
+ u && (n.body = JSON.stringify(u));
34
+ const a = l ? new URLSearchParams(l).toString() : "", s = a ? `?${a}` : "", c = await fetch(`${t}${s}`, n);
35
+ if (!c.ok)
36
+ throw new Error(`HTTP error! status: ${c.status}`);
37
+ return c.json();
38
38
  }
39
- const T = {
39
+ const v = {
40
40
  [g.free]: 0,
41
41
  [g.startup]: 10,
42
42
  [g.business]: 20,
43
43
  [g.enterprise]: 30
44
44
  };
45
- function O(e) {
45
+ function M(e) {
46
46
  const o = e;
47
- return o.init = (r) => (n) => e(n, r), o;
47
+ return o.init = (r) => (i) => e(i, r), o;
48
48
  }
49
- const M = (e) => /* @__PURE__ */ O(e);
49
+ const O = (e) => /* @__PURE__ */ M(e);
50
50
  async function B({
51
51
  editor: e,
52
52
  plan: o,
53
53
  pluginName: r,
54
- licenseKey: n,
54
+ licenseKey: i,
55
55
  cleanup: l
56
56
  }) {
57
- let c = "", d = !1;
58
- const t = I(), i = (s) => {
57
+ let u = "", d = !1;
58
+ const t = x(), n = (s) => {
59
59
  console.warn("Cleanup plugin:", r, "Reason:", s), l();
60
60
  }, a = (s = {}) => {
61
61
  var b;
62
- const { error: u, sdkLicense: y } = s, p = (b = s.plan) == null ? void 0 : b.category;
63
- if (!(y || s.license) || u)
64
- i(u || "Invalid license");
62
+ const { error: c, sdkLicense: y } = s, p = (b = s.plan) == null ? void 0 : b.category;
63
+ if (!(y || s.license) || c)
64
+ n(c || "Invalid license");
65
65
  else if (p) {
66
- const A = T[o], L = T[p];
67
- A > L && i({ pluginRequiredPlan: o, licensePlan: p });
66
+ const A = v[o], L = v[p];
67
+ A > L && n({ pluginRequiredPlan: o, licensePlan: p });
68
68
  }
69
69
  };
70
70
  e.on(k, (s) => {
71
- c = s == null ? void 0 : s.baseApiUrl, d = !0;
71
+ u = s == null ? void 0 : s.baseApiUrl, d = !0;
72
72
  }), e.on(R, (s) => {
73
73
  a(s);
74
74
  }), setTimeout(async () => {
75
75
  if (!d) {
76
76
  if (t) return;
77
- if (n) {
78
- const s = await E({ licenseKey: n, pluginName: r, baseApiUrl: c });
77
+ if (i) {
78
+ const s = await E({ licenseKey: i, pluginName: r, baseApiUrl: u });
79
79
  s && a(s);
80
80
  } else
81
- i("The `licenseKey` option not provided");
81
+ n("The `licenseKey` option not provided");
82
82
  }
83
83
  }, 2e3);
84
84
  }
85
85
  async function E(e) {
86
- const { licenseKey: o, pluginName: r, baseApiUrl: n } = e;
86
+ const { licenseKey: o, pluginName: r, baseApiUrl: i } = e;
87
87
  try {
88
88
  return (await $({
89
- baseApiUrl: n,
89
+ baseApiUrl: i,
90
90
  path: `/sdk/${o || "na"}`,
91
91
  method: "POST",
92
92
  params: {
@@ -101,54 +101,54 @@ async function E(e) {
101
101
  const j = (e) => {
102
102
  const o = {};
103
103
  for (const r of Object.keys(e)) {
104
- let n = e[r];
105
- n && (Array.isArray(n) ? n = n.map((l) => l.toString()).join(",") : n = n.toString(), o[r] = n);
104
+ let i = e[r];
105
+ i && (Array.isArray(i) ? i = i.map((l) => l.toString()).join(",") : i = i.toString(), o[r] = i);
106
106
  }
107
107
  return new URLSearchParams(o);
108
108
  }, m = (e) => {
109
- const { apiKey: o, searchParams: r, thumbnailQuality: n = "high" } = e, l = (t = {}) => {
109
+ const { apiKey: o, searchParams: r, thumbnailQuality: i = "high" } = e, l = (t = {}) => {
110
110
  const a = "https://www.googleapis.com/youtube/v3/search", s = j(t);
111
111
  return `${a}?${s}`;
112
- }, c = (t) => {
113
- var i, a, s;
114
- return ((i = t[n]) == null ? void 0 : i.url) || ((a = t.high) == null ? void 0 : a.url) || ((s = t.medium) == null ? void 0 : s.url) || t.default.url;
112
+ }, u = (t) => {
113
+ var n, a, s;
114
+ return ((n = t[i]) == null ? void 0 : n.url) || ((a = t.high) == null ? void 0 : a.url) || ((s = t.medium) == null ? void 0 : s.url) || t.default.url;
115
115
  }, d = (t) => {
116
- const i = c(t.snippet.thumbnails);
116
+ const n = u(t.snippet.thumbnails);
117
117
  return {
118
118
  id: t.id.videoId,
119
119
  src: `https://www.youtube.com/watch?v=${t.id.videoId}`,
120
120
  name: t.snippet.title,
121
- customData: { thumbnailUrl: i, videoItem: t }
121
+ customData: { thumbnailUrl: n, videoItem: t }
122
122
  };
123
123
  };
124
124
  return {
125
125
  id: "youtube",
126
126
  types: ["youtube-video"],
127
- label: "YouTube Videos",
127
+ label: ({ editor: t }) => t.I18n.t("youtubeAssetProvider.providerLabel"),
128
128
  search: { reloadOnInput: !0, debounceMs: 1e3 },
129
- async onLoad({ searchValue: t, pageCustomData: i }) {
129
+ async onLoad({ searchValue: t, pageCustomData: n }) {
130
130
  var b;
131
131
  const a = {
132
132
  maxResults: 25,
133
133
  q: t,
134
- pageToken: i == null ? void 0 : i.token,
134
+ pageToken: n == null ? void 0 : n.token,
135
135
  type: ["video"],
136
136
  key: o
137
- }, s = r == null ? void 0 : r({ searchValue: t }), u = {
137
+ }, s = r == null ? void 0 : r({ searchValue: t }), c = {
138
138
  ...a,
139
139
  ...s
140
140
  };
141
- u.part ? u.part.includes("snippet") || u.part.push("snippet") : u.part = ["snippet"];
142
- const p = await (await fetch(l(u))).json();
141
+ c.part ? c.part.includes("snippet") || c.part.push("snippet") : c.part = ["snippet"];
142
+ const p = await (await fetch(l(c))).json();
143
143
  return (b = p.items) != null && b.length ? {
144
144
  items: p.items.map(d),
145
145
  nextPageCustomData: { token: p.nextPageToken },
146
146
  isLastPage: !p.nextPageToken
147
147
  } : { items: [], isLastPage: !0 };
148
148
  },
149
- itemLayout: ({ assetProps: t, onSelect: i }) => ({
149
+ itemLayout: ({ assetProps: t, onSelect: n }) => ({
150
150
  type: "column",
151
- onClick: () => i(t),
151
+ onClick: () => n(t),
152
152
  htmlAttrs: {
153
153
  title: t.name
154
154
  },
@@ -180,26 +180,34 @@ const j = (e) => {
180
180
  ]
181
181
  })
182
182
  };
183
- }, D = "youtubeAssetProvider", G = function(e, o) {
184
- const { skipVideoComponent: r } = o, n = m(o);
185
- e.runCommand(h.assetProviderAdd, { provider: n });
186
- const l = "search-on-youtube", c = "video";
183
+ }, D = {
184
+ youtubeAssetProvider: {
185
+ searchBtn: "Search on YouTube",
186
+ providerLabel: "YouTube Videos"
187
+ }
188
+ }, G = "youtubeAssetProvider", N = function(e, o) {
189
+ const { skipVideoComponent: r, i18n: i = {} } = o, l = m(o);
190
+ e.runCommand(h.assetProviderAdd, { provider: l });
191
+ const u = "search-on-youtube", d = "video";
187
192
  if (!r) {
188
- const d = e.Components.getType(c).model.prototype;
189
- e.Components.addType(c, {
193
+ const t = e.Components.getType(d).model.prototype;
194
+ e.Components.addType(d, {
190
195
  model: {
191
196
  getYoutubeTraits() {
192
- const [t, ...i] = d.getYoutubeTraits.apply(this);
197
+ const [n, ...a] = t.getYoutubeTraits.apply(this);
193
198
  return [
194
- t,
199
+ n,
195
200
  {
196
- id: l,
201
+ id: u,
197
202
  type: "button",
198
- label: e.I18n.t("youtube.searchBtn"),
203
+ label: e.I18n.t("youtubeAssetProvider.searchBtn"),
199
204
  command: () => {
200
205
  e.AssetManager.open({
201
- select: (a) => {
202
- e.Assets.close(), this.set({ videoId: a.attributes.id });
206
+ providerId: l.id,
207
+ providers: [],
208
+ types: [],
209
+ select: (s) => {
210
+ e.Assets.close(), this.set({ videoId: s.attributes.id });
203
211
  },
204
212
  content: {
205
213
  header: {
@@ -210,31 +218,34 @@ const j = (e) => {
210
218
  });
211
219
  }
212
220
  },
213
- ...i
221
+ ...a
214
222
  ];
215
223
  }
216
224
  }
217
225
  });
218
226
  }
219
- B({
227
+ e.I18n.addMessages({
228
+ en: D,
229
+ ...i
230
+ }), B({
220
231
  editor: e,
221
232
  licenseKey: o.licenseKey,
222
233
  plan: g.startup,
223
- pluginName: D,
234
+ pluginName: G,
224
235
  cleanup: () => {
225
- if (e.runCommand(h.assetProviderRemove, { id: n.id }), !r) {
226
- const d = e.Components.getType(c).model.prototype;
227
- e.Components.addType(c, {
236
+ if (e.runCommand(h.assetProviderRemove, { id: l.id }), !r) {
237
+ const t = e.Components.getType(d).model.prototype;
238
+ e.Components.addType(d, {
228
239
  model: {
229
240
  getYoutubeTraits() {
230
- return d.getYoutubeTraits.apply(this).filter((t) => t.id !== l);
241
+ return t.getYoutubeTraits.apply(this).filter((n) => n.id !== u);
231
242
  }
232
243
  }
233
244
  });
234
245
  }
235
246
  }
236
247
  });
237
- }, W = M(G);
248
+ }, Y = O(N);
238
249
  export {
239
- W as default
250
+ Y as default
240
251
  };
@@ -1 +1 @@
1
- (function(d,b){typeof exports=="object"&&typeof module<"u"?module.exports=b(require("grapesjs")):typeof define=="function"&&define.amd?define(["grapesjs"],b):(d=typeof globalThis<"u"?globalThis:d||self,d.StudioSdkPlugins_youtubeAssetProvider=b())})(this,function(){"use strict";var d=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(d||{}),b=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(b||{});const f="app.grapesjs.com",y="app-stage.grapesjs.com",T=[f,y,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],w="license:check:start",A="license:check:end",k=()=>typeof window<"u",L=({isDev:e,isStage:o})=>`${e?"":`https://${o?y:f}`}/api`,R=()=>{const e=k()&&window.location.hostname;return!!e&&(T.includes(e)||T.some(o=>e.endsWith(o)))};async function x({path:e,baseApiUrl:o,method:r="GET",headers:n={},params:l,body:c}){const t=`${o||L({isDev:!1,isStage:!1})}${e}`,i={method:r,headers:{"Content-Type":"application/json",...n}};c&&(i.body=JSON.stringify(c));const a=l?new URLSearchParams(l).toString():"",s=a?`?${a}`:"",u=await fetch(`${t}${s}`,i);if(!u.ok)throw new Error(`HTTP error! status: ${u.status}`);return u.json()}const v={[d.free]:0,[d.startup]:10,[d.business]:20,[d.enterprise]:30};function U(e){const o=e;return o.init=r=>n=>e(n,r),o}const I=e=>U(e);async function $({editor:e,plan:o,pluginName:r,licenseKey:n,cleanup:l}){let c="",p=!1;const t=R(),i=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),l()},a=(s={})=>{var h;const{error:u,sdkLicense:P}=s,g=(h=s.plan)==null?void 0:h.category;if(!(P||s.license)||u)i(u||"Invalid license");else if(g){const E=v[o],D=v[g];E>D&&i({pluginRequiredPlan:o,licensePlan:g})}};e.on(w,s=>{c=s==null?void 0:s.baseApiUrl,p=!0}),e.on(A,s=>{a(s)}),setTimeout(async()=>{if(!p){if(t)return;if(n){const s=await j({licenseKey:n,pluginName:r,baseApiUrl:c});s&&a(s)}else i("The `licenseKey` option not provided")}},2e3)}async function j(e){const{licenseKey:o,pluginName:r,baseApiUrl:n}=e;try{return(await x({baseApiUrl:n,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(l){return console.error("Error during SDK license check:",l),!1}}const O=e=>{const o={};for(const r of Object.keys(e)){let n=e[r];n&&(Array.isArray(n)?n=n.map(l=>l.toString()).join(","):n=n.toString(),o[r]=n)}return new URLSearchParams(o)},M=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:n="high"}=e,l=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=O(t);return`${a}?${s}`},c=t=>{var i,a,s;return((i=t[n])==null?void 0:i.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},p=t=>{const i=c(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:i,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:"YouTube Videos",search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:i}){var h;const a={maxResults:25,q:t,pageToken:i==null?void 0:i.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),u={...a,...s};u.part?u.part.includes("snippet")||u.part.push("snippet"):u.part=["snippet"];const g=await(await fetch(l(u))).json();return(h=g.items)!=null&&h.length?{items:g.items.map(p),nextPageCustomData:{token:g.nextPageToken},isLastPage:!g.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:i})=>({type:"column",onClick:()=>i(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},m="youtubeAssetProvider";return I(function(e,o){const{skipVideoComponent:r}=o,n=M(o);e.runCommand(b.assetProviderAdd,{provider:n});const l="search-on-youtube",c="video";if(!r){const p=e.Components.getType(c).model.prototype;e.Components.addType(c,{model:{getYoutubeTraits(){const[t,...i]=p.getYoutubeTraits.apply(this);return[t,{id:l,type:"button",label:e.I18n.t("youtube.searchBtn"),command:()=>{e.AssetManager.open({select:a=>{e.Assets.close(),this.set({videoId:a.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...i]}}})}$({editor:e,licenseKey:o.licenseKey,plan:d.startup,pluginName:m,cleanup:()=>{if(e.runCommand(b.assetProviderRemove,{id:n.id}),!r){const p=e.Components.getType(c).model.prototype;e.Components.addType(c,{model:{getYoutubeTraits(){return p.getYoutubeTraits.apply(this).filter(t=>t.id!==l)}}})}}})})});
1
+ (function(u,b){typeof exports=="object"&&typeof module<"u"?module.exports=b(require("grapesjs")):typeof define=="function"&&define.amd?define(["grapesjs"],b):(u=typeof globalThis<"u"?globalThis:u||self,u.StudioSdkPlugins_youtubeAssetProvider=b())})(this,function(){"use strict";var u=(e=>(e.free="free",e.startup="startup",e.business="business",e.enterprise="enterprise",e))(u||{}),b=(e=>(e.toastAdd="studio:toastAdd",e.dialogOpen="studio:dialogOpen",e.dialogClose="studio:dialogClose",e.sidebarLeftSet="studio:sidebarLeft:set",e.sidebarLeftGet="studio:sidebarLeft:get",e.sidebarLeftToggle="studio:sidebarLeft:toggle",e.sidebarRightSet="studio:sidebarRight:set",e.sidebarRightGet="studio:sidebarRight:get",e.sidebarRightToggle="studio:sidebarRight:toggle",e.sidebarTopSet="studio:sidebarTop:set",e.sidebarTopGet="studio:sidebarTop:get",e.sidebarTopToggle="studio:sidebarTop:toggle",e.sidebarBottomSet="studio:sidebarBottom:set",e.sidebarBottomGet="studio:sidebarBottom:get",e.sidebarBottomToggle="studio:sidebarBottom:toggle",e.symbolAdd="studio:symbolAdd",e.symbolDetach="studio:symbolDetach",e.symbolOverride="studio:symbolOverride",e.symbolPropagateStyles="studio:propagateStyles",e.getPagesConfig="studio:getPagesConfig",e.setPagesConfig="studio:setPagesConfig",e.getPageSettings="studio:getPageSettings",e.setPageSettings="studio:setPageSettings",e.projectFiles="studio:projectFiles",e.canvasReload="studio:canvasReload",e.getBlocksPanel="studio:getBlocksPanel",e.setBlocksPanel="studio:setBlocksPanel",e.getStateContextMenu="studio:getStateContextMenu",e.setStateContextMenu="studio:setStateContextMenu",e.contextMenuComponent="studio:contextMenuComponent",e.layoutAdd="studio:layoutAdd",e.layoutRemove="studio:layoutRemove",e.layoutToggle="studio:layoutToggle",e.getStateTheme="studio:getStateTheme",e.setStateTheme="studio:setStateTheme",e.assetProviderGet="studio:assetProviderGet",e.assetProviderAdd="studio:assetProviderAdd",e.assetProviderRemove="studio:assetProviderRemove",e))(b||{});const y="app.grapesjs.com",f="app-stage.grapesjs.com",v=[y,f,"localhost","127.0.0.1",".local-credentialless.webcontainer.io",".local.webcontainer.io","-sandpack.codesandbox.io"],w="license:check:start",A="license:check:end",L=()=>typeof window<"u",k=({isDev:e,isStage:o})=>`${e?"":`https://${o?f:y}`}/api`,R=()=>{const e=L()&&window.location.hostname;return!!e&&(v.includes(e)||v.some(o=>e.endsWith(o)))};async function x({path:e,baseApiUrl:o,method:r="GET",headers:i={},params:l,body:d}){const t=`${o||k({isDev:!1,isStage:!1})}${e}`,n={method:r,headers:{"Content-Type":"application/json",...i}};d&&(n.body=JSON.stringify(d));const a=l?new URLSearchParams(l).toString():"",s=a?`?${a}`:"",c=await fetch(`${t}${s}`,n);if(!c.ok)throw new Error(`HTTP error! status: ${c.status}`);return c.json()}const T={[u.free]:0,[u.startup]:10,[u.business]:20,[u.enterprise]:30};function I(e){const o=e;return o.init=r=>i=>e(i,r),o}const U=e=>I(e);async function $({editor:e,plan:o,pluginName:r,licenseKey:i,cleanup:l}){let d="",p=!1;const t=R(),n=s=>{console.warn("Cleanup plugin:",r,"Reason:",s),l()},a=(s={})=>{var h;const{error:c,sdkLicense:P}=s,g=(h=s.plan)==null?void 0:h.category;if(!(P||s.license)||c)n(c||"Invalid license");else if(g){const D=T[o],G=T[g];D>G&&n({pluginRequiredPlan:o,licensePlan:g})}};e.on(w,s=>{d=s==null?void 0:s.baseApiUrl,p=!0}),e.on(A,s=>{a(s)}),setTimeout(async()=>{if(!p){if(t)return;if(i){const s=await j({licenseKey:i,pluginName:r,baseApiUrl:d});s&&a(s)}else n("The `licenseKey` option not provided")}},2e3)}async function j(e){const{licenseKey:o,pluginName:r,baseApiUrl:i}=e;try{return(await x({baseApiUrl:i,path:`/sdk/${o||"na"}`,method:"POST",params:{d:window.location.hostname,pn:r}})).result||{}}catch(l){return console.error("Error during SDK license check:",l),!1}}const M=e=>{const o={};for(const r of Object.keys(e)){let i=e[r];i&&(Array.isArray(i)?i=i.map(l=>l.toString()).join(","):i=i.toString(),o[r]=i)}return new URLSearchParams(o)},O=e=>{const{apiKey:o,searchParams:r,thumbnailQuality:i="high"}=e,l=(t={})=>{const a="https://www.googleapis.com/youtube/v3/search",s=M(t);return`${a}?${s}`},d=t=>{var n,a,s;return((n=t[i])==null?void 0:n.url)||((a=t.high)==null?void 0:a.url)||((s=t.medium)==null?void 0:s.url)||t.default.url},p=t=>{const n=d(t.snippet.thumbnails);return{id:t.id.videoId,src:`https://www.youtube.com/watch?v=${t.id.videoId}`,name:t.snippet.title,customData:{thumbnailUrl:n,videoItem:t}}};return{id:"youtube",types:["youtube-video"],label:({editor:t})=>t.I18n.t("youtubeAssetProvider.providerLabel"),search:{reloadOnInput:!0,debounceMs:1e3},async onLoad({searchValue:t,pageCustomData:n}){var h;const a={maxResults:25,q:t,pageToken:n==null?void 0:n.token,type:["video"],key:o},s=r==null?void 0:r({searchValue:t}),c={...a,...s};c.part?c.part.includes("snippet")||c.part.push("snippet"):c.part=["snippet"];const g=await(await fetch(l(c))).json();return(h=g.items)!=null&&h.length?{items:g.items.map(p),nextPageCustomData:{token:g.nextPageToken},isLastPage:!g.nextPageToken}:{items:[],isLastPage:!0}},itemLayout:({assetProps:t,onSelect:n})=>({type:"column",onClick:()=>n(t),htmlAttrs:{title:t.name},style:{border:"1px solid gray",borderRadius:8,overflow:"hidden",cursor:"pointer"},children:[{type:"custom",render:()=>{var a;return`<img src="${(a=t.customData)==null?void 0:a.thumbnailUrl}" alt="${t.name}" style="width: 100%; height: 100px; object-fit: cover">`}},{type:"text",content:t.name,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",paddingLeft:8,paddingRight:8}}]})}},B={youtubeAssetProvider:{searchBtn:"Search on YouTube",providerLabel:"YouTube Videos"}},m="youtubeAssetProvider";return U(function(e,o){const{skipVideoComponent:r,i18n:i={}}=o,l=O(o);e.runCommand(b.assetProviderAdd,{provider:l});const d="search-on-youtube",p="video";if(!r){const t=e.Components.getType(p).model.prototype;e.Components.addType(p,{model:{getYoutubeTraits(){const[n,...a]=t.getYoutubeTraits.apply(this);return[n,{id:d,type:"button",label:e.I18n.t("youtubeAssetProvider.searchBtn"),command:()=>{e.AssetManager.open({providerId:l.id,providers:[],types:[],select:s=>{e.Assets.close(),this.set({videoId:s.attributes.id})},content:{header:{addUrl:!1,upload:!1}}})}},...a]}}})}e.I18n.addMessages({en:B,...i}),$({editor:e,licenseKey:o.licenseKey,plan:u.startup,pluginName:m,cleanup:()=>{if(e.runCommand(b.assetProviderRemove,{id:l.id}),!r){const t=e.Components.getType(p).model.prototype;e.Components.addType(p,{model:{getYoutubeTraits(){return t.getYoutubeTraits.apply(this).filter(n=>n.id!==d)}}})}}})})});
@@ -0,0 +1,7 @@
1
+ export default i18n;
2
+ declare namespace i18n {
3
+ namespace youtubeAssetProvider {
4
+ let searchBtn: string;
5
+ let providerLabel: string;
6
+ }
7
+ }
@@ -1,3 +1,4 @@
1
+ import { Messages } from 'grapesjs';
1
2
  import { SDKPluginOptions } from '../utils';
2
3
  /**
3
4
  * https://github.com/googleapis/google-api-nodejs-client/blob/f4848c7295f887ae311c93967ee4723e336f263c/src/apis/youtube/v3.ts#L11315
@@ -238,4 +239,5 @@ export interface YoutubeAssetProviderOptions extends SDKPluginOptions {
238
239
  * @default false
239
240
  */
240
241
  skipVideoComponent?: boolean;
242
+ i18n?: Messages;
241
243
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grapesjs/studio-sdk-plugins",
3
- "version": "1.0.13",
3
+ "version": "1.0.14-rc.0",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org"
6
6
  },