@gem-sdk/components 12.0.0-dev.32 → 12.0.0-dev.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var core=require("@gem-sdk/core"),Link=require("./link/components/Link.js"),translate=require("./hero-banner/settings/configs/translate.js");const REGEX_PAGE_TYPE=new RegExp(/^\/?(?:collections|pages|products|blogs|checkout|cart|policies)\/?/i),isShopifyDomain=(e,t)=>{let r=new RegExp(/^https?:\/\//i);return e&&!r.test(t)&&REGEX_PAGE_TYPE.test(t)},getLinkArticle=(e,t)=>"scroll-to"==e?t?.link:"{{article.url}}",isTransparentColor=e=>!!e&&(e.startsWith("#")?isHexTransparent(e):e.startsWith("rgb")?isTransparentRGBA(e):"transparent"==e),isTransparentRGBA=e=>{let t=e.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i)?.map(Number).filter(e=>!isNaN(e))??[0,0,0,1];return 0===t[t.length-1]},isHexTransparent=e=>{let t=!1,r=e.slice(e.startsWith("#")?1:0);3===r.length?r=[...r].map(e=>e+e).join(""):8===r.length&&(t=!0);let i=parseInt(r,16),n=t?255&i:void 0;return 0===n||!!n},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,createTranslateKey=(e,t)=>`g${e}_${t}`,createSettingId=({id:e,index:t,suffix:r})=>e?"number"==typeof t&&t>=0?`${e}_${t}`:r?`${e}_${r}`:e:"",getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:n,isCapitalize:o,defaultVal:a="",isReplaceLocationOrigin:l,isReplaceMaxSize:s,isReplaceInventoryQuantity:c})=>{let p=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),g=n?.isTranslateWithLocale?1e3:5e3;if(!r||!e?.toString().trim()||e.toString().length>g||p||n?.isPreviewing)return e??a;let u=createTranslateKey(t,r),d=`section.settings.${u}`;return(n?.isTranslateWithLocale&&(d=`'sections.${n.sectionName}.${u}_html' | t`),l&&(d+=" | replace: '$locationOrigin', locationOrigin"),s&&(d+=" | replace: '$max_size', '10MB'"),c&&(d+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),o&&(d=`${d} | downcase`),i)?d:`{{ ${d} }}`},getStaticLocale=(e,t)=>`{{ 'gempages.${e}.${t}' | t }}`,getSettingPreloadData=(e,t)=>`{% if section.settings.section_preload == "false" %}${e} ${t?`{% else %}${t}`:""}{% endif %}`,getHttpUrl=e=>e?e.match(/^https?:\/\//i)?e:`http://${e}`:"";function normalizeMailto(e){if(e.startsWith("mailto:")){let[t,r]=e.split("?");if(r){let i=r.replace(/\+/g,"%20");e=`${t}?${i}`}}return e}const getInsertLinkData=(e,t,r)=>{let i=["#","mailto:","tel:"],n=["product.url"],o=t?.link!==void 0&&""!==t.link,a=t?.link??"",l="/"===a,s=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),c=o&&s.test(a);c&&(a=getHttpUrl(a)),o&&a.toLowerCase().startsWith("mailto:")&&a.includes("+")&&(a=normalizeMailto(a));let p=()=>!!(i.find(e=>a.startsWith(e))||n.find(e=>a.includes(e))),g=c||isShopifyDomain(o,a)||p()||l||isLinkedToSalesPage(t?.type);(isShopifyDomain(o,a)||l)&&(a=t?.isTranslate?"$locationOrigin"+a:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+a);let u=g?t?.isLiquid?"a":Link.default:e,d={href:a,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},f=g?d:o?{...d,type:r}:{type:r};return{Wrap:u,urlData:f,shouldRenderLink:g}},isLinkedToSalesPage=e=>"go-to-sales-page"===e,checkIsScrollToTop=e=>e?.type==="scroll-to"&&e?.link==="#scroll-to-top",checkIsOpenPopup=e=>e?.type==="open-popup"&&e?.link?.startsWith("#el-"),getLinkData=({setting:e,htmlType:t,defaultWrap:r,isLiquid:i=!1,enableImageLink:n=!1})=>{let o=["product.url"],a=["#","mailto:","tel:"],l=e?.link??"",s="/"===l,c=e?.link!==void 0&&""!==e.link,p=new RegExp(/^https?:\/\//i),g=c&&p.test(l);c&&l.toLowerCase().startsWith("mailto:")&&l.includes("+")&&(l=normalizeMailto(l));let u=()=>!!(o.find(e=>l.includes(e))||a.find(e=>l.startsWith(e))),d=n&&(g||isShopifyDomain(c,l)||u()||s||isLinkedToSalesPage(e?.type)),f=l;i&&(isShopifyDomain(c,l)||s)&&(f=e?.isTranslate?"$locationOrigin"+l:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+l);let h=d?i?"a":Link.default:r,m={href:f,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},y=d?m:c?{...m,type:t}:{type:t};return{Wrapper:h,urlData:y,shouldRenderLink:d}},replaceLinkData=(e,t)=>{let r=/<a\s[^>]*>.*?<\/a>/;if(e&&r.test(e)){let r;let i=/<a\s+(?:[^>]*?\s+)?href=["']([^"']*)["'](?:\s+[^>]*?)?(?:target=["']([^"']*)["'])?.*?>.*?<\/a>/gi,n=e.toString();for(;null!==(r=i.exec(n));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});n=n.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return n}return e};function filterTruthyStyles(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}function filterTruthyObject(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}const getDisplayStyle=(e,t)=>{let r={};return core.DEVICES.forEach(i=>{r={...r,[`--d${"desktop"===i?"":`-${i}`}`]:`${e(i)?"none":t}`}}),r},convertUnitToNumber=(e,t)=>{if(!e)return t;if("number"==typeof e)return e;let r="string"==typeof e?e.replaceAll("px","").replaceAll("%","").replaceAll("rem","").replaceAll("em",""):t;return isNaN(Number(r))?t:Number(r)},getAllHrefFromString=e=>{let t;if(!e)return[];let r=/href="([^"]*)"/g,i=[];for(;null!==(t=r.exec(e));)t[1]&&i.push(t[1]);return i},replaceAllHrefFromString=(e,t)=>{let r;if(!e)return"";let i=/href="([^"]*)"/g,n=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[n]??""),n++);return e};function isEmptyObject(e){return 0===Object.keys(e).length&&"object"==typeof e}const handleClickLink=(e,t)=>{if("edit"!==t){if(checkIsScrollToTop(e)){window.scrollTo({top:0,behavior:"smooth"});return}if(checkIsOpenPopup(e)){let t=e?.link?.replace("#el-","#");core.globalEvent.dispatch("onOpenDialog",{popupUId:t});return}e?.link?.startsWith("#")&&core.globalEvent.dispatch("onOpenDialog",{popupUId:e?.link})}},getSeoTranslated=({valueTranslate:e,uid:t,settingId:r})=>{if(!t||!translate.HeroBanner?.[r]?.id)return e;let i=getDynamicSourceLocales({val:e,settingId:createSettingId({id:translate.HeroBanner?.[r]?.id}),uid:t});return null!=i?String(i):e},getBackgroundTranslated=({background:e,enableTranslate:t,uid:r,pageContext:i,isTranslateVideo:n=!0})=>{if(!e)return{};if(!t||!r)return e;let o=core.cloneDeep(e);for(let e in o){let t=o[e];if(t){if(t.image?.src){let n=getDynamicSourceLocales({val:t.image.src,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_image_src`}),pageContext:i});t.image.src=String(n)}if(n){if("youtube"===t.videoType&&t.video){let n=getDynamicSourceLocales({val:t.video,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_video`}),pageContext:i});t.video=String(n)}if("html5"===t.videoType&&t.videoHtml5){let n=getDynamicSourceLocales({val:t.videoHtml5,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_videoHtml5`}),pageContext:i});t.videoHtml5=String(n)}}}}return o},extractProductID=e=>e.replace("gid://shopify/Product/","");exports.REGEX_PAGE_TYPE=REGEX_PAGE_TYPE,exports.checkIsOpenPopup=checkIsOpenPopup,exports.checkIsScrollToTop=checkIsScrollToTop,exports.convertUnitToNumber=convertUnitToNumber,exports.createSettingId=createSettingId,exports.createTranslateKey=createTranslateKey,exports.extractProductID=extractProductID,exports.filterTruthyObject=filterTruthyObject,exports.filterTruthyStyles=filterTruthyStyles,exports.getAllHrefFromString=getAllHrefFromString,exports.getBackgroundTranslated=getBackgroundTranslated,exports.getDisplayStyle=getDisplayStyle,exports.getDynamicSourceLocales=getDynamicSourceLocales,exports.getInsertLinkData=getInsertLinkData,exports.getLinkArticle=getLinkArticle,exports.getLinkData=getLinkData,exports.getSeoTranslated=getSeoTranslated,exports.getSettingPreloadData=getSettingPreloadData,exports.getStaticLocale=getStaticLocale,exports.handleClickLink=handleClickLink,exports.isEmptyObject=isEmptyObject,exports.isHexTransparent=isHexTransparent,exports.isLinkedToSalesPage=isLinkedToSalesPage,exports.isShopifyDomain=isShopifyDomain,exports.isTransparentColor=isTransparentColor,exports.isTransparentRGBA=isTransparentRGBA,exports.normalizeMailto=normalizeMailto,exports.replaceAllHrefFromString=replaceAllHrefFromString,exports.replaceLinkData=replaceLinkData,exports.youtubeShortsRegex=youtubeShortsRegex;
1
+ "use strict";var core=require("@gem-sdk/core"),Link=require("./link/components/Link.js"),translate=require("./hero-banner/settings/configs/translate.js");const REGEX_PAGE_TYPE=new RegExp(/^\/?(?:collections|pages|products|blogs|checkout|cart|policies)\/?/i),isShopifyDomain=(e,t)=>{let r=new RegExp(/^https?:\/\//i);return e&&!r.test(t)&&REGEX_PAGE_TYPE.test(t)},getLinkArticle=(e,t)=>"scroll-to"==e?t?.link:"{{article.url}}",isTransparentColor=e=>!!e&&(e.startsWith("#")?isHexTransparent(e):e.startsWith("rgb")?isTransparentRGBA(e):"transparent"==e),isTransparentRGBA=e=>{let t=e.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i)?.map(Number).filter(e=>!isNaN(e))??[0,0,0,1];return 0===t[t.length-1]},isHexTransparent=e=>{let t=!1,r=e.slice(e.startsWith("#")?1:0);3===r.length?r=[...r].map(e=>e+e).join(""):8===r.length&&(t=!0);let i=parseInt(r,16),n=t?255&i:void 0;return 0===n||!!n},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,createTranslateKey=(e,t)=>`g${e}_${t}`,createSettingId=({id:e,index:t,suffix:r})=>e?"number"==typeof t&&t>=0?`${e}_${t}`:r?`${e}_${r}`:e:"",getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:n,isCapitalize:o,defaultVal:a="",isReplaceLocationOrigin:l,isReplaceMaxSize:s,isReplaceInventoryQuantity:c})=>{let p=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),g=n?.isTranslateWithLocale?1e3:5e3;if(!r||!e?.toString().trim()||e.toString().length>g||p||n?.isPreviewing)return e??a;let u=core.createTranslateKey(t,r,e?.toString()??a??""),d=`section.settings.${u}`;return(n?.isTranslateWithLocale&&(d=`'sections.${n.sectionName}.${u}_html' | t`),l&&(d+=" | replace: '$locationOrigin', locationOrigin"),s&&(d+=" | replace: '$max_size', '10MB'"),c&&(d+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),o&&(d=`${d} | downcase`),i)?d:`{{ ${d} }}`},getStaticLocale=(e,t)=>`{{ 'gempages.${e}.${t}' | t }}`,getSettingPreloadData=(e,t)=>`{% if section.settings.section_preload == "false" %}${e} ${t?`{% else %}${t}`:""}{% endif %}`,getHttpUrl=e=>e?e.match(/^https?:\/\//i)?e:`http://${e}`:"";function normalizeMailto(e){if(e.startsWith("mailto:")){let[t,r]=e.split("?");if(r){let i=r.replace(/\+/g,"%20");e=`${t}?${i}`}}return e}const getInsertLinkData=(e,t,r)=>{let i=["#","mailto:","tel:"],n=["product.url"],o=t?.link!==void 0&&""!==t.link,a=t?.link??"",l="/"===a,s=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),c=o&&s.test(a);c&&(a=getHttpUrl(a)),o&&a.toLowerCase().startsWith("mailto:")&&a.includes("+")&&(a=normalizeMailto(a));let p=()=>!!(i.find(e=>a.startsWith(e))||n.find(e=>a.includes(e))),g=c||isShopifyDomain(o,a)||p()||l||isLinkedToSalesPage(t?.type);(isShopifyDomain(o,a)||l)&&(a=t?.isTranslate?"$locationOrigin"+a:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+a);let u=g?t?.isLiquid?"a":Link.default:e,d={href:a,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},f=g?d:o?{...d,type:r}:{type:r};return{Wrap:u,urlData:f,shouldRenderLink:g}},isLinkedToSalesPage=e=>"go-to-sales-page"===e,checkIsScrollToTop=e=>e?.type==="scroll-to"&&e?.link==="#scroll-to-top",checkIsOpenPopup=e=>e?.type==="open-popup"&&e?.link?.startsWith("#el-"),getLinkData=({setting:e,htmlType:t,defaultWrap:r,isLiquid:i=!1,enableImageLink:n=!1})=>{let o=["product.url"],a=["#","mailto:","tel:"],l=e?.link??"",s="/"===l,c=e?.link!==void 0&&""!==e.link,p=new RegExp(/^https?:\/\//i),g=c&&p.test(l);c&&l.toLowerCase().startsWith("mailto:")&&l.includes("+")&&(l=normalizeMailto(l));let u=()=>!!(o.find(e=>l.includes(e))||a.find(e=>l.startsWith(e))),d=n&&(g||isShopifyDomain(c,l)||u()||s||isLinkedToSalesPage(e?.type)),f=l;i&&(isShopifyDomain(c,l)||s)&&(f=e?.isTranslate?"$locationOrigin"+l:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+l);let h=d?i?"a":Link.default:r,m={href:f,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},S=d?m:c?{...m,type:t}:{type:t};return{Wrapper:h,urlData:S,shouldRenderLink:d}},replaceLinkData=(e,t)=>{let r=/<a\s[^>]*>.*?<\/a>/;if(e&&r.test(e)){let r;let i=/<a\s+(?:[^>]*?\s+)?href=["']([^"']*)["'](?:\s+[^>]*?)?(?:target=["']([^"']*)["'])?.*?>.*?<\/a>/gi,n=e.toString();for(;null!==(r=i.exec(n));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});n=n.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return n}return e};function filterTruthyStyles(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}function filterTruthyObject(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}const getDisplayStyle=(e,t)=>{let r={};return core.DEVICES.forEach(i=>{r={...r,[`--d${"desktop"===i?"":`-${i}`}`]:`${e(i)?"none":t}`}}),r},convertUnitToNumber=(e,t)=>{if(!e)return t;if("number"==typeof e)return e;let r="string"==typeof e?e.replaceAll("px","").replaceAll("%","").replaceAll("rem","").replaceAll("em",""):t;return isNaN(Number(r))?t:Number(r)},getAllHrefFromString=e=>{let t;if(!e)return[];let r=/href="([^"]*)"/g,i=[];for(;null!==(t=r.exec(e));)t[1]&&i.push(t[1]);return i},replaceAllHrefFromString=(e,t)=>{let r;if(!e)return"";let i=/href="([^"]*)"/g,n=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[n]??""),n++);return e};function isEmptyObject(e){return 0===Object.keys(e).length&&"object"==typeof e}const handleClickLink=(e,t)=>{if("edit"!==t){if(checkIsScrollToTop(e)){window.scrollTo({top:0,behavior:"smooth"});return}if(checkIsOpenPopup(e)){let t=e?.link?.replace("#el-","#");core.globalEvent.dispatch("onOpenDialog",{popupUId:t});return}e?.link?.startsWith("#")&&core.globalEvent.dispatch("onOpenDialog",{popupUId:e?.link})}},getSeoTranslated=({valueTranslate:e,uid:t,settingId:r})=>{if(!t||!translate.HeroBanner?.[r]?.id)return e;let i=getDynamicSourceLocales({val:e,settingId:createSettingId({id:translate.HeroBanner?.[r]?.id}),uid:t});return null!=i?String(i):e},getBackgroundTranslated=({background:e,enableTranslate:t,uid:r,pageContext:i,isTranslateVideo:n=!0})=>{if(!e)return{};if(!t||!r)return e;let o=core.cloneDeep(e);for(let e in o){let t=o[e];if(t){if(t.image?.src){let n=getDynamicSourceLocales({val:t.image.src,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_image_src`}),pageContext:i});t.image.src=String(n)}if(n){if("youtube"===t.videoType&&t.video){let n=getDynamicSourceLocales({val:t.video,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_video`}),pageContext:i});t.video=String(n)}if("html5"===t.videoType&&t.videoHtml5){let n=getDynamicSourceLocales({val:t.videoHtml5,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_videoHtml5`}),pageContext:i});t.videoHtml5=String(n)}}}}return o},extractProductID=e=>e.replace("gid://shopify/Product/","");exports.REGEX_PAGE_TYPE=REGEX_PAGE_TYPE,exports.checkIsOpenPopup=checkIsOpenPopup,exports.checkIsScrollToTop=checkIsScrollToTop,exports.convertUnitToNumber=convertUnitToNumber,exports.createSettingId=createSettingId,exports.createTranslateKey=createTranslateKey,exports.extractProductID=extractProductID,exports.filterTruthyObject=filterTruthyObject,exports.filterTruthyStyles=filterTruthyStyles,exports.getAllHrefFromString=getAllHrefFromString,exports.getBackgroundTranslated=getBackgroundTranslated,exports.getDisplayStyle=getDisplayStyle,exports.getDynamicSourceLocales=getDynamicSourceLocales,exports.getInsertLinkData=getInsertLinkData,exports.getLinkArticle=getLinkArticle,exports.getLinkData=getLinkData,exports.getSeoTranslated=getSeoTranslated,exports.getSettingPreloadData=getSettingPreloadData,exports.getStaticLocale=getStaticLocale,exports.handleClickLink=handleClickLink,exports.isEmptyObject=isEmptyObject,exports.isHexTransparent=isHexTransparent,exports.isLinkedToSalesPage=isLinkedToSalesPage,exports.isShopifyDomain=isShopifyDomain,exports.isTransparentColor=isTransparentColor,exports.isTransparentRGBA=isTransparentRGBA,exports.normalizeMailto=normalizeMailto,exports.replaceAllHrefFromString=replaceAllHrefFromString,exports.replaceLinkData=replaceLinkData,exports.youtubeShortsRegex=youtubeShortsRegex;
@@ -1,35 +1,35 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var core=require("@gem-sdk/core"),helpers=require("../../../helpers.js"),generateLiquidContent=require("./utils/generateLiquidContent.js"),renderBadgeLiquid=require("./utils/renderBadgeLiquid.js"),system=require("@gem-sdk/system"),constants=require("./constants.js"),styles=require("./common/styles.js"),classes=require("./common/classes.js"),attrs=require("./common/attrs.js"),translate=require("../../settings/product-badge/configs/translate.js");const ProductBadge=e=>{let{styles:t,setting:s,builderProps:a,pageContext:r}=e,i=s?.shape!=="image",n=i&&s?.displayContent?.trim()==="",c=system.createClass({...classes.getContainerClasses({isInstant:!1,props:e})}),l=system.createStyle({...styles.getContainerStyle(e,constants.IS_LIQUID)}),d=system.createClass({...classes.getWrapperClasses(e)}),o=system.createClass({...classes.getSubWrapperClass(e)}),p=system.createStyle({...styles.getSubWrapperStyle({props:e})}),y=system.createAttr({...attrs.getSubWrapperAttrs(e)}),u=styles.getContentStyleInternal(e),g=system.createClass({...classes.getTextContainerClasses()}),m=system.createAttr({...attrs.getContainerAttrs(e)}),C=system.createClass({...classes.getTextWrapperClasses()}),v=system.createStyle({...styles.getTextBadgeWrapperStyles({setting:s,styles:t})}),$=system.createClass({...classes.getTextContentClasses(t)}),S=system.createStyle({...styles.getTextContentStyle({setting:s,styles:t})}),q=system.createAttr({...attrs.getTextContentAttrs()}),I=system.createClass({...classes.getImageContainerClasses()}),j=system.createStyle({...styles.getImageContainerStyles({setting:s,styles:t})}),f=system.createClass({...classes.getImageClasses()}),P=system.createAttr({...attrs.getImageAttr({setting:s})}),A=system.createStateOrContext({minPrice:"{{ minPriceValue | replace: '\"', '\\\"' | escape }}",variantIDs:'{{ product.variants | map: "id" | json | escape }}',variantInventoryQuantities:'{{ product.variants | map: "inventory_quantity" | json | escape }}',amountDiscount:"{{amountDiscountValue | replace: '\"', '\\\"' | escape }}",percentDiscount:"{{percentDiscountValue}}",price:"{{price}}",displayTrigger:JSON.parse(JSON.stringify(s?.displayTrigger).replaceAll("'","&#039;")),uid:e.builderProps?.uid,productCreatedAt:'{{product.created_at | date: "%Y-%m-%d" }}',productTags:"{{ product.tags | join: \",\" | replace: '\"', '\\\"' | escape }}",isTextBadge:i}),{displayContent:D}=s??{},L=helpers.getDynamicSourceLocales({val:D?.trim(),uid:a?.uid,settingId:translate.ProductBadge?.displayContent?.id,isLiquid:!0,pageContext:r});return core.template`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var core=require("@gem-sdk/core"),helpers=require("../../../helpers.js"),generateLiquidContent=require("./utils/generateLiquidContent.js"),renderBadgeLiquid=require("./utils/renderBadgeLiquid.js"),system=require("@gem-sdk/system"),constants=require("./constants.js"),styles=require("./common/styles.js"),classes=require("./common/classes.js"),attrs=require("./common/attrs.js"),translate=require("../../settings/product-badge/configs/translate.js"),common=require("./utils/common.js");const ProductBadge=e=>{let{styles:t,setting:s,builderProps:a,pageContext:r}=e,i=s?.shape!=="image",n=i&&s?.displayContent?.trim()==="",c=common.checkDiscountContentProductBadge(s?.displayContent),l=system.createClass({...classes.getContainerClasses({isInstant:!1,props:e})}),o=system.createStyle({...styles.getContainerStyle(e,constants.IS_LIQUID)}),d=system.createClass({...classes.getWrapperClasses(e)}),p=system.createClass({...classes.getSubWrapperClass(e)}),u=system.createStyle({...styles.getSubWrapperStyle({props:e})}),y=system.createAttr({...attrs.getSubWrapperAttrs(e)}),g=styles.getContentStyleInternal(e),m=system.createClass({...classes.getTextContainerClasses()}),C=system.createAttr({...attrs.getContainerAttrs(e)}),v=system.createClass({...classes.getTextWrapperClasses()}),$=system.createStyle({...styles.getTextBadgeWrapperStyles({setting:s,styles:t})}),S=system.createClass({...classes.getTextContentClasses(t)}),q=system.createStyle({...styles.getTextContentStyle({setting:s,styles:t})}),j=system.createAttr({...attrs.getTextContentAttrs()}),I=system.createClass({...classes.getImageContainerClasses()}),P=system.createStyle({...styles.getImageContainerStyles({setting:s,styles:t})}),f=system.createClass({...classes.getImageClasses()}),D=system.createAttr({...attrs.getImageAttr({setting:s})}),A=system.createStateOrContext({minPrice:"{{ minPriceValue | replace: '\"', '\\\"' | escape }}",variantIDs:'{{ product.variants | map: "id" | json | escape }}',variantInventoryQuantities:'{{ product.variants | map: "inventory_quantity" | json | escape }}',amountDiscount:"{{amountDiscountValue | replace: '\"', '\\\"' | escape }}",percentDiscount:"{{percentDiscountValue}}",price:"{{price}}",displayTrigger:JSON.parse(JSON.stringify(s?.displayTrigger).replaceAll("'","&#039;")),uid:e.builderProps?.uid,productCreatedAt:'{{product.created_at | date: "%Y-%m-%d" }}',productTags:"{{ product.tags | join: \",\" | replace: '\"', '\\\"' | escape }}",isTextBadge:i}),{displayContent:L}=s??{},T=helpers.getDynamicSourceLocales({val:L?.trim(),uid:a?.uid,settingId:translate.ProductBadge?.displayContent?.id,isLiquid:!0,pageContext:r});return core.template`
2
2
  {% if product %}
3
- ${generateLiquidContent.generateBadgeContent(L,r?.isPreviewing)}
4
- ${renderBadgeLiquid.renderBadgeInFirstTime(s?.displayTrigger,!n)}
3
+ ${generateLiquidContent.generateBadgeContent(T,r?.isPreviewing)}
4
+ ${renderBadgeLiquid.renderBadgeInFirstTime(s?.displayTrigger,!n,c)}
5
5
  <gp-product-badge
6
- ${{...m}}
7
- class="${c}"
8
- style="${l}"
9
- data-display-content="${r?.isPreviewing?L:core.sanitizeLiquid(`{{${L}}}`)}"
6
+ ${{...C}}
7
+ class="${l}"
8
+ style="${o}"
9
+ data-display-content="${r?.isPreviewing?T:core.sanitizeLiquid(`{{${T}}}`)}"
10
10
  >
11
11
  <script gp-data type="application/json">${core.dataStringify(A)}</script>
12
12
  <div class="${d}">
13
13
  <div
14
14
  ${{...y}}
15
- class="${o}"
16
- style="${p}"
15
+ class="${p}"
16
+ style="${u}"
17
17
  >
18
- <style>${u}</style>
18
+ <style>${g}</style>
19
19
  ${core.RenderIf(i,core.template`
20
- <div class="${g}">
20
+ <div class="${m}">
21
21
  <div
22
- class="${C}"
23
- style="${v}"
22
+ class="${v}"
23
+ style="${$}"
24
24
  >
25
25
  <pre
26
- ${{...q}}
27
- class="${$}"
28
- style="${S}"
26
+ ${{...j}}
27
+ class="${S}"
28
+ style="${q}"
29
29
  >{{ content | replace: percentDiscountKey, percentDiscountValue | replace: amountDiscountKey, amountDiscountValue | replace: inventoryQuantityKey, inventoryQuantityValue | replace: minPriceKey, minPriceValue }}</pre>
30
30
  </div>
31
- </div>`,core.template`<div class="${I}" style="${j}">
32
- <img ${{...P}} class="${f}" alt="" />
31
+ </div>`,core.template`<div class="${I}" style="${P}">
32
+ <img ${{...D}} class="${f}" alt="" />
33
33
  </div>`)}
34
34
  </div>
35
35
  </div>
@@ -1 +1 @@
1
- "use strict";var core=require("@gem-sdk/core"),common=require("../utils/common.js"),getShapePosition=require("../utils/getShapePosition.js"),getRotateShape=require("../utils/getRotateShape.js"),getStyleAdvanced=require("../utils/getStyleAdvanced.js"),getWhiteSpace=require("../utils/getWhiteSpace.js"),stylesV2=require("../utils/stylesV2.js"),shape=require("../utils/shape.js"),renderBadgeILP=require("../utils/renderBadgeILP.js");const getSizeStyles=e=>{let{setting:t,styles:o}=e,r=shape.getShape(t?.shape),a=t?.contentType==="text",i=a?o?.textSizeV2:o?.imageSizeV2;return a?common.getSize(r,i):common.getSize(void 0,i)},getContainerStyle=(e,t=!1)=>{let{setting:o,styles:r,style:a,navigationPosition:i,imageData:s,dotData:n}=e,g=o?.positionWithImage==="outside",l=common.getWrapperStyle(t),p=getShapePosition.getShapePosition({positionType:r?.position,isLiquid:!1,navigationPosition:i,dataImage:{...s,...n}}),S=getSizeStyles(e),d=getStyleAdvanced.getStyleAdvanced(g?{}:{...p,...S},a);return{...!g&&{"--pos":"absolute"},...l,...d}},getTextContentStyle=({styles:e,setting:t})=>{let o=core.makeGlobalSize(e?.textSizeV2).padding,r=shape.getShape(t?.shape),a=t?.positionWithImage==="outside";return{...getWhiteSpace.getWhiteSpaceStyle(e?.textSizeV2),...common.convertToStyle(r?.textStyle),...getRotateShape.composeTextStyleByPosition(r,e?.position,a),...core.composeTypographyStyle(e?.typo),...core.getStyleShadow({value:e?.typo?.custom?.textShadow,styleAppliedFor:"text-shadow",isEnableShadow:e?.typo?.custom?.hasShadowText}),...stylesV2.getStyleBackground(!!r?.backgroundColorInText,e?.badgeColorV2),...o}},getBorderStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=t?.contentType==="text";return o?.supportBorder?r?stylesV2.getStyleBorder(e?.textBadgeBorder):stylesV2.getStyleBorder(e?.imageBadgeBorder):{}},getCornerStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=t?.contentType==="text";return o?.supportCorner?r?stylesV2.getStyleCornerRadius(e?.textBadgeCorner,o?.shapeRadius):stylesV2.getStyleCornerRadius(e?.imageBadgeCorner,o?.shapeRadius):{}},getTextBadgeWrapperStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=getBorderStyles({setting:t,styles:e}),a=t?.positionWithImage==="outside",i=getCornerStyles({setting:t,styles:e}),s=common.getShapeWrapperPadding(o?.ratio);return{...r,...i,...getRotateShape.composeShapeStyleByPosition(o,e?.position,a),...stylesV2.getStyleBackground(!o?.backgroundColorInText,e?.badgeColorV2),...s,height:o?.ratio===1?"0px":"100%"}},getImageContainerStyles=({styles:e,setting:t})=>{let o=getBorderStyles({setting:t,styles:e}),r=getCornerStyles({setting:t,styles:e}),a=core.makeGlobalSize(e?.imageSizeV2).padding;return{...o,...r,...a}},getOpacityProductBadge=({props:e,currentVariant:t,product:o,isEditMode:r})=>{let{"bundle-item":a,setting:i}=e;if(a)return 1;let s=i?.contentType==="text",n=s&&!i?.displayContent?.trim();if(n)return r?.2:0;let g=core.convertDecimalToNumber(t?.price)??0,l=core.convertDecimalToNumber(t?.salePrice)??0,p=l-g>0,S=renderBadgeILP.checkShowBadge(i?.displayTrigger,o,t);return p&&S?1:r?.2:0},getSubWrapperStyle=({props:e,product:t,currentVariant:o,isEditMode:r})=>{let{setting:a}=e,i=a?.positionWithImage==="outside",s=getSizeStyles(e),n=r&&o?getOpacityProductBadge({props:e,currentVariant:o,product:t,isEditMode:r}):1;return{...i?{...s,"--mb":0}:{},opacity:n}},getContentStyleInternal=e=>{let{styles:t,setting:o,builderProps:r}=e,a=o?.contentType==="text";return stylesV2.generateShadowCSS(`[id="${r?.uid}"] .product-badge-item`,a?t?.textBadgeShadow:t?.imageBadgeShadow)};exports.getContainerStyle=getContainerStyle,exports.getContentStyleInternal=getContentStyleInternal,exports.getImageContainerStyles=getImageContainerStyles,exports.getSubWrapperStyle=getSubWrapperStyle,exports.getTextBadgeWrapperStyles=getTextBadgeWrapperStyles,exports.getTextContentStyle=getTextContentStyle;
1
+ "use strict";var core=require("@gem-sdk/core"),common=require("../utils/common.js"),getShapePosition=require("../utils/getShapePosition.js"),getRotateShape=require("../utils/getRotateShape.js"),getStyleAdvanced=require("../utils/getStyleAdvanced.js"),getWhiteSpace=require("../utils/getWhiteSpace.js"),stylesV2=require("../utils/stylesV2.js"),shape=require("../utils/shape.js"),renderBadgeILP=require("../utils/renderBadgeILP.js");const getSizeStyles=e=>{let{setting:t,styles:o}=e,r=shape.getShape(t?.shape),a=t?.contentType==="text",i=a?o?.textSizeV2:o?.imageSizeV2;return a?common.getSize(r,i):common.getSize(void 0,i)},getContainerStyle=(e,t=!1)=>{let{setting:o,styles:r,style:a,navigationPosition:i,imageData:s,dotData:n}=e,g=o?.positionWithImage==="outside",l=common.getWrapperStyle(t),p=getShapePosition.getShapePosition({positionType:r?.position,isLiquid:!1,navigationPosition:i,dataImage:{...s,...n}}),S=getSizeStyles(e),d=getStyleAdvanced.getStyleAdvanced(g?{}:{...p,...S},a);return{...!g&&{"--pos":"absolute"},...l,...d}},getTextContentStyle=({styles:e,setting:t})=>{let o=core.makeGlobalSize(e?.textSizeV2).padding,r=shape.getShape(t?.shape),a=t?.positionWithImage==="outside";return{...getWhiteSpace.getWhiteSpaceStyle(e?.textSizeV2),...common.convertToStyle(r?.textStyle),...getRotateShape.composeTextStyleByPosition(r,e?.position,a),...core.composeTypographyStyle(e?.typo),...core.getStyleShadow({value:e?.typo?.custom?.textShadow,styleAppliedFor:"text-shadow",isEnableShadow:e?.typo?.custom?.hasShadowText}),...stylesV2.getStyleBackground(!!r?.backgroundColorInText,e?.badgeColorV2),...o}},getBorderStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=t?.contentType==="text";return o?.supportBorder?r?stylesV2.getStyleBorder(e?.textBadgeBorder):stylesV2.getStyleBorder(e?.imageBadgeBorder):{}},getCornerStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=t?.contentType==="text";return o?.supportCorner?r?stylesV2.getStyleCornerRadius(e?.textBadgeCorner,o?.shapeRadius):stylesV2.getStyleCornerRadius(e?.imageBadgeCorner,o?.shapeRadius):{}},getTextBadgeWrapperStyles=({styles:e,setting:t})=>{let o=shape.getShape(t?.shape),r=getBorderStyles({setting:t,styles:e}),a=t?.positionWithImage==="outside",i=getCornerStyles({setting:t,styles:e}),s=common.getShapeWrapperPadding(o?.ratio);return{...r,...i,...getRotateShape.composeShapeStyleByPosition(o,e?.position,a),...stylesV2.getStyleBackground(!o?.backgroundColorInText,e?.badgeColorV2),...s,height:o?.ratio===1?"0px":"100%"}},getImageContainerStyles=({styles:e,setting:t})=>{let o=getBorderStyles({setting:t,styles:e}),r=getCornerStyles({setting:t,styles:e}),a=core.makeGlobalSize(e?.imageSizeV2).padding;return{...o,...r,...a}},getOpacityProductBadge=({props:e,currentVariant:t,product:o,isEditMode:r})=>{let{"bundle-item":a,setting:i}=e;if(a)return 1;let s=i?.contentType==="text",n=s&&!i?.displayContent?.trim(),g=common.checkDiscountContentProductBadge(i?.displayContent);if(n)return r?.2:0;let l=core.convertDecimalToNumber(t?.price)??0,p=core.convertDecimalToNumber(t?.salePrice)??0,S=p-l>0,d=renderBadgeILP.checkShowBadge(i?.displayTrigger,o,t);return(S||!g)&&d?1:r?.2:0},getSubWrapperStyle=({props:e,product:t,currentVariant:o,isEditMode:r})=>{let{setting:a}=e,i=a?.positionWithImage==="outside",s=getSizeStyles(e),n=r&&o?getOpacityProductBadge({props:e,currentVariant:o,product:t,isEditMode:r}):1;return{...i?{...s,"--mb":0}:{},opacity:n}},getContentStyleInternal=e=>{let{styles:t,setting:o,builderProps:r}=e,a=o?.contentType==="text";return stylesV2.generateShadowCSS(`[id="${r?.uid}"] .product-badge-item`,a?t?.textBadgeShadow:t?.imageBadgeShadow)};exports.getContainerStyle=getContainerStyle,exports.getContentStyleInternal=getContentStyleInternal,exports.getImageContainerStyles=getImageContainerStyles,exports.getSubWrapperStyle=getSubWrapperStyle,exports.getTextBadgeWrapperStyles=getTextBadgeWrapperStyles,exports.getTextContentStyle=getTextContentStyle;
@@ -1,4 +1,4 @@
1
- "use strict";var types=require("../types.js");const getMinValueForInventory=e=>e===types.CompareType.ABOVE?0:e===types.CompareType.BELOW?2:1,renderBadgeInFirstTime=(e,i)=>`
1
+ "use strict";var types=require("../types.js");const getMinValueForInventory=e=>e===types.CompareType.ABOVE?0:e===types.CompareType.BELOW?2:1,renderBadgeInFirstTime=(e,i,n)=>`
2
2
  {% assign isShow = true %}
