@gem-sdk/core 1.0.0

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 (214) hide show
  1. package/dist/cjs/components/AddOn.js +18 -0
  2. package/dist/cjs/components/ComponentWrapper.js +45 -0
  3. package/dist/cjs/components/ComponentWrapperPreview.js +58 -0
  4. package/dist/cjs/components/Empty.js +7 -0
  5. package/dist/cjs/components/Render.js +28 -0
  6. package/dist/cjs/components/RenderBlock.js +21 -0
  7. package/dist/cjs/components/RenderPreview.js +28 -0
  8. package/dist/cjs/components/RenderSection.js +19 -0
  9. package/dist/cjs/contexts/AddonContext.js +25 -0
  10. package/dist/cjs/contexts/BuilderComponent.js +30 -0
  11. package/dist/cjs/contexts/BuilderContext.js +29 -0
  12. package/dist/cjs/contexts/BuilderPreviewContext.js +353 -0
  13. package/dist/cjs/contexts/CartLineContext.js +24 -0
  14. package/dist/cjs/contexts/CollectionContext.js +24 -0
  15. package/dist/cjs/contexts/ProductContext.js +126 -0
  16. package/dist/cjs/contexts/ProductListContext.js +24 -0
  17. package/dist/cjs/contexts/SectionContext.js +49 -0
  18. package/dist/cjs/contexts/ShopContext.js +43 -0
  19. package/dist/cjs/graphql/fragments/analytic.generated.js +11 -0
  20. package/dist/cjs/graphql/fragments/collection-detail.generated.js +13 -0
  21. package/dist/cjs/graphql/fragments/collection-product.generated.js +26 -0
  22. package/dist/cjs/graphql/fragments/data-seo.generated.js +11 -0
  23. package/dist/cjs/graphql/fragments/media.generated.js +14 -0
  24. package/dist/cjs/graphql/fragments/product-little.generated.js +25 -0
  25. package/dist/cjs/graphql/fragments/product-option-value.generated.js +13 -0
  26. package/dist/cjs/graphql/fragments/product-option.generated.js +14 -0
  27. package/dist/cjs/graphql/fragments/product.generated.js +33 -0
  28. package/dist/cjs/graphql/fragments/published-custom-section.generated.js +12 -0
  29. package/dist/cjs/graphql/fragments/published-page-section.generated.js +11 -0
  30. package/dist/cjs/graphql/fragments/published-theme-page.generated.js +27 -0
  31. package/dist/cjs/graphql/fragments/published-theme-style.generated.js +11 -0
  32. package/dist/cjs/graphql/fragments/selected-option.generated.js +11 -0
  33. package/dist/cjs/graphql/fragments/variant.generated.js +35 -0
  34. package/dist/cjs/graphql/queries/collection-detail-filter.generated.js +34 -0
  35. package/dist/cjs/graphql/queries/collection.generated.js +52 -0
  36. package/dist/cjs/graphql/queries/preview-page.generated.js +23 -0
  37. package/dist/cjs/graphql/queries/product-little-detail.generated.js +24 -0
  38. package/dist/cjs/graphql/queries/product-medias.generated.js +29 -0
  39. package/dist/cjs/graphql/queries/product-variants.generated.js +33 -0
  40. package/dist/cjs/graphql/queries/products.generated.js +41 -0
  41. package/dist/cjs/graphql/queries/published-theme-pages.generated.js +23 -0
  42. package/dist/cjs/graphql/queries/storeProperty.generated.js +12 -0
  43. package/dist/cjs/helpers/GlobalEvent.js +17 -0
  44. package/dist/cjs/helpers/background.js +104 -0
  45. package/dist/cjs/helpers/borders.js +138 -0
  46. package/dist/cjs/helpers/clone-deep.js +5 -0
  47. package/dist/cjs/helpers/cls.js +20 -0
  48. package/dist/cjs/helpers/colors.js +157 -0
  49. package/dist/cjs/helpers/compose-advance-style.js +132 -0
  50. package/dist/cjs/helpers/constant.js +17 -0
  51. package/dist/cjs/helpers/css-variable.js +7 -0
  52. package/dist/cjs/helpers/email.js +11 -0
  53. package/dist/cjs/helpers/flatten-connection.js +10 -0
  54. package/dist/cjs/helpers/fpixel.js +29 -0
  55. package/dist/cjs/helpers/get-resonsive-value.js +32 -0
  56. package/dist/cjs/helpers/get-shortname.js +92 -0
  57. package/dist/cjs/helpers/gtag.js +48 -0
  58. package/dist/cjs/helpers/is-browser.js +9 -0
  59. package/dist/cjs/helpers/is-defined.js +7 -0
  60. package/dist/cjs/helpers/is-empty-children.js +12 -0
  61. package/dist/cjs/helpers/layout.js +17 -0
  62. package/dist/cjs/helpers/load-script.js +32 -0
  63. package/dist/cjs/helpers/make-style.js +99 -0
  64. package/dist/cjs/helpers/normalize-builder-data.js +17 -0
  65. package/dist/cjs/helpers/prefetch-queries.js +68 -0
  66. package/dist/cjs/helpers/product.js +35 -0
  67. package/dist/cjs/helpers/queries/get-collection.js +173 -0
  68. package/dist/cjs/helpers/queries/get-product-by-slug.js +99 -0
  69. package/dist/cjs/helpers/queries/get-product.js +113 -0
  70. package/dist/cjs/helpers/queries/get-products.js +135 -0
  71. package/dist/cjs/helpers/radius.js +91 -0
  72. package/dist/cjs/helpers/shadow.js +48 -0
  73. package/dist/cjs/helpers/size.js +20 -0
  74. package/dist/cjs/helpers/spacing.js +45 -0
  75. package/dist/cjs/helpers/tiktokpixel.js +17 -0
  76. package/dist/cjs/helpers/typography.js +7 -0
  77. package/dist/cjs/hooks/cart/use-add-to-cart.js +20 -0
  78. package/dist/cjs/hooks/cart/use-cart-data.js +26 -0
  79. package/dist/cjs/hooks/cart/use-cart-discount-codes-update.js +20 -0
  80. package/dist/cjs/hooks/cart/use-cart-note-update.js +20 -0
  81. package/dist/cjs/hooks/cart/use-create-cart.js +22 -0
  82. package/dist/cjs/hooks/cart/use-remove-cart-item.js +20 -0
  83. package/dist/cjs/hooks/cart/use-update-cart-item.js +20 -0
  84. package/dist/cjs/hooks/shop/use-collection-query.js +16 -0
  85. package/dist/cjs/hooks/shop/use-product-query.js +16 -0
  86. package/dist/cjs/hooks/shop/use-products-query.js +16 -0
  87. package/dist/cjs/hooks/shop.js +80 -0
  88. package/dist/cjs/hooks/use-current-device.js +23 -0
  89. package/dist/cjs/hooks/use-lazy-video.js +15 -0
  90. package/dist/cjs/hooks/useCartId.js +36 -0
  91. package/dist/cjs/hooks/useCartLine.js +11 -0
  92. package/dist/cjs/hooks/useCartUI.js +42 -0
  93. package/dist/cjs/hooks/useCollection.js +9 -0
  94. package/dist/cjs/hooks/useFetchHandle.js +13 -0
  95. package/dist/cjs/hooks/useFormatMoney.js +17 -0
  96. package/dist/cjs/hooks/useIsomorphicLayoutEffect.js +10 -0
  97. package/dist/cjs/hooks/useLoadScript.js +30 -0
  98. package/dist/cjs/hooks/useMoney.js +52 -0
  99. package/dist/cjs/hooks/usePrevious.js +17 -0
  100. package/dist/cjs/hooks/useProduct.js +90 -0
  101. package/dist/cjs/hooks/useProductList.js +21 -0
  102. package/dist/cjs/hooks/useSuspenseFetch.js +24 -0
  103. package/dist/cjs/hooks/useSwatchesOptions.js +39 -0
  104. package/dist/cjs/index.js +229 -0
  105. package/dist/cjs/types/global-style.js +7 -0
  106. package/dist/cjs/types/shop.js +2 -0
  107. package/dist/esm/components/AddOn.js +14 -0
  108. package/dist/esm/components/ComponentWrapper.js +40 -0
  109. package/dist/esm/components/ComponentWrapperPreview.js +54 -0
  110. package/dist/esm/components/Empty.js +3 -0
  111. package/dist/esm/components/Render.js +24 -0
  112. package/dist/esm/components/RenderBlock.js +17 -0
  113. package/dist/esm/components/RenderPreview.js +24 -0
  114. package/dist/esm/components/RenderSection.js +15 -0
  115. package/dist/esm/contexts/AddonContext.js +21 -0
  116. package/dist/esm/contexts/BuilderComponent.js +27 -0
  117. package/dist/esm/contexts/BuilderContext.js +26 -0
  118. package/dist/esm/contexts/BuilderPreviewContext.js +350 -0
  119. package/dist/esm/contexts/CartLineContext.js +21 -0
  120. package/dist/esm/contexts/CollectionContext.js +20 -0
  121. package/dist/esm/contexts/ProductContext.js +123 -0
  122. package/dist/esm/contexts/ProductListContext.js +20 -0
  123. package/dist/esm/contexts/SectionContext.js +45 -0
  124. package/dist/esm/contexts/ShopContext.js +40 -0
  125. package/dist/esm/graphql/fragments/analytic.generated.js +9 -0
  126. package/dist/esm/graphql/fragments/collection-detail.generated.js +11 -0
  127. package/dist/esm/graphql/fragments/collection-product.generated.js +24 -0
  128. package/dist/esm/graphql/fragments/data-seo.generated.js +9 -0
  129. package/dist/esm/graphql/fragments/media.generated.js +12 -0
  130. package/dist/esm/graphql/fragments/product-little.generated.js +23 -0
  131. package/dist/esm/graphql/fragments/product-option-value.generated.js +11 -0
  132. package/dist/esm/graphql/fragments/product-option.generated.js +12 -0
  133. package/dist/esm/graphql/fragments/product.generated.js +31 -0
  134. package/dist/esm/graphql/fragments/published-custom-section.generated.js +10 -0
  135. package/dist/esm/graphql/fragments/published-page-section.generated.js +9 -0
  136. package/dist/esm/graphql/fragments/published-theme-page.generated.js +25 -0
  137. package/dist/esm/graphql/fragments/published-theme-style.generated.js +9 -0
  138. package/dist/esm/graphql/fragments/selected-option.generated.js +9 -0
  139. package/dist/esm/graphql/fragments/variant.generated.js +33 -0
  140. package/dist/esm/graphql/queries/collection-detail-filter.generated.js +32 -0
  141. package/dist/esm/graphql/queries/collection.generated.js +50 -0
  142. package/dist/esm/graphql/queries/preview-page.generated.js +21 -0
  143. package/dist/esm/graphql/queries/product-little-detail.generated.js +22 -0
  144. package/dist/esm/graphql/queries/product-medias.generated.js +27 -0
  145. package/dist/esm/graphql/queries/product-variants.generated.js +31 -0
  146. package/dist/esm/graphql/queries/products.generated.js +38 -0
  147. package/dist/esm/graphql/queries/published-theme-pages.generated.js +21 -0
  148. package/dist/esm/graphql/queries/storeProperty.generated.js +10 -0
  149. package/dist/esm/helpers/GlobalEvent.js +13 -0
  150. package/dist/esm/helpers/background.js +102 -0
  151. package/dist/esm/helpers/borders.js +133 -0
  152. package/dist/esm/helpers/clone-deep.js +3 -0
  153. package/dist/esm/helpers/cls.js +18 -0
  154. package/dist/esm/helpers/colors.js +145 -0
  155. package/dist/esm/helpers/compose-advance-style.js +130 -0
  156. package/dist/esm/helpers/constant.js +13 -0
  157. package/dist/esm/helpers/css-variable.js +5 -0
  158. package/dist/esm/helpers/email.js +6 -0
  159. package/dist/esm/helpers/flatten-connection.js +8 -0
  160. package/dist/esm/helpers/fpixel.js +25 -0
  161. package/dist/esm/helpers/get-resonsive-value.js +28 -0
  162. package/dist/esm/helpers/get-shortname.js +90 -0
  163. package/dist/esm/helpers/gtag.js +45 -0
  164. package/dist/esm/helpers/is-browser.js +5 -0
  165. package/dist/esm/helpers/is-defined.js +5 -0
  166. package/dist/esm/helpers/is-empty-children.js +7 -0
  167. package/dist/esm/helpers/layout.js +15 -0
  168. package/dist/esm/helpers/load-script.js +30 -0
  169. package/dist/esm/helpers/make-style.js +91 -0
  170. package/dist/esm/helpers/normalize-builder-data.js +15 -0
  171. package/dist/esm/helpers/prefetch-queries.js +66 -0
  172. package/dist/esm/helpers/product.js +32 -0
  173. package/dist/esm/helpers/queries/get-collection.js +170 -0
  174. package/dist/esm/helpers/queries/get-product-by-slug.js +97 -0
  175. package/dist/esm/helpers/queries/get-product.js +109 -0
  176. package/dist/esm/helpers/queries/get-products.js +133 -0
  177. package/dist/esm/helpers/radius.js +86 -0
  178. package/dist/esm/helpers/shadow.js +45 -0
  179. package/dist/esm/helpers/size.js +18 -0
  180. package/dist/esm/helpers/spacing.js +42 -0
  181. package/dist/esm/helpers/tiktokpixel.js +15 -0
  182. package/dist/esm/helpers/typography.js +5 -0
  183. package/dist/esm/hooks/cart/use-add-to-cart.js +18 -0
  184. package/dist/esm/hooks/cart/use-cart-data.js +24 -0
  185. package/dist/esm/hooks/cart/use-cart-discount-codes-update.js +18 -0
  186. package/dist/esm/hooks/cart/use-cart-note-update.js +18 -0
  187. package/dist/esm/hooks/cart/use-create-cart.js +20 -0
  188. package/dist/esm/hooks/cart/use-remove-cart-item.js +18 -0
  189. package/dist/esm/hooks/cart/use-update-cart-item.js +18 -0
  190. package/dist/esm/hooks/shop/use-collection-query.js +14 -0
  191. package/dist/esm/hooks/shop/use-product-query.js +14 -0
  192. package/dist/esm/hooks/shop/use-products-query.js +14 -0
  193. package/dist/esm/hooks/shop.js +68 -0
  194. package/dist/esm/hooks/use-current-device.js +21 -0
  195. package/dist/esm/hooks/use-lazy-video.js +13 -0
  196. package/dist/esm/hooks/useCartId.js +32 -0
  197. package/dist/esm/hooks/useCartLine.js +7 -0
  198. package/dist/esm/hooks/useCartUI.js +38 -0
  199. package/dist/esm/hooks/useCollection.js +7 -0
  200. package/dist/esm/hooks/useFetchHandle.js +11 -0
  201. package/dist/esm/hooks/useFormatMoney.js +13 -0
  202. package/dist/esm/hooks/useIsomorphicLayoutEffect.js +6 -0
  203. package/dist/esm/hooks/useLoadScript.js +26 -0
  204. package/dist/esm/hooks/useMoney.js +48 -0
  205. package/dist/esm/hooks/usePrevious.js +15 -0
  206. package/dist/esm/hooks/useProduct.js +78 -0
  207. package/dist/esm/hooks/useProductList.js +16 -0
  208. package/dist/esm/hooks/useSuspenseFetch.js +20 -0
  209. package/dist/esm/hooks/useSwatchesOptions.js +35 -0
  210. package/dist/esm/index.js +82 -0
  211. package/dist/esm/types/global-style.js +4 -0
  212. package/dist/esm/types/shop.js +1 -0
  213. package/dist/types/index.d.ts +7393 -0
  214. package/package.json +50 -0
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+
5
+ const usePrevious = (value) => {
6
+ // The ref object is a generic container whose current property is mutable ...
7
+ // ... and can hold any value, similar to an instance property on a class
8
+ const ref = react.useRef();
9
+ // Store current value in ref
10
+ react.useEffect(() => {
11
+ ref.current = value;
12
+ }, [value]); // Only re-run if value changes
13
+ // Return previous value (happens before update in useEffect above)
14
+ return ref.current;
15
+ };
16
+
17
+ exports.usePrevious = usePrevious;
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var ProductContext = require('../contexts/ProductContext.js');
5
+ var flattenConnection = require('../helpers/flatten-connection.js');
6
+ require('swr');
7
+ var product = require('../helpers/product.js');
8
+
9
+ const useUniqProductID = () => {
10
+ return ProductContext.useProductStore((s) => s.uiqueId);
11
+ };
12
+ const useProduct = () => {
13
+ return ProductContext.useProductStore((s) => s.product);
14
+ };
15
+ const useFeaturedImageGlobal = () => {
16
+ return ProductContext.useProductStore((s) => s.featuredImageGlobal);
17
+ };
18
+ const useProductProperties = () => {
19
+ return ProductContext.useProductStore((s) => s.properties);
20
+ };
21
+ const useQuantity = () => {
22
+ const quantity = ProductContext.useProductStore((s) => s.quantity);
23
+ const decrement = ProductContext.useProductStore((s) => s.decrementQuantity);
24
+ const increment = ProductContext.useProductStore((s) => s.incrementQuantity);
25
+ const updateQuantity = ProductContext.useProductStore((s) => s.setQuantity);
26
+ const reset = react.useCallback(() => {
27
+ updateQuantity(1);
28
+ }, [updateQuantity]);
29
+ return react.useMemo(() => ({ quantity, increment, decrement, reset, setQuantity: updateQuantity }), [decrement, increment, quantity, reset, updateQuantity]);
30
+ };
31
+ const useSelectedOption = () => {
32
+ const setSelectedOption = ProductContext.useProductStore((s) => s.setSelectedOption);
33
+ const selectedOptions = ProductContext.useProductStore((s) => s.selectedOptions);
34
+ const forceSelectedOption = ProductContext.useProductStore((s) => s.forceSelectedOption);
35
+ const updateOption = react.useCallback((optionId, optionValue) => {
36
+ setSelectedOption(optionId, optionValue);
37
+ }, [setSelectedOption]);
38
+ return react.useMemo(() => ({
39
+ selectedOptions,
40
+ setSelectedOption: updateOption,
41
+ forceSelectedOption,
42
+ }), [selectedOptions, updateOption, forceSelectedOption]);
43
+ };
44
+ const useVariants = () => {
45
+ const variants = ProductContext.useProductStore((s) => s.product?.variants);
46
+ return flattenConnection.flattenConnection(variants);
47
+ };
48
+ const useVariant = (id) => {
49
+ const variants = useVariants();
50
+ return react.useMemo(() => variants?.find((v) => v?.id === id), [id, variants]);
51
+ };
52
+ const useCurrentVariant = () => {
53
+ const { selectedOptions } = useSelectedOption();
54
+ const variants = useVariants();
55
+ return react.useMemo(() => product.getSelectedVariant(variants, selectedOptions), [selectedOptions, variants]);
56
+ };
57
+ function checkInStock(variant) {
58
+ if (!variant)
59
+ return false;
60
+ return ((variant?.inventoryQuantity && variant.inventoryQuantity > 0) ||
61
+ !variant?.manageInventory ||
62
+ variant.inventoryPolicy === 'continue');
63
+ }
64
+ const useCurrentVariantInStock = () => {
65
+ const currentVariant = useCurrentVariant();
66
+ const isInStock = checkInStock(currentVariant);
67
+ return isInStock;
68
+ };
69
+ const useVariantOutStock = (optionId, optionValue) => {
70
+ const { selectedOptions } = useSelectedOption();
71
+ const variants = useVariants();
72
+ const matchedVariant = product.getSelectedVariant(variants, {
73
+ ...selectedOptions,
74
+ [optionId]: optionValue,
75
+ });
76
+ const isInStock = checkInStock(matchedVariant);
77
+ return !isInStock;
78
+ };
79
+
80
+ exports.useCurrentVariant = useCurrentVariant;
81
+ exports.useCurrentVariantInStock = useCurrentVariantInStock;
82
+ exports.useFeaturedImageGlobal = useFeaturedImageGlobal;
83
+ exports.useProduct = useProduct;
84
+ exports.useProductProperties = useProductProperties;
85
+ exports.useQuantity = useQuantity;
86
+ exports.useSelectedOption = useSelectedOption;
87
+ exports.useUniqProductID = useUniqProductID;
88
+ exports.useVariant = useVariant;
89
+ exports.useVariantOutStock = useVariantOutStock;
90
+ exports.useVariants = useVariants;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var ProductListContext = require('../contexts/ProductListContext.js');
4
+
5
+ const useProductList = () => {
6
+ return ProductListContext.useProductListStore((s) => s.collection);
7
+ };
8
+ const useProductListProducts = () => {
9
+ return ProductListContext.useProductListStore((s) => s.products);
10
+ };
11
+ const useProductListSettings = () => {
12
+ return ProductListContext.useProductListStore((s) => s.settings);
13
+ };
14
+ const useProductListStyles = () => {
15
+ return ProductListContext.useProductListStore((s) => s.styles);
16
+ };
17
+
18
+ exports.useProductList = useProductList;
19
+ exports.useProductListProducts = useProductListProducts;
20
+ exports.useProductListSettings = useProductListSettings;
21
+ exports.useProductListStyles = useProductListStyles;
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const cache = new Map();
6
+ const useSuspenseFetch = (key, promise) => {
7
+ const value = cache.get(key) || { status: 'new', data: null };
8
+ if (value.status === 'resolved') {
9
+ return { data: value.data };
10
+ }
11
+ promise()
12
+ .then((data) => {
13
+ value.status = 'resolved';
14
+ value.data = data;
15
+ cache.set(key, value);
16
+ })
17
+ .catch(() => {
18
+ value.status = 'error';
19
+ value.data = null;
20
+ });
21
+ throw promise();
22
+ };
23
+
24
+ exports.default = useSuspenseFetch;
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var shop = require('./shop.js');
6
+
7
+ const initialSwatchOptionValue = {
8
+ label: '',
9
+ colors: [],
10
+ imageUrl: '',
11
+ };
12
+ const initialGlobalSwatchesData = {
13
+ optionTitle: '',
14
+ optionType: '',
15
+ optionValues: [],
16
+ };
17
+ const useSwatchesOptions = (options) => {
18
+ const { swatches } = shop.useSwatches();
19
+ if (!options)
20
+ return [];
21
+ return options?.map((option) => {
22
+ const swatchOption = swatches?.find((sw) => sw?.optionTitle === option?.name) || { ...initialGlobalSwatchesData };
23
+ return {
24
+ ...option,
25
+ optionType: swatchOption ? swatchOption.optionType : '',
26
+ values: option.values?.map((val) => {
27
+ const swatchValue = (swatchOption &&
28
+ swatchOption?.optionValues?.find((swatOp) => swatOp?.label === val?.label)) || { ...initialSwatchOptionValue };
29
+ return {
30
+ ...val,
31
+ colors: swatchValue?.colors || [],
32
+ imageUrl: swatchValue?.imageUrl || '',
33
+ };
34
+ }),
35
+ };
36
+ });
37
+ };
38
+
39
+ exports.default = useSwatchesOptions;
@@ -0,0 +1,229 @@
1
+ 'use strict';
2
+
3
+ var AddOn = require('./components/AddOn.js');
4
+ var Render = require('./components/Render.js');
5
+ var RenderPreview = require('./components/RenderPreview.js');
6
+ var AddonContext = require('./contexts/AddonContext.js');
7
+ var BuilderComponent = require('./contexts/BuilderComponent.js');
8
+ var BuilderContext = require('./contexts/BuilderContext.js');
9
+ var BuilderPreviewContext = require('./contexts/BuilderPreviewContext.js');
10
+ var CartLineContext = require('./contexts/CartLineContext.js');
11
+ var ProductListContext = require('./contexts/ProductListContext.js');
12
+ var ProductContext = require('./contexts/ProductContext.js');
13
+ var SectionContext = require('./contexts/SectionContext.js');
14
+ var ShopContext = require('./contexts/ShopContext.js');
15
+ var CollectionContext = require('./contexts/CollectionContext.js');
16
+ var collectionDetailFilter_generated = require('./graphql/queries/collection-detail-filter.generated.js');
17
+ var collection_generated = require('./graphql/queries/collection.generated.js');
18
+ var publishedThemePages_generated = require('./graphql/queries/published-theme-pages.generated.js');
19
+ var products_generated = require('./graphql/queries/products.generated.js');
20
+ var storeProperty_generated = require('./graphql/queries/storeProperty.generated.js');
21
+ var previewPage_generated = require('./graphql/queries/preview-page.generated.js');
22
+ var borders = require('./helpers/borders.js');
23
+ var cls = require('./helpers/cls.js');
24
+ var flattenConnection = require('./helpers/flatten-connection.js');
25
+ var getResonsiveValue = require('./helpers/get-resonsive-value.js');
26
+ var getShortname = require('./helpers/get-shortname.js');
27
+ var GlobalEvent = require('./helpers/GlobalEvent.js');
28
+ var isBrowser = require('./helpers/is-browser.js');
29
+ var isEmptyChildren = require('./helpers/is-empty-children.js');
30
+ var makeStyle = require('./helpers/make-style.js');
31
+ var normalizeBuilderData = require('./helpers/normalize-builder-data.js');
32
+ var prefetchQueries = require('./helpers/prefetch-queries.js');
33
+ var shadow = require('./helpers/shadow.js');
34
+ var size = require('./helpers/size.js');
35
+ var spacing = require('./helpers/spacing.js');
36
+ var loadScript = require('./helpers/load-script.js');
37
+ var email = require('./helpers/email.js');
38
+ var layout = require('./helpers/layout.js');
39
+ var background = require('./helpers/background.js');
40
+ var cssVariable = require('./helpers/css-variable.js');
41
+ var isDefined = require('./helpers/is-defined.js');
42
+ var colors = require('./helpers/colors.js');
43
+ var typography = require('./helpers/typography.js');
44
+ var radius = require('./helpers/radius.js');
45
+ var product = require('./helpers/product.js');
46
+ var fpixel = require('./helpers/fpixel.js');
47
+ var gtag = require('./helpers/gtag.js');
48
+ var tiktokpixel = require('./helpers/tiktokpixel.js');
49
+ var useAddToCart = require('./hooks/cart/use-add-to-cart.js');
50
+ var useCartData = require('./hooks/cart/use-cart-data.js');
51
+ var useCartDiscountCodesUpdate = require('./hooks/cart/use-cart-discount-codes-update.js');
52
+ var useCartNoteUpdate = require('./hooks/cart/use-cart-note-update.js');
53
+ var useCreateCart = require('./hooks/cart/use-create-cart.js');
54
+ var useRemoveCartItem = require('./hooks/cart/use-remove-cart-item.js');
55
+ var useUpdateCartItem = require('./hooks/cart/use-update-cart-item.js');
56
+ var shop = require('./hooks/shop.js');
57
+ var useCollectionQuery = require('./hooks/shop/use-collection-query.js');
58
+ var useProductQuery = require('./hooks/shop/use-product-query.js');
59
+ var useProductsQuery = require('./hooks/shop/use-products-query.js');
60
+ var useCurrentDevice = require('./hooks/use-current-device.js');
61
+ var useLazyVideo = require('./hooks/use-lazy-video.js');
62
+ var useCartId = require('./hooks/useCartId.js');
63
+ var useCartLine = require('./hooks/useCartLine.js');
64
+ var useCartUI = require('./hooks/useCartUI.js');
65
+ var useCollection = require('./hooks/useCollection.js');
66
+ var useFormatMoney = require('./hooks/useFormatMoney.js');
67
+ var react = require('react');
68
+ var useIsomorphicLayoutEffect = require('./hooks/useIsomorphicLayoutEffect.js');
69
+ var useLoadScript = require('./hooks/useLoadScript.js');
70
+ var useMoney = require('./hooks/useMoney.js');
71
+ var usePrevious = require('./hooks/usePrevious.js');
72
+ var useProduct = require('./hooks/useProduct.js');
73
+ var useProductList = require('./hooks/useProductList.js');
74
+ var useSuspenseFetch = require('./hooks/useSuspenseFetch.js');
75
+ var useSwatchesOptions = require('./hooks/useSwatchesOptions.js');
76
+ var shop$1 = require('./types/shop.js');
77
+ var globalStyle = require('./types/global-style.js');
78
+ var getCollection = require('./helpers/queries/get-collection.js');
79
+ var getProduct = require('./helpers/queries/get-product.js');
80
+ var getProductBySlug = require('./helpers/queries/get-product-by-slug.js');
81
+
82
+
83
+
84
+ exports.AddOn = AddOn.default;
85
+ exports.Render = Render.default;
86
+ exports.RenderPreview = RenderPreview.default;
87
+ exports.AddonProvider = AddonContext.AddonProvider;
88
+ exports.useAddon = AddonContext.useAddon;
89
+ exports.useAddons = AddonContext.useAddons;
90
+ exports.BuilderComponentProvider = BuilderComponent.BuilderComponentProvider;
91
+ exports.useBuilderComponent = BuilderComponent.useBuilderComponent;
92
+ exports.BuilderProvider = BuilderContext.BuilderProvider;
93
+ exports.useBuilderStore = BuilderContext.useBuilderStore;
94
+ exports.BuilderPreviewProvider = BuilderPreviewContext.BuilderPreviewProvider;
95
+ exports.useBuilderPreviewStore = BuilderPreviewContext.useBuilderPreviewStore;
96
+ exports.CartLineProvider = CartLineContext.CartLineProvider;
97
+ exports.useCartLineStore = CartLineContext.useCartLineStore;
98
+ exports.ProductListProvider = ProductListContext.ProductListProvider;
99
+ exports.useProductListStore = ProductListContext.useProductListStore;
100
+ exports.ProductProvider = ProductContext.ProductProvider;
101
+ exports.useProductStore = ProductContext.useProductStore;
102
+ exports.SectionProvider = SectionContext.SectionProvider;
103
+ exports.useSection = SectionContext.useSection;
104
+ exports.useSectionStore = SectionContext.useSectionStore;
105
+ exports.ShopProvider = ShopContext.ShopProvider;
106
+ exports.useShopStore = ShopContext.useShopStore;
107
+ exports.CollectionProvider = CollectionContext.CollectionProvider;
108
+ exports.useCollectionStore = CollectionContext.useCollectionStore;
109
+ exports.CollectionDetailFilterDocument = collectionDetailFilter_generated.CollectionDetailFilterDocument;
110
+ exports.CollectionDocument = collection_generated.CollectionDocument;
111
+ exports.PublishedThemePagesDocument = publishedThemePages_generated.PublishedThemePagesDocument;
112
+ exports.ProductsDocument = products_generated.ProductsDocument;
113
+ exports.StorePropertyDocument = storeProperty_generated.StorePropertyDocument;
114
+ exports.PreviewPageDocument = previewPage_generated.PreviewPageDocument;
115
+ exports.handleConvertBorderColor = borders.handleConvertBorderColor;
116
+ exports.handleConvertBorderStyle = borders.handleConvertBorderStyle;
117
+ exports.handleConvertBorderWidth = borders.handleConvertBorderWidth;
118
+ exports.handleConvertClassColor = borders.handleConvertClassColor;
119
+ exports.cls = cls.cls;
120
+ exports.flattenConnection = flattenConnection.flattenConnection;
121
+ exports.getResponsiveStateValue = getResonsiveValue.getResponsiveStateValue;
122
+ exports.getResponsiveValue = getResonsiveValue.getResponsiveValue;
123
+ exports.getResponsiveValueByScreen = getResonsiveValue.getResponsiveValueByScreen;
124
+ exports.getShortName = getShortname.getShortName;
125
+ exports.globalEvent = GlobalEvent.default;
126
+ exports.isBrowser = isBrowser.default;
127
+ exports.isEmptyChildren = isEmptyChildren.isEmptyChildren;
128
+ exports.makeAspectRatio = makeStyle.makeAspectRatio;
129
+ exports.makeHeight = makeStyle.makeHeight;
130
+ exports.makeStyle = makeStyle.makeStyle;
131
+ exports.makeStyleResponsive = makeStyle.makeStyleResponsive;
132
+ exports.makeStyleResponsiveState = makeStyle.makeStyleResponsiveState;
133
+ exports.makeStyleState = makeStyle.makeStyleState;
134
+ exports.makeWidth = makeStyle.makeWidth;
135
+ exports.normalizeBuilderData = normalizeBuilderData.normalizeBuilderData;
136
+ exports.prefetchQueries = prefetchQueries.prefetchQueries;
137
+ exports.getStyleShadow = shadow.getStyleShadow;
138
+ exports.getStyleShadowState = shadow.getStyleShadowState;
139
+ exports.composeSize = size.composeSize;
140
+ exports.composeSpacing = spacing.composeSpacing;
141
+ exports.getSpacingVariable = spacing.getSpacingVariable;
142
+ exports.loadScript = loadScript.loadScript;
143
+ exports.validateEmail = email.validateEmail;
144
+ exports.optionLayoutStyle = layout.optionLayoutStyle;
145
+ exports.getStyleBackgroundByDevice = background.getStyleBackgroundByDevice;
146
+ exports.genVariable = cssVariable.genVariable;
147
+ exports.isDefined = isDefined.isDefined;
148
+ exports.getGlobalColorCSSProp = colors.getGlobalColorCSSProp;
149
+ exports.getGlobalColorClass = colors.getGlobalColorClass;
150
+ exports.getGlobalColorResponsiveClass = colors.getGlobalColorResponsiveClass;
151
+ exports.getGlobalColorResponsiveStyle = colors.getGlobalColorResponsiveStyle;
152
+ exports.getGlobalColorStateClass = colors.getGlobalColorStateClass;
153
+ exports.getGlobalColorStateResponsiveClass = colors.getGlobalColorStateResponsiveClass;
154
+ exports.getGlobalColorStateResponsiveStyle = colors.getGlobalColorStateResponsiveStyle;
155
+ exports.getGlobalColorStateStyle = colors.getGlobalColorStateStyle;
156
+ exports.getGlobalColorStyle = colors.getGlobalColorStyle;
157
+ exports.getSingleColorVariable = colors.getSingleColorVariable;
158
+ exports.isColor = colors.isColor;
159
+ exports.genTypoClass = typography.genTypoClass;
160
+ exports.composeRadius = radius.composeRadius;
161
+ exports.getCustomRadius = radius.getCustomRadius;
162
+ exports.getRadiusCSSFromGlobal = radius.getRadiusCSSFromGlobal;
163
+ exports.getRadiusStyleActiveState = radius.getRadiusStyleActiveState;
164
+ exports.getSelectedVariant = product.getSelectedVariant;
165
+ exports.parseSelectedOption = product.parseSelectedOption;
166
+ exports.fpixel = fpixel;
167
+ exports.gtag = gtag;
168
+ exports.tiktokpixel = tiktokpixel;
169
+ exports.useAddToCart = useAddToCart.useAddToCart;
170
+ exports.useCartData = useCartData.useCartData;
171
+ exports.useCartDiscountCodesUpdate = useCartDiscountCodesUpdate.useCartDiscountCodesUpdate;
172
+ exports.useCartNoteUpdate = useCartNoteUpdate.useCartNoteUpdate;
173
+ exports.useCreateCart = useCreateCart.useCreateCart;
174
+ exports.useRemoveCartItem = useRemoveCartItem.useRemoveCartItem;
175
+ exports.useUpdateCartItem = useUpdateCartItem.useUpdateCartItem;
176
+ exports.useConnectedShopify = shop.useConnectedShopify;
177
+ exports.useCurrency = shop.useCurrency;
178
+ exports.useEditorMode = shop.useEditorMode;
179
+ exports.useIsSampleProduct = shop.useIsSampleProduct;
180
+ exports.useLocale = shop.useLocale;
181
+ exports.useMatchMutate = shop.useMatchMutate;
182
+ exports.useMobileOnly = shop.useMobileOnly;
183
+ exports.usePageType = shop.usePageType;
184
+ exports.usePluginEnable = shop.usePluginEnable;
185
+ exports.useStoreFront = shop.useStoreFront;
186
+ exports.useCollectionQuery = useCollectionQuery.useCollectionQuery;
187
+ exports.useProductQuery = useProductQuery.useProductQuery;
188
+ exports.useProductsQuery = useProductsQuery.useProductsQuery;
189
+ exports.useCurrentDevice = useCurrentDevice.useCurrentDevice;
190
+ exports.useLazyVideo = useLazyVideo.useLazyVideo;
191
+ exports.useCartId = useCartId.default;
192
+ exports.useCartLine = useCartLine.default;
193
+ exports.useCartUI = useCartUI.default;
194
+ exports.useCollection = useCollection.useCollection;
195
+ exports.useFormatMoney = useFormatMoney.default;
196
+ Object.defineProperty(exports, 'useId', {
197
+ enumerable: true,
198
+ get: function () { return react.useId; }
199
+ });
200
+ exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect.default;
201
+ exports.useLoadScript = useLoadScript.default;
202
+ exports.useMoney = useMoney.default;
203
+ exports.usePrevious = usePrevious.usePrevious;
204
+ exports.useCurrentVariant = useProduct.useCurrentVariant;
205
+ exports.useCurrentVariantInStock = useProduct.useCurrentVariantInStock;
206
+ exports.useFeaturedImageGlobal = useProduct.useFeaturedImageGlobal;
207
+ exports.useProduct = useProduct.useProduct;
208
+ exports.useProductProperties = useProduct.useProductProperties;
209
+ exports.useQuantity = useProduct.useQuantity;
210
+ exports.useSelectedOption = useProduct.useSelectedOption;
211
+ exports.useUniqProductID = useProduct.useUniqProductID;
212
+ exports.useVariant = useProduct.useVariant;
213
+ exports.useVariantOutStock = useProduct.useVariantOutStock;
214
+ exports.useVariants = useProduct.useVariants;
215
+ exports.useProductList = useProductList.useProductList;
216
+ exports.useProductListProducts = useProductList.useProductListProducts;
217
+ exports.useProductListSettings = useProductList.useProductListSettings;
218
+ exports.useProductListStyles = useProductList.useProductListStyles;
219
+ exports.useSuspenseFetch = useSuspenseFetch.default;
220
+ exports.useSwatchesOptions = useSwatchesOptions.default;
221
+ exports.ShopType = shop$1;
222
+ exports.OptionNormalStyle = globalStyle.OptionNormalStyle;
223
+ exports.OptionSpecialStyle = globalStyle.OptionSpecialStyle;
224
+ exports.calculateFirstProduct = getCollection.calculateFirstProduct;
225
+ exports.getCollection = getCollection.getCollection;
226
+ exports.fetchMedias = getProduct.fetchMedias;
227
+ exports.fetchVariants = getProduct.fetchVariants;
228
+ exports.getProduct = getProduct.getProduct;
229
+ exports.getProductBySlug = getProductBySlug.getProductBySlug;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ const OptionNormalStyle = ['radio_buttons', 'dropdown'];
4
+ const OptionSpecialStyle = ['color', 'image', 'rectangle_list'];
5
+
6
+ exports.OptionNormalStyle = OptionNormalStyle;
7
+ exports.OptionSpecialStyle = OptionSpecialStyle;
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
@@ -0,0 +1,14 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useAddon } from '../contexts/AddonContext.js';
3
+ import { usePluginEnable } from '../hooks/shop.js';
4
+
5
+ const AddOn = ({ name }) => {
6
+ const Comp = useAddon(name);
7
+ const plugins = usePluginEnable();
8
+ if (!plugins?.includes(name)) {
9
+ return null;
10
+ }
11
+ return jsx(Comp, {});
12
+ };
13
+
14
+ export { AddOn as default };
@@ -0,0 +1,40 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { isValidElement } from 'react';
3
+ import { composeAdvanceStyle } from '../helpers/compose-advance-style.js';
4
+
5
+ const disableWrap = [
6
+ 'Col',
7
+ 'Row',
8
+ 'Section',
9
+ 'Image',
10
+ 'Text',
11
+ 'Button',
12
+ 'ProductButton',
13
+ 'Cart',
14
+ 'Tabs',
15
+ 'TabItem',
16
+ 'Carousel',
17
+ 'CarouselItem',
18
+ 'ShopPayButton',
19
+ 'AccordionItem',
20
+ 'Video',
21
+ 'Header',
22
+ 'HeroBanner',
23
+ 'Icon',
24
+ 'IconList',
25
+ 'HTMLCode',
26
+ 'IconListHoz',
27
+ 'IconListItem',
28
+ 'CSSCode',
29
+ ];
30
+ const ComponentWrapper = ({ children, ...props }) => {
31
+ if (props.type === 'section')
32
+ return null;
33
+ const style = composeAdvanceStyle(props.advanced, props.tag);
34
+ if (disableWrap.includes(props.tag) && isValidElement(children)) {
35
+ return jsx(children.type, { ...children.props, ...{ style } });
36
+ }
37
+ return (jsx("div", { style: style, className: `${props.uid}`, children: children }));
38
+ };
39
+
40
+ export { ComponentWrapper as default, disableWrap };
@@ -0,0 +1,54 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { isValidElement } from 'react';
3
+ import { composeAdvanceStyle } from '../helpers/compose-advance-style.js';
4
+ import { disableWrap } from './ComponentWrapper.js';
5
+
6
+ const ComponentWrapperPreview = ({ children, ...props }) => {
7
+ if (props.type === 'section') {
8
+ return null;
9
+ }
10
+ const customProps = {};
11
+ // Build editor configs
12
+ if (props.editorConfigs) {
13
+ const editorConfigs = props.editorConfigs;
14
+ if (editorConfigs.placeholder?.notAppendBeforeAfter) {
15
+ customProps['data-placeholder-not-append-before-after'] = true;
16
+ }
17
+ if (editorConfigs.toolbar?.parent) {
18
+ customProps['data-toolbar-parent'] = true;
19
+ }
20
+ if (editorConfigs.component?.noDelete) {
21
+ customProps['data-component-no-delete'] = true;
22
+ }
23
+ if (editorConfigs.component?.noDuplicate) {
24
+ customProps['data-component-no-duplicate'] = true;
25
+ }
26
+ if (editorConfigs.component?.noDragDrop) {
27
+ customProps['data-component-no-drag-drop'] = true;
28
+ }
29
+ if (editorConfigs.component?.noSetting) {
30
+ customProps['data-component-no-setting'] = true;
31
+ }
32
+ if (editorConfigs.toolbar?.hide) {
33
+ customProps['data-toolbar-hide'] = true;
34
+ }
35
+ if (editorConfigs.slots?.children) {
36
+ customProps['data-slots-children'] = true;
37
+ }
38
+ }
39
+ const style = composeAdvanceStyle(props.advanced, props.tag);
40
+ const builderAttrs = {
41
+ ...customProps,
42
+ 'data-uid': props.uid,
43
+ 'data-component-type': 'component',
44
+ 'data-component-tag': props.tag,
45
+ 'data-component-label': props.label,
46
+ };
47
+ if (disableWrap.includes(props.tag) && isValidElement(children)) {
48
+ return jsx(children.type, { ...children.props, ...{ style, builderAttrs } });
49
+ }
50
+ // Render
51
+ return (jsx("div", { style: style, className: `${props.uid}`, ...builderAttrs, children: children }));
52
+ };
53
+
54
+ export { ComponentWrapperPreview as default };
@@ -0,0 +1,3 @@
1
+ const Empty = () => null;
2
+
3
+ export { Empty as default };
@@ -0,0 +1,24 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { memo } from 'react';
3
+ import { ErrorBoundary } from 'react-error-boundary';
4
+ import { useBuilderComponent } from '../contexts/BuilderComponent.js';
5
+ import { useBuilderStore } from '../contexts/BuilderContext.js';
6
+ import ComponentWrapper from './ComponentWrapper.js';
7
+ import RenderSectionMemo from './RenderSection.js';
8
+
9
+ const Render = ({ uid, ...passProps }) => {
10
+ const item = useBuilderStore((s) => s.getItem(uid));
11
+ const Component = useBuilderComponent(item?.tag);
12
+ if (!item)
13
+ return null;
14
+ if (item?.type === 'section') {
15
+ return jsx(RenderSectionMemo, { sectionId: item.uid });
16
+ }
17
+ else {
18
+ return (jsx(ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxs(Fragment, { children: [jsx("span", { "aria-label": "Error message", children: error.message }), jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsx(ComponentWrapper, { ...item, children: item?.childrens?.length ? (jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps, children: item.childrens.map((id) => (jsx(RenderMemo, { uid: id }, id))) })) : (jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps })) }) }, item.uid));
19
+ }
20
+ };
21
+ const RenderMemo = memo(Render);
22
+ RenderMemo.displayName = 'RenderMemo';
23
+
24
+ export { RenderMemo as default };
@@ -0,0 +1,17 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { memo } from 'react';
3
+ import { ErrorBoundary } from 'react-error-boundary';
4
+ import { useBuilderComponent } from '../contexts/BuilderComponent.js';
5
+ import { useBuilderStore } from '../contexts/BuilderContext.js';
6
+ import ComponentWrapper from './ComponentWrapper.js';
7
+
8
+ const RenderBlock = ({ uid }) => {
9
+ const item = useBuilderStore((s) => s.getItem(uid));
10
+ const Component = useBuilderComponent(item?.tag);
11
+ if (!item || item.type === 'section')
12
+ return null;
13
+ return (jsx(ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxs(ComponentWrapper, { ...item, children: [jsx("span", { "aria-label": "Error message", children: error.message }), jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsx(ComponentWrapper, { ...item, children: item?.childrens?.length ? (jsx(Component, { builderProps: { uid }, styles: item.styles ?? {}, setting: item.settings ?? {}, children: item?.childrens?.map((id) => (jsx(RenderBlockMemo, { uid: id }, id))) })) : (jsx(Component, { builderProps: { uid }, styles: item.styles ?? {}, setting: item.settings ?? {} })) }) }, item.uid));
14
+ };
15
+ const RenderBlockMemo = memo(RenderBlock);
16
+
17
+ export { RenderBlockMemo as default };
@@ -0,0 +1,24 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { memo } from 'react';
3
+ import { ErrorBoundary } from 'react-error-boundary';
4
+ import { useBuilderComponent } from '../contexts/BuilderComponent.js';
5
+ import { useBuilderPreviewStore } from '../contexts/BuilderPreviewContext.js';
6
+ import ComponentWrapperPreview from './ComponentWrapperPreview.js';
7
+ import RenderSectionMemo from './RenderSection.js';
8
+
9
+ const RenderPreview = ({ uid, ...passProps }) => {
10
+ const item = useBuilderPreviewStore((s) => s.getItem(uid));
11
+ const Component = useBuilderComponent(item?.tag);
12
+ if (!item)
13
+ return null;
14
+ if (item?.type === 'section') {
15
+ return jsx(RenderSectionMemo, { sectionId: item.uid });
16
+ }
17
+ else {
18
+ return (jsx(ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxs(ComponentWrapperPreview, { ...item, children: [jsx("span", { "aria-label": "Error message", children: error.message }), jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsx(ComponentWrapperPreview, { ...item, children: item?.childrens?.length ? (jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps, children: item.childrens.map((id) => (jsx(RenderPreviewMemo, { uid: id }, id))) })) : (jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps })) }) }, item.uid));
19
+ }
20
+ };
21
+ const RenderPreviewMemo = memo(RenderPreview);
22
+ RenderPreviewMemo.displayName = 'RenderPreviewMemo';
23
+
24
+ export { RenderPreviewMemo as default };
@@ -0,0 +1,15 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { memo } from 'react';
3
+ import { BuilderProvider } from '../contexts/BuilderContext.js';
4
+ import { useSection } from '../contexts/SectionContext.js';
5
+ import RenderBlockMemo from './RenderBlock.js';
6
+
7
+ const RenderSection = ({ sectionId }) => {
8
+ const state = useSection(sectionId);
9
+ if (!state)
10
+ return null;
11
+ return (jsx(BuilderProvider, { state: state, children: jsx(RenderBlockMemo, { uid: sectionId }) }, sectionId));
12
+ };
13
+ const RenderSectionMemo = memo(RenderSection);
14
+
15
+ export { RenderSectionMemo as default };
@@ -0,0 +1,21 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useContext, useMemo } from 'react';
3
+ import Empty from '../components/Empty.js';
4
+
5
+ const AddonContext = createContext(null);
6
+ const AddonProvider = ({ children, components, ...passProps }) => {
7
+ return (jsx(AddonContext.Provider, { ...passProps, value: { components }, children: children }));
8
+ };
9
+ const useAddons = () => {
10
+ const context = useContext(AddonContext);
11
+ if (!context) {
12
+ throw new Error('useAddons must be used within an AddonProvider');
13
+ }
14
+ return useMemo(() => context.components, [context.components]);
15
+ };
16
+ const useAddon = (id) => {
17
+ const addons = useAddons();
18
+ return useMemo(() => (id ? addons[id] ?? Empty : Empty), [id, addons]);
19
+ };
20
+
21
+ export { AddonProvider, useAddon, useAddons };