@gem-sdk/pages 11.2.0 → 12.0.0-dev.107

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.
Files changed (44) hide show
  1. package/dist/cjs/components/builder/Footer.js +1 -1
  2. package/dist/cjs/components/builder/Header.js +1 -1
  3. package/dist/cjs/components/builder/SwitchView.js +1 -1
  4. package/dist/cjs/components/builder/Toolbox.js +1 -1
  5. package/dist/cjs/components/image-to-layout/DropElement.js +1 -1
  6. package/dist/cjs/components/image-to-layout-upsell/DropElement.js +2 -0
  7. package/dist/cjs/components/image-to-layout-upsell/ImageToLayout.js +2 -0
  8. package/dist/cjs/constants/googleFontV1.js +1 -0
  9. package/dist/cjs/constants/index.js +1 -1
  10. package/dist/cjs/index.js +1 -1
  11. package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -1
  12. package/dist/cjs/libs/api/get-home-page-props.js +1 -1
  13. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -1
  14. package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -1
  15. package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -1
  16. package/dist/cjs/libs/api/get-static-page-props.js +1 -1
  17. package/dist/cjs/libs/constants/theme-font-keys.js +1 -0
  18. package/dist/cjs/libs/google-fonts.js +1 -1
  19. package/dist/cjs/libs/helpers/gen-css.js +1 -1
  20. package/dist/cjs/pages/builder-upsell.js +2 -0
  21. package/dist/cjs/pages/static-v2.js +2 -2
  22. package/dist/esm/components/builder/Footer.js +1 -1
  23. package/dist/esm/components/builder/Header.js +1 -1
  24. package/dist/esm/components/builder/SwitchView.js +1 -1
  25. package/dist/esm/components/builder/Toolbox.js +1 -1
  26. package/dist/esm/components/image-to-layout/DropElement.js +1 -1
  27. package/dist/esm/components/image-to-layout-upsell/DropElement.js +2 -0
  28. package/dist/esm/components/image-to-layout-upsell/ImageToLayout.js +2 -0
  29. package/dist/esm/constants/googleFontV1.js +1 -0
  30. package/dist/esm/constants/index.js +1 -1
  31. package/dist/esm/index.js +1 -1
  32. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -1
  33. package/dist/esm/libs/api/get-home-page-props.js +1 -1
  34. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -1
  35. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -1
  36. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -1
  37. package/dist/esm/libs/api/get-static-page-props.js +1 -1
  38. package/dist/esm/libs/constants/theme-font-keys.js +1 -0
  39. package/dist/esm/libs/google-fonts.js +1 -1
  40. package/dist/esm/libs/helpers/gen-css.js +1 -1
  41. package/dist/esm/pages/builder-upsell.js +2 -0
  42. package/dist/esm/pages/static-v2.js +2 -2
  43. package/dist/types/index.d.ts +9 -1
  44. package/package.json +11 -10
