@storyblok/js 2.1.6 → 2.2.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,4 +1,4 @@
1
- (function(d,m){typeof exports=="object"&&typeof module<"u"?m(exports):typeof define=="function"&&define.amd?define(["exports"],m):(d=typeof globalThis<"u"?globalThis:d||self,m(d.storyblok={}))})(this,function(d){"use strict";let m=!1;const R=[],_=n=>new Promise((e,t)=>{if(typeof window>"u"||(window.storyblokRegisterEvent=r=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}m?r():R.push(r)},document.getElementById("storyblok-javascript-bridge")))return;const s=document.createElement("script");s.async=!0,s.src=n,s.id="storyblok-javascript-bridge",s.onerror=r=>t(r),s.onload=r=>{R.forEach(i=>i()),m=!0,e(r)},document.getElementsByTagName("head")[0].appendChild(s)});var C=Object.defineProperty,O=(n,e,t)=>e in n?C(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>(O(n,typeof e!="symbol"?e+"":e,t),t);function j(n){return!(n!==n||n===1/0||n===-1/0)}function A(n,e,t){if(!j(e))throw new TypeError("Expected `limit` to be a finite number");if(!j(t))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],i=0;const o=function(){i++;const a=setTimeout(function(){i--,s.length>0&&o(),r=r.filter(function(u){return u!==a})},t);r.indexOf(a)<0&&r.push(a);const l=s.shift();l.resolve(n.apply(l.self,l.args))},c=function(...a){const l=this;return new Promise(function(u,p){s.push({resolve:u,reject:p,args:a,self:l}),i<e&&o()})};return c.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(a){a.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},c}const N=function(n,e){const t={};for(const s in n){const r=n[s];e.indexOf(s)>-1&&r!==null&&(t[s]=r)}return t},M=n=>n==="email",L=()=>({singleTag:"hr"}),z=()=>({tag:"blockquote"}),U=()=>({tag:"ul"}),q=n=>({tag:["pre",{tag:"code",attrs:n.attrs}]}),H=()=>({singleTag:"br"}),B=n=>({tag:`h${n.attrs.level}`}),D=n=>({singleTag:[{tag:"img",attrs:N(n.attrs,["src","alt","title"])}]}),F=()=>({tag:"li"}),J=()=>({tag:"ol"}),V=()=>({tag:"p"}),Y=n=>({tag:[{tag:"span",attrs:{["data-type"]:"emoji",["data-name"]:n.attrs.name,emoji:n.attrs.emoji}}]}),K=()=>({tag:"b"}),W=()=>({tag:"strike"}),G=()=>({tag:"u"}),Q=()=>({tag:"strong"}),X=()=>({tag:"code"}),Z=()=>({tag:"i"}),ee=n=>{const e={...n.attrs},{linktype:t="url"}=n.attrs;if(M(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),e.custom){for(const s in e.custom)e[s]=e.custom[s];delete e.custom}return{tag:[{tag:"a",attrs:e}]}},te=n=>({tag:[{tag:"span",attrs:n.attrs}]}),se=()=>({tag:"sub"}),re=()=>({tag:"sup"}),ie=n=>({tag:[{tag:"span",attrs:n.attrs}]}),oe=n=>{var e;return(e=n.attrs)!=null&&e.color?{tag:[{tag:"span",attrs:{style:`background-color:${n.attrs.color};`}}]}:{tag:""}},ne=n=>{var e;return(e=n.attrs)!=null&&e.color?{tag:[{tag:"span",attrs:{style:`color:${n.attrs.color}`}}]}:{tag:""}},x={nodes:{horizontal_rule:L,blockquote:z,bullet_list:U,code_block:q,hard_break:H,heading:B,image:D,list_item:F,ordered_list:J,paragraph:V,emoji:Y},marks:{bold:K,strike:W,underline:G,strong:Q,code:X,italic:Z,link:ee,styled:te,subscript:se,superscript:re,anchor:ie,highlight:oe,textStyle:ne}},ae=function(n){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},t=/[&<>"']/g,s=RegExp(t.source);return n&&s.test(n)?n.replace(t,r=>e[r]):n};class b{constructor(e){h(this,"marks"),h(this,"nodes"),e||(e=x),this.marks=e.marks||[],this.nodes=e.nodes||[]}addNode(e,t){this.nodes[e]=t}addMark(e,t){this.marks[e]=t}render(e,t={optimizeImages:!1}){if(e&&e.content&&Array.isArray(e.content)){let s="";return e.content.forEach(r=>{s+=this.renderNode(r)}),t.optimizeImages?this.optimizeImages(s,t.optimizeImages):s}return console.warn(`The render method must receive an Object with a "content" field.
1
+ (function(d,m){typeof exports=="object"&&typeof module<"u"?m(exports):typeof define=="function"&&define.amd?define(["exports"],m):(d=typeof globalThis<"u"?globalThis:d||self,m(d.storyblok={}))})(this,function(d){"use strict";let m=!1;const R=[],_=n=>new Promise((e,t)=>{if(typeof window>"u"||(window.storyblokRegisterEvent=r=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}m?r():R.push(r)},document.getElementById("storyblok-javascript-bridge")))return;const s=document.createElement("script");s.async=!0,s.src=n,s.id="storyblok-javascript-bridge",s.onerror=r=>t(r),s.onload=r=>{R.forEach(i=>i()),m=!0,e(r)},document.getElementsByTagName("head")[0].appendChild(s)});var O=Object.defineProperty,A=(n,e,t)=>e in n?O(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>(A(n,typeof e!="symbol"?e+"":e,t),t);function j(n){return!(n!==n||n===1/0||n===-1/0)}function N(n,e,t){if(!j(e))throw new TypeError("Expected `limit` to be a finite number");if(!j(t))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],i=0;const o=function(){i++;const a=setTimeout(function(){i--,s.length>0&&o(),r=r.filter(function(u){return u!==a})},t);r.indexOf(a)<0&&r.push(a);const l=s.shift();l.resolve(n.apply(l.self,l.args))},c=function(...a){const l=this;return new Promise(function(u,p){s.push({resolve:u,reject:p,args:a,self:l}),i<e&&o()})};return c.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(a){a.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},c}const M=function(n,e){const t={};for(const s in n){const r=n[s];e.indexOf(s)>-1&&r!==null&&(t[s]=r)}return t},L=n=>n==="email",z=()=>({singleTag:"hr"}),U=()=>({tag:"blockquote"}),q=()=>({tag:"ul"}),H=n=>({tag:["pre",{tag:"code",attrs:n.attrs}]}),B=()=>({singleTag:"br"}),D=n=>({tag:`h${n.attrs.level}`}),J=n=>({singleTag:[{tag:"img",attrs:M(n.attrs,["src","alt","title"])}]}),F=()=>({tag:"li"}),V=()=>({tag:"ol"}),Y=()=>({tag:"p"}),K=n=>({tag:[{tag:"span",attrs:{["data-type"]:"emoji",["data-name"]:n.attrs.name,emoji:n.attrs.emoji}}]}),W=()=>({tag:"b"}),G=()=>({tag:"strike"}),Q=()=>({tag:"u"}),X=()=>({tag:"strong"}),Z=()=>({tag:"code"}),ee=()=>({tag:"i"}),te=n=>{const e={...n.attrs},{linktype:t="url"}=n.attrs;if(L(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),e.custom){for(const s in e.custom)e[s]=e.custom[s];delete e.custom}return{tag:[{tag:"a",attrs:e}]}},se=n=>({tag:[{tag:"span",attrs:n.attrs}]}),re=()=>({tag:"sub"}),ie=()=>({tag:"sup"}),ne=n=>({tag:[{tag:"span",attrs:n.attrs}]}),oe=n=>{var e;return(e=n.attrs)!=null&&e.color?{tag:[{tag:"span",attrs:{style:`background-color:${n.attrs.color};`}}]}:{tag:""}},ae=n=>{var e;return(e=n.attrs)!=null&&e.color?{tag:[{tag:"span",attrs:{style:`color:${n.attrs.color}`}}]}:{tag:""}},S={nodes:{horizontal_rule:z,blockquote:U,bullet_list:q,code_block:H,hard_break:B,heading:D,image:J,list_item:F,ordered_list:V,paragraph:Y,emoji:K},marks:{bold:W,strike:G,underline:Q,strong:X,code:Z,italic:ee,link:te,styled:se,subscript:re,superscript:ie,anchor:ne,highlight:oe,textStyle:ae}},le=function(n){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},t=/[&<>"']/g,s=RegExp(t.source);return n&&s.test(n)?n.replace(t,r=>e[r]):n};class b{constructor(e){h(this,"marks"),h(this,"nodes"),e||(e=S),this.marks=e.marks||[],this.nodes=e.nodes||[]}addNode(e,t){this.nodes[e]=t}addMark(e,t){this.marks[e]=t}render(e,t={optimizeImages:!1}){if(e&&e.content&&Array.isArray(e.content)){let s="";return e.content.forEach(r=>{s+=this.renderNode(r)}),t.optimizeImages?this.optimizeImages(s,t.optimizeImages):s}return console.warn(`The render method must receive an Object with a "content" field.
2
2
  The "content" field must be an array of nodes as the type ISbRichtext.
3
3
  ISbRichtext:
4
4
  content?: ISbRichtext[]
@@ -21,6 +21,4 @@
21
21
  }
22
22
  ],
23
23
  type: 'doc'
