@gem-sdk/components 2.1.13-staging.2 → 2.1.13-staging.20

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 (146) hide show
  1. package/dist/cjs/article/components/ArticleImage.js +2 -1
  2. package/dist/cjs/article/components/ArticleList.js +1 -1
  3. package/dist/cjs/banner/components/hero-banner/index.liquid.js +12 -10
  4. package/dist/cjs/banner/components/hero-banner/utils/index.js +5 -3
  5. package/dist/cjs/builder.js +21 -1
  6. package/dist/cjs/collection/components/CollectionDescription.js +101 -7
  7. package/dist/cjs/collection/components/CollectionDescription.liquid.js +102 -9
  8. package/dist/cjs/collection/setting/CollectionDescription.js +128 -0
  9. package/dist/cjs/common/const.js +1 -1
  10. package/dist/cjs/form/components/textarea/TextArea.liquid.js +2 -2
  11. package/dist/cjs/image/components/AdaptiveImage.liquid.js +6 -5
  12. package/dist/cjs/image/components/Image.js +22 -3
  13. package/dist/cjs/image/components/Image.liquid.js +6 -5
  14. package/dist/cjs/image/components/NextImage.liquid.js +4 -3
  15. package/dist/cjs/image/components/NoDataImage.js +133 -0
  16. package/dist/cjs/image-comparison/components/CompareImage.liquid.js +7 -3
  17. package/dist/cjs/index.js +20 -0
  18. package/dist/cjs/index.liquid.js +22 -2
  19. package/dist/cjs/marquee/components/MarqueeBase.liquid.js +7 -26
  20. package/dist/cjs/product/components/ProductImagesV2/jsx/ProductImages.js +2 -9
  21. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductFeaturedImageCarousel.liquid.js +4 -4
  22. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductGalleryCarousel.liquid.js +2 -2
  23. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductGalleryGrid.liquid.js +4 -4
  24. package/dist/cjs/product/components/ProductImagesV2/liquid/ProductImages.liquid.js +4 -4
  25. package/dist/cjs/tab/hooks/useTabInteraction.js +13 -9
  26. package/dist/cjs/text/components/Text.js +0 -1
  27. package/dist/cjs/third-party/components/AlsoBoughtCbb.js +32 -0
  28. package/dist/cjs/third-party/components/AlsoBoughtCbb.liquid.js +21 -0
  29. package/dist/cjs/third-party/components/BfSizeChartSizeGuide.js +32 -0
  30. package/dist/cjs/third-party/components/BfSizeChartSizeGuide.liquid.js +12 -0
  31. package/dist/cjs/third-party/components/EssentialAnnouncementBar.js +32 -0
  32. package/dist/cjs/third-party/components/EssentialAnnouncementBar.liquid.js +12 -0
  33. package/dist/cjs/third-party/components/EssentialCountdownTimerBar.js +32 -0
  34. package/dist/cjs/third-party/components/EssentialCountdownTimerBar.liquid.js +12 -0
  35. package/dist/cjs/third-party/components/EstimatedDeliveryDatePlus.js +32 -0
  36. package/dist/cjs/third-party/components/EstimatedDeliveryDatePlus.liquid.js +12 -0
  37. package/dist/cjs/third-party/components/GloColorSwatchvariantImage.js +32 -0
  38. package/dist/cjs/third-party/components/GloColorSwatchvariantImage.liquid.js +12 -0
  39. package/dist/cjs/third-party/components/HextomFreeShippingBar.js +32 -0
  40. package/dist/cjs/third-party/components/HextomFreeShippingBar.liquid.js +12 -0
  41. package/dist/cjs/third-party/components/OkendoReviewsLoyalty.js +32 -0
  42. package/dist/cjs/third-party/components/OkendoReviewsLoyalty.liquid.js +12 -0
  43. package/dist/cjs/third-party/components/StellarDeliveryDatePickup.js +32 -0
  44. package/dist/cjs/third-party/components/StellarDeliveryDatePickup.liquid.js +21 -0
  45. package/dist/cjs/third-party/components/TrustedsiteTrustBadges.js +32 -0
  46. package/dist/cjs/third-party/components/TrustedsiteTrustBadges.liquid.js +12 -0
  47. package/dist/cjs/third-party/configs/AlsoBoughtCbb.js +12 -0
  48. package/dist/cjs/third-party/configs/BfSizeChartSizeGuide.js +12 -0
  49. package/dist/cjs/third-party/configs/EssentialAnnouncementBar.js +12 -0
  50. package/dist/cjs/third-party/configs/EssentialCountdownTimerBar.js +12 -0
  51. package/dist/cjs/third-party/configs/EstimatedDeliveryDatePlus.js +12 -0
  52. package/dist/cjs/third-party/configs/GloColorSwatchvariantImage.js +12 -0
  53. package/dist/cjs/third-party/configs/HextomFreeShippingBar.js +12 -0
  54. package/dist/cjs/third-party/configs/OkendoReviewsLoyalty.js +12 -0
  55. package/dist/cjs/third-party/configs/StellarDeliveryDatePickup.js +12 -0
  56. package/dist/cjs/third-party/configs/TrustedsiteTrustBadges.js +12 -0
  57. package/dist/cjs/third-party/helpers/thirdParty.js +1 -1
  58. package/dist/cjs/third-party/next.js +51 -1
  59. package/dist/cjs/third-party/setting/AlsoBoughtCbb.js +127 -0
  60. package/dist/cjs/third-party/setting/BfSizeChartSizeGuide.js +131 -0
  61. package/dist/cjs/third-party/setting/EssentialAnnouncementBar.js +142 -0
  62. package/dist/cjs/third-party/setting/EssentialCountdownTimerBar.js +142 -0
  63. package/dist/cjs/third-party/setting/EstimatedDeliveryDatePlus.js +128 -0
  64. package/dist/cjs/third-party/setting/GloColorSwatchvariantImage.js +152 -0
  65. package/dist/cjs/third-party/setting/HextomFreeShippingBar.js +128 -0
  66. package/dist/cjs/third-party/setting/OkendoReviewsLoyalty.js +171 -0
  67. package/dist/cjs/third-party/setting/StellarDeliveryDatePickup.js +127 -0
  68. package/dist/cjs/third-party/setting/TrustedsiteTrustBadges.js +177 -0
  69. package/dist/cjs/third-party/setting/index.js +21 -1
  70. package/dist/cjs/video/components/HTML5Embed.js +2 -2
  71. package/dist/cjs/video/components/HTML5Embed.liquid.js +6 -3
  72. package/dist/cjs/video/components/LiteYouTubeEmbed.liquid.js +5 -3
  73. package/dist/esm/article/components/ArticleImage.js +2 -1
  74. package/dist/esm/article/components/ArticleList.js +1 -1
  75. package/dist/esm/banner/components/hero-banner/index.liquid.js +12 -10
  76. package/dist/esm/banner/components/hero-banner/utils/index.js +5 -3
  77. package/dist/esm/builder.js +21 -1
  78. package/dist/esm/collection/components/CollectionDescription.js +103 -9
  79. package/dist/esm/collection/components/CollectionDescription.liquid.js +103 -10
  80. package/dist/esm/collection/setting/CollectionDescription.js +128 -0
  81. package/dist/esm/common/const.js +1 -1
  82. package/dist/esm/form/components/textarea/TextArea.liquid.js +2 -2
  83. package/dist/esm/image/components/AdaptiveImage.liquid.js +6 -5
  84. package/dist/esm/image/components/Image.js +23 -4
  85. package/dist/esm/image/components/Image.liquid.js +6 -5
  86. package/dist/esm/image/components/NextImage.liquid.js +4 -3
  87. package/dist/esm/image/components/NoDataImage.js +129 -0
  88. package/dist/esm/image-comparison/components/CompareImage.liquid.js +7 -3
  89. package/dist/esm/index.js +10 -0
  90. package/dist/esm/index.liquid.js +11 -1
  91. package/dist/esm/marquee/components/MarqueeBase.liquid.js +7 -26
  92. package/dist/esm/product/components/ProductImagesV2/jsx/ProductImages.js +2 -9
  93. package/dist/esm/product/components/ProductImagesV2/liquid/ProductFeaturedImageCarousel.liquid.js +4 -4
  94. package/dist/esm/product/components/ProductImagesV2/liquid/ProductGalleryCarousel.liquid.js +2 -2
  95. package/dist/esm/product/components/ProductImagesV2/liquid/ProductGalleryGrid.liquid.js +4 -4
  96. package/dist/esm/product/components/ProductImagesV2/liquid/ProductImages.liquid.js +4 -4
  97. package/dist/esm/tab/hooks/useTabInteraction.js +14 -10
  98. package/dist/esm/text/components/Text.js +0 -1
  99. package/dist/esm/third-party/components/AlsoBoughtCbb.js +28 -0
  100. package/dist/esm/third-party/components/AlsoBoughtCbb.liquid.js +17 -0
  101. package/dist/esm/third-party/components/BfSizeChartSizeGuide.js +28 -0
  102. package/dist/esm/third-party/components/BfSizeChartSizeGuide.liquid.js +8 -0
  103. package/dist/esm/third-party/components/EssentialAnnouncementBar.js +28 -0
  104. package/dist/esm/third-party/components/EssentialAnnouncementBar.liquid.js +8 -0
  105. package/dist/esm/third-party/components/EssentialCountdownTimerBar.js +28 -0
  106. package/dist/esm/third-party/components/EssentialCountdownTimerBar.liquid.js +8 -0
  107. package/dist/esm/third-party/components/EstimatedDeliveryDatePlus.js +28 -0
  108. package/dist/esm/third-party/components/EstimatedDeliveryDatePlus.liquid.js +8 -0
  109. package/dist/esm/third-party/components/GloColorSwatchvariantImage.js +28 -0
  110. package/dist/esm/third-party/components/GloColorSwatchvariantImage.liquid.js +8 -0
  111. package/dist/esm/third-party/components/HextomFreeShippingBar.js +28 -0
  112. package/dist/esm/third-party/components/HextomFreeShippingBar.liquid.js +8 -0
  113. package/dist/esm/third-party/components/OkendoReviewsLoyalty.js +28 -0
  114. package/dist/esm/third-party/components/OkendoReviewsLoyalty.liquid.js +8 -0
  115. package/dist/esm/third-party/components/StellarDeliveryDatePickup.js +28 -0
  116. package/dist/esm/third-party/components/StellarDeliveryDatePickup.liquid.js +17 -0
  117. package/dist/esm/third-party/components/TrustedsiteTrustBadges.js +28 -0
  118. package/dist/esm/third-party/components/TrustedsiteTrustBadges.liquid.js +8 -0
  119. package/dist/esm/third-party/configs/AlsoBoughtCbb.js +8 -0
  120. package/dist/esm/third-party/configs/BfSizeChartSizeGuide.js +8 -0
  121. package/dist/esm/third-party/configs/EssentialAnnouncementBar.js +8 -0
  122. package/dist/esm/third-party/configs/EssentialCountdownTimerBar.js +8 -0
  123. package/dist/esm/third-party/configs/EstimatedDeliveryDatePlus.js +8 -0
  124. package/dist/esm/third-party/configs/GloColorSwatchvariantImage.js +8 -0
  125. package/dist/esm/third-party/configs/HextomFreeShippingBar.js +8 -0
  126. package/dist/esm/third-party/configs/OkendoReviewsLoyalty.js +8 -0
  127. package/dist/esm/third-party/configs/StellarDeliveryDatePickup.js +8 -0
  128. package/dist/esm/third-party/configs/TrustedsiteTrustBadges.js +8 -0
  129. package/dist/esm/third-party/helpers/thirdParty.js +1 -1
  130. package/dist/esm/third-party/next.js +51 -1
  131. package/dist/esm/third-party/setting/AlsoBoughtCbb.js +123 -0
  132. package/dist/esm/third-party/setting/BfSizeChartSizeGuide.js +127 -0
  133. package/dist/esm/third-party/setting/EssentialAnnouncementBar.js +138 -0
  134. package/dist/esm/third-party/setting/EssentialCountdownTimerBar.js +138 -0
  135. package/dist/esm/third-party/setting/EstimatedDeliveryDatePlus.js +124 -0
  136. package/dist/esm/third-party/setting/GloColorSwatchvariantImage.js +148 -0
  137. package/dist/esm/third-party/setting/HextomFreeShippingBar.js +124 -0
  138. package/dist/esm/third-party/setting/OkendoReviewsLoyalty.js +167 -0
  139. package/dist/esm/third-party/setting/StellarDeliveryDatePickup.js +123 -0
  140. package/dist/esm/third-party/setting/TrustedsiteTrustBadges.js +173 -0
  141. package/dist/esm/third-party/setting/index.js +224 -204
  142. package/dist/esm/video/components/HTML5Embed.js +2 -2
  143. package/dist/esm/video/components/HTML5Embed.liquid.js +6 -3
  144. package/dist/esm/video/components/LiteYouTubeEmbed.liquid.js +5 -3
  145. package/dist/types/index.d.ts +182 -8
  146. package/package.json +2 -2
