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

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 (46) 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/libs/helpers/sendPageViewedTracking.js +1 -0
  21. package/dist/cjs/pages/builder-upsell.js +2 -0
  22. package/dist/cjs/pages/static-v2.js +2 -2
  23. package/dist/esm/components/builder/Footer.js +1 -1
  24. package/dist/esm/components/builder/Header.js +1 -1
  25. package/dist/esm/components/builder/SwitchView.js +1 -1
  26. package/dist/esm/components/builder/Toolbox.js +1 -1
  27. package/dist/esm/components/image-to-layout/DropElement.js +1 -1
  28. package/dist/esm/components/image-to-layout-upsell/DropElement.js +2 -0
  29. package/dist/esm/components/image-to-layout-upsell/ImageToLayout.js +2 -0
  30. package/dist/esm/constants/googleFontV1.js +1 -0
  31. package/dist/esm/constants/index.js +1 -1
  32. package/dist/esm/index.js +1 -1
  33. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -1
  34. package/dist/esm/libs/api/get-home-page-props.js +1 -1
  35. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -1
  36. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -1
  37. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -1
  38. package/dist/esm/libs/api/get-static-page-props.js +1 -1
  39. package/dist/esm/libs/constants/theme-font-keys.js +1 -0
  40. package/dist/esm/libs/google-fonts.js +1 -1
  41. package/dist/esm/libs/helpers/gen-css.js +1 -1
  42. package/dist/esm/libs/helpers/sendPageViewedTracking.js +1 -0
  43. package/dist/esm/pages/builder-upsell.js +2 -0
  44. package/dist/esm/pages/static-v2.js +2 -2
  45. package/dist/types/index.d.ts +17 -1
  46. 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 @@
1
+ let sendPageViewedTracking=e=>{let{id:n,shopID:t}=e,s=process.env.NEXT_PUBLIC_ANALYTICS_API_URL,a=`${s}/events/gempagesv7`;s&&null!=n&&""!==n&&null!=t&&""!==t&&fetch(a,{method:"POST",body:JSON.stringify({id:n,name:"PAGE_VIEWED",timestamp:new Date().toISOString(),shopId:t})})};export{sendPageViewedTracking};
@@ -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};
@@ -46,6 +46,8 @@ type PageBuilderProps = {
46
46
  isUsePageBackground?: boolean;
47
47
  background?: string;
48
48
  };
49
+ id?: string | null;
50
+ shopID?: string | null;
49
51
  };
50
52
  type PageBuilderPropsV2 = {
51
53
  builderData?: {
@@ -92,6 +94,9 @@ type BuilderPageProps = {
92
94
  pageName: string;
93
95
  isOriginTemplate?: boolean;
94
96
  };
97
+ type BuilderUpsellPageProps = BuilderPageProps & {
98
+ isUpsellBuilder?: boolean;
99
+ };
95
100
  type CollectionDetailPageProps = PageBuilderProps & {
96
101
  collection?: CollectionQueryResponse['collection'];
97
102
  };
@@ -110,6 +115,8 @@ type StaticPagePropsV2 = PageBuilderPropsV2 & {
110
115
  publicStoreFrontData?: PublicStoreFrontData | null;
111
116
  isPreview?: boolean;
112
117
  domain?: string;
118
+ sellingPlanSetting?: Record<string, any>;
119
+ buyerConsentPreCheck?: Record<string, boolean>;
113
120
  };
114
121
  type SharePageAPIResponse = {
115
122
  sharedPage: SharePageProps;
@@ -187,6 +194,7 @@ declare const getPostPurchasePropsPreview: (fetcher: FetchFunc, librarySaleFunne
187
194
  currentOfferID: string;
188
195
  isLibraryTemplate?: boolean;
189
196
  isShopLibraryPage?: boolean;
197
+ sellingPlanSetting?: Record<string, any>;
190
198
  }) => Promise<Omit<StaticPagePropsV2, 'publicStoreFrontData'>>;
191
199
 
192
200
  declare const getStaticPagePropsPreview: (fetcher: FetchFunc, shopifyFetcher: FetchFunc) => (slug: string) => Promise<PageBuilderPropsV2>;
@@ -202,6 +210,12 @@ declare const getLayout: (page: React.ReactElement, pageProps?: any) => react_js
202
210
 
203
211
  declare const genCSS: (input?: string | Record<string, any>, mobileOnly?: boolean) => string;
204
212
 
213
+ type SendPageViewedTrackingParams = {
214
+ id: string | number | null | undefined;
215
+ shopID: string | number | null | undefined;
216
+ };
217
+ declare const sendPageViewedTracking: (params: SendPageViewedTrackingParams) => void;
218
+
205
219
  declare const useTrackingView: (token?: string | null, handle?: string | null, isFallback?: boolean) => void;
206
220
 
207
221
  declare const usePagePreview: (dataBuilder: ThemePageQueryResponse['themePage'], storeProperty: PromiseSettledResult<StorePropertyQueryResponse>, shopifyMeta?: PromiseSettledResult<ShopMetaQueryResponse>) => {
@@ -349,8 +363,10 @@ declare const StaticPage: React.FC<PageBuilderProps & AdditionalPageBuilderProps
349
363
 
350
364
  declare const BuilderPage: React.FC<BuilderPageProps>;
351
365
 
366
+ declare const BuilderUpsellPage: React.FC<BuilderUpsellPageProps>;
367
+
352
368
  declare const StaticPageV2: React.FC<StaticPagePropsV2 & AdditionalPageBuilderProps>;
353
369
 
354
370
  declare const PreviewTemplate: React.FC<SharePageProps & AdditionalPageBuilderProps>;
355
371
 
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 };
372
+ 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, sendPageViewedTracking, 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.112",
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.111",
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",