@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,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var AddonContext = require('../contexts/AddonContext.js');
7
+ var shop = require('../hooks/shop.js');
8
+
9
+ const AddOn = ({ name }) => {
10
+ const Comp = AddonContext.useAddon(name);
11
+ const plugins = shop.usePluginEnable();
12
+ if (!plugins?.includes(name)) {
13
+ return null;
14
+ }
15
+ return jsxRuntime.jsx(Comp, {});
16
+ };
17
+
18
+ exports.default = AddOn;
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var composeAdvanceStyle = require('../helpers/compose-advance-style.js');
8
+
9
+ const disableWrap = [
10
+ 'Col',
11
+ 'Row',
12
+ 'Section',
13
+ 'Image',
14
+ 'Text',
15
+ 'Button',
16
+ 'ProductButton',
17
+ 'Cart',
18
+ 'Tabs',
19
+ 'TabItem',
20
+ 'Carousel',
21
+ 'CarouselItem',
22
+ 'ShopPayButton',
23
+ 'AccordionItem',
24
+ 'Video',
25
+ 'Header',
26
+ 'HeroBanner',
27
+ 'Icon',
28
+ 'IconList',
29
+ 'HTMLCode',
30
+ 'IconListHoz',
31
+ 'IconListItem',
32
+ 'CSSCode',
33
+ ];
34
+ const ComponentWrapper = ({ children, ...props }) => {
35
+ if (props.type === 'section')
36
+ return null;
37
+ const style = composeAdvanceStyle.composeAdvanceStyle(props.advanced, props.tag);
38
+ if (disableWrap.includes(props.tag) && react.isValidElement(children)) {
39
+ return jsxRuntime.jsx(children.type, { ...children.props, ...{ style } });
40
+ }
41
+ return (jsxRuntime.jsx("div", { style: style, className: `${props.uid}`, children: children }));
42
+ };
43
+
44
+ exports.default = ComponentWrapper;
45
+ exports.disableWrap = disableWrap;
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var composeAdvanceStyle = require('../helpers/compose-advance-style.js');
8
+ var ComponentWrapper = require('./ComponentWrapper.js');
9
+
10
+ const ComponentWrapperPreview = ({ children, ...props }) => {
11
+ if (props.type === 'section') {
12
+ return null;
13
+ }
14
+ const customProps = {};
15
+ // Build editor configs
16
+ if (props.editorConfigs) {
17
+ const editorConfigs = props.editorConfigs;
18
+ if (editorConfigs.placeholder?.notAppendBeforeAfter) {
19
+ customProps['data-placeholder-not-append-before-after'] = true;
20
+ }
21
+ if (editorConfigs.toolbar?.parent) {
22
+ customProps['data-toolbar-parent'] = true;
23
+ }
24
+ if (editorConfigs.component?.noDelete) {
25
+ customProps['data-component-no-delete'] = true;
26
+ }
27
+ if (editorConfigs.component?.noDuplicate) {
28
+ customProps['data-component-no-duplicate'] = true;
29
+ }
30
+ if (editorConfigs.component?.noDragDrop) {
31
+ customProps['data-component-no-drag-drop'] = true;
32
+ }
33
+ if (editorConfigs.component?.noSetting) {
34
+ customProps['data-component-no-setting'] = true;
35
+ }
36
+ if (editorConfigs.toolbar?.hide) {
37
+ customProps['data-toolbar-hide'] = true;
38
+ }
39
+ if (editorConfigs.slots?.children) {
40
+ customProps['data-slots-children'] = true;
41
+ }
42
+ }
43
+ const style = composeAdvanceStyle.composeAdvanceStyle(props.advanced, props.tag);
44
+ const builderAttrs = {
45
+ ...customProps,
46
+ 'data-uid': props.uid,
47
+ 'data-component-type': 'component',
48
+ 'data-component-tag': props.tag,
49
+ 'data-component-label': props.label,
50
+ };
51
+ if (ComponentWrapper.disableWrap.includes(props.tag) && react.isValidElement(children)) {
52
+ return jsxRuntime.jsx(children.type, { ...children.props, ...{ style, builderAttrs } });
53
+ }
54
+ // Render
55
+ return (jsxRuntime.jsx("div", { style: style, className: `${props.uid}`, ...builderAttrs, children: children }));
56
+ };
57
+
58
+ exports.default = ComponentWrapperPreview;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const Empty = () => null;
6
+
7
+ exports.default = Empty;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var reactErrorBoundary = require('react-error-boundary');
8
+ var BuilderComponent = require('../contexts/BuilderComponent.js');
9
+ var BuilderContext = require('../contexts/BuilderContext.js');
10
+ var ComponentWrapper = require('./ComponentWrapper.js');
11
+ var RenderSection = require('./RenderSection.js');
12
+
13
+ const Render = ({ uid, ...passProps }) => {
14
+ const item = BuilderContext.useBuilderStore((s) => s.getItem(uid));
15
+ const Component = BuilderComponent.useBuilderComponent(item?.tag);
16
+ if (!item)
17
+ return null;
18
+ if (item?.type === 'section') {
19
+ return jsxRuntime.jsx(RenderSection.default, { sectionId: item.uid });
20
+ }
21
+ else {
22
+ return (jsxRuntime.jsx(reactErrorBoundary.ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { "aria-label": "Error message", children: error.message }), jsxRuntime.jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsxRuntime.jsx(ComponentWrapper.default, { ...item, children: item?.childrens?.length ? (jsxRuntime.jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps, children: item.childrens.map((id) => (jsxRuntime.jsx(RenderMemo, { uid: id }, id))) })) : (jsxRuntime.jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps })) }) }, item.uid));
23
+ }
24
+ };
25
+ const RenderMemo = react.memo(Render);
26
+ RenderMemo.displayName = 'RenderMemo';
27
+
28
+ exports.default = RenderMemo;
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var reactErrorBoundary = require('react-error-boundary');
8
+ var BuilderComponent = require('../contexts/BuilderComponent.js');
9
+ var BuilderContext = require('../contexts/BuilderContext.js');
10
+ var ComponentWrapper = require('./ComponentWrapper.js');
11
+
12
+ const RenderBlock = ({ uid }) => {
13
+ const item = BuilderContext.useBuilderStore((s) => s.getItem(uid));
14
+ const Component = BuilderComponent.useBuilderComponent(item?.tag);
15
+ if (!item || item.type === 'section')
16
+ return null;
17
+ return (jsxRuntime.jsx(reactErrorBoundary.ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxRuntime.jsxs(ComponentWrapper.default, { ...item, children: [jsxRuntime.jsx("span", { "aria-label": "Error message", children: error.message }), jsxRuntime.jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsxRuntime.jsx(ComponentWrapper.default, { ...item, children: item?.childrens?.length ? (jsxRuntime.jsx(Component, { builderProps: { uid }, styles: item.styles ?? {}, setting: item.settings ?? {}, children: item?.childrens?.map((id) => (jsxRuntime.jsx(RenderBlockMemo, { uid: id }, id))) })) : (jsxRuntime.jsx(Component, { builderProps: { uid }, styles: item.styles ?? {}, setting: item.settings ?? {} })) }) }, item.uid));
18
+ };
19
+ const RenderBlockMemo = react.memo(RenderBlock);
20
+
21
+ exports.default = RenderBlockMemo;
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var reactErrorBoundary = require('react-error-boundary');
8
+ var BuilderComponent = require('../contexts/BuilderComponent.js');
9
+ var BuilderPreviewContext = require('../contexts/BuilderPreviewContext.js');
10
+ var ComponentWrapperPreview = require('./ComponentWrapperPreview.js');
11
+ var RenderSection = require('./RenderSection.js');
12
+
13
+ const RenderPreview = ({ uid, ...passProps }) => {
14
+ const item = BuilderPreviewContext.useBuilderPreviewStore((s) => s.getItem(uid));
15
+ const Component = BuilderComponent.useBuilderComponent(item?.tag);
16
+ if (!item)
17
+ return null;
18
+ if (item?.type === 'section') {
19
+ return jsxRuntime.jsx(RenderSection.default, { sectionId: item.uid });
20
+ }
21
+ else {
22
+ return (jsxRuntime.jsx(reactErrorBoundary.ErrorBoundary, { fallbackRender: ({ error, resetErrorBoundary }) => (jsxRuntime.jsxs(ComponentWrapperPreview.default, { ...item, children: [jsxRuntime.jsx("span", { "aria-label": "Error message", children: error.message }), jsxRuntime.jsx("button", { type: "button", onClick: resetErrorBoundary, children: "Try again" })] })), children: jsxRuntime.jsx(ComponentWrapperPreview.default, { ...item, children: item?.childrens?.length ? (jsxRuntime.jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps, children: item.childrens.map((id) => (jsxRuntime.jsx(RenderPreviewMemo, { uid: id }, id))) })) : (jsxRuntime.jsx(Component, { builderProps: { uid, builderData: item }, styles: item.styles, setting: item.settings, ...passProps })) }) }, item.uid));
23
+ }
24
+ };
25
+ const RenderPreviewMemo = react.memo(RenderPreview);
26
+ RenderPreviewMemo.displayName = 'RenderPreviewMemo';
27
+
28
+ exports.default = RenderPreviewMemo;
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var react = require('react');
7
+ var BuilderContext = require('../contexts/BuilderContext.js');
8
+ var SectionContext = require('../contexts/SectionContext.js');
9
+ var RenderBlock = require('./RenderBlock.js');
10
+
11
+ const RenderSection = ({ sectionId }) => {
12
+ const state = SectionContext.useSection(sectionId);
13
+ if (!state)
14
+ return null;
15
+ return (jsxRuntime.jsx(BuilderContext.BuilderProvider, { state: state, children: jsxRuntime.jsx(RenderBlock.default, { uid: sectionId }) }, sectionId));
16
+ };
17
+ const RenderSectionMemo = react.memo(RenderSection);
18
+
19
+ exports.default = RenderSectionMemo;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var Empty = require('../components/Empty.js');
6
+
7
+ const AddonContext = react.createContext(null);
8
+ const AddonProvider = ({ children, components, ...passProps }) => {
9
+ return (jsxRuntime.jsx(AddonContext.Provider, { ...passProps, value: { components }, children: children }));
10
+ };
11
+ const useAddons = () => {
12
+ const context = react.useContext(AddonContext);
13
+ if (!context) {
14
+ throw new Error('useAddons must be used within an AddonProvider');
15
+ }
16
+ return react.useMemo(() => context.components, [context.components]);
17
+ };
18
+ const useAddon = (id) => {
19
+ const addons = useAddons();
20
+ return react.useMemo(() => (id ? addons[id] ?? Empty.default : Empty.default), [id, addons]);
21
+ };
22
+
23
+ exports.AddonProvider = AddonProvider;
24
+ exports.useAddon = useAddon;
25
+ exports.useAddons = useAddons;
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var create = require('zustand');
5
+ var react = require('react');
6
+ var Empty = require('../components/Empty.js');
7
+
8
+ const BuilderComponentContext = react.createContext(null);
9
+ const createBuilderComponentStore = (components) => create.createStore((_, get) => ({
10
+ components,
11
+ getItem: (id) => {
12
+ return get().components[id];
13
+ },
14
+ }));
15
+ const BuilderComponentProvider = ({ children, components, ...passProps }) => {
16
+ return (jsxRuntime.jsx(BuilderComponentContext.Provider, { ...passProps, value: createBuilderComponentStore(components), children: children }));
17
+ };
18
+ // export const useBuilderComponent = (id?: string) => {
19
+ // return useStore((s) => (id ? s.getItem(id) ?? Empty : Empty));
20
+ // };
21
+ const useBuilderComponent = (id) => {
22
+ const store = react.useContext(BuilderComponentContext);
23
+ if (!store) {
24
+ throw new Error('useBuilderComponent must be used within a BuilderComponentProvider');
25
+ }
26
+ return create.useStore(store, (s) => (id ? s.getItem(id) ?? Empty.default : Empty.default));
27
+ };
28
+
29
+ exports.BuilderComponentProvider = BuilderComponentProvider;
30
+ exports.useBuilderComponent = useBuilderComponent;
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var create = require('zustand');
6
+
7
+ const BuilderContext = react.createContext(null);
8
+ const createBuilderProvider = (data) => create.createStore((_, get) => ({
9
+ state: data,
10
+ getItem: (id) => {
11
+ return get().state[id];
12
+ },
13
+ }));
14
+ const BuilderProvider = ({ children, state, lazy, priority, ...passProps }) => {
15
+ const Component = lazy ? react.Suspense : react.Fragment;
16
+ const store = createBuilderProvider(state);
17
+ return (jsxRuntime.jsx(Component, { children: jsxRuntime.jsx(BuilderContext.Provider, { ...passProps, value: store, children: children }) }));
18
+ };
19
+ // export const useBuilderStore = useStore;
20
+ const useBuilderStore = (selector, equalityFn) => {
21
+ const store = react.useContext(BuilderContext);
22
+ if (!store) {
23
+ throw new Error('useBuilderStore must be used within a BuilderProvider');
24
+ }
25
+ return create.useStore(store, selector, equalityFn);
26
+ };
27
+
28
+ exports.BuilderProvider = BuilderProvider;
29
+ exports.useBuilderStore = useBuilderStore;
@@ -0,0 +1,353 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var create = require('zustand');
6
+ var cloneDeep = require('../helpers/clone-deep.js');
7
+ var normalizeBuilderData = require('../helpers/normalize-builder-data.js');
8
+
9
+ function moveByIndex(input, from, to) {
10
+ const elm = input.splice(from, 1)[0];
11
+ if (elm !== undefined) {
12
+ input.splice(to, 0, elm);
13
+ }
14
+ }
15
+ function removeByKey(id, data) {
16
+ const item = data[id];
17
+ if (item) {
18
+ delete data[id];
19
+ if (item.type !== 'section') {
20
+ item.childrens?.map((child) => removeByKey(child, data));
21
+ }
22
+ }
23
+ }
24
+ const BuilderPreviewContext = react.createContext(null);
25
+ const root = {
26
+ uid: 'ROOT',
27
+ tag: 'Root',
28
+ label: 'Root',
29
+ childrens: [],
30
+ };
31
+ const createBuilderPreviewProvider = (args) => create.createStore((set, get) => ({
32
+ state: args,
33
+ addItem: (args) => {
34
+ const { position, data } = args;
35
+ const state = get().state;
36
+ const dateModified = Date.now();
37
+ if (args.type === 'section') {
38
+ if (!Array.isArray(data)) {
39
+ const sectionId = data.uid;
40
+ // Section only add to ROOT
41
+ const ROOT = state.ROOT;
42
+ if (!ROOT.childrens) {
43
+ ROOT.childrens = [sectionId];
44
+ }
45
+ else {
46
+ ROOT.childrens.splice(position ?? 0, 0, sectionId);
47
+ }
48
+ ROOT.dateModified = dateModified;
49
+ set({
50
+ state: {
51
+ ...state,
52
+ [sectionId]: {
53
+ uid: sectionId,
54
+ type: 'section',
55
+ label: data.label,
56
+ },
57
+ ROOT: cloneDeep.cloneDeep(ROOT),
58
+ },
59
+ });
60
+ }
61
+ }
62
+ else {
63
+ const { id, data } = args;
64
+ const parent = id ? state[id] ?? state.ROOT : state.ROOT;
65
+ // Can't add item to section
66
+ if (parent.type === 'section')
67
+ return;
68
+ if (Array.isArray(data)) {
69
+ const childrens = data.map((v) => v.uid);
70
+ const newState = data.reduceRight((prev, current) => {
71
+ const item = normalizeBuilderData.normalizeBuilderData(current);
72
+ return {
73
+ ...prev,
74
+ ...item,
75
+ };
76
+ }, {});
77
+ parent.dateModified = dateModified;
78
+ parent.childrens = parent.childrens ?? [];
79
+ parent.childrens.splice(position ?? 0, 0, ...childrens);
80
+ set({
81
+ state: {
82
+ ...state,
83
+ ...newState,
84
+ [parent.uid]: cloneDeep.cloneDeep(parent),
85
+ },
86
+ });
87
+ }
88
+ else {
89
+ const item = normalizeBuilderData.normalizeBuilderData(data);
90
+ parent.dateModified = dateModified;
91
+ parent.childrens = parent.childrens ?? [];
92
+ parent.childrens.splice(position ?? 0, 0, data.uid);
93
+ set({
94
+ state: {
95
+ ...state,
96
+ ...item,
97
+ [parent.uid]: cloneDeep.cloneDeep(parent),
98
+ },
99
+ });
100
+ }
101
+ }
102
+ },
103
+ changeItemProp: (id, data, group) => {
104
+ if (!group || !['setting', 'style', 'advanced'].includes(group))
105
+ return;
106
+ const state = get().state;
107
+ const item = state[id];
108
+ // Ignore section
109
+ if (item?.type === 'section')
110
+ return;
111
+ if (item) {
112
+ const dateModified = Date.now();
113
+ item.dateModified = dateModified;
114
+ switch (group) {
115
+ case 'setting':
116
+ set({
117
+ state: {
118
+ ...state,
119
+ [id]: {
120
+ ...item,
121
+ settings: {
122
+ ...item.settings,
123
+ ...data,
124
+ },
125
+ },
126
+ },
127
+ });
128
+ break;
129
+ case 'style':
130
+ set({
131
+ state: {
132
+ ...state,
133
+ [id]: {
134
+ ...item,
135
+ styles: {
136
+ ...item.styles,
137
+ ...data,
138
+ },
139
+ },
140
+ },
141
+ });
142
+ break;
143
+ case 'advanced':
144
+ set({
145
+ state: {
146
+ ...state,
147
+ [id]: {
148
+ ...item,
149
+ advanced: {
150
+ ...item.advanced,
151
+ ...data,
152
+ },
153
+ },
154
+ },
155
+ });
156
+ break;
157
+ }
158
+ }
159
+ },
160
+ changeItemPropByKey: ({ id, key, data, group }) => {
161
+ if (!group || !['setting', 'style', 'advanced'].includes(group))
162
+ return;
163
+ const state = get().state;
164
+ const item = state[id];
165
+ // Ignore section
166
+ if (item?.type === 'section')
167
+ return;
168
+ if (item) {
169
+ const itemSetting = {
170
+ style: item.styles ?? {},
171
+ advanced: item.advanced ?? {},
172
+ setting: item.settings ?? {},
173
+ };
174
+ if (data === undefined) {
175
+ console.warn('Data is undefined');
176
+ delete itemSetting[group][key];
177
+ }
178
+ else {
179
+ itemSetting[group][key] = data;
180
+ }
181
+ set({
182
+ state: {
183
+ ...state,
184
+ [id]: {
185
+ ...item,
186
+ settings: { ...itemSetting.setting },
187
+ styles: { ...itemSetting.style },
188
+ advanced: { ...itemSetting.advanced },
189
+ },
190
+ },
191
+ });
192
+ }
193
+ },
194
+ getItem: (id) => {
195
+ return get().state[id];
196
+ },
197
+ removeItem: (id) => {
198
+ if (id === 'ROOT') {
199
+ set({
200
+ state: {
201
+ ROOT: root,
202
+ },
203
+ });
204
+ }
205
+ else {
206
+ const state = get().state;
207
+ removeByKey(id, state);
208
+ // Get parent node by id
209
+ const parent = Object.entries(state).find(([, value]) => value.type !== 'section' && value.childrens?.includes(id));
210
+ if (parent) {
211
+ const dateModified = Date.now();
212
+ const [parentId, parentValue] = parent;
213
+ if (parentValue.type === 'section')
214
+ return;
215
+ parentValue.childrens = parentValue.childrens?.filter((child) => child !== id);
216
+ parentValue.dateModified = dateModified;
217
+ set({
218
+ state: {
219
+ ...state,
220
+ [parentId]: cloneDeep.cloneDeep(parentValue),
221
+ },
222
+ });
223
+ }
224
+ }
225
+ },
226
+ moveItem: (id, toId, position) => {
227
+ const state = get().state;
228
+ const item = state[id];
229
+ const moveTo = state[toId];
230
+ // Ignore section
231
+ if (!item || !moveTo || moveTo.type === 'section')
232
+ return;
233
+ if (item.type === 'section') {
234
+ // Section only add to ROOT
235
+ const ROOT = state.ROOT;
236
+ if (!ROOT.childrens)
237
+ return;
238
+ const currentIndex = ROOT.childrens.findIndex((uid) => uid === id);
239
+ moveByIndex(ROOT.childrens, currentIndex, position ?? 0);
240
+ set({
241
+ state: {
242
+ ...state,
243
+ ROOT: cloneDeep.cloneDeep(ROOT),
244
+ },
245
+ });
246
+ }
247
+ else {
248
+ const parent = Object.entries(state).find(([, value]) => value.type !== 'section' && value.childrens?.includes(id));
249
+ if (item && parent) {
250
+ const dateModified = Date.now();
251
+ const [, parentItem] = parent;
252
+ // Ignore section
253
+ if (parentItem.type === 'section')
254
+ return;
255
+ parentItem.dateModified = dateModified;
256
+ if (toId === parentItem.uid && parentItem.childrens) {
257
+ // Move item to the same parent
258
+ const currentIndex = parentItem.childrens.findIndex((uid) => uid === id);
259
+ if (parentItem.childrens && currentIndex !== position) {
260
+ moveByIndex(parentItem.childrens, currentIndex, position ?? 0);
261
+ set({
262
+ state: {
263
+ ...state,
264
+ [parentItem.uid]: cloneDeep.cloneDeep(parentItem),
265
+ },
266
+ });
267
+ }
268
+ }
269
+ else {
270
+ // Move item to another parent
271
+ // Remove item from parent node
272
+ parentItem.childrens = parentItem.childrens?.filter((uid) => uid !== id);
273
+ if (moveTo) {
274
+ moveTo.dateModified = dateModified;
275
+ moveTo.childrens = moveTo.childrens ?? [];
276
+ moveTo.childrens.splice(position ?? 0, 0, item.uid);
277
+ set({
278
+ state: {
279
+ ...state,
280
+ [moveTo.uid]: cloneDeep.cloneDeep(moveTo),
281
+ [parentItem.uid]: cloneDeep.cloneDeep(parentItem),
282
+ },
283
+ });
284
+ }
285
+ }
286
+ }
287
+ }
288
+ },
289
+ forceChangeState: (data) => {
290
+ set({ state: data });
291
+ },
292
+ initState: (data) => {
293
+ if (Array.isArray(data)) {
294
+ const childrens = data.map((v) => v.uid);
295
+ const newState = data.reduceRight((prev, current) => {
296
+ const item = normalizeBuilderData.normalizeBuilderData(current);
297
+ return {
298
+ ...prev,
299
+ ...item,
300
+ };
301
+ }, {});
302
+ set({
303
+ state: {
304
+ ROOT: {
305
+ ...root,
306
+ childrens,
307
+ },
308
+ ...newState,
309
+ },
310
+ });
311
+ }
312
+ else {
313
+ const newState = normalizeBuilderData.normalizeBuilderData(data);
314
+ set({
315
+ state: {
316
+ ROOT: {
317
+ ...root,
318
+ childrens: [data.uid],
319
+ },
320
+ ...newState,
321
+ },
322
+ });
323
+ }
324
+ },
325
+ addSection: (data, position) => {
326
+ const state = get().state;
327
+ const ROOT = state.ROOT;
328
+ if (!ROOT.childrens)
329
+ ROOT.childrens = [];
330
+ ROOT.childrens.splice(position ?? 0, 0, data.uid);
331
+ set({
332
+ state: {
333
+ ...state,
334
+ ROOT: cloneDeep.cloneDeep(ROOT),
335
+ },
336
+ });
337
+ },
338
+ }));
339
+ const BuilderPreviewProvider = ({ children, state, lazy, ...passProps }) => {
340
+ const Component = lazy ? react.Suspense : react.Fragment;
341
+ return (jsxRuntime.jsx(Component, { children: jsxRuntime.jsx(BuilderPreviewContext.Provider, { ...passProps, value: createBuilderPreviewProvider(state), children: children }) }));
342
+ };
343
+ // export const useBuilderPreviewStore = useStore;
344
+ const useBuilderPreviewStore = (selector, equalityFn) => {
345
+ const store = react.useContext(BuilderPreviewContext);
346
+ if (!store) {
347
+ throw new Error('useBuilderPreviewStore must be used within a BuilderPreviewProvider');
348
+ }
349
+ return create.useStore(store, selector, equalityFn);
350
+ };
351
+
352
+ exports.BuilderPreviewProvider = BuilderPreviewProvider;
353
+ exports.useBuilderPreviewStore = useBuilderPreviewStore;