@gem-sdk/components 2.1.25 → 2.1.27-staging.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/accordion/components/Accordion.js +1 -2
  2. package/dist/cjs/accordion/components/Accordion.liquid.js +1 -2
  3. package/dist/cjs/article/components/ArticleImage.js +2 -1
  4. package/dist/cjs/banner/components/hero-banner/index.liquid.js +4 -7
  5. package/dist/cjs/carousel/components/Carousel.liquid.js +3 -2
  6. package/dist/cjs/common/const.js +1 -1
  7. package/dist/cjs/helpers.js +4 -1
  8. package/dist/cjs/image/components/AdaptiveImage.liquid.js +6 -5
  9. package/dist/cjs/image/components/Image.js +22 -2
  10. package/dist/cjs/image/components/Image.liquid.js +6 -4
  11. package/dist/cjs/image/components/NextImage.liquid.js +4 -3
  12. package/dist/cjs/image/components/NoDataImage.js +133 -0
  13. package/dist/cjs/image-comparison/components/CompareImage.liquid.js +7 -3
  14. package/dist/cjs/index.js +4 -0
  15. package/dist/cjs/post-purchase/product/components/ProductOffer.js +5 -1
  16. package/dist/cjs/product/components/Product.liquid.js +3 -2
  17. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductFeaturedImageCarousel.liquid.js +6 -5
  18. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductGalleryCarousel.liquid.js +2 -2
  19. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductGalleryGrid.liquid.js +4 -4
  20. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductImages.liquid.js +4 -4
  21. package/dist/cjs/product/components/ProductVariants/index.liquid.js +11 -18
  22. package/dist/cjs/product/components/ProductVariants/variants/Base.liquid.js +1 -0
  23. package/dist/cjs/product/components/ProductVariants/variants/Dropdown.liquid.js +26 -12
  24. package/dist/cjs/product/components/ProductVariants/variants/DropdownGroup.liquid.js +4 -37
  25. package/dist/cjs/product/components/ProductVariants/variants/combine/index.js +47 -0
  26. package/dist/cjs/product/setting/constant/bundle-layout/horizontalThree.js +1 -0
  27. package/dist/cjs/product/setting/constant/bundle-layout/horizontalTwo.js +1 -0
  28. package/dist/cjs/product/setting/constant/bundle-layout/verticalThree.js +1 -0
  29. package/dist/cjs/product/setting/constant/bundle-layout/verticalTwo.js +1 -0
  30. package/dist/cjs/stock-counter/components/StockCounter.liquid.js +12 -9
  31. package/dist/cjs/stock-counter/helpers.js +4 -1
  32. package/dist/cjs/tab/hooks/useTabInteraction.js +13 -9
  33. package/dist/cjs/text/components/Text.js +0 -1
  34. package/dist/cjs/video/components/HTML5Embed.js +2 -2
  35. package/dist/cjs/video/components/HTML5Embed.liquid.js +6 -3
  36. package/dist/cjs/video/components/LiteYouTubeEmbed.liquid.js +5 -3
  37. package/dist/esm/accordion/components/Accordion.js +1 -2
  38. package/dist/esm/accordion/components/Accordion.liquid.js +1 -2
  39. package/dist/esm/article/components/ArticleImage.js +2 -1
  40. package/dist/esm/banner/components/hero-banner/index.liquid.js +4 -7
  41. package/dist/esm/carousel/components/Carousel.liquid.js +3 -2
  42. package/dist/esm/common/const.js +1 -1
  43. package/dist/esm/helpers.js +4 -1
  44. package/dist/esm/image/components/AdaptiveImage.liquid.js +6 -5
  45. package/dist/esm/image/components/Image.js +23 -3
  46. package/dist/esm/image/components/Image.liquid.js +6 -4
  47. package/dist/esm/image/components/NextImage.liquid.js +4 -3
  48. package/dist/esm/image/components/NoDataImage.js +129 -0
  49. package/dist/esm/image-comparison/components/CompareImage.liquid.js +7 -3
  50. package/dist/esm/index.js +1 -0
  51. package/dist/esm/post-purchase/product/components/ProductOffer.js +5 -1
  52. package/dist/esm/product/components/Product.liquid.js +3 -2
  53. package/dist/esm/product/components/ProductImagesV2/liquid/ProductFeaturedImageCarousel.liquid.js +6 -5
  54. package/dist/esm/product/components/ProductImagesV2/liquid/ProductGalleryCarousel.liquid.js +2 -2
  55. package/dist/esm/product/components/ProductImagesV2/liquid/ProductGalleryGrid.liquid.js +4 -4
  56. package/dist/esm/product/components/ProductImagesV2/liquid/ProductImages.liquid.js +4 -4
  57. package/dist/esm/product/components/ProductVariants/index.liquid.js +12 -19
  58. package/dist/esm/product/components/ProductVariants/variants/Base.liquid.js +1 -0
  59. package/dist/esm/product/components/ProductVariants/variants/Dropdown.liquid.js +26 -12
  60. package/dist/esm/product/components/ProductVariants/variants/DropdownGroup.liquid.js +4 -37
  61. package/dist/esm/product/components/ProductVariants/variants/combine/index.js +44 -0
  62. package/dist/esm/product/setting/constant/bundle-layout/horizontalThree.js +1 -0
  63. package/dist/esm/product/setting/constant/bundle-layout/horizontalTwo.js +1 -0
  64. package/dist/esm/product/setting/constant/bundle-layout/verticalThree.js +1 -0
  65. package/dist/esm/product/setting/constant/bundle-layout/verticalTwo.js +1 -0
  66. package/dist/esm/stock-counter/components/StockCounter.liquid.js +14 -11
  67. package/dist/esm/stock-counter/helpers.js +4 -1
  68. package/dist/esm/tab/hooks/useTabInteraction.js +14 -10
  69. package/dist/esm/text/components/Text.js +0 -1
  70. package/dist/esm/video/components/HTML5Embed.js +2 -2
  71. package/dist/esm/video/components/HTML5Embed.liquid.js +6 -3
  72. package/dist/esm/video/components/LiteYouTubeEmbed.liquid.js +5 -3
  73. package/dist/types/index.d.ts +30 -8
  74. package/package.json +3 -3
