{"version":3,"file":"3135.731acfc8c9eda5864d3a.js?ssi=0","mappings":"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","sources":["webpack://@logos/commerceweb-frontend/./Scripts/site/cart/services/checkoutservice.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shared/enhanced-image-tag/image.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shared/scheduled-subscription-price-change-notice.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shared/utc-date-time-display/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shopping-cart-items/PricingLink.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shopping-cart-items/ShoppingCartItem.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shopping-cart-items/SubscriptionPriceBlock.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shopping-cart-items/ShoppingCartSubscribableItem.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shopping-cart-items/index.jsx","webpack://@logos/commerceweb-frontend/javascript/node_modules/lucide-react/dist/esm/icons/info.mjs","webpack://@logos/commerceweb-frontend/./Scripts/site/components/subscription-management/subscription-price-change-notice.tsx"],"sourcesContent":["'use strict';\n\nconst fetch = require('../../util/fetch').default;\n\nconst parseJson = response => response.json();\n\nconst postJson = (url, data) => fetch.postWithBody({ url, body: data }).then(parseJson);\n\nmodule.exports = {\n\tupdateCart: function (url, changeSet) {\n\t\treturn postJson(url, changeSet);\n\t},\n\tgetUpsellDetails: function (url, changeSet) {\n\t\treturn postJson(url, changeSet);\n\t},\n\tfetchCart: function (url) {\n\t\treturn fetch.post({ url }).then(parseJson);\n\t},\n};\n","import React, { useMemo } from 'react';\nimport { mobileCutoffWidth, desktopMinWidth } from '../../../util/mobile-utility';\nimport { extraLargeDesktopMinWidth, largeDesktopMinWidth } from '../../../util/hooks/use-screensize';\n\ninterface SizeDescriptor {\n\twidth: number | string;\n\theight?: number;\n}\n\ntype SizeValue = number | string | SizeDescriptor;\n\ninterface ImageSizes {\n\tmobile?: SizeValue;\n\ttablet?: SizeValue;\n\tdesktop?: SizeValue;\n\tlargeDesktop?: SizeValue;\n\textraLargeDesktop?: SizeValue;\n}\n\ninterface ImageProps {\n\tsrc: string;\n\talt?: string;\n\twidth?: number | string;\n\theight?: number | string;\n\tsizes?: ImageSizes;\n\tbelowTheFold?: boolean;\n\tfetchPriority?: 'high' | 'low' | 'auto';\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\ttargetAspectRatio?: [number, number];\n}\n\ntype ImageElementProps = React.ImgHTMLAttributes<HTMLImageElement> & {\n\tfetchpriority?: ImageProps['fetchPriority'];\n};\n\ninterface ProcessedSize {\n\twidth: number | string;\n\theight?: number;\n}\n\ninterface ProcessedSizes {\n\t[key: string]: ProcessedSize;\n}\n\ninterface SizeResult {\n\tsize: number | string;\n\tmaxWidth: number | null;\n}\n\nconst breakPointNames = ['mobile', 'tablet', 'desktop', 'largeDesktop', 'extraLargeDesktop'] as const;\nconst breakPoints: (number | null)[] = [\n\tmobileCutoffWidth,\n\tdesktopMinWidth,\n\tlargeDesktopMinWidth,\n\textraLargeDesktopMinWidth,\n\tnull,\n];\n\nconst standardDeviceWidths = [360, 640, 768, 1024, 1366, 1600, 1920, 2560];\n\nfunction formatSizeValue(size: number | string): string {\n\treturn typeof size === 'string' ? size : `${size}px`;\n}\n\nfunction createSizesAttribute(inputSizes: ProcessedSizes): string {\n\tconst sizeResults: SizeResult[] = [];\n\n\tlet currentResult: SizeResult | undefined = undefined;\n\tfor (let i = 0; i < breakPointNames.length; i++) {\n\t\tconst breakPointName = breakPointNames[i];\n\t\tconst sizeEntry = inputSizes[breakPointName];\n\t\tconst size = sizeEntry?.width ?? null;\n\t\tconst breakPoint = breakPoints[i];\n\t\tif (size !== null) {\n\t\t\tcurrentResult = { size, maxWidth: breakPoint === null ? null : breakPoint - 1 };\n\t\t\tsizeResults.push(currentResult);\n\t\t} else if (currentResult) {\n\t\t\tcurrentResult.maxWidth = breakPoint === null ? null : breakPoint - 1;\n\t\t}\n\t}\n\tif (currentResult) {\n\t\tcurrentResult.maxWidth = null;\n\t}\n\n\treturn sizeResults\n\t\t.map(({ size, maxWidth }) => {\n\t\t\tif (maxWidth !== null) {\n\t\t\t\treturn `(max-width: ${maxWidth}px) ${formatSizeValue(size)}`;\n\t\t\t}\n\t\t\treturn formatSizeValue(size);\n\t\t})\n\t\t.join(',');\n}\n\nfunction computeSrcSetWidths(nominalWidths: number[], deviceWidths: number[]): number[] {\n\tconst widthSet = new Set(deviceWidths);\n\tfor (const nominalWidth of nominalWidths) {\n\t\twidthSet.add(nominalWidth);\n\t\twidthSet.add(nominalWidth * 2);\n\t}\n\treturn [...widthSet].sort((a, b) => a - b);\n}\n\nfunction createSrcSetAttribute(srcSetWidths: number[], src: string, aspectRatio?: number): string | undefined {\n\tconst entries: string[] = [];\n\tfor (const width of srcSetWidths) {\n\t\tconst url = new URL(src);\n\t\turl.searchParams.set('w', String(width));\n\t\tif (aspectRatio) {\n\t\t\turl.searchParams.set('h', String(Math.round(width / aspectRatio)));\n\t\t}\n\t\turl.searchParams.set('m', 'limit');\n\t\tentries.push(`${url.toString()} ${width}w`);\n\t}\n\treturn entries.length > 0 ? entries.join(',') : undefined;\n}\n\nfunction getNominalWidths(processedSizes: ProcessedSizes | undefined, widthProp?: number | string): number[] {\n\tif (processedSizes) {\n\t\tconst numericWidths = Object.values(processedSizes)\n\t\t\t.map(s => s.width)\n\t\t\t.filter((w): w is number => typeof w === 'number');\n\t\treturn numericWidths;\n\t}\n\tif (typeof widthProp === 'number') {\n\t\treturn [widthProp];\n\t}\n\treturn [];\n}\n\nconst amberCdnHost = 'files.logoscdn.com';\nconst amberUrls = ['internal.files.logos.com', 'files.logos.com', amberCdnHost, 'files.amberfile.com'];\n\n// Only production hosts; test/internal hosts serve a different environment's assets and must not be pointed at the production CDN.\nconst amberCdnUpgradableHosts = ['files.logos.com', 'files.amberfile.com'];\n\nfunction isAmberHost(host: string): boolean {\n\treturn amberUrls.includes(host);\n}\n\nfunction detectIsAmberOptimizedUrl(urlAsString: string): boolean {\n\ttry {\n\t\tconst url = new URL(urlAsString);\n\t\tconst isAmberCdn = isAmberHost(url.host);\n\t\tconst isOptimized = url.pathname.endsWith('optimized');\n\t\treturn isAmberCdn && isOptimized;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Amber link signatures are generated against a fixed host, so rewriting the host to the CDN keeps signed links valid.\nfunction toAmberCdnUrl(url: URL): string {\n\tif (!amberCdnUpgradableHosts.includes(url.host)) {\n\t\treturn url.toString();\n\t}\n\tconst cdnUrl = new URL(url.toString());\n\tcdnUrl.host = amberCdnHost;\n\tcdnUrl.protocol = 'https:';\n\tcdnUrl.port = '';\n\treturn cdnUrl.toString();\n}\n\nfunction tryUpgradeAmberUrlToCdn(urlAsString: string): string {\n\ttry {\n\t\treturn toAmberCdnUrl(new URL(urlAsString));\n\t} catch {\n\t\treturn urlAsString;\n\t}\n}\n\nfunction tryAddAmberLimit(urlAsString: string): string {\n\ttry {\n\t\tconst url = new URL(urlAsString);\n\t\tif (!isAmberHost(url.host) || !url.pathname.endsWith('optimized')) {\n\t\t\treturn urlAsString;\n\t\t}\n\t\turl.searchParams.set('m', 'limit');\n\t\treturn url.toString();\n\t} catch {\n\t\treturn urlAsString;\n\t}\n}\n\nfunction processSizes(inputSizes: ImageSizes | undefined, aspectRatio?: number): ProcessedSizes | undefined {\n\tif (!inputSizes) {\n\t\treturn undefined;\n\t}\n\tconst processedSizes: ProcessedSizes = {};\n\tfor (const [sizeName, size] of Object.entries(inputSizes)) {\n\t\tif (typeof size === 'string') {\n\t\t\tprocessedSizes[sizeName] = { width: size };\n\t\t} else if (size !== null && size !== undefined && typeof size === 'object') {\n\t\t\tprocessedSizes[sizeName] = {\n\t\t\t\twidth: size.width,\n\t\t\t\theight:\n\t\t\t\t\tsize.height ??\n\t\t\t\t\t(aspectRatio && typeof size.width === 'number' ? Math.floor(size.width / aspectRatio) : undefined),\n\t\t\t};\n\t\t} else if (typeof size === 'number') {\n\t\t\tprocessedSizes[sizeName] = { width: size, height: aspectRatio ? Math.floor(size / aspectRatio) : undefined };\n\t\t}\n\t}\n\treturn processedSizes;\n}\n\nconst Image = ({\n\tsrc: srcProp,\n\talt,\n\twidth,\n\theight,\n\tsizes: inputSizes,\n\tbelowTheFold = false,\n\tfetchPriority,\n\tclassName,\n\tstyle,\n\ttargetAspectRatio,\n}: ImageProps) => {\n\tconst numericAspectRatio = targetAspectRatio ? targetAspectRatio[0] / targetAspectRatio[1] : undefined;\n\n\tconst src = useMemo(() => tryAddAmberLimit(tryUpgradeAmberUrlToCdn(srcProp)), [srcProp]);\n\tconst processedSizes = processSizes(inputSizes, numericAspectRatio);\n\tconst isAmberOptimizedUrl = detectIsAmberOptimizedUrl(src);\n\n\tconst srcSetAttribute = useMemo(() => {\n\t\tif (!isAmberOptimizedUrl) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!processedSizes) {\n\t\t\tconst nominalWidths = getNominalWidths(undefined, width);\n\t\t\tconst srcSetWidths = computeSrcSetWidths(nominalWidths, []);\n\t\t\treturn createSrcSetAttribute(srcSetWidths, src, numericAspectRatio);\n\t\t}\n\n\t\tconst containsResponsiveWidth = Object.values(processedSizes).some(\n\t\t\tx => typeof x.width === 'string' && x.width.endsWith('vw')\n\t\t);\n\t\tconst nominalWidths = getNominalWidths(processedSizes, width);\n\t\tconst srcSetWidths = computeSrcSetWidths(nominalWidths, containsResponsiveWidth ? standardDeviceWidths : []);\n\t\treturn createSrcSetAttribute(srcSetWidths, src, numericAspectRatio);\n\t}, [isAmberOptimizedUrl, processedSizes, src, width, numericAspectRatio]);\n\n\tconst sizesAttribute = useMemo(() => {\n\t\tif (srcSetAttribute && processedSizes) {\n\t\t\treturn createSizesAttribute(processedSizes);\n\t\t}\n\t\treturn undefined;\n\t}, [srcSetAttribute, processedSizes]);\n\n\tconst widthAttribute = width ?? targetAspectRatio?.[0];\n\tconst heightAttribute = height ?? targetAspectRatio?.[1];\n\n\tconst imageProps: ImageElementProps = {\n\t\tsrc,\n\t\tsrcSet: srcSetAttribute,\n\t\tsizes: sizesAttribute,\n\t\twidth: widthAttribute,\n\t\theight: heightAttribute,\n\t\tloading: belowTheFold ? 'lazy' : undefined,\n\t\tfetchpriority: fetchPriority,\n\t\tclassName,\n\t\tstyle,\n\t};\n\n\treturn <img {...imageProps} alt={alt} />;\n};\n\nexport {\n\tImage,\n\tdetectIsAmberOptimizedUrl,\n\tisAmberHost,\n\ttoAmberCdnUrl,\n\ttryAddAmberLimit,\n\ttryUpgradeAmberUrlToCdn,\n\tamberCdnHost,\n};\nexport type { ImageProps, ImageSizes, SizeDescriptor };\n","import React, { useEffect, useState } from 'react';\nimport { SubscriptionPriceChangeNotice } from '../subscription-management/subscription-price-change-notice';\n\nexport interface ScheduledSubscriptionPriceChange {\n\tscheduledPriceChangePaymentAmount?: string | null;\n\tscheduledPriceChangePaymentDate?: string | null;\n\tscheduledPriceChangeExpiresAtUnixMilliseconds?: number | null;\n\tscheduledPriceChangeDirection?: string | null;\n}\n\ninterface Props {\n\tsubscriptionName: string;\n\tnotice?: ScheduledSubscriptionPriceChange | null;\n\tclassName?: string;\n}\n\nexport const ScheduledSubscriptionPriceChangeNotice = ({ subscriptionName, notice, className }: Props) => {\n\tconst [now, setNow] = useState(() => Date.now());\n\tconst cutoff = notice?.scheduledPriceChangeExpiresAtUnixMilliseconds;\n\n\tuseEffect(() => {\n\t\tif (cutoff === null || cutoff === undefined) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet timer: ReturnType<typeof setTimeout>;\n\t\tconst update = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tconst currentTime = Date.now();\n\t\t\tsetNow(currentTime);\n\t\t\tif (currentTime < cutoff) {\n\t\t\t\t// Browser timers overflow beyond about 24.8 days.\n\t\t\t\ttimer = setTimeout(update, Math.min(cutoff - currentTime, 2147483647));\n\t\t\t}\n\t\t};\n\n\t\tupdate();\n\t\twindow.addEventListener('pageshow', update);\n\t\twindow.addEventListener('focus', update);\n\t\tdocument.addEventListener('visibilitychange', update);\n\t\treturn () => {\n\t\t\tclearTimeout(timer);\n\t\t\twindow.removeEventListener('pageshow', update);\n\t\t\twindow.removeEventListener('focus', update);\n\t\t\tdocument.removeEventListener('visibilitychange', update);\n\t\t};\n\t}, [cutoff]);\n\n\tif (\n\t\tcutoff === null ||\n\t\tcutoff === undefined ||\n\t\tnow >= cutoff ||\n\t\tDate.now() >= cutoff ||\n\t\t!subscriptionName ||\n\t\t!notice?.scheduledPriceChangePaymentAmount ||\n\t\t!notice.scheduledPriceChangePaymentDate ||\n\t\t(notice.scheduledPriceChangeDirection !== 'Increase' &&\n\t\t\tnotice.scheduledPriceChangeDirection !== 'Decrease' &&\n\t\t\tnotice.scheduledPriceChangeDirection !== 'Change')\n\t) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SubscriptionPriceChangeNotice\n\t\t\tsubscriptionName={subscriptionName}\n\t\t\tpaymentAmount={notice.scheduledPriceChangePaymentAmount}\n\t\t\tpaymentDate={notice.scheduledPriceChangePaymentDate}\n\t\t\tdirection={notice.scheduledPriceChangeDirection}\n\t\t\tlearnMoreUrl=\"http://logos.com/subscription-faq/pricing\"\n\t\t\tvariant=\"infoBar\"\n\t\t\tclassName={className}\n\t\t/>\n\t);\n};\n","import React from 'react';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useLocalization } from '../../../localization';\n\nexport const UtcDateTimeDisplayFormatType = {\n\tEnclosed: 'Enclosed',\n\tPlain: 'Plain',\n};\n\nconst UtcDateTimeDisplay = ({ formattedDateTime, formatType = UtcDateTimeDisplayFormatType.Enclosed }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Layout');\n\tconst template = resources[`UtcDateTimeDisplayFormat${formatType}`];\n\n\tif (!template) {\n\t\treturn formattedDateTime;\n\t}\n\n\treturn (\n\t\t<CommandSentence Container={React.Fragment} template={template}>\n\t\t\t<CommandSentence.Field name=\"FORMATTEDDATETIME\">{formattedDateTime}</CommandSentence.Field>\n\t\t</CommandSentence>\n\t);\n};\n\nexport default UtcDateTimeDisplay;\n","import React from 'react';\nimport { InfoIcon } from '@faithlife/commerce-components';\nimport Tooltip from '../shared/tooltip';\n\nexport default function PricingLink({ description, link }) {\n\treturn (\n\t\t<Tooltip\n\t\t\tclassName=\"dynamically-priced-tooltip\"\n\t\t\tplacement=\"bottom\"\n\t\t\tlink={<InfoIcon size={12} className=\"ml-1\" />}\n\t\t\tcontentStyles={{ maxWidth: ['calc(100vw - 24px)', '300px'] }}\n\t\t>\n\t\t\t<div className=\"dynamically-priced-tooltip-content ui3\">\n\t\t\t\t{description}\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: link }} />\n\t\t\t</div>\n\t\t</Tooltip>\n\t);\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useDebouncedCallback } from '@faithlife/react-ui';\nimport { Button, TrashIcon, StepperControl, Typography } from '@faithlife/commerce-components';\nimport checkoutService from '../../cart/services/checkoutservice';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport { useLocalization } from '../../localization';\nimport { Image } from '../shared/enhanced-image-tag/image';\nimport PricingLink from './PricingLink';\n\nconst QuantityStatus = {\n\tInvalid: 'invalid',\n\tUpToDate: 'up-to-date',\n\tUpdating: 'updating',\n};\n\nexport function ShoppingCartItem({\n\tautoRenews,\n\tcartItems,\n\tcontainsBundledItems,\n\tisInCheckout,\n\tisDeliveredToGroup,\n\tisModifiable,\n\titem,\n\tshowCartSaveForLater,\n\tupdateUrl,\n\tusesForeignCurrency,\n\tshouldShowYoursForever,\n\tisMiniCart,\n\tremoveWishListItem,\n\taddWishListItemToCart,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst [enteredQuantity, setEnteredQuantity] = useState(item.quantity);\n\tconst [quantityStatus, setQuantityStatus] = useState(QuantityStatus.UpToDate);\n\tconst commitQuantityUpdateRef = useRef(null);\n\n\tconst intraCartItems =\n\t\titem.intraCartDynamicPriceContributingCartItemIds?.length > 0\n\t\t\t? cartItems.filter(({ cartItemIds }) =>\n\t\t\t\t\tcartItemIds.find(id => item.intraCartDynamicPriceContributingCartItemIds.includes(id))\n\t\t\t\t)\n\t\t\t: [];\n\n\tconst handleRemoveItemFromCart = useCallback(\n\t\t(saveForLater = false) => {\n\t\t\tcommitQuantityUpdateRef.current?.cancel();\n\t\t\teventAggregator.trigger('cart:updating');\n\t\t\tif (updateUrl) {\n\t\t\t\tcheckoutService\n\t\t\t\t\t.updateCart(updateUrl, { quantityByCartItemId: item.cartItemQuantitiesAfterRemoval, saveForLater })\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfunction onRemoveSuccess(data) {\n\t\t\t\t\t\t\teventAggregator.trigger('cart:updated', data);\n\t\t\t\t\t\t\teventAggregator.trigger(saveForLater ? 'cart:savedForLater' : 'cart:removed', item.quantity);\n\t\t\t\t\t\t\tdocument.dispatchEvent(new CustomEvent('faithlife.sites.cart.updated', { detail: { cart: data } }));\n\t\t\t\t\t\t\tfor (const item of data.order.analyticsTelemetry ?? []) {\n\t\t\t\t\t\t\t\twindow.dataLayer.push(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction onRemoveFailure(e) {\n\t\t\t\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t}\n\t\t},\n\t\t[updateUrl, item]\n\t);\n\n\tconst commitQuantityUpdate = useDebouncedCallback(newQuantity => {\n\t\tif (newQuantity < 1) {\n\t\t\thandleRemoveItemFromCart();\n\t\t\treturn;\n\t\t}\n\n\t\tsetQuantityStatus(QuantityStatus.Updating);\n\t\teventAggregator.trigger('cart:updating');\n\n\t\tconst quantityByCartItemId = {};\n\t\tquantityByCartItemId[item.id] = newQuantity;\n\n\t\tcheckoutService\n\t\t\t.updateCart(updateUrl, { quantityByCartItemId })\n\t\t\t.then(\n\t\t\t\tfunction (data) {\n\t\t\t\t\teventAggregator.trigger('cart:updated', data);\n\t\t\t\t},\n\t\t\t\tfunction () {\n\t\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t\t}\n\t\t\t)\n\t\t\t.finally(function () {\n\t\t\t\tsetQuantityStatus(QuantityStatus.UpToDate);\n\t\t\t});\n\t}, 300);\n\n\tcommitQuantityUpdateRef.current = commitQuantityUpdate;\n\n\tuseEffect(() => () => commitQuantityUpdateRef.current?.cancel(), []);\n\n\tuseEffect(() => {\n\t\tsetEnteredQuantity(item.quantity);\n\t}, [item.id, item.quantity]);\n\n\tconst updateQuantity = useCallback(\n\t\tnewQuantity => {\n\t\t\tsetEnteredQuantity(newQuantity);\n\t\t\tcommitQuantityUpdate(newQuantity);\n\t\t},\n\t\t[commitQuantityUpdate]\n\t);\n\n\tconst handleRemoveWishListItem = useCallback(async () => {\n\t\tawait removeWishListItem(item.id);\n\t\teventAggregator.trigger('wishlist:updating');\n\t}, [removeWishListItem, item]);\n\n\tconst handleAddWishListItemToCart = useCallback(() => {\n\t\tif (!addWishListItemToCart) {\n\t\t\treturn;\n\t\t}\n\t\taddWishListItemToCart(item.id, item.skuIds);\n\t}, [addWishListItemToCart, item]);\n\n\tfunction foreignCurrency(text, isNegative) {\n\t\treturn (\n\t\t\tusesForeignCurrency && (\n\t\t\t\t<Typography\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tvariant=\"ui4\"\n\t\t\t\t\tclassName={`${isNegative ? 'before:content-[\"(-\"]' : 'before:content-[\"(\"]'} after:content-[')']`}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t</Typography>\n\t\t\t)\n\t\t);\n\t}\n\n\tconst amountTodayBefore = item.prepubInfo ? resources.AmountToday.replace(/\\{0\\}.*/, '') : '';\n\tconst amountTodayAfter = item.prepubInfo ? resources.AmountToday.replace(/.*\\{0\\}/, '') : '';\n\n\tfunction renderPriceAndActions() {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${\n\t\t\t\t\tisMiniCart ? 'items-start' : 'items-start md:items-end'\n\t\t\t\t} gap-4 justify-start text-[#00042F] flex-shrink-0`}\n\t\t\t>\n\t\t\t\t<div className={`flex flex-col gap-1 ${isMiniCart ? 'items-start' : 'items-start md:items-end'}`}>\n\t\t\t\t\t{(item.isDiscounted && item.discountPercent > 0) || Boolean(item.anchorPriceCurrencyText) ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={`text-[#CC3333] flex flex-col gap-1 ${\n\t\t\t\t\t\t\t\t\tisMiniCart ? 'items-start' : 'items-start md:items-end'\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Typography variant=\"ui2\" tag=\"span\" className=\"font-[700]\">\n\t\t\t\t\t\t\t\t\t{item.extendedPriceUsdCurrencyText}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{usesForeignCurrency && foreignCurrency(item.extendedPriceCurrencyText, false)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Typography tag=\"div\" className=\"text-primary-500\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t<CommandSentence template={resources.PercentOff}>\n\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"DISCOUNT_PERCENT\">{item.discountPercent}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<div className=\"line-through flex flex-row text-primary-500 gap-1 items-end justify-end\">\n\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t{item.anchorPriceUsdCurrencyText || item.extendedPreDiscountPriceUsdCurrencyText}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{usesForeignCurrency &&\n\t\t\t\t\t\t\t\t\tforeignCurrency(item.anchorPriceCurrencyText || item.extendedPreDiscountPriceCurrencyText, false)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<div className=\"flex flex-row gap-1 items-end justify-end\">\n\t\t\t\t\t\t\t\t{item.prepubInfo && amountTodayBefore && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t\t\t{amountTodayBefore}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<Typography variant=\"ui2\" className=\"font-bold\">\n\t\t\t\t\t\t\t\t\t{item.extendedPriceUsdCurrencyText}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{item.prepubInfo && amountTodayAfter && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t\t\t{amountTodayAfter}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{usesForeignCurrency && foreignCurrency(item.extendedPriceCurrencyText, false)}\n\t\t\t\t\t\t\t{item.prepubInfo && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<Typography variant=\"ui2\" className=\"flex flex-row gap-1 text-[16px] items-end justify-end\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.DueWhenShipped}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PREORDER_AMOUNT\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"font-bold\"> {item.prepubInfo.dynamicPriceUsdCurrencyText}</span>\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t{usesForeignCurrency && foreignCurrency(item.prepubInfo.dynamicPriceCurrencyText, false)}\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\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className={`flex flex-row justify-between items-center ${isMiniCart ? 'gap-6' : 'gap-6 md:gap-8'}`}>\n\t\t\t\t\t{showCartSaveForLater && !containsBundledItems && item.isDisplayable && !item.prepubInfo && isModifiable && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"bg-transparent border-0 text-[var(--heading-color)] text-[16px] cursor-pointer outline-none underline\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\tonClick={() => handleRemoveItemFromCart(true)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t{resources.SaveForLater}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t\t{(isModifiable || removeWishListItem) && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclassName=\"bg-transparent border-0 text-[var(--link)] text-[16px] cursor-pointer outline-none\"\n\t\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\t\ttitle={resources.Remove}\n\t\t\t\t\t\t\taria-label={resources.Remove}\n\t\t\t\t\t\t\tdata-testid=\"remove-item-button\"\n\t\t\t\t\t\t\tonClick={() => (removeWishListItem ? handleRemoveWishListItem() : handleRemoveItemFromCart())}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<TrashIcon className=\"h-[18px] w-[18px] text-primary-500\" />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t\t{addWishListItemToCart && (\n\t\t\t\t\t\t<Button scale={`medium`} variant={`secondary`} onClick={handleAddWishListItemToCart} textStyle={`ui.12`}>\n\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui1\">\n\t\t\t\t\t\t\t\t{resources.AddToCart}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t\t{item.allowsMultipleQuantity && isModifiable && (\n\t\t\t\t\t\t<StepperControl\n\t\t\t\t\t\t\tscale=\"sm\"\n\t\t\t\t\t\t\tvalue={enteredQuantity}\n\t\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\t\tdisabled={quantityStatus === QuantityStatus.Updating}\n\t\t\t\t\t\t\tonValueChange={updateQuantity}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col ${\n\t\t\t\t\tisMiniCart ? '' : 'md:flex-row md:justify-between md:gap-0'\n\t\t\t\t} border-0 ${isInCheckout ? 'border-b pb-[12px] ' : 'border-t pt-[24px]'} border-solid border-[#00042F] text-[#00042F]`}\n\t\t\t>\n\t\t\t\t<div className={`flex flex-row items-start ${isMiniCart ? '' : 'md:flex-1'}`}>\n\t\t\t\t\t{isModifiable && item.url && item.isDisplayable ? (\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tdata-testid=\"line-item-image\"\n\t\t\t\t\t\t\thref={item.url}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tclassName={`shrink-0 ${isMiniCart ? 'w-20 mr-3' : 'w-20 mr-3 md:w-[96px] md:mr-0'}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsrc={item.thumbnailUrl}\n\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\tsizes={{ mobile: 80, desktop: 80 }}\n\t\t\t\t\t\t\t\ttargetAspectRatio={[1613, 2475]}\n\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\tisMiniCart ? 'w-20 h-auto' : 'w-20 h-auto md:h-[120px] md:w-auto md:max-w-[80px] md:object-contain'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className={`shrink-0 ${isMiniCart ? 'w-20 mr-3' : 'w-20 mr-3 md:w-[96px] md:mr-0'}`}>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsrc={item.thumbnailUrl}\n\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\tsizes={{ mobile: 80, desktop: 80 }}\n\t\t\t\t\t\t\t\ttargetAspectRatio={[1613, 2475]}\n\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\tisMiniCart ? 'w-20 h-auto' : 'w-20 h-auto md:h-[120px] md:w-auto md:max-w-[80px] md:object-contain'\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)}\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`flex flex-col items-start gap-1 max-w-[480px] ${\n\t\t\t\t\t\t\tisMiniCart ? '' : 'md:grid md:flex-1 md:max-w-none md:grid-cols-[minmax(0,1fr)_auto]'\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={`flex flex-col items-start gap-1 ${isMiniCart ? '' : 'md:min-w-0 md:max-w-[480px]'}`}>\n\t\t\t\t\t\t\t{item.url && item.isDisplayable && isModifiable ? (\n\t\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\t\ttag=\"a\"\n\t\t\t\t\t\t\t\t\thref={item.url}\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"line-item-description\"\n\t\t\t\t\t\t\t\t\tclassName=\"font-[700] no-underline hover:underline text-inherit hover:text-inherit\"\n\t\t\t\t\t\t\t\t\tvariant=\"ui2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Typography tag=\"span\" data-testid=\"line-item-description\" className=\"font-[700]\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t\t{item.description}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div className=\"my-2 flex flex-col items-start\">\n\t\t\t\t\t\t\t\t{(item.prepubStatus || item.prepubInfo) && (\n\t\t\t\t\t\t\t\t\t<div className=\"flex flex-row gap-1 items-center text-[#00042F]\">\n\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t{resources.PreOrderItem}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t{item.prepubStatus || item.prepubInfo.status}\n\t\t\t\t\t\t\t\t\t\t</Typography>\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\t{(item.isIntraCartDynamicallyPriced || item.isOwnershipDynamicallyPriced) && (\n\t\t\t\t\t\t\t\t\t<span className=\"flex flex-row justify-center items-center mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t{resources.CartDynamicPricingMessage}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t{item.isIntraCartDynamicallyPriced && (\n\t\t\t\t\t\t\t\t\t\t\t<PricingLink\n\t\t\t\t\t\t\t\t\t\t\t\tlink={resources.CartDynamicPricingLearnMoreLink}\n\t\t\t\t\t\t\t\t\t\t\t\tdescription={\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{intraCartItems.length > 0 ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography tag=\"p\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resources.DetailedIntraCartDynamicPricingMessage}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul>{intraCartItems.map(item => item && <li key={item.id}>{item.description}</li>)}</ul>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resources.IntraCartDynamicPricingMessage}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{item.isOwnershipDynamicallyPriced && (\n\t\t\t\t\t\t\t\t\t\t\t<PricingLink\n\t\t\t\t\t\t\t\t\t\t\t\tlink={resources.CartDynamicPricingLearnMoreLink}\n\t\t\t\t\t\t\t\t\t\t\t\tdescription={\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{resources.OwnershipDynamicPricingMessage}{' '}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{shouldShowYoursForever && item.isDigitallyFulfilled && item.isPermanentlyAccessible && (\n\t\t\t\t\t\t\t\t\t<span className=\"flex flex-row justify-center items-center mt-0.5\">\n\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t{resources.YoursForever}\n\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t<PricingLink\n\t\t\t\t\t\t\t\t\t\t\tlink=\"\"\n\t\t\t\t\t\t\t\t\t\t\tdescription={\n\t\t\t\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{resources.YoursForeverDescription}\n\t\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{item.isDiscounted && item.discountDescription && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\" className=\"text-[12px] font-[400] text-[#00042F]\">\n\t\t\t\t\t\t\t\t\t\t{item.discountDescription}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{item.restrictionMessageHtml && (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"block mt-0.5 text-(--invalid-color)\"\n\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML={{ __html: item.restrictionMessageHtml }}\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<span className=\"block mt-0.5 text-(--invalid-color)\">{item.expiredExtendedPriceCurrencyHtml}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{renderPriceAndActions()}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{item.prepubInfo && item.prepubInfo.isDynamicPricingInEffect && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={`flex flex-col ${\n\t\t\t\t\t\tisMiniCart ? '' : 'md:flex-row md:justify-between'\n\t\t\t\t\t} border-0 border-solid border-[#00042F] pt-4 text-[#00042F]`}\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"bodySmall\">\n\t\t\t\t\t\t{resources.PrepubDynamicPriceNotification.replace(\n\t\t\t\t\t\t\t'{0}',\n\t\t\t\t\t\t\titem.prepubInfo.priceUsdCurrencyText +\n\t\t\t\t\t\t\t\t(usesForeignCurrency ? ' (' + item.prepubInfo.priceCurrencyText + ')' : '')\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Typography>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","import React from 'react';\nimport { Typography } from '@faithlife/commerce-components';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useLocalization } from '../../localization';\n\nexport default function SubscriptionPriceBlock({ usesForeignCurrency, item, isContentChange, isMiniCart }) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst renewalKind = renewalKindType => {\n\t\tswitch (renewalKindType) {\n\t\t\tcase 'Day':\n\t\t\t\treturn resources.Day;\n\t\t\tcase 'Month':\n\t\t\t\treturn resources.Month;\n\t\t\tcase 'Year':\n\t\t\t\treturn resources.Year;\n\t\t}\n\t};\n\n\tfunction foreignCurrency(text, isNegative) {\n\t\treturn (\n\t\t\tusesForeignCurrency && (\n\t\t\t\t<Typography\n\t\t\t\t\ttag=\"span\"\n\t\t\t\t\tvariant=\"ui4\"\n\t\t\t\t\tclassName={`${isNegative ? 'before:content-[\"(-\"]' : 'before:content-[\"(\"]'} after:content-[')']`}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t</Typography>\n\t\t\t)\n\t\t);\n\t}\n\n\tconst discountBlock =\n\t\titem.isDiscounted &&\n\t\titem.discounts.map(discount => (\n\t\t\t<div\n\t\t\t\tkey={discount.discountId}\n\t\t\t\tclassName={`flex flex-col w-full ${\n\t\t\t\t\tisMiniCart ? 'items-start' : 'items-start md:items-end'\n\t\t\t\t} justify-center gap-1 my-1 text-[#00042F]`}\n\t\t\t>\n\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t{isMiniCart ? (\n\t\t\t\t\t\tresources.DiscountApplied\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<span className=\"md:hidden\">{resources.DiscountApplied}</span>\n\t\t\t\t\t\t\t<span className=\"hidden md:inline\">{discount.description}</span>\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Typography>\n\t\t\t\t{discount.isImmediateDiscountAmountNonZero && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<div className=\"flex flex-row gap-1 items-center\">\n\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t{resources.Original}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<div className=\"line-through flex flex-row gap-1 items-center\">\n\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t{item.anchorPricePreDiscountUsdText}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{foreignCurrency(item.anchorPricePreDiscountCurrencyText, false)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"flex flex-row gap-1 items-center\">\n\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t{resources.Discount}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<div className=\"flex flex-row gap-1 items-center\">\n\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\">\n\t\t\t\t\t\t\t\t\t{'-' + discount.discountAmountUsdText}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{foreignCurrency(discount.discountAmountText, true)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t));\n\n\treturn (\n\t\t<div className={`flex flex-col ${isMiniCart ? 'items-start' : 'items-start md:items-end'} text-primary-500`}>\n\t\t\t{isContentChange ? (\n\t\t\t\t<>\n\t\t\t\t\t{item.totalProratedBalanceAppliedValue !== null && item.totalProratedBalanceAppliedValue >= 0 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Typography tag=\"div\" className=\"font-bold\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t{item.extendedPriceUsdText}\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t{foreignCurrency(item.extendedPriceCurrencyText, false)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Typography tag=\"div\" className=\"font-bold\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\t\t\ttemplate={\n\t\t\t\t\t\t\t\t\t\titem.quantity > 1\n\t\t\t\t\t\t\t\t\t\t\t? resources.RenewalStatementMultiTerm\n\t\t\t\t\t\t\t\t\t\t\t: item.term === 'Year'\n\t\t\t\t\t\t\t\t\t\t\t\t? resources.RenewalStatementYearly\n\t\t\t\t\t\t\t\t\t\t\t\t: resources.RenewalStatementMonthly\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\t<CommandSentence.Field name=\"RENEWAL_AMOUNT\">{item.extendedPriceUsdText}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t{foreignCurrency(item.extendedPriceCurrencyText, false)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\tisMiniCart\n\t\t\t\t\t\t\t\t? 'mt-2 flex flex-col justify-center items-start gap-1 text-[16px]'\n\t\t\t\t\t\t\t\t: 'mt-2 flex flex-col justify-center items-start md:mt-1 md:items-end gap-1 text-[16px]'\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{discountBlock}\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t) : item.isFreeTrial ? (\n\t\t\t\t<>\n\t\t\t\t\t<Typography tag=\"div\" variant=\"bodySmall\" className=\"font-bold text-[16px]\">\n\t\t\t\t\t\t<CommandSentence template={resources.FreeTrialStatement}>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"TRIAL_COUNT\">{item.freeTrialPeriod}</CommandSentence.Field>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"TRIAL_PERIOD_KIND\">\n\t\t\t\t\t\t\t\t{renewalKind(item.freeTrialPeriodKind)}\n\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t</Typography>\n\n\t\t\t\t\t<Typography tag=\"div\" variant=\"finePrint\">\n\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\ttemplate={\n\t\t\t\t\t\t\t\titem.quantity > 1\n\t\t\t\t\t\t\t\t\t? resources.RenewalStatementFreeTrialMultiTerm\n\t\t\t\t\t\t\t\t\t: item.term === 'Year'\n\t\t\t\t\t\t\t\t\t\t? resources.RenewalStatementFreeTrialYearly\n\t\t\t\t\t\t\t\t\t\t: resources.RenewalStatementFreeTrialMonthly\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_AMOUNT\">{item.nextRenewalPriceUsdText}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t</Typography>\n\n\t\t\t\t\t{discountBlock}\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{item.isDiscounted && (\n\t\t\t\t\t\t<div className=\"line-through\">\n\t\t\t\t\t\t\t{usesForeignCurrency ? item.anchorPricePreDiscountCurrencyText : item.anchorPricePreDiscountUsdText}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{discountBlock}\n\n\t\t\t\t\t<Typography tag=\"div\" variant=\"bodySmall\" className=\"font-bold\">\n\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\ttemplate={\n\t\t\t\t\t\t\t\titem.quantity > 1\n\t\t\t\t\t\t\t\t\t? resources.RenewalStatementMultiTerm\n\t\t\t\t\t\t\t\t\t: item.term === 'Year'\n\t\t\t\t\t\t\t\t\t\t? resources.RenewalStatementYearly\n\t\t\t\t\t\t\t\t\t\t: resources.RenewalStatementMonthly\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_AMOUNT\">\n\t\t\t\t\t\t\t\t{isContentChange ? item.anchorPricePreDiscountUsdText : item.extendedPriceUsdText}\n\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t</Typography>\n\n\t\t\t\t\t{foreignCurrency(item.extendedPriceCurrencyText, false)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useDebouncedCallback } from '@faithlife/react-ui';\nimport {\n\tReplaceIcon,\n\tTrashIcon,\n\tSubscriptionIcon,\n\tNewPageIcon,\n\tStepperControl,\n\tInfoIcon,\n\tCheckbox,\n\tTypography,\n} from '@faithlife/commerce-components';\nimport checkoutService from '../../cart/services/checkoutservice';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport { useLocalization } from '../../localization';\nimport UtcDateTimeDisplay from '../shared/utc-date-time-display';\nimport { Image } from '../shared/enhanced-image-tag/image';\nimport { ScheduledSubscriptionPriceChangeNotice } from '../shared/scheduled-subscription-price-change-notice';\nimport SubscriptionPriceBlock from './SubscriptionPriceBlock';\n\nconst QuantityStatus = {\n\tInvalid: 'invalid',\n\tUpToDate: 'up-to-date',\n\tUpdating: 'updating',\n};\n\nexport function ShoppingCartSubscribableItem({\n\tisInCheckout,\n\tisModifiable,\n\titem,\n\tupdateUrl,\n\tupsellDetailsUrl,\n\tusesForeignCurrency,\n\tisMiniCart,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst [enteredQuantity, setEnteredQuantity] = useState(item.quantity);\n\tconst [quantityStatus, setQuantityStatus] = useState(QuantityStatus.UpToDate);\n\tconst commitQuantityUpdateRef = useRef(null);\n\tconst [logosSubTitle, logosSubTerm] = item.isLogosSubscription\n\t\t? item.description.split(' - ', 2)\n\t\t: [undefined, undefined];\n\tconst renewalStatementTemplate =\n\t\titem.quantity > 1\n\t\t\t? resources.RenewalStatementMultiTerm\n\t\t\t: item.existingSubscribedToOption?.term === 'Year'\n\t\t\t\t? resources.RenewalStatementYearly\n\t\t\t\t: resources.RenewalStatementMonthly;\n\n\tfunction handleRemove(saveForLater = false) {\n\t\tcommitQuantityUpdateRef.current?.cancel();\n\t\teventAggregator.trigger('cart:updating');\n\t\tcheckoutService\n\t\t\t.updateCart(updateUrl, {\n\t\t\t\tquantityByCartSubscribableItemId: { [item.cartSubscribableItemId]: 0 },\n\t\t\t\tsaveForLater,\n\t\t\t})\n\t\t\t.then(\n\t\t\t\tfunction onRemoveSuccess(data) {\n\t\t\t\t\teventAggregator.trigger('cart:updated', data);\n\t\t\t\t\teventAggregator.trigger(saveForLater ? 'cart:savedForLater' : 'cart:removed', item.quantity);\n\t\t\t\t\tdocument.dispatchEvent(new CustomEvent('faithlife.sites.cart.updated', { detail: { cart: data } }));\n\t\t\t\t\tfor (const item of data.order.analyticsTelemetry ?? []) {\n\t\t\t\t\t\twindow.dataLayer.push(item);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tfunction onRemoveFailure(e) {\n\t\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t\t}\n\t\t\t);\n\t}\n\n\tconst [upsell, setUpsell] = useState(item.upsell);\n\tconst isUpsellUpdatingRef = useRef(false);\n\tconst handleUpsell = useCallback(\n\t\tasync event => {\n\t\t\tif (isUpsellUpdatingRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tisUpsellUpdatingRef.current = true;\n\t\t\tconst isUpsellSelected = event.target.checked;\n\t\t\teventAggregator.trigger('cart:updating');\n\t\t\tsetUpsell(state => ({ ...state, isUpsellSelected }));\n\n\t\t\tfunction onRemoveFailure(e) {\n\t\t\t\tisUpsellUpdatingRef.current = false;\n\t\t\t\tsetUpsell(state => ({ ...state, isUpsellSelected: !isUpsellSelected }));\n\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcheckoutService\n\t\t\t\t\t.updateCart(updateUrl, isUpsellSelected ? upsell.updateTo : upsell.updateFrom)\n\t\t\t\t\t.then(function onRemoveSuccess(data) {\n\t\t\t\t\t\tisUpsellUpdatingRef.current = false;\n\t\t\t\t\t\teventAggregator.trigger('cart:updated', data);\n\t\t\t\t\t\tfor (const item of data.order.analyticsTelemetry ?? []) {\n\t\t\t\t\t\t\twindow.dataLayer.push(item);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, onRemoveFailure);\n\t\t\t} catch (e) {\n\t\t\t\tonRemoveFailure(e);\n\t\t\t}\n\t\t},\n\t\t[updateUrl, upsell?.updateFrom, upsell?.updateTo]\n\t);\n\n\tuseEffect(() => {\n\t\tif (upsell?.updateTo && upsell.updateFrom) {\n\t\t\tcheckoutService\n\t\t\t\t.getUpsellDetails(upsellDetailsUrl, {\n\t\t\t\t\tupdateTo: upsell.updateTo,\n\t\t\t\t\tupdateFrom: upsell.updateFrom,\n\t\t\t\t})\n\t\t\t\t.then(upsellUpdate => setUpsell(state => ({ ...state, ...upsellUpdate })));\n\t\t}\n\t}, [upsellDetailsUrl, upsell?.updateFrom, upsell?.updateTo]);\n\n\tconst debounceCartQuantityUpdate = useDebouncedCallback(quantity => {\n\t\tif (quantity < 1) {\n\t\t\thandleRemove();\n\t\t\treturn;\n\t\t}\n\n\t\tsetQuantityStatus(QuantityStatus.Updating);\n\t\teventAggregator.trigger('cart:updating');\n\t\tcheckoutService\n\t\t\t.updateCart(updateUrl, {\n\t\t\t\tquantityByCartSubscribableItemId: { [item.cartSubscribableItemId]: quantity },\n\t\t\t})\n\t\t\t.then(\n\t\t\t\tfunction onUpdateSuccess(data) {\n\t\t\t\t\teventAggregator.trigger('cart:updated', data);\n\t\t\t\t\tsetQuantityStatus(QuantityStatus.UpToDate);\n\t\t\t\t},\n\t\t\t\tfunction onUpdateFailure(e) {\n\t\t\t\t\teventAggregator.trigger('cart:error');\n\t\t\t\t\tsetQuantityStatus(QuantityStatus.UpToDate);\n\t\t\t\t}\n\t\t\t);\n\t}, 300);\n\n\tcommitQuantityUpdateRef.current = debounceCartQuantityUpdate;\n\n\tuseEffect(() => () => commitQuantityUpdateRef.current?.cancel(), []);\n\n\tconst updateQuantity = useCallback(\n\t\tnewQuantity => {\n\t\t\tsetEnteredQuantity(newQuantity);\n\t\t\tdebounceCartQuantityUpdate(newQuantity);\n\t\t},\n\t\t[debounceCartQuantityUpdate]\n\t);\n\n\tfunction appStoreSubscriptionLink(paymentTerm) {\n\t\tif (paymentTerm === 'GoogleInAppPurchase') {\n\t\t\treturn (\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://play.google.com/store/account/subscriptions\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[#1E6AFE]\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"underline\">{resources.GooglePlayStore}</span>\n\t\t\t\t\t<NewPageIcon className=\"inline-block h-[18px] w-[18px]\" />\n\t\t\t\t</a>\n\t\t\t);\n\t\t}\n\n\t\tif (paymentTerm === 'AppleInAppPurchase') {\n\t\t\treturn (\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tclassName=\"inline-flex items-center gap-1 text-[#1E6AFE]\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"underline\">{resources.AppleAppStore}</span>\n\t\t\t\t\t<NewPageIcon className=\"inline-block h-[16px] w-[16px]\" />\n\t\t\t\t</a>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction formatUpsellMessage(message) {\n\t\tconst text = message ?? '';\n\t\tconst saveMatch = /^(.*?)(\\bsave\\s+\\d+%.*)$/i.exec(text);\n\n\t\tif (!saveMatch) {\n\t\t\treturn text;\n\t\t}\n\n\t\tconst [, prefix, savePart] = saveMatch;\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{prefix}\n\t\t\t\t<strong>{savePart}</strong>\n\t\t\t</>\n\t\t);\n\t}\n\n\tfunction renderUpsell() {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`flex ${\n\t\t\t\t\tisMiniCart ? 'w-full justify-start' : 'w-full justify-start md:w-auto md:justify-end'\n\t\t\t\t} items-center bg-[#F5FBFF] py-3 px-4 mt-2 gap-2 text-primary-500`}\n\t\t\t>\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={upsell.isUpsellSelected}\n\t\t\t\t\tonChange={handleUpsell}\n\t\t\t\t\tdata-testid=\"subscription-upsell\"\n\t\t\t\t\tid={`subscription-upsell-${item.cartSubscribableItemId}`}\n\t\t\t\t\tlabel={formatUpsellMessage(upsell.message)}\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tclassName={isMiniCart ? undefined : 'md:flex-row-reverse'}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tfunction renderTrashAndQuantity() {\n\t\treturn (\n\t\t\t<div className=\"flex flex-row gap-[24px] justify-center mt-3 text-primary-500\">\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"bg-transparent text-[16px] cursor-pointer outline-hidden\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\ttitle={resources.Remove}\n\t\t\t\t\taria-label={resources.Remove}\n\t\t\t\t\tonClick={() => handleRemove()}\n\t\t\t\t>\n\t\t\t\t\t<TrashIcon className=\"h-[18px] w-[18px]\" />\n\t\t\t\t</button>\n\t\t\t\t{item.isMultipleQuantityAllowed && (\n\t\t\t\t\t<StepperControl\n\t\t\t\t\t\tscale=\"sm\"\n\t\t\t\t\t\tvalue={enteredQuantity}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tdisabled={quantityStatus === QuantityStatus.Updating}\n\t\t\t\t\t\tonValueChange={updateQuantity}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\tfunction renderPriceAndActions() {\n\t\treturn (\n\t\t\t<div className={`contents ${isMiniCart ? '' : 'md:flex md:flex-col md:gap-2 md:items-end'}`}>\n\t\t\t\t<SubscriptionPriceBlock\n\t\t\t\t\titem={item}\n\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\tisContentChange={!!item.existingSubscribedToOption}\n\t\t\t\t\tisMiniCart={isMiniCart}\n\t\t\t\t/>\n\t\t\t\t<ScheduledSubscriptionPriceChangeNotice\n\t\t\t\t\tsubscriptionName={item.description}\n\t\t\t\t\tnotice={item}\n\t\t\t\t\tclassName={!isMiniCart && !isInCheckout ? 'lg:hidden' : undefined}\n\t\t\t\t/>\n\t\t\t\t{upsell && isModifiable && renderUpsell()}\n\t\t\t\t{isModifiable && renderTrashAndQuantity()}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={`${isInCheckout ? 'pb-4 border-b border-solid border-[#00042F]' : ''}`}>\n\t\t\t<div\n\t\t\t\tclassName={`flex flex-col gap-2 ${\n\t\t\t\t\tisMiniCart ? '' : 'md:flex-row md:justify-between md:gap-0'\n\t\t\t\t} border-0 ${isInCheckout ? '' : 'border-t border-solid border-[#00042F] pt-[24px]'} mb-4`}\n\t\t\t>\n\t\t\t\t<div className={`flex flex-row items-start ${isMiniCart ? '' : 'md:flex-1'}`}>\n\t\t\t\t\t<div className={`relative shrink-0 mr-4 ${isMiniCart ? 'w-20' : 'w-20 md:w-[96px]'}`}>\n\t\t\t\t\t\t{item.isLogosSubscription ? (\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsrc={item.thumbnailUrl}\n\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\tsizes={{ mobile: 80, desktop: 80 }}\n\t\t\t\t\t\t\t\ttargetAspectRatio={[1, 1]}\n\t\t\t\t\t\t\t\tclassName=\"relative w-[80px] h-[80px] object-contain block rounded-lg\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsrc={item.thumbnailUrl}\n\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\tsizes={{ mobile: 80, desktop: 80 }}\n\t\t\t\t\t\t\t\ttargetAspectRatio={[1613, 2475]}\n\t\t\t\t\t\t\t\tclassName={\n\t\t\t\t\t\t\t\t\tisMiniCart\n\t\t\t\t\t\t\t\t\t\t? 'relative w-full h-auto block rounded-lg'\n\t\t\t\t\t\t\t\t\t\t: 'relative w-full h-auto block rounded-lg md:relative md:h-[120px] md:w-auto md:max-w-[80px] md:object-contain'\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\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`flex flex-col items-start gap-2 w-full ${\n\t\t\t\t\t\t\tisMiniCart ? '' : 'md:grid md:grid-cols-[minmax(0,1fr)_auto]'\n\t\t\t\t\t\t}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex flex-col items-start gap-2 md:min-w-0\">\n\t\t\t\t\t\t\t<div className=\"flex flex-row items-center gap-3 font-bold\">\n\t\t\t\t\t\t\t\t{logosSubTitle && (\n\t\t\t\t\t\t\t\t\t<div className=\"inline-flex items-center gap-1.5 border-2 border-solid border-[#00042F] rounded-full px-1\">\n\t\t\t\t\t\t\t\t\t\t<SubscriptionIcon className=\"w-[22px] h-[22px] text-[#00042F]\" />\n\t\t\t\t\t\t\t\t\t\t<span className=\"text-[22px] text-[#00042F] pr-1 font-[Alaska]\">{logosSubTitle}</span>\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\t<Typography className=\"text-primary-500 font-bold\" variant=\"ui2\" tag=\"span\">\n\t\t\t\t\t\t\t\t\t{logosSubTerm ? (\n\t\t\t\t\t\t\t\t\t\t<span data-testid=\"subscription-term\" className=\"hidden min-[375px]:inline\">\n\t\t\t\t\t\t\t\t\t\t\t{logosSubTerm}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\titem.description\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"text-primary-500\">\n\t\t\t\t\t\t\t\t{item.isAnnualBilledMonthly ? (\n\t\t\t\t\t\t\t\t\t<Typography variant=\"ui3\" tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t{resources.AnnualBilledMonthly}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t) : item.isMonthlyCommitmentMultiTerm ? (\n\t\t\t\t\t\t\t\t\t<Typography variant=\"ui3\" tag=\"span\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.MonthlySubscriptionNonAnnualTerm}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_TERM\">{item.commitmentTermDisplay}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t) : item.term === 'Year' ? (\n\t\t\t\t\t\t\t\t\t<Typography variant=\"ui3\">{resources.AnnualSubscription}</Typography>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Typography variant=\"ui3\">{resources.MonthlySubscription}</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div className=\"pt-2 text-[14px] text-primary-500\">\n\t\t\t\t\t\t\t\t<div className=\"flex flex-row flex-wrap gap-1\">\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui3\">\n\t\t\t\t\t\t\t\t\t\t{item.isFreeTrial ? resources.FirstCharge : resources.NextCharge}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui3\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.NextChargeValues}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"CHARGE\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"font-bold\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{usesForeignCurrency ? item.nextRenewalPriceCurrencyText : item.nextRenewalPriceUsdText}\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"CHARGE_DATE\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span className=\"font-bold\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<UtcDateTimeDisplay formattedDateTime={item.nextPaymentDate} />\n\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{item.quantity > 1 && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"div\" variant=\"ui3\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.AnnualAfter} className={'flex justify-start gap-1 py-0.5'}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_DATE\">\n\t\t\t\t\t\t\t\t\t\t\t\t<UtcDateTimeDisplay formattedDateTime={item.multiTermRenewalDate} />\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{item.isAnnualBilledMonthly && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"div\" variant=\"ui3\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.AnnualCommitmentRenewal}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_DATE\">\n\t\t\t\t\t\t\t\t\t\t\t\t<UtcDateTimeDisplay formattedDateTime={item.nextRenewalDate} />\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{item.isMonthlyCommitmentMultiTerm && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"div\" variant=\"ui3\">\n\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.NonAnnualCommitmentRenewal}>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_TERM\">{item.commitmentTermDisplay}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_DATE\">\n\t\t\t\t\t\t\t\t\t\t\t\t<UtcDateTimeDisplay formattedDateTime={item.nextRenewalDate} />\n\t\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{renderPriceAndActions()}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{item.existingSubscribedToOption && !item.isExistingSubscriptionExpired && (\n\t\t\t\t<div className=\"flex flex-col gap-2 items-start bg-[#F5FBFF] p-4 text-primary-500\">\n\t\t\t\t\t<div className=\"flex flex-row items-center justify-start gap-2\">\n\t\t\t\t\t\t<ReplaceIcon className=\"w-6 h-6 mx-auto\" />\n\t\t\t\t\t\t<Typography variant=\"bodySmall\" className=\"font-bold text-[16px]\">\n\t\t\t\t\t\t\t<CommandSentence template={resources.ReplacingSubscription}>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"SUBSCRIPTION_STATUS\">\n\t\t\t\t\t\t\t\t\t{resources.CurrentSubscriptionLower}\n\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex flex-col border border-solid border-(--ui-border-color) w-full p-4 gap-1\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`flex flex-col justify-center items-start gap-1 ${\n\t\t\t\t\t\t\t\tisMiniCart ? '' : 'md:flex-row md:justify-between md:items-center md:gap-0'\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography variant=\"ui2\">{item.existingSubscribedToOption.name}</Typography>\n\t\t\t\t\t\t\t<div className={`flex flex-col ${isMiniCart ? 'items-start' : 'items-start md:items-end'}`}>\n\t\t\t\t\t\t\t\t<Typography tag=\"div\" className=\"font-bold\" variant=\"ui2\">\n\t\t\t\t\t\t\t\t\t<CommandSentence key={renewalStatementTemplate} Container=\"span\" template={renewalStatementTemplate}>\n\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_AMOUNT\">\n\t\t\t\t\t\t\t\t\t\t\t{item.existingSubscribedToOption.anchorPricePreDiscountUsdText}\n\t\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t{usesForeignCurrency && (\n\t\t\t\t\t\t\t\t\t<Typography tag=\"span\" variant=\"ui4\" className=\"before:content-['('] after:content-[')']\">\n\t\t\t\t\t\t\t\t\t\t{item.existingSubscribedToOption.anchorPricePreDiscountCurrencyText}\n\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{item.existingSubscriptionCurrentExpirationDate && (\n\t\t\t\t\t\t\t<Typography variant=\"ui4\" className=\"text-[#7A7A7A]\">\n\t\t\t\t\t\t\t\t<CommandSentence template={resources.SetToRenewOn}>\n\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"RENEWAL_DATE\">\n\t\t\t\t\t\t\t\t\t\t<UtcDateTimeDisplay formattedDateTime={item.existingSubscriptionCurrentExpirationDate} />\n\t\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{isInCheckout &&\n\t\t\t\t!item.isExistingSubscriptionExpired &&\n\t\t\t\t(item.existingSubscriptionPaymentTerm === 'GoogleInAppPurchase' ||\n\t\t\t\t\titem.existingSubscriptionPaymentTerm === 'AppleInAppPurchase') && (\n\t\t\t\t\t<div className=\"flex flex-row gap-2 items-start mt-2\">\n\t\t\t\t\t\t<InfoIcon className=\"w-[14px] h-[14px] text-primary-500\" />\n\t\t\t\t\t\t<Typography variant=\"ui2\" className=\"text-primary-500\">\n\t\t\t\t\t\t\t<CommandSentence template={resources.AppManagedSubscription}>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"APP_STORE\">\n\t\t\t\t\t\t\t\t\t{item.existingSubscriptionPaymentTerm === 'GoogleInAppPurchase' ? resources.Google : resources.Apple}\n\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"APP_STORE_LINK\">\n\t\t\t\t\t\t\t\t\t{appStoreSubscriptionLink(item.existingSubscriptionPaymentTerm)}\n\t\t\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t</div>\n\t);\n}\n","import React, { useState } from 'react';\nimport { Typography } from '@faithlife/commerce-components';\nimport { useCartEffect } from '../checkout-shared/useCartEffect';\nimport { useLocalization } from '../../localization';\nimport { ShoppingCartItem } from './ShoppingCartItem';\nimport { ShoppingCartSubscribableItem } from './ShoppingCartSubscribableItem';\n\nexport default function ShoppingCartItems({\n\tupdateUrl,\n\tupsellDetailsUrl,\n\tcartItems: initialCartItems,\n\tisInCheckout = false,\n\tisModifiable,\n\tisDeliveredToGroup,\n\tshowCartSaveForLater,\n\tcontainsBundledItems: initialContainsBundledItems,\n\tusesForeignCurrency,\n\tshopMoreUrl,\n\tcartSubscribableItems: initialCartSubscribableItems,\n\tisMiniCart,\n}) {\n\tconst resources = useLocalization('Logos.CommerceWeb.ShoppingCarts.Resources.ShoppingCart');\n\tconst [cartItems, setCartItems] = useState(initialCartItems);\n\tconst [cartSubscribableItems, setCartSubscribableItems] = useState(initialCartSubscribableItems);\n\tconst [containsBundledItems, setContainsBundledItems] = useState(initialContainsBundledItems);\n\n\tuseCartEffect(cart => {\n\t\tsetCartItems(cart.order.lineItems);\n\t\tsetCartSubscribableItems(cart.order.subscribableLineItems);\n\t\tsetContainsBundledItems(cart.order.containsBundledItems);\n\t});\n\n\tif (!cartItems.length && !cartSubscribableItems.length) {\n\t\treturn (\n\t\t\t<div data-testid=\"empty-cart-copy\" className=\"pt-[10px] text-center\">\n\t\t\t\t<Typography tag=\"h3\" variant=\"headingH5\" className=\"mt-[130px]\">\n\t\t\t\t\t{resources.EmptyCart}\n\t\t\t\t</Typography>\n\t\t\t\t<Typography tag=\"p\" variant=\"bodySmall\" className=\"w-[74%] mx-auto mt-4 font-sans leading-[1.4rem]\">\n\t\t\t\t\t{resources.EmptyCartSummary}{' '}\n\t\t\t\t\t<a href={shopMoreUrl} title={resources.ProductsPageLinkText}>\n\t\t\t\t\t\t<Typography tag=\"span\" variant=\"bodySmall\">\n\t\t\t\t\t\t\t{resources.ProductsPageLinkText}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</a>\n\t\t\t\t\t{'.'}\n\t\t\t\t</Typography>\n\t\t\t\t<Typography tag=\"p\" variant=\"bodySmall\" className=\"w-[74%] mx-auto mt-4 font-sans text-base\">\n\t\t\t\t\t<a\n\t\t\t\t\t\tclassName=\"inline-block rounded-sm bg-[#1E6AFE] px-[10px] py-2 text-center text-[16px] font-normal text-white hover:text-white hover:bg-blue-400 transition-[background-color] duration-200 mt-[10px] shadow-[0_2px_4px_0_rgba(0,0,0,0.2)]\"\n\t\t\t\t\t\thref={shopMoreUrl}\n\t\t\t\t\t\ttitle={resources.GoShop}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Typography tag=\"span\" variant=\"bodySmall\" className=\"text-white hover:text-white\">\n\t\t\t\t\t\t\t{resources.GoShop}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</a>\n\t\t\t\t</Typography>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={`tw-preflight flex flex-col gap-[24px] ${isMiniCart ? 'px-4' : ''}`}>\n\t\t\t{cartSubscribableItems.length > 0 &&\n\t\t\t\tcartSubscribableItems.map(item => (\n\t\t\t\t\t<ShoppingCartSubscribableItem\n\t\t\t\t\t\tkey={item.stableId}\n\t\t\t\t\t\tisInCheckout={isInCheckout}\n\t\t\t\t\t\tisModifiable={isModifiable}\n\t\t\t\t\t\tisMiniCart={isMiniCart}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tupdateUrl={updateUrl}\n\t\t\t\t\t\tupsellDetailsUrl={upsellDetailsUrl}\n\t\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t{cartItems.length > 0 &&\n\t\t\t\tcartItems.map((item, index) => (\n\t\t\t\t\t<ShoppingCartItem\n\t\t\t\t\t\tkey={item.stableId ?? item.id ?? index}\n\t\t\t\t\t\tcartItems={cartItems}\n\t\t\t\t\t\tcontainsBundledItems={containsBundledItems}\n\t\t\t\t\t\tisInCheckout={isInCheckout}\n\t\t\t\t\t\tisDeliveredToGroup={isDeliveredToGroup}\n\t\t\t\t\t\tisModifiable={isModifiable}\n\t\t\t\t\t\titem={item}\n\t\t\t\t\t\tshowCartSaveForLater={showCartSaveForLater}\n\t\t\t\t\t\tupdateUrl={updateUrl}\n\t\t\t\t\t\tusesForeignCurrency={usesForeignCurrency}\n\t\t\t\t\t\tshouldShowYoursForever={cartSubscribableItems.length > 0}\n\t\t\t\t\t\tisMiniCart={isMiniCart}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t</div>\n\t);\n}\n","/**\n * @license lucide-react v1.27.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M12 16v-4\", key: \"1dtifu\" }],\n  [\"path\", { d: \"M12 8h.01\", key: \"e9boi3\" }]\n];\nconst Info = createLucideIcon(\"info\", __iconNode);\n\nexport { __iconNode, Info as default };\n//# sourceMappingURL=info.mjs.map\n","import React from 'react';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { Info } from 'lucide-react';\nimport { InfoIcon, Typography } from '@faithlife/commerce-components';\nimport { useLocalization } from '../../localization';\nimport UtcDateTimeDisplay from '../shared/utc-date-time-display';\n\nexport type SubscriptionPriceChangeDirection = 'Change' | 'Increase' | 'Decrease';\n\ninterface SubscriptionPriceChangeNoticeProps {\n\tsubscriptionName: string;\n\tpaymentAmount: string;\n\tpaymentDate: string;\n\tlearnMoreUrl: string;\n\tdirection?: SubscriptionPriceChangeDirection;\n\tvariant?: 'default' | 'infoBar';\n\tclassName?: string;\n}\n\nexport const SubscriptionPriceChangeNotice = ({\n\tsubscriptionName,\n\tpaymentAmount,\n\tpaymentDate,\n\tlearnMoreUrl,\n\tdirection,\n\tvariant = 'default',\n\tclassName,\n}: SubscriptionPriceChangeNoticeProps) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Subscriptions.Subscriptions');\n\tconst templates: Record<SubscriptionPriceChangeDirection, string> = {\n\t\tChange: resources.PriceChangeMessage,\n\t\tIncrease: resources.PriceIncreaseMessage,\n\t\tDecrease: resources.PriceDecreaseMessage,\n\t};\n\tconst template = templates[direction ?? 'Change'];\n\tconst message = (\n\t\t<CommandSentence template={template} Container=\"span\">\n\t\t\t<CommandSentence.Field name=\"SUBSCRIPTION\">\n\t\t\t\t<strong>{subscriptionName}</strong>\n\t\t\t</CommandSentence.Field>\n\t\t\t<CommandSentence.Field name=\"AMOUNT\">{paymentAmount}</CommandSentence.Field>\n\t\t\t<CommandSentence.Field name=\"DATE\">\n\t\t\t\t{variant === 'infoBar' ? paymentDate : <UtcDateTimeDisplay formattedDateTime={paymentDate} />}\n\t\t\t</CommandSentence.Field>\n\t\t\t<CommandSentence.Field name=\"LEARNMORE\">\n\t\t\t\t<a\n\t\t\t\t\tclassName=\"text-primary no-underline hover:underline\"\n\t\t\t\t\thref={learnMoreUrl}\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t>\n\t\t\t\t\t{resources.PriceChangeLearnMore}\n\t\t\t\t</a>\n\t\t\t</CommandSentence.Field>\n\t\t</CommandSentence>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[\n\t\t\t\tvariant === 'infoBar'\n\t\t\t\t\t? 'box-border flex w-full max-w-full items-start gap-sp6 rounded-[4px] border border-solid border-primary bg-(--theme-colors-primary-c100) px-sp8 py-sp12 text-primary-500'\n\t\t\t\t\t: 'mb-sp12 box-border flex w-fit max-w-full items-start gap-sp8 self-start rounded border border-solid border-primary bg-primary-100 p-sp8 text-sm leading-snug',\n\t\t\t\tclassName,\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(' ')}\n\t\t\tdata-testid=\"subscription-price-change-notice\"\n\t\t>\n\t\t\t{variant === 'infoBar' ? (\n\t\t\t\t<InfoIcon size={18} className=\"shrink-0 text-primary\" aria-hidden=\"true\" />\n\t\t\t) : (\n\t\t\t\t<Info className=\"mt-sp2 h-4 w-4 shrink-0 text-primary\" aria-hidden=\"true\" />\n\t\t\t)}\n\t\t\t{variant === 'infoBar' ? (\n\t\t\t\t<Typography tag=\"span\" variant=\"ui3\" className=\"m-0 leading-[120%] md:leading-[120%] lg:leading-[120%]\">\n\t\t\t\t\t{message}\n\t\t\t\t</Typography>\n\t\t\t) : (\n\t\t\t\tmessage\n\t\t\t)}\n\t\t</div>\n\t);\n};\n"],"names":["fetch","require","parseJson","response","json","postJson","url","data","postWithBody","body","then","module","exports","updateCart","changeSet","getUpsellDetails","fetchCart","post","breakPointNames","breakPoints","mobileCutoffWidth","desktopMinWidth","largeDesktopMinWidth","extraLargeDesktopMinWidth","standardDeviceWidths","formatSizeValue","size","computeSrcSetWidths","nominalWidths","deviceWidths","widthSet","Set","nominalWidth","add","sort","a","b","createSrcSetAttribute","srcSetWidths","src","aspectRatio","entries","width","URL","searchParams","set","String","Math","round","push","toString","length","join","undefined","getNominalWidths","processedSizes","widthProp","Object","values","map","s","filter","w","amberCdnHost","amberUrls","amberCdnUpgradableHosts","isAmberHost","host","includes","detectIsAmberOptimizedUrl","urlAsString","isAmberCdn","isOptimized","pathname","endsWith","toAmberCdnUrl","cdnUrl","protocol","port","Image","srcProp","alt","height","sizes","inputSizes","belowTheFold","fetchPriority","className","style","targetAspectRatio","numericAspectRatio","useMemo","tryAddAmberLimit","tryUpgradeAmberUrlToCdn","sizeName","floor","processSizes","isAmberOptimizedUrl","srcSetAttribute","containsResponsiveWidth","some","x","sizesAttribute","sizeResults","currentResult","i","sizeEntry","breakPoint","maxWidth","createSizesAttribute","imageProps","srcSet","loading","fetchpriority","React","_extends","ScheduledSubscriptionPriceChangeNotice","subscriptionName","notice","now","setNow","useState","Date","cutoff","scheduledPriceChangeExpiresAtUnixMilliseconds","useEffect","timer","update","clearTimeout","currentTime","setTimeout","min","window","addEventListener","document","removeEventListener","scheduledPriceChangePaymentAmount","scheduledPriceChangePaymentDate","scheduledPriceChangeDirection","SubscriptionPriceChangeNotice","paymentAmount","paymentDate","direction","learnMoreUrl","variant","UtcDateTimeDisplayFormatType","Enclosed","Plain","UtcDateTimeDisplay","formattedDateTime","formatType","template","useLocalization","CommandSentence","Container","Field","name","PricingLink","description","link","Tooltip","placement","InfoIcon","contentStyles","dangerouslySetInnerHTML","__html","QuantityStatus","ShoppingCartItem","autoRenews","cartItems","containsBundledItems","isInCheckout","isDeliveredToGroup","isModifiable","item","showCartSaveForLater","updateUrl","usesForeignCurrency","shouldShowYoursForever","isMiniCart","removeWishListItem","addWishListItemToCart","resources","enteredQuantity","setEnteredQuantity","quantity","quantityStatus","setQuantityStatus","commitQuantityUpdateRef","useRef","intraCartItems","intraCartDynamicPriceContributingCartItemIds","cartItemIds","find","id","handleRemoveItemFromCart","useCallback","saveForLater","current","cancel","eventAggregator","checkoutService","quantityByCartItemId","cartItemQuantitiesAfterRemoval","dispatchEvent","CustomEvent","detail","cart","order","analyticsTelemetry","dataLayer","e","commitQuantityUpdate","useDebouncedCallback","newQuantity","finally","updateQuantity","handleRemoveWishListItem","async","handleAddWishListItemToCart","skuIds","foreignCurrency","text","isNegative","Typography","tag","amountTodayBefore","prepubInfo","AmountToday","replace","amountTodayAfter","isDisplayable","href","target","rel","thumbnailUrl","mobile","desktop","prepubStatus","PreOrderItem","status","isIntraCartDynamicallyPriced","isOwnershipDynamicallyPriced","CartDynamicPricingMessage","CartDynamicPricingLearnMoreLink","DetailedIntraCartDynamicPricingMessage","key","IntraCartDynamicPricingMessage","OwnershipDynamicPricingMessage","isDigitallyFulfilled","isPermanentlyAccessible","YoursForever","YoursForeverDescription","isDiscounted","discountDescription","restrictionMessageHtml","expiredExtendedPriceCurrencyHtml","discountPercent","Boolean","anchorPriceCurrencyText","extendedPriceUsdCurrencyText","extendedPriceCurrencyText","PercentOff","anchorPriceUsdCurrencyText","extendedPreDiscountPriceUsdCurrencyText","extendedPreDiscountPriceCurrencyText","DueWhenShipped","dynamicPriceUsdCurrencyText","dynamicPriceCurrencyText","type","onClick","SaveForLater","title","Remove","TrashIcon","Button","scale","textStyle","AddToCart","allowsMultipleQuantity","StepperControl","value","disabled","onValueChange","isDynamicPricingInEffect","PrepubDynamicPriceNotification","priceUsdCurrencyText","priceCurrencyText","SubscriptionPriceBlock","isContentChange","discountBlock","discounts","discount","discountId","DiscountApplied","isImmediateDiscountAmountNonZero","Original","anchorPricePreDiscountUsdText","anchorPricePreDiscountCurrencyText","Discount","discountAmountUsdText","discountAmountText","totalProratedBalanceAppliedValue","extendedPriceUsdText","RenewalStatementMultiTerm","term","RenewalStatementYearly","RenewalStatementMonthly","isFreeTrial","FreeTrialStatement","freeTrialPeriod","renewalKindType","Day","Month","Year","renewalKind","freeTrialPeriodKind","RenewalStatementFreeTrialMultiTerm","RenewalStatementFreeTrialYearly","RenewalStatementFreeTrialMonthly","nextRenewalPriceUsdText","ShoppingCartSubscribableItem","upsellDetailsUrl","logosSubTitle","logosSubTerm","isLogosSubscription","split","renewalStatementTemplate","existingSubscribedToOption","handleRemove","quantityByCartSubscribableItemId","cartSubscribableItemId","upsell","setUpsell","isUpsellUpdatingRef","handleUpsell","isUpsellSelected","event","checked","onRemoveFailure","state","updateTo","updateFrom","upsellUpdate","debounceCartQuantityUpdate","SubscriptionIcon","isAnnualBilledMonthly","AnnualBilledMonthly","isMonthlyCommitmentMultiTerm","MonthlySubscriptionNonAnnualTerm","commitmentTermDisplay","AnnualSubscription","MonthlySubscription","FirstCharge","NextCharge","NextChargeValues","nextRenewalPriceCurrencyText","nextPaymentDate","AnnualAfter","multiTermRenewalDate","AnnualCommitmentRenewal","nextRenewalDate","NonAnnualCommitmentRenewal","Checkbox","onChange","label","message","saveMatch","exec","prefix","savePart","formatUpsellMessage","isMultipleQuantityAllowed","isExistingSubscriptionExpired","ReplaceIcon","ReplacingSubscription","CurrentSubscriptionLower","existingSubscriptionCurrentExpirationDate","SetToRenewOn","existingSubscriptionPaymentTerm","AppManagedSubscription","Google","Apple","paymentTerm","GooglePlayStore","NewPageIcon","AppleAppStore","ShoppingCartItems","initialCartItems","initialContainsBundledItems","shopMoreUrl","cartSubscribableItems","initialCartSubscribableItems","setCartItems","setCartSubscribableItems","setContainsBundledItems","useCartEffect","lineItems","subscribableLineItems","stableId","index","EmptyCart","EmptyCartSummary","ProductsPageLinkText","GoShop","Info","A","cx","cy","r","d","Change","PriceChangeMessage","Increase","PriceIncreaseMessage","Decrease","PriceDecreaseMessage","PriceChangeLearnMore"],"sourceRoot":""}