@gem-sdk/pages 2.0.0-dev.884 → 2.0.0-staging.118

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