@@ -164,8 +164,7 @@ const Accordion = ({ builderProps, builderAttrs, style, children, setting, style
164
164
  ...filterStyles,
165
165
  ...contentSizePaddingSize.gap,
166
166
  ...core.getStyleBackgroundByDevice(style?.backgroundContent),
167
- borderRadius: 'inherit',
168
- overflow: 'hidden'
167
+ borderRadius: 'inherit'
169
168
  },
170
169
  children: React.Children.map(children, (child, index)=>{
171
170
  if (/*#__PURE__*/ React.isValidElement(child)) {
@@ -33,8 +33,7 @@ const Accordion = ({ rawChildren, setting, styles, builderProps, pageContext, ad
33
33
  style="${{
34
34
  ...contentSizePaddingSize.gap,
35
35
  ...core.getStyleBackgroundByDevice(backgroundContent),
36
- 'border-radius': 'inherit',
37
- overflow: 'hidden'
36
+ 'border-radius': 'inherit'
38
37
  }}"
39
38
  gp-data='${JSON.stringify({
40
39
  setting: {
@@ -29,7 +29,8 @@ const ArticleImage = ({ className, setting = {}, styles = {}, advanced, builderP
29
29
  setting: {
30
30
  ...setting,
31
31
  alt: image.alt,
32
- image
32
+ image,
33
+ disableNoDataState: true
33
34
  },
34
35
  styles: styles,
35
36
  advanced: advanced
@@ -14,7 +14,7 @@ var NextImage_liquid = require('../../../image/components/NextImage.liquid.js');
14
14
  var getSrcSet = require('../../../image/helpers/getSrcSet.js');
15
15
  var helpers$1 = require('../../../image/components/helpers.js');
16
16
 
17
- const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, children, rawChildren, advanced, enableLazyloadImage = true })=>{
17
+ const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, children, rawChildren, advanced, enableLazyLoadImage = true })=>{
18
18
  const { link, layout, verticalAlign, order, alignBanner, alt, title } = setting ?? {};
19
19
  const { background, overlayEnable, overlayColor, overlayOpacity, verticalGutter, contentWidth, hoverEffect, hoverEffectDuration, hoverEffectScale, cornerBg, borderBg, hasActiveShadow, shadowBg, sizeSetting, contentPadding } = styles ?? {};
20
20
  const enableParallax = setting?.enableParallax || false;
@@ -43,9 +43,6 @@ const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, childr
43
43
  } else if (data.videoType === 'html5') {
44
44
  delete data.video;
45
45
  }
46
- if (data.type !== 'image') {
47
- delete data.image;
48
- }
49
46
  }
50
47
  return background;
51
48
  };
@@ -134,7 +131,7 @@ const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, childr
134
131
  tablet: helpers$1.createBlurDataURL(srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.tablet?.height ?? srcSet?.desktop?.width ?? 0),
135
132
  mobile: helpers$1.createBlurDataURL(srcSet?.mobile?.width ?? srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.mobile?.height ?? srcSet?.tablet?.height ?? srcSet?.desktop?.width ?? 0)
136
133
  };
137
- const enableLazyLoad = !setting?.preload && enableLazyloadImage;
134
+ const enableLazyLoad = !setting?.preload && enableLazyLoadImage;
138
135
  const renderInnerHeroBanner = ()=>{
139
136
  return core.template /* liquid */ `
140
137
  <div
@@ -184,7 +181,7 @@ const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, childr
184
181
  alt,
185
182
  title,
186
183
  imagePlaceholder,
187
- enableLazyloadImage
184
+ enableLazyLoadImage
188
185
  })}
189
186
  <div class="${core.cls('gp-absolute gp-w-full gp-h-full')}">
190
187
  <div
@@ -227,7 +224,7 @@ const HeroBanner = ({ builderAttrs, builderProps, setting, styles, style, childr
227
224
  alt: `lazy image ${device}`,
228
225
  className: `gp-absolute gp-top-0 gp-invisible gp-w-full gp_lazyload gp-h-full gp_lazyforbg ${device === 'tablet' ? 'gp_lazybg_tl' : ''} ${device === 'mobile' ? 'gp_lazybg_mb' : ''}`,
229
226
  isDisableAspectStyle: true,
230
- enableLazyloadImage
227
+ enableLazyLoadImage
231
228
  }));
232
229
  }).join('') : ''}
233
230
  </div></div>
@@ -13,7 +13,7 @@ const DEVICES = [
13
13
  'tablet',
14
14
  'desktop'
15
15
  ];
16
- const Carousel = ({ builderAttrs, builderProps, style, styles, moveToIdx, rootId, rootAttr, rootClass, wrapperClass, rootStyles, children, rawChildren, isHiddenArrowWhenDisabled = true, advanced, disableMarginAuto, conditionAppendJs, ...props })=>{
16
+ const Carousel = ({ builderAttrs, builderProps, style, styles, moveToIdx, rootId, rootAttr, rootClass, wrapperClass, rootStyles, children, rawChildren, isHiddenArrowWhenDisabled = true, advanced, disableMarginAuto, conditionAppendJs, ftShapeProductImage, ...props })=>{
17
17
  const setting = arrow.mappingNavigationCarousel(props.setting);
18
18
  const styleHeight = core.makeStyleResponsive('h', core.getHeightByShapeGlobalSize(styles?.sizeSetting));
19
19
  const styleWidth = core.makeStyleWithDefault('w', core.getWidthByShapeGlobalSize(styles?.sizeSetting, true), {
@@ -112,7 +112,8 @@ const Carousel = ({ builderAttrs, builderProps, style, styles, moveToIdx, rootId
112
112
  setting,
113
113
  styles,
114
114
  moveToIdx,
115
- isHiddenArrowWhenDisabled
115
+ isHiddenArrowWhenDisabled,
116
+ ftShapeProductImage
116
117
  }).replaceAll("'", '&#039;')}' style="${{
117
118
  ...core.makeStyleResponsive('jc', styles?.align),
118
119
  ...rootStyles
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const ELEMENT_Z_INDEX = {
4
- STICKY: 100000,
4
+ STICKY: 1000,
5
5
  DIALOG: 100001,
6
6
  CART_DRAWER: 100002,
7
7
  CART_DRAWER_CONFIRM_MODAL: 100003
@@ -34,7 +34,7 @@ const isHexTransparent = (hex)=>{
34
34
  return Boolean(a);
35
35
  };
36
36
  const youtubeShortsRegex = /^(?:https?:\/\/)?(?:www\.)?youtube\.com\/shorts\/([^"&?/\s]{11})$/i;
37
- const getDynamicSourceLocales = ({ val, uid, settingId, isLiquid, pageContext, isCapitalize, defaultVal = '', translate, isReplaceLocationOrigin })=>{
37
+ const getDynamicSourceLocales = ({ val, uid, settingId, isLiquid, pageContext, isCapitalize, defaultVal = '', translate, isReplaceLocationOrigin, isReplaceInventoryQuantity })=>{
38
38
  const hasLiquidInValue = new RegExp(/\{\{.*?\}\}|\{%.*?%\}/).test(val?.toString() ?? '');
39
39
  const translateLimit = pageContext?.isTranslateWithLocale ? 1000 : 5000;
40
40
  if (!translate || !val?.toString().trim() || val.toString().length > translateLimit || hasLiquidInValue || pageContext?.isPreviewing) return val ?? defaultVal;
@@ -46,6 +46,9 @@ const getDynamicSourceLocales = ({ val, uid, settingId, isLiquid, pageContext, i
46
46
  if (isReplaceLocationOrigin) {
47
47
  locale += ` | replace: '$locationOrigin', locationOrigin`;
48
48
  }
49
+ if (isReplaceInventoryQuantity) {
50
+ locale += ` | replace: '$quantity$', inventory_quantity`;
51
+ }
49
52
  if (isCapitalize) {
50
53
  locale = `${locale} | downcase`;
51
54
  }
@@ -6,7 +6,7 @@ var core = require('@gem-sdk/core');
6
6
  var getSrcSet = require('../helpers/getSrcSet.js');
7
7
  var helpers = require('./helpers.js');
8
8
 
9
- const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className, pictureClass, style, imagePlaceholder, enableLazyloadImage = true, ...props })=>{
9
+ const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className, pictureClass, style, imagePlaceholder, enableLazyLoadImage = true, pageContext, ...props })=>{
10
10
  const fallBackImage = 'https://cdn.shopify.com/s/assets/no-image-2048-5e88c1b20e087fb7bbe9a3771824e743c244f437e4f8ba93bbf7b11b53f7824c_large.gif';
11
11
  const srcDesktop = getSrcSet.getImageSrc(srcSet?.desktop, 'desktop') || fallBackImage;
12
12
  const srcTablet = (getSrcSet.getImageSrc(srcSet?.tablet, 'tablet') ?? getSrcSet.getImageSrc(srcSet?.desktop, 'tablet')) || fallBackImage;
@@ -31,16 +31,17 @@ const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className,
31
31
  }}"
32
32
  />
33
33
  `, core.template`
34
- ${srcMobile ? `<source media="(max-width: 767px)" data-srcSet="${srcMobile}" srcset="${enableLazyloadImage ? imagePlaceholder?.['mobile'] ?? helpers.createBlurDataURL(srcSet?.mobile?.width ?? srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.mobile?.height ?? srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcMobile}" />` : ''}
35
- ${srcTablet ? `<source media="(max-width: 1024px)" data-srcSet="${srcTablet}" srcset="${enableLazyloadImage ? imagePlaceholder?.['tablet'] ?? helpers.createBlurDataURL(srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcTablet}" />` : ''}
34
+ ${srcMobile ? `<source media="(max-width: 767px)" data-srcSet="${srcMobile}" srcset="${enableLazyLoadImage ? imagePlaceholder?.['mobile'] ?? helpers.createBlurDataURL(srcSet?.mobile?.width ?? srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.mobile?.height ?? srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcMobile}" />` : ''}
35
+ ${srcTablet ? `<source media="(max-width: 1024px)" data-srcSet="${srcTablet}" srcset="${enableLazyLoadImage ? imagePlaceholder?.['tablet'] ?? helpers.createBlurDataURL(srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcTablet}" />` : ''}
36
36
  <img
37
37
  ${{
38
38
  ...props
39
39
  }}
40
40
  class="${core.cls(className, {
41
- gp_lazyload: enableLazyloadImage
41
+ gp_lazyload: enableLazyLoadImage,
42
+ gp_force_load: pageContext?.isOptimizePlan
42
43
  })}"
43
- src="${enableLazyloadImage ? imagePlaceholder?.['desktop'] ?? helpers.createBlurDataURL(srcSet?.desktop?.width ?? 0, srcSet?.desktop?.height ?? 0) : srcDesktop}"
44
+ src="${enableLazyLoadImage ? imagePlaceholder?.['desktop'] ?? helpers.createBlurDataURL(srcSet?.desktop?.width ?? 0, srcSet?.desktop?.height ?? 0) : srcDesktop}"
44
45
  data-src="${srcDesktop}"
45
46
  width="100%"
46
47
  alt="${alt}"
@@ -8,10 +8,13 @@ var Link = require('../../link/components/Link.js');
8
8
  var AdaptiveImage = require('./AdaptiveImage.js');
9
9
  var NextImage = require('./NextImage.js');
10
10
  var helpers = require('./helpers.js');
11
+ var NoDataImage = require('./NoDataImage.js');
12
+ var React = require('react');
11
13
 
12
14
  const Image = ({ styles, className, setting, builderAttrs, builderProps, style, children, onClick, onLoad })=>{
13
15
  const { image, imageLink, srcSet, isNotLazyload } = setting ?? {};
14
16
  const { customAspectRadio } = styles ?? {};
17
+ const currentDevice = core.useCurrentDevice();
15
18
  const { shape } = styles ?? {};
16
19
  const WrapLink = imageLink?.link ? Link.default : 'div';
17
20
  const opacity = {
@@ -56,6 +59,18 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
56
59
  custom: customAspectRadio
57
60
  })
58
61
  };
62
+ const isShowNoDataState = React.useMemo(()=>{
63
+ if (setting?.disableNoDataState) return false;
64
+ if (currentDevice === 'mobile') return !setting?.srcSet?.mobile?.src && !setting?.srcSet?.tablet?.src && !setting?.srcSet?.desktop?.src;
65
+ if (currentDevice === 'tablet') return !setting?.srcSet?.tablet?.src && !setting?.srcSet?.desktop?.src;
66
+ return !setting?.srcSet?.desktop?.src;
67
+ }, [
68
+ currentDevice,
69
+ setting?.disableNoDataState,
70
+ setting?.srcSet?.desktop?.src,
71
+ setting?.srcSet?.mobile?.src,
72
+ setting?.srcSet?.tablet?.src
73
+ ]);
59
74
  return /*#__PURE__*/ jsxRuntime.jsxs("div", {
60
75
  ...builderAttrs,
61
76
  "data-id": builderProps?.uid,
@@ -83,10 +98,15 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
83
98
  ...core.makeStyleResponsive('jc', styles?.align)
84
99
  },
85
100
  children: [
86
- setting?.isAdaptive ? /*#__PURE__*/ jsxRuntime.jsx(AdaptiveImage.default, {
101
+ isShowNoDataState ? /*#__PURE__*/ jsxRuntime.jsx(NoDataImage.default, {
102
+ style: {
103
+ ...imageWidth,
104
+ ...imageHeight
105
+ }
106
+ }) : setting?.isAdaptive ? /*#__PURE__*/ jsxRuntime.jsx(AdaptiveImage.default, {
87
107
  srcSet: setting.srcSet,
88
108
  pictureClass: "gp-contents",
89
- className: core.cls(className, 'gp-w-full gp-max-w-full', core.handleConvertClassColor(styles?.borderImg)),
109
+ className: core.cls(className, 'gp-inline-block gp-w-full gp-max-w-full', core.handleConvertClassColor(styles?.borderImg)),
90
110
  alt: setting.alt,
91
111
  style: {
92
112
  ...imageWidth,
@@ -7,7 +7,7 @@ var AdaptiveImage_liquid = require('./AdaptiveImage.liquid.js');
7
7
  var NextImage_liquid = require('./NextImage.liquid.js');
8
8
  var helpers = require('../../helpers.js');
9
9
 
10
- const Image = ({ styles, className, setting, builderAttrs, builderProps, style, advanced, enableLazyloadImage = true })=>{
10
+ const Image = ({ styles, className, setting, builderAttrs, builderProps, style, advanced, enableLazyLoadImage = true, pageContext })=>{
11
11
  const { imageLink, isNotLazyload } = setting ?? {};
12
12
  const { shape } = styles ?? {};
13
13
  const { Wrap: WrapLink, urlData } = helpers.getInsertLinkData('div', imageLink);
@@ -34,7 +34,7 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
34
34
  }}
35
35
  data-id="${builderProps?.uid}"
36
36
  role="presentation"
37
- class="${core.cls('gp-group/image', builderProps?.uid, advanced?.cssClass)}"
37
+ class="${core.cls('gp-group/image', builderProps?.uid, advanced?.cssClass, `force-publish-${new Date().getTime()}`)}"
38
38
  style="${{
39
39
  ...style,
40
40
  ...core.makeStyleResponsive('ta', styles?.align)
@@ -76,7 +76,8 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
76
76
  aspectRatio: core.getAspectRatioGlobalSize(styles?.shape),
77
77
  layout: styles?.objectFit,
78
78
  priority: setting?.priority,
79
- enableLazyloadImage
79
+ enableLazyLoadImage,
80
+ pageContext
80
81
  }) : NextImage_liquid.default({
81
82
  ...setting?.image,
82
83
  priority: setting?.priority,
@@ -105,7 +106,8 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
105
106
  layout: styles?.objectFit
106
107
  },
107
108
  isNotLazyload,
108
- enableLazyloadImage
109
+ enableLazyLoadImage,
110
+ pageContext
109
111
  })}
110
112
  </${WrapLink}>
111
113
  </div>`;
@@ -7,7 +7,7 @@ var getSrcSet = require('../helpers/getSrcSet.js');
7
7
  var index = require('../../product/components/ProductVariants/index.js');
8
8
  var helpers = require('./helpers.js');
9
9
 
10
- const NextImage = ({ setting, src = 'https://ucarecdn.com/465c7cbb-f087-4d1d-8f08-f6665179f02f/-/format/auto/-/quality/lighter/placeholder-1.png', srcIsLiquidCode, alt = 'Alt image', width = 2237, height = 1678, backupFileKey, backupFilePath, storage, style, priority, vw, className, base64, baseSrc, isDisableAspectStyle, isDisableObjectFit, customAttrs, customLazyload, isNotLazyload, enableLazyloadImage = true, srcset, sizes, ...props })=>{
10
+ const NextImage = ({ setting, src = 'https://ucarecdn.com/465c7cbb-f087-4d1d-8f08-f6665179f02f/-/format/auto/-/quality/lighter/placeholder-1.png', srcIsLiquidCode, alt = 'Alt image', width = 2237, height = 1678, backupFileKey, backupFilePath, storage, style, priority, vw, className, base64, baseSrc, isDisableAspectStyle, isDisableObjectFit, customAttrs, customLazyload, isNotLazyload, enableLazyLoadImage = true, pageContext, srcset, sizes, ...props })=>{
11
11
  const { aspectRatio, layout, qualityPercent, qualityType } = setting ?? {};
12
12
  const newBackupFilekey = backupFileKey ? getSrcSet.getNewBackupFileKey(backupFileKey ?? '', src) : '';
13
13
  const srcImage = srcIsLiquidCode ? baseSrc : getSrcSet.getImageSrc({
@@ -97,12 +97,13 @@ const NextImage = ({ setting, src = 'https://ucarecdn.com/465c7cbb-f087-4d1d-8f0
97
97
  ${customAttrs}
98
98
  draggable="false"
99
99
  class="${core.cls(className, {
100
- gp_lazyload: !customLazyload && enableLazyloadImage
100
+ gp_lazyload: !customLazyload && enableLazyLoadImage,
101
+ gp_force_load: pageContext?.isOptimizePlan
101
102
  })}"
102
103
  ${{
103
104
  'data-src': srcImage,
104
105
  'data-srcset': srcSetImg,
105
- src: enableLazyloadImage ? imagePlaceholder : srcImage,
106
+ src: enableLazyLoadImage ? imagePlaceholder : srcImage,
106
107
  width,
107
108
  height,
108
109
  alt,
@@ -0,0 +1,133 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var AdaptiveImage = require('./AdaptiveImage.js');
7
+
8
+ const NoDataImage = ({ style })=>{
9
+ return /*#__PURE__*/ jsxRuntime.jsxs("div", {
10
+ className: "gp-w-full gp-h-full gp-bg-[#F9F9F9] gp-flex gp-items-center gp-justify-center",
11
+ children: [
12
+ AdaptiveImage.default({
13
+ pictureClass: 'gp-w-full',
14
+ srcSet: {
15
+ desktop: {
16
+ src: 'https://cdn.shopify.com/s/assets/no-image-2048-5e88c1b20e087fb7bbe9a3771824e743c244f437e4f8ba93bbf7b11b53f7824c_large.gif'
17
+ }
18
+ },
19
+ style: {
20
+ ...style,
21
+ '--op': 0,
22
+ '--z': -1
23
+ }
24
+ }),
25
+ /*#__PURE__*/ jsxRuntime.jsx("div", {
26
+ className: "gp-absolute gp-flex gp-justify-center gp-items-center",
27
+ children: /*#__PURE__*/ jsxRuntime.jsxs("svg", {
28
+ width: "40",
29
+ height: "40",
30
+ viewBox: "0 0 40 40",
31
+ fill: "none",
32
+ xmlns: "http://www.w3.org/2000/svg",
33
+ children: [
34
+ /*#__PURE__*/ jsxRuntime.jsxs("g", {
35
+ clipPath: "url(#clip0_942_39561)",
36
+ children: [
37
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
38
+ width: "40",
39
+ height: "40",
40
+ fill: "#F9F9F9"
41
+ }),
42
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
43
+ x: "4",
44
+ width: "32",
45
+ height: "40",
46
+ rx: "2",
47
+ fill: "#E2E2E2"
48
+ }),
49
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
50
+ y: "26",
51
+ width: "40",
52
+ height: "14",
53
+ fill: "url(#paint0_linear_942_39561)"
54
+ }),
55
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
56
+ x: "8",
57
+ y: "4",
58
+ width: "24",
59
+ height: "24",
60
+ rx: "1",
61
+ fill: "#F9F9F9"
62
+ }),
63
+ /*#__PURE__*/ jsxRuntime.jsx("circle", {
64
+ cx: "15.2809",
65
+ cy: "11.3688",
66
+ r: "1.36884",
67
+ fill: "#D2D2D2"
68
+ }),
69
+ /*#__PURE__*/ jsxRuntime.jsx("path", {
70
+ d: "M13.1916 17.7343L15.3456 15.0797C15.4185 14.9896 15.5086 14.9168 15.6101 14.8659C15.7115 14.815 15.822 14.7872 15.9343 14.7844C16.0466 14.7815 16.1583 14.8036 16.2619 14.8492C16.3656 14.8949 16.459 14.963 16.536 15.0492L17.5432 16.1758L21.4803 11.2146C21.5573 11.1174 21.6542 11.0397 21.7637 10.9874C21.8732 10.9351 21.9925 10.9094 22.1127 10.9123C22.2329 10.9153 22.3509 10.9467 22.458 11.0043C22.5651 11.0619 22.6585 11.1442 22.7312 11.245L27.4383 17.7671C27.5283 17.8921 27.5834 18.0411 27.5974 18.1973C27.6114 18.3535 27.5838 18.5108 27.5176 18.6513C27.4514 18.7919 27.3493 18.9102 27.2228 18.993C27.0963 19.0758 26.9503 19.1198 26.8014 19.12L13.8002 19.1251C13.6473 19.1251 13.4975 19.0789 13.3688 18.992C13.24 18.9051 13.1375 18.7812 13.0735 18.6348C13.0095 18.4885 12.9866 18.326 13.0075 18.1664C13.0285 18.0068 13.0923 17.8569 13.1916 17.7343Z",
71
+ fill: "#D2D2D2"
72
+ }),
73
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
74
+ x: "24.3333",
75
+ y: "24.3333",
76
+ width: "15.3333",
77
+ height: "15.3333",
78
+ rx: "7.66667",
79
+ fill: "white"
80
+ }),
81
+ /*#__PURE__*/ jsxRuntime.jsx("rect", {
82
+ x: "24.3333",
83
+ y: "24.3333",
84
+ width: "15.3333",
85
+ height: "15.3333",
86
+ rx: "7.66667",
87
+ stroke: "#C4C4C4",
88
+ strokeWidth: "0.666667"
89
+ }),
90
+ /*#__PURE__*/ jsxRuntime.jsx("path", {
91
+ d: "M33.813 34.5199C34.0083 34.7152 34.3249 34.7152 34.5201 34.5199C34.7154 34.3246 34.7154 34.0081 34.5201 33.8128L32.707 31.9997L34.5201 30.1866C34.7154 29.9913 34.7154 29.6747 34.5201 29.4795C34.3249 29.2842 34.0083 29.2842 33.813 29.4795L31.9999 31.2926L30.1868 29.4795C29.9915 29.2842 29.675 29.2842 29.4797 29.4795C29.2844 29.6747 29.2844 29.9913 29.4797 30.1866L31.2928 31.9997L29.4797 33.8128C29.2844 34.0081 29.2844 34.3246 29.4797 34.5199C29.675 34.7152 29.9915 34.7152 30.1868 34.5199L31.9999 32.7068L33.813 34.5199Z",
92
+ fill: "#676767"
93
+ })
94
+ ]
95
+ }),
96
+ /*#__PURE__*/ jsxRuntime.jsxs("defs", {
97
+ children: [
98
+ /*#__PURE__*/ jsxRuntime.jsxs("linearGradient", {
99
+ id: "paint0_linear_942_39561",
100
+ x1: "20",
101
+ y1: "26",
102
+ x2: "20",
103
+ y2: "40",
104
+ gradientUnits: "userSpaceOnUse",
105
+ children: [
106
+ /*#__PURE__*/ jsxRuntime.jsx("stop", {
107
+ stopColor: "#F9F9F9",
108
+ stopOpacity: "0"
109
+ }),
110
+ /*#__PURE__*/ jsxRuntime.jsx("stop", {
111
+ offset: "1",
112
+ stopColor: "#F9F9F9"
113
+ })
114
+ ]
115
+ }),
116
+ /*#__PURE__*/ jsxRuntime.jsx("clipPath", {
117
+ id: "clip0_942_39561",
118
+ children: /*#__PURE__*/ jsxRuntime.jsx("rect", {
119
+ width: "40",
120
+ height: "40",
121
+ fill: "white"
122
+ })
123
+ })
124
+ ]
125
+ })
126
+ ]
127
+ })
128
+ })
129
+ ]
130
+ });
131
+ };
132
+
133
+ exports.default = NoDataImage;
@@ -11,7 +11,7 @@ var helpers$1 = require('../../helpers.js');
11
11
  var helpers = require('./common/helpers.js');
