@dropins/storefront-cart 3.3.0-beta.0 → 3.3.0-beta.2

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/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["/@dropins/storefront-cart/src/lib/cookies.ts","/@dropins/storefront-cart/src/lib/persisted-data.ts","/@dropins/storefront-cart/src/lib/state.ts","/@dropins/storefront-cart/src/api/initialize/initialize.ts","/@dropins/storefront-cart/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-cart/src/data/transforms/transform-cart.ts","/@dropins/storefront-cart/src/data/transforms/transform-store-config.ts","/@dropins/storefront-cart/src/lib/fetch-error.ts","/@dropins/storefront-cart/src/api/graphql/PriceRangeFragment.ts","/@dropins/storefront-cart/src/api/graphql/CustomizableOptionsFragment.ts","/@dropins/storefront-cart/src/api/graphql/DownloadableCartItemsFragment.ts","/@dropins/storefront-cart/src/api/graphql/GiftFragment.ts","/@dropins/storefront-cart/src/api/graphql/CartItemFragment.ts","/@dropins/storefront-cart/src/api/graphql/CartFragment.ts","/@dropins/storefront-cart/src/api/addProductsToCart/graphql/AddProductsToCartMutation.ts","/@dropins/storefront-cart/src/data/transforms/acdl-context.ts","/@dropins/storefront-cart/src/lib/acdl.ts","/@dropins/storefront-cart/src/api/addProductsToCart/addProductsToCart.ts","/@dropins/storefront-cart/src/api/graphql/CustomerAccountFragment.ts","/@dropins/storefront-cart/src/api/getCartData/graphql/CartQuery.ts","/@dropins/storefront-cart/src/api/getCartData/getCartData.ts","/@dropins/storefront-cart/src/api/initializeCart/graphql/MergeCartsMutation.ts","/@dropins/storefront-cart/src/api/initializeCart/initializeCart.ts","/@dropins/storefront-cart/src/api/updateProductsFromCart/graphql/UpdateProductsMutation.ts","/@dropins/storefront-cart/src/api/updateProductsFromCart/updateProductsFromCart.ts","/@dropins/storefront-cart/src/api/resetCart/resetCart.ts","/@dropins/storefront-cart/src/api/createGuestCart/graphql/CreateCartMutation.ts","/@dropins/storefront-cart/src/api/createGuestCart/createGuestCart.ts","/@dropins/storefront-cart/src/api/getStoreConfig/graphql/StoreConfigQuery.ts","/@dropins/storefront-cart/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-cart/src/data/transforms/transform-shipping.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/graphql/countriesAndRegionsQueries.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/graphql/estimateShippingMethodsMutation.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/getEstimateShipping.ts","/@dropins/storefront-cart/src/api/getEstimatedTotals/graphql/GetEstimatedTotalsMutation.ts","/@dropins/storefront-cart/src/api/getEstimatedTotals/getEstimatedTotals.ts","/@dropins/storefront-cart/src/api/refreshCart/refreshCart.ts","/@dropins/storefront-cart/src/api/applyCouponsToCart/graphql/ApplyCouponsToCartMutation.ts","/@dropins/storefront-cart/src/api/applyCouponsToCart/applyCouponsToCart.ts","/@dropins/storefront-cart/src/api/publishShoppingCartViewEvent/publishShoppingCartViewEvent.ts","/@dropins/storefront-cart/src/api/applyGiftCardToCart/graphql/ApplyGiftCardToCartMutation.ts","/@dropins/storefront-cart/src/api/applyGiftCardToCart/applyGiftCardToCart.ts","/@dropins/storefront-cart/src/api/removeGiftCardFromCart/graphql/RemoveGiftCardFromCartMutation.ts","/@dropins/storefront-cart/src/api/removeGiftCardFromCart/removeGiftCardFromCart.ts","/@dropins/storefront-cart/src/api/setGiftOptionsOnCart/graphql/UpdateGiftOptionsMutation.ts","/@dropins/storefront-cart/src/api/setGiftOptionsOnCart/setGiftOptionsOnCart.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport function getCookie(cookieName: string) {\n // Split the cookie string into an array of individual cookies\n const cookies = document.cookie.split(';');\n\n // Loop through the cookies to find the one with the specified name\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim(); // Remove leading and trailing spaces\n\n // Check if this cookie starts with the name you're looking for\n if (cookie.indexOf(`${cookieName}=`) === 0) {\n // Extract and return the cookie's value\n return cookie.substring(cookieName.length + 1);\n }\n }\n\n // If the cookie is not found, return null\n return null;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CartModel } from '@/cart/data/models';\n\nconst AUTHENTICATED_CART_KEY = 'DROPIN__CART__CART__AUTHENTICATED';\n\nexport function setPersistedCartData(data: CartModel | null) {\n if (data) {\n sessionStorage.setItem('DROPIN__CART__CART__DATA', JSON.stringify(data));\n } else {\n sessionStorage.removeItem('DROPIN__CART__CART__DATA');\n }\n}\n\nexport function getPersistedCartData(): CartModel | null {\n const data = sessionStorage.getItem('DROPIN__CART__CART__DATA');\n\n if (data) return JSON.parse(data);\n\n return null;\n}\n\nexport function setEstimatedShippingLocation(\n data: {\n [key: string]: string;\n } | null\n) {\n if (data) {\n sessionStorage.setItem(\n 'DROPIN__CART__SHIPPING__DATA',\n JSON.stringify(data)\n );\n } else {\n sessionStorage.removeItem('DROPIN__CART__SHIPPING__DATA');\n }\n}\n\nexport function getEstimatedShippingLocation(): {\n [key: string]: string;\n} | null {\n const data = sessionStorage.getItem('DROPIN__CART__SHIPPING__DATA');\n\n if (data) return JSON.parse(data);\n\n return null;\n}\n\nexport function setAuthenticatedCart(isAuthenticated: boolean) {\n isAuthenticated\n ? localStorage.setItem(AUTHENTICATED_CART_KEY, 'true')\n : localStorage.removeItem(AUTHENTICATED_CART_KEY);\n}\n\nexport function getAuthenticatedCart(): boolean {\n return localStorage.getItem(AUTHENTICATED_CART_KEY) === 'true';\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { getCookie } from '@/cart/lib/cookies';\nimport { StoreConfigModel } from '@/cart/data/models/store-models';\nimport { getAuthenticatedCart, setAuthenticatedCart } from './persisted-data';\n\ntype State = {\n state: {\n displayMiniCart: boolean;\n miniCartMaxItemsDisplay: number;\n cartExpiresInDays: number;\n cartSummaryDisplayTotal: number;\n defaultCountry: string;\n categoryFixedProductTaxDisplaySetting: string;\n productFixedProductTaxDisplaySetting: string;\n salesFixedProductTaxDisplaySetting: string;\n useConfigurableParentThumbnail: boolean;\n shoppingCartDisplaySetting: {\n zeroTax: boolean;\n subtotal: string;\n price: string;\n shipping: string;\n fullSummary: boolean;\n grandTotal: boolean;\n taxGiftWrapping: string;\n };\n };\n cartId: string | null;\n authenticated: boolean;\n initializing?: boolean;\n locale?: string;\n config?: StoreConfigModel | null;\n};\n\nconst _state: State = (() => {\n const isAuthenticated = getAuthenticatedCart();\n return {\n cartId: null,\n authenticated: isAuthenticated,\n };\n})();\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n // @ts-ignore\n target[key] = value;\n\n if (key === 'cartId') {\n // only update cookie if value has changed\n if (value === state.cartId) return true;\n\n if (value === null) {\n // remove cookie\n document.cookie = `DROPIN__CART__CART-ID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n return true;\n }\n\n // get expiration days from config\n const expiresInDays = state.config?.cartExpiresInDays;\n\n if (!expiresInDays) {\n console.warn(\n 'Missing \"expiresInDays\" config. Cookie expiration will default to 30 days.'\n );\n }\n\n // set expiration date\n const expires = new Date();\n expires.setDate(expires.getDate() + (expiresInDays ?? 30));\n\n // set cookie\n document.cookie = `DROPIN__CART__CART-ID=${value}; expires=${expires.toUTCString()}; path=/`;\n }\n\n if (key === 'authenticated') {\n setAuthenticatedCart(value);\n }\n\n return true;\n },\n get(target, key) {\n if (key === 'cartId') {\n // get value from cookie\n return getCookie('DROPIN__CART__CART-ID');\n }\n\n return target[key as keyof State];\n },\n});\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Initializer, Model } from '@adobe-commerce/elsie/lib';\nimport { initializeCart, refreshCart, resetCart } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { setPersistedCartData } from '@/cart/lib/persisted-data';\nimport { CartModel } from '@/cart/data/models';\n\ntype ConfigProps = {\n disableGuestCart?: boolean;\n langDefinitions?: Lang;\n\n models?: {\n CartModel?: Model<CartModel>;\n };\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (_config) => {\n const config = { disableGuestCart: false, ..._config };\n\n // Set config\n initialize.config.setConfig(config);\n\n initializeCart().catch(console.error);\n },\n\n listeners: () => [\n events.on(\n 'authenticated',\n (authenticated) => {\n if (state.authenticated && !authenticated) {\n // Reset cart if the user is no longer authenticated\n events.emit('cart/reset', undefined);\n }\n // Login event occurred\n else if (authenticated && !state.authenticated) {\n state.authenticated = authenticated;\n initializeCart().catch(console.error);\n }\n },\n { eager: true }\n ),\n\n events.on('locale', async (locale) => {\n if (locale !== state.locale) {\n state.locale = locale;\n initializeCart().catch(console.error);\n }\n }),\n\n events.on('cart/reset', () => {\n resetCart().catch(console.error);\n events.emit('cart/data', null);\n }),\n\n events.on('cart/data', (payload) => {\n setPersistedCartData(payload);\n }),\n\n events.on('checkout/updated', (payload) => {\n if (!payload || payload?.type === 'quote') return;\n\n refreshCart().catch(console.error);\n }),\n\n events.on('requisitionList/alert', () => {\n refreshCart().catch(console.error);\n }),\n ],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { CartModel, StoreConfigModel } from '@/cart/data/models';\nimport { state } from '@/cart/lib/state';\nimport { config } from '@/cart/api';\n\nexport function transformCart(data: any): CartModel | null {\n if (!data) return null;\n\n const model = {\n appliedGiftCards:\n data?.applied_gift_cards?.map((giftCard: any) => {\n const giftCartState = {\n code: giftCard.code ?? '',\n appliedBalance: {\n value: giftCard.applied_balance.value ?? 0,\n currency: giftCard.applied_balance.currency ?? 'USD',\n },\n currentBalance: {\n value: giftCard.current_balance.value ?? 0,\n currency: giftCard.current_balance.currency ?? 'USD',\n },\n expirationDate: giftCard.expiration_date ?? '',\n };\n\n const currentBalanceValue = giftCartState?.currentBalance?.value;\n const appliedBalanceValue = giftCartState?.appliedBalance?.value;\n const currency = giftCartState?.currentBalance?.currency;\n\n const hasBalanceDifference =\n currentBalanceValue - appliedBalanceValue > 0;\n\n const value = hasBalanceDifference\n ? currentBalanceValue - appliedBalanceValue\n : 0;\n\n return {\n ...giftCartState,\n giftCardBalance: { value, currency },\n };\n }) ?? [],\n id: data.id,\n totalQuantity: transformQuantity(data),\n totalUniqueItems: data.itemsV2.items.length,\n totalGiftOptions: transformGiftOptions(data?.prices?.gift_options),\n giftReceiptIncluded: data?.gift_receipt_included ?? false,\n printedCardIncluded: data?.printed_card_included ?? false,\n cartGiftWrapping:\n data?.available_gift_wrappings?.map((wrapItem: any) => {\n return {\n design: wrapItem.design ?? '',\n uid: wrapItem.uid,\n selected: data?.gift_wrapping?.uid === wrapItem.uid,\n image: {\n url: wrapItem?.image?.url ?? '',\n label: wrapItem.image?.label ?? '',\n },\n price: {\n currency: wrapItem?.price?.currency ?? 'USD',\n value: wrapItem?.price?.value ?? 0,\n },\n };\n }) ?? [],\n giftMessage: {\n senderName: data?.gift_message?.from ?? '',\n recipientName: data?.gift_message?.to ?? '',\n message: data?.gift_message?.message ?? '',\n },\n errors: transformErrors(data?.itemsV2),\n items: transformItems(data?.itemsV2),\n miniCartMaxItems: transformItems(data?.itemsV2).slice(\n 0,\n state.config?.miniCartMaxItemsDisplay ?? 10\n ),\n total: {\n includingTax: {\n value: data.prices.grand_total.value,\n currency: data.prices.grand_total.currency,\n },\n excludingTax: {\n value: data.prices.grand_total_excluding_tax.value,\n currency: data.prices.grand_total_excluding_tax.currency,\n },\n },\n discount: calculateTotal(\n data.prices.discounts,\n data.prices.grand_total.currency\n ),\n subtotal: {\n excludingTax: {\n value: data.prices.subtotal_excluding_tax?.value,\n currency: data.prices.subtotal_excluding_tax?.currency,\n },\n includingTax: {\n value: data.prices.subtotal_including_tax?.value,\n currency: data.prices.subtotal_including_tax?.currency,\n },\n includingDiscountOnly: {\n value: data.prices.subtotal_with_discount_excluding_tax?.value,\n currency: data.prices.subtotal_with_discount_excluding_tax?.currency,\n },\n },\n appliedTaxes: transformTotalPriceModifiers(data.prices.applied_taxes),\n totalTax: calculateTotal(\n data.prices.applied_taxes,\n data.prices.grand_total.currency\n ),\n appliedDiscounts: transformTotalPriceModifiers(data.prices.discounts),\n isVirtual: data.is_virtual,\n addresses: {\n shipping: data.shipping_addresses && transformAddresses(data),\n },\n isGuestCart: !state.authenticated,\n hasOutOfStockItems: transformOutOfStockItems(data),\n hasFullyOutOfStockItems: transformFullyOutOfStockItems(data),\n appliedCoupons: data.applied_coupons,\n };\n\n // extend the model with custom transformer\n return merge(\n model,\n config.getConfig().models?.CartModel?.transformer?.(data)\n );\n}\n\nfunction transformGiftOptions(giftOptions: any) {\n return {\n giftWrappingForItems: {\n value: giftOptions?.gift_wrapping_for_items?.value ?? 0,\n currency: giftOptions?.gift_wrapping_for_items?.currency ?? 'USD',\n },\n giftWrappingForItemsInclTax: {\n value: giftOptions?.gift_wrapping_for_items_incl_tax?.value ?? 0,\n currency:\n giftOptions?.gift_wrapping_for_items_incl_tax?.currency ?? 'USD',\n },\n giftWrappingForOrder: {\n value: giftOptions?.gift_wrapping_for_order?.value ?? 0,\n currency: giftOptions?.gift_wrapping_for_order?.currency ?? 'USD',\n },\n giftWrappingForOrderInclTax: {\n value: giftOptions?.gift_wrapping_for_order_incl_tax?.value ?? 0,\n currency:\n giftOptions?.gift_wrapping_for_order_incl_tax?.currency ?? 'USD',\n },\n printedCard: {\n value: giftOptions?.printed_card?.value ?? 0,\n currency: giftOptions?.printed_card?.currency ?? 'USD',\n },\n printedCardInclTax: {\n value: giftOptions?.printed_card_incl_tax?.value ?? 0,\n currency: giftOptions?.printed_card_incl_tax?.currency ?? 'USD',\n },\n };\n}\n\n// Need to calculate total amount since it's not provided by GraphQL\nfunction calculateTotal(data: any[], currency: string) {\n if (!data?.length)\n return {\n value: 0,\n currency,\n };\n\n return data.reduce(\n (acc: any, item: any) => {\n return {\n value: acc.value + item.amount.value,\n currency: item.amount.currency,\n };\n },\n { value: 0, currency }\n );\n}\n\nfunction getImage(config: StoreConfigModel | null | undefined, item: any) {\n return {\n // Use parent thumbnail if configured, otherwise use own variant. use the parent thumbnail as a fallback\n src: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.url\n : item.configured_variant?.thumbnail?.url || item.product.thumbnail.url,\n alt: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.label\n : item.configured_variant?.thumbnail?.label ||\n item.product.thumbnail.label,\n };\n}\n\nfunction getRegularPrice(item: any) {\n if (item.__typename === 'ConfigurableCartItem') {\n return {\n value:\n item.configured_variant?.price_range?.maximum_price.regular_price.value,\n currency:\n item.configured_variant?.price_range?.maximum_price.regular_price\n .currency,\n };\n }\n if (item.__typename === 'GiftCardCartItem') {\n return {\n value: item.prices.price.value,\n currency: item.prices.price.currency,\n };\n }\n return {\n value: item.prices.original_item_price.value,\n currency: item.prices.original_item_price.currency,\n };\n}\n\n/**\n * Finds the most applicable price tier for a given quantity\n * @param priceTiers - Array of price tier objects\n * @param quantity - Current item quantity\n * @returns The applicable tier or null if none found\n */\nfunction findApplicablePriceTier(priceTiers: any[], quantity: number) {\n if (!priceTiers?.length) return null;\n\n // Sort price tiers by quantity in descending order to find the highest applicable tier\n const sortedTiers = [...priceTiers].sort(\n (a: any, b: any) => b.quantity - a.quantity\n );\n\n // Find the highest tier where the current quantity meets or exceeds the tier's minimum quantity\n return sortedTiers.find((tier: any) => quantity >= tier.quantity) || null;\n}\n\nfunction getDiscounted(item: any) {\n const quantity = item.quantity;\n const isConfigurable = item.__typename === 'ConfigurableCartItem';\n\n // Get price tiers and price range based on item type\n const priceTiers = isConfigurable\n ? item.configured_variant?.price_tiers\n : item.product.price_tiers;\n const priceRange = isConfigurable\n ? item.configured_variant?.price_range\n : item.product.price_range;\n\n // Check price tiers first for discount eligibility\n const applicableTier = findApplicablePriceTier(priceTiers, quantity);\n if (applicableTier) {\n return applicableTier.discount.amount_off > 0;\n }\n\n // Fallback to regular price range discount\n return priceRange?.maximum_price.discount.amount_off > 0;\n}\n\nfunction transformGiftMessage(data: any) {\n return {\n senderName: data?.gift_message?.from ?? '',\n recipientName: data?.gift_message?.to ?? '',\n message: data?.gift_message?.message ?? '',\n };\n}\n\nfunction transformWrappingPrice(data: any) {\n return {\n currency: data?.currency ?? 'USD',\n value: data?.value ?? 0,\n };\n}\n\nfunction transformItems(data: any) {\n if (!data?.items?.length) return [];\n\n const config = state.config;\n\n return data.items.map((item: any) => ({\n giftWrappingAvailable: item?.product?.gift_wrapping_available ?? false,\n giftWrappingPrice: transformWrappingPrice(\n item?.product?.gift_wrapping_price\n ),\n giftMessage: transformGiftMessage(item),\n productGiftWrapping:\n item?.available_gift_wrapping?.map((wrapItem: any) => {\n return {\n design: wrapItem.design ?? '',\n uid: wrapItem.uid,\n selected: item.gift_wrapping?.uid === wrapItem.uid,\n image: {\n url: wrapItem?.image?.url ?? '',\n label: wrapItem.image?.label ?? '',\n },\n price: {\n currency: wrapItem?.price?.currency ?? 'USD',\n value: wrapItem?.price?.value ?? 0,\n },\n };\n }) ?? [],\n itemType: item.__typename,\n uid: item.uid,\n giftMessageAvailable: transformGiftOptionsCode(\n item.product.gift_message_available\n ),\n url: {\n urlKey: item.product.url_key,\n categories: item.product.categories.map(\n (category: any) => category.url_key\n ),\n },\n canonicalUrl: item.product.canonical_url,\n categories: item.product.categories.map((category: any) => category.name),\n priceTiers:\n item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant?.price_tiers?.map(\n (priceTier: any) => priceTier\n ) || []\n : item.product.price_tiers?.map((priceTier: any) => priceTier) || [],\n quantity: item.quantity,\n sku: transformSKU(item),\n topLevelSku: item.product.sku,\n name: item.product.name,\n image: getImage(config, item),\n price: {\n value: item.prices.price.value,\n currency: item.prices.price.currency,\n },\n taxedPrice: {\n value: item.prices.price_including_tax.value,\n currency: item.prices.price_including_tax.currency,\n },\n fixedProductTaxes: item.prices.fixed_product_taxes,\n rowTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n rowTotalIncludingTax: {\n value: item.prices.row_total_including_tax.value,\n currency: item.prices.row_total_including_tax.currency,\n },\n links: transformLinks(item.links),\n total: {\n value: item.prices.original_row_total?.value,\n currency: item.prices.original_row_total?.currency,\n },\n discount: {\n value: item.prices.total_item_discount.value,\n currency: item.prices.total_item_discount.currency,\n label: item.prices.discounts?.map((discount: any) => discount.label),\n },\n regularPrice: getRegularPrice(item),\n discounted: getDiscounted(item),\n bundleOptions:\n item.__typename === 'BundleCartItem'\n ? transformBundleOptions(item.bundle_options)\n : null,\n bundleOptionsUIDs:\n item.__typename === 'BundleCartItem'\n ? extractBundleOptionUIDs(item.bundle_options)\n : null,\n selectedOptions: transformSelectedOptions(item.configurable_options)\n ?.options,\n selectedOptionsUIDs: transformSelectedOptions(item.configurable_options)\n ?.uids,\n customizableOptions: transformCustomizableOptions(\n item.customizable_options\n ),\n sender: item.__typename === 'GiftCardCartItem' ? item.sender_name : null,\n senderEmail:\n item.__typename === 'GiftCardCartItem' ? item.sender_email : null,\n recipient:\n item.__typename === 'GiftCardCartItem' ? item.recipient_name : null,\n recipientEmail:\n item.__typename === 'GiftCardCartItem' ? item.recipient_email : null,\n message: item.__typename === 'GiftCardCartItem' ? item.message : null,\n\n discountedTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n\n onlyXLeftInStock:\n item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant?.only_x_left_in_stock\n : item.product.only_x_left_in_stock,\n lowInventory:\n item.is_available && item.product.only_x_left_in_stock !== null,\n insufficientQuantity:\n (item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant\n : item.product\n ).stock_status === 'IN_STOCK' && !item.is_available,\n outOfStock: item.product.stock_status === 'OUT_OF_STOCK',\n stockLevel: transformStockLevel(item),\n // Add support for BundleCartItem\n discountPercentage: transformDiscountPercentage(item),\n savingsAmount: transformDiscountAmount(item),\n productAttributes: transformProductAttributes(item),\n }));\n}\n\n// This helper follows the approach used in the store configuration GraphQL schema for Gift Messages,\n// where a `null` value represents the \"use system value\" option. It requires special processing\n// based on both global and product-level configurations\nfunction transformGiftOptionsCode(data: string) {\n switch (+data) {\n case 0:\n return false;\n case 1:\n return true;\n case 2:\n return null;\n default:\n return false;\n }\n}\n\nfunction transformErrors(data: any) {\n const result = data?.items?.reduce((acc: any, item: any) => {\n item.errors?.forEach((error: Error) => {\n acc.push({ uid: item.uid, text: error.message });\n });\n\n return acc;\n }, []);\n\n return result?.length ? result : null;\n}\n\nfunction transformTotalPriceModifiers(data: any) {\n if (!data?.length) return [];\n\n return data.map((item: any) => ({\n amount: {\n value: item.amount.value,\n currency: item.amount.currency,\n },\n label: item.label,\n coupon: item.coupon,\n }));\n}\n\nfunction transformBundleOptions(data: any) {\n const bundle = data?.map((option: any) => ({\n uid: option.uid,\n label: option.label,\n value: option.values.map((value: any) => value.label).join(', '),\n }));\n\n const bundleOptions: { [key: string]: any } = {};\n\n bundle?.forEach((option: any) => {\n bundleOptions[option.label] = option.value;\n });\n\n return Object.keys(bundleOptions).length > 0 ? bundleOptions : null;\n}\n\nfunction extractBundleOptionUIDs(data: any) {\n if (!data?.length) return null;\n\n const allUIDs: string[] = [];\n data.forEach((option: any) => {\n if (option.values?.length) {\n const valueUIDs = option.values.map((value: any) => value.uid);\n allUIDs.push(...valueUIDs);\n }\n });\n\n return allUIDs.length > 0 ? allUIDs : null;\n}\n\nfunction transformSelectedOptions(data: any) {\n const selected = data?.map((option: any) => ({\n uid: option.configurable_product_option_uid,\n label: option.option_label,\n value: option.value_label,\n valueUid: option.configurable_product_option_value_uid,\n }));\n\n const selectedOptions: { [key: string]: any } = {};\n const selectedOptionsUIDs: { [key: string]: any } = {};\n\n selected?.forEach((option: any) => {\n selectedOptions[option.label] = option.value;\n selectedOptionsUIDs[option.label] = option.valueUid;\n });\n\n return {\n options: Object.keys(selectedOptions).length > 0 ? selectedOptions : null,\n uids:\n Object.keys(selectedOptionsUIDs).length > 0 ? selectedOptionsUIDs : null,\n };\n}\n\nfunction transformCustomizableOptions(data: any) {\n const transformedOptions = data?.map((option: any) => ({\n uid: option.customizable_option_uid,\n label: option.label,\n type: option.type,\n values: option.values.map((value: any) => ({\n uid: value.customizable_option_value_uid,\n label: value.label,\n value: value.value,\n })),\n }));\n\n const result: { [key: string]: any } = {};\n\n transformedOptions?.forEach((option: any) => {\n switch (option.type) {\n case 'field':\n case 'area':\n case 'date_time':\n result[option.label] = option.values[0].value;\n break;\n case 'radio':\n case 'drop_down':\n result[option.label] = option.values[0].label;\n break;\n case 'multiple':\n case 'checkbox':\n result[option.label] = (option.values as Array<any>).reduce(\n (previous, current) => {\n if (previous) return `${previous}, ${current.label}`;\n return current.label;\n },\n ''\n );\n break;\n case 'file': {\n const parser = new DOMParser();\n const fileAnchorElementHtml = option.values[0].value;\n const doc = parser.parseFromString(fileAnchorElementHtml, 'text/html');\n const anchorText = doc.querySelector('a')?.textContent || '';\n result[option.label] = anchorText;\n break;\n }\n }\n });\n return result;\n}\n\nfunction transformQuantity(data: any) {\n if (state.config?.cartSummaryDisplayTotal === 0)\n return data.itemsV2.items.length;\n if (state.config?.cartSummaryDisplayTotal === 1) return data.total_quantity;\n // Default to items count if unexpected config value or error returned\n return data.itemsV2.items.length;\n}\n\nfunction transformLinks(links: any) {\n return links?.length > 0\n ? {\n count: links.length,\n result: links.map((link: any) => link.title).join(', '),\n }\n : null;\n}\n\nfunction transformAddresses(data: any) {\n //Shipping Address bound to cart\n if (data.shipping_addresses?.length) {\n return data.shipping_addresses?.map((address: any) => ({\n countryCode: address.country.code,\n zipCode: address.postcode,\n regionCode: address.region.code,\n }));\n //Shipping Address bound to customer\n } else if (data.addresses?.length) {\n return data.addresses\n ?.filter((address: any) => address.default_shipping)\n .map(\n (address: any) =>\n address.default_shipping && {\n countryCode: address.country_code,\n zipCode: address.postcode,\n regionCode: address.region?.region_code,\n }\n );\n }\n\n return null;\n}\n\nfunction transformOutOfStockItems(data: any) {\n return data?.itemsV2?.items?.some(\n (item: any) =>\n item?.product?.stock_status === 'OUT_OF_STOCK' ||\n (item.product.stock_status === 'IN_STOCK' && !item.is_available)\n );\n}\n\nfunction transformStockLevel(item: any) {\n if (!item.not_available_message) return null;\n\n return item.product.quantity != null ? item.product.quantity : 'noNumber';\n}\n\nfunction transformFullyOutOfStockItems(data: any) {\n return data?.itemsV2?.items?.some(\n (item: any) => item?.product?.stock_status === 'OUT_OF_STOCK'\n );\n}\n\n// Add support for BundleCartItem in USF-1591 after LYNX-599 is completed\nfunction transformDiscountPercentage(data: any) {\n const quantity = data.quantity;\n\n // Check price tiers first for discount percentage\n const applicableTier = findApplicablePriceTier(\n data.product.price_tiers,\n quantity\n );\n\n if (applicableTier) {\n return Math.round(applicableTier.discount.percent_off);\n }\n\n // Fallback to product-specific discount percentage\n let percent_off;\n\n if (data.__typename === 'ConfigurableCartItem') {\n percent_off =\n data?.configured_variant?.price_range?.maximum_price?.discount\n ?.percent_off;\n } else if (data.__typename === 'BundleCartItem') {\n return undefined;\n } else {\n percent_off =\n data?.product?.price_range?.maximum_price?.discount?.percent_off;\n }\n\n if (percent_off === 0) {\n return undefined;\n }\n\n return Math.round(percent_off);\n}\n\n// Add support for returning configured_variant sku for __typename:\"ConfigurableCartItem\"\nfunction transformSKU(item: any) {\n if (item.__typename === 'ConfigurableCartItem') {\n return item.configured_variant.sku;\n }\n\n // If varaintSku is available return it, otherwise return product sku\n return item.product?.variantSku || item.product.sku;\n}\n\nfunction transformDiscountAmount(data: any) {\n let amount_off;\n let currency;\n\n amount_off =\n data?.prices?.original_row_total?.value - data?.prices?.row_total?.value;\n currency = data?.prices?.row_total?.currency;\n\n if (amount_off === 0) {\n return undefined;\n }\n return {\n value: amount_off,\n currency,\n };\n}\n\nfunction transformProductAttributes(item: any) {\n return item?.product?.custom_attributesV2?.items?.map((attribute: any) => {\n const transformedCode = attribute.code\n .split('_')\n .map((word: any) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n return {\n ...attribute,\n code: transformedCode,\n };\n });\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/cart/data/models';\n\nexport function transformStoreConfig(data: any): StoreConfigModel | null {\n if (!data) return null;\n\n const transformTaxDisplaySetting = (taxDisplaySetting: number) => {\n switch (taxDisplaySetting) {\n case 1:\n return 'EXCLUDING_TAX';\n case 2:\n return 'INCLUDING_TAX';\n case 3:\n return 'INCLUDING_EXCLUDING_TAX';\n default:\n return 'EXCLUDING_TAX';\n }\n };\n\n // A `null` value indicates the \"use system value\" option, which requires special handling\n // based on both global and product-level configurations\n const transformGiftOptionsCode = (data: string) => {\n switch (+data) {\n case 0:\n return false;\n case 1:\n return true;\n case 2:\n return null;\n default:\n return false;\n }\n };\n\n return {\n displayMiniCart: data.minicart_display,\n miniCartMaxItemsDisplay: data.minicart_max_items,\n cartExpiresInDays: data.cart_expires_in_days,\n cartSummaryDisplayTotal: data.cart_summary_display_quantity,\n cartSummaryMaxItems: data.max_items_in_order_summary,\n defaultCountry: data.default_country!,\n categoryFixedProductTaxDisplaySetting:\n data.category_fixed_product_tax_display_setting,\n productFixedProductTaxDisplaySetting:\n data.product_fixed_product_tax_display_setting,\n salesFixedProductTaxDisplaySetting:\n data.sales_fixed_product_tax_display_setting,\n shoppingCartDisplaySetting: {\n zeroTax: data.shopping_cart_display_zero_tax,\n subtotal: transformTaxDisplaySetting(data.shopping_cart_display_subtotal),\n price: transformTaxDisplaySetting(data.shopping_cart_display_price),\n shipping: transformTaxDisplaySetting(data.shopping_cart_display_shipping),\n fullSummary: data.shopping_cart_display_full_summary,\n grandTotal: data.shopping_cart_display_grand_total,\n taxGiftWrapping: data.shopping_cart_display_tax_gift_wrapping,\n },\n useConfigurableParentThumbnail:\n data.configurable_thumbnail_source === 'parent',\n allowGiftWrappingOnOrder: transformGiftOptionsCode(\n data?.allow_gift_wrapping_on_order\n ),\n allowGiftWrappingOnOrderItems: transformGiftOptionsCode(\n data?.allow_gift_wrapping_on_order_items\n ),\n allowGiftMessageOnOrder: transformGiftOptionsCode(data?.allow_order),\n allowGiftMessageOnOrderItems: transformGiftOptionsCode(data?.allow_items),\n allowGiftReceipt: Boolean(+data?.allow_gift_receipt),\n allowPrintedCard: Boolean(+data?.allow_printed_card),\n printedCardPrice: {\n currency: data?.printed_card_priceV2?.currency ?? '',\n value:\n data?.printed_card_priceV2?.value != null\n ? +data.printed_card_priceV2.value\n : 0,\n },\n cartGiftWrapping: transformTaxDisplaySetting(+data.cart_gift_wrapping),\n cartPrintedCard: transformTaxDisplaySetting(+data.cart_printed_card),\n };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { resetCart } from '../api';\n\n/** Actions */\nexport const handleFetchError = (\n errors: Array<{\n message: string;\n path: Array<string>;\n extensions: { category: string };\n }>\n) => {\n const unauthorized =\n errors.findIndex(\n ({ extensions }) => extensions?.category === 'graphql-authorization'\n ) > -1;\n\n // Exclude invalid Coupon error\n const missingCart =\n errors.findIndex(\n ({ path, extensions }) =>\n extensions?.category === 'graphql-no-such-entity' &&\n !path?.includes('applyCouponsToCart')\n ) > -1;\n\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n // Invalid cart\n const invalidCart =\n errors.findIndex(\n ({ path, extensions }) =>\n extensions?.category === 'graphql-input' &&\n path?.includes('cart')\n ) > -1;\n\n // Reset cart data if unauthorized or missing cart or invalid cart\n if (unauthorized || missingCart || invalidCart) {\n resetCart();\n console.error(errorMessage);\n return null;\n }\n\n throw Error(errorMessage);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const PRICE_RANGE_FRAGMENT = /* GraphQL */ `\n fragment PRICE_RANGE_FRAGMENT on PriceRange {\n minimum_price {\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n maximum_price {\n regular_price {\n value\n currency\n }\n final_price {\n value\n currency\n }\n discount {\n percent_off\n amount_off\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMIZABLE_OPTIONS_FRAGMENT = /* GraphQL */ `\n fragment CUSTOMIZABLE_OPTIONS_FRAGMENT on SelectedCustomizableOption {\n type\n customizable_option_uid\n label\n is_required\n values {\n label\n value\n price {\n type\n units\n value\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const DOWNLOADABLE_CART_ITEMS_FRAGMENT = /* GraphQL */ `\n fragment DOWNLOADABLE_CART_ITEMS_FRAGMENT on DownloadableCartItem {\n links {\n sort_order\n title\n }\n customizable_options {\n ...CUSTOMIZABLE_OPTIONS_FRAGMENT\n }\n }\n`;\n","export const APPLIED_GIFT_CARDS_FRAGMENT = `\n fragment APPLIED_GIFT_CARDS_FRAGMENT on AppliedGiftCard {\n __typename\n code\n applied_balance {\n value\n currency\n }\n current_balance {\n value\n currency\n }\n expiration_date\n }\n`;\n\nexport const GIFT_MESSAGE_FRAGMENT = `\n fragment GIFT_MESSAGE_FRAGMENT on GiftMessage {\n __typename\n from\n to\n message\n }\n`;\n\nexport const GIFT_WRAPPING_FRAGMENT = `\n fragment GIFT_WRAPPING_FRAGMENT on GiftWrapping {\n __typename\n uid\n design\n image {\n url\n }\n price {\n value\n currency\n }\n }\n`;\n\nexport const AVAILABLE_GIFT_WRAPPING_FRAGMENT = `\n fragment AVAILABLE_GIFT_WRAPPING_FRAGMENT on GiftWrapping {\n __typename\n uid\n design\n image {\n url\n label\n }\n price {\n currency\n value\n }\n }\n`;\n\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PRICE_RANGE_FRAGMENT } from './PriceRangeFragment';\nimport { CUSTOMIZABLE_OPTIONS_FRAGMENT } from './CustomizableOptionsFragment';\nimport { DOWNLOADABLE_CART_ITEMS_FRAGMENT } from './DownloadableCartItemsFragment';\nimport {\n GIFT_MESSAGE_FRAGMENT,\n GIFT_WRAPPING_FRAGMENT,\n AVAILABLE_GIFT_WRAPPING_FRAGMENT,\n} from './GiftFragment';\n\nexport const CART_ITEM_FRAGMENT = /* GraphQL */ `\n fragment CART_ITEM_FRAGMENT on CartItemInterface {\n __typename\n uid\n quantity\n is_available\n not_available_message\n errors {\n code\n message\n }\n\n prices {\n price {\n value\n currency\n }\n discounts {\n amount {\n value\n currency\n }\n label\n }\n total_item_discount {\n value\n currency\n }\n row_total {\n value\n currency\n }\n row_total_including_tax {\n value\n currency\n }\n price_including_tax {\n value\n currency\n }\n fixed_product_taxes {\n amount {\n value\n currency\n }\n label\n }\n original_item_price {\n value\n currency\n }\n original_row_total {\n value\n currency\n }\n }\n\n product {\n name\n sku\n price_tiers {\n quantity\n final_price {\n value\n }\n discount {\n amount_off\n percent_off\n }\n }\n quantity\n gift_message_available\n gift_wrapping_available\n gift_wrapping_price {\n currency\n value\n }\n thumbnail {\n url\n label\n }\n url_key\n canonical_url\n categories {\n url_path\n url_key\n name\n }\n custom_attributesV2(filters: { is_visible_on_front: true }) {\n items {\n code\n ... on AttributeValue {\n value\n }\n ... on AttributeSelectedOptions {\n selected_options {\n value\n label\n }\n }\n }\n }\n only_x_left_in_stock\n stock_status\n price_range {\n ...PRICE_RANGE_FRAGMENT\n }\n }\n ... on SimpleCartItem {\n available_gift_wrapping {\n ...AVAILABLE_GIFT_WRAPPING_FRAGMENT\n }\n gift_message {\n ...GIFT_MESSAGE_FRAGMENT\n }\n gift_wrapping {\n ...GIFT_WRAPPING_FRAGMENT\n }\n customizable_options {\n ...CUSTOMIZABLE_OPTIONS_FRAGMENT\n }\n }\n ... on ConfigurableCartItem {\n available_gift_wrapping {\n ...AVAILABLE_GIFT_WRAPPING_FRAGMENT\n }\n gift_message {\n ...GIFT_MESSAGE_FRAGMENT\n }\n gift_wrapping {\n ...GIFT_WRAPPING_FRAGMENT\n }\n configurable_options {\n configurable_product_option_uid\n option_label\n value_label\n configurable_product_option_value_uid\n }\n configured_variant {\n uid\n sku\n only_x_left_in_stock\n stock_status\n thumbnail {\n label\n url\n }\n price_range {\n ...PRICE_RANGE_FRAGMENT\n }\n price_tiers {\n quantity\n final_price {\n value\n }\n discount {\n amount_off\n percent_off\n }\n }\n }\n customizable_options {\n ...CUSTOMIZABLE_OPTIONS_FRAGMENT\n }\n }\n ...DOWNLOADABLE_CART_ITEMS_FRAGMENT\n ... on BundleCartItem {\n available_gift_wrapping {\n ...AVAILABLE_GIFT_WRAPPING_FRAGMENT\n }\n gift_message {\n ...GIFT_MESSAGE_FRAGMENT\n }\n gift_wrapping {\n ...GIFT_WRAPPING_FRAGMENT\n }\n bundle_options {\n uid\n label\n values {\n uid\n label\n }\n }\n }\n ... on GiftCardCartItem {\n message\n recipient_email\n recipient_name\n sender_email\n sender_name\n amount {\n currency\n value\n }\n is_available\n }\n }\n\n ${PRICE_RANGE_FRAGMENT}\n ${CUSTOMIZABLE_OPTIONS_FRAGMENT}\n ${DOWNLOADABLE_CART_ITEMS_FRAGMENT}\n ${GIFT_WRAPPING_FRAGMENT}\n ${GIFT_MESSAGE_FRAGMENT}\n ${AVAILABLE_GIFT_WRAPPING_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_ITEM_FRAGMENT } from './CartItemFragment';\nimport { APPLIED_GIFT_CARDS_FRAGMENT } from '../fragments';\n\nexport const CART_FRAGMENT = /* GraphQL */ `\n fragment CART_FRAGMENT on Cart {\n id\n total_quantity\n is_virtual\n applied_gift_cards {\n ...APPLIED_GIFT_CARDS_FRAGMENT\n }\n gift_receipt_included\n printed_card_included\n gift_message {\n ...GIFT_MESSAGE_FRAGMENT\n }\n gift_wrapping {\n ...GIFT_WRAPPING_FRAGMENT\n }\n available_gift_wrappings {\n ...AVAILABLE_GIFT_WRAPPING_FRAGMENT\n }\n prices {\n gift_options {\n gift_wrapping_for_items {\n currency\n value\n }\n gift_wrapping_for_items_incl_tax {\n currency\n value\n }\n gift_wrapping_for_order {\n currency\n value\n }\n gift_wrapping_for_order_incl_tax {\n currency\n value\n }\n printed_card {\n currency\n value\n }\n printed_card_incl_tax {\n currency\n value\n }\n }\n subtotal_with_discount_excluding_tax {\n currency\n value\n }\n subtotal_including_tax {\n currency\n value\n }\n subtotal_excluding_tax {\n currency\n value\n }\n grand_total {\n currency\n value\n }\n grand_total_excluding_tax {\n currency\n value\n }\n applied_taxes {\n label\n amount {\n value\n currency\n }\n }\n discounts {\n amount {\n value\n currency\n }\n label\n coupon {\n code\n }\n applied_to\n }\n }\n applied_coupons {\n code\n }\n itemsV2(\n pageSize: $pageSize\n currentPage: $currentPage\n sort: $itemsSortInput\n ) {\n items {\n ...CART_ITEM_FRAGMENT\n }\n }\n shipping_addresses {\n country {\n code\n }\n region {\n code\n }\n postcode\n }\n }\n\n ${CART_ITEM_FRAGMENT}\n ${APPLIED_GIFT_CARDS_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const ADD_PRODUCTS_TO_CART_MUTATION = `\n mutation ADD_PRODUCTS_TO_CART_MUTATION(\n $cartId: String!, \n $cartItems: [CartItemInput!]!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n addProductsToCart(\n cartId: $cartId\n cartItems: $cartItems\n ) {\n cart {\n ...CART_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n \n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { ShoppingCartContext, ShoppingCartItem } from '../models/acdl-models';\nimport { CartModel, Item } from '../models/cart-model';\n\ntype TransformShoppingCartParams = {\n cart: CartModel;\n locale?: string;\n};\n\nexport function transformShoppingCart(\n params: TransformShoppingCartParams\n): ShoppingCartContext {\n const { cart, locale = 'en-US' } = params;\n\n return {\n id: cart.id,\n items: transformItems(cart.items, locale),\n prices: {\n subtotalExcludingTax: cart.subtotal.excludingTax,\n subtotalIncludingTax: cart.subtotal.includingTax,\n },\n totalQuantity: cart.totalUniqueItems,\n possibleOnepageCheckout: undefined,\n giftMessageSelected: undefined,\n giftWrappingSelected: undefined,\n source: undefined,\n };\n}\n\nexport function transformItems(\n items: Item[],\n locale: string\n): ShoppingCartItem[] {\n return items.map((item: any) => ({\n canApplyMsrp: false,\n formattedPrice: formatCurrency(\n locale,\n item.price.currency,\n item.price.value\n ),\n id: item.uid,\n prices: {\n price: item.price,\n discount: item.discount && item.discount.value !== undefined ? {\n value: item.discount.value,\n currency: item.discount.currency\n } : undefined\n },\n product: {\n productId: item.uid,\n name: item.name,\n sku: item.sku,\n topLevelSku: item.topLevelSku,\n specialToDate: undefined,\n specialFromDate: undefined,\n newToDate: undefined,\n newFromDate: undefined,\n createdAt: undefined,\n updatedAt: undefined,\n manufacturer: undefined,\n countryOfManufacture: undefined,\n categories: item.categories,\n productType: item.itemType,\n pricing: {\n regularPrice: item.regularPrice.value,\n minimalPrice: undefined,\n maximalPrice: undefined,\n specialPrice: transformSpecialPrice(item),\n tierPricing: undefined,\n currencyCode: item.regularPrice.currency,\n },\n canonicalUrl: item.canonicalUrl,\n mainImageUrl: item.image.src,\n image: {\n src: item.image.src,\n alt: item.image.alt,\n },\n },\n configurableOptions: item.selectedOptions ? \n Object.entries(item.selectedOptions).map(([optionLabel, valueLabel], index) => ({\n id: index + 1,\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n bundleOptions: item.bundleOptions ? \n Object.entries(item.bundleOptions).map(([optionLabel, valueLabel], index) => ({\n id: (index + 1).toString(),\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n customizableOptions: item.customizableOptions ? \n Object.entries(item.customizableOptions).map(([optionLabel, valueLabel], index) => ({\n id: (index + 1).toString(),\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n quantity: item.quantity,\n selectedOptions: (() => {\n const options = {\n ...item.selectedOptions,\n ...item.bundleOptions,\n ...item.customizableOptions,\n };\n return Object.keys(options).length > 0 ? options : undefined;\n })(),\n }));\n}\n\nfunction formatCurrency(\n locale: string,\n currency: string,\n value: number\n): string {\n const formattedLocale = locale.replace('_', '-');\n\n return new Intl.NumberFormat(formattedLocale, {\n style: 'currency',\n currency,\n }).format(value);\n}\n\nfunction transformSpecialPrice(item: any) {\n if (!item.discounted) {\n return undefined;\n }\n return item.price?.value;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/* Publish functions for the Adobe Client Data Layer (ACDL) */\n\nimport { CartModel, Item } from '@/cart/data/models/cart-model';\nimport {\n transformItems,\n transformShoppingCart,\n} from '@/cart/data/transforms/acdl-context';\nimport {\n ShoppingCartContext,\n ShoppingCartItem,\n} from '../data/models/acdl-models';\n\n/**\n * See: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/contexts.ts\n */\nexport const contexts = {\n SHOPPING_CART_CONTEXT: 'shoppingCartContext',\n PRODUCT_CONTEXT: 'productContext',\n CHANGED_PRODUCTS_CONTEXT: 'changedProductsContext',\n CHANNEL_CONTEXT: 'channelContext',\n};\n\n/**\n * See: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/events.ts\n */\nexport const events = {\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/open-cart.md\n OPEN_CART: 'open-cart',\n // See: ??? (not documented in the commerce-events repo)\n //UPDATE_CART: 'update-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/add-to-cart.md\n ADD_TO_CART: 'add-to-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/remove-from-cart.md\n REMOVE_FROM_CART: 'remove-from-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/shopping-cart-view.md\n SHOPPING_CART_VIEW: 'shopping-cart-view',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/initiate-checkout.md\n INITIATE_CHECKOUT: 'initiate-checkout',\n};\n\nexport function getAdobeDataLayer() {\n // @ts-ignore\n window.adobeDataLayer = window.adobeDataLayer || [];\n // @ts-ignore\n return window.adobeDataLayer;\n}\n\n/**\n * Sets a context in the Adobe Client Data Layer (ACDL)\n * Logic based on: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/Base.ts#L6\n */\nfunction setContext(name: string, data: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n // Clear existing context\n adobeDataLayer.push({\n [name]: null,\n });\n\n // Set new context\n adobeDataLayer.push({\n [name]: data,\n });\n}\n\n/**\n * Pushes an event to the Adobe Client Data Layer (ACDL)\n * Logic based on: https://github.com/adobe/commerce-events/blob/1973d0ce28471ef190fa06dad6359ffa0ab51db6/packages/storefront-events-sdk/src/Base.ts#L34\n */\nfunction pushEvent(event: string, additionalContext?: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n adobeDataLayer.push((acdl: any) => {\n const state = acdl.getState ? acdl.getState() : {};\n\n acdl.push({\n event,\n eventInfo: {\n ...state,\n ...additionalContext,\n },\n });\n });\n}\n\nfunction getChannelContext() {\n return {\n _id: \"https://ns.adobe.com/xdm/channels/web\",\n _type: \"https://ns.adobe.com/xdm/channel-types/web\",\n };\n}\n\nfunction setChannelContext() {\n setContext(contexts.CHANNEL_CONTEXT, getChannelContext());\n}\n\n// Triggered when a new cart is created, which is when a product is added to an empty cart.\nexport function publishOpenCartEvent(\n cart: CartModel,\n addedItems: Item[],\n locale: string\n) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n // Set context and push open cart event\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n // Transform items and set changed products context\n const shoppingCartItems = transformItems(addedItems, locale);\n \n // Set changed products context to include the items that opened the cart\n setContext(contexts.CHANGED_PRODUCTS_CONTEXT, {\n items: shoppingCartItems,\n });\n\n // Push the open cart event with contexts set\n pushEvent(events.OPEN_CART);\n\n // Set context and push add to cart event for each updated item\n shoppingCartItems.forEach((item) => {\n setContext(contexts.PRODUCT_CONTEXT, item.product);\n publishItemsUpdatedEvent(shoppingCartContext, [item], events.ADD_TO_CART);\n });\n}\n\n// Triggered when any cart page loads.\nexport function publishShoppingCartViewEvent(cart: CartModel, locale: string) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n pushEvent(events.SHOPPING_CART_VIEW);\n}\n\n// A re-usable function to publish events when items are added to, or removed from the cart.\nfunction publishItemsUpdatedEvent(\n shoppingCartContext: ShoppingCartContext,\n updatedItems: ShoppingCartItem[],\n event: string\n) {\n const changedProductsContext = {\n items: updatedItems,\n };\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n setContext(contexts.CHANGED_PRODUCTS_CONTEXT, {\n ...changedProductsContext,\n });\n\n pushEvent(event);\n}\n\nexport function publishCartUpdateEvents(\n cart: CartModel,\n updatedItems: {\n uid: string;\n }[],\n locale: string\n) {\n const newShoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n const currentItems = newShoppingCartContext.items;\n\n const adobeDataLayer = getAdobeDataLayer();\n\n const currentState = adobeDataLayer.getState ? adobeDataLayer.getState() : {};\n\n const { shoppingCartContext: { items: previousItems = [] } = {} } =\n currentState;\n\n updatedItems.forEach((updatedItem) => {\n const previousItem = previousItems.find(\n (item: ShoppingCartItem) => item.id === updatedItem.uid\n );\n\n const currentItem = currentItems!.find(\n (item: ShoppingCartItem) => item.id === updatedItem.uid\n );\n\n if (!currentItem && !previousItem) {\n // Not enough data available to publish an event\n // Adobe Data Layer possibly not initialized yet\n return;\n }\n\n if (!previousItem && currentItem) {\n // Publish add to cart event for the item added\n setContext(contexts.PRODUCT_CONTEXT, currentItem.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem],\n events.ADD_TO_CART\n );\n } else if (previousItem && !currentItem) {\n // Publish remove from cart event for the item removed\n setContext(contexts.PRODUCT_CONTEXT, previousItem.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [previousItem],\n events.REMOVE_FROM_CART\n );\n } else if (currentItem!.quantity > previousItem.quantity) {\n // Publish add to cart event for the item increased\n setContext(contexts.PRODUCT_CONTEXT, currentItem!.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem!],\n events.ADD_TO_CART\n );\n } else {\n // Publish remove from cart event for the item decreased\n setContext(contexts.PRODUCT_CONTEXT, currentItem!.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem!],\n events.REMOVE_FROM_CART\n );\n }\n });\n}\n\nexport function publishInitiateCheckoutEvent(cart: CartModel, locale?: string) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n pushEvent(events.INITIATE_CHECKOUT);\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl, createGuestCart } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nimport { ADD_PRODUCTS_TO_CART_MUTATION } from './graphql/AddProductsToCartMutation';\nimport { publishCartUpdateEvents, publishOpenCartEvent } from '@/cart/lib/acdl';\n\nexport const addProductsToCart = async (\n items: {\n sku: string;\n parentSku?: string;\n quantity: number;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n customFields?: Record<string, any>;\n }[]\n): Promise<CartModel | null> => {\n const cartId =\n state.cartId ||\n (await createGuestCart().then((id) => {\n return id;\n }));\n\n return fetchGraphQl(ADD_PRODUCTS_TO_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: items.map(\n ({\n sku,\n parentSku: parent_sku,\n quantity,\n optionsUIDs: selected_options,\n enteredOptions: entered_options,\n customFields,\n }) => ({\n sku,\n parent_sku,\n quantity,\n selected_options,\n entered_options,\n ...(customFields ? customFields : {}),\n })\n ),\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // transform cart\n const payload = transformCart(data.addProductsToCart.cart);\n\n // Get previous cart data before emitting events\n const previousCart = getPersistedCartData();\n const previousItems = previousCart?.items || [];\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n // emit add to cart event with affected items\n if (payload) {\n // Separate new items and updated items\n const newItems = payload.items.filter((item) => {\n return !previousItems.some((prev) => prev.sku === item.sku);\n });\n\n const updatedItems = payload.items.filter((item) => {\n const previousItem = previousItems.find(\n (prev) => prev.sku === item.sku\n );\n // Emit update event if quantity has changed\n return previousItem && item.quantity !== previousItem.quantity;\n });\n\n // Emit add event for new items\n if (newItems.length > 0) {\n events.emit('cart/product/added', newItems);\n }\n\n // Emit update event for existing items\n if (updatedItems.length > 0) {\n events.emit('cart/product/updated', updatedItems);\n }\n }\n\n // data collection\n if (payload) {\n const updatedItems = payload.items.filter((item) =>\n items.some(\n ({ sku }) => sku.toUpperCase() === item.topLevelSku.toUpperCase()\n )\n );\n\n // Check if cart was empty before adding items\n const wasCartEmpty =\n !previousCart || (previousCart.totalQuantity ?? 0) === 0;\n const hasItemsNow = (payload.totalQuantity ?? 0) > 0;\n\n if (wasCartEmpty && hasItemsNow) {\n // Publish open cart event when cart goes from empty to having items\n publishOpenCartEvent(payload, updatedItems, state.locale ?? 'en-US');\n } else {\n // Otherwise publish cart update events\n publishCartUpdateEvents(payload, updatedItems, state.locale ?? 'en-US');\n }\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMER_ACCOUNT_FRAGMENT = /* GraphQL */ `\n fragment CUSTOMER_FRAGMENT on Customer {\n addresses {\n default_shipping\n country_code\n postcode\n region {\n region\n region_code\n region_id\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nimport { CUSTOMER_ACCOUNT_FRAGMENT } from '@/cart/api/graphql/CustomerAccountFragment';\n\nexport const GUEST_CART_QUERY = `\n query GUEST_CART_QUERY(\n $cartId: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n\n cart(cart_id: $cartId){\n ...CART_FRAGMENT\n }\n }\n\n ${CART_FRAGMENT}\n`;\n\nexport const CUSTOMER_CART_QUERY = `\n query CUSTOMER_CART_QUERY(\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n \n customer {\n ...CUSTOMER_FRAGMENT\n }\n\n cart: customerCart {\n ...CART_FRAGMENT\n }\n }\n\n ${CUSTOMER_ACCOUNT_FRAGMENT}\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\n\nimport { GUEST_CART_QUERY, CUSTOMER_CART_QUERY } from './graphql/CartQuery';\n\nexport const getCartData = async (): Promise<CartModel | null> => {\n const authenticated = state.authenticated;\n const cartId = state.cartId;\n\n // Customer Cart\n if (authenticated) {\n return fetchGraphQl(CUSTOMER_CART_QUERY, { method: 'POST' }).then(\n ({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const merged = { ...data.cart, ...data.customer };\n\n return transformCart(merged);\n }\n );\n }\n\n // Guest Cart\n if (!cartId) throw new Error('No cart ID found');\n\n return fetchGraphQl(GUEST_CART_QUERY, {\n method: 'POST',\n cache: 'no-cache',\n variables: { cartId },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformCart(data.cart);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const MERGE_CARTS_MUTATION = `\n mutation MERGE_CARTS_MUTATION(\n $guestCartId: String!, \n $customerCartId: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n mergeCarts(\n source_cart_id: $guestCartId,\n destination_cart_id: $customerCartId\n ) {\n ...CART_FRAGMENT \n }\n }\n\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/cart/lib/state';\nimport { config, fetchGraphQl, getCartData, getStoreConfig } from '@/cart/api';\nimport { MERGE_CARTS_MUTATION } from './graphql/MergeCartsMutation';\nimport { CartModel } from '@/cart/data/models';\n\nexport const initializeCart = async (): Promise<CartModel | null> => {\n if (state.initializing) return null;\n\n state.initializing = true;\n\n // set config\n if (!state.config) {\n state.config = await getStoreConfig();\n }\n\n const payload = state.authenticated\n ? await getCustomerCartPayload()\n : await getGuestCartPayload();\n\n events.emit('cart/initialized', payload);\n events.emit('cart/data', payload);\n\n state.initializing = false;\n\n return payload;\n};\n\nexport async function getCustomerCartPayload() {\n const existingCartId = state.cartId;\n\n const cart = await getCartData();\n\n if (!cart) return null;\n\n // set cartid in the state\n state.cartId = cart.id;\n\n // If the existing cart is the same as the fetched cart, return the fetched cart\n if (!existingCartId || cart.id === existingCartId) return cart;\n\n // If the existing cart is not the same as the fetched cart, merge the carts\n return await fetchGraphQl(MERGE_CARTS_MUTATION, {\n variables: {\n guestCartId: existingCartId,\n customerCartId: cart.id,\n },\n })\n .then(() => {\n return getCartData();\n })\n .then((transformedCartData) => {\n const payload = {\n oldCartItems: cart.items,\n newCart: transformedCartData,\n };\n events.emit('cart/merged', payload);\n return transformedCartData;\n })\n .catch(() => {\n // gracefully handle merge error, continue with existing cart\n console.error('Could not merge carts');\n return cart;\n });\n}\n\nexport async function getGuestCartPayload() {\n // If guest cart is not enabled, return null\n if (config.getConfig().disableGuestCart === true) {\n return null;\n }\n\n // If there is not a cart id in the state, return null\n if (!state.cartId) {\n return null;\n }\n\n // If there is a cart id in the state, return the cart data\n try {\n return await getCartData();\n } catch (error) {\n console.error(error);\n return null;\n }\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const UPDATE_PRODUCTS_FROM_CART_MUTATION = `\n mutation UPDATE_PRODUCTS_FROM_CART_MUTATION(\n $cartId: String!, \n $cartItems: [CartItemUpdateInput!]!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n updateCartItems(\n input: {\n cart_id: $cartId\n cart_items: $cartItems\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n\n }\n }\n\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\nimport { ADD_PRODUCTS_TO_CART_MUTATION } from '../addProductsToCart/graphql/AddProductsToCartMutation';\nimport { UPDATE_PRODUCTS_FROM_CART_MUTATION } from './graphql/UpdateProductsMutation';\n\ntype UpdateProductsFromCart = Array<{\n uid: string;\n quantity: number;\n sku?: string;\n parentSku?: string;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n giftOptions?: {\n gift_wrapping_id?: string | null;\n gift_message: {\n to: string;\n from: string;\n message: string;\n };\n };\n customFields?: Record<string, any>;\n}>;\n\ntype ItemError = {\n message: string;\n path?: string[];\n extensions?: {\n category: string;\n };\n};\n\n/**\n * Collects individual item errors from cart items response\n * @param cartItems - The cart items from the response\n * @param updatedItemUIDs - Array of UIDs of items that were updated\n * @returns Array of ItemError objects\n */\nconst collectCartItemErrors = (\n cartItems: Array<{\n uid: string;\n errors?: Array<{ message: string; code: string }>;\n }>,\n updatedItemUIDs: string[]\n): ItemError[] => {\n const itemErrors: ItemError[] = [];\n\n cartItems\n .filter(\n (item) => item.errors && updatedItemUIDs.some((uid) => uid === item.uid)\n )\n .forEach((item) => {\n item.errors?.forEach((error) => {\n itemErrors.push({\n message: error.message,\n path: [item.uid],\n extensions: {\n category: error.code,\n },\n });\n });\n });\n\n return itemErrors;\n};\n\n/**\n * Creates the arrays of cart items to be sent to the graphql mutations\n *\n * @param items\n * @param currentCartItems\n * @returns {\n * itemsToAdd: Array<{\n * sku: string;\n * parentSku: string;\n * quantity: number;\n * optionsUIDs: string[];\n * enteredOptions: { uid: string; value: string }[];\n * customFields: Record<string, any>;\n * }>\n * itemsToRemove: Array<string>\n * itemsToUpdate: Array<{\n * uid: string;\n * quantity: number;\n * customFields: Record<string, any>;\n * }>\n * }\n */\nconst getCartItems = (\n items: UpdateProductsFromCart,\n currentCartItems: Array<\n CartModel['items'][number] & { customFields?: Record<string, any> }\n >\n) => {\n const itemsToAdd: Array<{\n sku?: string;\n parentSku?: string;\n quantity: number;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n customFields?: Record<string, any>;\n }> = [];\n // Items to remove from the cart will be items that have optionUIDs and\n // their optionUIDs are not the same as their matching entry in the current cart item identified by the uid\n const itemsToRemove: Array<string> = [];\n const itemsToUpdate: Array<{\n uid: string;\n quantity: number;\n giftOptions?: {\n gift_wrapping_id?: string | null;\n gift_message: {\n to: string;\n from: string;\n message: string;\n };\n };\n customFields?: Record<string, any>;\n }> = [];\n\n items.forEach((item) => {\n // Check if the item exists in the cart\n const currentItem = currentCartItems.find(\n (cartItem) => cartItem.uid === item.uid\n );\n\n if (currentItem) {\n if (item.optionsUIDs) {\n const currentItemOptions = Object.values(\n currentItem?.selectedOptionsUIDs ?? {}\n );\n\n // Check if options are exactly the same as current item\n const hasSameOptions =\n item.optionsUIDs.every((optionUID) =>\n currentItemOptions.includes(optionUID)\n ) && item.optionsUIDs.length === currentItemOptions.length;\n\n if (hasSameOptions) {\n // Same item, same options: update quantity directly\n itemsToUpdate.push({\n uid: item.uid,\n quantity: item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n } else {\n // Different options: check if there's another item in cart with these new options\n const existingItemWithNewOptions = currentCartItems.find(\n (cartItem) => {\n const cartItemOptions = Object.values(\n cartItem?.selectedOptionsUIDs ?? {}\n );\n return (\n cartItem.uid !== item.uid && // Different item\n cartItem.sku === currentItem.sku && // Same SKU\n item.optionsUIDs!.every((optionUID) =>\n cartItemOptions.includes(optionUID)\n ) &&\n item.optionsUIDs!.length === cartItemOptions.length\n );\n }\n );\n\n if (existingItemWithNewOptions) {\n // Merge: Update existing item with combined quantity and remove current item\n itemsToUpdate.push({\n uid: existingItemWithNewOptions.uid,\n quantity: existingItemWithNewOptions.quantity + item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n itemsToRemove.push(item.uid);\n } else {\n // Add new item and remove old one\n const { sku, topLevelSku: parentSku } = currentItem;\n const { optionsUIDs, enteredOptions, quantity, customFields } =\n item;\n\n itemsToAdd.push({\n sku,\n parentSku,\n quantity,\n optionsUIDs,\n enteredOptions,\n customFields,\n });\n\n itemsToRemove.push(item.uid);\n }\n }\n } else if (item.customFields) {\n const { sku, topLevelSku: parentSku } = currentItem;\n const { optionsUIDs, enteredOptions, quantity, customFields } = item;\n\n itemsToAdd.push({\n sku,\n parentSku,\n quantity,\n optionsUIDs,\n enteredOptions,\n customFields,\n });\n itemsToRemove.push(item.uid);\n } else {\n itemsToUpdate.push({\n uid: item.uid,\n quantity: item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n }\n } else {\n throw Error(\n `Invalid Cart Item UID: No matching cart entry found for ${item.uid}`\n );\n }\n });\n\n return {\n itemsToAdd,\n itemsToRemove,\n itemsToUpdate,\n };\n};\n\nconst DELETE_ITEM_QUANTITY = 0;\n\nexport const updateProductsFromCart = async (\n items: UpdateProductsFromCart\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n const cart = getPersistedCartData();\n\n if (!cartId) {\n return Promise.reject(new Error('Cart ID is not set'));\n }\n\n if (!cart) {\n return Promise.reject(new Error('Cart is not set'));\n }\n\n const { itemsToAdd, itemsToRemove, itemsToUpdate } = getCartItems(\n items,\n cart.items\n );\n\n // Array of promises to be resolved\n let results: Array<Promise<CartModel | null>> = [];\n\n // If there are items with options and matching cart items, add the products to the cart and remove the old one.\n // Note: The SKU must be the incoming parent sku and not the current cart item sku.\n if (itemsToAdd.length > 0) {\n results.push(\n fetchGraphQl(ADD_PRODUCTS_TO_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: itemsToAdd.map(\n ({\n parentSku: sku,\n quantity,\n optionsUIDs: selected_options,\n enteredOptions: entered_options,\n customFields,\n }) => ({\n sku,\n quantity,\n selected_options,\n entered_options,\n ...(customFields ? customFields : {}),\n })\n ),\n },\n })\n .then(({ errors, data }) => {\n // Collect individual item errors from the response\n const updatedItemsErrors = collectCartItemErrors(\n data?.addProductsToCart?.cart?.itemsV2.items || [],\n items.map((item) => item.uid)\n );\n\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ...updatedItemsErrors,\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n if (itemsToRemove.length > 0) {\n // remove the old item\n return updateProductQuantities(\n cartId,\n itemsToRemove.map((uid) => ({\n uid,\n quantity: DELETE_ITEM_QUANTITY, //Delete Item\n }))\n ).catch((error) => {\n return Promise.reject(\n new Error(`Failed to update products in cart: ${error}`)\n );\n });\n }\n return Promise.resolve(transformCart(data?.addProductsToCart?.cart));\n })\n .then((payload) => {\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n // Publish cart update events\n publishCartUpdateEvents(payload!, items, state.locale ?? 'en-US');\n\n return Promise.resolve(payload);\n })\n .catch((error) => {\n return Promise.reject(\n new Error(`Failed to add products to cart: ${error}`)\n );\n })\n );\n }\n\n if (itemsToUpdate.length > 0) {\n results.push(\n updateProductQuantities(cartId, itemsToUpdate).catch((error) => {\n return Promise.reject(new Error(error));\n })\n );\n }\n\n // Return the last promise in the results array\n return Promise.all(results).then((results) => results[results.length - 1]);\n};\n\nconst updateProductQuantities = async (\n cartId: string,\n items: UpdateProductsFromCart\n): Promise<CartModel | null> => {\n return fetchGraphQl(UPDATE_PRODUCTS_FROM_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: items.map(({ uid, quantity, giftOptions }) => ({\n cart_item_uid: uid,\n quantity,\n ...giftOptions,\n })),\n },\n }).then(({ errors, data }) => {\n // Collect individual item errors from the response using the new function\n const updatedItemsErrors = collectCartItemErrors(\n data?.updateCartItems?.cart?.itemsV2.items || [],\n items.map((item) => item.uid)\n );\n\n // handle errors\n const _errors = [\n ...(data?.updateCartItems?.user_errors ?? []),\n ...(errors ?? []),\n ...updatedItemsErrors,\n ];\n\n // transform cart\n const payload =\n data?.updateCartItems && transformCart(data.updateCartItems.cart);\n\n // Emit data event\n if (payload) {\n events.emit('cart/data', payload);\n }\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // No errors, emit updated event\n events.emit('cart/updated', payload);\n\n // emit product updated events\n if (payload) {\n const updatedItems = payload.items.filter(\n (item: CartModel['items'][number]) =>\n items.some((updateItem) => updateItem.uid === item.uid)\n );\n\n events.emit('cart/product/updated', updatedItems);\n }\n\n // data collection\n if (payload) {\n // Publish cart update events\n publishCartUpdateEvents(payload, items, state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\n\nexport const resetCart = (): Promise<CartModel | null> => {\n state.cartId = null;\n state.authenticated = false;\n\n return Promise.resolve(null);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CREATE_GUEST_CART_MUTATION = `\n mutation CREATE_GUEST_CART_MUTATION {\n createGuestCart {\n cart {\n id\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { config, fetchGraphQl } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\n\nimport { CREATE_GUEST_CART_MUTATION } from './graphql/CreateCartMutation';\n\nexport const createGuestCart = async () => {\n const { disableGuestCart } = config.getConfig();\n\n // If guest cart is disabled, throw an error\n if (disableGuestCart) {\n throw new Error('Guest cart is disabled');\n }\n\n // Return new empty cart id\n return await fetchGraphQl(CREATE_GUEST_CART_MUTATION).then(({ data }) => {\n const cartId = data.createGuestCart.cart.id;\n\n // Set cart id in state\n state.cartId = cartId;\n\n return cartId;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const STORE_CONFIG_QUERY = `\nquery STORE_CONFIG_QUERY {\n storeConfig {\n minicart_display\n minicart_max_items\n cart_expires_in_days\n cart_summary_display_quantity\n max_items_in_order_summary\n default_country\n category_fixed_product_tax_display_setting\n product_fixed_product_tax_display_setting\n sales_fixed_product_tax_display_setting\n shopping_cart_display_full_summary\n shopping_cart_display_grand_total\n shopping_cart_display_price\n shopping_cart_display_shipping\n shopping_cart_display_subtotal\n shopping_cart_display_tax_gift_wrapping\n shopping_cart_display_zero_tax\n configurable_thumbnail_source\n allow_gift_wrapping_on_order\n allow_gift_wrapping_on_order_items\n allow_order\n allow_items\n allow_gift_receipt\n allow_printed_card\n printed_card_priceV2 {\n currency\n value\n }\n cart_gift_wrapping\n cart_printed_card\n }\n}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { StoreConfigModel } from '@/cart/data/models';\nimport { transformStoreConfig } from '@/cart/data/transforms';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\n\nimport { STORE_CONFIG_QUERY } from './graphql/StoreConfigQuery';\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel | null> => {\n return fetchGraphQl(STORE_CONFIG_QUERY, {\n method: 'GET',\n cache: 'force-cache',\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformStoreConfig(data.storeConfig);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PartialAddress, ShippingMethod } from '@/cart/data/models';\n\nexport const transformPartialAddress = (data: any): PartialAddress => {\n return {\n countryCode: data.country_code || 'US',\n postCode: data.postcode || '',\n region: data.region?.region || '',\n regionId: data.region?.id,\n };\n};\n\nexport const transformShippingMethod = (data: any): ShippingMethod | null => {\n if (!data) return null;\n\n return {\n carrierCode: data.carrier_code || '',\n methodCode: data.method_code || '',\n amount: data.amount,\n ...(data.price_excl_tax && {\n amountExclTax: {\n value: data.price_excl_tax.value,\n currency: data.price_excl_tax.currency,\n },\n }),\n ...(data.price_incl_tax && {\n amountInclTax: {\n value: data.price_incl_tax.value,\n currency: data.price_incl_tax.currency,\n },\n }),\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const COUNTRIES_QUERY = `\nquery COUNTRIES_QUERY {\n countries {\n label: full_name_locale\n id\n }\n storeConfig {\n defaultCountry: default_country\n }\n}\n`;\n\nexport const REGIONS_QUERY = `\nquery REGIONS_QUERY($id: String) {\n country(id: $id) {\n available_regions {\n code\n\t\t\tname\n }\n }\n}\n`;\n\nexport type CountryData = {\n label: string;\n id: string;\n available_regions?: Array<{\n code: string;\n name: string;\n }>;\n isDefaultCountry?: boolean;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ESTIMATE_SHIPPING_METHODS_MUTATION = `\n mutation ESTIMATE_SHIPPING_METHODS_MUTATION(\n $cartId: String!\n $address: EstimateAddressInput!\n ) {\n estimateShippingMethods(\n input: {\n cart_id: $cartId\n address: $address\n }\n ) {\n amount {\n currency\n value\n }\n carrier_code\n method_code\n error_message\n price_excl_tax {\n currency\n value\n }\n price_incl_tax {\n currency\n value\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\n\nimport {\n transformPartialAddress,\n transformShippingMethod,\n} from '@/cart/data/transforms/transform-shipping';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n COUNTRIES_QUERY,\n CountryData,\n REGIONS_QUERY,\n} from './graphql/countriesAndRegionsQueries';\nimport { ESTIMATE_SHIPPING_METHODS_MUTATION } from './graphql/estimateShippingMethodsMutation';\n\nexport interface EstimateAddressInput {\n countryCode: string;\n postcode?: string;\n region?: {\n region?: string;\n code?: string;\n id?: number;\n };\n}\n\nexport const getEstimateShipping = async (\n address: EstimateAddressInput\n): Promise<any | null> => {\n const cartId = state.cartId;\n\n if (!cartId) throw new Error('No cart ID found');\n if (!address) throw new Error('No address parameter found');\n\n const { countryCode, postcode, region } = address;\n\n const addressInput = {\n country_code: countryCode || 'US',\n postcode: postcode || '',\n region: {\n region: region?.region || '',\n region_id: region?.id,\n },\n };\n\n return fetchGraphQl(ESTIMATE_SHIPPING_METHODS_MUTATION, {\n variables: {\n cartId,\n address: addressInput,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const estimateShippingMethods: Array<any> = data.estimateShippingMethods;\n\n const selectedMethod =\n estimateShippingMethods.find((method) => !method.error_message) || null;\n\n events.emit('shipping/estimate', {\n address: transformPartialAddress(addressInput),\n shippingMethod: transformShippingMethod(selectedMethod),\n });\n\n return selectedMethod;\n });\n};\n\nexport const getCountries = async (): Promise<[CountryData]> => {\n return fetchGraphQl(COUNTRIES_QUERY, { method: 'GET' }).then(\n ({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const sortedCountries =\n data?.countries?.sort((a: any, b: any) =>\n a.label.localeCompare(b.label)\n ) || [];\n\n const defaultCountry = data?.storeConfig?.defaultCountry || 'US';\n\n // Set the default country property\n sortedCountries.forEach((country: any) => {\n country.isDefaultCountry = country.id === defaultCountry;\n });\n\n return sortedCountries;\n }\n );\n};\n\nexport const getRegions = async (\n countryId: string\n): Promise<Array<{ code: string; name: string }>> => {\n return fetchGraphQl(REGIONS_QUERY, {\n method: 'GET',\n variables: {\n id: countryId,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return data?.country?.available_regions || [];\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const GET_ESTIMATED_TOTALS_MUTATION = `\n mutation GET_ESTIMATED_TOTALS_MUTATION(\n $cartId: String!\n $address: EstimateAddressInput!,\n $shipping_method: ShippingMethodInput,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n estimateTotals(\n input: {\n cart_id: $cartId\n address: $address\n shipping_method: $shipping_method\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n }\n\n ${CART_FRAGMENT}\n `;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\n\nimport { GET_ESTIMATED_TOTALS_MUTATION } from './graphql/GetEstimatedTotalsMutation';\n\nexport interface EstimateAddressShippingInput {\n countryCode: string;\n postcode?: string;\n region?: {\n region?: string;\n id?: number;\n };\n shipping_method?: {\n carrier_code?: string;\n method_code?: string;\n };\n}\n\nexport const getEstimatedTotals = async (\n address: EstimateAddressShippingInput\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) throw new Error('No cart ID found');\n if (!address) throw new Error('No address parameter found');\n\n const { countryCode, postcode, region } = address;\n const carrier_code = address.shipping_method?.carrier_code;\n const method_code = address.shipping_method?.method_code;\n\n return fetchGraphQl(GET_ESTIMATED_TOTALS_MUTATION, {\n variables: {\n cartId,\n address: {\n country_code: countryCode || 'US',\n postcode,\n region:\n region?.id !== undefined\n ? { region_id: region.id }\n : { region: region?.region ?? '' },\n },\n shipping_method: {\n carrier_code: carrier_code || '',\n method_code: method_code || '',\n },\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const estimatedData: { cart: any } = data.estimateTotals;\n\n if (estimatedData) {\n const payload = transformCart(estimatedData.cart);\n\n return payload;\n }\n\n return null;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { getCustomerCartPayload, getGuestCartPayload } from '@/cart/api';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const refreshCart = async (): Promise<CartModel | null> => {\n const payload = state.authenticated\n ? await getCustomerCartPayload()\n : await getGuestCartPayload();\n\n events.emit('cart/data', payload);\n\n return payload;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const APPLY_COUPONS_TO_CART_MUTATION = `\nmutation APPLY_COUPONS_TO_CART_MUTATION(\n $cartId: String!, \n $couponCodes: [String!]!, \n $type: ApplyCouponsStrategy!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n applyCouponsToCart(\n input: {\n cart_id: $cartId\n coupon_codes: $couponCodes \n type: $type\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport { APPLY_COUPONS_TO_CART_MUTATION } from './graphql/ApplyCouponsToCartMutation';\n\nexport interface ApplyCouponsToCartInput {\n type: ApplyCouponsStrategy;\n}\n\nexport enum ApplyCouponsStrategy {\n APPEND = 'APPEND',\n REPLACE = 'REPLACE',\n}\n\nexport const applyCouponsToCart = async (\n couponCodes: string[],\n type: ApplyCouponsStrategy\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(APPLY_COUPONS_TO_CART_MUTATION, {\n variables: {\n cartId,\n couponCodes,\n type,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.applyCouponsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // transform cart\n const payload = transformCart(data.applyCouponsToCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n return payload;\n });\n};\n","import { getPersistedCartData } from \"@/cart/lib/persisted-data\";\nimport { publishShoppingCartViewEvent as publishCartView } from \"@/cart/lib/acdl\";\nimport { state } from \"@/cart/lib/state\";\n\nexport const publishShoppingCartViewEvent = () => { \n const locale = state.locale ?? 'en-US';\n const cartData = getPersistedCartData();\n\n if (!cartData) {\n return;\n }\n\n // Publish the event\n publishCartView(cartData, locale);\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const APPLY_GIFT_CARD_ON_CART_MUTATION = `\n mutation APPLY_GIFT_CARD_ON_CART_MUTATION(\n $cartId: String!, \n $giftCardCode: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n applyGiftCardToCart(\n input: {\n cart_id: $cartId\n gift_card_code: $giftCardCode\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { APPLY_GIFT_CARD_ON_CART_MUTATION } from './graphql/ApplyGiftCardToCartMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\n\nexport const applyGiftCardToCart = async (\n giftCardCode: string\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(APPLY_GIFT_CARD_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftCardCode,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.applyGiftCardToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.applyGiftCardToCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const REMOVE_GIFT_CARD_ON_CART_MUTATION = `\n mutation REMOVE_GIFT_CARD_ON_CART_MUTATION(\n $cartId: String!, \n $giftCardCode: String!, \n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n removeGiftCardFromCart(\n input: {\n cart_id: $cartId\n gift_card_code: $giftCardCode\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { REMOVE_GIFT_CARD_ON_CART_MUTATION } from './graphql/RemoveGiftCardFromCartMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\n\nexport const removeGiftCardFromCart = async (\n giftCardCode: string\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(REMOVE_GIFT_CARD_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftCardCode,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.removeGiftCardFromCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const SET_GIFT_OPTIONS_ON_CART_MUTATION = `\n mutation SET_GIFT_OPTIONS_ON_CART_MUTATION(\n $cartId: String!, \n $giftMessage: GiftMessageInput, \n $giftWrappingId: ID, \n $giftReceiptIncluded: Boolean!, \n $printedCardIncluded: Boolean!, \n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n setGiftOptionsOnCart(\n input: {\n cart_id: $cartId\n gift_message: $giftMessage\n gift_wrapping_id: $giftWrappingId\n gift_receipt_included: $giftReceiptIncluded\n printed_card_included: $printedCardIncluded\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { SET_GIFT_OPTIONS_ON_CART_MUTATION } from './graphql/UpdateGiftOptionsMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\nimport { GiftFormDataType } from '@/cart/types';\n\nexport const setGiftOptionsOnCart = async (\n giftForm: GiftFormDataType\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n const {\n recipientName,\n senderName,\n message,\n giftReceiptIncluded,\n printedCardIncluded,\n giftWrappingId,\n isGiftWrappingSelected,\n } = giftForm;\n\n return fetchGraphQl(SET_GIFT_OPTIONS_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftMessage: {\n from: senderName,\n to: recipientName,\n message,\n },\n giftWrappingId: isGiftWrappingSelected ? giftWrappingId : null,\n giftReceiptIncluded,\n printedCardIncluded,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.setGiftOptionsOnCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n"],"names":["getCookie","cookieName","cookies","i","cookie","AUTHENTICATED_CART_KEY","setPersistedCartData","data","getPersistedCartData","setEstimatedShippingLocation","setAuthenticatedCart","isAuthenticated","getAuthenticatedCart","_state","state","target","key","value","expiresInDays","_a","expires","initialize","Initializer","_config","config","initializeCart","events","authenticated","locale","resetCart","payload","refreshCart","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformCart","model","giftCard","giftCartState","currentBalanceValue","appliedBalanceValue","_b","currency","_c","transformQuantity","transformGiftOptions","wrapItem","_d","_e","_f","transformErrors","transformItems","_g","calculateTotal","_h","_i","_j","_k","_l","_m","transformTotalPriceModifiers","transformAddresses","transformOutOfStockItems","transformFullyOutOfStockItems","merge","_p","_o","_n","giftOptions","acc","item","getImage","getRegularPrice","findApplicablePriceTier","priceTiers","quantity","a","b","tier","getDiscounted","isConfigurable","priceRange","applicableTier","transformGiftMessage","transformWrappingPrice","transformGiftOptionsCode","category","priceTier","transformSKU","transformLinks","discount","transformBundleOptions","extractBundleOptionUIDs","transformSelectedOptions","transformCustomizableOptions","transformStockLevel","transformDiscountPercentage","transformDiscountAmount","transformProductAttributes","result","error","bundle","option","bundleOptions","allUIDs","valueUIDs","selected","selectedOptions","selectedOptionsUIDs","transformedOptions","previous","current","parser","fileAnchorElementHtml","anchorText","links","link","address","percent_off","amount_off","attribute","transformedCode","word","transformStoreConfig","transformTaxDisplaySetting","taxDisplaySetting","handleFetchError","errors","unauthorized","extensions","missingCart","path","errorMessage","e","invalidCart","PRICE_RANGE_FRAGMENT","CUSTOMIZABLE_OPTIONS_FRAGMENT","DOWNLOADABLE_CART_ITEMS_FRAGMENT","APPLIED_GIFT_CARDS_FRAGMENT","GIFT_MESSAGE_FRAGMENT","GIFT_WRAPPING_FRAGMENT","AVAILABLE_GIFT_WRAPPING_FRAGMENT","CART_ITEM_FRAGMENT","CART_FRAGMENT","ADD_PRODUCTS_TO_CART_MUTATION","transformShoppingCart","params","cart","items","formatCurrency","transformSpecialPrice","optionLabel","valueLabel","index","options","formattedLocale","contexts","getAdobeDataLayer","setContext","name","adobeDataLayer","pushEvent","event","additionalContext","acdl","getChannelContext","setChannelContext","publishOpenCartEvent","addedItems","shoppingCartContext","shoppingCartItems","publishItemsUpdatedEvent","publishShoppingCartViewEvent","updatedItems","changedProductsContext","publishCartUpdateEvents","newShoppingCartContext","currentItems","currentState","previousItems","updatedItem","previousItem","currentItem","publishInitiateCheckoutEvent","addProductsToCart","cartId","createGuestCart","id","sku","parent_sku","selected_options","entered_options","customFields","_errors","previousCart","newItems","prev","wasCartEmpty","hasItemsNow","CUSTOMER_ACCOUNT_FRAGMENT","GUEST_CART_QUERY","CUSTOMER_CART_QUERY","getCartData","merged","MERGE_CARTS_MUTATION","getStoreConfig","getCustomerCartPayload","getGuestCartPayload","existingCartId","transformedCartData","UPDATE_PRODUCTS_FROM_CART_MUTATION","collectCartItemErrors","cartItems","updatedItemUIDs","itemErrors","uid","getCartItems","currentCartItems","itemsToAdd","itemsToRemove","itemsToUpdate","cartItem","currentItemOptions","optionUID","existingItemWithNewOptions","cartItemOptions","parentSku","optionsUIDs","enteredOptions","DELETE_ITEM_QUANTITY","updateProductsFromCart","results","updatedItemsErrors","updateProductQuantities","updateItem","CREATE_GUEST_CART_MUTATION","disableGuestCart","STORE_CONFIG_QUERY","transformPartialAddress","transformShippingMethod","COUNTRIES_QUERY","REGIONS_QUERY","ESTIMATE_SHIPPING_METHODS_MUTATION","getEstimateShipping","countryCode","postcode","region","addressInput","selectedMethod","method","getCountries","sortedCountries","defaultCountry","country","getRegions","countryId","GET_ESTIMATED_TOTALS_MUTATION","getEstimatedTotals","carrier_code","method_code","estimatedData","APPLY_COUPONS_TO_CART_MUTATION","ApplyCouponsStrategy","applyCouponsToCart","couponCodes","type","cartData","publishCartView","APPLY_GIFT_CARD_ON_CART_MUTATION","applyGiftCardToCart","giftCardCode","REMOVE_GIFT_CARD_ON_CART_MUTATION","removeGiftCardFromCart","SET_GIFT_OPTIONS_ON_CART_MUTATION","setGiftOptionsOnCart","giftForm","recipientName","senderName","message","giftReceiptIncluded","printedCardIncluded","giftWrappingId","isGiftWrappingSelected"],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["/@dropins/storefront-cart/src/lib/cookies.ts","/@dropins/storefront-cart/src/lib/persisted-data.ts","/@dropins/storefront-cart/src/lib/state.ts","/@dropins/storefront-cart/src/api/initialize/initialize.ts","/@dropins/storefront-cart/src/api/fetch-graphql/fetch-graphql.ts","/@dropins/storefront-cart/src/data/transforms/transform-cart.ts","/@dropins/storefront-cart/src/data/transforms/transform-store-config.ts","/@dropins/storefront-cart/src/lib/fetch-error.ts","/@dropins/storefront-cart/src/api/addProductsToCart/graphql/AddProductsToCartMutation.ts","/@dropins/storefront-cart/src/data/transforms/acdl-context.ts","/@dropins/storefront-cart/src/lib/acdl.ts","/@dropins/storefront-cart/src/api/addProductsToCart/addProductsToCart.ts","/@dropins/storefront-cart/src/api/graphql/CustomerAccountFragment.ts","/@dropins/storefront-cart/src/api/getCartData/graphql/CartQuery.ts","/@dropins/storefront-cart/src/api/getCartData/getCartData.ts","/@dropins/storefront-cart/src/api/initializeCart/graphql/MergeCartsMutation.ts","/@dropins/storefront-cart/src/api/initializeCart/initializeCart.ts","/@dropins/storefront-cart/src/api/updateProductsFromCart/graphql/UpdateProductsMutation.ts","/@dropins/storefront-cart/src/api/updateProductsFromCart/updateProductsFromCart.ts","/@dropins/storefront-cart/src/api/resetCart/resetCart.ts","/@dropins/storefront-cart/src/api/createGuestCart/graphql/CreateCartMutation.ts","/@dropins/storefront-cart/src/api/createGuestCart/createGuestCart.ts","/@dropins/storefront-cart/src/api/getStoreConfig/graphql/StoreConfigQuery.ts","/@dropins/storefront-cart/src/api/getStoreConfig/getStoreConfig.ts","/@dropins/storefront-cart/src/data/transforms/transform-shipping.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/graphql/countriesAndRegionsQueries.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/graphql/estimateShippingMethodsMutation.ts","/@dropins/storefront-cart/src/api/getEstimateShipping/getEstimateShipping.ts","/@dropins/storefront-cart/src/api/getEstimatedTotals/graphql/GetEstimatedTotalsMutation.ts","/@dropins/storefront-cart/src/api/getEstimatedTotals/getEstimatedTotals.ts","/@dropins/storefront-cart/src/api/refreshCart/refreshCart.ts","/@dropins/storefront-cart/src/api/applyCouponsToCart/graphql/ApplyCouponsToCartMutation.ts","/@dropins/storefront-cart/src/api/applyCouponsToCart/applyCouponsToCart.ts","/@dropins/storefront-cart/src/api/publishShoppingCartViewEvent/publishShoppingCartViewEvent.ts","/@dropins/storefront-cart/src/api/applyGiftCardToCart/graphql/ApplyGiftCardToCartMutation.ts","/@dropins/storefront-cart/src/api/applyGiftCardToCart/applyGiftCardToCart.ts","/@dropins/storefront-cart/src/api/removeGiftCardFromCart/graphql/RemoveGiftCardFromCartMutation.ts","/@dropins/storefront-cart/src/api/removeGiftCardFromCart/removeGiftCardFromCart.ts","/@dropins/storefront-cart/src/api/setGiftOptionsOnCart/graphql/UpdateGiftOptionsMutation.ts","/@dropins/storefront-cart/src/api/setGiftOptionsOnCart/setGiftOptionsOnCart.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport function getCookie(cookieName: string) {\n // Split the cookie string into an array of individual cookies\n const cookies = document.cookie.split(';');\n\n // Loop through the cookies to find the one with the specified name\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim(); // Remove leading and trailing spaces\n\n // Check if this cookie starts with the name you're looking for\n if (cookie.indexOf(`${cookieName}=`) === 0) {\n // Extract and return the cookie's value\n return cookie.substring(cookieName.length + 1);\n }\n }\n\n // If the cookie is not found, return null\n return null;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CartModel } from '@/cart/data/models';\n\nconst AUTHENTICATED_CART_KEY = 'DROPIN__CART__CART__AUTHENTICATED';\n\nexport function setPersistedCartData(data: CartModel | null) {\n if (data) {\n sessionStorage.setItem('DROPIN__CART__CART__DATA', JSON.stringify(data));\n } else {\n sessionStorage.removeItem('DROPIN__CART__CART__DATA');\n }\n}\n\nexport function getPersistedCartData(): CartModel | null {\n const data = sessionStorage.getItem('DROPIN__CART__CART__DATA');\n\n if (data) return JSON.parse(data);\n\n return null;\n}\n\nexport function setEstimatedShippingLocation(\n data: {\n [key: string]: string;\n } | null\n) {\n if (data) {\n sessionStorage.setItem(\n 'DROPIN__CART__SHIPPING__DATA',\n JSON.stringify(data)\n );\n } else {\n sessionStorage.removeItem('DROPIN__CART__SHIPPING__DATA');\n }\n}\n\nexport function getEstimatedShippingLocation(): {\n [key: string]: string;\n} | null {\n const data = sessionStorage.getItem('DROPIN__CART__SHIPPING__DATA');\n\n if (data) return JSON.parse(data);\n\n return null;\n}\n\nexport function setAuthenticatedCart(isAuthenticated: boolean) {\n isAuthenticated\n ? localStorage.setItem(AUTHENTICATED_CART_KEY, 'true')\n : localStorage.removeItem(AUTHENTICATED_CART_KEY);\n}\n\nexport function getAuthenticatedCart(): boolean {\n return localStorage.getItem(AUTHENTICATED_CART_KEY) === 'true';\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { getCookie } from '@/cart/lib/cookies';\nimport { StoreConfigModel } from '@/cart/data/models/store-models';\nimport { getAuthenticatedCart, setAuthenticatedCart } from './persisted-data';\n\ntype State = {\n state: {\n displayMiniCart: boolean;\n miniCartMaxItemsDisplay: number;\n cartExpiresInDays: number;\n cartSummaryDisplayTotal: number;\n defaultCountry: string;\n categoryFixedProductTaxDisplaySetting: string;\n productFixedProductTaxDisplaySetting: string;\n salesFixedProductTaxDisplaySetting: string;\n useConfigurableParentThumbnail: boolean;\n shoppingCartDisplaySetting: {\n zeroTax: boolean;\n subtotal: string;\n price: string;\n shipping: string;\n fullSummary: boolean;\n grandTotal: boolean;\n taxGiftWrapping: string;\n };\n };\n cartId: string | null;\n authenticated: boolean;\n initializing?: boolean;\n locale?: string;\n config?: StoreConfigModel | null;\n};\n\nconst _state: State = (() => {\n const isAuthenticated = getAuthenticatedCart();\n return {\n cartId: null,\n authenticated: isAuthenticated,\n };\n})();\n\n// Proxy state to allow reactivity\nexport const state = new Proxy(_state, {\n set(target, key, value) {\n // @ts-ignore\n target[key] = value;\n\n if (key === 'cartId') {\n // only update cookie if value has changed\n if (value === state.cartId) return true;\n\n if (value === null) {\n // remove cookie\n document.cookie = `DROPIN__CART__CART-ID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n return true;\n }\n\n // get expiration days from config\n const expiresInDays = state.config?.cartExpiresInDays;\n\n if (!expiresInDays) {\n console.warn(\n 'Missing \"expiresInDays\" config. Cookie expiration will default to 30 days.'\n );\n }\n\n // set expiration date\n const expires = new Date();\n expires.setDate(expires.getDate() + (expiresInDays ?? 30));\n\n // set cookie\n document.cookie = `DROPIN__CART__CART-ID=${value}; expires=${expires.toUTCString()}; path=/`;\n }\n\n if (key === 'authenticated') {\n setAuthenticatedCart(value);\n }\n\n return true;\n },\n get(target, key) {\n if (key === 'cartId') {\n // get value from cookie\n return getCookie('DROPIN__CART__CART-ID');\n }\n\n return target[key as keyof State];\n },\n});\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Initializer, Model } from '@adobe-commerce/elsie/lib';\nimport { initializeCart, refreshCart, resetCart } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Lang } from '@adobe-commerce/elsie/i18n';\nimport { setPersistedCartData } from '@/cart/lib/persisted-data';\nimport { CartModel } from '@/cart/data/models';\n\ntype ConfigProps = {\n disableGuestCart?: boolean;\n langDefinitions?: Lang;\n\n models?: {\n CartModel?: Model<CartModel>;\n };\n};\n\nexport const initialize = new Initializer<ConfigProps>({\n init: async (_config) => {\n const config = { disableGuestCart: false, ..._config };\n\n // Set config\n initialize.config.setConfig(config);\n\n initializeCart().catch(console.error);\n },\n\n listeners: () => [\n events.on(\n 'authenticated',\n (authenticated) => {\n if (state.authenticated && !authenticated) {\n // Reset cart if the user is no longer authenticated\n events.emit('cart/reset', undefined);\n }\n // Login event occurred\n else if (authenticated && !state.authenticated) {\n state.authenticated = authenticated;\n initializeCart().catch(console.error);\n }\n },\n { eager: true }\n ),\n\n events.on('locale', async (locale) => {\n if (locale !== state.locale) {\n state.locale = locale;\n initializeCart().catch(console.error);\n }\n }),\n\n events.on('cart/reset', () => {\n resetCart().catch(console.error);\n events.emit('cart/data', null);\n }),\n\n events.on('cart/data', (payload) => {\n setPersistedCartData(payload);\n }),\n\n events.on('checkout/updated', (payload) => {\n if (!payload || payload?.type === 'quote') return;\n\n refreshCart().catch(console.error);\n }),\n\n events.on('requisitionList/alert', () => {\n refreshCart().catch(console.error);\n }),\n ],\n});\n\nexport const config = initialize.config;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FetchGraphQL } from '@adobe-commerce/fetch-graphql';\n\nexport const {\n setEndpoint,\n setFetchGraphQlHeader,\n removeFetchGraphQlHeader,\n setFetchGraphQlHeaders,\n fetchGraphQl,\n getConfig,\n} = new FetchGraphQL().getMethods();\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { merge } from '@adobe-commerce/elsie/lib';\nimport { CartModel, StoreConfigModel } from '@/cart/data/models';\nimport { state } from '@/cart/lib/state';\nimport { config } from '@/cart/api';\n\nexport function transformCart(data: any): CartModel | null {\n if (!data) return null;\n\n const model = {\n appliedGiftCards:\n data?.applied_gift_cards?.map((giftCard: any) => {\n const giftCartState = {\n code: giftCard.code ?? '',\n appliedBalance: {\n value: giftCard.applied_balance.value ?? 0,\n currency: giftCard.applied_balance.currency ?? 'USD',\n },\n currentBalance: {\n value: giftCard.current_balance.value ?? 0,\n currency: giftCard.current_balance.currency ?? 'USD',\n },\n expirationDate: giftCard.expiration_date ?? '',\n };\n\n const currentBalanceValue = giftCartState?.currentBalance?.value;\n const appliedBalanceValue = giftCartState?.appliedBalance?.value;\n const currency = giftCartState?.currentBalance?.currency;\n\n const hasBalanceDifference =\n currentBalanceValue - appliedBalanceValue > 0;\n\n const value = hasBalanceDifference\n ? currentBalanceValue - appliedBalanceValue\n : 0;\n\n return {\n ...giftCartState,\n giftCardBalance: { value, currency },\n };\n }) ?? [],\n id: data.id,\n totalQuantity: transformQuantity(data),\n totalUniqueItems: data.itemsV2.items.length,\n totalGiftOptions: transformGiftOptions(data?.prices?.gift_options),\n giftReceiptIncluded: data?.gift_receipt_included ?? false,\n printedCardIncluded: data?.printed_card_included ?? false,\n cartGiftWrapping:\n data?.available_gift_wrappings?.map((wrapItem: any) => {\n return {\n design: wrapItem.design ?? '',\n uid: wrapItem.uid,\n selected: data?.gift_wrapping?.uid === wrapItem.uid,\n image: {\n url: wrapItem?.image?.url ?? '',\n label: wrapItem.image?.label ?? '',\n },\n price: {\n currency: wrapItem?.price?.currency ?? 'USD',\n value: wrapItem?.price?.value ?? 0,\n },\n };\n }) ?? [],\n giftMessage: {\n senderName: data?.gift_message?.from ?? '',\n recipientName: data?.gift_message?.to ?? '',\n message: data?.gift_message?.message ?? '',\n },\n errors: transformErrors(data?.itemsV2),\n items: transformItems(data?.itemsV2),\n miniCartMaxItems: transformItems(data?.itemsV2).slice(\n 0,\n state.config?.miniCartMaxItemsDisplay ?? 10\n ),\n total: {\n includingTax: {\n value: data.prices.grand_total.value,\n currency: data.prices.grand_total.currency,\n },\n excludingTax: {\n value: data.prices.grand_total_excluding_tax.value,\n currency: data.prices.grand_total_excluding_tax.currency,\n },\n },\n discount: calculateTotal(\n data.prices.discounts,\n data.prices.grand_total.currency\n ),\n subtotal: {\n excludingTax: {\n value: data.prices.subtotal_excluding_tax?.value,\n currency: data.prices.subtotal_excluding_tax?.currency,\n },\n includingTax: {\n value: data.prices.subtotal_including_tax?.value,\n currency: data.prices.subtotal_including_tax?.currency,\n },\n includingDiscountOnly: {\n value: data.prices.subtotal_with_discount_excluding_tax?.value,\n currency: data.prices.subtotal_with_discount_excluding_tax?.currency,\n },\n },\n appliedTaxes: transformTotalPriceModifiers(data.prices.applied_taxes),\n totalTax: calculateTotal(\n data.prices.applied_taxes,\n data.prices.grand_total.currency\n ),\n appliedDiscounts: transformTotalPriceModifiers(data.prices.discounts),\n isVirtual: data.is_virtual,\n addresses: {\n shipping: data.shipping_addresses && transformAddresses(data),\n },\n isGuestCart: !state.authenticated,\n hasOutOfStockItems: transformOutOfStockItems(data),\n hasFullyOutOfStockItems: transformFullyOutOfStockItems(data),\n appliedCoupons: data.applied_coupons,\n };\n\n // extend the model with custom transformer\n return merge(\n model,\n config.getConfig().models?.CartModel?.transformer?.(data)\n );\n}\n\nfunction transformGiftOptions(giftOptions: any) {\n return {\n giftWrappingForItems: {\n value: giftOptions?.gift_wrapping_for_items?.value ?? 0,\n currency: giftOptions?.gift_wrapping_for_items?.currency ?? 'USD',\n },\n giftWrappingForItemsInclTax: {\n value: giftOptions?.gift_wrapping_for_items_incl_tax?.value ?? 0,\n currency:\n giftOptions?.gift_wrapping_for_items_incl_tax?.currency ?? 'USD',\n },\n giftWrappingForOrder: {\n value: giftOptions?.gift_wrapping_for_order?.value ?? 0,\n currency: giftOptions?.gift_wrapping_for_order?.currency ?? 'USD',\n },\n giftWrappingForOrderInclTax: {\n value: giftOptions?.gift_wrapping_for_order_incl_tax?.value ?? 0,\n currency:\n giftOptions?.gift_wrapping_for_order_incl_tax?.currency ?? 'USD',\n },\n printedCard: {\n value: giftOptions?.printed_card?.value ?? 0,\n currency: giftOptions?.printed_card?.currency ?? 'USD',\n },\n printedCardInclTax: {\n value: giftOptions?.printed_card_incl_tax?.value ?? 0,\n currency: giftOptions?.printed_card_incl_tax?.currency ?? 'USD',\n },\n };\n}\n\n// Need to calculate total amount since it's not provided by GraphQL\nfunction calculateTotal(data: any[], currency: string) {\n if (!data?.length)\n return {\n value: 0,\n currency,\n };\n\n return data.reduce(\n (acc: any, item: any) => {\n return {\n value: acc.value + item.amount.value,\n currency: item.amount.currency,\n };\n },\n { value: 0, currency }\n );\n}\n\nfunction getImage(config: StoreConfigModel | null | undefined, item: any) {\n return {\n // Use parent thumbnail if configured, otherwise use own variant. use the parent thumbnail as a fallback\n src: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.url\n : item.configured_variant?.thumbnail?.url || item.product.thumbnail.url,\n alt: config?.useConfigurableParentThumbnail\n ? item.product.thumbnail.label\n : item.configured_variant?.thumbnail?.label ||\n item.product.thumbnail.label,\n };\n}\n\nfunction getRegularPrice(item: any) {\n if (item.__typename === 'ConfigurableCartItem') {\n return {\n value:\n item.configured_variant?.price_range?.maximum_price.regular_price.value,\n currency:\n item.configured_variant?.price_range?.maximum_price.regular_price\n .currency,\n };\n }\n if (item.__typename === 'GiftCardCartItem') {\n return {\n value: item.prices.price.value,\n currency: item.prices.price.currency,\n };\n }\n return {\n value: item.prices.original_item_price.value,\n currency: item.prices.original_item_price.currency,\n };\n}\n\n/**\n * Finds the most applicable price tier for a given quantity\n * @param priceTiers - Array of price tier objects\n * @param quantity - Current item quantity\n * @returns The applicable tier or null if none found\n */\nfunction findApplicablePriceTier(priceTiers: any[], quantity: number) {\n if (!priceTiers?.length) return null;\n\n // Sort price tiers by quantity in descending order to find the highest applicable tier\n const sortedTiers = [...priceTiers].sort(\n (a: any, b: any) => b.quantity - a.quantity\n );\n\n // Find the highest tier where the current quantity meets or exceeds the tier's minimum quantity\n return sortedTiers.find((tier: any) => quantity >= tier.quantity) || null;\n}\n\nfunction getDiscounted(item: any) {\n const quantity = item.quantity;\n const isConfigurable = item.__typename === 'ConfigurableCartItem';\n\n // Get price tiers and price range based on item type\n const priceTiers = isConfigurable\n ? item.configured_variant?.price_tiers\n : item.product.price_tiers;\n const priceRange = isConfigurable\n ? item.configured_variant?.price_range\n : item.product.price_range;\n\n // Check price tiers first for discount eligibility\n const applicableTier = findApplicablePriceTier(priceTiers, quantity);\n if (applicableTier) {\n return applicableTier.discount.amount_off > 0;\n }\n\n // Fallback to regular price range discount\n return priceRange?.maximum_price.discount.amount_off > 0;\n}\n\nfunction transformGiftMessage(data: any) {\n return {\n senderName: data?.gift_message?.from ?? '',\n recipientName: data?.gift_message?.to ?? '',\n message: data?.gift_message?.message ?? '',\n };\n}\n\nfunction transformWrappingPrice(data: any) {\n return {\n currency: data?.currency ?? 'USD',\n value: data?.value ?? 0,\n };\n}\n\nfunction transformItems(data: any) {\n if (!data?.items?.length) return [];\n\n const config = state.config;\n\n return data.items.map((item: any) => ({\n giftWrappingAvailable: item?.product?.gift_wrapping_available ?? false,\n giftWrappingPrice: transformWrappingPrice(\n item?.product?.gift_wrapping_price\n ),\n giftMessage: transformGiftMessage(item),\n productGiftWrapping:\n item?.available_gift_wrapping?.map((wrapItem: any) => {\n return {\n design: wrapItem.design ?? '',\n uid: wrapItem.uid,\n selected: item.gift_wrapping?.uid === wrapItem.uid,\n image: {\n url: wrapItem?.image?.url ?? '',\n label: wrapItem.image?.label ?? '',\n },\n price: {\n currency: wrapItem?.price?.currency ?? 'USD',\n value: wrapItem?.price?.value ?? 0,\n },\n };\n }) ?? [],\n itemType: item.__typename,\n uid: item.uid,\n giftMessageAvailable: transformGiftOptionsCode(\n item.product.gift_message_available\n ),\n url: {\n urlKey: item.product.url_key,\n categories: item.product.categories.map(\n (category: any) => category.url_key\n ),\n },\n canonicalUrl: item.product.canonical_url,\n categories: item.product.categories.map((category: any) => category.name),\n priceTiers:\n item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant?.price_tiers?.map(\n (priceTier: any) => priceTier\n ) || []\n : item.product.price_tiers?.map((priceTier: any) => priceTier) || [],\n quantity: item.quantity,\n sku: transformSKU(item),\n topLevelSku: item.product.sku,\n name: item.product.name,\n image: getImage(config, item),\n price: {\n value: item.prices.price.value,\n currency: item.prices.price.currency,\n },\n taxedPrice: {\n value: item.prices.price_including_tax.value,\n currency: item.prices.price_including_tax.currency,\n },\n fixedProductTaxes: item.prices.fixed_product_taxes,\n rowTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n rowTotalIncludingTax: {\n value: item.prices.row_total_including_tax.value,\n currency: item.prices.row_total_including_tax.currency,\n },\n links: transformLinks(item.links),\n total: {\n value: item.prices.original_row_total?.value,\n currency: item.prices.original_row_total?.currency,\n },\n discount: {\n value: item.prices.total_item_discount.value,\n currency: item.prices.total_item_discount.currency,\n label: item.prices.discounts?.map((discount: any) => discount.label),\n },\n regularPrice: getRegularPrice(item),\n discounted: getDiscounted(item),\n bundleOptions:\n item.__typename === 'BundleCartItem'\n ? transformBundleOptions(item.bundle_options)\n : null,\n bundleOptionsUIDs:\n item.__typename === 'BundleCartItem'\n ? extractBundleOptionUIDs(item.bundle_options)\n : null,\n selectedOptions: transformSelectedOptions(item.configurable_options)\n ?.options,\n selectedOptionsUIDs: transformSelectedOptions(item.configurable_options)\n ?.uids,\n customizableOptions: transformCustomizableOptions(\n item.customizable_options\n ),\n sender: item.__typename === 'GiftCardCartItem' ? item.sender_name : null,\n senderEmail:\n item.__typename === 'GiftCardCartItem' ? item.sender_email : null,\n recipient:\n item.__typename === 'GiftCardCartItem' ? item.recipient_name : null,\n recipientEmail:\n item.__typename === 'GiftCardCartItem' ? item.recipient_email : null,\n message: item.__typename === 'GiftCardCartItem' ? item.message : null,\n\n discountedTotal: {\n value: item.prices.row_total.value,\n currency: item.prices.row_total.currency,\n },\n\n onlyXLeftInStock:\n item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant?.only_x_left_in_stock\n : item.product.only_x_left_in_stock,\n lowInventory:\n item.is_available && item.product.only_x_left_in_stock !== null,\n insufficientQuantity:\n (item.__typename === 'ConfigurableCartItem'\n ? item.configured_variant\n : item.product\n ).stock_status === 'IN_STOCK' && !item.is_available,\n outOfStock: item.product.stock_status === 'OUT_OF_STOCK',\n stockLevel: transformStockLevel(item),\n // Add support for BundleCartItem\n discountPercentage: transformDiscountPercentage(item),\n savingsAmount: transformDiscountAmount(item),\n productAttributes: transformProductAttributes(item),\n }));\n}\n\n// This helper follows the approach used in the store configuration GraphQL schema for Gift Messages,\n// where a `null` value represents the \"use system value\" option. It requires special processing\n// based on both global and product-level configurations\nfunction transformGiftOptionsCode(data: string) {\n switch (+data) {\n case 0:\n return false;\n case 1:\n return true;\n case 2:\n return null;\n default:\n return false;\n }\n}\n\nfunction transformErrors(data: any) {\n const result = data?.items?.reduce((acc: any, item: any) => {\n item.errors?.forEach((error: Error) => {\n acc.push({ uid: item.uid, text: error.message });\n });\n\n return acc;\n }, []);\n\n return result?.length ? result : null;\n}\n\nfunction transformTotalPriceModifiers(data: any) {\n if (!data?.length) return [];\n\n return data.map((item: any) => ({\n amount: {\n value: item.amount.value,\n currency: item.amount.currency,\n },\n label: item.label,\n coupon: item.coupon,\n }));\n}\n\nfunction transformBundleOptions(data: any) {\n const bundle = data?.map((option: any) => ({\n uid: option.uid,\n label: option.label,\n value: option.values.map((value: any) => value.label).join(', '),\n }));\n\n const bundleOptions: { [key: string]: any } = {};\n\n bundle?.forEach((option: any) => {\n bundleOptions[option.label] = option.value;\n });\n\n return Object.keys(bundleOptions).length > 0 ? bundleOptions : null;\n}\n\nfunction extractBundleOptionUIDs(data: any) {\n if (!data?.length) return null;\n\n const allUIDs: string[] = [];\n data.forEach((option: any) => {\n if (option.values?.length) {\n const valueUIDs = option.values.map((value: any) => value.uid);\n allUIDs.push(...valueUIDs);\n }\n });\n\n return allUIDs.length > 0 ? allUIDs : null;\n}\n\nfunction transformSelectedOptions(data: any) {\n const selected = data?.map((option: any) => ({\n uid: option.configurable_product_option_uid,\n label: option.option_label,\n value: option.value_label,\n valueUid: option.configurable_product_option_value_uid,\n }));\n\n const selectedOptions: { [key: string]: any } = {};\n const selectedOptionsUIDs: { [key: string]: any } = {};\n\n selected?.forEach((option: any) => {\n selectedOptions[option.label] = option.value;\n selectedOptionsUIDs[option.label] = option.valueUid;\n });\n\n return {\n options: Object.keys(selectedOptions).length > 0 ? selectedOptions : null,\n uids:\n Object.keys(selectedOptionsUIDs).length > 0 ? selectedOptionsUIDs : null,\n };\n}\n\nfunction transformCustomizableOptions(data: any) {\n const transformedOptions = data?.map((option: any) => ({\n uid: option.customizable_option_uid,\n label: option.label,\n type: option.type,\n values: option.values.map((value: any) => ({\n uid: value.customizable_option_value_uid,\n label: value.label,\n value: value.value,\n })),\n }));\n\n const result: { [key: string]: any } = {};\n\n transformedOptions?.forEach((option: any) => {\n switch (option.type) {\n case 'field':\n case 'area':\n case 'date_time':\n result[option.label] = option.values[0].value;\n break;\n case 'radio':\n case 'drop_down':\n result[option.label] = option.values[0].label;\n break;\n case 'multiple':\n case 'checkbox':\n result[option.label] = (option.values as Array<any>).reduce(\n (previous, current) => {\n if (previous) return `${previous}, ${current.label}`;\n return current.label;\n },\n ''\n );\n break;\n case 'file': {\n const parser = new DOMParser();\n const fileAnchorElementHtml = option.values[0].value;\n const doc = parser.parseFromString(fileAnchorElementHtml, 'text/html');\n const anchorText = doc.querySelector('a')?.textContent || '';\n result[option.label] = anchorText;\n break;\n }\n }\n });\n return result;\n}\n\nfunction transformQuantity(data: any) {\n if (state.config?.cartSummaryDisplayTotal === 0)\n return data.itemsV2.items.length;\n if (state.config?.cartSummaryDisplayTotal === 1) return data.total_quantity;\n // Default to items count if unexpected config value or error returned\n return data.itemsV2.items.length;\n}\n\nfunction transformLinks(links: any) {\n return links?.length > 0\n ? {\n count: links.length,\n result: links.map((link: any) => link.title).join(', '),\n }\n : null;\n}\n\nfunction transformAddresses(data: any) {\n //Shipping Address bound to cart\n if (data.shipping_addresses?.length) {\n return data.shipping_addresses?.map((address: any) => ({\n countryCode: address.country.code,\n zipCode: address.postcode,\n regionCode: address.region.code,\n }));\n //Shipping Address bound to customer\n } else if (data.addresses?.length) {\n return data.addresses\n ?.filter((address: any) => address.default_shipping)\n .map(\n (address: any) =>\n address.default_shipping && {\n countryCode: address.country_code,\n zipCode: address.postcode,\n regionCode: address.region?.region_code,\n }\n );\n }\n\n return null;\n}\n\nfunction transformOutOfStockItems(data: any) {\n return data?.itemsV2?.items?.some(\n (item: any) =>\n item?.product?.stock_status === 'OUT_OF_STOCK' ||\n (item.product.stock_status === 'IN_STOCK' && !item.is_available)\n );\n}\n\nfunction transformStockLevel(item: any) {\n if (!item.not_available_message) return null;\n\n return item.product.quantity != null ? item.product.quantity : 'noNumber';\n}\n\nfunction transformFullyOutOfStockItems(data: any) {\n return data?.itemsV2?.items?.some(\n (item: any) => item?.product?.stock_status === 'OUT_OF_STOCK'\n );\n}\n\n// Add support for BundleCartItem in USF-1591 after LYNX-599 is completed\nfunction transformDiscountPercentage(data: any) {\n const quantity = data.quantity;\n\n // Check price tiers first for discount percentage\n const applicableTier = findApplicablePriceTier(\n data.product.price_tiers,\n quantity\n );\n\n if (applicableTier) {\n return Math.round(applicableTier.discount.percent_off);\n }\n\n // Fallback to product-specific discount percentage\n let percent_off;\n\n if (data.__typename === 'ConfigurableCartItem') {\n percent_off =\n data?.configured_variant?.price_range?.maximum_price?.discount\n ?.percent_off;\n } else if (data.__typename === 'BundleCartItem') {\n return undefined;\n } else {\n percent_off =\n data?.product?.price_range?.maximum_price?.discount?.percent_off;\n }\n\n if (percent_off === 0) {\n return undefined;\n }\n\n return Math.round(percent_off);\n}\n\n// Add support for returning configured_variant sku for __typename:\"ConfigurableCartItem\"\nfunction transformSKU(item: any) {\n if (item.__typename === 'ConfigurableCartItem') {\n return item.configured_variant.sku;\n }\n\n // If varaintSku is available return it, otherwise return product sku\n return item.product?.variantSku || item.product.sku;\n}\n\nfunction transformDiscountAmount(data: any) {\n let amount_off;\n let currency;\n\n amount_off =\n data?.prices?.original_row_total?.value - data?.prices?.row_total?.value;\n currency = data?.prices?.row_total?.currency;\n\n if (amount_off === 0) {\n return undefined;\n }\n return {\n value: amount_off,\n currency,\n };\n}\n\nfunction transformProductAttributes(item: any) {\n return item?.product?.custom_attributesV2?.items?.map((attribute: any) => {\n const transformedCode = attribute.code\n .split('_')\n .map((word: any) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n return {\n ...attribute,\n code: transformedCode,\n };\n });\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { StoreConfigModel } from '@/cart/data/models';\n\nexport function transformStoreConfig(data: any): StoreConfigModel | null {\n if (!data) return null;\n\n const transformTaxDisplaySetting = (taxDisplaySetting: number) => {\n switch (taxDisplaySetting) {\n case 1:\n return 'EXCLUDING_TAX';\n case 2:\n return 'INCLUDING_TAX';\n case 3:\n return 'INCLUDING_EXCLUDING_TAX';\n default:\n return 'EXCLUDING_TAX';\n }\n };\n\n // A `null` value indicates the \"use system value\" option, which requires special handling\n // based on both global and product-level configurations\n const transformGiftOptionsCode = (data: string) => {\n switch (+data) {\n case 0:\n return false;\n case 1:\n return true;\n case 2:\n return null;\n default:\n return false;\n }\n };\n\n return {\n displayMiniCart: data.minicart_display,\n miniCartMaxItemsDisplay: data.minicart_max_items,\n cartExpiresInDays: data.cart_expires_in_days,\n cartSummaryDisplayTotal: data.cart_summary_display_quantity,\n cartSummaryMaxItems: data.max_items_in_order_summary,\n defaultCountry: data.default_country!,\n categoryFixedProductTaxDisplaySetting:\n data.category_fixed_product_tax_display_setting,\n productFixedProductTaxDisplaySetting:\n data.product_fixed_product_tax_display_setting,\n salesFixedProductTaxDisplaySetting:\n data.sales_fixed_product_tax_display_setting,\n shoppingCartDisplaySetting: {\n zeroTax: data.shopping_cart_display_zero_tax,\n subtotal: transformTaxDisplaySetting(data.shopping_cart_display_subtotal),\n price: transformTaxDisplaySetting(data.shopping_cart_display_price),\n shipping: transformTaxDisplaySetting(data.shopping_cart_display_shipping),\n fullSummary: data.shopping_cart_display_full_summary,\n grandTotal: data.shopping_cart_display_grand_total,\n taxGiftWrapping: data.shopping_cart_display_tax_gift_wrapping,\n },\n useConfigurableParentThumbnail:\n data.configurable_thumbnail_source === 'parent',\n allowGiftWrappingOnOrder: transformGiftOptionsCode(\n data?.allow_gift_wrapping_on_order\n ),\n allowGiftWrappingOnOrderItems: transformGiftOptionsCode(\n data?.allow_gift_wrapping_on_order_items\n ),\n allowGiftMessageOnOrder: transformGiftOptionsCode(data?.allow_order),\n allowGiftMessageOnOrderItems: transformGiftOptionsCode(data?.allow_items),\n allowGiftReceipt: Boolean(+data?.allow_gift_receipt),\n allowPrintedCard: Boolean(+data?.allow_printed_card),\n printedCardPrice: {\n currency: data?.printed_card_priceV2?.currency ?? '',\n value:\n data?.printed_card_priceV2?.value != null\n ? +data.printed_card_priceV2.value\n : 0,\n },\n cartGiftWrapping: transformTaxDisplaySetting(+data.cart_gift_wrapping),\n cartPrintedCard: transformTaxDisplaySetting(+data.cart_printed_card),\n };\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { resetCart } from '../api';\n\n/** Actions */\nexport const handleFetchError = (\n errors: Array<{\n message: string;\n path: Array<string>;\n extensions: { category: string };\n }>\n) => {\n const unauthorized =\n errors.findIndex(\n ({ extensions }) => extensions?.category === 'graphql-authorization'\n ) > -1;\n\n // Exclude invalid Coupon error\n const missingCart =\n errors.findIndex(\n ({ path, extensions }) =>\n extensions?.category === 'graphql-no-such-entity' &&\n !path?.includes('applyCouponsToCart')\n ) > -1;\n\n const errorMessage = errors.map((e: any) => e.message).join(' ');\n\n // Invalid cart\n const invalidCart =\n errors.findIndex(\n ({ path, extensions }) =>\n extensions?.category === 'graphql-input' &&\n path?.includes('cart')\n ) > -1;\n\n // Reset cart data if unauthorized or missing cart or invalid cart\n if (unauthorized || missingCart || invalidCart) {\n resetCart();\n console.error(errorMessage);\n return null;\n }\n\n throw Error(errorMessage);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const ADD_PRODUCTS_TO_CART_MUTATION = `\n mutation ADD_PRODUCTS_TO_CART_MUTATION(\n $cartId: String!, \n $cartItems: [CartItemInput!]!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n addProductsToCart(\n cartId: $cartId\n cartItems: $cartItems\n ) {\n cart {\n ...CART_FRAGMENT\n }\n user_errors {\n code\n message\n }\n }\n }\n \n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { ShoppingCartContext, ShoppingCartItem } from '../models/acdl-models';\nimport { CartModel, Item } from '../models/cart-model';\n\ntype TransformShoppingCartParams = {\n cart: CartModel;\n locale?: string;\n};\n\nexport function transformShoppingCart(\n params: TransformShoppingCartParams\n): ShoppingCartContext {\n const { cart, locale = 'en-US' } = params;\n\n return {\n id: cart.id,\n items: transformItems(cart.items, locale),\n prices: {\n subtotalExcludingTax: cart.subtotal.excludingTax,\n subtotalIncludingTax: cart.subtotal.includingTax,\n },\n totalQuantity: cart.totalUniqueItems,\n possibleOnepageCheckout: undefined,\n giftMessageSelected: undefined,\n giftWrappingSelected: undefined,\n source: undefined,\n };\n}\n\nexport function transformItems(\n items: Item[],\n locale: string\n): ShoppingCartItem[] {\n return items.map((item: any) => ({\n canApplyMsrp: false,\n formattedPrice: formatCurrency(\n locale,\n item.price.currency,\n item.price.value\n ),\n id: item.uid,\n prices: {\n price: item.price,\n discount: item.discount && item.discount.value !== undefined ? {\n value: item.discount.value,\n currency: item.discount.currency\n } : undefined\n },\n product: {\n productId: item.uid,\n name: item.name,\n sku: item.sku,\n topLevelSku: item.topLevelSku,\n specialToDate: undefined,\n specialFromDate: undefined,\n newToDate: undefined,\n newFromDate: undefined,\n createdAt: undefined,\n updatedAt: undefined,\n manufacturer: undefined,\n countryOfManufacture: undefined,\n categories: item.categories,\n productType: item.itemType,\n pricing: {\n regularPrice: item.regularPrice.value,\n minimalPrice: undefined,\n maximalPrice: undefined,\n specialPrice: transformSpecialPrice(item),\n tierPricing: undefined,\n currencyCode: item.regularPrice.currency,\n },\n canonicalUrl: item.canonicalUrl,\n mainImageUrl: item.image.src,\n image: {\n src: item.image.src,\n alt: item.image.alt,\n },\n },\n configurableOptions: item.selectedOptions ? \n Object.entries(item.selectedOptions).map(([optionLabel, valueLabel], index) => ({\n id: index + 1,\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n bundleOptions: item.bundleOptions ? \n Object.entries(item.bundleOptions).map(([optionLabel, valueLabel], index) => ({\n id: (index + 1).toString(),\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n customizableOptions: item.customizableOptions ? \n Object.entries(item.customizableOptions).map(([optionLabel, valueLabel], index) => ({\n id: (index + 1).toString(),\n optionLabel,\n valueId: index + 1,\n valueLabel: valueLabel as string,\n })) : [],\n quantity: item.quantity,\n selectedOptions: (() => {\n const options = {\n ...item.selectedOptions,\n ...item.bundleOptions,\n ...item.customizableOptions,\n };\n return Object.keys(options).length > 0 ? options : undefined;\n })(),\n }));\n}\n\nfunction formatCurrency(\n locale: string,\n currency: string,\n value: number\n): string {\n const formattedLocale = locale.replace('_', '-');\n\n return new Intl.NumberFormat(formattedLocale, {\n style: 'currency',\n currency,\n }).format(value);\n}\n\nfunction transformSpecialPrice(item: any) {\n if (!item.discounted) {\n return undefined;\n }\n return item.price?.value;\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\n/* Publish functions for the Adobe Client Data Layer (ACDL) */\n\nimport { CartModel, Item } from '@/cart/data/models/cart-model';\nimport {\n transformItems,\n transformShoppingCart,\n} from '@/cart/data/transforms/acdl-context';\nimport {\n ShoppingCartContext,\n ShoppingCartItem,\n} from '../data/models/acdl-models';\n\n/**\n * See: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/contexts.ts\n */\nexport const contexts = {\n SHOPPING_CART_CONTEXT: 'shoppingCartContext',\n PRODUCT_CONTEXT: 'productContext',\n CHANGED_PRODUCTS_CONTEXT: 'changedProductsContext',\n CHANNEL_CONTEXT: 'channelContext',\n};\n\n/**\n * See: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/events.ts\n */\nexport const events = {\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/open-cart.md\n OPEN_CART: 'open-cart',\n // See: ??? (not documented in the commerce-events repo)\n //UPDATE_CART: 'update-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/add-to-cart.md\n ADD_TO_CART: 'add-to-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/remove-from-cart.md\n REMOVE_FROM_CART: 'remove-from-cart',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/shopping-cart-view.md\n SHOPPING_CART_VIEW: 'shopping-cart-view',\n // See: https://github.com/adobe/commerce-events/blob/main/examples/events/initiate-checkout.md\n INITIATE_CHECKOUT: 'initiate-checkout',\n};\n\nexport function getAdobeDataLayer() {\n // @ts-ignore\n window.adobeDataLayer = window.adobeDataLayer || [];\n // @ts-ignore\n return window.adobeDataLayer;\n}\n\n/**\n * Sets a context in the Adobe Client Data Layer (ACDL)\n * Logic based on: https://github.com/adobe/commerce-events/blob/main/packages/storefront-events-sdk/src/Base.ts#L6\n */\nfunction setContext(name: string, data: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n // Clear existing context\n adobeDataLayer.push({\n [name]: null,\n });\n\n // Set new context\n adobeDataLayer.push({\n [name]: data,\n });\n}\n\n/**\n * Pushes an event to the Adobe Client Data Layer (ACDL)\n * Logic based on: https://github.com/adobe/commerce-events/blob/1973d0ce28471ef190fa06dad6359ffa0ab51db6/packages/storefront-events-sdk/src/Base.ts#L34\n */\nfunction pushEvent(event: string, additionalContext?: any) {\n const adobeDataLayer = getAdobeDataLayer();\n\n adobeDataLayer.push((acdl: any) => {\n const state = acdl.getState ? acdl.getState() : {};\n\n acdl.push({\n event,\n eventInfo: {\n ...state,\n ...additionalContext,\n },\n });\n });\n}\n\nfunction getChannelContext() {\n return {\n _id: \"https://ns.adobe.com/xdm/channels/web\",\n _type: \"https://ns.adobe.com/xdm/channel-types/web\",\n };\n}\n\nfunction setChannelContext() {\n setContext(contexts.CHANNEL_CONTEXT, getChannelContext());\n}\n\n// Triggered when a new cart is created, which is when a product is added to an empty cart.\nexport function publishOpenCartEvent(\n cart: CartModel,\n addedItems: Item[],\n locale: string\n) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n // Set context and push open cart event\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n // Transform items and set changed products context\n const shoppingCartItems = transformItems(addedItems, locale);\n \n // Set changed products context to include the items that opened the cart\n setContext(contexts.CHANGED_PRODUCTS_CONTEXT, {\n items: shoppingCartItems,\n });\n\n // Push the open cart event with contexts set\n pushEvent(events.OPEN_CART);\n\n // Set context and push add to cart event for each updated item\n shoppingCartItems.forEach((item) => {\n setContext(contexts.PRODUCT_CONTEXT, item.product);\n publishItemsUpdatedEvent(shoppingCartContext, [item], events.ADD_TO_CART);\n });\n}\n\n// Triggered when any cart page loads.\nexport function publishShoppingCartViewEvent(cart: CartModel, locale: string) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n pushEvent(events.SHOPPING_CART_VIEW);\n}\n\n// A re-usable function to publish events when items are added to, or removed from the cart.\nfunction publishItemsUpdatedEvent(\n shoppingCartContext: ShoppingCartContext,\n updatedItems: ShoppingCartItem[],\n event: string\n) {\n const changedProductsContext = {\n items: updatedItems,\n };\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n setContext(contexts.CHANGED_PRODUCTS_CONTEXT, {\n ...changedProductsContext,\n });\n\n pushEvent(event);\n}\n\nexport function publishCartUpdateEvents(\n cart: CartModel,\n updatedItems: {\n uid: string;\n }[],\n locale: string\n) {\n const newShoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n const currentItems = newShoppingCartContext.items;\n\n const adobeDataLayer = getAdobeDataLayer();\n\n const currentState = adobeDataLayer.getState ? adobeDataLayer.getState() : {};\n\n const { shoppingCartContext: { items: previousItems = [] } = {} } =\n currentState;\n\n updatedItems.forEach((updatedItem) => {\n const previousItem = previousItems.find(\n (item: ShoppingCartItem) => item.id === updatedItem.uid\n );\n\n const currentItem = currentItems!.find(\n (item: ShoppingCartItem) => item.id === updatedItem.uid\n );\n\n if (!currentItem && !previousItem) {\n // Not enough data available to publish an event\n // Adobe Data Layer possibly not initialized yet\n return;\n }\n\n if (!previousItem && currentItem) {\n // Publish add to cart event for the item added\n setContext(contexts.PRODUCT_CONTEXT, currentItem.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem],\n events.ADD_TO_CART\n );\n } else if (previousItem && !currentItem) {\n // Publish remove from cart event for the item removed\n setContext(contexts.PRODUCT_CONTEXT, previousItem.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [previousItem],\n events.REMOVE_FROM_CART\n );\n } else if (currentItem!.quantity > previousItem.quantity) {\n // Publish add to cart event for the item increased\n setContext(contexts.PRODUCT_CONTEXT, currentItem!.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem!],\n events.ADD_TO_CART\n );\n } else {\n // Publish remove from cart event for the item decreased\n setContext(contexts.PRODUCT_CONTEXT, currentItem!.product);\n publishItemsUpdatedEvent(\n newShoppingCartContext,\n [currentItem!],\n events.REMOVE_FROM_CART\n );\n }\n });\n}\n\nexport function publishInitiateCheckoutEvent(cart: CartModel, locale?: string) {\n const shoppingCartContext = transformShoppingCart({\n cart,\n locale,\n });\n\n setChannelContext();\n\n setContext(contexts.SHOPPING_CART_CONTEXT, {\n ...shoppingCartContext,\n });\n\n pushEvent(events.INITIATE_CHECKOUT);\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl, createGuestCart } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nimport { ADD_PRODUCTS_TO_CART_MUTATION } from './graphql/AddProductsToCartMutation';\nimport { publishCartUpdateEvents, publishOpenCartEvent } from '@/cart/lib/acdl';\n\nexport const addProductsToCart = async (\n items: {\n sku: string;\n parentSku?: string;\n quantity: number;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n customFields?: Record<string, any>;\n }[]\n): Promise<CartModel | null> => {\n const cartId =\n state.cartId ||\n (await createGuestCart().then((id) => {\n return id;\n }));\n\n return fetchGraphQl(ADD_PRODUCTS_TO_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: items.map(\n ({\n sku,\n parentSku: parent_sku,\n quantity,\n optionsUIDs: selected_options,\n enteredOptions: entered_options,\n customFields,\n }) => ({\n sku,\n parent_sku,\n quantity,\n selected_options,\n entered_options,\n ...(customFields ? customFields : {}),\n })\n ),\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // transform cart\n const payload = transformCart(data.addProductsToCart.cart);\n\n // Get previous cart data before emitting events\n const previousCart = getPersistedCartData();\n const previousItems = previousCart?.items || [];\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n // emit add to cart event with affected items\n if (payload) {\n // Separate new items and updated items\n const newItems = payload.items.filter((item) => {\n return !previousItems.some((prev) => prev.sku === item.sku);\n });\n\n const updatedItems = payload.items.filter((item) => {\n const previousItem = previousItems.find(\n (prev) => prev.sku === item.sku\n );\n // Emit update event if quantity has changed\n return previousItem && item.quantity !== previousItem.quantity;\n });\n\n // Emit add event for new items\n if (newItems.length > 0) {\n events.emit('cart/product/added', newItems);\n }\n\n // Emit update event for existing items\n if (updatedItems.length > 0) {\n events.emit('cart/product/updated', updatedItems);\n }\n }\n\n // data collection\n if (payload) {\n const updatedItems = payload.items.filter((item) =>\n items.some(\n ({ sku }) => sku.toUpperCase() === item.topLevelSku.toUpperCase()\n )\n );\n\n // Check if cart was empty before adding items\n const wasCartEmpty =\n !previousCart || (previousCart.totalQuantity ?? 0) === 0;\n const hasItemsNow = (payload.totalQuantity ?? 0) > 0;\n\n if (wasCartEmpty && hasItemsNow) {\n // Publish open cart event when cart goes from empty to having items\n publishOpenCartEvent(payload, updatedItems, state.locale ?? 'en-US');\n } else {\n // Otherwise publish cart update events\n publishCartUpdateEvents(payload, updatedItems, state.locale ?? 'en-US');\n }\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CUSTOMER_ACCOUNT_FRAGMENT = /* GraphQL */ `\n fragment CUSTOMER_FRAGMENT on Customer {\n addresses {\n default_shipping\n country_code\n postcode\n region {\n region\n region_code\n region_id\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nimport { CUSTOMER_ACCOUNT_FRAGMENT } from '@/cart/api/graphql/CustomerAccountFragment';\n\nexport const GUEST_CART_QUERY = `\n query GUEST_CART_QUERY(\n $cartId: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n\n cart(cart_id: $cartId){\n ...CART_FRAGMENT\n }\n }\n\n ${CART_FRAGMENT}\n`;\n\nexport const CUSTOMER_CART_QUERY = `\n query CUSTOMER_CART_QUERY(\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n \n customer {\n ...CUSTOMER_FRAGMENT\n }\n\n cart: customerCart {\n ...CART_FRAGMENT\n }\n }\n\n ${CUSTOMER_ACCOUNT_FRAGMENT}\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\n\nimport { GUEST_CART_QUERY, CUSTOMER_CART_QUERY } from './graphql/CartQuery';\n\nexport const getCartData = async (): Promise<CartModel | null> => {\n const authenticated = state.authenticated;\n const cartId = state.cartId;\n\n // Customer Cart\n if (authenticated) {\n return fetchGraphQl(CUSTOMER_CART_QUERY, { method: 'POST' }).then(\n ({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const merged = { ...data.cart, ...data.customer };\n\n return transformCart(merged);\n }\n );\n }\n\n // Guest Cart\n if (!cartId) throw new Error('No cart ID found');\n\n return fetchGraphQl(GUEST_CART_QUERY, {\n method: 'POST',\n cache: 'no-cache',\n variables: { cartId },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformCart(data.cart);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const MERGE_CARTS_MUTATION = `\n mutation MERGE_CARTS_MUTATION(\n $guestCartId: String!, \n $customerCartId: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n mergeCarts(\n source_cart_id: $guestCartId,\n destination_cart_id: $customerCartId\n ) {\n ...CART_FRAGMENT \n }\n }\n\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { events } from '@adobe-commerce/event-bus';\nimport { state } from '@/cart/lib/state';\nimport { config, fetchGraphQl, getCartData, getStoreConfig } from '@/cart/api';\nimport { MERGE_CARTS_MUTATION } from './graphql/MergeCartsMutation';\nimport { CartModel } from '@/cart/data/models';\n\nexport const initializeCart = async (): Promise<CartModel | null> => {\n if (state.initializing) return null;\n\n state.initializing = true;\n\n // set config\n if (!state.config) {\n state.config = await getStoreConfig();\n }\n\n const payload = state.authenticated\n ? await getCustomerCartPayload()\n : await getGuestCartPayload();\n\n events.emit('cart/initialized', payload);\n events.emit('cart/data', payload);\n\n state.initializing = false;\n\n return payload;\n};\n\nexport async function getCustomerCartPayload() {\n const existingCartId = state.cartId;\n\n const cart = await getCartData();\n\n if (!cart) return null;\n\n // set cartid in the state\n state.cartId = cart.id;\n\n // If the existing cart is the same as the fetched cart, return the fetched cart\n if (!existingCartId || cart.id === existingCartId) return cart;\n\n // If the existing cart is not the same as the fetched cart, merge the carts\n return await fetchGraphQl(MERGE_CARTS_MUTATION, {\n variables: {\n guestCartId: existingCartId,\n customerCartId: cart.id,\n },\n })\n .then(() => {\n return getCartData();\n })\n .then((transformedCartData) => {\n const payload = {\n oldCartItems: cart.items,\n newCart: transformedCartData,\n };\n events.emit('cart/merged', payload);\n return transformedCartData;\n })\n .catch(() => {\n // gracefully handle merge error, continue with existing cart\n console.error('Could not merge carts');\n return cart;\n });\n}\n\nexport async function getGuestCartPayload() {\n // If guest cart is not enabled, return null\n if (config.getConfig().disableGuestCart === true) {\n return null;\n }\n\n // If there is not a cart id in the state, return null\n if (!state.cartId) {\n return null;\n }\n\n // If there is a cart id in the state, return the cart data\n try {\n return await getCartData();\n } catch (error) {\n console.error(error);\n return null;\n }\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const UPDATE_PRODUCTS_FROM_CART_MUTATION = `\n mutation UPDATE_PRODUCTS_FROM_CART_MUTATION(\n $cartId: String!, \n $cartItems: [CartItemUpdateInput!]!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n updateCartItems(\n input: {\n cart_id: $cartId\n cart_items: $cartItems\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n\n }\n }\n\n ${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\nimport { ADD_PRODUCTS_TO_CART_MUTATION } from '../addProductsToCart/graphql/AddProductsToCartMutation';\nimport { UPDATE_PRODUCTS_FROM_CART_MUTATION } from './graphql/UpdateProductsMutation';\n\ntype UpdateProductsFromCart = Array<{\n uid: string;\n quantity: number;\n sku?: string;\n parentSku?: string;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n giftOptions?: {\n gift_wrapping_id?: string | null;\n gift_message: {\n to: string;\n from: string;\n message: string;\n };\n };\n customFields?: Record<string, any>;\n}>;\n\ntype ItemError = {\n message: string;\n path?: string[];\n extensions?: {\n category: string;\n };\n};\n\n/**\n * Collects individual item errors from cart items response\n * @param cartItems - The cart items from the response\n * @param updatedItemUIDs - Array of UIDs of items that were updated\n * @returns Array of ItemError objects\n */\nconst collectCartItemErrors = (\n cartItems: Array<{\n uid: string;\n errors?: Array<{ message: string; code: string }>;\n }>,\n updatedItemUIDs: string[]\n): ItemError[] => {\n const itemErrors: ItemError[] = [];\n\n cartItems\n .filter(\n (item) => item.errors && updatedItemUIDs.some((uid) => uid === item.uid)\n )\n .forEach((item) => {\n item.errors?.forEach((error) => {\n itemErrors.push({\n message: error.message,\n path: [item.uid],\n extensions: {\n category: error.code,\n },\n });\n });\n });\n\n return itemErrors;\n};\n\n/**\n * Creates the arrays of cart items to be sent to the graphql mutations\n *\n * @param items\n * @param currentCartItems\n * @returns {\n * itemsToAdd: Array<{\n * sku: string;\n * parentSku: string;\n * quantity: number;\n * optionsUIDs: string[];\n * enteredOptions: { uid: string; value: string }[];\n * customFields: Record<string, any>;\n * }>\n * itemsToRemove: Array<string>\n * itemsToUpdate: Array<{\n * uid: string;\n * quantity: number;\n * customFields: Record<string, any>;\n * }>\n * }\n */\nconst getCartItems = (\n items: UpdateProductsFromCart,\n currentCartItems: Array<\n CartModel['items'][number] & { customFields?: Record<string, any> }\n >\n) => {\n const itemsToAdd: Array<{\n sku?: string;\n parentSku?: string;\n quantity: number;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n customFields?: Record<string, any>;\n }> = [];\n // Items to remove from the cart will be items that have optionUIDs and\n // their optionUIDs are not the same as their matching entry in the current cart item identified by the uid\n const itemsToRemove: Array<string> = [];\n const itemsToUpdate: Array<{\n uid: string;\n quantity: number;\n giftOptions?: {\n gift_wrapping_id?: string | null;\n gift_message: {\n to: string;\n from: string;\n message: string;\n };\n };\n customFields?: Record<string, any>;\n }> = [];\n\n items.forEach((item) => {\n // Check if the item exists in the cart\n const currentItem = currentCartItems.find(\n (cartItem) => cartItem.uid === item.uid\n );\n\n if (currentItem) {\n if (item.optionsUIDs) {\n const currentItemOptions = Object.values(\n currentItem?.selectedOptionsUIDs ?? {}\n );\n\n // Check if options are exactly the same as current item\n const hasSameOptions =\n item.optionsUIDs.every((optionUID) =>\n currentItemOptions.includes(optionUID)\n ) && item.optionsUIDs.length === currentItemOptions.length;\n\n if (hasSameOptions) {\n // Same item, same options: update quantity directly\n itemsToUpdate.push({\n uid: item.uid,\n quantity: item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n } else {\n // Different options: check if there's another item in cart with these new options\n const existingItemWithNewOptions = currentCartItems.find(\n (cartItem) => {\n const cartItemOptions = Object.values(\n cartItem?.selectedOptionsUIDs ?? {}\n );\n return (\n cartItem.uid !== item.uid && // Different item\n cartItem.sku === currentItem.sku && // Same SKU\n item.optionsUIDs!.every((optionUID) =>\n cartItemOptions.includes(optionUID)\n ) &&\n item.optionsUIDs!.length === cartItemOptions.length\n );\n }\n );\n\n if (existingItemWithNewOptions) {\n // Merge: Update existing item with combined quantity and remove current item\n itemsToUpdate.push({\n uid: existingItemWithNewOptions.uid,\n quantity: existingItemWithNewOptions.quantity + item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n itemsToRemove.push(item.uid);\n } else {\n // Add new item and remove old one\n const { sku, topLevelSku: parentSku } = currentItem;\n const { optionsUIDs, enteredOptions, quantity, customFields } =\n item;\n\n itemsToAdd.push({\n sku,\n parentSku,\n quantity,\n optionsUIDs,\n enteredOptions,\n customFields,\n });\n\n itemsToRemove.push(item.uid);\n }\n }\n } else if (item.customFields) {\n const { sku, topLevelSku: parentSku } = currentItem;\n const { optionsUIDs, enteredOptions, quantity, customFields } = item;\n\n itemsToAdd.push({\n sku,\n parentSku,\n quantity,\n optionsUIDs,\n enteredOptions,\n customFields,\n });\n itemsToRemove.push(item.uid);\n } else {\n itemsToUpdate.push({\n uid: item.uid,\n quantity: item.quantity,\n giftOptions: item.giftOptions,\n customFields: item.customFields,\n });\n }\n } else {\n throw Error(\n `Invalid Cart Item UID: No matching cart entry found for ${item.uid}`\n );\n }\n });\n\n return {\n itemsToAdd,\n itemsToRemove,\n itemsToUpdate,\n };\n};\n\nconst DELETE_ITEM_QUANTITY = 0;\n\nexport const updateProductsFromCart = async (\n items: UpdateProductsFromCart\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n const cart = getPersistedCartData();\n\n if (!cartId) {\n return Promise.reject(new Error('Cart ID is not set'));\n }\n\n if (!cart) {\n return Promise.reject(new Error('Cart is not set'));\n }\n\n const { itemsToAdd, itemsToRemove, itemsToUpdate } = getCartItems(\n items,\n cart.items\n );\n\n // Array of promises to be resolved\n let results: Array<Promise<CartModel | null>> = [];\n\n // If there are items with options and matching cart items, add the products to the cart and remove the old one.\n // Note: The SKU must be the incoming parent sku and not the current cart item sku.\n if (itemsToAdd.length > 0) {\n results.push(\n fetchGraphQl(ADD_PRODUCTS_TO_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: itemsToAdd.map(\n ({\n parentSku: sku,\n quantity,\n optionsUIDs: selected_options,\n enteredOptions: entered_options,\n customFields,\n }) => ({\n sku,\n quantity,\n selected_options,\n entered_options,\n ...(customFields ? customFields : {}),\n })\n ),\n },\n })\n .then(({ errors, data }) => {\n // Collect individual item errors from the response\n const updatedItemsErrors = collectCartItemErrors(\n data?.addProductsToCart?.cart?.itemsV2.items || [],\n items.map((item) => item.uid)\n );\n\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ...updatedItemsErrors,\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n if (itemsToRemove.length > 0) {\n // remove the old item\n return updateProductQuantities(\n cartId,\n itemsToRemove.map((uid) => ({\n uid,\n quantity: DELETE_ITEM_QUANTITY, //Delete Item\n }))\n ).catch((error) => {\n return Promise.reject(\n new Error(`Failed to update products in cart: ${error}`)\n );\n });\n }\n return Promise.resolve(transformCart(data?.addProductsToCart?.cart));\n })\n .then((payload) => {\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n // Publish cart update events\n publishCartUpdateEvents(payload!, items, state.locale ?? 'en-US');\n\n return Promise.resolve(payload);\n })\n .catch((error) => {\n return Promise.reject(\n new Error(`Failed to add products to cart: ${error}`)\n );\n })\n );\n }\n\n if (itemsToUpdate.length > 0) {\n results.push(\n updateProductQuantities(cartId, itemsToUpdate).catch((error) => {\n return Promise.reject(new Error(error));\n })\n );\n }\n\n // Return the last promise in the results array\n return Promise.all(results).then((results) => results[results.length - 1]);\n};\n\nconst updateProductQuantities = async (\n cartId: string,\n items: UpdateProductsFromCart\n): Promise<CartModel | null> => {\n return fetchGraphQl(UPDATE_PRODUCTS_FROM_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: items.map(({ uid, quantity, giftOptions }) => ({\n cart_item_uid: uid,\n quantity,\n ...giftOptions,\n })),\n },\n }).then(({ errors, data }) => {\n // Collect individual item errors from the response using the new function\n const updatedItemsErrors = collectCartItemErrors(\n data?.updateCartItems?.cart?.itemsV2.items || [],\n items.map((item) => item.uid)\n );\n\n // handle errors\n const _errors = [\n ...(data?.updateCartItems?.user_errors ?? []),\n ...(errors ?? []),\n ...updatedItemsErrors,\n ];\n\n // transform cart\n const payload =\n data?.updateCartItems && transformCart(data.updateCartItems.cart);\n\n // Emit data event\n if (payload) {\n events.emit('cart/data', payload);\n }\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // No errors, emit updated event\n events.emit('cart/updated', payload);\n\n // emit product updated events\n if (payload) {\n const updatedItems = payload.items.filter(\n (item: CartModel['items'][number]) =>\n items.some((updateItem) => updateItem.uid === item.uid)\n );\n\n events.emit('cart/product/updated', updatedItems);\n }\n\n // data collection\n if (payload) {\n // Publish cart update events\n publishCartUpdateEvents(payload, items, state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\n\nexport const resetCart = (): Promise<CartModel | null> => {\n state.cartId = null;\n state.authenticated = false;\n\n return Promise.resolve(null);\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CREATE_GUEST_CART_MUTATION = `\n mutation CREATE_GUEST_CART_MUTATION {\n createGuestCart {\n cart {\n id\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { config, fetchGraphQl } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\n\nimport { CREATE_GUEST_CART_MUTATION } from './graphql/CreateCartMutation';\n\nexport const createGuestCart = async () => {\n const { disableGuestCart } = config.getConfig();\n\n // If guest cart is disabled, throw an error\n if (disableGuestCart) {\n throw new Error('Guest cart is disabled');\n }\n\n // Return new empty cart id\n return await fetchGraphQl(CREATE_GUEST_CART_MUTATION).then(({ data }) => {\n const cartId = data.createGuestCart.cart.id;\n\n // Set cart id in state\n state.cartId = cartId;\n\n return cartId;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const STORE_CONFIG_QUERY = `\nquery STORE_CONFIG_QUERY {\n storeConfig {\n minicart_display\n minicart_max_items\n cart_expires_in_days\n cart_summary_display_quantity\n max_items_in_order_summary\n default_country\n category_fixed_product_tax_display_setting\n product_fixed_product_tax_display_setting\n sales_fixed_product_tax_display_setting\n shopping_cart_display_full_summary\n shopping_cart_display_grand_total\n shopping_cart_display_price\n shopping_cart_display_shipping\n shopping_cart_display_subtotal\n shopping_cart_display_tax_gift_wrapping\n shopping_cart_display_zero_tax\n configurable_thumbnail_source\n allow_gift_wrapping_on_order\n allow_gift_wrapping_on_order_items\n allow_order\n allow_items\n allow_gift_receipt\n allow_printed_card\n printed_card_priceV2 {\n currency\n value\n }\n cart_gift_wrapping\n cart_printed_card\n }\n}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { StoreConfigModel } from '@/cart/data/models';\nimport { transformStoreConfig } from '@/cart/data/transforms';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\n\nimport { STORE_CONFIG_QUERY } from './graphql/StoreConfigQuery';\n\nexport const getStoreConfig = async (): Promise<StoreConfigModel | null> => {\n return fetchGraphQl(STORE_CONFIG_QUERY, {\n method: 'GET',\n cache: 'force-cache',\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return transformStoreConfig(data.storeConfig);\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { PartialAddress, ShippingMethod } from '@/cart/data/models';\n\nexport const transformPartialAddress = (data: any): PartialAddress => {\n return {\n countryCode: data.country_code || 'US',\n postCode: data.postcode || '',\n region: data.region?.region || '',\n regionId: data.region?.id,\n };\n};\n\nexport const transformShippingMethod = (data: any): ShippingMethod | null => {\n if (!data) return null;\n\n return {\n carrierCode: data.carrier_code || '',\n methodCode: data.method_code || '',\n amount: data.amount,\n ...(data.price_excl_tax && {\n amountExclTax: {\n value: data.price_excl_tax.value,\n currency: data.price_excl_tax.currency,\n },\n }),\n ...(data.price_incl_tax && {\n amountInclTax: {\n value: data.price_incl_tax.value,\n currency: data.price_incl_tax.currency,\n },\n }),\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const COUNTRIES_QUERY = `\nquery COUNTRIES_QUERY {\n countries {\n label: full_name_locale\n id\n }\n storeConfig {\n defaultCountry: default_country\n }\n}\n`;\n\nexport const REGIONS_QUERY = `\nquery REGIONS_QUERY($id: String) {\n country(id: $id) {\n available_regions {\n code\n\t\t\tname\n }\n }\n}\n`;\n\nexport type CountryData = {\n label: string;\n id: string;\n available_regions?: Array<{\n code: string;\n name: string;\n }>;\n isDefaultCountry?: boolean;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const ESTIMATE_SHIPPING_METHODS_MUTATION = `\n mutation ESTIMATE_SHIPPING_METHODS_MUTATION(\n $cartId: String!\n $address: EstimateAddressInput!\n ) {\n estimateShippingMethods(\n input: {\n cart_id: $cartId\n address: $address\n }\n ) {\n amount {\n currency\n value\n }\n carrier_code\n method_code\n error_message\n price_excl_tax {\n currency\n value\n }\n price_incl_tax {\n currency\n value\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\n\nimport {\n transformPartialAddress,\n transformShippingMethod,\n} from '@/cart/data/transforms/transform-shipping';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n COUNTRIES_QUERY,\n CountryData,\n REGIONS_QUERY,\n} from './graphql/countriesAndRegionsQueries';\nimport { ESTIMATE_SHIPPING_METHODS_MUTATION } from './graphql/estimateShippingMethodsMutation';\n\nexport interface EstimateAddressInput {\n countryCode: string;\n postcode?: string;\n region?: {\n region?: string;\n code?: string;\n id?: number;\n };\n}\n\nexport const getEstimateShipping = async (\n address: EstimateAddressInput\n): Promise<any | null> => {\n const cartId = state.cartId;\n\n if (!cartId) throw new Error('No cart ID found');\n if (!address) throw new Error('No address parameter found');\n\n const { countryCode, postcode, region } = address;\n\n const addressInput = {\n country_code: countryCode || 'US',\n postcode: postcode || '',\n region: {\n region: region?.region || '',\n region_id: region?.id,\n },\n };\n\n return fetchGraphQl(ESTIMATE_SHIPPING_METHODS_MUTATION, {\n variables: {\n cartId,\n address: addressInput,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const estimateShippingMethods: Array<any> = data.estimateShippingMethods;\n\n const selectedMethod =\n estimateShippingMethods.find((method) => !method.error_message) || null;\n\n events.emit('shipping/estimate', {\n address: transformPartialAddress(addressInput),\n shippingMethod: transformShippingMethod(selectedMethod),\n });\n\n return selectedMethod;\n });\n};\n\nexport const getCountries = async (): Promise<[CountryData]> => {\n return fetchGraphQl(COUNTRIES_QUERY, { method: 'GET' }).then(\n ({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const sortedCountries =\n data?.countries?.sort((a: any, b: any) =>\n a.label.localeCompare(b.label)\n ) || [];\n\n const defaultCountry = data?.storeConfig?.defaultCountry || 'US';\n\n // Set the default country property\n sortedCountries.forEach((country: any) => {\n country.isDefaultCountry = country.id === defaultCountry;\n });\n\n return sortedCountries;\n }\n );\n};\n\nexport const getRegions = async (\n countryId: string\n): Promise<Array<{ code: string; name: string }>> => {\n return fetchGraphQl(REGIONS_QUERY, {\n method: 'GET',\n variables: {\n id: countryId,\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n return data?.country?.available_regions || [];\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const GET_ESTIMATED_TOTALS_MUTATION = `\n mutation GET_ESTIMATED_TOTALS_MUTATION(\n $cartId: String!\n $address: EstimateAddressInput!,\n $shipping_method: ShippingMethodInput,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n estimateTotals(\n input: {\n cart_id: $cartId\n address: $address\n shipping_method: $shipping_method\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n }\n\n ${CART_FRAGMENT}\n `;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\n\nimport { GET_ESTIMATED_TOTALS_MUTATION } from './graphql/GetEstimatedTotalsMutation';\n\nexport interface EstimateAddressShippingInput {\n countryCode: string;\n postcode?: string;\n region?: {\n region?: string;\n id?: number;\n };\n shipping_method?: {\n carrier_code?: string;\n method_code?: string;\n };\n}\n\nexport const getEstimatedTotals = async (\n address: EstimateAddressShippingInput\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) throw new Error('No cart ID found');\n if (!address) throw new Error('No address parameter found');\n\n const { countryCode, postcode, region } = address;\n const carrier_code = address.shipping_method?.carrier_code;\n const method_code = address.shipping_method?.method_code;\n\n return fetchGraphQl(GET_ESTIMATED_TOTALS_MUTATION, {\n variables: {\n cartId,\n address: {\n country_code: countryCode || 'US',\n postcode,\n region:\n region?.id !== undefined\n ? { region_id: region.id }\n : { region: region?.region ?? '' },\n },\n shipping_method: {\n carrier_code: carrier_code || '',\n method_code: method_code || '',\n },\n },\n }).then(({ errors, data }) => {\n if (errors) return handleFetchError(errors);\n\n const estimatedData: { cart: any } = data.estimateTotals;\n\n if (estimatedData) {\n const payload = transformCart(estimatedData.cart);\n\n return payload;\n }\n\n return null;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { getCustomerCartPayload, getGuestCartPayload } from '@/cart/api';\nimport { events } from '@adobe-commerce/event-bus';\n\nexport const refreshCart = async (): Promise<CartModel | null> => {\n const payload = state.authenticated\n ? await getCustomerCartPayload()\n : await getGuestCartPayload();\n\n events.emit('cart/data', payload);\n\n return payload;\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const APPLY_COUPONS_TO_CART_MUTATION = `\nmutation APPLY_COUPONS_TO_CART_MUTATION(\n $cartId: String!, \n $couponCodes: [String!]!, \n $type: ApplyCouponsStrategy!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n applyCouponsToCart(\n input: {\n cart_id: $cartId\n coupon_codes: $couponCodes \n type: $type\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\n\nimport { APPLY_COUPONS_TO_CART_MUTATION } from './graphql/ApplyCouponsToCartMutation';\n\nexport interface ApplyCouponsToCartInput {\n type: ApplyCouponsStrategy;\n}\n\nexport enum ApplyCouponsStrategy {\n APPEND = 'APPEND',\n REPLACE = 'REPLACE',\n}\n\nexport const applyCouponsToCart = async (\n couponCodes: string[],\n type: ApplyCouponsStrategy\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(APPLY_COUPONS_TO_CART_MUTATION, {\n variables: {\n cartId,\n couponCodes,\n type,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.applyCouponsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // transform cart\n const payload = transformCart(data.applyCouponsToCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n return payload;\n });\n};\n","import { getPersistedCartData } from \"@/cart/lib/persisted-data\";\nimport { publishShoppingCartViewEvent as publishCartView } from \"@/cart/lib/acdl\";\nimport { state } from \"@/cart/lib/state\";\n\nexport const publishShoppingCartViewEvent = () => { \n const locale = state.locale ?? 'en-US';\n const cartData = getPersistedCartData();\n\n if (!cartData) {\n return;\n }\n\n // Publish the event\n publishCartView(cartData, locale);\n}\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const APPLY_GIFT_CARD_ON_CART_MUTATION = `\n mutation APPLY_GIFT_CARD_ON_CART_MUTATION(\n $cartId: String!, \n $giftCardCode: String!,\n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n applyGiftCardToCart(\n input: {\n cart_id: $cartId\n gift_card_code: $giftCardCode\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { APPLY_GIFT_CARD_ON_CART_MUTATION } from './graphql/ApplyGiftCardToCartMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\n\nexport const applyGiftCardToCart = async (\n giftCardCode: string\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(APPLY_GIFT_CARD_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftCardCode,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.applyGiftCardToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.applyGiftCardToCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const REMOVE_GIFT_CARD_ON_CART_MUTATION = `\n mutation REMOVE_GIFT_CARD_ON_CART_MUTATION(\n $cartId: String!, \n $giftCardCode: String!, \n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n removeGiftCardFromCart(\n input: {\n cart_id: $cartId\n gift_card_code: $giftCardCode\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { REMOVE_GIFT_CARD_ON_CART_MUTATION } from './graphql/RemoveGiftCardFromCartMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\n\nexport const removeGiftCardFromCart = async (\n giftCardCode: string\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n return fetchGraphQl(REMOVE_GIFT_CARD_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftCardCode,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.removeGiftCardFromCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { CART_FRAGMENT } from '@/cart/api/graphql/CartFragment';\n\nexport const SET_GIFT_OPTIONS_ON_CART_MUTATION = `\n mutation SET_GIFT_OPTIONS_ON_CART_MUTATION(\n $cartId: String!, \n $giftMessage: GiftMessageInput, \n $giftWrappingId: ID, \n $giftReceiptIncluded: Boolean!, \n $printedCardIncluded: Boolean!, \n $pageSize: Int! = 100,\n $currentPage: Int! = 1,\n $itemsSortInput: QuoteItemsSortInput! = {field: CREATED_AT, order: DESC}\n ) {\n setGiftOptionsOnCart(\n input: {\n cart_id: $cartId\n gift_message: $giftMessage\n gift_wrapping_id: $giftWrappingId\n gift_receipt_included: $giftReceiptIncluded\n printed_card_included: $printedCardIncluded\n }\n ) {\n cart {\n ...CART_FRAGMENT\n }\n }\n}\n${CART_FRAGMENT}\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { state } from '@/cart/lib/state';\nimport { fetchGraphQl } from '@/cart/api';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { SET_GIFT_OPTIONS_ON_CART_MUTATION } from './graphql/UpdateGiftOptionsMutation';\nimport { publishCartUpdateEvents } from '@/cart/lib/acdl';\nimport { GiftFormDataType } from '@/cart/types';\n\nexport const setGiftOptionsOnCart = async (\n giftForm: GiftFormDataType\n): Promise<CartModel | null> => {\n const cartId = state.cartId;\n\n if (!cartId) {\n throw Error('Cart ID is not set');\n }\n\n const {\n recipientName,\n senderName,\n message,\n giftReceiptIncluded,\n printedCardIncluded,\n giftWrappingId,\n isGiftWrappingSelected,\n } = giftForm;\n\n return fetchGraphQl(SET_GIFT_OPTIONS_ON_CART_MUTATION, {\n variables: {\n cartId,\n giftMessage: {\n from: senderName,\n to: recipientName,\n message,\n },\n giftWrappingId: isGiftWrappingSelected ? giftWrappingId : null,\n giftReceiptIncluded,\n printedCardIncluded,\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n const payload = transformCart(data.setGiftOptionsOnCart.cart);\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n if (payload) {\n publishCartUpdateEvents(payload, [], state.locale ?? 'en-US');\n }\n\n return payload;\n });\n};\n"],"names":["getCookie","cookieName","cookies","i","cookie","AUTHENTICATED_CART_KEY","setPersistedCartData","data","getPersistedCartData","setEstimatedShippingLocation","setAuthenticatedCart","isAuthenticated","getAuthenticatedCart","_state","state","target","key","value","expiresInDays","_a","expires","initialize","Initializer","_config","config","initializeCart","events","authenticated","locale","resetCart","payload","refreshCart","setEndpoint","setFetchGraphQlHeader","removeFetchGraphQlHeader","setFetchGraphQlHeaders","fetchGraphQl","getConfig","FetchGraphQL","transformCart","model","giftCard","giftCartState","currentBalanceValue","appliedBalanceValue","_b","currency","_c","transformQuantity","transformGiftOptions","wrapItem","_d","_e","_f","transformErrors","transformItems","_g","calculateTotal","_h","_i","_j","_k","_l","_m","transformTotalPriceModifiers","transformAddresses","transformOutOfStockItems","transformFullyOutOfStockItems","merge","_p","_o","_n","giftOptions","acc","item","getImage","getRegularPrice","findApplicablePriceTier","priceTiers","quantity","a","b","tier","getDiscounted","isConfigurable","priceRange","applicableTier","transformGiftMessage","transformWrappingPrice","transformGiftOptionsCode","category","priceTier","transformSKU","transformLinks","discount","transformBundleOptions","extractBundleOptionUIDs","transformSelectedOptions","transformCustomizableOptions","transformStockLevel","transformDiscountPercentage","transformDiscountAmount","transformProductAttributes","result","error","bundle","option","bundleOptions","allUIDs","valueUIDs","selected","selectedOptions","selectedOptionsUIDs","transformedOptions","previous","current","parser","fileAnchorElementHtml","anchorText","links","link","address","percent_off","amount_off","attribute","transformedCode","word","transformStoreConfig","transformTaxDisplaySetting","taxDisplaySetting","handleFetchError","errors","unauthorized","extensions","missingCart","path","errorMessage","e","invalidCart","ADD_PRODUCTS_TO_CART_MUTATION","CART_FRAGMENT","transformShoppingCart","params","cart","items","formatCurrency","transformSpecialPrice","optionLabel","valueLabel","index","options","formattedLocale","contexts","getAdobeDataLayer","setContext","name","adobeDataLayer","pushEvent","event","additionalContext","acdl","getChannelContext","setChannelContext","publishOpenCartEvent","addedItems","shoppingCartContext","shoppingCartItems","publishItemsUpdatedEvent","publishShoppingCartViewEvent","updatedItems","changedProductsContext","publishCartUpdateEvents","newShoppingCartContext","currentItems","currentState","previousItems","updatedItem","previousItem","currentItem","publishInitiateCheckoutEvent","addProductsToCart","cartId","createGuestCart","id","sku","parent_sku","selected_options","entered_options","customFields","_errors","previousCart","newItems","prev","wasCartEmpty","hasItemsNow","CUSTOMER_ACCOUNT_FRAGMENT","GUEST_CART_QUERY","CUSTOMER_CART_QUERY","getCartData","merged","MERGE_CARTS_MUTATION","getStoreConfig","getCustomerCartPayload","getGuestCartPayload","existingCartId","transformedCartData","UPDATE_PRODUCTS_FROM_CART_MUTATION","collectCartItemErrors","cartItems","updatedItemUIDs","itemErrors","uid","getCartItems","currentCartItems","itemsToAdd","itemsToRemove","itemsToUpdate","cartItem","currentItemOptions","optionUID","existingItemWithNewOptions","cartItemOptions","parentSku","optionsUIDs","enteredOptions","DELETE_ITEM_QUANTITY","updateProductsFromCart","results","updatedItemsErrors","updateProductQuantities","updateItem","CREATE_GUEST_CART_MUTATION","disableGuestCart","STORE_CONFIG_QUERY","transformPartialAddress","transformShippingMethod","COUNTRIES_QUERY","REGIONS_QUERY","ESTIMATE_SHIPPING_METHODS_MUTATION","getEstimateShipping","countryCode","postcode","region","addressInput","selectedMethod","method","getCountries","sortedCountries","defaultCountry","country","getRegions","countryId","GET_ESTIMATED_TOTALS_MUTATION","getEstimatedTotals","carrier_code","method_code","estimatedData","APPLY_COUPONS_TO_CART_MUTATION","ApplyCouponsStrategy","applyCouponsToCart","couponCodes","type","cartData","publishCartView","APPLY_GIFT_CARD_ON_CART_MUTATION","applyGiftCardToCart","giftCardCode","REMOVE_GIFT_CARD_ON_CART_MUTATION","removeGiftCardFromCart","SET_GIFT_OPTIONS_ON_CART_MUTATION","setGiftOptionsOnCart","giftForm","recipientName","senderName","message","giftReceiptIncluded","printedCardIncluded","giftWrappingId","isGiftWrappingSelected"],"mappings":"qOAiBO,SAASA,GAAUC,EAAoB,CAE5C,MAAMC,EAAU,SAAS,OAAO,MAAM,GAAG,EAGzC,QAASC,EAAI,EAAGA,EAAID,EAAQ,OAAQC,IAAK,CACvC,MAAMC,EAASF,EAAQC,CAAC,EAAE,KAAK,EAG/B,GAAIC,EAAO,QAAQ,GAAGH,CAAU,GAAG,IAAM,EAEvC,OAAOG,EAAO,UAAUH,EAAW,OAAS,CAAC,CAC/C,CAIK,OAAA,IACT,CCfA,MAAMI,EAAyB,oCAExB,SAASC,GAAqBC,EAAwB,CACvDA,EACF,eAAe,QAAQ,2BAA4B,KAAK,UAAUA,CAAI,CAAC,EAEvE,eAAe,WAAW,0BAA0B,CAExD,CAEO,SAASC,GAAyC,CACjD,MAAAD,EAAO,eAAe,QAAQ,0BAA0B,EAE9D,OAAIA,EAAa,KAAK,MAAMA,CAAI,EAEzB,IACT,CAEO,SAASE,GACdF,EAGA,CACIA,EACa,eAAA,QACb,+BACA,KAAK,UAAUA,CAAI,CACrB,EAEA,eAAe,WAAW,8BAA8B,CAE5D,CAYO,SAASG,GAAqBC,EAA0B,CAC7DA,EACI,aAAa,QAAQN,EAAwB,MAAM,EACnD,aAAa,WAAWA,CAAsB,CACpD,CAEO,SAASO,IAAgC,CACvC,OAAA,aAAa,QAAQP,CAAsB,IAAM,MAC1D,CCrBA,MAAMQ,GAEG,CACL,OAAQ,KACR,cAHsBD,GAAqB,CAI7C,EAIWE,EAAQ,IAAI,MAAMD,GAAQ,CACrC,IAAIE,EAAQC,EAAKC,EAAO,OAItB,GAFAF,EAAOC,CAAG,EAAIC,EAEVD,IAAQ,SAAU,CAEhB,GAAAC,IAAUH,EAAM,OAAe,MAAA,GAEnC,GAAIG,IAAU,KAEZ,gBAAS,OAAS,wEACX,GAIH,MAAAC,GAAgBC,EAAAL,EAAM,SAAN,YAAAK,EAAc,kBAE/BD,GACK,QAAA,KACN,4EACF,EAII,MAAAE,MAAc,KACpBA,EAAQ,QAAQA,EAAQ,QAAQ,GAAKF,GAAiB,GAAG,EAGzD,SAAS,OAAS,yBAAyBD,CAAK,aAAaG,EAAQ,YAAa,CAAA,UAAA,CAGpF,OAAIJ,IAAQ,iBACVN,GAAqBO,CAAK,EAGrB,EACT,EACA,IAAIF,EAAQC,EAAK,CACf,OAAIA,IAAQ,SAEHhB,GAAU,uBAAuB,EAGnCe,EAAOC,CAAkB,CAAA,CAEpC,CAAC,ECtEYK,EAAa,IAAIC,GAAyB,CACrD,KAAM,MAAOC,GAAY,CACvB,MAAMC,EAAS,CAAE,iBAAkB,GAAO,GAAGD,CAAQ,EAG1CF,EAAA,OAAO,UAAUG,CAAM,EAEnBC,IAAE,MAAM,QAAQ,KAAK,CACtC,EAEA,UAAW,IAAM,CACfC,EAAO,GACL,gBACCC,GAAkB,CACbb,EAAM,eAAiB,CAACa,EAEnBD,EAAA,KAAK,aAAc,MAAS,EAG5BC,GAAiB,CAACb,EAAM,gBAC/BA,EAAM,cAAgBa,EACPF,IAAE,MAAM,QAAQ,KAAK,EAExC,EACA,CAAE,MAAO,EAAK,CAChB,EAEAC,EAAO,GAAG,SAAU,MAAOE,GAAW,CAChCA,IAAWd,EAAM,SACnBA,EAAM,OAASc,EACAH,IAAE,MAAM,QAAQ,KAAK,EACtC,CACD,EAEDC,EAAO,GAAG,aAAc,IAAM,CAClBG,KAAE,MAAM,QAAQ,KAAK,EACxBH,EAAA,KAAK,YAAa,IAAI,CAAA,CAC9B,EAEDA,EAAO,GAAG,YAAcI,GAAY,CAClCxB,GAAqBwB,CAAO,CAAA,CAC7B,EAEDJ,EAAO,GAAG,mBAAqBI,GAAY,CACrC,CAACA,IAAWA,GAAA,YAAAA,EAAS,QAAS,SAEtBC,IAAE,MAAM,QAAQ,KAAK,CAAA,CAClC,EAEDL,EAAO,GAAG,wBAAyB,IAAM,CAC3BK,IAAE,MAAM,QAAQ,KAAK,CAClC,CAAA,CAAA,CAEL,CAAC,EAEYP,EAASH,EAAW,OCtEpB,CACX,YAAAW,GACA,sBAAAC,GACA,yBAAAC,GACA,uBAAAC,GACA,aAAAC,EACA,UAAAC,EACF,EAAI,IAAIC,GAAa,EAAE,WAAW,ECJ3B,SAASC,EAAchC,EAA6B,qCACrD,GAAA,CAACA,EAAa,OAAA,KAElB,MAAMiC,EAAQ,CACZ,mBACErB,EAAAZ,GAAA,YAAAA,EAAM,qBAAN,YAAAY,EAA0B,IAAKsB,GAAkB,WAC/C,MAAMC,EAAgB,CACpB,KAAMD,EAAS,MAAQ,GACvB,eAAgB,CACd,MAAOA,EAAS,gBAAgB,OAAS,EACzC,SAAUA,EAAS,gBAAgB,UAAY,KACjD,EACA,eAAgB,CACd,MAAOA,EAAS,gBAAgB,OAAS,EACzC,SAAUA,EAAS,gBAAgB,UAAY,KACjD,EACA,eAAgBA,EAAS,iBAAmB,EAC9C,EAEME,GAAsBxB,EAAAuB,GAAA,YAAAA,EAAe,iBAAf,YAAAvB,EAA+B,MACrDyB,GAAsBC,EAAAH,GAAA,YAAAA,EAAe,iBAAf,YAAAG,EAA+B,MACrDC,GAAWC,EAAAL,GAAA,YAAAA,EAAe,iBAAf,YAAAK,EAA+B,SAK1C9B,GAFJ0B,EAAsBC,EAAsB,EAG1CD,EAAsBC,EACtB,EAEG,MAAA,CACL,GAAGF,EACH,gBAAiB,CAAE,MAAAzB,GAAO,SAAA6B,CAAS,CACrC,CACD,KAAK,CAAC,EACT,GAAIvC,EAAK,GACT,cAAeyC,GAAkBzC,CAAI,EACrC,iBAAkBA,EAAK,QAAQ,MAAM,OACrC,iBAAkB0C,IAAqBJ,EAAAtC,GAAA,YAAAA,EAAM,SAAN,YAAAsC,EAAc,YAAY,EACjE,qBAAqBtC,GAAA,YAAAA,EAAM,wBAAyB,GACpD,qBAAqBA,GAAA,YAAAA,EAAM,wBAAyB,GACpD,mBACEwC,EAAAxC,GAAA,YAAAA,EAAM,2BAAN,YAAAwC,EAAgC,IAAKG,GAAkB,eAC9C,MAAA,CACL,OAAQA,EAAS,QAAU,GAC3B,IAAKA,EAAS,IACd,WAAU/B,EAAAZ,GAAA,YAAAA,EAAM,gBAAN,YAAAY,EAAqB,OAAQ+B,EAAS,IAChD,MAAO,CACL,MAAKL,EAAAK,GAAA,YAAAA,EAAU,QAAV,YAAAL,EAAiB,MAAO,GAC7B,QAAOE,EAAAG,EAAS,QAAT,YAAAH,EAAgB,QAAS,EAClC,EACA,MAAO,CACL,WAAUI,EAAAD,GAAA,YAAAA,EAAU,QAAV,YAAAC,EAAiB,WAAY,MACvC,QAAOC,EAAAF,GAAA,YAAAA,EAAU,QAAV,YAAAE,EAAiB,QAAS,CAAA,CAErC,CACD,KAAK,CAAC,EACT,YAAa,CACX,aAAYD,EAAA5C,GAAA,YAAAA,EAAM,eAAN,YAAA4C,EAAoB,OAAQ,GACxC,gBAAeC,EAAA7C,GAAA,YAAAA,EAAM,eAAN,YAAA6C,EAAoB,KAAM,GACzC,UAASC,EAAA9C,GAAA,YAAAA,EAAM,eAAN,YAAA8C,EAAoB,UAAW,EAC1C,EACA,OAAQC,GAAgB/C,GAAA,YAAAA,EAAM,OAAO,EACrC,MAAOgD,EAAehD,GAAA,YAAAA,EAAM,OAAO,EACnC,iBAAkBgD,EAAehD,GAAA,YAAAA,EAAM,OAAO,EAAE,MAC9C,IACAiD,EAAA1C,EAAM,SAAN,YAAA0C,EAAc,0BAA2B,EAC3C,EACA,MAAO,CACL,aAAc,CACZ,MAAOjD,EAAK,OAAO,YAAY,MAC/B,SAAUA,EAAK,OAAO,YAAY,QACpC,EACA,aAAc,CACZ,MAAOA,EAAK,OAAO,0BAA0B,MAC7C,SAAUA,EAAK,OAAO,0BAA0B,QAAA,CAEpD,EACA,SAAUkD,EACRlD,EAAK,OAAO,UACZA,EAAK,OAAO,YAAY,QAC1B,EACA,SAAU,CACR,aAAc,CACZ,OAAOmD,EAAAnD,EAAK,OAAO,yBAAZ,YAAAmD,EAAoC,MAC3C,UAAUC,EAAApD,EAAK,OAAO,yBAAZ,YAAAoD,EAAoC,QAChD,EACA,aAAc,CACZ,OAAOC,EAAArD,EAAK,OAAO,yBAAZ,YAAAqD,EAAoC,MAC3C,UAAUC,EAAAtD,EAAK,OAAO,yBAAZ,YAAAsD,EAAoC,QAChD,EACA,sBAAuB,CACrB,OAAOC,EAAAvD,EAAK,OAAO,uCAAZ,YAAAuD,EAAkD,MACzD,UAAUC,EAAAxD,EAAK,OAAO,uCAAZ,YAAAwD,EAAkD,QAAA,CAEhE,EACA,aAAcC,EAA6BzD,EAAK,OAAO,aAAa,EACpE,SAAUkD,EACRlD,EAAK,OAAO,cACZA,EAAK,OAAO,YAAY,QAC1B,EACA,iBAAkByD,EAA6BzD,EAAK,OAAO,SAAS,EACpE,UAAWA,EAAK,WAChB,UAAW,CACT,SAAUA,EAAK,oBAAsB0D,GAAmB1D,CAAI,CAC9D,EACA,YAAa,CAACO,EAAM,cACpB,mBAAoBoD,GAAyB3D,CAAI,EACjD,wBAAyB4D,GAA8B5D,CAAI,EAC3D,eAAgBA,EAAK,eACvB,EAGO,OAAA6D,GACL5B,GACA6B,GAAAC,GAAAC,EAAA/C,EAAO,UAAU,EAAE,SAAnB,YAAA+C,EAA2B,YAA3B,YAAAD,EAAsC,cAAtC,YAAAD,EAAA,KAAAC,EAAoD/D,EACtD,CACF,CAEA,SAAS0C,GAAqBuB,EAAkB,6BACvC,MAAA,CACL,qBAAsB,CACpB,QAAOrD,EAAAqD,GAAA,YAAAA,EAAa,0BAAb,YAAArD,EAAsC,QAAS,EACtD,WAAU0B,EAAA2B,GAAA,YAAAA,EAAa,0BAAb,YAAA3B,EAAsC,WAAY,KAC9D,EACA,4BAA6B,CAC3B,QAAOE,EAAAyB,GAAA,YAAAA,EAAa,mCAAb,YAAAzB,EAA+C,QAAS,EAC/D,WACEI,EAAAqB,GAAA,YAAAA,EAAa,mCAAb,YAAArB,EAA+C,WAAY,KAC/D,EACA,qBAAsB,CACpB,QAAOC,EAAAoB,GAAA,YAAAA,EAAa,0BAAb,YAAApB,EAAsC,QAAS,EACtD,WAAUC,EAAAmB,GAAA,YAAAA,EAAa,0BAAb,YAAAnB,EAAsC,WAAY,KAC9D,EACA,4BAA6B,CAC3B,QAAOG,EAAAgB,GAAA,YAAAA,EAAa,mCAAb,YAAAhB,EAA+C,QAAS,EAC/D,WACEE,EAAAc,GAAA,YAAAA,EAAa,mCAAb,YAAAd,EAA+C,WAAY,KAC/D,EACA,YAAa,CACX,QAAOC,EAAAa,GAAA,YAAAA,EAAa,eAAb,YAAAb,EAA2B,QAAS,EAC3C,WAAUC,EAAAY,GAAA,YAAAA,EAAa,eAAb,YAAAZ,EAA2B,WAAY,KACnD,EACA,mBAAoB,CAClB,QAAOC,EAAAW,GAAA,YAAAA,EAAa,wBAAb,YAAAX,EAAoC,QAAS,EACpD,WAAUC,EAAAU,GAAA,YAAAA,EAAa,wBAAb,YAAAV,EAAoC,WAAY,KAAA,CAE9D,CACF,CAGA,SAASL,EAAelD,EAAauC,EAAkB,CACrD,OAAKvC,GAAA,MAAAA,EAAM,OAMJA,EAAK,OACV,CAACkE,EAAUC,KACF,CACL,MAAOD,EAAI,MAAQC,EAAK,OAAO,MAC/B,SAAUA,EAAK,OAAO,QACxB,GAEF,CAAE,MAAO,EAAG,SAAA5B,CAAS,CACvB,EAbS,CACL,MAAO,EACP,SAAAA,CACF,CAWJ,CAEA,SAAS6B,GAASnD,EAA6CkD,EAAW,aACjE,MAAA,CAEL,IAAKlD,GAAAA,MAAAA,EAAQ,+BACTkD,EAAK,QAAQ,UAAU,MACvB7B,GAAA1B,EAAAuD,EAAK,qBAAL,YAAAvD,EAAyB,YAAzB,YAAA0B,EAAoC,MAAO6B,EAAK,QAAQ,UAAU,IACtE,IAAKlD,GAAAA,MAAAA,EAAQ,+BACTkD,EAAK,QAAQ,UAAU,QACvBvB,GAAAJ,EAAA2B,EAAK,qBAAL,YAAA3B,EAAyB,YAAzB,YAAAI,EAAoC,QACpCuB,EAAK,QAAQ,UAAU,KAC7B,CACF,CAEA,SAASE,GAAgBF,EAAW,aAC9B,OAAAA,EAAK,aAAe,uBACf,CACL,OACE7B,GAAA1B,EAAAuD,EAAK,qBAAL,YAAAvD,EAAyB,cAAzB,YAAA0B,EAAsC,cAAc,cAAc,MACpE,UACEM,GAAAJ,EAAA2B,EAAK,qBAAL,YAAA3B,EAAyB,cAAzB,YAAAI,EAAsC,cAAc,cACjD,QACP,EAEEuB,EAAK,aAAe,mBACf,CACL,MAAOA,EAAK,OAAO,MAAM,MACzB,SAAUA,EAAK,OAAO,MAAM,QAC9B,EAEK,CACL,MAAOA,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,QAC5C,CACF,CAQA,SAASG,GAAwBC,EAAmBC,EAAkB,CAChE,OAACD,GAAA,MAAAA,EAAY,QAGG,CAAC,GAAGA,CAAU,EAAE,KAClC,CAACE,EAAQC,IAAWA,EAAE,SAAWD,EAAE,QACrC,EAGmB,KAAME,GAAcH,GAAYG,EAAK,QAAQ,GAAK,IACvE,CAEA,SAASC,GAAcT,EAAW,SAChC,MAAMK,EAAWL,EAAK,SAChBU,EAAiBV,EAAK,aAAe,uBAGrCI,EAAaM,GACfjE,EAAAuD,EAAK,qBAAL,YAAAvD,EAAyB,YACzBuD,EAAK,QAAQ,YACXW,EAAaD,GACfvC,EAAA6B,EAAK,qBAAL,YAAA7B,EAAyB,YACzB6B,EAAK,QAAQ,YAGXY,EAAiBT,GAAwBC,EAAYC,CAAQ,EACnE,OAAIO,EACKA,EAAe,SAAS,WAAa,GAIvCD,GAAA,YAAAA,EAAY,cAAc,SAAS,YAAa,CACzD,CAEA,SAASE,GAAqBhF,EAAW,WAChC,MAAA,CACL,aAAYY,EAAAZ,GAAA,YAAAA,EAAM,eAAN,YAAAY,EAAoB,OAAQ,GACxC,gBAAe0B,EAAAtC,GAAA,YAAAA,EAAM,eAAN,YAAAsC,EAAoB,KAAM,GACzC,UAASE,EAAAxC,GAAA,YAAAA,EAAM,eAAN,YAAAwC,EAAoB,UAAW,EAC1C,CACF,CAEA,SAASyC,GAAuBjF,EAAW,CAClC,MAAA,CACL,UAAUA,GAAA,YAAAA,EAAM,WAAY,MAC5B,OAAOA,GAAA,YAAAA,EAAM,QAAS,CACxB,CACF,CAEA,SAASgD,EAAehD,EAAW,OACjC,GAAI,GAACY,EAAAZ,GAAA,YAAAA,EAAM,QAAN,MAAAY,EAAa,cAAe,CAAC,EAElC,MAAMK,EAASV,EAAM,OAErB,OAAOP,EAAK,MAAM,IAAKmE,GAAe,6BAAA,OACpC,wBAAuBvD,EAAAuD,GAAA,YAAAA,EAAM,UAAN,YAAAvD,EAAe,0BAA2B,GACjE,kBAAmBqE,IACjB3C,EAAA6B,GAAA,YAAAA,EAAM,UAAN,YAAA7B,EAAe,mBACjB,EACA,YAAa0C,GAAqBb,CAAI,EACtC,sBACE3B,EAAA2B,GAAA,YAAAA,EAAM,0BAAN,YAAA3B,EAA+B,IAAKG,GAAkB,eAC7C,MAAA,CACL,OAAQA,EAAS,QAAU,GAC3B,IAAKA,EAAS,IACd,WAAU/B,EAAAuD,EAAK,gBAAL,YAAAvD,EAAoB,OAAQ+B,EAAS,IAC/C,MAAO,CACL,MAAKL,EAAAK,GAAA,YAAAA,EAAU,QAAV,YAAAL,EAAiB,MAAO,GAC7B,QAAOE,EAAAG,EAAS,QAAT,YAAAH,EAAgB,QAAS,EAClC,EACA,MAAO,CACL,WAAUI,EAAAD,GAAA,YAAAA,EAAU,QAAV,YAAAC,EAAiB,WAAY,MACvC,QAAOC,EAAAF,GAAA,YAAAA,EAAU,QAAV,YAAAE,EAAiB,QAAS,CAAA,CAErC,CACD,KAAK,CAAC,EACT,SAAUsB,EAAK,WACf,IAAKA,EAAK,IACV,qBAAsBe,GACpBf,EAAK,QAAQ,sBACf,EACA,IAAK,CACH,OAAQA,EAAK,QAAQ,QACrB,WAAYA,EAAK,QAAQ,WAAW,IACjCgB,GAAkBA,EAAS,OAAA,CAEhC,EACA,aAAchB,EAAK,QAAQ,cAC3B,WAAYA,EAAK,QAAQ,WAAW,IAAKgB,GAAkBA,EAAS,IAAI,EACxE,WACEhB,EAAK,aAAe,yBAChBtB,GAAAD,EAAAuB,EAAK,qBAAL,YAAAvB,EAAyB,cAAzB,YAAAC,EAAsC,IACnCuC,GAAmBA,KACjB,CAAC,IACNtC,EAAAqB,EAAK,QAAQ,cAAb,YAAArB,EAA0B,IAAKsC,GAAmBA,KAAc,CAAC,EACvE,SAAUjB,EAAK,SACf,IAAKkB,GAAalB,CAAI,EACtB,YAAaA,EAAK,QAAQ,IAC1B,KAAMA,EAAK,QAAQ,KACnB,MAAOC,GAASnD,EAAQkD,CAAI,EAC5B,MAAO,CACL,MAAOA,EAAK,OAAO,MAAM,MACzB,SAAUA,EAAK,OAAO,MAAM,QAC9B,EACA,WAAY,CACV,MAAOA,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,QAC5C,EACA,kBAAmBA,EAAK,OAAO,oBAC/B,SAAU,CACR,MAAOA,EAAK,OAAO,UAAU,MAC7B,SAAUA,EAAK,OAAO,UAAU,QAClC,EACA,qBAAsB,CACpB,MAAOA,EAAK,OAAO,wBAAwB,MAC3C,SAAUA,EAAK,OAAO,wBAAwB,QAChD,EACA,MAAOmB,GAAenB,EAAK,KAAK,EAChC,MAAO,CACL,OAAOlB,EAAAkB,EAAK,OAAO,qBAAZ,YAAAlB,EAAgC,MACvC,UAAUE,EAAAgB,EAAK,OAAO,qBAAZ,YAAAhB,EAAgC,QAC5C,EACA,SAAU,CACR,MAAOgB,EAAK,OAAO,oBAAoB,MACvC,SAAUA,EAAK,OAAO,oBAAoB,SAC1C,OAAOf,EAAAe,EAAK,OAAO,YAAZ,YAAAf,EAAuB,IAAKmC,GAAkBA,EAAS,MAChE,EACA,aAAclB,GAAgBF,CAAI,EAClC,WAAYS,GAAcT,CAAI,EAC9B,cACEA,EAAK,aAAe,iBAChBqB,GAAuBrB,EAAK,cAAc,EAC1C,KACN,kBACEA,EAAK,aAAe,iBAChBsB,GAAwBtB,EAAK,cAAc,EAC3C,KACN,iBAAiBd,EAAAqC,EAAyBvB,EAAK,oBAAoB,IAAlD,YAAAd,EACb,QACJ,qBAAqBC,EAAAoC,EAAyBvB,EAAK,oBAAoB,IAAlD,YAAAb,EACjB,KACJ,oBAAqBqC,GACnBxB,EAAK,oBACP,EACA,OAAQA,EAAK,aAAe,mBAAqBA,EAAK,YAAc,KACpE,YACEA,EAAK,aAAe,mBAAqBA,EAAK,aAAe,KAC/D,UACEA,EAAK,aAAe,mBAAqBA,EAAK,eAAiB,KACjE,eACEA,EAAK,aAAe,mBAAqBA,EAAK,gBAAkB,KAClE,QAASA,EAAK,aAAe,mBAAqBA,EAAK,QAAU,KAEjE,gBAAiB,CACf,MAAOA,EAAK,OAAO,UAAU,MAC7B,SAAUA,EAAK,OAAO,UAAU,QAClC,EAEA,iBACEA,EAAK,aAAe,wBAChBZ,EAAAY,EAAK,qBAAL,YAAAZ,EAAyB,qBACzBY,EAAK,QAAQ,qBACnB,aACEA,EAAK,cAAgBA,EAAK,QAAQ,uBAAyB,KAC7D,sBACGA,EAAK,aAAe,uBACjBA,EAAK,mBACLA,EAAK,SACP,eAAiB,YAAc,CAACA,EAAK,aACzC,WAAYA,EAAK,QAAQ,eAAiB,eAC1C,WAAYyB,GAAoBzB,CAAI,EAEpC,mBAAoB0B,GAA4B1B,CAAI,EACpD,cAAe2B,GAAwB3B,CAAI,EAC3C,kBAAmB4B,GAA2B5B,CAAI,CAAA,EAClD,CACJ,CAKA,SAASe,GAAyBlF,EAAc,CAC9C,OAAQ,CAACA,EAAM,CACb,IAAK,GACI,MAAA,GACT,IAAK,GACI,MAAA,GACT,IAAK,GACI,OAAA,KACT,QACS,MAAA,EAAA,CAEb,CAEA,SAAS+C,GAAgB/C,EAAW,OAClC,MAAMgG,GAASpF,EAAAZ,GAAA,YAAAA,EAAM,QAAN,YAAAY,EAAa,OAAO,CAACsD,EAAUC,IAAc,OACrD,OAAAvD,EAAAuD,EAAA,SAAA,MAAAvD,EAAQ,QAASqF,GAAiB,CACjC/B,EAAA,KAAK,CAAE,IAAKC,EAAK,IAAK,KAAM8B,EAAM,QAAS,CAAA,GAG1C/B,CACT,EAAG,IAEI,OAAA8B,GAAA,MAAAA,EAAQ,OAASA,EAAS,IACnC,CAEA,SAASvC,EAA6BzD,EAAW,CAC/C,OAAKA,GAAA,MAAAA,EAAM,OAEJA,EAAK,IAAKmE,IAAe,CAC9B,OAAQ,CACN,MAAOA,EAAK,OAAO,MACnB,SAAUA,EAAK,OAAO,QACxB,EACA,MAAOA,EAAK,MACZ,OAAQA,EAAK,MAAA,EACb,EATwB,CAAC,CAU7B,CAEA,SAASqB,GAAuBxF,EAAW,CACzC,MAAMkG,EAASlG,GAAA,YAAAA,EAAM,IAAKmG,IAAiB,CACzC,IAAKA,EAAO,IACZ,MAAOA,EAAO,MACd,MAAOA,EAAO,OAAO,IAAKzF,GAAeA,EAAM,KAAK,EAAE,KAAK,IAAI,CAAA,IAG3D0F,EAAwC,CAAC,EAEvC,OAAAF,GAAA,MAAAA,EAAA,QAASC,GAAgB,CACjBC,EAAAD,EAAO,KAAK,EAAIA,EAAO,KAAA,GAGhC,OAAO,KAAKC,CAAa,EAAE,OAAS,EAAIA,EAAgB,IACjE,CAEA,SAASX,GAAwBzF,EAAW,CACtC,GAAA,EAACA,GAAA,MAAAA,EAAM,QAAe,OAAA,KAE1B,MAAMqG,EAAoB,CAAC,EACtB,OAAArG,EAAA,QAASmG,GAAgB,OACxB,IAAAvF,EAAAuF,EAAO,SAAP,MAAAvF,EAAe,OAAQ,CACzB,MAAM0F,EAAYH,EAAO,OAAO,IAAKzF,GAAeA,EAAM,GAAG,EACrD2F,EAAA,KAAK,GAAGC,CAAS,CAAA,CAC3B,CACD,EAEMD,EAAQ,OAAS,EAAIA,EAAU,IACxC,CAEA,SAASX,EAAyB1F,EAAW,CAC3C,MAAMuG,EAAWvG,GAAA,YAAAA,EAAM,IAAKmG,IAAiB,CAC3C,IAAKA,EAAO,gCACZ,MAAOA,EAAO,aACd,MAAOA,EAAO,YACd,SAAUA,EAAO,qCAAA,IAGbK,EAA0C,CAAC,EAC3CC,EAA8C,CAAC,EAE3C,OAAAF,GAAA,MAAAA,EAAA,QAASJ,GAAgB,CACjBK,EAAAL,EAAO,KAAK,EAAIA,EAAO,MACnBM,EAAAN,EAAO,KAAK,EAAIA,EAAO,QAAA,GAGtC,CACL,QAAS,OAAO,KAAKK,CAAe,EAAE,OAAS,EAAIA,EAAkB,KACrE,KACE,OAAO,KAAKC,CAAmB,EAAE,OAAS,EAAIA,EAAsB,IACxE,CACF,CAEA,SAASd,GAA6B3F,EAAW,CAC/C,MAAM0G,EAAqB1G,GAAA,YAAAA,EAAM,IAAKmG,IAAiB,CACrD,IAAKA,EAAO,wBACZ,MAAOA,EAAO,MACd,KAAMA,EAAO,KACb,OAAQA,EAAO,OAAO,IAAKzF,IAAgB,CACzC,IAAKA,EAAM,8BACX,MAAOA,EAAM,MACb,MAAOA,EAAM,KAAA,EACb,CAAA,IAGEsF,EAAiC,CAAC,EAEpB,OAAAU,GAAA,MAAAA,EAAA,QAASP,GAAgB,OAC3C,OAAQA,EAAO,KAAM,CACnB,IAAK,QACL,IAAK,OACL,IAAK,YACHH,EAAOG,EAAO,KAAK,EAAIA,EAAO,OAAO,CAAC,EAAE,MACxC,MACF,IAAK,QACL,IAAK,YACHH,EAAOG,EAAO,KAAK,EAAIA,EAAO,OAAO,CAAC,EAAE,MACxC,MACF,IAAK,WACL,IAAK,WACHH,EAAOG,EAAO,KAAK,EAAKA,EAAO,OAAsB,OACnD,CAACQ,EAAUC,IACLD,EAAiB,GAAGA,CAAQ,KAAKC,EAAQ,KAAK,GAC3CA,EAAQ,MAEjB,EACF,EACA,MACF,IAAK,OAAQ,CACL,MAAAC,EAAS,IAAI,UACbC,EAAwBX,EAAO,OAAO,CAAC,EAAE,MAEzCY,IAAanG,EADPiG,EAAO,gBAAgBC,EAAuB,WAAW,EAC9C,cAAc,GAAG,IAArB,YAAAlG,EAAwB,cAAe,GACnDoF,EAAAG,EAAO,KAAK,EAAIY,EACvB,KAAA,CACF,CACF,GAEKf,CACT,CAEA,SAASvD,GAAkBzC,EAAW,SAChC,QAAAY,EAAAL,EAAM,SAAN,YAAAK,EAAc,2BAA4B,EACrCZ,EAAK,QAAQ,MAAM,SACxBsC,EAAA/B,EAAM,SAAN,YAAA+B,EAAc,2BAA4B,EAAUtC,EAAK,eAEtDA,EAAK,QAAQ,MAAM,MAC5B,CAEA,SAASsF,GAAe0B,EAAY,CAC3B,OAAAA,GAAA,YAAAA,EAAO,QAAS,EACnB,CACE,MAAOA,EAAM,OACb,OAAQA,EAAM,IAAKC,GAAcA,EAAK,KAAK,EAAE,KAAK,IAAI,CAAA,EAExD,IACN,CAEA,SAASvD,GAAmB1D,EAAW,aAEjC,OAAAY,EAAAZ,EAAK,qBAAL,MAAAY,EAAyB,QACpB0B,EAAAtC,EAAK,qBAAL,YAAAsC,EAAyB,IAAK4E,IAAkB,CACrD,YAAaA,EAAQ,QAAQ,KAC7B,QAASA,EAAQ,SACjB,WAAYA,EAAQ,OAAO,IAAA,KAGpB1E,EAAAxC,EAAK,YAAL,MAAAwC,EAAgB,QAClBI,EAAA5C,EAAK,YAAL,YAAA4C,EACH,OAAQsE,GAAiBA,EAAQ,kBAClC,IACEA,GACC,OAAA,OAAAA,EAAQ,kBAAoB,CAC1B,YAAaA,EAAQ,aACrB,QAASA,EAAQ,SACjB,YAAYtG,EAAAsG,EAAQ,SAAR,YAAAtG,EAAgB,WAAA,IAK/B,IACT,CAEA,SAAS+C,GAAyB3D,EAAW,SACpC,OAAAsC,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,UAAN,YAAAY,EAAe,QAAf,YAAA0B,EAAsB,KAC1B6B,GACC,OAAA,QAAAvD,EAAAuD,GAAA,YAAAA,EAAM,UAAN,YAAAvD,EAAe,gBAAiB,gBAC/BuD,EAAK,QAAQ,eAAiB,YAAc,CAACA,EAAK,cAEzD,CAEA,SAASyB,GAAoBzB,EAAW,CAClC,OAACA,EAAK,sBAEHA,EAAK,QAAQ,UAAY,KAAOA,EAAK,QAAQ,SAAW,WAFvB,IAG1C,CAEA,SAASP,GAA8B5D,EAAW,SACzC,OAAAsC,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,UAAN,YAAAY,EAAe,QAAf,YAAA0B,EAAsB,KAC1B6B,GAAc,OAAA,QAAAvD,EAAAuD,GAAA,YAAAA,EAAM,UAAN,YAAAvD,EAAe,gBAAiB,gBAEnD,CAGA,SAASiF,GAA4B7F,EAAW,qBAC9C,MAAMwE,EAAWxE,EAAK,SAGhB+E,EAAiBT,GACrBtE,EAAK,QAAQ,YACbwE,CACF,EAEA,GAAIO,EACF,OAAO,KAAK,MAAMA,EAAe,SAAS,WAAW,EAInD,IAAAoC,EAEA,GAAAnH,EAAK,aAAe,uBACtBmH,GACEvE,GAAAJ,GAAAF,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,qBAAN,YAAAY,EAA0B,cAA1B,YAAA0B,EAAuC,gBAAvC,YAAAE,EAAsD,WAAtD,YAAAI,EACI,gBACR,IAAW5C,EAAK,aAAe,iBACtB,OAEPmH,GACEhE,GAAAF,GAAAH,GAAAD,EAAA7C,GAAA,YAAAA,EAAM,UAAN,YAAA6C,EAAe,cAAf,YAAAC,EAA4B,gBAA5B,YAAAG,EAA2C,WAA3C,YAAAE,EAAqD,YAGzD,GAAIgE,IAAgB,EAIb,OAAA,KAAK,MAAMA,CAAW,CAC/B,CAGA,SAAS9B,GAAalB,EAAW,OAC3B,OAAAA,EAAK,aAAe,uBACfA,EAAK,mBAAmB,MAI1BvD,EAAAuD,EAAK,UAAL,YAAAvD,EAAc,aAAcuD,EAAK,QAAQ,GAClD,CAEA,SAAS2B,GAAwB9F,EAAW,iBACtC,IAAAoH,EACA7E,EAMJ,GAJA6E,IACE9E,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,SAAN,YAAAY,EAAc,qBAAd,YAAA0B,EAAkC,SAAQM,GAAAJ,EAAAxC,GAAA,YAAAA,EAAM,SAAN,YAAAwC,EAAc,YAAd,YAAAI,EAAyB,OAC1DL,GAAAO,GAAAD,EAAA7C,GAAA,YAAAA,EAAM,SAAN,YAAA6C,EAAc,YAAd,YAAAC,EAAyB,SAEhCsE,IAAe,EAGZ,MAAA,CACL,MAAOA,EACP,SAAA7E,CACF,CACF,CAEA,SAASwD,GAA2B5B,EAAW,WAC7C,OAAO3B,GAAAF,GAAA1B,EAAAuD,GAAA,YAAAA,EAAM,UAAN,YAAAvD,EAAe,sBAAf,YAAA0B,EAAoC,QAApC,YAAAE,EAA2C,IAAK6E,GAAmB,CAClE,MAAAC,EAAkBD,EAAU,KAC/B,MAAM,GAAG,EACT,IAAKE,GAAcA,EAAK,OAAO,CAAC,EAAE,cAAgBA,EAAK,MAAM,CAAC,CAAC,EAC/D,KAAK,GAAG,EAEJ,MAAA,CACL,GAAGF,EACH,KAAMC,CACR,CAAA,EAEJ,CC7pBO,SAASE,GAAqBxH,EAAoC,SACnE,GAAA,CAACA,EAAa,OAAA,KAEZ,MAAAyH,EAA8BC,GAA8B,CAChE,OAAQA,EAAmB,CACzB,IAAK,GACI,MAAA,gBACT,IAAK,GACI,MAAA,gBACT,IAAK,GACI,MAAA,0BACT,QACS,MAAA,eAAA,CAEb,EAIMxC,EAA4BlF,GAAiB,CACjD,OAAQ,CAACA,EAAM,CACb,IAAK,GACI,MAAA,GACT,IAAK,GACI,MAAA,GACT,IAAK,GACI,OAAA,KACT,QACS,MAAA,EAAA,CAEb,EAEO,MAAA,CACL,gBAAiBA,EAAK,iBACtB,wBAAyBA,EAAK,mBAC9B,kBAAmBA,EAAK,qBACxB,wBAAyBA,EAAK,8BAC9B,oBAAqBA,EAAK,2BAC1B,eAAgBA,EAAK,gBACrB,sCACEA,EAAK,2CACP,qCACEA,EAAK,0CACP,mCACEA,EAAK,wCACP,2BAA4B,CAC1B,QAASA,EAAK,+BACd,SAAUyH,EAA2BzH,EAAK,8BAA8B,EACxE,MAAOyH,EAA2BzH,EAAK,2BAA2B,EAClE,SAAUyH,EAA2BzH,EAAK,8BAA8B,EACxE,YAAaA,EAAK,mCAClB,WAAYA,EAAK,kCACjB,gBAAiBA,EAAK,uCACxB,EACA,+BACEA,EAAK,gCAAkC,SACzC,yBAA0BkF,EACxBlF,GAAA,YAAAA,EAAM,4BACR,EACA,8BAA+BkF,EAC7BlF,GAAA,YAAAA,EAAM,kCACR,EACA,wBAAyBkF,EAAyBlF,GAAA,YAAAA,EAAM,WAAW,EACnE,6BAA8BkF,EAAyBlF,GAAA,YAAAA,EAAM,WAAW,EACxE,iBAAkB,EAAQ,EAACA,GAAA,YAAAA,EAAM,oBACjC,iBAAkB,EAAQ,EAACA,GAAA,YAAAA,EAAM,oBACjC,iBAAkB,CAChB,WAAUY,EAAAZ,GAAA,YAAAA,EAAM,uBAAN,YAAAY,EAA4B,WAAY,GAClD,QACE0B,EAAAtC,GAAA,YAAAA,EAAM,uBAAN,YAAAsC,EAA4B,QAAS,KACjC,CAACtC,EAAK,qBAAqB,MAC3B,CACR,EACA,iBAAkByH,EAA2B,CAACzH,EAAK,kBAAkB,EACrE,gBAAiByH,EAA2B,CAACzH,EAAK,iBAAiB,CACrE,CACF,CC1Ea,MAAA2H,EACXC,GAKG,CACH,MAAMC,EACJD,EAAO,UACL,CAAC,CAAE,WAAAE,CAAW,KAAMA,GAAA,YAAAA,EAAY,YAAa,uBAAA,EAC3C,GAGAC,EACJH,EAAO,UACL,CAAC,CAAE,KAAAI,EAAM,WAAAF,CAAW,KAClBA,GAAA,YAAAA,EAAY,YAAa,0BACzB,EAACE,GAAA,MAAAA,EAAM,SAAS,sBAAoB,EACpC,GAEAC,EAAeL,EAAO,IAAKM,GAAWA,EAAE,OAAO,EAAE,KAAK,GAAG,EAGzDC,EACJP,EAAO,UACL,CAAC,CAAE,KAAAI,EAAM,WAAAF,MACPA,GAAA,YAAAA,EAAY,YAAa,kBACzBE,GAAA,YAAAA,EAAM,SAAS,QAAM,EACrB,GAGF,GAAAH,GAAgBE,GAAeI,EACvB,OAAA7G,GAAA,EACV,QAAQ,MAAM2G,CAAY,EACnB,KAGT,MAAM,MAAMA,CAAY,CAC1B,ECvCaG,GAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBzCC,CAAa;AAAA,EChBV,SAASC,EACdC,EACqB,CACrB,KAAM,CAAE,KAAAC,EAAM,OAAAnH,EAAS,OAAY,EAAAkH,EAE5B,MAAA,CACL,GAAIC,EAAK,GACT,MAAOxF,GAAewF,EAAK,MAAOnH,CAAM,EACxC,OAAQ,CACN,qBAAsBmH,EAAK,SAAS,aACpC,qBAAsBA,EAAK,SAAS,YACtC,EACA,cAAeA,EAAK,iBACpB,wBAAyB,OACzB,oBAAqB,OACrB,qBAAsB,OACtB,OAAQ,MACV,CACF,CAEgB,SAAAxF,GACdyF,EACApH,EACoB,CACb,OAAAoH,EAAM,IAAKtE,IAAe,CAC/B,aAAc,GACd,eAAgBuE,GACdrH,EACA8C,EAAK,MAAM,SACXA,EAAK,MAAM,KACb,EACA,GAAIA,EAAK,IACT,OAAQ,CACN,MAAOA,EAAK,MACZ,SAAUA,EAAK,UAAYA,EAAK,SAAS,QAAU,OAAY,CAC7D,MAAOA,EAAK,SAAS,MACrB,SAAUA,EAAK,SAAS,QAAA,EACtB,MACN,EACA,QAAS,CACP,UAAWA,EAAK,IAChB,KAAMA,EAAK,KACX,IAAKA,EAAK,IACV,YAAaA,EAAK,YAClB,cAAe,OACf,gBAAiB,OACjB,UAAW,OACX,YAAa,OACb,UAAW,OACX,UAAW,OACX,aAAc,OACd,qBAAsB,OACtB,WAAYA,EAAK,WACjB,YAAaA,EAAK,SAClB,QAAS,CACP,aAAcA,EAAK,aAAa,MAChC,aAAc,OACd,aAAc,OACd,aAAcwE,GAAsBxE,CAAI,EACxC,YAAa,OACb,aAAcA,EAAK,aAAa,QAClC,EACA,aAAcA,EAAK,aACnB,aAAcA,EAAK,MAAM,IACzB,MAAO,CACL,IAAKA,EAAK,MAAM,IAChB,IAAKA,EAAK,MAAM,GAAA,CAEpB,EACA,oBAAqBA,EAAK,gBACxB,OAAO,QAAQA,EAAK,eAAe,EAAE,IAAI,CAAC,CAACyE,EAAaC,CAAU,EAAGC,KAAW,CAC9E,GAAIA,EAAQ,EACZ,YAAAF,EACA,QAASE,EAAQ,EACjB,WAAAD,CACF,EAAE,EAAI,CAAC,EACT,cAAe1E,EAAK,cAClB,OAAO,QAAQA,EAAK,aAAa,EAAE,IAAI,CAAC,CAACyE,EAAaC,CAAU,EAAGC,KAAW,CAC5E,IAAKA,EAAQ,GAAG,SAAS,EACzB,YAAAF,EACA,QAASE,EAAQ,EACjB,WAAAD,CACF,EAAE,EAAI,CAAC,EACT,oBAAqB1E,EAAK,oBACxB,OAAO,QAAQA,EAAK,mBAAmB,EAAE,IAAI,CAAC,CAACyE,EAAaC,CAAU,EAAGC,KAAW,CAClF,IAAKA,EAAQ,GAAG,SAAS,EACzB,YAAAF,EACA,QAASE,EAAQ,EACjB,WAAAD,CACF,EAAE,EAAI,CAAC,EACT,SAAU1E,EAAK,SACf,iBAAkB,IAAM,CACtB,MAAM4E,EAAU,CACd,GAAG5E,EAAK,gBACR,GAAGA,EAAK,cACR,GAAGA,EAAK,mBACV,EACA,OAAO,OAAO,KAAK4E,CAAO,EAAE,OAAS,EAAIA,EAAU,MAClD,GAAA,CAAA,EACH,CACJ,CAEA,SAASL,GACPrH,EACAkB,EACA7B,EACQ,CACR,MAAMsI,EAAkB3H,EAAO,QAAQ,IAAK,GAAG,EAExC,OAAA,IAAI,KAAK,aAAa2H,EAAiB,CAC5C,MAAO,WACP,SAAAzG,CAAA,CACD,EAAE,OAAO7B,CAAK,CACjB,CAEA,SAASiI,GAAsBxE,EAAW,OACpC,GAACA,EAAK,WAGV,OAAOvD,EAAAuD,EAAK,QAAL,YAAAvD,EAAY,KACrB,CCjHO,MAAMqI,EAAW,CACtB,sBAAuB,sBACvB,gBAAiB,iBACjB,yBAA0B,yBAC1B,gBAAiB,gBACnB,EAKa9H,EAAS,CAEpB,UAAW,YAIX,YAAa,cAEb,iBAAkB,mBAElB,mBAAoB,qBAEpB,kBAAmB,mBACrB,EAEO,SAAS+H,GAAoB,CAE3B,cAAA,eAAiB,OAAO,gBAAkB,CAAC,EAE3C,OAAO,cAChB,CAMA,SAASC,EAAWC,EAAcpJ,EAAW,CAC3C,MAAMqJ,EAAiBH,EAAkB,EAGzCG,EAAe,KAAK,CAClB,CAACD,CAAI,EAAG,IAAA,CACT,EAGDC,EAAe,KAAK,CAClB,CAACD,CAAI,EAAGpJ,CAAA,CACT,CACH,CAMA,SAASsJ,EAAUC,EAAeC,EAAyB,CAClCN,EAAkB,EAE1B,KAAMO,GAAc,CACjC,MAAMlJ,EAAQkJ,EAAK,SAAWA,EAAK,WAAa,CAAC,EAEjDA,EAAK,KAAK,CACR,MAAAF,EACA,UAAW,CACT,GAAGhJ,EACH,GAAGiJ,CAAA,CACL,CACD,CAAA,CACF,CACH,CAEA,SAASE,IAAoB,CACpB,MAAA,CACL,IAAK,wCACL,MAAO,4CACT,CACF,CAEA,SAASC,GAAoB,CAChBR,EAAAF,EAAS,gBAAiBS,IAAmB,CAC1D,CAGgB,SAAAE,GACdpB,EACAqB,EACAxI,EACA,CACA,MAAMyI,EAAsBxB,EAAsB,CAChD,KAAAE,EACA,OAAAnH,CAAA,CACD,EAEiBsI,EAAA,EAGlBR,EAAWF,EAAS,sBAAuB,CACzC,GAAGa,CAAA,CACJ,EAGK,MAAAC,EAAoB/G,GAAe6G,EAAYxI,CAAM,EAG3D8H,EAAWF,EAAS,yBAA0B,CAC5C,MAAOc,CAAA,CACR,EAGDT,EAAUnI,EAAO,SAAS,EAGR4I,EAAA,QAAS5F,GAAS,CACvBgF,EAAAF,EAAS,gBAAiB9E,EAAK,OAAO,EACjD6F,EAAyBF,EAAqB,CAAC3F,CAAI,EAAGhD,EAAO,WAAW,CAAA,CACzE,CACH,CAGgB,SAAA8I,GAA6BzB,EAAiBnH,EAAgB,CAC5E,MAAMyI,EAAsBxB,EAAsB,CAChD,KAAAE,EACA,OAAAnH,CAAA,CACD,EAEiBsI,EAAA,EAElBR,EAAWF,EAAS,sBAAuB,CACzC,GAAGa,CAAA,CACJ,EAEDR,EAAUnI,EAAO,kBAAkB,CACrC,CAGA,SAAS6I,EACPF,EACAI,EACAX,EACA,CACA,MAAMY,EAAyB,CAC7B,MAAOD,CACT,EAEkBP,EAAA,EAElBR,EAAWF,EAAS,sBAAuB,CACzC,GAAGa,CAAA,CACJ,EAEDX,EAAWF,EAAS,yBAA0B,CAC5C,GAAGkB,CAAA,CACJ,EAEDb,EAAUC,CAAK,CACjB,CAEgB,SAAAa,EACd5B,EACA0B,EAGA7I,EACA,CACA,MAAMgJ,EAAyB/B,EAAsB,CACnD,KAAAE,EACA,OAAAnH,CAAA,CACD,EAEKiJ,EAAeD,EAAuB,MAEtChB,EAAiBH,EAAkB,EAEnCqB,EAAelB,EAAe,SAAWA,EAAe,WAAa,CAAC,EAEtE,CAAE,oBAAqB,CAAE,MAAOmB,EAAgB,EAAG,EAAI,CAAC,CAAA,EAC5DD,EAEWL,EAAA,QAASO,GAAgB,CACpC,MAAMC,EAAeF,EAAc,KAChCrG,GAA2BA,EAAK,KAAOsG,EAAY,GACtD,EAEME,EAAcL,EAAc,KAC/BnG,GAA2BA,EAAK,KAAOsG,EAAY,GACtD,EAEI,CAACE,GAAe,CAACD,IAMjB,CAACA,GAAgBC,GAERxB,EAAAF,EAAS,gBAAiB0B,EAAY,OAAO,EACxDX,EACEK,EACA,CAACM,CAAW,EACZxJ,EAAO,WACT,GACSuJ,GAAgB,CAACC,GAEfxB,EAAAF,EAAS,gBAAiByB,EAAa,OAAO,EACzDV,EACEK,EACA,CAACK,CAAY,EACbvJ,EAAO,gBACT,GACSwJ,EAAa,SAAWD,EAAa,UAEnCvB,EAAAF,EAAS,gBAAiB0B,EAAa,OAAO,EACzDX,EACEK,EACA,CAACM,CAAY,EACbxJ,EAAO,WACT,IAGWgI,EAAAF,EAAS,gBAAiB0B,EAAa,OAAO,EACzDX,EACEK,EACA,CAACM,CAAY,EACbxJ,EAAO,gBACT,GACF,CACD,CACH,CAEgB,SAAAyJ,GAA6BpC,EAAiBnH,EAAiB,CAC7E,MAAMyI,EAAsBxB,EAAsB,CAChD,KAAAE,EACA,OAAAnH,CAAA,CACD,EAEiBsI,EAAA,EAElBR,EAAWF,EAAS,sBAAuB,CACzC,GAAGa,CAAA,CACJ,EAEDR,EAAUnI,EAAO,iBAAiB,CACpC,CCrPa,MAAA0J,GAAoB,MAC/BpC,GAQ8B,CACxB,MAAAqC,EACJvK,EAAM,QACL,MAAMwK,KAAkB,KAAMC,GACtBA,CACR,EAEH,OAAOnJ,EAAauG,GAA+B,CACjD,UAAW,CACT,OAAA0C,EACA,UAAWrC,EAAM,IACf,CAAC,CACC,IAAAwC,EACA,UAAWC,EACX,SAAA1G,EACA,YAAa2G,EACb,eAAgBC,EAChB,aAAAC,CAAA,KACK,CACL,IAAAJ,EACA,WAAAC,EACA,SAAA1G,EACA,iBAAA2G,EACA,gBAAAC,EACA,GAAIC,GAA8B,CAAA,CACpC,EAAA,CACF,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAzD,EAAQ,KAAA5H,KAAW,OAE5B,MAAMsL,EAAU,CACd,KAAI1K,EAAAZ,GAAA,YAAAA,EAAM,oBAAN,YAAAY,EAAyB,cAAe,CAAC,EAC7C,GAAIgH,GAAU,CAAA,CAChB,EAEA,GAAI0D,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAGvD,MAAM/J,EAAUS,EAAchC,EAAK,kBAAkB,IAAI,EAGnDuL,EAAetL,EAAqB,EACpCuK,GAAgBe,GAAA,YAAAA,EAAc,QAAS,CAAC,EAO9C,GAJOpK,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAG5BA,EAAS,CAEX,MAAMiK,EAAWjK,EAAQ,MAAM,OAAQ4C,GAC9B,CAACqG,EAAc,KAAMiB,GAASA,EAAK,MAAQtH,EAAK,GAAG,CAC3D,EAEK+F,EAAe3I,EAAQ,MAAM,OAAQ4C,GAAS,CAClD,MAAMuG,EAAeF,EAAc,KAChCiB,GAASA,EAAK,MAAQtH,EAAK,GAC9B,EAEO,OAAAuG,GAAgBvG,EAAK,WAAauG,EAAa,QAAA,CACvD,EAGGc,EAAS,OAAS,GACbrK,EAAA,KAAK,qBAAsBqK,CAAQ,EAIxCtB,EAAa,OAAS,GACjB/I,EAAA,KAAK,uBAAwB+I,CAAY,CAClD,CAIF,GAAI3I,EAAS,CACL,MAAA2I,EAAe3I,EAAQ,MAAM,OAAQ4C,GACzCsE,EAAM,KACJ,CAAC,CAAE,IAAAwC,CAAI,IAAMA,EAAI,YAAY,IAAM9G,EAAK,YAAY,YAAY,CAAA,CAEpE,EAGMuH,EACJ,CAACH,IAAiBA,EAAa,eAAiB,KAAO,EACnDI,GAAepK,EAAQ,eAAiB,GAAK,EAE/CmK,GAAgBC,EAElB/B,GAAqBrI,EAAS2I,EAAc3J,EAAM,QAAU,OAAO,EAGnE6J,EAAwB7I,EAAS2I,EAAc3J,EAAM,QAAU,OAAO,CACxE,CAGK,OAAAgB,CAAA,CACR,CACH,ECtHaqK,GAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECI1CC,GAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAa5BxD,CAAa;AAAA,EAGJyD,GAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgB/BF,EAAyB;AAAA,IACzBvD,CAAa;AAAA,EC7BJ0D,EAAc,SAAuC,CAChE,MAAM3K,EAAgBb,EAAM,cACtBuK,EAASvK,EAAM,OAGrB,GAAIa,EACF,OAAOS,EAAaiK,GAAqB,CAAE,OAAQ,MAAA,CAAQ,EAAE,KAC3D,CAAC,CAAE,OAAAlE,EAAQ,KAAA5H,KAAW,CAChB,GAAA4H,EAAe,OAAAD,EAAiBC,CAAM,EAE1C,MAAMoE,EAAS,CAAE,GAAGhM,EAAK,KAAM,GAAGA,EAAK,QAAS,EAEhD,OAAOgC,EAAcgK,CAAM,CAAA,CAE/B,EAIF,GAAI,CAAClB,EAAc,MAAA,IAAI,MAAM,kBAAkB,EAE/C,OAAOjJ,EAAagK,GAAkB,CACpC,OAAQ,OACR,MAAO,WACP,UAAW,CAAE,OAAAf,CAAO,CACrB,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAlD,EAAQ,KAAA5H,KACb4H,EAAeD,EAAiBC,CAAM,EAEnC5F,EAAchC,EAAK,IAAI,CAC/B,CACH,ECnCaiM,GAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBhC5D,CAAa;AAAA,ECZJnH,EAAiB,SAAuC,CAC/D,GAAAX,EAAM,aAAqB,OAAA,KAE/BA,EAAM,aAAe,GAGhBA,EAAM,SACHA,EAAA,OAAS,MAAM2L,GAAe,GAGtC,MAAM3K,EAAUhB,EAAM,cAClB,MAAM4L,GAAuB,EAC7B,MAAMC,GAAoB,EAEvBjL,OAAAA,EAAA,KAAK,mBAAoBI,CAAO,EAChCJ,EAAA,KAAK,YAAaI,CAAO,EAEhChB,EAAM,aAAe,GAEdgB,CACT,EAEA,eAAsB4K,IAAyB,CAC7C,MAAME,EAAiB9L,EAAM,OAEvBiI,EAAO,MAAMuD,EAAY,EAE3B,OAACvD,GAGLjI,EAAM,OAASiI,EAAK,GAGhB,CAAC6D,GAAkB7D,EAAK,KAAO6D,EAAuB7D,EAGnD,MAAM3G,EAAaoK,GAAsB,CAC9C,UAAW,CACT,YAAaI,EACb,eAAgB7D,EAAK,EAAA,CACvB,CACD,EACE,KAAK,IACGuD,EAAY,CACpB,EACA,KAAMO,GAAwB,CAC7B,MAAM/K,EAAU,CACd,aAAciH,EAAK,MACnB,QAAS8D,CACX,EACOnL,OAAAA,EAAA,KAAK,cAAeI,CAAO,EAC3B+K,CAAA,CACR,EACA,MAAM,KAEL,QAAQ,MAAM,uBAAuB,EAC9B9D,EACR,GA9Be,IA+BpB,CAEA,eAAsB4D,IAAsB,CAOtC,GALAnL,EAAO,YAAY,mBAAqB,IAKxC,CAACV,EAAM,OACF,OAAA,KAIL,GAAA,CACF,OAAO,MAAMwL,EAAY,QAClB9F,EAAO,CACd,eAAQ,MAAMA,CAAK,EACZ,IAAA,CAEX,CClFO,MAAMsG,GAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAqB9ClE,CAAa;AAAA,ECoBXmE,GAAwB,CAC5BC,EAIAC,IACgB,CAChB,MAAMC,EAA0B,CAAC,EAG9B,OAAAF,EAAA,OACEtI,GAASA,EAAK,QAAUuI,EAAgB,KAAME,GAAQA,IAAQzI,EAAK,GAAG,CAAA,EAExE,QAASA,GAAS,QACZvD,EAAAuD,EAAA,SAAA,MAAAvD,EAAQ,QAASqF,GAAU,CAC9B0G,EAAW,KAAK,CACd,QAAS1G,EAAM,QACf,KAAM,CAAC9B,EAAK,GAAG,EACf,WAAY,CACV,SAAU8B,EAAM,IAAA,CAClB,CACD,CAAA,EACF,CACF,EAEI0G,CACT,EAwBME,GAAe,CACnBpE,EACAqE,IAGG,CACH,MAAMC,EAOD,CAAC,EAGAC,EAA+B,CAAC,EAChCC,EAYD,CAAC,EAEA,OAAAxE,EAAA,QAAStE,GAAS,CAEtB,MAAMwG,EAAcmC,EAAiB,KAClCI,GAAaA,EAAS,MAAQ/I,EAAK,GACtC,EAEA,GAAIwG,EACF,GAAIxG,EAAK,YAAa,CACpB,MAAMgJ,EAAqB,OAAO,QAChCxC,GAAA,YAAAA,EAAa,sBAAuB,CAAA,CACtC,EAQA,GAJExG,EAAK,YAAY,MAAOiJ,GACtBD,EAAmB,SAASC,CAAS,CAClC,GAAAjJ,EAAK,YAAY,SAAWgJ,EAAmB,OAIpDF,EAAc,KAAK,CACjB,IAAK9I,EAAK,IACV,SAAUA,EAAK,SACf,YAAaA,EAAK,YAClB,aAAcA,EAAK,YAAA,CACpB,MACI,CAEL,MAAMkJ,EAA6BP,EAAiB,KACjDI,GAAa,CACZ,MAAMI,EAAkB,OAAO,QAC7BJ,GAAA,YAAAA,EAAU,sBAAuB,CAAA,CACnC,EAEE,OAAAA,EAAS,MAAQ/I,EAAK,KACtB+I,EAAS,MAAQvC,EAAY,KAC7BxG,EAAK,YAAa,MAAOiJ,GACvBE,EAAgB,SAASF,CAAS,CAEpC,GAAAjJ,EAAK,YAAa,SAAWmJ,EAAgB,MAAA,CAGnD,EAEA,GAAID,EAEFJ,EAAc,KAAK,CACjB,IAAKI,EAA2B,IAChC,SAAUA,EAA2B,SAAWlJ,EAAK,SACrD,YAAaA,EAAK,YAClB,aAAcA,EAAK,YAAA,CACpB,EACa6I,EAAA,KAAK7I,EAAK,GAAG,MACtB,CAEL,KAAM,CAAE,IAAA8G,EAAK,YAAasC,CAAc,EAAA5C,EAClC,CAAE,YAAA6C,EAAa,eAAAC,EAAgB,SAAAjJ,EAAU,aAAA6G,CAC7C,EAAAlH,EAEF4I,EAAW,KAAK,CACd,IAAA9B,EACA,UAAAsC,EACA,SAAA/I,EACA,YAAAgJ,EACA,eAAAC,EACA,aAAApC,CAAA,CACD,EAEa2B,EAAA,KAAK7I,EAAK,GAAG,CAAA,CAC7B,CACF,SACSA,EAAK,aAAc,CAC5B,KAAM,CAAE,IAAA8G,EAAK,YAAasC,CAAc,EAAA5C,EAClC,CAAE,YAAA6C,EAAa,eAAAC,EAAgB,SAAAjJ,EAAU,aAAA6G,CAAiB,EAAAlH,EAEhE4I,EAAW,KAAK,CACd,IAAA9B,EACA,UAAAsC,EACA,SAAA/I,EACA,YAAAgJ,EACA,eAAAC,EACA,aAAApC,CAAA,CACD,EACa2B,EAAA,KAAK7I,EAAK,GAAG,CAAA,MAE3B8I,EAAc,KAAK,CACjB,IAAK9I,EAAK,IACV,SAAUA,EAAK,SACf,YAAaA,EAAK,YAClB,aAAcA,EAAK,YAAA,CACpB,MAGG,OAAA,MACJ,2DAA2DA,EAAK,GAAG,EACrE,CACF,CACD,EAEM,CACL,WAAA4I,EACA,cAAAC,EACA,cAAAC,CACF,CACF,EAEMS,GAAuB,EAEhBC,GAAyB,MACpClF,GAC8B,CAC9B,MAAMqC,EAASvK,EAAM,OACfiI,EAAOvI,EAAqB,EAElC,GAAI,CAAC6K,EACH,OAAO,QAAQ,OAAO,IAAI,MAAM,oBAAoB,CAAC,EAGvD,GAAI,CAACtC,EACH,OAAO,QAAQ,OAAO,IAAI,MAAM,iBAAiB,CAAC,EAGpD,KAAM,CAAE,WAAAuE,EAAY,cAAAC,EAAe,cAAAC,CAAkB,EAAAJ,GACnDpE,EACAD,EAAK,KACP,EAGA,IAAIoF,EAA4C,CAAC,EAI7C,OAAAb,EAAW,OAAS,GACda,EAAA,KACN/L,EAAauG,GAA+B,CAC1C,UAAW,CACT,OAAA0C,EACA,UAAWiC,EAAW,IACpB,CAAC,CACC,UAAW9B,EACX,SAAAzG,EACA,YAAa2G,EACb,eAAgBC,EAChB,aAAAC,CAAA,KACK,CACL,IAAAJ,EACA,SAAAzG,EACA,iBAAA2G,EACA,gBAAAC,EACA,GAAIC,GAA8B,CAAA,CACpC,EAAA,CACF,CAEH,CAAA,EACE,KAAK,CAAC,CAAE,OAAAzD,EAAQ,KAAA5H,KAAW,aAE1B,MAAM6N,EAAqBrB,KACzBlK,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,oBAAN,YAAAY,EAAyB,OAAzB,YAAA0B,EAA+B,QAAQ,QAAS,CAAC,EACjDmG,EAAM,IAAKtE,GAASA,EAAK,GAAG,CAC9B,EAGMmH,EAAU,CACd,KAAI9I,EAAAxC,GAAA,YAAAA,EAAM,oBAAN,YAAAwC,EAAyB,cAAe,CAAC,EAC7C,GAAIoF,GAAU,CAAC,EACf,GAAGiG,CACL,EAEA,OAAIvC,EAAQ,OAAS,EAAU3D,EAAiB2D,CAAO,EAEnD0B,EAAc,OAAS,EAElBc,EACLhD,EACAkC,EAAc,IAAKJ,IAAS,CAC1B,IAAAA,EACA,SAAUc,EAAA,EACV,CAAA,EACF,MAAOzH,GACA,QAAQ,OACb,IAAI,MAAM,sCAAsCA,CAAK,EAAE,CACzD,CACD,EAEI,QAAQ,QAAQjE,GAAcY,EAAA5C,GAAA,YAAAA,EAAM,oBAAN,YAAA4C,EAAyB,IAAI,CAAC,CAAA,CACpE,EACA,KAAMrB,IAEEJ,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAGhC6I,EAAwB7I,EAAUkH,EAAOlI,EAAM,QAAU,OAAO,EAEzD,QAAQ,QAAQgB,CAAO,EAC/B,EACA,MAAO0E,GACC,QAAQ,OACb,IAAI,MAAM,mCAAmCA,CAAK,EAAE,CACtD,CACD,CACL,EAGEgH,EAAc,OAAS,GACjBW,EAAA,KACNE,EAAwBhD,EAAQmC,CAAa,EAAE,MAAOhH,GAC7C,QAAQ,OAAO,IAAI,MAAMA,CAAK,CAAC,CACvC,CACH,EAIK,QAAQ,IAAI2H,CAAO,EAAE,KAAMA,GAAYA,EAAQA,EAAQ,OAAS,CAAC,CAAC,CAC3E,EAEME,EAA0B,MAC9BhD,EACArC,IAEO5G,EAAa0K,GAAoC,CACtD,UAAW,CACT,OAAAzB,EACA,UAAWrC,EAAM,IAAI,CAAC,CAAE,IAAAmE,EAAK,SAAApI,EAAU,YAAAP,MAAmB,CACxD,cAAe2I,EACf,SAAApI,EACA,GAAGP,CAAA,EACH,CAAA,CAEL,CAAA,EAAE,KAAK,CAAC,CAAE,OAAA2D,EAAQ,KAAA5H,KAAW,WAE5B,MAAM6N,EAAqBrB,KACzBlK,GAAA1B,EAAAZ,GAAA,YAAAA,EAAM,kBAAN,YAAAY,EAAuB,OAAvB,YAAA0B,EAA6B,QAAQ,QAAS,CAAC,EAC/CmG,EAAM,IAAKtE,GAASA,EAAK,GAAG,CAC9B,EAGMmH,EAAU,CACd,KAAI9I,EAAAxC,GAAA,YAAAA,EAAM,kBAAN,YAAAwC,EAAuB,cAAe,CAAC,EAC3C,GAAIoF,GAAU,CAAC,EACf,GAAGiG,CACL,EAGMtM,GACJvB,GAAA,YAAAA,EAAM,kBAAmBgC,EAAchC,EAAK,gBAAgB,IAAI,EAOlE,GAJIuB,GACKJ,EAAA,KAAK,YAAaI,CAAO,EAG9B+J,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAMvD,GAHOnK,EAAA,KAAK,eAAgBI,CAAO,EAG/BA,EAAS,CACL,MAAA2I,EAAe3I,EAAQ,MAAM,OAChC4C,GACCsE,EAAM,KAAMsF,GAAeA,EAAW,MAAQ5J,EAAK,GAAG,CAC1D,EAEOhD,EAAA,KAAK,uBAAwB+I,CAAY,CAAA,CAIlD,OAAI3I,GAEF6I,EAAwB7I,EAASkH,EAAOlI,EAAM,QAAU,OAAO,EAG1DgB,CAAA,CACR,EC3YUD,GAAY,KACvBf,EAAM,OAAS,KACfA,EAAM,cAAgB,GAEf,QAAQ,QAAQ,IAAI,GCPhByN,GAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECK7BjD,GAAkB,SAAY,CACzC,KAAM,CAAE,iBAAAkD,CAAA,EAAqBhN,EAAO,UAAU,EAG9C,GAAIgN,EACI,MAAA,IAAI,MAAM,wBAAwB,EAInC,OAAA,MAAMpM,EAAamM,EAA0B,EAAE,KAAK,CAAC,CAAE,KAAAhO,KAAW,CACjE,MAAA8K,EAAS9K,EAAK,gBAAgB,KAAK,GAGzC,OAAAO,EAAM,OAASuK,EAERA,CAAA,CACR,CACH,ECtBaoD,GAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECOrBhC,GAAiB,SACrBrK,EAAaqM,GAAoB,CACtC,OAAQ,MACR,MAAO,aACR,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAtG,EAAQ,KAAA5H,KACb4H,EAAeD,EAAiBC,CAAM,EAEnCJ,GAAqBxH,EAAK,WAAW,CAC7C,ECbUmO,GAA2BnO,GAA8B,SAC7D,MAAA,CACL,YAAaA,EAAK,cAAgB,KAClC,SAAUA,EAAK,UAAY,GAC3B,SAAQY,EAAAZ,EAAK,SAAL,YAAAY,EAAa,SAAU,GAC/B,UAAU0B,EAAAtC,EAAK,SAAL,YAAAsC,EAAa,EACzB,CACF,EAEa8L,GAA2BpO,GACjCA,EAEE,CACL,YAAaA,EAAK,cAAgB,GAClC,WAAYA,EAAK,aAAe,GAChC,OAAQA,EAAK,OACb,GAAIA,EAAK,gBAAkB,CACzB,cAAe,CACb,MAAOA,EAAK,eAAe,MAC3B,SAAUA,EAAK,eAAe,QAAA,CAElC,EACA,GAAIA,EAAK,gBAAkB,CACzB,cAAe,CACb,MAAOA,EAAK,eAAe,MAC3B,SAAUA,EAAK,eAAe,QAAA,CAChC,CAEJ,EAlBkB,KCZPqO,GAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYlBC,GAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECZhBC,GAAqC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EC0BrCC,GAAsB,MACjCtH,GACwB,CACxB,MAAM4D,EAASvK,EAAM,OAErB,GAAI,CAACuK,EAAc,MAAA,IAAI,MAAM,kBAAkB,EAC/C,GAAI,CAAC5D,EAAe,MAAA,IAAI,MAAM,4BAA4B,EAE1D,KAAM,CAAE,YAAAuH,EAAa,SAAAC,EAAU,OAAAC,CAAW,EAAAzH,EAEpC0H,EAAe,CACnB,aAAcH,GAAe,KAC7B,SAAUC,GAAY,GACtB,OAAQ,CACN,QAAQC,GAAA,YAAAA,EAAQ,SAAU,GAC1B,UAAWA,GAAA,YAAAA,EAAQ,EAAA,CAEvB,EAEA,OAAO9M,EAAa0M,GAAoC,CACtD,UAAW,CACT,OAAAzD,EACA,QAAS8D,CAAA,CAEZ,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAhH,EAAQ,KAAA5H,KAAW,CACxB,GAAA4H,EAAe,OAAAD,EAAiBC,CAAM,EAIpC,MAAAiH,EAFsC7O,EAAK,wBAGvB,KAAM8O,GAAW,CAACA,EAAO,aAAa,GAAK,KAErE3N,OAAAA,EAAO,KAAK,oBAAqB,CAC/B,QAASgN,GAAwBS,CAAY,EAC7C,eAAgBR,GAAwBS,CAAc,CAAA,CACvD,EAEMA,CAAA,CACR,CACH,EAEaE,GAAe,SACnBlN,EAAawM,GAAiB,CAAE,OAAQ,KAAA,CAAO,EAAE,KACtD,CAAC,CAAE,OAAAzG,EAAQ,KAAA5H,KAAW,SAChB,GAAA4H,EAAe,OAAAD,EAAiBC,CAAM,EAEpC,MAAAoH,IACJpO,EAAAZ,GAAA,YAAAA,EAAM,YAAN,YAAAY,EAAiB,KAAK,CAAC6D,EAAQC,IAC7BD,EAAE,MAAM,cAAcC,EAAE,KAAK,KAC1B,CAAC,EAEFuK,IAAiB3M,EAAAtC,GAAA,YAAAA,EAAM,cAAN,YAAAsC,EAAmB,iBAAkB,KAG5C,OAAA0M,EAAA,QAASE,GAAiB,CAChCA,EAAA,iBAAmBA,EAAQ,KAAOD,CAAA,CAC3C,EAEMD,CAAA,CAEX,EAGWG,GAAa,MACxBC,GAEOvN,EAAayM,GAAe,CACjC,OAAQ,MACR,UAAW,CACT,GAAIc,CAAA,CAEP,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAxH,EAAQ,KAAA5H,KAAW,OACxB,OAAA4H,EAAeD,EAAiBC,CAAM,IAEnChH,EAAAZ,GAAA,YAAAA,EAAM,UAAN,YAAAY,EAAe,oBAAqB,CAAC,CAAA,CAC7C,ECnGUyO,GAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBzChH,CAAa;AAAA,ICHJiH,GAAqB,MAChCpI,GAC8B,SAC9B,MAAM4D,EAASvK,EAAM,OAErB,GAAI,CAACuK,EAAc,MAAA,IAAI,MAAM,kBAAkB,EAC/C,GAAI,CAAC5D,EAAe,MAAA,IAAI,MAAM,4BAA4B,EAE1D,KAAM,CAAE,YAAAuH,EAAa,SAAAC,EAAU,OAAAC,CAAW,EAAAzH,EACpCqI,GAAe3O,EAAAsG,EAAQ,kBAAR,YAAAtG,EAAyB,aACxC4O,GAAclN,EAAA4E,EAAQ,kBAAR,YAAA5E,EAAyB,YAE7C,OAAOT,EAAawN,GAA+B,CACjD,UAAW,CACT,OAAAvE,EACA,QAAS,CACP,aAAc2D,GAAe,KAC7B,SAAAC,EACA,QACEC,GAAA,YAAAA,EAAQ,MAAO,OACX,CAAE,UAAWA,EAAO,EACpB,EAAA,CAAE,QAAQA,GAAA,YAAAA,EAAQ,SAAU,EAAG,CACvC,EACA,gBAAiB,CACf,aAAcY,GAAgB,GAC9B,YAAaC,GAAe,EAAA,CAC9B,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAA5H,EAAQ,KAAA5H,KAAW,CACxB,GAAA4H,EAAe,OAAAD,EAAiBC,CAAM,EAE1C,MAAM6H,EAA+BzP,EAAK,eAE1C,OAAIyP,EACczN,EAAcyN,EAAc,IAAI,EAK3C,IAAA,CACR,CACH,ECzDajO,EAAc,SAAuC,CAChE,MAAMD,EAAUhB,EAAM,cAClB,MAAM4L,GAAuB,EAC7B,MAAMC,GAAoB,EAEvBjL,OAAAA,EAAA,KAAK,YAAaI,CAAO,EAEzBA,CACT,ECXamO,GAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsB5CrH,CAAa;AAAA,ECXH,IAAAsH,IAAAA,IACVA,EAAA,OAAS,SACTA,EAAA,QAAU,UAFAA,IAAAA,IAAA,CAAA,CAAA,EAKC,MAAAC,GAAqB,MAChCC,EACAC,IAC8B,CAC9B,MAAMhF,EAASvK,EAAM,OAErB,GAAI,CAACuK,EACH,MAAM,MAAM,oBAAoB,EAGlC,OAAOjJ,EAAa6N,GAAgC,CAClD,UAAW,CACT,OAAA5E,EACA,YAAA+E,EACA,KAAAC,CAAA,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAlI,EAAQ,KAAA5H,KAAW,OAE5B,MAAMsL,EAAU,CACd,KAAI1K,EAAAZ,GAAA,YAAAA,EAAM,qBAAN,YAAAY,EAA0B,cAAe,CAAC,EAC9C,GAAIgH,GAAU,CAAA,CAChB,EAEA,GAAI0D,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAGvD,MAAM/J,EAAUS,EAAchC,EAAK,mBAAmB,IAAI,EAGnDmB,OAAAA,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAEzBA,CAAA,CACR,CACH,ECjEa0I,GAA+B,IAAM,CAC1C,MAAA5I,EAASd,EAAM,QAAU,QACzBwP,EAAW9P,EAAqB,EAEjC8P,GAKLC,GAAgBD,EAAU1O,CAAM,CAClC,ECKa4O,GAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmB9C5H,CAAa;AAAA,ECZF6H,GAAsB,MACjCC,GAC8B,CAC9B,MAAMrF,EAASvK,EAAM,OAErB,GAAI,CAACuK,EACH,MAAM,MAAM,oBAAoB,EAGlC,OAAOjJ,EAAaoO,GAAkC,CACpD,UAAW,CACT,OAAAnF,EACA,aAAAqF,CAAA,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAvI,EAAQ,KAAA5H,KAAW,OAE5B,MAAMsL,EAAU,CACd,KAAI1K,EAAAZ,GAAA,YAAAA,EAAM,sBAAN,YAAAY,EAA2B,cAAe,CAAC,EAC/C,GAAIgH,GAAU,CAAA,CAChB,EAEA,GAAI0D,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAEvD,MAAM/J,EAAUS,EAAchC,EAAK,oBAAoB,IAAI,EAGpDmB,OAAAA,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAE5BA,GACF6I,EAAwB7I,EAAS,CAAA,EAAIhB,EAAM,QAAU,OAAO,EAGvDgB,CAAA,CACR,CACH,EC1Ca6O,GAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmB/C/H,CAAa;AAAA,ECZFgI,GAAyB,MACpCF,GAC8B,CAC9B,MAAMrF,EAASvK,EAAM,OAErB,GAAI,CAACuK,EACH,MAAM,MAAM,oBAAoB,EAGlC,OAAOjJ,EAAauO,GAAmC,CACrD,UAAW,CACT,OAAAtF,EACA,aAAAqF,CAAA,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAvI,EAAQ,KAAA5H,KAAW,OAE5B,MAAMsL,EAAU,CACd,KAAI1K,EAAAZ,GAAA,YAAAA,EAAM,oBAAN,YAAAY,EAAyB,cAAe,CAAC,EAC7C,GAAIgH,GAAU,CAAA,CAChB,EAEA,GAAI0D,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAEvD,MAAM/J,EAAUS,EAAchC,EAAK,uBAAuB,IAAI,EAGvDmB,OAAAA,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAE5BA,GACF6I,EAAwB7I,EAAS,CAAA,EAAIhB,EAAM,QAAU,OAAO,EAGvDgB,CAAA,CACR,CACH,EC1Ca+O,GAAoC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyB/CjI,CAAa;AAAA,ECjBFkI,GAAuB,MAClCC,GAC8B,CAC9B,MAAM1F,EAASvK,EAAM,OAErB,GAAI,CAACuK,EACH,MAAM,MAAM,oBAAoB,EAG5B,KAAA,CACJ,cAAA2F,EACA,WAAAC,EACA,QAAAC,EACA,oBAAAC,EACA,oBAAAC,EACA,eAAAC,EACA,uBAAAC,CAAA,EACEP,EAEJ,OAAO3O,EAAayO,GAAmC,CACrD,UAAW,CACT,OAAAxF,EACA,YAAa,CACX,KAAM4F,EACN,GAAID,EACJ,QAAAE,CACF,EACA,eAAgBI,EAAyBD,EAAiB,KAC1D,oBAAAF,EACA,oBAAAC,CAAA,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAjJ,EAAQ,KAAA5H,KAAW,OAE5B,MAAMsL,EAAU,CACd,KAAI1K,EAAAZ,GAAA,YAAAA,EAAM,oBAAN,YAAAY,EAAyB,cAAe,CAAC,EAC7C,GAAIgH,GAAU,CAAA,CAChB,EAEA,GAAI0D,EAAQ,OAAS,EAAG,OAAO3D,EAAiB2D,CAAO,EAEvD,MAAM/J,EAAUS,EAAchC,EAAK,qBAAqB,IAAI,EAGrDmB,OAAAA,EAAA,KAAK,eAAgBI,CAAO,EAC5BJ,EAAA,KAAK,YAAaI,CAAO,EAE5BA,GACF6I,EAAwB7I,EAAS,CAAA,EAAIhB,EAAM,QAAU,OAAO,EAGvDgB,CAAA,CACR,CACH"}