@@ -1,15 +1,109 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useCollection } from '@gem-sdk/core';
3
- import Text from '../../text/components/Text.js';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useCurrentDevice, useCollection, getResponsiveValueByScreen, composeTypographyClassName, composeTypographyStyle, isSafari, cls, getGlobalColorClass, getStyleShadow, makeStyleResponsive, makeStyle, getGlobalColorStyle } from '@gem-sdk/core';
3
+ import { useState, useRef, useEffect } from 'react';
4
4
 
5
- const CollectionDescription = ({ setting })=>{
5
+ const CollectionDescription = ({ setting, builderProps })=>{
6
+ const [open, setOpen] = useState(false);
7
+ const [isShowViewMore, allowShowViewMore] = useState(false);
8
+ const ref = useRef(null);
9
+ const currentDevice = useCurrentDevice();
6
10
  const collection = useCollection();
7
- return /*#__PURE__*/ jsx(Text, {
8
- styles: setting,
9
- setting: {
10
- text: collection?.descriptionHtml ?? 'Collection description',
11
- excludeFlex: true
11
+ const hasLineClamp = getResponsiveValueByScreen(setting?.hasLineClamp, currentDevice);
12
+ const lineClamp = getResponsiveValueByScreen(setting?.lineClamp, currentDevice);
13
+ const appendTypoClass = composeTypographyClassName(setting?.typo, setting?.typography);
14
+ const appendTypoStyle = composeTypographyStyle(setting?.typo, setting?.typography);
15
+ useEffect(()=>{
16
+ const dom = ref.current;
17
+ setOpen(false);
18
+ if (dom && hasLineClamp && collection?.description) {
19
+ const value = lineClamp;
20
+ setTimeout(()=>{
21
+ const scrollHeight = dom?.scrollHeight ?? 0;
22
+ const clientHeight = dom?.clientHeight ?? 0;
23
+ const lineHeight = window.getComputedStyle(dom).getPropertyValue('line-height');
24
+ const lineText = Math.round((scrollHeight ?? 0) / parseInt(lineHeight));
25
+ const conditionCheckLine = isSafari() ? value && value < lineText : clientHeight < scrollHeight;
26
+ if (value && conditionCheckLine) {
27
+ allowShowViewMore(()=>true);
28
+ } else {
29
+ allowShowViewMore(()=>false);
30
+ }
31
+ }, 100);
12
32
  }
33
+ }, [
34
+ hasLineClamp,
35
+ lineClamp,
36
+ collection?.description
37
+ ]);
38
+ const css = `
39
+ .gp-p-description-text > *:not(ol):not(ul):not(table):not(div) {
40
+ display: inline !important;
41
+ }
42
+ .gp-p-description-text > *:not(ol):not(ul):not(table):not(div)::after {
43
+ content: "\\A";
44
+ white-space: pre;
45
+ }
46
+ .gp-p-description-text > table {
47
+ box-shadow: none;
48
+ }
49
+ `;
50
+ const hasDescription = collection?.description && collection.description?.trim() != '';
51
+ return /*#__PURE__*/ jsxs("div", {
52
+ "data-id": builderProps?.uid,
53
+ children: [
54
+ !isSafari() && /*#__PURE__*/ jsx("style", {
55
+ children: css
56
+ }),
57
+ /*#__PURE__*/ jsx("div", {
58
+ ref: ref,
59
+ "data-gp-text": true,
60
+ className: cls('gp-p-description-text gp-break-words safari:[&_p]:gp-inline safari:[&_p]:after:gp-whitespace-pre', appendTypoClass, !hasDescription ? 'gp-p-2 gp-text-center gp-text-sm gp-font-semibold gp-text-gray-500 gp-py-2 !gp-text-center' : '', getGlobalColorClass('text', setting?.color)),
61
+ style: {
62
+ ...getStyleShadow({
63
+ styleAppliedFor: 'text-shadow'
64
+ }),
65
+ ...makeStyleResponsive('ta', setting?.textAlign),
66
+ ...hasLineClamp && !open ? makeStyleResponsive('line-clamp', setting?.lineClamp) : {},
67
+ ...makeStyle({
68
+ tt: setting?.transform
69
+ }),
70
+ ...appendTypoStyle
71
+ },
72
+ dangerouslySetInnerHTML: {
73
+ __html: collection?.descriptionHtml && hasDescription ? collection.descriptionHtml : ``
74
+ }
75
+ }),
76
+ hasLineClamp && isShowViewMore && /*#__PURE__*/ jsxs("button", {
77
+ className: cls(appendTypoClass, getGlobalColorClass('text', setting?.showMoreColor), 'gp-mt-4 gp-w-full gp-transition-all hover:gp-opacity-80'),
78
+ style: {
79
+ ...makeStyleResponsive('ta', setting?.textAlign),
80
+ ...makeStyle({
81
+ tt: setting?.transform
82
+ }),
83
+ ...appendTypoStyle,
84
+ ...getGlobalColorStyle(setting?.showMoreColor)
85
+ },
86
+ onClick: ()=>setOpen((prev)=>!prev),
87
+ children: [
88
+ !open ? setting?.viewMoreText : setting?.viewLessText,
89
+ setting?.enableViewMoreIcon && /*#__PURE__*/ jsx("svg", {
90
+ className: "gp-ml-1 gp-inline-block",
91
+ height: "1em",
92
+ width: "1em",
93
+ viewBox: "0 0 22 12",
94
+ fill: "none",
95
+ xmlns: "http://www.w3.org/2000/svg",
96
+ children: !open ? /*#__PURE__*/ jsx("path", {
97
+ d: "M1.70711 0.292893C1.31658 -0.0976311 0.683417 -0.0976311 0.292893 0.292893C-0.0976311 0.683417 -0.0976311 1.31658 0.292893 1.70711L1.70711 0.292893ZM11 11L10.2929 11.7071C10.6834 12.0976 11.3166 12.0976 11.7071 11.7071L11 11ZM21.7071 1.70711C22.0976 1.31658 22.0976 0.683417 21.7071 0.292893C21.3166 -0.0976311 20.6834 -0.0976311 20.2929 0.292893L21.7071 1.70711ZM0.292893 1.70711L10.2929 11.7071L11.7071 10.2929L1.70711 0.292893L0.292893 1.70711ZM11.7071 11.7071L21.7071 1.70711L20.2929 0.292893L10.2929 10.2929L11.7071 11.7071Z",
98
+ fill: "currentColor"
99
+ }) : /*#__PURE__*/ jsx("path", {
100
+ d: "M0.292893 10.2929C-0.0976311 10.6834 -0.0976311 11.3166 0.292893 11.7071C0.683417 12.0976 1.31658 12.0976 1.70711 11.7071L0.292893 10.2929ZM11 1L11.7071 0.292893C11.3166 -0.0976311 10.6834 -0.0976311 10.2929 0.292893L11 1ZM20.2929 11.7071C20.6834 12.0976 21.3166 12.0976 21.7071 11.7071C22.0976 11.3166 22.0976 10.6834 21.7071 10.2929L20.2929 11.7071ZM1.70711 11.7071L11.7071 1.70711L10.2929 0.292893L0.292893 10.2929L1.70711 11.7071ZM10.2929 1.70711L20.2929 11.7071L21.7071 10.2929L11.7071 0.292893L10.2929 1.70711Z",
101
+ fill: "currentColor"
102
+ })
103
+ })
104
+ ]
105
+ })
106
+ ]
13
107
  });
14
108
  };
15
109
 
@@ -1,16 +1,109 @@
1
- import { template } from '@gem-sdk/core';
2
- import Text from '../../text/components/Text.liquid.js';
1
+ import { composeTypographyStyle, composeTypographyClassName, getStyleShadow, makeStyleResponsive, getGlobalColorStyle, makeStyle, makeLineClamp, template, cls, getGlobalColorClass, RenderIf, isLocalEnv, baseAssetURL } from '@gem-sdk/core';
2
+ import { getDynamicSourceLocales, getSettingPreloadData } from '../../helpers.js';
3
+ import { getDisplayStyle } from '../../product/components/ProductImages/common/common.js';
3
4
 
4
- const CollectionDescription = ({ setting })=>{
5
+ const CollectionDescription = ({ setting, advanced, builderProps, pageContext })=>{
6
+ const appendTypoStyle = composeTypographyStyle(setting?.typo, setting?.typography);
7
+ const appendTypoClass = composeTypographyClassName(setting?.typo, setting?.typography);
8
+ const defaultStyle = {
9
+ ...getStyleShadow({
10
+ styleAppliedFor: 'text-shadow'
11
+ }),
12
+ ...makeStyleResponsive('ta', setting?.textAlign),
13
+ ...getGlobalColorStyle(setting?.color),
14
+ ...makeStyle({
15
+ tt: setting?.transform
16
+ }),
17
+ ...appendTypoStyle
18
+ };
19
+ const collapseStyle = {
20
+ ...defaultStyle,
21
+ ...makeStyleResponsive('line-clamp', makeLineClamp(setting?.lineClamp, setting?.hasLineClamp))
22
+ };
23
+ const getDisplayCollapse = ()=>{
24
+ return getDisplayStyle((device)=>!!setting?.hasLineClamp && setting.hasLineClamp[device] !== undefined && !setting.hasLineClamp[device], 'block');
25
+ };
26
+ const moreIcon = `<svg
27
+ class="gp-ml-1 gp-inline-block"
28
+ style="display: inline-block; margin-left: 1px;"
29
+ height="1em"
30
+ width="1em"
31
+ viewBox="0 0 22 12"
32
+ fill="none"
33
+ xmlns="http://www.w3.org/2000/svg"
34
+ >
35
+ <path
36
+ d="M1.70711 0.292893C1.31658 -0.0976311 0.683417 -0.0976311 0.292893 0.292893C-0.0976311 0.683417 -0.0976311 1.31658 0.292893 1.70711L1.70711 0.292893ZM11 11L10.2929 11.7071C10.6834 12.0976 11.3166 12.0976 11.7071 11.7071L11 11ZM21.7071 1.70711C22.0976 1.31658 22.0976 0.683417 21.7071 0.292893C21.3166 -0.0976311 20.6834 -0.0976311 20.2929 0.292893L21.7071 1.70711ZM0.292893 1.70711L10.2929 11.7071L11.7071 10.2929L1.70711 0.292893L0.292893 1.70711ZM11.7071 11.7071L21.7071 1.70711L20.2929 0.292893L10.2929 10.2929L11.7071 11.7071Z"
37
+ fill="currentColor"
38
+ />
39
+ </svg>`;
40
+ const viewMoreTextTranslate = getDynamicSourceLocales({
41
+ val: setting?.viewMoreText,
42
+ uid: builderProps?.uid,
43
+ settingId: 'viewMoreText',
44
+ isLiquid: true,
45
+ pageContext,
46
+ translate: setting?.translate
47
+ });
48
+ const viewLessTextTranslate = getDynamicSourceLocales({
49
+ val: setting?.viewLessText,
50
+ uid: builderProps?.uid,
51
+ settingId: 'viewLessText',
52
+ isLiquid: true,
53
+ pageContext,
54
+ translate: setting?.translate
55
+ });
5
56
  return template`
6
- ${Text({
7
- styles: setting,
57
+ <gp-collection-description data-id="${builderProps?.uid}" class="${advanced?.cssClass} gp-collection-description" gp-data='${JSON.stringify({
8
58
  setting: {
9
- ...setting,
10
- text: '{{ collection.description }}',
11
- excludeFlex: true
12
- }
13
- })}
59
+ lineClamp: setting?.lineClamp,
60
+ hasLineClamp: setting?.hasLineClamp,
61
+ viewMoreText: viewMoreTextTranslate,
62
+ viewLessText: viewLessTextTranslate,
63
+ enableViewMoreIcon: setting?.enableViewMoreIcon
64
+ },
65
+ defaultStyle,
66
+ collapseStyle
67
+ }).replaceAll("'", '&#039;')}'
68
+ view-more-text="${pageContext?.isPreviewing ? viewMoreTextTranslate : `{{${viewMoreTextTranslate}}}`}"
69
+ view-less-text="${pageContext?.isPreviewing ? viewLessTextTranslate : `{{${viewLessTextTranslate}}}`}"
70
+ >
71
+ <div></div>
72
+ <div
73
+ data-gp-text
74
+ class="${cls('gp-relative p-description-wrapper gp-p-description-text gp-break-words safari:[&_p]:gp-inline safari:[&_p]:after:gp-whitespace-pre', appendTypoClass, getGlobalColorClass('text', setting?.color), "data-[browser=safari]:after:gp-content-[' '] data-[browser=safari]:after:gp-absolute data-[browser=safari]:after:gp-left-0 data-[browser=safari]:after:gp-right-0 data-[browser=safari]:after:gp-bottom-0 data-[browser=safari]:after:gp-w-full data-[browser=safari]:after:gp-h-1/2 data-[browser=safari]:after:gp-bg-gradient-to-t data-[browser=safari]:after:gp-from-white")}"
75
+ data-gp-text
76
+ style="${collapseStyle}"
77
+ >
78
+ {{collection.description}}
79
+ </div>
80
+ {% if collection.description != blank -%}
81
+ <button
82
+ type="button"
83
+ class="p-description-show-more ${cls(appendTypoClass, getGlobalColorClass('text', setting?.showMoreColor), 'gp-mt-4 hover:gp-opacity-80 gp-transition-all gp-w-full')}"
84
+ style="${{
85
+ ...makeStyle({
86
+ tt: setting?.transform
87
+ }),
88
+ ...makeStyleResponsive('ta', setting?.textAlign),
89
+ ...appendTypoStyle,
90
+ ...getGlobalColorStyle(setting?.showMoreColor),
91
+ ...getDisplayCollapse(),
92
+ position: 'absolute',
93
+ visibility: 'hidden'
94
+ }}"
95
+ >
96
+ ${pageContext?.isPreviewing ? viewMoreTextTranslate : `{{${viewMoreTextTranslate}}}`}
97
+ ${setting?.enableViewMoreIcon ? moreIcon : ''}
98
+ </button>
99
+ {%- endif -%}
100
+ {% style %}
101
+ .p-description-wrapper.gp-p-description-text * {
102
+ color: inherit
103
+ }
104
+ {% endstyle %}
105
+ </gp-collection-description>
106
+ ${RenderIf(isLocalEnv, `<script ${getSettingPreloadData('class="gps-link" delay', 'src')}="{{ 'gp-collection-description.js' | asset_url }}" defer="defer"></script>`, `<script ${getSettingPreloadData('class="gps-link" delay', 'src')}="${baseAssetURL}/assets-v2/gp-collection-description.js?v={{ shop.metafields.GEMPAGES.ASSETS_VERSION }}" defer="defer"></script>`)}
14
107
  `;
15
108
  };
16
109
 
@@ -35,6 +35,59 @@ const config = {
35
35
  }
36
36
  ]
37
37
  },
38
+ {
39
+ id: 'hasLineClamp',
40
+ label: 'Enable View More',
41
+ type: 'toggle',
42
+ devices: {
43
+ desktop: {
44
+ default: true
45
+ }
46
+ }
47
+ },
48
+ {
49
+ id: 'lineClamp',
50
+ label: 'Maximum Row(s) To Show',
51
+ type: 'input:number',
52
+ min: 1,
53
+ hide: true,
54
+ devices: {
55
+ desktop: {
56
+ default: 12
57
+ }
58
+ }
59
+ },
60
+ {
61
+ id: 'viewMoreText',
62
+ label: 'View More Text',
63
+ type: 'input',
64
+ default: 'Show more',
65
+ hide: true
66
+ },
67
+ {
68
+ id: 'showMoreColor',
69
+ type: 'colorpicker',
70
+ default: 'text-1'
71
+ },
72
+ {
73
+ id: 'viewLessText',
74
+ label: 'View Less Text',
75
+ type: 'input',
76
+ default: 'Show less',
77
+ hide: true
78
+ },
79
+ {
80
+ id: 'enableViewMoreIcon',
81
+ label: 'Enable Icon',
82
+ type: 'toggle',
83
+ default: true,
84
+ hide: true
85
+ },
86
+ {
87
+ id: 'translate',
88
+ type: 'input',
89
+ default: 'viewLessText,viewMoreText'
90
+ },
38
91
  {
39
92
  id: 'textAlign',
40
93
  label: 'Align',
@@ -70,11 +123,86 @@ const config = {
70
123
  default: 'center'
71
124
  }
72
125
  }
126
+ },
127
+ {
128
+ id: 'color',
129
+ type: 'colorpicker',
130
+ default: 'text-1'
73
131
  }
74
132
  ]
75
133
  }
