{"version":3,"file":"configuration-wizard-subscriptions.35cf2974040aebc2d7b0.js?ssi=0","mappings":"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","sources":["webpack://@logos/commerceweb-frontend/./Scripts/site/cart/utility/eventaggregator.js","webpack://@logos/commerceweb-frontend/./Scripts/site/clients/products-client.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/billing-modes.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/context.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-modal-ui.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-modal-ui.less?98d4","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-product-card.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-product-card.less?6140","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/index.less?59e1","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/plans-section/index.less?480f","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/plans-section/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/use-subscription-pricing-cards-children.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/subscription-product-card-sticky-header/index.less?2b1a","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/subscription-product-card-sticky-header/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/feature-component-details/index.less?c255","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/feature-component-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/index.less?6246","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/index.less?af84","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/index.less?8893","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/util/hooks/use-on-screen.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/index.less?358f","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/overlay-base/index.less?2581","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/overlay-base/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/mobile-comparison-chart/index.less?3b17","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/mobile-comparison-chart/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/compare-jump/index.less?9dbd","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/compare-jump/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/index.less?e84b","webpack://@logos/commerceweb-frontend/./Scripts/site/components/error-boundary/index.jsx"],"sourcesContent":["'use strict';\n\nconst handlers = {};\n// pending events allow a lot of subscribers to all come online during the same tick\nlet pending = {};\n// the timeout id to clear pending events at the end of a tick after an event has been triggered\nlet clear = undefined;\nconst eventAggregator = {\n\ton: function (events, handler) {\n\t\t// events can be one event (\"cart:updated\") or multiple separated by spaces (\"cart:validated cart:invalidated\")\n\t\t// this preserves the behavior of jQuery.on()\n\t\tfor (const event of events.split(' ')) {\n\t\t\tif (!handlers[event]) {\n\t\t\t\thandlers[event] = [];\n\t\t\t}\n\t\t\t// don't modify the handlers array or it'll cause iterator issues\n\t\t\thandlers[event] = [...handlers[event], handler];\n\t\t\t// pending events were fired on the same tick, but before you registered your handler\n\t\t\tif (!pending[event]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (const data of pending[event]) {\n\t\t\t\thandler({ type: event }, data);\n\t\t\t}\n\t\t}\n\t},\n\toff: function (events, handler) {\n\t\t// events can be one event (\"cart:updated\") or multiple separated by spaces (\"cart:validated cart:invalidated\")\n\t\t// this preserves the behavior of jQuery.off()\n\t\tfor (const event of events.split(' ')) {\n\t\t\tif (!handlers[event]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst index = handlers[event].indexOf(handler);\n\t\t\tif (index === -1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// don't modify the handlers array or it'll cause iterator issues\n\t\t\thandlers[event] = handlers[event].filter((it, ix) => ix !== index);\n\t\t}\n\t},\n\ttrigger: function (event, data) {\n\t\tif (typeof window === 'undefined') {\n\t\t\tthrow new Error('Events cannot be triggered server-side. Wrap them in an event handler or useEffect.');\n\t\t}\n\t\tif (!pending[event]) {\n\t\t\tpending[event] = [];\n\t\t}\n\t\tpending[event].push(data);\n\t\tif (!handlers[event]) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const handler of handlers[event]) {\n\t\t\ttry {\n\t\t\t\thandler({ type: event }, data);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`[eventAggregator] Error in \"${event}\" handler:`, e);\n\t\t\t}\n\t\t}\n\t\tif (!clear) {\n\t\t\tclear = setTimeout(() => {\n\t\t\t\t// on the next tick, clear the pending queue and allow us to restart the pending queue\n\t\t\t\tclear = undefined;\n\t\t\t\tpending = {};\n\t\t\t}, 0);\n\t\t}\n\t},\n};\n\nif (!global.eventAggregator) {\n\tglobal.eventAggregator = eventAggregator;\n}\nmodule.exports = global.eventAggregator;\n","import { fetch } from '../util/fetch';\n\nexport default class ProductsClient {\n\tstatic async getContainingProductsAsync({ containingProductsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: containingProductsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getHasContainingProductsAsync({ hasContainingProductsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: hasContainingProductsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getContainingSubscriptionsAsync({ containingSubscriptionsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: containingSubscriptionsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getProductsCustomersAlsoBoughtAsync({ customersAlsoBoughtUrl, skuIds }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: customersAlsoBoughtUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getTooltipAsync({ url }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: url,\n\t\t});\n\t\treturn await response.json();\n\t}\n\n\tstatic async getProductDownloadsAsync({ downloadsUrl, skuIds }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: downloadsUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getFeaturedProducts(featuredProductIdsUrl) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: featuredProductIdsUrl,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn (await response.json()).featuredProducts;\n\t}\n\n\tstatic async getQuickCompare(quickCompareUrl) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: quickCompareUrl,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getUnownedResourcesInfos(unownedResourcesInfosBaseUrl, productIds) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: `${unownedResourcesInfosBaseUrl}?productIds=${productIds.join()}`,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn (await response.json()).infos;\n\t}\n\n\tstatic async getShortBlurbsForProductIds(getShortBlurbsUrl, productIds) {\n\t\tconst response = await fetch.postWithBody({\n\t\t\turl: getShortBlurbsUrl,\n\t\t\tbody: {\n\t\t\t\tproductIds: productIds,\n\t\t\t},\n\t\t});\n\t\treturn await response.json();\n\t}\n\n\tstatic async getSubscriptionPromotionsForSkuIds(getSubscriptionPromotionsUrl, skuIds) {\n\t\tconst response = await fetch.get({\n\t\t\turl: getSubscriptionPromotionsUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n}\n","const BillingMode = {\n\tMonthly: 'Monthly',\n\tAnnually: 'Annually',\n\tMultiAnnualTerm: 'MultiAnnualTerm',\n};\n\nconst allBillingModes = Object.values(BillingMode);\n\nexport { BillingMode, allBillingModes };\n","import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';\nimport { SubscriptionBillingPeriodOptions } from '@faithlife/commerce-components';\nimport { useConfigurationWizardCartContext } from '../shared/configuration-wizard-cart';\nimport { useLocation } from '../../location';\nimport { RouteContext } from '../../route-context';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport { SubscriptionProductData, usePerUserDataContext } from '../per-user-data/per-user-data-context';\n\ninterface ConfigurationWizardContextType {\n\tisLibraryUpsellModalOpen: boolean;\n\tsetIsLibraryUpsellModalOpen: (isOpen: boolean) => void;\n\tisLoading: boolean;\n\tsetIsLoading: (isLoading: boolean) => void;\n\tselectedSubscribableProduct: SubscriptionProductData | null;\n\thandleShowLibraryUpsellModal: (optionId: string) => void;\n\tselectedBillingMode: SubscriptionBillingPeriodOptions | null;\n\tsetSelectedBillingMode: (mode: SubscriptionBillingPeriodOptions) => void;\n\tselectedSpoid?: string | null;\n\tsetSelectedSpoid?: (selectedSpoid: string) => void;\n\tspoids: string[];\n\tcouponCodes: string[];\n}\n\nconst ConfigurationWizardContext = createContext<ConfigurationWizardContextType | null>(null);\n\nexport interface ConfigurationWizardContextProps {\n\tinitialValue: {\n\t\tisLibraryUpsellAvailable: boolean;\n\t\tspoids: string[];\n\t\tcouponCodes: string[];\n\t\tdefaultBillingMode?: SubscriptionBillingPeriodOptions | null;\n\t};\n\tchildren: React.ReactNode;\n}\n\nexport function ConfigurationWizardContextProvider({ initialValue, children }: ConfigurationWizardContextProps) {\n\tconst { value: cart } = useConfigurationWizardCartContext() as {\n\t\tvalue: { hasLibraryInCart?: boolean; subscriptionsInCart?: { spoId: string; quantity: number }[] } | null;\n\t};\n\tconst { navigate } = useLocation();\n\tconst { routes } = useContext(RouteContext);\n\n\tconst isLibraryUpsellAvailable = initialValue.isLibraryUpsellAvailable;\n\n\tconst [isLibraryUpsellModalOpen, setIsLibraryUpsellModalOpen] = useState<boolean>(false);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tconst subscriptionInCart = cart?.subscriptionsInCart?.[0];\n\tconst [selectedSpoid, setSelectedSpoid] = useState<string | null>(subscriptionInCart?.spoId ?? null);\n\n\tconst [selectedSubscribableProduct, setSelectedSubscribableProduct] = useState<SubscriptionProductData | null>(null);\n\tconst [selectedBillingMode, setSelectedBillingMode] = useState<SubscriptionBillingPeriodOptions | null>(\n\t\tinitialValue.defaultBillingMode ?? null\n\t);\n\n\tconst { getSubscriptionProductData } = usePerUserDataContext();\n\n\tconst getSelectedSubscribableProductData = useCallback(\n\t\tasync (optionId: string, quantity: number) => {\n\t\t\treturn await getSubscriptionProductData(optionId, initialValue.couponCodes, quantity === 2);\n\t\t},\n\t\t[getSubscriptionProductData, initialValue.couponCodes]\n\t);\n\n\tuseEffect(() => {\n\t\tlet isCancelled = false;\n\n\t\tasync function loadSelectedSubscribableProductData() {\n\t\t\tif (!subscriptionInCart) {\n\t\t\t\tsetSelectedSubscribableProduct(null);\n\t\t\t\tsetSelectedBillingMode(null);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectedSubscribableProductData = await getSelectedSubscribableProductData(\n\t\t\t\tsubscriptionInCart.spoId,\n\t\t\t\tsubscriptionInCart.quantity\n\t\t\t);\n\n\t\t\tif (isCancelled || !selectedSubscribableProductData) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tsetSelectedSubscribableProduct(selectedSubscribableProductData);\n\t\t\tsetSelectedBillingMode(\n\t\t\t\tselectedSubscribableProductData.isMultiAnnualSubscription\n\t\t\t\t\t? SubscriptionBillingPeriodOptions.MultiAnnual\n\t\t\t\t\t: (selectedSubscribableProductData.optionBillingMode as SubscriptionBillingPeriodOptions)\n\t\t\t);\n\t\t}\n\n\t\tvoid loadSelectedSubscribableProductData();\n\n\t\treturn () => {\n\t\t\tisCancelled = true;\n\t\t};\n\t}, [getSelectedSubscribableProductData, subscriptionInCart]);\n\n\tconst handleShowLibraryUpsellModal = useCallback(\n\t\tasync (optionId: string) => {\n\t\t\tconst hasLibraryInCart = cart?.hasLibraryInCart ?? false;\n\n\t\t\tif (hasLibraryInCart) {\n\t\t\t\tsetIsLoading(true);\n\t\t\t\tnavigate(routes.CartUrl);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isLibraryUpsellAvailable) {\n\t\t\t\tconst selectedSubscribableProduct = await getSelectedSubscribableProductData(\n\t\t\t\t\toptionId ?? '',\n\t\t\t\t\tselectedBillingMode === SubscriptionBillingPeriodOptions.MultiAnnual ? 2 : 1\n\t\t\t\t);\n\n\t\t\t\tif (selectedSubscribableProduct) {\n\t\t\t\t\tsetSelectedSubscribableProduct(selectedSubscribableProduct);\n\t\t\t\t\tsetIsLibraryUpsellModalOpen(true);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsLoading(true);\n\t\t\tnavigate(routes.ConfigurationWizardLibrariesUrl);\n\t\t},\n\t\t[\n\t\t\tcart?.hasLibraryInCart,\n\t\t\tisLibraryUpsellAvailable,\n\t\t\tgetSelectedSubscribableProductData,\n\t\t\tnavigate,\n\t\t\troutes.CartUrl,\n\t\t\troutes.ConfigurationWizardLibrariesUrl,\n\t\t\tselectedBillingMode,\n\t\t]\n\t);\n\n\tfunction getSelectedSpoidFromUpdatedCart(\n\t\tupdatedCart: {\n\t\t\torder?: {\n\t\t\t\tsubscribableLineItems?: {\n\t\t\t\t\tisLogosSubscription?: boolean;\n\t\t\t\t\tsubscribableProductOptionId?: string | null;\n\t\t\t\t}[];\n\t\t\t};\n\t\t},\n\t\tselectedSpoid?: string | null\n\t) {\n\t\treturn (\n\t\t\tupdatedCart?.order?.subscribableLineItems?.find(\n\t\t\t\titem =>\n\t\t\t\t\titem?.isLogosSubscription &&\n\t\t\t\t\titem?.subscribableProductOptionId &&\n\t\t\t\t\titem?.subscribableProductOptionId !== selectedSpoid\n\t\t\t)?.subscribableProductOptionId ?? null\n\t\t);\n\t}\n\n\tuseEffect(() => {\n\t\tfunction handleCartUpdated(_event: { type: string }, updatedCart: { order?: { subscribableLineItems?: [] } }) {\n\t\t\tsetSelectedSpoid(currentSelectedSpoid => getSelectedSpoidFromUpdatedCart(updatedCart, currentSelectedSpoid));\n\t\t}\n\n\t\teventAggregator.on('cart:updated', handleCartUpdated);\n\n\t\treturn () => {\n\t\t\teventAggregator.off('cart:updated', handleCartUpdated);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<ConfigurationWizardContext.Provider\n\t\t\tvalue={{\n\t\t\t\tisLibraryUpsellModalOpen,\n\t\t\t\tsetIsLibraryUpsellModalOpen,\n\t\t\t\tisLoading,\n\t\t\t\tsetIsLoading,\n\t\t\t\tselectedSubscribableProduct,\n\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\tselectedBillingMode,\n\t\t\t\tsetSelectedBillingMode,\n\t\t\t\tselectedSpoid,\n\t\t\t\tsetSelectedSpoid,\n\t\t\t\tspoids: initialValue.spoids,\n\t\t\t\tcouponCodes: initialValue.couponCodes,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ConfigurationWizardContext.Provider>\n\t);\n}\n\nexport const useConfigurationWizardContext = () => useContext(ConfigurationWizardContext);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from '@faithlife/styled-ui';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport { Button } from '@faithlife/commerce-components';\nimport { X, Checkmark, SubscriptionStar } from '../svgs';\n\nimport { useLocalization } from '../../../localization';\nimport styles from './library-upsell-modal-ui.less';\n\nexport function LibraryUpsellModalUi({\n\tselectedProduct,\n\tlibraryProductCards,\n\topen,\n\tonDismiss,\n\tonShopLibrariesClick,\n\tonProceedWithoutLibraryClick,\n}) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\treturn (\n\t\t<Modal\n\t\t\tisOpen={open}\n\t\t\tonClose={onDismiss}\n\t\t\tcontainer=\"body\"\n\t\t\twidth={['calc(100vw - 24px)', 'calc(100vw - 156px)']}\n\t\t\tmaxWidth=\"1164px\"\n\t\t\t/* This z-index beats out the detail modals on mobile, so it always gets displayed over them */\n\t\t\tzIndex={10000}\n\t\t\tclassName={styles.modal}\n\t\t>\n\t\t\t<div\n\t\t\t\tdata-testid=\"library-upsell-modal\"\n\t\t\t\tclassName={styles.modalContent}\n\t\t\t\tstyle={{ maxHeight: 'calc(100vh - 32px)' }}\n\t\t\t>\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerMessage}>\n\t\t\t\t\t\t<Checkmark />\n\t\t\t\t\t\t<div className={styles.headerText}>\n\t\t\t\t\t\t\t<CommandSentence template={resources.YouveSelectedSubscribableProduct}>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRODUCT_NAME\">{selectedProduct.name}</CommandSentence.Field>\n\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button onClick={onDismiss} className={styles.closeButton}>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.content}>\n\t\t\t\t\t<div className={styles.description}>{resources.WantMoreInsights}</div>\n\t\t\t\t\t<div className={styles.productCardsLayout}>\n\t\t\t\t\t\t{libraryProductCards.map((card, index) => (\n\t\t\t\t\t\t\t<div key={index} className={styles.productCardWrapper}>\n\t\t\t\t\t\t\t\t{card}\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</div>\n\t\t\t\t<div className={styles.footer}>\n\t\t\t\t\t<div className={styles.selectionInfo}>\n\t\t\t\t\t\t<div className={styles.selectionTitle}>{resources.YourSelection}</div>\n\t\t\t\t\t\t<div className={styles.selectionDetails}>\n\t\t\t\t\t\t\t<div className={styles.productInfo}>\n\t\t\t\t\t\t\t\t<SubscriptionStar />\n\t\t\t\t\t\t\t\t<div className={styles.productTier}>{selectedProduct.tier}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{selectedProduct.pricing !== null && (\n\t\t\t\t\t\t\t\t<div className={styles.pricingInfo}>\n\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\tswitch (selectedProduct.pricing.termPeriod) {\n\t\t\t\t\t\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerMonth}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerYear}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcase 'twoYears':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerTwoYears}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\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})()}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.buttons}>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName={styles.secondaryButton}\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tscale=\"medium\"\n\t\t\t\t\t\t\tonClick={onShopLibrariesClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{resources.ShopAllLibraries}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName={styles.primaryButton}\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tscale=\"medium\"\n\t\t\t\t\t\t\tonClick={onProceedWithoutLibraryClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{resources.ProceedWithoutLibrary}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nLibraryUpsellModalUi.propTypes = {\n\tlibraryProductCards: PropTypes.arrayOf(PropTypes.node).isRequired,\n\tselectedProduct: PropTypes.shape({\n\t\tname: PropTypes.string.isRequired,\n\t\ttier: PropTypes.string.isRequired,\n\t\tpricing: PropTypes.shape({\n\t\t\tamount: PropTypes.string.isRequired,\n\t\t\ttermPeriod: PropTypes.oneOf(['month', 'year', 'twoYears']).isRequired,\n\t\t}),\n\t}).isRequired,\n\topen: PropTypes.bool.isRequired,\n\tonDismiss: PropTypes.func,\n\tonShopLibrariesClick: PropTypes.func,\n\tonProceedWithoutLibraryClick: PropTypes.func,\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"library-upsell-modal-ui--modal--NO9uo\",\"modalContent\":\"library-upsell-modal-ui--modalContent--tfQTR\",\"header\":\"library-upsell-modal-ui--header--JjKED\",\"headerMessage\":\"library-upsell-modal-ui--headerMessage--Ij4yI\",\"headerText\":\"library-upsell-modal-ui--headerText--mgu2r\",\"closeButton\":\"library-upsell-modal-ui--closeButton--bDQog\",\"content\":\"library-upsell-modal-ui--content--fGfk9\",\"description\":\"library-upsell-modal-ui--description--21ntT\",\"productCardsLayout\":\"library-upsell-modal-ui--productCardsLayout--VyKZ-\",\"productCardWrapper\":\"library-upsell-modal-ui--productCardWrapper--ET0QI\",\"footer\":\"library-upsell-modal-ui--footer--jZT9H\",\"selectionInfo\":\"library-upsell-modal-ui--selectionInfo--MQ+X1\",\"selectionTitle\":\"library-upsell-modal-ui--selectionTitle--ENsMU\",\"selectionDetails\":\"library-upsell-modal-ui--selectionDetails--AuzxQ\",\"productInfo\":\"library-upsell-modal-ui--productInfo--c7UD4\",\"subscriptionIcon\":\"library-upsell-modal-ui--subscriptionIcon--ylowj\",\"productTier\":\"library-upsell-modal-ui--productTier--8Cscm\",\"pricingInfo\":\"library-upsell-modal-ui--pricingInfo--I-hjM\",\"buttons\":\"library-upsell-modal-ui--buttons--aCeSs\",\"primaryButton\":\"library-upsell-modal-ui--primaryButton--GgPoX btn btn-primary\",\"secondaryButton\":\"library-upsell-modal-ui--secondaryButton---QfgW btn btn-secondary-inverted\"};","import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport { AddToCartButton, CommerceComponentsContextProvider, IdentifierTypes } from '@faithlife/commerce-components';\nimport { useAddToCartRequest } from '../../builder/use-add-to-cart-request';\nimport { useLocalization } from '../../../localization';\nimport styles from './library-upsell-product-card.less';\n\nexport function LibraryUpsellProductCard({\n\tproductId,\n\tskuId,\n\timageUri,\n\tname,\n\tbookCount,\n\tlibraryValue,\n\tprice,\n\tsavingsPercentage,\n\tonLibraryAddedToCart,\n}) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\tconst addToCartButtonResources = useLocalization('CommerceWeb.Resources.Shared.AddToMiniCartButton');\n\n\tconst { onAddToCartRequest: handleAddToCartRequest } = useAddToCartRequest();\n\tconst contextValue = useMemo(() => {\n\t\treturn {\n\t\t\tonAddToCartRequest: (args, options) =>\n\t\t\t\thandleAddToCartRequest(args, {\n\t\t\t\t\t...options,\n\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\tonLibraryAddedToCart?.();\n\t\t\t\t\t\toptions?.onSuccess?.();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\tresources: {\n\t\t\t\taddToCartButton: addToCartButtonResources,\n\t\t\t},\n\t\t};\n\t}, [addToCartButtonResources, handleAddToCartRequest, onLibraryAddedToCart]);\n\n\treturn (\n\t\t<div className={styles.productCard}>\n\t\t\t{savingsPercentage !== undefined && savingsPercentage > 1 && (\n\t\t\t\t<div className={styles.savingsBadge}>\n\t\t\t\t\t<SavingsPercentage savingsPercentage={savingsPercentage} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className={styles.imageContainer}>\n\t\t\t\t<img alt={name} src={imageUri || ''} className={styles.productImage} />\n\t\t\t</div>\n\t\t\t<div className={styles.contentContainer}>\n\t\t\t\t<div className={styles.productDetails}>\n\t\t\t\t\t<div className={styles.yoursForever}>{resources.YoursForever}</div>\n\t\t\t\t\t<div className={styles.productInfo}>\n\t\t\t\t\t\t<div className={styles.productName}>{name}</div>\n\t\t\t\t\t\t{bookCount && (\n\t\t\t\t\t\t\t<div className={styles.bookCount}>\n\t\t\t\t\t\t\t\t<CommandSentence template={resources.IncludesBooks}>\n\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"BOOK_COUNT\">{bookCount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t</CommandSentence>\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</div>\n\t\t\t\t<div className={styles.actionContainer}>\n\t\t\t\t\t<div className={styles.priceContainer}>\n\t\t\t\t\t\t{libraryValue && (\n\t\t\t\t\t\t\t<div className={styles.libraryValue}>\n\t\t\t\t\t\t\t\t{resources.Value}\n\t\t\t\t\t\t\t\t{':'} {libraryValue}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className={styles.price}>{price}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.buttonsContainer}>\n\t\t\t\t\t\t<CommerceComponentsContextProvider value={contextValue}>\n\t\t\t\t\t\t\t<AddToCartButton\n\t\t\t\t\t\t\t\titems={[skuId].filter(Boolean).map(id => ({ identifier: id, type: IdentifierTypes.SKU, quantity: 1 }))}\n\t\t\t\t\t\t\t\tscale=\"small\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</CommerceComponentsContextProvider>\n\t\t\t\t\t\t<a className={styles.seeInsideLink} href={`/products/${productId}`}>\n\t\t\t\t\t\t\t{resources.SeeWhatsInside}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nLibraryUpsellProductCard.propTypes = {\n\tproductId: PropTypes.string.isRequired,\n\tskuId: PropTypes.string,\n\timageUri: PropTypes.string.isRequired,\n\tname: PropTypes.string.isRequired,\n\tbookCount: PropTypes.number,\n\tlibraryValue: PropTypes.string,\n\tprice: PropTypes.string,\n\tsavingsPercentage: PropTypes.number,\n\tonLibraryAddedToCart: PropTypes.func,\n};\n\nfunction SavingsPercentage({ savingsPercentage }) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\treturn (\n\t\t<div className={styles.savingsPercentageBadge}>\n\t\t\t<CommandSentence template={resources.SavePercentage}>\n\t\t\t\t<CommandSentence.Field name=\"PERCENTAGE\">{Math.round(savingsPercentage)}</CommandSentence.Field>\n\t\t\t</CommandSentence>\n\t\t</div>\n\t);\n}\n\nSavingsPercentage.propTypes = {\n\tsavingsPercentage: PropTypes.number.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"productCard\":\"library-upsell-product-card--productCard--uXu5f\",\"savingsBadge\":\"library-upsell-product-card--savingsBadge--Z-x2G\",\"savingsPercentageBadge\":\"library-upsell-product-card--savingsPercentageBadge--Gyiog\",\"imageContainer\":\"library-upsell-product-card--imageContainer--aJhqn\",\"productImage\":\"library-upsell-product-card--productImage--tl3R8\",\"contentContainer\":\"library-upsell-product-card--contentContainer--r0H4o\",\"productDetails\":\"library-upsell-product-card--productDetails--wcyrd\",\"yoursForever\":\"library-upsell-product-card--yoursForever--KbLUP\",\"productInfo\":\"library-upsell-product-card--productInfo--RcLTI\",\"productName\":\"library-upsell-product-card--productName--6k6MR\",\"bookCount\":\"library-upsell-product-card--bookCount--WpyX6\",\"actionContainer\":\"library-upsell-product-card--actionContainer--IgI6b\",\"priceContainer\":\"library-upsell-product-card--priceContainer--30Lc9\",\"libraryValue\":\"library-upsell-product-card--libraryValue--q2hKw\",\"strikethrough\":\"library-upsell-product-card--strikethrough--muHA3\",\"price\":\"library-upsell-product-card--price--KxmNi\",\"buttonsContainer\":\"library-upsell-product-card--buttonsContainer--nLX8K\",\"addToCartButton\":\"library-upsell-product-card--addToCartButton--686Mb btn btn-secondary-inverted\",\"seeInsideLink\":\"library-upsell-product-card--seeInsideLink--5jStW\"};","import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport ErrorBoundary from '../../error-boundary';\nimport { useLocation } from '../../../location';\nimport { BillingMode } from '../billing-modes';\n\nimport { useConfigurationWizardContext } from '../context';\nimport { RouteContext } from '../../../route-context';\nimport { LibraryUpsellModalUi } from './library-upsell-modal-ui';\nimport { LibraryUpsellProductCard } from './library-upsell-product-card';\nimport styles from './index.less';\n\nfunction withCancellation(asyncFunction) {\n\tconst cancellationTokenSource = { isCancelled: false };\n\tconst cancellationToken = {\n\t\tget isCancelled() {\n\t\t\treturn cancellationTokenSource.isCancelled;\n\t\t},\n\t};\n\n\tasyncFunction(cancellationToken);\n\n\treturn () => {\n\t\tcancellationTokenSource.isCancelled = true;\n\t};\n}\n\nfunction mapBillingModeToTermPeriod(billingMode) {\n\tswitch (billingMode) {\n\t\tcase BillingMode.Monthly:\n\t\t\treturn 'month';\n\n\t\tcase BillingMode.Annually:\n\t\t\treturn 'year';\n\n\t\tcase BillingMode.MultiAnnualTerm:\n\t\t\treturn 'twoYears';\n\t}\n}\n\nconst cachedLibraryUpsellTrackProductsByTrackProductId = new Map();\nasync function getOrFetchLibraryUpsellTrackProducts(suggestedLibraryTrackProductId, routes, baseUrl) {\n\tif (cachedLibraryUpsellTrackProductsByTrackProductId.has(suggestedLibraryTrackProductId)) {\n\t\treturn cachedLibraryUpsellTrackProductsByTrackProductId.get(suggestedLibraryTrackProductId);\n\t}\n\n\tconst url = new URL(routes.GetLibraryUpsellTrackProductsUrl, baseUrl);\n\turl.searchParams.append('suggestedLibraryTrackProductId', suggestedLibraryTrackProductId);\n\n\tlet products = null;\n\ttry {\n\t\tconst response = await fetch(url);\n\t\tif (!response.ok) {\n\t\t\tproducts = [];\n\t\t} else {\n\t\t\tconst data = await response.json();\n\t\t\tproducts = data.products ?? [];\n\t\t}\n\t} catch (error) {\n\t\tproducts = [];\n\t}\n\n\tcachedLibraryUpsellTrackProductsByTrackProductId.set(suggestedLibraryTrackProductId, products);\n\treturn products;\n}\n\nfunction LibraryUpsellModal() {\n\tconst { origin, navigate } = useLocation();\n\tconst {\n\t\tisLibraryUpsellModalOpen,\n\t\tsetIsLibraryUpsellModalOpen,\n\t\tsetIsLoading,\n\t\tselectedSubscribableProduct,\n\t\tselectedBillingMode,\n\t} = useConfigurationWizardContext();\n\tconst suggestedLibraryTrackProductId = selectedSubscribableProduct?.recommendedTrackProductId ?? null;\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst [libraryUpsellTrackProductData, setLibraryUpsellTrackProductData] = useState(null);\n\n\tuseEffect(() => {\n\t\tasync function fetchUpsellData(cancellationToken) {\n\t\t\tsetLibraryUpsellTrackProductData(null);\n\t\t\tif (suggestedLibraryTrackProductId) {\n\t\t\t\tconst products = await getOrFetchLibraryUpsellTrackProducts(suggestedLibraryTrackProductId, routes, origin);\n\n\t\t\t\tif (!cancellationToken.isCancelled) {\n\t\t\t\t\tsetLibraryUpsellTrackProductData(products);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn withCancellation(fetchUpsellData);\n\t}, [origin, routes, suggestedLibraryTrackProductId]);\n\n\tconst handleLibraryUpsellModalProceedToCartClick = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleLibraryUpsellModalViewLibrariesClick = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.ConfigurationWizardLibrariesUrl);\n\t}, [navigate, routes.ConfigurationWizardLibrariesUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleLibraryUpsellModalLibraryAddedToCart = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleDismissLibraryUpsellModal = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst selectedProduct = selectedSubscribableProduct\n\t\t? {\n\t\t\t\tname: selectedSubscribableProduct.title,\n\t\t\t\ttier: selectedSubscribableProduct.title,\n\t\t\t\tpricing: selectedSubscribableProduct.initialCharge\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tamount: selectedSubscribableProduct.initialCharge,\n\t\t\t\t\t\t\ttermPeriod: mapBillingModeToTermPeriod(selectedBillingMode),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t}\n\t\t: null;\n\n\tconst libraryProductCards = useMemo(() => {\n\t\tif (!libraryUpsellTrackProductData) {\n\t\t\treturn [<LoadingProductCard key=\"0\" />, <LoadingProductCard key=\"1\" />, <LoadingProductCard key=\"2\" />];\n\t\t}\n\n\t\treturn libraryUpsellTrackProductData.map(product => {\n\t\t\treturn (\n\t\t\t\t<div key={product.id}>\n\t\t\t\t\t<LibraryUpsellProductCard\n\t\t\t\t\t\tkey={product.productId}\n\t\t\t\t\t\tproductId={product.productId}\n\t\t\t\t\t\tskuId={product.skuId}\n\t\t\t\t\t\timageUri={product.imageUri}\n\t\t\t\t\t\tname={product.name}\n\t\t\t\t\t\tbookCount={product.bookCount}\n\t\t\t\t\t\tlibraryValue={product.libraryValue}\n\t\t\t\t\t\tprice={product.price}\n\t\t\t\t\t\tsavingsPercentage={product.savingsPercentage}\n\t\t\t\t\t\tonLibraryAddedToCart={handleLibraryUpsellModalLibraryAddedToCart}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t});\n\t}, [libraryUpsellTrackProductData, handleLibraryUpsellModalLibraryAddedToCart]);\n\n\tif (!selectedProduct) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<LibraryUpsellModalUi\n\t\t\tonDismiss={handleDismissLibraryUpsellModal}\n\t\t\tonProceedWithoutLibraryClick={handleLibraryUpsellModalProceedToCartClick}\n\t\t\tonShopLibrariesClick={handleLibraryUpsellModalViewLibrariesClick}\n\t\t\topen={isLibraryUpsellModalOpen}\n\t\t\tselectedProduct={selectedProduct}\n\t\t\tlibraryProductCards={libraryProductCards}\n\t\t/>\n\t);\n}\n\nfunction LoadingProductCard() {\n\treturn (\n\t\t<div className={styles.loadingSkeleton}>\n\t\t\t<div className={styles.skeletonBox} />\n\t\t</div>\n\t);\n}\n\nfunction LibraryUpsellModalWithErrorBoundary() {\n\treturn (\n\t\t<ErrorBoundary>\n\t\t\t<LibraryUpsellModal />\n\t\t</ErrorBoundary>\n\t);\n}\n\nexport { LibraryUpsellModalWithErrorBoundary as LibraryUpsellModal };\n","// extracted by mini-css-extract-plugin\nexport default {\"loadingSkeleton\":\"index--loadingSkeleton--5ZSoT\",\"pulse\":\"index--pulse--dzzcU\",\"skeletonBox\":\"index--skeletonBox--sheKH\"};","// extracted by mini-css-extract-plugin\nexport default {\"plansSectionControls\":\"index--plansSectionControls--LnVea\",\"plansSectionControlsMobile\":\"index--plansSectionControlsMobile--jE0xZ\",\"plansSection\":\"index--plansSection--0sNLu\",\"levels\":\"index--levels--Z46Xu\",\"compareSubscriptionsArrow\":\"index--compareSubscriptionsArrow--Pu+1O\",\"trackSelector\":\"index--trackSelector--HMeUN\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport { RightArrow } from '../../svgs';\n\nimport { useLocalization } from '../../../../localization';\nimport sharedStyles from '../../shared.less';\nimport { useConfigurationWizardContext } from '../../context';\nimport RenderBuilderContent from '../../../builder/render-builder-content';\nimport styles from './index.less';\n\nconst PlansSection = ({ onDisplayMobileComparisonChart, subscriptionCardsContentViewModel }) => {\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\thandleShowLibraryUpsellModal,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\n\tconst handleCompareClick = () => {\n\t\tonDisplayMobileComparisonChart?.();\n\t};\n\n\treturn (\n\t\t<div className={styles.plansSectionContainer}>\n\t\t\t<div className={styles.plansSection} data-testid=\"plans-section\">\n\t\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.Full,\n\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RenderBuilderContent {...subscriptionCardsContentViewModel.builderIo} restrictOverflow={false} />\n\t\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t\t)}\n\t\t\t\t<CompareSubscriptionsArrow onClick={handleCompareClick} />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nPlansSection.propTypes = {\n\tonDisplayMobileComparisonChart: PropTypes.func.isRequired,\n\tsubscriptionCardsContentViewModel: PropTypes.object.isRequired,\n};\n\nconst CompareSubscriptionsArrow = ({ onClick }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\treturn (\n\t\t<button onClick={onClick} className={styles.compareSubscriptionsArrow}>\n\t\t\t<p className={sharedStyles.ui2}>{resources.CompareSubscriptions}</p>\n\t\t\t<RightArrow />\n\t\t</button>\n\t);\n};\n\nCompareSubscriptionsArrow.propTypes = {\n\tonClick: PropTypes.func.isRequired,\n};\n\nexport default PlansSection;\n","import React from 'react';\nimport RenderBuilderContent from '../../builder/render-builder-content';\n\nexport function getSubscriptionPricingCards(subscriptionPricingCardsContent) {\n\treturn (subscriptionPricingCardsContent?.data?.blocks ?? []).find(\n\t\tb => b.component.name === 'v2: SubscriptionPricingCards'\n\t);\n}\nexport function getSubscriptionPricingCardsChildren(subscriptionPricingCardsContent) {\n\treturn getSubscriptionPricingCards(subscriptionPricingCardsContent)?.children ?? [];\n}\n\nexport function useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel) {\n\tconst subscriptionCardsContent = subscriptionCardsContentViewModel.builderIo.content;\n\tconst subscriptionCardsChildren = getSubscriptionPricingCardsChildren(subscriptionCardsContent);\n\n\tconst subscriptionCardsChildrenViewModels = subscriptionCardsChildren?.map(c => ({\n\t\t...subscriptionCardsContentViewModel,\n\t\tbuilderIo: {\n\t\t\t...subscriptionCardsContentViewModel.builderIo,\n\t\t\tcontent: {\n\t\t\t\t...(subscriptionCardsContent ?? {}),\n\t\t\t\tdata: {\n\t\t\t\t\t...(subscriptionCardsContent?.data ?? {}),\n\t\t\t\t\tblocks: [c],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn subscriptionCardsChildrenViewModels?.map(vm => ({\n\t\tid: vm.builderIo.content.data.blocks[0].component.options.spoid,\n\t\tcomponent: <RenderBuilderContent {...vm.builderIo} restrictOverflow={false} />,\n\t}));\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"index--header--nAW2i\",\"content\":\"index--content--m1z6g\",\"cards\":\"index--cards--LBNDs\"};","import React from 'react';\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport StickyHeader from '../../../sticky-header';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport SliderWrapper from '../../../compare-page/scrollable-table-with-slider/slider-wrapper';\nimport sliderArrowOptions from '../../../compare-page/scrollable-table-with-slider/slider-arrow-options';\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../use-subscription-pricing-cards-children';\nimport styles from './index.less';\n\nconst SubscriptionProductCardStickyHeader = ({\n\theaderRef,\n\tanchorElementRef,\n\tboundingElementRef,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\thandleShowLibraryUpsellModal,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst subscriptionProductCardComponents = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<StickyHeader headerRef={headerRef} anchorElementRef={anchorElementRef} boundingElementRef={boundingElementRef}>\n\t\t\t<div className={styles.header} data-testid=\"sticky-header\">\n\t\t\t\t<div className={styles.content}>\n\t\t\t\t\t<div className={styles.cards}>\n\t\t\t\t\t\t<SwipeableWrapper>\n\t\t\t\t\t\t\t{subscriptionCardsContentViewModel &&\n\t\t\t\t\t\t\t\tsubscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.MicroAlt,\n\t\t\t\t\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\t\t\t\t\tselectedSubscribableProduct,\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\t\t<SliderWrapper\n\t\t\t\t\t\t\t\t\t\t\titems={subscriptionProductCardComponents}\n\t\t\t\t\t\t\t\t\t\t\tarrowOptions={{\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonHeight: sliderArrowOptions.buttonHeight.short,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayTheme: sliderArrowOptions.displayTheme.dark,\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</SubscriptionPricingCardsContextProvider>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</SwipeableWrapper>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</StickyHeader>\n\t);\n};\n\nexport default SubscriptionProductCardStickyHeader;\n","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--IQjUk h2\",\"h4\":\"index--h4--P+L-s h2\",\"h5\":\"index--h5--RjIfw h3\",\"ui1\":\"index--ui1--qC5WL\",\"ui2\":\"index--ui2--W+pRi\",\"ui3\":\"index--ui3--TAOPs\",\"ui5\":\"index--ui5--wa4sq\",\"b2\":\"index--b2--ieO86\",\"b3\":\"index--b3--X3hF6\",\"loadingSpinner\":\"index--loadingSpinner--Cx22m\",\"comparisonSubRow\":\"index--comparisonSubRow--8pY1u\",\"nameWithPreview\":\"index--nameWithPreview--4jGFI\",\"name\":\"index--name--A6-b7\",\"nameWithBlurb\":\"index--nameWithBlurb--SjnMA\",\"inclusionIconsContainer\":\"index--inclusionIconsContainer--QPBw6\",\"inclusionIconsWrapper\":\"index--inclusionIconsWrapper--mXWLY\",\"inclusionIcons\":\"index--inclusionIcons--aw6Xa\",\"inclusionIcon\":\"index--inclusionIcon---eoNf\",\"resourceTooltip\":\"index--resourceTooltip--VSns2\",\"shortBlurb\":\"index--shortBlurb--Pd6A2\",\"newToYou\":\"index--newToYou--6DEe4\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RowWrapper from '../../../../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { FullyIncluded } from '../../../../../../svgs';\nimport Tooltip from '../../../../../../../shared/tooltip';\nimport { useLocalization } from '../../../../../../../../localization';\n\nimport styles from './index.less';\n\nconst FeatureComponentDetails = ({ name, orderedIncludedInProducts, shortBlurb, isOwned, isUserLoggedIn }) => (\n\t<div>\n\t\t<div className={styles.comparisonSubRow}>\n\t\t\t<NameWithPreview\n\t\t\t\tname={name}\n\t\t\t\tclassName={styles.nameWithPreview}\n\t\t\t\tshortBlurb={shortBlurb}\n\t\t\t\tisOwned={isOwned}\n\t\t\t\tisUserLoggedIn={isUserLoggedIn}\n\t\t\t/>\n\t\t\t<div className={styles.inclusionIcons}>\n\t\t\t\t<InclusionIcons orderedIncludedInProducts={orderedIncludedInProducts} />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n);\n\nFeatureComponentDetails.propTypes = {\n\tname: PropTypes.string,\n\torderedIncludedInProducts: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tproductId: PropTypes.string,\n\t\t\tisIncluded: PropTypes.bool,\n\t\t\tisPartiallyIncluded: PropTypes.bool,\n\t\t})\n\t),\n\tshortBlurb: PropTypes.string,\n\tisOwned: PropTypes.bool,\n};\n\nconst NameWithPreview = ({ name, className, shortBlurb, isOwned, isUserLoggedIn }) => {\n\tconst resources = useLocalization(\n\t\t'CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptionsFeatureComparison'\n\t);\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t{shortBlurb ? (\n\t\t\t\t<Tooltip\n\t\t\t\t\tlink={<div className={classNames(styles.name, shortBlurb && styles.nameWithBlurb)}>{name}</div>}\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\tcontentStyles={{ maxWidth: '320px', padding: '8px' }}\n\t\t\t\t\thideArrow={true}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.resourceTooltip}>\n\t\t\t\t\t\t<div className={styles.shortBlurb}>{shortBlurb}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</Tooltip>\n\t\t\t) : (\n\t\t\t\t<div className={styles.name}>{name}</div>\n\t\t\t)}\n\t\t\t{!isOwned && isUserLoggedIn && <div className={styles.newToYou}>{resources.NewToYou}</div>}\n\t\t</div>\n\t);\n};\n\nconst InclusionIcons = ({ orderedIncludedInProducts }) => {\n\tconst inclusionIconComponents = orderedIncludedInProducts.map(iip => {\n\t\tconst isIncluded = iip.isIncluded || iip.isPartiallyIncluded;\n\n\t\treturn {\n\t\t\tid: iip.productId,\n\t\t\tcomponent: <div className={styles.inclusionIcon}>{isIncluded && <FullyIncluded />}</div>,\n\t\t};\n\t});\n\n\treturn (\n\t\t<div className={styles.inclusionIconsContainer}>\n\t\t\t<RowWrapper items={inclusionIconComponents} className={styles.inclusionIconsWrapper} />\n\t\t</div>\n\t);\n};\n\nexport default FeatureComponentDetails;\n","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--hmFJW h2\",\"h4\":\"index--h4--C0yFK h2\",\"h5\":\"index--h5--ZqF3M h3\",\"ui1\":\"index--ui1--grWLa\",\"ui2\":\"index--ui2--35xqp\",\"ui3\":\"index--ui3--slOi2\",\"ui5\":\"index--ui5--J4G9a\",\"b2\":\"index--b2--VSEBg\",\"b3\":\"index--b3--+Jrpk\",\"loadingSpinner\":\"index--loadingSpinner--c636d index--loadingSpinner--c636d\",\"comparisonRow\":\"index--comparisonRow--WccTm\",\"nameWithArrow\":\"index--nameWithArrow--mmQM4\",\"nameContainer\":\"index--nameContainer--jEC97\",\"name\":\"index--name--OhPH0\",\"arrow\":\"index--arrow--1-mCv\",\"closedArrow\":\"index--closedArrow--yXkhn\",\"shortBlurbRow\":\"index--shortBlurbRow--VFDhq\",\"shortBlurb\":\"index--shortBlurb--KzjMJ\",\"rowWrapperContainer\":\"index--rowWrapperContainer--iD+zs\",\"rowWrapperCellContainer\":\"index--rowWrapperCellContainer--R+jWr\",\"inclusionIcons\":\"index--inclusionIcons--puksO\",\"inclusionIconContainer\":\"index--inclusionIconContainer--MVEcf\",\"inclusionIcon\":\"index--inclusionIcon--wZyWh\",\"newToYou\":\"index--newToYou--eAdo5\",\"shortBlurbRowContainer\":\"index--shortBlurbRowContainer--HuWG7\"};","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { LoadingSpinner } from '@faithlife/styled-ui';\nimport classNames from 'classnames';\nimport RowWrapper from '../../../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { Chevron, EmptyCircle, FilledCircle } from '../../../../../svgs';\nimport ProductsClient from '../../../../../../../clients/products-client';\nimport FeatureComponentDetails from './feature-component-details';\n\nimport styles from './index.less';\n\nconst FeatureDetails = ({\n\tname,\n\tsubResources,\n\torderedIncludedInProducts,\n\tproductId,\n\troutes,\n\tinitialIsOpen,\n\tonSectionToggle,\n}) => {\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [isOpen, setIsOpen] = useState(initialIsOpen);\n\tconst [shortBlurb, setShortBlurb] = useState(null);\n\tconst [subResourceComponents, setSubResourceComponents] = useState(null);\n\n\tconst handleArrowClick = useCallback(async () => {\n\t\tonSectionToggle();\n\t\tsetIsOpen(isOpen => !isOpen);\n\t}, [onSectionToggle]);\n\n\tconst fetchingRef = useRef(false);\n\tconst fetchComponentInfo = useCallback(async () => {\n\t\tif (fetchingRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tfetchingRef.current = true;\n\t\tsetIsLoading(true);\n\t\ttry {\n\t\t\tconst shortBlurbsByProductIds = await ProductsClient.getShortBlurbsForProductIds(\n\t\t\t\troutes.GetShortBlurbsUrl,\n\t\t\t\t[productId, ...subResources.map(sr => sr.productId)].filter(id => id)\n\t\t\t);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(shortBlurbsByProductIds, productId)) {\n\t\t\t\tsetShortBlurb(shortBlurbsByProductIds[productId]);\n\t\t\t}\n\n\t\t\tsetSubResourceComponents(\n\t\t\t\tsubResources.map(sr => {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(shortBlurbsByProductIds, sr.productId)) {\n\t\t\t\t\t\tsr.shortBlurb = shortBlurbsByProductIds[sr.productId];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn <FeatureComponentDetails key={sr.comparisonId} {...sr} />;\n\t\t\t\t})\n\t\t\t);\n\t\t} finally {\n\t\t\tfetchingRef.current = false;\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}, [productId, routes.GetShortBlurbsUrl, subResources]);\n\n\tuseEffect(() => {\n\t\tif (isOpen && !subResourceComponents) {\n\t\t\tfetchComponentInfo();\n\t\t}\n\t}, [fetchComponentInfo, isOpen, subResourceComponents]);\n\n\tconst blankRowCells = orderedIncludedInProducts.map(iip => <div key={iip.productId} />);\n\n\treturn (\n\t\t<>\n\t\t\t<div className={styles.comparisonRow}>\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<div className={styles.loadingSpinner}>\n\t\t\t\t\t\t<LoadingSpinner small />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<NameWithArrow name={name} isOpen={isOpen} onArrowClick={handleArrowClick} className={styles.nameWithArrow} />\n\t\t\t\t<div className={styles.inclusionIcons}>\n\t\t\t\t\t<InclusionIcons orderedIncludedInProducts={orderedIncludedInProducts} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{isOpen && (\n\t\t\t\t<>\n\t\t\t\t\t{shortBlurb && (\n\t\t\t\t\t\t<div className={styles.shortBlurbRow}>\n\t\t\t\t\t\t\t<div className={styles.shortBlurb}>{shortBlurb}</div>\n\t\t\t\t\t\t\t<div className={styles.rowWrapperContainer}>\n\t\t\t\t\t\t\t\t<RowWrapper items={blankRowCells} className={styles.rowWrapperCellContainer} />\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\t{subResourceComponents}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nFeatureDetails.propTypes = {\n\tname: PropTypes.string,\n\tisOwned: PropTypes.bool,\n\tsubResources: PropTypes.arrayOf(PropTypes.object),\n\torderedIncludedInProducts: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tproductId: PropTypes.string,\n\t\t\tisIncluded: PropTypes.bool,\n\t\t\tisPartiallyIncluded: PropTypes.bool,\n\t\t\tscaleAmount: PropTypes.number,\n\t\t})\n\t),\n\tshortBlurb: PropTypes.string,\n};\n\nconst NameWithArrow = ({ name, isOpen, onArrowClick, className }) => (\n\t<div className={className}>\n\t\t<button className={styles.nameContainer} onClick={onArrowClick}>\n\t\t\t<div className={styles.name}>{name}</div>\n\t\t\t<Chevron className={classNames(styles.arrow, !isOpen && styles.closedArrow)} />\n\t\t</button>\n\t</div>\n);\n\nconst InclusionIcons = ({ orderedIncludedInProducts }) => {\n\tconst inclusionIconComponents = orderedIncludedInProducts.map(iip => {\n\t\tconst limit = orderedIncludedInProducts.length;\n\t\treturn {\n\t\t\tid: iip.productId,\n\t\t\tcomponent: (\n\t\t\t\t<div className={styles.inclusionIconContainer}>\n\t\t\t\t\t<div className={styles.inclusionIcon}>\n\t\t\t\t\t\t{Array.from({ length: iip.scaleAmount }).map(index => {\n\t\t\t\t\t\t\treturn <FilledCircle key={index} />;\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{Array.from({ length: limit - iip.scaleAmount }).map(index => {\n\t\t\t\t\t\t\treturn <EmptyCircle key={index} />;\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};\n\t});\n\n\treturn (\n\t\t<div className={styles.rowWrapperContainer}>\n\t\t\t<RowWrapper items={inclusionIconComponents} className={styles.rowWrapperCellContainer} />\n\t\t</div>\n\t);\n};\n\nexport default FeatureDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SwipeableWrapper from '../../../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport FeatureDetails from './feature-details';\n\nimport styles from './index.less';\n\nconst FeatureSectionRowDetails = ({ section, demoOpenSection, onSectionToggle }) => {\n\tconst comparisonRows = section.comparisonRows.map((row, index) => (\n\t\t<FeatureDetails\n\t\t\tkey={row.comparisonId}\n\t\t\t{...row}\n\t\t\tinitialIsOpen={demoOpenSection && index === 0}\n\t\t\tonSectionToggle={onSectionToggle}\n\t\t/>\n\t));\n\n\treturn (\n\t\t<>\n\t\t\t<div className={styles.comparisonTable}>\n\t\t\t\t<SwipeableWrapper>{comparisonRows}</SwipeableWrapper>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nFeatureSectionRowDetails.propTypes = {\n\tsection: PropTypes.object.isRequired,\n};\n\nexport default FeatureSectionRowDetails;\n","// extracted by mini-css-extract-plugin\nexport default {\"comparisonTable\":\"index--comparisonTable--oRLHR\",\"loadingIndicator\":\"index--loadingIndicator--IHSV2\"};","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--KYmBU h2\",\"h4\":\"index--h4--po4-y h2\",\"h5\":\"index--h5--KWUH5 h3\",\"ui1\":\"index--ui1--S-R8q\",\"ui2\":\"index--ui2--kxUEy\",\"ui3\":\"index--ui3--F7y+u\",\"ui5\":\"index--ui5--wHOUy\",\"b2\":\"index--b2--Vi+PM\",\"b3\":\"index--b3--ctfht\",\"loadingSpinner\":\"index--loadingSpinner--TfJUb\",\"sectionRow\":\"index--sectionRow--YlVtE\",\"rowTitleContainer\":\"index--rowTitleContainer--Z3bSb\",\"titleContainer\":\"index--titleContainer--lqUTT\",\"iconContainer\":\"index--iconContainer--76r9H\",\"summaries\":\"index--summaries--f+sen\",\"summary\":\"index--summary--DM5vb\",\"legendContainer\":\"index--legendContainer--HLKdw\",\"includedBooksContainer\":\"index--includedBooksContainer--ioEC8\"};","import React, { useCallback, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RowWrapper from '../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { ExpandableClosedIcon, ExpandableOpenedIcon } from '../../../svgs';\n\nimport sharedStyles from '../../../shared.less';\nimport ComparisonSectionsTable from '../../../../compare-page/new-comparison-table-with-slider/comparison-sections-table';\nimport { useOnScreen } from '../../../../../util/hooks/use-on-screen';\nimport ComparisonTableLegend from '../../../../compare-page/comparison-table-legend';\nimport ComparisonTableControls from '../../../../compare-page/comparison-table-controls';\nimport useComparisonTableControlsHandler from '../../../../compare-page/hooks/comparison-table-controls-handler';\nimport FeatureSectionRowDetails from './feature-section-row-details';\nimport styles from './index.less';\n\nconst SectionRow = ({\n\ttitle,\n\ttoken,\n\tsummaries,\n\tcompareViewModel,\n\tsections,\n\tdemoOpenSection,\n\tonSectionToggle,\n\tisMobile,\n}) => {\n\tconst [section] = sections;\n\tconst [isSectionOpen, setIsSectionOpen] = useState(false);\n\n\tconst rowRef = useRef(null);\n\tuseOnScreen(rowRef, isRowOnScreen => {\n\t\tif (demoOpenSection && isRowOnScreen) {\n\t\t\tsetIsSectionOpen(true);\n\t\t}\n\t});\n\n\tconst handleTitleClick = useCallback(() => {\n\t\tonSectionToggle();\n\t\tsetIsSectionOpen(!isSectionOpen);\n\t}, [isSectionOpen, onSectionToggle]);\n\n\tconst comparisonTableControlsHandler = useComparisonTableControlsHandler();\n\n\tconst rowTitle = (\n\t\t<>\n\t\t\t{isSectionOpen ? <ExpandableOpenedIcon /> : <ExpandableClosedIcon />}\n\t\t\t{title}\n\t\t</>\n\t);\n\n\tconst rowTitleContainer = (\n\t\t<div className={styles.rowTitleContainer}>\n\t\t\t<button className={classNames(sharedStyles.h5, styles.titleContainer)} onClick={handleTitleClick}>\n\t\t\t\t{rowTitle}\n\t\t\t</button>\n\t\t\t{token === 'included-books' && isSectionOpen && compareViewModel && (\n\t\t\t\t<div className={styles.legendContainer}>\n\t\t\t\t\t<ComparisonTableLegend\n\t\t\t\t\t\tclassName={styles.legend}\n\t\t\t\t\t\tmode={isMobile ? 'default' : 'wide'}\n\t\t\t\t\t\tresources={compareViewModel.resources}\n\t\t\t\t\t/>\n\t\t\t\t\t<ComparisonTableControls {...compareViewModel} {...comparisonTableControlsHandler} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tconst summaryBlocks = summaries.map((s, index) => ({\n\t\tid: index,\n\t\tcomponent: <div className={styles.summary}>{s}</div>,\n\t}));\n\n\treturn (\n\t\t<div ref={rowRef}>\n\t\t\t<div className={styles.sectionRow}>\n\t\t\t\t{rowTitleContainer}\n\t\t\t\t<div className={styles.summaries}>\n\t\t\t\t\t<RowWrapper items={summaryBlocks}></RowWrapper>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{isSectionOpen && compareViewModel && compareViewModel.initialSelectedTrackId && (\n\t\t\t\t<>\n\t\t\t\t\t{token !== 'included-books' ? (\n\t\t\t\t\t\t<FeatureSectionRowDetails\n\t\t\t\t\t\t\tsection={section}\n\t\t\t\t\t\t\tdemoOpenSection={demoOpenSection}\n\t\t\t\t\t\t\tonSectionToggle={onSectionToggle}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className={styles.includedBooksContainer}>\n\t\t\t\t\t\t\t<ComparisonSectionsTable\n\t\t\t\t\t\t\t\tselectedCompareSections={sections}\n\t\t\t\t\t\t\t\tcomparisonTableControlsHandler={comparisonTableControlsHandler}\n\t\t\t\t\t\t\t\tresources={compareViewModel.resources}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nSectionRow.propTypes = {\n\tclassName: PropTypes.string,\n\ttitle: PropTypes.string.isRequired,\n\tsummaries: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default SectionRow;\n","import { useEffect } from 'react';\n\nexport function useOnScreen(ref, onChange) {\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(([entry]) => {\n\t\t\tonChange(entry.isIntersecting);\n\t\t});\n\n\t\tobserver.observe(ref.current);\n\t\treturn () => observer.disconnect();\n\t}, [ref, onChange]);\n}\n","import React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport useScreensize from '../../../../util/hooks/use-screensize';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport SliderWrapper from '../../../compare-page/scrollable-table-with-slider/slider-wrapper';\nimport SubscriptionProductCardStickyHeader from '../subscription-product-card-sticky-header';\nimport { useLocalization } from '../../../../localization';\nimport sharedStyles from '../../shared.less';\n\nimport sliderArrowOptions from '../../../compare-page/scrollable-table-with-slider/slider-arrow-options';\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../use-subscription-pricing-cards-children';\nimport SectionRow from './section-row';\nimport styles from './index.less';\n\nconst ComparisonChart = ({\n\tcompareViewModel,\n\tsectionRowViewModels,\n\tstickyHeaderRef,\n\tcomparisonChartRef,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst { isMobile } = useScreensize();\n\tconst comparisonChartHeadersRef = useRef(null);\n\n\treturn (\n\t\t<SwipeableWrapper>\n\t\t\t<div className={styles.comparisonSectionContainer}>\n\t\t\t\t{sectionRowViewModels?.length > 0 && sectionRowViewModels.filter(sr => sr.sections?.length).length > 0 && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!isMobile && (\n\t\t\t\t\t\t\t<SubscriptionProductCardStickyHeader\n\t\t\t\t\t\t\t\theaderRef={stickyHeaderRef}\n\t\t\t\t\t\t\t\tanchorElementRef={comparisonChartHeadersRef}\n\t\t\t\t\t\t\t\tboundingElementRef={comparisonChartRef}\n\t\t\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<ComparisonChartHeaders\n\t\t\t\t\t\t\theadersRef={comparisonChartHeadersRef}\n\t\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ComparisonChartRows sectionRowViewModels={sectionRowViewModels} compareViewModel={compareViewModel} />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</SwipeableWrapper>\n\t);\n};\n\nComparisonChart.propTypes = {\n\tcompareViewModel: PropTypes.shape({\n\t\tinitialSelectedTrackProducts: PropTypes.arrayOf(\n\t\t\tPropTypes.shape({\n\t\t\t\tproductId: PropTypes.string,\n\t\t\t}).isRequired\n\t\t),\n\t}).isRequired,\n};\n\nconst ComparisonChartRows = ({ sectionRowViewModels, compareViewModel }) => {\n\tconst { isMobile } = useScreensize();\n\n\tconst [hasDemoedOpenSection, setHasDemoedOpenSection] = useState(false);\n\tconst sectionRows = sectionRowViewModels\n\t\t.filter(r => r.sections?.length)\n\t\t.map((r, index) => (\n\t\t\t<SectionRow\n\t\t\t\tkey={r.token}\n\t\t\t\t{...r}\n\t\t\t\tcompareViewModel={compareViewModel}\n\t\t\t\tdemoOpenSection={index === 0 && !hasDemoedOpenSection}\n\t\t\t\tonSectionToggle={() => setHasDemoedOpenSection(true)}\n\t\t\t\tisMobile={isMobile}\n\t\t\t/>\n\t\t));\n\n\treturn <>{sectionRows}</>;\n};\n\nComparisonChartRows.propTypes = {\n\tsectionRows: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\ttoken: PropTypes.string.isRequired,\n\t\t}).isRequired\n\t),\n\tcompareViewModel: PropTypes.object,\n\tsuppressMobileProductComparison: PropTypes.bool,\n};\n\nconst ComparisonChartHeaders = ({ headersRef, subscriptionCardsContentViewModel }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\thandleShowLibraryUpsellModal,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst headers = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<div ref={headersRef} className={styles.headers} data-testid=\"comparison-chart-headers\">\n\t\t\t<div className={classNames(sharedStyles.h5, styles.headersRightSideTitle)}>{resources.Compare}</div>\n\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.Mini,\n\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<SliderWrapper items={headers} arrowOptions={{ displayTheme: sliderArrowOptions.displayTheme.dark }} />\n\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default ComparisonChart;\nexport { ComparisonChartRows };\n","// extracted by mini-css-extract-plugin\nexport default {\"comparisonSectionContainer\":\"index--comparisonSectionContainer--W2y6W\",\"headers\":\"index--headers--sBlbC\",\"headersRightSideTitle\":\"index--headersRightSideTitle--HQMWz\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--Tf861\",\"topBar\":\"index--topBar--Z91bL\",\"topBarWithShadows\":\"index--topBarWithShadows--3ASzh\",\"exitButton\":\"index--exitButton--QuiJd\",\"content\":\"index--content--uvFWg\"};","import React, { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport usePreventBodyScrolling from '../../../util/hooks/use-prevent-body-scrolling';\n\nimport styles from './index.less';\n\nconst OverlayContext = createContext(null);\n\nconst OverlayContextProvider = ({ children }) => {\n\tconst contentRef = useRef(null);\n\n\treturn <OverlayContext.Provider value={{ contentRef }}>{children}</OverlayContext.Provider>;\n};\nOverlayContextProvider.propTypes = {\n\tchildren: PropTypes.node,\n};\n\nconst Overlay = ({ className, children, ...props }) => {\n\tusePreventBodyScrolling(true);\n\n\treturn (\n\t\t<OverlayContextProvider>\n\t\t\t<div className={classNames(styles.container, className)} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</OverlayContextProvider>\n\t);\n};\nOverlay.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nconst TopBar = ({ className, children }) => {\n\tconst { contentRef } = useContext(OverlayContext);\n\n\tconst [isContentScrolled, setIsContentScrolled] = useState(false);\n\tuseEffect(() => {\n\t\tconst contentElement = contentRef.current;\n\t\tif (!contentElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = () => {\n\t\t\tsetIsContentScrolled(contentElement.scrollTop > 0);\n\t\t};\n\n\t\tcontentElement.addEventListener('scroll', handleScroll);\n\n\t\treturn () => {\n\t\t\tcontentElement.removeEventListener('scroll', handleScroll);\n\t\t};\n\t}, [contentRef]);\n\treturn (\n\t\t<div className={classNames(styles.topBar, isContentScrolled && styles.topBarWithShadows, className)}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nTopBar.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nconst ExitButton = ({ onClick, className, children }) => {\n\treturn (\n\t\t<div className={classNames(styles.exitButton, className)}>\n\t\t\t<button className={styles.exitButton} onClick={onClick}>\n\t\t\t\t{children}\n\t\t\t</button>\n\t\t</div>\n\t);\n};\nExitButton.propTypes = {\n\tonClick: PropTypes.func,\n\tclassName: PropTypes.string,\n};\n\nconst Content = ({ className, children }) => {\n\tconst { contentRef } = useContext(OverlayContext);\n\n\treturn (\n\t\t<div ref={contentRef} className={classNames(styles.content, className)}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nContent.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nOverlay.ExitButton = ExitButton;\nOverlay.TopBar = TopBar;\nOverlay.Content = Content;\n\nexport default Overlay;\n","// extracted by mini-css-extract-plugin\nexport default {\"topBar\":\"index--topBar--i6Txl\",\"titleRowContainer\":\"index--titleRowContainer--KBAgU\",\"titleContainer\":\"index--titleContainer--nxPOG\",\"closeButtonContainer\":\"index--closeButtonContainer--Gk5da\",\"productHeaderContainer\":\"index--productHeaderContainer--gtEpW\"};","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport Overlay from '../../overlay-base';\nimport { ComparisonChartRows } from '../comparison-chart';\nimport ScrollableWrapper from '../../../compare-page/scrollable-table-with-slider/scrollable-wrapper';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport { subscribeNotificationsContainerHeight } from '../../../notifications';\nimport { useLocalization } from '../../../../localization';\n\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../use-subscription-pricing-cards-children';\nimport styles from './index.less';\n\nconst MobileComparisonChart = ({\n\tcompareViewModel,\n\tsectionRowViewModels,\n\tonClose,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst subscriptionPlansResources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\tconst wizardResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizard');\n\tconst [marginTop, setMarginTop] = useState(0);\n\n\tuseEffect(() => {\n\t\treturn subscribeNotificationsContainerHeight(notificatationsHeight => {\n\t\t\tsetMarginTop(notificatationsHeight);\n\t\t});\n\t}, []);\n\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\tcouponCodes,\n\t\thandleShowLibraryUpsellModal,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst subscriptionProductCardComponents = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<SwipeableWrapper>\n\t\t\t<Overlay>\n\t\t\t\t<Overlay.TopBar className={styles.topBar}>\n\t\t\t\t\t<div className={styles.titleRowContainer} style={{ marginTop }}>\n\t\t\t\t\t\t<div className={styles.titleContainer}>{subscriptionPlansResources.CompareSubscriptions}</div>\n\t\t\t\t\t\t<div className={styles.closeButtonContainer}>\n\t\t\t\t\t\t\t<Overlay.ExitButton onClick={onClose}>{wizardResources.Close}</Overlay.ExitButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.MicroAlt,\n\t\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ScrollableWrapper className={styles.productHeaderContainer} items={subscriptionProductCardComponents} />\n\t\t\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t\t\t)}\n\t\t\t\t</Overlay.TopBar>\n\t\t\t\t<Overlay.Content>\n\t\t\t\t\t{sectionRowViewModels && (\n\t\t\t\t\t\t<ComparisonChartRows sectionRowViewModels={sectionRowViewModels} compareViewModel={compareViewModel} />\n\t\t\t\t\t)}\n\t\t\t\t</Overlay.Content>\n\t\t\t</Overlay>\n\t\t</SwipeableWrapper>\n\t);\n};\n\nMobileComparisonChart.propTypes = {\n\tcompareViewModel: PropTypes.shape({\n\t\tinitialSelectedTrackProducts: PropTypes.arrayOf(\n\t\t\tPropTypes.shape({\n\t\t\t\tsubscribableProductId: PropTypes.string.isRequired,\n\t\t\t\tname: PropTypes.string,\n\t\t\t}).isRequired\n\t\t).isRequired,\n\t}).isRequired,\n\tonClose: PropTypes.func,\n\tonSubscribeClick: PropTypes.func,\n};\n\nexport default MobileComparisonChart;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--Gt5Cm\",\"hidden\":\"index--hidden--R72VR\",\"button\":\"index--button--Wi6Xv\",\"text\":\"index--text--LtcwM\",\"chevron\":\"index--chevron--+Khi5\"};","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport classNames from 'classnames';\n\nimport { useLocalization } from '../../../../localization';\nimport { DownChevron24px } from '../../svgs';\nimport styles from './index.less';\n\nconst getUniversalHeaderHeight = document => {\n\tconst universalHeaderUpperHalfHeight =\n\t\tdocument.getElementById('universal-header-upper-half')?.getBoundingClientRect().height ?? 0;\n\n\tconst universalHeaderLowerHalfHeight =\n\t\tdocument.getElementById('universal-header-lower-half')?.getBoundingClientRect().height ?? 0;\n\n\treturn universalHeaderUpperHalfHeight + universalHeaderLowerHalfHeight;\n};\n\nconst CompareJump = ({ scrollTargetRef }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\tconst handleClick = () => {\n\t\tif (!scrollTargetRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst universalHeaderHeight = getUniversalHeaderHeight(document);\n\t\tconst previousScrollMarginTop = scrollTargetRef.current.style.scrollMarginTop;\n\n\t\tscrollTargetRef.current.style.scrollMarginTop = `${universalHeaderHeight}px`;\n\t\tscrollTargetRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\tscrollTargetRef.current.style.scrollMarginTop = previousScrollMarginTop;\n\t};\n\n\tconst [isHidden, setIsHidden] = useState(false);\n\tconst containerRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tif (isHidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = () => {\n\t\t\tif (!containerRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst containerRect = containerRef.current.getBoundingClientRect();\n\t\t\tconst universalHeaderHeight = getUniversalHeaderHeight(document);\n\n\t\t\tconst visibilityThreshold = containerRect.bottom - universalHeaderHeight;\n\n\t\t\tif (visibilityThreshold <= 0) {\n\t\t\t\t// scroll-padding-top allows us to control how the page scrolls when elements resize vertically\n\t\t\t\tconst previousScrollPaddingTop = document.documentElement.style.scrollPaddingTop;\n\t\t\t\tdocument.documentElement.style.scrollPaddingTop = `${Math.max(containerRect.bottom + 1, 0)}px`;\n\t\t\t\tsetIsHidden(true);\n\n\t\t\t\t// need to wait until after next render to reset scroll-padding-top\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdocument.documentElement.style.scrollPaddingTop = previousScrollPaddingTop;\n\t\t\t\t}, 50);\n\t\t\t}\n\t\t};\n\n\t\tconst debouncedHandleScroll = debounce(handleScroll, 100, false);\n\n\t\twindow.addEventListener('scroll', debouncedHandleScroll);\n\n\t\treturn () => window.removeEventListener('scroll', debouncedHandleScroll);\n\t}, [isHidden]);\n\n\treturn (\n\t\t<div ref={containerRef} className={classNames(styles.container, isHidden && styles.hidden)}>\n\t\t\t{!isHidden && (\n\t\t\t\t<button className={styles.button} onClick={handleClick}>\n\t\t\t\t\t<div className={styles.text}>{resources.Compare}</div>\n\t\t\t\t\t<div className={styles.chevron}>\n\t\t\t\t\t\t<DownChevron24px />\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nCompareJump.propTypes = {\n\tscrollTargetRef: PropTypes.object, // a React ref\n};\n\nexport default CompareJump;\n","import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport FullscreenOverlayLoadingSpinner from '../../shared/fullscreen-overlay-loading-spinner';\nimport ScrollableTableWithSliderProvider from '../../compare-page/scrollable-table-with-slider/scrollable-table-with-slider-provider';\nimport { ConfigurationWizardCartContextProvider } from '../../shared/configuration-wizard-cart';\nimport SummaryTrough from '../summary-trough';\nimport CompareClient from '../../../clients/compare-client';\nimport { LibraryUpsellModal } from '../library-upsell-modal';\nimport WizardHero from '../wizard-hero';\nimport ProgressIndicatorV2 from '../progress-indicator-v2';\nimport { useLocalization } from '../../../localization';\nimport { useLocation } from '../../../location';\nimport { ConfigurationWizardContextProvider, useConfigurationWizardContext } from '../context';\nimport { RouteContext } from '../../../route-context';\nimport { PerUserDataContextProvider } from '../../per-user-data/per-user-data-context';\nimport PlansSection from './plans-section';\nimport ComparisonChart from './comparison-chart';\nimport MobileComparisonChart from './mobile-comparison-chart';\nimport CompareJump from './compare-jump';\n\nimport styles from './index.less';\nimport { getSubscriptionPricingCards } from './use-subscription-pricing-cards-children';\n\nconst comparisonTableWithSliderProps = {\n\tpropsByScreenSize: {\n\t\t/* [mobile, tablet, desktop, largeDesktop, extra: { size: value }] */\n\t\tnumbersOfVisibleColumnsByScreenSize: [1, 2, 2, 2, { 1350: 3 }],\n\t\tcolumnWidthsByScreenSize: [200, 200, 200, 335],\n\t\tcolumnGapsByScreenSize: [0, 24],\n\t\tboundaryMarginWidthsByScreenSize: [15, 24, 45, { 1350: 55 }],\n\t\tsliderProps: {\n\t\t\tarrowWidthsByScreenSize: [30, { 1350: 45 }],\n\t\t},\n\t},\n};\n\nconst ConfigurationWizardSubscriptions = ({\n\tinitialComparisonChartViewModel: comparisonChartViewModel,\n\tshowAlreadySubscribedDisclaimer,\n\tsummaryTrough,\n\tisLibraryUpsellAvailable,\n\tlogosOrVerbum,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst subscriptionsResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\tconst wizardResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizard');\n\tconst { pathname, search, origin, replaceUrl } = useLocation();\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst clearQueryStringParameters = useCallback(\n\t\t(...parameterNames) => {\n\t\t\tconst url = new URL(`${pathname}${search}`, origin);\n\t\t\tconst parameterNamesToClear = parameterNames.filter(name => url.searchParams.has(name));\n\t\t\tif (!parameterNamesToClear.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparameterNamesToClear.forEach(name => url.searchParams.delete(name));\n\t\t\treplaceUrl(`${url.pathname}${url.search}`);\n\t\t},\n\t\t[pathname, search, origin, replaceUrl]\n\t);\n\n\t// notify: remove the query param used to show the subscription required for libraries message, so it doesn't reappear if the user returns here (e.g. via the back button) or refreshes\n\tuseEffect(() => clearQueryStringParameters('notify', 'term'), [clearQueryStringParameters]);\n\n\tconst [selectedTrackProductIndex, setSelectedTrackProductIndex] = useState(0);\n\n\tconst { compareViewModel } = comparisonChartViewModel;\n\tconst { initialSelectedTrackId: selectedTrackId } = compareViewModel;\n\n\tconst { isLoading, setIsLoading, spoids } = useConfigurationWizardContext();\n\n\tconst [errorMessage, setErrorMessage] = useState(!selectedTrackId ? wizardResources.SomethingWentWrong : null);\n\tconst [sectionRowViewModels, setSectionRowViewModels] = useState([]);\n\n\tuseEffect(() => {\n\t\tconst clearLoadingSpinner = () => setIsLoading(false);\n\t\twindow.addEventListener('pageshow', clearLoadingSpinner);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('pageshow', clearLoadingSpinner);\n\t\t};\n\t}, [setIsLoading]);\n\n\tuseEffect(() => {\n\t\tif (selectedTrackId) {\n\t\t\tconst url = new URL(`${pathname}${search}`, origin);\n\t\t\turl.searchParams.set('trackId', selectedTrackId);\n\t\t\treplaceUrl(`${url.pathname}${url.search}`);\n\t\t}\n\t}, [selectedTrackId, pathname, search, origin, replaceUrl]);\n\n\tconst sectionRowsFetched = useRef(false);\n\tuseEffect(() => {\n\t\tconst fetchComparisonSections = async spoids => {\n\t\t\tsetIsLoading(true);\n\t\t\ttry {\n\t\t\t\tconst newSections = await CompareClient.getCompareSectionDataForSubscribableProducts(\n\t\t\t\t\troutes.CompareSubscribableProductsSectionsBaseUrl,\n\t\t\t\t\tspoids\n\t\t\t\t);\n\t\t\t\tsetSectionRowViewModels(\n\t\t\t\t\tcomparisonChartViewModel.sectionRowViewModels.map(sr => {\n\t\t\t\t\t\tconst sections =\n\t\t\t\t\t\t\tsr.token !== 'included-books'\n\t\t\t\t\t\t\t\t? newSections.sections.filter(s => s.category.token === sr.resourceCategory)\n\t\t\t\t\t\t\t\t: newSections.sections.filter(s => s.category.token !== 'included-books');\n\t\t\t\t\t\treturn { ...sr, sections };\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tsectionRowsFetched.current = true;\n\t\t\t} catch (ex) {\n\t\t\t\tsetErrorMessage(wizardResources.SomethingWentWrong);\n\t\t\t\tthrow ex;\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\tif (!sectionRowsFetched.current && spoids?.length) {\n\t\t\tvoid fetchComparisonSections(spoids);\n\t\t}\n\t}, [\n\t\tcomparisonChartViewModel.sectionRowViewModels,\n\t\twizardResources.SomethingWentWrong,\n\t\troutes.CompareSubscribableProductsSectionsBaseUrl,\n\t\tspoids,\n\t\tsetIsLoading,\n\t]);\n\n\tconst [mobileComparisonChartInfo, setMobileComparisonChartInfo] = useState(null);\n\n\tconst handleDisplayMobileComparisonChart = () => {\n\t\tsetMobileComparisonChartInfo({\n\t\t\t...comparisonChartViewModel,\n\t\t\tsectionRowViewModels,\n\t\t});\n\t};\n\n\tconst handleMobileComparisonChartClose = () => {\n\t\tsetMobileComparisonChartInfo(null);\n\t};\n\n\tconst comparisonChartRef = useRef(null);\n\tconst plansStickyHeaderRef = useRef(null);\n\n\tconst upperBanner = (\n\t\t<>\n\t\t\t<WizardHero\n\t\t\t\ttitle={subscriptionsResources.goDeeperInTheWordWithTheRightPlan}\n\t\t\t\tsubtitle={subscriptionsResources.LogosOrVerbumLeadABibleStudyPreachTheWord}\n\t\t\t\tlogosOrVerbum={logosOrVerbum}\n\t\t\t/>\n\t\t\t<ProgressIndicatorV2\n\t\t\t\tstep=\"subscriptions\"\n\t\t\t\troutes={{\n\t\t\t\t\tsubscriptionsUrl: routes.ConfigurationWizardSubscriptionsUrl,\n\t\t\t\t\tlibrariesUrl: routes.ConfigurationWizardLibrariesUrl,\n\t\t\t\t}}\n\t\t\t\tresources={{\n\t\t\t\t\tsubscriptionsLabel: subscriptionsResources.Subscription,\n\t\t\t\t\tlibrariesLabel: subscriptionsResources.AddALibraryOptional,\n\t\t\t\t\tlibraryTitleAndNMoreTemplate: subscriptionsResources.LibraryTitleAndNMoreTemplate,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t);\n\n\tif (errorMessage) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{upperBanner}\n\t\t\t\t<div className={styles.errorMessage}>{errorMessage}</div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ScrollableTableWithSliderProvider\n\t\t\tfirstVisibleColumnIndex={selectedTrackProductIndex}\n\t\t\ttotalNumberOfColumns={spoids?.length}\n\t\t\tonFirstVisibleColumnChange={setSelectedTrackProductIndex}\n\t\t\t{...comparisonTableWithSliderProps}\n\t\t>\n\t\t\t{showAlreadySubscribedDisclaimer && (\n\t\t\t\t<div className=\"core-notifications-container notifications\">\n\t\t\t\t\t<div className=\"notification notification--success\">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span className=\"notification__message\">\n\t\t\t\t\t\t\t\t{subscriptionsResources.ChoosingANewSubscriptionReplacesYourExistingSubscriptionNotice}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{summaryTrough && <SummaryTrough step=\"subscriptions\" {...summaryTrough} />}\n\t\t\t{/* z-index: 10000 beats the mobile comparison chart */}\n\t\t\t{isLoading && <FullscreenOverlayLoadingSpinner zIndex={10000} />}\n\t\t\t{upperBanner}\n\t\t\t<PlansSection\n\t\t\t\tonDisplayMobileComparisonChart={handleDisplayMobileComparisonChart}\n\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t/>\n\t\t\t<div className={styles.lowerSectionContent}>\n\t\t\t\t<CompareJump scrollTargetRef={comparisonChartRef} />\n\t\t\t\t<div ref={comparisonChartRef}>\n\t\t\t\t\t<ComparisonChart\n\t\t\t\t\t\t{...comparisonChartViewModel}\n\t\t\t\t\t\tsectionRowViewModels={sectionRowViewModels}\n\t\t\t\t\t\tstickyHeaderRef={plansStickyHeaderRef}\n\t\t\t\t\t\tcomparisonChartRef={comparisonChartRef}\n\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{mobileComparisonChartInfo && (\n\t\t\t\t<MobileComparisonChart\n\t\t\t\t\t{...mobileComparisonChartInfo}\n\t\t\t\t\tonClose={handleMobileComparisonChartClose}\n\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isLibraryUpsellAvailable && <LibraryUpsellModal />}\n\t\t</ScrollableTableWithSliderProvider>\n\t);\n};\n\nConfigurationWizardSubscriptions.propTypes = {\n\tinitialComparisonChartViewModel: PropTypes.object.isRequired,\n\tshowAlreadySubscribedDisclaimer: PropTypes.bool.isRequired,\n\tsummaryTrough: PropTypes.object,\n\tisLibraryUpsellAvailable: PropTypes.bool,\n\tcouponCodes: PropTypes.array,\n\tlogosOrVerbum: PropTypes.string,\n\tsubscriptionCardsContentViewModel: PropTypes.object,\n};\n\nfunction ConfigurationWizardSubscriptionsContextWrapper(props) {\n\tconst {\n\t\tinitialConfigurationWizardCartViewModel,\n\t\tsubscriptionCardsContentViewModel,\n\t\tisLibraryUpsellAvailable,\n\t\tcouponCodes,\n\t} = props;\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst subscriptionPricingCards = getSubscriptionPricingCards(subscriptionCardsContentViewModel.builderIo.content);\n\n\tconst defaultBillingMode = subscriptionPricingCards?.component?.options?.defaultBillingPeriod;\n\tconst spoids = useMemo(\n\t\t() => (subscriptionPricingCards?.children ?? []).map(c => c.component.options.spoid),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[subscriptionPricingCards?.children]\n\t);\n\n\tconst initialContextValue = useMemo(\n\t\t() => ({ isLibraryUpsellAvailable, spoids, couponCodes, defaultBillingMode }),\n\t\t[isLibraryUpsellAvailable, spoids, couponCodes, defaultBillingMode]\n\t);\n\n\treturn (\n\t\t<PerUserDataContextProvider>\n\t\t\t<ConfigurationWizardCartContextProvider initialValue={initialConfigurationWizardCartViewModel} routes={routes}>\n\t\t\t\t<ConfigurationWizardContextProvider initialValue={initialContextValue}>\n\t\t\t\t\t<ConfigurationWizardSubscriptions {...props} />\n\t\t\t\t</ConfigurationWizardContextProvider>\n\t\t\t</ConfigurationWizardCartContextProvider>\n\t\t</PerUserDataContextProvider>\n\t);\n}\nConfigurationWizardSubscriptionsContextWrapper.propTypes = {\n\tinitialConfigurationWizardCartViewModel: PropTypes.object,\n\tisLibraryUpsellAvailable: PropTypes.bool,\n\tsubscriptionCardsContentViewModel: PropTypes.object,\n};\n\nexport default ConfigurationWizardSubscriptionsContextWrapper;\n","// extracted by mini-css-extract-plugin\nexport default {\"lowerSectionContent\":\"index--lowerSectionContent--yVui5\",\"errorMessage\":\"index--errorMessage--ZFVGL\"};","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nclass ErrorBoundary extends Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\thasError: false,\n\t\t\terror: null,\n\t\t\terrorInfo: null,\n\t\t};\n\t}\n\n\tstatic getDerivedStateFromError(error) {\n\t\t// Update state so the next render will show the fallback UI\n\t\treturn { hasError: true };\n\t}\n\n\tcomponentDidCatch(error, errorInfo) {\n\t\t// Store error details in state\n\t\tthis.setState({\n\t\t\terror,\n\t\t\terrorInfo,\n\t\t});\n\n\t\t// Notify parent component about the error\n\t\tif (this.props.onError) {\n\t\t\tthis.props.onError(error, errorInfo);\n\t\t}\n\n\t\t// Log error to console or external service\n\t\tconsole.error('ErrorBoundary caught an error:', error, errorInfo);\n\t}\n\n\tresetErrorBoundary = () => {\n\t\tthis.setState({\n\t\t\thasError: false,\n\t\t\terror: null,\n\t\t\terrorInfo: null,\n\t\t});\n\n\t\t// Notify parent that error was reset\n\t\tif (this.props.onReset) {\n\t\t\tthis.props.onReset();\n\t\t}\n\t};\n\n\trender() {\n\t\tif (this.state.hasError) {\n\t\t\t// If custom error template is provided, use it\n\t\t\tif (this.props.fallback) {\n\t\t\t\tif (typeof this.props.fallback !== 'function') {\n\t\t\t\t\treturn this.fallback;\n\t\t\t\t}\n\n\t\t\t\t// Pass error details and reset function to custom template\n\t\t\t\treturn this.props.fallback({\n\t\t\t\t\terror: this.state.error,\n\t\t\t\t\terrorInfo: this.state.errorInfo,\n\t\t\t\t\tresetErrorBoundary: this.resetErrorBoundary,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// If fallbackComponent is provided as a React component\n\t\t\tif (this.props.fallbackComponent) {\n\t\t\t\tconst FallbackComponent = this.props.fallbackComponent;\n\t\t\t\treturn (\n\t\t\t\t\t<FallbackComponent\n\t\t\t\t\t\terror={this.state.error}\n\t\t\t\t\t\terrorInfo={this.state.errorInfo}\n\t\t\t\t\t\tresetErrorBoundary={this.resetErrorBoundary}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\treturn this.props.children;\n\t}\n}\n\nErrorBoundary.propTypes = {\n\tchildren: PropTypes.node.isRequired,\n\tfallback: PropTypes.func,\n\tfallbackComponent: PropTypes.elementType,\n\tonError: PropTypes.func,\n\tonReset: PropTypes.func,\n\tshowError: PropTypes.bool,\n};\n\nErrorBoundary.defaultProps = {\n\tshowError: false,\n};\n\nexport default ErrorBoundary;\n"],"names":["handlers","clear","pending","eventAggregator","on","events","handler","event","split","data","type","off","index","indexOf","filter","it","ix","trigger","window","Error","push","e","console","error","concat","setTimeout","undefined","global","module","exports","ProductsClient","getContainingProductsAsync","_ref","containingProductsUrl","response","fetch","get","url","json","getHasContainingProductsAsync","_ref2","hasContainingProductsUrl","getContainingSubscriptionsAsync","_ref3","containingSubscriptionsUrl","getProductsCustomersAlsoBoughtAsync","_ref4","customersAlsoBoughtUrl","skuIds","params","getTooltipAsync","_ref5","getProductDownloadsAsync","_ref6","downloadsUrl","getFeaturedProducts","featuredProductIdsUrl","status","featuredProducts","getQuickCompare","quickCompareUrl","getUnownedResourcesInfos","unownedResourcesInfosBaseUrl","productIds","join","infos","getShortBlurbsForProductIds","getShortBlurbsUrl","postWithBody","body","getSubscriptionPromotionsForSkuIds","getSubscriptionPromotionsUrl","BillingMode","Monthly","Annually","MultiAnnualTerm","Object","values","ConfigurationWizardContext","createContext","ConfigurationWizardContextProvider","_cart$subscriptionsIn","_subscriptionInCart$s","_initialValue$default","initialValue","children","cart","useConfigurationWizardCartContext","value","navigate","useLocation","routes","useContext","RouteContext","isLibraryUpsellAvailable","_useState","useState","_useState2","_slicedToArray","isLibraryUpsellModalOpen","setIsLibraryUpsellModalOpen","_useState3","_useState4","isLoading","setIsLoading","subscriptionInCart","subscriptionsInCart","_useState5","spoId","_useState6","selectedSpoid","setSelectedSpoid","_useState7","_useState8","selectedSubscribableProduct","setSelectedSubscribableProduct","_useState9","defaultBillingMode","_useState0","selectedBillingMode","setSelectedBillingMode","getSubscriptionProductData","usePerUserDataContext","getSelectedSubscribableProductData","useCallback","async","optionId","quantity","couponCodes","useEffect","isCancelled","selectedSubscribableProductData","isMultiAnnualSubscription","SubscriptionBillingPeriodOptions","MultiAnnual","optionBillingMode","loadSelectedSubscribableProductData","handleShowLibraryUpsellModal","_cart$hasLibraryInCar","hasLibraryInCart","CartUrl","ConfigurationWizardLibrariesUrl","handleCartUpdated","_event","updatedCart","currentSelectedSpoid","_updatedCart$order$su","_updatedCart$order","order","subscribableLineItems","find","item","isLogosSubscription","subscribableProductOptionId","getSelectedSpoidFromUpdatedCart","React","Provider","spoids","useConfigurationWizardContext","LibraryUpsellModalUi","selectedProduct","libraryProductCards","open","onDismiss","onShopLibrariesClick","onProceedWithoutLibraryClick","resources","useLocalization","Modal","isOpen","onClose","container","width","maxWidth","zIndex","className","style","maxHeight","Checkmark","CommandSentence","template","YouveSelectedSubscribableProduct","Field","name","onClick","X","WantMoreInsights","map","card","key","YourSelection","SubscriptionStar","tier","pricing","termPeriod","PricePerMonth","amount","PricePerYear","PricePerTwoYears","Button","variant","scale","ShopAllLibraries","ProceedWithoutLibrary","propTypes","PropTypes","isRequired","LibraryUpsellProductCard","productId","skuId","imageUri","bookCount","libraryValue","price","savingsPercentage","onLibraryAddedToCart","addToCartButtonResources","handleAddToCartRequest","useAddToCartRequest","onAddToCartRequest","contextValue","useMemo","args","options","_objectSpread","onSuccess","_options$onSuccess","call","addToCartButton","SavingsPercentage","alt","src","YoursForever","IncludesBooks","Value","CommerceComponentsContextProvider","AddToCartButton","items","Boolean","id","identifier","IdentifierTypes","SKU","href","SeeWhatsInside","SavePercentage","Math","round","mapBillingModeToTermPeriod","billingMode","cachedLibraryUpsellTrackProductsByTrackProductId","Map","LibraryUpsellModal","_selectedSubscribable","_useLocation","origin","_useConfigurationWiza","suggestedLibraryTrackProductId","recommendedTrackProductId","libraryUpsellTrackProductData","setLibraryUpsellTrackProductData","cancellationTokenSource","cancellationToken","products","baseUrl","has","URL","GetLibraryUpsellTrackProductsUrl","searchParams","append","_data$products","ok","set","getOrFetchLibraryUpsellTrackProducts","asyncFunction","withCancellation","handleLibraryUpsellModalProceedToCartClick","handleLibraryUpsellModalViewLibrariesClick","handleLibraryUpsellModalLibraryAddedToCart","handleDismissLibraryUpsellModal","title","initialCharge","product","LoadingProductCard","LibraryUpsellModalWithErrorBoundary","ErrorBoundary","plans_section","plansSectionControls","plansSectionControlsMobile","plansSection","levels","compareSubscriptionsArrow","trackSelector","PlansSection","onDisplayMobileComparisonChart","subscriptionCardsContentViewModel","styles","plansSectionContainer","contentSourceKind","SubscriptionPricingCardsContextProvider","format","SubscriptionPricingCardFormatOptions","Full","RenderBuilderContent","_extends","builderIo","restrictOverflow","CompareSubscriptionsArrow","handleCompareClick","sharedStyles","ui2","CompareSubscriptions","RightArrow","subscriptions_plans_section","getSubscriptionPricingCards","subscriptionPricingCardsContent","_subscriptionPricingC","_subscriptionPricingC2","blocks","b","component","useSubscriptionPricingCardsChildren","subscriptionCardsContent","content","subscriptionCardsChildren","_getSubscriptionPrici","_getSubscriptionPrici2","subscriptionCardsChildrenViewModels","c","_subscriptionCardsCon","vm","spoid","subscriptions_subscription_product_card_sticky_header","headerRef","anchorElementRef","boundingElementRef","subscriptionProductCardComponents","StickyHeader","SwipeableWrapper","MicroAlt","SliderWrapper","arrowOptions","buttonHeight","sliderArrowOptions","short","displayTheme","dark","feature_component_details","FeatureComponentDetails","orderedIncludedInProducts","shortBlurb","isOwned","isUserLoggedIn","NameWithPreview","InclusionIcons","isIncluded","isPartiallyIncluded","Tooltip","link","classNames","placement","contentStyles","padding","hideArrow","NewToYou","inclusionIconComponents","iip","FullyIncluded","RowWrapper","feature_details_feature_component_details","feature_details","FeatureDetails","subResources","initialIsOpen","onSectionToggle","setIsOpen","setShortBlurb","subResourceComponents","setSubResourceComponents","handleArrowClick","fetchingRef","useRef","fetchComponentInfo","current","shortBlurbsByProductIds","GetShortBlurbsUrl","sr","prototype","hasOwnProperty","comparisonId","blankRowCells","LoadingSpinner","small","NameWithArrow","onArrowClick","scaleAmount","Chevron","limit","length","Array","from","FilledCircle","EmptyCircle","feature_section_row_details_feature_details","FeatureSectionRowDetails","section","demoOpenSection","comparisonRows","row","section_row_feature_section_row_details","section_row","h2","h4","h5","ui1","ui3","ui5","b2","b3","loadingSpinner","sectionRow","rowTitleContainer","titleContainer","iconContainer","summaries","summary","legendContainer","includedBooksContainer","SectionRow","token","compareViewModel","sections","isMobile","isSectionOpen","setIsSectionOpen","rowRef","ref","onChange","isRowOnScreen","observer","IntersectionObserver","entry","isIntersecting","observe","disconnect","handleTitleClick","comparisonTableControlsHandler","useComparisonTableControlsHandler","rowTitle","ExpandableOpenedIcon","ExpandableClosedIcon","ComparisonTableLegend","legend","mode","ComparisonTableControls","summaryBlocks","s","initialSelectedTrackId","ComparisonSectionsTable","selectedCompareSections","comparison_chart_section_row","ComparisonChart","sectionRowViewModels","stickyHeaderRef","comparisonChartRef","useScreensize","comparisonChartHeadersRef","_sr$sections","SubscriptionProductCardStickyHeader","ComparisonChartHeaders","headersRef","ComparisonChartRows","initialSelectedTrackProducts","hasDemoedOpenSection","setHasDemoedOpenSection","sectionRows","r","_r$sections","suppressMobileProductComparison","headers","Compare","Mini","subscriptions_comparison_chart","overlay_base","OverlayContext","OverlayContextProvider","contentRef","Overlay","props","_objectWithoutProperties","_excluded","usePreventBodyScrolling","TopBar","isContentScrolled","setIsContentScrolled","contentElement","handleScroll","scrollTop","addEventListener","removeEventListener","ExitButton","Content","configuration_wizard_overlay_base","MobileComparisonChart","subscriptionPlansResources","wizardResources","marginTop","setMarginTop","subscribeNotificationsContainerHeight","notificatationsHeight","Close","ScrollableWrapper","subscribableProductId","onSubscribeClick","subscriptions_mobile_comparison_chart","getUniversalHeaderHeight","document","_document$getElementB","_document$getElementB2","_document$getElementB3","_document$getElementB4","getElementById","getBoundingClientRect","height","CompareJump","scrollTargetRef","isHidden","setIsHidden","containerRef","debouncedHandleScroll","debounce","containerRect","universalHeaderHeight","bottom","previousScrollPaddingTop","documentElement","scrollPaddingTop","max","handleClick","previousScrollMarginTop","scrollMarginTop","scrollIntoView","behavior","block","DownChevron24px","subscriptions_compare_jump","comparisonTableWithSliderProps","propsByScreenSize","numbersOfVisibleColumnsByScreenSize","columnWidthsByScreenSize","columnGapsByScreenSize","boundaryMarginWidthsByScreenSize","sliderProps","arrowWidthsByScreenSize","ConfigurationWizardSubscriptions","comparisonChartViewModel","initialComparisonChartViewModel","showAlreadySubscribedDisclaimer","summaryTrough","logosOrVerbum","subscriptionsResources","pathname","search","replaceUrl","clearQueryStringParameters","_len","arguments","parameterNames","_key","parameterNamesToClear","forEach","delete","selectedTrackProductIndex","setSelectedTrackProductIndex","selectedTrackId","SomethingWentWrong","errorMessage","setErrorMessage","setSectionRowViewModels","clearLoadingSpinner","sectionRowsFetched","newSections","CompareClient","getCompareSectionDataForSubscribableProducts","CompareSubscribableProductsSectionsBaseUrl","category","resourceCategory","ex","fetchComparisonSections","mobileComparisonChartInfo","setMobileComparisonChartInfo","plansStickyHeaderRef","upperBanner","WizardHero","goDeeperInTheWordWithTheRightPlan","subtitle","LogosOrVerbumLeadABibleStudyPreachTheWord","ProgressIndicatorV2","step","subscriptionsUrl","ConfigurationWizardSubscriptionsUrl","librariesUrl","subscriptionsLabel","Subscription","librariesLabel","AddALibraryOptional","libraryTitleAndNMoreTemplate","LibraryTitleAndNMoreTemplate","ScrollableTableWithSliderProvider","firstVisibleColumnIndex","totalNumberOfColumns","onFirstVisibleColumnChange","ChoosingANewSubscriptionReplacesYourExistingSubscriptionNotice","SummaryTrough","FullscreenOverlayLoadingSpinner","handleDisplayMobileComparisonChart","handleMobileComparisonChartClose","ConfigurationWizardSubscriptionsContextWrapper","initialConfigurationWizardCartViewModel","subscriptionPricingCards","defaultBillingPeriod","initialContextValue","PerUserDataContextProvider","ConfigurationWizardCartContextProvider","configuration_wizard_subscriptions","Component","constructor","super","_defineProperty","this","setState","hasError","errorInfo","onReset","state","getDerivedStateFromError","componentDidCatch","onError","render","fallback","resetErrorBoundary","fallbackComponent","FallbackComponent","showError","defaultProps","__WEBPACK_DEFAULT_EXPORT__"],"sourceRoot":""}