@gem-sdk/core 1.5.17 → 1.5.22

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 (206) hide show
  1. package/dist/cjs/components/AddOn.js +7 -7
  2. package/dist/cjs/components/ComponentWrapper.js +14 -8
  3. package/dist/cjs/components/ComponentWrapperPreview.js +55 -46
  4. package/dist/cjs/components/Empty.js +1 -1
  5. package/dist/cjs/components/Render.js +50 -13
  6. package/dist/cjs/components/Render.liquid.js +81 -57
  7. package/dist/cjs/components/RenderBlock.js +41 -8
  8. package/dist/cjs/components/RenderPreview.js +51 -13
  9. package/dist/cjs/components/RenderSection.js +11 -7
  10. package/dist/cjs/components/constant.js +24 -24
  11. package/dist/cjs/contexts/AddonContext.js +25 -14
  12. package/dist/cjs/contexts/BuilderComponent.js +23 -19
  13. package/dist/cjs/contexts/BuilderContext.js +25 -19
  14. package/dist/cjs/contexts/BuilderPreviewContext.js +349 -341
  15. package/dist/cjs/contexts/CartLineContext.js +19 -14
  16. package/dist/cjs/contexts/CollectionContext.js +21 -13
  17. package/dist/cjs/contexts/ProductContext.js +136 -115
  18. package/dist/cjs/contexts/ProductListContext.js +21 -13
  19. package/dist/cjs/contexts/SectionContext.js +41 -37
  20. package/dist/cjs/contexts/ShopContext.js +49 -31
  21. package/dist/cjs/graphql/fragments/analytic.generated.js +1 -1
  22. package/dist/cjs/graphql/fragments/collection-detail.generated.js +1 -1
  23. package/dist/cjs/graphql/fragments/collection-product.generated.js +1 -1
  24. package/dist/cjs/graphql/fragments/custom-code.generated.js +1 -1
  25. package/dist/cjs/graphql/fragments/data-seo.generated.js +1 -1
  26. package/dist/cjs/graphql/fragments/media.generated.js +1 -1
  27. package/dist/cjs/graphql/fragments/product-little.generated.js +1 -1
  28. package/dist/cjs/graphql/fragments/product-option-value.generated.js +1 -1
  29. package/dist/cjs/graphql/fragments/product-option.generated.js +1 -1
  30. package/dist/cjs/graphql/fragments/product.generated.js +1 -1
  31. package/dist/cjs/graphql/fragments/published-custom-section.generated.js +1 -1
  32. package/dist/cjs/graphql/fragments/published-page-section.generated.js +1 -1
  33. package/dist/cjs/graphql/fragments/published-theme-page.generated.js +1 -1
  34. package/dist/cjs/graphql/fragments/published-theme-style.generated.js +1 -1
  35. package/dist/cjs/graphql/fragments/selected-option.generated.js +1 -1
  36. package/dist/cjs/graphql/fragments/variant.generated.js +1 -1
  37. package/dist/cjs/graphql/mutations/page-view-up.generated.js +1 -1
  38. package/dist/cjs/graphql/queries/products.generated.js +1 -1
  39. package/dist/cjs/graphql/queries/store-property.generated.js +1 -1
  40. package/dist/cjs/helpers/GlobalEvent.js +12 -10
  41. package/dist/cjs/helpers/background.js +96 -96
  42. package/dist/cjs/helpers/borders.js +123 -127
  43. package/dist/cjs/helpers/clone-deep.js +1 -1
  44. package/dist/cjs/helpers/cls.js +11 -15
  45. package/dist/cjs/helpers/colors.js +121 -156
  46. package/dist/cjs/helpers/compose-advance-style.js +115 -121
  47. package/dist/cjs/helpers/constant.js +16 -11
  48. package/dist/cjs/helpers/css-variable.js +2 -2
  49. package/dist/cjs/helpers/email.js +3 -3
  50. package/dist/cjs/helpers/flatten-connection.js +4 -5
  51. package/dist/cjs/helpers/get-resonsive-value.js +24 -25
  52. package/dist/cjs/helpers/get-shortname.js +87 -87
  53. package/dist/cjs/helpers/is-browser.js +2 -2
  54. package/dist/cjs/helpers/is-defined.js +2 -2
  55. package/dist/cjs/helpers/is-empty-children.js +2 -2
  56. package/dist/cjs/helpers/layout.js +9 -10
  57. package/dist/cjs/helpers/load-script.js +26 -27
  58. package/dist/cjs/helpers/make-style.js +77 -86
  59. package/dist/cjs/helpers/normalize-builder-data.js +18 -12
  60. package/dist/cjs/helpers/prefetch-queries.js +72 -52
  61. package/dist/cjs/helpers/product.js +25 -29
  62. package/dist/cjs/helpers/queries/get-collection.js +179 -167
  63. package/dist/cjs/helpers/queries/get-product-by-slug.js +103 -94
  64. package/dist/cjs/helpers/queries/get-product.js +121 -106
  65. package/dist/cjs/helpers/queries/get-products.js +137 -125
  66. package/dist/cjs/helpers/radius.js +78 -81
  67. package/dist/cjs/helpers/render.js +56 -56
  68. package/dist/cjs/helpers/shadow.js +38 -38
  69. package/dist/cjs/helpers/size.js +12 -13
  70. package/dist/cjs/helpers/spacing.js +35 -37
  71. package/dist/cjs/helpers/tracking/fpixel.js +21 -22
  72. package/dist/cjs/helpers/tracking/gtag.js +84 -90
  73. package/dist/cjs/helpers/tracking/tiktokpixel.js +12 -12
  74. package/dist/cjs/helpers/typography.js +2 -2
  75. package/dist/cjs/hooks/cart/use-add-to-cart.js +10 -10
  76. package/dist/cjs/hooks/cart/use-cart-data.js +18 -16
  77. package/dist/cjs/hooks/cart/use-cart-discount-codes-update.js +10 -10
  78. package/dist/cjs/hooks/cart/use-cart-note-update.js +10 -10
  79. package/dist/cjs/hooks/cart/use-create-cart.js +12 -12
  80. package/dist/cjs/hooks/cart/use-remove-cart-item.js +10 -10
  81. package/dist/cjs/hooks/cart/use-update-cart-item.js +10 -10
  82. package/dist/cjs/hooks/shop/use-collection-query.js +12 -6
  83. package/dist/cjs/hooks/shop/use-product-query.js +12 -6
  84. package/dist/cjs/hooks/shop/use-products-query.js +14 -6
  85. package/dist/cjs/hooks/shop.js +86 -67
  86. package/dist/cjs/hooks/use-current-device.js +14 -16
  87. package/dist/cjs/hooks/use-lazy-video.js +7 -7
  88. package/dist/cjs/hooks/useCartId.js +35 -27
  89. package/dist/cjs/hooks/useCartLine.js +2 -2
  90. package/dist/cjs/hooks/useCartUI.js +37 -31
  91. package/dist/cjs/hooks/useCollection.js +2 -2
  92. package/dist/cjs/hooks/useFetchHandle.js +6 -6
  93. package/dist/cjs/hooks/useFormatMoney.js +11 -7
  94. package/dist/cjs/hooks/useIsomorphicLayoutEffect.js +1 -1
  95. package/dist/cjs/hooks/useLoadScript.js +22 -20
  96. package/dist/cjs/hooks/useMoney.js +59 -42
  97. package/dist/cjs/hooks/usePrevious.js +12 -10
  98. package/dist/cjs/hooks/useProduct.js +92 -69
  99. package/dist/cjs/hooks/useProductList.js +11 -11
  100. package/dist/cjs/hooks/useSuspenseFetch.js +20 -17
  101. package/dist/cjs/hooks/useSwatchesOptions.js +32 -30
  102. package/dist/cjs/types/global-style.js +9 -2
  103. package/dist/esm/components/AddOn.js +7 -7
  104. package/dist/esm/components/ComponentWrapper.js +14 -8
  105. package/dist/esm/components/ComponentWrapperPreview.js +55 -46
  106. package/dist/esm/components/Empty.js +1 -1
  107. package/dist/esm/components/Render.js +50 -13
  108. package/dist/esm/components/Render.liquid.js +81 -57
  109. package/dist/esm/components/RenderBlock.js +41 -8
  110. package/dist/esm/components/RenderPreview.js +51 -13
  111. package/dist/esm/components/RenderSection.js +11 -7
  112. package/dist/esm/components/constant.js +24 -24
  113. package/dist/esm/contexts/AddonContext.js +26 -15
  114. package/dist/esm/contexts/BuilderComponent.js +24 -20
  115. package/dist/esm/contexts/BuilderContext.js +26 -20
  116. package/dist/esm/contexts/BuilderPreviewContext.js +350 -342
  117. package/dist/esm/contexts/CartLineContext.js +20 -15
  118. package/dist/esm/contexts/CollectionContext.js +22 -14
  119. package/dist/esm/contexts/ProductContext.js +137 -116
  120. package/dist/esm/contexts/ProductListContext.js +22 -14
  121. package/dist/esm/contexts/SectionContext.js +42 -38
  122. package/dist/esm/contexts/ShopContext.js +50 -32
  123. package/dist/esm/graphql/fragments/analytic.generated.js +1 -1
  124. package/dist/esm/graphql/fragments/collection-detail.generated.js +1 -1
  125. package/dist/esm/graphql/fragments/collection-product.generated.js +1 -1
  126. package/dist/esm/graphql/fragments/custom-code.generated.js +1 -1
  127. package/dist/esm/graphql/fragments/data-seo.generated.js +1 -1
  128. package/dist/esm/graphql/fragments/media.generated.js +1 -1
  129. package/dist/esm/graphql/fragments/product-little.generated.js +1 -1
  130. package/dist/esm/graphql/fragments/product-option-value.generated.js +1 -1
  131. package/dist/esm/graphql/fragments/product-option.generated.js +1 -1
  132. package/dist/esm/graphql/fragments/product.generated.js +1 -1
  133. package/dist/esm/graphql/fragments/published-custom-section.generated.js +1 -1
  134. package/dist/esm/graphql/fragments/published-page-section.generated.js +1 -1
  135. package/dist/esm/graphql/fragments/published-theme-page.generated.js +1 -1
  136. package/dist/esm/graphql/fragments/published-theme-style.generated.js +1 -1
  137. package/dist/esm/graphql/fragments/selected-option.generated.js +1 -1
  138. package/dist/esm/graphql/fragments/variant.generated.js +1 -1
  139. package/dist/esm/graphql/mutations/page-view-up.generated.js +1 -1
  140. package/dist/esm/graphql/queries/products.generated.js +1 -1
  141. package/dist/esm/graphql/queries/store-property.generated.js +1 -1
  142. package/dist/esm/helpers/GlobalEvent.js +12 -10
  143. package/dist/esm/helpers/background.js +96 -96
  144. package/dist/esm/helpers/borders.js +123 -127
  145. package/dist/esm/helpers/clone-deep.js +1 -1
  146. package/dist/esm/helpers/cls.js +11 -15
  147. package/dist/esm/helpers/colors.js +121 -156
  148. package/dist/esm/helpers/compose-advance-style.js +115 -121
  149. package/dist/esm/helpers/constant.js +16 -11
  150. package/dist/esm/helpers/css-variable.js +2 -2
  151. package/dist/esm/helpers/email.js +3 -3
  152. package/dist/esm/helpers/flatten-connection.js +4 -5
  153. package/dist/esm/helpers/get-resonsive-value.js +24 -25
  154. package/dist/esm/helpers/get-shortname.js +87 -87
  155. package/dist/esm/helpers/is-browser.js +2 -2
  156. package/dist/esm/helpers/is-defined.js +2 -2
  157. package/dist/esm/helpers/is-empty-children.js +2 -2
  158. package/dist/esm/helpers/layout.js +9 -10
  159. package/dist/esm/helpers/load-script.js +26 -27
  160. package/dist/esm/helpers/make-style.js +77 -86
  161. package/dist/esm/helpers/normalize-builder-data.js +18 -12
  162. package/dist/esm/helpers/prefetch-queries.js +72 -52
  163. package/dist/esm/helpers/product.js +25 -29
  164. package/dist/esm/helpers/queries/get-collection.js +179 -167
  165. package/dist/esm/helpers/queries/get-product-by-slug.js +103 -94
  166. package/dist/esm/helpers/queries/get-product.js +121 -106
  167. package/dist/esm/helpers/queries/get-products.js +137 -125
  168. package/dist/esm/helpers/radius.js +78 -81
  169. package/dist/esm/helpers/render.js +56 -56
  170. package/dist/esm/helpers/shadow.js +38 -38
  171. package/dist/esm/helpers/size.js +12 -13
  172. package/dist/esm/helpers/spacing.js +35 -37
  173. package/dist/esm/helpers/tracking/fpixel.js +21 -22
  174. package/dist/esm/helpers/tracking/gtag.js +84 -90
  175. package/dist/esm/helpers/tracking/tiktokpixel.js +12 -12
  176. package/dist/esm/helpers/typography.js +2 -2
  177. package/dist/esm/hooks/cart/use-add-to-cart.js +10 -10
  178. package/dist/esm/hooks/cart/use-cart-data.js +18 -16
  179. package/dist/esm/hooks/cart/use-cart-discount-codes-update.js +10 -10
  180. package/dist/esm/hooks/cart/use-cart-note-update.js +10 -10
  181. package/dist/esm/hooks/cart/use-create-cart.js +12 -12
  182. package/dist/esm/hooks/cart/use-remove-cart-item.js +10 -10
  183. package/dist/esm/hooks/cart/use-update-cart-item.js +10 -10
  184. package/dist/esm/hooks/shop/use-collection-query.js +12 -6
  185. package/dist/esm/hooks/shop/use-product-query.js +12 -6
  186. package/dist/esm/hooks/shop/use-products-query.js +14 -6
  187. package/dist/esm/hooks/shop.js +86 -67
  188. package/dist/esm/hooks/use-current-device.js +14 -16
  189. package/dist/esm/hooks/use-lazy-video.js +7 -7
  190. package/dist/esm/hooks/useCartId.js +35 -27
  191. package/dist/esm/hooks/useCartLine.js +2 -2
  192. package/dist/esm/hooks/useCartUI.js +37 -31
  193. package/dist/esm/hooks/useCollection.js +2 -2
  194. package/dist/esm/hooks/useFetchHandle.js +6 -6
  195. package/dist/esm/hooks/useFormatMoney.js +11 -7
  196. package/dist/esm/hooks/useIsomorphicLayoutEffect.js +1 -1
  197. package/dist/esm/hooks/useLoadScript.js +22 -20
  198. package/dist/esm/hooks/useMoney.js +59 -42
  199. package/dist/esm/hooks/usePrevious.js +12 -10
  200. package/dist/esm/hooks/useProduct.js +92 -69
  201. package/dist/esm/hooks/useProductList.js +11 -11
  202. package/dist/esm/hooks/useSuspenseFetch.js +20 -17
  203. package/dist/esm/hooks/useSwatchesOptions.js +32 -30
  204. package/dist/esm/types/global-style.js +9 -2
  205. package/dist/types/index.d.ts +24 -2
  206. package/package.json +1 -1
