@gem-sdk/pages 1.5.14 → 1.5.27

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 (80) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +32 -24
  2. package/dist/cjs/components/ErrorFallback.js +19 -2
  3. package/dist/cjs/components/FacebookPixel.js +25 -20
  4. package/dist/cjs/components/Footer.js +462 -0
  5. package/dist/cjs/components/GoogleAnalytic.js +49 -23
  6. package/dist/cjs/components/Header.js +211 -0
  7. package/dist/cjs/components/TikTokPixel.js +9 -6
  8. package/dist/cjs/components/builder/Toolbox.js +215 -188
  9. package/dist/cjs/layouts/main.js +19 -5
  10. package/dist/cjs/libs/api/get-builder-props.js +31 -24
  11. package/dist/cjs/libs/api/get-collection-props.js +59 -55
  12. package/dist/cjs/libs/api/get-home-page-props-v2.js +126 -114
  13. package/dist/cjs/libs/api/get-home-page-props.js +133 -123
  14. package/dist/cjs/libs/api/get-preview-props.js +10 -10
  15. package/dist/cjs/libs/api/get-product-props.js +64 -62
  16. package/dist/cjs/libs/api/get-static-page-props-preview.js +133 -121
  17. package/dist/cjs/libs/api/get-static-page-props-v2.js +131 -119
  18. package/dist/cjs/libs/api/get-static-page-props.js +135 -120
  19. package/dist/cjs/libs/fetcher.js +59 -63
  20. package/dist/cjs/libs/get-layout.js +5 -2
  21. package/dist/cjs/libs/get-storefront-api.js +7 -7
  22. package/dist/cjs/libs/getStaticPaths.js +5 -5
  23. package/dist/cjs/libs/google-fonts.js +54 -61
  24. package/dist/cjs/libs/helpers/gen-css.js +103 -94
  25. package/dist/cjs/libs/helpers/generate-manifres.js +1 -1
  26. package/dist/cjs/libs/helpers/get-fallback.js +24 -22
  27. package/dist/cjs/libs/helpers/normalize.js +82 -80
  28. package/dist/cjs/libs/helpers/parse-json.js +10 -12
  29. package/dist/cjs/libs/helpers/user-agent.js +2 -2
  30. package/dist/cjs/libs/hooks/use-tracking-view.js +36 -31
  31. package/dist/cjs/libs/parse-html.js +33 -26
  32. package/dist/cjs/pages/404.js +34 -2
  33. package/dist/cjs/pages/500.js +63 -8
  34. package/dist/cjs/pages/builder.js +69 -14
  35. package/dist/cjs/pages/collection-detail.js +48 -7
  36. package/dist/cjs/pages/preview.js +18 -12
  37. package/dist/cjs/pages/product-detail.js +53 -7
  38. package/dist/cjs/pages/static-v2.js +62 -7
  39. package/dist/cjs/pages/static.js +60 -6
  40. package/dist/esm/components/ErrorBoundary.js +32 -24
  41. package/dist/esm/components/ErrorFallback.js +19 -2
  42. package/dist/esm/components/FacebookPixel.js +25 -20
  43. package/dist/esm/components/Footer.js +458 -0
  44. package/dist/esm/components/GoogleAnalytic.js +49 -23
  45. package/dist/esm/components/Header.js +207 -0
  46. package/dist/esm/components/TikTokPixel.js +9 -6
  47. package/dist/esm/components/builder/Toolbox.js +217 -190
  48. package/dist/esm/layouts/main.js +19 -5
  49. package/dist/esm/libs/api/get-builder-props.js +31 -24
  50. package/dist/esm/libs/api/get-collection-props.js +59 -55
  51. package/dist/esm/libs/api/get-home-page-props-v2.js +126 -114
  52. package/dist/esm/libs/api/get-home-page-props.js +133 -123
  53. package/dist/esm/libs/api/get-preview-props.js +10 -10
  54. package/dist/esm/libs/api/get-product-props.js +64 -62
  55. package/dist/esm/libs/api/get-static-page-props-preview.js +133 -121
  56. package/dist/esm/libs/api/get-static-page-props-v2.js +131 -119
  57. package/dist/esm/libs/api/get-static-page-props.js +135 -120
  58. package/dist/esm/libs/fetcher.js +59 -63
  59. package/dist/esm/libs/get-layout.js +5 -2
  60. package/dist/esm/libs/get-storefront-api.js +7 -7
  61. package/dist/esm/libs/getStaticPaths.js +5 -5
  62. package/dist/esm/libs/google-fonts.js +54 -61
  63. package/dist/esm/libs/helpers/gen-css.js +103 -94
  64. package/dist/esm/libs/helpers/generate-manifres.js +1 -1
  65. package/dist/esm/libs/helpers/get-fallback.js +24 -22
  66. package/dist/esm/libs/helpers/normalize.js +82 -80
  67. package/dist/esm/libs/helpers/parse-json.js +10 -12
  68. package/dist/esm/libs/helpers/user-agent.js +2 -2
  69. package/dist/esm/libs/hooks/use-tracking-view.js +36 -31
  70. package/dist/esm/libs/parse-html.js +33 -26
  71. package/dist/esm/pages/404.js +34 -2
  72. package/dist/esm/pages/500.js +63 -8
  73. package/dist/esm/pages/builder.js +69 -14
  74. package/dist/esm/pages/collection-detail.js +48 -7
  75. package/dist/esm/pages/preview.js +18 -12
  76. package/dist/esm/pages/product-detail.js +53 -7
  77. package/dist/esm/pages/static-v2.js +62 -7
  78. package/dist/esm/pages/static.js +60 -6
  79. package/dist/types/index.d.ts +2 -0
  80. package/package.json +1 -1
