the-foxy-library 1.0.14 → 1.0.16
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.
- package/dist/cjs/{app-globals-MPl5n0hu.js → app-globals-BbmjYTbg.js} +4 -5
- package/dist/cjs/app-globals-BbmjYTbg.js.map +1 -0
- package/dist/cjs/{factory-CrhcL_74.js → factory-BE7LXbpI.js} +3 -3
- package/dist/cjs/{factory-CrhcL_74.js.map → factory-BE7LXbpI.js.map} +1 -1
- package/dist/cjs/{index-CDQIUkok.js → index-Cpx1rE_p.js} +14 -18
- package/dist/cjs/index-Cpx1rE_p.js.map +1 -0
- package/dist/cjs/intravenous.cjs.js +2 -2
- package/dist/cjs/ion-icon_12.cjs.entry.js +2 -2
- package/dist/cjs/iv-banner.cjs.entry.js +1 -1
- package/dist/cjs/iv-card_3.cjs.entry.js +2 -2
- package/dist/cjs/iv-carousel.cjs.entry.js +1 -1
- package/dist/cjs/iv-compare-product.cjs.entry.js +1 -1
- package/dist/cjs/iv-dynamic-products-carousel.cjs.entry.js +2 -2
- package/dist/cjs/iv-dynamic-products.cjs.entry.js +2 -2
- package/dist/cjs/iv-filters.cjs.entry.js +1 -1
- package/dist/cjs/iv-predictive-search.cjs.entry.js +1 -1
- package/dist/cjs/iv-product-pin.cjs.entry.js +1 -1
- package/dist/cjs/iv-product-upsell.cjs.entry.js +1 -1
- package/dist/cjs/iv-recently-viewed.cjs.entry.js +2 -2
- package/dist/cjs/iv-shop-the-look.cjs.entry.js +1 -1
- package/dist/cjs/iv-suggest.cjs.entry.js +1 -1
- package/dist/cjs/iv-tabs.cjs.entry.js +1 -1
- package/dist/cjs/iv-toast-container.cjs.entry.js +1 -1
- package/dist/cjs/iv-toast.cjs.entry.js +1 -1
- package/dist/cjs/iv-wishlist.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/sw-in-grid-content.cjs.entry.js +1 -1
- package/dist/cjs/sw-size-guide.cjs.entry.js +1 -1
- package/dist/collection/global/app.js +2 -3
- package/dist/collection/global/app.js.map +1 -1
- package/dist/collection/utils/config/factory.js +10 -13
- package/dist/collection/utils/config/factory.js.map +1 -1
- package/dist/collection/utils/store/store.js +11 -2
- package/dist/collection/utils/store/store.js.map +1 -1
- package/dist/components/index.js +3 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/ion-icon.js +1 -1
- package/dist/components/iv-accordion.js +2 -2
- package/dist/components/iv-banner.js +1 -1
- package/dist/components/iv-button.js +1 -1
- package/dist/components/iv-card.js +1 -1
- package/dist/components/iv-carousel.js +1 -1
- package/dist/components/iv-compare-product.js +1 -1
- package/dist/components/iv-dynamic-products-carousel.js +6 -6
- package/dist/components/iv-dynamic-products.js +7 -7
- package/dist/components/iv-event-button.js +1 -1
- package/dist/components/iv-filters.js +1 -1
- package/dist/components/iv-footer.js +1 -1
- package/dist/components/iv-layout.js +1 -1
- package/dist/components/iv-link-list.js +2 -2
- package/dist/components/iv-link.js +1 -1
- package/dist/components/iv-modal.js +3 -3
- package/dist/components/iv-newsletter.js +2 -2
- package/dist/components/iv-predictive-search.js +5 -5
- package/dist/components/iv-product-pin.js +1 -1
- package/dist/components/iv-product-upsell.js +1 -1
- package/dist/components/iv-recently-viewed.js +6 -6
- package/dist/components/iv-shop-the-look.js +2 -2
- package/dist/components/iv-sidebar.js +3 -3
- package/dist/components/iv-spinner.js +1 -1
- package/dist/components/iv-suggest.js +6 -6
- package/dist/components/iv-tabs.js +1 -1
- package/dist/components/iv-toast-container.js +2 -2
- package/dist/components/iv-toast.js +1 -1
- package/dist/components/iv-two-col-media.js +1 -1
- package/dist/components/iv-wishlist-view.js +1 -1
- package/dist/components/iv-wishlist.js +2 -2
- package/dist/components/{p-B5w_P7b4.js → p-AvU5_9DS.js} +6 -6
- package/dist/components/{p-B5w_P7b4.js.map → p-AvU5_9DS.js.map} +1 -1
- package/dist/components/{p-BOKziYxu.js → p-BPlL-a9v.js} +3 -3
- package/dist/components/{p-BOKziYxu.js.map → p-BPlL-a9v.js.map} +1 -1
- package/dist/components/{p-CJDWXoPC.js → p-C2AydH7S.js} +3 -3
- package/dist/components/{p-CJDWXoPC.js.map → p-C2AydH7S.js.map} +1 -1
- package/dist/components/{p-CyTo7nDL.js → p-CUD5DhHy.js} +3 -3
- package/dist/components/{p-CyTo7nDL.js.map → p-CUD5DhHy.js.map} +1 -1
- package/dist/components/{p-BO-kjHMg.js → p-CaPb6Zxa.js} +5 -5
- package/dist/components/{p-BO-kjHMg.js.map → p-CaPb6Zxa.js.map} +1 -1
- package/dist/components/{p-DN5YTq-K.js → p-CplS2qMp.js} +3 -3
- package/dist/components/{p-DN5YTq-K.js.map → p-CplS2qMp.js.map} +1 -1
- package/dist/components/{p-D47WTEtv.js → p-CqPWpoW-.js} +14 -17
- package/dist/components/p-CqPWpoW-.js.map +1 -0
- package/dist/components/{p-CIpHIQGS.js → p-D9Pt6A3V.js} +3 -3
- package/dist/components/{p-CIpHIQGS.js.map → p-D9Pt6A3V.js.map} +1 -1
- package/dist/components/{p-Dnzh9QyQ.js → p-Dc41vgpI.js} +3 -3
- package/dist/components/{p-Dnzh9QyQ.js.map → p-Dc41vgpI.js.map} +1 -1
- package/dist/components/{p-CvS5LD0r.js → p-DmX0JOqj.js} +3 -3
- package/dist/components/{p-CvS5LD0r.js.map → p-DmX0JOqj.js.map} +1 -1
- package/dist/components/{p-CL_8xnlV.js → p-Dtsk4Ymk.js} +3 -3
- package/dist/components/{p-CL_8xnlV.js.map → p-Dtsk4Ymk.js.map} +1 -1
- package/dist/components/{p-BmXOzntB.js → p-LitMPT-g.js} +3 -3
- package/dist/components/{p-BmXOzntB.js.map → p-LitMPT-g.js.map} +1 -1
- package/dist/components/{p-ChzZA9_Q.js → p-Qtejq7Lp.js} +3 -3
- package/dist/components/{p-ChzZA9_Q.js.map → p-Qtejq7Lp.js.map} +1 -1
- package/dist/components/sw-in-grid-content.js +1 -1
- package/dist/components/sw-size-guide.js +1 -1
- package/dist/esm/{app-globals-B9on9Ml0.js → app-globals-CeT8_oxh.js} +4 -5
- package/dist/esm/app-globals-CeT8_oxh.js.map +1 -0
- package/dist/esm/{factory-9v-13NdO.js → factory-CIhwsyYx.js} +3 -3
- package/dist/esm/{factory-9v-13NdO.js.map → factory-CIhwsyYx.js.map} +1 -1
- package/dist/esm/{index-unzQs7uG.js → index-C9JsYAqo.js} +14 -17
- package/dist/esm/index-C9JsYAqo.js.map +1 -0
- package/dist/esm/intravenous.js +3 -3
- package/dist/esm/ion-icon_12.entry.js +2 -2
- package/dist/esm/iv-banner.entry.js +1 -1
- package/dist/esm/iv-card_3.entry.js +2 -2
- package/dist/esm/iv-carousel.entry.js +1 -1
- package/dist/esm/iv-compare-product.entry.js +1 -1
- package/dist/esm/iv-dynamic-products-carousel.entry.js +2 -2
- package/dist/esm/iv-dynamic-products.entry.js +2 -2
- package/dist/esm/iv-filters.entry.js +1 -1
- package/dist/esm/iv-predictive-search.entry.js +1 -1
- package/dist/esm/iv-product-pin.entry.js +1 -1
- package/dist/esm/iv-product-upsell.entry.js +1 -1
- package/dist/esm/iv-recently-viewed.entry.js +2 -2
- package/dist/esm/iv-shop-the-look.entry.js +1 -1
- package/dist/esm/iv-suggest.entry.js +1 -1
- package/dist/esm/iv-tabs.entry.js +1 -1
- package/dist/esm/iv-toast-container.entry.js +1 -1
- package/dist/esm/iv-toast.entry.js +1 -1
- package/dist/esm/iv-wishlist.entry.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/sw-in-grid-content.entry.js +1 -1
- package/dist/esm/sw-size-guide.entry.js +1 -1
- package/dist/intravenous/intravenous.esm.js +1 -1
- package/dist/intravenous/p-05e4f6b0.entry.js +2 -0
- package/dist/intravenous/{p-184153bc.entry.js.map → p-05e4f6b0.entry.js.map} +1 -1
- package/dist/intravenous/p-0fe31ed2.entry.js +2 -0
- package/dist/intravenous/{p-7935be65.entry.js → p-15d8fca8.entry.js} +2 -2
- package/dist/intravenous/{p-cd4293ed.entry.js → p-24b4cd96.entry.js} +2 -2
- package/dist/intravenous/p-3b8df5ed.entry.js +2 -0
- package/dist/intravenous/{p-c7c03f29.entry.js → p-48e3caf5.entry.js} +2 -2
- package/dist/intravenous/{p-fee9ee91.entry.js → p-50713b59.entry.js} +2 -2
- package/dist/intravenous/{p-a089e5b7.entry.js → p-5c06b87c.entry.js} +2 -2
- package/dist/intravenous/p-6caf3ebc.entry.js +2 -0
- package/dist/intravenous/{p-9208edd1.entry.js.map → p-6caf3ebc.entry.js.map} +1 -1
- package/dist/intravenous/{p-a07cd9a5.entry.js → p-7915de48.entry.js} +2 -2
- package/dist/intravenous/{p-39df9f36.entry.js → p-7e3ac3bd.entry.js} +2 -2
- package/dist/intravenous/{p-c3174335.entry.js → p-8dd307f4.entry.js} +2 -2
- package/dist/intravenous/{p-e040daf6.entry.js → p-9ef5a519.entry.js} +2 -2
- package/dist/intravenous/p-C995m9ml.js +2 -0
- package/dist/intravenous/p-C995m9ml.js.map +1 -0
- package/dist/intravenous/{p-unzQs7uG.js → p-C9JsYAqo.js} +3 -3
- package/dist/intravenous/p-C9JsYAqo.js.map +1 -0
- package/dist/intravenous/{p-Ckaeq7E6.js → p-FNbLqvYy.js} +2 -2
- package/dist/intravenous/{p-Ckaeq7E6.js.map → p-FNbLqvYy.js.map} +1 -1
- package/dist/intravenous/p-b3521f43.entry.js +2 -0
- package/dist/intravenous/{p-f83d6d70.entry.js.map → p-b3521f43.entry.js.map} +1 -1
- package/dist/intravenous/{p-d4078a2b.entry.js → p-c7ce0cb3.entry.js} +2 -2
- package/dist/intravenous/{p-cec9c4d3.entry.js → p-d255cd2e.entry.js} +2 -2
- package/dist/intravenous/p-e2a72c60.entry.js +2 -0
- package/dist/intravenous/p-efc0a560.entry.js +2 -0
- package/dist/intravenous/{p-1e572996.entry.js.map → p-efc0a560.entry.js.map} +1 -1
- package/dist/intravenous/{p-40ddb642.entry.js → p-eff98808.entry.js} +2 -2
- package/dist/intravenous/{p-20260729.entry.js → p-f8098807.entry.js} +2 -2
- package/dist/types/utils/config/factory.d.ts +4 -4
- package/package.json +1 -1
- package/dist/cjs/app-globals-MPl5n0hu.js.map +0 -1
- package/dist/cjs/index-CDQIUkok.js.map +0 -1
- package/dist/components/p-D47WTEtv.js.map +0 -1
- package/dist/esm/app-globals-B9on9Ml0.js.map +0 -1
- package/dist/esm/index-unzQs7uG.js.map +0 -1
- package/dist/intravenous/p-184153bc.entry.js +0 -2
- package/dist/intravenous/p-1e572996.entry.js +0 -2
- package/dist/intravenous/p-22892969.entry.js +0 -2
- package/dist/intravenous/p-7d31a457.entry.js +0 -2
- package/dist/intravenous/p-9208edd1.entry.js +0 -2
- package/dist/intravenous/p-eb472ab8.entry.js +0 -2
- package/dist/intravenous/p-f83d6d70.entry.js +0 -2
- package/dist/intravenous/p-unzQs7uG.js.map +0 -1
- package/dist/intravenous/p-zdaLPMim.js +0 -2
- package/dist/intravenous/p-zdaLPMim.js.map +0 -1
- /package/dist/intravenous/{p-22892969.entry.js.map → p-0fe31ed2.entry.js.map} +0 -0
- /package/dist/intravenous/{p-7935be65.entry.js.map → p-15d8fca8.entry.js.map} +0 -0
- /package/dist/intravenous/{p-cd4293ed.entry.js.map → p-24b4cd96.entry.js.map} +0 -0
- /package/dist/intravenous/{p-eb472ab8.entry.js.map → p-3b8df5ed.entry.js.map} +0 -0
- /package/dist/intravenous/{p-c7c03f29.entry.js.map → p-48e3caf5.entry.js.map} +0 -0
- /package/dist/intravenous/{p-fee9ee91.entry.js.map → p-50713b59.entry.js.map} +0 -0
- /package/dist/intravenous/{p-a089e5b7.entry.js.map → p-5c06b87c.entry.js.map} +0 -0
- /package/dist/intravenous/{p-a07cd9a5.entry.js.map → p-7915de48.entry.js.map} +0 -0
- /package/dist/intravenous/{p-39df9f36.entry.js.map → p-7e3ac3bd.entry.js.map} +0 -0
- /package/dist/intravenous/{p-c3174335.entry.js.map → p-8dd307f4.entry.js.map} +0 -0
- /package/dist/intravenous/{p-e040daf6.entry.js.map → p-9ef5a519.entry.js.map} +0 -0
- /package/dist/intravenous/{p-d4078a2b.entry.js.map → p-c7ce0cb3.entry.js.map} +0 -0
- /package/dist/intravenous/{p-cec9c4d3.entry.js.map → p-d255cd2e.entry.js.map} +0 -0
- /package/dist/intravenous/{p-7d31a457.entry.js.map → p-e2a72c60.entry.js.map} +0 -0
- /package/dist/intravenous/{p-40ddb642.entry.js.map → p-eff98808.entry.js.map} +0 -0
- /package/dist/intravenous/{p-20260729.entry.js.map → p-f8098807.entry.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-Cpx1rE_p.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.
|
|
@@ -11,8 +11,7 @@ const w = (typeof window !== 'undefined') ? window : {};
|
|
|
11
11
|
async function intravenousGlobalInit() {
|
|
12
12
|
try {
|
|
13
13
|
if (!w.__IV_API_SETUP_DONE) {
|
|
14
|
-
index.
|
|
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-
|
|
37
|
+
//# sourceMappingURL=app-globals-BbmjYTbg.js.map
|
|
39
38
|
|
|
40
|
-
//# sourceMappingURL=app-globals-
|
|
39
|
+
//# sourceMappingURL=app-globals-BbmjYTbg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-globals-BbmjYTbg.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-
|
|
3
|
+
var index = require('./index-Cpx1rE_p.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-
|
|
217
|
+
//# sourceMappingURL=factory-BE7LXbpI.js.map
|
|
218
218
|
|
|
219
|
-
//# sourceMappingURL=factory-
|
|
219
|
+
//# sourceMappingURL=factory-BE7LXbpI.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":"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"}
|
|
1
|
+
{"version":3,"file":"factory-BE7LXbpI.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;
|
|
256
|
+
stateRef.__onChange = onChange;
|
|
258
257
|
}
|
|
259
258
|
})();
|
|
260
259
|
const state = stateRef;
|
|
@@ -433,7 +432,7 @@ 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)
|
|
@@ -450,7 +449,7 @@ function setStoreDomain() {
|
|
|
450
449
|
});
|
|
451
450
|
}
|
|
452
451
|
}
|
|
453
|
-
function setToken() {
|
|
452
|
+
async function setToken() {
|
|
454
453
|
try {
|
|
455
454
|
const token = document.documentElement.getAttribute('store-token');
|
|
456
455
|
if (!token)
|
|
@@ -467,7 +466,7 @@ function setToken() {
|
|
|
467
466
|
});
|
|
468
467
|
}
|
|
469
468
|
}
|
|
470
|
-
function setEndpoint() {
|
|
469
|
+
async function setEndpoint() {
|
|
471
470
|
try {
|
|
472
471
|
const endpoint = state.shopDomain;
|
|
473
472
|
if (!endpoint)
|
|
@@ -485,17 +484,15 @@ function setEndpoint() {
|
|
|
485
484
|
}
|
|
486
485
|
}
|
|
487
486
|
// Check where this is called!
|
|
488
|
-
function
|
|
489
|
-
|
|
490
|
-
|
|
487
|
+
async function ignition() {
|
|
488
|
+
await setStoreDomain();
|
|
489
|
+
await setToken();
|
|
490
|
+
await setEndpoint();
|
|
491
491
|
}
|
|
492
492
|
if (typeof window !== 'undefined') {
|
|
493
|
-
|
|
494
|
-
document.addEventListener('DOMContentLoaded',
|
|
495
|
-
|
|
496
|
-
else {
|
|
497
|
-
apiSetup();
|
|
498
|
-
}
|
|
493
|
+
document.readyState === 'loading'
|
|
494
|
+
? document.addEventListener('DOMContentLoaded', () => { ignition(); })
|
|
495
|
+
: ignition();
|
|
499
496
|
}
|
|
500
497
|
async function fetchShopifyCurrencyCode() {
|
|
501
498
|
try {
|
|
@@ -2488,7 +2485,6 @@ var hostListenerOpts = (flags) => supportsListenerOptions ? {
|
|
|
2488
2485
|
var setNonce = (nonce) => plt.$nonce$ = nonce;
|
|
2489
2486
|
|
|
2490
2487
|
exports.Host = Host;
|
|
2491
|
-
exports.apiSetup = apiSetup;
|
|
2492
2488
|
exports.bootstrapLazy = bootstrapLazy;
|
|
2493
2489
|
exports.createErrorHandler = createErrorHandler;
|
|
2494
2490
|
exports.createEvent = createEvent;
|
|
@@ -2496,16 +2492,16 @@ exports.fetchShopifyCurrencyCode = fetchShopifyCurrencyCode;
|
|
|
2496
2492
|
exports.getAssetPath = getAssetPath;
|
|
2497
2493
|
exports.getElement = getElement;
|
|
2498
2494
|
exports.h = h;
|
|
2495
|
+
exports.ignition = ignition;
|
|
2499
2496
|
exports.onStoreChange = onStoreChange;
|
|
2500
2497
|
exports.promiseResolve = promiseResolve;
|
|
2501
2498
|
exports.registerInstance = registerInstance;
|
|
2502
2499
|
exports.removeFromWishlist = removeFromWishlist;
|
|
2503
2500
|
exports.setNonce = setNonce;
|
|
2504
|
-
exports.setStoreDomain = setStoreDomain;
|
|
2505
2501
|
exports.showToast = showToast;
|
|
2506
2502
|
exports.state = state;
|
|
2507
2503
|
exports.toggleModal = toggleModal;
|
|
2508
2504
|
exports.togglePullout = togglePullout;
|
|
2509
|
-
//# sourceMappingURL=index-
|
|
2505
|
+
//# sourceMappingURL=index-Cpx1rE_p.js.map
|
|
2510
2506
|
|
|
2511
|
-
//# sourceMappingURL=index-
|
|
2507
|
+
//# sourceMappingURL=index-Cpx1rE_p.js.map
|