24
- }`),""}optimizeImages(e,t){let s=0,r=0,i="",o="";typeof t!="boolean"&&(typeof t.width=="number"&&t.width>0&&(i+=`width="${t.width}" `,s=t.width),typeof t.height=="number"&&t.height>0&&(i+=`height="${t.height}" `,r=t.height),(t.loading==="lazy"||t.loading==="eager")&&(i+=`loading="${t.loading}" `),typeof t.class=="string"&&t.class.length>0&&(i+=`class="${t.class}" `),t.filters&&(typeof t.filters.blur=="number"&&t.filters.blur>=0&&t.filters.blur<=100&&(o+=`:blur(${t.filters.blur})`),typeof t.filters.brightness=="number"&&t.filters.brightness>=-100&&t.filters.brightness<=100&&(o+=`:brightness(${t.filters.brightness})`),t.filters.fill&&(t.filters.fill.match(/[0-9A-Fa-f]{6}/g)||t.filters.fill==="transparent")&&(o+=`:fill(${t.filters.fill})`),t.filters.format&&["webp","png","jpeg"].includes(t.filters.format)&&(o+=`:format(${t.filters.format})`),typeof t.filters.grayscale=="boolean"&&t.filters.grayscale&&(o+=":grayscale()"),typeof t.filters.quality=="number"&&t.filters.quality>=0&&t.filters.quality<=100&&(o+=`:quality(${t.filters.quality})`),t.filters.rotate&&[90,180,270].includes(t.filters.rotate)&&(o+=`:rotate(${t.filters.rotate})`),o.length>0&&(o="/filters"+o))),i.length>0&&(e=e.replace(/<img/g,`<img ${i.trim()}`));const c=s>0||r>0||o.length>0?`${s}x${r}${o}`:"";return e=e.replace(/a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g,`a.storyblok.com/f/$1/$2.$3/m/${c}`),typeof t!="boolean"&&(t.sizes||t.srcset)&&(e=e.replace(/<img.*?src=["|'](.*?)["|']/g,a=>{var l,u;const p=a.match(/a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g);if(p&&p.length>0){const f={srcset:(l=t.srcset)==null?void 0:l.map(g=>{if(typeof g=="number")return`//${p}/m/${g}x0${o} ${g}w`;if(typeof g=="object"&&g.length===2){let T=0,P=0;return typeof g[0]=="number"&&(T=g[0]),typeof g[1]=="number"&&(P=g[1]),`//${p}/m/${T}x${P}${o} ${T}w`}}).join(", "),sizes:(u=t.sizes)==null?void 0:u.map(g=>g).join(", ")};let $="";return f.srcset&&($+=`srcset="${f.srcset}" `),f.sizes&&($+=`sizes="${f.sizes}" `),a.replace(/<img/g,`<img ${$.trim()}`)}return a})),e}renderNode(e){const t=[];e.marks&&e.marks.forEach(r=>{const i=this.getMatchingMark(r);i&&i.tag!==""&&t.push(this.renderOpeningTag(i.tag))});const s=this.getMatchingNode(e);return s&&s.tag&&t.push(this.renderOpeningTag(s.tag)),e.content?e.content.forEach(r=>{t.push(this.renderNode(r))}):e.text?t.push(ae(e.text)):s&&s.singleTag?t.push(this.renderTag(s.singleTag," /")):s&&s.html?t.push(s.html):e.type==="emoji"&&t.push(this.renderEmoji(e)),s&&s.tag&&t.push(this.renderClosingTag(s.tag)),e.marks&&e.marks.slice(0).reverse().forEach(r=>{const i=this.getMatchingMark(r);i&&i.tag!==""&&t.push(this.renderClosingTag(i.tag))}),t.join("")}renderTag(e,t){return e.constructor===String?`<${e}${t}>`:e.map(s=>{if(s.constructor===String)return`<${s}${t}>`;{let r=`<${s.tag}`;if(s.attrs)for(const i in s.attrs){const o=s.attrs[i];o!==null&&(r+=` ${i}="${o}"`)}return`${r}${t}>`}}).join("")}renderOpeningTag(e){return this.renderTag(e,"")}renderClosingTag(e){return e.constructor===String?`</${e}>`:e.slice(0).reverse().map(t=>t.constructor===String?`</${t}>`:`</${t.tag}>`).join("")}getMatchingNode(e){const t=this.nodes[e.type];if(typeof t=="function")return t(e)}getMatchingMark(e){const t=this.marks[e.type];if(typeof t=="function")return t(e)}renderEmoji(e){if(e.attrs.emoji)return e.attrs.emoji;const t=[{tag:"img",attrs:{src:e.attrs.fallbackImage,draggable:"false",loading:"lazy",align:"absmiddle"}}];return this.renderTag(t," /")}}class v{constructor(){h(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(e,t=25,s=1)=>({...e,per_page:t,page:s})),h(this,"delay",e=>new Promise(t=>setTimeout(t,e))),h(this,"arrayFrom",(e=0,t)=>[...Array(e)].map(t)),h(this,"range",(e=0,t=e)=>{const s=Math.abs(t-e)||0,r=e<t?1:-1;return this.arrayFrom(s,(i,o)=>o*r+e)}),h(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),h(this,"flatMap",(e=[],t)=>e.map(t).reduce((s,r)=>[...s,...r],[]))}stringify(e,t,s){const r=[];for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;const o=e[i],c=s?"":encodeURIComponent(i);let a;typeof o=="object"?a=this.stringify(o,t?t+encodeURIComponent("["+c+"]"):c,Array.isArray(o)):a=(t?t+encodeURIComponent("["+c+"]"):c)+"="+encodeURIComponent(o),r.push(a)}return r.join("&")}getRegionURL(e){const t="api.storyblok.com",s="api-us.storyblok.com",r="app.storyblokchina.cn";switch(e){case"us":return s;case"cn":return r;default:return t}}}class le{constructor(e){h(this,"baseURL"),h(this,"timeout"),h(this,"headers"),h(this,"responseInterceptor"),h(this,"fetch"),h(this,"ejectInterceptor"),h(this,"url"),h(this,"parameters"),this.baseURL=e.baseURL,this.headers=e.headers||new Headers,this.timeout=e!=null&&e.timeout?e.timeout*1e3:0,this.responseInterceptor=e.responseInterceptor,this.fetch=(...t)=>e.fetch?e.fetch(...t):fetch(...t),this.ejectInterceptor=!1,this.url="",this.parameters={}}get(e,t){return this.url=e,this.parameters=t,this._methodHandler("get")}post(e,t){return this.url=e,this.parameters=t,this._methodHandler("post")}put(e,t){return this.url=e,this.parameters=t,this._methodHandler("put")}delete(e,t){return this.url=e,this.parameters=t,this._methodHandler("delete")}async _responseHandler(e){const t=[],s={data:{},headers:{},status:0,statusText:""};e.status!==204&&await e.json().then(r=>{s.data=r});for(const r of e.headers.entries())t[r[0]]=r[1];return s.headers={...t},s.status=e.status,s.statusText=e.statusText,s}async _methodHandler(e){let t=`${this.baseURL}${this.url}`,s=null;if(e==="get"){const a=new v;t=`${this.baseURL}${this.url}?${a.stringify(this.parameters)}`}else s=JSON.stringify(this.parameters);const r=new URL(t),i=new AbortController,{signal:o}=i;let c;this.timeout&&(c=setTimeout(()=>i.abort(),this.timeout));try{const a=await this.fetch(`${r}`,{method:e,headers:this.headers,body:s,signal:o});this.timeout&&clearTimeout(c);const l=await this._responseHandler(a);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(l)):this._statusHandler(l)}catch(a){return{message:a}}}eject(){this.ejectInterceptor=!0}_statusHandler(e){const t=/20[0-6]/g;return new Promise((s,r)=>{if(t.test(`${e.status}`))return s(e);const i={message:new Error(e.statusText),status:e.status,response:Array.isArray(e.data)?e.data[0]:e.data.error||e.data.slug};r(i)})}}let k={};const y={};class ce{constructor(e,t){if(h(this,"client"),h(this,"maxRetries"),h(this,"throttle"),h(this,"accessToken"),h(this,"cache"),h(this,"helpers"),h(this,"resolveCounter"),h(this,"relations"),h(this,"links"),h(this,"richTextResolver"),h(this,"resolveNestedRelations"),!t){const i=new v().getRegionURL,o=e.https===!1?"http":"https";e.oauthToken?t=`${o}://${i(e.region)}/v1`:t=`${o}://${i(e.region)}/v2`}const s=new Headers;s.set("Content-Type","application/json"),s.set("Accept","application/json"),s.forEach((i,o)=>{e.headers&&e.headers[o]&&s.set(o,e.headers[o])});let r=5;e.oauthToken&&(s.set("Authorization",e.oauthToken),r=3),e.rateLimit&&(r=e.rateLimit),e.richTextSchema?this.richTextResolver=new b(e.richTextSchema):this.richTextResolver=new b,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries||5,this.throttle=A(this.throttledRequest,r,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new v,this.resolveCounter=0,this.resolveNestedRelations=e.resolveNestedRelations||!0,this.client=new le({baseURL:t,timeout:e.timeout||0,headers:s,responseInterceptor:e.responseInterceptor,fetch:e.fetch})}setComponentResolver(e){this.richTextResolver.addNode("blok",t=>{let s="";return t.attrs.body&&t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})}parseParams(e){return e.version||(e.version="published"),e.token||(e.token=this.getToken()),e.cv||(e.cv=y[e.token]),Array.isArray(e.resolve_relations)&&(e.resolve_relations=e.resolve_relations.join(",")),e}factoryParamOptions(e,t){return this.helpers.isCDNUrl(e)?this.parseParams(t):t}makeRequest(e,t,s,r){const i=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,s,r));return this.cacheResponse(e,i)}get(e,t){t||(t={});const s=`/${e}`,r=this.factoryParamOptions(s,t);return this.cacheResponse(s,r)}async getAll(e,t,s){const r=(t==null?void 0:t.per_page)||25,i=`/${e}`,o=i.split("/"),c=s||o[o.length-1],a=1,l=await this.makeRequest(i,t,r,a),u=l.total?Math.ceil(l.total/r):1,p=await this.helpers.asyncMap(this.helpers.range(a,u),f=>this.makeRequest(i,t,r,f+1));return this.helpers.flatMap([l,...p],f=>Object.values(f.data[c]))}post(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("post",s,t))}put(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("put",s,t))}delete(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("delete",s,t))}getStories(e){return this.get("cdn/stories",e)}getStory(e,t){return this.get(`cdn/stories/${e}`,t)}getToken(){return this.accessToken}ejectInterceptor(){this.client.eject()}_cleanCopy(e){return JSON.parse(JSON.stringify(e))}_insertLinks(e,t,s){const r=e[t];r&&r.fieldtype=="multilink"&&r.linktype=="story"&&typeof r.id=="string"&&this.links[s][r.id]?r.story=this._cleanCopy(this.links[s][r.id]):r&&r.linktype==="story"&&typeof r.uuid=="string"&&this.links[s][r.uuid]&&(r.story=this._cleanCopy(this.links[s][r.uuid]))}_insertRelations(e,t,s,r){if(s.indexOf(`${e.component}.${t}`)>-1){if(typeof e[t]=="string")this.relations[r][e[t]]&&(e[t]=this._cleanCopy(this.relations[r][e[t]]));else if(e[t]&&e[t].constructor===Array){const i=[];e[t].forEach(o=>{this.relations[r][o]&&i.push(this._cleanCopy(this.relations[r][o]))}),e[t]=i}}}iterateTree(e,t,s){const r=i=>{if(i!=null){if(i.constructor===Array)for(let o=0;o<i.length;o++)r(i[o]);else if(i.constructor===Object){if(i._stopResolving)return;for(const o in i)(i.component&&i._uid||i.type==="link")&&(this._insertRelations(i,o,t,s),this._insertLinks(i,o,s)),r(i[o])}}};r(e.content)}async resolveLinks(e,t,s){let r=[];if(e.link_uuids){const i=e.link_uuids.length,o=[],c=50;for(let a=0;a<i;a+=c){const l=Math.min(i,a+c);o.push(e.link_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:c,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{r.push(l)})}else r=e.links;r.forEach(i=>{this.links[s][i.uuid]={...i,_stopResolving:!0}})}async resolveRelations(e,t,s){let r=[];if(e.rel_uuids){const i=e.rel_uuids.length,o=[],c=50;for(let a=0;a<i;a+=c){const l=Math.min(i,a+c);o.push(e.rel_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:c,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{r.push(l)})}else r=e.rels;r&&r.length>0&&r.forEach(i=>{this.relations[s][i.uuid]={...i,_stopResolving:!0}})}async resolveStories(e,t,s){var r,i;let o=[];if(this.links[s]={},this.relations[s]={},typeof t.resolve_relations<"u"&&t.resolve_relations.length>0&&(typeof t.resolve_relations=="string"&&(o=t.resolve_relations.split(",")),await this.resolveRelations(e,t,s)),t.resolve_links&&["1","story","url"].indexOf(t.resolve_links)>-1&&((r=e.links)!=null&&r.length||(i=e.link_uuids)!=null&&i.length)&&await this.resolveLinks(e,t,s),this.resolveNestedRelations)for(const c in this.relations[s])this.iterateTree(this.relations[s][c],o,s);e.story?this.iterateTree(e.story,o,s):e.stories.forEach(c=>{this.iterateTree(c,o,s)}),delete this.links[s],delete this.relations[s]}async cacheResponse(e,t,s){const r=this.helpers.stringify({url:e,params:t}),i=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&await this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const o=await i.get(r);if(o)return Promise.resolve(o)}return new Promise((o,c)=>{try{(async()=>{var a;try{const l=await this.throttle("get",e,t);let u={data:l.data,headers:l.headers};if((a=l.headers)!=null&&a["per-page"]&&(u=Object.assign({},u,{perPage:l.headers["per-page"]?parseInt(l.headers["per-page"]):0,total:l.headers["per-page"]?parseInt(l.headers.total):0})),l.status!=200)return c(l);if(u.data.story||u.data.stories){const p=this.resolveCounter=++this.resolveCounter%1e3;await this.resolveStories(u.data,t,`${p}`)}return t.version==="published"&&e!="/cdn/spaces/me"&&await i.set(r,u),u.data.cv&&t.token&&(t.version=="draft"&&y[t.token]!=u.data.cv&&await this.flushCache(),y[t.token]=u.data.cv),o(u)}catch(l){return c(l)}})()}catch{}})}throttledRequest(e,t,s){return this.client[e](t,s)}cacheVersions(){return y}cacheVersion(){return y[this.accessToken]}setCacheVersion(e){this.accessToken&&(y[this.accessToken]=e)}cacheProvider(){switch(this.cache.type){case"memory":return{get(e){return Promise.resolve(k[e])},getAll(){return Promise.resolve(k)},set(e,t){return k[e]=t,Promise.resolve(void 0)},flush(){return k={},Promise.resolve(void 0)}};case"custom":if(this.cache.custom)return this.cache.custom;default:return{get(){return Promise.resolve(void 0)},getAll(){return Promise.resolve(void 0)},set(){return Promise.resolve(void 0)},flush(){return Promise.resolve(void 0)}}}}async flushCache(){return await this.cacheProvider().flush(),this}}const he=(n={})=>{const{apiOptions:e}=n;if(!e.accessToken){console.error("You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication");return}return{storyblokApi:new ce(e)}},ue=n=>{if(typeof n!="object"||typeof n._editable>"u")return{};const e=JSON.parse(n._editable.replace(/^<!--#storyblok#/,"").replace(/-->$/,""));return{"data-blok-c":JSON.stringify(e),"data-blok-uid":e.id+"-"+e.uid}};let w;const S="https://app.storyblok.com/f/storyblok-v2-latest.js",E=(n,e,t={})=>{var c;const r=!(typeof window>"u")&&typeof window.storyblokRegisterEvent<"u",o=+new URL((c=window.location)==null?void 0:c.href).searchParams.get("_storyblok")===n;if(!(!r||!o)){if(!n){console.warn("Story ID is not defined. Please provide a valid ID.");return}window.storyblokRegisterEvent(()=>{new window.StoryblokBridge(t).on(["input","published","change"],l=>{l.action==="input"&&l.story.id===n?e(l.story):(l.action==="change"||l.action==="published")&&l.storyId===n&&window.location.reload()})})}},de=(n={})=>{var u,p;const{bridge:e,accessToken:t,use:s=[],apiOptions:r={},richText:i={}}=n;r.accessToken=r.accessToken||t;const o={bridge:e,apiOptions:r};let c={};s.forEach(f=>{c={...c,...f(o)}});const l=!(typeof window>"u")&&((p=(u=window.location)==null?void 0:u.search)==null?void 0:p.includes("_storyblok_tk"));return e!==!1&&l&&_(S),w=new b(i.schema),i.resolver&&I(w,i.resolver),c},I=(n,e)=>{n.addNode("blok",t=>{let s="";return t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})},pe=(n,e,t)=>{let s=t||w;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return n===""?"":n?(e&&(s=new b(e.schema),e.resolver&&I(s,e.resolver)),s.render(n)):(console.warn(`${n} is not a valid Richtext object. This might be because the value of the richtext field is empty.
25
-
26
- For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`),"")},ge=()=>_(S);d.RichTextResolver=b,d.RichTextSchema=x,d.apiPlugin=he,d.loadStoryblokBridge=ge,d.registerStoryblokBridge=E,d.renderRichText=pe,d.storyblokEditable=ue,d.storyblokInit=de,d.useStoryblokBridge=E,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
24
+ }`),""}optimizeImages(e,t){let s=0,r=0,i="",o="";typeof t!="boolean"&&(typeof t.width=="number"&&t.width>0&&(i+=`width="${t.width}" `,s=t.width),typeof t.height=="number"&&t.height>0&&(i+=`height="${t.height}" `,r=t.height),(t.loading==="lazy"||t.loading==="eager")&&(i+=`loading="${t.loading}" `),typeof t.class=="string"&&t.class.length>0&&(i+=`class="${t.class}" `),t.filters&&(typeof t.filters.blur=="number"&&t.filters.blur>=0&&t.filters.blur<=100&&(o+=`:blur(${t.filters.blur})`),typeof t.filters.brightness=="number"&&t.filters.brightness>=-100&&t.filters.brightness<=100&&(o+=`:brightness(${t.filters.brightness})`),t.filters.fill&&(t.filters.fill.match(/[0-9A-Fa-f]{6}/g)||t.filters.fill==="transparent")&&(o+=`:fill(${t.filters.fill})`),t.filters.format&&["webp","png","jpeg"].includes(t.filters.format)&&(o+=`:format(${t.filters.format})`),typeof t.filters.grayscale=="boolean"&&t.filters.grayscale&&(o+=":grayscale()"),typeof t.filters.quality=="number"&&t.filters.quality>=0&&t.filters.quality<=100&&(o+=`:quality(${t.filters.quality})`),t.filters.rotate&&[90,180,270].includes(t.filters.rotate)&&(o+=`:rotate(${t.filters.rotate})`),o.length>0&&(o="/filters"+o))),i.length>0&&(e=e.replace(/<img/g,`<img ${i.trim()}`));const c=s>0||r>0||o.length>0?`${s}x${r}${o}`:"";return e=e.replace(/a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g,`a.storyblok.com/f/$1/$2.$3/m/${c}`),typeof t!="boolean"&&(t.sizes||t.srcset)&&(e=e.replace(/<img.*?src=["|'](.*?)["|']/g,a=>{var l,u;const p=a.match(/a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g);if(p&&p.length>0){const f={srcset:(l=t.srcset)==null?void 0:l.map(g=>{if(typeof g=="number")return`//${p}/m/${g}x0${o} ${g}w`;if(typeof g=="object"&&g.length===2){let $=0,C=0;return typeof g[0]=="number"&&($=g[0]),typeof g[1]=="number"&&(C=g[1]),`//${p}/m/${$}x${C}${o} ${$}w`}}).join(", "),sizes:(u=t.sizes)==null?void 0:u.map(g=>g).join(", ")};let T="";return f.srcset&&(T+=`srcset="${f.srcset}" `),f.sizes&&(T+=`sizes="${f.sizes}" `),a.replace(/<img/g,`<img ${T.trim()}`)}return a})),e}renderNode(e){const t=[];e.marks&&e.marks.forEach(r=>{const i=this.getMatchingMark(r);i&&i.tag!==""&&t.push(this.renderOpeningTag(i.tag))});const s=this.getMatchingNode(e);return s&&s.tag&&t.push(this.renderOpeningTag(s.tag)),e.content?e.content.forEach(r=>{t.push(this.renderNode(r))}):e.text?t.push(le(e.text)):s&&s.singleTag?t.push(this.renderTag(s.singleTag," /")):s&&s.html?t.push(s.html):e.type==="emoji"&&t.push(this.renderEmoji(e)),s&&s.tag&&t.push(this.renderClosingTag(s.tag)),e.marks&&e.marks.slice(0).reverse().forEach(r=>{const i=this.getMatchingMark(r);i&&i.tag!==""&&t.push(this.renderClosingTag(i.tag))}),t.join("")}renderTag(e,t){return e.constructor===String?`<${e}${t}>`:e.map(s=>{if(s.constructor===String)return`<${s}${t}>`;{let r=`<${s.tag}`;if(s.attrs)for(const i in s.attrs){const o=s.attrs[i];o!==null&&(r+=` ${i}="${o}"`)}return`${r}${t}>`}}).join("")}renderOpeningTag(e){return this.renderTag(e,"")}renderClosingTag(e){return e.constructor===String?`</${e}>`:e.slice(0).reverse().map(t=>t.constructor===String?`</${t}>`:`</${t.tag}>`).join("")}getMatchingNode(e){const t=this.nodes[e.type];if(typeof t=="function")return t(e)}getMatchingMark(e){const t=this.marks[e.type];if(typeof t=="function")return t(e)}renderEmoji(e){if(e.attrs.emoji)return e.attrs.emoji;const t=[{tag:"img",attrs:{src:e.attrs.fallbackImage,draggable:"false",loading:"lazy",align:"absmiddle"}}];return this.renderTag(t," /")}}class v{constructor(){h(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(e,t=25,s=1)=>({...e,per_page:t,page:s})),h(this,"delay",e=>new Promise(t=>setTimeout(t,e))),h(this,"arrayFrom",(e=0,t)=>[...Array(e)].map(t)),h(this,"range",(e=0,t=e)=>{const s=Math.abs(t-e)||0,r=e<t?1:-1;return this.arrayFrom(s,(i,o)=>o*r+e)}),h(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),h(this,"flatMap",(e=[],t)=>e.map(t).reduce((s,r)=>[...s,...r],[]))}stringify(e,t,s){const r=[];for(const i in e){if(!Object.prototype.hasOwnProperty.call(e,i))continue;const o=e[i],c=s?"":encodeURIComponent(i);let a;typeof o=="object"?a=this.stringify(o,t?t+encodeURIComponent("["+c+"]"):c,Array.isArray(o)):a=(t?t+encodeURIComponent("["+c+"]"):c)+"="+encodeURIComponent(o),r.push(a)}return r.join("&")}getRegionURL(e){const t="api.storyblok.com",s="api-us.storyblok.com",r="app.storyblokchina.cn";switch(e){case"us":return s;case"cn":return r;default:return t}}}class ce{constructor(e){h(this,"baseURL"),h(this,"timeout"),h(this,"headers"),h(this,"responseInterceptor"),h(this,"fetch"),h(this,"ejectInterceptor"),h(this,"url"),h(this,"parameters"),this.baseURL=e.baseURL,this.headers=e.headers||new Headers,this.timeout=e!=null&&e.timeout?e.timeout*1e3:0,this.responseInterceptor=e.responseInterceptor,this.fetch=(...t)=>e.fetch?e.fetch(...t):fetch(...t),this.ejectInterceptor=!1,this.url="",this.parameters={}}get(e,t){return this.url=e,this.parameters=t,this._methodHandler("get")}post(e,t){return this.url=e,this.parameters=t,this._methodHandler("post")}put(e,t){return this.url=e,this.parameters=t,this._methodHandler("put")}delete(e,t){return this.url=e,this.parameters=t,this._methodHandler("delete")}async _responseHandler(e){const t=[],s={data:{},headers:{},status:0,statusText:""};e.status!==204&&await e.json().then(r=>{s.data=r});for(const r of e.headers.entries())t[r[0]]=r[1];return s.headers={...t},s.status=e.status,s.statusText=e.statusText,s}async _methodHandler(e){let t=`${this.baseURL}${this.url}`,s=null;if(e==="get"){const a=new v;t=`${this.baseURL}${this.url}?${a.stringify(this.parameters)}`}else s=JSON.stringify(this.parameters);const r=new URL(t),i=new AbortController,{signal:o}=i;let c;this.timeout&&(c=setTimeout(()=>i.abort(),this.timeout));try{const a=await this.fetch(`${r}`,{method:e,headers:this.headers,body:s,signal:o});this.timeout&&clearTimeout(c);const l=await this._responseHandler(a);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(l)):this._statusHandler(l)}catch(a){return{message:a}}}eject(){this.ejectInterceptor=!0}_statusHandler(e){const t=/20[0-6]/g;return new Promise((s,r)=>{if(t.test(`${e.status}`))return s(e);const i={message:new Error(e.statusText),status:e.status,response:Array.isArray(e.data)?e.data[0]:e.data.error||e.data.slug};r(i)})}}let k={};const y={};class he{constructor(e,t){if(h(this,"client"),h(this,"maxRetries"),h(this,"throttle"),h(this,"accessToken"),h(this,"cache"),h(this,"helpers"),h(this,"resolveCounter"),h(this,"relations"),h(this,"links"),h(this,"richTextResolver"),h(this,"resolveNestedRelations"),!t){const i=new v().getRegionURL,o=e.https===!1?"http":"https";e.oauthToken?t=`${o}://${i(e.region)}/v1`:t=`${o}://${i(e.region)}/v2`}const s=new Headers;s.set("Content-Type","application/json"),s.set("Accept","application/json"),s.forEach((i,o)=>{e.headers&&e.headers[o]&&s.set(o,e.headers[o])});let r=5;e.oauthToken&&(s.set("Authorization",e.oauthToken),r=3),e.rateLimit&&(r=e.rateLimit),e.richTextSchema?this.richTextResolver=new b(e.richTextSchema):this.richTextResolver=new b,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries||5,this.throttle=N(this.throttledRequest,r,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new v,this.resolveCounter=0,this.resolveNestedRelations=e.resolveNestedRelations||!0,this.client=new ce({baseURL:t,timeout:e.timeout||0,headers:s,responseInterceptor:e.responseInterceptor,fetch:e.fetch})}setComponentResolver(e){this.richTextResolver.addNode("blok",t=>{let s="";return t.attrs.body&&t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})}parseParams(e){return e.version||(e.version="published"),e.token||(e.token=this.getToken()),e.cv||(e.cv=y[e.token]),Array.isArray(e.resolve_relations)&&(e.resolve_relations=e.resolve_relations.join(",")),e}factoryParamOptions(e,t){return this.helpers.isCDNUrl(e)?this.parseParams(t):t}makeRequest(e,t,s,r){const i=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,s,r));return this.cacheResponse(e,i)}get(e,t){t||(t={});const s=`/${e}`,r=this.factoryParamOptions(s,t);return this.cacheResponse(s,r)}async getAll(e,t,s){const r=(t==null?void 0:t.per_page)||25,i=`/${e}`,o=i.split("/"),c=s||o[o.length-1],a=1,l=await this.makeRequest(i,t,r,a),u=l.total?Math.ceil(l.total/r):1,p=await this.helpers.asyncMap(this.helpers.range(a,u),f=>this.makeRequest(i,t,r,f+1));return this.helpers.flatMap([l,...p],f=>Object.values(f.data[c]))}post(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("post",s,t))}put(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("put",s,t))}delete(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("delete",s,t))}getStories(e){return this.get("cdn/stories",e)}getStory(e,t){return this.get(`cdn/stories/${e}`,t)}getToken(){return this.accessToken}ejectInterceptor(){this.client.eject()}_cleanCopy(e){return JSON.parse(JSON.stringify(e))}_insertLinks(e,t,s){const r=e[t];r&&r.fieldtype=="multilink"&&r.linktype=="story"&&typeof r.id=="string"&&this.links[s][r.id]?r.story=this._cleanCopy(this.links[s][r.id]):r&&r.linktype==="story"&&typeof r.uuid=="string"&&this.links[s][r.uuid]&&(r.story=this._cleanCopy(this.links[s][r.uuid]))}_insertRelations(e,t,s,r){if(s.indexOf(`${e.component}.${t}`)>-1){if(typeof e[t]=="string")this.relations[r][e[t]]&&(e[t]=this._cleanCopy(this.relations[r][e[t]]));else if(e[t]&&e[t].constructor===Array){const i=[];e[t].forEach(o=>{this.relations[r][o]&&i.push(this._cleanCopy(this.relations[r][o]))}),e[t]=i}}}iterateTree(e,t,s){const r=i=>{if(i!=null){if(i.constructor===Array)for(let o=0;o<i.length;o++)r(i[o]);else if(i.constructor===Object){if(i._stopResolving)return;for(const o in i)(i.component&&i._uid||i.type==="link")&&(this._insertRelations(i,o,t,s),this._insertLinks(i,o,s)),r(i[o])}}};r(e.content)}async resolveLinks(e,t,s){let r=[];if(e.link_uuids){const i=e.link_uuids.length,o=[],c=50;for(let a=0;a<i;a+=c){const l=Math.min(i,a+c);o.push(e.link_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:c,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{r.push(l)})}else r=e.links;r.forEach(i=>{this.links[s][i.uuid]={...i,_stopResolving:!0}})}async resolveRelations(e,t,s){let r=[];if(e.rel_uuids){const i=e.rel_uuids.length,o=[],c=50;for(let a=0;a<i;a+=c){const l=Math.min(i,a+c);o.push(e.rel_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:c,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{r.push(l)})}else r=e.rels;r&&r.length>0&&r.forEach(i=>{this.relations[s][i.uuid]={...i,_stopResolving:!0}})}async resolveStories(e,t,s){var r,i;let o=[];if(this.links[s]={},this.relations[s]={},typeof t.resolve_relations<"u"&&t.resolve_relations.length>0&&(typeof t.resolve_relations=="string"&&(o=t.resolve_relations.split(",")),await this.resolveRelations(e,t,s)),t.resolve_links&&["1","story","url"].indexOf(t.resolve_links)>-1&&((r=e.links)!=null&&r.length||(i=e.link_uuids)!=null&&i.length)&&await this.resolveLinks(e,t,s),this.resolveNestedRelations)for(const c in this.relations[s])this.iterateTree(this.relations[s][c],o,s);e.story?this.iterateTree(e.story,o,s):e.stories.forEach(c=>{this.iterateTree(c,o,s)}),delete this.links[s],delete this.relations[s]}async cacheResponse(e,t,s){const r=this.helpers.stringify({url:e,params:t}),i=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&await this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const o=await i.get(r);if(o)return Promise.resolve(o)}return new Promise((o,c)=>{try{(async()=>{var a;try{const l=await this.throttle("get",e,t);let u={data:l.data,headers:l.headers};if((a=l.headers)!=null&&a["per-page"]&&(u=Object.assign({},u,{perPage:l.headers["per-page"]?parseInt(l.headers["per-page"]):0,total:l.headers["per-page"]?parseInt(l.headers.total):0})),l.status!=200)return c(l);if(u.data.story||u.data.stories){const p=this.resolveCounter=++this.resolveCounter%1e3;await this.resolveStories(u.data,t,`${p}`)}return t.version==="published"&&e!="/cdn/spaces/me"&&await i.set(r,u),u.data.cv&&t.token&&(t.version=="draft"&&y[t.token]!=u.data.cv&&await this.flushCache(),y[t.token]=u.data.cv),o(u)}catch(l){return c(l)}})()}catch{}})}throttledRequest(e,t,s){return this.client[e](t,s)}cacheVersions(){return y}cacheVersion(){return y[this.accessToken]}setCacheVersion(e){this.accessToken&&(y[this.accessToken]=e)}cacheProvider(){switch(this.cache.type){case"memory":return{get(e){return Promise.resolve(k[e])},getAll(){return Promise.resolve(k)},set(e,t){return k[e]=t,Promise.resolve(void 0)},flush(){return k={},Promise.resolve(void 0)}};case"custom":if(this.cache.custom)return this.cache.custom;default:return{get(){return Promise.resolve(void 0)},getAll(){return Promise.resolve(void 0)},set(){return Promise.resolve(void 0)},flush(){return Promise.resolve(void 0)}}}}async flushCache(){return await this.cacheProvider().flush(),this}}const ue=(n={})=>{const{apiOptions:e}=n;if(!e.accessToken){console.error("You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication");return}return{storyblokApi:new he(e)}},de=n=>{if(typeof n!="object"||typeof n._editable>"u")return{};const e=JSON.parse(n._editable.replace(/^<!--#storyblok#/,"").replace(/-->$/,""));return{"data-blok-c":JSON.stringify(e),"data-blok-uid":e.id+"-"+e.uid}};let w;const E="https://app.storyblok.com/f/storyblok-v2-latest.js",x=(n,e,t={})=>{var c;const r=!(typeof window>"u")&&typeof window.storyblokRegisterEvent<"u",o=+new URL((c=window.location)==null?void 0:c.href).searchParams.get("_storyblok")===n;if(!(!r||!o)){if(!n){console.warn("Story ID is not defined. Please provide a valid ID.");return}window.storyblokRegisterEvent(()=>{new window.StoryblokBridge(t).on(["input","published","change"],l=>{l.action==="input"&&l.story.id===n?e(l.story):(l.action==="change"||l.action==="published")&&l.storyId===n&&window.location.reload()})})}},pe=(n={})=>{var u,p;const{bridge:e,accessToken:t,use:s=[],apiOptions:r={},richText:i={}}=n;r.accessToken=r.accessToken||t;const o={bridge:e,apiOptions:r};let c={};s.forEach(f=>{c={...c,...f(o)}});const l=!(typeof window>"u")&&((p=(u=window.location)==null?void 0:u.search)==null?void 0:p.includes("_storyblok_tk"));return e!==!1&&l&&_(E),w=new b(i.schema),i.resolver&&I(w,i.resolver),c},I=(n,e)=>{n.addNode("blok",t=>{let s="";return t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})},P=n=>{var e,t;return!n||((e=n==null?void 0:n.content)==null?void 0:e[0].type)!=="blok"&&!((t=n==null?void 0:n.content)!=null&&t[0].content)},ge=(n,e,t)=>{let s=t||w;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return P(n)?"":(e&&(s=new b(e.schema),e.resolver&&I(s,e.resolver)),s.render(n))},fe=()=>_(E);d.RichTextResolver=b,d.RichTextSchema=S,d.apiPlugin=ue,d.isRichTextEmpty=P,d.loadStoryblokBridge=fe,d.registerStoryblokBridge=x,d.renderRichText=ge,d.storyblokEditable=de,d.storyblokInit=pe,d.useStoryblokBridge=x,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
@@ -1,5 +1,5 @@
1
1
  let R = !1;
2
- const T = [], j = (n) => new Promise((e, t) => {
2
+ const T = [], j = (o) => new Promise((e, t) => {
3
3
  if (typeof window > "u" || (window.storyblokRegisterEvent = (r) => {
4
4
  if (window.location === window.parent.location) {
5
5
  console.warn("You are not in Draft Mode or in the Visual Editor.");
@@ -9,40 +9,40 @@ const T = [], j = (n) => new Promise((e, t) => {
9
9
  }, document.getElementById("storyblok-javascript-bridge")))
10
10
  return;
11
11
  const s = document.createElement("script");
12
- s.async = !0, s.src = n, s.id = "storyblok-javascript-bridge", s.onerror = (r) => t(r), s.onload = (r) => {
12
+ s.async = !0, s.src = o, s.id = "storyblok-javascript-bridge", s.onerror = (r) => t(r), s.onload = (r) => {
13
13
  T.forEach((i) => i()), R = !0, e(r);
14
14
  }, document.getElementsByTagName("head")[0].appendChild(s);
15
15
  });
16
- var I = Object.defineProperty, P = (n, e, t) => e in n ? I(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t, h = (n, e, t) => (P(n, typeof e != "symbol" ? e + "" : e, t), t);
17
- function _(n) {
18
- return !(n !== n || n === 1 / 0 || n === -1 / 0);
16
+ var I = Object.defineProperty, P = (o, e, t) => e in o ? I(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t, h = (o, e, t) => (P(o, typeof e != "symbol" ? e + "" : e, t), t);
17
+ function _(o) {
18
+ return !(o !== o || o === 1 / 0 || o === -1 / 0);
19
19
  }
20
- function S(n, e, t) {
20
+ function S(o, e, t) {
21
21
  if (!_(e))
22
22
  throw new TypeError("Expected `limit` to be a finite number");
23
23
  if (!_(t))
24
24
  throw new TypeError("Expected `interval` to be a finite number");
25
25
  const s = [];
26
26
  let r = [], i = 0;
27
- const o = function() {
27
+ const n = function() {
28
28
  i++;
29
29
  const a = setTimeout(function() {
30
- i--, s.length > 0 && o(), r = r.filter(function(u) {
30
+ i--, s.length > 0 && n(), r = r.filter(function(u) {
31
31
  return u !== a;
32
32
  });
33
33
  }, t);
34
34
  r.indexOf(a) < 0 && r.push(a);
35
35
  const l = s.shift();
36
- l.resolve(n.apply(l.self, l.args));
36
+ l.resolve(o.apply(l.self, l.args));
37
37
  }, c = function(...a) {
38
38
  const l = this;
39
- return new Promise(function(u, d) {
39
+ return new Promise(function(u, p) {
40
40
  s.push({
41
41
  resolve: u,
42
- reject: d,
42
+ reject: p,
43
43
  args: a,
44
44
  self: l
45
- }), i < e && o();
45
+ }), i < e && n();
46
46
  });
47
47
  };
48
48
  return c.abort = function() {
@@ -53,36 +53,36 @@ function S(n, e, t) {
53
53
  }), s.length = 0;
54
54
  }, c;
55
55
  }
56
- const C = function(n, e) {
56
+ const C = function(o, e) {
57
57
  const t = {};
58
- for (const s in n) {
59
- const r = n[s];
58
+ for (const s in o) {
59
+ const r = o[s];
60
60
  e.indexOf(s) > -1 && r !== null && (t[s] = r);
61
61
  }
62
62
  return t;
63
- }, O = (n) => n === "email", A = () => ({
63
+ }, O = (o) => o === "email", A = () => ({
64
64
  singleTag: "hr"
65
65
  }), N = () => ({
66
66
  tag: "blockquote"
67
67
  }), L = () => ({
68
68
  tag: "ul"
69
- }), M = (n) => ({
69
+ }), M = (o) => ({
70
70
  tag: [
71
71
  "pre",
72
72
  {
73
73
  tag: "code",
74
- attrs: n.attrs
74
+ attrs: o.attrs
75
75
  }
76
76
  ]
77
77
  }), z = () => ({
78
78
  singleTag: "br"
79
- }), U = (n) => ({
80
- tag: `h${n.attrs.level}`
81
- }), q = (n) => ({
79
+ }), U = (o) => ({
80
+ tag: `h${o.attrs.level}`
81
+ }), q = (o) => ({
82
82
  singleTag: [
83
83
  {
84
84
  tag: "img",
85
- attrs: C(n.attrs, ["src", "alt", "title"])
85
+ attrs: C(o.attrs, ["src", "alt", "title"])
86
86
  }
87
87
  ]
88
88
  }), H = () => ({
@@ -91,18 +91,18 @@ const C = function(n, e) {
91
91
  tag: "ol"
92
92
  }), D = () => ({
93
93
  tag: "p"
94
- }), F = (n) => ({
94
+ }), J = (o) => ({
95
95
  tag: [
96
96
  {
97
97
  tag: "span",
98
98
  attrs: {
99
99
  ["data-type"]: "emoji",
100
- ["data-name"]: n.attrs.name,
101
- emoji: n.attrs.emoji
100
+ ["data-name"]: o.attrs.name,
101
+ emoji: o.attrs.emoji
102
102
  }
103
103
  }
104
104
  ]
105
- }), J = () => ({
105
+ }), F = () => ({
106
106
  tag: "b"
107
107
  }), V = () => ({
108
108
  tag: "strike"
@@ -114,8 +114,8 @@ const C = function(n, e) {
114
114
  tag: "code"
115
115
  }), G = () => ({
116
116
  tag: "i"
117
- }), Q = (n) => {
118
- const e = { ...n.attrs }, { linktype: t = "url" } = n.attrs;
117
+ }), Q = (o) => {
118
+ const e = { ...o.attrs }, { linktype: t = "url" } = o.attrs;
119
119
  if (O(t) && (e.href = `mailto:${e.href}`), e.anchor && (e.href = `${e.href}#${e.anchor}`, delete e.anchor), e.custom) {
120
120
  for (const s in e.custom)
121
121
  e[s] = e.custom[s];
@@ -129,46 +129,46 @@ const C = function(n, e) {
129
129
  }
130
130
  ]
131
131
  };
132
- }, X = (n) => ({
132
+ }, X = (o) => ({
133
133
  tag: [
134
134
  {
135
135
  tag: "span",
136
- attrs: n.attrs
136
+ attrs: o.attrs
137
137
  }
138
138
  ]
139
139
  }), Z = () => ({
140
140
  tag: "sub"
141
141
  }), ee = () => ({
142
142
  tag: "sup"
143
- }), te = (n) => ({
143
+ }), te = (o) => ({
144
144
  tag: [
145
145
  {
146
146
  tag: "span",
147
- attrs: n.attrs
147
+ attrs: o.attrs
148
148
  }
149
149
  ]
150
- }), se = (n) => {
150
+ }), se = (o) => {
151
151
  var e;
152
- return (e = n.attrs) != null && e.color ? {
152
+ return (e = o.attrs) != null && e.color ? {
153
153
  tag: [
154
154
  {
155
155
  tag: "span",
156
156
  attrs: {
157
- style: `background-color:${n.attrs.color};`
157
+ style: `background-color:${o.attrs.color};`
158
158
  }
159
159
  }
160
160
  ]
161
161
  } : {
162
162
  tag: ""
163
163
  };
164
- }, re = (n) => {
164
+ }, re = (o) => {
165
165
  var e;
166
- return (e = n.attrs) != null && e.color ? {
166
+ return (e = o.attrs) != null && e.color ? {
167
167
  tag: [
168
168
  {
169
169
  tag: "span",
170
170
  attrs: {
171
- style: `color:${n.attrs.color}`
171
+ style: `color:${o.attrs.color}`
172
172
  }
173
173
  }
174
174
  ]
@@ -187,10 +187,10 @@ const C = function(n, e) {
187
187
  list_item: H,
188
188
  ordered_list: B,
189
189
  paragraph: D,
190
- emoji: F
190
+ emoji: J
191
191
  },
192
192
  marks: {
193
- bold: J,
193
+ bold: F,
194
194
  strike: V,
195
195
  underline: Y,
196
196
  strong: K,
@@ -204,7 +204,7 @@ const C = function(n, e) {
204
204
  highlight: se,
205
205
  textStyle: re
206
206
  }
207
- }, oe = function(n) {
207
+ }, oe = function(o) {
208
208
  const e = {
209
209
  "&": "&amp;",
210
210
  "<": "&lt;",
@@ -212,7 +212,7 @@ const C = function(n, e) {
212
212
  '"': "&quot;",
213
213
  "'": "&#39;"
214
214
  }, t = /[&<>"']/g, s = RegExp(t.source);
215
- return n && s.test(n) ? n.replace(t, (r) => e[r]) : n;
215
+ return o && s.test(o) ? o.replace(t, (r) => e[r]) : o;
216
216
  };
217
217
  class y {
218
218
  constructor(e) {
@@ -259,28 +259,28 @@ class y {
259
259
  ), "";
260
260
  }
261
261
  optimizeImages(e, t) {
262
- let s = 0, r = 0, i = "", o = "";
263
- typeof t != "boolean" && (typeof t.width == "number" && t.width > 0 && (i += `width="${t.width}" `, s = t.width), typeof t.height == "number" && t.height > 0 && (i += `height="${t.height}" `, r = t.height), (t.loading === "lazy" || t.loading === "eager") && (i += `loading="${t.loading}" `), typeof t.class == "string" && t.class.length > 0 && (i += `class="${t.class}" `), t.filters && (typeof t.filters.blur == "number" && t.filters.blur >= 0 && t.filters.blur <= 100 && (o += `:blur(${t.filters.blur})`), typeof t.filters.brightness == "number" && t.filters.brightness >= -100 && t.filters.brightness <= 100 && (o += `:brightness(${t.filters.brightness})`), t.filters.fill && (t.filters.fill.match(/[0-9A-Fa-f]{6}/g) || t.filters.fill === "transparent") && (o += `:fill(${t.filters.fill})`), t.filters.format && ["webp", "png", "jpeg"].includes(t.filters.format) && (o += `:format(${t.filters.format})`), typeof t.filters.grayscale == "boolean" && t.filters.grayscale && (o += ":grayscale()"), typeof t.filters.quality == "number" && t.filters.quality >= 0 && t.filters.quality <= 100 && (o += `:quality(${t.filters.quality})`), t.filters.rotate && [90, 180, 270].includes(t.filters.rotate) && (o += `:rotate(${t.filters.rotate})`), o.length > 0 && (o = "/filters" + o))), i.length > 0 && (e = e.replace(/<img/g, `<img ${i.trim()}`));
264
- const c = s > 0 || r > 0 || o.length > 0 ? `${s}x${r}${o}` : "";
262
+ let s = 0, r = 0, i = "", n = "";
263
+ typeof t != "boolean" && (typeof t.width == "number" && t.width > 0 && (i += `width="${t.width}" `, s = t.width), typeof t.height == "number" && t.height > 0 && (i += `height="${t.height}" `, r = t.height), (t.loading === "lazy" || t.loading === "eager") && (i += `loading="${t.loading}" `), typeof t.class == "string" && t.class.length > 0 && (i += `class="${t.class}" `), t.filters && (typeof t.filters.blur == "number" && t.filters.blur >= 0 && t.filters.blur <= 100 && (n += `:blur(${t.filters.blur})`), typeof t.filters.brightness == "number" && t.filters.brightness >= -100 && t.filters.brightness <= 100 && (n += `:brightness(${t.filters.brightness})`), t.filters.fill && (t.filters.fill.match(/[0-9A-Fa-f]{6}/g) || t.filters.fill === "transparent") && (n += `:fill(${t.filters.fill})`), t.filters.format && ["webp", "png", "jpeg"].includes(t.filters.format) && (n += `:format(${t.filters.format})`), typeof t.filters.grayscale == "boolean" && t.filters.grayscale && (n += ":grayscale()"), typeof t.filters.quality == "number" && t.filters.quality >= 0 && t.filters.quality <= 100 && (n += `:quality(${t.filters.quality})`), t.filters.rotate && [90, 180, 270].includes(t.filters.rotate) && (n += `:rotate(${t.filters.rotate})`), n.length > 0 && (n = "/filters" + n))), i.length > 0 && (e = e.replace(/<img/g, `<img ${i.trim()}`));
264
+ const c = s > 0 || r > 0 || n.length > 0 ? `${s}x${r}${n}` : "";
265
265
  return e = e.replace(
266
266
  /a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g,
267
267
  `a.storyblok.com/f/$1/$2.$3/m/${c}`
268
268
  ), typeof t != "boolean" && (t.sizes || t.srcset) && (e = e.replace(/<img.*?src=["|'](.*?)["|']/g, (a) => {
269
269
  var l, u;
270
- const d = a.match(
270
+ const p = a.match(
271
271
  /a.storyblok.com\/f\/(\d+)\/([^.]+)\.(gif|jpg|jpeg|png|tif|tiff|bmp)/g
272
272
  );
273
- if (d && d.length > 0) {
273
+ if (p && p.length > 0) {
274
274
  const g = {
275
- srcset: (l = t.srcset) == null ? void 0 : l.map((p) => {
276
- if (typeof p == "number")
277
- return `//${d}/m/${p}x0${o} ${p}w`;
278
- if (typeof p == "object" && p.length === 2) {
275
+ srcset: (l = t.srcset) == null ? void 0 : l.map((d) => {
276
+ if (typeof d == "number")
277
+ return `//${p}/m/${d}x0${n} ${d}w`;
278
+ if (typeof d == "object" && d.length === 2) {
279
279
  let v = 0, $ = 0;
280
- return typeof p[0] == "number" && (v = p[0]), typeof p[1] == "number" && ($ = p[1]), `//${d}/m/${v}x${$}${o} ${v}w`;
280
+ return typeof d[0] == "number" && (v = d[0]), typeof d[1] == "number" && ($ = d[1]), `//${p}/m/${v}x${$}${n} ${v}w`;
281
281
  }
282
282
  }).join(", "),
283
- sizes: (u = t.sizes) == null ? void 0 : u.map((p) => p).join(", ")
283
+ sizes: (u = t.sizes) == null ? void 0 : u.map((d) => d).join(", ")
284
284
  };
285
285
  let b = "";
286
286
  return g.srcset && (b += `srcset="${g.srcset}" `), g.sizes && (b += `sizes="${g.sizes}" `), a.replace(/<img/g, `<img ${b.trim()}`);
@@ -310,8 +310,8 @@ class y {
310
310
  let r = `<${s.tag}`;
311
311
  if (s.attrs)
312
312
  for (const i in s.attrs) {
313
- const o = s.attrs[i];
314
- o !== null && (r += ` ${i}="${o}"`);
313
+ const n = s.attrs[i];
314
+ n !== null && (r += ` ${i}="${n}"`);
315
315
  }
316
316
  return `${r}${t}>`;
317
317
  }
@@ -358,7 +358,7 @@ class k {
358
358
  page: s
359
359
  })), h(this, "delay", (e) => new Promise((t) => setTimeout(t, e))), h(this, "arrayFrom", (e = 0, t) => [...Array(e)].map(t)), h(this, "range", (e = 0, t = e) => {
360
360
  const s = Math.abs(t - e) || 0, r = e < t ? 1 : -1;
361
- return this.arrayFrom(s, (i, o) => o * r + e);
361
+ return this.arrayFrom(s, (i, n) => n * r + e);
362
362
  }), h(this, "asyncMap", async (e, t) => Promise.all(e.map(t))), h(this, "flatMap", (e = [], t) => e.map(t).reduce((s, r) => [...s, ...r], []));
363
363
  }
364
364
  /**
@@ -373,13 +373,13 @@ class k {
373
373
  for (const i in e) {
374
374
  if (!Object.prototype.hasOwnProperty.call(e, i))
375
375
  continue;
376
- const o = e[i], c = s ? "" : encodeURIComponent(i);
376
+ const n = e[i], c = s ? "" : encodeURIComponent(i);
377
377
  let a;
378
- typeof o == "object" ? a = this.stringify(
379
- o,
378
+ typeof n == "object" ? a = this.stringify(
379
+ n,
380
380
  t ? t + encodeURIComponent("[" + c + "]") : c,
381
- Array.isArray(o)
382
- ) : a = (t ? t + encodeURIComponent("[" + c + "]") : c) + "=" + encodeURIComponent(o), r.push(a);
381
+ Array.isArray(n)
382
+ ) : a = (t ? t + encodeURIComponent("[" + c + "]") : c) + "=" + encodeURIComponent(n), r.push(a);
383
383
  }
384
384
  return r.join("&");
385
385
  }
@@ -445,7 +445,7 @@ class ne {
445
445
  )}`;
446
446
  } else
447
447
  s = JSON.stringify(this.parameters);
448
- const r = new URL(t), i = new AbortController(), { signal: o } = i;
448
+ const r = new URL(t), i = new AbortController(), { signal: n } = i;
449
449
  let c;
450
450
  this.timeout && (c = setTimeout(() => i.abort(), this.timeout));
451
451
  try {
@@ -453,7 +453,7 @@ class ne {
453
453
  method: e,
454
454
  headers: this.headers,
455
455
  body: s,
456
- signal: o
456
+ signal: n
457
457
  });
458
458
  this.timeout && clearTimeout(c);
459
459
  const l = await this._responseHandler(a);
@@ -491,12 +491,12 @@ class ae {
491
491
  */
492
492
  constructor(e, t) {
493
493
  if (h(this, "client"), h(this, "maxRetries"), h(this, "throttle"), h(this, "accessToken"), h(this, "cache"), h(this, "helpers"), h(this, "resolveCounter"), h(this, "relations"), h(this, "links"), h(this, "richTextResolver"), h(this, "resolveNestedRelations"), !t) {
494
- const i = new k().getRegionURL, o = e.https === !1 ? "http" : "https";
495
- e.oauthToken ? t = `${o}://${i(e.region)}/v1` : t = `${o}://${i(e.region)}/v2`;
494
+ const i = new k().getRegionURL, n = e.https === !1 ? "http" : "https";
495
+ e.oauthToken ? t = `${n}://${i(e.region)}/v1` : t = `${n}://${i(e.region)}/v2`;
496
496
  }
497
497
  const s = new Headers();
498
- s.set("Content-Type", "application/json"), s.set("Accept", "application/json"), s.forEach((i, o) => {
499
- e.headers && e.headers[o] && s.set(o, e.headers[o]);
498
+ s.set("Content-Type", "application/json"), s.set("Accept", "application/json"), s.forEach((i, n) => {
499
+ e.headers && e.headers[n] && s.set(n, e.headers[n]);
500
500
  });
501
501
  let r = 5;
502
502
  e.oauthToken && (s.set("Authorization", e.oauthToken), r = 3), e.rateLimit && (r = e.rateLimit), e.richTextSchema ? this.richTextResolver = new y(e.richTextSchema) : this.richTextResolver = new y(), e.componentResolver && this.setComponentResolver(e.componentResolver), this.maxRetries = e.maxRetries || 5, this.throttle = S(this.throttledRequest, r, 1e3), this.accessToken = e.accessToken || "", this.relations = {}, this.links = {}, this.cache = e.cache || { clear: "manual" }, this.helpers = new k(), this.resolveCounter = 0, this.resolveNestedRelations = e.resolveNestedRelations || !0, this.client = new ne({
@@ -536,12 +536,12 @@ class ae {
536
536
  return this.cacheResponse(s, r);
537
537
  }
538
538
  async getAll(e, t, s) {
539
- const r = (t == null ? void 0 : t.per_page) || 25, i = `/${e}`, o = i.split("/"), c = s || o[o.length - 1], a = 1, l = await this.makeRequest(i, t, r, a), u = l.total ? Math.ceil(l.total / r) : 1, d = await this.helpers.asyncMap(
539
+ const r = (t == null ? void 0 : t.per_page) || 25, i = `/${e}`, n = i.split("/"), c = s || n[n.length - 1], a = 1, l = await this.makeRequest(i, t, r, a), u = l.total ? Math.ceil(l.total / r) : 1, p = await this.helpers.asyncMap(
540
540
  this.helpers.range(a, u),
541
541
  (g) => this.makeRequest(i, t, r, g + 1)
542
542
  );
543
543
  return this.helpers.flatMap(
544
- [l, ...d],
544
+ [l, ...p],
545
545
  (g) => Object.values(g.data[c])
546
546
  );
547
547
  }
@@ -584,8 +584,8 @@ class ae {
584
584
  ));
585
585
  else if (e[t] && e[t].constructor === Array) {
586
586
  const i = [];
587
- e[t].forEach((o) => {
588
- this.relations[r][o] && i.push(this._cleanCopy(this.relations[r][o]));
587
+ e[t].forEach((n) => {
588
+ this.relations[r][n] && i.push(this._cleanCopy(this.relations[r][n]));
589
589
  }), e[t] = i;
590
590
  }
591
591
  }
@@ -594,22 +594,22 @@ class ae {
594
594
  const r = (i) => {
595
595
  if (i != null) {
596
596
  if (i.constructor === Array)
597
- for (let o = 0; o < i.length; o++)
598
- r(i[o]);
597
+ for (let n = 0; n < i.length; n++)
598
+ r(i[n]);
599
599
  else if (i.constructor === Object) {
600
600
  if (i._stopResolving)
601
601
  return;
602
- for (const o in i)
602
+ for (const n in i)
603
603
  (i.component && i._uid || i.type === "link") && (this._insertRelations(
604
604
  i,
605
- o,
605
+ n,
606
606
  t,
607
607
  s
608
608
  ), this._insertLinks(
609
609
  i,
610
- o,
610
+ n,
611
611
  s
612
- )), r(i[o]);
612
+ )), r(i[n]);
613
613
  }
614
614
  }
615
615
  };
@@ -618,17 +618,17 @@ class ae {
618
618
  async resolveLinks(e, t, s) {
619
619
  let r = [];
620
620
  if (e.link_uuids) {
621
- const i = e.link_uuids.length, o = [], c = 50;
621
+ const i = e.link_uuids.length, n = [], c = 50;
622
622
  for (let a = 0; a < i; a += c) {
623
623
  const l = Math.min(i, a + c);
624
- o.push(e.link_uuids.slice(a, l));
624
+ n.push(e.link_uuids.slice(a, l));
625
625
  }
626
- for (let a = 0; a < o.length; a++)
626
+ for (let a = 0; a < n.length; a++)
627
627
  (await this.getStories({
628
628
  per_page: c,
629
629
  language: t.language,
630
630
  version: t.version,
631
- by_uuids: o[a].join(",")
631
+ by_uuids: n[a].join(",")
632
632
  })).data.stories.forEach(
633
633
  (l) => {
634
634
  r.push(l);
@@ -646,17 +646,17 @@ class ae {
646
646
  async resolveRelations(e, t, s) {
647
647
  let r = [];
648
648
  if (e.rel_uuids) {
649
- const i = e.rel_uuids.length, o = [], c = 50;
649
+ const i = e.rel_uuids.length, n = [], c = 50;
650
650
  for (let a = 0; a < i; a += c) {
651
651
  const l = Math.min(i, a + c);
652
- o.push(e.rel_uuids.slice(a, l));
652
+ n.push(e.rel_uuids.slice(a, l));
653
653
  }
654
- for (let a = 0; a < o.length; a++)
654
+ for (let a = 0; a < n.length; a++)
655
655
  (await this.getStories({
656
656
  per_page: c,
657
657
  language: t.language,
658
658
  version: t.version,
659
- by_uuids: o[a].join(",")
659
+ by_uuids: n[a].join(",")
660
660
  })).data.stories.forEach((l) => {
661
661
  r.push(l);
662
662
  });
@@ -671,26 +671,26 @@ class ae {
671
671
  }
672
672
  async resolveStories(e, t, s) {
673
673
  var r, i;
674
- let o = [];
675
- if (this.links[s] = {}, this.relations[s] = {}, typeof t.resolve_relations < "u" && t.resolve_relations.length > 0 && (typeof t.resolve_relations == "string" && (o = t.resolve_relations.split(",")), await this.resolveRelations(e, t, s)), t.resolve_links && ["1", "story", "url"].indexOf(t.resolve_links) > -1 && ((r = e.links) != null && r.length || (i = e.link_uuids) != null && i.length) && await this.resolveLinks(e, t, s), this.resolveNestedRelations)
674
+ let n = [];
675
+ if (this.links[s] = {}, this.relations[s] = {}, typeof t.resolve_relations < "u" && t.resolve_relations.length > 0 && (typeof t.resolve_relations == "string" && (n = t.resolve_relations.split(",")), await this.resolveRelations(e, t, s)), t.resolve_links && ["1", "story", "url"].indexOf(t.resolve_links) > -1 && ((r = e.links) != null && r.length || (i = e.link_uuids) != null && i.length) && await this.resolveLinks(e, t, s), this.resolveNestedRelations)
676
676
  for (const c in this.relations[s])
677
677
  this.iterateTree(
678
678
  this.relations[s][c],
679
- o,
679
+ n,
680
680
  s
681
681
  );
682
- e.story ? this.iterateTree(e.story, o, s) : e.stories.forEach((c) => {
683
- this.iterateTree(c, o, s);
682
+ e.story ? this.iterateTree(e.story, n, s) : e.stories.forEach((c) => {
683
+ this.iterateTree(c, n, s);
684
684
  }), delete this.links[s], delete this.relations[s];
685
685
  }
686
686
  async cacheResponse(e, t, s) {
687
687
  const r = this.helpers.stringify({ url: e, params: t }), i = this.cacheProvider();
688
688
  if (this.cache.clear === "auto" && t.version === "draft" && await this.flushCache(), t.version === "published" && e != "/cdn/spaces/me") {
689
- const o = await i.get(r);
690
- if (o)
691
- return Promise.resolve(o);
689
+ const n = await i.get(r);
690
+ if (n)
691
+ return Promise.resolve(n);
692
692
  }
693
- return new Promise((o, c) => {
693
+ return new Promise((n, c) => {
694
694
  try {
695
695
  (async () => {
696
696
  var a;
@@ -703,10 +703,10 @@ class ae {
703
703
  })), l.status != 200)
704
704
  return c(l);
705
705
  if (u.data.story || u.data.stories) {
706
- const d = this.resolveCounter = ++this.resolveCounter % 1e3;
707
- await this.resolveStories(u.data, t, `${d}`);
706
+ const p = this.resolveCounter = ++this.resolveCounter % 1e3;
707
+ await this.resolveStories(u.data, t, `${p}`);
708
708
  }
709
- return t.version === "published" && e != "/cdn/spaces/me" && await i.set(r, u), u.data.cv && t.token && (t.version == "draft" && f[t.token] != u.data.cv && await this.flushCache(), f[t.token] = u.data.cv), o(u);
709
+ return t.version === "published" && e != "/cdn/spaces/me" && await i.set(r, u), u.data.cv && t.token && (t.version == "draft" && f[t.token] != u.data.cv && await this.flushCache(), f[t.token] = u.data.cv), n(u);
710
710
  } catch (l) {
711
711
  return c(l);
712
712
  }
@@ -768,8 +768,8 @@ class ae {
768
768
  return await this.cacheProvider().flush(), this;
769
769
  }
770
770
  }
771
- const le = (n = {}) => {
772
- const { apiOptions: e } = n;
771
+ const ce = (o = {}) => {
772
+ const { apiOptions: e } = o;
773
773
  if (!e.accessToken) {
774
774
  console.error(
775
775
  "You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication"
@@ -777,11 +777,11 @@ const le = (n = {}) => {
777
777
  return;
778
778
  }
779
779
  return { storyblokApi: new ae(e) };
780
- }, ce = (n) => {
781
- if (typeof n != "object" || typeof n._editable > "u")
780
+ }, he = (o) => {
781
+ if (typeof o != "object" || typeof o._editable > "u")
782
782
  return {};
783
783
  const e = JSON.parse(
784
- n._editable.replace(/^<!--#storyblok#/, "").replace(/-->$/, "")
784
+ o._editable.replace(/^<!--#storyblok#/, "").replace(/-->$/, "")
785
785
  );
786
786
  return {
787
787
  "data-blok-c": JSON.stringify(e),
@@ -789,41 +789,41 @@ const le = (n = {}) => {
789
789
  };
790
790
  };
791
791
  let w;
792
- const x = "https://app.storyblok.com/f/storyblok-v2-latest.js", he = (n, e, t = {}) => {
792
+ const x = "https://app.storyblok.com/f/storyblok-v2-latest.js", ue = (o, e, t = {}) => {
793
793
  var c;
794
- const r = !(typeof window > "u") && typeof window.storyblokRegisterEvent < "u", o = +new URL((c = window.location) == null ? void 0 : c.href).searchParams.get(
794
+ const r = !(typeof window > "u") && typeof window.storyblokRegisterEvent < "u", n = +new URL((c = window.location) == null ? void 0 : c.href).searchParams.get(
795
795
  "_storyblok"
796
- ) === n;
797
- if (!(!r || !o)) {
798
- if (!n) {
796
+ ) === o;
797
+ if (!(!r || !n)) {
798
+ if (!o) {
799
799
  console.warn("Story ID is not defined. Please provide a valid ID.");
800
800
  return;
801
801
  }
802
802
  window.storyblokRegisterEvent(() => {
803
803
  new window.StoryblokBridge(t).on(["input", "published", "change"], (l) => {
804
- l.action === "input" && l.story.id === n ? e(l.story) : (l.action === "change" || l.action === "published") && l.storyId === n && window.location.reload();
804
+ l.action === "input" && l.story.id === o ? e(l.story) : (l.action === "change" || l.action === "published") && l.storyId === o && window.location.reload();
805
805
  });
806
806
  });
807
807
  }
808
- }, ue = (n = {}) => {
809
- var u, d;
808
+ }, pe = (o = {}) => {
809
+ var u, p;
810
810
  const {
811
811
  bridge: e,
812
812
  accessToken: t,
813
813
  use: s = [],
814
814
  apiOptions: r = {},
815
815
  richText: i = {}
816
- } = n;
816
+ } = o;
817
817
  r.accessToken = r.accessToken || t;
818
- const o = { bridge: e, apiOptions: r };
818
+ const n = { bridge: e, apiOptions: r };
819
819
  let c = {};
820
820
  s.forEach((g) => {
821
- c = { ...c, ...g(o) };
821
+ c = { ...c, ...g(n) };
822
822
  });
823
- const l = !(typeof window > "u") && ((d = (u = window.location) == null ? void 0 : u.search) == null ? void 0 : d.includes("_storyblok_tk"));
823
+ const l = !(typeof window > "u") && ((p = (u = window.location) == null ? void 0 : u.search) == null ? void 0 : p.includes("_storyblok_tk"));
824
824
  return e !== !1 && l && j(x), w = new y(i.schema), i.resolver && E(w, i.resolver), c;
825
- }, E = (n, e) => {
826
- n.addNode("blok", (t) => {
825
+ }, E = (o, e) => {
826
+ o.addNode("blok", (t) => {
827
827
  let s = "";
828
828
  return t.attrs.body.forEach((r) => {
829
829
  s += e(r.component, r);
@@ -831,7 +831,10 @@ const x = "https://app.storyblok.com/f/storyblok-v2-latest.js", he = (n, e, t =
831
831
  html: s
832
832
  };
833
833
  });
834
- }, de = (n, e, t) => {
834
+ }, le = (o) => {
835
+ var e, t;
836
+ return !o || ((e = o == null ? void 0 : o.content) == null ? void 0 : e[0].type) !== "blok" && !((t = o == null ? void 0 : o.content) != null && t[0].content);
837
+ }, de = (o, e, t) => {
835
838
  let s = t || w;
836
839
  if (!s) {
837
840
  console.error(
@@ -839,18 +842,17 @@ const x = "https://app.storyblok.com/f/storyblok-v2-latest.js", he = (n, e, t =
839
842
  );
840
843
  return;
841
844
  }
842
- return n === "" ? "" : n ? (e && (s = new y(e.schema), e.resolver && E(s, e.resolver)), s.render(n)) : (console.warn(`${n} is not a valid Richtext object. This might be because the value of the richtext field is empty.
843
-
844
- For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`), "");
845
- }, pe = () => j(x);
845
+ return le(o) ? "" : (e && (s = new y(e.schema), e.resolver && E(s, e.resolver)), s.render(o));
846
+ }, ge = () => j(x);
846
847
  export {
847
848
  y as RichTextResolver,
848
849
  ie as RichTextSchema,
849
- le as apiPlugin,
850
- pe as loadStoryblokBridge,
851
- he as registerStoryblokBridge,
850
+ ce as apiPlugin,
851
+ le as isRichTextEmpty,
852
+ ge as loadStoryblokBridge,
853
+ ue as registerStoryblokBridge,
852
854
  de as renderRichText,
853
- ce as storyblokEditable,
854
- ue as storyblokInit,
855
- he as useStoryblokBridge
855
+ he as storyblokEditable,
856
+ pe as storyblokInit,
857
+ ue as useStoryblokBridge
856
858
  };
@@ -2,7 +2,8 @@ import { SbSDKOptions, StoryblokBridgeConfigV2, ISbStoryData, SbInitResult, ISbR
2
2
  import { RichtextResolver } from "storyblok-js-client";
3
3
  export declare const useStoryblokBridge: <T extends StoryblokComponentType<string> = any>(id: Number, cb: (newStory: ISbStoryData<T>) => void, options?: StoryblokBridgeConfigV2) => void;
4
4
  export declare const storyblokInit: (pluginOptions?: SbSDKOptions) => SbInitResult;
5
- export declare const renderRichText: (data: ISbRichtext, options?: SbRichTextOptions, resolverInstance?: RichtextResolver) => string;
5
+ export declare const isRichTextEmpty: (data?: ISbRichtext) => boolean;
6
+ export declare const renderRichText: (data?: ISbRichtext, options?: SbRichTextOptions, resolverInstance?: RichtextResolver) => string;
6
7
  export declare const loadStoryblokBridge: () => Promise<unknown>;
7
8
  export { useStoryblokBridge as registerStoryblokBridge };
8
9
  export { default as apiPlugin } from "./modules/api";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storyblok/js",
3
- "version": "2.1.6",
3
+ "version": "2.2.0",
4
4
  "description": "SDK to integrate Storyblok into your project using JavaScript.",
5
5
  "main": "./dist/storyblok-js.js",
6
6
  "module": "./dist/storyblok-js.mjs",