@@ -8,119 +8,131 @@ import { parseBuilderTemplateV2 } from '../helpers/normalize.js';
8
8
  import { parseJson, serializableJson } from '../helpers/parse-json.js';
9
9
  import { captureException } from '@sentry/nextjs';
10
10
 
11
- const getHomePagePropsV2 = (fetcher, shopifyFetcher) => async () => {
12
- try {
13
- const variables = {
14
- slugType: 'STATIC',
15
- };
16
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
17
- fetcher([
18
- PublishedThemePagesDocument,
19
- variables,
20
- ]),
21
- fetcher([StorePropertyDocument]),
22
- shopifyFetcher([ShopMetaDocument]),
23
- ]);
24
- if (theme.status === 'rejected') {
25
- throw new Error(theme.reason?.[0]);
26
- }
27
- const dataBuilder = theme.value?.publishedThemePages?.[0];
28
- if (!dataBuilder) {
29
- throw new Error(`No data builder found for Home page`);
30
- }
31
- const homeTemplate = parseBuilderTemplateV2(dataBuilder);
32
- const [fontStyle, fallback] = await Promise.all([
33
- getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
34
- getFallbackV2(fetcher, homeTemplate),
35
- ]);
36
- const mobileOnly = dataBuilder.isMobile ?? false;
37
- const description = dataBuilder?.themePageDataSEO?.find((item) => item?.key === 'global-meta-description')?.value;
38
- const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item) => item?.key === 'global-meta-thumbnail')?.value);
39
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
40
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
41
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
42
- const seo = {
43
- defaultTitle: shopMeta?.shop.name,
44
- title: dataBuilder?.name ?? 'Home',
45
- description: description ?? shopMeta?.shop.description,
46
- openGraph: {
47
- site_name: shopMeta?.shop.name,
48
- locale: shopMeta?.localization.country.isoCode,
49
- title: dataBuilder?.name ?? shopMeta?.shop.name,
50
- description: description ?? shopMeta?.shop.description,
51
- images: thumbnail ? [thumbnail] : [],
52
- },
53
- additionalMetaTags: [
54
- {
55
- name: 'theme-color',
56
- content: '#000000',
57
- },
58
- ],
59
- canonical: `https://${shopData?.storeProperty?.primaryDomain}/`,
60
- additionalLinkTags: [
61
- {
62
- rel: 'icon',
63
- sizes: '32x32',
64
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`,
65
- },
66
- {
67
- rel: 'icon',
68
- sizes: '16x16',
69
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`,
70
- },
71
- {
72
- rel: 'apple-touch-icon',
73
- sizes: '180x180',
74
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`,
75
- },
76
- {
77
- rel: 'manifest',
78
- href: generateManifest({
79
- theme_color: '#000000',
80
- background_color: '#ffffff',
81
- display: 'standalone',
82
- scope: '/',
83
- start_url: '/',
84
- name: shopMeta?.shop.name,
85
- short_name: shopMeta?.shop.name,
86
- description: shopMeta?.shop.description,
87
- icons: [
88
- {
89
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
90
- sizes: '192x192',
91
- type: 'image/png',
92
- purpose: 'any maskable',
93
- },
94
- {
95
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
96
- sizes: '512x512',
97
- type: 'image/png',
98
- },
99
- ],
100
- }),
101
- },
102
- ],
103
- };
104
- return serializableJson({
105
- themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
106
- fontStyle,
107
- builderData: homeTemplate,
108
- swr: { fallback },
109
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
110
- locale: shopMeta?.localization.country.isoCode ?? null,
111
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
112
- seo,
113
- mobileOnly,
114
- gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
115
- facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
116
- tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
117
- pageHandle: dataBuilder.handle ?? null,
118
- });
119
- }
120
- catch (err) {
121
- captureException(err);
122
- throw err;
123
- }
124
- };
11
+ const getHomePagePropsV2 = (fetcher, shopifyFetcher)=>async ()=>{
12
+ try {
13
+ const variables = {
14
+ slugType: 'STATIC'
15
+ };
16
+ const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
17
+ fetcher([
18
+ PublishedThemePagesDocument,
19
+ variables
20
+ ]),
21
+ fetcher([
22
+ StorePropertyDocument
23
+ ]),
24
+ shopifyFetcher([
25
+ ShopMetaDocument
26
+ ])
27
+ ]);
28
+ if (theme.status === 'rejected') {
29
+ throw new Error(theme.reason?.[0]);
30
+ }
31
+ const dataBuilder = theme.value?.publishedThemePages?.[0];
32
+ if (!dataBuilder) {
33
+ throw new Error(`No data builder found for Home page`);
34
+ }
35
+ const homeTemplate = parseBuilderTemplateV2(dataBuilder);
36
+ const [fontStyle, fallback] = await Promise.all([
37
+ getFontFromGlobalStyle(dataBuilder?.pageStyle?.data),
38
+ getFallbackV2(fetcher, homeTemplate)
39
+ ]);
40
+ const mobileOnly = dataBuilder.isMobile ?? false;
41
+ const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
42
+ const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
43
+ const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
44
+ const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
45
+ const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
46
+ const seo = {
47
+ defaultTitle: shopMeta?.shop.name,
48
+ title: dataBuilder?.name ?? 'Home',
49
+ description: description ?? shopMeta?.shop.description,
50
+ openGraph: {
51
+ site_name: shopMeta?.shop.name,
52
+ locale: shopMeta?.localization.country.isoCode,
53
+ title: dataBuilder?.name ?? shopMeta?.shop.name,
54
+ description: description ?? shopMeta?.shop.description,
55
+ images: thumbnail ? [
56
+ thumbnail
57
+ ] : []
58
+ },
59
+ additionalMetaTags: [
60
+ {
61
+ name: 'theme-color',
62
+ content: '#000000'
63
+ }
64
+ ],
65
+ canonical: `https://${shopData?.storeProperty?.primaryDomain}/`,
66
+ additionalLinkTags: [
67
+ {
68
+ rel: 'icon',
69
+ sizes: '32x32',
70
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
71
+ },
72
+ {
73
+ rel: 'icon',
74
+ sizes: '16x16',
75
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
76
+ },
77
+ {
78
+ rel: 'apple-touch-icon',
79
+ sizes: '180x180',
80
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
81
+ },
82
+ {
83
+ rel: 'manifest',
84
+ href: generateManifest({
85
+ theme_color: '#000000',
86
+ background_color: '#ffffff',
87
+ display: 'standalone',
88
+ scope: '/',
89
+ start_url: '/',
90
+ name: shopMeta?.shop.name,
91
+ short_name: shopMeta?.shop.name,
92
+ description: shopMeta?.shop.description,
93
+ icons: [
94
+ {
95
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
96
+ sizes: '192x192',
97
+ type: 'image/png',
98
+ purpose: 'any maskable'
99
+ },
100
+ {
101
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
102
+ sizes: '512x512',
103
+ type: 'image/png'
104
+ }
105
+ ]
106
+ })
107
+ }
108
+ ]
109
+ };
110
+ const languageIsoCode = shopMeta?.localization.language.isoCode ?? null;
111
+ const countryIsoCode = shopMeta?.localization.country.isoCode ?? null;
112
+ const locale = `${languageIsoCode}-${countryIsoCode}`;
113
+ return serializableJson({
114
+ themeStyle: genCSS(dataBuilder?.pageStyle?.data, mobileOnly),
115
+ fontStyle,
116
+ builderData: homeTemplate,
117
+ swr: {
118
+ fallback
119
+ },
120
+ currency: shopMeta?.localization.country.currency.isoCode ?? null,
121
+ languageIsoCode,
122
+ countryIsoCode,
123
+ locale,
124
+ swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
125
+ seo,
126
+ mobileOnly,
127
+ gaTrackingId: dataBuilder.themePageAnalytic?.gaTrackingID ?? null,
128
+ facebookPixelId: dataBuilder.themePageAnalytic?.fbPixelID ?? null,
129
+ tiktokPixelId: dataBuilder.themePageAnalytic?.tiktokPixelID ?? null,
130
+ pageHandle: dataBuilder.handle ?? null
131
+ });
132
+ } catch (err) {
133
+ captureException(err);
134
+ throw err;
135
+ }
136
+ };
125
137
 
