@swishapp/sdk 0.70.0 → 0.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/options/types.d.ts +5 -0
- package/dist/storefront-api/load-product-recommendations.d.ts +3 -3
- package/dist/storefront-api/queries/index.d.ts +2 -2
- package/dist/storefront-api/storefront-api-client.d.ts +5 -41
- package/dist/storefront-api/types/storefront.generated.d.ts +4 -32
- package/dist/swish.js +32 -38
- package/package.json +1 -1
package/dist/options/types.d.ts
CHANGED
|
@@ -62,6 +62,11 @@ export interface SwishComponentOptions {
|
|
|
62
62
|
images: SwishImageOptions;
|
|
63
63
|
buyButtons: SwishBuyButtonsOptions;
|
|
64
64
|
drawer: SwishDrawerOptions;
|
|
65
|
+
listDetailPage: SwishListDetailPageOptions;
|
|
66
|
+
}
|
|
67
|
+
export interface SwishListDetailPageOptions {
|
|
68
|
+
desktopColumns: number;
|
|
69
|
+
showBuyButton: boolean;
|
|
65
70
|
}
|
|
66
71
|
export interface SwishProductRowOptions {
|
|
67
72
|
showVariantTitle: boolean;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { StorefrontApiClient, StorefrontApiResponse } from "./storefront-api-client";
|
|
2
|
-
import type { CountryCode,
|
|
2
|
+
import type { CountryCode, LanguageCode, Product, ProductRecommendationIntent as ProductRecommendationIntentEnum } from "./types/storefront.types";
|
|
3
|
+
export type ProductRecommendationIntent = ProductRecommendationIntentEnum[keyof ProductRecommendationIntentEnum];
|
|
3
4
|
export type LoadProductRecommendationsResponse = StorefrontApiResponse<{
|
|
4
5
|
productRecommendations?: Product[] | null;
|
|
5
6
|
}>;
|
|
@@ -7,11 +8,10 @@ export interface LoadProductRecommendationsArgs {
|
|
|
7
8
|
productId?: string;
|
|
8
9
|
productHandle?: string;
|
|
9
10
|
intent?: ProductRecommendationIntent;
|
|
10
|
-
productMetafields?: HasMetafieldsIdentifier[];
|
|
11
11
|
country: CountryCode;
|
|
12
12
|
language: LanguageCode;
|
|
13
13
|
}
|
|
14
|
-
export declare const loadProductRecommendations: (client: StorefrontApiClient, { productId, productHandle, intent,
|
|
14
|
+
export declare const loadProductRecommendations: (client: StorefrontApiClient, { productId, productHandle, intent, country, language, }: LoadProductRecommendationsArgs) => Promise<{
|
|
15
15
|
data: {
|
|
16
16
|
productRecommendations?: Product[] | null;
|
|
17
17
|
} | undefined;
|
|
@@ -11,6 +11,6 @@ export declare const GET_SELECTED_VARIANT_BY_HANDLE = "\n query GetSelectedVari
|
|
|
11
11
|
export declare const GET_PRODUCT_DETAIL_DATA_BY_ID = "\n query GetProductDetailData(\n $productId: ID!\n $productMetafields: [HasMetafieldsIdentifier!]!\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n product(id: $productId) {\n ...productCardDataFields\n ...productOptionsFields\n ...productImagesFields\n }\n }\n \n fragment productCardDataFields on Product {\n id\n availableForSale\n category {\n id\n name\n }\n compareAtPriceRange {\n maxVariantPrice {\n amount\n currencyCode\n }\n minVariantPrice {\n amount\n currencyCode\n }\n }\n featuredImage {\n ...productImageFields\n }\n isGiftCard\n onlineStoreUrl\n description\n descriptionHtml\n handle\n priceRange {\n maxVariantPrice {\n amount\n currencyCode\n }\n minVariantPrice {\n amount\n currencyCode\n }\n }\n productType\n tags\n title\n variantsCount {\n count\n }\n # totalInventory\n metafields(identifiers: $productMetafields) {\n key\n namespace\n value\n }\n }\n\n \n fragment productOptionsFields on Product {\n id\n availableForSale\n title\n featuredImage {\n ...productImageFields\n }\n encodedVariantAvailability\n encodedVariantExistence\n variantsCount {\n count\n precision\n }\n options {\n id\n name\n optionValues {\n name\n swatch {\n color\n image {\n previewImage {\n url\n }\n }\n }\n firstSelectableVariant {\n id\n image {\n ...productImageFields\n }\n }\n }\n }\n }\n\n \n fragment productImagesFields on Product {\n images(first: 20) {\n nodes {\n ...productImageFields\n }\n }\n }\n\n \n fragment productImageFields on Image {\n id\n altText\n url\n thumbhash\n }\n\n";
|
|
12
12
|
export declare const GET_PRODUCT_DETAIL_DATA_BY_ID_WITH_VARIANT = "\n query GetProductDetailDataWithVariant(\n $productId: ID!\n $variantId: ID!\n $productMetafields: [HasMetafieldsIdentifier!]!\n $variantMetafields: [HasMetafieldsIdentifier!]!\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n product(id: $productId) {\n ...productCardDataFields\n ...productOptionsFields\n ...productImagesFields\n }\n variant: node(id: $variantId) {\n ...productVariantDataFields\n }\n }\n \n fragment productCardDataFields on Product {\n id\n availableForSale\n category {\n id\n name\n }\n compareAtPriceRange {\n maxVariantPrice {\n amount\n currencyCode\n }\n minVariantPrice {\n amount\n currencyCode\n }\n }\n featuredImage {\n ...productImageFields\n }\n isGiftCard\n onlineStoreUrl\n description\n descriptionHtml\n handle\n priceRange {\n maxVariantPrice {\n amount\n currencyCode\n }\n minVariantPrice {\n amount\n currencyCode\n }\n }\n productType\n tags\n title\n variantsCount {\n count\n }\n # totalInventory\n metafields(identifiers: $productMetafields) {\n key\n namespace\n value\n }\n }\n\n \n fragment productOptionsFields on Product {\n id\n availableForSale\n title\n featuredImage {\n ...productImageFields\n }\n encodedVariantAvailability\n encodedVariantExistence\n variantsCount {\n count\n precision\n }\n options {\n id\n name\n optionValues {\n name\n swatch {\n color\n image {\n previewImage {\n url\n }\n }\n }\n firstSelectableVariant {\n id\n image {\n ...productImageFields\n }\n }\n }\n }\n }\n\n \n fragment productVariantDataFields on ProductVariant {\n id\n availableForSale\n compareAtPrice {\n amount\n currencyCode\n }\n currentlyNotInStock\n image {\n ...productImageFields\n }\n price {\n amount\n currencyCode\n }\n # quantityAvailable\n selectedOptions {\n name\n value\n }\n sku\n title\n metafields(identifiers: $variantMetafields) {\n key\n namespace\n value\n }\n }\n\n \n fragment productImagesFields on Product {\n images(first: 20) {\n nodes {\n ...productImageFields\n }\n }\n }\n\n \n fragment productImageFields on Image {\n id\n altText\n url\n thumbhash\n }\n\n";
|
|
13
13
|
export declare const GET_PRODUCT_IMAGES_BY_ID = "\n query GetProductImagesById(\n $ids: [ID!]!\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n nodes(ids: $ids) {\n ... on Product {\n featuredImage {\n ...productImageFields\n }\n }\n ... on ProductVariant {\n image {\n ...productImageFields\n }\n product {\n featuredImage {\n ...productImageFields\n }\n }\n }\n }\n }\n \n fragment productImageFields on Image {\n id\n altText\n url\n thumbhash\n }\n\n";
|
|
14
|
-
export declare const GET_PRODUCT_RECOMMENDATIONS_BY_ID = "\n query GetProductRecommendationsById(\n $productId: ID!\n $intent: ProductRecommendationIntent\n $
|
|
15
|
-
export declare const GET_PRODUCT_RECOMMENDATIONS_BY_HANDLE = "\n query GetProductRecommendationsByHandle(\n $handle: String!\n $intent: ProductRecommendationIntent\n $
|
|
14
|
+
export declare const GET_PRODUCT_RECOMMENDATIONS_BY_ID = "\n query GetProductRecommendationsById(\n $productId: ID!\n $intent: ProductRecommendationIntent\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n productRecommendations(productId: $productId, intent: $intent) {\n id\n }\n }\n";
|
|
15
|
+
export declare const GET_PRODUCT_RECOMMENDATIONS_BY_HANDLE = "\n query GetProductRecommendationsByHandle(\n $handle: String!\n $intent: ProductRecommendationIntent\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n productRecommendations(productHandle: $handle, intent: $intent) {\n id\n }\n }\n";
|
|
16
16
|
export declare const GET_PRODUCT_ID_BY_HANDLE = "\n query GetProductIdByHandle($handle: String!) {\n product(handle: $handle) {\n id\n }\n }\n";
|
|
@@ -80,35 +80,8 @@ export declare class StorefrontApiClient {
|
|
|
80
80
|
errors: ResponseErrors | null;
|
|
81
81
|
} | {
|
|
82
82
|
data: {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
compareAtPriceRange: {
|
|
86
|
-
maxVariantPrice: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
87
|
-
minVariantPrice: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
88
|
-
};
|
|
89
|
-
featuredImage?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Image, "id" | "altText" | "url" | "thumbhash">>;
|
|
90
|
-
priceRange: {
|
|
91
|
-
maxVariantPrice: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
92
|
-
minVariantPrice: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
93
|
-
};
|
|
94
|
-
variantsCount?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Count, "count" | "precision">>;
|
|
95
|
-
metafields: Array<import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Metafield, "key" | "namespace" | "value">>>;
|
|
96
|
-
options: Array<(Pick<import("./types/storefront.types").ProductOption, "id" | "name"> & {
|
|
97
|
-
optionValues: Array<(Pick<import("./types/storefront.types").ProductOptionValue, "name"> & {
|
|
98
|
-
swatch?: import("./types/storefront.types").Maybe<(Pick<import("./types/storefront.types").ProductOptionValueSwatch, "color"> & {
|
|
99
|
-
image?: import("./types/storefront.types").Maybe<{
|
|
100
|
-
previewImage?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Image, "url">>;
|
|
101
|
-
}>;
|
|
102
|
-
})>;
|
|
103
|
-
firstSelectableVariant?: import("./types/storefront.types").Maybe<(Pick<import("./types/storefront.types").ProductVariant, "id"> & {
|
|
104
|
-
image?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Image, "id" | "altText" | "url" | "thumbhash">>;
|
|
105
|
-
})>;
|
|
106
|
-
})>;
|
|
107
|
-
})>;
|
|
108
|
-
images: {
|
|
109
|
-
nodes: Array<Pick<import("./types/storefront.types").Image, "id" | "altText" | "url" | "thumbhash">>;
|
|
110
|
-
};
|
|
111
|
-
}) | (Pick<import("./types/storefront.types").Product, "title" | "id" | "availableForSale" | "handle" | "onlineStoreUrl" | "description" | "descriptionHtml" | "encodedVariantAvailability" | "encodedVariantExistence" | "isGiftCard" | "productType" | "tags"> & {
|
|
83
|
+
badges: import("../utils/shopify-badge-utils").Badge[];
|
|
84
|
+
product?: import("./types/storefront.types").Maybe<(Pick<import("./types/storefront.types").Product, "id" | "availableForSale" | "isGiftCard" | "onlineStoreUrl" | "description" | "descriptionHtml" | "handle" | "productType" | "tags" | "title" | "encodedVariantAvailability" | "encodedVariantExistence"> & {
|
|
112
85
|
category?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").TaxonomyCategory, "id" | "name">>;
|
|
113
86
|
compareAtPriceRange: {
|
|
114
87
|
maxVariantPrice: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
@@ -136,15 +109,14 @@ export declare class StorefrontApiClient {
|
|
|
136
109
|
images: {
|
|
137
110
|
nodes: Array<Pick<import("./types/storefront.types").Image, "id" | "altText" | "url" | "thumbhash">>;
|
|
138
111
|
};
|
|
139
|
-
})
|
|
140
|
-
variant
|
|
112
|
+
})>;
|
|
113
|
+
variant?: import("./types/storefront.types").Maybe<(Pick<import("./types/storefront.types").ProductVariant, "id" | "availableForSale" | "currentlyNotInStock" | "sku" | "title"> & {
|
|
141
114
|
compareAtPrice?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">>;
|
|
142
115
|
image?: import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Image, "id" | "altText" | "url" | "thumbhash">>;
|
|
143
116
|
price: Pick<import("./types/storefront.types").MoneyV2, "amount" | "currencyCode">;
|
|
144
117
|
selectedOptions: Array<Pick<import("./types/storefront.types").SelectedOption, "name" | "value">>;
|
|
145
118
|
metafields: Array<import("./types/storefront.types").Maybe<Pick<import("./types/storefront.types").Metafield, "key" | "namespace" | "value">>>;
|
|
146
|
-
}
|
|
147
|
-
badges: import("../utils/shopify-badge-utils").Badge[];
|
|
119
|
+
})>;
|
|
148
120
|
};
|
|
149
121
|
errors: ResponseErrors | null;
|
|
150
122
|
}>;
|
|
@@ -160,14 +132,6 @@ export declare class StorefrontApiClient {
|
|
|
160
132
|
productRecommendations?: import("./types/storefront.types").Product[] | null;
|
|
161
133
|
} | undefined;
|
|
162
134
|
errors: ResponseErrors | null;
|
|
163
|
-
} | {
|
|
164
|
-
data: {
|
|
165
|
-
productRecommendations: {
|
|
166
|
-
product: import("./types/storefront.types").Product;
|
|
167
|
-
badges: import("../utils/shopify-badge-utils").Badge[];
|
|
168
|
-
}[];
|
|
169
|
-
};
|
|
170
|
-
errors: ResponseErrors | null;
|
|
171
135
|
}>;
|
|
172
136
|
loadProductId: (args: LoadProductIdArgs) => Promise<{
|
|
173
137
|
data: import("./storefront-api-client").GetProductIdByHandleQuery | undefined;
|
|
@@ -384,48 +384,20 @@ export type GetProductImagesByIdQuery = {
|
|
|
384
384
|
export type GetProductRecommendationsByIdQueryVariables = StorefrontTypes.Exact<{
|
|
385
385
|
productId: StorefrontTypes.Scalars['ID']['input'];
|
|
386
386
|
intent?: StorefrontTypes.InputMaybe<StorefrontTypes.ProductRecommendationIntent>;
|
|
387
|
-
productMetafields: Array<StorefrontTypes.HasMetafieldsIdentifier> | StorefrontTypes.HasMetafieldsIdentifier;
|
|
388
387
|
country: StorefrontTypes.CountryCode;
|
|
389
388
|
language: StorefrontTypes.LanguageCode;
|
|
390
389
|
}>;
|
|
391
390
|
export type GetProductRecommendationsByIdQuery = {
|
|
392
|
-
productRecommendations?: StorefrontTypes.Maybe<Array<
|
|
393
|
-
category?: StorefrontTypes.Maybe<Pick<StorefrontTypes.TaxonomyCategory, 'id' | 'name'>>;
|
|
394
|
-
compareAtPriceRange: {
|
|
395
|
-
maxVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
396
|
-
minVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
397
|
-
};
|
|
398
|
-
featuredImage?: StorefrontTypes.Maybe<Pick<StorefrontTypes.Image, 'id' | 'altText' | 'url' | 'thumbhash'>>;
|
|
399
|
-
priceRange: {
|
|
400
|
-
maxVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
401
|
-
minVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
402
|
-
};
|
|
403
|
-
variantsCount?: StorefrontTypes.Maybe<Pick<StorefrontTypes.Count, 'count'>>;
|
|
404
|
-
metafields: Array<StorefrontTypes.Maybe<Pick<StorefrontTypes.Metafield, 'key' | 'namespace' | 'value'>>>;
|
|
405
|
-
})>>;
|
|
391
|
+
productRecommendations?: StorefrontTypes.Maybe<Array<Pick<StorefrontTypes.Product, 'id'>>>;
|
|
406
392
|
};
|
|
407
393
|
export type GetProductRecommendationsByHandleQueryVariables = StorefrontTypes.Exact<{
|
|
408
394
|
handle: StorefrontTypes.Scalars['String']['input'];
|
|
409
395
|
intent?: StorefrontTypes.InputMaybe<StorefrontTypes.ProductRecommendationIntent>;
|
|
410
|
-
productMetafields: Array<StorefrontTypes.HasMetafieldsIdentifier> | StorefrontTypes.HasMetafieldsIdentifier;
|
|
411
396
|
country: StorefrontTypes.CountryCode;
|
|
412
397
|
language: StorefrontTypes.LanguageCode;
|
|
413
398
|
}>;
|
|
414
399
|
export type GetProductRecommendationsByHandleQuery = {
|
|
415
|
-
productRecommendations?: StorefrontTypes.Maybe<Array<
|
|
416
|
-
category?: StorefrontTypes.Maybe<Pick<StorefrontTypes.TaxonomyCategory, 'id' | 'name'>>;
|
|
417
|
-
compareAtPriceRange: {
|
|
418
|
-
maxVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
419
|
-
minVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
420
|
-
};
|
|
421
|
-
featuredImage?: StorefrontTypes.Maybe<Pick<StorefrontTypes.Image, 'id' | 'altText' | 'url' | 'thumbhash'>>;
|
|
422
|
-
priceRange: {
|
|
423
|
-
maxVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
424
|
-
minVariantPrice: Pick<StorefrontTypes.MoneyV2, 'amount' | 'currencyCode'>;
|
|
425
|
-
};
|
|
426
|
-
variantsCount?: StorefrontTypes.Maybe<Pick<StorefrontTypes.Count, 'count'>>;
|
|
427
|
-
metafields: Array<StorefrontTypes.Maybe<Pick<StorefrontTypes.Metafield, 'key' | 'namespace' | 'value'>>>;
|
|
428
|
-
})>>;
|
|
400
|
+
productRecommendations?: StorefrontTypes.Maybe<Array<Pick<StorefrontTypes.Product, 'id'>>>;
|
|
429
401
|
};
|
|
430
402
|
export type GetProductIdByHandleQueryVariables = StorefrontTypes.Exact<{
|
|
431
403
|
handle: StorefrontTypes.Scalars['String']['input'];
|
|
@@ -486,11 +458,11 @@ interface GeneratedQueryTypes {
|
|
|
486
458
|
return: GetProductImagesByIdQuery;
|
|
487
459
|
variables: GetProductImagesByIdQueryVariables;
|
|
488
460
|
};
|
|
489
|
-
"\n query GetProductRecommendationsById(\n $productId: ID!\n $intent: ProductRecommendationIntent\n $
|
|
461
|
+
"\n query GetProductRecommendationsById(\n $productId: ID!\n $intent: ProductRecommendationIntent\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n productRecommendations(productId: $productId, intent: $intent) {\n id\n }\n }\n": {
|
|
490
462
|
return: GetProductRecommendationsByIdQuery;
|
|
491
463
|
variables: GetProductRecommendationsByIdQueryVariables;
|
|
492
464
|
};
|
|
493
|
-
"\n query GetProductRecommendationsByHandle(\n $handle: String!\n $intent: ProductRecommendationIntent\n $
|
|
465
|
+
"\n query GetProductRecommendationsByHandle(\n $handle: String!\n $intent: ProductRecommendationIntent\n $country: CountryCode!\n $language: LanguageCode!\n ) @inContext(country: $country, language: $language) {\n productRecommendations(productHandle: $handle, intent: $intent) {\n id\n }\n }\n": {
|
|
494
466
|
return: GetProductRecommendationsByHandleQuery;
|
|
495
467
|
variables: GetProductRecommendationsByHandleQueryVariables;
|
|
496
468
|
};
|
package/dist/swish.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var pn=Object.create;var Qe=Object.defineProperty;var fn=Object.getOwnPropertyDescriptor;var dn=Object.getOwnPropertyNames;var hn=Object.getPrototypeOf,yn=Object.prototype.hasOwnProperty;var s=(r,e)=>Qe(r,"name",{value:e,configurable:!0});var mn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var vn=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of dn(e))!yn.call(r,i)&&i!==t&&Qe(r,i,{get:()=>e[i],enumerable:!(n=fn(e,i))||n.enumerable});return r};var gn=(r,e,t)=>(t=r!=null?pn(hn(r)):{},vn(e||!r||!r.__esModule?Qe(t,"default",{value:r,enumerable:!0}):t,r));var sn=mn((Wu,nn)=>{"use strict";var Ni=(function(){function r(t,n){if(typeof t!="function")throw new TypeError("DataLoader must be constructed with a function which accepts "+("Array<key> and returns Promise<Array<value>>, but got: "+t+"."));this._batchLoadFn=t,this._maxBatchSize=Fi(n),this._batchScheduleFn=Hi(n),this._cacheKeyFn=Qi(n),this._cacheMap=zi(n),this._batch=null,this.name=Wi(n)}s(r,"DataLoader");var e=r.prototype;return e.load=s(function(n){if(n==null)throw new TypeError("The loader.load() function must be called with a value, "+("but got: "+String(n)+"."));var i=
|
|
1
|
+
var pn=Object.create;var Qe=Object.defineProperty;var fn=Object.getOwnPropertyDescriptor;var dn=Object.getOwnPropertyNames;var hn=Object.getPrototypeOf,yn=Object.prototype.hasOwnProperty;var s=(r,e)=>Qe(r,"name",{value:e,configurable:!0});var mn=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports);var vn=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of dn(e))!yn.call(r,i)&&i!==t&&Qe(r,i,{get:()=>e[i],enumerable:!(n=fn(e,i))||n.enumerable});return r};var gn=(r,e,t)=>(t=r!=null?pn(hn(r)):{},vn(e||!r||!r.__esModule?Qe(t,"default",{value:r,enumerable:!0}):t,r));var sn=mn((Wu,nn)=>{"use strict";var Ni=(function(){function r(t,n){if(typeof t!="function")throw new TypeError("DataLoader must be constructed with a function which accepts "+("Array<key> and returns Promise<Array<value>>, but got: "+t+"."));this._batchLoadFn=t,this._maxBatchSize=Fi(n),this._batchScheduleFn=Hi(n),this._cacheKeyFn=Qi(n),this._cacheMap=zi(n),this._batch=null,this.name=Wi(n)}s(r,"DataLoader");var e=r.prototype;return e.load=s(function(n){if(n==null)throw new TypeError("The loader.load() function must be called with a value, "+("but got: "+String(n)+"."));var i=Mi(this),o=this._cacheMap,a;if(o){a=this._cacheKeyFn(n);var u=o.get(a);if(u){var l=i.cacheHits||(i.cacheHits=[]);return new Promise(function(p){l.push(function(){p(u)})})}}i.keys.push(n);var c=new Promise(function(p,d){i.callbacks.push({resolve:p,reject:d})});return o&&o.set(a,c),c},"load"),e.loadMany=s(function(n){if(!rn(n))throw new TypeError("The loader.loadMany() function must be called with Array<key> "+("but got: "+n+"."));for(var i=[],o=0;o<n.length;o++)i.push(this.load(n[o]).catch(function(a){return a}));return Promise.all(i)},"loadMany"),e.clear=s(function(n){var i=this._cacheMap;if(i){var o=this._cacheKeyFn(n);i.delete(o)}return this},"clear"),e.clearAll=s(function(){var n=this._cacheMap;return n&&n.clear(),this},"clearAll"),e.prime=s(function(n,i){var o=this._cacheMap;if(o){var a=this._cacheKeyFn(n);if(o.get(a)===void 0){var u;i instanceof Error?(u=Promise.reject(i),u.catch(function(){})):u=Promise.resolve(i),o.set(a,u)}}return this},"prime"),r})(),Gi=typeof process=="object"&&typeof process.nextTick=="function"?function(r){Rt||(Rt=Promise.resolve()),Rt.then(function(){process.nextTick(r)})}:typeof setImmediate=="function"?function(r){setImmediate(r)}:function(r){setTimeout(r)},Rt;function Mi(r){var e=r._batch;if(e!==null&&!e.hasDispatched&&e.keys.length<r._maxBatchSize)return e;var t={hasDispatched:!1,keys:[],callbacks:[]};return r._batch=t,r._batchScheduleFn(function(){ji(r,t)}),t}s(Mi,"getCurrentBatch");function ji(r,e){if(e.hasDispatched=!0,e.keys.length===0){Pt(e);return}var t;try{t=r._batchLoadFn(e.keys)}catch(n){return Dt(r,e,new TypeError("DataLoader must be constructed with a function which accepts Array<key> and returns Promise<Array<value>>, but the function "+("errored synchronously: "+String(n)+".")))}if(!t||typeof t.then!="function")return Dt(r,e,new TypeError("DataLoader must be constructed with a function which accepts Array<key> and returns Promise<Array<value>>, but the function did "+("not return a Promise: "+String(t)+".")));t.then(function(n){if(!rn(n))throw new TypeError("DataLoader must be constructed with a function which accepts Array<key> and returns Promise<Array<value>>, but the function did "+("not return a Promise of an Array: "+String(n)+"."));if(n.length!==e.keys.length)throw new TypeError("DataLoader must be constructed with a function which accepts Array<key> and returns Promise<Array<value>>, but the function did not return a Promise of an Array of the same length as the Array of keys."+(`
|
|
2
2
|
|
|
3
3
|
Keys:
|
|
4
4
|
`+String(e.keys))+(`
|
|
5
5
|
|
|
6
6
|
Values:
|
|
7
|
-
`+String(n)));Pt(e);for(var i=0;i<e.callbacks.length;i++){var o=n[i];o instanceof Error?e.callbacks[i].reject(o):e.callbacks[i].resolve(o)}}).catch(function(n){Dt(r,e,n)})}s(ji,"dispatchBatch");function Dt(r,e,t){Pt(e);for(var n=0;n<e.keys.length;n++)r.clear(e.keys[n]),e.callbacks[n].reject(t)}s(Dt,"failedDispatch");function Pt(r){if(r.cacheHits)for(var e=0;e<r.cacheHits.length;e++)r.cacheHits[e]()}s(Pt,"resolveCacheHits");function Fi(r){var e=!r||r.batch!==!1;if(!e)return 1;var t=r&&r.maxBatchSize;if(t===void 0)return 1/0;if(typeof t!="number"||t<1)throw new TypeError("maxBatchSize must be a positive number: "+t);return t}s(Fi,"getValidMaxBatchSize");function Hi(r){var e=r&&r.batchScheduleFn;if(e===void 0)return Mi;if(typeof e!="function")throw new TypeError("batchScheduleFn must be a function: "+e);return e}s(Hi,"getValidBatchScheduleFn");function Qi(r){var e=r&&r.cacheKeyFn;if(e===void 0)return function(t){return t};if(typeof e!="function")throw new TypeError("cacheKeyFn must be a function: "+e);return e}s(Qi,"getValidCacheKeyFn");function zi(r){var e=!r||r.cache!==!1;if(!e)return null;var t=r&&r.cacheMap;if(t===void 0)return new Map;if(t!==null){var n=["get","set","delete","clear"],i=n.filter(function(o){return t&&typeof t[o]!="function"});if(i.length!==0)throw new TypeError("Custom cacheMap missing methods: "+i.join(", "))}return t}s(zi,"getValidCacheMap");function Wi(r){return r&&r.name?r.name:null}s(Wi,"getValidName");function rn(r){return typeof r=="object"&&r!==null&&typeof r.length=="number"&&(r.length===0||r.length>0&&Object.prototype.hasOwnProperty.call(r,r.length-1))}s(rn,"isArrayLike");nn.exports=Ni});var R=s(r=>r.split("/").pop()??"","shopifyGidToId"),w=s((r,e)=>`gid://shopify/${r}/${e}`,"shopifyIdToGid");var Q=class{constructor(e,t,n=""){this.revalidationPromises=new Map;this.inFlightRequests=new Map;this.clearCachePromise=null;this.cacheName=e,this.defaultCacheControl=t,this.keyPrefix=n}static{s(this,"FetchCache")}async get(e){try{let t=await caches.open(this.cacheName),n=await t.match(e);if(n&&this.isExpired(n)){await t.delete(e);return}return n}catch(t){console.warn("Cache get error:",t);return}}async set(e,t,n){try{if(n?.includes("no-cache"))return;let i=this.createCacheableResponse(t,n);await(await caches.open(this.cacheName)).put(e,i)}catch(i){console.warn("Cache set error:",i)}}async fetchWithCache(e,t,n){let i=await this.getCacheKey(e,t);if(this.clearCachePromise&&await this.clearCachePromise,this.inFlightRequests.has(i))return this.inFlightRequests.get(i).then(a=>a.clone());let o=(async()=>{let a=await this.get(i);if(a)return this.isStaleButRevalidatable(a)&&this.revalidateInBackground(i,e,t,n),a.clone();let u=await fetch(e,t);return u.ok&&await this.set(i,u.clone(),n??this.defaultCacheControl),u})().finally(()=>{this.inFlightRequests.delete(i)});return this.inFlightRequests.set(i,o),o}async delete(e){try{return await(await caches.open(this.cacheName)).delete(e)}catch(t){return console.warn("Cache delete error:",t),!1}}async clear(){return this.clearCachePromise?this.clearCachePromise:(this.clearCachePromise=new Promise(async(e,t)=>{try{let n=await caches.open(this.cacheName),i=await n.keys();await Promise.all(i.map(o=>n.delete(o))),e()}catch(n){console.warn("Cache clear error:",n),t(n)}}),this.clearCachePromise.then(()=>{this.clearCachePromise=null}).catch(e=>{console.warn("Cache clear error:",e)}))}async keys(){try{return(await(await caches.open(this.cacheName)).keys()).map(n=>n.url)}catch(e){return console.warn("Cache keys error:",e),[]}}async has(e){try{let t=await caches.open(this.cacheName),n=await t.match(e);return n&&this.isExpired(n)?(await t.delete(e),!1):n!==void 0}catch(t){return console.warn("Cache has error:",t),!1}}async getStats(){try{return{total:(await(await caches.open(this.cacheName)).keys()).length}}catch(e){return console.warn("Cache stats error:",e),{total:0}}}async cleanupExpiredEntries(){try{let e=await caches.open(this.cacheName),t=await e.keys(),n=0;for(let o of t){let a=await e.match(o);a&&this.isExpired(a)&&(await e.delete(o),n++)}let i=t.length-n;return{removed:n,remaining:i}}catch(e){return console.warn("Cache cleanup error:",e),{removed:0,remaining:0}}}async getCacheKey(e,t){let n=this.getInputUrl(e),i=`${this.keyPrefix}${n}/${JSON.stringify(t)}`,a=new TextEncoder().encode(i),u=await crypto.subtle.digest("SHA-256",a);return`/${Array.from(new Uint8Array(u)).map(p=>p.toString(16).padStart(2,"0")).join("")}`}getInputUrl(e){return e instanceof URL?e.toString():typeof e=="string"?e:e.url}isExpired(e){let t=e.headers.get("Cache-Control");if(!t)return!1;let n=this.parseMaxAge(t),i=this.parseStaleWhileRevalidate(t);if(n===null)return!1;let o=e.headers.get("Date");if(!o)return!1;let a=new Date(o).getTime(),l=(Date.now()-a)/1e3,c=n+(i??0);return l>c}isStaleButRevalidatable(e){let t=e.headers.get("Cache-Control");if(!t)return!1;let n=this.parseMaxAge(t),i=this.parseStaleWhileRevalidate(t);if(n===null||i===null)return!1;let o=e.headers.get("Date");if(!o)return!1;let a=new Date(o).getTime(),l=(Date.now()-a)/1e3;return l>n&&l<=n+i}async revalidateInBackground(e,t,n,i){if(this.revalidationPromises.has(e))return;let o=(async()=>{try{let a=await fetch(t,n);a.ok&&await this.set(e,a.clone(),i??this.defaultCacheControl)}catch(a){console.warn("Background revalidation error:",a)}finally{this.revalidationPromises.delete(e)}})();this.revalidationPromises.set(e,o)}parseMaxAge(e){let t=new RegExp(/max-age=(\d+)/).exec(e);return t?parseInt(t[1],10):null}parseStaleWhileRevalidate(e){let t=new RegExp(/stale-while-revalidate=(\d+)/).exec(e);return t?parseInt(t[1],10):null}createCacheableResponse(e,t){let n=new Headers(e.headers);return n.set("Cache-Control",t),n.has("Date")||n.set("Date",new Date().toUTCString()),new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}};var ye=class{static{s(this,"AjaxApiClient")}constructor(e){this.config=e,this.cache=new Q("ajax-api","max-age=60, stale-while-revalidate=3600"),this.cache.cleanupExpiredEntries().catch(t=>{console.warn("Ajax API cache initialization cleanup error:",t)})}patchFetch(){if(!window.fetch||typeof window.fetch!="function")return;let e=window.fetch,t=this.config.responseInterceptor,n=this.getFetchRequest.bind(this);window.fetch=function(...i){let o=e.apply(this,i);if(typeof t=="function"){let a=n(i[0]);o.then(u=>t(u,a))}return o}}getFetchRequest(e){return e instanceof Request?e:new Request(e)}getBaseUrl(){if(!this.config?.storeDomain)throw new Error("Cart API client not initialized - missing store domain");return`https://${this.config.storeDomain}`}fetch(e,t){return(e instanceof Request?e.method:t?.method??"GET")==="GET"?this.cache.fetchWithCache(e,t):fetch(e,t)}async request(e,t={}){let n=`${this.getBaseUrl()}${e}`,i={"Content-Type":"application/json",Accept:"application/json"},o=await this.fetch(n,{...t,headers:{...i,...t.headers}});if(!o.ok){let a;try{a=await o.json()}catch{a={message:`HTTP ${o.status}: ${o.statusText}`,status:o.status.toString(),description:o.statusText}}throw new Error(a.message||a.description)}return o.json()}async fetchCart(){return this.request("/cart.js")}async addToCart(e){let t={...e,items:e.items.map(n=>{let i=R(n.id);if(!i)throw new Error(`Invalid Shopify GID format: ${n.id}`);let o=parseInt(i,10);if(isNaN(o))throw new Error(`Invalid numeric ID extracted from GID: ${n.id}`);return{...n,id:o}})};return this.request("/cart/add.js",{method:"POST",body:JSON.stringify(t)})}async clearCache(){await this.cache.clear()}};var me=class{constructor(e){this.eventMap={"/cart/add":"cart-add","/cart/update":"cart-update","/cart/change":"cart-change","/cart/clear":"cart-clear"};this.eventBus=e,this.processFetchResponse=this.processFetchResponse.bind(this)}static{s(this,"AjaxApiPublisher")}async processFetchResponse(e,t){try{let n=this.getEventName(t.url);if(n){let i=await e.clone().json();this.eventBus.publish(n,i)}}catch(n){console.warn(n)}}getEventName(e){for(let[t,n]of Object.entries(this.eventMap))if(e.includes(t))return n;return null}};function In(){let r=document.body||document.documentElement;return r?Promise.resolve(r):new Promise(e=>{window.addEventListener("DOMContentLoaded",()=>e(r))})}s(In,"waitForDOM");function fe({onElementFound:r,selector:e,observerOptions:t}){let n=new WeakSet,i=new MutationObserver(l=>{let c=!1;for(let p of l)if(p.addedNodes.length>0){c=!0;break}c&&o()}),o=s(()=>{document.querySelectorAll(e).forEach(l=>{n.has(l)||(a(l),n.add(l))})},"locateElements"),a=s(l=>{if(!t){r(l);return}let c=new IntersectionObserver(p=>{for(let d of p)d.isIntersecting&&(c.disconnect(),r(l))},t);c.observe(l)},"observeElement");return s(async()=>{let l=await In();o(),i.observe(l,{childList:!0,subtree:!0})},"locateAndObserveElements")(),i}s(fe,"createElementLocator");function ae({onLocationChange:r,fireOnInit:e=!1}){let t=s(()=>{r(window.location)},"handleChange");window.addEventListener("popstate",t);let n=history.pushState,i=history.replaceState;return history.pushState=function(...o){n.apply(this,o),t()},history.replaceState=function(...o){i.apply(this,o),t()},e&&t(),()=>{window.removeEventListener("popstate",t),history.pushState=n,history.replaceState=i}}s(ae,"createLocationObserver");function Vt({element:r,onHrefChange:e}){let t=s(()=>{e(r.href)},"handleChange"),n=new MutationObserver(()=>{t()});return n.observe(r,{attributes:!0,attributeFilter:["href"]}),()=>{n.disconnect()}}s(Vt,"createHrefObserver");var ve=class{constructor(){this.eventBus=new EventTarget}static{s(this,"EventBus")}subscribe(e,t,n){return Array.isArray(e)||(e=[e]),e.forEach(i=>{this.eventBus.addEventListener(i,t,n)}),()=>{e.forEach(i=>{this.eventBus.removeEventListener(i,t,n)})}}unsubscribe(e,t,n){this.eventBus.removeEventListener(e,t,n)}publish(e,t){this.eventBus.dispatchEvent(new CustomEvent(e,{detail:t}))}};var ze;function Nt(r){return{lang:r?.lang??ze?.lang,message:r?.message,abortEarly:r?.abortEarly??ze?.abortEarly,abortPipeEarly:r?.abortPipeEarly??ze?.abortPipeEarly}}s(Nt,"getGlobalConfig");var wn;function bn(r){return wn?.get(r)}s(bn,"getGlobalMessage");var En;function Cn(r){return En?.get(r)}s(Cn,"getSchemaMessage");var xn;function Sn(r,e){return xn?.get(r)?.get(e)}s(Sn,"getSpecificMessage");function We(r){let e=typeof r;return e==="string"?`"${r}"`:e==="number"||e==="bigint"||e==="boolean"?`${r}`:e==="object"||e==="function"?(r&&Object.getPrototypeOf(r)?.constructor?.name)??"null":e}s(We,"_stringify");function X(r,e,t,n,i){let o=i&&"input"in i?i.input:t.value,a=i?.expected??r.expects??null,u=i?.received??We(o),l={kind:r.kind,type:r.type,input:o,expected:a,received:u,message:`Invalid ${e}: ${a?`Expected ${a} but r`:"R"}eceived ${u}`,requirement:r.requirement,path:i?.path,issues:i?.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},c=r.kind==="schema",p=i?.message??r.message??Sn(r.reference,l.lang)??(c?Cn(l.lang):null)??n.message??bn(l.lang);p!==void 0&&(l.message=typeof p=="function"?p(l):p),c&&(t.typed=!1),t.issues?t.issues.push(l):t.issues=[l]}s(X,"_addIssue");function Z(r){return{version:1,vendor:"valibot",validate(e){return r["~run"]({value:e},Nt())}}}s(Z,"_getStandardProps");function An(r,e){let t=[...new Set(r)];return t.length>1?`(${t.join(` ${e} `)})`:t[0]??"never"}s(An,"_joinExpects");function Xe(r,e){return{kind:"validation",type:"min_value",reference:Xe,async:!1,expects:`>=${r instanceof Date?r.toJSON():We(r)}`,requirement:r,message:e,"~run"(t,n){return t.typed&&!(t.value>=this.requirement)&&X(this,"value",t,n,{received:t.value instanceof Date?t.value.toJSON():We(t.value)}),t}}}s(Xe,"minValue");function j(r){return{kind:"transformation",type:"transform",reference:j,async:!1,operation:r,"~run"(e){return e.value=this.operation(e.value),e}}}s(j,"transform");function kn(r,e,t){return typeof r.fallback=="function"?r.fallback(e,t):r.fallback}s(kn,"getFallback");function Mt(r,e,t){return typeof r.default=="function"?r.default(e,t):r.default}s(Mt,"getDefault");function Ke(r,e){return{kind:"schema",type:"array",reference:Ke,expects:"Array",async:!1,item:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i=t.value;if(Array.isArray(i)){t.typed=!0,t.value=[];for(let o=0;o<i.length;o++){let a=i[o],u=this.item["~run"]({value:a},n);if(u.issues){let l={type:"array",origin:"value",input:i,key:o,value:a};for(let c of u.issues)c.path?c.path.unshift(l):c.path=[l],t.issues?.push(c);if(t.issues||(t.issues=u.issues),n.abortEarly){t.typed=!1;break}}u.typed||(t.typed=!1),t.value.push(u.value)}}else X(this,"type",t,n);return t}}}s(Ke,"array");function U(r){return{kind:"schema",type:"number",reference:U,expects:"number",async:!1,message:r,get"~standard"(){return Z(this)},"~run"(e,t){return typeof e.value=="number"&&!isNaN(e.value)?e.typed=!0:X(this,"type",e,t),e}}}s(U,"number");function A(r,e){return{kind:"schema",type:"object",reference:A,expects:"Object",async:!1,entries:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i=t.value;if(i&&typeof i=="object"){t.typed=!0,t.value={};for(let o in this.entries){let a=this.entries[o];if(o in i||(a.type==="exact_optional"||a.type==="optional"||a.type==="nullish")&&a.default!==void 0){let u=o in i?i[o]:Mt(a),l=a["~run"]({value:u},n);if(l.issues){let c={type:"object",origin:"value",input:i,key:o,value:u};for(let p of l.issues)p.path?p.path.unshift(c):p.path=[c],t.issues?.push(p);if(t.issues||(t.issues=l.issues),n.abortEarly){t.typed=!1;break}}l.typed||(t.typed=!1),t.value[o]=l.value}else if(a.fallback!==void 0)t.value[o]=kn(a);else if(a.type!=="exact_optional"&&a.type!=="optional"&&a.type!=="nullish"&&(X(this,"key",t,n,{input:void 0,expected:`"${o}"`,path:[{type:"object",origin:"key",input:i,key:o,value:i[o]}]}),n.abortEarly))break}}else X(this,"type",t,n);return t}}}s(A,"object");function N(r,e){return{kind:"schema",type:"optional",reference:N,expects:`(${r.expects} | undefined)`,async:!1,wrapped:r,default:e,get"~standard"(){return Z(this)},"~run"(t,n){return t.value===void 0&&(this.default!==void 0&&(t.value=Mt(this,t,n)),t.value===void 0)?(t.typed=!0,t):this.wrapped["~run"](t,n)}}}s(N,"optional");function b(r){return{kind:"schema",type:"string",reference:b,expects:"string",async:!1,message:r,get"~standard"(){return Z(this)},"~run"(e,t){return typeof e.value=="string"?e.typed=!0:X(this,"type",e,t),e}}}s(b,"string");function Ut(r){let e;if(r)for(let t of r)e?e.push(...t.issues):e=t.issues;return e}s(Ut,"_subIssues");function ee(r,e){return{kind:"schema",type:"union",reference:ee,expects:An(r.map(t=>t.expects),"|"),async:!1,options:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i,o,a;for(let u of this.options){let l=u["~run"]({value:t.value},n);if(l.typed)if(l.issues)o?o.push(l):o=[l];else{i=l;break}else a?a.push(l):a=[l]}if(i)return i;if(o){if(o.length===1)return o[0];X(this,"type",t,n,{issues:Ut(o)}),t.typed=!0}else{if(a?.length===1)return a[0];X(this,"type",t,n,{issues:Ut(a)})}return t}}}s(ee,"union");function M(...r){return{...r[0],pipe:r,get"~standard"(){return Z(this)},"~run"(e,t){for(let n of r)if(n.kind!=="metadata"){if(e.issues&&(n.kind==="schema"||n.kind==="transformation")){e.typed=!1;break}(!e.issues||!t.abortEarly&&!t.abortPipeEarly)&&(e=n["~run"](e,t))}return e}}}s(M,"pipe");function _(r,e,t){let n=r["~run"]({value:e},Nt(t));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}s(_,"safeParse");var E=class{constructor(e,t,n,i){this.swish=e;this.ui=t;this.eventBus=n;this.options=i}static{s(this,"IntentHandler")}};var Rn=A({itemId:N(M(b())),productId:M(ee([M(b(),j(R)),U()]),j(r=>Number(r)),U()),variantId:N(M(ee([M(b(),j(R)),U()]),j(r=>Number(r)),U()))}),ue=class extends E{static{s(this,"EditItemVariantHandler")}async invoke(e,t=!1){return new Promise(n=>{let i=e.data,o=_(Rn,i);if(!o.success){n({code:"error",message:"Invalid intent data",issues:o.issues.map(c=>c.message)});return}let{itemId:a,productId:u,variantId:l}=o.output;this.ui.showVariantSelect({productId:u.toString(),variantId:l?.toString(),onClose:s(()=>{n({code:"closed"})},"onClose"),onSubmit:s(async c=>{let{item:p,product:d,variant:m}=c,h={code:"ok",data:{item:p,product:d,variant:m}};t||this.eventBus.dispatchEvent(new CustomEvent("edit:swish/ItemVariant",{detail:h})),n(h)},"onSubmit")})})}};var Dn=A({productId:M(ee([M(b(),j(R)),U()]),j(r=>Number(r)),U()),variantId:N(M(ee([M(b(),j(R)),U()]),j(Number),U())),quantity:N(M(U(),Xe(1))),tags:N(Ke(b()))}),ge=class extends E{static{s(this,"CreateItemHandler")}async invoke(e){let t=e.data,n=_(Dn,t);if(!n.success)return{code:"error",message:"Invalid intent data",issues:n.issues.map(m=>m.message)};let{productId:i,variantId:o,quantity:a,tags:u}=n.output,l=await this.swish.storefront.loadSaveIntentData({productId:w("Product",i),variantId:o?w("ProductVariant",o):void 0});if(l.errors)return{code:"error",message:l.errors.message??"Failed to load save intent data",issues:l.errors.graphQLErrors?.map(m=>m.message)??[]};if(!l.data||!l.data.product)return{code:"error",message:"Failed to load save intent data",issues:["API response missing data"]};let{product:c}=l.data,p=c.variantsCount?.count&&c.variantsCount.count>1;if(!p||!this.options.save.requireVariant){let m=s(()=>!p&&c.selectedOrFirstAvailableVariant?Number(R(c.selectedOrFirstAvailableVariant.id)):o,"variantIdToUse"),h=await this.swish.api.items.create({productId:i,variantId:m(),quantity:a,tags:u});if("error"in h)return{code:"error",message:"Failed to create item",issues:[h.error.message]};if(!h.data)return{code:"error",message:"Could not complete item creation",issues:["API response missing data"]};let D="variant"in l.data?l.data.variant:void 0,y={code:"ok",data:{item:h.data,product:c,variant:p?D:c.selectedOrFirstAvailableVariant}};return this.eventBus.dispatchEvent(new CustomEvent("create:swish/Item",{detail:y})),y}let d=await new ue(this.swish,this.ui,this.eventBus,this.options).invoke({action:"edit",type:"swish/ItemVariant",data:{productId:i,variantId:o}});return this.eventBus.dispatchEvent(new CustomEvent("create:swish/Item",{detail:d})),d}};var Ie=class extends E{static{s(this,"CreateListHandler")}async invoke(e){return new Promise(t=>{this.ui.showListEditor({onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async n=>{let{list:i}=n;t({code:"ok",data:{list:i}})},"onSubmit")})})}};var Pn=A({itemId:b()}),we=class extends E{static{s(this,"DeleteItemHandler")}async invoke(e){return new Promise(async t=>{let n=_(Pn,e.data);if(!n.success){t({code:"error",message:"Invalid intent data",issues:n.issues.map(o=>o.message)});return}let{itemId:i}=n.output;if(!this.options.unsave.requireConfirmation){let o=await this.swish.api.items.deleteById(i);if("error"in o){t({code:"error",message:"Failed to delete item",issues:[o.error.message]});return}t({code:"ok",data:{itemId:i}});return}this.ui.showUnsaveAlert({itemId:i,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(()=>{t({code:"ok",data:{itemId:i}})},"onSubmit")})})}};var Tn=A({listId:b()}),be=class extends E{static{s(this,"DeleteListHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(Tn,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showDeleteListAlert({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async()=>{t({code:"ok",data:{listId:o}})},"onSubmit")})})}};var _n=A({itemId:b()}),Ee=class extends E{static{s(this,"EditItemListsHandler")}async invoke(e,t=!1){return new Promise(n=>{let i=e.data,o=_(_n,i);if(!o.success){n({code:"error",message:"Invalid intent data",issues:o.issues.map(u=>u.message)});return}let{itemId:a}=o.output;this.ui.showListSelect({itemId:a,onClose:s(()=>{n({code:"closed"})},"onClose"),onSubmit:s(async u=>{let{item:l,product:c,variant:p}=u,d={code:"ok",data:{item:l,product:c,variant:p}};t||this.eventBus.dispatchEvent(new CustomEvent("edit:swish/ItemLists",{detail:d})),n(d)},"onSubmit"),onUnsave(u){let l={code:"ok",data:{itemId:u.itemId}};n(l)}})})}};var On=A({listId:b()}),Ce=class extends E{static{s(this,"EditListHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(On,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showListEditor({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async a=>{let{list:u}=a;t({code:"ok",data:{list:u}})},"onSubmit")})})}};var xe=class extends E{static{s(this,"OpenHomeHandler")}async invoke(e){return new Promise(t=>{this.ui.showDrawer({onClose:s(()=>{t({code:"closed"})},"onClose")})})}};var Ln=A({listId:b()}),Se=class extends E{static{s(this,"OpenListMenuHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(Ln,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showListMenu({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onEdit:s(a=>{t({code:"ok",data:a})},"onEdit"),onDelete:s(()=>{t({code:"ok",data:{listId:o}})},"onDelete")})})}};var Xs=A({returnTo:N(b())}),Ae=class extends E{static{s(this,"OpenSignInHandler")}async invoke(e){return new Promise(t=>{this.ui.showSignIn({returnTo:e.data?.returnTo,onClose:s(()=>{t({code:"closed"})},"onClose")})})}};var $n=A({productId:b(),variantId:N(b())}),ke=class extends E{static{s(this,"OpenQuickBuyHandler")}async invoke(e){return new Promise(t=>{let n=_($n,e.data);if(!n.success){t({code:"error",message:"Invalid intent data",issues:n.issues.map(a=>a.message)});return}let{productId:i,variantId:o}=n.output;this.ui.showQuickBuy({productId:i,variantId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(a=>{t({code:"ok",data:a})},"onSubmit")})})}};var le=class{constructor(e,t,n){this.swish=e;this.ui=t;this.options=n}static{s(this,"IntentHook")}};var Re=class extends le{static{s(this,"AfterCreateItemHook")}async invoke(e){if(this.options.save.showToast&&e.code==="ok"){let{item:t,product:n,variant:i}=e.data;n&&this.ui.showToast({title:"Saved",text:n.title,image:i?.image?.url??n.featuredImage?.url,action:{label:"Add to List",onClick:s(()=>{this.swish.intents.invoke({action:"edit",type:"swish/ItemLists",data:{itemId:t.id}})},"onClick")}})}}};var De=class extends le{static{s(this,"AfterEditItemListsHook")}async invoke(e){if(this.options.edit.showToast&&e.code==="ok"){if("itemId"in e.data)return;let{product:t,variant:n}=e.data;t&&this.ui.showToast({title:"Saved",text:t.title,image:n?.image?.url??t.featuredImage?.url,action:{label:"View",onClick:s(()=>{this.swish.intents.invoke({action:"open",type:"swish/Home"})},"onClick")}})}}};var Pe=class{static{s(this,"Intents")}constructor(e,t){this.swish=e,this.ui=t,this.eventBus=new EventTarget,this.options=e.options.swishUi.intents,this.initIntentHooks(),this.initIntentWatcher()}publishAnalyticsEvent(e,t){typeof window.Shopify?.analytics?.publish=="function"&&window.Shopify.analytics.publish(e,t)}async invoke(e){let t=this.parseIntent(e),n=this.getIntentQuery(t),i={lifecycle:"before",intent:t};return this.publishAnalyticsEvent("swish-intent",i),this.publishAnalyticsEvent(`swish-intent=${n}`,i),{intent:t,complete:this.handleIntent(t).then(o=>{let a={lifecycle:"after",intent:t,response:o};return this.publishAnalyticsEvent("swish-intent",a),this.publishAnalyticsEvent(`swish-intent=${n}`,a),o})}}listen(e,t){let n=this.getIntentQuery(e),i=s(a=>{"detail"in a&&a.detail?t(a.detail):console.warn("Intent response event without detail",a)},"eventListener"),o=s(()=>{this.eventBus.removeEventListener(n,i)},"unsubscribe");return this.eventBus.addEventListener(n,i),o}getIntentQuery(e){return`${e.action}:${e.type}`}parseIntent(e){if(typeof e=="string"){let[t,...n]=e.split(","),[i,o]=t.split(":"),a=n.reduce((u,l)=>{let[c,p]=l.split("=");return u[c]=p,u},{});return{action:i,type:o,data:a}}return e}async handleIntent(e){return e.action==="create"&&e.type==="swish/Item"?new ge(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="delete"&&e.type==="swish/Item"?new we(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/ItemVariant"?new ue(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/ItemLists"?new Ee(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="create"&&e.type==="swish/List"?new Ie(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/List"?new Ce(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="delete"&&e.type==="swish/List"?new be(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/Home"?new xe(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/ListMenu"?new Se(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/SignIn"?new Ae(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/QuickBuy"?new ke(this.swish,this.ui,this.eventBus,this.options).invoke(e):{code:"error",message:"Invalid intent",issues:["Invalid intent"]}}initIntentHooks(){this.eventBus.addEventListener("create:swish/Item",e=>{new Re(this.swish,this.ui,this.options).invoke(e.detail)}),this.eventBus.addEventListener("edit:swish/ItemLists",e=>{new De(this.swish,this.ui,this.options).invoke(e.detail)})}initIntentWatcher(){fe({selector:"[swish-intent]",onElementFound:s(e=>{let t=this.parseIntent(e.getAttribute("swish-intent"));t&&e.addEventListener("click",()=>{this.invoke(t)})},"onElementFound")}),fe({selector:"a[href*='swish-intent=']",onElementFound:s(e=>{e instanceof HTMLAnchorElement&&e.addEventListener("click",t=>{if(!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey){let i=new URL(e.href).searchParams.get("swish-intent");if(i){let o=this.parseIntent(i);o&&(t.preventDefault(),t.stopPropagation(),this.invoke(o))}}})},"onElementFound")}),ae({fireOnInit:!0,onLocationChange:s(e=>{let t=new URLSearchParams(window.location.search).get("swish-intent");if(t){let n=this.parseIntent(t);if(n){this.invoke(n);let i=new URL(window.location.href);i.searchParams.delete("swish-intent"),window.history.replaceState({},document.title,i.toString())}}},"onLocationChange")})}};var Bn=Symbol.for("preact-signals");function _e(){if(K>1)K--;else{for(var r,e=!1;de!==void 0;){var t=de;for(de=void 0,Ye++;t!==void 0;){var n=t.o;if(t.o=void 0,t.f&=-3,!(8&t.f)&&Ft(t))try{t.c()}catch(i){e||(r=i,e=!0)}t=n}}if(Ye=0,K--,e)throw r}}s(_e,"t");function Y(r){if(K>0)return r();K++;try{return r()}finally{_e()}}s(Y,"r");var g=void 0;function Gt(r){var e=g;g=void 0;try{return r()}finally{g=e}}s(Gt,"n");var de=void 0,K=0,Ye=0,Te=0;function jt(r){if(g!==void 0){var e=r.n;if(e===void 0||e.t!==g)return e={i:0,S:r,p:g.s,n:void 0,t:g,e:void 0,x:void 0,r:e},g.s!==void 0&&(g.s.n=e),g.s=e,r.n=e,32&g.f&&r.S(e),e;if(e.i===-1)return e.i=0,e.n!==void 0&&(e.n.p=e.p,e.p!==void 0&&(e.p.n=e.n),e.p=g.s,e.n=void 0,g.s.n=e,g.s=e),e}}s(jt,"e");function $(r,e){this.v=r,this.i=0,this.n=void 0,this.t=void 0,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}s($,"u");$.prototype.brand=Bn;$.prototype.h=function(){return!0};$.prototype.S=function(r){var e=this,t=this.t;t!==r&&r.e===void 0&&(r.x=t,this.t=r,t!==void 0?t.e=r:Gt(function(){var n;(n=e.W)==null||n.call(e)}))};$.prototype.U=function(r){var e=this;if(this.t!==void 0){var t=r.e,n=r.x;t!==void 0&&(t.x=n,r.e=void 0),n!==void 0&&(n.e=t,r.x=void 0),r===this.t&&(this.t=n,n===void 0&&Gt(function(){var i;(i=e.Z)==null||i.call(e)}))}};$.prototype.subscribe=function(r){var e=this;return V(function(){var t=e.value,n=g;g=void 0;try{r(t)}finally{g=n}},{name:"sub"})};$.prototype.valueOf=function(){return this.value};$.prototype.toString=function(){return this.value+""};$.prototype.toJSON=function(){return this.value};$.prototype.peek=function(){var r=g;g=void 0;try{return this.value}finally{g=r}};Object.defineProperty($.prototype,"value",{get:s(function(){var r=jt(this);return r!==void 0&&(r.i=this.i),this.v},"get"),set:s(function(r){if(r!==this.v){if(Ye>100)throw new Error("Cycle detected");this.v=r,this.i++,Te++,K++;try{for(var e=this.t;e!==void 0;e=e.x)e.t.N()}finally{_e()}}},"set")});function C(r,e){return new $(r,e)}s(C,"d");function Ft(r){for(var e=r.s;e!==void 0;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}s(Ft,"c");function Ht(r){for(var e=r.s;e!==void 0;e=e.n){var t=e.S.n;if(t!==void 0&&(e.r=t),e.S.n=e,e.i=-1,e.n===void 0){r.s=e;break}}}s(Ht,"a");function Qt(r){for(var e=r.s,t=void 0;e!==void 0;){var n=e.p;e.i===-1?(e.S.U(e),n!==void 0&&(n.n=e.n),e.n!==void 0&&(e.n.p=n)):t=e,e.S.n=e.r,e.r!==void 0&&(e.r=void 0),e=n}r.s=t}s(Qt,"l");function te(r,e){$.call(this,void 0),this.x=r,this.s=void 0,this.g=Te-1,this.f=4,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}s(te,"y");te.prototype=new $;te.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===Te))return!0;if(this.g=Te,this.f|=1,this.i>0&&!Ft(this))return this.f&=-2,!0;var r=g;try{Ht(this),g=this;var e=this.x();(16&this.f||this.v!==e||this.i===0)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return g=r,Qt(this),this.f&=-2,!0};te.prototype.S=function(r){if(this.t===void 0){this.f|=36;for(var e=this.s;e!==void 0;e=e.n)e.S.S(e)}$.prototype.S.call(this,r)};te.prototype.U=function(r){if(this.t!==void 0&&($.prototype.U.call(this,r),this.t===void 0)){this.f&=-33;for(var e=this.s;e!==void 0;e=e.n)e.S.U(e)}};te.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var r=this.t;r!==void 0;r=r.x)r.t.N()}};Object.defineProperty(te.prototype,"value",{get:s(function(){if(1&this.f)throw new Error("Cycle detected");var r=jt(this);if(this.h(),r!==void 0&&(r.i=this.i),16&this.f)throw this.v;return this.v},"get")});function q(r,e){return new te(r,e)}s(q,"w");function zt(r){var e=r.u;if(r.u=void 0,typeof e=="function"){K++;var t=g;g=void 0;try{e()}catch(n){throw r.f&=-2,r.f|=8,Je(r),n}finally{g=t,_e()}}}s(zt,"_");function Je(r){for(var e=r.s;e!==void 0;e=e.n)e.S.U(e);r.x=void 0,r.s=void 0,zt(r)}s(Je,"b");function qn(r){if(g!==this)throw new Error("Out-of-order effect");Qt(this),g=r,this.f&=-2,8&this.f&&Je(this),_e()}s(qn,"g");function ce(r,e){this.x=r,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=e?.name}s(ce,"p");ce.prototype.c=function(){var r=this.S();try{if(8&this.f||this.x===void 0)return;var e=this.x();typeof e=="function"&&(this.u=e)}finally{r()}};ce.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,zt(this),Ht(this),K++;var r=g;return g=this,qn.bind(this,r)};ce.prototype.N=function(){2&this.f||(this.f|=2,this.o=de,de=this)};ce.prototype.d=function(){this.f|=8,1&this.f||Je(this)};ce.prototype.dispose=function(){this.d()};function V(r,e){var t=new ce(r,e);try{t.c()}catch(i){throw t.d(),i}var n=t.d.bind(t);return n[Symbol.dispose]=n,n}s(V,"E");var Vn=/\/products\/([^/?#]+)(?:\?(?:[^#]*?&)?variant=(\d+))?/,Ze=s(r=>{let e=r.match(Vn);return e?{productHandle:e[1],variantId:e[2]}:null},"parseProductUrl"),Wt=s(({source:r,onProductUrlChange:e})=>{let t=s(n=>{let i=Ze(n);i?.productHandle&&e(i)},"handleChange");if(r instanceof HTMLAnchorElement)return Vt({element:r,onHrefChange:s(n=>t(n),"onHrefChange")});if(r instanceof Location)return ae({onLocationChange:s(n=>t(n.href),"onLocationChange")});throw new Error("Invalid source for observing product url")},"observeProductUrl");var Xt=s(r=>e=>{let{productHandle:t,productId:n,variantId:i,itemId:o}=e?.dataset??{},l=!!(n||t)||!!o,c=C({loading:!1,productId:n,variantId:i,itemId:o});if(!l){let p=e instanceof HTMLAnchorElement?e:window.location,d=Ze(p.href);d?.productHandle&&d.productHandle!==c.value.productHandle&&(c.value={...c.value,...d,productId:void 0},Wt({source:p,onProductUrlChange:s(m=>{c.value={...c.value,...m,productId:m.productHandle!==c.value.productHandle?void 0:c.value.productId}},"onProductUrlChange")}))}return V(()=>{c.value.loading||!c.value.productId&&c.value.productHandle&&(c.value={...c.value,loading:!0},r.storefront.loadProductId({productHandle:c.value.productHandle}).then(p=>{p.errors&&console.error("Error loading product id",p.errors),c.value={...c.value,productId:p.data?.product?.id?R(p.data.product.id):void 0,loading:!1}}))}),c},"itemContextSignal");var Kt=s(r=>e=>{let t=q(()=>{let{productId:I,variantId:v,loading:P}=e.value;return!I||P?null:v?`variant:${R(v)}`:`product:${R(I)}`}),n=q(()=>e.value.loading||!!e.value.itemId||!e.value.productId),i=q(()=>({limit:1,query:t.value??void 0})),o=C(!n.value),a=C(null),u=C(!1),l=C(!1),{data:c,loading:p,error:d,refetching:m}=r.state.swishQuery(I=>r.api.items.list(I),{refetch:["item-create","item-update","item-delete"],variables:i,skip:n}),h=C(e.value.itemId??null);V(()=>{Y(()=>{if(o.value=p.value,a.value=d.value,!e.value.itemId){let I=c.value?.[0]?.id??null;I!==h.value&&(h.value=I)}})});async function D(){if(!h.value)return;u.value=!0,(await(await r.intents.invoke({action:"delete",type:"swish/Item",data:{itemId:h.value}})).complete).code==="ok"&&(h.value=null),u.value=!1}s(D,"unsave");async function y(){if(!h.value)return;u.value=!0;let v=await(await r.intents.invoke({action:"edit",type:"swish/ItemLists",data:{itemId:h.value}})).complete;v.code==="ok"&&"itemId"in v.data&&(h.value=null),u.value=!1}s(y,"update");async function S(){let{productId:I,variantId:v}=e.value;if(!I)return;u.value=!0,l.value=!0;let T=await(await r.intents.invoke({action:"create",type:"swish/Item",data:{productId:I,variantId:v}})).complete;if(T.code==="ok"){let pe=T.data;h.value=pe.item.id,u.value=!1}else T.code==="error"&&console.warn("Failed to create item",T),Y(()=>{u.value=!1,l.value=!1})}s(S,"save");let L=q(()=>o.value||u.value||e.value.loading);V(()=>{l.value&&!u.value&&!m.value&&(l.value=!1)});let k=q(()=>{let I=m.value&&l.value,v=!!h.value,P=!v&&(u.value||I),T=v&&(u.value||I),pe=q(()=>P?"saving":T?"unsaving":v?"saved":"unsaved");return{error:a.value,status:pe.value,savedItemId:h.value,loading:L.value,submitting:u.value,saved:v,saving:P,unsaving:T}});async function F(){L.value||(k.value.saved&&k.value.savedItemId?y():k.value.saved||await S())}return s(F,"toggle"),Object.assign(k,{save:S,unsave:D,update:y,toggle:F})},"itemStateSignal");var Yt=s(r=>()=>{let{data:e,loading:t,error:n}=r.state.swishQuery(()=>r.api.items.count(),{refetch:["item-create","item-delete"]}),i=C(0),o=C(!0),a=C(null);return V(()=>{Y(()=>{o.value=t.value,a.value=n.value,i.value=e.value?.count??0})}),q(()=>({count:i.value,loading:o.value,error:a.value}))},"itemCountSignal");var Jt=s(r=>(e,t)=>{let n=C(null),i=C(null),o=C(null),a=C(!t?.skip),u=C(!1),l=q(()=>a.value&&u.value);async function c(){if(!t?.skip?.value)try{a.value=!0;let p=await e(t?.variables?.value);Y(()=>{o.value="error"in p?p.error:null,n.value="data"in p?p.data:null,i.value="pageInfo"in p?p.pageInfo:null,a.value=!1,u.value=!0})}catch(p){Y(()=>{o.value=p,a.value=!1,u.value=!0})}}return s(c,"executeFetch"),V(()=>{if(c(),t?.refetch?.length)return r.events.subscribe(t.refetch,c)}),{data:n,pageInfo:i,error:o,loading:a,refetching:l}},"swishQuerySignals");var re="GraphQL Client";var et="An error occurred while fetching from the API. Review 'graphQLErrors' for details.",tt="Response returned unexpected Content-Type:",rt="An unknown error has occurred. The API did not return a data object or any errors in its response.",Oe={json:"application/json",multipart:"multipart/mixed"},nt="X-SDK-Variant",it="X-SDK-Version",er="shopify-graphql-client",tr="1.4.1",Le=1e3,rr=[429,503],st=/@(defer)\b/i,Zt=`\r
|
|
8
|
-
`,nr=/boundary="?([^=";]+)"?/i,ot=Zt+Zt;function H(r,e=re){return r.startsWith(`${e}`)?r:`${e}: ${r}`}s(H,"formatErrorMessage");function W(r){return r instanceof Error?r.message:JSON.stringify(r)}s(W,"getErrorMessage");function at(r){return r instanceof Error&&r.cause?r.cause:void 0}s(at,"getErrorCause");function ut(r){return r.flatMap(({errors:e})=>e??[])}s(ut,"combineErrors");function $e({client:r,retries:e}){if(e!==void 0&&(typeof e!="number"||e<0||e>3))throw new Error(`${r}: The provided "retries" value (${e}) is invalid - it cannot be less than ${0} or greater than ${3}`)}s($e,"validateRetries");function
|
|
7
|
+
`+String(n)));Pt(e);for(var i=0;i<e.callbacks.length;i++){var o=n[i];o instanceof Error?e.callbacks[i].reject(o):e.callbacks[i].resolve(o)}}).catch(function(n){Dt(r,e,n)})}s(ji,"dispatchBatch");function Dt(r,e,t){Pt(e);for(var n=0;n<e.keys.length;n++)r.clear(e.keys[n]),e.callbacks[n].reject(t)}s(Dt,"failedDispatch");function Pt(r){if(r.cacheHits)for(var e=0;e<r.cacheHits.length;e++)r.cacheHits[e]()}s(Pt,"resolveCacheHits");function Fi(r){var e=!r||r.batch!==!1;if(!e)return 1;var t=r&&r.maxBatchSize;if(t===void 0)return 1/0;if(typeof t!="number"||t<1)throw new TypeError("maxBatchSize must be a positive number: "+t);return t}s(Fi,"getValidMaxBatchSize");function Hi(r){var e=r&&r.batchScheduleFn;if(e===void 0)return Gi;if(typeof e!="function")throw new TypeError("batchScheduleFn must be a function: "+e);return e}s(Hi,"getValidBatchScheduleFn");function Qi(r){var e=r&&r.cacheKeyFn;if(e===void 0)return function(t){return t};if(typeof e!="function")throw new TypeError("cacheKeyFn must be a function: "+e);return e}s(Qi,"getValidCacheKeyFn");function zi(r){var e=!r||r.cache!==!1;if(!e)return null;var t=r&&r.cacheMap;if(t===void 0)return new Map;if(t!==null){var n=["get","set","delete","clear"],i=n.filter(function(o){return t&&typeof t[o]!="function"});if(i.length!==0)throw new TypeError("Custom cacheMap missing methods: "+i.join(", "))}return t}s(zi,"getValidCacheMap");function Wi(r){return r&&r.name?r.name:null}s(Wi,"getValidName");function rn(r){return typeof r=="object"&&r!==null&&typeof r.length=="number"&&(r.length===0||r.length>0&&Object.prototype.hasOwnProperty.call(r,r.length-1))}s(rn,"isArrayLike");nn.exports=Ni});var R=s(r=>r.split("/").pop()??"","shopifyGidToId"),w=s((r,e)=>`gid://shopify/${r}/${e}`,"shopifyIdToGid");var Q=class{constructor(e,t,n=""){this.revalidationPromises=new Map;this.inFlightRequests=new Map;this.clearCachePromise=null;this.cacheName=e,this.defaultCacheControl=t,this.keyPrefix=n}static{s(this,"FetchCache")}async get(e){try{let t=await caches.open(this.cacheName),n=await t.match(e);if(n&&this.isExpired(n)){await t.delete(e);return}return n}catch(t){console.warn("Cache get error:",t);return}}async set(e,t,n){try{if(n?.includes("no-cache"))return;let i=this.createCacheableResponse(t,n);await(await caches.open(this.cacheName)).put(e,i)}catch(i){console.warn("Cache set error:",i)}}async fetchWithCache(e,t,n){let i=await this.getCacheKey(e,t);if(this.clearCachePromise&&await this.clearCachePromise,this.inFlightRequests.has(i))return this.inFlightRequests.get(i).then(a=>a.clone());let o=(async()=>{let a=await this.get(i);if(a)return this.isStaleButRevalidatable(a)&&this.revalidateInBackground(i,e,t,n),a.clone();let u=await fetch(e,t);return u.ok&&await this.set(i,u.clone(),n??this.defaultCacheControl),u})().finally(()=>{this.inFlightRequests.delete(i)});return this.inFlightRequests.set(i,o),o}async delete(e){try{return await(await caches.open(this.cacheName)).delete(e)}catch(t){return console.warn("Cache delete error:",t),!1}}async clear(){return this.clearCachePromise?this.clearCachePromise:(this.clearCachePromise=new Promise(async(e,t)=>{try{let n=await caches.open(this.cacheName),i=await n.keys();await Promise.all(i.map(o=>n.delete(o))),e()}catch(n){console.warn("Cache clear error:",n),t(n)}}),this.clearCachePromise.then(()=>{this.clearCachePromise=null}).catch(e=>{console.warn("Cache clear error:",e)}))}async keys(){try{return(await(await caches.open(this.cacheName)).keys()).map(n=>n.url)}catch(e){return console.warn("Cache keys error:",e),[]}}async has(e){try{let t=await caches.open(this.cacheName),n=await t.match(e);return n&&this.isExpired(n)?(await t.delete(e),!1):n!==void 0}catch(t){return console.warn("Cache has error:",t),!1}}async getStats(){try{return{total:(await(await caches.open(this.cacheName)).keys()).length}}catch(e){return console.warn("Cache stats error:",e),{total:0}}}async cleanupExpiredEntries(){try{let e=await caches.open(this.cacheName),t=await e.keys(),n=0;for(let o of t){let a=await e.match(o);a&&this.isExpired(a)&&(await e.delete(o),n++)}let i=t.length-n;return{removed:n,remaining:i}}catch(e){return console.warn("Cache cleanup error:",e),{removed:0,remaining:0}}}async getCacheKey(e,t){let n=this.getInputUrl(e),i=`${this.keyPrefix}${n}/${JSON.stringify(t)}`,a=new TextEncoder().encode(i),u=await crypto.subtle.digest("SHA-256",a);return`/${Array.from(new Uint8Array(u)).map(p=>p.toString(16).padStart(2,"0")).join("")}`}getInputUrl(e){return e instanceof URL?e.toString():typeof e=="string"?e:e.url}isExpired(e){let t=e.headers.get("Cache-Control");if(!t)return!1;let n=this.parseMaxAge(t),i=this.parseStaleWhileRevalidate(t);if(n===null)return!1;let o=e.headers.get("Date");if(!o)return!1;let a=new Date(o).getTime(),l=(Date.now()-a)/1e3,c=n+(i??0);return l>c}isStaleButRevalidatable(e){let t=e.headers.get("Cache-Control");if(!t)return!1;let n=this.parseMaxAge(t),i=this.parseStaleWhileRevalidate(t);if(n===null||i===null)return!1;let o=e.headers.get("Date");if(!o)return!1;let a=new Date(o).getTime(),l=(Date.now()-a)/1e3;return l>n&&l<=n+i}async revalidateInBackground(e,t,n,i){if(this.revalidationPromises.has(e))return;let o=(async()=>{try{let a=await fetch(t,n);a.ok&&await this.set(e,a.clone(),i??this.defaultCacheControl)}catch(a){console.warn("Background revalidation error:",a)}finally{this.revalidationPromises.delete(e)}})();this.revalidationPromises.set(e,o)}parseMaxAge(e){let t=new RegExp(/max-age=(\d+)/).exec(e);return t?parseInt(t[1],10):null}parseStaleWhileRevalidate(e){let t=new RegExp(/stale-while-revalidate=(\d+)/).exec(e);return t?parseInt(t[1],10):null}createCacheableResponse(e,t){let n=new Headers(e.headers);return n.set("Cache-Control",t),n.has("Date")||n.set("Date",new Date().toUTCString()),new Response(e.body,{status:e.status,statusText:e.statusText,headers:n})}};var ye=class{static{s(this,"AjaxApiClient")}constructor(e){this.config=e,this.cache=new Q("ajax-api","max-age=60, stale-while-revalidate=3600"),this.cache.cleanupExpiredEntries().catch(t=>{console.warn("Ajax API cache initialization cleanup error:",t)})}patchFetch(){if(!window.fetch||typeof window.fetch!="function")return;let e=window.fetch,t=this.config.responseInterceptor,n=this.getFetchRequest.bind(this);window.fetch=function(...i){let o=e.apply(this,i);if(typeof t=="function"){let a=n(i[0]);o.then(u=>t(u,a))}return o}}getFetchRequest(e){return e instanceof Request?e:new Request(e)}getBaseUrl(){if(!this.config?.storeDomain)throw new Error("Cart API client not initialized - missing store domain");return`https://${this.config.storeDomain}`}fetch(e,t){return(e instanceof Request?e.method:t?.method??"GET")==="GET"?this.cache.fetchWithCache(e,t):fetch(e,t)}async request(e,t={}){let n=`${this.getBaseUrl()}${e}`,i={"Content-Type":"application/json",Accept:"application/json"},o=await this.fetch(n,{...t,headers:{...i,...t.headers}});if(!o.ok){let a;try{a=await o.json()}catch{a={message:`HTTP ${o.status}: ${o.statusText}`,status:o.status.toString(),description:o.statusText}}throw new Error(a.message||a.description)}return o.json()}async fetchCart(){return this.request("/cart.js")}async addToCart(e){let t={...e,items:e.items.map(n=>{let i=R(n.id);if(!i)throw new Error(`Invalid Shopify GID format: ${n.id}`);let o=parseInt(i,10);if(isNaN(o))throw new Error(`Invalid numeric ID extracted from GID: ${n.id}`);return{...n,id:o}})};return this.request("/cart/add.js",{method:"POST",body:JSON.stringify(t)})}async clearCache(){await this.cache.clear()}};var me=class{constructor(e){this.eventMap={"/cart/add":"cart-add","/cart/update":"cart-update","/cart/change":"cart-change","/cart/clear":"cart-clear"};this.eventBus=e,this.processFetchResponse=this.processFetchResponse.bind(this)}static{s(this,"AjaxApiPublisher")}async processFetchResponse(e,t){try{let n=this.getEventName(t.url);if(n){let i=await e.clone().json();this.eventBus.publish(n,i)}}catch(n){console.warn(n)}}getEventName(e){for(let[t,n]of Object.entries(this.eventMap))if(e.includes(t))return n;return null}};function In(){let r=document.body||document.documentElement;return r?Promise.resolve(r):new Promise(e=>{window.addEventListener("DOMContentLoaded",()=>e(r))})}s(In,"waitForDOM");function pe({onElementFound:r,selector:e,observerOptions:t}){let n=new WeakSet,i=new MutationObserver(l=>{let c=!1;for(let p of l)if(p.addedNodes.length>0){c=!0;break}c&&o()}),o=s(()=>{document.querySelectorAll(e).forEach(l=>{n.has(l)||(a(l),n.add(l))})},"locateElements"),a=s(l=>{if(!t){r(l);return}let c=new IntersectionObserver(p=>{for(let d of p)d.isIntersecting&&(c.disconnect(),r(l))},t);c.observe(l)},"observeElement");return s(async()=>{let l=await In();o(),i.observe(l,{childList:!0,subtree:!0})},"locateAndObserveElements")(),i}s(pe,"createElementLocator");function oe({onLocationChange:r,fireOnInit:e=!1}){let t=s(()=>{r(window.location)},"handleChange");window.addEventListener("popstate",t);let n=history.pushState,i=history.replaceState;return history.pushState=function(...o){n.apply(this,o),t()},history.replaceState=function(...o){i.apply(this,o),t()},e&&t(),()=>{window.removeEventListener("popstate",t),history.pushState=n,history.replaceState=i}}s(oe,"createLocationObserver");function Vt({element:r,onHrefChange:e}){let t=s(()=>{e(r.href)},"handleChange"),n=new MutationObserver(()=>{t()});return n.observe(r,{attributes:!0,attributeFilter:["href"]}),()=>{n.disconnect()}}s(Vt,"createHrefObserver");var ve=class{constructor(){this.eventBus=new EventTarget}static{s(this,"EventBus")}subscribe(e,t,n){return Array.isArray(e)||(e=[e]),e.forEach(i=>{this.eventBus.addEventListener(i,t,n)}),()=>{e.forEach(i=>{this.eventBus.removeEventListener(i,t,n)})}}unsubscribe(e,t,n){this.eventBus.removeEventListener(e,t,n)}publish(e,t){this.eventBus.dispatchEvent(new CustomEvent(e,{detail:t}))}};var ze;function Nt(r){return{lang:r?.lang??ze?.lang,message:r?.message,abortEarly:r?.abortEarly??ze?.abortEarly,abortPipeEarly:r?.abortPipeEarly??ze?.abortPipeEarly}}s(Nt,"getGlobalConfig");var wn;function bn(r){return wn?.get(r)}s(bn,"getGlobalMessage");var En;function Cn(r){return En?.get(r)}s(Cn,"getSchemaMessage");var xn;function Sn(r,e){return xn?.get(r)?.get(e)}s(Sn,"getSpecificMessage");function We(r){let e=typeof r;return e==="string"?`"${r}"`:e==="number"||e==="bigint"||e==="boolean"?`${r}`:e==="object"||e==="function"?(r&&Object.getPrototypeOf(r)?.constructor?.name)??"null":e}s(We,"_stringify");function X(r,e,t,n,i){let o=i&&"input"in i?i.input:t.value,a=i?.expected??r.expects??null,u=i?.received??We(o),l={kind:r.kind,type:r.type,input:o,expected:a,received:u,message:`Invalid ${e}: ${a?`Expected ${a} but r`:"R"}eceived ${u}`,requirement:r.requirement,path:i?.path,issues:i?.issues,lang:n.lang,abortEarly:n.abortEarly,abortPipeEarly:n.abortPipeEarly},c=r.kind==="schema",p=i?.message??r.message??Sn(r.reference,l.lang)??(c?Cn(l.lang):null)??n.message??bn(l.lang);p!==void 0&&(l.message=typeof p=="function"?p(l):p),c&&(t.typed=!1),t.issues?t.issues.push(l):t.issues=[l]}s(X,"_addIssue");function Z(r){return{version:1,vendor:"valibot",validate(e){return r["~run"]({value:e},Nt())}}}s(Z,"_getStandardProps");function An(r,e){let t=[...new Set(r)];return t.length>1?`(${t.join(` ${e} `)})`:t[0]??"never"}s(An,"_joinExpects");function Xe(r,e){return{kind:"validation",type:"min_value",reference:Xe,async:!1,expects:`>=${r instanceof Date?r.toJSON():We(r)}`,requirement:r,message:e,"~run"(t,n){return t.typed&&!(t.value>=this.requirement)&&X(this,"value",t,n,{received:t.value instanceof Date?t.value.toJSON():We(t.value)}),t}}}s(Xe,"minValue");function j(r){return{kind:"transformation",type:"transform",reference:j,async:!1,operation:r,"~run"(e){return e.value=this.operation(e.value),e}}}s(j,"transform");function kn(r,e,t){return typeof r.fallback=="function"?r.fallback(e,t):r.fallback}s(kn,"getFallback");function Gt(r,e,t){return typeof r.default=="function"?r.default(e,t):r.default}s(Gt,"getDefault");function Ke(r,e){return{kind:"schema",type:"array",reference:Ke,expects:"Array",async:!1,item:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i=t.value;if(Array.isArray(i)){t.typed=!0,t.value=[];for(let o=0;o<i.length;o++){let a=i[o],u=this.item["~run"]({value:a},n);if(u.issues){let l={type:"array",origin:"value",input:i,key:o,value:a};for(let c of u.issues)c.path?c.path.unshift(l):c.path=[l],t.issues?.push(c);if(t.issues||(t.issues=u.issues),n.abortEarly){t.typed=!1;break}}u.typed||(t.typed=!1),t.value.push(u.value)}}else X(this,"type",t,n);return t}}}s(Ke,"array");function U(r){return{kind:"schema",type:"number",reference:U,expects:"number",async:!1,message:r,get"~standard"(){return Z(this)},"~run"(e,t){return typeof e.value=="number"&&!isNaN(e.value)?e.typed=!0:X(this,"type",e,t),e}}}s(U,"number");function A(r,e){return{kind:"schema",type:"object",reference:A,expects:"Object",async:!1,entries:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i=t.value;if(i&&typeof i=="object"){t.typed=!0,t.value={};for(let o in this.entries){let a=this.entries[o];if(o in i||(a.type==="exact_optional"||a.type==="optional"||a.type==="nullish")&&a.default!==void 0){let u=o in i?i[o]:Gt(a),l=a["~run"]({value:u},n);if(l.issues){let c={type:"object",origin:"value",input:i,key:o,value:u};for(let p of l.issues)p.path?p.path.unshift(c):p.path=[c],t.issues?.push(p);if(t.issues||(t.issues=l.issues),n.abortEarly){t.typed=!1;break}}l.typed||(t.typed=!1),t.value[o]=l.value}else if(a.fallback!==void 0)t.value[o]=kn(a);else if(a.type!=="exact_optional"&&a.type!=="optional"&&a.type!=="nullish"&&(X(this,"key",t,n,{input:void 0,expected:`"${o}"`,path:[{type:"object",origin:"key",input:i,key:o,value:i[o]}]}),n.abortEarly))break}}else X(this,"type",t,n);return t}}}s(A,"object");function N(r,e){return{kind:"schema",type:"optional",reference:N,expects:`(${r.expects} | undefined)`,async:!1,wrapped:r,default:e,get"~standard"(){return Z(this)},"~run"(t,n){return t.value===void 0&&(this.default!==void 0&&(t.value=Gt(this,t,n)),t.value===void 0)?(t.typed=!0,t):this.wrapped["~run"](t,n)}}}s(N,"optional");function b(r){return{kind:"schema",type:"string",reference:b,expects:"string",async:!1,message:r,get"~standard"(){return Z(this)},"~run"(e,t){return typeof e.value=="string"?e.typed=!0:X(this,"type",e,t),e}}}s(b,"string");function Ut(r){let e;if(r)for(let t of r)e?e.push(...t.issues):e=t.issues;return e}s(Ut,"_subIssues");function ee(r,e){return{kind:"schema",type:"union",reference:ee,expects:An(r.map(t=>t.expects),"|"),async:!1,options:r,message:e,get"~standard"(){return Z(this)},"~run"(t,n){let i,o,a;for(let u of this.options){let l=u["~run"]({value:t.value},n);if(l.typed)if(l.issues)o?o.push(l):o=[l];else{i=l;break}else a?a.push(l):a=[l]}if(i)return i;if(o){if(o.length===1)return o[0];X(this,"type",t,n,{issues:Ut(o)}),t.typed=!0}else{if(a?.length===1)return a[0];X(this,"type",t,n,{issues:Ut(a)})}return t}}}s(ee,"union");function G(...r){return{...r[0],pipe:r,get"~standard"(){return Z(this)},"~run"(e,t){for(let n of r)if(n.kind!=="metadata"){if(e.issues&&(n.kind==="schema"||n.kind==="transformation")){e.typed=!1;break}(!e.issues||!t.abortEarly&&!t.abortPipeEarly)&&(e=n["~run"](e,t))}return e}}}s(G,"pipe");function _(r,e,t){let n=r["~run"]({value:e},Nt(t));return{typed:n.typed,success:!n.issues,output:n.value,issues:n.issues}}s(_,"safeParse");var E=class{constructor(e,t,n,i){this.swish=e;this.ui=t;this.eventBus=n;this.options=i}static{s(this,"IntentHandler")}};var Rn=A({itemId:N(G(b())),productId:G(ee([G(b(),j(R)),U()]),j(r=>Number(r)),U()),variantId:N(G(ee([G(b(),j(R)),U()]),j(r=>Number(r)),U()))}),ae=class extends E{static{s(this,"EditItemVariantHandler")}async invoke(e,t=!1){return new Promise(n=>{let i=e.data,o=_(Rn,i);if(!o.success){n({code:"error",message:"Invalid intent data",issues:o.issues.map(c=>c.message)});return}let{itemId:a,productId:u,variantId:l}=o.output;this.ui.showVariantSelect({productId:u.toString(),variantId:l?.toString(),onClose:s(()=>{n({code:"closed"})},"onClose"),onSubmit:s(async c=>{let{item:p,product:d,variant:m}=c,h={code:"ok",data:{item:p,product:d,variant:m}};t||this.eventBus.dispatchEvent(new CustomEvent("edit:swish/ItemVariant",{detail:h})),n(h)},"onSubmit")})})}};var Dn=A({productId:G(ee([G(b(),j(R)),U()]),j(r=>Number(r)),U()),variantId:N(G(ee([G(b(),j(R)),U()]),j(Number),U())),quantity:N(G(U(),Xe(1))),tags:N(Ke(b()))}),ge=class extends E{static{s(this,"CreateItemHandler")}async invoke(e){let t=e.data,n=_(Dn,t);if(!n.success)return{code:"error",message:"Invalid intent data",issues:n.issues.map(m=>m.message)};let{productId:i,variantId:o,quantity:a,tags:u}=n.output,l=await this.swish.storefront.loadSaveIntentData({productId:w("Product",i),variantId:o?w("ProductVariant",o):void 0});if(l.errors)return{code:"error",message:l.errors.message??"Failed to load save intent data",issues:l.errors.graphQLErrors?.map(m=>m.message)??[]};if(!l.data||!l.data.product)return{code:"error",message:"Failed to load save intent data",issues:["API response missing data"]};let{product:c}=l.data,p=c.variantsCount?.count&&c.variantsCount.count>1;if(!p||!this.options.save.requireVariant){let m=s(()=>!p&&c.selectedOrFirstAvailableVariant?Number(R(c.selectedOrFirstAvailableVariant.id)):o,"variantIdToUse"),h=await this.swish.api.items.create({productId:i,variantId:m(),quantity:a,tags:u});if("error"in h)return{code:"error",message:"Failed to create item",issues:[h.error.message]};if(!h.data)return{code:"error",message:"Could not complete item creation",issues:["API response missing data"]};let D="variant"in l.data?l.data.variant:void 0,y={code:"ok",data:{item:h.data,product:c,variant:p?D:c.selectedOrFirstAvailableVariant}};return this.eventBus.dispatchEvent(new CustomEvent("create:swish/Item",{detail:y})),y}let d=await new ae(this.swish,this.ui,this.eventBus,this.options).invoke({action:"edit",type:"swish/ItemVariant",data:{productId:i,variantId:o}});return this.eventBus.dispatchEvent(new CustomEvent("create:swish/Item",{detail:d})),d}};var Ie=class extends E{static{s(this,"CreateListHandler")}async invoke(e){return new Promise(t=>{this.ui.showListEditor({onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async n=>{let{list:i}=n;t({code:"ok",data:{list:i}})},"onSubmit")})})}};var Pn=A({itemId:b()}),we=class extends E{static{s(this,"DeleteItemHandler")}async invoke(e){return new Promise(async t=>{let n=_(Pn,e.data);if(!n.success){t({code:"error",message:"Invalid intent data",issues:n.issues.map(o=>o.message)});return}let{itemId:i}=n.output;if(!this.options.unsave.requireConfirmation){let o=await this.swish.api.items.deleteById(i);if("error"in o){t({code:"error",message:"Failed to delete item",issues:[o.error.message]});return}t({code:"ok",data:{itemId:i}});return}this.ui.showUnsaveAlert({itemId:i,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(()=>{t({code:"ok",data:{itemId:i}})},"onSubmit")})})}};var Tn=A({listId:b()}),be=class extends E{static{s(this,"DeleteListHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(Tn,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showDeleteListAlert({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async()=>{t({code:"ok",data:{listId:o}})},"onSubmit")})})}};var _n=A({itemId:b()}),Ee=class extends E{static{s(this,"EditItemListsHandler")}async invoke(e,t=!1){return new Promise(n=>{let i=e.data,o=_(_n,i);if(!o.success){n({code:"error",message:"Invalid intent data",issues:o.issues.map(u=>u.message)});return}let{itemId:a}=o.output;this.ui.showListSelect({itemId:a,onClose:s(()=>{n({code:"closed"})},"onClose"),onSubmit:s(async u=>{let{item:l,product:c,variant:p}=u,d={code:"ok",data:{item:l,product:c,variant:p}};t||this.eventBus.dispatchEvent(new CustomEvent("edit:swish/ItemLists",{detail:d})),n(d)},"onSubmit"),onUnsave(u){let l={code:"ok",data:{itemId:u.itemId}};n(l)}})})}};var On=A({listId:b()}),Ce=class extends E{static{s(this,"EditListHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(On,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showListEditor({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(async a=>{let{list:u}=a;t({code:"ok",data:{list:u}})},"onSubmit")})})}};var xe=class extends E{static{s(this,"OpenHomeHandler")}async invoke(e){return new Promise(t=>{this.ui.showDrawer({onClose:s(()=>{t({code:"closed"})},"onClose")})})}};var Ln=A({listId:b()}),Se=class extends E{static{s(this,"OpenListMenuHandler")}async invoke(e){return new Promise(t=>{let n=e.data,i=_(Ln,n);if(!i.success){t({code:"error",message:"Invalid intent data",issues:i.issues.map(a=>a.message)});return}let{listId:o}=i.output;this.ui.showListMenu({listId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onEdit:s(a=>{t({code:"ok",data:a})},"onEdit"),onDelete:s(()=>{t({code:"ok",data:{listId:o}})},"onDelete")})})}};var Xs=A({returnTo:N(b())}),Ae=class extends E{static{s(this,"OpenSignInHandler")}async invoke(e){return new Promise(t=>{this.ui.showSignIn({returnTo:e.data?.returnTo,onClose:s(()=>{t({code:"closed"})},"onClose")})})}};var $n=A({productId:b(),variantId:N(b())}),ke=class extends E{static{s(this,"OpenQuickBuyHandler")}async invoke(e){return new Promise(t=>{let n=_($n,e.data);if(!n.success){t({code:"error",message:"Invalid intent data",issues:n.issues.map(a=>a.message)});return}let{productId:i,variantId:o}=n.output;this.ui.showQuickBuy({productId:i,variantId:o,onClose:s(()=>{t({code:"closed"})},"onClose"),onSubmit:s(a=>{t({code:"ok",data:a})},"onSubmit")})})}};var ue=class{constructor(e,t,n){this.swish=e;this.ui=t;this.options=n}static{s(this,"IntentHook")}};var Re=class extends ue{static{s(this,"AfterCreateItemHook")}async invoke(e){if(this.options.save.showToast&&e.code==="ok"){let{item:t,product:n,variant:i}=e.data;n&&this.ui.showToast({title:"Saved",text:n.title,image:i?.image?.url??n.featuredImage?.url,action:{label:"Add to List",onClick:s(()=>{this.swish.intents.invoke({action:"edit",type:"swish/ItemLists",data:{itemId:t.id}})},"onClick")}})}}};var De=class extends ue{static{s(this,"AfterEditItemListsHook")}async invoke(e){if(this.options.edit.showToast&&e.code==="ok"){if("itemId"in e.data)return;let{product:t,variant:n}=e.data;t&&this.ui.showToast({title:"Saved",text:t.title,image:n?.image?.url??t.featuredImage?.url,action:{label:"View",onClick:s(()=>{this.swish.intents.invoke({action:"open",type:"swish/Home"})},"onClick")}})}}};var Pe=class{static{s(this,"Intents")}constructor(e,t){this.swish=e,this.ui=t,this.eventBus=new EventTarget,this.options=e.options.swishUi.intents,this.initIntentHooks(),this.initIntentWatcher()}publishAnalyticsEvent(e,t){typeof window.Shopify?.analytics?.publish=="function"&&window.Shopify.analytics.publish(e,t)}async invoke(e){let t=this.parseIntent(e),n=this.getIntentQuery(t),i={lifecycle:"before",intent:t};return this.publishAnalyticsEvent("swish-intent",i),this.publishAnalyticsEvent(`swish-intent=${n}`,i),{intent:t,complete:this.handleIntent(t).then(o=>{let a={lifecycle:"after",intent:t,response:o};return this.publishAnalyticsEvent("swish-intent",a),this.publishAnalyticsEvent(`swish-intent=${n}`,a),o})}}listen(e,t){let n=this.getIntentQuery(e),i=s(a=>{"detail"in a&&a.detail?t(a.detail):console.warn("Intent response event without detail",a)},"eventListener"),o=s(()=>{this.eventBus.removeEventListener(n,i)},"unsubscribe");return this.eventBus.addEventListener(n,i),o}getIntentQuery(e){return`${e.action}:${e.type}`}parseIntent(e){if(typeof e=="string"){let[t,...n]=e.split(","),[i,o]=t.split(":"),a=n.reduce((u,l)=>{let[c,p]=l.split("=");return u[c]=p,u},{});return{action:i,type:o,data:a}}return e}async handleIntent(e){return e.action==="create"&&e.type==="swish/Item"?new ge(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="delete"&&e.type==="swish/Item"?new we(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/ItemVariant"?new ae(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/ItemLists"?new Ee(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="create"&&e.type==="swish/List"?new Ie(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="edit"&&e.type==="swish/List"?new Ce(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="delete"&&e.type==="swish/List"?new be(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/Home"?new xe(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/ListMenu"?new Se(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/SignIn"?new Ae(this.swish,this.ui,this.eventBus,this.options).invoke(e):e.action==="open"&&e.type==="swish/QuickBuy"?new ke(this.swish,this.ui,this.eventBus,this.options).invoke(e):{code:"error",message:"Invalid intent",issues:["Invalid intent"]}}initIntentHooks(){this.eventBus.addEventListener("create:swish/Item",e=>{new Re(this.swish,this.ui,this.options).invoke(e.detail)}),this.eventBus.addEventListener("edit:swish/ItemLists",e=>{new De(this.swish,this.ui,this.options).invoke(e.detail)})}initIntentWatcher(){pe({selector:"[swish-intent]",onElementFound:s(e=>{let t=this.parseIntent(e.getAttribute("swish-intent"));t&&e.addEventListener("click",()=>{this.invoke(t)})},"onElementFound")}),pe({selector:"a[href*='swish-intent=']",onElementFound:s(e=>{e instanceof HTMLAnchorElement&&e.addEventListener("click",t=>{if(!t.metaKey&&!t.ctrlKey&&!t.shiftKey&&!t.altKey){let i=new URL(e.href).searchParams.get("swish-intent");if(i){let o=this.parseIntent(i);o&&(t.preventDefault(),t.stopPropagation(),this.invoke(o))}}})},"onElementFound")}),oe({fireOnInit:!0,onLocationChange:s(e=>{let t=new URLSearchParams(window.location.search).get("swish-intent");if(t){let n=this.parseIntent(t);if(n){this.invoke(n);let i=new URL(window.location.href);i.searchParams.delete("swish-intent"),window.history.replaceState({},document.title,i.toString())}}},"onLocationChange")})}};var Bn=Symbol.for("preact-signals");function _e(){if(K>1)K--;else{for(var r,e=!1;fe!==void 0;){var t=fe;for(fe=void 0,Ye++;t!==void 0;){var n=t.o;if(t.o=void 0,t.f&=-3,!(8&t.f)&&Ft(t))try{t.c()}catch(i){e||(r=i,e=!0)}t=n}}if(Ye=0,K--,e)throw r}}s(_e,"t");function Y(r){if(K>0)return r();K++;try{return r()}finally{_e()}}s(Y,"r");var g=void 0;function Mt(r){var e=g;g=void 0;try{return r()}finally{g=e}}s(Mt,"n");var fe=void 0,K=0,Ye=0,Te=0;function jt(r){if(g!==void 0){var e=r.n;if(e===void 0||e.t!==g)return e={i:0,S:r,p:g.s,n:void 0,t:g,e:void 0,x:void 0,r:e},g.s!==void 0&&(g.s.n=e),g.s=e,r.n=e,32&g.f&&r.S(e),e;if(e.i===-1)return e.i=0,e.n!==void 0&&(e.n.p=e.p,e.p!==void 0&&(e.p.n=e.n),e.p=g.s,e.n=void 0,g.s.n=e,g.s=e),e}}s(jt,"e");function L(r,e){this.v=r,this.i=0,this.n=void 0,this.t=void 0,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}s(L,"u");L.prototype.brand=Bn;L.prototype.h=function(){return!0};L.prototype.S=function(r){var e=this,t=this.t;t!==r&&r.e===void 0&&(r.x=t,this.t=r,t!==void 0?t.e=r:Mt(function(){var n;(n=e.W)==null||n.call(e)}))};L.prototype.U=function(r){var e=this;if(this.t!==void 0){var t=r.e,n=r.x;t!==void 0&&(t.x=n,r.e=void 0),n!==void 0&&(n.e=t,r.x=void 0),r===this.t&&(this.t=n,n===void 0&&Mt(function(){var i;(i=e.Z)==null||i.call(e)}))}};L.prototype.subscribe=function(r){var e=this;return V(function(){var t=e.value,n=g;g=void 0;try{r(t)}finally{g=n}},{name:"sub"})};L.prototype.valueOf=function(){return this.value};L.prototype.toString=function(){return this.value+""};L.prototype.toJSON=function(){return this.value};L.prototype.peek=function(){var r=g;g=void 0;try{return this.value}finally{g=r}};Object.defineProperty(L.prototype,"value",{get:s(function(){var r=jt(this);return r!==void 0&&(r.i=this.i),this.v},"get"),set:s(function(r){if(r!==this.v){if(Ye>100)throw new Error("Cycle detected");this.v=r,this.i++,Te++,K++;try{for(var e=this.t;e!==void 0;e=e.x)e.t.N()}finally{_e()}}},"set")});function C(r,e){return new L(r,e)}s(C,"d");function Ft(r){for(var e=r.s;e!==void 0;e=e.n)if(e.S.i!==e.i||!e.S.h()||e.S.i!==e.i)return!0;return!1}s(Ft,"c");function Ht(r){for(var e=r.s;e!==void 0;e=e.n){var t=e.S.n;if(t!==void 0&&(e.r=t),e.S.n=e,e.i=-1,e.n===void 0){r.s=e;break}}}s(Ht,"a");function Qt(r){for(var e=r.s,t=void 0;e!==void 0;){var n=e.p;e.i===-1?(e.S.U(e),n!==void 0&&(n.n=e.n),e.n!==void 0&&(e.n.p=n)):t=e,e.S.n=e.r,e.r!==void 0&&(e.r=void 0),e=n}r.s=t}s(Qt,"l");function te(r,e){L.call(this,void 0),this.x=r,this.s=void 0,this.g=Te-1,this.f=4,this.W=e?.watched,this.Z=e?.unwatched,this.name=e?.name}s(te,"y");te.prototype=new L;te.prototype.h=function(){if(this.f&=-3,1&this.f)return!1;if((36&this.f)==32||(this.f&=-5,this.g===Te))return!0;if(this.g=Te,this.f|=1,this.i>0&&!Ft(this))return this.f&=-2,!0;var r=g;try{Ht(this),g=this;var e=this.x();(16&this.f||this.v!==e||this.i===0)&&(this.v=e,this.f&=-17,this.i++)}catch(t){this.v=t,this.f|=16,this.i++}return g=r,Qt(this),this.f&=-2,!0};te.prototype.S=function(r){if(this.t===void 0){this.f|=36;for(var e=this.s;e!==void 0;e=e.n)e.S.S(e)}L.prototype.S.call(this,r)};te.prototype.U=function(r){if(this.t!==void 0&&(L.prototype.U.call(this,r),this.t===void 0)){this.f&=-33;for(var e=this.s;e!==void 0;e=e.n)e.S.U(e)}};te.prototype.N=function(){if(!(2&this.f)){this.f|=6;for(var r=this.t;r!==void 0;r=r.x)r.t.N()}};Object.defineProperty(te.prototype,"value",{get:s(function(){if(1&this.f)throw new Error("Cycle detected");var r=jt(this);if(this.h(),r!==void 0&&(r.i=this.i),16&this.f)throw this.v;return this.v},"get")});function B(r,e){return new te(r,e)}s(B,"w");function zt(r){var e=r.u;if(r.u=void 0,typeof e=="function"){K++;var t=g;g=void 0;try{e()}catch(n){throw r.f&=-2,r.f|=8,Je(r),n}finally{g=t,_e()}}}s(zt,"_");function Je(r){for(var e=r.s;e!==void 0;e=e.n)e.S.U(e);r.x=void 0,r.s=void 0,zt(r)}s(Je,"b");function qn(r){if(g!==this)throw new Error("Out-of-order effect");Qt(this),g=r,this.f&=-2,8&this.f&&Je(this),_e()}s(qn,"g");function le(r,e){this.x=r,this.u=void 0,this.s=void 0,this.o=void 0,this.f=32,this.name=e?.name}s(le,"p");le.prototype.c=function(){var r=this.S();try{if(8&this.f||this.x===void 0)return;var e=this.x();typeof e=="function"&&(this.u=e)}finally{r()}};le.prototype.S=function(){if(1&this.f)throw new Error("Cycle detected");this.f|=1,this.f&=-9,zt(this),Ht(this),K++;var r=g;return g=this,qn.bind(this,r)};le.prototype.N=function(){2&this.f||(this.f|=2,this.o=fe,fe=this)};le.prototype.d=function(){this.f|=8,1&this.f||Je(this)};le.prototype.dispose=function(){this.d()};function V(r,e){var t=new le(r,e);try{t.c()}catch(i){throw t.d(),i}var n=t.d.bind(t);return n[Symbol.dispose]=n,n}s(V,"E");var Vn=/\/products\/([^/?#]+)(?:\?(?:[^#]*?&)?variant=(\d+))?/,Ze=s(r=>{let e=r.match(Vn);return e?{productHandle:e[1],variantId:e[2]}:null},"parseProductUrl"),Wt=s(({source:r,onProductUrlChange:e})=>{let t=s(n=>{let i=Ze(n);i?.productHandle&&e(i)},"handleChange");if(r instanceof HTMLAnchorElement)return Vt({element:r,onHrefChange:s(n=>t(n),"onHrefChange")});if(r instanceof Location)return oe({onLocationChange:s(n=>t(n.href),"onLocationChange")});throw new Error("Invalid source for observing product url")},"observeProductUrl");var Xt=s(r=>e=>{let{productHandle:t,productId:n,variantId:i,itemId:o}=e?.dataset??{},l=!!(n||t)||!!o,c=C({loading:!1,productId:n,variantId:i,itemId:o});if(!l){let p=e instanceof HTMLAnchorElement?e:window.location,d=Ze(p.href);d?.productHandle&&d.productHandle!==c.value.productHandle&&(c.value={...c.value,...d,productId:void 0},Wt({source:p,onProductUrlChange:s(m=>{c.value={...c.value,...m,productId:m.productHandle!==c.value.productHandle?void 0:c.value.productId}},"onProductUrlChange")}))}return V(()=>{c.value.loading||!c.value.productId&&c.value.productHandle&&(c.value={...c.value,loading:!0},r.storefront.loadProductId({productHandle:c.value.productHandle}).then(p=>{p.errors&&console.error("Error loading product id",p.errors),c.value={...c.value,productId:p.data?.product?.id?R(p.data.product.id):void 0,loading:!1}}))}),c},"itemContextSignal");var Kt=s(r=>e=>{let t=B(()=>{let{productId:I,variantId:v,loading:P}=e.value;return!I||P?null:v?`variant:${R(v)}`:`product:${R(I)}`}),n=B(()=>e.value.loading||!!e.value.itemId||!e.value.productId),i=B(()=>({limit:1,query:t.value??void 0})),o=C(!n.value),a=C(null),u=C(!1),l=C(!1),{data:c,loading:p,error:d,refetching:m}=r.state.swishQuery(I=>r.api.items.list(I),{refetch:["item-create","item-update","item-delete"],variables:i,skip:n}),h=C(e.value.itemId??null);V(()=>{Y(()=>{if(o.value=p.value,a.value=d.value,!e.value.itemId){let I=c.value?.[0]?.id??null;I!==h.value&&(h.value=I)}})});async function D(){if(!h.value)return;u.value=!0,(await(await r.intents.invoke({action:"delete",type:"swish/Item",data:{itemId:h.value}})).complete).code==="ok"&&(h.value=null),u.value=!1}s(D,"unsave");async function y(){if(!h.value)return;u.value=!0;let v=await(await r.intents.invoke({action:"edit",type:"swish/ItemLists",data:{itemId:h.value}})).complete;v.code==="ok"&&"itemId"in v.data&&(h.value=null),u.value=!1}s(y,"update");async function S(){let{productId:I,variantId:v}=e.value;if(!I)return;u.value=!0,l.value=!0;let T=await(await r.intents.invoke({action:"create",type:"swish/Item",data:{productId:I,variantId:v}})).complete;if(T.code==="ok"){let ce=T.data;h.value=ce.item.id,u.value=!1}else T.code==="error"&&console.warn("Failed to create item",T),Y(()=>{u.value=!1,l.value=!1})}s(S,"save");let O=B(()=>o.value||u.value||e.value.loading);V(()=>{l.value&&!u.value&&!m.value&&(l.value=!1)});let k=B(()=>{let I=m.value&&l.value,v=!!h.value,P=!v&&(u.value||I),T=v&&(u.value||I),ce=B(()=>P?"saving":T?"unsaving":v?"saved":"unsaved");return{error:a.value,status:ce.value,savedItemId:h.value,loading:O.value,submitting:u.value,saved:v,saving:P,unsaving:T}});async function F(){O.value||(k.value.saved&&k.value.savedItemId?y():k.value.saved||await S())}return s(F,"toggle"),Object.assign(k,{save:S,unsave:D,update:y,toggle:F})},"itemStateSignal");var Yt=s(r=>()=>{let{data:e,loading:t,error:n}=r.state.swishQuery(()=>r.api.items.count(),{refetch:["item-create","item-delete"]}),i=C(0),o=C(!0),a=C(null);return V(()=>{Y(()=>{o.value=t.value,a.value=n.value,i.value=e.value?.count??0})}),B(()=>({count:i.value,loading:o.value,error:a.value}))},"itemCountSignal");var Jt=s(r=>(e,t)=>{let n=C(null),i=C(null),o=C(null),a=C(!t?.skip),u=C(!1),l=B(()=>a.value&&u.value);async function c(){if(!t?.skip?.value)try{a.value=!0;let p=await e(t?.variables?.value);Y(()=>{o.value="error"in p?p.error:null,n.value="data"in p?p.data:null,i.value="pageInfo"in p?p.pageInfo:null,a.value=!1,u.value=!0})}catch(p){Y(()=>{o.value=p,a.value=!1,u.value=!0})}}return s(c,"executeFetch"),V(()=>{if(c(),t?.refetch?.length)return r.events.subscribe(t.refetch,c)}),{data:n,pageInfo:i,error:o,loading:a,refetching:l}},"swishQuerySignals");var re="GraphQL Client";var et="An error occurred while fetching from the API. Review 'graphQLErrors' for details.",tt="Response returned unexpected Content-Type:",rt="An unknown error has occurred. The API did not return a data object or any errors in its response.",Oe={json:"application/json",multipart:"multipart/mixed"},nt="X-SDK-Variant",it="X-SDK-Version",er="shopify-graphql-client",tr="1.4.1",Le=1e3,rr=[429,503],st=/@(defer)\b/i,Zt=`\r
|
|
8
|
+
`,nr=/boundary="?([^=";]+)"?/i,ot=Zt+Zt;function H(r,e=re){return r.startsWith(`${e}`)?r:`${e}: ${r}`}s(H,"formatErrorMessage");function W(r){return r instanceof Error?r.message:JSON.stringify(r)}s(W,"getErrorMessage");function at(r){return r instanceof Error&&r.cause?r.cause:void 0}s(at,"getErrorCause");function ut(r){return r.flatMap(({errors:e})=>e??[])}s(ut,"combineErrors");function $e({client:r,retries:e}){if(e!==void 0&&(typeof e!="number"||e<0||e>3))throw new Error(`${r}: The provided "retries" value (${e}) is invalid - it cannot be less than ${0} or greater than ${3}`)}s($e,"validateRetries");function $(r,e){return e&&(typeof e!="object"||Array.isArray(e)||typeof e=="object"&&Object.keys(e).length>0)?{[r]:e}:{}}s($,"getKeyValueIfValid");function lt(r,e){if(r.length===0)return e;let n={[r.pop()]:e};return r.length===0?n:lt(r,n)}s(lt,"buildDataObjectByPath");function or(r,e){return Object.keys(e||{}).reduce((t,n)=>(typeof e[n]=="object"||Array.isArray(e[n]))&&r[n]?(t[n]=or(r[n],e[n]),t):(t[n]=e[n],t),Array.isArray(r)?[...r]:{...r})}s(or,"combineObjects");function ct([r,...e]){return e.reduce(or,{...r})}s(ct,"buildCombinedDataObject");function pt({clientLogger:r,customFetchApi:e=fetch,client:t=re,defaultRetryWaitTime:n=Le,retriableCodes:i=rr}){let o=s(async(a,u,l)=>{let c=u+1,p=l+1,d;try{if(d=await e(...a),r({type:"HTTP-Response",content:{requestParams:a,response:d}}),!d.ok&&i.includes(d.status)&&c<=p)throw new Error;let m=d?.headers.get("X-Shopify-API-Deprecated-Reason")||"";return m&&r({type:"HTTP-Response-GraphQL-Deprecation-Notice",content:{requestParams:a,deprecationNotice:m}}),d}catch(m){if(c<=p){let h=d?.headers.get("Retry-After");return await Un(h?parseInt(h,10):n),r({type:"HTTP-Retry",content:{requestParams:a,lastResponse:d,retryAttempt:u,maxRetries:l}}),o(a,c,l)}throw new Error(H(`${l>0?`Attempted maximum number of ${l} network retries. Last message - `:""}${W(m)}`,t))}},"httpFetch");return o}s(pt,"generateHttpFetch");async function Un(r){return new Promise(e=>setTimeout(e,r))}s(Un,"sleep");function ft({headers:r,url:e,customFetchApi:t=fetch,retries:n=0,logger:i}){$e({client:re,retries:n});let o={headers:r,url:e,retries:n},a=Nn(i),u=pt({customFetchApi:t,clientLogger:a,defaultRetryWaitTime:Le}),l=Gn(u,o),c=Mn(l),p=Xn(l);return{config:o,fetch:l,request:c,requestStream:p}}s(ft,"createGraphQLClient");function Nn(r){return e=>{r&&r(e)}}s(Nn,"generateClientLogger");async function ar(r){let{errors:e,data:t,extensions:n}=await r.json();return{...$("data",t),...$("extensions",n),headers:r.headers,...e||!t?{errors:{networkStatusCode:r.status,message:H(e?et:rt),...$("graphQLErrors",e),response:r}}:{}}}s(ar,"processJSONResponse");function Gn(r,{url:e,headers:t,retries:n}){return async(i,o={})=>{let{variables:a,headers:u,url:l,retries:c,keepalive:p,signal:d}=o,m=JSON.stringify({query:i,variables:a});$e({client:re,retries:c});let h=Object.entries({...t,...u}).reduce((y,[S,O])=>(y[S]=Array.isArray(O)?O.join(", "):O.toString(),y),{});return!h[nt]&&!h[it]&&(h[nt]=er,h[it]=tr),r([l??e,{method:"POST",headers:h,body:m,signal:d,keepalive:p}],1,c??n)}}s(Gn,"generateFetch");function Mn(r){return async(...e)=>{if(st.test(e[0]))throw new Error(H("This operation will result in a streamable response - use requestStream() instead."));let t=null;try{t=await r(...e);let{status:n,statusText:i}=t,o=t.headers.get("content-type")||"";return t.ok?o.includes(Oe.json)?await ar(t):{errors:{networkStatusCode:n,message:H(`${tt} ${o}`),response:t}}:{errors:{networkStatusCode:n,message:H(i),response:t}}}catch(n){return{errors:{message:W(n),...t==null?{}:{networkStatusCode:t.status,response:t}}}}}}s(Mn,"generateRequest");async function*jn(r){let e=new TextDecoder;if(r.body[Symbol.asyncIterator])for await(let t of r.body)yield e.decode(t);else{let t=r.body.getReader(),n;try{for(;!(n=await t.read()).done;)yield e.decode(n.value)}finally{t.cancel()}}}s(jn,"getStreamBodyIterator");function Fn(r,e){return{async*[Symbol.asyncIterator](){try{let t="";for await(let n of r)if(t+=n,t.indexOf(e)>-1){let i=t.lastIndexOf(e),a=t.slice(0,i).split(e).filter(u=>u.trim().length>0).map(u=>u.slice(u.indexOf(ot)+ot.length).trim());a.length>0&&(yield a),t=t.slice(i+e.length),t.trim()==="--"&&(t="")}}catch(t){throw new Error(`Error occured while processing stream payload - ${W(t)}`)}}}}s(Fn,"readStreamChunk");function Hn(r){return{async*[Symbol.asyncIterator](){yield{...await ar(r),hasNext:!1}}}}s(Hn,"createJsonResponseAsyncIterator");function Qn(r){return r.map(e=>{try{return JSON.parse(e)}catch(t){throw new Error(`Error in parsing multipart response - ${W(t)}`)}}).map(e=>{let{data:t,incremental:n,hasNext:i,extensions:o,errors:a}=e;if(!n)return{data:t||{},...$("errors",a),...$("extensions",o),hasNext:i};let u=n.map(({data:l,path:c,errors:p})=>({data:l&&c?lt(c,l):{},...$("errors",p)}));return{data:u.length===1?u[0].data:ct([...u.map(({data:l})=>l)]),...$("errors",ut(u)),hasNext:i}})}s(Qn,"getResponseDataFromChunkBodies");function zn(r,e){if(r.length>0)throw new Error(et,{cause:{graphQLErrors:r}});if(Object.keys(e).length===0)throw new Error(rt)}s(zn,"validateResponseData");function Wn(r,e){let t=(e??"").match(nr),n=`--${t?t[1]:"-"}`;if(!r.body?.getReader&&!r.body?.[Symbol.asyncIterator])throw new Error("API multipart response did not return an iterable body",{cause:r});let i=jn(r),o={},a;return{async*[Symbol.asyncIterator](){try{let u=!0;for await(let l of Fn(i,n)){let c=Qn(l);a=c.find(d=>d.extensions)?.extensions??a;let p=ut(c);o=ct([o,...c.map(({data:d})=>d)]),u=c.slice(-1)[0].hasNext,zn(p,o),yield{...$("data",o),...$("extensions",a),hasNext:u}}if(u)throw new Error("Response stream terminated unexpectedly")}catch(u){let l=at(u);yield{...$("data",o),...$("extensions",a),errors:{message:H(W(u)),networkStatusCode:r.status,...$("graphQLErrors",l?.graphQLErrors),response:r},hasNext:!1}}}}}s(Wn,"createMultipartResponseAsyncInterator");function Xn(r){return async(...e)=>{if(!st.test(e[0]))throw new Error(H("This operation does not result in a streamable response - use request() instead."));try{let t=await r(...e),{statusText:n}=t;if(!t.ok)throw new Error(n,{cause:t});let i=t.headers.get("content-type")||"";switch(!0){case i.includes(Oe.json):return Hn(t);case i.includes(Oe.multipart):return Wn(t,i);default:throw new Error(`${tt} ${i}`,{cause:t})}}catch(t){return{async*[Symbol.asyncIterator](){let n=at(t);yield{errors:{message:H(W(t)),...$("networkStatusCode",n?.status),...$("response",n)},hasNext:!1}}}}}}s(Xn,"generateRequestStream");function dt({client:r,storeDomain:e}){try{if(!e||typeof e!="string")throw new Error;let t=e.trim(),n=t.match(/^https?:/)?t:`https://${t}`,i=new URL(n);return i.protocol="https",i.origin}catch(t){throw new Error(`${r}: a valid store domain ("${e}") must be provided`,{cause:t})}}s(dt,"validateDomainAndGetStoreUrl");function Be({client:r,currentSupportedApiVersions:e,apiVersion:t,logger:n}){let i=`${r}: the provided apiVersion ("${t}")`,o=`Currently supported API versions: ${e.join(", ")}`;if(!t||typeof t!="string")throw new Error(`${i} is invalid. ${o}`);let a=t.trim();e.includes(a)||(n?n({type:"Unsupported_Api_Version",content:{apiVersion:t,supportedApiVersions:e}}):console.warn(`${i} is likely deprecated or not supported. ${o}`))}s(Be,"validateApiVersion");function qe(r){let e=r*3-2;return e===10?e:`0${e}`}s(qe,"getQuarterMonth");function ht(r,e,t){let n=e-t;return n<=0?`${r-1}-${qe(n+4)}`:`${r}-${qe(n)}`}s(ht,"getPrevousVersion");function ur(){let r=new Date,e=r.getUTCMonth(),t=r.getUTCFullYear(),n=Math.floor(e/3+1);return{year:t,quarter:n,version:`${t}-${qe(n)}`}}s(ur,"getCurrentApiVersion");function yt(){let{year:r,quarter:e,version:t}=ur(),n=e===4?`${r+1}-01`:`${r}-${qe(e+1)}`;return[ht(r,e,3),ht(r,e,2),ht(r,e,1),t,n,"unstable"]}s(yt,"getCurrentSupportedApiVersions");function mt(r){return e=>({...e??{},...r.headers})}s(mt,"generateGetHeaders");function vt({getHeaders:r,getApiUrl:e}){return(t,n)=>{let i=[t];if(n&&Object.keys(n).length>0){let{variables:o,apiVersion:a,headers:u,retries:l,signal:c}=n;i.push({...o?{variables:o}:{},...u?{headers:r(u)}:{},...a?{url:e(a)}:{},...l?{retries:l}:{},...c?{signal:c}:{}})}return i}}s(vt,"generateGetGQLClientParams");var gt="application/json",lr="storefront-api-client",cr="1.0.9",pr="X-Shopify-Storefront-Access-Token",fr="Shopify-Storefront-Private-Token",dr="X-SDK-Variant",hr="X-SDK-Version",yr="X-SDK-Variant-Source",ne="Storefront API Client";function mr(r){if(r&&typeof window<"u")throw new Error(`${ne}: private access tokens and headers should only be used in a server-to-server implementation. Use the public API access token in nonserver environments.`)}s(mr,"validatePrivateAccessTokenUsage");function vr(r,e){if(!r&&!e)throw new Error(`${ne}: a public or private access token must be provided`);if(r&&e)throw new Error(`${ne}: only provide either a public or private access token`)}s(vr,"validateRequiredAccessTokens");function It({storeDomain:r,apiVersion:e,publicAccessToken:t,privateAccessToken:n,clientName:i,retries:o=0,customFetchApi:a,logger:u}){let l=yt(),c=dt({client:ne,storeDomain:r}),p={client:ne,currentSupportedApiVersions:l,logger:u};Be({...p,apiVersion:e}),vr(t,n),mr(n);let d=Kn(c,e,p),m={storeDomain:c,apiVersion:e,...t?{publicAccessToken:t}:{privateAccessToken:n},headers:{"Content-Type":gt,Accept:gt,[dr]:lr,[hr]:cr,...i?{[yr]:i}:{},...t?{[pr]:t}:{[fr]:n}},apiUrl:d(),clientName:i},h=ft({headers:m.headers,url:m.apiUrl,retries:o,customFetchApi:a,logger:u}),D=mt(m),y=Yn(m,d),S=vt({getHeaders:D,getApiUrl:y});return Object.freeze({config:m,getHeaders:D,getApiUrl:y,fetch:s((...k)=>h.fetch(...S(...k)),"fetch"),request:s((...k)=>h.request(...S(...k)),"request"),requestStream:s((...k)=>h.requestStream(...S(...k)),"requestStream")})}s(It,"createStorefrontApiClient");function Kn(r,e,t){return n=>{n&&Be({...t,apiVersion:n});let i=(n??e).trim();return`${r}/api/${i}/graphql.json`}}s(Kn,"generateApiUrlFormatter");function Yn(r,e){return t=>t?e(t):r.apiUrl}s(Yn,"generateGetApiUrl");var q=`
|
|
9
9
|
fragment productImageFields on Image {
|
|
10
10
|
id
|
|
11
11
|
altText
|
|
@@ -37,7 +37,7 @@ Values:
|
|
|
37
37
|
}
|
|
38
38
|
title
|
|
39
39
|
}
|
|
40
|
-
`,
|
|
40
|
+
`,de=`
|
|
41
41
|
fragment productCardDataFields on Product {
|
|
42
42
|
id
|
|
43
43
|
availableForSale
|
|
@@ -154,7 +154,7 @@ Values:
|
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
-
`,
|
|
157
|
+
`,ie=`
|
|
158
158
|
fragment productOptionsFields on Product {
|
|
159
159
|
id
|
|
160
160
|
availableForSale
|
|
@@ -209,7 +209,7 @@ Values:
|
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
${wt}
|
|
212
|
-
${
|
|
212
|
+
${q}
|
|
213
213
|
`,Ir=`
|
|
214
214
|
query GetSaveIntentDataWithVariant(
|
|
215
215
|
$productId: ID!
|
|
@@ -225,7 +225,7 @@ Values:
|
|
|
225
225
|
}
|
|
226
226
|
}
|
|
227
227
|
${wt}
|
|
228
|
-
${
|
|
228
|
+
${q}
|
|
229
229
|
`,wr=`
|
|
230
230
|
query GetProductCardData(
|
|
231
231
|
$productId: ID!
|
|
@@ -237,8 +237,8 @@ Values:
|
|
|
237
237
|
...productCardDataFields
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
|
-
${
|
|
241
|
-
${
|
|
240
|
+
${de}
|
|
241
|
+
${q}
|
|
242
242
|
`,br=`
|
|
243
243
|
query GetProductCardDataWithVariant(
|
|
244
244
|
$productId: ID!
|
|
@@ -255,9 +255,9 @@ Values:
|
|
|
255
255
|
...productVariantDataFields
|
|
256
256
|
}
|
|
257
257
|
}
|
|
258
|
-
${
|
|
258
|
+
${de}
|
|
259
259
|
${bt}
|
|
260
|
-
${
|
|
260
|
+
${q}
|
|
261
261
|
`,Er=`
|
|
262
262
|
query GetProductOptions(
|
|
263
263
|
$productId: ID!
|
|
@@ -268,8 +268,8 @@ Values:
|
|
|
268
268
|
...productOptionsFields
|
|
269
269
|
}
|
|
270
270
|
}
|
|
271
|
-
${
|
|
272
|
-
${
|
|
271
|
+
${ie}
|
|
272
|
+
${q}
|
|
273
273
|
`,Cr=`
|
|
274
274
|
query GetProductOptionsByHandle(
|
|
275
275
|
$handle: String!
|
|
@@ -280,8 +280,8 @@ Values:
|
|
|
280
280
|
...productOptionsFields
|
|
281
281
|
}
|
|
282
282
|
}
|
|
283
|
-
${
|
|
284
|
-
${
|
|
283
|
+
${ie}
|
|
284
|
+
${q}
|
|
285
285
|
`,xr=`
|
|
286
286
|
query GetProductOptionsWithVariant(
|
|
287
287
|
$productId: ID!
|
|
@@ -296,9 +296,9 @@ Values:
|
|
|
296
296
|
...productOptionsVariantFields
|
|
297
297
|
}
|
|
298
298
|
}
|
|
299
|
-
${
|
|
299
|
+
${ie}
|
|
300
300
|
${Et}
|
|
301
|
-
${
|
|
301
|
+
${q}
|
|
302
302
|
`,Sr=`
|
|
303
303
|
query GetProductOptionsByHandleWithVariant(
|
|
304
304
|
$handle: String!
|
|
@@ -313,9 +313,9 @@ Values:
|
|
|
313
313
|
...productOptionsVariantFields
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
${
|
|
316
|
+
${ie}
|
|
317
317
|
${Et}
|
|
318
|
-
${
|
|
318
|
+
${q}
|
|
319
319
|
`,Ar=`
|
|
320
320
|
query GetSelectedVariant(
|
|
321
321
|
$productId: ID!
|
|
@@ -328,7 +328,7 @@ Values:
|
|
|
328
328
|
}
|
|
329
329
|
}
|
|
330
330
|
${Ct}
|
|
331
|
-
${
|
|
331
|
+
${q}
|
|
332
332
|
`,kr=`
|
|
333
333
|
query GetSelectedVariantByHandle(
|
|
334
334
|
$handle: String!
|
|
@@ -341,7 +341,7 @@ Values:
|
|
|
341
341
|
}
|
|
342
342
|
}
|
|
343
343
|
${Ct}
|
|
344
|
-
${
|
|
344
|
+
${q}
|
|
345
345
|
`,Rr=`
|
|
346
346
|
query GetProductDetailData(
|
|
347
347
|
$productId: ID!
|
|
@@ -355,10 +355,10 @@ Values:
|
|
|
355
355
|
...productImagesFields
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
|
+
${de}
|
|
358
359
|
${ie}
|
|
359
|
-
${se}
|
|
360
360
|
${xt}
|
|
361
|
-
${
|
|
361
|
+
${q}
|
|
362
362
|
`,Dr=`
|
|
363
363
|
query GetProductDetailDataWithVariant(
|
|
364
364
|
$productId: ID!
|
|
@@ -377,11 +377,11 @@ Values:
|
|
|
377
377
|
...productVariantDataFields
|
|
378
378
|
}
|
|
379
379
|
}
|
|
380
|
+
${de}
|
|
380
381
|
${ie}
|
|
381
|
-
${se}
|
|
382
382
|
${bt}
|
|
383
383
|
${xt}
|
|
384
|
-
${
|
|
384
|
+
${q}
|
|
385
385
|
`,Pr=`
|
|
386
386
|
query GetProductImagesById(
|
|
387
387
|
$ids: [ID!]!
|
|
@@ -406,46 +406,40 @@ Values:
|
|
|
406
406
|
}
|
|
407
407
|
}
|
|
408
408
|
}
|
|
409
|
-
${
|
|
409
|
+
${q}
|
|
410
410
|
`,Tr=`
|
|
411
411
|
query GetProductRecommendationsById(
|
|
412
412
|
$productId: ID!
|
|
413
413
|
$intent: ProductRecommendationIntent
|
|
414
|
-
$productMetafields: [HasMetafieldsIdentifier!]!
|
|
415
414
|
$country: CountryCode!
|
|
416
415
|
$language: LanguageCode!
|
|
417
416
|
) @inContext(country: $country, language: $language) {
|
|
418
417
|
productRecommendations(productId: $productId, intent: $intent) {
|
|
419
|
-
|
|
418
|
+
id
|
|
420
419
|
}
|
|
421
420
|
}
|
|
422
|
-
${ie}
|
|
423
|
-
${O}
|
|
424
421
|
`,_r=`
|
|
425
422
|
query GetProductRecommendationsByHandle(
|
|
426
423
|
$handle: String!
|
|
427
424
|
$intent: ProductRecommendationIntent
|
|
428
|
-
$productMetafields: [HasMetafieldsIdentifier!]!
|
|
429
425
|
$country: CountryCode!
|
|
430
426
|
$language: LanguageCode!
|
|
431
427
|
) @inContext(country: $country, language: $language) {
|
|
432
428
|
productRecommendations(productHandle: $handle, intent: $intent) {
|
|
433
|
-
|
|
429
|
+
id
|
|
434
430
|
}
|
|
435
431
|
}
|
|
436
|
-
${ie}
|
|
437
|
-
${O}
|
|
438
432
|
`,Or=`
|
|
439
433
|
query GetProductIdByHandle($handle: String!) {
|
|
440
434
|
product(handle: $handle) {
|
|
441
435
|
id
|
|
442
436
|
}
|
|
443
437
|
}
|
|
444
|
-
`;var Lr=s(async(r,{productId:e,variantId:t,productMetafields:n=[],variantMetafields:i=[],country:o,language:a})=>{if(!e)throw new Error("A productId must be provided");let u=s(()=>{if(e&&!t)return wr;if(e&&t)return br},"getProductOptionsQuery"),l=s(()=>{if(e&&!t)return{productId:w("Product",e),productMetafields:n,country:o,language:a};if(e&&t)return{productId:w("Product",e),variantId:w("ProductVariant",t),productMetafields:n,variantMetafields:i,country:o,language:a}},"getVariables"),c=u(),p=l();if(!p||!c)throw new Error("Invalid query arguments");return r.query(c,p)},"loadProductCardData");var $r=s(async(r,{productId:e,variantId:t,productMetafields:n=[],variantMetafields:i=[],country:o,language:a})=>{if(!e)throw new Error("A productId must be provided");let u=s(()=>{if(e&&!t)return Rr;if(e&&t)return Dr},"getProductOptionsQuery"),l=s(()=>{if(e&&!t)return{productId:w("Product",e),productMetafields:n,country:o,language:a};if(e&&t)return{productId:w("Product",e),variantId:w("ProductVariant",t),productMetafields:n,variantMetafields:i,country:o,language:a}},"getVariables"),c=u(),p=l();if(!p||!c)throw new Error("Invalid query arguments");return r.query(c,p)},"loadProductDetailData");var Br=s(async(r,{productHandle:e})=>{if(!e)throw new Error("A product handle must be provided");return r.query(Or,{handle:e})},"loadProductId");var qr=s(async(r,{items:e,country:t,language:n})=>{if(!e?.length)throw new Error("A list of items must be provided");let i={ids:e.map(o=>o.variantId?w("ProductVariant",o.variantId.toString()):w("Product",o.productId.toString())),country:t,language:n};try{return{data:(await r.query(Pr,i)).data?.nodes.map(u=>u===null?null:"image"in u?u.image:"featuredImage"in u?u.featuredImage:null).filter(u=>u!==null)??[],error:null}}catch(o){return console.error(o),{data:null,error:o}}},"loadProductImages");var Vr=s(async(r,{productId:e,productHandle:t,variantId:n,country:i,language:o})=>{if(!e&&!t)throw new Error("Either productId or handle must be provided");let a=s(()=>{if(e&&!n)return Er;if(t&&!n)return Cr;if(e&&n)return xr;if(t&&n)return Sr},"getProductOptionsQuery"),u=s(()=>{if(e&&!n)return{productId:w("Product",e),country:i,language:o};if(t&&!n)return{handle:t,country:i,language:o};if(e&&n)return{productId:w("Product",e),variantId:w("ProductVariant",n),country:i,language:o};if(t&&n)return{handle:t,variantId:w("ProductVariant",n),country:i,language:o}},"getVariables"),l=a(),c=u();if(!c||!l)throw new Error("Invalid query arguments");return r.query(l,c)},"loadProductOptions");var Ur=s(async(r,{productId:e,productHandle:t,intent:n,
|
|
438
|
+
`;var Lr=s(async(r,{productId:e,variantId:t,productMetafields:n=[],variantMetafields:i=[],country:o,language:a})=>{if(!e)throw new Error("A productId must be provided");let u=s(()=>{if(e&&!t)return wr;if(e&&t)return br},"getProductOptionsQuery"),l=s(()=>{if(e&&!t)return{productId:w("Product",e),productMetafields:n,country:o,language:a};if(e&&t)return{productId:w("Product",e),variantId:w("ProductVariant",t),productMetafields:n,variantMetafields:i,country:o,language:a}},"getVariables"),c=u(),p=l();if(!p||!c)throw new Error("Invalid query arguments");return r.query(c,p)},"loadProductCardData");var $r=s(async(r,{productId:e,variantId:t,productMetafields:n=[],variantMetafields:i=[],country:o,language:a})=>{if(!e)throw new Error("A productId must be provided");let u=s(()=>{if(e&&!t)return Rr;if(e&&t)return Dr},"getProductOptionsQuery"),l=s(()=>{if(e&&!t)return{productId:w("Product",e),productMetafields:n,country:o,language:a};if(e&&t)return{productId:w("Product",e),variantId:w("ProductVariant",t),productMetafields:n,variantMetafields:i,country:o,language:a}},"getVariables"),c=u(),p=l();if(!p||!c)throw new Error("Invalid query arguments");return r.query(c,p)},"loadProductDetailData");var Br=s(async(r,{productHandle:e})=>{if(!e)throw new Error("A product handle must be provided");return r.query(Or,{handle:e})},"loadProductId");var qr=s(async(r,{items:e,country:t,language:n})=>{if(!e?.length)throw new Error("A list of items must be provided");let i={ids:e.map(o=>o.variantId?w("ProductVariant",o.variantId.toString()):w("Product",o.productId.toString())),country:t,language:n};try{return{data:(await r.query(Pr,i)).data?.nodes.map(u=>u===null?null:"image"in u?u.image:"featuredImage"in u?u.featuredImage:null).filter(u=>u!==null)??[],error:null}}catch(o){return console.error(o),{data:null,error:o}}},"loadProductImages");var Vr=s(async(r,{productId:e,productHandle:t,variantId:n,country:i,language:o})=>{if(!e&&!t)throw new Error("Either productId or handle must be provided");let a=s(()=>{if(e&&!n)return Er;if(t&&!n)return Cr;if(e&&n)return xr;if(t&&n)return Sr},"getProductOptionsQuery"),u=s(()=>{if(e&&!n)return{productId:w("Product",e),country:i,language:o};if(t&&!n)return{handle:t,country:i,language:o};if(e&&n)return{productId:w("Product",e),variantId:w("ProductVariant",n),country:i,language:o};if(t&&n)return{handle:t,variantId:w("ProductVariant",n),country:i,language:o}},"getVariables"),l=a(),c=u();if(!c||!l)throw new Error("Invalid query arguments");return r.query(l,c)},"loadProductOptions");var Ur=s(async(r,{productId:e,productHandle:t,intent:n,country:i,language:o})=>{if(!e&&!t)throw new Error("Either productId or productHandle must be provided");if(e){let u={productId:w("Product",e),intent:n,country:i,language:o};return r.query(Tr,u)}let a={handle:t,intent:n,country:i,language:o};return r.query(_r,a)},"loadProductRecommendations");var Nr=s(async(r,{productId:e,variantId:t,country:n,language:i})=>{let o=s(()=>{if(e&&!t)return gr;if(e&&t)return Ir},"getProductOptionsQuery"),a=s(()=>{if(e&&!t)return{productId:w("Product",R(e)),country:n,language:i};if(e&&t)return{productId:w("Product",R(e)),variantId:w("ProductVariant",R(t)),country:n,language:i}},"getVariables"),u=o(),l=a();if(!l||!u)throw new Error("Invalid query arguments");return r.query(u,l)},"loadSaveIntentData");var Gr=s(async(r,{productId:e,productHandle:t,selectedOptions:n,country:i,language:o})=>{if(!e&&!t)throw new Error("Either productId or handle must be provided");let a=e?Ar:kr,u=e?{productId:`gid://shopify/Product/${e}`,selectedOptions:n,country:i,language:o}:{handle:t,selectedOptions:n,country:i,language:o};return r.query(a,u)},"loadSelectedVariant");var Jn="2025-10",Zn=["GetProductIdByHandle"],Ve=class{constructor(e,t,n,i){this.client=null;this.query=s(async(e,t)=>{if(!this.client)throw new Error("Storefront API client not initialized");let n=await this.client.request(e,{variables:t});return{data:n.data,errors:n.errors??null}},"query");this.loadProductOptions=s(async e=>Vr(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}),"loadProductOptions");this.loadSelectedVariant=s(async e=>Gr(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}),"loadSelectedVariant");this.loadProductCardData=s(async e=>Lr(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}).then(t=>t.data?"variant"in t.data?{...t,data:{...t.data,badges:this.badges.getBadges({product:t.data.product,variant:t.data.variant})}}:{...t,data:{...t.data,badges:this.badges.getBadges({product:t.data.product})}}:t),"loadProductCardData");this.loadProductDetailData=s(async e=>$r(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}).then(t=>t.data?"variant"in t.data?{...t,data:{...t.data,badges:this.badges.getBadges({product:t.data.product,variant:t.data.variant})}}:{...t,data:{...t.data,badges:this.badges.getBadges({product:t.data.product})}}:t),"loadProductDetailData");this.loadProductImages=s(async e=>qr(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}),"loadProductImages");this.loadProductRecommendations=s(async e=>Ur(this,{...e,country:this.context.localization.country,language:this.context.localization.language}),"loadProductRecommendations");this.loadProductId=s(async e=>Br(this,e),"loadProductId");this.loadSaveIntentData=s(async e=>Nr(this,{...e,...this.metafields,country:this.context.localization.country,language:this.context.localization.language}),"loadSaveIntentData");this.options=e,this.context=t,this.badges=n,this.metafields={productMetafields:i?.product.map(o=>({namespace:o.split(".")[0],key:o.split(".")[1]}))??[],variantMetafields:i?.productVariant.map(o=>({namespace:o.split(".")[0],key:o.split(".")[1]}))??[]},this.shortCache=new Q("storefront-api-short","max-age=60, stale-while-revalidate=3600"),this.longCache=new Q("storefront-api-long","max-age=3600, stale-while-revalidate=86400"),this.shortCache.cleanupExpiredEntries().catch(o=>{console.warn("Storefront API cache initialization cleanup error:",o)}),this.longCache.cleanupExpiredEntries().catch(o=>{console.warn("Storefront API cache initialization cleanup error:",o)}),this.client=It({apiVersion:Jn,customFetchApi:s((o,a)=>a?.method==="OPTIONS"?this.fetch(o,a):Zn.some(u=>a?.body?.toString().includes(`query ${u}`))?this.longCache.fetchWithCache(o,a):this.shortCache.fetchWithCache(o,a),"customFetchApi"),publicAccessToken:this.options.accessToken,storeDomain:this.options.storeDomain})}static{s(this,"StorefrontApiClient")}fetch(e,t){return t?.method==="OPTIONS"?fetch(e,t):this.shortCache.fetchWithCache(e,t)}async clearCache(){await this.shortCache.clear()}};var ei=Object.defineProperty,f=s((r,e)=>ei(r,"name",{value:e,configurable:!0}),"n"),ti={bodySerializer:f(r=>JSON.stringify(r,(e,t)=>typeof t=="bigint"?t.toString():t),"bodySerializer")},ri={$body_:"body",$headers_:"headers",$path_:"path",$query_:"query"},Gu=Object.entries(ri),ni=f(({onRequest:r,onSseError:e,onSseEvent:t,responseTransformer:n,responseValidator:i,sseDefaultRetryDelay:o,sseMaxRetryAttempts:a,sseMaxRetryDelay:u,sseSleepFn:l,url:c,...p})=>{let d,m=l??(h=>new Promise(D=>setTimeout(D,h)));return{stream:f(async function*(){let h=o??3e3,D=0,y=p.signal??new AbortController().signal;for(;!y.aborted;){D++;let S=p.headers instanceof Headers?p.headers:new Headers(p.headers);d!==void 0&&S.set("Last-Event-ID",d);try{let O={redirect:"follow",...p,body:p.serializedBody,headers:S,signal:y},k=new Request(c,O);r&&(k=await r(c,O));let F=await(p.fetch??globalThis.fetch)(k);if(!F.ok)throw new Error(`SSE failed: ${F.status} ${F.statusText}`);if(!F.body)throw new Error("No body in SSE response");let I=F.body.pipeThrough(new TextDecoderStream).getReader(),v="",P=f(()=>{try{I.cancel()}catch{}},"abortHandler");y.addEventListener("abort",P);try{for(;;){let{done:T,value:ce}=await I.read();if(T)break;v+=ce;let Ot=v.split(`
|
|
445
439
|
|
|
446
440
|
`);v=Ot.pop()??"";for(let ln of Ot){let cn=ln.split(`
|
|
447
|
-
`),he=[],Lt;for(let
|
|
448
|
-
`);try{J=JSON.parse(G),$t=!0}catch{J=G}}$t&&(i&&await i(J),n&&(J=await n(J))),t?.({data:J,event:Lt,id:d,retry:h}),he.length&&(yield J)}}}finally{y.removeEventListener("abort",P),I.releaseLock()}break}catch(L){if(e?.(L),a!==void 0&&D>=a)break;let k=Math.min(h*2**(D-1),u??3e4);await m(k)}}},"createStream")()}},"createSseClient"),ii=f(r=>{switch(r){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorArrayExplode"),si=f(r=>{switch(r){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},"separatorArrayNoExplode"),oi=f(r=>{switch(r){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorObjectExplode"),Hr=f(({allowReserved:r,explode:e,name:t,style:n,value:i})=>{if(!e){let u=(r?i:i.map(l=>encodeURIComponent(l))).join(si(n));switch(n){case"label":return`.${u}`;case"matrix":return`;${t}=${u}`;case"simple":return u;default:return`${t}=${u}`}}let o=ii(n),a=i.map(u=>n==="label"||n==="simple"?r?u:encodeURIComponent(u):Ne({allowReserved:r,name:t,value:u})).join(o);return n==="label"||n==="matrix"?o+a:a},"serializeArrayParam"),Ne=f(({allowReserved:r,name:e,value:t})=>{if(t==null)return"";if(typeof t=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${r?t:encodeURIComponent(t)}`},"serializePrimitiveParam"),Qr=f(({allowReserved:r,explode:e,name:t,style:n,value:i,valueOnly:o})=>{if(i instanceof Date)return o?i.toISOString():`${t}=${i.toISOString()}`;if(n!=="deepObject"&&!e){let l=[];Object.entries(i).forEach(([p,d])=>{l=[...l,p,r?d:encodeURIComponent(d)]});let c=l.join(",");switch(n){case"form":return`${t}=${c}`;case"label":return`.${c}`;case"matrix":return`;${t}=${c}`;default:return c}}let a=oi(n),u=Object.entries(i).map(([l,c])=>Ne({allowReserved:r,name:n==="deepObject"?`${t}[${l}]`:l,value:c})).join(a);return n==="label"||n==="matrix"?a+u:u},"serializeObjectParam"),ai=/\{[^{}]+\}/g,ui=f(({path:r,url:e})=>{let t=e,n=e.match(ai);if(n)for(let i of n){let o=!1,a=i.substring(1,i.length-1),u="simple";a.endsWith("*")&&(o=!0,a=a.substring(0,a.length-1)),a.startsWith(".")?(a=a.substring(1),u="label"):a.startsWith(";")&&(a=a.substring(1),u="matrix");let l=r[a];if(l==null)continue;if(Array.isArray(l)){t=t.replace(i,Hr({explode:o,name:a,style:u,value:l}));continue}if(typeof l=="object"){t=t.replace(i,Qr({explode:o,name:a,style:u,value:l,valueOnly:!0}));continue}if(u==="matrix"){t=t.replace(i,`;${Ne({name:a,value:l})}`);continue}let c=encodeURIComponent(u==="label"?`.${l}`:l);t=t.replace(i,c)}return t},"defaultPathSerializer"),li=f(({baseUrl:r,path:e,query:t,querySerializer:n,url:i})=>{let o=i.startsWith("/")?i:`/${i}`,a=(r??"")+o;e&&(a=ui({path:e,url:a}));let u=t?n(t):"";return u.startsWith("?")&&(u=u.substring(1)),u&&(a+=`?${u}`),a},"getUrl");function zr(r){let e=r.body!==void 0;if(e&&r.bodySerializer)return"serializedBody"in r?r.serializedBody!==void 0&&r.serializedBody!==""?r.serializedBody:null:r.body!==""?r.body:null;if(e)return r.body}s(zr,"G");f(zr,"getValidRequestBody");var ci=f(async(r,e)=>{let t=typeof e=="function"?await e(r):e;if(t)return r.scheme==="bearer"?`Bearer ${t}`:r.scheme==="basic"?`Basic ${btoa(t)}`:t},"getAuthToken"),Wr=f(({allowReserved:r,array:e,object:t}={})=>f(n=>{let i=[];if(n&&typeof n=="object")for(let o in n){let a=n[o];if(a!=null)if(Array.isArray(a)){let u=Hr({allowReserved:r,explode:!0,name:o,style:"form",value:a,...e});u&&i.push(u)}else if(typeof a=="object"){let u=Qr({allowReserved:r,explode:!0,name:o,style:"deepObject",value:a,...t});u&&i.push(u)}else{let u=Ne({allowReserved:r,name:o,value:a});u&&i.push(u)}}return i.join("&")},"querySerializer"),"createQuerySerializer"),pi=f(r=>{var e;if(!r)return"stream";let t=(e=r.split(";")[0])==null?void 0:e.trim();if(t){if(t.startsWith("application/json")||t.endsWith("+json"))return"json";if(t==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(n=>t.startsWith(n)))return"blob";if(t.startsWith("text/"))return"text"}},"getParseAs"),fi=f((r,e)=>{var t,n;return e?!!(r.headers.has(e)||(t=r.query)!=null&&t[e]||(n=r.headers.get("Cookie"))!=null&&n.includes(`${e}=`)):!1},"checkForExistence"),di=f(async({security:r,...e})=>{for(let t of r){if(fi(e,t.name))continue;let n=await ci(t,e.auth);if(!n)continue;let i=t.name??"Authorization";switch(t.in){case"query":e.query||(e.query={}),e.query[i]=n;break;case"cookie":e.headers.append("Cookie",`${i}=${n}`);break;case"header":default:e.headers.set(i,n);break}}},"setAuthParams"),Gr=f(r=>li({baseUrl:r.baseUrl,path:r.path,query:r.query,querySerializer:typeof r.querySerializer=="function"?r.querySerializer:Wr(r.querySerializer),url:r.url}),"buildUrl"),jr=f((r,e)=>{var t;let n={...r,...e};return(t=n.baseUrl)!=null&&t.endsWith("/")&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=Xr(r.headers,e.headers),n},"mergeConfigs"),hi=f(r=>{let e=[];return r.forEach((t,n)=>{e.push([n,t])}),e},"headersEntries"),Xr=f((...r)=>{let e=new Headers;for(let t of r){if(!t)continue;let n=t instanceof Headers?hi(t):Object.entries(t);for(let[i,o]of n)if(o===null)e.delete(i);else if(Array.isArray(o))for(let a of o)e.append(i,a);else o!==void 0&&e.set(i,typeof o=="object"?JSON.stringify(o):o)}return e},"mergeHeaders"),Kr=class{static{s(this,"$")}constructor(){this.fns=[]}clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e=="number"?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}};f(Kr,"Interceptors");var St=Kr,yi=f(()=>({error:new St,request:new St,response:new St}),"createInterceptors"),mi=Wr({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),vi={"Content-Type":"application/json"},Ue=f((r={})=>({...ti,headers:vi,parseAs:"auto",querySerializer:mi,...r}),"createConfig"),At=f((r={})=>{let e=jr(Ue(),r),t=f(()=>({...e}),"getConfig"),n=f(c=>(e=jr(e,c),t()),"setConfig"),i=yi(),o=f(async c=>{let p={...e,...c,fetch:c.fetch??e.fetch??globalThis.fetch,headers:Xr(e.headers,c.headers),serializedBody:void 0};p.security&&await di({...p,security:p.security}),p.requestValidator&&await p.requestValidator(p),p.body!==void 0&&p.bodySerializer&&(p.serializedBody=p.bodySerializer(p.body)),(p.body===void 0||p.serializedBody==="")&&p.headers.delete("Content-Type");let d=Gr(p);return{opts:p,url:d}},"beforeRequest"),a=f(async c=>{let{opts:p,url:d}=await o(c),m={redirect:"follow",...p,body:zr(p)},h=new Request(d,m);for(let v of i.request.fns)v&&(h=await v(h,p));let D=p.fetch,y=await D(h);for(let v of i.response.fns)v&&(y=await v(y,h,p));let S={request:h,response:y};if(y.ok){let v=(p.parseAs==="auto"?pi(y.headers.get("Content-Type")):p.parseAs)??"json";if(y.status===204||y.headers.get("Content-Length")==="0"){let T;switch(v){case"arrayBuffer":case"blob":case"text":T=await y[v]();break;case"formData":T=new FormData;break;case"stream":T=y.body;break;case"json":default:T={};break}return p.responseStyle==="data"?T:{data:T,...S}}let P;switch(v){case"arrayBuffer":case"blob":case"formData":case"json":case"text":P=await y[v]();break;case"stream":return p.responseStyle==="data"?y.body:{data:y.body,...S}}return v==="json"&&(p.responseValidator&&await p.responseValidator(P),p.responseTransformer&&(P=await p.responseTransformer(P))),p.responseStyle==="data"?P:{data:P,...S}}let L=await y.text(),k;try{k=JSON.parse(L)}catch{}let F=k??L,I=F;for(let v of i.error.fns)v&&(I=await v(F,y,h,p));if(I=I||{},p.throwOnError)throw I;return p.responseStyle==="data"?void 0:{error:I,...S}},"request"),u=f(c=>p=>a({...p,method:c}),"makeMethodFn"),l=f(c=>async p=>{let{opts:d,url:m}=await o(p);return ni({...d,body:d.body,headers:d.headers,method:c,onRequest:f(async(h,D)=>{let y=new Request(h,D);for(let S of i.request.fns)S&&(y=await S(y,d));return y},"onRequest"),url:m})},"makeSseFn");return{buildUrl:Gr,connect:u("CONNECT"),delete:u("DELETE"),get:u("GET"),getConfig:t,head:u("HEAD"),interceptors:i,options:u("OPTIONS"),patch:u("PATCH"),post:u("POST"),put:u("PUT"),request:a,setConfig:n,sse:{connect:l("CONNECT"),delete:l("DELETE"),get:l("GET"),head:l("HEAD"),options:l("OPTIONS"),patch:l("PATCH"),post:l("POST"),put:l("PUT"),trace:l("TRACE")},trace:u("TRACE")}},"createClient"),x=At(Ue({baseUrl:"https://swish.app/api/2026-01"})),gi=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/lists",...r}),"listControllerFind"),Ii=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/lists",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerCreate"),wi=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r}),"listControllerDeleteById"),bi=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r}),"listControllerFindById"),Ei=f(r=>(r.client??x).patch({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerUpdateById"),Ci=f(r=>(r.client??x).put({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items/order",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerSetListItemsOrder"),xi=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerAddItemsToList"),Si=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items/{itemId}",...r}),"listControllerRemoveItemFromList"),Ai=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerDelete"),ki=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items",...r}),"itemControllerFind"),Ri=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerCreate"),Di=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items/count",...r}),"itemControllerCount"),Pi=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r}),"itemControllerDeleteById"),Ti=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r}),"itemControllerFindById"),_i=f(r=>(r.client??x).patch({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerUpdateById"),Oi=f(r=>(r.client??x).put({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}/lists",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerSetListsById"),Li=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/profiles/accounts-version",...r}),"profileControllerCustomerAccountsVersion"),$i=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/profiles/identify",...r,headers:{"Content-Type":"application/json",...r.headers}}),"profileControllerIdentify"),Bi=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/profiles/token",...r,headers:{"Content-Type":"application/json",...r.headers}}),"profileControllerCreateToken"),qi=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/orders",...r}),"ordersControllerFind"),Vi=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/orders/{orderId}",...r}),"ordersControllerFindOne"),kt="2026-01",Fr="/apps/wishlist/api",Yr=f(r=>new Ui(r),"createApiClient"),Jr=class{static{s(this,"H")}constructor(e){this.useProxy=!1,this.version=kt,this.items={list:f(n=>this.handlePaginatedRequest(ki({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),create:f(n=>this.handleRequest(Ri({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"create"),delete:f(n=>this.handleRequest(Ai({body:{itemIds:n},client:this.useProxy?this.proxyClient:this.directClient})),"delete"),findById:f(n=>this.handleRequest(Ti({path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById"),updateById:f((n,i)=>this.handleRequest(_i({body:i,path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"updateById"),deleteById:f(n=>this.handleRequest(Pi({path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"deleteById"),setListsById:f((n,i)=>this.handleRequest(Oi({body:{listIds:i},path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"setListsById"),count:f(()=>this.handleRequest(Di({client:this.useProxy?this.proxyClient:this.directClient})),"count")},this.lists={list:f(n=>this.handlePaginatedRequest(gi({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),create:f(n=>this.handleRequest(Ii({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"create"),findById:f(n=>this.handleRequest(bi({path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById"),updateById:f((n,i)=>this.handleRequest(Ei({body:i,path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"updateById"),deleteById:f(n=>this.handleRequest(wi({path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"deleteById"),orderItems:f((n,i)=>this.handleRequest(Ci({body:{itemIds:i},path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"orderItems"),addItemsToList:f((n,i)=>this.handleRequest(xi({body:{itemIds:i},path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"addItemsToList"),removeItemFromList:f((n,i)=>this.handleRequest(Si({path:{listId:n,itemId:i},client:this.useProxy?this.proxyClient:this.directClient})),"removeItemFromList")},this.profiles={customerAccountsVersion:f(()=>this.handleRequest(Li({client:this.useProxy?this.proxyClient:this.directClient})),"customerAccountsVersion"),createToken:f((n={},i)=>this.handleRequest(Bi({body:n,client:this.useProxy||i!=null&&i.useProxy?this.proxyClient:this.directClient})),"createToken"),identify:f(n=>this.handleRequest($i({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"identify")},this.orders={list:f(n=>this.handlePaginatedRequest(qi({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),findById:f(n=>this.handleRequest(Vi({path:{orderId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById")},this.handleRequest=f(async n=>{let{data:i,error:o}=await n;return o!=null&&o.error?{error:o.error}:{data:i?.data}},"handleRequest"),this.handlePaginatedRequest=f(async n=>{var i;let{data:o,error:a}=await n;return a!=null&&a.error?{error:a.error}:{data:o?.data??[],pageInfo:o?.pageInfo??{next:null,previous:null,totalCount:((i=o?.data)==null?void 0:i.length)??0}}},"handlePaginatedRequest");var t;this.profile=e.profile,(t=e.config)!=null&&t.version&&(this.version=e.config.version),this.directClient=At(Ue({baseUrl:`https://swish.app/api/${this.version}`})),this.proxyClient=At(Ue({baseUrl:Fr})),e.authToken&&(this.authToken=e.authToken),e.config&&this.setConfig(e.config),e.requestInterceptor&&(this.proxyClient.interceptors.request.use(e.requestInterceptor),this.directClient.interceptors.request.use(e.requestInterceptor)),e.responseInterceptor&&(this.proxyClient.interceptors.response.use(e.responseInterceptor),this.directClient.interceptors.response.use(e.responseInterceptor)),this.proxyClient.interceptors.request.use(this.proxyRequestInterceptor.bind(this)),this.directClient.interceptors.request.use(this.directRequestInterceptor.bind(this))}setProfile(e){this.profile=e}getProfile(){return this.profile}setAuthToken(e){this.authToken=e}setConfig({proxyBaseUrl:e=Fr,baseUrl:t,useProxy:n=!1,...i}){this.useProxy=n,this.proxyClient.setConfig({...i,baseUrl:e}),this.directClient.setConfig({...i})}proxyRequestInterceptor(e){return this.profile&&(e.headers.set("Profile",this.profile),e.headers.set("Swish-Api-Version",this.version)),e}directRequestInterceptor(e){return this.authToken&&e.headers.set("Authorization",`Bearer ${this.authToken}`),e}};f(Jr,"SwishClient");var Ui=Jr;var Zr=s(r=>r?JSON.parse(atob(r.split(".")[1])):null,"getTokenData"),en=s((r,e=60)=>{let t=Zr(r);return t?t.exp&&t.exp<Date.now()/1e3+e:!1},"isTokenExpired"),tn=s(r=>{let e=Zr(r);return e?e.sub.startsWith("gid://shopify/Customer/"):!1},"isCustomerToken");var on=gn(sn(),1);var an=s(r=>new on.default(async e=>{let t=[...new Set(e)].sort((i,o)=>i.localeCompare(o)),n=await r.items.list({query:t.join(" "),limit:200});return"error"in n?(console.error("Failed to load items",n.error),e.map(()=>({data:[],pageInfo:{next:null,previous:null,totalCount:0}}))):e.map(i=>{let o=n.data.find(a=>i===`variant:${a.variantId}`||i===`product:${a.productId}`);return{data:o?[o]:[],pageInfo:{next:null,previous:null,totalCount:o?1:0}}})},{batchScheduleFn:s(e=>setTimeout(e,50),"batchScheduleFn"),cache:!1,maxBatchSize:200}),"createItemsBatchLoader");var oe={profile:{get:s(()=>localStorage.getItem("swish-profile")??void 0,"get"),set:s(r=>localStorage.setItem("swish-profile",r),"set"),delete:s(()=>localStorage.removeItem("swish-profile"),"delete")},authToken:{get:s(()=>sessionStorage.getItem("swish-token")??void 0,"get"),set:s(r=>sessionStorage.setItem("swish-token",r),"set"),delete:s(()=>sessionStorage.removeItem("swish-token"),"delete")}},Me=class{static{s(this,"SwishApi")}constructor(e,t,n){this.config=e,this.context=t,this.cache=new Q("swish-api","max-age=60, stale-while-revalidate=3600",n+(e.version??kt)),this.cache.cleanupExpiredEntries().catch(a=>{console.warn("Swish API cache initialization cleanup error:",a)});let i=oe.profile.get(),o=oe.authToken.get();this.apiClient=Yr({profile:i,authToken:o,proxyMode:this.config.proxyMode,config:{...e,fetch:s((a,u)=>(a instanceof Request?a.method:u?.method??"GET")==="GET"?this.cache.fetchWithCache(a,u):fetch(a,u),"fetch")},requestInterceptor:s(async a=>{let u=new URL(a.url,window.location.origin),l=this.config.proxyBaseUrl??"/apps/wishlist/api",c=u.pathname==="/profiles/token";return!u.pathname.startsWith(l)&&!c&&await this.bootstrapAuth(),a},"requestInterceptor"),responseInterceptor:s(async(a,u)=>(this.processProfileHeader(a),u.method!=="GET"&&await this.cache.clear(),await this.config.responseInterceptor?.(a,u),a),"responseInterceptor")}),this.itemsLoader=an(this)}async bootstrapAuth(){if(this._bootstrapAuthPromise)return this._bootstrapAuthPromise;this._bootstrapAuthPromise=(async()=>{let e=oe.authToken.get();if(e)try{if(en(e,60))throw new Error("TOKEN_EXPIRED")}catch(o){(!(o instanceof Error)||o.message!=="TOKEN_EXPIRED")&&console.error("Failed to decode cached auth token",{cause:o}),oe.authToken.delete(),e=void 0}if(e){this.apiClient.setAuthToken(e);return}let t=this.apiClient.getProfile(),n=this.config.customerId,i=await this.apiClient.profiles.createToken({customer:n,session:t},{useProxy:!0});if("error"in i){console.error("Failed to bootstrap auth with error",i.error);return}if(!i.data?.token){console.error("Failed to bootstrap auth with no token");return}oe.authToken.set(i.data.token),this.apiClient.setAuthToken(i.data.token)})();try{return await this._bootstrapAuthPromise}finally{this._bootstrapAuthPromise=void 0}}processProfileHeader(e){let t=e.headers.get("Set-Profile");t?(this.apiClient.setProfile(t),oe.profile.set(t)):t===""&&oe.profile.delete()}get items(){return{...this.apiClient.items,list:s(async(e,t)=>{if(!this.config.customerId&&!this.apiClient.getProfile())return{data:[],pageInfo:{next:null,previous:null,totalCount:0}};if(t?.batch&&e?.query){e.limit!==1&&console.warn("Batching will always limit to 1 item");let n=e.query.split(" ");n.length>1&&console.warn("Batching will only support one query parameter");let i=n[0];if(!i.match(/^product:\d+$/)&&!i.match(/^variant:\d+$/))console.warn("Batching will only support product:<id> or variant:<id>");else return this.itemsLoader?.load(i)}return this.apiClient.items.list(e)},"list"),findById:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:null}:this.apiClient.items.findById(e),"findById")}}get lists(){return{...this.apiClient.lists,list:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:[],pageInfo:{next:null,previous:null,totalCount:0}}:this.apiClient.lists.list(e),"list"),findById:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:null}:this.apiClient.lists.findById(e),"findById")}}get orders(){return{...this.apiClient.orders,list:s(async e=>!this.context.customer.id&&!this.apiClient.getProfile()?{data:[],pageInfo:{next:null,previous:null,totalCount:0}}:this.apiClient.orders.list(e),"list"),findById:s(async e=>!this.context.customer.id&&!this.apiClient.getProfile()?{data:null}:this.apiClient.orders.findById(e),"findById")}}get profiles(){return this.apiClient.profiles}async clearCache(){await this.cache.clear()}};var Ge=class{constructor(e){this.eventMap={"POST /items\\/?$":"item-create","DELETE /items\\/?$":"item-delete","PATCH /items\\/([^/]+)\\/?$":"item-update","DELETE /items\\/([^/]+)\\/?$":"item-delete","PUT /items\\/([^/]+)\\/lists\\/?$":"item-lists-update","POST /lists\\/?$":"list-create","DELETE /lists\\/?$":"list-delete","PATCH /lists\\/([^/]+)\\/?$":"list-update","DELETE /lists\\/([^/]+)\\/?$":"list-delete"};this.eventBus=e,this.processFetchResponse=this.processFetchResponse.bind(this)}static{s(this,"SwishApiPublisher")}async processFetchResponse(e,t){try{let n=this.getEventName(t.method,e.status,t.url);if(!n)return;let i=await e.clone().text();if(e.headers.get("Content-Type")?.includes("application/json"))try{i=JSON.parse(i).data}catch(o){console.warn(o)}this.eventBus.publish(n,i)}catch(n){console.warn(n)}}getEventName(e,t,n){e=e.toUpperCase();let i=new URL(n).pathname;return e==="GET"||t<200||t>=300?void 0:Object.entries(this.eventMap).find(([a])=>{let[u,l]=a.split(" ");return u!==e?!1:new RegExp(l).test(i)})?.[1]}};var Xi=typeof HTMLElement<"u"?HTMLElement:class{},je=class extends Xi{constructor(){super();this.getComponentRef=s(()=>this.componentRef,"getComponentRef");this.setComponentRef=s(t=>{this.componentRef=t},"setComponentRef");this.shadowRoot||this.attachShadow({mode:"open"});let t=this.querySelector("template");t&&this.shadowRoot&&(this.shadowRoot.appendChild(t.content),t.remove())}static{s(this,"SwishUiElement")}};var Fe=class{static{s(this,"ShopifyBadgesUtils")}#e;constructor({getBadges:e}){this.#e=e?.bind(this)}getBadges({product:e,variant:t}){try{let n=this.getDefaultBadges({product:e,variant:t});return this.#e?this.mapBadges(this.#e({product:e,variant:t,defaultBadges:n})??[]):this.mapBadges(n)}catch(n){return console.error("Error getting badges",n),[]}}getDefaultBadges({product:e,variant:t}){let n=[];if(e?.availableForSale===!1||t?.availableForSale===!1)return n.push("Sold out"),n;let i=t?t.price.amount:e?.priceRange?.minVariantPrice.amount,o=t?t.compareAtPrice?.amount:e?.compareAtPriceRange?.minVariantPrice.amount;return o&&parseFloat(o)>parseFloat(i)&&n.push("Sale"),n}mapBadges(e){return e.map(t=>typeof t=="string"?{id:t.toLowerCase().replace(/[^a-z0-9]/g,"_"),label:t}:t)}};var un=s(r=>{let e=r.proxy?.baseUrl??"/apps/wishlist";return{proxy:{baseUrl:e},storefrontApi:{storeDomain:r.storefrontApi?.storeDomain??"",accessToken:r.storefrontApi?.accessToken??""},storefrontContext:{...r.storefrontContext,localization:{country:r.storefrontContext.localization.country.toUpperCase(),language:r.storefrontContext.localization.language.toUpperCase(),market:r.storefrontContext.localization.market}},badges:{getBadges:r.badges?.getBadges??(({defaultBadges:t})=>t)},metafields:{product:r.metafields?.product??[],productVariant:r.metafields?.productVariant??[]},swishApi:{version:r.swishApi?.version??"2026-01"},swishUi:{baseUrl:r.swishUi?.baseUrl??`${e}/assets`,components:{productRow:{showVariantTitle:r.swishUi?.components?.productRow?.showVariantTitle??!1},productDetail:{descriptionMaxLines:r.swishUi?.components?.productDetail?.descriptionMaxLines??4},variantSelect:{displayType:r.swishUi?.components?.variantSelect?.displayType??"pills"},imageSlider:{flush:r.swishUi?.components?.imageSlider?.flush??!1,loop:r.swishUi?.components?.imageSlider?.loop??!1},images:{baseTint:r.swishUi?.components?.images?.baseTint??!1},buyButtons:{shopPay:r.swishUi?.components?.buyButtons?.shopPay??!1},drawer:{title:r.swishUi?.components?.drawer?.title??"",logo:{url:r.swishUi?.components?.drawer?.logo?.url??"",altText:r.swishUi?.components?.drawer?.logo?.altText??""},navigation:{variant:r.swishUi?.components?.drawer?.navigation?.variant??"floating",items:r.swishUi?.components?.drawer?.navigation?.items??[{id:"home",enabled:!0,href:"/"},{id:"items",enabled:!0,href:"/items"},{id:"lists",enabled:!0,href:"/lists"},{id:"chat",enabled:!1,href:"/chat"},{id:"orders",enabled:!0,href:"/orders"},{id:"profile",enabled:!0,href:"/profile"}]},miniMenu:{items:r.swishUi?.components?.drawer?.miniMenu?.items??[]}}},css:r.swishUi?.css??[],intents:{save:{requireVariant:r.swishUi?.intents?.save?.requireVariant??!1,showToast:r.swishUi?.intents?.save?.showToast??!1},edit:{showToast:r.swishUi?.intents?.edit?.showToast??!1},unsave:{requireConfirmation:r.swishUi?.intents?.unsave?.requireConfirmation??!1,openEditor:r.swishUi?.intents?.unsave?.openEditor??!1,showToast:r.swishUi?.intents?.unsave?.showToast??!1}},theme:r.swishUi?.theme??{},version:r.swishUi?.version??"0.40.0"}}},"createSwishOptions");var Ki=".swish-shop-bridge{position:absolute!important;top:0!important;left:0!important;padding:0!important;border:0!important;margin:0!important;pointer-events:none!important}.swish-shop-bridge input{appearance:none!important;border:none!important;width:1px!important;height:1px!important;padding:0!important;margin:0!important;background:rgba(0,0,0,0)!important}",Yi=s(()=>{let r="/";return typeof window<"u"&&(r=window.location.pathname),`<form class=swish-shop-bridge data-login-with-shop-sign-in=true id=customer_login><input name=customer[email] id=customer_login_email> <input name=return_url type=hidden value=${r}></form>`},"getHtml"),Ji=typeof HTMLElement<"u"?HTMLElement:class{},Tt=class extends Ji{static{s(this,"ShopBridge")}get swish(){return typeof window<"u"?window.swish:void 0}constructor(){super(),this.emailInput=this.querySelector('form[data-login-with-shop-sign-in] input[type="email"],form[data-login-with-shop-sign-in] input[name="customer[email]"'),this.emailInput||(this.innerHTML=`
|
|
441
|
+
`),he=[],Lt;for(let M of cn)if(M.startsWith("data:"))he.push(M.replace(/^data:\s*/,""));else if(M.startsWith("event:"))Lt=M.replace(/^event:\s*/,"");else if(M.startsWith("id:"))d=M.replace(/^id:\s*/,"");else if(M.startsWith("retry:")){let Bt=Number.parseInt(M.replace(/^retry:\s*/,""),10);Number.isNaN(Bt)||(h=Bt)}let J,$t=!1;if(he.length){let M=he.join(`
|
|
442
|
+
`);try{J=JSON.parse(M),$t=!0}catch{J=M}}$t&&(i&&await i(J),n&&(J=await n(J))),t?.({data:J,event:Lt,id:d,retry:h}),he.length&&(yield J)}}}finally{y.removeEventListener("abort",P),I.releaseLock()}break}catch(O){if(e?.(O),a!==void 0&&D>=a)break;let k=Math.min(h*2**(D-1),u??3e4);await m(k)}}},"createStream")()}},"createSseClient"),ii=f(r=>{switch(r){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorArrayExplode"),si=f(r=>{switch(r){case"form":return",";case"pipeDelimited":return"|";case"spaceDelimited":return"%20";default:return","}},"separatorArrayNoExplode"),oi=f(r=>{switch(r){case"label":return".";case"matrix":return";";case"simple":return",";default:return"&"}},"separatorObjectExplode"),Hr=f(({allowReserved:r,explode:e,name:t,style:n,value:i})=>{if(!e){let u=(r?i:i.map(l=>encodeURIComponent(l))).join(si(n));switch(n){case"label":return`.${u}`;case"matrix":return`;${t}=${u}`;case"simple":return u;default:return`${t}=${u}`}}let o=ii(n),a=i.map(u=>n==="label"||n==="simple"?r?u:encodeURIComponent(u):Ne({allowReserved:r,name:t,value:u})).join(o);return n==="label"||n==="matrix"?o+a:a},"serializeArrayParam"),Ne=f(({allowReserved:r,name:e,value:t})=>{if(t==null)return"";if(typeof t=="object")throw new Error("Deeply-nested arrays/objects aren\u2019t supported. Provide your own `querySerializer()` to handle these.");return`${e}=${r?t:encodeURIComponent(t)}`},"serializePrimitiveParam"),Qr=f(({allowReserved:r,explode:e,name:t,style:n,value:i,valueOnly:o})=>{if(i instanceof Date)return o?i.toISOString():`${t}=${i.toISOString()}`;if(n!=="deepObject"&&!e){let l=[];Object.entries(i).forEach(([p,d])=>{l=[...l,p,r?d:encodeURIComponent(d)]});let c=l.join(",");switch(n){case"form":return`${t}=${c}`;case"label":return`.${c}`;case"matrix":return`;${t}=${c}`;default:return c}}let a=oi(n),u=Object.entries(i).map(([l,c])=>Ne({allowReserved:r,name:n==="deepObject"?`${t}[${l}]`:l,value:c})).join(a);return n==="label"||n==="matrix"?a+u:u},"serializeObjectParam"),ai=/\{[^{}]+\}/g,ui=f(({path:r,url:e})=>{let t=e,n=e.match(ai);if(n)for(let i of n){let o=!1,a=i.substring(1,i.length-1),u="simple";a.endsWith("*")&&(o=!0,a=a.substring(0,a.length-1)),a.startsWith(".")?(a=a.substring(1),u="label"):a.startsWith(";")&&(a=a.substring(1),u="matrix");let l=r[a];if(l==null)continue;if(Array.isArray(l)){t=t.replace(i,Hr({explode:o,name:a,style:u,value:l}));continue}if(typeof l=="object"){t=t.replace(i,Qr({explode:o,name:a,style:u,value:l,valueOnly:!0}));continue}if(u==="matrix"){t=t.replace(i,`;${Ne({name:a,value:l})}`);continue}let c=encodeURIComponent(u==="label"?`.${l}`:l);t=t.replace(i,c)}return t},"defaultPathSerializer"),li=f(({baseUrl:r,path:e,query:t,querySerializer:n,url:i})=>{let o=i.startsWith("/")?i:`/${i}`,a=(r??"")+o;e&&(a=ui({path:e,url:a}));let u=t?n(t):"";return u.startsWith("?")&&(u=u.substring(1)),u&&(a+=`?${u}`),a},"getUrl");function zr(r){let e=r.body!==void 0;if(e&&r.bodySerializer)return"serializedBody"in r?r.serializedBody!==void 0&&r.serializedBody!==""?r.serializedBody:null:r.body!==""?r.body:null;if(e)return r.body}s(zr,"G");f(zr,"getValidRequestBody");var ci=f(async(r,e)=>{let t=typeof e=="function"?await e(r):e;if(t)return r.scheme==="bearer"?`Bearer ${t}`:r.scheme==="basic"?`Basic ${btoa(t)}`:t},"getAuthToken"),Wr=f(({allowReserved:r,array:e,object:t}={})=>f(n=>{let i=[];if(n&&typeof n=="object")for(let o in n){let a=n[o];if(a!=null)if(Array.isArray(a)){let u=Hr({allowReserved:r,explode:!0,name:o,style:"form",value:a,...e});u&&i.push(u)}else if(typeof a=="object"){let u=Qr({allowReserved:r,explode:!0,name:o,style:"deepObject",value:a,...t});u&&i.push(u)}else{let u=Ne({allowReserved:r,name:o,value:a});u&&i.push(u)}}return i.join("&")},"querySerializer"),"createQuerySerializer"),pi=f(r=>{var e;if(!r)return"stream";let t=(e=r.split(";")[0])==null?void 0:e.trim();if(t){if(t.startsWith("application/json")||t.endsWith("+json"))return"json";if(t==="multipart/form-data")return"formData";if(["application/","audio/","image/","video/"].some(n=>t.startsWith(n)))return"blob";if(t.startsWith("text/"))return"text"}},"getParseAs"),fi=f((r,e)=>{var t,n;return e?!!(r.headers.has(e)||(t=r.query)!=null&&t[e]||(n=r.headers.get("Cookie"))!=null&&n.includes(`${e}=`)):!1},"checkForExistence"),di=f(async({security:r,...e})=>{for(let t of r){if(fi(e,t.name))continue;let n=await ci(t,e.auth);if(!n)continue;let i=t.name??"Authorization";switch(t.in){case"query":e.query||(e.query={}),e.query[i]=n;break;case"cookie":e.headers.append("Cookie",`${i}=${n}`);break;case"header":default:e.headers.set(i,n);break}}},"setAuthParams"),Mr=f(r=>li({baseUrl:r.baseUrl,path:r.path,query:r.query,querySerializer:typeof r.querySerializer=="function"?r.querySerializer:Wr(r.querySerializer),url:r.url}),"buildUrl"),jr=f((r,e)=>{var t;let n={...r,...e};return(t=n.baseUrl)!=null&&t.endsWith("/")&&(n.baseUrl=n.baseUrl.substring(0,n.baseUrl.length-1)),n.headers=Xr(r.headers,e.headers),n},"mergeConfigs"),hi=f(r=>{let e=[];return r.forEach((t,n)=>{e.push([n,t])}),e},"headersEntries"),Xr=f((...r)=>{let e=new Headers;for(let t of r){if(!t)continue;let n=t instanceof Headers?hi(t):Object.entries(t);for(let[i,o]of n)if(o===null)e.delete(i);else if(Array.isArray(o))for(let a of o)e.append(i,a);else o!==void 0&&e.set(i,typeof o=="object"?JSON.stringify(o):o)}return e},"mergeHeaders"),Kr=class{static{s(this,"$")}constructor(){this.fns=[]}clear(){this.fns=[]}eject(e){let t=this.getInterceptorIndex(e);this.fns[t]&&(this.fns[t]=null)}exists(e){let t=this.getInterceptorIndex(e);return!!this.fns[t]}getInterceptorIndex(e){return typeof e=="number"?this.fns[e]?e:-1:this.fns.indexOf(e)}update(e,t){let n=this.getInterceptorIndex(e);return this.fns[n]?(this.fns[n]=t,e):!1}use(e){return this.fns.push(e),this.fns.length-1}};f(Kr,"Interceptors");var St=Kr,yi=f(()=>({error:new St,request:new St,response:new St}),"createInterceptors"),mi=Wr({allowReserved:!1,array:{explode:!0,style:"form"},object:{explode:!0,style:"deepObject"}}),vi={"Content-Type":"application/json"},Ue=f((r={})=>({...ti,headers:vi,parseAs:"auto",querySerializer:mi,...r}),"createConfig"),At=f((r={})=>{let e=jr(Ue(),r),t=f(()=>({...e}),"getConfig"),n=f(c=>(e=jr(e,c),t()),"setConfig"),i=yi(),o=f(async c=>{let p={...e,...c,fetch:c.fetch??e.fetch??globalThis.fetch,headers:Xr(e.headers,c.headers),serializedBody:void 0};p.security&&await di({...p,security:p.security}),p.requestValidator&&await p.requestValidator(p),p.body!==void 0&&p.bodySerializer&&(p.serializedBody=p.bodySerializer(p.body)),(p.body===void 0||p.serializedBody==="")&&p.headers.delete("Content-Type");let d=Mr(p);return{opts:p,url:d}},"beforeRequest"),a=f(async c=>{let{opts:p,url:d}=await o(c),m={redirect:"follow",...p,body:zr(p)},h=new Request(d,m);for(let v of i.request.fns)v&&(h=await v(h,p));let D=p.fetch,y=await D(h);for(let v of i.response.fns)v&&(y=await v(y,h,p));let S={request:h,response:y};if(y.ok){let v=(p.parseAs==="auto"?pi(y.headers.get("Content-Type")):p.parseAs)??"json";if(y.status===204||y.headers.get("Content-Length")==="0"){let T;switch(v){case"arrayBuffer":case"blob":case"text":T=await y[v]();break;case"formData":T=new FormData;break;case"stream":T=y.body;break;case"json":default:T={};break}return p.responseStyle==="data"?T:{data:T,...S}}let P;switch(v){case"arrayBuffer":case"blob":case"formData":case"json":case"text":P=await y[v]();break;case"stream":return p.responseStyle==="data"?y.body:{data:y.body,...S}}return v==="json"&&(p.responseValidator&&await p.responseValidator(P),p.responseTransformer&&(P=await p.responseTransformer(P))),p.responseStyle==="data"?P:{data:P,...S}}let O=await y.text(),k;try{k=JSON.parse(O)}catch{}let F=k??O,I=F;for(let v of i.error.fns)v&&(I=await v(F,y,h,p));if(I=I||{},p.throwOnError)throw I;return p.responseStyle==="data"?void 0:{error:I,...S}},"request"),u=f(c=>p=>a({...p,method:c}),"makeMethodFn"),l=f(c=>async p=>{let{opts:d,url:m}=await o(p);return ni({...d,body:d.body,headers:d.headers,method:c,onRequest:f(async(h,D)=>{let y=new Request(h,D);for(let S of i.request.fns)S&&(y=await S(y,d));return y},"onRequest"),url:m})},"makeSseFn");return{buildUrl:Mr,connect:u("CONNECT"),delete:u("DELETE"),get:u("GET"),getConfig:t,head:u("HEAD"),interceptors:i,options:u("OPTIONS"),patch:u("PATCH"),post:u("POST"),put:u("PUT"),request:a,setConfig:n,sse:{connect:l("CONNECT"),delete:l("DELETE"),get:l("GET"),head:l("HEAD"),options:l("OPTIONS"),patch:l("PATCH"),post:l("POST"),put:l("PUT"),trace:l("TRACE")},trace:u("TRACE")}},"createClient"),x=At(Ue({baseUrl:"https://swish.app/api/2026-01"})),gi=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/lists",...r}),"listControllerFind"),Ii=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/lists",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerCreate"),wi=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r}),"listControllerDeleteById"),bi=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r}),"listControllerFindById"),Ei=f(r=>(r.client??x).patch({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerUpdateById"),Ci=f(r=>(r.client??x).put({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items/order",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerSetListItemsOrder"),xi=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"listControllerAddItemsToList"),Si=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/lists/{listId}/items/{itemId}",...r}),"listControllerRemoveItemFromList"),Ai=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerDelete"),ki=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items",...r}),"itemControllerFind"),Ri=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/items",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerCreate"),Di=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items/count",...r}),"itemControllerCount"),Pi=f(r=>(r.client??x).delete({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r}),"itemControllerDeleteById"),Ti=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r}),"itemControllerFindById"),_i=f(r=>(r.client??x).patch({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerUpdateById"),Oi=f(r=>(r.client??x).put({security:[{scheme:"bearer",type:"http"}],url:"/items/{itemId}/lists",...r,headers:{"Content-Type":"application/json",...r.headers}}),"itemControllerSetListsById"),Li=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/profiles/accounts-version",...r}),"profileControllerCustomerAccountsVersion"),$i=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/profiles/identify",...r,headers:{"Content-Type":"application/json",...r.headers}}),"profileControllerIdentify"),Bi=f(r=>(r.client??x).post({security:[{scheme:"bearer",type:"http"}],url:"/profiles/token",...r,headers:{"Content-Type":"application/json",...r.headers}}),"profileControllerCreateToken"),qi=f(r=>(r?.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/orders",...r}),"ordersControllerFind"),Vi=f(r=>(r.client??x).get({security:[{scheme:"bearer",type:"http"}],url:"/orders/{orderId}",...r}),"ordersControllerFindOne"),kt="2026-01",Fr="/apps/wishlist/api",Yr=f(r=>new Ui(r),"createApiClient"),Jr=class{static{s(this,"H")}constructor(e){this.useProxy=!1,this.version=kt,this.items={list:f(n=>this.handlePaginatedRequest(ki({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),create:f(n=>this.handleRequest(Ri({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"create"),delete:f(n=>this.handleRequest(Ai({body:{itemIds:n},client:this.useProxy?this.proxyClient:this.directClient})),"delete"),findById:f(n=>this.handleRequest(Ti({path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById"),updateById:f((n,i)=>this.handleRequest(_i({body:i,path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"updateById"),deleteById:f(n=>this.handleRequest(Pi({path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"deleteById"),setListsById:f((n,i)=>this.handleRequest(Oi({body:{listIds:i},path:{itemId:n},client:this.useProxy?this.proxyClient:this.directClient})),"setListsById"),count:f(()=>this.handleRequest(Di({client:this.useProxy?this.proxyClient:this.directClient})),"count")},this.lists={list:f(n=>this.handlePaginatedRequest(gi({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),create:f(n=>this.handleRequest(Ii({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"create"),findById:f(n=>this.handleRequest(bi({path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById"),updateById:f((n,i)=>this.handleRequest(Ei({body:i,path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"updateById"),deleteById:f(n=>this.handleRequest(wi({path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"deleteById"),orderItems:f((n,i)=>this.handleRequest(Ci({body:{itemIds:i},path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"orderItems"),addItemsToList:f((n,i)=>this.handleRequest(xi({body:{itemIds:i},path:{listId:n},client:this.useProxy?this.proxyClient:this.directClient})),"addItemsToList"),removeItemFromList:f((n,i)=>this.handleRequest(Si({path:{listId:n,itemId:i},client:this.useProxy?this.proxyClient:this.directClient})),"removeItemFromList")},this.profiles={customerAccountsVersion:f(()=>this.handleRequest(Li({client:this.useProxy?this.proxyClient:this.directClient})),"customerAccountsVersion"),createToken:f((n={},i)=>this.handleRequest(Bi({body:n,client:this.useProxy||i!=null&&i.useProxy?this.proxyClient:this.directClient})),"createToken"),identify:f(n=>this.handleRequest($i({body:n,client:this.useProxy?this.proxyClient:this.directClient})),"identify")},this.orders={list:f(n=>this.handlePaginatedRequest(qi({query:n,client:this.useProxy?this.proxyClient:this.directClient})),"list"),findById:f(n=>this.handleRequest(Vi({path:{orderId:n},client:this.useProxy?this.proxyClient:this.directClient})),"findById")},this.handleRequest=f(async n=>{let{data:i,error:o}=await n;return o!=null&&o.error?{error:o.error}:{data:i?.data}},"handleRequest"),this.handlePaginatedRequest=f(async n=>{var i;let{data:o,error:a}=await n;return a!=null&&a.error?{error:a.error}:{data:o?.data??[],pageInfo:o?.pageInfo??{next:null,previous:null,totalCount:((i=o?.data)==null?void 0:i.length)??0}}},"handlePaginatedRequest");var t;this.profile=e.profile,(t=e.config)!=null&&t.version&&(this.version=e.config.version),this.directClient=At(Ue({baseUrl:`https://swish.app/api/${this.version}`})),this.proxyClient=At(Ue({baseUrl:Fr})),e.authToken&&(this.authToken=e.authToken),e.config&&this.setConfig(e.config),e.requestInterceptor&&(this.proxyClient.interceptors.request.use(e.requestInterceptor),this.directClient.interceptors.request.use(e.requestInterceptor)),e.responseInterceptor&&(this.proxyClient.interceptors.response.use(e.responseInterceptor),this.directClient.interceptors.response.use(e.responseInterceptor)),this.proxyClient.interceptors.request.use(this.proxyRequestInterceptor.bind(this)),this.directClient.interceptors.request.use(this.directRequestInterceptor.bind(this))}setProfile(e){this.profile=e}getProfile(){return this.profile}setAuthToken(e){this.authToken=e}setConfig({proxyBaseUrl:e=Fr,baseUrl:t,useProxy:n=!1,...i}){this.useProxy=n,this.proxyClient.setConfig({...i,baseUrl:e}),this.directClient.setConfig({...i})}proxyRequestInterceptor(e){return this.profile&&(e.headers.set("Profile",this.profile),e.headers.set("Swish-Api-Version",this.version)),e}directRequestInterceptor(e){return this.authToken&&e.headers.set("Authorization",`Bearer ${this.authToken}`),e}};f(Jr,"SwishClient");var Ui=Jr;var Zr=s(r=>r?JSON.parse(atob(r.split(".")[1])):null,"getTokenData"),en=s((r,e=60)=>{let t=Zr(r);return t?t.exp&&t.exp<Date.now()/1e3+e:!1},"isTokenExpired"),tn=s(r=>{let e=Zr(r);return e?e.sub.startsWith("gid://shopify/Customer/"):!1},"isCustomerToken");var on=gn(sn(),1);var an=s(r=>new on.default(async e=>{let t=[...new Set(e)].sort((i,o)=>i.localeCompare(o)),n=await r.items.list({query:t.join(" "),limit:200});return"error"in n?(console.error("Failed to load items",n.error),e.map(()=>({data:[],pageInfo:{next:null,previous:null,totalCount:0}}))):e.map(i=>{let o=n.data.find(a=>i===`variant:${a.variantId}`||i===`product:${a.productId}`);return{data:o?[o]:[],pageInfo:{next:null,previous:null,totalCount:o?1:0}}})},{batchScheduleFn:s(e=>setTimeout(e,50),"batchScheduleFn"),cache:!1,maxBatchSize:200}),"createItemsBatchLoader");var se={profile:{get:s(()=>localStorage.getItem("swish-profile")??void 0,"get"),set:s(r=>localStorage.setItem("swish-profile",r),"set"),delete:s(()=>localStorage.removeItem("swish-profile"),"delete")},authToken:{get:s(()=>sessionStorage.getItem("swish-token")??void 0,"get"),set:s(r=>sessionStorage.setItem("swish-token",r),"set"),delete:s(()=>sessionStorage.removeItem("swish-token"),"delete")}},Ge=class{static{s(this,"SwishApi")}constructor(e,t,n){this.config=e,this.context=t,this.cache=new Q("swish-api","max-age=60, stale-while-revalidate=3600",n+(e.version??kt)),this.cache.cleanupExpiredEntries().catch(a=>{console.warn("Swish API cache initialization cleanup error:",a)});let i=se.profile.get(),o=se.authToken.get();this.apiClient=Yr({profile:i,authToken:o,proxyMode:this.config.proxyMode,config:{...e,fetch:s((a,u)=>(a instanceof Request?a.method:u?.method??"GET")==="GET"?this.cache.fetchWithCache(a,u):fetch(a,u),"fetch")},requestInterceptor:s(async a=>{let u=new URL(a.url,window.location.origin),l=this.config.proxyBaseUrl??"/apps/wishlist/api",c=u.pathname==="/profiles/token";return!u.pathname.startsWith(l)&&!c&&await this.bootstrapAuth(),a},"requestInterceptor"),responseInterceptor:s(async(a,u)=>(this.processProfileHeader(a),u.method!=="GET"&&await this.cache.clear(),await this.config.responseInterceptor?.(a,u),a),"responseInterceptor")}),this.itemsLoader=an(this)}async bootstrapAuth(){if(this._bootstrapAuthPromise)return this._bootstrapAuthPromise;this._bootstrapAuthPromise=(async()=>{let e=se.authToken.get();if(e)try{if(en(e,60))throw new Error("TOKEN_EXPIRED")}catch(o){(!(o instanceof Error)||o.message!=="TOKEN_EXPIRED")&&console.error("Failed to decode cached auth token",{cause:o}),se.authToken.delete(),e=void 0}if(e){this.apiClient.setAuthToken(e);return}let t=this.apiClient.getProfile(),n=this.config.customerId,i=await this.apiClient.profiles.createToken({customer:n,session:t},{useProxy:!0});if("error"in i){console.error("Failed to bootstrap auth with error",i.error);return}if(!i.data?.token){console.error("Failed to bootstrap auth with no token");return}se.authToken.set(i.data.token),this.apiClient.setAuthToken(i.data.token)})();try{return await this._bootstrapAuthPromise}finally{this._bootstrapAuthPromise=void 0}}processProfileHeader(e){let t=e.headers.get("Set-Profile");t?(this.apiClient.setProfile(t),se.profile.set(t)):t===""&&se.profile.delete()}get items(){return{...this.apiClient.items,list:s(async(e,t)=>{if(!this.config.customerId&&!this.apiClient.getProfile())return{data:[],pageInfo:{next:null,previous:null,totalCount:0}};if(t?.batch&&e?.query){e.limit!==1&&console.warn("Batching will always limit to 1 item");let n=e.query.split(" ");n.length>1&&console.warn("Batching will only support one query parameter");let i=n[0];if(!i.match(/^product:\d+$/)&&!i.match(/^variant:\d+$/))console.warn("Batching will only support product:<id> or variant:<id>");else return this.itemsLoader?.load(i)}return this.apiClient.items.list(e)},"list"),findById:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:null}:this.apiClient.items.findById(e),"findById")}}get lists(){return{...this.apiClient.lists,list:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:[],pageInfo:{next:null,previous:null,totalCount:0}}:this.apiClient.lists.list(e),"list"),findById:s(async e=>!this.config.customerId&&!this.apiClient.getProfile()?{data:null}:this.apiClient.lists.findById(e),"findById")}}get orders(){return{...this.apiClient.orders,list:s(async e=>!this.context.customer.id&&!this.apiClient.getProfile()?{data:[],pageInfo:{next:null,previous:null,totalCount:0}}:this.apiClient.orders.list(e),"list"),findById:s(async e=>!this.context.customer.id&&!this.apiClient.getProfile()?{data:null}:this.apiClient.orders.findById(e),"findById")}}get profiles(){return this.apiClient.profiles}async clearCache(){await this.cache.clear()}};var Me=class{constructor(e){this.eventMap={"POST /items\\/?$":"item-create","DELETE /items\\/?$":"item-delete","PATCH /items\\/([^/]+)\\/?$":"item-update","DELETE /items\\/([^/]+)\\/?$":"item-delete","PUT /items\\/([^/]+)\\/lists\\/?$":"item-lists-update","POST /lists\\/?$":"list-create","DELETE /lists\\/?$":"list-delete","PATCH /lists\\/([^/]+)\\/?$":"list-update","DELETE /lists\\/([^/]+)\\/?$":"list-delete"};this.eventBus=e,this.processFetchResponse=this.processFetchResponse.bind(this)}static{s(this,"SwishApiPublisher")}async processFetchResponse(e,t){try{let n=this.getEventName(t.method,e.status,t.url);if(!n)return;let i=await e.clone().text();if(e.headers.get("Content-Type")?.includes("application/json"))try{i=JSON.parse(i).data}catch(o){console.warn(o)}this.eventBus.publish(n,i)}catch(n){console.warn(n)}}getEventName(e,t,n){e=e.toUpperCase();let i=new URL(n).pathname;return e==="GET"||t<200||t>=300?void 0:Object.entries(this.eventMap).find(([a])=>{let[u,l]=a.split(" ");return u!==e?!1:new RegExp(l).test(i)})?.[1]}};var Xi=typeof HTMLElement<"u"?HTMLElement:class{},je=class extends Xi{constructor(){super();this.getComponentRef=s(()=>this.componentRef,"getComponentRef");this.setComponentRef=s(t=>{this.componentRef=t},"setComponentRef");this.shadowRoot||this.attachShadow({mode:"open"});let t=this.querySelector("template");t&&this.shadowRoot&&(this.shadowRoot.appendChild(t.content),t.remove())}static{s(this,"SwishUiElement")}};var Fe=class{static{s(this,"ShopifyBadgesUtils")}#e;constructor({getBadges:e}){this.#e=e?.bind(this)}getBadges({product:e,variant:t}){try{let n=this.getDefaultBadges({product:e,variant:t});return this.#e?this.mapBadges(this.#e({product:e,variant:t,defaultBadges:n})??[]):this.mapBadges(n)}catch(n){return console.error("Error getting badges",n),[]}}getDefaultBadges({product:e,variant:t}){let n=[];if(e?.availableForSale===!1||t?.availableForSale===!1)return n.push("Sold out"),n;let i=t?t.price.amount:e?.priceRange?.minVariantPrice.amount,o=t?t.compareAtPrice?.amount:e?.compareAtPriceRange?.minVariantPrice.amount;return o&&parseFloat(o)>parseFloat(i)&&n.push("Sale"),n}mapBadges(e){return e.map(t=>typeof t=="string"?{id:t.toLowerCase().replace(/[^a-z0-9]/g,"_"),label:t}:t)}};var un=s(r=>{let e=r.proxy?.baseUrl??"/apps/wishlist";return{proxy:{baseUrl:e},storefrontApi:{storeDomain:r.storefrontApi?.storeDomain??"",accessToken:r.storefrontApi?.accessToken??""},storefrontContext:{...r.storefrontContext,localization:{country:r.storefrontContext.localization.country.toUpperCase(),language:r.storefrontContext.localization.language.toUpperCase(),market:r.storefrontContext.localization.market}},badges:{getBadges:r.badges?.getBadges??(({defaultBadges:t})=>t)},metafields:{product:r.metafields?.product??[],productVariant:r.metafields?.productVariant??[]},swishApi:{version:r.swishApi?.version??"2026-01"},swishUi:{baseUrl:r.swishUi?.baseUrl??`${e}/assets`,components:{productRow:{showVariantTitle:r.swishUi?.components?.productRow?.showVariantTitle??!1},productDetail:{descriptionMaxLines:r.swishUi?.components?.productDetail?.descriptionMaxLines??4},variantSelect:{displayType:r.swishUi?.components?.variantSelect?.displayType??"pills"},imageSlider:{flush:r.swishUi?.components?.imageSlider?.flush??!1,loop:r.swishUi?.components?.imageSlider?.loop??!1},images:{baseTint:r.swishUi?.components?.images?.baseTint??!1},buyButtons:{shopPay:r.swishUi?.components?.buyButtons?.shopPay??!1},listDetailPage:{desktopColumns:r.swishUi?.components?.listDetailPage?.desktopColumns??4,showBuyButton:r.swishUi?.components?.listDetailPage?.showBuyButton??!0},drawer:{title:r.swishUi?.components?.drawer?.title??"",logo:{url:r.swishUi?.components?.drawer?.logo?.url??"",altText:r.swishUi?.components?.drawer?.logo?.altText??""},navigation:{variant:r.swishUi?.components?.drawer?.navigation?.variant??"floating",items:r.swishUi?.components?.drawer?.navigation?.items??[{id:"home",enabled:!0,href:"/"},{id:"items",enabled:!0,href:"/items"},{id:"lists",enabled:!0,href:"/lists"},{id:"chat",enabled:!1,href:"/chat"},{id:"orders",enabled:!0,href:"/orders"},{id:"profile",enabled:!0,href:"/profile"}]},miniMenu:{items:r.swishUi?.components?.drawer?.miniMenu?.items??[]}}},css:r.swishUi?.css??[],intents:{save:{requireVariant:r.swishUi?.intents?.save?.requireVariant??!1,showToast:r.swishUi?.intents?.save?.showToast??!1},edit:{showToast:r.swishUi?.intents?.edit?.showToast??!1},unsave:{requireConfirmation:r.swishUi?.intents?.unsave?.requireConfirmation??!1,openEditor:r.swishUi?.intents?.unsave?.openEditor??!1,showToast:r.swishUi?.intents?.unsave?.showToast??!1}},theme:r.swishUi?.theme??{},version:r.swishUi?.version??"0.40.0"}}},"createSwishOptions");var Ki=".swish-shop-bridge{position:absolute!important;top:0!important;left:0!important;padding:0!important;border:0!important;margin:0!important;pointer-events:none!important}.swish-shop-bridge input{appearance:none!important;border:none!important;width:1px!important;height:1px!important;padding:0!important;margin:0!important;background:rgba(0,0,0,0)!important}",Yi=s(()=>{let r="/";return typeof window<"u"&&(r=window.location.pathname),`<form class=swish-shop-bridge data-login-with-shop-sign-in=true id=customer_login><input name=customer[email] id=customer_login_email> <input name=return_url type=hidden value=${r}></form>`},"getHtml"),Ji=typeof HTMLElement<"u"?HTMLElement:class{},Tt=class extends Ji{static{s(this,"ShopBridge")}get swish(){return typeof window<"u"?window.swish:void 0}constructor(){super(),this.emailInput=this.querySelector('form[data-login-with-shop-sign-in] input[type="email"],form[data-login-with-shop-sign-in] input[name="customer[email]"'),this.emailInput||(this.innerHTML=`
|
|
449
443
|
<style>${Ki}</style>
|
|
450
444
|
${Yi()}
|
|
451
445
|
`,this.emailInput=this.querySelector("#customer_login_email")),this.shopModalObserver=new MutationObserver(e=>{e.forEach(t=>{t.attributeName==="style"&&document.documentElement.style.overflow==="hidden"&&this.dispatchEvent(new CustomEvent("shop-modal-open"))})}),this.shopModalObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["style"]})}disconnectedCallback(){this.shopModalObserver?.disconnect()}async load(){try{(window.Shopify?.featureAssets?.["shop-js"]?.["init-customer-accounts"]?.[0]??"").includes("init-customer-accounts")&&window.Shopify?.SignInWithShop?.initCustomerAccounts?.(!0,{fedCMEnabled:!0,windoidEnabled:!1})}catch(e){console.warn("Failed to initialize Shop JS",e)}}update(e){if(e.email&&(this.emailInput.value=e.email,this.emailInput.dispatchEvent(new Event("input"))),e.returnTo){let t=this.querySelector("input[name='return_url']");t&&(t.value=e.returnTo)}}};typeof customElements<"u"&&customElements.define("swish-shop-bridge",Tt);var He=class{constructor(e,t){this.inflightModals=new Map;this.eventListeners=new Map;this.scrollLockRefCount=0;this.scrollPositionBeforeLock=0;this._lockScroll=s(()=>this.lockScroll(),"_lockScroll");this._unlockScroll=s(()=>this.unlockScroll(),"_unlockScroll");this.swishUiOptions=e,this.storefrontContext=t}static{s(this,"SwishUi")}async hideModal(e){if(this.inflightModals.has(e))return this.inflightModals.get(e);let t=(async()=>{typeof e=="string"&&(e=await this.requireUiComponent(e)),!(!e||e.getAttribute("open")!=="true")&&e.setAttribute("open","false")})().finally(()=>{this.inflightModals.delete(e)});return this.unlockScroll(),this.inflightModals.set(e,t),t}async showModal(e){if(this.inflightModals.has(e))return this.inflightModals.get(e);let t=(async()=>{typeof e=="string"&&(e=await this.requireUiComponent(e)),!(!e||e.getAttribute("open")==="true")&&e.setAttribute("open","true")})().finally(()=>{this.inflightModals.delete(e)});return this.lockScroll(),this.inflightModals.set(e,t),t}async showSignIn(e){let t=await this.requireUiComponent("sign-in",{listeners:{close:s(()=>e?.onClose?.(),"close")}});t.setAttribute("return-to",e?.returnTo??window.location.pathname),await this.showModal(t)}async showUnsaveAlert(e){if(!e.itemId)throw new Error("An itemId is required to show the unsave alert");await this.hideAllToasts();let t=await this.requireUiComponent("unsave-alert",{listeners:{submit:s(n=>{n instanceof CustomEvent?e.onSubmit?.(n.detail):console.warn("Unsave alert submitted without detail",n)},"submit"),close:s(()=>{e.onClose?.()},"close")}});t.setAttribute("item-id",e.itemId),await this.showModal(t)}async showDeleteListAlert(e){if(!e.listId)throw new Error("A listId is required to show the delete list alert");await this.hideAllToasts();let t=await this.requireUiComponent("delete-list-alert",{listeners:{submit:s(()=>{e.onSubmit?.()},"submit"),close:s(()=>{e.onClose?.()},"close")}});t.setAttribute("list-id",e.listId),await this.showModal(t)}async showDrawer(e){await this.hideAllToasts();let t=await this.requireUiComponent("drawer",{listeners:{close:s(()=>{e?.onClose?.()},"close")}});t.setAttribute("account-url",this.storefrontContext.routes.accountUrl),this.storefrontContext.customer.id&&t.setAttribute("customer-id",this.storefrontContext.customer.id),await this.showModal(t)}async showListMenu(e){if(!e.listId)throw new Error("listId is required");await this.hideAllToasts();let t=await this.requireUiComponent("list-menu",{listeners:{close:s(n=>{e.onClose?.()},"close"),edit:s(n=>{n instanceof CustomEvent?e.onEdit?.(n.detail):console.warn("List menu submitted without detail",n)},"edit"),delete:s(n=>{n instanceof CustomEvent?e.onDelete?.():console.warn("List menu deleted without detail",n)},"delete")}});t.setAttribute("list-id",e.listId),await this.showModal(t)}async showListSelect(e){if(!e.itemId)throw new Error("itemId is required");await this.hideAllToasts();let t=await this.requireUiComponent("list-select",{listeners:{submit:s(async n=>{"detail"in n&&n.detail?e?.onSubmit?.(n.detail):console.warn("List select form submitted without detail",n)},"submit"),close:s(()=>{e.onClose?.()},"close"),unsave:s(n=>{n instanceof CustomEvent?e.onUnsave?.(n.detail):console.warn("List select unsave without detail",n)},"unsave")}});t.setAttribute("item-id",e.itemId),await this.showModal(t)}async initListDetailPage(e,t){let n=await this.requireUiComponent("list-detail-page",{refElement:t});e.listId&&n.setAttribute("list-id",e.listId)}async showToast(e){await this.requireUiComponent("toast-manager",{onHydrated:s(t=>{t.current.show(e)},"onHydrated")})}async hideAllToasts(){this.queryComponent("toast-manager")&&await this.requireUiComponent("toast-manager",{onHydrated:s(e=>{e.current.clear()},"onHydrated")})}async showVariantSelect(e){await this.hideAllToasts();let t=await this.requireUiComponent("variant-select",{listeners:{submit:s(async n=>{"detail"in n&&n.detail?e?.onSubmit?.(n.detail):console.warn("Variant select form submitted without detail",n)},"submit"),close:s(()=>{e?.onClose?.()},"close")}});if(e?.productId)t.setAttribute("product-id",e.productId);else if(e?.productHandle)t.setAttribute("product-handle",e.productHandle);else throw new Error("Either productId or productHandle must be provided");e?.variantId&&t.setAttribute("variant-id",e.variantId),e?.displayType&&t.setAttribute("display-type",e.displayType),await this.showModal(t)}async showQuickBuy(e){await this.hideAllToasts();let t=await this.requireUiComponent("quick-buy",{listeners:{submit:s(async n=>{"detail"in n&&n.detail?e?.onSubmit?.(n.detail):console.warn("Quick buy form submitted without detail",n)},"submit"),close:s(()=>{e?.onClose?.()},"close")}});if(e?.productId)t.setAttribute("product-id",e.productId);else throw new Error("ProductId must be provided");e?.variantId&&t.setAttribute("variant-id",e.variantId),await this.showModal(t)}async showListEditor(e){let t=await this.requireUiComponent("list-editor",{listeners:{submit:s(async n=>{"detail"in n&&n.detail?e?.onSubmit?.(n.detail):console.warn("List editor form submitted without detail",n)},"submit"),close:s(()=>{e?.onClose?.()},"close")}});e?.listId&&t.setAttribute("list-id",e.listId),await this.showModal(t)}async initShopBridge({onShopModalOpen:e}){let t=document.querySelector("swish-shop-bridge");if(t||(document.body.insertAdjacentHTML("beforeend","<swish-shop-bridge></swish-shop-bridge>"),t=document.querySelector("swish-shop-bridge")),!t)throw new Error("Failed to initialize Shop Bridge");return t.addEventListener("shop-modal-open",()=>e(),{once:!0}),await t.load(),t}async requireUiComponent(e,t){this.loadCricalResources();let n=`${this.swishUiOptions.baseUrl}/ui@${this.swishUiOptions.version}/${e}.html`,i=await fetch(n).then(l=>l.text()),o=t?.instance,a=t?.listeners,u=this.queryComponent(e,o)??await this.insertComponent({name:e,template:i,refElement:t?.refElement??document.body,position:"beforeend",instance:o});if(u.shadowRoot&&!u.hasAttribute("hydrated")){let l=`${this.swishUiOptions.baseUrl}/ui@${this.swishUiOptions.version}/${e}.js`;Promise.all([this.loadNonCriticalResources(),import(l)]).then(([{bundleCssStylesheet:c,customCssStylesheets:p},{hydrate:d}])=>{u.shadowRoot&&c&&(u.shadowRoot.adoptedStyleSheets=[...u.shadowRoot.adoptedStyleSheets,...p,c],u.shadowRoot?.querySelector(":host > style")?.remove()),d(u),u.setAttribute("hydrated",""),t?.onHydrated?.(u.getComponentRef())})}else u.hasAttribute("hydrated")&&t?.onHydrated?.(u.getComponentRef());for(let{event:l,listener:c}of this.eventListeners.values())u.removeEventListener(l,c);for(let[l,c]of Object.entries(a??{}))this.eventListeners.set(`${e}-${o}-${l}`,{event:l,listener:c}),u.addEventListener(l,c);return u}async loadCricalResources(){return this._loadCricalResourcesPromise?this._loadCricalResourcesPromise:(this._loadCricalResourcesPromise=(async()=>{let e=`${this.swishUiOptions.baseUrl}/ui@${this.swishUiOptions.version}/theme.css`,t=await fetch(e).then(i=>i.text()),n=new CSSStyleSheet;return n.replaceSync(t),{themeVariablesStylesheet:n}})(),this._loadCricalResourcesPromise)}async loadNonCriticalResources(){return this._loadNonCriticalResourcesPromise?this._loadNonCriticalResourcesPromise:(this._loadNonCriticalResourcesPromise=(async()=>{let e=`${this.swishUiOptions.baseUrl}/ui@${this.swishUiOptions.version}/bundle.css`,t=s(o=>{let a=new CSSStyleSheet;return a.replaceSync(o),a},"createCssStylesheet"),[n,...i]=await Promise.all([fetch(e).then(o=>o.text()).then(t),...this.swishUiOptions.css.map(async o=>o instanceof URL?t(await fetch(o).then(a=>a.text())):t(o))]);return{bundleCssStylesheet:n,customCssStylesheets:i}})(),this._loadNonCriticalResourcesPromise)}async insertComponent({name:e,instance:t,template:n,position:i,refElement:o}){let{themeVariablesStylesheet:a}=await this.loadCricalResources();o.insertAdjacentHTML(i,n.replace(' shadowrootmode="open"',""));let u=this.queryComponent(e,t);if(!u)throw new Error(`Element ${e} not found in DOM`);return u.shadowRoot&&(u.shadowRoot.adoptedStyleSheets=[a]),u}queryComponent(e,t){let n=`swish-ui[ref="${e}${t?`-${t}`:""}"]`;return document.querySelector(n)}lockScroll(){this.scrollLockRefCount++,this.scrollLockRefCount===1&&(this.scrollPositionBeforeLock=window.scrollY,this.scrollLockStyleSheet||(this.scrollLockStyleSheet=new CSSStyleSheet,document.adoptedStyleSheets=[...document.adoptedStyleSheets,this.scrollLockStyleSheet]),this.scrollLockStyleSheet.replaceSync(`
|
|
@@ -456,4 +450,4 @@ Values:
|
|
|
456
450
|
left: 0px;
|
|
457
451
|
right: 0px;
|
|
458
452
|
}
|
|
459
|
-
`),document.documentElement.setAttribute("swish-locked",""))}unlockScroll(){this.scrollLockRefCount>0&&this.scrollLockRefCount--,this.scrollLockRefCount===0&&(this.scrollLockStyleSheet&&this.scrollLockStyleSheet.replaceSync(""),window.scrollTo({top:this.scrollPositionBeforeLock,behavior:"instant"}),this.scrollPositionBeforeLock=0,document.documentElement.removeAttribute("swish-locked"))}};var Zi="0.
|
|
453
|
+
`),document.documentElement.setAttribute("swish-locked",""))}unlockScroll(){this.scrollLockRefCount>0&&this.scrollLockRefCount--,this.scrollLockRefCount===0&&(this.scrollLockStyleSheet&&this.scrollLockStyleSheet.replaceSync(""),window.scrollTo({top:this.scrollPositionBeforeLock,behavior:"instant"}),this.scrollPositionBeforeLock=0,document.documentElement.removeAttribute("swish-locked"))}};var Zi="0.72.0",Hl=s(async r=>{if(typeof window>"u")throw new Error("Swish is not supported in this environment");if(window.swish)return window.swish;try{let n=localStorage.getItem("wk_session_id");n&&(localStorage.setItem("swish-profile",`gid://swish/Session/${n}`),localStorage.removeItem("wk_session_id"))}catch(n){console.warn("Failed to migrate legacy session id to Swish profile",{cause:n})}let e=un(r),t=new _t(e);try{let n=sessionStorage.getItem("swish-token"),i=n&&tn(n),o=!!e.storefrontContext.customer.id;o!==i&&sessionStorage.removeItem("swish-token");let u=!!localStorage.getItem("swish-profile");o===u&&await t.api.clearCache()}catch(n){console.warn("Could not check if customer logged out.",{cause:n})}return window.swish=t,document.dispatchEvent(new Event("swish-ready")),typeof window.Shopify?.analytics?.publish=="function"&&window.Shopify.analytics.publish("swish-ready",{proxyUrl:e.proxy.baseUrl,market:e.storefrontContext.localization.market,country:e.storefrontContext.localization.country,language:e.storefrontContext.localization.language,rootUrl:e.storefrontContext.routes.rootUrl}),t},"createSwish"),_t=class{constructor(e){this.dom={createElementLocator:pe,createQueryParamsObserver:oe};this.state={itemContext:Xt(this),itemState:Kt(this),itemCount:Yt(this),swishQuery:Jt(this),effect:V,signal:C,computed:B};this.swishOptions=e,this.events=new ve,this.swishBadges=new Fe({getBadges:this.swishOptions.badges?.getBadges});let t={proxyBaseUrl:`${this.swishOptions.proxy.baseUrl}/api`,...this.swishOptions.swishApi??{}};this.swishApiPublisher=new Me(this.events);let n=[Zi,e.swishUi?.version].join("-");this.swishApi=new Ge({...t,customerId:e.storefrontContext.customer.id??void 0,responseInterceptor:this.swishApiPublisher.processFetchResponse},this.swishOptions.storefrontContext,n),this.ajaxApiPublisher=new me(this.events),this.ajaxApi=new ye({storeDomain:this.swishOptions.storefrontApi.storeDomain,responseInterceptor:this.ajaxApiPublisher.processFetchResponse}),this.ajaxApi.patchFetch(),this.storefrontApi=new Ve(this.swishOptions.storefrontApi,this.swishOptions.storefrontContext,this.swishBadges,this.swishOptions.metafields),this.swishUi=new He(this.swishOptions.swishUi,this.swishOptions.storefrontContext),this.events.subscribe(["cart-add","cart-update","cart-change","cart-clear"],()=>{this.ajaxApi.clearCache()}),customElements.get("swish-ui")||customElements.define("swish-ui",je),this.intents=new Pe(this,this.swishUi)}static{s(this,"SwishApp")}get options(){return this.swishOptions}get customer(){return this.swishOptions.storefrontContext.customer}get localization(){return this.swishOptions.storefrontContext.localization}get routes(){return this.swishOptions.storefrontContext.routes}get badges(){return this.swishBadges}get api(){return this.swishApi}get storefront(){return this.storefrontApi}get ajax(){return this.ajaxApi}get shopUrl(){return`https://${this.swishOptions.storefrontApi.storeDomain}`}get ui(){return this.swishUi}};export{_t as SwishApp,Zi as VERSION,Hl as createSwish};
|