@gem-sdk/pages 1.58.0-staging.43 → 1.60.8

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 (48) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +0 -1
  2. package/dist/cjs/components/ErrorFallback.js +0 -1
  3. package/dist/cjs/components/FacebookPixel.js +9 -7
  4. package/dist/cjs/components/FooterForPostPurchase.js +0 -1
  5. package/dist/cjs/components/GoogleAnalytic.js +10 -9
  6. package/dist/cjs/components/TikTokPixel.js +0 -1
  7. package/dist/cjs/components/builder/Body.js +0 -1
  8. package/dist/cjs/components/builder/Footer.js +0 -1
  9. package/dist/cjs/components/builder/Header.js +0 -1
  10. package/dist/cjs/components/builder/InteractionSelectOnPageHeader.js +3 -9
  11. package/dist/cjs/components/builder/PopupManager.js +0 -1
  12. package/dist/cjs/components/builder/SwitchView.js +0 -1
  13. package/dist/cjs/components/builder/Toolbar.js +0 -1
  14. package/dist/cjs/components/builder/Toolbox.js +0 -1
  15. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +0 -1
  16. package/dist/cjs/components/image-to-layout/DropElement.js +0 -1
  17. package/dist/cjs/components/image-to-layout/ImageToLayout.js +0 -1
  18. package/dist/cjs/index.js +12 -12
  19. package/dist/cjs/layouts/main.js +0 -1
  20. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +0 -1
  21. package/dist/cjs/libs/api/get-static-page-props-preview.js +15 -18
  22. package/dist/cjs/libs/hooks/use-tracking-view.js +0 -1
  23. package/dist/cjs/libs/parse-html.js +14 -21
  24. package/dist/esm/components/ErrorBoundary.js +0 -1
  25. package/dist/esm/components/ErrorFallback.js +0 -1
  26. package/dist/esm/components/FacebookPixel.js +9 -7
  27. package/dist/esm/components/FooterForPostPurchase.js +0 -1
  28. package/dist/esm/components/GoogleAnalytic.js +10 -9
  29. package/dist/esm/components/TikTokPixel.js +0 -1
  30. package/dist/esm/components/builder/Body.js +0 -1
  31. package/dist/esm/components/builder/Footer.js +0 -1
  32. package/dist/esm/components/builder/Header.js +0 -1
  33. package/dist/esm/components/builder/InteractionSelectOnPageHeader.js +3 -9
  34. package/dist/esm/components/builder/PopupManager.js +0 -1
  35. package/dist/esm/components/builder/SwitchView.js +0 -1
  36. package/dist/esm/components/builder/Toolbar.js +0 -1
  37. package/dist/esm/components/builder/Toolbox.js +0 -1
  38. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +0 -1
  39. package/dist/esm/components/image-to-layout/DropElement.js +0 -1
  40. package/dist/esm/components/image-to-layout/ImageToLayout.js +0 -1
  41. package/dist/esm/index.js +6 -6
  42. package/dist/esm/layouts/main.js +0 -1
  43. package/dist/esm/libs/api/get-post-purchase-props-preview.js +0 -1
  44. package/dist/esm/libs/api/get-static-page-props-preview.js +16 -19
  45. package/dist/esm/libs/hooks/use-tracking-view.js +0 -1
  46. package/dist/esm/libs/parse-html.js +14 -21
  47. package/dist/types/index.d.ts +31 -31
  48. package/package.json +5 -5
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
@@ -1,23 +1,25 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
5
4
  var core = require('@gem-sdk/core');
6
- var navigation = require('next/navigation');
5
+ var router = require('next/router');
7
6
  var Script = require('next/script');
8
7
  var react = require('react');
9
8
 
