@gem-sdk/core 1.13.38 → 1.14.0-dev.284

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 (249) hide show
  1. package/dist/cjs/components/AddOn.js +1 -18
  2. package/dist/cjs/components/ComponentWrapper.js +1 -28
  3. package/dist/cjs/components/ComponentWrapperPreview.js +1 -72
  4. package/dist/cjs/components/Empty.js +1 -7
  5. package/dist/cjs/components/Render.js +1 -65
  6. package/dist/cjs/components/Render.liquid.js +15 -158
  7. package/dist/cjs/components/RenderBlock.js +1 -54
  8. package/dist/cjs/components/RenderCustomCode.js +5 -0
  9. package/dist/cjs/components/RenderPreview.js +1 -66
  10. package/dist/cjs/components/RenderSection.js +1 -23
  11. package/dist/cjs/components/constant.js +1 -39
  12. package/dist/cjs/components/src/product/helpers/variant-presets.js +1 -0
  13. package/dist/cjs/contexts/AddonContext.js +1 -36
  14. package/dist/cjs/contexts/BuilderComponent.js +1 -34
  15. package/dist/cjs/contexts/BuilderContext.js +1 -35
  16. package/dist/cjs/contexts/BuilderPreviewContext.js +1 -370
  17. package/dist/cjs/contexts/CartLineContext.js +1 -29
  18. package/dist/cjs/contexts/CollectionContext.js +1 -38
  19. package/dist/cjs/contexts/ModalContext.js +1 -47
  20. package/dist/cjs/contexts/ProductContext.js +1 -149
  21. package/dist/cjs/contexts/ProductListContext.js +1 -32
  22. package/dist/cjs/contexts/SectionContext.js +1 -53
  23. package/dist/cjs/contexts/ShopContext.js +1 -70
  24. package/dist/cjs/graphql/fragments/analytic.generated.js +2 -6
  25. package/dist/cjs/graphql/fragments/collection-detail.generated.js +2 -6
  26. package/dist/cjs/graphql/fragments/collection-product.generated.js +2 -6
  27. package/dist/cjs/graphql/fragments/collection.generated.js +2 -6
  28. package/dist/cjs/graphql/fragments/custom-code.generated.js +2 -6
  29. package/dist/cjs/graphql/fragments/data-seo.generated.js +2 -6
  30. package/dist/cjs/graphql/fragments/media.generated.js +3 -6
  31. package/dist/cjs/graphql/fragments/product-little.generated.js +2 -6
  32. package/dist/cjs/graphql/fragments/product-option-value.generated.js +2 -6
  33. package/dist/cjs/graphql/fragments/product-option.generated.js +2 -6
  34. package/dist/cjs/graphql/fragments/product.generated.js +2 -6
  35. package/dist/cjs/graphql/fragments/published-custom-section.generated.js +2 -6
  36. package/dist/cjs/graphql/fragments/published-page-section.generated.js +2 -6
  37. package/dist/cjs/graphql/fragments/published-theme-page.generated.js +2 -6
  38. package/dist/cjs/graphql/fragments/published-theme-style.generated.js +2 -6
  39. package/dist/cjs/graphql/fragments/selected-option.generated.js +2 -6
  40. package/dist/cjs/graphql/fragments/variant.generated.js +2 -6
  41. package/dist/cjs/graphql/mutations/page-view-up.generated.js +3 -7
  42. package/dist/cjs/graphql/queries/collection-detail-filter.generated.js +2 -16
  43. package/dist/cjs/graphql/queries/collection.generated.js +2 -14
  44. package/dist/cjs/graphql/queries/collections.generated.js +2 -9
  45. package/dist/cjs/graphql/queries/preview-page.generated.js +2 -14
  46. package/dist/cjs/graphql/queries/product-little-detail.generated.js +2 -11
  47. package/dist/cjs/graphql/queries/product-medias.generated.js +2 -8
  48. package/dist/cjs/graphql/queries/product-value-label.generated.js +7 -0
  49. package/dist/cjs/graphql/queries/product-variants.generated.js +2 -10
  50. package/dist/cjs/graphql/queries/products.generated.js +3 -17
  51. package/dist/cjs/graphql/queries/published-theme-pages.generated.js +2 -14
  52. package/dist/cjs/graphql/queries/store-property.generated.js +2 -6
  53. package/dist/cjs/helpers/GlobalEvent.js +1 -19
  54. package/dist/cjs/helpers/background.js +1 -109
  55. package/dist/cjs/helpers/borders.js +4 -183
  56. package/dist/cjs/helpers/clone-deep.js +1 -5
  57. package/dist/cjs/helpers/cls.js +1 -16
  58. package/dist/cjs/helpers/colors.js +1 -183
  59. package/dist/cjs/helpers/compose-advance-style.js +1 -188
  60. package/dist/cjs/helpers/constant.js +1 -23
  61. package/dist/cjs/helpers/convert.js +1 -7
  62. package/dist/cjs/helpers/css-variable.js +1 -7
  63. package/dist/cjs/helpers/email.js +1 -11
  64. package/dist/cjs/helpers/flatten-connection.js +1 -9
  65. package/dist/cjs/helpers/get-resonsive-value.js +1 -31
  66. package/dist/cjs/helpers/get-shortname.js +1 -92
  67. package/dist/cjs/helpers/is-browser.js +1 -9
  68. package/dist/cjs/helpers/is-defined.js +1 -7
  69. package/dist/cjs/helpers/is-empty-children.js +1 -12
  70. package/dist/cjs/helpers/is-safari.js +1 -9
  71. package/dist/cjs/helpers/layout.js +1 -59
  72. package/dist/cjs/helpers/load-script.js +1 -31
  73. package/dist/cjs/helpers/make-style.js +1 -128
  74. package/dist/cjs/helpers/normalize-builder-data.js +1 -23
  75. package/dist/cjs/helpers/prefetch-queries.js +1 -78
  76. package/dist/cjs/helpers/product.js +1 -31
  77. package/dist/cjs/helpers/queries/get-collection.js +1 -220
  78. package/dist/cjs/helpers/queries/get-collections.js +1 -21
  79. package/dist/cjs/helpers/queries/get-product-by-slug.js +1 -125
  80. package/dist/cjs/helpers/queries/get-product.js +1 -154
  81. package/dist/cjs/helpers/queries/get-products.js +1 -161
  82. package/dist/cjs/helpers/query.js +1 -29
  83. package/dist/cjs/helpers/radius.js +6 -134
  84. package/dist/cjs/helpers/render.js +1 -71
  85. package/dist/cjs/helpers/shadow.js +1 -56
  86. package/dist/cjs/helpers/size.js +4 -35
  87. package/dist/cjs/helpers/spacing.js +1 -43
  88. package/dist/cjs/helpers/tracking/fpixel.js +1 -28
  89. package/dist/cjs/helpers/tracking/gtag.js +1 -93
  90. package/dist/cjs/helpers/tracking/tiktokpixel.js +1 -17
  91. package/dist/cjs/helpers/typography.js +17 -105
  92. package/dist/cjs/helpers/variant.js +1 -8
  93. package/dist/cjs/hooks/cart/use-add-to-cart.js +1 -20
  94. package/dist/cjs/hooks/cart/use-cart-data.js +1 -28
  95. package/dist/cjs/hooks/cart/use-cart-discount-codes-update.js +1 -20
  96. package/dist/cjs/hooks/cart/use-cart-note-update.js +1 -20
  97. package/dist/cjs/hooks/cart/use-create-cart.js +1 -22
  98. package/dist/cjs/hooks/cart/use-remove-cart-item.js +1 -20
  99. package/dist/cjs/hooks/cart/use-update-cart-item.js +1 -20
  100. package/dist/cjs/hooks/shop/use-collection-query.js +1 -22
  101. package/dist/cjs/hooks/shop/use-collections-query.js +1 -17
  102. package/dist/cjs/hooks/shop/use-product-query.js +1 -22
  103. package/dist/cjs/hooks/shop/use-products-query.js +1 -22
  104. package/dist/cjs/hooks/shop.js +1 -126
  105. package/dist/cjs/hooks/use-current-device.js +1 -21
  106. package/dist/cjs/hooks/use-lazy-video.js +1 -15
  107. package/dist/cjs/hooks/useCartId.js +1 -44
  108. package/dist/cjs/hooks/useCartLine.js +1 -11
  109. package/dist/cjs/hooks/useCartUI.js +1 -48
  110. package/dist/cjs/hooks/useCollection.js +1 -9
  111. package/dist/cjs/hooks/useFetchHandle.js +1 -13
  112. package/dist/cjs/hooks/useFormatMoney.js +1 -58
  113. package/dist/cjs/hooks/useInitialSwatchesOptions.js +1 -0
  114. package/dist/cjs/hooks/useIsomorphicLayoutEffect.js +1 -10
  115. package/dist/cjs/hooks/useLoadScript.js +1 -32
  116. package/dist/cjs/hooks/useMoney.js +1 -84
  117. package/dist/cjs/hooks/usePrevious.js +1 -19
  118. package/dist/cjs/hooks/useProduct.js +1 -127
  119. package/dist/cjs/hooks/useProductList.js +1 -21
  120. package/dist/cjs/hooks/useSuspenseFetch.js +1 -27
  121. package/dist/cjs/hooks/useSwatchesOptions.js +1 -41
  122. package/dist/cjs/index.js +1 -290
  123. package/dist/cjs/types/global-style.js +1 -14
  124. package/dist/cjs/types/shop.js +1 -2
  125. package/dist/esm/components/AddOn.js +1 -14
  126. package/dist/esm/components/ComponentWrapper.js +1 -24
  127. package/dist/esm/components/ComponentWrapperPreview.js +1 -68
  128. package/dist/esm/components/Empty.js +1 -3
  129. package/dist/esm/components/Render.js +1 -61
  130. package/dist/esm/components/Render.liquid.js +15 -153
  131. package/dist/esm/components/RenderBlock.js +1 -50
  132. package/dist/esm/components/RenderCustomCode.js +5 -0
  133. package/dist/esm/components/RenderPreview.js +1 -62
  134. package/dist/esm/components/RenderSection.js +1 -19
  135. package/dist/esm/components/constant.js +1 -37
  136. package/dist/esm/components/src/product/helpers/variant-presets.js +1 -0
  137. package/dist/esm/contexts/AddonContext.js +1 -32
  138. package/dist/esm/contexts/BuilderComponent.js +1 -31
  139. package/dist/esm/contexts/BuilderContext.js +1 -32
  140. package/dist/esm/contexts/BuilderPreviewContext.js +1 -367
  141. package/dist/esm/contexts/CartLineContext.js +1 -26
  142. package/dist/esm/contexts/CollectionContext.js +1 -35
  143. package/dist/esm/contexts/ModalContext.js +1 -44
  144. package/dist/esm/contexts/ProductContext.js +1 -146
  145. package/dist/esm/contexts/ProductListContext.js +1 -28
  146. package/dist/esm/contexts/SectionContext.js +1 -49
  147. package/dist/esm/contexts/ShopContext.js +1 -67
  148. package/dist/esm/graphql/fragments/analytic.generated.js +2 -4
  149. package/dist/esm/graphql/fragments/collection-detail.generated.js +2 -4
  150. package/dist/esm/graphql/fragments/collection-product.generated.js +2 -4
  151. package/dist/esm/graphql/fragments/collection.generated.js +2 -4
  152. package/dist/esm/graphql/fragments/custom-code.generated.js +2 -4
  153. package/dist/esm/graphql/fragments/data-seo.generated.js +2 -4
  154. package/dist/esm/graphql/fragments/media.generated.js +3 -4
  155. package/dist/esm/graphql/fragments/product-little.generated.js +2 -4
  156. package/dist/esm/graphql/fragments/product-option-value.generated.js +2 -4
  157. package/dist/esm/graphql/fragments/product-option.generated.js +2 -4
  158. package/dist/esm/graphql/fragments/product.generated.js +2 -4
  159. package/dist/esm/graphql/fragments/published-custom-section.generated.js +2 -4
  160. package/dist/esm/graphql/fragments/published-page-section.generated.js +2 -4
  161. package/dist/esm/graphql/fragments/published-theme-page.generated.js +2 -4
  162. package/dist/esm/graphql/fragments/published-theme-style.generated.js +2 -4
  163. package/dist/esm/graphql/fragments/selected-option.generated.js +2 -4
  164. package/dist/esm/graphql/fragments/variant.generated.js +2 -4
  165. package/dist/esm/graphql/mutations/page-view-up.generated.js +3 -5
  166. package/dist/esm/graphql/queries/collection-detail-filter.generated.js +10 -22
  167. package/dist/esm/graphql/queries/collection.generated.js +8 -18
  168. package/dist/esm/graphql/queries/collections.generated.js +3 -8
  169. package/dist/esm/graphql/queries/preview-page.generated.js +8 -18
  170. package/dist/esm/graphql/queries/product-little-detail.generated.js +5 -12
  171. package/dist/esm/graphql/queries/product-medias.generated.js +2 -6
  172. package/dist/esm/graphql/queries/product-value-label.generated.js +7 -0
  173. package/dist/esm/graphql/queries/product-variants.generated.js +4 -10
  174. package/dist/esm/graphql/queries/products.generated.js +9 -20
  175. package/dist/esm/graphql/queries/published-theme-pages.generated.js +8 -18
  176. package/dist/esm/graphql/queries/store-property.generated.js +2 -4
  177. package/dist/esm/helpers/GlobalEvent.js +1 -15
  178. package/dist/esm/helpers/background.js +1 -106
  179. package/dist/esm/helpers/borders.js +4 -175
  180. package/dist/esm/helpers/clone-deep.js +1 -3
  181. package/dist/esm/helpers/cls.js +1 -14
  182. package/dist/esm/helpers/colors.js +1 -168
  183. package/dist/esm/helpers/compose-advance-style.js +1 -185
  184. package/dist/esm/helpers/constant.js +1 -19
  185. package/dist/esm/helpers/convert.js +1 -4
  186. package/dist/esm/helpers/css-variable.js +1 -5
  187. package/dist/esm/helpers/email.js +1 -6
  188. package/dist/esm/helpers/flatten-connection.js +1 -7
  189. package/dist/esm/helpers/get-resonsive-value.js +1 -27
  190. package/dist/esm/helpers/get-shortname.js +1 -90
  191. package/dist/esm/helpers/is-browser.js +1 -5
  192. package/dist/esm/helpers/is-defined.js +1 -5
  193. package/dist/esm/helpers/is-empty-children.js +1 -7
  194. package/dist/esm/helpers/is-safari.js +1 -5
  195. package/dist/esm/helpers/layout.js +1 -54
  196. package/dist/esm/helpers/load-script.js +1 -29
  197. package/dist/esm/helpers/make-style.js +1 -117
  198. package/dist/esm/helpers/normalize-builder-data.js +1 -21
  199. package/dist/esm/helpers/prefetch-queries.js +1 -76
  200. package/dist/esm/helpers/product.js +1 -28
  201. package/dist/esm/helpers/queries/get-collection.js +1 -217
  202. package/dist/esm/helpers/queries/get-collections.js +1 -19
  203. package/dist/esm/helpers/queries/get-product-by-slug.js +1 -123
  204. package/dist/esm/helpers/queries/get-product.js +1 -150
  205. package/dist/esm/helpers/queries/get-products.js +1 -159
  206. package/dist/esm/helpers/query.js +1 -25
  207. package/dist/esm/helpers/radius.js +6 -127
  208. package/dist/esm/helpers/render.js +1 -64
  209. package/dist/esm/helpers/shadow.js +1 -51
  210. package/dist/esm/helpers/size.js +4 -31
  211. package/dist/esm/helpers/spacing.js +1 -40
  212. package/dist/esm/helpers/tracking/fpixel.js +1 -24
  213. package/dist/esm/helpers/tracking/gtag.js +1 -87
  214. package/dist/esm/helpers/tracking/tiktokpixel.js +1 -15
  215. package/dist/esm/helpers/typography.js +17 -96
  216. package/dist/esm/helpers/variant.js +1 -6
  217. package/dist/esm/hooks/cart/use-add-to-cart.js +1 -18
  218. package/dist/esm/hooks/cart/use-cart-data.js +1 -26
  219. package/dist/esm/hooks/cart/use-cart-discount-codes-update.js +1 -18
  220. package/dist/esm/hooks/cart/use-cart-note-update.js +1 -18
  221. package/dist/esm/hooks/cart/use-create-cart.js +1 -20
  222. package/dist/esm/hooks/cart/use-remove-cart-item.js +1 -18
  223. package/dist/esm/hooks/cart/use-update-cart-item.js +1 -18
  224. package/dist/esm/hooks/shop/use-collection-query.js +1 -20
  225. package/dist/esm/hooks/shop/use-collections-query.js +1 -15
  226. package/dist/esm/hooks/shop/use-product-query.js +1 -20
  227. package/dist/esm/hooks/shop/use-products-query.js +1 -20
  228. package/dist/esm/hooks/shop.js +1 -111
  229. package/dist/esm/hooks/use-current-device.js +1 -19
  230. package/dist/esm/hooks/use-lazy-video.js +1 -13
  231. package/dist/esm/hooks/useCartId.js +1 -40
  232. package/dist/esm/hooks/useCartLine.js +1 -7
  233. package/dist/esm/hooks/useCartUI.js +1 -44
  234. package/dist/esm/hooks/useCollection.js +1 -7
  235. package/dist/esm/hooks/useFetchHandle.js +1 -11
  236. package/dist/esm/hooks/useFormatMoney.js +1 -56
  237. package/dist/esm/hooks/useInitialSwatchesOptions.js +1 -0
  238. package/dist/esm/hooks/useIsomorphicLayoutEffect.js +1 -6
  239. package/dist/esm/hooks/useLoadScript.js +1 -28
  240. package/dist/esm/hooks/useMoney.js +1 -80
  241. package/dist/esm/hooks/usePrevious.js +1 -17
  242. package/dist/esm/hooks/useProduct.js +1 -114
  243. package/dist/esm/hooks/useProductList.js +1 -16
  244. package/dist/esm/hooks/useSuspenseFetch.js +1 -23
  245. package/dist/esm/hooks/useSwatchesOptions.js +1 -37
  246. package/dist/esm/index.js +1 -92
  247. package/dist/esm/types/global-style.js +1 -11
  248. package/dist/types/index.d.ts +1213 -1031
  249. package/package.json +5 -5
