@gem-sdk/pages 1.64.0 → 2.0.0-dev.1086

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 (148) hide show
  1. package/dist/cjs/components/ErrorBoundary.js +2 -40
  2. package/dist/cjs/components/ErrorFallback.js +2 -26
  3. package/dist/cjs/components/FacebookPixel.js +4 -36
  4. package/dist/cjs/components/FooterForPostPurchase.js +2 -34
  5. package/dist/cjs/components/GoogleAnalytic.js +6 -67
  6. package/dist/cjs/components/TikTokPixel.js +4 -19
  7. package/dist/cjs/components/builder/Body.js +2 -36
  8. package/dist/cjs/components/builder/Footer.js +2 -154
  9. package/dist/cjs/components/builder/Header.js +2 -189
  10. package/dist/cjs/components/builder/PopupManager.js +2 -63
  11. package/dist/cjs/components/builder/SwitchView.js +2 -184
  12. package/dist/cjs/components/builder/Toolbar.js +2 -700
  13. package/dist/cjs/components/builder/Toolbox.js +2 -484
  14. package/dist/cjs/components/builder/const.js +1 -56
  15. package/dist/cjs/components/builder/toolbar/const.js +1 -7
  16. package/dist/cjs/components/builder/toolbar/utils/findDOMClosest.js +1 -41
  17. package/dist/cjs/components/builder/toolbar/utils/findOverflowParent.js +1 -20
  18. package/dist/cjs/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -18
  19. package/dist/cjs/components/builder/toolbar/utils/getDOMElementParents.js +1 -32
  20. package/dist/cjs/components/builder/toolbar/utils/isOverParent.js +1 -16
  21. package/dist/cjs/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -12
  22. package/dist/cjs/components/builder/toolbar/utils/isSection.js +1 -8
  23. package/dist/cjs/components/builder/toolbar/utils/notVisible.js +1 -8
  24. package/dist/cjs/components/builder/toolbar/utils/waitForElementToExist.js +1 -27
  25. package/dist/cjs/components/image-to-layout/AddSectionImageToLayout.js +2 -150
  26. package/dist/cjs/components/image-to-layout/DropElement.js +2 -166
  27. package/dist/cjs/components/image-to-layout/ImageToLayout.js +2 -41
  28. package/dist/cjs/constants/index.js +1 -0
  29. package/dist/cjs/index.js +1 -82
  30. package/dist/cjs/layouts/main.js +2 -30
  31. package/dist/cjs/libs/api/get-builder-props.js +1 -41
  32. package/dist/cjs/libs/api/get-collection-props.js +1 -68
  33. package/dist/cjs/libs/api/get-home-page-props-v2.js +1 -145
  34. package/dist/cjs/libs/api/get-home-page-props.js +1 -151
  35. package/dist/cjs/libs/api/get-post-purchase-props-preview.js +1 -267
  36. package/dist/cjs/libs/api/get-preview-props.js +1 -18
  37. package/dist/cjs/libs/api/get-product-props.js +1 -73
  38. package/dist/cjs/libs/api/get-static-page-props-preview.js +1 -159
  39. package/dist/cjs/libs/api/get-static-page-props-v2.js +1 -163
  40. package/dist/cjs/libs/api/get-static-page-props.js +1 -148
  41. package/dist/cjs/libs/custom-fonts.js +6 -60
  42. package/dist/cjs/libs/fetcher.js +1 -100
  43. package/dist/cjs/libs/get-layout.js +1 -13
  44. package/dist/cjs/libs/get-storefront-api.js +1 -12
  45. package/dist/cjs/libs/getStaticPaths.js +1 -10
  46. package/dist/cjs/libs/google-fonts.js +1 -118
  47. package/dist/cjs/libs/helpers/check-option-font.js +1 -65
  48. package/dist/cjs/libs/helpers/common.js +1 -27
  49. package/dist/cjs/libs/helpers/extract-operation.js +1 -0
  50. package/dist/cjs/libs/helpers/gen-css.js +1 -135
  51. package/dist/cjs/libs/helpers/gen-fonts.js +1 -90
  52. package/dist/cjs/libs/helpers/generate-manifres.js +1 -5
  53. package/dist/cjs/libs/helpers/get-fallback.js +1 -34
  54. package/dist/cjs/libs/helpers/get-metafield.js +1 -0
  55. package/dist/cjs/libs/helpers/normalize.js +1 -102
  56. package/dist/cjs/libs/helpers/parse-json.js +1 -16
  57. package/dist/cjs/libs/helpers/sentry.js +1 -17
  58. package/dist/cjs/libs/helpers/user-agent.js +1 -7
  59. package/dist/cjs/libs/hooks/use-tracking-view.js +2 -42
  60. package/dist/cjs/libs/hooks/usePagePreview.js +1 -92
  61. package/dist/cjs/libs/parse-html.js +1 -34
  62. package/dist/cjs/libs/shopify-cdn-with-google-fonts.js +1 -1845
  63. package/dist/cjs/pages/404.js +2 -43
  64. package/dist/cjs/pages/500.js +2 -74
  65. package/dist/cjs/pages/CollectionGlobalProvider.js +2 -59
  66. package/dist/cjs/pages/builder.js +2 -115
  67. package/dist/cjs/pages/collection-detail.js +2 -64
  68. package/dist/cjs/pages/preview.js +2 -26
  69. package/dist/cjs/pages/product-detail.js +2 -69
  70. package/dist/cjs/pages/static-v2.js +5 -132
  71. package/dist/cjs/pages/static.js +2 -75
  72. package/dist/cjs/store/libs-store.js +1 -14
  73. package/dist/esm/components/ErrorBoundary.js +2 -38
  74. package/dist/esm/components/ErrorFallback.js +2 -24
  75. package/dist/esm/components/FacebookPixel.js +4 -34
  76. package/dist/esm/components/FooterForPostPurchase.js +2 -30
  77. package/dist/esm/components/GoogleAnalytic.js +6 -65
  78. package/dist/esm/components/TikTokPixel.js +4 -17
  79. package/dist/esm/components/builder/Body.js +2 -32
  80. package/dist/esm/components/builder/Footer.js +2 -150
  81. package/dist/esm/components/builder/Header.js +2 -185
  82. package/dist/esm/components/builder/PopupManager.js +2 -59
  83. package/dist/esm/components/builder/SwitchView.js +2 -180
  84. package/dist/esm/components/builder/Toolbar.js +2 -696
  85. package/dist/esm/components/builder/Toolbox.js +2 -480
  86. package/dist/esm/components/builder/const.js +1 -54
  87. package/dist/esm/components/builder/toolbar/const.js +1 -4
  88. package/dist/esm/components/builder/toolbar/utils/findDOMClosest.js +1 -39
  89. package/dist/esm/components/builder/toolbar/utils/findOverflowParent.js +1 -18
  90. package/dist/esm/components/builder/toolbar/utils/getChildrenByAttrSelector.js +1 -16
  91. package/dist/esm/components/builder/toolbar/utils/getDOMElementParents.js +1 -30
  92. package/dist/esm/components/builder/toolbar/utils/isOverParent.js +1 -14
  93. package/dist/esm/components/builder/toolbar/utils/isOverToolbarPosition.js +1 -10
  94. package/dist/esm/components/builder/toolbar/utils/isSection.js +1 -6
  95. package/dist/esm/components/builder/toolbar/utils/notVisible.js +1 -6
  96. package/dist/esm/components/builder/toolbar/utils/waitForElementToExist.js +1 -25
  97. package/dist/esm/components/image-to-layout/AddSectionImageToLayout.js +2 -146
  98. package/dist/esm/components/image-to-layout/DropElement.js +2 -164
  99. package/dist/esm/components/image-to-layout/ImageToLayout.js +2 -37
  100. package/dist/esm/constants/index.js +1 -0
  101. package/dist/esm/index.js +1 -36
  102. package/dist/esm/layouts/main.js +2 -26
  103. package/dist/esm/libs/api/get-builder-props.js +1 -39
  104. package/dist/esm/libs/api/get-collection-props.js +1 -66
  105. package/dist/esm/libs/api/get-home-page-props-v2.js +1 -143
  106. package/dist/esm/libs/api/get-home-page-props.js +1 -149
  107. package/dist/esm/libs/api/get-post-purchase-props-preview.js +1 -259
  108. package/dist/esm/libs/api/get-preview-props.js +1 -16
  109. package/dist/esm/libs/api/get-product-props.js +1 -71
  110. package/dist/esm/libs/api/get-static-page-props-preview.js +1 -157
  111. package/dist/esm/libs/api/get-static-page-props-v2.js +1 -161
  112. package/dist/esm/libs/api/get-static-page-props.js +1 -146
  113. package/dist/esm/libs/custom-fonts.js +6 -55
  114. package/dist/esm/libs/fetcher.js +1 -96
  115. package/dist/esm/libs/get-layout.js +1 -11
  116. package/dist/esm/libs/get-storefront-api.js +1 -10
  117. package/dist/esm/libs/getStaticPaths.js +1 -8
  118. package/dist/esm/libs/google-fonts.js +1 -112
  119. package/dist/esm/libs/helpers/check-option-font.js +1 -63
  120. package/dist/esm/libs/helpers/common.js +1 -24
  121. package/dist/esm/libs/helpers/extract-operation.js +1 -0
  122. package/dist/esm/libs/helpers/gen-css.js +1 -133
  123. package/dist/esm/libs/helpers/gen-fonts.js +1 -87
  124. package/dist/esm/libs/helpers/generate-manifres.js +1 -3
  125. package/dist/esm/libs/helpers/get-fallback.js +1 -32
  126. package/dist/esm/libs/helpers/get-metafield.js +1 -0
  127. package/dist/esm/libs/helpers/normalize.js +1 -95
  128. package/dist/esm/libs/helpers/parse-json.js +1 -13
  129. package/dist/esm/libs/helpers/sentry.js +1 -15
  130. package/dist/esm/libs/helpers/user-agent.js +1 -5
  131. package/dist/esm/libs/hooks/use-tracking-view.js +2 -40
  132. package/dist/esm/libs/hooks/usePagePreview.js +1 -90
  133. package/dist/esm/libs/parse-html.js +1 -32
  134. package/dist/esm/libs/shopify-cdn-with-google-fonts.js +1 -1843
  135. package/dist/esm/pages/404.js +2 -41
  136. package/dist/esm/pages/500.js +2 -72
  137. package/dist/esm/pages/CollectionGlobalProvider.js +2 -55
  138. package/dist/esm/pages/builder.js +2 -113
  139. package/dist/esm/pages/collection-detail.js +2 -60
  140. package/dist/esm/pages/preview.js +2 -24
  141. package/dist/esm/pages/product-detail.js +2 -65
  142. package/dist/esm/pages/static-v2.js +5 -130
  143. package/dist/esm/pages/static.js +2 -71
  144. package/dist/esm/store/libs-store.js +1 -12
  145. package/dist/types/index.d.ts +71 -62
  146. package/package.json +7 -7
  147. package/dist/cjs/components/builder/InteractionSelectOnPageHeader.js +0 -192
  148. package/dist/esm/components/builder/InteractionSelectOnPageHeader.js +0 -188