@@ -3,12 +3,20 @@ import { getProducts } from '../../helpers/queries/get-products.js';
3
3
  import { useIsSampleProduct } from '../shop.js';
4
4
  import { useFetchHandle } from '../useFetchHandle.js';
5
5
 
6
- const useProductsQuery = (ids, options) => {
7
- const fetcher = useFetchHandle();
8
- const isSample = useIsSampleProduct();
9
- return useSWR(['query/products', { ids: [...(ids ?? [])]?.sort(), isSample }], async ([, arg]) => {
10
- return getProducts(fetcher, arg);
11
- }, options);
6
+ const useProductsQuery = (ids, options)=>{
7
+ const fetcher = useFetchHandle();
8
+ const isSample = useIsSampleProduct();
9
+ return useSWR([
10
+ 'query/products',
11
+ {
12
+ ids: [
13
+ ...ids ?? []
14
+ ]?.sort(),
15
+ isSample
16
+ }
17
+ ], async ([, arg])=>{
18
+ return getProducts(fetcher, arg);
19
+ }, options);
12
20
  };
13
21
 
14
22
  export { useProductsQuery };
@@ -2,73 +2,92 @@ import { useMemo } from 'react';
2
2
  import { useSWRConfig } from 'swr';
3
3
  import { useShopStore } from '../contexts/ShopContext.js';
4
4
 
5
- const useLocale = () => {
6
- const locale = useShopStore((state) => state.locale);
7
- const changeLocale = useShopStore((state) => state.changeLocale);
8
- return useMemo(() => ({ locale, changeLocale }), [locale, changeLocale]);
9
- };
10
- const useCurrency = () => {
11
- const currency = useShopStore((state) => state.currency);
12
- const changeCurrency = useShopStore((state) => state.changeCurrency);
13
- return useMemo(() => ({ currency, changeCurrency }), [currency, changeCurrency]);
14
- };
15
- const useSwatches = () => {
16
- const swatches = useShopStore((state) => state.swatches);
17
- const changeSwatches = useShopStore((state) => state.changeSwatches);
18
- return useMemo(() => ({ swatches, changeSwatches }), [swatches, changeSwatches]);
19
- };
20
- const usePageType = () => {
21
- const pageType = useShopStore((state) => state.pageType);
22
- return useMemo(() => pageType || 'STATIC', [pageType]);
23
- };
24
- const useStoreFront = () => {
25
- const provider = useShopStore((state) => state.provider);
26
- const storefrontToken = useShopStore((state) => state.storefrontToken);
27
- const storefrontUrl = useShopStore((state) => state.storefrontUrl);
28
- return {
29
- provider,
30
- storefrontToken,
31
- storefrontUrl,
32
- };
33
- };
34
- const usePluginEnable = () => {
35
- return useShopStore((state) => state.plugins);
36
- };
37
- const useEditorMode = () => {
38
- return useShopStore((state) => state.mode);
39
- };
40
- const useMobileOnly = () => {
41
- return useShopStore((state) => state.mobileOnly);
42
- };
43
- const useMatchMutate = () => {
44
- const { cache, mutate } = useSWRConfig();
45
- return (matcher, ...args) => {
46
- if (!(cache instanceof Map)) {
47
- throw new Error('matchMutate requires the cache provider to be a Map instance');
48
- }
49
- const keys = [];
50
- cache.forEach((_, key) => {
51
- if (matcher.test(key)) {
52
- keys.push(key);
53
- }
54
- });
55
- const mutations = keys.map((key) => mutate(key, ...args));
56
- return Promise.all(mutations);
57
- };
58
- };
59
- function useConnectedShopify() {
60
- const { storefrontToken } = useStoreFront();
61
- return !!storefrontToken;
62
- }
63
- function useIsSampleProduct() {
64
- const { storefrontToken } = useStoreFront();
65
- return !storefrontToken;
66
- }
67
- function useCheckoutUrl(url) {
68
- const { storefrontToken } = useStoreFront();
69
- if (!url)
70
- return undefined;
71
- return storefrontToken ? `${url}?access_token=${storefrontToken}` : url;
5
+ const useLocale = ()=>{
6
+ const locale = useShopStore((state)=>state.locale);
7
+ const changeLocale = useShopStore((state)=>state.changeLocale);
8
+ return useMemo(()=>({
9
+ locale,
10
+ changeLocale
11
+ }), [
12
+ locale,
13
+ changeLocale
14
+ ]);
15
+ };
16
+ const useCurrency = ()=>{
17
+ const currency = useShopStore((state)=>state.currency);
18
+ const changeCurrency = useShopStore((state)=>state.changeCurrency);
19
+ return useMemo(()=>({
20
+ currency,
21
+ changeCurrency
22
+ }), [
23
+ currency,
24
+ changeCurrency
25
+ ]);
26
+ };
27
+ const useSwatches = ()=>{
28
+ const swatches = useShopStore((state)=>state.swatches);
29
+ const changeSwatches = useShopStore((state)=>state.changeSwatches);
30
+ return useMemo(()=>({
31
+ swatches,
32
+ changeSwatches
33
+ }), [
34
+ swatches,
35
+ changeSwatches
36
+ ]);
37
+ };
38
+ const usePageType = ()=>{
39
+ const pageType = useShopStore((state)=>state.pageType);
40
+ return useMemo(()=>pageType || 'STATIC', [
41
+ pageType
42
+ ]);
43
+ };
44
+ const useStoreFront = ()=>{
45
+ const provider = useShopStore((state)=>state.provider);
46
+ const storefrontToken = useShopStore((state)=>state.storefrontToken);
47
+ const storefrontUrl = useShopStore((state)=>state.storefrontUrl);
48
+ return {
49
+ provider,
50
+ storefrontToken,
51
+ storefrontUrl
52
+ };
53
+ };
54
+ const usePluginEnable = ()=>{
55
+ return useShopStore((state)=>state.plugins);
56
+ };
57
+ const useEditorMode = ()=>{
58
+ return useShopStore((state)=>state.mode);
59
+ };
60
+ const useMobileOnly = ()=>{
61
+ return useShopStore((state)=>state.mobileOnly);
62
+ };
63
+ const useMatchMutate = ()=>{
64
+ const { cache , mutate } = useSWRConfig();
65
+ return (matcher, ...args)=>{
66
+ if (!(cache instanceof Map)) {
67
+ throw new Error('matchMutate requires the cache provider to be a Map instance');
68
+ }
69
+ const keys = [];
70
+ cache.forEach((_, key)=>{
71
+ if (matcher.test(key)) {
72
+ keys.push(key);
73
+ }
74
+ });
75
+ const mutations = keys.map((key)=>mutate(key, ...args));
76
+ return Promise.all(mutations);
77
+ };
78
+ };
79
+ function useConnectedShopify() {
80
+ const { storefrontToken } = useStoreFront();
81
+ return !!storefrontToken;
82
+ }
83
+ function useIsSampleProduct() {
84
+ const { storefrontToken } = useStoreFront();
85
+ return !storefrontToken;
86
+ }
87
+ function useCheckoutUrl(url) {
88
+ const { storefrontToken } = useStoreFront();
89
+ if (!url) return undefined;
90
+ return storefrontToken ? `${url}?access_token=${storefrontToken}` : url;
72
91
  }
73
92
 
74
93
  export { useCheckoutUrl, useConnectedShopify, useCurrency, useEditorMode, useIsSampleProduct, useLocale, useMatchMutate, useMobileOnly, usePageType, usePluginEnable, useStoreFront, useSwatches };
@@ -1,21 +1,19 @@
1
1
  import { useSyncExternalStore } from 'react';
2
2
 
3
- function subscribe(callback) {
4
- window.addEventListener('resize', callback);
5
- return () => window.removeEventListener('resize', callback);
6
- }
7
- const useCurrentDevice = () => {
8
- return useSyncExternalStore(subscribe, () => {
9
- if (window.innerWidth < 768) {
10
- return 'mobile';
11
- }
12
- else if (window.innerWidth >= 768 && window.innerWidth < 1024) {
13
- return 'tablet';
14
- }
15
- else {
16
- return 'desktop';
17
- }
18
- }, () => 'desktop');
3
+ function subscribe(callback) {
4
+ window.addEventListener('resize', callback);
5
+ return ()=>window.removeEventListener('resize', callback);
6
+ }
7
+ const useCurrentDevice = ()=>{
8
+ return useSyncExternalStore(subscribe, ()=>{
9
+ if (window.innerWidth < 768) {
10
+ return 'mobile';
11
+ } else if (window.innerWidth >= 768 && window.innerWidth < 1024) {
12
+ return 'tablet';
13
+ } else {
14
+ return 'desktop';
15
+ }
16
+ }, ()=>'desktop');
19
17
  };
20
18
 
21
19
  export { useCurrentDevice };
@@ -1,13 +1,13 @@
1
1
  import { useEffect } from 'react';
2
2
  import LazyLoad from 'vanilla-lazyload';
3
3
 
4
- const useLazyVideo = () => {
5
- useEffect(() => {
6
- const lazyLoadInstance = new LazyLoad({
7
- use_native: true,
8
- });
9
- lazyLoadInstance.update();
10
- }, []);
4
+ const useLazyVideo = ()=>{
5
+ useEffect(()=>{
6
+ const lazyLoadInstance = new LazyLoad({
7
+ use_native: true
8
+ });
9
+ lazyLoadInstance.update();
10
+ }, []);
11
11
  };
12
12
 
13
13
  export { useLazyVideo };
@@ -1,32 +1,40 @@
1
1
  import { useSyncExternalStore, useCallback, useMemo } from 'react';
2
2
 
3
- const cartKey = 'cart-id';
4
- const getCartId = () => {
5
- return window.localStorage.getItem(cartKey);
6
- };
7
- const writeCartId = (value) => {
8
- if (value) {
9
- window.localStorage.setItem(cartKey, value);
10
- }
11
- };
12
- const removeCartId = () => {
13
- window.localStorage.removeItem(cartKey);
14
- };
15
- const subscribeStorage = (callback) => {
16
- window.addEventListener('storage', callback);
17
- return () => {
18
- window.removeEventListener('storage', callback);
19
- };
20
- };
21
- const useCartId = () => {
22
- const cartId = useSyncExternalStore(subscribeStorage, getCartId, () => undefined);
23
- const updateCartId = useCallback((val) => {
24
- writeCartId(val);
25
- }, []);
26
- const clearCartId = useCallback(() => {
27
- removeCartId();
28
- }, []);
29
- return useMemo(() => ({ cartId, updateCartId, clearCartId }), [cartId, clearCartId, updateCartId]);
3
+ const cartKey = 'cart-id';
4
+ const getCartId = ()=>{
5
+ return window.localStorage.getItem(cartKey);
6
+ };
7
+ const writeCartId = (value)=>{
8
+ if (value) {
9
+ window.localStorage.setItem(cartKey, value);
10
+ }
11
+ };
12
+ const removeCartId = ()=>{
13
+ window.localStorage.removeItem(cartKey);
14
+ };
15
+ const subscribeStorage = (callback)=>{
16
+ window.addEventListener('storage', callback);
17
+ return ()=>{
18
+ window.removeEventListener('storage', callback);
19
+ };
20
+ };
21
+ const useCartId = ()=>{
22
+ const cartId = useSyncExternalStore(subscribeStorage, getCartId, ()=>undefined);
23
+ const updateCartId = useCallback((val)=>{
24
+ writeCartId(val);
25
+ }, []);
26
+ const clearCartId = useCallback(()=>{
27
+ removeCartId();
28
+ }, []);
29
+ return useMemo(()=>({
30
+ cartId,
31
+ updateCartId,
32
+ clearCartId
33
+ }), [
34
+ cartId,
35
+ clearCartId,
36
+ updateCartId
37
+ ]);
30
38
  };
31
39
 
32
40
  export { useCartId as default };
@@ -1,7 +1,7 @@
1
1
  import { useCartLineStore } from '../contexts/CartLineContext.js';
2
2
 
3
- const useCartLine = () => {
4
- return useCartLineStore((s) => s.line);
3
+ const useCartLine = ()=>{
4
+ return useCartLineStore((s)=>s.line);
5
5
  };
6
6
 
7
7
  export { useCartLine as default };
@@ -2,37 +2,43 @@ import { useCallback } from 'react';
2
2
  import { create } from 'zustand';
3
3
  import { usePluginEnable } from './shop.js';
4
4
 
5
- const useStore = create((set) => ({
6
- isCartOpen: false,
7
- setOpen: (isCartOpen) => {
8
- const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;
9
- const computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);
10
- if (isCartOpen) {
11
- document.body.style.overflow = `hidden`;
12
- document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`;
13
- }
14
- else {
15
- document.body.style.overflow = '';
16
- document.body.style.paddingRight = '';
17
- }
18
- set({ isCartOpen });
19
- },
20
- }));
21
- function useCartUI() {
22
- const plugins = usePluginEnable();
23
- const isCartOpen = useStore((s) => s.isCartOpen);
24
- const setOpen = useStore((s) => s.setOpen);
25
- const openCart = useCallback(() => {
26
- if (plugins?.includes('cart-drawer')) {
27
- setOpen(true);
28
- }
29
- }, [plugins, setOpen]);
30
- const closeCart = useCallback(() => setOpen(false), [setOpen]);
31
- return {
32
- isCartOpen,
33
- openCart,
34
- closeCart,
35
- };
5
+ const useStore = create((set)=>({
6
+ isCartOpen: false,
7
+ setOpen: (isCartOpen)=>{
8
+ const scrollBarGap = window.innerWidth - document.documentElement.clientWidth;
9
+ const computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);
10
+ if (isCartOpen) {
11
+ document.body.style.overflow = `hidden`;
12
+ document.body.style.paddingRight = `${computedBodyPaddingRight + scrollBarGap}px`;
13
+ } else {
14
+ document.body.style.overflow = '';
15
+ document.body.style.paddingRight = '';
16
+ }
17
+ set({
18
+ isCartOpen
19
+ });
20
+ }
21
+ }));
22
+ function useCartUI() {
23
+ const plugins = usePluginEnable();
24
+ const isCartOpen = useStore((s)=>s.isCartOpen);
25
+ const setOpen = useStore((s)=>s.setOpen);
26
+ const openCart = useCallback(()=>{
27
+ if (plugins?.includes('cart-drawer')) {
28
+ setOpen(true);
29
+ }
30
+ }, [
31
+ plugins,
32
+ setOpen
33
+ ]);
34
+ const closeCart = useCallback(()=>setOpen(false), [
35
+ setOpen
36
+ ]);
37
+ return {
38
+ isCartOpen,
39
+ openCart,
40
+ closeCart
41
+ };
36
42
  }
37
43
 
38
44
  export { useCartUI as default };
@@ -1,7 +1,7 @@
1
1
  import { useCollectionStore } from '../contexts/CollectionContext.js';
2
2
 
3
- const useCollection = () => {
4
- return useCollectionStore((s) => s.collection);
3
+ const useCollection = ()=>{
4
+ return useCollectionStore((s)=>s.collection);
5
5
  };
6
6
 
7
7
  export { useCollection };
@@ -1,11 +1,11 @@
1
1
  import { useSWRConfig } from 'swr';
2
2
 
3
- const useFetchHandle = () => {
4
- const { fetcher } = useSWRConfig();
5
- if (!fetcher) {
6
- throw new Error('Application must be init within a fetcher');
7
- }
8
- return fetcher;
3
+ const useFetchHandle = ()=>{
4
+ const { fetcher } = useSWRConfig();
5
+ if (!fetcher) {
6
+ throw new Error('Application must be init within a fetcher');
7
+ }
8
+ return fetcher;
9
9
  };
10
10
 
11
11
  export { useFetchHandle };
@@ -1,13 +1,17 @@
1
1
  import { useCallback } from 'react';
2
2
  import { useLocale } from './shop.js';
3
3
 
4
- const useFormatMoney = () => {
5
- const { locale } = useLocale();
6
- const formatMoney = useCallback((value, options) => new Intl.NumberFormat(locale, {
7
- style: 'currency',
8
- ...options,
9
- }).format(value), [locale]);
10
- return { formatMoney };
4
+ const useFormatMoney = ()=>{
5
+ const { locale } = useLocale();
6
+ const formatMoney = useCallback((value, options)=>new Intl.NumberFormat(locale, {
7
+ style: 'currency',
8
+ ...options
9
+ }).format(value), [
10
+ locale
11
+ ]);
12
+ return {
13
+ formatMoney
14
+ };
11
15
  };
12
16
 
13
17
  export { useFormatMoney as default };
@@ -1,6 +1,6 @@
1
1
  import { useLayoutEffect } from 'react';
2
2
 
3
- // const isBrowser = typeof window !== 'undefined';
3
+ // const isBrowser = typeof window !== 'undefined';
4
4
  const useIsomorphicLayoutEffect = useLayoutEffect;
5
5
 
6
6
  export { useIsomorphicLayoutEffect as default };
@@ -1,26 +1,28 @@
1
1
  import { useState, useEffect } from 'react';
2
2
  import { loadScript } from '../helpers/load-script.js';
3
3
 
4
- /**
5
- * The `useLoadScript` hook loads an external script tag on the client-side.
6
- */
7
- function useLoadScript(url, options) {
8
- const [status, setStatus] = useState('loading');
9
- const stringifiedOptions = JSON.stringify(options);
10
- useEffect(() => {
11
- async function loadScriptWrapper() {
12
- try {
13
- setStatus('loading');
14
- await loadScript(url, options);
15
- setStatus('done');
16
- }
17
- catch (error) {
18
- setStatus('error');
19
- }
20
- }
21
- loadScriptWrapper();
22
- }, [url, stringifiedOptions, options]);
23
- return status;
4
+ /**
5
+ * The `useLoadScript` hook loads an external script tag on the client-side.
6
+ */ function useLoadScript(url, options) {
7
+ const [status, setStatus] = useState('loading');
8
+ const stringifiedOptions = JSON.stringify(options);
9
+ useEffect(()=>{
10
+ async function loadScriptWrapper() {
11
+ try {
12
+ setStatus('loading');
13
+ await loadScript(url, options);
14
+ setStatus('done');
15
+ } catch (error) {
16
+ setStatus('error');
17
+ }
18
+ }
19
+ loadScriptWrapper();
20
+ }, [
21
+ url,
22
+ stringifiedOptions,
23
+ options
24
+ ]);
25
+ return status;
24
26
  }
25
27
 
26
28
  export { useLoadScript as default };
@@ -1,48 +1,65 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useLocale, useCurrency } from './shop.js';
3
3
 
4
- const NARROW_SYMBOL_MAP = {
5
- USD: '$',
6
- AUD: '$',
7
- CAD: '$',
8
- NZD: '$',
9
- EUR: '€',
10
- GBP: '£',
11
- INR: '₹',
12
- RUB: '₽',
13
- CNY: '¥',
14
- JPY: '¥',
15
- BRL: 'R$',
16
- };
17
- const useMoney = (money) => {
18
- const { locale } = useLocale();
19
- const { currency } = useCurrency();
20
- const options = useMemo(() => ({ style: 'currency', currency: currency }), [currency]);
21
- const value = useMemo(() => new Intl.NumberFormat(locale, options).format(money), [locale, options, money]);
22
- const baseParts = new Intl.NumberFormat(locale, options).formatToParts(money);
23
- const nameParts = new Intl.NumberFormat(locale, {
24
- ...options,
25
- currencyDisplay: 'name',
26
- }).formatToParts(money);
27
- const narrowParts = new Intl.NumberFormat(locale, {
28
- ...options,
29
- currencyDisplay: 'narrowSymbol',
30
- }).formatToParts(money);
31
- const moneyValue = useMemo(() => ({
32
- currencyCode: currency,
33
- currencyName: nameParts.find((part) => part.type === 'currency')?.value ?? // e.g. "US dollars"
34
- currency,
35
- currencyNarrowSymbol: narrowParts.find((part) => part.type === 'currency')?.value ?? // e.g. "$"
36
- (currency ? NARROW_SYMBOL_MAP[currency] : '') ??
37
- '',
38
- parts: baseParts,
39
- localizedString: value,
40
- amount: baseParts
41
- .filter((part) => ['decimal', 'fraction', 'group', 'integer', 'literal'].includes(part.type))
42
- .map((part) => part.value)
43
- .join(''),
44
- }), [baseParts, nameParts, narrowParts, value, currency]);
45
- return moneyValue;
4
+ const NARROW_SYMBOL_MAP = {
5
+ USD: '$',
6
+ AUD: '$',
7
+ CAD: '$',
8
+ NZD: '$',
9
+ EUR: '€',
10
+ GBP: '£',
11
+ INR: '₹',
12
+ RUB: '₽',
13
+ CNY: '¥',
14
+ JPY: '¥',
15
+ BRL: 'R$'
16
+ };
17
+ const useMoney = (money)=>{
18
+ const { locale } = useLocale();
19
+ const { currency } = useCurrency();
20
+ const options = useMemo(()=>({
21
+ style: 'currency',
22
+ currency: currency
23
+ }), [
24
+ currency
25
+ ]);
26
+ const value = useMemo(()=>new Intl.NumberFormat(locale, options).format(money), [
27
+ locale,
28
+ options,
29
+ money
30
+ ]);
31
+ const baseParts = new Intl.NumberFormat(locale, options).formatToParts(money);
32
+ const nameParts = new Intl.NumberFormat(locale, {
33
+ ...options,
34
+ currencyDisplay: 'name'
35
+ }).formatToParts(money);
36
+ const narrowParts = new Intl.NumberFormat(locale, {
37
+ ...options,
38
+ currencyDisplay: 'narrowSymbol'
39
+ }).formatToParts(money);
40
+ const moneyValue = useMemo(()=>({
41
+ currencyCode: currency,
42
+ currencyName: nameParts.find((part)=>part.type === 'currency')?.value ?? // e.g. "US dollars"
43
+ currency,
44
+ currencyNarrowSymbol: narrowParts.find((part)=>part.type === 'currency')?.value ?? // e.g. "$"
45
+ (currency ? NARROW_SYMBOL_MAP[currency] : '') ?? '',
46
+ parts: baseParts,
47
+ localizedString: value,
48
+ amount: baseParts.filter((part)=>[
49
+ 'decimal',
50
+ 'fraction',
51
+ 'group',
52
+ 'integer',
53
+ 'literal'
54
+ ].includes(part.type)).map((part)=>part.value).join('')
55
+ }), [
56
+ baseParts,
57
+ nameParts,
58
+ narrowParts,
59
+ value,
60
+ currency
61
+ ]);
62
+ return moneyValue;
46
63
  };
47
64
 
48
65
  export { useMoney as default };
@@ -1,15 +1,17 @@
1
1
  import { useRef, useEffect } from 'react';
2
2
 
3
- const usePrevious = (value) => {
4
- // The ref object is a generic container whose current property is mutable ...
5
- // ... and can hold any value, similar to an instance property on a class
6
- const ref = useRef();
7
- // Store current value in ref
8
- useEffect(() => {
9
- ref.current = value;
10
- }, [value]); // Only re-run if value changes
11
- // Return previous value (happens before update in useEffect above)
12
- return ref.current;
3
+ const usePrevious = (value)=>{
4
+ // The ref object is a generic container whose current property is mutable ...
5
+ // ... and can hold any value, similar to an instance property on a class
6
+ const ref = useRef();
7
+ // Store current value in ref
8
+ useEffect(()=>{
9
+ ref.current = value;
10
+ }, [
11
+ value
12
+ ]); // Only re-run if value changes
13
+ // Return previous value (happens before update in useEffect above)
14
+ return ref.current;
13
15
  };
14
16
 
15
17
  export { usePrevious };