76
134
  ],
77
135
  ui: [
136
+ {
137
+ type: 'group',
138
+ label: {
139
+ en: ''
140
+ },
141
+ controls: [
142
+ {
143
+ type: 'control',
144
+ label: {
145
+ en: 'Show more'
146
+ },
147
+ options: {
148
+ label: 'large'
149
+ },
150
+ setting: {
151
+ id: 'hasLineClamp'
152
+ }
153
+ },
154
+ {
155
+ type: 'control',
156
+ label: {
157
+ en: 'Text color'
158
+ },
159
+ setting: {
160
+ id: 'showMoreColor'
161
+ },
162
+ condition: 'hasLineClamp == true'
163
+ },
164
+ {
165
+ type: 'control',
166
+ label: {
167
+ en: 'Max lines'
168
+ },
169
+ setting: {
170
+ id: 'lineClamp'
171
+ },
172
+ condition: 'hasLineClamp == true'
173
+ },
174
+ {
175
+ type: 'control',
176
+ label: {
177
+ en: 'Show more label'
178
+ },
179
+ setting: {
180
+ id: 'viewMoreText'
181
+ },
182
+ condition: 'hasLineClamp == true'
183
+ },
184
+ {
185
+ type: 'control',
186
+ label: {
187
+ en: 'Show less label'
188
+ },
189
+ setting: {
190
+ id: 'viewLessText'
191
+ },
192
+ condition: 'hasLineClamp == true'
193
+ },
194
+ {
195
+ type: 'control',
196
+ label: {
197
+ en: 'Icon'
198
+ },
199
+ setting: {
200
+ id: 'enableViewMoreIcon'
201
+ },
202
+ condition: 'hasLineClamp == true'
203
+ }
204
+ ]
205
+ },
78
206
  {
79
207
  label: {
80
208
  en: 'Text'
@@ -1,5 +1,5 @@
1
1
  const ELEMENT_Z_INDEX = {
2
- STICKY: 100000,
2
+ STICKY: 1000,
3
3
  DIALOG: 100001,
4
4
  CART_DRAWER: 100002,
5
5
  CART_DRAWER_CONFIRM_MODAL: 100003
@@ -2,10 +2,10 @@ import { makeStyleResponsive, makeWidth, composeAdvanceStyle, composeTypographyC
2
2
  import { getDynamicSourceLocales } from '../../../helpers.js';
3
3
 
4
4
  const FormTextarea = ({ setting, builderProps, className, builderAttrs, advanced, pageContext })=>{
5
- const { text, name, placeholder, required, width, fullWidth, typography } = setting ?? {};
5
+ const { text, name, placeholder, required, width, fullWidth, typography, translate } = setting ?? {};
6
6
  const textAreaWidth = makeStyleResponsive('w', makeWidth(width, fullWidth));
7
7
  const defaultName = name === '' || name === undefined ? 'contact[note]' : name;
8
- const { border, rounded, hasBoxShadow, boxShadow, pos, d, op, right, top, left, bottom, z, margin, padding, translate } = advanced ?? {};
8
+ const { border, rounded, hasBoxShadow, boxShadow, pos, d, op, right, top, left, bottom, z, margin, padding } = advanced ?? {};
9
9
  const spacingSetting = advanced?.['spacing-setting'];
10
10
  const inputStyle = composeAdvanceStyle({
11
11
  border,
@@ -2,7 +2,7 @@ import { template, cls, RenderIf, makeStyleResponsive } from '@gem-sdk/core';
2
2
  import { getImageSrc } from '../helpers/getSrcSet.js';
3
3
  import { createBlurDataURL } from './helpers.js';
4
4
 
5
- const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className, pictureClass, style, imagePlaceholder, enableLazyloadImage = true, ...props })=>{
5
+ const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className, pictureClass, style, imagePlaceholder, enableLazyLoadImage = true, pageContext, ...props })=>{
6
6
  const fallBackImage = 'https://cdn.shopify.com/s/assets/no-image-2048-5e88c1b20e087fb7bbe9a3771824e743c244f437e4f8ba93bbf7b11b53f7824c_large.gif';
7
7
  const srcDesktop = getImageSrc(srcSet?.desktop, 'desktop') || fallBackImage;
8
8
  const srcTablet = (getImageSrc(srcSet?.tablet, 'tablet') ?? getImageSrc(srcSet?.desktop, 'tablet')) || fallBackImage;
@@ -27,16 +27,17 @@ const AdaptiveImage = ({ srcSet, priority, alt, aspectRatio, layout, className,
27
27
  }}"
28
28
  />
29
29
  `, template`
30
- ${srcMobile ? `<source media="(max-width: 767px)" data-srcSet="${srcMobile}" srcset="${enableLazyloadImage ? imagePlaceholder?.['mobile'] ?? createBlurDataURL(srcSet?.mobile?.width ?? srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.mobile?.height ?? srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcMobile}" />` : ''}
31
- ${srcTablet ? `<source media="(max-width: 1024px)" data-srcSet="${srcTablet}" srcset="${enableLazyloadImage ? imagePlaceholder?.['tablet'] ?? createBlurDataURL(srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcTablet}" />` : ''}
30
+ ${srcMobile ? `<source media="(max-width: 767px)" data-srcSet="${srcMobile}" srcset="${enableLazyLoadImage ? imagePlaceholder?.['mobile'] ?? createBlurDataURL(srcSet?.mobile?.width ?? srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.mobile?.height ?? srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcMobile}" />` : ''}
31
+ ${srcTablet ? `<source media="(max-width: 1024px)" data-srcSet="${srcTablet}" srcset="${enableLazyLoadImage ? imagePlaceholder?.['tablet'] ?? createBlurDataURL(srcSet?.tablet?.width ?? srcSet?.desktop?.width ?? 0, srcSet?.tablet?.height ?? srcSet?.desktop?.height ?? 0) : srcTablet}" />` : ''}
32
32
  <img
33
33
  ${{
34
34
  ...props
35
35
  }}
36
36
  class="${cls(className, {
37
- gp_lazyload: enableLazyloadImage
37
+ gp_lazyload: enableLazyLoadImage,
38
+ gp_force_load: pageContext?.isOptimizePlan
38
39
  })}"
39
- src="${enableLazyloadImage ? imagePlaceholder?.['desktop'] ?? createBlurDataURL(srcSet?.desktop?.width ?? 0, srcSet?.desktop?.height ?? 0) : srcDesktop}"
40
+ src="${enableLazyLoadImage ? imagePlaceholder?.['desktop'] ?? createBlurDataURL(srcSet?.desktop?.width ?? 0, srcSet?.desktop?.height ?? 0) : srcDesktop}"
40
41
  data-src="${srcDesktop}"
41
42
  width="100%"
42
43
  alt="${alt}"
@@ -1,13 +1,16 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { makeStyleResponsive, getWidthByShapeGlobalSize, makeWidth, getHeightByShapeGlobalSize, cls, getStyleShadowState, handleConvertClassColor, getBorderStyle, getBorderRadiusStyle, getStyleShadow, getAspectRatioGlobalSize, getGlobalColorStateClass, getGlobalColorStateStyle, makeStyleState, getCornerCSSFromGlobal } from '@gem-sdk/core';
2
+ import { useCurrentDevice, makeStyleResponsive, getWidthByShapeGlobalSize, makeWidth, getHeightByShapeGlobalSize, cls, getStyleShadowState, handleConvertClassColor, getBorderStyle, getBorderRadiusStyle, getStyleShadow, getAspectRatioGlobalSize, getGlobalColorStateClass, getGlobalColorStateStyle, makeStyleState, getCornerCSSFromGlobal } from '@gem-sdk/core';
3
3
  import Link from '../../link/components/Link.js';
4
4
  import AdaptiveImage from './AdaptiveImage.js';
5
5
  import NextImage from './NextImage.js';
6
6
  import { composeAspectRatio } from './helpers.js';
7
+ import NoDataImage from './NoDataImage.js';
8
+ import { useMemo } from 'react';
7
9
 
8
10
  const Image = ({ styles, className, setting, builderAttrs, builderProps, style, children, onClick, onLoad })=>{
9
11
  const { image, imageLink, srcSet, isNotLazyload } = setting ?? {};
10
12
  const { customAspectRadio } = styles ?? {};
13
+ const currentDevice = useCurrentDevice();
11
14
  const { shape } = styles ?? {};
12
15
  const WrapLink = imageLink?.link ? Link : 'div';
13
16
  const opacity = {
@@ -52,6 +55,18 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
52
55
  custom: customAspectRadio
53
56
  })
54
57
  };
58
+ const isShowNoDataState = useMemo(()=>{
59
+ if (setting?.disableNoDataState) return false;
60
+ if (currentDevice === 'mobile') return !setting?.srcSet?.mobile?.src && !setting?.srcSet?.tablet?.src && !setting?.srcSet?.desktop?.src;
61
+ if (currentDevice === 'tablet') return !setting?.srcSet?.tablet?.src && !setting?.srcSet?.desktop?.src;
62
+ return !setting?.srcSet?.desktop?.src;
63
+ }, [
64
+ currentDevice,
65
+ setting?.disableNoDataState,
66
+ setting?.srcSet?.desktop?.src,
67
+ setting?.srcSet?.mobile?.src,
68
+ setting?.srcSet?.tablet?.src
69
+ ]);
55
70
  return /*#__PURE__*/ jsxs("div", {
56
71
  ...builderAttrs,
57
72
  "data-id": builderProps?.uid,
@@ -76,14 +91,18 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
76
91
  style: {
77
92
  ...getStyleShadowState(styles?.boxShadowImg, 'box-shadow', styles?.hasBoxShadowImg),
78
93
  borderRadius: 'inherit',
79
- overflow: 'hidden',
80
94
  ...makeStyleResponsive('jc', styles?.align)
81
95
  },
82
96
  children: [
83
- setting?.isAdaptive ? /*#__PURE__*/ jsx(AdaptiveImage, {
97
+ isShowNoDataState ? /*#__PURE__*/ jsx(NoDataImage, {
98
+ style: {
99
+ ...imageWidth,
100
+ ...imageHeight
101
+ }
102
+ }) : setting?.isAdaptive ? /*#__PURE__*/ jsx(AdaptiveImage, {
84
103
  srcSet: setting.srcSet,
85
104
  pictureClass: "gp-contents",
86
- className: cls(className, 'gp-w-full gp-max-w-full', handleConvertClassColor(styles?.borderImg)),
105
+ className: cls(className, 'gp-inline-block gp-w-full gp-max-w-full', handleConvertClassColor(styles?.borderImg)),
87
106
  alt: setting.alt,
88
107
  style: {
89
108
  ...imageWidth,
@@ -3,7 +3,7 @@ import AdaptiveImage from './AdaptiveImage.liquid.js';
3
3
  import NextImage from './NextImage.liquid.js';
4
4
  import { getInsertLinkData } from '../../helpers.js';
5
5
 
6
- const Image = ({ styles, className, setting, builderAttrs, builderProps, style, advanced, enableLazyloadImage = true })=>{
6
+ const Image = ({ styles, className, setting, builderAttrs, builderProps, style, advanced, enableLazyLoadImage = true, pageContext })=>{
7
7
  const { imageLink, isNotLazyload } = setting ?? {};
8
8
  const { shape } = styles ?? {};
9
9
  const { Wrap: WrapLink, urlData } = getInsertLinkData('div', imageLink);
@@ -30,7 +30,7 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
30
30
  }}
31
31
  data-id="${builderProps?.uid}"
32
32
  role="presentation"
33
- class="${cls('gp-group/image', builderProps?.uid, advanced?.cssClass)}"
33
+ class="${cls('gp-group/image', builderProps?.uid, advanced?.cssClass, `force-publish-${new Date().getTime()}`)}"
34
34
  style="${{
35
35
  ...style,
36
36
  ...makeStyleResponsive('ta', styles?.align)
@@ -46,7 +46,6 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
46
46
  style="${{
47
47
  ...getStyleShadowState(styles?.boxShadowImg, 'box-shadow', styles?.hasBoxShadowImg),
48
48
  'border-radius': 'inherit',
49
- overflow: 'hidden',
50
49
  ...makeStyleResponsive('jc', styles?.align)
51
50
  }}"
52
51
  >
@@ -73,7 +72,8 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
73
72
  aspectRatio: getAspectRatioGlobalSize(styles?.shape),
74
73
  layout: styles?.objectFit,
75
74
  priority: setting?.priority,
76
- enableLazyloadImage
75
+ enableLazyLoadImage,
76
+ pageContext
77
77
  }) : NextImage({
78
78
  ...setting?.image,
79
79
  priority: setting?.priority,
@@ -102,7 +102,8 @@ const Image = ({ styles, className, setting, builderAttrs, builderProps, style,
102
102
  layout: styles?.objectFit
103
103
  },
104
104
  isNotLazyload,
105
- enableLazyloadImage
105
+ enableLazyLoadImage,
106
+ pageContext
106
107
  })}
107
108
  </${WrapLink}>
108
109
  </div>`;
@@ -3,7 +3,7 @@ import { getNewBackupFileKey, getImageSrc, getSrcSet } from '../helpers/getSrcSe
3
3
  import { DEVICES } from '../../product/components/ProductVariants/index.js';
4
4
  import { createBlurDataURL } from './helpers.js';
5
5
 
6
- 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 })=>{
6
+ 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 })=>{
7
7
  const { aspectRatio, layout, qualityPercent, qualityType } = setting ?? {};
8
8
  const newBackupFilekey = backupFileKey ? getNewBackupFileKey(backupFileKey ?? '', src) : '';
9
9
  const srcImage = srcIsLiquidCode ? baseSrc : getImageSrc({
@@ -93,12 +93,13 @@ const NextImage = ({ setting, src = 'https://ucarecdn.com/465c7cbb-f087-4d1d-8f0
93
93
  ${customAttrs}
94
94
  draggable="false"
95
95
  class="${cls(className, {
96
- gp_lazyload: !customLazyload && enableLazyloadImage
96
+ gp_lazyload: !customLazyload && enableLazyLoadImage,
97
+ gp_force_load: pageContext?.isOptimizePlan
97
98
  })}"
98
99
  ${{
99
100
  'data-src': srcImage,
100
101
  'data-srcset': srcSetImg,
101
- src: enableLazyloadImage ? imagePlaceholder : srcImage,
102
+ src: enableLazyLoadImage ? imagePlaceholder : srcImage,
102
103
  width,
103
104
  height,
104
105
  alt,