@@ -1,367 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useMemo, useContext, createContext, Suspense, Fragment } from 'react';
3
- import { useStore, createStore } from 'zustand';
4
- import { cloneDeep } from '../helpers/clone-deep.js';
5
- import { normalizeBuilderData } from '../helpers/normalize-builder-data.js';
6
-
7
- function moveByIndex(input, from, to) {
8
- const elm = input.splice(from, 1)[0];
9
- if (elm !== undefined) {
10
- input.splice(to, 0, elm);
11
- }
12
- }
13
- function removeByKey(id, data) {
14
- const item = data[id];
15
- if (item) {
16
- delete data[id];
17
- if (item.type !== 'section') {
18
- item.childrens?.map((child)=>removeByKey(child, data));
19
- }
20
- }
21
- }
22
- const BuilderPreviewContext = /*#__PURE__*/ createContext(null);
23
- const root = {
24
- uid: 'ROOT',
25
- tag: 'Root',
26
- label: 'Root',
27
- childrens: []
28
- };
29
- const createBuilderPreviewProvider = (args)=>createStore((set, get)=>({
30
- state: args,
31
- loaded: false,
32
- addItem: (args)=>{
33
- const { position , data } = args;
34
- const state = get().state;
35
- const dateModified = Date.now();
36
- if (args.type === 'section') {
37
- if (!Array.isArray(data)) {
38
- const sectionId = data.uid;
39
- // Section only add to ROOT
40
- const ROOT = state.ROOT;
41
- if (!ROOT.childrens) {
42
- ROOT.childrens = [
43
- 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(ROOT)
58
- }
59
- });
60
- }
61
- } else {
62
- const { id , data } = args;
63
- const parent = id ? state[id] ?? state.ROOT : state.ROOT;
64
- // Can't add item to section
65
- if (parent.type === 'section') return;
66
- if (Array.isArray(data)) {
67
- const childrens = data.map((v)=>v.uid);
68
- const newState = data.reduceRight((prev, current)=>{
69
- const item = normalizeBuilderData(current);
70
- return {
71
- ...prev,
72
- ...item
73
- };
74
- }, {});
75
- parent.dateModified = dateModified;
76
- parent.childrens = parent.childrens ?? [];
77
- parent.childrens.splice(position ?? 0, 0, ...childrens);
78
- set({
79
- state: {
80
- ...state,
81
- ...newState,
82
- [parent.uid]: cloneDeep(parent)
83
- }
84
- });
85
- } else {
86
- const item = normalizeBuilderData(data);
87
- parent.dateModified = dateModified;
88
- parent.childrens = parent.childrens ?? [];
89
- parent.childrens.splice(position ?? 0, 0, data.uid);
90
- set({
91
- state: {
92
- ...state,
93
- ...item,
94
- [parent.uid]: cloneDeep(parent)
95
- }
96
- });
97
- }
98
- }
99
- },
100
- changeItemProp: (id, data, group)=>{
101
- if (!group || ![
102
- 'setting',
103
- 'style',
104
- 'advanced'
105
- ].includes(group)) return;
106
- const state = get().state;
107
- const item = state[id];
108
- // Ignore section
109
- if (item?.type === 'section') return;
110
- if (item) {
111
- const dateModified = Date.now();
112
- item.dateModified = dateModified;
113
- switch(group){
114
- case 'setting':
115
- set({
116
- state: {
117
- ...state,
118
- [id]: {
119
- ...item,
120
- settings: {
121
- ...item.settings,
122
- ...data
123
- }
124
- }
125
- }
126
- });
127
- break;
128
- case 'style':
129
- set({
130
- state: {
131
- ...state,
132
- [id]: {
133
- ...item,
134
- styles: {
135
- ...item.styles,
136
- ...data
137
- }
138
- }
139
- }
140
- });
141
- break;
142
- case 'advanced':
143
- set({
144
- state: {
145
- ...state,
146
- [id]: {
147
- ...item,
148
- advanced: {
149
- ...item.advanced,
150
- ...data
151
- }
152
- }
153
- }
154
- });
155
- break;
156
- }
157
- }
158
- },
159
- changeItemPropByKey: ({ id , key , data , group })=>{
160
- if (!group || ![
161
- 'setting',
162
- 'style',
163
- 'advanced'
164
- ].includes(group)) return;
165
- const state = get().state;
166
- const item = state[id];
167
- // Ignore section
168
- if (item?.type === 'section') return;
169
- if (item) {
170
- const itemSetting = {
171
- style: item.styles ?? {},
172
- advanced: item.advanced ?? {},
173
- setting: item.settings ?? {}
174
- };
175
- if (data === undefined) {
176
- console.warn('Data is undefined');
177
- delete itemSetting[group][key];
178
- } else {
179
- itemSetting[group][key] = data;
180
- }
181
- set({
182
- state: {
183
- ...state,
184
- [id]: {
185
- ...item,
186
- settings: {
187
- ...itemSetting.setting
188
- },
189
- styles: {
190
- ...itemSetting.style
191
- },
192
- advanced: {
193
- ...itemSetting.advanced
194
- }
195
- }
196
- }
197
- });
198
- }
199
- },
200
- getItem: (id)=>{
201
- return get().state[id];
202
- },
203
- removeItem: (id)=>{
204
- if (id === 'ROOT') {
205
- set({
206
- state: {
207
- ROOT: root
208
- }
209
- });
210
- } else {
211
- const state = get().state;
212
- removeByKey(id, state);
213
- // Get parent node by id
214
- const parent = Object.entries(state).find(([, value])=>value.type !== 'section' && value.childrens?.includes(id));
215
- if (parent) {
216
- const dateModified = Date.now();
217
- const [parentId, parentValue] = parent;
218
- if (parentValue.type === 'section') return;
219
- parentValue.childrens = parentValue.childrens?.filter((child)=>child !== id);
220
- parentValue.dateModified = dateModified;
221
- set({
222
- state: {
223
- ...state,
224
- [parentId]: cloneDeep(parentValue)
225
- }
226
- });
227
- }
228
- }
229
- },
230
- moveItem: (id, toId, position)=>{
231
- const state = get().state;
232
- const item = state[id];
233
- const moveTo = state[toId];
234
- // Ignore section
235
- if (!item || !moveTo || moveTo.type === 'section') return;
236
- if (item.type === 'section') {
237
- // Section only add to ROOT
238
- const ROOT = state.ROOT;
239
- if (!ROOT.childrens) return;
240
- const currentIndex = ROOT.childrens.findIndex((uid)=>uid === id);
241
- moveByIndex(ROOT.childrens, currentIndex, position ?? 0);
242
- set({
243
- state: {
244
- ...state,
245
- ROOT: cloneDeep(ROOT)
246
- }
247
- });
248
- } else {
249
- const parent = Object.entries(state).find(([, value])=>value.type !== 'section' && value.childrens?.includes(id));
250
- if (item && parent) {
251
- const dateModified = Date.now();
252
- const [, parentItem] = parent;
253
- // Ignore section
254
- if (parentItem.type === 'section') 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(parentItem)
265
- }
266
- });
267
- }
268
- } else {
269
- // Move item to another parent
270
- // Remove item from parent node
271
- parentItem.childrens = parentItem.childrens?.filter((uid)=>uid !== id);
272
- if (moveTo) {
273
- moveTo.dateModified = dateModified;
274
- moveTo.childrens = moveTo.childrens ?? [];
275
- moveTo.childrens.splice(position ?? 0, 0, item.uid);
276
- set({
277
- state: {
278
- ...state,
279
- [moveTo.uid]: cloneDeep(moveTo),
280
- [parentItem.uid]: cloneDeep(parentItem)
281
- }
282
- });
283
- }
284
- }
285
- }
286
- }
287
- },
288
- forceChangeState: (data)=>{
289
- set({
290
- state: data,
291
- loaded: true
292
- });
293
- },
294
- initState: (data)=>{
295
- if (Array.isArray(data)) {
296
- const childrens = data.map((v)=>v.uid);
297
- const newState = data.reduceRight((prev, current)=>{
298
- const item = normalizeBuilderData(current);
299
- return {
300
- ...prev,
301
- ...item
302
- };
303
- }, {});
304
- set({
305
- loaded: true,
306
- state: {
307
- ROOT: {
308
- ...root,
309
- childrens
310
- },
311
- ...newState
312
- }
313
- });
314
- } else {
315
- const newState = normalizeBuilderData(data);
316
- set({
317
- loaded: true,
318
- state: {
319
- ROOT: {
320
- ...root,
321
- childrens: [
322
- data.uid
323
- ]
324
- },
325
- ...newState
326
- }
327
- });
328
- }
329
- },
330
- addSection: (data, position)=>{
331
- const state = get().state;
332
- const ROOT = state.ROOT;
333
- if (!ROOT.childrens) ROOT.childrens = [];
334
- ROOT.childrens.splice(position ?? 0, 0, data.uid);
335
- set({
336
- state: {
337
- ...state,
338
- ROOT: cloneDeep(ROOT)
339
- }
340
- });
341
- }
342
- }));
343
- const BuilderPreviewProvider = ({ children , state , lazy , ...passProps })=>{
344
- const Component = lazy ? Suspense : Fragment;
345
- const value = useMemo(()=>{
346
- return createBuilderPreviewProvider(state);
347
- }, [
348
- state
349
- ]);
350
- return /*#__PURE__*/ jsx(Component, {
351
- children: /*#__PURE__*/ jsx(BuilderPreviewContext.Provider, {
352
- ...passProps,
353
- value: value,
354
- children: children
355
- })
356
- });
357
- };
358
- // export const useBuilderPreviewStore = useStore;
359
- const useBuilderPreviewStore = (selector, equalityFn)=>{
360
- const store = useContext(BuilderPreviewContext);
361
- if (!store) {
362
- throw new Error('useBuilderPreviewStore must be used within a BuilderPreviewProvider');
363
- }
364
- return useStore(store, selector, equalityFn);
365
- };
366
-
367
- export { BuilderPreviewProvider, useBuilderPreviewStore };
1
+ import{jsx as e}from"react/jsx-runtime";import{useMemo as t,useContext as i,createContext as d,Suspense as r,Fragment as s}from"react";import{useStore as l,createStore as n}from"zustand";import{cloneDeep as a}from"../helpers/clone-deep.js";import{normalizeBuilderData as c}from"../helpers/normalize-builder-data.js";function moveByIndex(e,t,i){let d=e.splice(t,1)[0];void 0!==d&&e.splice(i,0,d)}function removeByKey(e,t){let i=t[e];i&&(delete t[e],"section"!==i.type&&i.childrens?.map(e=>removeByKey(e,t)))}let BuilderPreviewContext=d(null),root={uid:"ROOT",tag:"Root",label:"Root",childrens:[]},createBuilderPreviewProvider=e=>n((t,i)=>({state:e,loaded:!1,addItem:e=>{let{position:d,data:r}=e,s=i().state,l=Date.now();if("section"===e.type){if(!Array.isArray(r)){let e=r.uid,i=s.ROOT;i.childrens?i.childrens.splice(d??0,0,e):i.childrens=[e],i.dateModified=l,t({state:{...s,[e]:{uid:e,type:"section",label:r.label},ROOT:a(i)}})}}else{let{id:i,data:r}=e,n=i?s[i]??s.ROOT:s.ROOT;if("section"===n.type)return;if(Array.isArray(r)){let e=r.map(e=>e.uid),i=r.reduceRight((e,t)=>{let i=c(t);return{...e,...i}},{});n.dateModified=l,n.childrens=n.childrens??[],n.childrens.splice(d??0,0,...e),t({state:{...s,...i,[n.uid]:a(n)}})}else{let e=c(r);n.dateModified=l,n.childrens=n.childrens??[],n.childrens.splice(d??0,0,r.uid),t({state:{...s,...e,[n.uid]:a(n)}})}}},changeItemProp:(e,d,r)=>{if(!r||!["setting","style","advanced"].includes(r))return;let s=i().state,l=s[e];if(l?.type!=="section"&&l){let i=Date.now();switch(l.dateModified=i,r){case"setting":t({state:{...s,[e]:{...l,settings:{...l.settings,...d}}}});break;case"style":t({state:{...s,[e]:{...l,styles:{...l.styles,...d}}}});break;case"advanced":t({state:{...s,[e]:{...l,advanced:{...l.advanced,...d}}}})}}},forceChangeItemProp:(e,d,r)=>{if(!r||!["setting","style","advanced"].includes(r))return;let s=i().state,l=s[e];if(l?.type!=="section"&&l){let i=Date.now();switch(l.dateModified=i,r){case"setting":t({state:{...s,[e]:{...l,settings:d}}});break;case"style":t({state:{...s,[e]:{...l,styles:d}}});break;case"advanced":t({state:{...s,[e]:{...l,advanced:d}}})}}},changeItemPropByKey:({id:e,key:d,data:r,group:s})=>{if(!s||!["setting","style","advanced"].includes(s))return;let l=i().state,n=l[e];if(n?.type!=="section"&&n){let i={style:n.styles??{},advanced:n.advanced??{},setting:n.settings??{}};void 0===r?(console.warn("Data is undefined"),delete i[s][d]):i[s][d]=r,t({state:{...l,[e]:{...n,settings:{...i.setting},styles:{...i.style},advanced:{...i.advanced}}}})}},getItem:e=>i().state[e],removeItem:e=>{if("ROOT"===e)t({state:{ROOT:root}});else{let d=i().state;removeByKey(e,d);let r=Object.entries(d).find(([,t])=>"section"!==t.type&&t.childrens?.includes(e));if(r){let i=Date.now(),[s,l]=r;if("section"===l.type)return;l.childrens=l.childrens?.filter(t=>t!==e),l.dateModified=i,t({state:{...d,[s]:a(l)}})}}},moveItem:(e,d,r)=>{let s=i().state,l=s[e],n=s[d];if(l&&n&&"section"!==n.type){if("section"===l.type){let i=s.ROOT;if(!i.childrens)return;let d=i.childrens.findIndex(t=>t===e);moveByIndex(i.childrens,d,r??0),t({state:{...s,ROOT:a(i)}})}else{let i=Object.entries(s).find(([,t])=>"section"!==t.type&&t.childrens?.includes(e));if(l&&i){let c=Date.now(),[,o]=i;if("section"===o.type)return;if(o.dateModified=c,d===o.uid&&o.childrens){let i=o.childrens.findIndex(t=>t===e);o.childrens&&i!==r&&(moveByIndex(o.childrens,i,r??0),t({state:{...s,[o.uid]:a(o)}}))}else o.childrens=o.childrens?.filter(t=>t!==e),n&&(n.dateModified=c,n.childrens=n.childrens??[],n.childrens.splice(r??0,0,l.uid),t({state:{...s,[n.uid]:a(n),[o.uid]:a(o)}}))}}}},forceChangeState:e=>{t({state:e,loaded:!0})},initState:e=>{if(Array.isArray(e)){let i=e.map(e=>e.uid),d=e.reduceRight((e,t)=>{let i=c(t);return{...e,...i}},{});t({loaded:!0,state:{ROOT:{...root,childrens:i},...d}})}else{let i=c(e);t({loaded:!0,state:{ROOT:{...root,childrens:[e.uid]},...i}})}},addSection:(e,d)=>{let r=i().state,s=r.ROOT;s.childrens||(s.childrens=[]),s.childrens.splice(d??0,0,e.uid),t({state:{...r,ROOT:a(s)}})}})),BuilderPreviewProvider=({children:i,state:d,lazy:l,...n})=>{let a=l?r:s,c=t(()=>createBuilderPreviewProvider(d),[d]);return e(a,{children:e(BuilderPreviewContext.Provider,{...n,value:c,children:i})})},useBuilderPreviewStore=(e,t)=>{let d=i(BuilderPreviewContext);if(!d)throw Error("useBuilderPreviewStore must be used within a BuilderPreviewProvider");return l(d,e,t)};export{BuilderPreviewProvider,useBuilderPreviewStore};
@@ -1,26 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useStore, createStore } from 'zustand';
3
- import { useContext, createContext } from 'react';
4
-
5
- const CartLineContext = /*#__PURE__*/ createContext(null);
6
- const createCartLineStore = (data)=>createStore(()=>({
7
- ...data
8
- }));
9
- const CartLineProvider = ({ children , line })=>{
10
- return /*#__PURE__*/ jsx(CartLineContext.Provider, {
11
- value: createCartLineStore({
12
- line
13
- }),
14
- children: children
15
- }, `${line.id}-${line.quantity}`);
16
- };
17
- // export const useCartLineStore = useStore;
18
- const useCartLineStore = (selector, equalityFn)=>{
19
- const store = useContext(CartLineContext);
20
- if (!store) {
21
- throw new Error('useCartLineStore must be used within a CartLineProvider');
22
- }
23
- return useStore(store, selector, equalityFn);
24
- };
25
-
26
- export { CartLineProvider, useCartLineStore };
1
+ import{jsx as r}from"react/jsx-runtime";import{useStore as e,createStore as t}from"zustand";import{useContext as i,createContext as n}from"react";let CartLineContext=n(null),createCartLineStore=r=>t(()=>({...r})),CartLineProvider=({children:e,line:t})=>r(CartLineContext.Provider,{value:createCartLineStore({line:t}),children:e},`${t.id}-${t.quantity}`),useCartLineStore=(r,t)=>{let n=i(CartLineContext);if(!n)throw Error("useCartLineStore must be used within a CartLineProvider");return e(n,r,t)};export{CartLineProvider,useCartLineStore};
@@ -1,35 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useMemo, useContext, createContext } from 'react';
3
- import { useStore, createStore } from 'zustand';
4
-
5
- const CollectionContext = /*#__PURE__*/ createContext(null);
6
- const createCollectionProvider = (data)=>createStore((set)=>({
7
- ...data,
8
- changeCollectionStore: ({ collection })=>{
9
- set({
10
- collection: collection
11
- });
12
- }
13
- }));
14
- const CollectionProvider = ({ collection , children })=>{
15
- const store = useMemo(()=>{
16
- return createCollectionProvider({
17
- collection
18
- });
19
- }, [
20
- collection
21
- ]);
22
- return /*#__PURE__*/ jsx(CollectionContext.Provider, {
23
- value: store,
24
- children: children
25
- }, collection?.id);
26
- };
27
- const useCollectionStore = (selector, equalityFn)=>{
28
- const store = useContext(CollectionContext);
29
- if (!store) {
30
- throw new Error('useCollectionStore must be used within a useCollectionStore');
31
- }
32
- return useStore(store, selector, equalityFn);
33
- };
34
-
35
- export { CollectionProvider, useCollectionStore };
1
+ import{jsx as e}from"react/jsx-runtime";import{useMemo as o,useContext as t,createContext as r}from"react";import{useStore as l,createStore as i}from"zustand";let CollectionContext=r(null),createCollectionProvider=e=>i(o=>({...e,changeCollectionStore:({collection:e})=>{o({collection:e})}})),CollectionProvider=({collection:t,children:r})=>{let l=o(()=>createCollectionProvider({collection:t}),[t]);return e(CollectionContext.Provider,{value:l,children:r},t?.id)},useCollectionStore=(e,o)=>{let r=t(CollectionContext);if(!r)throw Error("useCollectionStore must be used within a useCollectionStore");return l(r,e,o)};export{CollectionProvider,useCollectionStore};
@@ -1,44 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useContext, createContext } from 'react';
3
- import { useStore, createStore } from 'zustand';
4
-
5
- const ModalContext = /*#__PURE__*/ createContext(null);
6
- const createModalProvider = (data)=>createStore((set)=>({
7
- activeId: data,
8
- setModalActive: (id)=>{
9
- window?.parent?.postMessage?.(JSON.stringify({
10
- type: 'active-element',
11
- uid: id
12
- }), '*');
13
- set({
14
- activeId: id
15
- });
16
- },
17
- clearModal: ()=>{
18
- window?.parent?.postMessage?.(JSON.stringify({
19
- type: 'active-element',
20
- uid: null
21
- }), '*');
22
- set({
23
- activeId: undefined
24
- });
25
- }
26
- }));
27
- const ModalProvider = ({ children , activeId , ...passProps })=>{
28
- const store = createModalProvider(activeId);
29
- return /*#__PURE__*/ jsx(ModalContext.Provider, {
30
- ...passProps,
31
- value: store,
32
- children: children
33
- });
34
- };
35
- // export const useBuilderStore = useStore;
36
- const useModalStore = (selector, equalityFn)=>{
37
- const store = useContext(ModalContext);
38
- if (!store) {
39
- throw new Error('useModalStore must be used within a ModalProvider');
40
- }
41
- return useStore(store, selector, equalityFn);
42
- };
43
-
44
- export { ModalProvider, useModalStore };
1
+ import{jsx as e}from"react/jsx-runtime";import{useContext as t,createContext as r}from"react";import{useStore as o,createStore as a}from"zustand";let ModalContext=r(null),createModalProvider=e=>a(t=>({activeId:e,setModalActive:e=>{window?.parent?.postMessage?.(JSON.stringify({type:"active-element",uid:e}),"*"),t({activeId:e})},clearModal:()=>{window?.parent?.postMessage?.(JSON.stringify({type:"active-element",uid:null}),"*"),t({activeId:void 0})}})),ModalProvider=({children:t,activeId:r,...o})=>{let a=createModalProvider(r);return e(ModalContext.Provider,{...o,value:a,children:t})},useModalStore=(e,r)=>{let a=t(ModalContext);if(!a)throw Error("useModalStore must be used within a ModalProvider");return o(a,e,r)};export{ModalProvider,useModalStore};
@@ -1,146 +1 @@
1
- import { jsx, Fragment } from 'react/jsx-runtime';
2
- import { useStore, createStore } from 'zustand';
3
- import { useId, useMemo, useContext, createContext } from 'react';
4
- import { flattenConnection } from '../helpers/flatten-connection.js';
5
- import { checkInStock } from '../helpers/variant.js';
6
-
7
- // const { Provider, useStore } = createContext<StoreApi<ProductContextProps>>();
8
- const ProductContext = /*#__PURE__*/ createContext(null);
9
- const createProductStoreProvider = (data)=>createStore((set, get)=>({
10
- ...data,
11
- updateProperty: (name, data)=>{
12
- set((state)=>{
13
- return {
14
- properties: state.properties?.map((v)=>{
15
- if (v.key === name) {
16
- return {
17
- ...v,
18
- ...data
19
- };
20
- }
21
- return v;
22
- })
23
- };
24
- });
25
- },
26
- addProperty: (data)=>{
27
- const properties = get().properties;
28
- if (!properties?.some((v)=>v.key === data.key)) {
29
- set((state)=>({
30
- properties: [
31
- ...state.properties ?? [],
32
- data
33
- ]
34
- }));
35
- }
36
- },
37
- removeProperty: (name)=>{
38
- set((state)=>({
39
- properties: state.properties?.filter((v)=>v.key !== name)
40
- }));
41
- },
42
- setQuantity: (num)=>{
43
- set({
44
- quantity: num > 0 ? num : 1
45
- });
46
- },
47
- setProductFeaturedImage: (image)=>{
48
- set({
49
- featuredImageGlobal: image
50
- });
51
- },
52
- incrementQuantity: ()=>{
53
- set((state)=>{
54
- const quantity = state.quantity ?? 1;
55
- return {
56
- quantity: quantity + 1
57
- };
58
- });
59
- },
60
- decrementQuantity: ()=>{
61
- set((state)=>{
62
- const quantity = state.quantity ?? 1;
63
- return {
64
- quantity: quantity > 2 ? quantity - 1 : 1
65
- };
66
- });
67
- },
68
- setSelectedOption: (optionId, optionValue)=>{
69
- set((state)=>{
70
- if (optionId && optionValue) {
71
- return {
72
- selectedOptions: {
73
- ...state?.selectedOptions,
74
- [optionId]: optionValue
75
- }
76
- };
77
- }
78
- return state;
79
- });
80
- },
81
- forceSelectedOption: (value)=>{
82
- set((state)=>{
83
- return {
84
- selectedOptions: {
85
- ...state?.selectedOptions,
86
- ...value
87
- }
88
- };
89
- });
90
- },
91
- updateIsSubmit: (value)=>{
92
- set({
93
- isSubmit: value
94
- });
95
- }
96
- }));
97
- const ProductProvider = ({ children , product , initialVariantId , quantity =1 })=>{
98
- const uiqueId = useId();
99
- const store = useMemo(()=>{
100
- let selectedOptions = {};
101
- let featuredImageGlobal = undefined;
102
- if (product) {
103
- const variants = flattenConnection(product.variants);
104
- const firstVariant = variants[0];
105
- const firstVariantInStock = variants.find((item)=>checkInStock(item));
106
- const initialVariant = variants.find((v)=>v?.id === initialVariantId) ?? firstVariantInStock ?? firstVariant;
107
- selectedOptions = initialVariant?.selectedOptions.reduce((acc, option)=>{
108
- if (option.name) {
109
- return {
110
- ...acc,
111
- [option.name]: option.value
112
- };
113
- }
114
- return acc;
115
- }, {});
116
- featuredImageGlobal = product.medias?.edges.find((v)=>v.node?.id === initialVariant?.mediaId)?.node ?? product.featuredImage;
117
- }
118
- return createProductStoreProvider({
119
- product,
120
- quantity,
121
- selectedOptions,
122
- uiqueId,
123
- featuredImageGlobal
124
- });
125
- }, [
126
- initialVariantId,
127
- product,
128
- quantity,
129
- uiqueId
130
- ]);
131
- return /*#__PURE__*/ jsx(ProductContext.Provider, {
132
- value: store,
133
- children: /*#__PURE__*/ jsx(Fragment, {
134
- children: children
135
- })
136
- });
137
- };
138
- const useProductStore = (selector, equalityFn)=>{
139
- const store = useContext(ProductContext);
140
- if (!store) {
141
- throw new Error('Element of product must be used inside a Product');
142
- }
143
- return useStore(store, selector, equalityFn);
144
- };
145
-
146
- export { ProductProvider, useProductStore };
1
+ import{jsx as e,Fragment as t}from"react/jsx-runtime";import{useStore as r,createStore as o}from"zustand";import{useId as i,useMemo as d,useContext as n,createContext as u}from"react";import{flattenConnection as s}from"../helpers/flatten-connection.js";import{checkInStock as a}from"../helpers/variant.js";let ProductContext=u(null),createProductStoreProvider=e=>o((t,r)=>({...e,updateProperty:(e,r)=>{t(t=>({properties:t.properties?.map(t=>t.key===e?{...t,...r}:t)}))},addProperty:e=>{let o=r().properties;o?.some(t=>t.key===e.key)||t(t=>({properties:[...t.properties??[],e]}))},removeProperty:e=>{t(t=>({properties:t.properties?.filter(t=>t.key!==e)}))},setQuantity:e=>{t({quantity:e>0?e:1})},setProductFeaturedImage:e=>{t({featuredImageGlobal:e})},incrementQuantity:()=>{t(e=>{let t=e.quantity??1;return{quantity:t+1}})},decrementQuantity:()=>{t(e=>{let t=e.quantity??1;return{quantity:t>2?t-1:1}})},setSelectedOption:(e,r)=>{t(t=>e&&r?{selectedOptions:{...t?.selectedOptions,[e]:r}}:t)},forceSelectedOption:e=>{t(t=>({selectedOptions:{...t?.selectedOptions,...e}}))},updateIsSubmit:e=>{t({isSubmit:e})}})),ProductProvider=({children:r,product:o,initialVariantId:n,quantity:u=1,isSyncProduct:p})=>{let c=i(),l=d(()=>{let e,t={};if(o){let r=s(o.variants),i=r[0],d=r.find(e=>a(e)),u=r.find(e=>e?.id===n)??d??i;t=u?.selectedOptions.reduce((e,t)=>t.name?{...e,[t.name]:t.value}:e,{}),e=o.medias?.edges.find(e=>e.node?.id===u?.mediaId)?.node??o.featuredImage}return createProductStoreProvider({product:o,quantity:u,selectedOptions:t,uiqueId:c,featuredImageGlobal:e,isSyncProduct:p})},[n,o,u,c,p]);return e(ProductContext.Provider,{value:l,children:e(t,{children:r})})},useProductStore=(e,t)=>{let o=n(ProductContext);if(!o)throw Error("Element of product must be used inside a Product");return r(o,e,t)};export{ProductProvider,useProductStore};
@@ -1,28 +1 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { useContext, createContext } from 'react';
3
- import { useStore, createStore } from 'zustand';
4
-
5
- const ProductListContext = /*#__PURE__*/ createContext(null);
6
- const createProductListProvider = (data)=>createStore(()=>({
7
- ...data
8
- }));
9
- const ProductListProvider = ({ children , collection , products , settings , styles })=>{
10
- return /*#__PURE__*/ jsx(ProductListContext.Provider, {
11
- value: createProductListProvider({
12
- products,
13
- collection,
14
- settings,
15
- styles
16
- }),
17
- children: children
18
- });
19
- };
20
- const useProductListStore = (selector, equalityFn)=>{
21
- const store = useContext(ProductListContext);
22
- if (!store) {
23
- throw new Error('useProductListStore must be used within a useProductListStore');
24
- }
25
- return useStore(store, selector, equalityFn);
26
- };
27
-
28
- export { ProductListContext, ProductListProvider, useProductListStore };
1
+ import{jsx as t}from"react/jsx-runtime";import{useContext as r,createContext as o}from"react";import{useStore as e,createStore as i}from"zustand";let ProductListContext=o(null),createProductListProvider=t=>i(()=>({...t})),ProductListProvider=({children:r,collection:o,products:e,settings:i,styles:u})=>t(ProductListContext.Provider,{value:createProductListProvider({products:e,collection:o,settings:i,styles:u}),children:r}),useProductListStore=(t,o)=>{let i=r(ProductListContext);if(!i)throw Error("useProductListStore must be used within a useProductListStore");return e(i,t,o)};export{ProductListContext,ProductListProvider,useProductListStore};