126
138
  export { getHomePagePropsV2 };
@@ -6,128 +6,138 @@ import { generateManifest } from '../helpers/generate-manifres.js';
6
6
  import { parseBuilderTemplate } from '../helpers/normalize.js';
7
7
  import { parseJson, serializableJson } from '../helpers/parse-json.js';
8
8
 
9
- const getHomePageProps = (fetcher, shopifyFetcher) => async () => {
10
- const pageType = 'STATIC';
11
- const variables = {
12
- slugType: pageType,
13
- };
14
- // const theme = await fetcher<PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables>([
15
- // PublishedThemePagesDocument,
16
- // variables,
17
- // ]);
18
- const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
19
- fetcher([
20
- PublishedThemePagesDocument,
21
- variables,
22
- ]),
23
- fetcher([StorePropertyDocument]),
24
- shopifyFetcher([ShopMetaDocument]),
25
- ]);
26
- if (theme.status === 'rejected') {
27
- return {
28
- pageType,
29
- };
30
- }
31
- const dataBuilder = theme.value.publishedThemePages?.[0];
32
- const homeTemplate = parseBuilderTemplate(dataBuilder);
33
- const fontStyle = await getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
34
- const queries = prefetchQueries(homeTemplate);
35
- const datas = await Promise.allSettled(queries.map(({ query, variables, func }) => {
36
- if (func) {
37
- return func(fetcher, variables);
38
- }
39
- if (query)
40
- return fetcher([query, variables]);
41
- return {};
42
- }));
43
- const fallback = queries.reduce((acc, { key }, index) => {
44
- const res = datas[index];
45
- if (res?.status === 'fulfilled') {
46
- return {
47
- ...acc,
48
- [key]: res.value,
49
- };
50
- }
51
- return acc;
52
- }, {});
53
- const description = dataBuilder?.themePageDataSEO?.find((item) => item?.key === 'global-meta-description')?.value;
54
- const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item) => item?.key === 'global-meta-thumbnail')?.value);
55
- const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
56
- const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
57
- const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
58
- const seo = {
59
- defaultTitle: shopMeta?.shop.name,
60
- title: dataBuilder?.name ?? 'Home',
61
- description: description ?? shopMeta?.shop.description,
62
- openGraph: {
63
- site_name: shopMeta?.shop.name,
64
- locale: shopMeta?.localization.country.isoCode,
65
- title: dataBuilder?.name ?? shopMeta?.shop.name,
66
- description: description ?? shopMeta?.shop.description,
67
- images: thumbnail ? [thumbnail] : [],
68
- },
69
- additionalMetaTags: [
70
- {
71
- name: 'theme-color',
72
- content: '#000000',
73
- },
74
- ],
75
- canonical: '/',
76
- additionalLinkTags: [
77
- {
78
- rel: 'icon',
79
- sizes: '32x32',
80
- href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`,
81
- },
82
- {
83
- rel: 'icon',
84
- sizes: '16x16',
85
- href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`,
86
- },
87
- {
88
- rel: 'apple-touch-icon',
89
- sizes: '180x180',
90
- href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`,
91
- },
92
- {
93
- rel: 'manifest',
94
- href: generateManifest({
95
- theme_color: '#000000',
96
- background_color: '#ffffff',
97
- display: 'standalone',
98
- scope: '/',
99
- start_url: '/',
100
- name: shopMeta?.shop.name,
101
- short_name: shopMeta?.shop.name,
102
- description: shopMeta?.shop.description,
103
- icons: [
104
- {
105
- src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
106
- sizes: '192x192',
107
- type: 'image/png',
108
- purpose: 'any maskable',
109
- },
110
- {
111
- src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
112
- sizes: '512x512',
113
- type: 'image/png',
114
- },
115
- ],
116
- }),
117
- },
118
- ],
119
- };
120
- return serializableJson({
121
- themeStyle: genCSS(dataBuilder?.pageStyle?.data),
122
- fontStyle,
123
- builderData: homeTemplate,
124
- pageType,
125
- swr: { fallback },
126
- currency: shopMeta?.localization.country.currency.isoCode ?? null,
127
- locale: shopMeta?.localization.country.isoCode ?? null,
128
- swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
129
- seo,
130
- });
131
- };
9
+ const getHomePageProps = (fetcher, shopifyFetcher)=>async ()=>{
10
+ const pageType = 'STATIC';
11
+ const variables = {
12
+ slugType: pageType
13
+ };
14
+ // const theme = await fetcher<PublishedThemePagesQueryResponse, PublishedThemePagesQueryVariables>([
15
+ // PublishedThemePagesDocument,
16
+ // variables,
17
+ // ]);
18
+ const [theme, storeProperty, shopifyMeta] = await Promise.allSettled([
19
+ fetcher([
20
+ PublishedThemePagesDocument,
21
+ variables
22
+ ]),
23
+ fetcher([
24
+ StorePropertyDocument
25
+ ]),
26
+ shopifyFetcher([
27
+ ShopMetaDocument
28
+ ])
29
+ ]);
30
+ if (theme.status === 'rejected') {
31
+ return {
32
+ pageType
33
+ };
34
+ }
35
+ const dataBuilder = theme.value.publishedThemePages?.[0];
36
+ const homeTemplate = parseBuilderTemplate(dataBuilder);
37
+ const fontStyle = await getFontFromGlobalStyle(dataBuilder?.pageStyle?.data);
38
+ const queries = prefetchQueries(homeTemplate);
39
+ const datas = await Promise.allSettled(queries.map(({ query , variables , func })=>{
40
+ if (func) {
41
+ return func(fetcher, variables);
42
+ }
43
+ if (query) return fetcher([
44
+ query,
45
+ variables
46
+ ]);
47
+ return {};
48
+ }));
49
+ const fallback = queries.reduce((acc, { key }, index)=>{
50
+ const res = datas[index];
51
+ if (res?.status === 'fulfilled') {
52
+ return {
53
+ ...acc,
54
+ [key]: res.value
55
+ };
56
+ }
57
+ return acc;
58
+ }, {});
59
+ const description = dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-description')?.value;
60
+ const thumbnail = parseJson(dataBuilder?.themePageDataSEO?.find((item)=>item?.key === 'global-meta-thumbnail')?.value);
61
+ const shopMeta = shopifyMeta.status === 'fulfilled' ? shopifyMeta.value : undefined;
62
+ const shopData = storeProperty.status === 'fulfilled' ? storeProperty.value : undefined;
63
+ const favicon = shopData?.storeProperty?.favicon ?? '/favicon/favicon-32x32.png';
64
+ const seo = {
65
+ defaultTitle: shopMeta?.shop.name,
66
+ title: dataBuilder?.name ?? 'Home',
67
+ description: description ?? shopMeta?.shop.description,
68
+ openGraph: {
69
+ site_name: shopMeta?.shop.name,
70
+ locale: shopMeta?.localization.country.isoCode,
71
+ title: dataBuilder?.name ?? shopMeta?.shop.name,
72
+ description: description ?? shopMeta?.shop.description,
73
+ images: thumbnail ? [
74
+ thumbnail
75
+ ] : []
76
+ },
77
+ additionalMetaTags: [
78
+ {
79
+ name: 'theme-color',
80
+ content: '#000000'
81
+ }
82
+ ],
83
+ canonical: '/',
84
+ additionalLinkTags: [
85
+ {
86
+ rel: 'icon',
87
+ sizes: '32x32',
88
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/32x32/`
89
+ },
90
+ {
91
+ rel: 'icon',
92
+ sizes: '16x16',
93
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/16x16/`
94
+ },
95
+ {
96
+ rel: 'apple-touch-icon',
97
+ sizes: '180x180',
98
+ href: `${favicon}-/crop/1:1/center/-/smart_resize/180x180/`
99
+ },
100
+ {
101
+ rel: 'manifest',
102
+ href: generateManifest({
103
+ theme_color: '#000000',
104
+ background_color: '#ffffff',
105
+ display: 'standalone',
106
+ scope: '/',
107
+ start_url: '/',
108
+ name: shopMeta?.shop.name,
109
+ short_name: shopMeta?.shop.name,
110
+ description: shopMeta?.shop.description,
111
+ icons: [
112
+ {
113
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/192x192/`,
114
+ sizes: '192x192',
115
+ type: 'image/png',
116
+ purpose: 'any maskable'
117
+ },
118
+ {
119
+ src: `${favicon}-/crop/1:1/center/-/smart_resize/512x512/`,
120
+ sizes: '512x512',
121
+ type: 'image/png'
122
+ }
123
+ ]
124
+ })
125
+ }
126
+ ]
127
+ };
128
+ return serializableJson({
129
+ themeStyle: genCSS(dataBuilder?.pageStyle?.data),
130
+ fontStyle,
131
+ builderData: homeTemplate,
132
+ pageType,
133
+ swr: {
134
+ fallback
135
+ },
136
+ currency: shopMeta?.localization.country.currency.isoCode ?? null,
137
+ locale: shopMeta?.localization.country.isoCode ?? null,
138
+ swatches: parseJson(shopData?.storeProperty?.swatchesConfig),
139
+ seo
140
+ });
141
+ };
132
142
 
133
143
  export { getHomePageProps };
@@ -2,15 +2,15 @@ import { getCollectionProps } from './get-collection-props.js';
2
2
  import { getProductProps } from './get-product-props.js';
3
3
  import { getStaticPageProps } from './get-static-page-props.js';
4
4
 
5
- const getPreviewProps = (fetcher, shopifyFetcher) => async (pageType, slug) => {
6
- switch (pageType) {
7
- case 'COLLECTION':
8
- return getCollectionProps(fetcher)(slug);
9
- case 'PRODUCT':
10
- return getProductProps(fetcher)(slug);
11
- default:
12
- return getStaticPageProps(fetcher, shopifyFetcher)(slug);
13
- }
14
- };
5
+ const getPreviewProps = (fetcher, shopifyFetcher)=>async (pageType, slug)=>{
6
+ switch(pageType){
7
+ case 'COLLECTION':
8
+ return getCollectionProps(fetcher)(slug);
9
+ case 'PRODUCT':
10
+ return getProductProps(fetcher)(slug);
11
+ default:
12
+ return getStaticPageProps(fetcher, shopifyFetcher)(slug);
13
+ }
14
+ };
15
15
 
16
16
  export { getPreviewProps };