12
12
 
13
13
  const CompareImage = (props)=>{
14
- const { handle = null, handleSize = 40, hover = false, leftImage, leftImageAlt = '', leftImageTitle = '', leftImageCss = {}, leftImageLabel = null, onSliderPositionChange, rightImage, rightImageAlt = '', rightImageTitle = '', rightImageCss = {}, rightImageLabel = null, sliderLineColor = '#ffffff', sliderLineWidth = 2, sliderPositionPercentage = 0.5, vertical = false, enableLabel = false, componentUid = '', styles, advanced, builderData, preload = false, pageContext, translate } = props;
14
+ const { handle = null, handleSize = 40, hover = false, leftImage, leftImageAlt = '', leftImageTitle = '', leftImageCss = {}, leftImageLabel = null, onSliderPositionChange, rightImage, rightImageAlt = '', rightImageTitle = '', rightImageCss = {}, rightImageLabel = null, sliderLineColor = '#ffffff', sliderLineWidth = 2, sliderPositionPercentage = 0.5, vertical = false, enableLabel = false, componentUid = '', styles, advanced, builderData, preload = false, enableLazyLoadImage, pageContext, translate } = props;
15
15
  const horizontal = !vertical;
16
16
  const leftRatio = (leftImage?.width ?? 0) / (leftImage?.height ?? 1);
17
17
  const rightRatio = (rightImage?.width ?? 0) / (rightImage?.height ?? 1);
@@ -271,7 +271,9 @@ const CompareImage = (props)=>{
271
271
  style: {
272
272
  ...initStyles.rightImage,
273
273
  ...core.makeStyleResponsive('objf', styles?.imageScale)
274
- }
274
+ },
275
+ enableLazyLoadImage,
276
+ pageContext
275
277
  })}
