{"version":3,"file":"cart.e951348a61ef40c270ad.js?ssi=0","mappings":"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","sources":["webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/subscription-promotion/logos-pro.svg","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/subscription-promotion/verbum-pro.svg","webpack://@logos/commerceweb-frontend/./Scripts/site/cart/utility/formutility.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/hooks/use-cart-events.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart-recommendations/cart-recommendations-context.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart-recommendations/cart-recommendations-carousel.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart-recommendations/index.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/checkout-button/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/wish-list-items/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/order-totals/sticky-order-totals.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/subscription-promotion/index.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/cart/payment-plan-options-summary/index.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/util/hooks/use-didomi-notice-height.js","webpack://@logos/commerceweb-frontend/./Scripts/site/util/hooks/use-reset-on-bfcache-restore.ts","webpack://@logos/commerceweb-frontend/./Scripts/site/util/hooks/use-resource-formats-and-texts.js","webpack://@logos/commerceweb-frontend/javascript/node_modules/@faithlife/command-sentence-control/dist/command-sentence.js"],"sourcesContent":["module.exports = \"data:image/svg+xml,%3csvg width='74' height='74' viewBox='0 0 74 74' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M10.2299 0H63.7701C69.4204 0 74 4.5795 74 10.2298V63.7702C74 69.4205 69.4204 74 63.7701 74H10.2299C8.77157 74 7.38579 73.6934 6.13052 73.1427C5.80566 73.0002 5.74094 72.5781 5.99162 72.3271L22.3325 55.966C22.4938 55.8296 22.704 55.7858 22.8991 55.8296C26.8483 58.8092 31.7618 60.5767 37.0894 60.5767C50.1126 60.5767 60.6691 50.0205 60.6691 36.9975C60.6691 23.9745 50.1126 13.4183 37.0894 13.4183C24.0662 13.4183 13.5098 23.9745 13.5098 36.9975C13.5098 42.0723 15.1147 46.7732 17.843 50.6209C17.9618 50.8461 17.9368 51.1275 17.7654 51.3277L1.48899 67.5626C1.23075 67.8202 0.795674 67.7428 0.665874 67.4019C0.235931 66.2728 0 65.0484 0 63.769V10.2298C0 4.5795 4.57958 0 10.2299 0ZM54.6722 36.9575C54.6722 46.837 46.7978 54.8452 37.0832 54.8452C27.3686 54.8452 19.4942 46.837 19.4942 36.9575C19.4942 27.078 27.3686 19.0698 37.0832 19.0698C46.7978 19.0698 54.6722 27.078 54.6722 36.9575ZM29.0708 31.6862C28.7801 31.6862 28.5445 31.9218 28.5445 32.2125V36.6451C28.5445 36.9358 28.7801 37.1714 29.0708 37.1714H34.34V47.4966C34.34 47.7872 34.5756 48.0228 34.8662 48.0228H39.2989C39.5896 48.0228 39.8252 47.7872 39.8252 47.4966V37.1714H45.1069C45.3975 37.1714 45.6332 36.9358 45.6332 36.6451V32.2125C45.6332 31.9218 45.3975 31.6862 45.1069 31.6862H39.8252V26.4046C39.8252 26.114 39.5896 25.8784 39.2989 25.8784H34.8662C34.5756 25.8784 34.34 26.114 34.34 26.4046V31.6862H29.0708Z' fill='%2300042F'/%3e%3c/svg%3e\"","module.exports = \"data:image/svg+xml,%3csvg width='74' height='74' viewBox='48 17 74 74' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cclipPath id='verbum-rounded'%3e%3crect x='48' y='17' width='74' height='74' rx='6'/%3e%3c/clipPath%3e%3cg clip-path='url(%23verbum-rounded)'%3e%3crect width='170' height='149' fill='%23003C71'/%3e%3cpath opacity='0.45' d='M67.1803 34.8031C66.633 33.9605 65.3734 33.7694 64.3743 33.7694H56.2953C55.2963 33.7694 54.6882 34.2211 55.166 35.1072C57.4159 39.2075 66.5895 54.158 69.5866 57.52C70.1339 58.3539 71.1155 58.2931 71.7671 57.5373L76.6145 52.1774C77.266 51.4216 77.4919 50.1967 76.9272 49.3801C74.9205 46.496 69.1522 38.1737 67.1803 34.8031Z' fill='%2361B5E4'/%3e%3cpath opacity='0.7' d='M77.4482 64.5913C76.7967 65.3471 75.7369 65.3384 75.1027 64.5652L72.7398 61.6985C72.1057 60.9253 72.123 59.6831 72.7833 58.9273L77.7089 53.3067C78.3691 52.5509 79.4289 52.5683 80.0631 53.3415L82.3652 56.1561C82.9993 56.9292 82.9819 58.1802 82.3304 58.9446L77.4396 64.6L77.4482 64.5913Z' fill='%2361B5E4'/%3e%3cpath opacity='0.85' d='M86.2309 73.7996C85.562 74.5467 84.4674 74.5467 83.8072 73.7996L78.9685 68.3962C78.2996 67.6492 78.2909 66.4243 78.9424 65.6685L83.8333 60.0045C84.4848 59.2487 85.5533 59.2487 86.2049 60.0045L91.0783 65.6946C91.7299 66.4503 91.7125 67.6839 91.0523 68.431L86.2396 73.8083L86.2309 73.7996Z' fill='%2361B5E4'/%3e%3cpath opacity='0.7' d='M102.815 34.8031C103.362 33.9605 104.622 33.7694 105.621 33.7694H113.709C114.708 33.7694 115.316 34.2211 114.829 35.1072C112.579 39.2075 103.406 54.158 100.409 57.5287C99.8613 58.3626 98.8796 58.3018 98.2281 57.546L93.3807 52.1861C92.7292 51.4303 92.5033 50.2054 93.0766 49.3888C95.0834 46.5047 100.843 38.1824 102.815 34.8118' fill='%2361B5E4'/%3e%3cpath opacity='0.45' d='M92.5553 64.5913C93.2068 65.3471 94.2667 65.3384 94.9008 64.5652L97.2637 61.6985C97.8979 60.9253 97.8805 59.6831 97.2203 58.9273L92.2947 53.3067C91.6345 52.5509 90.5746 52.5683 89.9492 53.3415L87.6471 56.1561C87.0129 56.9292 87.0303 58.1802 87.6818 58.9446L92.5727 64.6L92.5553 64.5913Z' fill='%2361B5E4'/%3e%3cpath opacity='0.2' d='M86.144 54.7053C85.5185 55.4872 84.4935 55.4872 83.8767 54.7053L81.5138 51.7604C80.8883 50.9786 80.8883 49.7015 81.5138 48.9197L83.8767 45.9748C84.5022 45.1929 85.5272 45.2016 86.144 45.9748L88.5069 48.9371C89.1237 49.7189 89.1237 50.9959 88.5069 51.7778L86.1614 54.7053H86.144Z' fill='%2361B5E4'/%3e%3cpath opacity='0.2' d='M78.2822 46.9999C78.899 47.7817 79.7937 47.8686 80.4105 47.0867L82.7821 44.2374C83.3989 43.4468 83.4423 42.1351 82.8864 41.3011L78.1345 34.1429C77.5698 33.3176 76.2928 32.6401 75.2938 32.6401H70.6288C69.6298 32.6401 69.3084 33.2916 69.8122 34.1516C71.9406 37.7915 75.9801 44.0897 78.2735 46.9999H78.2822Z' fill='%2361B5E4'/%3e%3cpath opacity='0.2' d='M88.2461 32.6401C89.2452 32.6401 89.6361 33.2482 89.1149 34.0908C88.0898 35.7414 87.2124 37.1574 86.057 38.7645C85.7616 39.1728 85.3533 39.3378 84.945 39.3378C84.5367 39.3378 84.1371 39.112 83.8418 38.7123C82.6777 37.0965 81.8003 35.75 80.7752 34.1082C80.254 33.2568 80.6449 32.6401 81.6439 32.6401H88.2548H88.2461Z' fill='%2361B5E4'/%3e%3cpath opacity='0.2' d='M91.7213 46.9999C91.1045 47.7817 90.2097 47.8686 89.5929 47.0867L87.23 44.2374C86.6132 43.4468 86.5611 42.1351 87.1258 41.3011L91.8689 34.1429C92.4249 33.3176 93.7019 32.6401 94.7096 32.6401H99.3746C100.374 32.6401 100.686 33.2916 100.183 34.1516C98.0542 37.7915 94.0147 44.0897 91.7126 46.9999H91.7213Z' fill='%2361B5E4'/%3e%3c/g%3e%3c/svg%3e\"","'use strict';\n\nconst events = require('./eventaggregator.js');\n\nif (!global.formUtility) {\n\tglobal.formUtility = {};\n}\nconst modules = global.formUtility;\n\nevents.on('cart:invalidated', function (event, moduleName) {\n\tmodules[moduleName] = false;\n});\n\nevents.on('cart:validated', function (event, moduleName) {\n\tmodules[moduleName] = true;\n});\n\nmodule.exports = {\n\tregisterModule: function (moduleName) {\n\t\tif (typeof modules[moduleName] !== 'undefined') {\n\t\t\treturn;\n\t\t}\n\n\t\tmodules[moduleName] = true;\n\t},\n\tunregisterModule: function (moduleName) {\n\t\tconst wasValid = modules[moduleName];\n\t\tdelete modules[moduleName];\n\t\tif (!wasValid) {\n\t\t\tevents.trigger('cart:validated', moduleName);\n\t\t}\n\t},\n\tisCartValid: function () {\n\t\tfor (const isModuleValid of Object.values(modules)) {\n\t\t\tif (!isModuleValid) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\tgetInvalidModules: function () {\n\t\treturn Object.keys(modules).filter(moduleName => !modules[moduleName]);\n\t},\n};\n","import { useCallback, useEffect } from 'react';\nimport eventAggregator from '../../../cart/utility/eventaggregator';\n\nexport default eventInfos => {\n\tuseEffect(() => {\n\t\tif (eventInfos) {\n\t\t\teventInfos.forEach(info => eventAggregator.on(info.eventName, info.eventHandler));\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (eventInfos) {\n\t\t\t\teventInfos.forEach(info => eventAggregator.off(info.eventName, info.eventHandler));\n\t\t\t}\n\t\t};\n\t}, [eventInfos]);\n\n\tconst triggerEvent = useCallback((eventName, data) => {\n\t\teventAggregator.trigger(eventName, data);\n\t}, []);\n\n\treturn triggerEvent;\n};\n","import React, { useCallback, useContext, useMemo } from 'react';\nimport {\n\tCommerceComponentsContextProvider,\n\ttype AddToCartButtonRequestOptions,\n\ttype AddToCartRequestArguments,\n\ttype CatalogProductData,\n} from '@faithlife/commerce-components';\nimport type { UseStatusResult } from '@faithlife/commerce-components';\nimport CartClient from '../../clients/cart-client';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport { useLocalization } from '../../localization';\nimport { RouteContext } from '../../route-context';\nimport SharedWishListFormProvider from '../shared/wish-list/shared-wish-list-form-provider';\nimport { WishListProductBatchProvider } from '../add-to-wish-list/hooks';\nimport { useOnWishlistToggle } from '../builder/hooks/use-on-wishlist-toggle';\nimport { useWishlistMembership } from '../builder/hooks/use-wishlist-membership';\nimport { useCurrentUser } from '../per-user-data/per-user-data-context';\nimport { hasValidReviewData } from '../shared/ratings/review-data';\n\nexport interface CartRecommendation {\n\tproductId: string;\n\tproductName: string;\n\tproductImageUri: string | null;\n\tproductPageUri: string | null;\n\tisPrepubProduct: boolean;\n\tauthor: string | null;\n\tprimarySkuId: string;\n\tuserPrice: string;\n\tanchorPrice: string | null;\n\tisDiscounted: boolean;\n\tanchorSavingsLabel: string | null;\n\tratings: {\n\t\tnumberOfRatings: number;\n\t\taverageRating: number | null;\n\t\tshouldDisplayStars: boolean;\n\t} | null;\n}\n\ninterface SkuData {\n\tisPrepubSku: boolean;\n}\n\nfunction mapToProductData(recommendation: CartRecommendation): CatalogProductData {\n\tconst averageRating = recommendation.ratings?.averageRating ?? 0;\n\tconst reviewCount = recommendation.ratings?.numberOfRatings ?? 0;\n\tconst shouldDisplayRatings =\n\t\trecommendation.ratings?.shouldDisplayStars === true && hasValidReviewData(averageRating, reviewCount);\n\n\treturn {\n\t\tid: recommendation.productId,\n\t\tname: recommendation.productName,\n\t\timageUri: recommendation.productImageUri ?? undefined,\n\t\tproductPageUri: recommendation.productPageUri ?? undefined,\n\t\tauthor: recommendation.author ?? undefined,\n\t\tprimarySkuId: recommendation.primarySkuId,\n\t\tskus: [\n\t\t\t{\n\t\t\t\tid: recommendation.primarySkuId,\n\t\t\t\tsalePrice: recommendation.userPrice,\n\t\t\t\tanchorPrice: recommendation.anchorPrice ?? undefined,\n\t\t\t\tanchorLabel: recommendation.anchorSavingsLabel ?? undefined,\n\t\t\t\tpriceVariant: recommendation.anchorSavingsLabel ? (recommendation.isDiscounted ? 'sale' : 'value') : undefined,\n\t\t\t},\n\t\t],\n\t\trating: shouldDisplayRatings ? averageRating : undefined,\n\t\treviewCount: shouldDisplayRatings ? reviewCount : undefined,\n\t};\n}\n\ninterface CartRecommendationsContextProps {\n\trecommendations: CartRecommendation[];\n\tupdateCartUrl: string;\n\tchildren: React.ReactNode;\n}\n\nconst CartRecommendationsProductIdsContext = React.createContext<{ productId: string }[]>([]);\n\nexport function useCartRecommendationsProductIds() {\n\treturn React.useContext(CartRecommendationsProductIdsContext);\n}\n\nexport function CartRecommendationsContext({\n\trecommendations,\n\tupdateCartUrl,\n\tchildren,\n}: CartRecommendationsContextProps) {\n\tconst { routes } = useContext(RouteContext);\n\treturn (\n\t\t<SharedWishListFormProvider>\n\t\t\t<WishListProductBatchProvider\n\t\t\t\twishListsProductsUrl={routes.WishListsGetViewModelsForProductRequests ?? '/wishlists/products'}\n\t\t\t>\n\t\t\t\t<CartRecommendationsContextCore recommendations={recommendations} updateCartUrl={updateCartUrl}>\n\t\t\t\t\t{children}\n\t\t\t\t</CartRecommendationsContextCore>\n\t\t\t</WishListProductBatchProvider>\n\t\t</SharedWishListFormProvider>\n\t);\n}\n\nfunction CartRecommendationsContextCore({ recommendations, updateCartUrl, children }: CartRecommendationsContextProps) {\n\tconst addToCartButtonResources = useLocalization('CommerceWeb.Resources.Shared.AddToMiniCartButton');\n\tconst { isSignedIn } = useCurrentUser();\n\n\tconst { productDataByProductId, skuDataBySkuId, productIds } = useMemo(() => {\n\t\tconst productDataByProductId: Record<string, CatalogProductData> = {};\n\t\tconst skuDataBySkuId: Record<string, SkuData> = {};\n\t\tconst productIds: { productId: string }[] = [];\n\n\t\trecommendations.forEach(recommendation => {\n\t\t\tconst catalogProductData = mapToProductData(recommendation);\n\t\t\tproductDataByProductId[catalogProductData.id] = catalogProductData;\n\n\t\t\tif (catalogProductData.primarySkuId) {\n\t\t\t\tskuDataBySkuId[catalogProductData.primarySkuId] = { isPrepubSku: recommendation.isPrepubProduct };\n\t\t\t}\n\n\t\t\tproductIds.push({ productId: catalogProductData.id });\n\t\t});\n\n\t\treturn { productDataByProductId, skuDataBySkuId, productIds };\n\t}, [recommendations]);\n\n\tconst useStatus = useCallback(\n\t\t(type?: 'SKU' | 'SPOID', id?: string): UseStatusResult => {\n\t\t\tif (type !== 'SKU' || !id) {\n\t\t\t\treturn { status: null, isLoading: false, isError: false, errorType: null };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tstatus: {\n\t\t\t\t\tisOwned: false,\n\t\t\t\t\tbuttonText: skuDataBySkuId[id]?.isPrepubSku\n\t\t\t\t\t\t? addToCartButtonResources.preorder\n\t\t\t\t\t\t: addToCartButtonResources.addToCart,\n\t\t\t\t},\n\t\t\t\tisLoading: false,\n\t\t\t\tisError: false,\n\t\t\t\terrorType: null,\n\t\t\t};\n\t\t},\n\t\t[addToCartButtonResources, skuDataBySkuId]\n\t);\n\n\tconst onAddToCartRequest = useCallback(\n\t\tasync (args: AddToCartRequestArguments, options?: AddToCartButtonRequestOptions) => {\n\t\t\tconst skuItems = args.items.filter(item => item.type === 'SKU');\n\t\t\tif (skuItems.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst skuIds = skuItems.map(item => item.identifier);\n\t\t\toptions?.onRequestStart?.();\n\n\t\t\teventAggregator.trigger('cart:updating');\n\t\t\ttry {\n\t\t\t\tconst newCart = await CartClient.updateCartAsync(updateCartUrl, { skuIdsToAdd: skuIds });\n\n\t\t\t\tfor (const item of newCart.order?.analyticsTelemetry ?? []) {\n\t\t\t\t\t(window.dataLayer ??= []).push(item);\n\t\t\t\t}\n\n\t\t\t\teventAggregator.trigger('cart:updated', newCart);\n\t\t\t\toptions?.onSuccess?.();\n\t\t\t} catch (e) {\n\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t\toptions?.onError?.(e instanceof Error ? e : new Error(String(e)));\n\t\t\t} finally {\n\t\t\t\toptions?.onRequestFinish?.();\n\t\t\t}\n\t\t},\n\t\t[updateCartUrl]\n\t);\n\n\t// Mirrors `builder/provider.tsx`: `onWishlistToggle(productId)` triggers the host's\n\t// add-to-wishlist flow. The wish-list batch endpoint requires a sku id per product;\n\t// we derive the canonical primary sku from the static catalog data built above.\n\tconst getWishlistTogglePrimarySkuId = useCallback(\n\t\t(productId: string) => productDataByProductId[productId]?.primarySkuId,\n\t\t[productDataByProductId]\n\t);\n\n\tconst onWishlistToggle = useOnWishlistToggle({\n\t\tgetPrimarySkuId: getWishlistTogglePrimarySkuId,\n\t\twishListsProductsUrlFallback: '/wishlists/products',\n\t\terrorContext: 'CartRecommendationsContext',\n\t});\n\n\tconst { getWishlistData } = useWishlistMembership({\n\t\tstaticProductData: productDataByProductId,\n\t});\n\n\tconst contextValue = useMemo(\n\t\t() => ({\n\t\t\tstaticProductData: productDataByProductId,\n\t\t\tgetProductData: async (id: string) => productDataByProductId[id] ?? null,\n\t\t\tuseStatus,\n\t\t\tonAddToCartRequest,\n\t\t\tonWishlistToggle: isSignedIn ? onWishlistToggle : undefined,\n\t\t\tgetWishlistData: isSignedIn ? getWishlistData : undefined,\n\t\t\tresources: {\n\t\t\t\taddToCartButton: addToCartButtonResources,\n\t\t\t},\n\t\t}),\n\t\t[\n\t\t\tproductDataByProductId,\n\t\t\tuseStatus,\n\t\t\tonAddToCartRequest,\n\t\t\tonWishlistToggle,\n\t\t\tgetWishlistData,\n\t\t\taddToCartButtonResources,\n\t\t\tisSignedIn,\n\t\t]\n\t);\n\n\treturn (\n\t\t<CartRecommendationsProductIdsContext.Provider value={productIds}>\n\t\t\t<CommerceComponentsContextProvider value={contextValue}>{children}</CommerceComponentsContextProvider>\n\t\t</CartRecommendationsProductIdsContext.Provider>\n\t);\n}\n","import React from 'react';\nimport { CarouselProduct, Typography } from '@faithlife/commerce-components';\nimport useScreensize from '../../util/hooks/use-screensize';\nimport {\n\tCartRecommendationsContext,\n\tuseCartRecommendationsProductIds,\n\ttype CartRecommendation,\n} from './cart-recommendations-context';\n\ninterface SkeletonCarouselProps {\n\tmaxNumberOfRecommendations: number;\n}\n\ninterface CartRecommendationsCarouselProps {\n\trecommendations: CartRecommendation[];\n\tmaxNumberOfRecommendations: number;\n\tisLoading: boolean;\n\theading: string;\n\tupdateCartUrl: string;\n}\n\nconst RecommendationSkeleton = () => (\n\t<div className=\"swiper-slide swiper-slide-active h-auto w-fit mr-[48px]\">\n\t\t<div className=\"h-full w-[180px]\">\n\t\t\t<article className=\"tw-preflight group flex flex-col border-t border-primary-200 h-full\">\n\t\t\t\t<div className=\"relative h-[240px] overflow-hidden\">\n\t\t\t\t\t<div className=\"pt-sp32 flex h-full w-full items-end justify-center overflow-hidden pb-sp24\">\n\t\t\t\t\t\t<div className=\"h-[196px] w-[127px] animate-pulse rounded bg-primary-200\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex flex-1 flex-col justify-between gap-sp16 pb-sp16\">\n\t\t\t\t\t<div className=\"flex flex-col gap-sp16\">\n\t\t\t\t\t\t<div className=\"flex flex-col gap-sp8\">\n\t\t\t\t\t\t\t<div className=\"w-3/4 h-[20px] animate-pulse rounded bg-primary-200\" />\n\t\t\t\t\t\t\t<div className=\"w-full h-[16px] animate-pulse rounded bg-primary-200\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex flex-col gap-sp20\">\n\t\t\t\t\t\t<div className=\"w-1/2 h-[28px] animate-pulse rounded bg-primary-200\" />\n\t\t\t\t\t\t<div className=\"tw-preflight inline-flex items-center justify-center gap-sp12 rounded-[2px] text-center transition-colors duration-short focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary motion-reduce:transition-none buttonTextLg py-sp14 px-sp16 bg-transparent border border-primary text-primary hover:ring-1 hover:ring-inset hover:ring-primary active:border-primary-500 active:ring-1 active:ring-inset active:ring-primary-500 disabled:border-secondary-200 disabled:text-primary disabled:opacity-[0.33] disabled:cursor-not-allowed w-full self-start\">\n\t\t\t\t\t\t\t<span className=\"block w-1/2 h-[18px] animate-pulse rounded bg-primary-200\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t</div>\n\t</div>\n);\n\nconst RecommendationsCarouselSkeleton = ({ maxNumberOfRecommendations }: SkeletonCarouselProps) => (\n\t<div className=\"tw-preflight relative\">\n\t\t<div className=\"overflow-hidden\">\n\t\t\t<div className=\"swiper swiper-initialized swiper-horizontal overflow-visible swiper-backface-hidden items-stretch\">\n\t\t\t\t<div className=\"swiper-wrapper\">\n\t\t\t\t\t{Array.from({ length: maxNumberOfRecommendations }).map((_, index) => (\n\t\t\t\t\t\t<RecommendationSkeleton key={index} />\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n);\n\nconst RecommendationsCarouselContent = () => {\n\tconst productIds = useCartRecommendationsProductIds();\n\tconst { isDesktop } = useScreensize();\n\treturn (\n\t\t<CarouselProduct\n\t\t\tkey={isDesktop ? 'desktop' : 'mobile'}\n\t\t\tproductIds={productIds}\n\t\t\tshowArrows={isDesktop}\n\t\t\tscale=\"small\"\n\t\t\tlinkTarget=\"blank\"\n\t\t/>\n\t);\n};\n\nexport const CartRecommendationsCarousel = ({\n\trecommendations,\n\tmaxNumberOfRecommendations,\n\tisLoading,\n\theading,\n\tupdateCartUrl,\n}: CartRecommendationsCarouselProps) => {\n\tconst isEmpty = !isLoading && !recommendations.length;\n\n\tif (isEmpty) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-4 isolate\">\n\t\t\t<Typography variant=\"headingH5\" className=\"font-medium text-primary-500\">\n\t\t\t\t{heading}\n\t\t\t</Typography>\n\t\t\t<div className=\"flex flex-col border-0 border-t border-solid border-[#00042F]\">\n\t\t\t\t{isLoading ? (\n\t\t\t\t\t<RecommendationsCarouselSkeleton maxNumberOfRecommendations={maxNumberOfRecommendations} />\n\t\t\t\t) : (\n\t\t\t\t\t<CartRecommendationsContext recommendations={recommendations ?? []} updateCartUrl={updateCartUrl}>\n\t\t\t\t\t\t<RecommendationsCarouselContent />\n\t\t\t\t\t</CartRecommendationsContext>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n","import React from 'react';\nimport { useLocalization } from '../../localization';\nimport { CartRecommendationsCarousel } from './cart-recommendations-carousel';\nimport { CartRecommendation } from './cart-recommendations-context';\n\ninterface CartRecommendationsProps {\n\tcartRecommendationsInfo: {\n\t\trecommendations: CartRecommendation[];\n\t\tmaxNumberOfRecommendations: number;\n\t\tupdateCartUrl: string;\n\t};\n\tisLoading: boolean;\n}\n\nexport const CartRecommendations = ({ cartRecommendationsInfo, isLoading }: CartRecommendationsProps) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Cart.Cart');\n\n\tconst { maxNumberOfRecommendations, recommendations, updateCartUrl } = cartRecommendationsInfo;\n\n\tif (!maxNumberOfRecommendations) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<CartRecommendationsCarousel\n\t\t\trecommendations={recommendations}\n\t\t\tmaxNumberOfRecommendations={maxNumberOfRecommendations}\n\t\t\tisLoading={isLoading}\n\t\t\theading={resources.recommendationsTitle}\n\t\t\tupdateCartUrl={updateCartUrl}\n\t\t/>\n\t);\n};\n","import React, { useCallback, useState } from 'react';\nimport { Typography } from '@faithlife/commerce-components';\nimport { useLocalization } from '../../localization';\nimport useResetOnBfcacheRestore from '../../util/hooks/use-reset-on-bfcache-restore';\nimport { useCartItems } from '../checkout-shared/useCartItems';\n\nexport default function CheckoutButton({\n\tantiForgeryToken,\n\tcartCheckoutUrl,\n\tcartFixCartUnavailabilityIssuesUrl,\n\tcartItems: initialCartItems,\n\tconcurrencyToken: initialConcurrencyToken,\n}) {\n\tconst { Next, RemoveItem, RemoveItems } = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst { concurrencyToken, isCartValid, shouldBlockPlaceOrderButton, numberOfItemsToBeRemoved } = useCartItems(\n\t\tinitialCartItems,\n\t\tinitialConcurrencyToken\n\t);\n\tconst [isNavigating, setIsNavigating] = useState(false);\n\n\tuseResetOnBfcacheRestore(useCallback(() => setIsNavigating(false), []));\n\n\tconst isDisabled = !isCartValid || shouldBlockPlaceOrderButton || isNavigating;\n\n\treturn (\n\t\t<div className=\"clear-both mt-6 w-full\">\n\t\t\t{numberOfItemsToBeRemoved > 0 ? (\n\t\t\t\t<form action={cartFixCartUnavailabilityIssuesUrl} method=\"POST\" className=\"w-full\">\n\t\t\t\t\t<div dangerouslySetInnerHTML={{ __html: antiForgeryToken }} />\n\t\t\t\t\t<input type=\"hidden\" name=\"concurrencyToken\" value={concurrencyToken} />\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tclassName=\"flex min-h-[60px] w-full items-center justify-center border-0 bg-[#1E6AFE] px-6 text-center text-[18px] font-normal text-white transition-[background-color] hover:bg-blue-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui1\">\n\t\t\t\t\t\t\t{numberOfItemsToBeRemoved === 1 ? RemoveItem : RemoveItems}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</button>\n\t\t\t\t</form>\n\t\t\t) : (\n\t\t\t\t<a\n\t\t\t\t\thref={cartCheckoutUrl}\n\t\t\t\t\trel=\"nofollow\"\n\t\t\t\t\tclassName={`flex min-h-[60px] w-full items-center justify-center border-0 px-6 text-center text-[18px] font-normal text-white transition-[background-color] hover:text-[white] ${\n\t\t\t\t\t\tisDisabled\n\t\t\t\t\t\t\t? 'cursor-not-allowed bg-[#9BB2F3] pointer-events-none'\n\t\t\t\t\t\t\t: 'cursor-pointer bg-[#1E6AFE] hover:bg-blue-400'\n\t\t\t\t\t}`}\n\t\t\t\t\ttitle={Next}\n\t\t\t\t\taria-disabled={isDisabled}\n\t\t\t\t\tdata-testid=\"shopping-cart-next\"\n\t\t\t\t\tonClick={e => {\n\t\t\t\t\t\tif (isDisabled) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsetIsNavigating(true);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Typography tag=\"span\" variant=\"ui1\">\n\t\t\t\t\t\t{Next}\n\t\t\t\t\t</Typography>\n\t\t\t\t</a>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React, { useEffect, useState } from 'react';\nimport { ProgressIndicator } from '@faithlife/commerce-components';\nimport { Typography } from '@faithlife/commerce-components';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport CartClient from '../../clients/cart-client';\nimport { useCartEffect } from '../checkout-shared/useCartEffect';\nimport { useLocalization } from '../../localization';\nimport { ShoppingCartItem } from '../shopping-cart-items/ShoppingCartItem';\n\nfunction useListItems(updateUrl, removeUrl, listName) {\n\tasync function removeWishListItem(id) {\n\t\ttry {\n\t\t\tawait CartClient.removeWishlistItems(removeUrl, [id]);\n\t\t\treturn true;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync function addWishListItemToCart(id, skuIds) {\n\t\tconst shouldRemoveItems = listName === 'saveForLater';\n\t\tif (!skuIds || !skuIds.length) {\n\t\t\treturn;\n\t\t}\n\t\tif (shouldRemoveItems) {\n\t\t\tif (!(await removeWishListItem(id))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\teventAggregator.trigger('cart:updating');\n\t\ttry {\n\t\t\tconst newCart = await CartClient.updateCartAsync(updateUrl, {\n\t\t\t\tskuIdsToAdd: skuIds,\n\t\t\t});\n\n\t\t\tfor (const item of newCart.order?.analyticsTelemetry ?? []) {\n\t\t\t\t(window.dataLayer ??= []).push(item);\n\t\t\t}\n\n\t\t\teventAggregator.trigger('cart:updated', newCart);\n\t\t} catch (e) {\n\t\t\teventAggregator.trigger('cart:error');\n\t\t}\n\t}\n\treturn {\n\t\tremoveWishListItem,\n\t\taddWishListItemToCart,\n\t};\n}\n\nfunction WishList({ items, title, addWishListItemToCart, removeWishListItem, usesForeignCurrency }) {\n\treturn (\n\t\titems.length > 0 && (\n\t\t\t<div className=\"flex flex-col gap-[24px]\">\n\t\t\t\t<Typography variant=\"headingH5\" className=\"font-medium text-primary-500\">\n\t\t\t\t\t{title}\n\t\t\t\t</Typography>\n\t\t\t\t{items.map(item => (\n\t\t\t\t\t<ShoppingCartItem\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tcartItems={items}\n\t\t\t\t\t\tisModifiable={true}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\t\taddWishListItemToCart={addWishListItemToCart}\n\t\t\t\t\t\tremoveWishListItem={removeWishListItem}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t)\n\t);\n}\n\nexport default function WishListItems({\n\tcartItems: initialCartItems,\n\tcartRemoveWishListItems,\n\tcartUpdateCartUrl,\n\tgetWishlistUrl,\n\tusesForeignCurrency,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.WishList');\n\tconst [cartItems, setCartItems] = useState(initialCartItems);\n\tconst [hasMultipleWishLists, setHasMultipleWishLists] = useState(false);\n\tconst [savedForLaterItems, setInitialSavedForLaterItems] = useState([]);\n\tconst [wishListItems, setInitialWishListItems] = useState([]);\n\tconst [updating, setUpdating] = useState(false);\n\tuseEffect(() => {\n\t\tasync function loadWishListAsync() {\n\t\t\tsetUpdating(true);\n\t\t\ttry {\n\t\t\t\tconst {\n\t\t\t\t\thasMultipleWishLists: newHasMultipleWishLists,\n\t\t\t\t\tsavedForLaterItems: newSavedForLaterItems,\n\t\t\t\t\twishListItems: newWishListItems,\n\t\t\t\t} = await CartClient.getWishlist(\n\t\t\t\t\tgetWishlistUrl,\n\t\t\t\t\tcartItems.flatMap(it => it.sku ?? it.skuIds)\n\t\t\t\t);\n\t\t\t\tsetHasMultipleWishLists(newHasMultipleWishLists);\n\t\t\t\tsetInitialSavedForLaterItems(newSavedForLaterItems);\n\t\t\t\tsetInitialWishListItems(newWishListItems);\n\t\t\t} finally {\n\t\t\t\tsetUpdating(false);\n\t\t\t}\n\t\t}\n\t\tloadWishListAsync();\n\t\teventAggregator.on('wishlist:updating', loadWishListAsync);\n\t\treturn () => {\n\t\t\teventAggregator.off('wishlist:updating');\n\t\t};\n\t}, [getWishlistUrl, cartItems]);\n\tuseCartEffect(cart => {\n\t\tsetCartItems(cart.order.lineItems);\n\t});\n\tconst { removeWishListItem: removeSavedItem, addWishListItemToCart: addSavedItemToCart } = useListItems(\n\t\tcartUpdateCartUrl,\n\t\tcartRemoveWishListItems,\n\t\t'saveForLater'\n\t);\n\tconst { removeWishListItem, addWishListItemToCart } = useListItems(\n\t\tcartUpdateCartUrl,\n\t\tcartRemoveWishListItems,\n\t\t'wishlist'\n\t);\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-[72px]\">\n\t\t\t{updating ? (\n\t\t\t\t<div className=\"my-8 flex items-center justify-center\">\n\t\t\t\t\t<ProgressIndicator className=\"h-16 w-16\" />\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{savedForLaterItems.length > 0 && (\n\t\t\t\t\t\t<WishList\n\t\t\t\t\t\t\taddWishListItemToCart={addSavedItemToCart}\n\t\t\t\t\t\t\titems={savedForLaterItems}\n\t\t\t\t\t\t\tremoveWishListItem={removeSavedItem}\n\t\t\t\t\t\t\ttitle={resources.SavedForLater}\n\t\t\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{wishListItems.length > 0 && (\n\t\t\t\t\t\t<WishList\n\t\t\t\t\t\t\taddWishListItemToCart={addWishListItemToCart}\n\t\t\t\t\t\t\titems={wishListItems}\n\t\t\t\t\t\t\tremoveWishListItem={removeWishListItem}\n\t\t\t\t\t\t\ttitle={hasMultipleWishLists ? resources.MultipleWishListTitle : resources.SingleWishListTitle}\n\t\t\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport { Typography } from '@faithlife/commerce-components';\nimport { useLocalization } from '../../localization';\nimport { useCartEffect } from '../checkout-shared/useCartEffect';\n\nexport function useStickyCheckoutFooterHandler() {\n\tconst [isStickyBannerVisible, setIsStickyBannerVisible] = useState(false);\n\tconst intersectionTargetRef = useRef(null);\n\n\tconst intersectionObserverCallback = useCallback(entries => {\n\t\tconst entry = entries[0];\n\t\tif (entry.isIntersecting) {\n\t\t\tsetIsStickyBannerVisible(false);\n\t\t} else {\n\t\t\tsetIsStickyBannerVisible(true);\n\t\t}\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst intersectionTarget = intersectionTargetRef.current;\n\t\tif (!intersectionTarget) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(intersectionObserverCallback, {\n\t\t\troot: null,\n\t\t\trootMargin: '0px',\n\t\t\tthreshold: 0.33,\n\t\t});\n\t\tobserver.observe(intersectionTarget);\n\t\treturn () => observer.disconnect();\n\t}, [intersectionObserverCallback]);\n\n\treturn { intersectionTargetRef, isStickyBannerVisible };\n}\n\nexport default function StickyOrderTotals({\n\tisStickyBannerVisible,\n\ttotalItemCount: initialTotalItemCount,\n\ttotalUsdCurrencyText: initialTotalUsdCurrencyText,\n\tchildren,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.OrderTotals');\n\n\tconst [totalItemCount, setTotalItemCount] = useState(initialTotalItemCount);\n\tconst [totalUsdCurrencyText, setTotalUsdCurrencyText] = useState(initialTotalUsdCurrencyText);\n\n\tuseCartEffect(cart => {\n\t\tsetTotalItemCount((cart.order?.lineItems?.length ?? 0) + (cart.order?.subscribableLineItems?.length ?? 0));\n\t\tsetTotalUsdCurrencyText(cart.order?.totalUsdCurrencyText);\n\t});\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden={!isStickyBannerVisible}\n\t\t\tinert={isStickyBannerVisible ? undefined : ''}\n\t\t\tclassName={`tw-preflight fixed bottom-0 left-0 right-0 z-[1000] transition-transform duration-300 ${\n\t\t\t\tisStickyBannerVisible ? 'translate-y-0' : 'translate-y-full'\n\t\t\t}`}\n\t\t>\n\t\t\t<div className=\"flex flex-col gap-3 border-t border-solid border-[#00042F] bg-white px-[18px] py-4\">\n\t\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t\t<Typography className=\"text-[16px] text-[#00042F]\" variant=\"bodySmall\">\n\t\t\t\t\t\t<span className=\"font-semibold pr-1\">{totalItemCount}</span>\n\t\t\t\t\t\t<span>{totalItemCount === 1 ? resources.Item : resources.Items}</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography className=\"text-[16px] text-[#00042F]\" variant=\"bodySmall\">\n\t\t\t\t\t\t{resources.Total} <span className=\"font-semibold\">{totalUsdCurrencyText}</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport { Checkbox, SubscriptionIcon, Typography } from '@faithlife/commerce-components';\nimport useCartEvents from '../hooks/use-cart-events';\nimport useResourceFormatsAndTexts from '../../../util/hooks/use-resource-formats-and-texts';\nimport CartClient from '../../../clients/cart-client';\nimport { useLocalization } from '../../../localization';\n\nimport LogosPro from './logos-pro.svg';\nimport VerbumPro from './verbum-pro.svg';\n\ntype PeriodUnit = 'day' | 'month' | 'year';\n\ninterface FreeTrialInfo {\n\tperiodLength: number;\n\tperiodUnit: PeriodUnit;\n}\n\ninterface SubscriptionPromotionRoutes {\n\tAddSubscribableProductOptionIdToCartUrl: string;\n\tGetCartUrl: string;\n\tLearnMoreUrl: string;\n}\n\ninterface SubscriptionPromotionProps {\n\tsubscribableProductTitle: string;\n\tfreeTrialInfo?: FreeTrialInfo | null;\n\tsubscribableProductOptionId?: string | null;\n\tlogosOrVerbum: string;\n\tpercentOff: string | number;\n\tpercentCashBack: string | number;\n\tpricePerTerm: string;\n\troutes: SubscriptionPromotionRoutes;\n}\n\nconst singleTermFreeTrialResourceKeyByPeriodUnit: Record<PeriodUnit, string> = {\n\tday: 'TryLogosOrVerbumFreeForOneDay',\n\tmonth: 'TryLogosOrVerbumFreeForOneMonth',\n\tyear: 'TryLogosOrVerbumFreeForOneYear',\n};\n\nconst multipleTermFreeTrialResourceKeyByPeriodUnit: Record<PeriodUnit, string> = {\n\tday: 'TryLogosOrVerbumFreeForDays',\n\tmonth: 'TryLogosOrVerbumFreeForMonths',\n\tyear: 'TryLogosOrVerbumFreeForYears',\n};\n\nfunction getSubscriptionCheckboxLabelResource(\n\tfreeTrialInfo: FreeTrialInfo | null | undefined,\n\tresources: Record<string, string>\n): string {\n\tif (!freeTrialInfo) {\n\t\treturn resources.SubscribeToPro;\n\t}\n\n\tconst resourceKey =\n\t\tfreeTrialInfo.periodLength === 1\n\t\t\t? singleTermFreeTrialResourceKeyByPeriodUnit[freeTrialInfo.periodUnit]\n\t\t\t: multipleTermFreeTrialResourceKeyByPeriodUnit[freeTrialInfo.periodUnit];\n\n\treturn resources[resourceKey] ?? resources.AddFreeTrial;\n}\n\nconst SubscriptionPromotion = ({\n\tsubscribableProductTitle,\n\tfreeTrialInfo,\n\tsubscribableProductOptionId,\n\tlogosOrVerbum,\n\tpercentOff,\n\tpercentCashBack,\n\tpricePerTerm,\n\troutes,\n}: SubscriptionPromotionProps) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.ShoppingCart.SubscriptionPromotion');\n\n\tconst resourceFormats = useResourceFormatsAndTexts({\n\t\tlocale: undefined,\n\t\tbillingMode: 'Monthly',\n\t\tfreeTrialPeriodLength: freeTrialInfo?.periodLength,\n\t\tfreeTrialPeriodUnit: freeTrialInfo?.periodUnit,\n\t\tavailableLogosTieredSubscriptionLevels: undefined,\n\t\tsubscriptionResources: resources,\n\t});\n\n\tconst freeTrialPeriodUnitText = resourceFormats?.freeTrialPeriodUnitText;\n\n\tconst triggerEvent = useCartEvents();\n\tconst [isSubscriptionPromotionAddedToCart, setIsSubscriptionPromotionAddedToCart] = useState<boolean>(false);\n\tconst [isSubscriptionCheckboxChecked, setIsSubscriptionCheckboxChecked] = useState<boolean>(false);\n\n\tconst handleAddSubscriptionPromotion = useCallback(async () => {\n\t\tif (isSubscriptionCheckboxChecked || isSubscriptionPromotionAddedToCart) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetIsSubscriptionCheckboxChecked(true);\n\t\ttriggerEvent('cart:updating');\n\n\t\ttry {\n\t\t\tawait CartClient.addSubscribableProductOptionIdToCart(\n\t\t\t\troutes.AddSubscribableProductOptionIdToCartUrl,\n\t\t\t\tsubscribableProductOptionId\n\t\t\t);\n\n\t\t\tsetIsSubscriptionPromotionAddedToCart(true);\n\n\t\t\tconst newCartData = await CartClient.getCart(routes.GetCartUrl);\n\t\t\ttriggerEvent('cart:updated', newCartData);\n\t\t} catch (e) {\n\t\t\tconsole.error('Failed to add subscription promotion to cart:', e);\n\n\t\t\tsetIsSubscriptionPromotionAddedToCart(false);\n\t\t\tsetIsSubscriptionCheckboxChecked(false);\n\n\t\t\ttriggerEvent('cart:error');\n\t\t}\n\t}, [\n\t\tisSubscriptionCheckboxChecked,\n\t\tisSubscriptionPromotionAddedToCart,\n\t\troutes?.AddSubscribableProductOptionIdToCartUrl,\n\t\troutes?.GetCartUrl,\n\t\tsubscribableProductOptionId,\n\t\ttriggerEvent,\n\t]);\n\n\tuseEffect(() => {\n\t\tsetIsSubscriptionPromotionAddedToCart(false);\n\t\tsetIsSubscriptionCheckboxChecked(false);\n\t}, [subscribableProductOptionId]);\n\n\tif (!subscribableProductOptionId || isSubscriptionPromotionAddedToCart) {\n\t\treturn null;\n\t}\n\n\tconst checkboxLabelTemplate = getSubscriptionCheckboxLabelResource(freeTrialInfo, resources);\n\tconst headingTemplate = freeTrialInfo\n\t\t? resources.WantPercentSavingsOffThisPurchase\n\t\t: resources.SubscribersSavePercentSavingsExtraOnThisPurchase;\n\tconst bodyTemplate = freeTrialInfo ? resources.SubscribeForPerks : resources.PlusEarnPercentSavingsLater;\n\n\tconst tryLogosFreeCheckboxLabel = (\n\t\t<CommandSentence key={checkboxLabelTemplate} Container=\"span\" template={checkboxLabelTemplate}>\n\t\t\t<CommandSentence.Field name=\"LOGOS_OR_VERBUM\">{logosOrVerbum}</CommandSentence.Field>\n\t\t\t<CommandSentence.Field name=\"SUB_OPTION_TITLE\">{subscribableProductTitle}</CommandSentence.Field>\n\t\t\t<CommandSentence.Field name=\"NUMBER_UNITS\">{freeTrialInfo?.periodLength}</CommandSentence.Field>\n\t\t</CommandSentence>\n\t);\n\n\treturn (\n\t\t<div className=\"flex flex-row mb-4 p-[24px_18px] md:p-[32px_24px] rounded overflow-hidden gap-[18px] bg-primary-100\">\n\t\t\t<div className=\"shrink-0 flex flex-col items-center gap-3\">\n\t\t\t\t<img\n\t\t\t\t\tsrc={logosOrVerbum === 'Logos' ? LogosPro : VerbumPro}\n\t\t\t\t\talt={resources.ProSubscriptionImage}\n\t\t\t\t\tclassName=\"w-[74px] h-[74px] max-w-none\"\n\t\t\t\t/>\n\t\t\t\t<div className=\"inline-flex items-center gap-1.5 border border-solid border-primary-500 rounded-full pt-1 pb-1 pl-1 pr-1.5\">\n\t\t\t\t\t<SubscriptionIcon className=\"w-4 h-4 text-primary-500\" />\n\t\t\t\t\t<span className=\"font-primary font-medium leading-[100%] tracking-normal align-middle text-primary-500 pr-1\">\n\t\t\t\t\t\t{subscribableProductTitle}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div className=\"flex flex-col flex-1 gap-[24px]\">\n\t\t\t\t<div className=\"flex flex-col gap-[8px]\">\n\t\t\t\t\t<Typography tag=\"h6\" variant=\"headingH6\" className=\"leading-[120%] tracking-normal text-primary-500 mt-0\">\n\t\t\t\t\t\t<CommandSentence key={headingTemplate} Container=\"span\" template={headingTemplate}>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENT_SAVINGS\">{percentOff}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENT_CASH_BACK\">{percentCashBack}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<Typography tag=\"p\" variant=\"ui4\" className=\"leading-[125%] tracking-normal text-primary-500 max-w-[480px]\">\n\t\t\t\t\t\t<CommandSentence key={bodyTemplate} Container=\"span\" template={bodyTemplate}>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"LOGOS_OR_VERBUM\">{logosOrVerbum}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENT_SAVINGS\">{percentOff}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENT_CASH_BACK\">{percentCashBack}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"FREE_TRIAL_PERIOD\">{freeTrialInfo?.periodLength}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"FREE_TRIAL_PERIOD_UNIT\">\n\t\t\t\t\t\t\t\t{freeTrialInfo ? freeTrialPeriodUnitText : undefined}\n\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{pricePerTerm}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"TERM_KIND\">{resources.MonthPeriodUnit}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>{' '}\n\t\t\t\t\t\t<a href={routes.LearnMoreUrl} className=\"text-primary-500 underline\">\n\t\t\t\t\t\t\t{resources.LearnMore}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"flex flex-col gap-[8px]\">\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tlabel={tryLogosFreeCheckboxLabel}\n\t\t\t\t\t\tonChange={handleAddSubscriptionPromotion}\n\t\t\t\t\t\tchecked={isSubscriptionCheckboxChecked}\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\ttypography=\"ui2\"\n\t\t\t\t\t\tclassName=\"items-start [&>span:first-child]:mt-[2px] **:leading-[135%] **:tracking-[0%]\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Typography tag=\"p\" variant=\"ui4\" className=\"leading-[125%] tracking-normal text-primary-500 not-italic\">\n\t\t\t\t\t\t{resources.ExclusionsApply}\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default SubscriptionPromotion;\n","import React, { useState, useEffect } from 'react';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { Typography, ProgressIndicator } from '@faithlife/commerce-components';\nimport CartClient from '../../clients/cart-client';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport { CartRecommendations } from '../cart-recommendations';\nimport CheckoutButton from '../checkout-button';\nimport ShoppingCartItems from '../shopping-cart-items';\nimport WishListItems from '../wish-list-items';\nimport { CommerceWebThemeProvider } from '../../util/theme';\nimport { CartContextProvider, useCartEffect } from '../checkout-shared/useCartEffect';\nimport useScreensize from '../../util/hooks/use-screensize';\nimport { useLocalization } from '../../localization';\nimport { useDidomiNoticeHeight } from '../../util/hooks/use-didomi-notice-height';\nimport StickyOrderTotals, { useStickyCheckoutFooterHandler } from '../order-totals/sticky-order-totals';\nimport SubscriptionPromotion from './subscription-promotion';\nimport CartSummary from './cart-summary';\nimport GroupSummary from './group-summary';\n\nexport default function Cart({\n\tcartCoupons,\n\tcheckoutButton,\n\tgetRecommendationsUrl,\n\thasLineItems: initialHasLineItems,\n\thasSubscribableLineItems: initialHasSubscribableLineItems,\n\torderLevelDiscounts,\n\torderTotals,\n\tshopMoreUrl,\n\tshoppingCartItems,\n\tshoppingCartSubscribableItems,\n\tshowCartShopMore,\n\tsubscriptionPromotion: initialSubscriptionPromotion,\n\twishListItems,\n\tpaymentPlanOptionsMessage: initialPaymentPlanOptionsMessage,\n\tcartRecommendationsInfo: initialCartRecommendationsInfo,\n\tgroupSummary: initialGroupSummary,\n\troutes,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst [cart, setCart] = useState(null);\n\tconst [subscriptionPromotion, setSubscriptionPromotion] = useState(initialSubscriptionPromotion);\n\tconst [totalItemCount, setTotalItemCount] = useState(\n\t\t(shoppingCartItems?.cartItems?.length ?? 0) + (shoppingCartSubscribableItems?.cartSubscribableItems?.length ?? 0)\n\t);\n\n\tconst hasLineItems = cart\n\t\t? cart.order.lineItems.length !== 0 || cart.order.subscribableLineItems.length !== 0\n\t\t: initialHasLineItems || initialHasSubscribableLineItems;\n\n\tconst [cartRecommendationsInfo, setCartRecommendationsInfo] = useState(initialCartRecommendationsInfo);\n\tconst [paymentPlanOptionsMessage, setPaymentPlanOptionsMessage] = useState(initialPaymentPlanOptionsMessage);\n\tconst [groupSummary, setGroupSummary] = useState(initialGroupSummary);\n\n\tuseCartEffect(updatedCart => {\n\t\tsetCart(updatedCart);\n\t\tsetTotalItemCount(\n\t\t\t(updatedCart.order?.lineItems?.length ?? 0) + (updatedCart.order?.subscribableLineItems?.length ?? 0)\n\t\t);\n\t\tsetPaymentPlanOptionsMessage(updatedCart.order?.paymentPlanOptionsMessage);\n\t\tsetGroupSummary(updatedCart.order?.groupSummary);\n\t});\n\n\tconst [updating, setUpdating] = useState(false);\n\tuseEffect(() => {\n\t\tasync function loadRecommendationsAsync() {\n\t\t\tsetUpdating(true);\n\t\t\ttry {\n\t\t\t\tconst subscriptionPromotionPromise = CartClient.getSubscriptionPromotion(routes.GetSubscriptionPromotionUrl);\n\t\t\t\tconst skuIds = cart\n\t\t\t\t\t? cart.order.lineItems?.flatMap(ci => ci.sku ?? ci.SkuIds)\n\t\t\t\t\t: shoppingCartItems?.cartItems.flatMap(ci => ci.sku ?? ci.skuIds);\n\t\t\t\tconst isSubscriptionInCart =\n\t\t\t\t\t(cart\n\t\t\t\t\t\t? cart.order.subscribableLineItems?.some(scli => scli.isLogosSubscription)\n\t\t\t\t\t\t: shoppingCartSubscribableItems?.cartSubscribableItems?.some(scli => scli.isLogosSubscription)) ?? false;\n\t\t\t\tconst productIds = cart\n\t\t\t\t\t? cart.order.lineItems?.flatMap(ci => ci.productId ?? ci.productIds)\n\t\t\t\t\t: shoppingCartItems.cartItems?.flatMap(ci => ci.productId ?? ci.productIds);\n\n\t\t\t\tconst recommendedProductsPromise = CartClient.getRecommendedProducts(\n\t\t\t\t\tgetRecommendationsUrl,\n\t\t\t\t\tisSubscriptionInCart,\n\t\t\t\t\tskuIds,\n\t\t\t\t\tproductIds\n\t\t\t\t);\n\n\t\t\t\tconst [recommendationsInfo, promotion] = await Promise.all([\n\t\t\t\t\trecommendedProductsPromise,\n\t\t\t\t\tsubscriptionPromotionPromise,\n\t\t\t\t]);\n\n\t\t\t\tsetCartRecommendationsInfo(recommendationsInfo);\n\t\t\t\tsetSubscriptionPromotion(promotion);\n\t\t\t} finally {\n\t\t\t\tsetUpdating(false);\n\t\t\t}\n\t\t}\n\t\tconst isDeliveredToGroup = cart\n\t\t\t? cart.order.hasGroupRecipient\n\t\t\t: shoppingCartItems?.isDeliveredToGroup || shoppingCartSubscribableItems?.isDeliveredToGroup || false;\n\t\tif (!isDeliveredToGroup) {\n\t\t\tloadRecommendationsAsync();\n\t\t}\n\t}, [\n\t\tcart,\n\t\tgetRecommendationsUrl,\n\t\troutes.GetSubscriptionPromotionUrl,\n\t\tshoppingCartItems,\n\t\tshoppingCartSubscribableItems,\n\t]);\n\n\tconst { isMobile, isTablet } = useScreensize();\n\tconst isWideLayout = !isMobile && !isTablet;\n\tconst didomiNoticeHeight = useDidomiNoticeHeight();\n\tconst { intersectionTargetRef, isStickyBannerVisible } = useStickyCheckoutFooterHandler();\n\n\tconst [isOverlayLoading, setIsOverlayLoading] = useState(false);\n\tuseEffect(() => {\n\t\tfunction showOverlay() {\n\t\t\tsetIsOverlayLoading(true);\n\t\t}\n\t\tfunction hideOverlay() {\n\t\t\tsetIsOverlayLoading(false);\n\t\t}\n\t\teventAggregator.on('cart:updating', showOverlay);\n\t\teventAggregator.on('cart:updated cart:error', hideOverlay);\n\t\treturn () => {\n\t\t\teventAggregator.off('cart:updating', showOverlay);\n\t\t\teventAggregator.off('cart:updated cart:error', hideOverlay);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<CommerceWebThemeProvider>\n\t\t\t<CartContextProvider cart={cart}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"tw-preflight shoppingcart-container mt-8 mx-auto w-full max-w-[1440px] px-[18px] lg:px-0 lg:max-[1439px]:px-2\"\n\t\t\t\t\tstyle={didomiNoticeHeight && isMobile ? { marginBottom: didomiNoticeHeight } : undefined}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex w-full flex-col gap-8\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`grid grid-cols-1 gap-15 ${hasLineItems ? 'lg:grid-cols-[minmax(0,900px)_480px] lg:justify-between lg:items-start' : 'lg:justify-center'}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"flex flex-col gap-[12px]\">\n\t\t\t\t\t\t\t\t<SubscriptionPromotion {...subscriptionPromotion} />\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col pb-3\">\n\t\t\t\t\t\t\t\t\t<Typography className=\"font-medium text-primary-500\" variant=\"headingH4\">\n\t\t\t\t\t\t\t\t\t\t{resources.ShoppingCartTitle}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t{totalItemCount === 1 ? (\n\t\t\t\t\t\t\t\t\t\t<Typography className=\"font-sans text-primary-500\" variant=\"bodySmall\">\n\t\t\t\t\t\t\t\t\t\t\t{resources.ItemCountSingle}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<Typography className=\"text-primary-500\" variant=\"bodySmall\">\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.ItemCountPlural}>\n\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"ITEM_COUNT\">{totalItemCount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{showCartShopMore && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"action-buttons pull-left\">\n\t\t\t\t\t\t\t\t\t\t\t<a href={shopMoreUrl} className=\"button\" id=\"shop-more-button\" title={resources.ShopMore}>\n\t\t\t\t\t\t\t\t\t\t\t\t{resources.ShopMore}\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{hasLineItems && groupSummary && (\n\t\t\t\t\t\t\t\t\t<GroupSummary\n\t\t\t\t\t\t\t\t\t\t{...groupSummary}\n\t\t\t\t\t\t\t\t\t\tisChangeGroupAllowed={true}\n\t\t\t\t\t\t\t\t\t\ttotalCartItemCount={totalItemCount}\n\t\t\t\t\t\t\t\t\t\tclassName=\"border-0 border-t border-solid border-primary-500 pt-4\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col gap-[72px]\">\n\t\t\t\t\t\t\t\t\t<ShoppingCartItems\n\t\t\t\t\t\t\t\t\t\t{...{ ...shoppingCartItems, ...shoppingCartSubscribableItems, isMiniCart: false }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{isWideLayout && (\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t<CartRecommendations cartRecommendationsInfo={cartRecommendationsInfo} isLoading={updating} />\n\t\t\t\t\t\t\t\t\t\t\t<WishListItems {...wishListItems} />\n\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{hasLineItems && isWideLayout && (\n\t\t\t\t\t\t\t\t<CartSummary\n\t\t\t\t\t\t\t\t\torderTotals={orderTotals}\n\t\t\t\t\t\t\t\t\torderLevelDiscounts={orderLevelDiscounts}\n\t\t\t\t\t\t\t\t\tcartCoupons={cartCoupons}\n\t\t\t\t\t\t\t\t\tpaymentPlansFaqUrl={routes.paymentPlansFaqUrl}\n\t\t\t\t\t\t\t\t\tpaymentPlanOptionsMessage={paymentPlanOptionsMessage}\n\t\t\t\t\t\t\t\t\tcartUrl={routes.cartUrl}\n\t\t\t\t\t\t\t\t\tshowEditCartButton={false}\n\t\t\t\t\t\t\t\t\tcheckoutButton={<CheckoutButton {...checkoutButton} />}\n\t\t\t\t\t\t\t\t\tisSticky={true}\n\t\t\t\t\t\t\t\t\tisModifiable={true}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{hasLineItems && !isWideLayout && (\n\t\t\t\t\t\t\t<CartSummary\n\t\t\t\t\t\t\t\torderTotals={orderTotals}\n\t\t\t\t\t\t\t\torderLevelDiscounts={orderLevelDiscounts}\n\t\t\t\t\t\t\t\tcartCoupons={cartCoupons}\n\t\t\t\t\t\t\t\tpaymentPlansFaqUrl={routes.paymentPlansFaqUrl}\n\t\t\t\t\t\t\t\tpaymentPlanOptionsMessage={paymentPlanOptionsMessage}\n\t\t\t\t\t\t\t\tcartUrl={routes.cartUrl}\n\t\t\t\t\t\t\t\tshowEditCartButton={false}\n\t\t\t\t\t\t\t\tcheckoutButton={\n\t\t\t\t\t\t\t\t\t<div ref={intersectionTargetRef}>\n\t\t\t\t\t\t\t\t\t\t<CheckoutButton {...checkoutButton} />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{!isWideLayout && (\n\t\t\t\t\t\t\t<div className=\"flex flex-col gap-[72px]\">\n\t\t\t\t\t\t\t\t<CartRecommendations cartRecommendationsInfo={cartRecommendationsInfo} isLoading={updating} />\n\t\t\t\t\t\t\t\t<WishListItems {...wishListItems} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{hasLineItems && !isWideLayout && (\n\t\t\t\t\t\t<StickyOrderTotals\n\t\t\t\t\t\t\tisStickyBannerVisible={isStickyBannerVisible}\n\t\t\t\t\t\t\ttotalItemCount={totalItemCount}\n\t\t\t\t\t\t\ttotalUsdCurrencyText={orderTotals.totalUsdCurrencyText}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CheckoutButton {...checkoutButton} />\n\t\t\t\t\t\t</StickyOrderTotals>\n\t\t\t\t\t)}\n\t\t\t\t\t{isOverlayLoading && (\n\t\t\t\t\t\t<div className=\"flex fixed inset-0 z-10 items-center justify-center bg-[#E9F5FFBF]\">\n\t\t\t\t\t\t\t<ProgressIndicator className=\"h-16 w-16\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</CartContextProvider>\n\t\t</CommerceWebThemeProvider>\n\t);\n}\n","import React, { useCallback, useState } from 'react';\nimport { Typography } from '@faithlife/commerce-components';\nimport { Modal } from '@faithlife/styled-ui';\nimport { useLocalization } from '../../../localization';\nimport type { PaymentPlanOption } from '../types';\n\ninterface PaymentPlanOptionsSummaryProps {\n\tpaymentPlanOptions: PaymentPlanOption[];\n\tlinkText: string;\n}\n\nconst PaymentPlanOptionsSummary = ({ paymentPlanOptions, linkText }: PaymentPlanOptionsSummaryProps) => {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.PaymentPlanConfiguration');\n\tconst [isModalOpen, setIsModalOpen] = useState(false);\n\n\tconst handleSummaryButtonClick = useCallback(() => {\n\t\tsetIsModalOpen(!isModalOpen);\n\t}, [isModalOpen]);\n\n\tconst handleModalClose = useCallback(() => {\n\t\tsetIsModalOpen(false);\n\t}, []);\n\n\treturn (\n\t\t<>\n\t\t\t<Typography\n\t\t\t\ttag=\"button\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tvariant=\"ui2\"\n\t\t\t\tonClick={handleSummaryButtonClick}\n\t\t\t\tclassName=\"leading-[135%] tracking-[0%] underline text-left bg-transparent border-0 p-0 cursor-pointer self-start\"\n\t\t\t>\n\t\t\t\t{linkText}\n\t\t\t</Typography>\n\t\t\t<Modal isOpen={isModalOpen} onClose={handleModalClose} width={['calc(100vw - 48px)', 'fit-content']}>\n\t\t\t\t<Modal.Header />\n\t\t\t\t<Modal.Content width={['calc(100vw - 48px)', 'auto']}>\n\t\t\t\t\t<Typography tag=\"table\" variant=\"ui3\" className=\"w-full border-collapse text-primary-500\">\n\t\t\t\t\t\t<thead>\n\t\t\t\t\t\t\t<tr className=\"border-b border-grey-200 leading-none tracking-normal text-center\">\n\t\t\t\t\t\t\t\t<th className=\"h-9 py-2 px-3 font-bold\">{resources.payToday}</th>\n\t\t\t\t\t\t\t\t<th className=\"h-9 py-2 px-3 font-bold\">{resources.futurePayments}</th>\n\t\t\t\t\t\t\t\t<th className=\"h-9 py-2 px-3 font-bold\">{resources.paymentAmount}</th>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</thead>\n\t\t\t\t\t\t<tbody className=\"leading-none tracking-normal text-center\">\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td className=\"h-6\" />\n\t\t\t\t\t\t\t\t<td className=\"h-6\" />\n\t\t\t\t\t\t\t\t<td className=\"h-6\" />\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t{paymentPlanOptions.map((option, index) => (\n\t\t\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t\t\tkey={option.numberOfPayments}\n\t\t\t\t\t\t\t\t\tclassName={`border-b border-grey-200${index % 2 === 0 ? ' bg-secondary-100' : ''}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<td className=\"h-9 py-2 px-3\">{option.initialPaymentUsdCurrencyText}</td>\n\t\t\t\t\t\t\t\t\t<td className=\"h-9 py-2 px-3\">{option.numberOfPayments - 1}</td>\n\t\t\t\t\t\t\t\t\t<td className=\"h-9 py-2 px-3\">{option.subtotalUsdCurrencyText}</td>\n\t\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</tbody>\n\t\t\t\t\t</Typography>\n\t\t\t\t</Modal.Content>\n\t\t\t</Modal>\n\t\t</>\n\t);\n};\n\nexport default PaymentPlanOptionsSummary;\n","import { useState, useEffect } from 'react';\n\nexport const useDidomiNoticeHeight = () => {\n\tconst [height, setHeight] = useState(0);\n\n\tuseEffect(() => {\n\t\tlet resizeObserver;\n\n\t\tconst resizeObserverCallback = () => {\n\t\t\tconst el = document.getElementById('didomi-notice');\n\n\t\t\tif (!el) {\n\t\t\t\tsetHeight(0);\n\t\t\t\tresizeObserver?.disconnect();\n\t\t\t\tresizeObserver = null;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Reset observer to avoid stale references\n\t\t\tresizeObserver?.disconnect();\n\n\t\t\tresizeObserver = new ResizeObserver(([entry]) => {\n\t\t\t\tsetHeight(entry.contentRect.height);\n\t\t\t});\n\n\t\t\tresizeObserver.observe(el);\n\t\t\tsetHeight(el.getBoundingClientRect().height);\n\t\t};\n\n\t\tresizeObserverCallback();\n\n\t\tconst mutationObserver = new MutationObserver(resizeObserverCallback);\n\t\tmutationObserver.observe(document.body, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t\tresizeObserver?.disconnect();\n\t\t};\n\t}, []);\n\n\treturn height;\n};\n","import { useEffect } from 'react';\n\n// If the browser restores this page from the back-forward cache (e.g. after an external\n// redirect like PayPal or a Stripe 3DS \"next action\" that never resolves back to a\n// PaymentProcessed/OrderFormSubmitting-clearing event), event.persisted is true and the page is\n// otherwise never reloaded, so callers should use this to reset any \"submitting\" state that\n// would otherwise stay stuck forever.\nfunction useResetOnBfcacheRestore(reset: () => void): void {\n\tuseEffect(() => {\n\t\tfunction handlePageShow(event: PageTransitionEvent) {\n\t\t\tif (event.persisted) {\n\t\t\t\treset();\n\t\t\t}\n\t\t}\n\n\t\twindow.addEventListener('pageshow', handlePageShow);\n\t\treturn () => {\n\t\t\twindow.removeEventListener('pageshow', handlePageShow);\n\t\t};\n\t}, [reset]);\n}\n\nexport default useResetOnBfcacheRestore;\n","import { useLocalization } from '../../localization';\n\nconst priceFormatGettersByBillingMode = {\n\tMonthly: {\n\t\tgetLocalizedPriceFormat: resources => `(${resources.MonthlyPriceFormat})`,\n\t\tgetPriceFormat: resources => resources.MonthlyPriceFormat,\n\t},\n\tAnnually: {\n\t\tgetLocalizedPriceFormat: resources => `(${resources.AnnualPriceFormat})`,\n\t\tgetPriceFormat: resources => resources.MonthlyPriceFormat,\n\t},\n};\n\nconst freeTrialPeriodUnitTextGettersByUnit = {\n\tday: (freeTrialPeriodLength, resources) =>\n\t\tfreeTrialPeriodLength === 1 ? resources.DayPeriodUnit : resources.DaysPeriodUnit,\n\tmonth: (freeTrialPeriodLength, resources) =>\n\t\tfreeTrialPeriodLength === 1 ? resources.MonthPeriodUnit : resources.MonthsPeriodUnit,\n\tyear: (freeTrialPeriodLength, resources) =>\n\t\tfreeTrialPeriodLength === 1 ? resources.YearPeriodUnit : resources.YearsPeriodUnit,\n};\n\nconst useResourceFormatsAndTexts = ({\n\tlocale,\n\tbillingMode,\n\tfreeTrialPeriodUnit,\n\tfreeTrialPeriodLength,\n\tavailableLogosTieredSubscriptionLevels,\n\tsubscriptionResources: customSubscriptionResources,\n}) => {\n\tconst defaultSubscriptionResources = useLocalization('CommerceWeb.Resources.Product.ContainingSubscriptions');\n\tconst subscriptionResources = customSubscriptionResources ?? defaultSubscriptionResources;\n\tconst subscriptionPlansResources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\n\tif (!subscriptionResources || !subscriptionPlansResources) {\n\t\treturn null;\n\t}\n\n\tconst { getLocalizedPriceFormat, getPriceFormat } = priceFormatGettersByBillingMode[billingMode];\n\tconst getFreeTrialPeriodUnitText = freeTrialPeriodUnitTextGettersByUnit[freeTrialPeriodUnit?.toLowerCase()];\n\n\tconst availableSubscriptionLevelsFormatter = new Intl.ListFormat(locale, { style: 'long', type: 'conjunction' });\n\n\treturn {\n\t\tlocalizedPriceFormat: getLocalizedPriceFormat(subscriptionPlansResources),\n\t\tpriceFormat: getPriceFormat(subscriptionPlansResources),\n\t\tfreeTrialPeriodUnitText: getFreeTrialPeriodUnitText?.(freeTrialPeriodLength, subscriptionResources),\n\t\tlocalizedAvailableSubscriptionLevelListText: availableSubscriptionLevelsFormatter.format(\n\t\t\tavailableLogosTieredSubscriptionLevels?.map(level => subscriptionResources[`${level}Level`])\n\t\t),\n\t\tsubscriptionsText:\n\t\t\tavailableLogosTieredSubscriptionLevels?.length > 1\n\t\t\t\t? subscriptionResources.Subscriptions\n\t\t\t\t: subscriptionResources.Subscription,\n\t};\n};\n\nexport default useResourceFormatsAndTexts;\n","import { jsx as u } from \"react/jsx-runtime\";\nimport { useMemo as c, Children as x, isValidElement as l } from \"react\";\nfunction m({ template: e, children: s, Container: n = \"div\", className: t }) {\n  const d = c(() => p(e), [e]), i = {};\n  return x.forEach(s || [], (r) => {\n    l(r) && r.type === f && r.props.name && (i[r.props.name] = r.props.children);\n  }), u(n, { className: t, children: d.map((r) => r.text || i[r.field]) });\n}\nm.Field = f;\nfunction f({ children: e }) {\n  return u(\"span\", { children: e });\n}\nconst o = /%([A-Z0-9_]+)%/g;\nfunction p(e) {\n  if (!e)\n    return [];\n  const s = [];\n  let n = 0;\n  for (let t = o.exec(e); t !== null; t = o.exec(e))\n    n !== t.index && s.push({ text: e.substr(n, t.index - n) }), n = o.lastIndex, s.push({ field: t[1] });\n  return n !== e.length && s.push({ text: e.substr(n, e.length - n) }), s;\n}\nexport {\n  m as CommandSentence\n};\n//# sourceMappingURL=command-sentence.js.map\n"],"names":["module","exports","events","require","global","formUtility","modules","on","event","moduleName","registerModule","unregisterModule","wasValid","trigger","isCartValid","isModuleValid","Object","values","getInvalidModules","keys","filter","__WEBPACK_DEFAULT_EXPORT__","eventInfos","useEffect","forEach","info","eventAggregator","eventName","eventHandler","useCallback","data","__webpack_require__","dn","CartRecommendationsProductIdsContext","React","CartRecommendationsContext","recommendations","updateCartUrl","children","routes","useContext","RouteContext","SharedWishListFormProvider","WishListProductBatchProvider","wishListsProductsUrl","WishListsGetViewModelsForProductRequests","CartRecommendationsContextCore","addToCartButtonResources","useLocalization","isSignedIn","useCurrentUser","productDataByProductId","skuDataBySkuId","productIds","useMemo","recommendation","catalogProductData","averageRating","ratings","reviewCount","numberOfRatings","shouldDisplayRatings","shouldDisplayStars","hasValidReviewData","id","productId","name","productName","imageUri","productImageUri","undefined","productPageUri","author","primarySkuId","skus","salePrice","userPrice","anchorPrice","anchorLabel","anchorSavingsLabel","priceVariant","isDiscounted","rating","mapToProductData","isPrepubSku","isPrepubProduct","push","useStatus","type","status","isOwned","buttonText","preorder","addToCart","isLoading","isError","errorType","onAddToCartRequest","async","args","options","skuItems","items","item","length","skuIds","map","identifier","onRequestStart","newCart","CartClient","updateCartAsync","skuIdsToAdd","order","analyticsTelemetry","window","dataLayer","onSuccess","e","onError","Error","String","onRequestFinish","getWishlistTogglePrimarySkuId","onWishlistToggle","useOnWishlistToggle","getPrimarySkuId","wishListsProductsUrlFallback","errorContext","getWishlistData","useWishlistMembership","staticProductData","contextValue","getProductData","resources","addToCartButton","Provider","value","CommerceComponentsContextProvider","RecommendationSkeleton","className","RecommendationsCarouselSkeleton","maxNumberOfRecommendations","Array","from","_","index","key","RecommendationsCarouselContent","isDesktop","useScreensize","CarouselProduct","showArrows","scale","linkTarget","CartRecommendationsCarousel","heading","Typography","variant","CartRecommendations","cartRecommendationsInfo","recommendationsTitle","CheckoutButton","antiForgeryToken","cartCheckoutUrl","cartFixCartUnavailabilityIssuesUrl","cartItems","initialCartItems","concurrencyToken","initialConcurrencyToken","Next","RemoveItem","RemoveItems","shouldBlockPlaceOrderButton","numberOfItemsToBeRemoved","useCartItems","isNavigating","setIsNavigating","useState","useResetOnBfcacheRestore","isDisabled","action","method","dangerouslySetInnerHTML","__html","tag","href","rel","title","onClick","preventDefault","useListItems","updateUrl","removeUrl","listName","removeWishListItem","removeWishlistItems","addWishListItemToCart","shouldRemoveItems","WishList","usesForeignCurrency","ShoppingCartItem","isModifiable","WishListItems","cartRemoveWishListItems","cartUpdateCartUrl","getWishlistUrl","setCartItems","hasMultipleWishLists","setHasMultipleWishLists","savedForLaterItems","setInitialSavedForLaterItems","wishListItems","setInitialWishListItems","updating","setUpdating","loadWishListAsync","newHasMultipleWishLists","newSavedForLaterItems","newWishListItems","getWishlist","flatMap","it","sku","useCartEffect","cart","lineItems","removeSavedItem","addSavedItemToCart","ProgressIndicator","SavedForLater","MultipleWishListTitle","SingleWishListTitle","StickyOrderTotals","isStickyBannerVisible","totalItemCount","initialTotalItemCount","totalUsdCurrencyText","initialTotalUsdCurrencyText","setTotalItemCount","setTotalUsdCurrencyText","subscribableLineItems","inert","Item","Items","Total","singleTermFreeTrialResourceKeyByPeriodUnit","day","month","year","multipleTermFreeTrialResourceKeyByPeriodUnit","subscription_promotion","SubscriptionPromotion","subscribableProductTitle","freeTrialInfo","subscribableProductOptionId","logosOrVerbum","percentOff","percentCashBack","pricePerTerm","resourceFormats","useResourceFormatsAndTexts","locale","billingMode","freeTrialPeriodLength","periodLength","freeTrialPeriodUnit","periodUnit","availableLogosTieredSubscriptionLevels","subscriptionResources","freeTrialPeriodUnitText","triggerEvent","useCartEvents","isSubscriptionPromotionAddedToCart","setIsSubscriptionPromotionAddedToCart","isSubscriptionCheckboxChecked","setIsSubscriptionCheckboxChecked","handleAddSubscriptionPromotion","addSubscribableProductOptionIdToCart","AddSubscribableProductOptionIdToCartUrl","newCartData","getCart","GetCartUrl","console","error","checkboxLabelTemplate","AddFreeTrial","SubscribeToPro","getSubscriptionCheckboxLabelResource","headingTemplate","WantPercentSavingsOffThisPurchase","SubscribersSavePercentSavingsExtraOnThisPurchase","bodyTemplate","SubscribeForPerks","PlusEarnPercentSavingsLater","tryLogosFreeCheckboxLabel","CommandSentence","Container","template","Field","src","LogosPro","VerbumPro","alt","ProSubscriptionImage","SubscriptionIcon","MonthPeriodUnit","LearnMoreUrl","LearnMore","Checkbox","label","onChange","checked","typography","ExclusionsApply","Cart","cartCoupons","checkoutButton","getRecommendationsUrl","hasLineItems","initialHasLineItems","hasSubscribableLineItems","initialHasSubscribableLineItems","orderLevelDiscounts","orderTotals","shopMoreUrl","shoppingCartItems","shoppingCartSubscribableItems","showCartShopMore","subscriptionPromotion","initialSubscriptionPromotion","paymentPlanOptionsMessage","initialPaymentPlanOptionsMessage","initialCartRecommendationsInfo","groupSummary","initialGroupSummary","setCart","setSubscriptionPromotion","cartSubscribableItems","setCartRecommendationsInfo","setPaymentPlanOptionsMessage","setGroupSummary","updatedCart","hasGroupRecipient","isDeliveredToGroup","subscriptionPromotionPromise","getSubscriptionPromotion","GetSubscriptionPromotionUrl","ci","SkuIds","isSubscriptionInCart","some","scli","isLogosSubscription","recommendedProductsPromise","getRecommendedProducts","recommendationsInfo","promotion","Promise","all","loadRecommendationsAsync","isMobile","isTablet","isWideLayout","didomiNoticeHeight","useDidomiNoticeHeight","intersectionTargetRef","setIsStickyBannerVisible","useRef","intersectionObserverCallback","entries","isIntersecting","intersectionTarget","current","observer","IntersectionObserver","root","rootMargin","threshold","observe","disconnect","useStickyCheckoutFooterHandler","isOverlayLoading","setIsOverlayLoading","showOverlay","hideOverlay","CommerceWebThemeProvider","CartContextProvider","style","marginBottom","ShoppingCartTitle","ItemCountSingle","ItemCountPlural","ShopMore","GroupSummary","_extends","isChangeGroupAllowed","totalCartItemCount","ShoppingCartItems","isMiniCart","CartSummary","paymentPlansFaqUrl","cartUrl","showEditCartButton","isSticky","ref","PaymentPlanOptionsSummary","paymentPlanOptions","linkText","isModalOpen","setIsModalOpen","handleSummaryButtonClick","handleModalClose","Modal","isOpen","onClose","width","Header","Content","payToday","futurePayments","paymentAmount","option","numberOfPayments","initialPaymentUsdCurrencyText","subtotalUsdCurrencyText","height","setHeight","resizeObserver","resizeObserverCallback","el","document","getElementById","ResizeObserver","entry","contentRect","getBoundingClientRect","mutationObserver","MutationObserver","body","childList","subtree","reset","handlePageShow","persisted","addEventListener","removeEventListener","priceFormatGettersByBillingMode","Monthly","getLocalizedPriceFormat","MonthlyPriceFormat","getPriceFormat","Annually","AnnualPriceFormat","freeTrialPeriodUnitTextGettersByUnit","DayPeriodUnit","DaysPeriodUnit","MonthsPeriodUnit","YearPeriodUnit","YearsPeriodUnit","customSubscriptionResources","defaultSubscriptionResources","subscriptionPlansResources","getFreeTrialPeriodUnitText","toLowerCase","availableSubscriptionLevelsFormatter","Intl","ListFormat","localizedPriceFormat","priceFormat","localizedAvailableSubscriptionLevelListText","format","level","subscriptionsText","Subscriptions","Subscription","m","s","n","t","d","react__WEBPACK_IMPORTED_MODULE_1__","o","exec","text","substr","lastIndex","field","p","i","Children","r","isValidElement","f","props","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx"],"sourceRoot":""}