10
9
  const FacebookPixel = ({ pixelId })=>{
11
- const pathName = navigation.usePathname();
12
- const searchParams = navigation.useSearchParams();
10
+ const router$1 = router.useRouter();
13
11
  react.useEffect(()=>{
14
12
  const handleRouteChange = ()=>{
15
13
  core.fpixel.pageview();
16
14
  };
17
- handleRouteChange();
15
+ router$1.events.on('routeChangeComplete', handleRouteChange);
16
+ router$1.events.on('hashChangeComplete', handleRouteChange);
17
+ return ()=>{
18
+ router$1.events.off('routeChangeComplete', handleRouteChange);
19
+ router$1.events.off('hashChangeComplete', handleRouteChange);
20
+ };
18
21
  }, [
19
- pathName,
20
- searchParams
22
+ router$1.events
21
23
  ]);
22
24
  if (!pixelId) return null;
23
25
  return /*#__PURE__*/ jsxRuntime.jsx(Script, {
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,28 +1,29 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
5
4
  var core = require('@gem-sdk/core');
6
- var navigation = require('next/navigation');
5
+ var router = require('next/router');
7
6
  var Script = require('next/script');
8
7
  var react = require('react');
9
8
 
10
9
  const GoogleAnalytic = ({ trackingId })=>{
11
- const searchParams = navigation.useSearchParams();
12
- const pathName = navigation.usePathname();
10
+ const router$1 = router.useRouter();
13
11
  react.useEffect(()=>{
14
- const url = pathName + searchParams.toString();
15
12
  const handleRouteChange = (url)=>{
16
13
  core.gtag.pageview(url, trackingId);
17
14
  };
18
- handleRouteChange(url);
15
+ router$1.events.on('routeChangeComplete', handleRouteChange);
16
+ router$1.events.on('hashChangeComplete', handleRouteChange);
17
+ return ()=>{
18
+ router$1.events.off('routeChangeComplete', handleRouteChange);
19
+ router$1.events.off('hashChangeComplete', handleRouteChange);
20
+ };
19
21
  }, [
20
22
  trackingId,
21
- pathName,
22
- searchParams
23
+ router$1.events
23
24
  ]);
24
25
  const handleOnReady = ()=>{
25
- core.gtag.pageview(pathName, trackingId);
26
+ core.gtag.pageview(router$1.pathname, trackingId);
26
27
  };
27
28
  if (!trackingId) return null;
28
29
  if (trackingId.startsWith('UA-')) return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -38,13 +37,8 @@ const InteractionSelectOnPageHeader = ()=>{
38
37
  }, [
39
38
  handleClickOutside
40
39
  ]);
41
- react.useEffect(()=>{
42
- setHoverOption(null);
43
- }, [
44
- selectType
45
- ]);
46
40
  const isShowOverlay = react.useMemo(()=>{
47
- return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE');
41
+ return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE') && settingType === 'TRIGGER';
48
42
  }, [
49
43
  hoverOption,
50
44
  selectType
@@ -93,7 +87,7 @@ const InteractionSelectOnPageHeader = ()=>{
93
87
  className: "gp-grow",
94
88
  children: title
95
89
  }),
96
- /*#__PURE__*/ jsxRuntime.jsx("div", {
90
+ settingType === 'TRIGGER' && /*#__PURE__*/ jsxRuntime.jsx("div", {
97
91
  className: "gp-w-[21px]",
98
92
  children: /*#__PURE__*/ jsxRuntime.jsx("svg", {
99
93
  width: "16",
@@ -111,7 +105,7 @@ const InteractionSelectOnPageHeader = ()=>{
111
105
  })
112
106
  ]
113
107
  }),
114
- openDropdown && /*#__PURE__*/ jsxRuntime.jsxs("div", {
108
+ openDropdown && settingType === 'TRIGGER' && /*#__PURE__*/ jsxRuntime.jsxs("div", {
115
109
  ref: popupRef,
116
110
  className: "gp-p-2 gp-flex gp-flex-col gp-absolute gp-top-[calc(100%_+_4px)] gp-w-[280px] gp-bg-[#151515] gp-rounded-xl gp-text-white",
117
111
  children: [
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var jsxRuntime = require('react/jsx-runtime');
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
package/dist/cjs/index.js CHANGED
@@ -18,6 +18,12 @@ var userAgent = require('./libs/helpers/user-agent.js');
18
18
  var normalize = require('./libs/helpers/normalize.js');
19
19
  var getFallback = require('./libs/helpers/get-fallback.js');
20
20
  var common = require('./libs/helpers/common.js');
21
+ var collectionDetail = require('./pages/collection-detail.js');
22
+ var preview = require('./pages/preview.js');
23
+ var productDetail = require('./pages/product-detail.js');
24
+ var _static = require('./pages/static.js');
25
+ var builder = require('./pages/builder.js');
26
+ var staticV2 = require('./pages/static-v2.js');
21
27
  var getStaticPaths = require('./libs/getStaticPaths.js');
22
28
  var genFonts = require('./libs/helpers/gen-fonts.js');
23
29
  var googleFonts = require('./libs/google-fonts.js');
@@ -29,12 +35,6 @@ var _500 = require('./pages/500.js');
29
35
  var GoogleAnalytic = require('./components/GoogleAnalytic.js');
30
36
  var FacebookPixel = require('./components/FacebookPixel.js');
31
37
  var TikTokPixel = require('./components/TikTokPixel.js');
32
- var collectionDetail = require('./pages/collection-detail.js');
33
- var preview = require('./pages/preview.js');
34
- var productDetail = require('./pages/product-detail.js');
35
- var _static = require('./pages/static.js');
36
- var builder = require('./pages/builder.js');
37
- var staticV2 = require('./pages/static-v2.js');
38
38
 
39
39
 
40
40
 
@@ -59,6 +59,12 @@ exports.normalizePageSectionResponseV2 = normalize.normalizePageSectionResponseV
59
59
  exports.parseBuilderTemplateV2 = normalize.parseBuilderTemplateV2;
60
60
  exports.getFallbackV2 = getFallback.getFallbackV2;
61
61
  exports.retryWithDelay = common.retryWithDelay;
62
+ exports.CollectionDetailPage = collectionDetail.default;
63
+ exports.PreviewPage = preview.PreviewPage;
64
+ exports.ProductDetailPage = productDetail.default;
65
+ exports.StaticPage = _static.default;
66
+ exports.BuilderPage = builder.BuilderPage;
67
+ exports.StaticPageV2 = staticV2.StaticPageV2;
62
68
  exports.getStaticPaths = getStaticPaths.getStaticPaths;
63
69
  exports.getFontFromGroupSetting = genFonts.getFontFromGroupSetting;
64
70
  exports.getFontsFromDataBuilder = genFonts.getFontsFromDataBuilder;
@@ -72,9 +78,3 @@ exports.Page500 = _500.Page500;
72
78
  exports.GoogleAnalytic = GoogleAnalytic.GoogleAnalytic;
73
79
  exports.FacebookPixel = FacebookPixel.FacebookPixel;
74
80
  exports.TikTokPixel = TikTokPixel.TikTokPixel;
75
- exports.CollectionDetailPage = collectionDetail.default;
76
- exports.PreviewPage = preview.PreviewPage;
77
- exports.ProductDetailPage = productDetail.default;
78
- exports.StaticPage = _static.default;
79
- exports.BuilderPage = builder.BuilderPage;
80
- exports.StaticPageV2 = staticV2.StaticPageV2;
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  Object.defineProperty(exports, '__esModule', { value: true });
@@ -253,7 +253,6 @@ const getPostPurchasePropsPreview = (fetcher, librarySaleFunnelID, storeFrontFet
253
253
  productOffers
254
254
  });
255
255
  } catch (err) {
256
- console.log('error', err);
257
256
  nextjs.captureException(err);
258
257
  throw err;
259
258
  }
@@ -9,7 +9,6 @@ var generateManifres = require('../helpers/generate-manifres.js');
9
9
  var getFallback = require('../helpers/get-fallback.js');
10
10
  var normalize = require('../helpers/normalize.js');
11
11
  var parseJson = require('../helpers/parse-json.js');
12
- var customFonts = require('../custom-fonts.js');
13
12
 
14
13
  const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
15
14
  try {
@@ -20,8 +19,9 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
20
19
  };
21
20
  const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
22
21
  fetcher([
23
- core.PreviewThemePageDocument,
24
- variables
22
+ core.PreviewPageDocument,
23
+ variables,
24
+ 'previewPage'
25
25
  ]),
26
26
  fetcher([
27
27
  core.StorePropertyDocument
@@ -33,21 +33,19 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
33
33
  if (theme.status === 'rejected') {
34
34
  throw new Error(theme.reason?.[0]);
35
35
  }
36
- const dataBuilder = theme.value.previewThemePage;
36
+ const dataBuilder = theme.value.previewPage;
37
37
  if (!dataBuilder) {
38
38
  throw new Error(`No data builder found for slug: /preview/${slug}`);
39
39
  }
40
- const themePageCustomFonts = dataBuilder.customFonts;
41
40
  const pageTemplate = normalize.parseBuilderTemplateV2(dataBuilder);
42
- const [elementFontStyle, fontStyle, fallback, customFonts$1] = await Promise.all([
41
+ const [elementFontStyle, fontStyle, fallback] = await Promise.all([
43
42
  googleFonts.getFontStyleFromPageTemplate(pageTemplate),
44
- googleFonts.getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
45
- getFallback.getFallbackV2(fetcher, pageTemplate),
46
- customFonts.getCustomFonts(themePageCustomFonts)
43
+ googleFonts.getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
44
+ getFallback.getFallbackV2(fetcher, pageTemplate)
47
45
  ]);
48
46
  const mobileOnly = dataBuilder.isMobile ?? false;
49
- const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
50
- const thumbnail = parseJson.parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
47
+ const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
48
+ const thumbnail = parseJson.parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
51
49
  const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
52
50
  const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
53
51
  const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
@@ -121,7 +119,7 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
121
119
  const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
122
120
  const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
123
121
  return parseJson.serializableJson({
124
- themeStyle: genCss.genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
122
+ themeStyle: genCss.genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
125
123
  fontStyle,
126
124
  elementFontStyle,
127
125
  builderData: pageTemplate,
@@ -137,12 +135,11 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
137
135
  swatches: parseJson.parseJson(shopData?.storeProperty?.swatchesConfig),
138
136
  seo,
139
137
  mobileOnly,
140
- gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
141
- facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
142
- tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
143
- customCodeHeader: dataBuilder.customCode?.header ?? null,
144
- customCodeBody: dataBuilder.customCode?.body ?? null,
145
- customFonts: customFonts$1
138
+ gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
139
+ facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
140
+ tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
141
+ customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
142
+ customCodeBody: dataBuilder.themePageCustomCode?.body ?? null
146
143
  });
147
144
  } catch (err) {
148
145
  nextjs.captureException(err);
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  'use strict';
3
2
 
4
3
  var core = require('@gem-sdk/core');
@@ -9,28 +9,21 @@ const parseHtml = (html, isHead)=>{
9
9
  try {
10
10
  return parse(html, {
11
11
  replace: (node)=>{
12
- if (node.type === 'script' && node instanceof parse.Element) {
13
- const child = node.children?.[0];
14
- if (child instanceof parse.Text) {
15
- if (isHead) return /*#__PURE__*/ jsxRuntime.jsx("script", {
16
- ...node.attribs,
17
- dangerouslySetInnerHTML: {
18
- __html: child.data
19
- }
20
- });
21
- else return /*#__PURE__*/ jsxRuntime.jsx(Script, {
22
- ...node.attribs,
23
- dangerouslySetInnerHTML: {
24
- __html: child.data
25
- }
26
- });
27
- } else {
28
- if (!isHead) {
29
- return /*#__PURE__*/ jsxRuntime.jsx(Script, {
30
- ...node.attribs
31
- });
12
+ if (node.type !== 'script' || !(node instanceof parse.Element)) return null;
13
+ const child = node.children?.[0];
14
+ if (!child) return null;
15
+ if (!(child instanceof parse.Text) && !isHead) return /*#__PURE__*/ jsxRuntime.jsx(Script, {
16
+ ...node.attribs
17
+ });
18
+ if (child instanceof parse.Text && isHead) {
19
+ return /*#__PURE__*/ jsxRuntime.jsx(Script, {
20
+ ...node.attribs,
21
+ type: "text/javascript",
22
+ strategy: isHead ? 'beforeInteractive' : 'afterInteractive',
23
+ dangerouslySetInnerHTML: {
24
+ __html: child.data
32
25
  }
33
- }
26
+ });
34
27
  }
35
28
  }
36
29
  });
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx } from 'react/jsx-runtime';
3
2
  import { Component } from 'react';
4
3
 
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, jsx } from 'react/jsx-runtime';
3
2
 
4
3
  const ErrorFallback = ({ error, resetErrorBoundary })=>{
@@ -1,21 +1,23 @@
1
- 'use client';
2
1
  import { jsx } from 'react/jsx-runtime';
3
2
  import { fpixel } from '@gem-sdk/core';
4
- import { usePathname, useSearchParams } from 'next/navigation';
3
+ import { useRouter } from 'next/router';
5
4
  import Script from 'next/script';
6
5
  import { useEffect } from 'react';
7
6
 
8
7
  const FacebookPixel = ({ pixelId })=>{
9
- const pathName = usePathname();
10
- const searchParams = useSearchParams();
8
+ const router = useRouter();
11
9
  useEffect(()=>{
12
10
  const handleRouteChange = ()=>{
13
11
  fpixel.pageview();
14
12
  };
15
- handleRouteChange();
13
+ router.events.on('routeChangeComplete', handleRouteChange);
14
+ router.events.on('hashChangeComplete', handleRouteChange);
15
+ return ()=>{
16
+ router.events.off('routeChangeComplete', handleRouteChange);
17
+ router.events.off('hashChangeComplete', handleRouteChange);
18
+ };
16
19
  }, [
17
- pathName,
18
- searchParams
20
+ router.events
19
21
  ]);
20
22
  if (!pixelId) return null;
21
23
  return /*#__PURE__*/ jsx(Script, {
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx, jsxs } from 'react/jsx-runtime';
3
2
  import { cls, makeStyleResponsive } from '@gem-sdk/core';
4
3
 
@@ -1,26 +1,27 @@
1
- 'use client';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
2
  import { gtag } from '@gem-sdk/core';
4
- import { useSearchParams, usePathname } from 'next/navigation';
3
+ import { useRouter } from 'next/router';
5
4
  import Script from 'next/script';
6
5
  import { useEffect } from 'react';
7
6
 
8
7
  const GoogleAnalytic = ({ trackingId })=>{
9
- const searchParams = useSearchParams();
10
- const pathName = usePathname();
8
+ const router = useRouter();
11
9
  useEffect(()=>{
12
- const url = pathName + searchParams.toString();
13
10
  const handleRouteChange = (url)=>{
14
11
  gtag.pageview(url, trackingId);
15
12
  };
16
- handleRouteChange(url);
13
+ router.events.on('routeChangeComplete', handleRouteChange);
14
+ router.events.on('hashChangeComplete', handleRouteChange);
15
+ return ()=>{
16
+ router.events.off('routeChangeComplete', handleRouteChange);
17
+ router.events.off('hashChangeComplete', handleRouteChange);
18
+ };
17
19
  }, [
18
20
  trackingId,
19
- pathName,
20
- searchParams
21
+ router.events
21
22
  ]);
22
23
  const handleOnReady = ()=>{
23
- gtag.pageview(pathName, trackingId);
24
+ gtag.pageview(router.pathname, trackingId);
24
25
  };
25
26
  if (!trackingId) return null;
26
27
  if (trackingId.startsWith('UA-')) return /*#__PURE__*/ jsxs(Fragment, {
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx } from 'react/jsx-runtime';
3
2
  import Script from 'next/script';
4
3
 
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, jsx } from 'react/jsx-runtime';
3
2
  import { useMemo } from 'react';
4
3
  import { useInteraction, cls, RenderPreview } from '@gem-sdk/core';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
3
2
  import { useShopStore, cls, makeStyleResponsive } from '@gem-sdk/core';
4
3
  import { useState, useEffect } from 'react';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
2
  import { useShopStore, usePageStore, cls, makeStyleResponsive } from '@gem-sdk/core';
4
3
  import Devices from './SwitchView.js';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
2
  import { usePageStore, useInteraction } from '@gem-sdk/core';
4
3
  import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
@@ -34,13 +33,8 @@ const InteractionSelectOnPageHeader = ()=>{
34
33
  }, [
35
34
  handleClickOutside
36
35
  ]);
37
- useEffect(()=>{
38
- setHoverOption(null);
39
- }, [
40
- selectType
41
- ]);
42
36
  const isShowOverlay = useMemo(()=>{
43
- return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE');
37
+ return hoverOption !== 'ELEMENT' && (selectType === 'PAGE' || selectType === 'ELEMENT' && hoverOption === 'PAGE') && settingType === 'TRIGGER';
44
38
  }, [
45
39
  hoverOption,
46
40
  selectType
@@ -89,7 +83,7 @@ const InteractionSelectOnPageHeader = ()=>{
89
83
  className: "gp-grow",
90
84
  children: title
91
85
  }),
92
- /*#__PURE__*/ jsx("div", {
86
+ settingType === 'TRIGGER' && /*#__PURE__*/ jsx("div", {
93
87
  className: "gp-w-[21px]",
94
88
  children: /*#__PURE__*/ jsx("svg", {
95
89
  width: "16",
@@ -107,7 +101,7 @@ const InteractionSelectOnPageHeader = ()=>{
107
101
  })
108
102
  ]
109
103
  }),
110
- openDropdown && /*#__PURE__*/ jsxs("div", {
104
+ openDropdown && settingType === 'TRIGGER' && /*#__PURE__*/ jsxs("div", {
111
105
  ref: popupRef,
112
106
  className: "gp-p-2 gp-flex gp-flex-col gp-absolute gp-top-[calc(100%_+_4px)] gp-w-[280px] gp-bg-[#151515] gp-rounded-xl gp-text-white",
113
107
  children: [
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx } from 'react/jsx-runtime';
3
2
  import { useBuilderPreviewStore, useModalStore, useInteraction, cls } from '@gem-sdk/core';
4
3
  import { memo, useMemo, useCallback, useEffect } from 'react';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
3
2
  import { useState, useCallback, useEffect, useRef } from 'react';
4
3
  import { devices } from './const.js';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx, Fragment } from 'react/jsx-runtime';
3
2
  import { memo, useRef, useCallback, useEffect } from 'react';
4
3
  import { getDOMElementParents } from './toolbar/utils/getDOMElementParents.js';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx } from 'react/jsx-runtime';
3
2
  import { useMatchMutate, useShopStore, usePageStore, useBuilderPreviewStore, useSectionStore, useModalStore } from '@gem-sdk/core';
4
3
  import { memo, useMemo, useCallback, useEffect } from 'react';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsx, jsxs } from 'react/jsx-runtime';
3
2
  import { useMemo } from 'react';
4
3
  import { useShopStore, useBuilderPreviewStore, makeStyleResponsive } from '@gem-sdk/core';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, jsx } from 'react/jsx-runtime';
3
2
 
4
3
  const DropElement = ()=>{
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
2
  import { useBuilderPreviewStore, cls } from '@gem-sdk/core';
4
3
  import { DropElement } from './DropElement.js';
package/dist/esm/index.js CHANGED
@@ -16,6 +16,12 @@ export { isBot } from './libs/helpers/user-agent.js';
16
16
  export { normalizePageSectionResponseV2, parseBuilderTemplateV2 } from './libs/helpers/normalize.js';
17
17
  export { getFallbackV2 } from './libs/helpers/get-fallback.js';
18
18
  export { retryWithDelay } from './libs/helpers/common.js';
19
+ export { default as CollectionDetailPage } from './pages/collection-detail.js';
20
+ export { PreviewPage } from './pages/preview.js';
21
+ export { default as ProductDetailPage } from './pages/product-detail.js';
22
+ export { default as StaticPage } from './pages/static.js';
23
+ export { BuilderPage } from './pages/builder.js';
24
+ export { StaticPageV2 } from './pages/static-v2.js';
19
25
  export { getStaticPaths } from './libs/getStaticPaths.js';
20
26
  export { getFontFromGroupSetting, getFontsFromDataBuilder } from './libs/helpers/gen-fonts.js';
21
27
  export { getFontFromGlobalStyle, getFonts } from './libs/google-fonts.js';
@@ -27,9 +33,3 @@ export { Page500 } from './pages/500.js';
27
33
  export { GoogleAnalytic } from './components/GoogleAnalytic.js';
28
34
  export { FacebookPixel } from './components/FacebookPixel.js';
29
35
  export { TikTokPixel } from './components/TikTokPixel.js';
30
- export { default as CollectionDetailPage } from './pages/collection-detail.js';
31
- export { PreviewPage } from './pages/preview.js';
32
- export { default as ProductDetailPage } from './pages/product-detail.js';
33
- export { default as StaticPage } from './pages/static.js';
34
- export { BuilderPage } from './pages/builder.js';
35
- export { StaticPageV2 } from './pages/static-v2.js';
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
2
  import { useShopStore, cls, AddOn } from '@gem-sdk/core';
4
3
  import { parseHtml } from '../libs/parse-html.js';
@@ -251,7 +251,6 @@ const getPostPurchasePropsPreview = (fetcher, librarySaleFunnelID, storeFrontFet
251
251
  productOffers
252
252
  });
253
253
  } catch (err) {
254
- console.log('error', err);
255
254
  captureException(err);
256
255
  throw err;
257
256
  }
@@ -1,4 +1,4 @@
1
- import { PreviewThemePageDocument, StorePropertyDocument } from '@gem-sdk/core';
1
+ import { PreviewPageDocument, StorePropertyDocument } from '@gem-sdk/core';
2
2
  import { ShopMetaDocument } from '@gem-sdk/adapter-shopify';
3
3
  import { captureException } from '@sentry/nextjs';
4
4
  import { getFontStyleFromPageTemplate, getFontFromGlobalStyle } from '../google-fonts.js';
@@ -7,7 +7,6 @@ import { generateManifest } from '../helpers/generate-manifres.js';
7
7
  import { getFallbackV2 } from '../helpers/get-fallback.js';
8
8
  import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
9
9
  import { parseJson, serializableJson } from '../helpers/parse-json.js';
10
- import { getCustomFonts } from '../custom-fonts.js';
11
10
 
12
11
  const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
13
12
  try {
@@ -18,8 +17,9 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
18
17
  };
19
18
  const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
20
19
  fetcher([
21
- PreviewThemePageDocument,
22
- variables
20
+ PreviewPageDocument,
21
+ variables,
22
+ 'previewPage'
23
23
  ]),
24
24
  fetcher([
25
25
  StorePropertyDocument
@@ -31,21 +31,19 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
31
31
  if (theme.status === 'rejected') {
32
32
  throw new Error(theme.reason?.[0]);
33
33
  }
34
- const dataBuilder = theme.value.previewThemePage;
34
+ const dataBuilder = theme.value.previewPage;
35
35
  if (!dataBuilder) {
36
36
  throw new Error(`No data builder found for slug: /preview/${slug}`);
37
37
  }
38
- const themePageCustomFonts = dataBuilder.customFonts;
39
38
  const pageTemplate = parseBuilderTemplateV2(dataBuilder);
40
- const [elementFontStyle, fontStyle, fallback, customFonts] = await Promise.all([
39
+ const [elementFontStyle, fontStyle, fallback] = await Promise.all([
41
40
  getFontStyleFromPageTemplate(pageTemplate),
42
- getFontFromGlobalStyle(dataBuilder?.themeStyle?.data),
43
- getFallbackV2(fetcher, pageTemplate),
44
- getCustomFonts(themePageCustomFonts)
41
+ getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
42
+ getFallbackV2(fetcher, pageTemplate)
45
43
  ]);
46
44
  const mobileOnly = dataBuilder.isMobile ?? false;
47
- const description = dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
48
- const thumbnail = parseJson(dataBuilder?.dataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
45
+ const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
46
+ const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
49
47
  const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
50
48
  const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
51
49
  const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
@@ -119,7 +117,7 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
119
117
  const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
120
118
  const locale = !languageIsoCode || !countryIsoCode ? null : `${languageIsoCode}-${countryIsoCode}`;
121
119
  return serializableJson({
122
- themeStyle: genCSS(dataBuilder?.themeStyle?.data, mobileOnly),
120
+ themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
123
121
  fontStyle,
124
122
  elementFontStyle,
125
123
  builderData: pageTemplate,
@@ -135,12 +133,11 @@ const getStaticPagePropsPreview = (fetcher, shopifyFetcher)=>async (slug)=>{
135
133
  swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
136
134
  seo,
137
135
  mobileOnly,
138
- gaTrackingId: dataBuilder.analytic?.gaTrackingID ?? null,
139
- facebookPixelId: dataBuilder.analytic?.fbPixelID ?? null,
140
- tiktokPixelId: dataBuilder.analytic?.tiktokPixelID ?? null,
141
- customCodeHeader: dataBuilder.customCode?.header ?? null,
142
- customCodeBody: dataBuilder.customCode?.body ?? null,
143
- customFonts
136
+ gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
137
+ facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
138
+ tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
139
+ customCodeHeader: dataBuilder.themePageCustomCode?.header ?? null,
140
+ customCodeBody: dataBuilder.themePageCustomCode?.body ?? null
144
141
  });
145
142
  } catch (err) {
146
143
  captureException(err);
@@ -1,4 +1,3 @@
1
- 'use client';
2
1
  import { PageViewUpDocument } from '@gem-sdk/core';
3
2
  import { useCallback, useEffect } from 'react';
4
3
 
@@ -7,28 +7,21 @@ const parseHtml = (html, isHead)=>{
7
7
  try {
8
8
  return parse(html, {
9
9
  replace: (node)=>{
10
- if (node.type === 'script' && node instanceof Element) {
11
- const child = node.children?.[0];
12
- if (child instanceof Text) {
13
- if (isHead) return /*#__PURE__*/ jsx("script", {
14
- ...node.attribs,
15
- dangerouslySetInnerHTML: {
16
- __html: child.data
17
- }
18
- });
19
- else return /*#__PURE__*/ jsx(Script, {
20
- ...node.attribs,
21
- dangerouslySetInnerHTML: {
22
- __html: child.data
23
- }
24
- });
25
- } else {
26
- if (!isHead) {
27
- return /*#__PURE__*/ jsx(Script, {
28
- ...node.attribs
29
- });
10
+ if (node.type !== 'script' || !(node instanceof Element)) return null;
11
+ const child = node.children?.[0];
12
+ if (!child) return null;
13
+ if (!(child instanceof Text) && !isHead) return /*#__PURE__*/ jsx(Script, {
14
+ ...node.attribs
15
+ });
16
+ if (child instanceof Text && isHead) {
17
+ return /*#__PURE__*/ jsx(Script, {
18
+ ...node.attribs,
19
+ type: "text/javascript",
20
+ strategy: isHead ? 'beforeInteractive' : 'afterInteractive',
21
+ dangerouslySetInnerHTML: {
22
+ __html: child.data
30
23
  }
31
- }
24
+ });
32
25
  }
33
26
  }
34
27
  });
@@ -157,6 +157,36 @@ type RetryConfig = {
157
157
  };
158
158
  declare const retryWithDelay: <T = unknown>(fn: () => T, config?: RetryConfig) => Promise<T>;
159
159
 
160
+ type PreviewPageProps = {
161
+ components: Record<string, React.ComponentType<any>>;
162
+ pageType: ShopType.PublishedThemePageType;
163
+ };
164
+ declare const PreviewPage: React.FC<PreviewPageProps>;
165
+
166
+ type StaticPageProps = PageBuilderProps;
167
+ declare const StaticPage: React.FC<StaticPageProps & AdditionalPageBuilderProps>;
168
+
169
+ type BuilderPageProps = {
170
+ components: Record<string, React.ComponentType<any>>;
171
+ seo?: NextSeoProps;
172
+ themeStyle?: string | null;
173
+ fontStyle?: string | null;
174
+ header?: BuilderState;
175
+ footer?: BuilderState;
176
+ sectionData?: Record<string, SectionData$1>;
177
+ storefrontToken?: string | null;
178
+ storefrontHandle?: string | null;
179
+ shopToken?: string | null;
180
+ mode?: RenderMode;
181
+ pageType: ShopType.PublishedThemePageType;
182
+ editorImageToLayout?: boolean;
183
+ isThemeSectionEditor?: boolean;
184
+ hiddenToolbar?: boolean;
185
+ pageName: string;
186
+ isOriginTemplate?: boolean;
187
+ };
188
+ declare const BuilderPage: React.FC<BuilderPageProps>;
189
+
160
190
  declare const getStaticPaths: GetStaticPaths;
161
191
 
162
192
  type TypographyV2FontFamilyType = 'google' | 'custom' | 'theme' | 'bunny';
@@ -227,34 +257,4 @@ type Props = {
227
257
  };
228
258
  declare const TikTokPixel: ({ pixelId }: Props) => react_jsx_runtime.JSX.Element | null;
229
259
 
230
- type PreviewPageProps = {
231
- components: Record<string, React.ComponentType<any>>;
232
- pageType: ShopType.PublishedThemePageType;
233
- };
234
- declare const PreviewPage: React.FC<PreviewPageProps>;
235
-
236
- type StaticPageProps = PageBuilderProps;
237
- declare const StaticPage: React.FC<StaticPageProps & AdditionalPageBuilderProps>;
238
-
239
- type BuilderPageProps = {
240
- components: Record<string, React.ComponentType<any>>;
241
- seo?: NextSeoProps;
242
- themeStyle?: string | null;
243
- fontStyle?: string | null;
244
- header?: BuilderState;
245
- footer?: BuilderState;
246
- sectionData?: Record<string, SectionData$1>;
247
- storefrontToken?: string | null;
248
- storefrontHandle?: string | null;
249
- shopToken?: string | null;
250
- mode?: RenderMode;
251
- pageType: ShopType.PublishedThemePageType;
252
- editorImageToLayout?: boolean;
253
- isThemeSectionEditor?: boolean;
254
- hiddenToolbar?: boolean;
255
- pageName: string;
256
- isOriginTemplate?: boolean;
257
- };
258
- declare const BuilderPage: React.FC<BuilderPageProps>;
259
-
260
- export { AppPropsWithLayout, BuilderPage, CollectionDetailPage, CollectionPageProps, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PageBuilderPropsV2, PreviewPage, ProductDetailPage, ProductPageProps, StaticPage, StaticPageProps, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, genCSS, getBuilderProps, getCollectionProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
260
+ export { AppPropsWithLayout, BuilderPage, CollectionDetailPage, CollectionPageProps, ErrorBoundary, ErrorFallback, FacebookPixel, GoogleAnalytic, NextPageWithLayout, Page404, Page500, PageBuilderProps, PreviewPage, ProductDetailPage, ProductPageProps, StaticPage, StaticPageProps, StaticPagePropsV2, StaticPageV2, TikTokPixel, createAppAPIFetcher, createFetcher, createShopifyFetcher, genCSS, getBuilderProps, getCollectionProps, getFallbackV2, getFontFromGlobalStyle, getFontFromGroupSetting, getFonts, getFontsFromDataBuilder, getHomePageProps, getHomePagePropsV2, getLayout, getPostPurchasePropsPreview, getPreviewProps, getProductProps, getStaticPagePropsPreview, getStaticPagePropsV2, getStaticPaths, getStorefrontApi, isBot, normalizePageSectionResponseV2, parseBuilderTemplateV2, retryWithDelay, usePagePreview, useTrackingView };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gem-sdk/pages",
3
- "version": "1.58.0-staging.43",
3
+ "version": "1.60.8",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "main": "dist/cjs/index.js",
@@ -26,10 +26,10 @@
26
26
  "next": "latest"
27
27
  },
28
28
  "devDependencies": {
29
- "@gem-sdk/core": "1.58.0-staging.39",
30
- "@gem-sdk/plugin-cookie-bar": "1.58.0-staging.25",
31
- "@gem-sdk/plugin-quick-view": "1.58.0-staging.25",
32
- "@gem-sdk/plugin-sticky-add-to-cart": "1.58.0-staging.25"
29
+ "@gem-sdk/core": "1.60.7",
30
+ "@gem-sdk/plugin-cookie-bar": "1.58.0",
31
+ "@gem-sdk/plugin-quick-view": "1.58.0",
32
+ "@gem-sdk/plugin-sticky-add-to-cart": "1.58.0"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "next": ">=13"