the-foxy-library 1.0.15 → 1.0.17

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 (188) hide show
  1. package/dist/cjs/{app-globals-HEVw7jxh.js → app-globals-DRVRI1ik.js} +4 -5
  2. package/dist/cjs/app-globals-DRVRI1ik.js.map +1 -0
  3. package/dist/cjs/{factory-CrhcL_74.js → factory-CC4cUyGl.js} +3 -3
  4. package/dist/cjs/{factory-CrhcL_74.js.map → factory-CC4cUyGl.js.map} +1 -1
  5. package/dist/cjs/{index-CDQIUkok.js → index-77WT2UXf.js} +21 -18
  6. package/dist/cjs/index-77WT2UXf.js.map +1 -0
  7. package/dist/cjs/intravenous.cjs.js +2 -2
  8. package/dist/cjs/ion-icon_12.cjs.entry.js +2 -2
  9. package/dist/cjs/iv-banner.cjs.entry.js +1 -1
  10. package/dist/cjs/iv-card_3.cjs.entry.js +2 -2
  11. package/dist/cjs/iv-carousel.cjs.entry.js +1 -1
  12. package/dist/cjs/iv-compare-product.cjs.entry.js +1 -1
  13. package/dist/cjs/iv-dynamic-products-carousel.cjs.entry.js +2 -2
  14. package/dist/cjs/iv-dynamic-products.cjs.entry.js +2 -2
  15. package/dist/cjs/iv-filters.cjs.entry.js +1 -1
  16. package/dist/cjs/iv-predictive-search.cjs.entry.js +1 -1
  17. package/dist/cjs/iv-product-pin.cjs.entry.js +1 -1
  18. package/dist/cjs/iv-product-upsell.cjs.entry.js +1 -1
  19. package/dist/cjs/iv-recently-viewed.cjs.entry.js +2 -2
  20. package/dist/cjs/iv-shop-the-look.cjs.entry.js +1 -1
  21. package/dist/cjs/iv-suggest.cjs.entry.js +1 -1
  22. package/dist/cjs/iv-tabs.cjs.entry.js +1 -1
  23. package/dist/cjs/iv-toast-container.cjs.entry.js +1 -1
  24. package/dist/cjs/iv-toast.cjs.entry.js +1 -1
  25. package/dist/cjs/iv-wishlist.cjs.entry.js +1 -1
  26. package/dist/cjs/loader.cjs.js +2 -2
  27. package/dist/cjs/sw-in-grid-content.cjs.entry.js +1 -1
  28. package/dist/cjs/sw-size-guide.cjs.entry.js +1 -1
  29. package/dist/collection/global/app.js +2 -3
  30. package/dist/collection/global/app.js.map +1 -1
  31. package/dist/collection/utils/config/factory.js +17 -13
  32. package/dist/collection/utils/config/factory.js.map +1 -1
  33. package/dist/collection/utils/store/store.js +11 -2
  34. package/dist/collection/utils/store/store.js.map +1 -1
  35. package/dist/components/index.js +3 -4
  36. package/dist/components/index.js.map +1 -1
  37. package/dist/components/ion-icon.js +1 -1
  38. package/dist/components/iv-accordion.js +2 -2
  39. package/dist/components/iv-banner.js +1 -1
  40. package/dist/components/iv-button.js +1 -1
  41. package/dist/components/iv-card.js +1 -1
  42. package/dist/components/iv-carousel.js +1 -1
  43. package/dist/components/iv-compare-product.js +1 -1
  44. package/dist/components/iv-dynamic-products-carousel.js +6 -6
  45. package/dist/components/iv-dynamic-products.js +7 -7
  46. package/dist/components/iv-event-button.js +1 -1
  47. package/dist/components/iv-filters.js +1 -1
  48. package/dist/components/iv-footer.js +1 -1
  49. package/dist/components/iv-layout.js +1 -1
  50. package/dist/components/iv-link-list.js +2 -2
  51. package/dist/components/iv-link.js +1 -1
  52. package/dist/components/iv-modal.js +3 -3
  53. package/dist/components/iv-newsletter.js +2 -2
  54. package/dist/components/iv-predictive-search.js +5 -5
  55. package/dist/components/iv-product-pin.js +1 -1
  56. package/dist/components/iv-product-upsell.js +1 -1
  57. package/dist/components/iv-recently-viewed.js +6 -6
  58. package/dist/components/iv-shop-the-look.js +2 -2
  59. package/dist/components/iv-sidebar.js +3 -3
  60. package/dist/components/iv-spinner.js +1 -1
  61. package/dist/components/iv-suggest.js +6 -6
  62. package/dist/components/iv-tabs.js +1 -1
  63. package/dist/components/iv-toast-container.js +2 -2
  64. package/dist/components/iv-toast.js +1 -1
  65. package/dist/components/iv-two-col-media.js +1 -1
  66. package/dist/components/iv-wishlist-view.js +1 -1
  67. package/dist/components/iv-wishlist.js +2 -2
  68. package/dist/components/{p-BO-kjHMg.js → p-3YQcGgfQ.js} +5 -5
  69. package/dist/components/{p-BO-kjHMg.js.map → p-3YQcGgfQ.js.map} +1 -1
  70. package/dist/components/{p-DN5YTq-K.js → p-3lSW4-ii.js} +3 -3
  71. package/dist/components/{p-DN5YTq-K.js.map → p-3lSW4-ii.js.map} +1 -1
  72. package/dist/components/{p-CvS5LD0r.js → p-Blz-LJSV.js} +3 -3
  73. package/dist/components/{p-CvS5LD0r.js.map → p-Blz-LJSV.js.map} +1 -1
  74. package/dist/components/{p-ChzZA9_Q.js → p-CmetOj56.js} +3 -3
  75. package/dist/components/{p-ChzZA9_Q.js.map → p-CmetOj56.js.map} +1 -1
  76. package/dist/components/{p-BOKziYxu.js → p-Cmnclx4w.js} +3 -3
  77. package/dist/components/{p-BOKziYxu.js.map → p-Cmnclx4w.js.map} +1 -1
  78. package/dist/components/{p-Dnzh9QyQ.js → p-CvO-bCed.js} +3 -3
  79. package/dist/components/{p-Dnzh9QyQ.js.map → p-CvO-bCed.js.map} +1 -1
  80. package/dist/components/{p-CIpHIQGS.js → p-D2SCT3Sb.js} +3 -3
  81. package/dist/components/{p-CIpHIQGS.js.map → p-D2SCT3Sb.js.map} +1 -1
  82. package/dist/components/{p-D47WTEtv.js → p-DH3wWIxr.js} +21 -17
  83. package/dist/components/p-DH3wWIxr.js.map +1 -0
  84. package/dist/components/{p-CJDWXoPC.js → p-DV16vkcI.js} +3 -3
  85. package/dist/components/{p-CJDWXoPC.js.map → p-DV16vkcI.js.map} +1 -1
  86. package/dist/components/{p-CL_8xnlV.js → p-Dfh8X_q_.js} +3 -3
  87. package/dist/components/{p-CL_8xnlV.js.map → p-Dfh8X_q_.js.map} +1 -1
  88. package/dist/components/{p-CyTo7nDL.js → p-HxD8ZMcb.js} +3 -3
  89. package/dist/components/{p-CyTo7nDL.js.map → p-HxD8ZMcb.js.map} +1 -1
  90. package/dist/components/{p-B5w_P7b4.js → p-haFsiJTQ.js} +6 -6
  91. package/dist/components/{p-B5w_P7b4.js.map → p-haFsiJTQ.js.map} +1 -1
  92. package/dist/components/{p-BmXOzntB.js → p-kuABA_Tv.js} +3 -3
  93. package/dist/components/{p-BmXOzntB.js.map → p-kuABA_Tv.js.map} +1 -1
  94. package/dist/components/sw-in-grid-content.js +1 -1
  95. package/dist/components/sw-size-guide.js +1 -1
  96. package/dist/esm/{app-globals-BHtvIcqG.js → app-globals-BRJyMwss.js} +4 -5
  97. package/dist/esm/app-globals-BRJyMwss.js.map +1 -0
  98. package/dist/esm/{factory-9v-13NdO.js → factory-nzeOUOp1.js} +3 -3
  99. package/dist/esm/{factory-9v-13NdO.js.map → factory-nzeOUOp1.js.map} +1 -1
  100. package/dist/esm/{index-unzQs7uG.js → index-BW0IzFf8.js} +21 -17
  101. package/dist/esm/index-BW0IzFf8.js.map +1 -0
  102. package/dist/esm/intravenous.js +3 -3
  103. package/dist/esm/ion-icon_12.entry.js +2 -2
  104. package/dist/esm/iv-banner.entry.js +1 -1
  105. package/dist/esm/iv-card_3.entry.js +2 -2
  106. package/dist/esm/iv-carousel.entry.js +1 -1
  107. package/dist/esm/iv-compare-product.entry.js +1 -1
  108. package/dist/esm/iv-dynamic-products-carousel.entry.js +2 -2
  109. package/dist/esm/iv-dynamic-products.entry.js +2 -2
  110. package/dist/esm/iv-filters.entry.js +1 -1
  111. package/dist/esm/iv-predictive-search.entry.js +1 -1
  112. package/dist/esm/iv-product-pin.entry.js +1 -1
  113. package/dist/esm/iv-product-upsell.entry.js +1 -1
  114. package/dist/esm/iv-recently-viewed.entry.js +2 -2
  115. package/dist/esm/iv-shop-the-look.entry.js +1 -1
  116. package/dist/esm/iv-suggest.entry.js +1 -1
  117. package/dist/esm/iv-tabs.entry.js +1 -1
  118. package/dist/esm/iv-toast-container.entry.js +1 -1
  119. package/dist/esm/iv-toast.entry.js +1 -1
  120. package/dist/esm/iv-wishlist.entry.js +1 -1
  121. package/dist/esm/loader.js +3 -3
  122. package/dist/esm/sw-in-grid-content.entry.js +1 -1
  123. package/dist/esm/sw-size-guide.entry.js +1 -1
  124. package/dist/intravenous/intravenous.esm.js +1 -1
  125. package/dist/intravenous/{p-c7c03f29.entry.js → p-13ce40ae.entry.js} +2 -2
  126. package/dist/intravenous/{p-a07cd9a5.entry.js → p-145798b2.entry.js} +2 -2
  127. package/dist/intravenous/p-19cf30b1.entry.js +2 -0
  128. package/dist/intravenous/{p-eb472ab8.entry.js → p-21d5f405.entry.js} +2 -2
  129. package/dist/intravenous/p-256a765e.entry.js +2 -0
  130. package/dist/intravenous/{p-cd4293ed.entry.js → p-2c191fe7.entry.js} +2 -2
  131. package/dist/intravenous/{p-a089e5b7.entry.js → p-331983d1.entry.js} +2 -2
  132. package/dist/intravenous/{p-d4078a2b.entry.js → p-45c70b13.entry.js} +2 -2
  133. package/dist/intravenous/{p-39df9f36.entry.js → p-50008fa6.entry.js} +2 -2
  134. package/dist/intravenous/{p-c3174335.entry.js → p-55f43ae2.entry.js} +2 -2
  135. package/dist/intravenous/p-78e8d319.entry.js +2 -0
  136. package/dist/intravenous/{p-184153bc.entry.js.map → p-78e8d319.entry.js.map} +1 -1
  137. package/dist/intravenous/p-BAss6u3X.js +2 -0
  138. package/dist/intravenous/p-BAss6u3X.js.map +1 -0
  139. package/dist/intravenous/p-BW0IzFf8.js +3 -0
  140. package/dist/intravenous/p-BW0IzFf8.js.map +1 -0
  141. package/dist/intravenous/{p-Ckaeq7E6.js → p-DHfJNZjh.js} +2 -2
  142. package/dist/intravenous/{p-Ckaeq7E6.js.map → p-DHfJNZjh.js.map} +1 -1
  143. package/dist/intravenous/{p-cec9c4d3.entry.js → p-a35de10b.entry.js} +2 -2
  144. package/dist/intravenous/{p-fee9ee91.entry.js → p-a617d9d0.entry.js} +2 -2
  145. package/dist/intravenous/{p-e040daf6.entry.js → p-a7b3baf0.entry.js} +2 -2
  146. package/dist/intravenous/{p-7935be65.entry.js → p-aebd8d4b.entry.js} +2 -2
  147. package/dist/intravenous/p-c1d875cf.entry.js +2 -0
  148. package/dist/intravenous/{p-1e572996.entry.js.map → p-c1d875cf.entry.js.map} +1 -1
  149. package/dist/intravenous/p-cbf8e7b8.entry.js +2 -0
  150. package/dist/intravenous/{p-9208edd1.entry.js.map → p-cbf8e7b8.entry.js.map} +1 -1
  151. package/dist/intravenous/p-dc8d0b9e.entry.js +2 -0
  152. package/dist/intravenous/{p-f83d6d70.entry.js.map → p-dc8d0b9e.entry.js.map} +1 -1
  153. package/dist/intravenous/p-e7109ec4.entry.js +2 -0
  154. package/dist/intravenous/{p-40ddb642.entry.js → p-ec7b539d.entry.js} +2 -2
  155. package/dist/types/utils/config/factory.d.ts +4 -4
  156. package/package.json +1 -1
  157. package/dist/cjs/app-globals-HEVw7jxh.js.map +0 -1
  158. package/dist/cjs/index-CDQIUkok.js.map +0 -1
  159. package/dist/components/p-D47WTEtv.js.map +0 -1
  160. package/dist/esm/app-globals-BHtvIcqG.js.map +0 -1
  161. package/dist/esm/index-unzQs7uG.js.map +0 -1
  162. package/dist/intravenous/p-184153bc.entry.js +0 -2
  163. package/dist/intravenous/p-1e572996.entry.js +0 -2
  164. package/dist/intravenous/p-20260729.entry.js +0 -2
  165. package/dist/intravenous/p-22892969.entry.js +0 -2
  166. package/dist/intravenous/p-7d31a457.entry.js +0 -2
  167. package/dist/intravenous/p-9208edd1.entry.js +0 -2
  168. package/dist/intravenous/p-f83d6d70.entry.js +0 -2
  169. package/dist/intravenous/p-p69WC7Mr.js +0 -2
  170. package/dist/intravenous/p-p69WC7Mr.js.map +0 -1
  171. package/dist/intravenous/p-unzQs7uG.js +0 -3
  172. package/dist/intravenous/p-unzQs7uG.js.map +0 -1
  173. /package/dist/intravenous/{p-c7c03f29.entry.js.map → p-13ce40ae.entry.js.map} +0 -0
  174. /package/dist/intravenous/{p-a07cd9a5.entry.js.map → p-145798b2.entry.js.map} +0 -0
  175. /package/dist/intravenous/{p-7d31a457.entry.js.map → p-19cf30b1.entry.js.map} +0 -0
  176. /package/dist/intravenous/{p-eb472ab8.entry.js.map → p-21d5f405.entry.js.map} +0 -0
  177. /package/dist/intravenous/{p-22892969.entry.js.map → p-256a765e.entry.js.map} +0 -0
  178. /package/dist/intravenous/{p-cd4293ed.entry.js.map → p-2c191fe7.entry.js.map} +0 -0
  179. /package/dist/intravenous/{p-a089e5b7.entry.js.map → p-331983d1.entry.js.map} +0 -0
  180. /package/dist/intravenous/{p-d4078a2b.entry.js.map → p-45c70b13.entry.js.map} +0 -0
  181. /package/dist/intravenous/{p-39df9f36.entry.js.map → p-50008fa6.entry.js.map} +0 -0
  182. /package/dist/intravenous/{p-c3174335.entry.js.map → p-55f43ae2.entry.js.map} +0 -0
  183. /package/dist/intravenous/{p-cec9c4d3.entry.js.map → p-a35de10b.entry.js.map} +0 -0
  184. /package/dist/intravenous/{p-fee9ee91.entry.js.map → p-a617d9d0.entry.js.map} +0 -0
  185. /package/dist/intravenous/{p-e040daf6.entry.js.map → p-a7b3baf0.entry.js.map} +0 -0
  186. /package/dist/intravenous/{p-7935be65.entry.js.map → p-aebd8d4b.entry.js.map} +0 -0
  187. /package/dist/intravenous/{p-20260729.entry.js.map → p-e7109ec4.entry.js.map} +0 -0
  188. /package/dist/intravenous/{p-40ddb642.entry.js.map → p-ec7b539d.entry.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CDQIUkok.js');
3
+ var index = require('./index-77WT2UXf.js');
4
4
 
5
5
  // Idempotent global init (prevents double execution if script loaded twice)
6
6
  // Also resolves Stencil v update expecting a default export from globalScript.
@@ -9,10 +9,9 @@ var index = require('./index-CDQIUkok.js');
9
9
  // @ts-ignore
10
10
  const w = (typeof window !== 'undefined') ? window : {};
11
11
  async function intravenousGlobalInit() {
12
- index.setStoreDomain();
13
12
  try {
14
13
  if (!w.__IV_API_SETUP_DONE) {
15
- index.apiSetup();
14
+ await index.ignition();
16
15
  w.__IV_API_SETUP_DONE = true;
17
16
  }
18
17
  if (!w.__IV_CURRENCY_FETCH_DONE) {
@@ -35,6 +34,6 @@ async function intravenousGlobalInit() {
35
34
  const globalScripts = intravenousGlobalInit;
36
35
 
37
36
  exports.globalScripts = globalScripts;
38
- //# sourceMappingURL=app-globals-HEVw7jxh.js.map
37
+ //# sourceMappingURL=app-globals-DRVRI1ik.js.map
39
38
 
40
- //# sourceMappingURL=app-globals-HEVw7jxh.js.map
39
+ //# sourceMappingURL=app-globals-DRVRI1ik.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-globals-DRVRI1ik.js","sources":["src/global/app.ts","@stencil/core/internal/app-globals"],"sourcesContent":["import { ignition, fetchShopifyCurrencyCode } from '../utils/config/factory';\r\nimport { state } from '../utils/store/store';\r\n\r\n// Idempotent global init (prevents double execution if script loaded twice)\r\n// Also resolves Stencil v update expecting a default export from globalScript.\r\n// Flags kept minimal to avoid polluting window.\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\r\n// @ts-ignore\r\nconst w: any = (typeof window !== 'undefined') ? window : {};\r\n\r\nexport default async function intravenousGlobalInit() {\r\n try {\r\n if(!w.__IV_API_SETUP_DONE) {\r\n await ignition();\r\n w.__IV_API_SETUP_DONE = true;\r\n }\r\n if(!w.__IV_CURRENCY_FETCH_DONE) {\r\n try {\r\n const code = await fetchShopifyCurrencyCode();\r\n if(code) state.setCurrencyCode(code);\r\n } catch (err) {\r\n console.debug('[IV] currency fetch skipped', err);\r\n }\r\n w.__IV_CURRENCY_FETCH_DONE = true;\r\n }\r\n } catch(err) {\r\n console.error('[IV] Global init failed', err);\r\n }\r\n}","import appGlobalScript from 'C:/Users/BeauBuxton/OneDrive - Herd Agency Limited/Documents/junk/The-Foxy-Library/src/global/app.ts';\nexport const globalScripts = appGlobalScript;\nexport const globalStyles = \"\";\n"],"names":["ignition","fetchShopifyCurrencyCode","state","appGlobalScript"],"mappings":";;;;AAGA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,GAAQ,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,GAAG,EAAE;AAE7C,eAAe,qBAAqB,GAAA;AACjD,IAAA,IAAI;AACF,QAAA,IAAG,CAAC,CAAC,CAAC,mBAAmB,EAAE;YACzB,MAAMA,cAAQ,EAAE;AAChB,YAAA,CAAC,CAAC,mBAAmB,GAAG,IAAI;;AAE9B,QAAA,IAAG,CAAC,CAAC,CAAC,wBAAwB,EAAE;AAC9B,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,GAAG,MAAMC,8BAAwB,EAAE;AAC7C,gBAAA,IAAG,IAAI;AAAE,oBAAAC,WAAK,CAAC,eAAe,CAAC,IAAI,CAAC;;YACpC,OAAO,GAAG,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,GAAG,CAAC;;AAEnD,YAAA,CAAC,CAAC,wBAAwB,GAAG,IAAI;;;IAEnC,OAAM,GAAG,EAAE;AACX,QAAA,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC;;AAEjD;;AC3BY,MAAC,aAAa,GAAGC;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var index = require('./index-CDQIUkok.js');
3
+ var index = require('./index-77WT2UXf.js');
4
4
 
5
5
  async function shopifyFetch(query, variables = {}) {
6
6
  try {
@@ -214,6 +214,6 @@ exports.addToCart = addToCart;
214
214
  exports.fetchProductByID = fetchProductByID;
215
215
  exports.fetchProducts = fetchProducts;
216
216
  exports.getIdFromHandle = getIdFromHandle;
217
- //# sourceMappingURL=factory-CrhcL_74.js.map
217
+ //# sourceMappingURL=factory-CC4cUyGl.js.map
218
218
 
219
- //# sourceMappingURL=factory-CrhcL_74.js.map
219
+ //# sourceMappingURL=factory-CC4cUyGl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory-CrhcL_74.js","sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\n\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n const token = state.storefrontToken;\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"names":["state","showToast"],"mappings":";;;;AAEA,eAAe,YAAY,CAAC,KAAa,EAAE,YAAiC,EAAE,EAAA;AAC5E,IAAA,IAAI;QACF,IAAG,CAACA,WAAK,CAAC,aAAa,IAAI,CAACA,WAAK,CAAC,eAAe;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC;AAChI,QAAA,MAAM,QAAQ,GAAG,CAAA,QAAA,EAAWA,WAAK,CAAC,aAAa,2BAA2B;AAC1E,QAAA,MAAM,KAAK,GAAGA,WAAK,CAAC,eAAe;AACnC,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,mCAAmC,EAAE;AACtC,aAAA;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;AAC1C,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;QAC7B,IAAG,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,IAAI;;IAChB,OAAM,KAAK,EAAE;AACb,QAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;AAC5C,QAAA,MAAM,KAAK;;AAEf;AAEO,eAAe,eAAe,CAAC,MAAc,EAAA;AAClD,IAAA,MAAM,KAAK,GAAG,CAAA;;;;;MAKV;AACJ,IAAA,IAAI;QACF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC;AAClD,QAAA,OAAO,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,IAAI;;IAChC,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;AAC9C,QAAA,OAAO,IAAI;;AAEf;AAEA;AACA,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,CAAC;AACnD,MAAM,sBAAsB,GAAG,CAAC,IAAI,EAAC,OAAO,EAAC,+BAA+B,CAAC;AAE7E,SAAS,WAAW,CAAC,SAA4B,EAAE,QAAkB,EAAA;IACnE,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;SACrE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;SACjB,MAAM,CAAC,OAAO,CAAC;AAClB,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;IAC9B,MAAM,OAAO,GAAa,EAAE;AAC5B,IAAA,KAAI,MAAM,CAAC,IAAI,GAAG,EAAE;QAClB,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAGhC,IAAA,KAAI,MAAM,CAAC,IAAI,QAAQ,EAAE;QACvB,IAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACX,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;;;AAGnB,IAAA,OAAO,OAAO;AAChB;AAEA,SAAS,mBAAmB,CAAC,MAAgB,EAAA;AAC3C,IAAA,OAAO;SACJ,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO;SACzB,GAAG,CAAC,CAAC,IAAG;QACP,IAAG,CAAC,KAAK,QAAQ;AAAE,YAAA,OAAO,6CAA6C;AACvE,QAAA,OAAO,CAAC;AACV,KAAC;SACA,IAAI,CAAC,IAAI,CAAC;AACf;AAEA,SAAS,gBAAgB,CAAC,MAAA,GAAmB,sBAAsB,EAAA;AACjE,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1B;AAcA,SAAS,gBAAgB,CAAC,OAAY,EAAE,eAAqB,EAAA;AAC3D,IAAA,MAAM,OAAO,GAAG,eAAe,IAAI,OAAO,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;IAC3E,IAAI,QAAQ,GAAG,IAAI;IACnB,IAAI,QAAQ,GAAG,IAAI;AACnB,IAAA,IAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3D,QAAA,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI;AAC9C,QAAA,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI;;IAEpD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO;IACxC,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,UAAU,CAAC,CAAC;QACpF,SAAS;AACT,QAAA,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,IAAI;QAC5B,QAAQ;QACR,QAAQ;KACT;AACH;AAEA;AACA,SAAS,kBAAkB,CAAC,YAAoB,EAAE,mBAA2B,EAAA;IAC3E,OAAO,CAAA;;;;;cAKK,YAAY,CAAA;kDACwB,mBAAmB,CAAA;;;;MAI/D;AACN;AAEA,SAAS,4BAA4B,CAAC,YAAoB,EAAE,mBAA2B,EAAA;IACrF,OAAO,CAAA;;;;;;gBAMO,YAAY,CAAA;oDACwB,mBAAmB,CAAA;;;;;MAKjE;AACN;AAEA,SAAS,uBAAuB,CAAC,YAAoB,EAAE,mBAA2B,EAAA;IAChF,OAAO,CAAA;;;UAGC,YAAY,CAAA;8CACwB,mBAAmB,CAAA;;MAE3D;AACN;AAeA;AACO,eAAe,aAAa,CAAC,KAAa,EAAE,gBAAwB,EAAE,OAAe,EAAE,MAAyB,EAAE,WAAoB,KAAK,EAAA;AAChJ,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC;AACvD,QAAA,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,EAAE;QAC9C,MAAM,KAAK,GAAG,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,KAAK;QAC7D,MAAM,KAAK,GAAG,KAAK,GAAG,kBAAkB,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,4BAA4B,CAAC,YAAY,EAAE,mBAAmB,CAAC;AAC7I,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ;QAC1B,MAAM,SAAS,GAAwB,KAAK,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QAClI,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,IAAI,EAAE;AACnF,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,IAAS,KAAK,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;IACnE,OAAM,KAAK,EAAE;AACb,QAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC;AAAE,QAAA,MAAM,KAAK;;AAE9D;AAEO,eAAe,gBAAgB,CAAC,EAAU,EAAE,MAAyB,EAAE,OAAgC,EAAA;AAC5G,IAAA,IAAI;QAEF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC;AACvD,QAAA,MAAM,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,EAAE;QAC9C,MAAM,KAAK,GAAG,uBAAuB,CAAC,YAAY,EAAE,mBAAmB,CAAC;QACxE,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC;AAC9C,QAAA,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO;AAC7B,QAAA,IAAG,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;AACxB,QAAA,OAAO,gBAAgB,CAAC,OAAO,CAAC;;IAChC,OAAM,KAAK,EAAE;AAAE,QAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC;AAAE,QAAA,MAAM,KAAK;;AAClF;AAiBO,eAAe,SAAS,CAAC,OAI/B,EAAA;AACC,IAAA,IAAI;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;QACpC,IAAG,CAAC,OAAO,CAAC,EAAE;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AACvE,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC;AACtC,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,KAAK,EAAE;AACL,gBAAA;oBACE,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,QAAQ;oBACR;AACD;AACF;SACF;QACD,MAAM,GAAG,GAAG,cAAc;AAC1B,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAC3B,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE;AACP,gBAAA,cAAc,EAAE,kBAAkB;AAClC,gBAAA,QAAQ,EAAE,kBAAkB;AAC5B,gBAAA,kBAAkB,EAAE;AACrB,aAAA;AACD,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO;AAC7B,SAAA,CAAC;AACF,QAAA,IAAG,CAAC,GAAG,CAAC,EAAE,EAAE;AACV,YAAA,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAClC,YAAA,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;;AAE5B,QAAA,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACjC,QAAAC,eAAS,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,CAAC;AAC5C,QAAA,OAAO,QAAQ;;IACf,OAAO,KAAK,EAAE;AACd,QAAAA,eAAS,CAAC,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC;AAChD,QAAA,MAAM,KAAK;;AAEf;;;;;;;"}
1
+ {"version":3,"file":"factory-CC4cUyGl.js","sources":["src/utils/storefront_api/factory.ts"],"sourcesContent":["import { state, showToast } from \"../store/store\";\r\n\r\nasync function shopifyFetch(query: string, variables: Record<string, any> = {}): Promise<any> {\r\n try {\r\n if(!state.shopDomainApi || !state.storefrontToken) throw new Error('Missing Shopify configuration (shopDomain/storefrontToken)');\r\n const endpoint = `https://${state.shopDomainApi}/api/2025-07/graphql.json`;\r\n const token = state.storefrontToken;\r\n const res = await fetch(endpoint, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Shopify-Storefront-Access-Token': token\r\n },\r\n body: JSON.stringify({ query, variables })\r\n });\r\n const json = await res.json();\r\n if(json.errors) throw new Error(json.errors.map((e: any) => e.message).join(', '));\r\n return json.data;\r\n } catch(error) {\r\n console.error('Shopify Fetch Error:', error);\r\n throw error; \r\n };\r\n};\r\n\r\nexport async function getIdFromHandle(handle: string): Promise<string | null> {\r\n const query = `\r\n query ($handle: String!) {\r\n product(handle: $handle) {\r\n id\r\n }\r\n }`;\r\n try {\r\n const data = await shopifyFetch(query, { handle });\r\n return data?.product?.id || null;\r\n } catch (error) {\r\n console.error('getIdFromHandle error:', error);\r\n return null;\r\n };\r\n};\r\n\r\n// Field + normalization helpers\r\nconst BASE_PRODUCT_FIELDS = ['id','handle','title'];\r\nconst DEFAULT_VARIANT_FIELDS = ['id','title','price { amount currencyCode }'];\r\n\r\nfunction mergeFields(requested: string[] | string, defaults: string[]): string[] {\r\n const req = (Array.isArray(requested) ? requested : requested.split(','))\r\n .map(f => f.trim())\r\n .filter(Boolean);\r\n const seen = new Set<string>();\r\n const ordered: string[] = [];\r\n for(const f of req) { \r\n if(!seen.has(f)) { \r\n seen.add(f); ordered.push(f); \r\n }; \r\n };\r\n for(const d of defaults) { \r\n if(!seen.has(d)) { \r\n seen.add(d); \r\n ordered.push(d); \r\n }; \r\n };\r\n return ordered;\r\n};\r\n\r\nfunction expandProductFields(fields: string[]): string {\r\n return fields\r\n .filter(f => f !== 'price')\r\n .map(f => {\r\n if(f === 'images') return 'images(first: 10) { nodes { url altText } }';\r\n return f;\r\n })\r\n .join('\\n');\r\n};\r\n\r\nfunction variantSelection(fields: string[] = DEFAULT_VARIANT_FIELDS): string {\r\n return fields.join('\\n');\r\n};\r\n\r\ninterface NormalizedProduct {\r\n id: string;\r\n handle?: string;\r\n title?: string;\r\n variantId?: string;\r\n price?: string | null;\r\n imageUrl?: string | null;\r\n imageAlt?: string | null;\r\n // index signature for dynamic requested fields\r\n [key: string]: any;\r\n};\r\n\r\nfunction normalizeProduct(product: any, selectedVariant?: any): NormalizedProduct {\r\n const variant = selectedVariant || product.variants?.edges?.[0]?.node || {};\r\n let imageUrl = null;\r\n let imageAlt = null;\r\n if(product.images?.nodes && product.images.nodes.length > 0) {\r\n imageUrl = product.images.nodes[0].url || null;\r\n imageAlt = product.images.nodes[0].altText || null;\r\n };\r\n const { id: variantId, price } = variant;\r\n return {\r\n id: product.id,\r\n ...Object.fromEntries(Object.entries(product).filter(([key]) => key !== 'variants')),\r\n variantId,\r\n price: price?.amount || null,\r\n imageUrl,\r\n imageAlt,\r\n };\r\n};\r\n\r\n// Query builders\r\nfunction buildProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($limit: Int!, $sortKey: ProductSortKeys!, $reverse: Boolean) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildCollectionProductsQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($handle: String!, $limit: Int!, $sortKey: ProductCollectionSortKeys!, $reverse: Boolean) {\r\n collection(handle: $handle) {\r\n products(first: $limit, sortKey: $sortKey, reverse: $reverse) {\r\n edges {\r\n node {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildSingleProductQuery(fieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n product(id: $id) {\r\n ${fieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }`;\r\n};\r\n\r\nfunction buildVariantProductQuery(productFieldsString: string, variantFieldsString: string) {\r\n return `\r\n query ($id: ID!) {\r\n productVariant(id: $id) {\r\n ${variantFieldsString}\r\n product {\r\n ${productFieldsString}\r\n variants(first: 1) { edges { node { ${variantFieldsString} } } }\r\n }\r\n }\r\n }`;\r\n};\r\n\r\n// Public API\r\nexport async function fetchProducts(limit: number, collectionHandle: string, sortKey: string, fields: string[] | string, reversed: boolean = false) {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const isAll = !collectionHandle || collectionHandle === 'all';\r\n const query = isAll ? buildProductsQuery(fieldsString, variantFieldsString) : buildCollectionProductsQuery(fieldsString, variantFieldsString);\r\n const reverse = !!reversed;\r\n const variables: Record<string, any> = isAll ? { limit, sortKey, reverse } : { handle: collectionHandle, limit, sortKey, reverse };\r\n const data = await shopifyFetch(query, variables);\r\n const productEdges = data.products?.edges || data.collection?.products?.edges || [];\r\n return productEdges.map((edge: any) => normalizeProduct(edge.node));\r\n } catch(error) { \r\n console.error('Fetch Products Error:', error); throw error;\r\n };\r\n};\r\n\r\nexport async function fetchProductByID(id: string, fields: string[] | string, options?: { variantId?: string }): Promise<NormalizedProduct | null> {\r\n try {\r\n if(options?.variantId) return await getVariantProduct(options.variantId, fields);\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const fieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildSingleProductQuery(fieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id });\r\n const product = data?.product;\r\n if(!product) return null;\r\n return normalizeProduct(product);\r\n } catch(error) { console.error('Fetch Product By ID Error:', error); throw error; };\r\n};\r\n\r\nexport async function getVariantProduct(variantId: string, fields: string[] | string): Promise<NormalizedProduct | null> {\r\n try {\r\n const merged = mergeFields(fields, BASE_PRODUCT_FIELDS);\r\n const productFieldsString = expandProductFields(merged);\r\n const variantFieldsString = variantSelection();\r\n const query = buildVariantProductQuery(productFieldsString, variantFieldsString);\r\n const data = await shopifyFetch(query, { id: variantId });\r\n const variantNode = data?.productVariant;\r\n if(!variantNode) return null;\r\n const product = variantNode.product;\r\n if(!product) return null;\r\n return normalizeProduct(product, variantNode); \r\n } catch(error) { console.error('Get Variant Product Error:', error); throw error; };\r\n};\r\n\r\nexport async function addToCart(options: {\r\n id: number;\r\n quantity?: number;\r\n properties?: Record<string, any>;\r\n}) {\r\n try {\r\n console.log('IV add to cart called');\r\n if(!options.id) throw new Error('No variant id provided for addToCart');\r\n const quantity = options.quantity || 1;\r\n const properties = options.properties || {};\r\n const payload = {\r\n items: [\r\n {\r\n id: options.id,\r\n quantity,\r\n properties\r\n }\r\n ]\r\n };\r\n const url = '/cart/add.js';\r\n const res = await fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept': 'application/json',\r\n 'X-Requested-With': 'XMLHttpRequest'\r\n },\r\n body: JSON.stringify(payload)\r\n });\r\n if(!res.ok) {\r\n const errorText = await res.text();\r\n throw new Error(errorText);\r\n };\r\n const cartItem = await res.json();\r\n showToast('Added to cart!', 'success', 3000);\r\n return cartItem;\r\n } catch (error) {\r\n showToast('Error adding to cart', 'error', 5000);\r\n throw error;\r\n };\r\n};"],"names":["state","showToast"],"mappings":"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"}
@@ -251,10 +251,9 @@ let stateRef;
251
251
  window.__IV_TOAST_ID = window.__IV_TOAST_ID || 0;
252
252
  }
253
253
  else {
254
- // SSR fallback
255
254
  const { state, onChange } = createStore(createInitialStoreState());
256
255
  stateRef = state;
257
- stateRef.__onChange = onChange; // local reference
256
+ stateRef.__onChange = onChange;
258
257
  }
259
258
  })();
260
259
  const state = stateRef;
@@ -433,12 +432,13 @@ const errors = createErrorHandler({ component: 'iv-card' }); try { ... } catch (
433
432
  */
434
433
 
435
434
  const errors = createErrorHandler({ component: 'iv-set-up' });
436
- function setStoreDomain() {
435
+ async function setStoreDomain() {
437
436
  try {
438
437
  const storeUrl = typeof window !== 'undefined' && window.location ? window.location.hostname : '';
439
438
  if (!storeUrl)
440
439
  throw new Error('Could not set store domain.');
441
440
  state.shopDomain = storeUrl;
441
+ console.log('[IV] Set shop domain to', state.shopDomain);
442
442
  }
443
443
  catch (err) {
444
444
  errors.handle({
@@ -450,12 +450,13 @@ function setStoreDomain() {
450
450
  });
451
451
  }
452
452
  }
453
- function setToken() {
453
+ async function setToken() {
454
454
  try {
455
455
  const token = document.documentElement.getAttribute('store-token');
456
456
  if (!token)
457
457
  throw new Error('Store token not found on document.');
458
458
  state.storefrontToken = token;
459
+ console.log('[IV] Set store token to', state.storefrontToken);
459
460
  }
460
461
  catch (err) {
461
462
  errors.handle({
@@ -467,12 +468,13 @@ function setToken() {
467
468
  });
468
469
  }
469
470
  }
470
- function setEndpoint() {
471
+ async function setEndpoint() {
471
472
  try {
472
473
  const endpoint = state.shopDomain;
473
474
  if (!endpoint)
474
475
  throw new Error('Shop domain not set in store.');
475
476
  state.shopDomainApi = endpoint + '.myshopify.com';
477
+ console.log('[IV] Set shop domain API to', state.shopDomainApi);
476
478
  }
477
479
  catch (err) {
478
480
  errors.handle({
@@ -485,17 +487,19 @@ function setEndpoint() {
485
487
  }
486
488
  }
487
489
  // Check where this is called!
488
- function apiSetup() {
489
- setToken();
490
- setEndpoint();
490
+ async function ignition() {
491
+ console.log('[IV] Starting API setup ignition...');
492
+ await setStoreDomain();
493
+ console.log('[IV] Store domain set.');
494
+ await setToken();
495
+ console.log('[IV] Store token set.');
496
+ await setEndpoint();
497
+ console.log('[IV] Store endpoint set.');
491
498
  }
492
499
  if (typeof window !== 'undefined') {
493
- if (document.readyState === 'loading') {
494
- document.addEventListener('DOMContentLoaded', apiSetup);
495
- }
496
- else {
497
- apiSetup();
498
- }
500
+ document.readyState === 'loading'
501
+ ? document.addEventListener('DOMContentLoaded', () => { ignition(); })
502
+ : ignition();
499
503
  }
500
504
  async function fetchShopifyCurrencyCode() {
501
505
  try {
@@ -2488,7 +2492,6 @@ var hostListenerOpts = (flags) => supportsListenerOptions ? {
2488
2492
  var setNonce = (nonce) => plt.$nonce$ = nonce;
2489
2493
 
2490
2494
  exports.Host = Host;
2491
- exports.apiSetup = apiSetup;
2492
2495
  exports.bootstrapLazy = bootstrapLazy;
2493
2496
  exports.createErrorHandler = createErrorHandler;
2494
2497
  exports.createEvent = createEvent;
@@ -2496,16 +2499,16 @@ exports.fetchShopifyCurrencyCode = fetchShopifyCurrencyCode;
2496
2499
  exports.getAssetPath = getAssetPath;
2497
2500
  exports.getElement = getElement;
2498
2501
  exports.h = h;
2502
+ exports.ignition = ignition;
2499
2503
  exports.onStoreChange = onStoreChange;
2500
2504
  exports.promiseResolve = promiseResolve;
2501
2505
  exports.registerInstance = registerInstance;
2502
2506
  exports.removeFromWishlist = removeFromWishlist;
2503
2507
  exports.setNonce = setNonce;
2504
- exports.setStoreDomain = setStoreDomain;
2505
2508
  exports.showToast = showToast;
2506
2509
  exports.state = state;
2507
2510
  exports.toggleModal = toggleModal;
2508
2511
  exports.togglePullout = togglePullout;
2509
- //# sourceMappingURL=index-CDQIUkok.js.map
2512
+ //# sourceMappingURL=index-77WT2UXf.js.map
2510
2513
 
2511
- //# sourceMappingURL=index-CDQIUkok.js.map
2514
+ //# sourceMappingURL=index-77WT2UXf.js.map