@@ -1,480 +1,2 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useMatchMutate, useShopStore, usePageStore, useBuilderPreviewStore, useSectionStore, useModalStore } from '@gem-sdk/core';
3
- import { memo, useMemo, useCallback, useEffect } from 'react';
4
- import { getStorefrontApi } from '../../libs/get-storefront-api.js';
5
- import { createFontUrl } from '../../libs/google-fonts.js';
6
- import { genCSS } from '../../libs/helpers/gen-css.js';
7
- import { getFontsFromDataBuilder } from '../../libs/helpers/gen-fonts.js';
8
- import { shopifyCdnWithGoogleFonts } from '../../libs/shopify-cdn-with-google-fonts.js';
9
- import { libsStore } from '../../store/libs-store.js';
10
- import { checkNotInOptionFont } from '../../libs/helpers/check-option-font.js';
11
-
12
- const globalStyleId = 'global-style';
13
- const Toolbox = ()=>{
14
- const matchMutate = useMatchMutate();
15
- const provider = useShopStore((s)=>s.provider);
16
- const changeStorefrontInfo = useShopStore((s)=>s.changeStorefrontInfo);
17
- const setDynamicProduct = usePageStore((s)=>s.setDynamicProduct);
18
- const setPostPurchaseProductOffers = usePageStore((s)=>s.setPostPurchaseProductOffers);
19
- const setSalePageProductId = usePageStore((s)=>s.setSalePageProductId);
20
- const setDynamicCollection = usePageStore((s)=>s.setDynamicCollection);
21
- const initState = useBuilderPreviewStore((s)=>s.initState);
22
- const state = useBuilderPreviewStore((s)=>s.state);
23
- const initNormalizeState = useBuilderPreviewStore((s)=>s.forceChangeState);
24
- const forceChangeItemProp = useBuilderPreviewStore((s)=>s.forceChangeItemProp);
25
- const changeItemPropByKey = useBuilderPreviewStore((s)=>s.changeItemPropByKey);
26
- const addItem = useBuilderPreviewStore((s)=>s.addItem);
27
- const moveItem = useBuilderPreviewStore((s)=>s.moveItem);
28
- const removeItem = useBuilderPreviewStore((s)=>s.removeItem);
29
- const addSection = useSectionStore((s)=>s.addSection);
30
- const changeSwatches = useShopStore((s)=>s.changeSwatches);
31
- const updateItemName = useBuilderPreviewStore((s)=>s.updateItemName);
32
- const updateItemAttribute = useBuilderPreviewStore((s)=>s.updateItemAttribute);
33
- const changeLayoutSettings = useShopStore((s)=>s.changeLayoutSettings);
34
- const changeCreateThemeSectionCount = useShopStore((s)=>s.changeCreateThemeSectionCount);
35
- const changeShopPlan = useShopStore((s)=>s.changeShopPlan);
36
- const changeFontType = libsStore((s)=>s.changeFontType);
37
- const fontType = libsStore((s)=>s.fontType);
38
- const clearModal = useModalStore((s)=>s.clearModal);
39
- const changeLimitCreateThemeSection = useShopStore((s)=>s.changeLimitCreateThemeSection);
40
- const setInteractionIsSelectOnPage = usePageStore((s)=>s.setInteractionIsSelectOnPage);
41
- const setInteractionItem = usePageStore((s)=>s.setInteractionItem);
42
- const setInteractionSelectType = usePageStore((s)=>s.setInteractionSelectType);
43
- const setInteractionSettingType = usePageStore((s)=>s.setInteractionSettingType);
44
- const setSidebarMode = usePageStore((s)=>s.setSidebarMode);
45
- const fonts = useMemo(()=>getFontsFromDataBuilder(state), [
46
- state
47
- ]);
48
- const setFontsToHead = (className, fonts)=>{
49
- // clear fonts
50
- if (!fonts?.length) {
51
- const googleFonts = document.querySelectorAll(`.${className}`);
52
- googleFonts.forEach((googleFont)=>{
53
- googleFont.remove();
54
- });
55
- return;
56
- }
57
- // clear fonts not use
58
- const googleFonts = document.querySelectorAll(`.${className}`);
59
- googleFonts.forEach((googleFont)=>{
60
- const fontName = googleFont.getAttribute('data-font');
61
- const variantName = googleFont.getAttribute('data-font-variant');
62
- if (!fontName || !variantName) {
63
- googleFont.remove();
64
- } else {
65
- const isUse = fonts.find((font)=>font.family == fontName && font.variants.includes(variantName));
66
- if (!isUse) {
67
- googleFont.remove();
68
- }
69
- }
70
- });
71
- // append new fonts
72
- for (const font of fonts){
73
- if ([
74
- 'bunny',
75
- 'google'
76
- ].includes(font.type) && checkNotInOptionFont(font.family, fontType)) {
77
- continue;
78
- }
79
- if (font.type !== 'custom') {
80
- if (font.variants?.length) {
81
- for (const variant of font.variants){
82
- const cloneFont = JSON.parse(JSON.stringify(font));
83
- cloneFont.variants = [
84
- variant
85
- ]; // set single variant. Fix error reload font when change href other variant
86
- const fontName = cloneFont.family;
87
- const variantName = variant;
88
- const url = createFontUrl([
89
- cloneFont
90
- ], undefined, fontType);
91
- if (url) {
92
- const googleFont = document.querySelector(`.${className}[data-font="${fontName}"][data-font-variant="${variantName}"]`);
93
- if (googleFont) {
94
- continue;
95
- } else {
96
- const link = document.createElement('link');
97
- link.className = className;
98
- link.dataset.font = fontName;
99
- link.dataset.fontVariant = variantName;
100
- link.href = url;
101
- link.rel = 'stylesheet';
102
- document.head.appendChild(link);
103
- }
104
- }
105
- }
106
- }
107
- }
108
- }
109
- };
110
- // Revalidate all query with key match query/
111
- const onRevalidateQuery = useCallback(()=>{
112
- matchMutate(/query\//, {
113
- revalidate: true
114
- });
115
- }, [
116
- matchMutate
117
- ]);
118
- // Update shop info
119
- const onChangeShopInfo = useCallback((e)=>{
120
- const detail = e.detail;
121
- changeStorefrontInfo({
122
- url: detail.shopHandle ? getStorefrontApi(detail.shopHandle, provider) : undefined,
123
- token: detail.shopToken
124
- });
125
- }, [
126
- changeStorefrontInfo,
127
- provider
128
- ]);
129
- const onChangeGlobalStyle = useCallback((e)=>{
130
- const detail = e.detail;
131
- try {
132
- if (detail.data) {
133
- const themeStyle = genCSS(detail.data, detail.mobileOnly);
134
- const font = Object.entries(detail.data?.font).map(([, value])=>{
135
- return value;
136
- }).map((item)=>{
137
- if (item.type == 'custom') {
138
- const isGoogleFont = shopifyCdnWithGoogleFonts.find((ggFont)=>ggFont.family == item.family);
139
- if (isGoogleFont) {
140
- return isGoogleFont;
141
- }
142
- }
143
- return item;
144
- });
145
- const globalStyle = document.getElementById(globalStyleId);
146
- setFontsToHead('google-font-builder', font);
147
- if (globalStyle) {
148
- globalStyle.innerHTML = themeStyle;
149
- } else {
150
- const style = document.createElement('style');
151
- style.id = globalStyleId;
152
- style.innerHTML = themeStyle;
153
- document.head.appendChild(style);
154
- }
155
- }
156
- } catch {
157
- //
158
- }
159
- }, []);
160
- // Init builder data
161
- const onInitBuilder = useCallback((e)=>{
162
- clearModal();
163
- try {
164
- const detail = e.detail;
165
- if (detail.data) {
166
- if (detail.type === 'flat') {
167
- initNormalizeState(detail.data);
168
- } else {
169
- initState(detail.data);
170
- }
171
- }
172
- } catch {
173
- //
174
- }
175
- }, [
176
- initNormalizeState,
177
- initState,
178
- clearModal
179
- ]);
180
- // Add new entity
181
- const onAddEntity = useCallback((e)=>{
182
- try {
183
- const detail = e.detail;
184
- if (detail.entity) {
185
- addItem({
186
- data: detail.entity,
187
- id: detail.id,
188
- position: detail.position,
189
- type: detail.type ?? 'component'
190
- });
191
- if (detail?.type === 'section' && !Array.isArray(detail.entity)) {
192
- addSection(detail.entity.uid, detail.entity);
193
- }
194
- }
195
- } catch {
196
- //
197
- }
198
- }, [
199
- addItem,
200
- addSection
201
- ]);
202
- // Update props of entity
203
- const onUpdateEntityProp = useCallback((e)=>{
204
- try {
205
- const detail = e.detail;
206
- if (detail.uid && detail.propName) {
207
- changeItemPropByKey({
208
- id: detail.uid,
209
- key: detail.propName,
210
- data: detail.propValue,
211
- group: detail.group
212
- });
213
- }
214
- } catch {
215
- //
216
- }
217
- }, [
218
- changeItemPropByKey
219
- ]);
220
- // Update props of entity
221
- const onForceUpdateEntityProps = useCallback((e)=>{
222
- try {
223
- const detail = e.detail;
224
- if (detail.uid) {
225
- forceChangeItemProp(detail.uid, detail.data, detail.group);
226
- }
227
- } catch {
228
- //
229
- }
230
- }, [
231
- forceChangeItemProp
232
- ]);
233
- // Move entity
234
- const onMoveEntity = useCallback((e)=>{
235
- try {
236
- const detail = e.detail;
237
- if (detail.to && detail.uid) {
238
- moveItem(detail.uid, detail.to, Number(detail.position) ?? 0);
239
- }
240
- } catch {
241
- //
242
- }
243
- }, [
244
- moveItem
245
- ]);
246
- // Remove entity
247
- const onRemoveEntity = useCallback((e)=>{
248
- try {
249
- const detail = e.detail;
250
- if (detail.uid) {
251
- removeItem(detail.uid);
252
- }
253
- } catch {
254
- //
255
- }
256
- }, [
257
- removeItem
258
- ]);
259
- // Change Swatches Data
260
- const onChangeSwatchesData = useCallback((e)=>{
261
- const detail = e.detail;
262
- try {
263
- if (detail.data) {
264
- changeSwatches(detail.data);
265
- }
266
- } catch {
267
- //
268
- }
269
- }, [
270
- changeSwatches
271
- ]);
272
- const onChangeLayoutSettingData = useCallback((e)=>{
273
- const detail = e.detail;
274
- if (!detail) return;
275
- changeLayoutSettings(detail);
276
- }, [
277
- changeLayoutSettings
278
- ]);
279
- const onUpdateCreateThemeSectionCount = useCallback((e)=>{
280
- const count = e.detail;
281
- if (!count) return;
282
- changeCreateThemeSectionCount(count);
283
- }, [
284
- changeCreateThemeSectionCount
285
- ]);
286
- const onUpdateShopPlan = useCallback((e)=>{
287
- const shopPlan = e.detail;
288
- if (!shopPlan) return;
289
- changeShopPlan(shopPlan);
290
- }, [
291
- changeShopPlan
292
- ]);
293
- const onUpdateFontType = useCallback((e)=>{
294
- const fontType = e.detail;
295
- if (!fontType) return;
296
- changeFontType(fontType);
297
- }, [
298
- changeFontType
299
- ]);
300
- const onUpdateDynamicProduct = useCallback((e)=>{
301
- const product = e.detail;
302
- if (!product) return;
303
- setDynamicProduct(product);
304
- }, [
305
- setDynamicProduct
306
- ]);
307
- const onUpdateDynamicCollection = useCallback((e)=>{
308
- const collection = e.detail;
309
- if (!collection) return;
310
- setDynamicCollection(collection);
311
- }, [
312
- setDynamicCollection
313
- ]);
314
- useEffect(()=>{
315
- if (fonts) {
316
- setFontsToHead('google-font-element', fonts);
317
- }
318
- }, [
319
- fonts
320
- ]);
321
- const onUpdateItemName = useCallback((e)=>{
322
- const detail = e.detail;
323
- if (detail.uid) {
324
- updateItemName(detail.uid, detail.name || '');
325
- }
326
- }, [
327
- updateItemName
328
- ]);
329
- const onUpdateItemAttribute = useCallback((e)=>{
330
- const detail = e.detail;
331
- if (detail.uid) {
332
- updateItemAttribute(detail.uid, detail.value || '', detail.attr || '');
333
- }
334
- }, [
335
- updateItemAttribute
336
- ]);
337
- const onUpdateProductOffers = useCallback((e)=>{
338
- const productOffers = e.detail;
339
- if (!productOffers?.length) return;
340
- setPostPurchaseProductOffers(productOffers);
341
- }, [
342
- setPostPurchaseProductOffers
343
- ]);
344
- const onUpdateSalePageProductId = useCallback((e)=>{
345
- const id = e.detail;
346
- if (!id) return;
347
- setSalePageProductId(id);
348
- }, [
349
- setSalePageProductId
350
- ]);
351
- const onLimitCreateThemeSection = useCallback((e)=>{
352
- const data = e.detail;
353
- if (!data) return;
354
- changeLimitCreateThemeSection(data);
355
- }, [
356
- changeLimitCreateThemeSection
357
- ]);
358
- const onUpdateInteractionIsSelectOnPage = useCallback((e)=>{
359
- const isSelectOnPage = e.detail.value;
360
- const mode = e.detail.mode;
361
- const settingType = e.detail.settingType;
362
- setInteractionIsSelectOnPage(isSelectOnPage);
363
- setInteractionSelectType(mode);
364
- setInteractionSettingType(settingType);
365
- }, [
366
- setInteractionIsSelectOnPage,
367
- setInteractionSelectType,
368
- setInteractionSettingType
369
- ]);
370
- const onUpdateInteractionSettingType = useCallback((e)=>{
371
- const settingType = e.detail.settingType;
372
- setInteractionSettingType(settingType);
373
- }, [
374
- setInteractionSettingType
375
- ]);
376
- const onChangeSidebarMode = useCallback((e)=>{
377
- const mode = e.detail.mode;
378
- console.log(mode);
379
- setSidebarMode(mode);
380
- }, [
381
- setSidebarMode
382
- ]);
383
- const onUpdateInteractionItem = useCallback((e)=>{
384
- const interactionItem = e.detail;
385
- setInteractionItem(interactionItem);
386
- }, [
387
- setInteractionItem
388
- ]);
389
- useEffect(()=>{
390
- if (fonts) {
391
- setFontsToHead('google-font-element', fonts);
392
- }
393
- }, [
394
- fonts
395
- ]);
396
- useEffect(()=>{
397
- window.addEventListener('update-shop-info', onChangeShopInfo);
398
- window.addEventListener('revalidate-query', onRevalidateQuery);
399
- window.addEventListener('init-builder', onInitBuilder);
400
- window.addEventListener('add-entity', onAddEntity);
401
- window.addEventListener('remove-entity', onRemoveEntity);
402
- window.addEventListener('move-entity', onMoveEntity);
403
- window.addEventListener('force-update-entity-props', onForceUpdateEntityProps);
404
- window.addEventListener('update-entity-prop', onUpdateEntityProp);
405
- window.addEventListener('set-global-style', onChangeGlobalStyle);
406
- window.addEventListener('update-global-swatches-data', onChangeSwatchesData);
407
- window.addEventListener('on-off-header-footer', onChangeLayoutSettingData);
408
- window.addEventListener('update-create-theme-section-count', onUpdateCreateThemeSectionCount);
409
- window.addEventListener('update-shop-plan', onUpdateShopPlan);
410
- window.addEventListener('set-dynamic-product', onUpdateDynamicProduct);
411
- window.addEventListener('set-dynamic-collection', onUpdateDynamicCollection);
412
- window.addEventListener('update-item-name', onUpdateItemName);
413
- window.addEventListener('update-item-attribute', onUpdateItemAttribute);
414
- window.addEventListener('set-product-offer', onUpdateProductOffers);
415
- window.addEventListener('update-sale-page-product-id', onUpdateSalePageProductId);
416
- window.addEventListener('limit-create-theme-section', onLimitCreateThemeSection);
417
- window.addEventListener('update-interaction-is-select-on-page', onUpdateInteractionIsSelectOnPage);
418
- window.addEventListener('update-interaction-item', onUpdateInteractionItem);
419
- window.addEventListener('update-interaction-setting-type', onUpdateInteractionSettingType);
420
- window.addEventListener('change-sidebar-mode', onChangeSidebarMode);
421
- window.addEventListener('update-font-type', onUpdateFontType);
422
- return ()=>{
423
- window.removeEventListener('update-shop-info', onChangeShopInfo);
424
- window.removeEventListener('revalidate-query', onRevalidateQuery);
425
- window.removeEventListener('init-builder', onInitBuilder);
426
- window.removeEventListener('add-entity', onAddEntity);
427
- window.removeEventListener('remove-entity', onRemoveEntity);
428
- window.removeEventListener('move-entity', onMoveEntity);
429
- window.removeEventListener('update-entity-prop', onUpdateEntityProp);
430
- window.removeEventListener('set-global-style', onChangeGlobalStyle);
431
- window.removeEventListener('update-global-swatches-data', onChangeSwatchesData);
432
- window.removeEventListener('on-off-header-footer', onChangeLayoutSettingData);
433
- window.removeEventListener('update-create-theme-section-count', onUpdateCreateThemeSectionCount);
434
- window.removeEventListener('update-shop-plan', onUpdateShopPlan);
435
- window.removeEventListener('set-dynamic-product', onUpdateDynamicProduct);
436
- window.removeEventListener('set-dynamic-collection', onUpdateDynamicCollection);
437
- window.removeEventListener('update-item-name', onUpdateItemName);
438
- window.removeEventListener('update-item-attribute', onUpdateItemAttribute);
439
- window.removeEventListener('set-product-offer', onUpdateProductOffers);
440
- window.removeEventListener('update-sale-page-product-id', onUpdateSalePageProductId);
441
- window.removeEventListener('limit-create-theme-section', onLimitCreateThemeSection);
442
- window.removeEventListener('update-interaction-is-select-on-page', onUpdateInteractionIsSelectOnPage);
443
- window.removeEventListener('update-interaction-item', onUpdateInteractionItem);
444
- window.removeEventListener('update-interaction-setting-type', onUpdateInteractionSettingType);
445
- window.removeEventListener('update-font-type', onUpdateFontType);
446
- };
447
- }, [
448
- onAddEntity,
449
- onUpdateShopPlan,
450
- onForceUpdateEntityProps,
451
- onUpdateEntityProp,
452
- onInitBuilder,
453
- onMoveEntity,
454
- onRemoveEntity,
455
- onChangeGlobalStyle,
456
- onChangeSwatchesData,
457
- onRevalidateQuery,
458
- onChangeShopInfo,
459
- onChangeLayoutSettingData,
460
- onUpdateCreateThemeSectionCount,
461
- onUpdateDynamicProduct,
462
- onUpdateDynamicCollection,
463
- onUpdateItemName,
464
- onUpdateItemAttribute,
465
- onUpdateProductOffers,
466
- onUpdateSalePageProductId,
467
- onLimitCreateThemeSection,
468
- onUpdateInteractionItem,
469
- onUpdateInteractionIsSelectOnPage,
470
- onUpdateInteractionSettingType,
471
- onUpdateFontType,
472
- onChangeSidebarMode
473
- ]);
474
- return /*#__PURE__*/ jsx("div", {
475
- className: "toolbox"
476
- });
477
- };
478
- var Toolbox$1 = /*#__PURE__*/ memo(Toolbox);
479
-
480
- export { Toolbox$1 as default };
1
+ 'use client';
2
+ import{jsx as e}from"react/jsx-runtime";import{useMatchMutate as t,useShopStore as n,usePageStore as i,useBuilderPreviewStore as o,useSectionStore as d,useModalStore as a}from"@gem-sdk/core";import{memo as r,useMemo as l,useCallback as s,useEffect as c}from"react";import{getStorefrontApi as m}from"../../libs/get-storefront-api.js";import{createFontUrl as p}from"../../libs/google-fonts.js";import{genCSS as w}from"../../libs/helpers/gen-css.js";import{getFontsFromDataBuilder as u}from"../../libs/helpers/gen-fonts.js";import{shopifyCdnWithGoogleFonts as v}from"../../libs/shopify-cdn-with-google-fonts.js";import{libsStore as y}from"../../store/libs-store.js";import{checkNotInOptionFont as f}from"../../libs/helpers/check-option-font.js";let globalStyleId="global-style",Toolbox=()=>{let r=t(),h=n(e=>e.provider),g=n(e=>e.changeStorefrontInfo),E=i(e=>e.setDynamicProduct),L=i(e=>e.setPostPurchaseProductOffers),b=i(e=>e.setDynamicDiscountOffer),S=i(e=>e.setSalePageProductId),I=i(e=>e.setDynamicCollection),T=o(e=>e.initState),P=o(e=>e.state),j=o(e=>e.forceChangeState),C=o(e=>e.forceChangeItemProp),N=o(e=>e.changeItemPropByKey),x=o(e=>e.addItem),A=o(e=>e.moveItem),O=o(e=>e.removeItem),$=d(e=>e.addSection),k=n(e=>e.changeSwatches),q=o(e=>e.updateItemName),D=o(e=>e.updateItemAttribute),H=n(e=>e.changeLayoutSettings),M=n(e=>e.changeCreateThemeSectionCount),B=n(e=>e.changeShopPlan),J=n(e=>e.updatePriceWithCurrency),V=y(e=>e.changeFontType),F=y(e=>e.fontType),K=a(e=>e.clearModal),W=n(e=>e.changeLimitCreateThemeSection),z=i(e=>e.setInteractionIsSelectOnPage),G=i(e=>e.setInteractionItem),Q=i(e=>e.setInteractionSelectType),R=i(e=>e.setInteractionSettingType),U=i(e=>e.setSidebarMode),X=l(()=>u(P),[P]),Y=(e,t)=>{if(!t?.length){let t=document.querySelectorAll(`.${e}`);t.forEach(e=>{e.remove()});return}let n=document.querySelectorAll(`.${e}`);for(let i of(n.forEach(e=>{let n=e.getAttribute("data-font"),i=e.getAttribute("data-font-variant");if(n&&i){let o=t.find(e=>e.family==n&&e.variants.includes(i));o||e.remove()}else e.remove()}),t))if(!(["bunny","google"].includes(i.type)&&f(i.family,F))&&"custom"!==i.type&&i.variants?.length)for(let t of i.variants){let n=JSON.parse(JSON.stringify(i));n.variants=[t];let o=n.family,d=p([n],void 0,F);if(d){let n=document.querySelector(`.${e}[data-font="${o}"][data-font-variant="${t}"]`);if(n)continue;{let n=document.createElement("link");n.className=e,n.dataset.font=o,n.dataset.fontVariant=t,n.href=d,n.rel="stylesheet",document.head.appendChild(n)}}}},Z=s(()=>{r(/query\//,{revalidate:!0})},[r]),_=s(e=>{let t=e.detail;g({url:t.shopHandle?m(t.shopHandle,h):void 0,token:t.shopToken})},[g,h]),ee=s(e=>{let t=e.detail;try{if(t.data){let e=w(t.data,t.mobileOnly),n=Object.entries(t.data?.font).map(([,e])=>e).map(e=>{if("custom"==e.type){let t=v.find(t=>t.family==e.family);if(t)return t}return e}),i=document.getElementById(globalStyleId);if(Y("google-font-builder",n),i)i.innerHTML=e;else{let t=document.createElement("style");t.id=globalStyleId,t.innerHTML=e,document.head.appendChild(t)}}}catch{}},[]),et=s(e=>{K();try{let t=e.detail;t.data&&("flat"===t.type?j(t.data):T(t.data))}catch{}},[j,T,K]),en=s(e=>{try{let t=e.detail;t.entity&&(x({data:t.entity,id:t.id,position:t.position,type:t.type??"component"}),t?.type!=="section"||Array.isArray(t.entity)||$(t.entity.uid,t.entity))}catch{}},[x,$]),ei=s(e=>{try{let t=e.detail;t.uid&&t.propName&&N({id:t.uid,key:t.propName,data:t.propValue,group:t.group})}catch{}},[N]),eo=s(e=>{try{let t=e.detail;t.uid&&C(t.uid,t.data,t.group)}catch{}},[C]),ed=s(e=>{try{let t=e.detail;t.to&&t.uid&&A(t.uid,t.to,Number(t.position)??0)}catch{}},[A]),ea=s(e=>{try{let t=e.detail;t.uid&&O(t.uid)}catch{}},[O]),er=s(e=>{let t=e.detail;try{t.data&&k(t.data)}catch{}},[k]),el=s(e=>{let t=e.detail;t&&H(t)},[H]),es=s(e=>{let t=e.detail;t&&M(t)},[M]),ec=s(e=>{let t=e.detail;t&&B(t)},[B]),em=s(e=>{let t=e.detail;t&&J(t)},[J]),ep=s(e=>{let t=e.detail;t&&V(t)},[V]),ew=s(e=>{let t=e.detail;t&&E(t)},[E]),eu=s(e=>{let t=e.detail;t&&I(t)},[I]);c(()=>{X&&Y("google-font-element",X)},[X]);let ev=s(e=>{let t=e.detail;t.uid&&q(t.uid,t.name||"")},[q]),ey=s(e=>{let t=e.detail;t.uid&&D(t.uid,t.value||"",t.attr||"")},[D]),ef=s(e=>{let t=e.detail;t?.length&&L(t)},[L]),eh=s(e=>{let t=e.detail;t&&b(t)},[b]),eg=s(e=>{let t=e.detail;t&&S(t)},[S]),eE=s(e=>{let t=e.detail;t&&W(t)},[W]),eL=s(e=>{let t=e.detail.value,n=e.detail.mode,i=e.detail.settingType;z(t),Q(n),R(i)},[z,Q,R]),eb=s(e=>{let t=e.detail.settingType;R(t)},[R]),eS=s(e=>{let t=e.detail.mode;console.log(t),U(t)},[U]),eI=s(e=>{let t=e.detail;G(t)},[G]);return c(()=>{X&&Y("google-font-element",X)},[X]),c(()=>(window.addEventListener("update-shop-info",_),window.addEventListener("revalidate-query",Z),window.addEventListener("init-builder",et),window.addEventListener("add-entity",en),window.addEventListener("remove-entity",ea),window.addEventListener("move-entity",ed),window.addEventListener("force-update-entity-props",eo),window.addEventListener("update-entity-prop",ei),window.addEventListener("set-global-style",ee),window.addEventListener("update-global-swatches-data",er),window.addEventListener("on-off-header-footer",el),window.addEventListener("update-create-theme-section-count",es),window.addEventListener("update-shop-plan",ec),window.addEventListener("set-dynamic-product",ew),window.addEventListener("set-dynamic-collection",eu),window.addEventListener("update-item-name",ev),window.addEventListener("update-item-attribute",ey),window.addEventListener("set-product-offer",ef),window.addEventListener("set-dynamic-discount-offer",eh),window.addEventListener("update-sale-page-product-id",eg),window.addEventListener("limit-create-theme-section",eE),window.addEventListener("update-interaction-is-select-on-page",eL),window.addEventListener("update-interaction-item",eI),window.addEventListener("update-interaction-setting-type",eb),window.addEventListener("change-sidebar-mode",eS),window.addEventListener("update-font-type",ep),window.addEventListener("update-price-with-currency",em),()=>{window.removeEventListener("update-shop-info",_),window.removeEventListener("revalidate-query",Z),window.removeEventListener("init-builder",et),window.removeEventListener("add-entity",en),window.removeEventListener("remove-entity",ea),window.removeEventListener("move-entity",ed),window.removeEventListener("update-entity-prop",ei),window.removeEventListener("set-global-style",ee),window.removeEventListener("update-global-swatches-data",er),window.removeEventListener("on-off-header-footer",el),window.removeEventListener("update-create-theme-section-count",es),window.removeEventListener("update-shop-plan",ec),window.removeEventListener("update-price-with-currency",em),window.removeEventListener("set-dynamic-product",ew),window.removeEventListener("set-dynamic-collection",eu),window.removeEventListener("update-item-name",ev),window.removeEventListener("update-item-attribute",ey),window.removeEventListener("set-product-offer",ef),window.removeEventListener("update-sale-page-product-id",eg),window.removeEventListener("limit-create-theme-section",eE),window.removeEventListener("update-interaction-is-select-on-page",eL),window.removeEventListener("update-interaction-item",eI),window.removeEventListener("update-interaction-setting-type",eb),window.removeEventListener("update-font-type",ep)}),[en,ec,eo,ei,et,ed,ea,ee,er,Z,_,el,es,ew,eu,ev,ey,ef,eg,eE,eI,eL,eb,ep,eS,eh,em]),e("div",{className:"toolbox"})};var Toolbox$1=r(Toolbox);export{Toolbox$1 as default};
@@ -1,54 +1 @@
1
- const devices = [
2
- {
3
- id: 'iphone-13-mini',
4
- name: 'iPhone 13 Mini',
5
- width: 375
6
- },
7
- {
8
- id: 'iphone-13-pro',
9
- name: 'iPhone 13 Pro',
10
- width: 390
11
- },
12
- {
13
- id: 'iphone-11-pro-max',
14
- name: 'iPhone 11 Pro Max',
15
- width: 414
16
- },
17
- {
18
- id: 'iphone-15-pro-max',
19
- name: 'iPhone 15 Pro Max',
20
- width: 430
21
- },
22
- {
23
- id: 'pixel-7',
24
- name: 'Pixel 7',
25
- width: 412
26
- },
27
- {
28
- id: 'galaxy-s8-plus',
29
- name: 'Galaxy S8+',
30
- width: 360
31
- },
32
- {
33
- id: 'galaxy-s20-ultra',
34
- name: 'Galaxy S20 Ultra',
35
- width: 412
36
- },
37
- {
38
- id: 'ipad-mini',
39
- name: 'iPad Mini',
40
- width: 768
41
- },
42
- {
43
- id: 'ipad-air',
44
- name: 'iPad Air',
45
- width: 820
46
- },
47
- {
48
- id: 'ipad-pro',
49
- name: 'iPad Pro',
50
- width: 1024
51
- }
52
- ];
53
-
54
- export { devices };
1
+ let devices=[{id:"iphone-13-mini",name:"iPhone 13 Mini",width:375},{id:"iphone-13-pro",name:"iPhone 13 Pro",width:390},{id:"iphone-11-pro-max",name:"iPhone 11 Pro Max",width:414},{id:"iphone-15-pro-max",name:"iPhone 15 Pro Max",width:430},{id:"pixel-7",name:"Pixel 7",width:412},{id:"galaxy-s8-plus",name:"Galaxy S8+",width:360},{id:"galaxy-s20-ultra",name:"Galaxy S20 Ultra",width:412},{id:"ipad-mini",name:"iPad Mini",width:768},{id:"ipad-air",name:"iPad Air",width:820},{id:"ipad-pro",name:"iPad Pro",width:1024}];export{devices};
@@ -1,4 +1 @@
1
- const TOOLBAR_HOVER_HEIGHT = 24;
2
- const TOOLBAR_ACTIVE_HEIGHT = 32;
3
-
4
- export { TOOLBAR_ACTIVE_HEIGHT, TOOLBAR_HOVER_HEIGHT };
1
+ let TOOLBAR_HOVER_HEIGHT=24,TOOLBAR_ACTIVE_HEIGHT=32;export{TOOLBAR_ACTIVE_HEIGHT,TOOLBAR_HOVER_HEIGHT};
@@ -1,39 +1 @@
1
- const findDOMClosest = ($target, selectors)=>{
2
- const closestElements = {
3
- $childrenSlot: null,
4
- $productFeatureImg: null,
5
- $section: null,
6
- $component: null,
7
- $disableIframeClick: null,
8
- $stickyMinimize: null,
9
- $toolbar: null,
10
- $gpText: null,
11
- $imageDetection: null,
12
- $popupTriggerButton: null
13
- };
14
- let currentElement = $target;
15
- while(currentElement){
16
- // Check for stop conditions
17
- if (currentElement.matches('[data-uid="ROOT"], .builder, #storefront')) {
18
- break;
19
- }
20
- // Check if currentElement matches any of the selectors
21
- for (const [key, selector] of Object.entries(selectors)){
22
- if (!closestElements[key] && currentElement.matches(selector)) {
23
- closestElements[key] = currentElement;
24
- }
25
- }
26
- // If all closest elements are found, break the loop
27
- if (Object.values(closestElements).every((el)=>el !== null)) {
28
- break;
29
- }
30
- // Move up to the parent element
31
- currentElement = currentElement.parentElement;
32
- }
33
- // Reset ram
34
- currentElement = null;
35
- // Return
36
- return closestElements;
37
- };
38
-
39
- export { findDOMClosest };
1
+ let findDOMClosest=(l,e)=>{let t={$childrenSlot:null,$productFeatureImg:null,$section:null,$component:null,$disableIframeClick:null,$stickyMinimize:null,$toolbar:null,$gpText:null,$imageDetection:null,$popupTriggerButton:null},n=l;for(;n&&!n.matches('[data-uid="ROOT"], .builder, #storefront');){for(let[l,u]of Object.entries(e))!t[l]&&n.matches(u)&&(t[l]=n);if(Object.values(t).every(l=>null!==l))break;n=n.parentElement}return n=null,t};export{findDOMClosest};
@@ -1,18 +1 @@
1
- import { isOverToolbarPosition } from './isOverToolbarPosition.js';
2
- import { isSection } from './isSection.js';
3
- import { notVisible } from './notVisible.js';
4
-
5
- const findOverflowParent = (element, initEl)=>{
6
- const thisEl = element;
7
- const origEl = initEl || thisEl;
8
- if (!thisEl) return;
9
- if (isSection(thisEl)) return;
10
- if (notVisible(thisEl) && isOverToolbarPosition(initEl, thisEl)) return thisEl;
11
- if (thisEl.parentElement) {
12
- return findOverflowParent(thisEl.parentElement, origEl);
13
- } else {
14
- return;
15
- }
16
- };
17
-
18
- export { findOverflowParent };
1
+ import{isOverToolbarPosition as e}from"./isOverToolbarPosition.js";import{isSection as r}from"./isSection.js";import{notVisible as o}from"./notVisible.js";let findOverflowParent=(t,i)=>{let n=i||t;if(t&&!r(t))return o(t)&&e(i,t)?t:t.parentElement?findOverflowParent(t.parentElement,n):void 0};export{findOverflowParent};
@@ -1,16 +1 @@
1
- const getChildrenByAttrSelector = ($el, attrSelector)=>{
2
- const childLen = $el.children.length;
3
- if (childLen) {
4
- for(let i = 0; i < childLen; i++){
5
- const children = $el.children[i];
6
- if (children) {
7
- const is = children.getAttribute(attrSelector);
8
- if (is) {
9
- return children;
10
- }
11
- }
12
- }
13
- }
14
- };
15
-
16
- export { getChildrenByAttrSelector };
1
+ let getChildrenByAttrSelector=(e,t)=>{let r=e.children.length;if(r)for(let l=0;l<r;l++){let r=e.children[l];if(r){let e=r.getAttribute(t);if(e)return r}}};export{getChildrenByAttrSelector};
@@ -1,30 +1 @@
1
- const getDOMElementParents = ($el, selector, limit)=>{
2
- // Set up a parent array
3
- const parents = [];
4
- // Push each parent $elms to the array
5
- while($el){
6
- $el = $el.parentElement ?? undefined;
7
- if ($el) {
8
- if ($el.tagName === 'BODY' || $el.getAttribute('data-uid') === 'ROOT') {
9
- break;
10
- }
11
- if (selector) {
12
- if ($el.matches(selector)) {
13
- parents.push($el);
14
- if (limit && parents.length == limit) {
15
- return parents;
16
- }
17
- }
18
- continue;
19
- }
20
- parents.push($el);
21
- if (limit && parents.length == limit) {
22
- return parents;
23
- }
24
- }
25
- }
26
- // Return our parent array
27
- return parents;
28
- };
29
-
30
- export { getDOMElementParents };
1
+ let getDOMElementParents=(e,t,n)=>{let r=[];for(;e;)if(e=e.parentElement??void 0){if("BODY"===e.tagName||"ROOT"===e.getAttribute("data-uid"))break;if(t){if(e.matches(t)&&(r.push(e),n&&r.length==n))return r;continue}if(r.push(e),n&&r.length==n)break}return r};export{getDOMElementParents};