3
3
  {% assign conditionTriggers = "" %}
4
4
  {% assign isInventoryStatus = false %}
@@ -17,10 +17,15 @@
17
17
  {% assign salePrice = variant.compare_at_price | times: 1.0 %}
18
18
  {% assign priceSave = salePrice | minus: price %}
19
19
  {% assign isEmptyBadgeContent = ${!i} %}
20
- {% if priceSave <= 0 or isEmptyBadgeContent == true %}
21
- {% assign isShow = false %}
20
+ {% assign isNotDiscount = false %}
21
+ {% assign isBadgeContentHasDiscount = ${n} %}
22
+ {% if isEmptyBadgeContent == true %}
23
+ {% assign isNotDiscount = true %}
22
24
  {% endif %}
23
- {% if isShow %}
25
+ {% if isBadgeContentHasDiscount == true and priceSave <= 0 %}
26
+ {% assign isNotDiscount = true %}
27
+ {% endif %}
28
+ {% if isShow and isNotDiscount == false %}
24
29
  {% assign className = "" %}
25
30
  {% else %}
26
31
  {% assign className = "!gp-hidden" %}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var styles=require("./common/styles.js"),helpers$1=require("./common/helpers.js"),core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),helpers=require("../../../helpers.js"),getButtonDynamicSourceLocales=require("./helpers/getButtonDynamicSourceLocales.js"),SoldOutButton_liquid=require("./SoldOutButton.liquid.js"),AddToCartButton_liquid=require("./AddToCartButton.liquid.js");const ProductButton=t=>{let{setting:e,builderProps:s,style:r,styles:o,pageContext:a}=t,{wrapStyle:i,restStyle:l}=styles.getSplitStyle(r),{outOfStockButtonLabel:u,unavailableButtonLabel:n,variantSelectionRequiredMessage:c}=getButtonDynamicSourceLocales.getButtonDynamicSourceLocales({setting:e,pageContext:a,builderProps:s}),{urlData:d}=helpers.getInsertLinkData("",e?.actionEffect==="open-cart-drawer"?{link:"/cart",target:"_self"}:e?.customURL),p=system.createStateOrContext(helpers$1.getGPProductButtonState(o,e)),g=()=>AddToCartButton_liquid.AddToCartButton({...t,style:l}),y=()=>SoldOutButton_liquid.SoldOutButton({...t,style:l,label:u}),m=()=>system.If(core.isLocalEnv,`<script ${helpers.getSettingPreloadData('class="gps-link" delay',"src")}="{{ 'gp-product-button-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${helpers.getSettingPreloadData('class="gps-link" delay',"src")}="${core.baseAssetURL}/assets-v2/gp-product-button-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`);return core.template`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var styles=require("./common/styles.js"),helpers$1=require("./common/helpers.js"),core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),helpers=require("../../../helpers.js"),getButtonDynamicSourceLocales=require("./helpers/getButtonDynamicSourceLocales.js"),SoldOutButton_liquid=require("./SoldOutButton.liquid.js"),AddToCartButton_liquid=require("./AddToCartButton.liquid.js");const ProductButton=t=>{let{setting:e,builderProps:s,style:r,styles:o,pageContext:a}=t,{wrapStyle:i,restStyle:l}=styles.getSplitStyle(r),{outOfStockButtonLabel:n,unavailableButtonLabel:u,variantSelectionRequiredMessage:c}=getButtonDynamicSourceLocales.getButtonDynamicSourceLocales({setting:e,pageContext:a,builderProps:s}),{urlData:d}=helpers.getInsertLinkData("",e?.actionEffect==="open-cart-drawer"?{link:"/cart",target:"_self"}:e?.customURL),p=system.createStateOrContext(helpers$1.getGPProductButtonState(o,e)),g=()=>AddToCartButton_liquid.AddToCartButton({...t,style:l}),y=()=>SoldOutButton_liquid.SoldOutButton({...t,style:l,label:n}),m=()=>system.If(core.isLocalEnv,`<script ${helpers.getSettingPreloadData('class="gps-link" delay',"src")}="{{ 'gp-product-button-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${helpers.getSettingPreloadData('class="gps-link" delay',"src")}="${core.baseAssetURL}/assets-v2/gp-product-button-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`);return core.template`
2
2
  ${system.Liquid("{%- assign total_combinations = 1 -%}")}
3
3
  ${system.LiquidFor("option in product.options_with_values","{%- assign total_combinations = total_combinations | times: option.values.size -%}")}
4
4
  {%- liquid
@@ -10,9 +10,10 @@
10
10
  gp-data-wrapper="true"
11
11
  gp-href="${d.href}"
12
12
  class="gp-product-button"
13
- gp-label-out-of-stock="${u}"
14
- gp-label-unavailable="${n}"
13
+ gp-label-out-of-stock="${n}"
14
+ gp-label-unavailable="${u}"
15
15
  data-variant-selection-required-message="${c}"
16
+ gp-enable-third-partycart="{{shop.metafields.GEMPAGES.enableThirdPartyCart}}"
16
17
  >
17
18
  <script gp-data type="application/json">${JSON.stringify(p).replaceAll("'","&#039;")}</script>
18
19
  ${g()}
@@ -1 +1 @@
1
- import{DEVICES as e,globalEvent as t,cloneDeep as r}from"@gem-sdk/core";import i from"./link/components/Link.js";import{HeroBanner as n}from"./hero-banner/settings/configs/translate.js";let REGEX_PAGE_TYPE=new RegExp(/^\/?(?:collections|pages|products|blogs|checkout|cart|policies)\/?/i),isShopifyDomain=(e,t)=>{let r=new RegExp(/^https?:\/\//i);return e&&!r.test(t)&&REGEX_PAGE_TYPE.test(t)},getLinkArticle=(e,t)=>"scroll-to"==e?t?.link:"{{article.url}}",isTransparentColor=e=>!!e&&(e.startsWith("#")?isHexTransparent(e):e.startsWith("rgb")?isTransparentRGBA(e):"transparent"==e),isTransparentRGBA=e=>{let t=e.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i)?.map(Number).filter(e=>!isNaN(e))??[0,0,0,1];return 0===t[t.length-1]},isHexTransparent=e=>{let t=!1,r=e.slice(e.startsWith("#")?1:0);3===r.length?r=[...r].map(e=>e+e).join(""):8===r.length&&(t=!0);let i=parseInt(r,16),n=t?255&i:void 0;return 0===n||!!n},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,createTranslateKey=(e,t)=>`g${e}_${t}`,createSettingId=({id:e,index:t,suffix:r})=>e?"number"==typeof t&&t>=0?`${e}_${t}`:r?`${e}_${r}`:e:"",getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:n,isCapitalize:l,defaultVal:a="",isReplaceLocationOrigin:o,isReplaceMaxSize:s,isReplaceInventoryQuantity:c})=>{let p=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),g=n?.isTranslateWithLocale?1e3:5e3;if(!r||!e?.toString().trim()||e.toString().length>g||p||n?.isPreviewing)return e??a;let u=createTranslateKey(t,r),f=`section.settings.${u}`;return(n?.isTranslateWithLocale&&(f=`'sections.${n.sectionName}.${u}_html' | t`),o&&(f+=" | replace: '$locationOrigin', locationOrigin"),s&&(f+=" | replace: '$max_size', '10MB'"),c&&(f+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),l&&(f=`${f} | downcase`),i)?f:`{{ ${f} }}`},getStaticLocale=(e,t)=>`{{ 'gempages.${e}.${t}' | t }}`,getSettingPreloadData=(e,t)=>`{% if section.settings.section_preload == "false" %}${e} ${t?`{% else %}${t}`:""}{% endif %}`,getHttpUrl=e=>e?e.match(/^https?:\/\//i)?e:`http://${e}`:"";function normalizeMailto(e){if(e.startsWith("mailto:")){let[t,r]=e.split("?");if(r){let i=r.replace(/\+/g,"%20");e=`${t}?${i}`}}return e}let getInsertLinkData=(e,t,r)=>{let n=["#","mailto:","tel:"],l=["product.url"],a=t?.link!==void 0&&""!==t.link,o=t?.link??"",s="/"===o,c=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),p=a&&c.test(o);p&&(o=getHttpUrl(o)),a&&o.toLowerCase().startsWith("mailto:")&&o.includes("+")&&(o=normalizeMailto(o));let g=()=>!!(n.find(e=>o.startsWith(e))||l.find(e=>o.includes(e))),u=p||isShopifyDomain(a,o)||g()||s||isLinkedToSalesPage(t?.type);(isShopifyDomain(a,o)||s)&&(o=t?.isTranslate?"$locationOrigin"+o:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+o);let f=u?t?.isLiquid?"a":i:e,d={href:o,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},m=u?d:a?{...d,type:r}:{type:r};return{Wrap:f,urlData:m,shouldRenderLink:u}},isLinkedToSalesPage=e=>"go-to-sales-page"===e,checkIsScrollToTop=e=>e?.type==="scroll-to"&&e?.link==="#scroll-to-top",checkIsOpenPopup=e=>e?.type==="open-popup"&&e?.link?.startsWith("#el-"),getLinkData=({setting:e,htmlType:t,defaultWrap:r,isLiquid:n=!1,enableImageLink:l=!1})=>{let a=["product.url"],o=["#","mailto:","tel:"],s=e?.link??"",c="/"===s,p=e?.link!==void 0&&""!==e.link,g=new RegExp(/^https?:\/\//i),u=p&&g.test(s);p&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let f=()=>!!(a.find(e=>s.includes(e))||o.find(e=>s.startsWith(e))),d=l&&(u||isShopifyDomain(p,s)||f()||c||isLinkedToSalesPage(e?.type)),m=s;n&&(isShopifyDomain(p,s)||c)&&(m=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let h=d?n?"a":i:r,y={href:m,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},S=d?y:p?{...y,type:t}:{type:t};return{Wrapper:h,urlData:S,shouldRenderLink:d}},replaceLinkData=(e,t)=>{let r=/<a\s[^>]*>.*?<\/a>/;if(e&&r.test(e)){let r;let i=/<a\s+(?:[^>]*?\s+)?href=["']([^"']*)["'](?:\s+[^>]*?)?(?:target=["']([^"']*)["'])?.*?>.*?<\/a>/gi,n=e.toString();for(;null!==(r=i.exec(n));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});n=n.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return n}return e};function filterTruthyStyles(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}function filterTruthyObject(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}let getDisplayStyle=(t,r)=>{let i={};return e.forEach(e=>{i={...i,[`--d${"desktop"===e?"":`-${e}`}`]:`${t(e)?"none":r}`}}),i},convertUnitToNumber=(e,t)=>{if(!e)return t;if("number"==typeof e)return e;let r="string"==typeof e?e.replaceAll("px","").replaceAll("%","").replaceAll("rem","").replaceAll("em",""):t;return isNaN(Number(r))?t:Number(r)},getAllHrefFromString=e=>{let t;if(!e)return[];let r=/href="([^"]*)"/g,i=[];for(;null!==(t=r.exec(e));)t[1]&&i.push(t[1]);return i},replaceAllHrefFromString=(e,t)=>{let r;if(!e)return"";let i=/href="([^"]*)"/g,n=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[n]??""),n++);return e};function isEmptyObject(e){return 0===Object.keys(e).length&&"object"==typeof e}let handleClickLink=(e,r)=>{if("edit"!==r){if(checkIsScrollToTop(e)){window.scrollTo({top:0,behavior:"smooth"});return}if(checkIsOpenPopup(e)){let r=e?.link?.replace("#el-","#");t.dispatch("onOpenDialog",{popupUId:r});return}e?.link?.startsWith("#")&&t.dispatch("onOpenDialog",{popupUId:e?.link})}},getSeoTranslated=({valueTranslate:e,uid:t,settingId:r})=>{if(!t||!n?.[r]?.id)return e;let i=getDynamicSourceLocales({val:e,settingId:createSettingId({id:n?.[r]?.id}),uid:t});return null!=i?String(i):e},getBackgroundTranslated=({background:e,enableTranslate:t,uid:i,pageContext:n,isTranslateVideo:l=!0})=>{if(!e)return{};if(!t||!i)return e;let a=r(e);for(let e in a){let t=a[e];if(t){if(t.image?.src){let r=getDynamicSourceLocales({val:t.image.src,uid:i,settingId:createSettingId({id:"background",suffix:`${e}_image_src`}),pageContext:n});t.image.src=String(r)}if(l){if("youtube"===t.videoType&&t.video){let r=getDynamicSourceLocales({val:t.video,uid:i,settingId:createSettingId({id:"background",suffix:`${e}_video`}),pageContext:n});t.video=String(r)}if("html5"===t.videoType&&t.videoHtml5){let r=getDynamicSourceLocales({val:t.videoHtml5,uid:i,settingId:createSettingId({id:"background",suffix:`${e}_videoHtml5`}),pageContext:n});t.videoHtml5=String(r)}}}}return a},extractProductID=e=>e.replace("gid://shopify/Product/","");export{REGEX_PAGE_TYPE,checkIsOpenPopup,checkIsScrollToTop,convertUnitToNumber,createSettingId,createTranslateKey,extractProductID,filterTruthyObject,filterTruthyStyles,getAllHrefFromString,getBackgroundTranslated,getDisplayStyle,getDynamicSourceLocales,getInsertLinkData,getLinkArticle,getLinkData,getSeoTranslated,getSettingPreloadData,getStaticLocale,handleClickLink,isEmptyObject,isHexTransparent,isLinkedToSalesPage,isShopifyDomain,isTransparentColor,isTransparentRGBA,normalizeMailto,replaceAllHrefFromString,replaceLinkData,youtubeShortsRegex};
1
+ import{createTranslateKey as e,DEVICES as t,globalEvent as r,cloneDeep as i}from"@gem-sdk/core";import n from"./link/components/Link.js";import{HeroBanner as l}from"./hero-banner/settings/configs/translate.js";let REGEX_PAGE_TYPE=new RegExp(/^\/?(?:collections|pages|products|blogs|checkout|cart|policies)\/?/i),isShopifyDomain=(e,t)=>{let r=new RegExp(/^https?:\/\//i);return e&&!r.test(t)&&REGEX_PAGE_TYPE.test(t)},getLinkArticle=(e,t)=>"scroll-to"==e?t?.link:"{{article.url}}",isTransparentColor=e=>!!e&&(e.startsWith("#")?isHexTransparent(e):e.startsWith("rgb")?isTransparentRGBA(e):"transparent"==e),isTransparentRGBA=e=>{let t=e.replace(/\s/g,"").match(/^rgba?\((\d+),(\d+),(\d+),?([^,\s)]+)?/i)?.map(Number).filter(e=>!isNaN(e))??[0,0,0,1];return 0===t[t.length-1]},isHexTransparent=e=>{let t=!1,r=e.slice(e.startsWith("#")?1:0);3===r.length?r=[...r].map(e=>e+e).join(""):8===r.length&&(t=!0);let i=parseInt(r,16),n=t?255&i:void 0;return 0===n||!!n},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,createTranslateKey=(e,t)=>`g${e}_${t}`,createSettingId=({id:e,index:t,suffix:r})=>e?"number"==typeof t&&t>=0?`${e}_${t}`:r?`${e}_${r}`:e:"",getDynamicSourceLocales=({val:t,uid:r,settingId:i,isLiquid:n,pageContext:l,isCapitalize:a,defaultVal:o="",isReplaceLocationOrigin:s,isReplaceMaxSize:c,isReplaceInventoryQuantity:g})=>{let p=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(t?.toString()??""),u=l?.isTranslateWithLocale?1e3:5e3;if(!i||!t?.toString().trim()||t.toString().length>u||p||l?.isPreviewing)return t??o;let f=e(r,i,t?.toString()??o??""),d=`section.settings.${f}`;return(l?.isTranslateWithLocale&&(d=`'sections.${l.sectionName}.${f}_html' | t`),s&&(d+=" | replace: '$locationOrigin', locationOrigin"),c&&(d+=" | replace: '$max_size', '10MB'"),g&&(d+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),a&&(d=`${d} | downcase`),n)?d:`{{ ${d} }}`},getStaticLocale=(e,t)=>`{{ 'gempages.${e}.${t}' | t }}`,getSettingPreloadData=(e,t)=>`{% if section.settings.section_preload == "false" %}${e} ${t?`{% else %}${t}`:""}{% endif %}`,getHttpUrl=e=>e?e.match(/^https?:\/\//i)?e:`http://${e}`:"";function normalizeMailto(e){if(e.startsWith("mailto:")){let[t,r]=e.split("?");if(r){let i=r.replace(/\+/g,"%20");e=`${t}?${i}`}}return e}let getInsertLinkData=(e,t,r)=>{let i=["#","mailto:","tel:"],l=["product.url"],a=t?.link!==void 0&&""!==t.link,o=t?.link??"",s="/"===o,c=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),g=a&&c.test(o);g&&(o=getHttpUrl(o)),a&&o.toLowerCase().startsWith("mailto:")&&o.includes("+")&&(o=normalizeMailto(o));let p=()=>!!(i.find(e=>o.startsWith(e))||l.find(e=>o.includes(e))),u=g||isShopifyDomain(a,o)||p()||s||isLinkedToSalesPage(t?.type);(isShopifyDomain(a,o)||s)&&(o=t?.isTranslate?"$locationOrigin"+o:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+o);let f=u?t?.isLiquid?"a":n:e,d={href:o,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},m=u?d:a?{...d,type:r}:{type:r};return{Wrap:f,urlData:m,shouldRenderLink:u}},isLinkedToSalesPage=e=>"go-to-sales-page"===e,checkIsScrollToTop=e=>e?.type==="scroll-to"&&e?.link==="#scroll-to-top",checkIsOpenPopup=e=>e?.type==="open-popup"&&e?.link?.startsWith("#el-"),getLinkData=({setting:e,htmlType:t,defaultWrap:r,isLiquid:i=!1,enableImageLink:l=!1})=>{let a=["product.url"],o=["#","mailto:","tel:"],s=e?.link??"",c="/"===s,g=e?.link!==void 0&&""!==e.link,p=new RegExp(/^https?:\/\//i),u=g&&p.test(s);g&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let f=()=>!!(a.find(e=>s.includes(e))||o.find(e=>s.startsWith(e))),d=l&&(u||isShopifyDomain(g,s)||f()||c||isLinkedToSalesPage(e?.type)),m=s;i&&(isShopifyDomain(g,s)||c)&&(m=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let h=d?i?"a":n:r,y={href:m,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},S=d?y:g?{...y,type:t}:{type:t};return{Wrapper:h,urlData:S,shouldRenderLink:d}},replaceLinkData=(e,t)=>{let r=/<a\s[^>]*>.*?<\/a>/;if(e&&r.test(e)){let r;let i=/<a\s+(?:[^>]*?\s+)?href=["']([^"']*)["'](?:\s+[^>]*?)?(?:target=["']([^"']*)["'])?.*?>.*?<\/a>/gi,n=e.toString();for(;null!==(r=i.exec(n));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});n=n.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return n}return e};function filterTruthyStyles(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}function filterTruthyObject(e){return Object.fromEntries(Object.entries(e||{}).filter(([,e])=>!!e))}let getDisplayStyle=(e,r)=>{let i={};return t.forEach(t=>{i={...i,[`--d${"desktop"===t?"":`-${t}`}`]:`${e(t)?"none":r}`}}),i},convertUnitToNumber=(e,t)=>{if(!e)return t;if("number"==typeof e)return e;let r="string"==typeof e?e.replaceAll("px","").replaceAll("%","").replaceAll("rem","").replaceAll("em",""):t;return isNaN(Number(r))?t:Number(r)},getAllHrefFromString=e=>{let t;if(!e)return[];let r=/href="([^"]*)"/g,i=[];for(;null!==(t=r.exec(e));)t[1]&&i.push(t[1]);return i},replaceAllHrefFromString=(e,t)=>{let r;if(!e)return"";let i=/href="([^"]*)"/g,n=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[n]??""),n++);return e};function isEmptyObject(e){return 0===Object.keys(e).length&&"object"==typeof e}let handleClickLink=(e,t)=>{if("edit"!==t){if(checkIsScrollToTop(e)){window.scrollTo({top:0,behavior:"smooth"});return}if(checkIsOpenPopup(e)){let t=e?.link?.replace("#el-","#");r.dispatch("onOpenDialog",{popupUId:t});return}e?.link?.startsWith("#")&&r.dispatch("onOpenDialog",{popupUId:e?.link})}},getSeoTranslated=({valueTranslate:e,uid:t,settingId:r})=>{if(!t||!l?.[r]?.id)return e;let i=getDynamicSourceLocales({val:e,settingId:createSettingId({id:l?.[r]?.id}),uid:t});return null!=i?String(i):e},getBackgroundTranslated=({background:e,enableTranslate:t,uid:r,pageContext:n,isTranslateVideo:l=!0})=>{if(!e)return{};if(!t||!r)return e;let a=i(e);for(let e in a){let t=a[e];if(t){if(t.image?.src){let i=getDynamicSourceLocales({val:t.image.src,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_image_src`}),pageContext:n});t.image.src=String(i)}if(l){if("youtube"===t.videoType&&t.video){let i=getDynamicSourceLocales({val:t.video,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_video`}),pageContext:n});t.video=String(i)}if("html5"===t.videoType&&t.videoHtml5){let i=getDynamicSourceLocales({val:t.videoHtml5,uid:r,settingId:createSettingId({id:"background",suffix:`${e}_videoHtml5`}),pageContext:n});t.videoHtml5=String(i)}}}}return a},extractProductID=e=>e.replace("gid://shopify/Product/","");export{REGEX_PAGE_TYPE,checkIsOpenPopup,checkIsScrollToTop,convertUnitToNumber,createSettingId,createTranslateKey,extractProductID,filterTruthyObject,filterTruthyStyles,getAllHrefFromString,getBackgroundTranslated,getDisplayStyle,getDynamicSourceLocales,getInsertLinkData,getLinkArticle,getLinkData,getSeoTranslated,getSettingPreloadData,getStaticLocale,handleClickLink,isEmptyObject,isHexTransparent,isLinkedToSalesPage,isShopifyDomain,isTransparentColor,isTransparentRGBA,normalizeMailto,replaceAllHrefFromString,replaceLinkData,youtubeShortsRegex};
@@ -1,39 +1,39 @@
1
- import{template as e,sanitizeLiquid as t,dataStringify as s,RenderIf as i,isLocalEnv as r,baseAssetURL as a}from"@gem-sdk/core";import{getDynamicSourceLocales as c,getSettingPreloadData as o}from"../../../helpers.js";import{generateBadgeContent as p}from"./utils/generateLiquidContent.js";import{renderBadgeInFirstTime as n}from"./utils/renderBadgeLiquid.js";import{createClass as d,createStyle as l,createAttr as u,createStateOrContext as m}from"@gem-sdk/system";import{IS_LIQUID as g}from"./constants.js";import{getContainerStyle as y,getSubWrapperStyle as $,getContentStyleInternal as v,getTextBadgeWrapperStyles as f,getTextContentStyle as j,getImageContainerStyles as P}from"./common/styles.js";import{getContainerClasses as D,getWrapperClasses as V,getSubWrapperClass as S,getTextContainerClasses as b,getTextWrapperClasses as I,getTextContentClasses as T,getImageContainerClasses as k,getImageClasses as q}from"./common/classes.js";import{getSubWrapperAttrs as A,getContainerAttrs as B,getTextContentAttrs as C,getImageAttr as E}from"./common/attrs.js";import{ProductBadge as K}from"../../settings/product-badge/configs/translate.js";let ProductBadge=_=>{let{styles:h,setting:L,builderProps:N,pageContext:O}=_,Q=L?.shape!=="image",w=Q&&L?.displayContent?.trim()==="",G=d({...D({isInstant:!1,props:_})}),J=l({...y(_,g)}),x=d({...V(_)}),M=d({...S(_)}),R=l({...$({props:_})}),Y=u({...A(_)}),z=v(_),F=d({...b()}),H=u({...B(_)}),U=d({...I()}),W=l({...f({setting:L,styles:h})}),X=d({...T(h)}),Z=l({...j({setting:L,styles:h})}),ee=u({...C()}),et=d({...k()}),es=l({...P({setting:L,styles:h})}),ei=d({...q()}),er=u({...E({setting:L})}),ea=m({minPrice:"{{ minPriceValue | replace: '\"', '\\\"' | escape }}",variantIDs:'{{ product.variants | map: "id" | json | escape }}',variantInventoryQuantities:'{{ product.variants | map: "inventory_quantity" | json | escape }}',amountDiscount:"{{amountDiscountValue | replace: '\"', '\\\"' | escape }}",percentDiscount:"{{percentDiscountValue}}",price:"{{price}}",displayTrigger:JSON.parse(JSON.stringify(L?.displayTrigger).replaceAll("'","&#039;")),uid:_.builderProps?.uid,productCreatedAt:'{{product.created_at | date: "%Y-%m-%d" }}',productTags:"{{ product.tags | join: \",\" | replace: '\"', '\\\"' | escape }}",isTextBadge:Q}),{displayContent:ec}=L??{},eo=c({val:ec?.trim(),uid:N?.uid,settingId:K?.displayContent?.id,isLiquid:!0,pageContext:O});return e`
1
+ import{template as e,sanitizeLiquid as t,dataStringify as s,RenderIf as i,isLocalEnv as r,baseAssetURL as a}from"@gem-sdk/core";import{getDynamicSourceLocales as o,getSettingPreloadData as c}from"../../../helpers.js";import{generateBadgeContent as p}from"./utils/generateLiquidContent.js";import{renderBadgeInFirstTime as n}from"./utils/renderBadgeLiquid.js";import{createClass as d,createStyle as l,createAttr as u,createStateOrContext as m}from"@gem-sdk/system";import{IS_LIQUID as g}from"./constants.js";import{getContainerStyle as y,getSubWrapperStyle as $,getContentStyleInternal as v,getTextBadgeWrapperStyles as f,getTextContentStyle as j,getImageContainerStyles as P}from"./common/styles.js";import{getContainerClasses as D,getWrapperClasses as V,getSubWrapperClass as S,getTextContainerClasses as b,getTextWrapperClasses as C,getTextContentClasses as I,getImageContainerClasses as T,getImageClasses as k}from"./common/classes.js";import{getSubWrapperAttrs as q,getContainerAttrs as A,getTextContentAttrs as B,getImageAttr as E}from"./common/attrs.js";import{ProductBadge as K}from"../../settings/product-badge/configs/translate.js";import{checkDiscountContentProductBadge as _}from"./utils/common.js";let ProductBadge=h=>{let{styles:L,setting:N,builderProps:O,pageContext:Q}=h,w=N?.shape!=="image",G=w&&N?.displayContent?.trim()==="",J=_(N?.displayContent),x=d({...D({isInstant:!1,props:h})}),M=l({...y(h,g)}),R=d({...V(h)}),Y=d({...S(h)}),z=l({...$({props:h})}),F=u({...q(h)}),H=v(h),U=d({...b()}),W=u({...A(h)}),X=d({...C()}),Z=l({...f({setting:N,styles:L})}),ee=d({...I(L)}),et=l({...j({setting:N,styles:L})}),es=u({...B()}),ei=d({...T()}),er=l({...P({setting:N,styles:L})}),ea=d({...k()}),eo=u({...E({setting:N})}),ec=m({minPrice:"{{ minPriceValue | replace: '\"', '\\\"' | escape }}",variantIDs:'{{ product.variants | map: "id" | json | escape }}',variantInventoryQuantities:'{{ product.variants | map: "inventory_quantity" | json | escape }}',amountDiscount:"{{amountDiscountValue | replace: '\"', '\\\"' | escape }}",percentDiscount:"{{percentDiscountValue}}",price:"{{price}}",displayTrigger:JSON.parse(JSON.stringify(N?.displayTrigger).replaceAll("'","&#039;")),uid:h.builderProps?.uid,productCreatedAt:'{{product.created_at | date: "%Y-%m-%d" }}',productTags:"{{ product.tags | join: \",\" | replace: '\"', '\\\"' | escape }}",isTextBadge:w}),{displayContent:ep}=N??{},en=o({val:ep?.trim(),uid:O?.uid,settingId:K?.displayContent?.id,isLiquid:!0,pageContext:Q});return e`
2
2
  {% if product %}
3
- ${p(eo,O?.isPreviewing)}
4
- ${n(L?.displayTrigger,!w)}
3
+ ${p(en,Q?.isPreviewing)}
4
+ ${n(N?.displayTrigger,!G,J)}
5
5
  <gp-product-badge
6
- ${{...H}}
7
- class="${G}"
8
- style="${J}"
9
- data-display-content="${O?.isPreviewing?eo:t(`{{${eo}}}`)}"
6
+ ${{...W}}
7
+ class="${x}"
8
+ style="${M}"
9
+ data-display-content="${Q?.isPreviewing?en:t(`{{${en}}}`)}"
10
10
  >
11
- <script gp-data type="application/json">${s(ea)}</script>
12
- <div class="${x}">
11
+ <script gp-data type="application/json">${s(ec)}</script>
12
+ <div class="${R}">
13
13
  <div
14
- ${{...Y}}
15
- class="${M}"
16
- style="${R}"
14
+ ${{...F}}
15
+ class="${Y}"
16
+ style="${z}"
17
17
  >
18
- <style>${z}</style>
19
- ${i(Q,e`
20
- <div class="${F}">
18
+ <style>${H}</style>
19
+ ${i(w,e`
20
+ <div class="${U}">
21
21
  <div
22
- class="${U}"
23
- style="${W}"
22
+ class="${X}"
23
+ style="${Z}"
24
24
  >
25
25
  <pre
26
- ${{...ee}}
27
- class="${X}"
28
- style="${Z}"
26
+ ${{...es}}
27
+ class="${ee}"
28
+ style="${et}"
29
29
  >{{ content | replace: percentDiscountKey, percentDiscountValue | replace: amountDiscountKey, amountDiscountValue | replace: inventoryQuantityKey, inventoryQuantityValue | replace: minPriceKey, minPriceValue }}</pre>
30
30
  </div>
31
- </div>`,e`<div class="${et}" style="${es}">
32
- <img ${{...er}} class="${ei}" alt="" />
31
+ </div>`,e`<div class="${ei}" style="${er}">
32
+ <img ${{...eo}} class="${ea}" alt="" />
33
33
  </div>`)}
34
34
  </div>
35
35
  </div>
36
36
  </gp-product-badge>
37
- ${i(r,`<script ${o('class="gps-link" delay',"src")}="{{ 'gp-product-badge-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${o('class="gps-link" delay',"src")}="${a}/assets-v2/gp-product-badge-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`)}
37
+ ${i(r,`<script ${c('class="gps-link" delay',"src")}="{{ 'gp-product-badge-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${c('class="gps-link" delay',"src")}="${a}/assets-v2/gp-product-badge-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`)}
38
38
  {% endif %}
39
39
  `};export{ProductBadge as default};
@@ -1 +1 @@
1
- import{makeGlobalSize as e,composeTypographyStyle as t,getStyleShadow as o,convertDecimalToNumber as r}from"@gem-sdk/core";import{convertToStyle as i,getSize as a,getWrapperStyle as n,getShapeWrapperPadding as s}from"../utils/common.js";import{getShapePosition as p}from"../utils/getShapePosition.js";import{composeTextStyleByPosition as g,composeShapeStyleByPosition as l}from"../utils/getRotateShape.js";import{getStyleAdvanced as d}from"../utils/getStyleAdvanced.js";import{getWhiteSpaceStyle as u}from"../utils/getWhiteSpace.js";import{getStyleBackground as S,generateShadowCSS as m,getStyleBorder as y,getStyleCornerRadius as h}from"../utils/stylesV2.js";import{getShape as x}from"../utils/shape.js";import{checkShowBadge as c}from"../utils/renderBadgeILP.js";let getSizeStyles=e=>{let{setting:t,styles:o}=e,r=x(t?.shape),i=t?.contentType==="text",n=i?o?.textSizeV2:o?.imageSizeV2;return i?a(r,n):a(void 0,n)},getContainerStyle=(e,t=!1)=>{let{setting:o,styles:r,style:i,navigationPosition:a,imageData:s,dotData:g}=e,l=o?.positionWithImage==="outside",u=n(t),S=p({positionType:r?.position,isLiquid:!1,navigationPosition:a,dataImage:{...s,...g}}),m=getSizeStyles(e),y=d(l?{}:{...S,...m},i);return{...!l&&{"--pos":"absolute"},...u,...y}},getTextContentStyle=({styles:r,setting:a})=>{let n=e(r?.textSizeV2).padding,s=x(a?.shape),p=a?.positionWithImage==="outside";return{...u(r?.textSizeV2),...i(s?.textStyle),...g(s,r?.position,p),...t(r?.typo),...o({value:r?.typo?.custom?.textShadow,styleAppliedFor:"text-shadow",isEnableShadow:r?.typo?.custom?.hasShadowText}),...S(!!s?.backgroundColorInText,r?.badgeColorV2),...n}},getBorderStyles=({styles:e,setting:t})=>{let o=x(t?.shape),r=t?.contentType==="text";return o?.supportBorder?r?y(e?.textBadgeBorder):y(e?.imageBadgeBorder):{}},getCornerStyles=({styles:e,setting:t})=>{let o=x(t?.shape),r=t?.contentType==="text";return o?.supportCorner?r?h(e?.textBadgeCorner,o?.shapeRadius):h(e?.imageBadgeCorner,o?.shapeRadius):{}},getTextBadgeWrapperStyles=({styles:e,setting:t})=>{let o=x(t?.shape),r=getBorderStyles({setting:t,styles:e}),i=t?.positionWithImage==="outside",a=getCornerStyles({setting:t,styles:e}),n=s(o?.ratio);return{...r,...a,...l(o,e?.position,i),...S(!o?.backgroundColorInText,e?.badgeColorV2),...n,height:o?.ratio===1?"0px":"100%"}},getImageContainerStyles=({styles:t,setting:o})=>{let r=getBorderStyles({setting:o,styles:t}),i=getCornerStyles({setting:o,styles:t}),a=e(t?.imageSizeV2).padding;return{...r,...i,...a}},getOpacityProductBadge=({props:e,currentVariant:t,product:o,isEditMode:i})=>{let{"bundle-item":a,setting:n}=e;if(a)return 1;let s=n?.contentType==="text",p=s&&!n?.displayContent?.trim();if(p)return i?.2:0;let g=r(t?.price)??0,l=r(t?.salePrice)??0,d=l-g>0,u=c(n?.displayTrigger,o,t);return d&&u?1:i?.2:0},getSubWrapperStyle=({props:e,product:t,currentVariant:o,isEditMode:r})=>{let{setting:i}=e,a=i?.positionWithImage==="outside",n=getSizeStyles(e),s=r&&o?getOpacityProductBadge({props:e,currentVariant:o,product:t,isEditMode:r}):1;return{...a?{...n,"--mb":0}:{},opacity:s}},getContentStyleInternal=e=>{let{styles:t,setting:o,builderProps:r}=e,i=o?.contentType==="text";return m(`[id="${r?.uid}"] .product-badge-item`,i?t?.textBadgeShadow:t?.imageBadgeShadow)};export{getContainerStyle,getContentStyleInternal,getImageContainerStyles,getSubWrapperStyle,getTextBadgeWrapperStyles,getTextContentStyle};
1
+ import{makeGlobalSize as e,composeTypographyStyle as t,getStyleShadow as o,convertDecimalToNumber as r}from"@gem-sdk/core";import{convertToStyle as i,getSize as a,getWrapperStyle as n,getShapeWrapperPadding as s,checkDiscountContentProductBadge as p}from"../utils/common.js";import{getShapePosition as g}from"../utils/getShapePosition.js";import{composeTextStyleByPosition as l,composeShapeStyleByPosition as d}from"../utils/getRotateShape.js";import{getStyleAdvanced as u}from"../utils/getStyleAdvanced.js";import{getWhiteSpaceStyle as S}from"../utils/getWhiteSpace.js";import{getStyleBackground as y,generateShadowCSS as m,getStyleBorder as h,getStyleCornerRadius as x}from"../utils/stylesV2.js";import{getShape as c}from"../utils/shape.js";import{checkShowBadge as C}from"../utils/renderBadgeILP.js";let getSizeStyles=e=>{let{setting:t,styles:o}=e,r=c(t?.shape),i=t?.contentType==="text",n=i?o?.textSizeV2:o?.imageSizeV2;return i?a(r,n):a(void 0,n)},getContainerStyle=(e,t=!1)=>{let{setting:o,styles:r,style:i,navigationPosition:a,imageData:s,dotData:p}=e,l=o?.positionWithImage==="outside",d=n(t),S=g({positionType:r?.position,isLiquid:!1,navigationPosition:a,dataImage:{...s,...p}}),y=getSizeStyles(e),m=u(l?{}:{...S,...y},i);return{...!l&&{"--pos":"absolute"},...d,...m}},getTextContentStyle=({styles:r,setting:a})=>{let n=e(r?.textSizeV2).padding,s=c(a?.shape),p=a?.positionWithImage==="outside";return{...S(r?.textSizeV2),...i(s?.textStyle),...l(s,r?.position,p),...t(r?.typo),...o({value:r?.typo?.custom?.textShadow,styleAppliedFor:"text-shadow",isEnableShadow:r?.typo?.custom?.hasShadowText}),...y(!!s?.backgroundColorInText,r?.badgeColorV2),...n}},getBorderStyles=({styles:e,setting:t})=>{let o=c(t?.shape),r=t?.contentType==="text";return o?.supportBorder?r?h(e?.textBadgeBorder):h(e?.imageBadgeBorder):{}},getCornerStyles=({styles:e,setting:t})=>{let o=c(t?.shape),r=t?.contentType==="text";return o?.supportCorner?r?x(e?.textBadgeCorner,o?.shapeRadius):x(e?.imageBadgeCorner,o?.shapeRadius):{}},getTextBadgeWrapperStyles=({styles:e,setting:t})=>{let o=c(t?.shape),r=getBorderStyles({setting:t,styles:e}),i=t?.positionWithImage==="outside",a=getCornerStyles({setting:t,styles:e}),n=s(o?.ratio);return{...r,...a,...d(o,e?.position,i),...y(!o?.backgroundColorInText,e?.badgeColorV2),...n,height:o?.ratio===1?"0px":"100%"}},getImageContainerStyles=({styles:t,setting:o})=>{let r=getBorderStyles({setting:o,styles:t}),i=getCornerStyles({setting:o,styles:t}),a=e(t?.imageSizeV2).padding;return{...r,...i,...a}},getOpacityProductBadge=({props:e,currentVariant:t,product:o,isEditMode:i})=>{let{"bundle-item":a,setting:n}=e;if(a)return 1;let s=n?.contentType==="text",g=s&&!n?.displayContent?.trim(),l=p(n?.displayContent);if(g)return i?.2:0;let d=r(t?.price)??0,u=r(t?.salePrice)??0,S=u-d>0,y=C(n?.displayTrigger,o,t);return(S||!l)&&y?1:i?.2:0},getSubWrapperStyle=({props:e,product:t,currentVariant:o,isEditMode:r})=>{let{setting:i}=e,a=i?.positionWithImage==="outside",n=getSizeStyles(e),s=r&&o?getOpacityProductBadge({props:e,currentVariant:o,product:t,isEditMode:r}):1;return{...a?{...n,"--mb":0}:{},opacity:s}},getContentStyleInternal=e=>{let{styles:t,setting:o,builderProps:r}=e,i=o?.contentType==="text";return m(`[id="${r?.uid}"] .product-badge-item`,i?t?.textBadgeShadow:t?.imageBadgeShadow)};export{getContainerStyle,getContentStyleInternal,getImageContainerStyles,getSubWrapperStyle,getTextBadgeWrapperStyles,getTextContentStyle};
@@ -1,4 +1,4 @@
1
- import{CompareType as e}from"../types.js";let getMinValueForInventory=i=>i===e.ABOVE?0:i===e.BELOW?2:1,renderBadgeInFirstTime=(e,i)=>`
1
+ import{CompareType as e}from"../types.js";let getMinValueForInventory=i=>i===e.ABOVE?0:i===e.BELOW?2:1,renderBadgeInFirstTime=(e,i,n)=>`
2
2
  {% assign isShow = true %}
3
3
  {% assign conditionTriggers = "" %}
4
4
  {% assign isInventoryStatus = false %}
@@ -17,10 +17,15 @@ import{CompareType as e}from"../types.js";let getMinValueForInventory=i=>i===e.A
17
17
  {% assign salePrice = variant.compare_at_price | times: 1.0 %}
18
18
  {% assign priceSave = salePrice | minus: price %}
19
19
  {% assign isEmptyBadgeContent = ${!i} %}
20
- {% if priceSave <= 0 or isEmptyBadgeContent == true %}
21
- {% assign isShow = false %}
20
+ {% assign isNotDiscount = false %}
21
+ {% assign isBadgeContentHasDiscount = ${n} %}
22
+ {% if isEmptyBadgeContent == true %}
23
+ {% assign isNotDiscount = true %}
22
24
  {% endif %}
23
- {% if isShow %}
25
+ {% if isBadgeContentHasDiscount == true and priceSave <= 0 %}
26
+ {% assign isNotDiscount = true %}
27
+ {% endif %}
28
+ {% if isShow and isNotDiscount == false %}
24
29
  {% assign className = "" %}
25
30
  {% else %}
26
31
  {% assign className = "!gp-hidden" %}
@@ -1,6 +1,6 @@
1
- import{getSplitStyle as t}from"./common/styles.js";import{getGPProductButtonState as o}from"./common/helpers.js";import{template as s,isLocalEnv as e,baseAssetURL as r}from"@gem-sdk/core";import{createStateOrContext as i,Liquid as a,LiquidFor as n,If as l}from"@gem-sdk/system";import{getInsertLinkData as p,getSettingPreloadData as c}from"../../../helpers.js";import{getButtonDynamicSourceLocales as u}from"./helpers/getButtonDynamicSourceLocales.js";import{SoldOutButton as m}from"./SoldOutButton.liquid.js";import{AddToCartButton as d}from"./AddToCartButton.liquid.js";let ProductButton=f=>{let{setting:g,builderProps:y,style:$,styles:b,pageContext:v}=f,{wrapStyle:_,restStyle:j}=t($),{outOfStockButtonLabel:S,unavailableButtonLabel:h,variantSelectionRequiredMessage:k}=u({setting:g,pageContext:v,builderProps:y}),{urlData:q}=p("",g?.actionEffect==="open-cart-drawer"?{link:"/cart",target:"_self"}:g?.customURL),B=i(o(b,g)),E=()=>d({...f,style:j}),A=()=>m({...f,style:j,label:S}),w=()=>l(e,`<script ${c('class="gps-link" delay',"src")}="{{ 'gp-product-button-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${c('class="gps-link" delay',"src")}="${r}/assets-v2/gp-product-button-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`);return s`
2
- ${a("{%- assign total_combinations = 1 -%}")}
3
- ${n("option in product.options_with_values","{%- assign total_combinations = total_combinations | times: option.values.size -%}")}
1
+ import{getSplitStyle as t}from"./common/styles.js";import{getGPProductButtonState as o}from"./common/helpers.js";import{template as s,isLocalEnv as e,baseAssetURL as r}from"@gem-sdk/core";import{createStateOrContext as a,Liquid as i,LiquidFor as l,If as n}from"@gem-sdk/system";import{getInsertLinkData as p,getSettingPreloadData as c}from"../../../helpers.js";import{getButtonDynamicSourceLocales as u}from"./helpers/getButtonDynamicSourceLocales.js";import{SoldOutButton as d}from"./SoldOutButton.liquid.js";import{AddToCartButton as m}from"./AddToCartButton.liquid.js";let ProductButton=f=>{let{setting:g,builderProps:y,style:b,styles:$,pageContext:v}=f,{wrapStyle:_,restStyle:h}=t(b),{outOfStockButtonLabel:j,unavailableButtonLabel:S,variantSelectionRequiredMessage:k}=u({setting:g,pageContext:v,builderProps:y}),{urlData:E}=p("",g?.actionEffect==="open-cart-drawer"?{link:"/cart",target:"_self"}:g?.customURL),q=a(o($,g)),A=()=>m({...f,style:h}),B=()=>d({...f,style:h,label:j}),P=()=>n(e,`<script ${c('class="gps-link" delay',"src")}="{{ 'gp-product-button-v7-5.js' | asset_url }}" defer="defer"></script>`,`<script ${c('class="gps-link" delay',"src")}="${r}/assets-v2/gp-product-button-v7-5.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`);return s`
2
+ ${i("{%- assign total_combinations = 1 -%}")}
3
+ ${l("option in product.options_with_values","{%- assign total_combinations = total_combinations | times: option.values.size -%}")}
4
4
  {%- liquid
5
5
  assign inventory_quantity = variant.inventory_quantity | default: 0
6
6
  assign is_in_stock = variant.available
@@ -8,15 +8,16 @@ import{getSplitStyle as t}from"./common/styles.js";import{getGPProductButtonStat
8
8
  <gp-product-button
9
9
  style="${_}"
10
10
  gp-data-wrapper="true"
11
- gp-href="${q.href}"
11
+ gp-href="${E.href}"
12
12
  class="gp-product-button"
13
- gp-label-out-of-stock="${S}"
14
- gp-label-unavailable="${h}"
13
+ gp-label-out-of-stock="${j}"
14
+ gp-label-unavailable="${S}"
15
15
  data-variant-selection-required-message="${k}"
16
+ gp-enable-third-partycart="{{shop.metafields.GEMPAGES.enableThirdPartyCart}}"
16
17
  >
17
- <script gp-data type="application/json">${JSON.stringify(B).replaceAll("'","&#039;")}</script>
18
- ${E()}
18
+ <script gp-data type="application/json">${JSON.stringify(q).replaceAll("'","&#039;")}</script>
19
19
  ${A()}
20
+ ${B()}
20
21
  </gp-product-button>
21
- ${w()}
22
+ ${P()}
22
23
  `};export{ProductButton as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/components",
3
- "version": "12.0.0-dev.32",
3
+ "version": "12.0.0-dev.36",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",
@@ -27,9 +27,9 @@
27
27
  "i18n:generate": "node ./scripts/update-locales-to-setting.js"
28
28
  },
29
29
  "devDependencies": {
30
- "@gem-sdk/core": "12.0.0-dev.32",
30
+ "@gem-sdk/core": "12.0.0-dev.36",
31
31
  "@gem-sdk/styles": "12.0.0-dev.29",
32
- "@gem-sdk/system": "12.0.0-dev.29",
32
+ "@gem-sdk/system": "12.0.0-dev.35",
33
33
  "@types/react-transition-group": "^4.4.12",
34
34
  "tsup": "8.5.1",
35
35
  "postcss-import": "16.1.1",