@gem-sdk/components 4.0.11 → 4.0.13

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";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),React=require("react"),Head=require("next/head"),ChildrenDroppable=require("../ChildrenDroppable.js"),HTML5Embed=require("../../../video/components/HTML5Embed.js"),helpers$1=require("../../../video/common/helpers.js"),LiteYouTubeEmbed=require("../../../video/components/LiteYouTubeEmbed.js"),system=require("@gem-sdk/system"),useRowSetting=require("../../hooks/useRowSetting.js"),attrs=require("./common/attrs.js"),classes=require("./common/classes.js"),styles=require("./common/styles.js"),helpers=require("./common/helpers.js"),core=require("@gem-sdk/core");const Row=e=>{let{styles:s,setting:t,children:r}=e,{isSection:i,as:l="div"}=t??{},{background:o}=s??{},{builderAttrs:a,cacheHeightOutViewport:m,bgVideo:n,isRowEmpty:u,rowClassEditorOnly:d,isRenderPlaceholderViewBox:c,isPostPurchase:p,ref:j,postPurchaseVerticalAlign:x}=useRowSetting.useRowSettings(e),{rowStyle:h,backgroundBoxStyle:y,embedVideoStyle:R,sectionStyle:g}=styles.getRowStyle(e,p),{rowAttr:b}=attrs.getAttr(e),{rowClass:v,backgroundBoxClass:f,backgroundBoxInnerClass:C,sectionClass:k,wrapperYoutubeClasses:q,iframeYoutubeClasses:E}=classes.getClass(e),w=system.createClass({[v]:!0,[d]:!0}),H=React.useMemo(()=>{if(!helpers.checkHasBackgroundVideo(o))return;if(n?.videoType==="html5"&&!n.videoHtml5||n?.videoType==="youtube"&&!n.video)return null;if(n?.videoType==="html5"&&n.videoHtml5)return jsxRuntime.jsx(HTML5Embed.default,{muted:!0,loop:n.loop,controls:!1,autoplay:!0,src:n.videoHtml5,title:"Video",className:"gp-relative",style:R});let e=n?.video??"",s=helpers$1.getYoutubeVideoId(e);if(!helpers$1.youtubeVideoRegex.test(e)||!s)return;let t=`&loop=${n?.loop?1:0}&playlist=${s}&showinfo=0&rel=0&fs=0&enablejsapi=1`;return jsxRuntime.jsx(LiteYouTubeEmbed.default,{id:s,autoplay:!0,title:"",controls:!1,params:t,adNetwork:!1,noCookie:!0,muted:!0,lazy:!1,style:R,wrapperClass:q,iframeClass:E})},[o,n,R,E,q]),T=React.Children.map(r,e=>!!core.isEmptyChildren(e)),L=jsxRuntime.jsxs("div",{ref:j,...a,...b,style:h(p),className:w,children:[!!H&&jsxRuntime.jsx("div",{className:f,style:y,children:jsxRuntime.jsx("div",{className:C,children:H})}),c?jsxRuntime.jsx("div",{style:{height:`${m}px`}}):jsxRuntime.jsx(jsxRuntime.Fragment,{children:u?jsxRuntime.jsx(ChildrenDroppable.default,{}):React.Children.map(r,s=>React.isValidElement(s)?React.createElement(s.type,{hiddenEmptyCol:e.hiddenEmptyCol&&!core.isEmptyChildren(s)&&!T,...s.props,key:s.key,order:t?.order,layout:t?.layout,justifyContent:p?x():t?.verticalAlign}):null)})]});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!!s?.preloadBgImage&&jsxRuntime.jsxs(Head,{children:[!!o?.desktop?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.desktop.image.src,as:"image"}),!!o?.tablet?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.tablet.image.src,as:"image"}),!!o?.mobile?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.mobile.image.src,as:"image"})]}),i?jsxRuntime.jsx(l,{className:k,style:g,children:L}):L]})};exports.default=Row;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),React=require("react"),Head=require("next/head"),ChildrenDroppable=require("../ChildrenDroppable.js"),HTML5Embed=require("../../../video/components/HTML5Embed.js"),helpers$1=require("../../../video/common/helpers.js"),LiteYouTubeEmbed=require("../../../video/components/LiteYouTubeEmbed.js"),system=require("@gem-sdk/system"),useRowSetting=require("../../hooks/useRowSetting.js"),attrs=require("./common/attrs.js"),classes=require("./common/classes.js"),styles=require("./common/styles.js"),helpers=require("./common/helpers.js"),core=require("@gem-sdk/core");const Row=e=>{let{styles:s,setting:t,children:r}=e,{isSection:i,as:l="div"}=t??{},{background:o}=s??{},{builderAttrs:a,bgVideo:m,isRowEmpty:n,rowClassEditorOnly:u,isRenderPlaceholderViewBox:d,isPostPurchase:c,ref:p,postPurchaseVerticalAlign:j}=useRowSetting.useRowSettings(e),{rowStyle:x,backgroundBoxStyle:y,embedVideoStyle:h,sectionStyle:R}=styles.getRowStyle(e,c),{rowAttr:g}=attrs.getAttr(e),{rowClass:b,backgroundBoxClass:v,backgroundBoxInnerClass:f,sectionClass:C,wrapperYoutubeClasses:k,iframeYoutubeClasses:q}=classes.getClass(e),E=system.createClass({[b]:!0,[u]:!0}),w=React.useMemo(()=>{if(!helpers.checkHasBackgroundVideo(o))return;if(m?.videoType==="html5"&&!m.videoHtml5||m?.videoType==="youtube"&&!m.video)return null;if(m?.videoType==="html5"&&m.videoHtml5)return jsxRuntime.jsx(HTML5Embed.default,{muted:!0,loop:m.loop,controls:!1,autoplay:!0,src:m.videoHtml5,title:"Video",className:"gp-relative",style:h});let e=m?.video??"",s=helpers$1.getYoutubeVideoId(e);if(!helpers$1.youtubeVideoRegex.test(e)||!s)return;let t=`&loop=${m?.loop?1:0}&playlist=${s}&showinfo=0&rel=0&fs=0&enablejsapi=1`;return jsxRuntime.jsx(LiteYouTubeEmbed.default,{id:s,autoplay:!0,title:"",controls:!1,params:t,adNetwork:!1,noCookie:!0,muted:!0,lazy:!1,style:h,wrapperClass:k,iframeClass:q})},[o,m,h,q,k]),H=React.Children.map(r,e=>!!core.isEmptyChildren(e)),T=jsxRuntime.jsxs("div",{ref:p,...a,...g,style:x(c),className:E,children:[!!w&&jsxRuntime.jsx("div",{className:v,style:y,children:jsxRuntime.jsx("div",{className:f,children:w})}),d?jsxRuntime.jsx(jsxRuntime.Fragment,{}):n?jsxRuntime.jsx(ChildrenDroppable.default,{}):React.Children.map(r,s=>React.isValidElement(s)?React.createElement(s.type,{hiddenEmptyCol:e.hiddenEmptyCol&&!core.isEmptyChildren(s)&&!H,...s.props,key:s.key,order:t?.order,layout:t?.layout,justifyContent:c?j():t?.verticalAlign}):null)]});return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[!!s?.preloadBgImage&&jsxRuntime.jsxs(Head,{children:[!!o?.desktop?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.desktop.image.src,as:"image"}),!!o?.tablet?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.tablet.image.src,as:"image"}),!!o?.mobile?.image?.src&&jsxRuntime.jsx("link",{rel:"preload",href:o.mobile.image.src,as:"image"})]}),i?jsxRuntime.jsx(l,{className:C,style:R,children:T}):T]})};exports.default=Row;
@@ -1 +1 @@
1
- "use strict";var React=require("react"),core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),useInView=require("../../common/hooks/useInView.js");const useRowSettings=e=>{let{setting:t,styles:i,children:s,maxWidthWithEmptyChildren:o,builderAttrs:r}=e,{isSection:n,lazy:u,layout:c,blockAlignment:a}=t??{},{background:d}=i??{},g=core.useCurrentDevice(),[l,p]=React.useState(500),m=core.useEditorMode(),R=core.usePageType(),w=core.getBgVideoByDevice(d,g),y=React.useMemo(()=>core.isEmptyChildren(s),[s]),[S,h]=useInView.useInView({initialInView:!u,triggerOnce:!0,skip:!n,onChange:(e,t)=>{if("edit"==m&&!e&&t){let e=getComputedStyle(t),i=t?.getBoundingClientRect().height;p((i-=parseFloat(e.paddingTop)+parseFloat(e.paddingBottom))??500)}}}),C=React.useMemo(()=>!h&&"edit"==m&&"POST_PURCHASE"!==R,[h,m,R]),P=React.useMemo(()=>"edit"!==m&&u&&!h,[h,u,m]),V=()=>{let e=o&&y&&"edit"===m;if(!e)return{};let t=core.getResponsiveValue(c,"display"),i=t[g];return{width:"fit"===i?"fit-content":"400px"}},k=system.createClass({...V,"gp-content-visibility-hidden":P}),v=()=>({desktop:a,tablet:a,mobile:a});return{ref:S,isRowEmpty:y,cacheHeightOutViewport:l,bgVideo:w,rowClassEditorOnly:k,isRenderPlaceholderViewBox:C,builderAttrs:r,children:s,isPostPurchase:"POST_PURCHASE"===R,postPurchaseVerticalAlign:v}};exports.useRowSettings=useRowSettings;
1
+ "use strict";var React=require("react"),core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),useInView=require("../../common/hooks/useInView.js");const useRowSettings=e=>{let{setting:t,styles:r,children:i,maxWidthWithEmptyChildren:s,builderAttrs:n}=e,{isSection:o,lazy:u,layout:c,blockAlignment:l}=t??{},{background:a}=r??{},d=core.useCurrentDevice(),g=core.useEditorMode(),m=core.usePageType(),h=core.getBgVideoByDevice(a,d),R=React.useRef(null),y=React.useMemo(()=>core.isEmptyChildren(i),[i]),w=e=>{R.current&&(clearTimeout(R.current),R.current=null);let t=e?.getBoundingClientRect().height;e.style.height=`${t||500}px`,e.style.overflow="hidden"},p=e=>{R.current&&clearTimeout(R.current),R.current=setTimeout(()=>{e.style.height="",e.style.overflow="",R.current=null},1500)},[f,v]=useInView.useInView({initialInView:!u,triggerOnce:!0,skip:!o,onChange:(e,t)=>{t&&t instanceof HTMLElement&&"edit"===g&&(e?p(t):w(t))}}),C=React.useMemo(()=>!v&&"edit"==g&&"POST_PURCHASE"!==m,[v,g,m]),P=React.useMemo(()=>"edit"!==g&&u&&!v,[v,u,g]),S=()=>{let e=s&&y&&"edit"===g;if(!e)return{};let t=core.getResponsiveValue(c,"display"),r=t[d];return{width:"fit"===r?"fit-content":"400px"}},T=system.createClass({...S,"gp-content-visibility-hidden":P}),V=()=>({desktop:l,tablet:l,mobile:l});return{ref:f,isRowEmpty:y,bgVideo:h,rowClassEditorOnly:T,isRenderPlaceholderViewBox:C,builderAttrs:n,children:i,isPostPurchase:"POST_PURCHASE"===m,postPurchaseVerticalAlign:V}};exports.useRowSettings=useRowSettings;
@@ -1 +1 @@
1
- "use strict";var core=require("@gem-sdk/core"),Link=require("./link/components/Link.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),o=t?255&i:void 0;return 0===o||!!o},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:o,isCapitalize:n,defaultVal:l="",translate:s,isReplaceLocationOrigin:a,isReplaceMaxSize:p,isReplaceInventoryQuantity:c})=>{let g=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),u=o?.isTranslateWithLocale?1e3:5e3;if(!s||!e?.toString().trim()||e.toString().length>u||g||o?.isPreviewing)return e??l;let h=`g${t}_${r}`,f=`section.settings.${h}`;return(o?.isTranslateWithLocale&&(f=`'sections.${o.sectionName}.${h}_html' | t`),a&&(f+=" | replace: '$locationOrigin', locationOrigin"),p&&(f+=" | replace: '$max_size', '10MB'"),c&&(f+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),n&&(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}const getInsertLinkData=(e,t,r)=>{let i=["#","mailto:","tel:"],o=["product.url"],n=t?.link!==void 0&&""!==t.link,l=t?.link??"",s="/"===l,a=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),p=n&&a.test(l);(isShopifyDomain(n,l)||s)&&(l=t?.isTranslate?"$locationOrigin"+l:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+l),p&&(l=getHttpUrl(l)),n&&l.toLowerCase().startsWith("mailto:")&&l.includes("+")&&(l=normalizeMailto(l));let c=()=>!!(i.find(e=>l.startsWith(e))||o.find(e=>l.includes(e))),g=p||isShopifyDomain(n,l)||c()||s||isLinkedToSalesPage(t?.type),u=g?"a":e,h={href:l,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},f=g?h:n?{...h,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:o=!1})=>{let n=["product.url"],l=["#","mailto:","tel:"],s=e?.link??"",a="/"===s,p=e?.link!==void 0&&""!==e.link,c=new RegExp(/^https?:\/\//i),g=p&&c.test(s);p&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let u=()=>!!(n.find(e=>s.includes(e))||l.find(e=>s.startsWith(e))),h=o&&(g||isShopifyDomain(p,s)||u()||a||isLinkedToSalesPage(e?.type)),f=s;i&&(isShopifyDomain(p,s)||a)&&(f=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let k=h?i?"a":Link.default:r,m={href:f,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},y=h?m:p?{...m,type:t}:{type:t};return{Wrapper:k,urlData:y,shouldRenderLink:h}},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,o=e.toString();for(;null!==(r=i.exec(o));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});o=o.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return o}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,o=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[o]??""),o++);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})}};exports.REGEX_PAGE_TYPE=REGEX_PAGE_TYPE,exports.checkIsOpenPopup=checkIsOpenPopup,exports.checkIsScrollToTop=checkIsScrollToTop,exports.convertUnitToNumber=convertUnitToNumber,exports.filterTruthyObject=filterTruthyObject,exports.filterTruthyStyles=filterTruthyStyles,exports.getAllHrefFromString=getAllHrefFromString,exports.getDisplayStyle=getDisplayStyle,exports.getDynamicSourceLocales=getDynamicSourceLocales,exports.getInsertLinkData=getInsertLinkData,exports.getLinkArticle=getLinkArticle,exports.getLinkData=getLinkData,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");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),o=t?255&i:void 0;return 0===o||!!o},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:o,isCapitalize:l,defaultVal:n="",translate:s,isReplaceLocationOrigin:a,isReplaceMaxSize:p,isReplaceInventoryQuantity:c})=>{let g=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),u=o?.isTranslateWithLocale?1e3:5e3;if(!s||!e?.toString().trim()||e.toString().length>u||g||o?.isPreviewing)return e??n;let h=`g${t}_${r}`,f=`section.settings.${h}`;return(o?.isTranslateWithLocale&&(f=`'sections.${o.sectionName}.${h}_html' | t`),a&&(f+=" | replace: '$locationOrigin', locationOrigin"),p&&(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}const getInsertLinkData=(e,t,r)=>{let i=["#","mailto:","tel:"],o=["product.url"],l=t?.link!==void 0&&""!==t.link,n=t?.link??"",s="/"===n,a=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),p=l&&a.test(n);p&&(n=getHttpUrl(n)),l&&n.toLowerCase().startsWith("mailto:")&&n.includes("+")&&(n=normalizeMailto(n));let c=()=>!!(i.find(e=>n.startsWith(e))||o.find(e=>n.includes(e))),g=p||isShopifyDomain(l,n)||c()||s||isLinkedToSalesPage(t?.type);(isShopifyDomain(l,n)||s)&&(n=t?.isTranslate?"$locationOrigin"+n:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+n);let u=g?t?.isLiquid?"a":Link.default:e,h={href:n,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},f=g?h:l?{...h,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:o=!1})=>{let l=["product.url"],n=["#","mailto:","tel:"],s=e?.link??"",a="/"===s,p=e?.link!==void 0&&""!==e.link,c=new RegExp(/^https?:\/\//i),g=p&&c.test(s);p&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let u=()=>!!(l.find(e=>s.includes(e))||n.find(e=>s.startsWith(e))),h=o&&(g||isShopifyDomain(p,s)||u()||a||isLinkedToSalesPage(e?.type)),f=s;i&&(isShopifyDomain(p,s)||a)&&(f=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let k=h?i?"a":Link.default:r,m={href:f,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},y=h?m:p?{...m,type:t}:{type:t};return{Wrapper:k,urlData:y,shouldRenderLink:h}},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,o=e.toString();for(;null!==(r=i.exec(o));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});o=o.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return o}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,o=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[o]??""),o++);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})}};exports.REGEX_PAGE_TYPE=REGEX_PAGE_TYPE,exports.checkIsOpenPopup=checkIsOpenPopup,exports.checkIsScrollToTop=checkIsScrollToTop,exports.convertUnitToNumber=convertUnitToNumber,exports.filterTruthyObject=filterTruthyObject,exports.filterTruthyStyles=filterTruthyStyles,exports.getAllHrefFromString=getAllHrefFromString,exports.getDisplayStyle=getDisplayStyle,exports.getDynamicSourceLocales=getDynamicSourceLocales,exports.getInsertLinkData=getInsertLinkData,exports.getLinkArticle=getLinkArticle,exports.getLinkData=getLinkData,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 +1 @@
1
- "use strict";var helpers=require("../../helpers.js"),constant=require("../../constant.js");const getLink=e=>{let{iconLink:t}=e??{};return t?.type==="go-to-sales-page"&&(t={type:"go-to-sales-page",link:constant.HREF_TO_SALES_PAGE,target:"_self"}),{iconLink:t,...helpers.getInsertLinkData("div",t)}};exports.getLink=getLink;
1
+ "use strict";var helpers=require("../../helpers.js"),constant=require("../../constant.js");const getLink=(e,t)=>{let{iconLink:s}=e??{};return s?.type==="go-to-sales-page"&&(s={type:"go-to-sales-page",link:constant.HREF_TO_SALES_PAGE,target:"_self"}),{iconLink:s,...helpers.getInsertLinkData("div",{...s,isLiquid:t})}};exports.getLink=getLink;
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),helpers=require("../common/helpers.js"),attrs=require("../common/attrs.js"),classes=require("../common/classes.js"),styles=require("../common/styles.js");const Icon=({style:e,builderAttrs:s,builderProps:t,setting:r={},styles:l,advanced:a})=>{let{iconSvg:c,iconLinkEnable:y}=r,{Wrap:i,urlData:m,iconLink:o}=helpers.getLink(r),n=o?.link&&y?{href:m.href,target:m?.target,title:o?.title,rel:m?.rel}:{},d=system.createAttr({...attrs.getAttr({uid:t?.uid??"",builderAttrs:s})}),u=system.createAttr({...t?.uid&&{"data-id":t?.uid}}),p=system.createClass({"gp-leading-[0]":!0,...t?.uid&&{[t.uid]:!0},...a?.cssClass&&{[a.cssClass]:!0}}),g=system.createClass({...classes.getContainerClasses({styles:l,builderProps:t})}),$=system.createClass({...classes.getIconClasses({styles:l})}),C=system.createStyle({...styles.getWrapperStyle(e,l)}),q=system.createStyle({...styles.getContainerStyle(l)}),v=system.createStyle({...styles.getIconStyle(l)});return system.Liquid(core.template`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var core=require("@gem-sdk/core"),system=require("@gem-sdk/system"),helpers=require("../common/helpers.js"),attrs=require("../common/attrs.js"),classes=require("../common/classes.js"),styles=require("../common/styles.js");const Icon=({style:e,builderAttrs:s,builderProps:t,setting:r={},styles:l,advanced:a})=>{let{iconSvg:c,iconLinkEnable:y}=r,{Wrap:i,urlData:m,iconLink:o}=helpers.getLink(r,!0),n=o?.link&&y?{href:m.href,target:m?.target,title:o?.title,rel:m?.rel}:{},d=system.createAttr({...attrs.getAttr({uid:t?.uid??"",builderAttrs:s})}),u=system.createAttr({...t?.uid&&{"data-id":t?.uid}}),p=system.createClass({"gp-leading-[0]":!0,...t?.uid&&{[t.uid]:!0},...a?.cssClass&&{[a.cssClass]:!0}}),g=system.createClass({...classes.getContainerClasses({styles:l,builderProps:t})}),$=system.createClass({...classes.getIconClasses({styles:l})}),C=system.createStyle({...styles.getWrapperStyle(e,l)}),q=system.createStyle({...styles.getContainerStyle(l)}),v=system.createStyle({...styles.getIconStyle(l)});return system.Liquid(core.template`
2
2
  <div ${d} class="${p}" style="${C}">
3
3
  <div ${u} class="${g}" style="${q}">
4
4
  ${system.If(!!c,core.template`
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),ProductGalleryGrid=require("../child/ProductGalleryGrid.js");const GalleryGrid=e=>{let{setting:r,styles:t,gallery:i,builderProps:l,noDataChildren:d,onHandleClickImage:u,children:n}=e,a={...r,...t};return i?.[0]?.id==="noImageError"?jsxRuntime.jsx(jsxRuntime.Fragment,{children:d}):jsxRuntime.jsx(ProductGalleryGrid.default,{productImages:i,enableHoverAction:!0,...a,builderPropUID:l?.uid,onHandleClick:(e,r)=>u(e||"",r),children:n})};exports.default=GalleryGrid;
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var jsxRuntime=require("react/jsx-runtime"),ProductGalleryGrid=require("../child/ProductGalleryGrid.js");const GalleryGrid=e=>{let{setting:r,styles:t,gallery:l,builderProps:i,noDataChildren:d,onHandleClickImage:u,children:n}=e,o={...r,...t};return(console.log("setting",r),l?.[0]?.id==="noImageError")?jsxRuntime.jsx(jsxRuntime.Fragment,{children:d}):jsxRuntime.jsx(ProductGalleryGrid.default,{productImages:l,enableHoverAction:!0,...o,builderPropUID:i?.uid,onHandleClick:(e,r)=>u(e||"",r),children:n})};exports.default=GalleryGrid;
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o,Fragment as r}from"react/jsx-runtime";import{useMemo as t,Children as l,isValidElement as m,createElement as i}from"react";import s from"next/head";import a from"../ChildrenDroppable.js";import p from"../../../video/components/HTML5Embed.js";import{getYoutubeVideoId as d,youtubeVideoRegex as n}from"../../../video/common/helpers.js";import c from"../../../video/components/LiteYouTubeEmbed.js";import{createClass as f}from"@gem-sdk/system";import{useRowSettings as y}from"../../hooks/useRowSetting.js";import{getAttr as h}from"./common/attrs.js";import{getClass as u}from"./common/classes.js";import{getRowStyle as v}from"./common/styles.js";import{checkHasBackgroundVideo as g}from"./common/helpers.js";import{isEmptyChildren as j}from"@gem-sdk/core";let Row=k=>{let{styles:b,setting:C,children:w}=k,{isSection:N,as:T="div"}=C??{},{background:x}=b??{},{builderAttrs:E,cacheHeightOutViewport:H,bgVideo:R,isRowEmpty:$,rowClassEditorOnly:L,isRenderPlaceholderViewBox:z,isPostPurchase:A,ref:B,postPurchaseVerticalAlign:D}=y(k),{rowStyle:I,backgroundBoxStyle:M,embedVideoStyle:S,sectionStyle:V}=v(k,A),{rowAttr:Y}=h(k),{rowClass:q,backgroundBoxClass:F,backgroundBoxInnerClass:G,sectionClass:J,wrapperYoutubeClasses:K,iframeYoutubeClasses:O}=u(k),P=f({[q]:!0,[L]:!0}),Q=t(()=>{if(!g(x))return;if(R?.videoType==="html5"&&!R.videoHtml5||R?.videoType==="youtube"&&!R.video)return null;if(R?.videoType==="html5"&&R.videoHtml5)return e(p,{muted:!0,loop:R.loop,controls:!1,autoplay:!0,src:R.videoHtml5,title:"Video",className:"gp-relative",style:S});let o=R?.video??"",r=d(o);if(!n.test(o)||!r)return;let t=`&loop=${R?.loop?1:0}&playlist=${r}&showinfo=0&rel=0&fs=0&enablejsapi=1`;return e(c,{id:r,autoplay:!0,title:"",controls:!1,params:t,adNetwork:!1,noCookie:!0,muted:!0,lazy:!1,style:S,wrapperClass:K,iframeClass:O})},[x,R,S,O,K]),U=l.map(w,e=>!!j(e)),W=o("div",{ref:B,...E,...Y,style:I(A),className:P,children:[!!Q&&e("div",{className:F,style:M,children:e("div",{className:G,children:Q})}),z?e("div",{style:{height:`${H}px`}}):e(r,{children:$?e(a,{}):l.map(w,e=>m(e)?i(e.type,{hiddenEmptyCol:k.hiddenEmptyCol&&!j(e)&&!U,...e.props,key:e.key,order:C?.order,layout:C?.layout,justifyContent:A?D():C?.verticalAlign}):null)})]});return o(r,{children:[!!b?.preloadBgImage&&o(s,{children:[!!x?.desktop?.image?.src&&e("link",{rel:"preload",href:x.desktop.image.src,as:"image"}),!!x?.tablet?.image?.src&&e("link",{rel:"preload",href:x.tablet.image.src,as:"image"}),!!x?.mobile?.image?.src&&e("link",{rel:"preload",href:x.mobile.image.src,as:"image"})]}),N?e(T,{className:J,style:V,children:W}):W]})};export{Row as default};
1
+ import{jsx as e,jsxs as o,Fragment as r}from"react/jsx-runtime";import{useMemo as t,Children as m,isValidElement as l,createElement as i}from"react";import s from"next/head";import a from"../ChildrenDroppable.js";import p from"../../../video/components/HTML5Embed.js";import{getYoutubeVideoId as d,youtubeVideoRegex as n}from"../../../video/common/helpers.js";import c from"../../../video/components/LiteYouTubeEmbed.js";import{createClass as f}from"@gem-sdk/system";import{useRowSettings as y}from"../../hooks/useRowSetting.js";import{getAttr as u}from"./common/attrs.js";import{getClass as h}from"./common/classes.js";import{getRowStyle as v}from"./common/styles.js";import{checkHasBackgroundVideo as g}from"./common/helpers.js";import{isEmptyChildren as j}from"@gem-sdk/core";let Row=k=>{let{styles:b,setting:C,children:w}=k,{isSection:N,as:T="div"}=C??{},{background:E}=b??{},{builderAttrs:H,bgVideo:x,isRowEmpty:R,rowClassEditorOnly:L,isRenderPlaceholderViewBox:$,isPostPurchase:z,ref:A,postPurchaseVerticalAlign:B}=y(k),{rowStyle:D,backgroundBoxStyle:I,embedVideoStyle:M,sectionStyle:S}=v(k,z),{rowAttr:V}=u(k),{rowClass:Y,backgroundBoxClass:q,backgroundBoxInnerClass:F,sectionClass:G,wrapperYoutubeClasses:J,iframeYoutubeClasses:K}=h(k),O=f({[Y]:!0,[L]:!0}),P=t(()=>{if(!g(E))return;if(x?.videoType==="html5"&&!x.videoHtml5||x?.videoType==="youtube"&&!x.video)return null;if(x?.videoType==="html5"&&x.videoHtml5)return e(p,{muted:!0,loop:x.loop,controls:!1,autoplay:!0,src:x.videoHtml5,title:"Video",className:"gp-relative",style:M});let o=x?.video??"",r=d(o);if(!n.test(o)||!r)return;let t=`&loop=${x?.loop?1:0}&playlist=${r}&showinfo=0&rel=0&fs=0&enablejsapi=1`;return e(c,{id:r,autoplay:!0,title:"",controls:!1,params:t,adNetwork:!1,noCookie:!0,muted:!0,lazy:!1,style:M,wrapperClass:J,iframeClass:K})},[E,x,M,K,J]),Q=m.map(w,e=>!!j(e)),U=o("div",{ref:A,...H,...V,style:D(z),className:O,children:[!!P&&e("div",{className:q,style:I,children:e("div",{className:F,children:P})}),$?e(r,{}):R?e(a,{}):m.map(w,e=>l(e)?i(e.type,{hiddenEmptyCol:k.hiddenEmptyCol&&!j(e)&&!Q,...e.props,key:e.key,order:C?.order,layout:C?.layout,justifyContent:z?B():C?.verticalAlign}):null)]});return o(r,{children:[!!b?.preloadBgImage&&o(s,{children:[!!E?.desktop?.image?.src&&e("link",{rel:"preload",href:E.desktop.image.src,as:"image"}),!!E?.tablet?.image?.src&&e("link",{rel:"preload",href:E.tablet.image.src,as:"image"}),!!E?.mobile?.image?.src&&e("link",{rel:"preload",href:E.mobile.image.src,as:"image"})]}),N?e(T,{className:G,style:S,children:U}):U]})};export{Row as default};
@@ -1 +1 @@
1
- import{useState as t,useMemo as e}from"react";import{useCurrentDevice as i,useEditorMode as o,usePageType as n,getBgVideoByDevice as r,isEmptyChildren as s,getResponsiveValue as d}from"@gem-sdk/core";import{createClass as m}from"@gem-sdk/system";import{useInView as p}from"../../common/hooks/useInView.js";let useRowSettings=g=>{let{setting:l,styles:a,children:u,maxWidthWithEmptyChildren:c,builderAttrs:f}=g,{isSection:h,lazy:S,layout:P,blockAlignment:k}=l??{},{background:w}=a??{},C=i(),[R,y]=t(500),b=o(),O=n(),T=r(w,C),x=e(()=>s(u),[u]),[A,B]=p({initialInView:!S,triggerOnce:!0,skip:!h,onChange:(t,e)=>{if("edit"==b&&!t&&e){let t=getComputedStyle(e),i=e?.getBoundingClientRect().height;y((i-=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom))??500)}}}),E=e(()=>!B&&"edit"==b&&"POST_PURCHASE"!==O,[B,b,O]),F=e(()=>"edit"!==b&&S&&!B,[B,S,b]),H=()=>{let t=c&&x&&"edit"===b;if(!t)return{};let e=d(P,"display"),i=e[C];return{width:"fit"===i?"fit-content":"400px"}},I=m({...H,"gp-content-visibility-hidden":F}),U=()=>({desktop:k,tablet:k,mobile:k});return{ref:A,isRowEmpty:x,cacheHeightOutViewport:R,bgVideo:T,rowClassEditorOnly:I,isRenderPlaceholderViewBox:E,builderAttrs:f,children:u,isPostPurchase:"POST_PURCHASE"===O,postPurchaseVerticalAlign:U}};export{useRowSettings};
1
+ import{useRef as e,useMemo as t}from"react";import{useCurrentDevice as i,useEditorMode as r,usePageType as n,getBgVideoByDevice as o,isEmptyChildren as l,getResponsiveValue as s}from"@gem-sdk/core";import{createClass as u}from"@gem-sdk/system";import{useInView as c}from"../../common/hooks/useInView.js";let useRowSettings=m=>{let{setting:d,styles:g,children:h,maxWidthWithEmptyChildren:p,builderAttrs:f}=m,{isSection:a,lazy:w,layout:y,blockAlignment:P}=d??{},{background:S}=g??{},T=i(),k=r(),R=n(),C=o(S,T),b=e(null),v=t(()=>l(h),[h]),x=e=>{b.current&&(clearTimeout(b.current),b.current=null);let t=e?.getBoundingClientRect().height;e.style.height=`${t||500}px`,e.style.overflow="hidden"},E=e=>{b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{e.style.height="",e.style.overflow="",b.current=null},1500)},[H,O]=c({initialInView:!w,triggerOnce:!0,skip:!a,onChange:(e,t)=>{t&&t instanceof HTMLElement&&"edit"===k&&(e?E(t):x(t))}}),A=t(()=>!O&&"edit"==k&&"POST_PURCHASE"!==R,[O,k,R]),I=t(()=>"edit"!==k&&w&&!O,[O,w,k]),U=()=>{let e=p&&v&&"edit"===k;if(!e)return{};let t=s(y,"display"),i=t[T];return{width:"fit"===i?"fit-content":"400px"}},V=u({...U,"gp-content-visibility-hidden":I}),_=()=>({desktop:P,tablet:P,mobile:P});return{ref:H,isRowEmpty:v,bgVideo:C,rowClassEditorOnly:V,isRenderPlaceholderViewBox:A,builderAttrs:f,children:h,isPostPurchase:"POST_PURCHASE"===R,postPurchaseVerticalAlign:_}};export{useRowSettings};
@@ -1 +1 @@
1
- import{DEVICES as e,globalEvent as t}from"@gem-sdk/core";import r from"./link/components/Link.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),l=t?255&i:void 0;return 0===l||!!l},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:l,isCapitalize:n,defaultVal:o="",translate:a,isReplaceLocationOrigin:s,isReplaceMaxSize:p,isReplaceInventoryQuantity:c})=>{let g=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),u=l?.isTranslateWithLocale?1e3:5e3;if(!a||!e?.toString().trim()||e.toString().length>u||g||l?.isPreviewing)return e??o;let h=`g${t}_${r}`,f=`section.settings.${h}`;return(l?.isTranslateWithLocale&&(f=`'sections.${l.sectionName}.${h}_html' | t`),s&&(f+=" | replace: '$locationOrigin', locationOrigin"),p&&(f+=" | replace: '$max_size', '10MB'"),c&&(f+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),n&&(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 i=["#","mailto:","tel:"],l=["product.url"],n=t?.link!==void 0&&""!==t.link,o=t?.link??"",a="/"===o,s=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),p=n&&s.test(o);(isShopifyDomain(n,o)||a)&&(o=t?.isTranslate?"$locationOrigin"+o:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+o),p&&(o=getHttpUrl(o)),n&&o.toLowerCase().startsWith("mailto:")&&o.includes("+")&&(o=normalizeMailto(o));let c=()=>!!(i.find(e=>o.startsWith(e))||l.find(e=>o.includes(e))),g=p||isShopifyDomain(n,o)||c()||a||isLinkedToSalesPage(t?.type),u=g?"a":e,h={href:o,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},f=g?h:n?{...h,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:i,isLiquid:l=!1,enableImageLink:n=!1})=>{let o=["product.url"],a=["#","mailto:","tel:"],s=e?.link??"",p="/"===s,c=e?.link!==void 0&&""!==e.link,g=new RegExp(/^https?:\/\//i),u=c&&g.test(s);c&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let h=()=>!!(o.find(e=>s.includes(e))||a.find(e=>s.startsWith(e))),f=n&&(u||isShopifyDomain(c,s)||h()||p||isLinkedToSalesPage(e?.type)),m=s;l&&(isShopifyDomain(c,s)||p)&&(m=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let k=f?l?"a":r:i,y={href:m,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},d=f?y:c?{...y,type:t}:{type:t};return{Wrapper:k,urlData:d,shouldRenderLink:f}},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,l=e.toString();for(;null!==(r=i.exec(l));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});l=l.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return l}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,l=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[l]??""),l++);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})}};export{REGEX_PAGE_TYPE,checkIsOpenPopup,checkIsScrollToTop,convertUnitToNumber,filterTruthyObject,filterTruthyStyles,getAllHrefFromString,getDisplayStyle,getDynamicSourceLocales,getInsertLinkData,getLinkArticle,getLinkData,getSettingPreloadData,getStaticLocale,handleClickLink,isEmptyObject,isHexTransparent,isLinkedToSalesPage,isShopifyDomain,isTransparentColor,isTransparentRGBA,normalizeMailto,replaceAllHrefFromString,replaceLinkData,youtubeShortsRegex};
1
+ import{DEVICES as e,globalEvent as t}from"@gem-sdk/core";import r from"./link/components/Link.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),l=t?255&i:void 0;return 0===l||!!l},youtubeShortsRegex=/^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i,getDynamicSourceLocales=({val:e,uid:t,settingId:r,isLiquid:i,pageContext:l,isCapitalize:n,defaultVal:o="",translate:a,isReplaceLocationOrigin:s,isReplaceMaxSize:p,isReplaceInventoryQuantity:c})=>{let g=new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(e?.toString()??""),u=l?.isTranslateWithLocale?1e3:5e3;if(!a||!e?.toString().trim()||e.toString().length>u||g||l?.isPreviewing)return e??o;let h=`g${t}_${r}`,f=`section.settings.${h}`;return(l?.isTranslateWithLocale&&(f=`'sections.${l.sectionName}.${h}_html' | t`),s&&(f+=" | replace: '$locationOrigin', locationOrigin"),p&&(f+=" | replace: '$max_size', '10MB'"),c&&(f+=" | replace: '<$quantity$>', inventory_quantity | replace: '&lt;$quantity$&gt;', inventory_quantity"),n&&(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,i)=>{let l=["#","mailto:","tel:"],n=["product.url"],o=t?.link!==void 0&&""!==t.link,a=t?.link??"",s="/"===a,p=new RegExp(/^(?:https?:\/\/)?[\w.-]+\.[a-z]{2,}/i),c=o&&p.test(a);c&&(a=getHttpUrl(a)),o&&a.toLowerCase().startsWith("mailto:")&&a.includes("+")&&(a=normalizeMailto(a));let g=()=>!!(l.find(e=>a.startsWith(e))||n.find(e=>a.includes(e))),u=c||isShopifyDomain(o,a)||g()||s||isLinkedToSalesPage(t?.type);(isShopifyDomain(o,a)||s)&&(a=t?.isTranslate?"$locationOrigin"+a:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+a);let h=u?t?.isLiquid?"a":r:e,f={href:a,target:t?.target,...t?.noFollow&&{rel:"nofollow"}},m=u?f:o?{...f,type:i}:{type:i};return{Wrap:h,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:i,isLiquid:l=!1,enableImageLink:n=!1})=>{let o=["product.url"],a=["#","mailto:","tel:"],s=e?.link??"",p="/"===s,c=e?.link!==void 0&&""!==e.link,g=new RegExp(/^https?:\/\//i),u=c&&g.test(s);c&&s.toLowerCase().startsWith("mailto:")&&s.includes("+")&&(s=normalizeMailto(s));let h=()=>!!(o.find(e=>s.includes(e))||a.find(e=>s.startsWith(e))),f=n&&(u||isShopifyDomain(c,s)||h()||p||isLinkedToSalesPage(e?.type)),m=s;l&&(isShopifyDomain(c,s)||p)&&(m=e?.isTranslate?"$locationOrigin"+s:"{{ request.origin }}{{ routes.root_url | split: '/' | join: '/' }}"+s);let k=f?l?"a":r:i,y={href:m,target:e?.target,...e?.noFollow&&{rel:"nofollow"}},d=f?y:c?{...y,type:t}:{type:t};return{Wrapper:k,urlData:d,shouldRenderLink:f}},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,l=e.toString();for(;null!==(r=i.exec(l));){let e=r[1],{urlData:i}=getInsertLinkData("",{link:e,isTranslate:t});l=l.replace(r[0],r[0].replace(/(href=['"])([^'"]*)(['"])/i,`$1${i.href}$3`))}return l}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,l=0;for(;null!==(r=i.exec(e));)r[1]&&(e=e.replace(r[1],t[l]??""),l++);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})}};export{REGEX_PAGE_TYPE,checkIsOpenPopup,checkIsScrollToTop,convertUnitToNumber,filterTruthyObject,filterTruthyStyles,getAllHrefFromString,getDisplayStyle,getDynamicSourceLocales,getInsertLinkData,getLinkArticle,getLinkData,getSettingPreloadData,getStaticLocale,handleClickLink,isEmptyObject,isHexTransparent,isLinkedToSalesPage,isShopifyDomain,isTransparentColor,isTransparentRGBA,normalizeMailto,replaceAllHrefFromString,replaceLinkData,youtubeShortsRegex};
@@ -1 +1 @@
1
- import{getInsertLinkData as e}from"../../helpers.js";import{HREF_TO_SALES_PAGE as t}from"../../constant.js";let getLink=o=>{let{iconLink:r}=o??{};return r?.type==="go-to-sales-page"&&(r={type:"go-to-sales-page",link:t,target:"_self"}),{iconLink:r,...e("div",r)}};export{getLink};
1
+ import{getInsertLinkData as e}from"../../helpers.js";import{HREF_TO_SALES_PAGE as t}from"../../constant.js";let getLink=(o,r)=>{let{iconLink:s}=o??{};return s?.type==="go-to-sales-page"&&(s={type:"go-to-sales-page",link:t,target:"_self"}),{iconLink:s,...e("div",{...s,isLiquid:r})}};export{getLink};
@@ -1,4 +1,4 @@
1
- import{template as s}from"@gem-sdk/core";import{createAttr as t,createClass as e,createStyle as r,Liquid as o,If as m}from"@gem-sdk/system";import{getLink as i}from"../common/helpers.js";import{getAttr as l}from"../common/attrs.js";import{getContainerClasses as a,getIconClasses as d}from"../common/classes.js";import{getWrapperStyle as c,getContainerStyle as $,getIconStyle as p}from"../common/styles.js";let Icon=({style:n,builderAttrs:f,builderProps:u,setting:g={},styles:y,advanced:j})=>{let{iconSvg:v,iconLinkEnable:h}=g,{Wrap:k,urlData:C,iconLink:I}=i(g),x=I?.link&&h?{href:C.href,target:C?.target,title:I?.title,rel:C?.rel}:{},W=t({...l({uid:u?.uid??"",builderAttrs:f})}),b=t({...u?.uid&&{"data-id":u?.uid}}),q=e({"gp-leading-[0]":!0,...u?.uid&&{[u.uid]:!0},...j?.cssClass&&{[j.cssClass]:!0}}),w=e({...a({styles:y,builderProps:u})}),z=e({...d({styles:y})}),A=r({...c(n,y)}),B=r({...$(y)}),D=r({...p(y)});return o(s`
1
+ import{template as s}from"@gem-sdk/core";import{createAttr as t,createClass as e,createStyle as r,Liquid as o,If as m}from"@gem-sdk/system";import{getLink as i}from"../common/helpers.js";import{getAttr as l}from"../common/attrs.js";import{getContainerClasses as a,getIconClasses as d}from"../common/classes.js";import{getWrapperStyle as c,getContainerStyle as $,getIconStyle as p}from"../common/styles.js";let Icon=({style:n,builderAttrs:f,builderProps:u,setting:g={},styles:y,advanced:j})=>{let{iconSvg:v,iconLinkEnable:h}=g,{Wrap:k,urlData:C,iconLink:I}=i(g,!0),x=I?.link&&h?{href:C.href,target:C?.target,title:I?.title,rel:C?.rel}:{},W=t({...l({uid:u?.uid??"",builderAttrs:f})}),b=t({...u?.uid&&{"data-id":u?.uid}}),q=e({"gp-leading-[0]":!0,...u?.uid&&{[u.uid]:!0},...j?.cssClass&&{[j.cssClass]:!0}}),w=e({...a({styles:y,builderProps:u})}),z=e({...d({styles:y})}),A=r({...c(n,y)}),B=r({...$(y)}),D=r({...p(y)});return o(s`
2
2
  <div ${W} class="${q}" style="${A}">
3
3
  <div ${b} class="${w}" style="${B}">
4
4
  ${m(!!v,s`
@@ -1,2 +1,2 @@
1
1
  'use client';
2
- import{jsx as r,Fragment as e}from"react/jsx-runtime";import l from"../child/ProductGalleryGrid.js";let GalleryGrid=i=>{let{setting:d,styles:o,gallery:t,builderProps:a,noDataChildren:n,onHandleClickImage:c,children:m}=i,u={...d,...o};return t?.[0]?.id==="noImageError"?r(e,{children:n}):r(l,{productImages:t,enableHoverAction:!0,...u,builderPropUID:a?.uid,onHandleClick:(r,e)=>c(r||"",e),children:m})};export{GalleryGrid as default};
2
+ import{jsx as r,Fragment as e}from"react/jsx-runtime";import l from"../child/ProductGalleryGrid.js";let GalleryGrid=o=>{let{setting:i,styles:t,gallery:d,builderProps:n,noDataChildren:a,onHandleClickImage:c,children:m}=o,u={...i,...t};return(console.log("setting",i),d?.[0]?.id==="noImageError")?r(e,{children:a}):r(l,{productImages:d,enableHoverAction:!0,...u,builderPropUID:n?.uid,onHandleClick:(r,e)=>c(r||"",e),children:m})};export{GalleryGrid as default};
@@ -7399,8 +7399,9 @@ declare const getInsertLinkData: (defaultWrap: string, setting?: {
7399
7399
  isTranslate?: boolean;
7400
7400
  type?: string;
7401
7401
  noFollow?: boolean;
7402
+ isLiquid?: boolean;
7402
7403
  }, htmlType?: React.ButtonHTMLAttributes<HTMLButtonElement>['type'] | 'link') => {
7403
- Wrap: string;
7404
+ Wrap: string | React.FC<LinkProps>;
7404
7405
  urlData: Record<string, any>;
7405
7406
  shouldRenderLink: boolean;
7406
7407
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/components",
3
- "version": "4.0.11",
3
+ "version": "4.0.13",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",