276
278
  ${NextImage_liquid.default({
277
279
  customAttrs: {
@@ -287,7 +289,9 @@ const CompareImage = (props)=>{
287
289
  style: {
288
290
  ...initStyles.rightImage,
289
291
  ...core.makeStyleResponsive('objf', styles?.imageScale)
290
- }
292
+ },
293
+ enableLazyLoadImage,
294
+ pageContext
291
295
  })}
292
296
  <div id="image-comparison-slider-${componentUid}" style="${{
293
297
  ...initStyles.slider
package/dist/cjs/index.js CHANGED
@@ -311,6 +311,7 @@ var _const = require('./common/const.js');
311
311
  var helpers = require('./helpers.js');
312
312
  var index$M = require('./post-purchase/text/setting/index.js');
313
313
  var Text$1 = require('./post-purchase/text/Text.js');
314
+ var helpers$1 = require('./stock-counter/helpers.js');
314
315
 
315
316
 
316
317
 
@@ -632,3 +633,6 @@ exports.replaceLinkData = helpers.replaceLinkData;
632
633
  exports.youtubeShortsRegex = helpers.youtubeShortsRegex;
633
634
  exports.postPurchaseTextSetting = index$M.default;
634
635
  exports.PostPurchaseText = Text$1.default;
636
+ exports.convertSizeToWidth = helpers$1.convertSizeToWidth;
637
+ exports.transformHighlighTag = helpers$1.transformHighlighTag;
638
+ exports.transformNumberTag = helpers$1.transformNumberTag;
@@ -69,8 +69,12 @@ const PostPurchaseProductOffer = ({ styles, builderAttrs, builderProps, children
69
69
  };
70
70
  const getClassNameForItem = (index)=>{
71
71
  let className = '';
72
- ProductVariant.DEVICES.map((device)=>{
72
+ ProductVariant.DEVICES.forEach((device)=>{
73
73
  const key = device === 'desktop' ? '' : `${device}:`;
74
+ if (device === 'mobile') {
75
+ className += ` mobile:gp-col-span-2`;
76
+ return;
77
+ }
74
78
  if (productOfferLayout?.[device] === '1col' && index % 3 === 0 || (totalProduct || 0) <= 1) {
75
79
  className += ` ${key}gp-col-span-2`;
76
80
  }
@@ -9,6 +9,7 @@ var helpers = require('../../helpers.js');
9
9
  const PRODUCT_ID_LATEST = 'latest';
10
10
  const PREFIX_PRODUCT_ID = 'gid://shopify/Product/';
11
11
  const PREFIX_PRODUCT_VARIANT_ID = 'gid://shopify/ProductVariant/';
12
+ const PREFIX_PRODUCT_OPTION_VALUE_ID = 'gid://shopify/ProductOptionValue/';
12
13
  const STATIC_PRODUCT_STATUS = 'static';
13
14
  const DYNAMIC_PRODUCT_STATUS = 'dynamic';
14
15
  const Product = ({ children, setting, styles, style, builderProps, rawChildren, advanced })=>{
@@ -24,8 +25,8 @@ const Product = ({ children, setting, styles, style, builderProps, rawChildren,
24
25
  const formatProductId = productSetting?.productId?.replace(PREFIX_PRODUCT_ID, '').toLowerCase() || PRODUCT_ID_LATEST;
25
26
  const formatVariantId = initVariantId?.replace(PREFIX_PRODUCT_VARIANT_ID, '') || '';
26
27
  const productStatus = productSetting?.productStatus ?? STATIC_PRODUCT_STATUS;
28
+ const preSelectedOptionIds = productSetting?.selectedOptions?.map((option)=>option?.valueBaseID?.replace(PREFIX_PRODUCT_OPTION_VALUE_ID, ''));
27
29
  return core.template /* liquid */ `
28
-
29
30
  {%- assign gpBkProduct = product -%}
30
31
  ${productStatus !== DYNAMIC_PRODUCT_STATUS ? `
31
32
  {%- liquid
@@ -100,7 +101,7 @@ const Product = ({ children, setting, styles, style, builderProps, rawChildren,
100
101
  {%- endif -%}
101
102
  <gp-product data-uid="${builderProps?.uid}" data-id="${builderProps?.uid}" style="${{
102
103
  ...advancedStyle
103
- }}" class="${advanced?.cssClass}" gp-context='{"productId": {{ product.id }}, "isSyncProduct": "${isSyncProduct}", "variantSelected": {{ variant | json | escape }}, "quantity": 1, "formId": "{{ product_form_id }}" }'
104
+ }}" class="${advanced?.cssClass}" gp-context='{"productId": {{ product.id }}, "preSelectedOptionIds": [${preSelectedOptionIds}], "isSyncProduct": "${isSyncProduct}", "variantSelected": {{ variant | json | escape }}, "inventoryQuantity": {{ variant.inventory_quantity }}, "quantity": 1, "formId": "{{ product_form_id }}" }'
104
105
  gp-data='{"variantSelected": {{ variant | json | escape }}, "quantity": 1, "productUrl":{{ product.url | json | escape }}, "productHandle":{{ product.handle | json | escape }}, "collectionUrl": {{ collection.url | json | escape }}, "collectionHandle": {{ collection.handle | json | escape }}}'>
105
106
  <product-form class="product-form">
106
107
  {%- form 'product', product, id: product_form_id, class: 'form contents', data-type: 'add-to-cart-form', autocomplete: 'off' -%}
@@ -13,7 +13,7 @@ var NextImage_liquid = require('../../../../image/components/NextImage.liquid.js
13
13
  var Video_liquid = require('../../../../image/components/Video.liquid.js');
14
14
  var _function = require('../../../helpers/function.js');
15
15
 
16
- const ProductFeaturedImageCarousel = ({ builderPropUID, children, enableLazyloadImage, ...setting })=>{
16
+ const ProductFeaturedImageCarousel = ({ builderPropUID, children, enableLazyLoadImage, ...setting })=>{
17
17
  const ftAspectRatio = common.getAspectRatio(setting.ftShape);
18
18
  const getStyleFeaturedImageDisplay = ()=>{
19
19
  return common.getDisplayStyle((device)=>![
@@ -153,7 +153,7 @@ const ProductFeaturedImageCarousel = ({ builderPropUID, children, enableLazyload
153
153
  },
154
154
  priority: setting?.preload,
155
155
  className: `gp-w-full gp-h-full gp-absolute gp-top-0 gp-left-0 featured-image-only gp-cursor-pointer !gp-rounded-none ${className}`,
156
- enableLazyloadImage
156
+ enableLazyLoadImage
157
157
  })}`;
158
158
  };
159
159
  const renderNoImage = ()=>{
@@ -171,7 +171,7 @@ const ProductFeaturedImageCarousel = ({ builderPropUID, children, enableLazyload
171
171
  },
172
172
  priority: setting?.preload,
173
173
  className: `gp-w-full gp-h-full gp-absolute gp-top-0 gp-left-0 featured-image-only gp-cursor-pointer !gp-rounded-none`,
174
- enableLazyloadImage
174
+ enableLazyLoadImage
175
175
  })}`;
176
176
  };
177
177
  const getValueFromValueContainUnit = (value)=>{
@@ -398,10 +398,11 @@ const ProductFeaturedImageCarousel = ({ builderPropUID, children, enableLazyload
398
398
  },
399
399
  className: `gp-w-full featured-image-only !gp-rounded-none`,
400
400
  customLazyload: true,
401
- enableLazyloadImage
401
+ enableLazyLoadImage
402
402
  })}
403
403
  {%- endif -%}
404
- `
404
+ `,
405
+ ftShapeProductImage: setting?.ftShape
405
406
  })}
406
407
  `;
407
408
  };
@@ -10,7 +10,7 @@ var common = require('../common/common.js');
10
10
  var productGallery = require('../common/productGallery.js');
11
11
  var _function = require('../../../helpers/function.js');
12
12
 
13
- const ProductGalleryCarousel = ({ builderPropUID, children, enableLazyloadImage, ...setting })=>{
13
+ const ProductGalleryCarousel = ({ builderPropUID, children, enableLazyLoadImage, ...setting })=>{
14
14
  const getCarouselDisplay = ()=>{
15
15
  const isDisplayCarousel = (type, position, device)=>{
16
16
  const layout = core.getResponsiveValueByScreen(position, device);
@@ -90,7 +90,7 @@ const ProductGalleryCarousel = ({ builderPropUID, children, enableLazyloadImage,
90
90
  customLazyload: true,
91
91
  style: style,
92
92
  className: '!gp-rounded-none gp-w-full gp-h-full gp-absolute gp-top-0 gp-left-0 gp-cursor-pointer',
93
- enableLazyloadImage
93
+ enableLazyLoadImage
94
94
  })}`;
95
95
  };
96
96
  const aspectRatioToPaddingBottom = ()=>{
@@ -12,7 +12,7 @@ var Modal3d_liquid = require('../../../../image/components/Modal3d.liquid.js');
12
12
  var Video_liquid = require('../../../../image/components/Video.liquid.js');
13
13
  var HTML5Embed_liquid = require('../../../../video/components/HTML5Embed.liquid.js');
14
14
 
15
- const ProductGalleryGrid = ({ builderPropUID, wrapperStyle, children, enableLazyloadImage, ...setting })=>{
15
+ const ProductGalleryGrid = ({ builderPropUID, wrapperStyle, children, enableLazyLoadImage, ...setting })=>{
16
16
  const getGridDisplay = ()=>{
17
17
  const isDisplayGrid = (type, position, device)=>{
18
18
  const layout = core.getResponsiveValueByScreen(position, device);
@@ -101,7 +101,7 @@ const ProductGalleryGrid = ({ builderPropUID, wrapperStyle, children, enableLazy
101
101
  style: style,
102
102
  className: '!gp-rounded-none',
103
103
  customLazyload: false,
104
- enableLazyloadImage
104
+ enableLazyLoadImage
105
105
  })}
106
106
  ${setting?.galleryHoverEffect !== 'none' ? `<div class="${core.cls('zoom-element !gp-max-w-none', productFeaturedImage.getZoomImageClass())}">
107
107
  ${NextImage_liquid.default({
@@ -115,7 +115,7 @@ const ProductGalleryGrid = ({ builderPropUID, wrapperStyle, children, enableLazy
115
115
  style: style,
116
116
  className: '!gp-rounded-none gp-w-full gp-h-full',
117
117
  customLazyload: false,
118
- enableLazyloadImage
118
+ enableLazyLoadImage
119
119
  })}
120
120
  </div>` : ''}
121
121
  ${setting?.galleryHoverEffect == 'zoom' && setting?.galleryZoomType == 'glasses' ? `
@@ -298,7 +298,7 @@ const ProductGalleryGrid = ({ builderPropUID, wrapperStyle, children, enableLazy
298
298
  },
299
299
  className: '!gp-rounded-none',
300
300
  customLazyload: false,
301
- enableLazyloadImage
301
+ enableLazyLoadImage
302
302
  })}`;
303
303
  };
304
304
  return core.template`
@@ -11,7 +11,7 @@ var helpers = require('../../../../helpers.js');
11
11
  var productGallery = require('../common/productGallery.js');
12
12
 
13
13
  const ProductImages = (productImageProps)=>{
14
- const { setting, styles, builderProps, style, advanced, rawChildren, pageContext, enableLazyloadImage } = productImageProps;
14
+ const { setting, styles, builderProps, style, advanced, rawChildren, pageContext, enableLazyLoadImage } = productImageProps;
15
15
  const settings = {
16
16
  ...setting,
17
17
  ...styles
@@ -116,7 +116,7 @@ const ProductImages = (productImageProps)=>{
116
116
  builderPropUID: `gp-carousel-${builderProps?.uid}`,
117
117
  ...settings,
118
118
  children: renderProductBadge(),
119
- enableLazyloadImage
119
+ enableLazyLoadImage
120
120
  })}
121
121
  ${common.shouldSkipLiquidRenderForSingleImage(settings?.position, core.template`
122
122
  <div
@@ -132,7 +132,7 @@ const ProductImages = (productImageProps)=>{
132
132
  ${ProductGalleryCarousel_liquid.default({
133
133
  builderPropUID: `gp-gallery-${builderProps?.uid}`,
134
134
  ...settings,
135
- enableLazyloadImage
135
+ enableLazyLoadImage
136
136
  })}
137
137
  </div>
138
138
  ${ProductGalleryGrid_liquid.default({
@@ -142,7 +142,7 @@ const ProductImages = (productImageProps)=>{
142
142
  },
143
143
  children: renderProductBadge(),
144
144
  ...settings,
145
- enableLazyloadImage
145
+ enableLazyLoadImage
146
146
  })}
147
147
  `)}
148
148
  </div>