@gem-sdk/pages 6.0.4 → 6.0.7

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,2 +1,2 @@
1
1
  'use client';
2
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),core=require("@gem-sdk/core"),react=require("react"),getStorefrontApi=require("../../libs/get-storefront-api.js"),googleFonts=require("../../libs/google-fonts.js"),genCss=require("../../libs/helpers/gen-css.js"),genFonts=require("../../libs/helpers/gen-fonts.js"),shopifyCdnWithGoogleFonts=require("../../libs/shopify-cdn-with-google-fonts.js"),libsStore=require("../../store/libs-store.js"),checkOptionFont=require("../../libs/helpers/check-option-font.js");const globalStyleId="global-style",Toolbox=()=>{let e=core.useMatchMutate(),t=core.useShopStore(e=>e.provider),o=core.useShopStore(e=>e.changeStorefrontInfo),r=core.usePageStore(e=>e.setDynamicProduct),a=core.usePageStore(e=>e.setPostPurchaseProductOffers),n=core.usePageStore(e=>e.setDynamicDiscountOffer),i=core.usePageStore(e=>e.setSalePageProductId),d=core.usePageStore(e=>e.setDynamicCollection),l=core.useBuilderPreviewStore(e=>e.initState),s=core.useBuilderPreviewStore(e=>e.state),c=core.useBuilderPreviewStore(e=>e.forceChangeState),u=core.useBuilderPreviewStore(e=>e.forceChangeItemProp),p=core.useBuilderPreviewStore(e=>e.changeItemPropByKey),w=core.useBuilderPreviewStore(e=>e.addItem),v=core.useBuilderPreviewStore(e=>e.moveItem),m=core.useBuilderPreviewStore(e=>e.removeItem),g=core.useSectionStore(e=>e.addSection),y=core.useShopStore(e=>e.changeSwatches),f=core.useBuilderPreviewStore(e=>e.updateItemName),h=core.useBuilderPreviewStore(e=>e.updateItemAttribute),S=core.useShopStore(e=>e.changeLayoutSettings),b=core.useShopStore(e=>e.changeCreateThemeSectionCount),E=core.useShopStore(e=>e.changeShopPlan),L=core.useShopStore(e=>e.updatePriceWithCurrency),C=libsStore.libsStore(e=>e.changeFontType),k=libsStore.libsStore(e=>e.fontType),P=core.useModalStore(e=>e.clearModal),I=core.useShopStore(e=>e.changeLimitCreateThemeSection),q=core.usePageStore(e=>e.setInteractionIsSelectOnPage),T=core.usePageStore(e=>e.setInteractionItem),F=core.usePageStore(e=>e.setInteractionSelectType),j=core.usePageStore(e=>e.setInteractionSettingType),B=core.usePageStore(e=>e.setSidebarMode),x=react.useMemo(()=>genFonts.getFontsFromDataBuilder(s),[s]),A=(e,t)=>{if(!t?.length){let t=document.querySelectorAll(`.${e}`);t.forEach(e=>{e.remove()});return}let o=document.querySelectorAll(`.${e}`);for(let r of(o.forEach(e=>{let o=e.getAttribute("data-font"),r=e.getAttribute("data-font-variant");if(o&&r){let a=t.find(e=>e.family==o&&e.variants.includes(r));a||e.remove()}else e.remove()}),t))if(!(["bunny","google"].includes(r.type)&&checkOptionFont.checkNotInOptionFont(r.family,k))&&"custom"!==r.type&&r.variants?.length)for(let t of r.variants){let o={...r,variants:[t]},a=googleFonts.createFontUrls([o],void 0,k)||[];if(a?.length)for(let o of a){let a=e=>window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),n=document.querySelector(`link.${e}[href="${a(o)}"]`);if(n)continue;let i=document.createElement("link");i.className=e,i.rel="stylesheet",i.href=o,i.dataset.font=r.family,i.dataset.fontVariant=t,document.head.appendChild(i)}}},M=react.useCallback(()=>{e(/query\//,{revalidate:!0})},[e]),O=react.useCallback(e=>{let r=e.detail;o({url:r.shopHandle?getStorefrontApi.getStorefrontApi(r.shopHandle,t):void 0,token:r.shopToken})},[o,t]),N=react.useCallback(e=>{let t=e.detail;try{if(t.data){let e=genCss.genCSS(t.data,t.mobileOnly),o=Object.entries(t.data?.font).map(([,e])=>e).map(e=>{if("custom"==e.type){let t=shopifyCdnWithGoogleFonts.shopifyCdnWithGoogleFonts.find(t=>t.family==e.family);if(t)return t}return e}),r=document.getElementById(globalStyleId);if(A("google-font-builder",o),r)r.innerHTML=e;else{let t=document.createElement("style");t.id=globalStyleId,t.innerHTML=e,document.head.appendChild(t)}}}catch{}},[]),$=react.useCallback(e=>{P();try{let t=e.detail;t.data&&("flat"===t.type?c(t.data):l(t.data))}catch{}},[c,l,P]),D=react.useCallback(e=>{try{let t=e.detail;t.entity&&(w({data:t.entity,id:t.id,position:t.position,type:t.type??"component"}),t?.type!=="section"||Array.isArray(t.entity)||g(t.entity.uid,t.entity))}catch{}},[w,g]),H=react.useCallback(e=>{try{let t=e.detail;t.uid&&t.propName&&p({id:t.uid,key:t.propName,data:t.propValue,group:t.group})}catch{}},[p]),W=react.useCallback(e=>{try{let t=e.detail;t.uid&&u(t.uid,t.data,t.group)}catch{}},[u]),G=react.useCallback(e=>{try{let t=e.detail;t.to&&t.uid&&v(t.uid,t.to,Number(t.position)??0)}catch{}},[v]),R=react.useCallback(e=>{try{let t=e.detail;t.uid&&m(t.uid)}catch{}},[m]),V=react.useCallback(e=>{let t=e.detail;try{t.data&&y(t.data)}catch{}},[y]),_=react.useCallback(e=>{let t=e.detail;t&&S(t)},[S]),K=react.useCallback(e=>{let t=e.detail;t&&b(t)},[b]),U=react.useCallback(e=>{let t=e.detail;t&&E(t)},[E]),z=react.useCallback(e=>{let t=e.detail;t&&L(t)},[L]),J=react.useCallback(e=>{let t=e.detail;t&&C(t)},[C]),Q=react.useCallback(e=>{let t=e.detail;t&&r(t)},[r]),X=react.useCallback(e=>{let t=e.detail;t&&d(t)},[d]);react.useEffect(()=>{x&&A("google-font-element",x)},[x]);let Y=react.useCallback(e=>{let t=e.detail;t.uid&&f(t.uid,t.name||"")},[f]),Z=react.useCallback(e=>{let t=e.detail;t.uid&&h(t.uid,t.value||"",t.attr||"")},[h]),ee=react.useCallback(e=>{let t=e.detail;t?.length&&a(t)},[a]),et=react.useCallback(e=>{let t=e.detail;t&&n(t)},[n]),eo=react.useCallback(e=>{let t=e.detail;t&&i(t)},[i]),er=react.useCallback(e=>{let t=e.detail;t&&I(t)},[I]),ea=react.useCallback(e=>{let t=e.detail.value,o=e.detail.mode,r=e.detail.settingType;q(t),F(o),j(r)},[q,F,j]),en=react.useCallback(e=>{let t=e.detail.settingType;j(t)},[j]),ei=react.useCallback(e=>{let t=e.detail.mode;console.log(t),B(t)},[B]),ed=react.useCallback(e=>{let t=e.detail;T(t)},[T]);return react.useEffect(()=>{x&&A("google-font-element",x)},[x]),react.useEffect(()=>(window.addEventListener("update-shop-info",O),window.addEventListener("revalidate-query",M),window.addEventListener("init-builder",$),window.addEventListener("add-entity",D),window.addEventListener("remove-entity",R),window.addEventListener("move-entity",G),window.addEventListener("force-update-entity-props",W),window.addEventListener("update-entity-prop",H),window.addEventListener("set-global-style",N),window.addEventListener("update-global-swatches-data",V),window.addEventListener("on-off-header-footer",_),window.addEventListener("update-create-theme-section-count",K),window.addEventListener("update-shop-plan",U),window.addEventListener("set-dynamic-product",Q),window.addEventListener("set-dynamic-collection",X),window.addEventListener("update-item-name",Y),window.addEventListener("update-item-attribute",Z),window.addEventListener("set-product-offer",ee),window.addEventListener("set-dynamic-discount-offer",et),window.addEventListener("update-sale-page-product-id",eo),window.addEventListener("limit-create-theme-section",er),window.addEventListener("update-interaction-is-select-on-page",ea),window.addEventListener("update-interaction-item",ed),window.addEventListener("update-interaction-setting-type",en),window.addEventListener("change-sidebar-mode",ei),window.addEventListener("update-font-type",J),window.addEventListener("update-price-with-currency",z),()=>{window.removeEventListener("update-shop-info",O),window.removeEventListener("revalidate-query",M),window.removeEventListener("init-builder",$),window.removeEventListener("add-entity",D),window.removeEventListener("remove-entity",R),window.removeEventListener("move-entity",G),window.removeEventListener("update-entity-prop",H),window.removeEventListener("set-global-style",N),window.removeEventListener("update-global-swatches-data",V),window.removeEventListener("on-off-header-footer",_),window.removeEventListener("update-create-theme-section-count",K),window.removeEventListener("update-shop-plan",U),window.removeEventListener("update-price-with-currency",z),window.removeEventListener("set-dynamic-product",Q),window.removeEventListener("set-dynamic-collection",X),window.removeEventListener("update-item-name",Y),window.removeEventListener("update-item-attribute",Z),window.removeEventListener("set-product-offer",ee),window.removeEventListener("update-sale-page-product-id",eo),window.removeEventListener("limit-create-theme-section",er),window.removeEventListener("update-interaction-is-select-on-page",ea),window.removeEventListener("update-interaction-item",ed),window.removeEventListener("update-interaction-setting-type",en),window.removeEventListener("update-font-type",J)}),[D,U,W,H,$,G,R,N,V,M,O,_,K,Q,X,Y,Z,ee,eo,er,ed,ea,en,J,ei,et,z]),jsxRuntime.jsx("div",{className:"toolbox"})};var Toolbox$1=react.memo(Toolbox);exports.default=Toolbox$1;
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),core=require("@gem-sdk/core"),react=require("react"),getStorefrontApi=require("../../libs/get-storefront-api.js"),googleFonts=require("../../libs/google-fonts.js"),genCss=require("../../libs/helpers/gen-css.js"),genFonts=require("../../libs/helpers/gen-fonts.js"),shopifyCdnWithGoogleFonts=require("../../libs/shopify-cdn-with-google-fonts.js"),libsStore=require("../../store/libs-store.js"),checkOptionFont=require("../../libs/helpers/check-option-font.js");const globalStyleId="global-style",ENABLE_THEME_FONT_EDITOR=!0,Toolbox=()=>{let e=core.useMatchMutate(),t=core.useShopStore(e=>e.provider),o=core.useShopStore(e=>e.changeStorefrontInfo),r=core.usePageStore(e=>e.setDynamicProduct),a=core.usePageStore(e=>e.setPostPurchaseProductOffers),n=core.usePageStore(e=>e.setDynamicDiscountOffer),i=core.usePageStore(e=>e.setSalePageProductId),d=core.usePageStore(e=>e.setDynamicCollection),l=core.useBuilderPreviewStore(e=>e.initState),s=core.useBuilderPreviewStore(e=>e.state),c=core.useBuilderPreviewStore(e=>e.forceChangeState),u=core.useBuilderPreviewStore(e=>e.forceChangeItemProp),p=core.useBuilderPreviewStore(e=>e.changeItemPropByKey),w=core.useBuilderPreviewStore(e=>e.addItem),v=core.useBuilderPreviewStore(e=>e.moveItem),m=core.useBuilderPreviewStore(e=>e.removeItem),g=core.useSectionStore(e=>e.addSection),y=core.useShopStore(e=>e.changeSwatches),f=core.useBuilderPreviewStore(e=>e.updateItemName),h=core.useBuilderPreviewStore(e=>e.updateItemAttribute),S=core.useShopStore(e=>e.changeLayoutSettings),b=core.useShopStore(e=>e.changeCreateThemeSectionCount),E=core.useShopStore(e=>e.changeShopPlan),L=core.useShopStore(e=>e.updatePriceWithCurrency),C=libsStore.libsStore(e=>e.changeFontType),k=libsStore.libsStore(e=>e.fontType),P=core.useModalStore(e=>e.clearModal),I=core.useShopStore(e=>e.changeLimitCreateThemeSection),T=core.usePageStore(e=>e.setInteractionIsSelectOnPage),q=core.usePageStore(e=>e.setInteractionItem),F=core.usePageStore(e=>e.setInteractionSelectType),B=core.usePageStore(e=>e.setInteractionSettingType),j=core.usePageStore(e=>e.setSidebarMode),x=react.useMemo(()=>genFonts.getFontsFromDataBuilder(s),[s]),A=(e,t)=>{if(!t?.length){let t=document.querySelectorAll(`.${e}`);t.forEach(e=>{e.remove()});return}let o=document.querySelectorAll(`.${e}`);for(let r of(o.forEach(e=>{let o=e.getAttribute("data-font"),r=e.getAttribute("data-font-variant");if(o&&r){let a=t.find(e=>e.family==o&&e.variants.includes(r));a||e.remove()}else e.remove()}),t))if(!(["bunny","google"].includes(r.type)&&checkOptionFont.checkNotInOptionFont(r.family,k))&&"custom"!==r.type&&r.variants?.length)for(let t of r.variants){let o={...r,variants:[t]},a=googleFonts.createFontUrls([o],void 0,k,!0)||[];if(a?.length)for(let o of a){let a=e=>window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),n=document.querySelector(`link.${e}[href="${a(o)}"]`);if(n)continue;let i=document.createElement("link");i.className=e,i.rel="stylesheet",i.href=o,i.dataset.font=r.family,i.dataset.fontVariant=t,document.head.appendChild(i)}}},O=react.useCallback(()=>{e(/query\//,{revalidate:!0})},[e]),M=react.useCallback(e=>{let r=e.detail;o({url:r.shopHandle?getStorefrontApi.getStorefrontApi(r.shopHandle,t):void 0,token:r.shopToken})},[o,t]),N=react.useCallback(e=>{let t=e.detail;try{if(t.data){let e=genCss.genCSS(t.data,t.mobileOnly),o=Object.entries(t.data?.font).map(([,e])=>e).map(e=>{if("custom"==e.type){let t=shopifyCdnWithGoogleFonts.shopifyCdnWithGoogleFonts.find(t=>t.family==e.family);if(t)return t}return e}),r=document.getElementById(globalStyleId);if(A("google-font-builder",o),r)r.innerHTML=e;else{let t=document.createElement("style");t.id=globalStyleId,t.innerHTML=e,document.head.appendChild(t)}}}catch{}},[]),D=react.useCallback(e=>{P();try{let t=e.detail;t.data&&("flat"===t.type?c(t.data):l(t.data))}catch{}},[c,l,P]),$=react.useCallback(e=>{try{let t=e.detail;t.entity&&(w({data:t.entity,id:t.id,position:t.position,type:t.type??"component"}),t?.type!=="section"||Array.isArray(t.entity)||g(t.entity.uid,t.entity))}catch{}},[w,g]),H=react.useCallback(e=>{try{let t=e.detail;t.uid&&t.propName&&p({id:t.uid,key:t.propName,data:t.propValue,group:t.group})}catch{}},[p]),_=react.useCallback(e=>{try{let t=e.detail;t.uid&&u(t.uid,t.data,t.group)}catch{}},[u]),W=react.useCallback(e=>{try{let t=e.detail;t.to&&t.uid&&v(t.uid,t.to,Number(t.position)??0)}catch{}},[v]),G=react.useCallback(e=>{try{let t=e.detail;t.uid&&m(t.uid)}catch{}},[m]),R=react.useCallback(e=>{let t=e.detail;try{t.data&&y(t.data)}catch{}},[y]),V=react.useCallback(e=>{let t=e.detail;t&&S(t)},[S]),K=react.useCallback(e=>{let t=e.detail;t&&b(t)},[b]),U=react.useCallback(e=>{let t=e.detail;t&&E(t)},[E]),z=react.useCallback(e=>{let t=e.detail;t&&L(t)},[L]),J=react.useCallback(e=>{let t=e.detail;t&&C(t)},[C]),Q=react.useCallback(e=>{let t=e.detail;t&&r(t)},[r]),X=react.useCallback(e=>{let t=e.detail;t&&d(t)},[d]);react.useEffect(()=>{x&&A("google-font-element",x)},[x]);let Y=react.useCallback(e=>{let t=e.detail;t.uid&&f(t.uid,t.name||"")},[f]),Z=react.useCallback(e=>{let t=e.detail;t.uid&&h(t.uid,t.value||"",t.attr||"")},[h]),ee=react.useCallback(e=>{let t=e.detail;t?.length&&a(t)},[a]),et=react.useCallback(e=>{let t=e.detail;t&&n(t)},[n]),eo=react.useCallback(e=>{let t=e.detail;t&&i(t)},[i]),er=react.useCallback(e=>{let t=e.detail;t&&I(t)},[I]),ea=react.useCallback(e=>{let t=e.detail.value,o=e.detail.mode,r=e.detail.settingType;T(t),F(o),B(r)},[T,F,B]),en=react.useCallback(e=>{let t=e.detail.settingType;B(t)},[B]),ei=react.useCallback(e=>{let t=e.detail.mode;console.log(t),j(t)},[j]),ed=react.useCallback(e=>{let t=e.detail;q(t)},[q]);return react.useEffect(()=>{x&&A("google-font-element",x)},[x]),react.useEffect(()=>(window.addEventListener("update-shop-info",M),window.addEventListener("revalidate-query",O),window.addEventListener("init-builder",D),window.addEventListener("add-entity",$),window.addEventListener("remove-entity",G),window.addEventListener("move-entity",W),window.addEventListener("force-update-entity-props",_),window.addEventListener("update-entity-prop",H),window.addEventListener("set-global-style",N),window.addEventListener("update-global-swatches-data",R),window.addEventListener("on-off-header-footer",V),window.addEventListener("update-create-theme-section-count",K),window.addEventListener("update-shop-plan",U),window.addEventListener("set-dynamic-product",Q),window.addEventListener("set-dynamic-collection",X),window.addEventListener("update-item-name",Y),window.addEventListener("update-item-attribute",Z),window.addEventListener("set-product-offer",ee),window.addEventListener("set-dynamic-discount-offer",et),window.addEventListener("update-sale-page-product-id",eo),window.addEventListener("limit-create-theme-section",er),window.addEventListener("update-interaction-is-select-on-page",ea),window.addEventListener("update-interaction-item",ed),window.addEventListener("update-interaction-setting-type",en),window.addEventListener("change-sidebar-mode",ei),window.addEventListener("update-font-type",J),window.addEventListener("update-price-with-currency",z),()=>{window.removeEventListener("update-shop-info",M),window.removeEventListener("revalidate-query",O),window.removeEventListener("init-builder",D),window.removeEventListener("add-entity",$),window.removeEventListener("remove-entity",G),window.removeEventListener("move-entity",W),window.removeEventListener("update-entity-prop",H),window.removeEventListener("set-global-style",N),window.removeEventListener("update-global-swatches-data",R),window.removeEventListener("on-off-header-footer",V),window.removeEventListener("update-create-theme-section-count",K),window.removeEventListener("update-shop-plan",U),window.removeEventListener("update-price-with-currency",z),window.removeEventListener("set-dynamic-product",Q),window.removeEventListener("set-dynamic-collection",X),window.removeEventListener("update-item-name",Y),window.removeEventListener("update-item-attribute",Z),window.removeEventListener("set-product-offer",ee),window.removeEventListener("update-sale-page-product-id",eo),window.removeEventListener("limit-create-theme-section",er),window.removeEventListener("update-interaction-is-select-on-page",ea),window.removeEventListener("update-interaction-item",ed),window.removeEventListener("update-interaction-setting-type",en),window.removeEventListener("update-font-type",J)}),[$,U,_,H,D,W,G,N,R,O,M,V,K,Q,X,Y,Z,ee,eo,er,ed,ea,en,J,ei,et,z]),jsxRuntime.jsx("div",{className:"toolbox"})};var Toolbox$1=react.memo(Toolbox);exports.default=Toolbox$1;
@@ -1 +1 @@
1
- "use strict";var checkOptionFont=require("./helpers/check-option-font.js"),genFonts=require("./helpers/gen-fonts.js"),sentry=require("./helpers/sentry.js");const CHROME_UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",IE_UA="Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko";async function getFontForUA(e,t){try{return fetch(e,{headers:{"User-Agent":t}}).then(o=>200===o.status?o.text():(sentry.sentryCaptureException("getFontForUA",`Unexpected status ${o.status}`,{url:e,UA:t}),""))}catch(o){return sentry.sentryCaptureException("getFontForUA","Error fetching font",{url:e,UA:t,error:o}),""}}const composeFonts=e=>{let t=e.filter((e,t,o)=>t===o.findIndex(t=>t.family===e.family));return t.map(t=>{let o=e.filter(e=>e.family===t.family).reduce((e,t)=>[...e,...t.variants],[]).filter((e,t,o)=>t===o.findIndex(t=>t===e));return{...t,variants:o}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=e=>e?.trim().replace(/\s+/g,"+")??"",getOverrideUrlForFamily=e=>{let t=normalizeFamily(e);return GOOGLE_CSS2_OVERRIDES[e]??GOOGLE_CSS2_OVERRIDES[t]},isValidFont=(e,t)=>{let o="google"===e.type||"bunny"===e.type,r=checkOptionFont.checkNotInOptionFont(e.family,t);return!(o&&r)&&(o||!e.type)},makeUrlBySourceFont=(e,t,o)=>{let r=composeFonts(e).map(e=>`${e.family.replace(/ /g,"+")}:${e.variants.join(",")}`).join("|");if("sans-serif"===r)return;let n=new URLSearchParams;n.append("family",r),n.append("display",o?.display||"swap"),o?.subset&&n.append("subset",o.subset),o?.effect&&n.append("effect",o.effect);let l=`https://fonts.bunny.net/css?family=${r}`,s=`https://fonts.googleapis.com/css?${decodeURIComponent(n.toString())}`;return"bunny"===t?l:s},createFontUrls=(e,t,o)=>{let r=e.filter(e=>isValidFont(e,o||"google"));if(!r.length)return;let n=r.filter((e,t,o)=>t===o.findIndex(t=>t.family===e.family)),l=[],s=[];for(let e of n){let t=getOverrideUrlForFamily(e.family);t&&"bunny"!==o?l.push(t):s.push(e)}let a=s.length?makeUrlBySourceFont(s,o||"google",t):void 0;return l.length&&a?[...l,a]:a?[a,...l]:l};async function getFonts(e,t,o=!0,r){let n=createFontUrls(e,t,r),l=Array.isArray(n)?n:n?[n]:[];if(!l.length)return"";if(o)return l.map(e=>`@import url('${e}');`).join("");let s="",a="";for(let e of l)try{let[t,o]=await Promise.all([getFontForUA(e,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(e,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")]),r=`${t}${o}`;s+=r,a+=`@import url('${e}');`}catch(t){sentry.sentryCaptureException("getFonts","Error fetching font",{url:e,fontType:r,error:String(t)}),a+="",s+=""}let i=new TextEncoder().encode(s).length;return i<51200?s:a}const getFontFromGlobalStyle=(e,t)=>{if(!e)return"";try{let o=JSON.parse(e),r=o?.font??{},n=Object.entries(r).map(([,e])=>e);return getFonts(n,void 0,void 0,t)}catch{return""}};async function getFontStyleFromPageTemplate(e,t){let o=[];if(e.forEach(e=>{let t=genFonts.getFontsFromDataBuilder(e.data);o.push(...t)}),0===o.length)return[];let r=composeFonts(o),n=await getFonts(r,void 0,void 0,t);return n?[n]:[]}exports.composeFonts=composeFonts,exports.createFontUrls=createFontUrls,exports.getFontFromGlobalStyle=getFontFromGlobalStyle,exports.getFontStyleFromPageTemplate=getFontStyleFromPageTemplate,exports.getFonts=getFonts;
1
+ "use strict";var checkOptionFont=require("./helpers/check-option-font.js"),genFonts=require("./helpers/gen-fonts.js"),sentry=require("./helpers/sentry.js");const CHROME_UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",IE_UA="Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko";async function getFontForUA(e,t){try{return fetch(e,{headers:{"User-Agent":t}}).then(o=>200===o.status?o.text():(sentry.sentryCaptureException("getFontForUA",`Unexpected status ${o.status}`,{url:e,UA:t}),""))}catch(o){return sentry.sentryCaptureException("getFontForUA","Error fetching font",{url:e,UA:t,error:o}),""}}const composeFonts=e=>{let t=e.filter((e,t,o)=>t===o.findIndex(t=>t.family===e.family));return t.map(t=>{let o=e.filter(e=>e.family===t.family).reduce((e,t)=>[...e,...t.variants],[]).filter((e,t,o)=>t===o.findIndex(t=>t===e));return{...t,variants:o}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=e=>e?.trim().replace(/\s+/g,"+")??"",getOverrideUrlForFamily=e=>{let t=normalizeFamily(e);return GOOGLE_CSS2_OVERRIDES[e]??GOOGLE_CSS2_OVERRIDES[t]},isValidFont=(e,t,o)=>{let r="google"===e.type||"bunny"===e.type,n="theme"===e.type&&o,l=checkOptionFont.checkNotInOptionFont(e.family,t);return!(r&&l)&&(r||!e.type||n)},makeUrlBySourceFont=(e,t,o)=>{let r=composeFonts(e).map(e=>`${e.family.replace(/ /g,"+")}:${e.variants.join(",")}`).join("|");if("sans-serif"===r)return;let n=new URLSearchParams;n.append("family",r),n.append("display",o?.display||"swap"),o?.subset&&n.append("subset",o.subset),o?.effect&&n.append("effect",o.effect);let l=`https://fonts.bunny.net/css?family=${r}`,s=`https://fonts.googleapis.com/css?${decodeURIComponent(n.toString())}`;return"bunny"===t?l:s},createFontUrls=(e,t,o,r)=>{let n=e.filter(e=>isValidFont(e,o||"google",r));if(!n.length)return;let l=n.filter((e,t,o)=>t===o.findIndex(t=>t.family===e.family)),s=[],a=[];for(let e of l){let t=getOverrideUrlForFamily(e.family);t&&"bunny"!==o?s.push(t):a.push(e)}let i=a.length?makeUrlBySourceFont(a,o||"google",t):void 0;return s.length&&i?[...s,i]:i?[i,...s]:s};async function getFonts(e,t,o=!0,r){let n=createFontUrls(e,t,r),l=Array.isArray(n)?n:n?[n]:[];if(!l.length)return"";if(o)return l.map(e=>`@import url('${e}');`).join("");let s="",a="";for(let e of l)try{let[t,o]=await Promise.all([getFontForUA(e,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(e,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")]),r=`${t}${o}`;s+=r,a+=`@import url('${e}');`}catch(t){sentry.sentryCaptureException("getFonts","Error fetching font",{url:e,fontType:r,error:String(t)}),a+="",s+=""}let i=new TextEncoder().encode(s).length;return i<51200?s:a}const getFontFromGlobalStyle=(e,t)=>{if(!e)return"";try{let o=JSON.parse(e),r=o?.font??{},n=Object.entries(r).map(([,e])=>e);return getFonts(n,void 0,void 0,t)}catch{return""}};async function getFontStyleFromPageTemplate(e,t){let o=[];if(e.forEach(e=>{let t=genFonts.getFontsFromDataBuilder(e.data);o.push(...t)}),0===o.length)return[];let r=composeFonts(o),n=await getFonts(r,void 0,void 0,t);return n?[n]:[]}exports.composeFonts=composeFonts,exports.createFontUrls=createFontUrls,exports.getFontFromGlobalStyle=getFontFromGlobalStyle,exports.getFontStyleFromPageTemplate=getFontStyleFromPageTemplate,exports.getFonts=getFonts;
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- import{jsx as e}from"react/jsx-runtime";import{useMatchMutate as t,useShopStore as n,usePageStore as i,useBuilderPreviewStore as o,useSectionStore as d,useModalStore as a}from"@gem-sdk/core";import{memo as r,useMemo as l,useCallback as s,useEffect as c}from"react";import{getStorefrontApi as m}from"../../libs/get-storefront-api.js";import{createFontUrls as p}from"../../libs/google-fonts.js";import{genCSS as w}from"../../libs/helpers/gen-css.js";import{getFontsFromDataBuilder as u}from"../../libs/helpers/gen-fonts.js";import{shopifyCdnWithGoogleFonts as v}from"../../libs/shopify-cdn-with-google-fonts.js";import{libsStore as y}from"../../store/libs-store.js";import{checkNotInOptionFont as f}from"../../libs/helpers/check-option-font.js";let globalStyleId="global-style",Toolbox=()=>{let r=t(),h=n(e=>e.provider),g=n(e=>e.changeStorefrontInfo),E=i(e=>e.setDynamicProduct),L=i(e=>e.setPostPurchaseProductOffers),b=i(e=>e.setDynamicDiscountOffer),S=i(e=>e.setSalePageProductId),I=i(e=>e.setDynamicCollection),T=o(e=>e.initState),C=o(e=>e.state),P=o(e=>e.forceChangeState),j=o(e=>e.forceChangeItemProp),k=o(e=>e.changeItemPropByKey),x=o(e=>e.addItem),A=o(e=>e.moveItem),q=o(e=>e.removeItem),N=d(e=>e.addSection),$=n(e=>e.changeSwatches),O=o(e=>e.updateItemName),D=o(e=>e.updateItemAttribute),H=n(e=>e.changeLayoutSettings),M=n(e=>e.changeCreateThemeSectionCount),B=n(e=>e.changeShopPlan),V=n(e=>e.updatePriceWithCurrency),F=y(e=>e.changeFontType),K=y(e=>e.fontType),W=a(e=>e.clearModal),z=n(e=>e.changeLimitCreateThemeSection),G=i(e=>e.setInteractionIsSelectOnPage),J=i(e=>e.setInteractionItem),Q=i(e=>e.setInteractionSelectType),R=i(e=>e.setInteractionSettingType),U=i(e=>e.setSidebarMode),X=l(()=>u(C),[C]),Y=(e,t)=>{if(!t?.length){let t=document.querySelectorAll(`.${e}`);t.forEach(e=>{e.remove()});return}let n=document.querySelectorAll(`.${e}`);for(let i of(n.forEach(e=>{let n=e.getAttribute("data-font"),i=e.getAttribute("data-font-variant");if(n&&i){let o=t.find(e=>e.family==n&&e.variants.includes(i));o||e.remove()}else e.remove()}),t))if(!(["bunny","google"].includes(i.type)&&f(i.family,K))&&"custom"!==i.type&&i.variants?.length)for(let t of i.variants){let n={...i,variants:[t]},o=p([n],void 0,K)||[];if(o?.length)for(let n of o){let o=e=>window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),d=document.querySelector(`link.${e}[href="${o(n)}"]`);if(d)continue;let a=document.createElement("link");a.className=e,a.rel="stylesheet",a.href=n,a.dataset.font=i.family,a.dataset.fontVariant=t,document.head.appendChild(a)}}},Z=s(()=>{r(/query\//,{revalidate:!0})},[r]),_=s(e=>{let t=e.detail;g({url:t.shopHandle?m(t.shopHandle,h):void 0,token:t.shopToken})},[g,h]),ee=s(e=>{let t=e.detail;try{if(t.data){let e=w(t.data,t.mobileOnly),n=Object.entries(t.data?.font).map(([,e])=>e).map(e=>{if("custom"==e.type){let t=v.find(t=>t.family==e.family);if(t)return t}return e}),i=document.getElementById(globalStyleId);if(Y("google-font-builder",n),i)i.innerHTML=e;else{let t=document.createElement("style");t.id=globalStyleId,t.innerHTML=e,document.head.appendChild(t)}}}catch{}},[]),et=s(e=>{W();try{let t=e.detail;t.data&&("flat"===t.type?P(t.data):T(t.data))}catch{}},[P,T,W]),en=s(e=>{try{let t=e.detail;t.entity&&(x({data:t.entity,id:t.id,position:t.position,type:t.type??"component"}),t?.type!=="section"||Array.isArray(t.entity)||N(t.entity.uid,t.entity))}catch{}},[x,N]),ei=s(e=>{try{let t=e.detail;t.uid&&t.propName&&k({id:t.uid,key:t.propName,data:t.propValue,group:t.group})}catch{}},[k]),eo=s(e=>{try{let t=e.detail;t.uid&&j(t.uid,t.data,t.group)}catch{}},[j]),ed=s(e=>{try{let t=e.detail;t.to&&t.uid&&A(t.uid,t.to,Number(t.position)??0)}catch{}},[A]),ea=s(e=>{try{let t=e.detail;t.uid&&q(t.uid)}catch{}},[q]),er=s(e=>{let t=e.detail;try{t.data&&$(t.data)}catch{}},[$]),el=s(e=>{let t=e.detail;t&&H(t)},[H]),es=s(e=>{let t=e.detail;t&&M(t)},[M]),ec=s(e=>{let t=e.detail;t&&B(t)},[B]),em=s(e=>{let t=e.detail;t&&V(t)},[V]),ep=s(e=>{let t=e.detail;t&&F(t)},[F]),ew=s(e=>{let t=e.detail;t&&E(t)},[E]),eu=s(e=>{let t=e.detail;t&&I(t)},[I]);c(()=>{X&&Y("google-font-element",X)},[X]);let ev=s(e=>{let t=e.detail;t.uid&&O(t.uid,t.name||"")},[O]),ey=s(e=>{let t=e.detail;t.uid&&D(t.uid,t.value||"",t.attr||"")},[D]),ef=s(e=>{let t=e.detail;t?.length&&L(t)},[L]),eh=s(e=>{let t=e.detail;t&&b(t)},[b]),eg=s(e=>{let t=e.detail;t&&S(t)},[S]),eE=s(e=>{let t=e.detail;t&&z(t)},[z]),eL=s(e=>{let t=e.detail.value,n=e.detail.mode,i=e.detail.settingType;G(t),Q(n),R(i)},[G,Q,R]),eb=s(e=>{let t=e.detail.settingType;R(t)},[R]),eS=s(e=>{let t=e.detail.mode;console.log(t),U(t)},[U]),eI=s(e=>{let t=e.detail;J(t)},[J]);return c(()=>{X&&Y("google-font-element",X)},[X]),c(()=>(window.addEventListener("update-shop-info",_),window.addEventListener("revalidate-query",Z),window.addEventListener("init-builder",et),window.addEventListener("add-entity",en),window.addEventListener("remove-entity",ea),window.addEventListener("move-entity",ed),window.addEventListener("force-update-entity-props",eo),window.addEventListener("update-entity-prop",ei),window.addEventListener("set-global-style",ee),window.addEventListener("update-global-swatches-data",er),window.addEventListener("on-off-header-footer",el),window.addEventListener("update-create-theme-section-count",es),window.addEventListener("update-shop-plan",ec),window.addEventListener("set-dynamic-product",ew),window.addEventListener("set-dynamic-collection",eu),window.addEventListener("update-item-name",ev),window.addEventListener("update-item-attribute",ey),window.addEventListener("set-product-offer",ef),window.addEventListener("set-dynamic-discount-offer",eh),window.addEventListener("update-sale-page-product-id",eg),window.addEventListener("limit-create-theme-section",eE),window.addEventListener("update-interaction-is-select-on-page",eL),window.addEventListener("update-interaction-item",eI),window.addEventListener("update-interaction-setting-type",eb),window.addEventListener("change-sidebar-mode",eS),window.addEventListener("update-font-type",ep),window.addEventListener("update-price-with-currency",em),()=>{window.removeEventListener("update-shop-info",_),window.removeEventListener("revalidate-query",Z),window.removeEventListener("init-builder",et),window.removeEventListener("add-entity",en),window.removeEventListener("remove-entity",ea),window.removeEventListener("move-entity",ed),window.removeEventListener("update-entity-prop",ei),window.removeEventListener("set-global-style",ee),window.removeEventListener("update-global-swatches-data",er),window.removeEventListener("on-off-header-footer",el),window.removeEventListener("update-create-theme-section-count",es),window.removeEventListener("update-shop-plan",ec),window.removeEventListener("update-price-with-currency",em),window.removeEventListener("set-dynamic-product",ew),window.removeEventListener("set-dynamic-collection",eu),window.removeEventListener("update-item-name",ev),window.removeEventListener("update-item-attribute",ey),window.removeEventListener("set-product-offer",ef),window.removeEventListener("update-sale-page-product-id",eg),window.removeEventListener("limit-create-theme-section",eE),window.removeEventListener("update-interaction-is-select-on-page",eL),window.removeEventListener("update-interaction-item",eI),window.removeEventListener("update-interaction-setting-type",eb),window.removeEventListener("update-font-type",ep)}),[en,ec,eo,ei,et,ed,ea,ee,er,Z,_,el,es,ew,eu,ev,ey,ef,eg,eE,eI,eL,eb,ep,eS,eh,em]),e("div",{className:"toolbox"})};var Toolbox$1=r(Toolbox);export{Toolbox$1 as default};
2
+ import{jsx as e}from"react/jsx-runtime";import{useMatchMutate as t,useShopStore as n,usePageStore as i,useBuilderPreviewStore as o,useSectionStore as d,useModalStore as a}from"@gem-sdk/core";import{memo as r,useMemo as l,useCallback as s,useEffect as c}from"react";import{getStorefrontApi as m}from"../../libs/get-storefront-api.js";import{createFontUrls as p}from"../../libs/google-fonts.js";import{genCSS as w}from"../../libs/helpers/gen-css.js";import{getFontsFromDataBuilder as u}from"../../libs/helpers/gen-fonts.js";import{shopifyCdnWithGoogleFonts as v}from"../../libs/shopify-cdn-with-google-fonts.js";import{libsStore as y}from"../../store/libs-store.js";import{checkNotInOptionFont as f}from"../../libs/helpers/check-option-font.js";let globalStyleId="global-style",ENABLE_THEME_FONT_EDITOR=!0,Toolbox=()=>{let r=t(),h=n(e=>e.provider),E=n(e=>e.changeStorefrontInfo),g=i(e=>e.setDynamicProduct),L=i(e=>e.setPostPurchaseProductOffers),b=i(e=>e.setDynamicDiscountOffer),S=i(e=>e.setSalePageProductId),I=i(e=>e.setDynamicCollection),T=o(e=>e.initState),C=o(e=>e.state),P=o(e=>e.forceChangeState),j=o(e=>e.forceChangeItemProp),A=o(e=>e.changeItemPropByKey),N=o(e=>e.addItem),k=o(e=>e.moveItem),x=o(e=>e.removeItem),O=d(e=>e.addSection),q=n(e=>e.changeSwatches),$=o(e=>e.updateItemName),D=o(e=>e.updateItemAttribute),H=n(e=>e.changeLayoutSettings),M=n(e=>e.changeCreateThemeSectionCount),B=n(e=>e.changeShopPlan),_=n(e=>e.updatePriceWithCurrency),F=y(e=>e.changeFontType),V=y(e=>e.fontType),K=a(e=>e.clearModal),R=n(e=>e.changeLimitCreateThemeSection),W=i(e=>e.setInteractionIsSelectOnPage),z=i(e=>e.setInteractionItem),G=i(e=>e.setInteractionSelectType),J=i(e=>e.setInteractionSettingType),Q=i(e=>e.setSidebarMode),U=l(()=>u(C),[C]),X=(e,t)=>{if(!t?.length){let t=document.querySelectorAll(`.${e}`);t.forEach(e=>{e.remove()});return}let n=document.querySelectorAll(`.${e}`);for(let i of(n.forEach(e=>{let n=e.getAttribute("data-font"),i=e.getAttribute("data-font-variant");if(n&&i){let o=t.find(e=>e.family==n&&e.variants.includes(i));o||e.remove()}else e.remove()}),t))if(!(["bunny","google"].includes(i.type)&&f(i.family,V))&&"custom"!==i.type&&i.variants?.length)for(let t of i.variants){let n={...i,variants:[t]},o=p([n],void 0,V,!0)||[];if(o?.length)for(let n of o){let o=e=>window.CSS&&CSS.escape?CSS.escape(e):e.replace(/"/g,'\\"'),d=document.querySelector(`link.${e}[href="${o(n)}"]`);if(d)continue;let a=document.createElement("link");a.className=e,a.rel="stylesheet",a.href=n,a.dataset.font=i.family,a.dataset.fontVariant=t,document.head.appendChild(a)}}},Y=s(()=>{r(/query\//,{revalidate:!0})},[r]),Z=s(e=>{let t=e.detail;E({url:t.shopHandle?m(t.shopHandle,h):void 0,token:t.shopToken})},[E,h]),ee=s(e=>{let t=e.detail;try{if(t.data){let e=w(t.data,t.mobileOnly),n=Object.entries(t.data?.font).map(([,e])=>e).map(e=>{if("custom"==e.type){let t=v.find(t=>t.family==e.family);if(t)return t}return e}),i=document.getElementById(globalStyleId);if(X("google-font-builder",n),i)i.innerHTML=e;else{let t=document.createElement("style");t.id=globalStyleId,t.innerHTML=e,document.head.appendChild(t)}}}catch{}},[]),et=s(e=>{K();try{let t=e.detail;t.data&&("flat"===t.type?P(t.data):T(t.data))}catch{}},[P,T,K]),en=s(e=>{try{let t=e.detail;t.entity&&(N({data:t.entity,id:t.id,position:t.position,type:t.type??"component"}),t?.type!=="section"||Array.isArray(t.entity)||O(t.entity.uid,t.entity))}catch{}},[N,O]),ei=s(e=>{try{let t=e.detail;t.uid&&t.propName&&A({id:t.uid,key:t.propName,data:t.propValue,group:t.group})}catch{}},[A]),eo=s(e=>{try{let t=e.detail;t.uid&&j(t.uid,t.data,t.group)}catch{}},[j]),ed=s(e=>{try{let t=e.detail;t.to&&t.uid&&k(t.uid,t.to,Number(t.position)??0)}catch{}},[k]),ea=s(e=>{try{let t=e.detail;t.uid&&x(t.uid)}catch{}},[x]),er=s(e=>{let t=e.detail;try{t.data&&q(t.data)}catch{}},[q]),el=s(e=>{let t=e.detail;t&&H(t)},[H]),es=s(e=>{let t=e.detail;t&&M(t)},[M]),ec=s(e=>{let t=e.detail;t&&B(t)},[B]),em=s(e=>{let t=e.detail;t&&_(t)},[_]),ep=s(e=>{let t=e.detail;t&&F(t)},[F]),ew=s(e=>{let t=e.detail;t&&g(t)},[g]),eu=s(e=>{let t=e.detail;t&&I(t)},[I]);c(()=>{U&&X("google-font-element",U)},[U]);let ev=s(e=>{let t=e.detail;t.uid&&$(t.uid,t.name||"")},[$]),ey=s(e=>{let t=e.detail;t.uid&&D(t.uid,t.value||"",t.attr||"")},[D]),ef=s(e=>{let t=e.detail;t?.length&&L(t)},[L]),eh=s(e=>{let t=e.detail;t&&b(t)},[b]),eE=s(e=>{let t=e.detail;t&&S(t)},[S]),eg=s(e=>{let t=e.detail;t&&R(t)},[R]),eL=s(e=>{let t=e.detail.value,n=e.detail.mode,i=e.detail.settingType;W(t),G(n),J(i)},[W,G,J]),eb=s(e=>{let t=e.detail.settingType;J(t)},[J]),eS=s(e=>{let t=e.detail.mode;console.log(t),Q(t)},[Q]),eI=s(e=>{let t=e.detail;z(t)},[z]);return c(()=>{U&&X("google-font-element",U)},[U]),c(()=>(window.addEventListener("update-shop-info",Z),window.addEventListener("revalidate-query",Y),window.addEventListener("init-builder",et),window.addEventListener("add-entity",en),window.addEventListener("remove-entity",ea),window.addEventListener("move-entity",ed),window.addEventListener("force-update-entity-props",eo),window.addEventListener("update-entity-prop",ei),window.addEventListener("set-global-style",ee),window.addEventListener("update-global-swatches-data",er),window.addEventListener("on-off-header-footer",el),window.addEventListener("update-create-theme-section-count",es),window.addEventListener("update-shop-plan",ec),window.addEventListener("set-dynamic-product",ew),window.addEventListener("set-dynamic-collection",eu),window.addEventListener("update-item-name",ev),window.addEventListener("update-item-attribute",ey),window.addEventListener("set-product-offer",ef),window.addEventListener("set-dynamic-discount-offer",eh),window.addEventListener("update-sale-page-product-id",eE),window.addEventListener("limit-create-theme-section",eg),window.addEventListener("update-interaction-is-select-on-page",eL),window.addEventListener("update-interaction-item",eI),window.addEventListener("update-interaction-setting-type",eb),window.addEventListener("change-sidebar-mode",eS),window.addEventListener("update-font-type",ep),window.addEventListener("update-price-with-currency",em),()=>{window.removeEventListener("update-shop-info",Z),window.removeEventListener("revalidate-query",Y),window.removeEventListener("init-builder",et),window.removeEventListener("add-entity",en),window.removeEventListener("remove-entity",ea),window.removeEventListener("move-entity",ed),window.removeEventListener("update-entity-prop",ei),window.removeEventListener("set-global-style",ee),window.removeEventListener("update-global-swatches-data",er),window.removeEventListener("on-off-header-footer",el),window.removeEventListener("update-create-theme-section-count",es),window.removeEventListener("update-shop-plan",ec),window.removeEventListener("update-price-with-currency",em),window.removeEventListener("set-dynamic-product",ew),window.removeEventListener("set-dynamic-collection",eu),window.removeEventListener("update-item-name",ev),window.removeEventListener("update-item-attribute",ey),window.removeEventListener("set-product-offer",ef),window.removeEventListener("update-sale-page-product-id",eE),window.removeEventListener("limit-create-theme-section",eg),window.removeEventListener("update-interaction-is-select-on-page",eL),window.removeEventListener("update-interaction-item",eI),window.removeEventListener("update-interaction-setting-type",eb),window.removeEventListener("update-font-type",ep)}),[en,ec,eo,ei,et,ed,ea,ee,er,Y,Z,el,es,ew,eu,ev,ey,ef,eE,eg,eI,eL,eb,ep,eS,eh,em]),e("div",{className:"toolbox"})};var Toolbox$1=r(Toolbox);export{Toolbox$1 as default};
@@ -1 +1 @@
1
- import{checkNotInOptionFont as e}from"./helpers/check-option-font.js";import{getFontsFromDataBuilder as t}from"./helpers/gen-fonts.js";import{sentryCaptureException as r}from"./helpers/sentry.js";let CHROME_UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",IE_UA="Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko";async function getFontForUA(e,t){try{return fetch(e,{headers:{"User-Agent":t}}).then(o=>200===o.status?o.text():(r("getFontForUA",`Unexpected status ${o.status}`,{url:e,UA:t}),""))}catch(o){return r("getFontForUA","Error fetching font",{url:e,UA:t,error:o}),""}}let composeFonts=e=>{let t=e.filter((e,t,r)=>t===r.findIndex(t=>t.family===e.family));return t.map(t=>{let r=e.filter(e=>e.family===t.family).reduce((e,t)=>[...e,...t.variants],[]).filter((e,t,r)=>t===r.findIndex(t=>t===e));return{...t,variants:r}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=e=>e?.trim().replace(/\s+/g,"+")??"",getOverrideUrlForFamily=e=>{let t=normalizeFamily(e);return GOOGLE_CSS2_OVERRIDES[e]??GOOGLE_CSS2_OVERRIDES[t]},isValidFont=(t,r)=>{let o="google"===t.type||"bunny"===t.type,n=e(t.family,r);return!(o&&n)&&(o||!t.type)},makeUrlBySourceFont=(e,t,r)=>{let o=composeFonts(e).map(e=>`${e.family.replace(/ /g,"+")}:${e.variants.join(",")}`).join("|");if("sans-serif"===o)return;let n=new URLSearchParams;n.append("family",o),n.append("display",r?.display||"swap"),r?.subset&&n.append("subset",r.subset),r?.effect&&n.append("effect",r.effect);let l=`https://fonts.bunny.net/css?family=${o}`,i=`https://fonts.googleapis.com/css?${decodeURIComponent(n.toString())}`;return"bunny"===t?l:i},createFontUrls=(e,t,r)=>{let o=e.filter(e=>isValidFont(e,r||"google"));if(!o.length)return;let n=o.filter((e,t,r)=>t===r.findIndex(t=>t.family===e.family)),l=[],i=[];for(let e of n){let t=getOverrideUrlForFamily(e.family);t&&"bunny"!==r?l.push(t):i.push(e)}let a=i.length?makeUrlBySourceFont(i,r||"google",t):void 0;return l.length&&a?[...l,a]:a?[a,...l]:l};async function getFonts(e,t,o=!0,n){let l=createFontUrls(e,t,n),i=Array.isArray(l)?l:l?[l]:[];if(!i.length)return"";if(o)return i.map(e=>`@import url('${e}');`).join("");let a="",s="";for(let e of i)try{let[t,r]=await Promise.all([getFontForUA(e,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(e,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")]),o=`${t}${r}`;a+=o,s+=`@import url('${e}');`}catch(t){r("getFonts","Error fetching font",{url:e,fontType:n,error:String(t)}),s+="",a+=""}let f=new TextEncoder().encode(a).length;return f<51200?a:s}let getFontFromGlobalStyle=(e,t)=>{if(!e)return"";try{let r=JSON.parse(e),o=r?.font??{},n=Object.entries(o).map(([,e])=>e);return getFonts(n,void 0,void 0,t)}catch{return""}};async function getFontStyleFromPageTemplate(e,r){let o=[];if(e.forEach(e=>{let r=t(e.data);o.push(...r)}),0===o.length)return[];let n=composeFonts(o),l=await getFonts(n,void 0,void 0,r);return l?[l]:[]}export{composeFonts,createFontUrls,getFontFromGlobalStyle,getFontStyleFromPageTemplate,getFonts};
1
+ import{checkNotInOptionFont as e}from"./helpers/check-option-font.js";import{getFontsFromDataBuilder as t}from"./helpers/gen-fonts.js";import{sentryCaptureException as r}from"./helpers/sentry.js";let CHROME_UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36",IE_UA="Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko";async function getFontForUA(e,t){try{return fetch(e,{headers:{"User-Agent":t}}).then(o=>200===o.status?o.text():(r("getFontForUA",`Unexpected status ${o.status}`,{url:e,UA:t}),""))}catch(o){return r("getFontForUA","Error fetching font",{url:e,UA:t,error:o}),""}}let composeFonts=e=>{let t=e.filter((e,t,r)=>t===r.findIndex(t=>t.family===e.family));return t.map(t=>{let r=e.filter(e=>e.family===t.family).reduce((e,t)=>[...e,...t.variants],[]).filter((e,t,r)=>t===r.findIndex(t=>t===e));return{...t,variants:r}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=e=>e?.trim().replace(/\s+/g,"+")??"",getOverrideUrlForFamily=e=>{let t=normalizeFamily(e);return GOOGLE_CSS2_OVERRIDES[e]??GOOGLE_CSS2_OVERRIDES[t]},isValidFont=(t,r,o)=>{let n="google"===t.type||"bunny"===t.type,l="theme"===t.type&&o,i=e(t.family,r);return!(n&&i)&&(n||!t.type||l)},makeUrlBySourceFont=(e,t,r)=>{let o=composeFonts(e).map(e=>`${e.family.replace(/ /g,"+")}:${e.variants.join(",")}`).join("|");if("sans-serif"===o)return;let n=new URLSearchParams;n.append("family",o),n.append("display",r?.display||"swap"),r?.subset&&n.append("subset",r.subset),r?.effect&&n.append("effect",r.effect);let l=`https://fonts.bunny.net/css?family=${o}`,i=`https://fonts.googleapis.com/css?${decodeURIComponent(n.toString())}`;return"bunny"===t?l:i},createFontUrls=(e,t,r,o)=>{let n=e.filter(e=>isValidFont(e,r||"google",o));if(!n.length)return;let l=n.filter((e,t,r)=>t===r.findIndex(t=>t.family===e.family)),i=[],a=[];for(let e of l){let t=getOverrideUrlForFamily(e.family);t&&"bunny"!==r?i.push(t):a.push(e)}let s=a.length?makeUrlBySourceFont(a,r||"google",t):void 0;return i.length&&s?[...i,s]:s?[s,...i]:i};async function getFonts(e,t,o=!0,n){let l=createFontUrls(e,t,n),i=Array.isArray(l)?l:l?[l]:[];if(!i.length)return"";if(o)return i.map(e=>`@import url('${e}');`).join("");let a="",s="";for(let e of i)try{let[t,r]=await Promise.all([getFontForUA(e,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(e,"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")]),o=`${t}${r}`;a+=o,s+=`@import url('${e}');`}catch(t){r("getFonts","Error fetching font",{url:e,fontType:n,error:String(t)}),s+="",a+=""}let f=new TextEncoder().encode(a).length;return f<51200?a:s}let getFontFromGlobalStyle=(e,t)=>{if(!e)return"";try{let r=JSON.parse(e),o=r?.font??{},n=Object.entries(o).map(([,e])=>e);return getFonts(n,void 0,void 0,t)}catch{return""}};async function getFontStyleFromPageTemplate(e,r){let o=[];if(e.forEach(e=>{let r=t(e.data);o.push(...r)}),0===o.length)return[];let n=composeFonts(o),l=await getFonts(n,void 0,void 0,r);return l?[l]:[]}export{composeFonts,createFontUrls,getFontFromGlobalStyle,getFontStyleFromPageTemplate,getFonts};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/pages",
3
- "version": "6.0.4",
3
+ "version": "6.0.7",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",