@@ -1 +1 @@
1
- import{checkNotInOptionFont as t}from"./helpers/check-option-font.js";import{getFontsFromDataBuilder as e}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(t,e){try{return fetch(t,{headers:{"User-Agent":e}}).then(a=>200===a.status?a.text():(r("getFontForUA",`Unexpected status ${a.status}`,{url:t,UA:e}),""))}catch(a){return r("getFontForUA","Error fetching font",{url:t,UA:e,error:a}),""}}let composeFonts=t=>{let e=t.filter((t,e,r)=>e===r.findIndex(e=>e.family===t.family));return e.map(e=>{let r=t.filter(t=>t.family===e.family).reduce((t,e)=>[...t,...e.variants],[]).filter((t,e,r)=>e===r.findIndex(e=>e===t));return{...e,variants:r}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=t=>t?.trim().replace(/\s+/g,"+")??"",getOverrideUrlForFamily=t=>{let e=normalizeFamily(t);return GOOGLE_CSS2_OVERRIDES[t]??GOOGLE_CSS2_OVERRIDES[e]},VARIANT_WEIGHT_MAP={regular:"400",normal:"400",bold:"700",italic:"400italic"},isValidFont=(e,r,a)=>{let o="google"===e.type||"bunny"===e.type,n="theme"===e.type&&a,i=t(e.family,r);return!(o&&i)&&(o||!e.type||n)},normalizeVariant=t=>{let e=String(t).toLowerCase().trim();return VARIANT_WEIGHT_MAP[e]??t},sortFontVariants=t=>{let e=t=>{let e=String(t).toLowerCase().trim(),r=e.includes("italic"),a=e.replace("italic","").trim(),o=VARIANT_WEIGHT_MAP[a]??a,n=parseInt(o,10)||400;return{weight:n,isItalic:r}};return[...t].sort((t,r)=>{let a=e(t),o=e(r);return a.weight!==o.weight?a.weight-o.weight:a.isItalic!==o.isItalic?a.isItalic?1:-1:0})},makeUrlBySourceFont=(t,e,r)=>{let a=composeFonts(t).map(t=>{let e=t.variants.map(t=>normalizeVariant(t)),r=sortFontVariants(e);return`${t.family.replace(/ /g,"+")}:${r.join(",")}`}).join("|");if("sans-serif"===a)return;let o=new URLSearchParams;o.append("family",a),o.append("display",r?.display||"swap"),r?.subset&&o.append("subset",r.subset),r?.effect&&o.append("effect",r.effect);let n=`https://fonts.bunny.net/css?family=${a}`,i=`https://fonts.googleapis.com/css?${decodeURIComponent(o.toString())}`;return"bunny"===e?n:i},createFontUrls=(t,e,r,a)=>{let o=t.filter(t=>isValidFont(t,r||"google",a));if(!o.length)return;let n=o.filter((t,e,r)=>e===r.findIndex(e=>e.family===t.family)),i=[],l=[];for(let t of n){let e=getOverrideUrlForFamily(t.family);e&&"bunny"!==r?i.push(e):l.push(t)}let s=l.length?makeUrlBySourceFont(l,r||"google",e):void 0;return i.length&&s?[...i,s]:s?[s,...i]:i};async function getFonts(t,e,a=!0,o){let n=createFontUrls(t,e,o),i=Array.isArray(n)?n:n?[n]:[];if(!i.length)return"";if(a)return i.map(t=>`@import url('${t}');`).join("");let l="",s="";for(let t of i)try{let[e,r]=await Promise.all([getFontForUA(t,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(t,"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")]),a=`${e}${r}`;l+=a,s+=`@import url('${t}');`}catch(e){r("getFonts","Error fetching font",{url:t,fontType:o,error:String(e)}),s+="",l+=""}let f=new TextEncoder().encode(l).length;return f<51200?l:s}let extractFontsFromPageTemplate=(t,r)=>{let a=[];return t.forEach(t=>{a.push(...e(t.data,r))}),composeFonts(a)},extractVariantFromTypography=(t,e)=>{let r="400";if(null!=t){let e=String(t).toLowerCase().trim();r=normalizeVariant(e)}let a=r,o=e&&"italic"===e.toLowerCase();return o&&!r.includes("italic")&&(a=r.includes("i")?r:`${r}italic`),a},HEADING_FONT_PREFIX="heading-",SUBHEADING_FONT_PREFIX="subheading-",PARAGRAPH_FONT_PREFIX="paragraph-",extractTypographyVariants=t=>{let e=t?.typography??{},r=t?.font??{},a=new Map;Object.entries(e).forEach(([t,e])=>{if(!e||"object"!=typeof e)return;let o=t.startsWith(HEADING_FONT_PREFIX)||t.startsWith(SUBHEADING_FONT_PREFIX)?r.heading?"heading":void 0:t.startsWith(PARAGRAPH_FONT_PREFIX)&&r.body?"body":void 0,n=e.desktop,i=n?.fontFamily,l=i||o;["desktop","mobile","tablet"].forEach(t=>{let o=e[t];if(!o||"object"!=typeof o)return;let i=o.fontFamily||l;if(!i||"string"!=typeof i||!r[i])return;let s=o.fontWeight??n?.fontWeight,f=o.fontStyle??n?.fontStyle;if(null==s)return;let p=extractVariantFromTypography(s,f);a.has(i)||a.set(i,new Set),a.get(i).add(p)})});let o={};return a.forEach((t,e)=>{let a=r[e];a&&(o[e]={variants:Array.from(t).sort(),family:a.family})}),o},mapTypographyToFontFamily=t=>{let e=t?.typography??{},r=t?.font??{},a=t?.font??{},o={};return Object.entries(e).forEach(([t,e])=>{if(!e||"object"!=typeof e)return;let n=e.desktop,i=e.mobile,l=e.tablet,s=t.startsWith(HEADING_FONT_PREFIX)||t.startsWith(SUBHEADING_FONT_PREFIX)?a.heading?"heading":void 0:t.startsWith(PARAGRAPH_FONT_PREFIX)&&a.body?"body":void 0,f=n?.fontFamily||i?.fontFamily||l?.fontFamily||s;if(!f||"string"!=typeof f)return;let p=r[f],y=a[f],c=p?.family||y?.family||f,m=p?.type||y?.type||"google";c&&(o[t]={family:c,type:m})}),o},getFontLinkFromGlobalStyle=async(t,e)=>{if(!t)return"";try{let r=JSON.parse(t),a=r?.font??{},o=Object.values(a),n=extractTypographyVariants(r);Object.keys(n).length>0&&(o=Object.entries(a).filter(([t])=>n[t]).map(([t,e])=>({...e,variants:n[t].variants})));let i=composeFonts(o);return getFonts(i,void 0,void 0,e)}catch{return""}},getFontFromGlobalStyle=(t,e)=>{if(!t)return"";try{let r=JSON.parse(t),a=r?.font??{},o=Object.entries(a).map(([,t])=>t);return getFonts(o,void 0,void 0,e)}catch{return""}};async function getFontStyleFromPageTemplate(t,e,r){let a,o=null;if(r)try{o=JSON.parse(r),a=mapTypographyToFontFamily(o)}catch{}let n=extractFontsFromPageTemplate(t,a);if(!o){if(0===n.length)return[];let t=await getFonts(n,void 0,void 0,e);return t?[t]:[]}let i=extractTypographyVariants(o),l=new Map;for(let t of Object.values(i)){let e=l.get(t.family);if(!e){l.set(t.family,new Set(t.variants));continue}t.variants.forEach(t=>e.add(t))}if(0===(n=n.map(t=>{let e=l.get(t.family);if(!e)return t;let r=t.variants.filter(t=>!e.has(t));return 0===r.length?null:{...t,variants:r}}).filter(t=>null!==t)).length)return[];let s=await getFonts(n,void 0,void 0,e);return s?[s]:[]}export{composeFonts,createFontUrls,extractTypographyVariants,getFontFromGlobalStyle,getFontLinkFromGlobalStyle,getFontStyleFromPageTemplate,getFonts,mapTypographyToFontFamily};
1
+ import{checkNotInOptionFont as t}from"./helpers/check-option-font.js";import{getFontsFromDataBuilder as e}from"./helpers/gen-fonts.js";import{sentryCaptureException as r}from"./helpers/sentry.js";import{THEME_FONT_CSS_KEYS as o}from"./constants/theme-font-keys.js";import{googleFontFamilies as n}from"../constants/googleFontV1.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(t,e){try{return fetch(t,{headers:{"User-Agent":e}}).then(o=>200===o.status?o.text():(r("getFontForUA",`Unexpected status ${o.status}`,{url:t,UA:e}),""))}catch(o){return r("getFontForUA","Error fetching font",{url:t,UA:e,error:o}),""}}let composeFonts=t=>{let e=t.filter((t,e,r)=>e===r.findIndex(e=>e.family===t.family));return e.map(e=>{let r=t.filter(t=>t.family===e.family).reduce((t,e)=>[...t,...e.variants],[]).filter((t,e,r)=>e===r.findIndex(e=>e===t));return{...e,variants:r}})},GOOGLE_CSS2_OVERRIDES={"Roboto Flex":"https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wght@8..144,100..1000&display=swap"},normalizeFamily=t=>t?.trim().replace(/\s+/g,"+")??"",getFontApiVersion=t=>t.includes("fonts.googleapis.com/css2")?"css2":t.includes("fonts.bunny.net")?"bunny":"css1",getOverrideUrlForFamily=t=>{let e=normalizeFamily(t);return GOOGLE_CSS2_OVERRIDES[t]??GOOGLE_CSS2_OVERRIDES[e]},VARIANT_WEIGHT_MAP={regular:"400",normal:"400",bold:"700",italic:"400italic"},googleFontFamiliesSet=new Set(n),IGNORED_FONT_FAMILIES=[...o,...o.map(t=>`--g-${t}`)],isValidFont=(e,r,o)=>{if(("google"===r||"google"===e.type)&&!googleFontFamiliesSet.has(e.family))return!1;let n="google"===e.type||"bunny"===e.type,a="theme"===e.type&&o,i=t(e.family,r);return!(n&&i)&&(n||!e.type||a)},normalizeVariant=t=>{let e=String(t).toLowerCase().trim();return VARIANT_WEIGHT_MAP[e]??t},sortFontVariants=t=>{let e=t=>{let e=String(t).toLowerCase().trim(),r=e.includes("italic"),o=e.replace("italic","").trim(),n=VARIANT_WEIGHT_MAP[o]??o,a=parseInt(n,10)||400;return{weight:a,isItalic:r}};return[...t].sort((t,r)=>{let o=e(t),n=e(r);return o.weight!==n.weight?o.weight-n.weight:o.isItalic!==n.isItalic?o.isItalic?1:-1:0})},makeUrlBySourceFont=(t,e,r)=>{let o=composeFonts(t).map(t=>{let e=t.variants.map(t=>normalizeVariant(t)),r=sortFontVariants(e);return`${t.family.replace(/ /g,"+")}:${r.join(",")}`}).join("|");if("sans-serif"===o)return;let n=new URLSearchParams;return(n.append("family",o),n.append("display",r?.display||"swap"),"bunny"===e)?`https://fonts.bunny.net/css?${decodeURIComponent(n.toString())}`:(r?.subset&&n.append("subset",r.subset),r?.effect&&n.append("effect",r.effect),`https://fonts.googleapis.com/css?${decodeURIComponent(n.toString())}`)},createFontUrls=(t,e,r,o)=>{let n=t.filter(t=>isValidFont(t,r||"google",o));if(!n.length)return;let a=n.filter((t,e,r)=>e===r.findIndex(e=>e.family===t.family)),i=[],l=[];for(let t of a){let e=getOverrideUrlForFamily(t.family);e&&"bunny"!==r?i.push(e):l.push(t)}let s=l.length?makeUrlBySourceFont(l,r||"google",e):void 0;return i.length&&s?[...i,s]:s?[s,...i]:i};async function getFonts(t,e,o=!0,n){let a=t.filter(t=>!IGNORED_FONT_FAMILIES.includes(t.family)),i=createFontUrls(a,e,n),l=Array.isArray(i)?i:i?[i]:[];if(!l.length)return"";if(o)return l.map(t=>`@import url('${t}');`).join("");let s="",f="";for(let t of l)try{let[e,r]=await Promise.all([getFontForUA(t,"Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko"),getFontForUA(t,"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=`${e}${r}`;s+=o,f+=`@import url('${t}');`}catch(o){let e=getFontApiVersion(t);r("getFonts",`Error fetching font ${e}`,{url:t,fontType:n,fontApiVersion:e,error:String(o)}),f+="",s+=""}let p=new TextEncoder().encode(s).length;return p<51200?s:f}let extractFontsFromPageTemplate=(t,r)=>{let o=[];return t.forEach(t=>{o.push(...e(t.data,r))}),composeFonts(o)},extractVariantFromTypography=(t,e)=>{let r="400";if(null!=t){let e=String(t).toLowerCase().trim();r=normalizeVariant(e)}let o=r,n=e&&"italic"===e.toLowerCase();return n&&!r.includes("italic")&&(o=r.includes("i")?r:`${r}italic`),o},HEADING_FONT_PREFIX="heading-",SUBHEADING_FONT_PREFIX="subheading-",PARAGRAPH_FONT_PREFIX="paragraph-",extractTypographyVariants=t=>{let e=t?.typography??{},r=t?.font??{},o=new Map;Object.entries(e).forEach(([t,e])=>{if(!e||"object"!=typeof e)return;let n=t.startsWith(HEADING_FONT_PREFIX)||t.startsWith(SUBHEADING_FONT_PREFIX)?r.heading?"heading":void 0:t.startsWith(PARAGRAPH_FONT_PREFIX)&&r.body?"body":void 0,a=e.desktop,i=a?.fontFamily,l=i||n;["desktop","mobile","tablet"].forEach(t=>{let n=e[t];if(!n||"object"!=typeof n)return;let i=n.fontFamily||l;if(!i||"string"!=typeof i||!r[i])return;let s=n.fontWeight??a?.fontWeight,f=n.fontStyle??a?.fontStyle;if(null==s)return;let p=extractVariantFromTypography(s,f);o.has(i)||o.set(i,new Set),o.get(i).add(p)})});let n={};return o.forEach((t,e)=>{let o=r[e];o&&(n[e]={variants:Array.from(t).sort(),family:o.family})}),n},mapTypographyToFontFamily=t=>{let e=t?.typography??{},r=t?.font??{},o=t?.font??{},n={};return Object.entries(e).forEach(([t,e])=>{if(!e||"object"!=typeof e)return;let a=e.desktop,i=e.mobile,l=e.tablet,s=t.startsWith(HEADING_FONT_PREFIX)||t.startsWith(SUBHEADING_FONT_PREFIX)?o.heading?"heading":void 0:t.startsWith(PARAGRAPH_FONT_PREFIX)&&o.body?"body":void 0,f=a?.fontFamily||i?.fontFamily||l?.fontFamily||s;if(!f||"string"!=typeof f)return;let p=r[f],y=o[f],c=p?.family||y?.family||f,m=p?.type||y?.type||"google";c&&(n[t]={family:c,type:m})}),n},getFontLinkFromGlobalStyle=async(t,e)=>{if(!t)return"";try{let r=JSON.parse(t),o=r?.font??{},n=Object.values(o),a=extractTypographyVariants(r);Object.keys(a).length>0&&(n=Object.entries(o).filter(([t])=>a[t]).map(([t,e])=>({...e,variants:a[t].variants})));let i=composeFonts(n);return getFonts(i,void 0,void 0,e)}catch{return""}},getFontFromGlobalStyle=(t,e)=>{if(!t)return"";try{let r=JSON.parse(t),o=r?.font??{},n=Object.entries(o).map(([,t])=>t);return getFonts(n,void 0,void 0,e)}catch{return""}};async function getFontStyleFromPageTemplate(t,e,r){let o,n=null;if(r)try{n=JSON.parse(r),o=mapTypographyToFontFamily(n)}catch{}let a=extractFontsFromPageTemplate(t,o);if(!n){if(0===a.length)return[];let t=await getFonts(a,void 0,void 0,e);return t?[t]:[]}let i=extractTypographyVariants(n),l=new Map;for(let t of Object.values(i)){let e=l.get(t.family);if(!e){l.set(t.family,new Set(t.variants));continue}t.variants.forEach(t=>e.add(t))}if(0===(a=a.map(t=>{let e=l.get(t.family);if(!e)return t;let r=t.variants.filter(t=>!e.has(t));return 0===r.length?null:{...t,variants:r}}).filter(t=>null!==t)).length)return[];let s=await getFonts(a,void 0,void 0,e);return s?[s]:[]}export{composeFonts,createFontUrls,extractTypographyVariants,getFontFromGlobalStyle,getFontLinkFromGlobalStyle,getFontStyleFromPageTemplate,getFonts,mapTypographyToFontFamily};
@@ -1 +1 @@
1
- import{DEVICES as e,getShortName as t}from"@gem-sdk/core";import r from"deepmerge";let baseDevices={tablet:"1024px",mobile:"767px"},flattenObject=(e,t)=>Object.keys(e).reduce((r,n)=>{let o=t?`${t}-`:"";return"object"==typeof e[n]&&null!==e[n]&&Object.keys(e[n]).length>0?Object.assign(r,flattenObject(e[n],o+n)):r[o+n]=e[n],r},{}),mapObject=e=>Object.entries(e??{}).reduce((e,[r,n])=>({...e,[t(r)]:"object"==typeof n?mapObject(n):n}),{}),getValueByDevice=(e,t)=>{let r={typography:Object.fromEntries(Object.entries(e?.typography??{}).map(([e,r])=>{let n={...r?.[t]};return n?(n.fontFamily&&(n.fontFamily=`var(--g-font-${n.fontFamily}, ${n.fontFamily})`),[e,n]):[e,void 0]})),spacing:Object.fromEntries(Object.entries(e?.spacing??{}).map(([e,r])=>[e,r?.[t]])),container:Object.fromEntries(Object.entries(e?.container??{}).map(([e,r])=>[e,r?.[t]])),font:Object.fromEntries(Object.entries(e?.font??{}).map(([e,t])=>[e,t?.family])),theme:{font:Object.fromEntries(Object.entries(e?.theme?.font??{}).map(([e,t])=>[e,t?.family]))}};return r},quoteFontName=e=>["sans-serif"].includes(e)?e:`'${e}'`,convertLetterSpacingToEm=e=>"string"==typeof e&&e.includes("%")?`${(.01*parseFloat(e)).toFixed(2)}em`:e,genCSSVariable=e=>Object.entries(mapObject(flattenObject(e))).map(([e,t])=>{if(void 0!==t){if(["font-heading","font-body","theme-font-heading","theme-font-body"].includes(e))return`--g-${e}: ${quoteFontName(t)}`;if(e.includes("-ls")){let r=convertLetterSpacingToEm(t);return`--g-${e}:${r}`}return`--g-${e}:${t}`}}).filter(e=>void 0!==e).join(";"),genCSS=(t,n)=>{if(!t)return"";let o={};try{if(o="string"==typeof t?JSON.parse(t):t,n){let e=getValueByDevice(o,"desktop"),t=getValueByDevice(o,"mobile"),n=r(e,t);n.color=o.color,n.radius=o.radius;let i=genCSSVariable(n);return`:root{${i}}`}return e.map(e=>{let t=getValueByDevice(o,e);"desktop"===e&&(t.color=o.color,t.radius=o.radius);let r=genCSSVariable(t);return"desktop"===e?`:root{${r}}`:`@media (max-width: ${baseDevices[e]}) {:root{${r}}}`}).join("\n")}catch{return""}};export{genCSS};
1
+ import{DEVICES as e,getShortName as t}from"@gem-sdk/core";import{THEME_FONT_CSS_KEYS as r}from"../constants/theme-font-keys.js";import n from"deepmerge";let baseDevices={tablet:"1024px",mobile:"767px"},flattenObject=(e,t)=>Object.keys(e).reduce((r,n)=>{let o=t?`${t}-`:"";return"object"==typeof e[n]&&null!==e[n]&&Object.keys(e[n]).length>0?Object.assign(r,flattenObject(e[n],o+n)):r[o+n]=e[n],r},{}),mapObject=e=>Object.entries(e??{}).reduce((e,[r,n])=>({...e,[t(r)]:"object"==typeof n?mapObject(n):n}),{}),getValueByDevice=(e,t)=>{let r={typography:Object.fromEntries(Object.entries(e?.typography??{}).map(([e,r])=>{let n={...r?.[t]};return n?(n.fontFamily&&(n.fontFamily=`var(--g-font-${n.fontFamily}, ${n.fontFamily})`),[e,n]):[e,void 0]})),spacing:Object.fromEntries(Object.entries(e?.spacing??{}).map(([e,r])=>[e,r?.[t]])),container:Object.fromEntries(Object.entries(e?.container??{}).map(([e,r])=>[e,r?.[t]])),font:Object.fromEntries(Object.entries(e?.font??{}).map(([e,t])=>[e,t?.family])),theme:{font:Object.fromEntries(Object.entries(e?.theme?.font??{}).map(([e,t])=>[e,t?.family]))}};return r},quoteFontName=e=>["sans-serif"].includes(e)?e:`'${e}'`,convertLetterSpacingToEm=e=>"string"==typeof e&&e.includes("%")?`${(.01*parseFloat(e)).toFixed(2)}em`:e,genCSSVariable=e=>Object.entries(mapObject(flattenObject(e))).map(([e,t])=>{if(void 0!==t){if(r.includes(e))return`--g-${e}: ${quoteFontName(t)}`;if(e.includes("-ls")){let r=convertLetterSpacingToEm(t);return`--g-${e}:${r}`}return`--g-${e}:${t}`}}).filter(e=>void 0!==e).join(";"),genCSS=(t,r)=>{if(!t)return"";let o={};try{if(o="string"==typeof t?JSON.parse(t):t,r){let e=getValueByDevice(o,"desktop"),t=getValueByDevice(o,"mobile"),r=n(e,t);r.color=o.color,r.radius=o.radius;let i=genCSSVariable(r);return`:root{${i}}`}return e.map(e=>{let t=getValueByDevice(o,e);"desktop"===e&&(t.color=o.color,t.radius=o.radius);let r=genCSSVariable(t);return"desktop"===e?`:root{${r}}`:`@media (max-width: ${baseDevices[e]}) {:root{${r}}}`}).join("\n")}catch{return""}};export{genCSS};
@@ -0,0 +1,2 @@
1
+ 'use client';
2
+ import{jsxs as e,Fragment as o,jsx as t}from"react/jsx-runtime";import{useI18n as r,PageProvider as i,BuilderComponentProvider as n,SectionProvider as p,I18nProvider as m,BuilderPreviewProvider as l}from"@gem-sdk/core";import{NextSeo as s}from"next-seo";import a from"next/head";import{useState as d,useMemo as g,useEffect as c}from"react";import u from"../components/builder/Toolbox.js";import f from"../components/builder/Header.js";import y from"../components/builder/Footer.js";import h from"../components/builder/PopupManager.js";import T from"../components/image-to-layout-upsell/ImageToLayout.js";import b from"../components/image-to-layout/AddSectionImageToLayout.js";import j from"../components/builder/Toolbar.js";import x from"../components/builder/SwitchView.js";import S from"../components/builder/Body.js";let BuilderUpsellPage=({components:O,seo:v,themeStyle:I,fontStyle:L,sectionData:w,pageType:P,editorImageToLayout:M,isThemeSectionEditor:N,hiddenToolbar:R,pageName:_,isOriginTemplate:B})=>{let[H,E]=d(!1),{t:U}=r(),k=g(()=>({ROOT:{uid:"ROOT",tag:"Root",label:"Root",childrens:[]}}),[]);c(()=>{E(!0)},[]);let z=()=>{window?.parent?.postMessage(JSON.stringify({type:"open-page-setting"}),"*")};return e(o,{children:[t(s,{...v}),e(a,{children:[I&&t("style",{type:"text/css",id:"global-style",dangerouslySetInnerHTML:{__html:I}}),L&&t("style",{"data-id":"google-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:L}})]}),t(i,{children:t(n,{components:O,children:t(p,{data:w,children:t(m,{t:U,children:e(l,{pageName:_,state:k,isThemeSectionEditor:N,children:[t(u,{}),!R&&t(j,{}),t(h,{}),H&&e("div",{className:"builder gp-z-1 gp-relative",children:[!R&&(N?t("div",{className:"gp-h-[40px] gp-bg-[#ffffff] gp-border-b-[1px] gp-border-[#eeeeee]",children:t(x,{})}):t(f,{pageType:P,isOriginTemplate:B,openPageSetting:z})),t(S,{pageType:P,isThemeSectionEditor:N}),t(T,{editorImageToLayout:M||!1}),t(b,{editorImageToLayout:M||!1}),t("div",{id:"visual-content"}),!N&&!R&&t(y,{pageType:P,isOriginTemplate:B,openPageSetting:z})]})]},"preview")})})})})]})};export{BuilderUpsellPage};
@@ -1,5 +1,5 @@
1
- import{jsx as e,jsxs as t,Fragment as s}from"react/jsx-runtime";import{useI18n as a,PageProvider as r,BuilderComponentProvider as l,SectionProvider as n,I18nProvider as i,BuilderProvider as o,Render as p}from"@gem-sdk/core";import{NextSeo as c}from"next-seo";import g from"next/head";import{useRouter as m}from"next/router";import{useTrackingView as d}from"../libs/hooks/use-tracking-view.js";import{parseHtml as u}from"../libs/parse-html.js";import h from"../components/builder/Header.js";import f from"../components/FooterForPostPurchase.js";import y from"next/script";import{useEffect as _}from"react";let StaticPageV2=({components:b,builderData:v,sectionData:S,seo:x,themeStyle:k,fontStyle:P,elementFontStyle:N,customCodeHeader:T,shopToken:j,pageHandle:H,customFonts:L,isPostPurchase:$,shopName:E,productOffers:F,publicStoreFrontData:I,dynamicDiscountOffer:M,isPreview:q,interaction:w,pageBackground:A})=>{let O=m(),{t:z}=a(),U=process.env.NEXT_GP_BASE_ASSET_URL||"https://assets.gemcommerce.xyz";d(j,H,O.isFallback);let B="custom-code-header";if(_(()=>{let e=document.querySelectorAll(`[class*="${B}-"]`),t=[];e.length>1&&e.forEach(e=>{let s=e.className;if(t.includes(s)){e.remove();return}t.push(s)})},[]),O.isFallback)return e("div",{className:"gp-flex gp-h-[100vh] gp-items-center gp-justify-center",children:t("div",{className:"gp-flex gp-gap-2",children:[e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_alternate] gp-rounded-full gp-bg-slate-800"}),e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_200ms_linear_alternate] gp-rounded-full gp-bg-slate-800"}),e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_500ms_alternate] gp-rounded-full gp-bg-slate-800"})]})});let D=(w?.value||[]).length>0;return t(s,{children:[e(c,{...x}),t(g,{children:[u(B,T,!0),k&&e("style",{"data-id":"global-style",type:"text/css",dangerouslySetInnerHTML:{__html:k}},"global-style"),P&&e("style",{"data-id":"google-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:P}},"google-fonts"),N&&N.map(t=>e("style",{"data-id":"google-element-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:t}},t)),L&&e("style",{"data-id":"custom-element-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:L}},P),A?.isUsePageBackground&&A?.background&&e("style",{children:`
1
+ import{jsx as e,jsxs as t,Fragment as s}from"react/jsx-runtime";import{useI18n as a,PageProvider as r,BuilderComponentProvider as l,I18nProvider as n,SectionProvider as i,BuilderProvider as o,Render as p}from"@gem-sdk/core";import{NextSeo as c}from"next-seo";import g from"next/head";import{useRouter as m}from"next/router";import{useTrackingView as d}from"../libs/hooks/use-tracking-view.js";import{parseHtml as u}from"../libs/parse-html.js";import h from"../components/builder/Header.js";import f from"../components/FooterForPostPurchase.js";import y from"next/script";import{useEffect as _}from"react";let StaticPageV2=({components:b,builderData:v,sectionData:S,seo:x,themeStyle:k,fontStyle:P,elementFontStyle:N,customCodeHeader:T,shopToken:j,pageHandle:H,customFonts:L,isPostPurchase:M,shopName:$,productOffers:E,publicStoreFrontData:F,dynamicDiscountOffer:I,isPreview:q,interaction:w,pageBackground:A,sellingPlanSetting:O,buyerConsentPreCheck:z})=>{let C=m(),{t:U}=a(),B=process.env.NEXT_GP_BASE_ASSET_URL||"https://assets.gemcommerce.xyz";d(j,H,C.isFallback);let D="custom-code-header";if(_(()=>{let e=document.querySelectorAll(`[class*="${D}-"]`),t=[];e.length>1&&e.forEach(e=>{let s=e.className;if(t.includes(s)){e.remove();return}t.push(s)})},[]),C.isFallback)return e("div",{className:"gp-flex gp-h-[100vh] gp-items-center gp-justify-center",children:t("div",{className:"gp-flex gp-gap-2",children:[e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_alternate] gp-rounded-full gp-bg-slate-800"}),e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_200ms_linear_alternate] gp-rounded-full gp-bg-slate-800"}),e("span",{className:"gp-aspect-square gp-h-2 gp-animate-[flashing_500ms_infinite_500ms_alternate] gp-rounded-full gp-bg-slate-800"})]})});let R=(w?.value||[]).length>0;return t(s,{children:[e(c,{...x}),t(g,{children:[u(D,T,!0),k&&e("style",{"data-id":"global-style",type:"text/css",dangerouslySetInnerHTML:{__html:k}},"global-style"),P&&e("style",{"data-id":"google-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:P}},"google-fonts"),N&&N.map(t=>e("style",{"data-id":"google-element-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:t}},t)),L&&e("style",{"data-id":"custom-element-fonts",type:"text/css",dangerouslySetInnerHTML:{__html:L}},P),A?.isUsePageBackground&&A?.background&&e("style",{children:`
2
2
  body {
3
3
  background: ${A.background};
4
4
  }
5
- `},`page_background_${A?.background}`)]}),e(r,{productOffers:F,publicStoreFrontData:I,dynamicDiscountOffer:M,children:e(l,{components:b,children:t("div",{className:`${$?"gp-bg-white post-purchase-page":""} `,role:"main",children:[$&&e(h,{pageType:"POST_PURCHASE"}),D&&e("div",{dangerouslySetInnerHTML:{__html:`<div id="gp-interaction" style="display: none;">${JSON.stringify(w?.value||[])}</div>`}}),e(n,{data:S,children:e(i,{t:z,children:v?.map(s=>t(o,{state:s.data,lazy:s.lazy,priority:s.priority,isPostPurchase:$,isPreview:q,children:[e(p,{uid:s.uid}),D&&e(y,{defer:!0,src:`${U}/assets-v2/gp-flow-action-lip-v7-5.js`})]},s.uid))})}),$&&e(f,{shopName:E||""})]})})})]})};export{StaticPageV2};
5
+ `},`page_background_${A?.background}`)]}),e(r,{productOffers:E,publicStoreFrontData:F,dynamicDiscountOffer:I,sellingPlanMeta:O,buyerConsentChecked:z,children:e(l,{components:b,children:e(n,{t:U,children:t("div",{className:`${M?"gp-bg-white post-purchase-page":""} `,role:"main",children:[M&&e(h,{pageType:"POST_PURCHASE"}),R&&e("div",{dangerouslySetInnerHTML:{__html:`<div id="gp-interaction" style="display: none;">${JSON.stringify(w?.value||[])}</div>`}}),e(i,{data:S,children:v?.map(s=>t(o,{state:s.data,lazy:s.lazy,priority:s.priority,isPostPurchase:M,isPreview:q,children:[e(p,{uid:s.uid}),R&&e(y,{defer:!0,src:`${B}/assets-v2/gp-flow-action-lip-v7-5.js`})]},s.uid))}),M&&e(f,{shopName:$||""})]})})})})]})};export{StaticPageV2};
@@ -92,6 +92,9 @@ type BuilderPageProps = {
92
92
  pageName: string;
93
93
  isOriginTemplate?: boolean;
94
94
  };
95
+ type BuilderUpsellPageProps = BuilderPageProps & {
96
+ isUpsellBuilder?: boolean;
97
+ };
95
98
  type CollectionDetailPageProps = PageBuilderProps & {
96
99
  collection?: CollectionQueryResponse['collection'];
97
100
  };
@@ -110,6 +113,8 @@ type StaticPagePropsV2 = PageBuilderPropsV2 & {
110
113
  publicStoreFrontData?: PublicStoreFrontData | null;
111
114
  isPreview?: boolean;
112
115
  domain?: string;
116
+ sellingPlanSetting?: Record<string, any>;
117
+ buyerConsentPreCheck?: Record<string, boolean>;
113
118
  };
114
119
  type SharePageAPIResponse = {
115
120
  sharedPage: SharePageProps;
@@ -187,6 +192,7 @@ declare const getPostPurchasePropsPreview: (fetcher: FetchFunc, librarySaleFunne
187
192
  currentOfferID: string;
188
193
  isLibraryTemplate?: boolean;
189
194
  isShopLibraryPage?: boolean;
195
+ sellingPlanSetting?: Record<string, any>;
190
196
  }) => Promise<Omit<StaticPagePropsV2, 'publicStoreFrontData'>>;
191
197
 
192
198
  declare const getStaticPagePropsPreview: (fetcher: FetchFunc, shopifyFetcher: FetchFunc) => (slug: string) => Promise<PageBuilderPropsV2>;
@@ -349,8 +355,10 @@ declare const StaticPage: React.FC<PageBuilderProps & AdditionalPageBuilderProps
349
355
 
350
356
  declare const BuilderPage: React.FC<BuilderPageProps>;
351
357
 
358
+ declare const BuilderUpsellPage: React.FC<BuilderUpsellPageProps>;
359
+
352
360
  declare const StaticPageV2: React.FC<StaticPagePropsV2 & AdditionalPageBuilderProps>;
353
361
 
354
362
  declare const PreviewTemplate: React.FC<SharePageProps & AdditionalPageBuilderProps>;
355
363
 
356
- export { AppPropsWithLayout, BuilderPage, CollectionDetailPage, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PageBuilderPropsV2, PreviewPage, PreviewTemplate, ProductDetailPage, SharePageAPIResponse, SharePageProps, SharePageTracking, StaticPage, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, createTemplateFetcher, genCSS, getBuilderProps, getCollectionProps, getCollectionSharePageProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFontLinkFromGlobalStyle, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getSharePageContentProps, getSharePageProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
364
+ export { AppPropsWithLayout, BuilderPage, BuilderUpsellPage, CollectionDetailPage, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PageBuilderPropsV2, PreviewPage, PreviewTemplate, ProductDetailPage, SharePageAPIResponse, SharePageProps, SharePageTracking, StaticPage, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, createTemplateFetcher, genCSS, getBuilderProps, getCollectionProps, getCollectionSharePageProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFontLinkFromGlobalStyle, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getSharePageContentProps, getSharePageProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/pages",
3
- "version": "11.2.0",
3
+ "version": "12.0.0-dev.107",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",
@@ -16,23 +16,24 @@
16
16
  "build": "rollup -c ./../../helpers/rollup.config.mjs --environment NODE_ENV:production",
17
17
  "lint": "eslint ./src --ext .tsx,.ts",
18
18
  "type-check": "yarn tsc --noEmit",
19
- "test": "jest -c ./../../helpers/jest.config.ts"
19
+ "test": "jest -c ./../../helpers/jest.config.ts",
20
+ "gen-google-fonts": "node ./scripts/genFontGoogle.js"
20
21
  },
21
22
  "dependencies": {
22
23
  "@sentry/nextjs": "7.77.0",
23
24
  "deepmerge": "4.3.1",
24
- "html-react-parser": "3.0.15",
25
- "next-seo": "^6.0.0",
26
- "next": "14.2.20"
25
+ "html-react-parser": "4.2.10",
26
+ "next-seo": "6.8.0",
27
+ "next": "14.2.35"
27
28
  },
28
29
  "devDependencies": {
29
- "@gem-sdk/core": "11.2.0",
30
- "@gem-sdk/plugin-cookie-bar": "11.2.0",
31
- "@gem-sdk/plugin-quick-view": "11.2.0",
32
- "@gem-sdk/plugin-sticky-add-to-cart": "11.2.0"
30
+ "@gem-sdk/core": "12.0.0-dev.103",
31
+ "@gem-sdk/plugin-cookie-bar": "12.0.0-dev.53",
32
+ "@gem-sdk/plugin-quick-view": "12.0.0-dev.53",
33
+ "@gem-sdk/plugin-sticky-add-to-cart": "12.0.0-dev.53"
33
34
  },
34
35
  "peerDependencies": {
35
- "next": ">=14"
36
+ "next": "14.2.35"
36
37
  },
37
38
  "module": "dist/esm/index.js",
38
39
  "types": "dist/types/index.d.ts",