{"version":3,"file":"configuration-wizard-libraries.ef2dab88dbb8b59dffe9.js?ssi=0","mappings":"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","sources":["webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/hooks/comparison-tracks-with-custom-compare.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/track-kinds.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-selector/index.less?745d","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-selector/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shared/display-price-value.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/product/price-anchor/index.less?4265","webpack://@logos/commerceweb-frontend/./Scripts/site/components/product/price-anchor/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/recommendation-badge.less?7def","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/recommendation-badge.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-card/index.less?ad15","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-card/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-slider/product-tab/index.less?f43a","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-slider/product-tab/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-slider/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/track-product-slider/index.less?f67a","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/mobile-track-selector/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/mobile-track-selector/index.less?a280","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/comparison-modal/index.less?18b5","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/comparison-modal/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/mobile-product-comparison/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/mobile-product-comparison/index.less?12f1","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/tab-based-track-selector/index.less?9712","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/tab-based-track-selector/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/index.less?f9ef","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/new-comparison-table-with-slider/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/compare-books-or-features/index.less?8c25","webpack://@logos/commerceweb-frontend/./Scripts/site/components/compare-page/compare-books-or-features/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/interstitial-modal/index.less?1024","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/interstitial-modal/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/libraries/add-a-subscription-modal/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/libraries/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/hooks/use-interstitial-modal-handler.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/libraries/index.less?8629","webpack://@logos/commerceweb-frontend/./Scripts/site/components/shared/enhanced-image-tag/image.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport CompareClient from '../../../clients/compare-client';\nimport { notifyError } from '../../notifications';\nimport { useLocalization } from '../../../localization';\n\nconst customCompareTrackId = '-1';\nconst maxCustomCompareProductCount = 10;\n\nconst getSelectedTrackProductIndex = track => {\n\tif (!track || !track.trackProducts || track.trackProducts.length <= 3) {\n\t\treturn 0;\n\t}\n\n\treturn Math.min(\n\t\tMath.max(\n\t\t\ttrack.trackProducts.findIndex(tp => tp.isSelected),\n\t\t\t0\n\t\t),\n\t\ttrack.trackProducts.length - 3\n\t);\n};\n\nfunction useComparisonTracksWithCustomCompare({\n\tinitialSelectedTrackId,\n\tinitialSelectedTrackProducts,\n\ttrackOptions: propsTrackOptions,\n\troutes,\n\thandleTrackFetched,\n\thandleTrackSelected,\n\thandleCustomCompareAllCleared,\n}) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst trackOptions =\n\t\tpropsTrackOptions && propsTrackOptions.length > 1\n\t\t\t? [...propsTrackOptions, { name: resources.CustomCompare, trackId: customCompareTrackId }]\n\t\t\t: propsTrackOptions;\n\n\tconst [tracks, setTracks] = useState(() => {\n\t\tconst tracksByTrackId = {};\n\t\tfor (const trackOption of trackOptions ?? []) {\n\t\t\ttracksByTrackId[trackOption.trackId] = trackOption;\n\t\t}\n\n\t\treturn tracksByTrackId;\n\t});\n\n\tconst [selectedTrackId, setSelectedTrackId] = useState(initialSelectedTrackId);\n\tconst [selectedMobileFilterTrackId, setSelectedMobileFilterTrackId] = useState(initialSelectedTrackId);\n\tconst [selectedTrack, setSelectedTrack] = useState(tracks && tracks[initialSelectedTrackId]);\n\tconst [selectedTrackProductIndex, setSelectedTrackProductIndex] = useState(0);\n\tconst [selectedCompareSections, setSelectedCompareSections] = useState([]);\n\t// Kept separate from `tracks` so that trackProducts arriving from the eager prefetch (below)\n\t// don't share an object identity with sections, and vice versa; each can be depended on\n\t// independently without one's updates spuriously re-triggering the other's effect.\n\tconst [sectionsByTrackId, setSectionsByTrackId] = useState({});\n\tconst [displayMobileFilter, setDisplayMobileFilter] = useState(false);\n\tconst [isLoading, setIsLoading] = useState(true);\n\tconst [errorMessage, setErrorMessage] = useState(null);\n\tconst [isCustomCompareModalOpen, setIsCustomCompareModalOpen] = useState(false);\n\tconst [selectedCustomCompareTrackProducts, setSelectedCustomCompareTrackProducts] = useState(\n\t\tinitialSelectedTrackProducts ?? []\n\t);\n\n\tconst handleCustomCompare = useCallback(() => {\n\t\tsetIsCustomCompareModalOpen(false);\n\t\tsetDisplayMobileFilter(false);\n\n\t\tconst customCompareTrack = tracks[customCompareTrackId];\n\n\t\tif (\n\t\t\t!customCompareTrack.trackProducts ||\n\t\t\tcustomCompareTrack.trackProducts.length !== selectedCustomCompareTrackProducts.length ||\n\t\t\tselectedCustomCompareTrackProducts.some((tp, i) => tp !== customCompareTrack.trackProducts[i])\n\t\t) {\n\t\t\tconst newTracks = { ...tracks };\n\t\t\tnewTracks[customCompareTrackId] = {\n\t\t\t\t...tracks[customCompareTrackId],\n\t\t\t\ttrackProducts: selectedCustomCompareTrackProducts,\n\t\t\t};\n\t\t\tsetTracks(newTracks);\n\n\t\t\t// Force reload of the sections, since the track products changed.\n\t\t\tsetSectionsByTrackId(prev => {\n\t\t\t\tconst { [customCompareTrackId]: _removedSections, ...rest } = prev;\n\t\t\t\treturn rest;\n\t\t\t});\n\n\t\t\tsetSelectedTrackId(customCompareTrackId);\n\t\t}\n\t}, [selectedCustomCompareTrackProducts, tracks]);\n\n\tuseEffect(() => {\n\t\tsetSelectedTrackId(initialSelectedTrackId);\n\t}, [initialSelectedTrackId]);\n\n\tuseEffect(() => {\n\t\tif (!selectedTrack) {\n\t\t\tsetErrorMessage(resources.SomethingWentWrong);\n\t\t}\n\t}, [resources.SomethingWentWrong, selectedTrack]);\n\n\tuseEffect(() => {\n\t\tconst fetchTrackProducts = async () => {\n\t\t\tconst tracksWithoutTrackProducts = [];\n\n\t\t\tfor (const trackId in tracks) {\n\t\t\t\tif (!tracks[trackId].trackProducts && trackId !== customCompareTrackId) {\n\t\t\t\t\ttracksWithoutTrackProducts.push(trackId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tracksWithoutTrackProducts.length > 0) {\n\t\t\t\ttry {\n\t\t\t\t\tconst responseTracks = await CompareClient.getTrackProducts(\n\t\t\t\t\t\troutes.CompareTrackProductsBaseUrl,\n\t\t\t\t\t\ttracksWithoutTrackProducts\n\t\t\t\t\t);\n\n\t\t\t\t\tsetTracks(prev => {\n\t\t\t\t\t\tconst newTracks = { ...prev };\n\t\t\t\t\t\tresponseTracks.forEach(responseTrack => {\n\t\t\t\t\t\t\tnewTracks[responseTrack.trackId] = {\n\t\t\t\t\t\t\t\t...newTracks[responseTrack.trackId],\n\t\t\t\t\t\t\t\t...responseTrack,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn newTracks;\n\t\t\t\t\t});\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tsetErrorMessage(resources.SomethingWentWrong);\n\t\t\t\t\tthrow ex;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Eagerly load the product cards for every track up front so switching tracks only needs to\n\t\t// fetch comparison sections. This runs in the background without the blocking loading spinner.\n\t\tfetchTrackProducts();\n\t}, [resources.SomethingWentWrong, routes.CompareTrackProductsBaseUrl, tracks]);\n\n\t// Reading these directly as dependencies (instead of depending on all of `tracks`) means this\n\t// effect only re-runs when the selected track's own trackProducts or cached sections change,\n\t// not when unrelated tracks are updated by the eager prefetch below.\n\tconst selectedTrackProducts =\n\t\tselectedTrackId === customCompareTrackId\n\t\t\t? selectedCustomCompareTrackProducts\n\t\t\t: tracks[selectedTrackId]?.trackProducts;\n\tconst selectedTrackCachedSections = sectionsByTrackId[selectedTrackId];\n\tconst selectedTrackName = tracks[selectedTrackId]?.name;\n\tconst selectedTrackRecommendedProductId = tracks[selectedTrackId]?.recommendedProductId;\n\n\t// Guards against a duplicate /compare/sections request: trackProducts arriving from the eager\n\t// prefetch can re-trigger this effect while a sections request for the same track is still in\n\t// flight.\n\tconst [fetchingSectionsTrackId, setFetchingSectionsTrackId] = useState(null);\n\n\tuseEffect(() => {\n\t\tconst fetchTrack = async () => {\n\t\t\tif (!selectedTrackId) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet trackProducts = selectedTrackProducts;\n\t\t\tlet sections = selectedTrackCachedSections;\n\n\t\t\tif (!sections) {\n\t\t\t\tif (fetchingSectionsTrackId === selectedTrackId) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tsetFetchingSectionsTrackId(selectedTrackId);\n\n\t\t\t\tsetIsLoading(true);\n\t\t\t\ttry {\n\t\t\t\t\tif (selectedTrackId !== customCompareTrackId && !trackProducts) {\n\t\t\t\t\t\t// Fetch the product cards without comparison sections so the chart data can load separately.\n\t\t\t\t\t\tconst [responseTrack] = await CompareClient.getTrackProducts(routes.CompareTrackProductsBaseUrl, [\n\t\t\t\t\t\t\tselectedTrackId,\n\t\t\t\t\t\t]);\n\t\t\t\t\t\ttrackProducts = responseTrack.trackProducts;\n\t\t\t\t\t\tsetTracks(prev => ({ ...prev, [selectedTrackId]: { ...prev[selectedTrackId], ...responseTrack } }));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst productIds = (trackProducts ?? []).map(product => product.productId);\n\t\t\t\t\tif (productIds.length === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst response = await CompareClient.getCompareSectionData(routes.CompareTrackSectionsBaseUrl, productIds);\n\t\t\t\t\tsections = response.sections;\n\n\t\t\t\t\thandleTrackFetched?.({\n\t\t\t\t\t\ttrackId: selectedTrackId,\n\t\t\t\t\t\tname: selectedTrackName,\n\t\t\t\t\t\trecommendedProductId: selectedTrackRecommendedProductId,\n\t\t\t\t\t\ttrackProducts,\n\t\t\t\t\t\tsections,\n\t\t\t\t\t});\n\n\t\t\t\t\tsetSectionsByTrackId(prev => ({ ...prev, [selectedTrackId]: sections }));\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tsetErrorMessage(resources.SomethingWentWrong);\n\t\t\t\t\tthrow ex;\n\t\t\t\t} finally {\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\tsetFetchingSectionsTrackId(prev => (prev === selectedTrackId ? null : prev));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst track = {\n\t\t\t\ttrackId: selectedTrackId,\n\t\t\t\tname: selectedTrackName,\n\t\t\t\trecommendedProductId: selectedTrackRecommendedProductId,\n\t\t\t\ttrackProducts,\n\t\t\t\tsections,\n\t\t\t};\n\n\t\t\tsetSelectedTrack(track);\n\t\t\tsetSelectedTrackId(track.trackId);\n\t\t\tsetSelectedCompareSections(track.sections);\n\t\t\tsetSelectedTrackProductIndex(getSelectedTrackProductIndex(track));\n\t\t\thandleTrackSelected?.(track);\n\n\t\t\treturn track;\n\t\t};\n\n\t\tfetchTrack(selectedTrackId);\n\t}, [\n\t\tselectedTrackId,\n\t\tselectedTrackProducts,\n\t\tselectedTrackCachedSections,\n\t\tselectedTrackName,\n\t\tselectedTrackRecommendedProductId,\n\t\tfetchingSectionsTrackId,\n\t\troutes.CompareTrackProductsBaseUrl,\n\t\tresources.SomethingWentWrong,\n\t\troutes.CompareTrackSectionsBaseUrl,\n\t\thandleTrackFetched,\n\t\thandleTrackSelected,\n\t]);\n\n\tconst handleTrackChange = useCallback(\n\t\ttrackId => {\n\t\t\tif (trackId !== customCompareTrackId || tracks[trackId].trackProducts) {\n\t\t\t\tsetSelectedTrackId(trackId);\n\t\t\t} else {\n\t\t\t\tsetIsCustomCompareModalOpen(true);\n\t\t\t}\n\t\t},\n\t\t[tracks]\n\t);\n\n\tconst handleMobileFilterTrackChange = useCallback(\n\t\ttrackId => {\n\t\t\tsetSelectedMobileFilterTrackId(trackId);\n\n\t\t\tif (trackId !== customCompareTrackId || tracks[trackId].trackProducts) {\n\t\t\t\tsetSelectedTrackId(trackId);\n\t\t\t}\n\t\t},\n\t\t[tracks]\n\t);\n\n\tuseEffect(() => {\n\t\tsetSelectedMobileFilterTrackId(selectedTrackId);\n\t}, [selectedTrackId]);\n\n\tconst handleFilterChange = useCallback(() => {\n\t\tsetDisplayMobileFilter(value => !value);\n\t}, []);\n\n\tconst handleCustomCompareTrackProductSelect = useCallback(\n\t\ttrackProduct => {\n\t\t\tconst selectedCustomCompareTrackProductIds = selectedCustomCompareTrackProducts.map(tp => tp.productId);\n\t\t\tconst isAlreadySelected = selectedCustomCompareTrackProductIds.includes(trackProduct.productId);\n\t\t\tif (selectedCustomCompareTrackProducts.length < maxCustomCompareProductCount && !isAlreadySelected) {\n\t\t\t\tconst newSelectedCustomCompareTrackProducts = [...selectedCustomCompareTrackProducts, trackProduct];\n\t\t\t\tsetSelectedCustomCompareTrackProducts(newSelectedCustomCompareTrackProducts);\n\t\t\t} else if (isAlreadySelected) {\n\t\t\t\tconst newSelectedCustomCompareTrackProducts = selectedCustomCompareTrackProducts.filter(\n\t\t\t\t\ttp => tp.productId !== trackProduct.productId\n\t\t\t\t);\n\t\t\t\tsetSelectedCustomCompareTrackProducts(newSelectedCustomCompareTrackProducts);\n\t\t\t} else {\n\t\t\t\tnotifyError(resources.YouHaveSelectedMaxNumberOfItemsToCompare);\n\t\t\t}\n\t\t},\n\t\t[selectedCustomCompareTrackProducts, resources.YouHaveSelectedMaxNumberOfItemsToCompare]\n\t);\n\n\tconst handleCustomCompareTrackProductDeselect = useCallback(\n\t\ttrackProduct => {\n\t\t\tconst filteredSelectedCustomCompareTrackProducts = selectedCustomCompareTrackProducts.filter(\n\t\t\t\ttp => tp !== trackProduct\n\t\t\t);\n\t\t\tsetSelectedCustomCompareTrackProducts(filteredSelectedCustomCompareTrackProducts);\n\t\t},\n\t\t[selectedCustomCompareTrackProducts]\n\t);\n\n\tconst handleCustomCompareClearAll = useCallback(() => {\n\t\tsetSelectedCustomCompareTrackProducts([]);\n\t\thandleCustomCompareAllCleared?.();\n\t}, [handleCustomCompareAllCleared]);\n\n\treturn {\n\t\ttrackOptions,\n\t\ttracks,\n\t\tselectedTrack,\n\t\thandleTrackChange,\n\t\tselectedTrackId,\n\t\tselectedTrackProductIndex,\n\t\tsetSelectedTrackProductIndex,\n\t\tselectedCompareSections,\n\t\tselectedCustomCompareTrackProducts,\n\t\tisCustomCompareModalOpen,\n\t\tsetIsCustomCompareModalOpen,\n\t\thandleCustomCompare,\n\t\terrorMessage,\n\t\tisLoading,\n\t\tdisplayMobileFilter,\n\t\tselectedMobileFilterTrackId,\n\t\thandleMobileFilterTrackChange,\n\t\thandleFilterChange,\n\t\thandleCustomCompareTrackProductSelect,\n\t\thandleCustomCompareTrackProductDeselect,\n\t\thandleCustomCompareClearAll,\n\t};\n}\n\nexport default useComparisonTracksWithCustomCompare;\nexport { customCompareTrackId };\n","const TrackKinds = {\n\tlibrary: 'Library',\n\tsubscribableFeatureSet: 'SubscribableFeatureSet',\n};\n\nexport default TrackKinds;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--yK0va\",\"dropdown\":\"index--dropdown--dtEwz\",\"desktopLabelPosition-top\":\"index--desktopLabelPosition-top--XZO9l\",\"desktopLabelPositionTop\":\"index--desktopLabelPosition-top--XZO9l\",\"desktopLabelPosition-left\":\"index--desktopLabelPosition-left--OSY0U\",\"desktopLabelPositionLeft\":\"index--desktopLabelPosition-left--OSY0U\",\"label\":\"index--label--aXamq\",\"labelPunctuation\":\"index--labelPunctuation--R2EEe\",\"select\":\"index--select--ANXvn\"};","import React, { useCallback, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport sharedStyles from '../../../configuration-wizard/shared.less';\nimport { customCompareTrackId } from '../../hooks/comparison-tracks-with-custom-compare';\nimport styles from './index.less';\n\nconst TrackSelector = ({\n\tclassName,\n\tselectedTrackId,\n\ttrackOptions,\n\tlabel,\n\tdesktopLabelPosition = 'left',\n\tonTrackChange,\n}) => {\n\tconst handleTrackChange = useCallback(\n\t\tevent => {\n\t\t\tconst trackId = event.target.value;\n\t\t\tonTrackChange(trackId);\n\t\t},\n\t\t[onTrackChange]\n\t);\n\n\tconst sortedTrackOptions = useMemo(() => {\n\t\tconst sortedOptions = [...trackOptions].sort((a, b) => a.name.localeCompare(b.name));\n\t\tconst customCompareTrackIndex = sortedOptions.findIndex(option => option.trackId === customCompareTrackId);\n\t\tif (customCompareTrackIndex !== -1) {\n\t\t\tconst [customCompareTrack] = sortedOptions.splice(customCompareTrackIndex, 1);\n\t\t\tsortedOptions.push(customCompareTrack);\n\t\t}\n\t\treturn sortedOptions;\n\t}, [trackOptions]);\n\n\treturn (\n\t\t<div className={classNames(styles.container, className)}>\n\t\t\t<div className={classNames(styles.dropdown, styles[`desktopLabelPosition-${desktopLabelPosition}`])}>\n\t\t\t\t{label && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={classNames(\n\t\t\t\t\t\t\tstyles.label,\n\t\t\t\t\t\t\tstyles[`desktopLabelPosition-${desktopLabelPosition}`],\n\t\t\t\t\t\t\tsharedStyles.h5\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t\t{desktopLabelPosition === 'left' && <span className={styles.labelPunctuation}>{':'}</span>}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<select\n\t\t\t\t\tclassName={classNames(sharedStyles.ui2, styles.select)}\n\t\t\t\t\tvalue={selectedTrackId}\n\t\t\t\t\tonChange={handleTrackChange}\n\t\t\t\t\tdata-testid=\"track-select\"\n\t\t\t\t>\n\t\t\t\t\t{sortedTrackOptions.map(option => (\n\t\t\t\t\t\t<option key={option.trackId} value={option.trackId}>\n\t\t\t\t\t\t\t{option.name}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t))}\n\t\t\t\t</select>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nTrackSelector.propTypes = {\n\tclassName: PropTypes.string,\n\tselectedTrackId: PropTypes.string.isRequired,\n\ttrackOptions: PropTypes.array.isRequired,\n\tlabel: PropTypes.string,\n\tonTrackChange: PropTypes.func.isRequired,\n};\n\nexport default TrackSelector;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst DisplayPriceValue = ({ smallPriceClassName, largePriceClassName, price, decimalSymbol }) => {\n\tconst [integralValue, decimalValue] = price.split(decimalSymbol);\n\treturn (\n\t\t<>\n\t\t\t<span className={largePriceClassName}>{integralValue}</span>\n\t\t\t<span className={smallPriceClassName}>\n\t\t\t\t{decimalSymbol}\n\t\t\t\t{decimalValue}\n\t\t\t</span>\n\t\t</>\n\t);\n};\nDisplayPriceValue.propTypes = {\n\tprice: PropTypes.string.isRequired,\n\tdecimalSymbol: PropTypes.string.isRequired,\n\tsmallPriceClassName: PropTypes.string,\n\tlargePriceClassName: PropTypes.string,\n};\n\nexport default DisplayPriceValue;\n","// extracted by mini-css-extract-plugin\nexport default {\"struckThroughPrice\":\"index--struckThroughPrice--XXf5o\",\"priceAnchor\":\"index--priceAnchor--QDmsi\",\"discountedSavingsDescription\":\"index--discountedSavingsDescription--aJfTS\"};","import React from 'react';\nimport cn from 'classnames';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useLocalization } from '../../../localization';\n\nimport styles from './index.less';\n\nconst PriceAnchor = ({ priceAnchor, className }) => {\n\tconst resources = useLocalization('Logos.CommerceWeb.Products.Resources.PriceAnchor');\n\tconst anchorPriceKinds = priceAnchor.anchorPriceKind.split(',').map(apk => apk.trim());\n\treturn (\n\t\t<div className={cn(styles.priceAnchor, className)}>\n\t\t\t{anchorPriceKinds.includes('CollectionValue') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.CollectionValue} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.collectionValue}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.collectionValue}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{anchorPriceKinds.includes('DynamicCollectionValue') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.DynamicCollectionValue} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.dynamicCollectionValue}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.dynamicCollectionValue}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{anchorPriceKinds.includes('DigitalListPrice') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.DigitalListPriceLabel} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.digitalListPrice}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.digitalListPrice}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{anchorPriceKinds.includes('PrintListPrice') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.PrintListPriceLabel} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.printPrice}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.printPrice}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{anchorPriceKinds.includes('RegularPrice') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.RegularPriceLabel} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.regularPrice}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.regularPrice}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{anchorPriceKinds.includes('DynamicPrice') && (\n\t\t\t\t<div>\n\t\t\t\t\t{`${resources.DynamicPriceLabel} `}\n\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\tkey={priceAnchor.dynamicPrice}\n\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\ttemplate={priceAnchor.dynamicPrice}\n\t\t\t\t\t\tclassName={styles.struckThroughPrice}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERDAYABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerDayAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERMONTHABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerMonthAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t\t<CommandSentence.Field name=\"PERYEARABBREVIATED\">\n\t\t\t\t\t\t\t<span>{resources.PerYearAbbreviated}</span>\n\t\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{priceAnchor.savingsDescription && (\n\t\t\t\t<div className={priceAnchor.isDiscounted ? styles.discountedSavingsDescription : ''}>\n\t\t\t\t\t{priceAnchor.savingsDescription}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default PriceAnchor;\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"recommendation-badge--badge--03FP7\"};","import React from 'react';\nimport classNames from 'classnames';\n\nimport { useLocalization } from '../../localization';\nimport styles from './recommendation-badge.less';\n\nconst RecommendationBadge = ({ className }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\treturn <div className={classNames(styles.badge, className)}>{resources.RecommendedForYou}</div>;\n};\n\nexport default RecommendationBadge;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--eD0ua\",\"imageAndRecommendationBadge\":\"index--imageAndRecommendationBadge--HDMfy\",\"badgeContainer\":\"index--badgeContainer--ENbPS\",\"savingsBadge\":\"index--savingsBadge--K2-AL\",\"savingsBadgeUnDiscounted\":\"index--savingsBadgeUnDiscounted--9inlS index--savingsBadge--K2-AL\",\"savingsBadgeDiscounted\":\"index--savingsBadgeDiscounted--QgUXX index--savingsBadge--K2-AL\",\"image\":\"index--image--nVcoN\",\"lowerContent\":\"index--lowerContent--jHpp8\",\"contentTopHalf\":\"index--contentTopHalf--JH3Hs\",\"contentBottomHalf\":\"index--contentBottomHalf--l6TCf\",\"titleSection\":\"index--titleSection--v8rat\",\"subtitle\":\"index--subtitle--1WCC+\",\"title\":\"index--title--b6Z7g\",\"titleLink\":\"index--titleLink--v2nPw index--title--b6Z7g\",\"description\":\"index--description---5S-X\",\"pricingSection\":\"index--pricingSection--IZyrH\",\"priceAnchor\":\"index--priceAnchor--angh3\",\"priceContainer\":\"index--priceContainer--QkjON\",\"priceLabelContainer\":\"index--priceLabelContainer--ZRRCI\",\"priceSmall\":\"index--priceSmall--oYG0a\",\"priceDiscounted\":\"index--priceDiscounted--OIeAq\",\"paymentPlanInfo\":\"index--paymentPlanInfo--ynkyA\",\"addToMiniCartButton\":\"index--addToMiniCartButton--Kv6d2 btn btn-primary\",\"resourcesCount\":\"index--resourcesCount--A9Kcg\",\"resourceCount\":\"index--resourceCount--wfbaQ\",\"shortContainer\":\"index--shortContainer--gE2h8\",\"shortContainerTitleAndPrice\":\"index--shortContainerTitleAndPrice--kGZex\",\"shortContainerForeignPrice\":\"index--shortContainerForeignPrice--NFIe4\",\"shortContainerAddToMiniCartButton\":\"index--shortContainerAddToMiniCartButton--SXb6e index--addToMiniCartButton--Kv6d2 btn btn-primary\",\"mobileContainer\":\"index--mobileContainer--hrND7\",\"mobileBadgeContainer\":\"index--mobileBadgeContainer--X-iFJ\",\"mobileCard\":\"index--mobileCard--56b4r\",\"mobileTitle\":\"index--mobileTitle---EhXo\",\"mobileTitleLink\":\"index--mobileTitleLink--hPrXf index--mobileTitle---EhXo\",\"mobileDescriptionSection\":\"index--mobileDescriptionSection--05NHM\",\"mobileResourcesCount\":\"index--mobileResourcesCount--rMDVM\",\"mobilePriceAndAddToCartSection\":\"index--mobilePriceAndAddToCartSection--KoRHq\"};","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport AddToMiniCartButton from '../../../shared/add-to-mini-cart-button';\nimport DisplayPriceValue from '../../../shared/display-price-value';\nimport PriceAnchor from '../../../product/price-anchor';\nimport ForeignPriceTooltip from '../../../product/foreign-price-tooltip';\nimport RecommendationBadge from '../../recommendation-badge';\nimport { useLocalization } from '../../../../localization';\n\nimport shared from '../../../configuration-wizard/shared.less';\nimport { Image } from '../../../shared/enhanced-image-tag/image';\nimport { ScrollableTableWithSliderContext } from '../../scrollable-table-with-slider/scrollable-table-with-slider-provider';\nimport styles from './index.less';\n\nconst TrackProductCard = ({\n\tvariant,\n\ttitle,\n\tblurb,\n\tisForeignCurrency,\n\tprice,\n\tskuIds,\n\tpriceAnchorViewModel,\n\tproductId,\n\taddToMiniCartButton,\n\tisOwnedByUser,\n\townershipNotice,\n\tresourceCounts,\n\tisRecommended,\n\tonItemAddedToCart,\n\timageUrl,\n\tsavingsPercentage,\n\tproductDetailsUrl,\n}) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst showTrackProductDetails = variant !== 'short';\n\n\tconst shouldShowResourceCount = !!resourceCounts;\n\tconst shouldShowNewToYou =\n\t\tshouldShowResourceCount && resourceCounts.unownedResourceCount !== resourceCounts.totalAvailableResourceCount;\n\tconst doesUserOwnAllResources = resourceCounts && resourceCounts.unownedResourceCount === 0;\n\n\tconst [resourcesTemplate, resourceCountTemplate] = doesUserOwnAllResources\n\t\t? [resources.BookCountAllOwned, null]\n\t\t: shouldShowNewToYou\n\t\t\t? [resources.BooksNewToYou, resources.BooksNewToYouBookCount]\n\t\t\t: [null, resources.BookCount];\n\tconst mobileResourceCountTemplate = doesUserOwnAllResources\n\t\t? resources.BookCountAllOwned\n\t\t: shouldShowNewToYou\n\t\t\t? resources.BookCountNewToYou\n\t\t\t: resources.BookCount;\n\tconst desktopResourcesTemplate = resourcesTemplate ?? '%BOOKS%';\n\tconst desktopResourceCountTemplate = resourceCountTemplate ?? '';\n\tconst resourceCountToUse = shouldShowResourceCount\n\t\t? shouldShowNewToYou\n\t\t\t? resourceCounts?.unownedResourceCount\n\t\t\t: resourceCounts?.totalAvailableResourceCount\n\t\t: null;\n\n\tconst { columnWidth } = useContext(ScrollableTableWithSliderContext);\n\n\tconst isDiscounted = priceAnchorViewModel?.isDiscounted;\n\n\tif (variant === 'mobile') {\n\t\treturn (\n\t\t\t<div className={styles.mobileContainer}>\n\t\t\t\t<div className={styles.mobileBadgeContainer}>\n\t\t\t\t\t{isRecommended && <RecommendationBadge />}\n\t\t\t\t\t{savingsPercentage > 0 && (\n\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\tclassName={isDiscounted ? styles.savingsBadgeDiscounted : styles.savingsBadgeUnDiscounted}\n\t\t\t\t\t\t\ttemplate={resources.PercentOff}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENTSAVINGS\">{savingsPercentage}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.mobileCard}>\n\t\t\t\t\t{imageUrl &&\n\t\t\t\t\t\t(productDetailsUrl ? (\n\t\t\t\t\t\t\t<a href={productDetailsUrl}>\n\t\t\t\t\t\t\t\t<Image src={imageUrl} className={styles.image} alt={title} />\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Image src={imageUrl} className={styles.image} alt={title} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{productDetailsUrl ? (\n\t\t\t\t\t\t\t<a href={productDetailsUrl} className={styles.mobileTitleLink}>\n\t\t\t\t\t\t\t\t<h5 className={classNames(shared.h5, styles.mobileTitle)}>{title}</h5>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<h5 className={classNames(shared.h5, styles.mobileTitle)}>{title}</h5>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{ownershipNotice && <div className={styles.subtitle}>{ownershipNotice}</div>}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.mobileDescriptionSection}>\n\t\t\t\t\t\t{shouldShowResourceCount && (\n\t\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\t\tkey={mobileResourceCountTemplate}\n\t\t\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\t\t\tclassName={styles.mobileResourcesCount}\n\t\t\t\t\t\t\t\ttemplate={mobileResourceCountTemplate}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"COUNT\">{resourceCountToUse}</CommandSentence.Field>\n\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{blurb && <div>{blurb}</div>}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.mobilePriceAndAddToCartSection}>\n\t\t\t\t\t\t<div className={styles.pricingSection}>\n\t\t\t\t\t\t\t{priceAnchorViewModel && (\n\t\t\t\t\t\t\t\t<PriceAnchor priceAnchor={priceAnchorViewModel} className={styles.priceAnchor} />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<div className={styles.priceContainer}>\n\t\t\t\t\t\t\t\t<div className={styles.priceLabelContainer}>{price.label}</div>\n\t\t\t\t\t\t\t\t<div data-testid=\"track-product-price\">\n\t\t\t\t\t\t\t\t\t<DisplayPriceValue\n\t\t\t\t\t\t\t\t\t\tlargePriceClassName={classNames(shared.h5, isDiscounted && styles.priceDiscounted)}\n\t\t\t\t\t\t\t\t\t\tsmallPriceClassName={classNames(\n\t\t\t\t\t\t\t\t\t\t\tshared.h5,\n\t\t\t\t\t\t\t\t\t\t\tstyles.priceSmall,\n\t\t\t\t\t\t\t\t\t\t\tisDiscounted && styles.priceDiscounted\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tprice={price.value}\n\t\t\t\t\t\t\t\t\t\tdecimalSymbol={price.usdDecimalSymbol}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{isForeignCurrency && <ForeignPriceTooltip price={price.valueLocalized} />}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<AddToMiniCartButton\n\t\t\t\t\t\t\tbuttonClassName={styles.addToMiniCartButton}\n\t\t\t\t\t\t\tpayInFull={true}\n\t\t\t\t\t\t\tdisplayAddedToCart={false}\n\t\t\t\t\t\t\tskuIds={skuIds}\n\t\t\t\t\t\t\tproductId={productId}\n\t\t\t\t\t\t\tresources={addToMiniCartButton.resources}\n\t\t\t\t\t\t\tisOwnedByUser={isOwnedByUser}\n\t\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\tif (!showTrackProductDetails) {\n\t\treturn (\n\t\t\t<div className={styles.shortContainer}>\n\t\t\t\t<div className={styles.shortContainerTitleAndPrice}>\n\t\t\t\t\t<div className={styles.title}>{title}</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<div data-testid=\"track-product-price\">\n\t\t\t\t\t\t\t<DisplayPriceValue\n\t\t\t\t\t\t\t\tlargePriceClassName={classNames(shared.h5, isDiscounted && styles.priceDiscounted)}\n\t\t\t\t\t\t\t\tsmallPriceClassName={classNames(shared.h5, styles.priceSmall, isDiscounted && styles.priceDiscounted)}\n\t\t\t\t\t\t\t\tprice={price.value}\n\t\t\t\t\t\t\t\tdecimalSymbol={price.usdDecimalSymbol}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{isForeignCurrency && (\n\t\t\t\t\t\t\t<ForeignPriceTooltip className={styles.shortContainerForeignPrice} price={price.valueLocalized} />\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>\n\t\t\t\t\t<AddToMiniCartButton\n\t\t\t\t\t\tbuttonClassName={styles.shortContainerAddToMiniCartButton}\n\t\t\t\t\t\tpayInFull={true}\n\t\t\t\t\t\tdisplayAddedToCart={false}\n\t\t\t\t\t\tskuIds={skuIds}\n\t\t\t\t\t\tproductId={productId}\n\t\t\t\t\t\tresources={addToMiniCartButton.resources}\n\t\t\t\t\t\tisOwnedByUser={isOwnedByUser}\n\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={styles.container}>\n\t\t\t<div className={styles.imageAndRecommendationBadge}>\n\t\t\t\t<div className={styles.badgeContainer}>\n\t\t\t\t\t{isRecommended && <RecommendationBadge />}\n\t\t\t\t\t{savingsPercentage > 0 && (\n\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\tclassName={isDiscounted ? styles.savingsBadgeDiscounted : styles.savingsBadgeUnDiscounted}\n\t\t\t\t\t\t\ttemplate={resources.PercentOff}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"PERCENTSAVINGS\">{savingsPercentage}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t{imageUrl &&\n\t\t\t\t\t(productDetailsUrl ? (\n\t\t\t\t\t\t<a href={productDetailsUrl}>\n\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\tsrc={imageUrl}\n\t\t\t\t\t\t\t\tclassName={styles.image}\n\t\t\t\t\t\t\t\talt={title}\n\t\t\t\t\t\t\t\tsizes={{\n\t\t\t\t\t\t\t\t\ttablet: columnWidth,\n\t\t\t\t\t\t\t\t\tdesktop: columnWidth,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\tsrc={imageUrl}\n\t\t\t\t\t\t\tclassName={styles.image}\n\t\t\t\t\t\t\talt={title}\n\t\t\t\t\t\t\tsizes={{\n\t\t\t\t\t\t\t\ttablet: columnWidth,\n\t\t\t\t\t\t\t\tdesktop: columnWidth,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t</div>\n\t\t\t<div className={styles.lowerContent}>\n\t\t\t\t<div className={styles.contentTopHalf}>\n\t\t\t\t\t<div className={styles.titleSection}>\n\t\t\t\t\t\t{ownershipNotice && <div className={styles.subtitle}>{ownershipNotice}</div>}\n\t\t\t\t\t\t{productDetailsUrl ? (\n\t\t\t\t\t\t\t<a href={productDetailsUrl} className={styles.titleLink}>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className={styles.title}>{title}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{blurb && <div className={styles.description}>{blurb}</div>}\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.contentBottomHalf}>\n\t\t\t\t\t<div className={styles.pricingSection}>\n\t\t\t\t\t\t{priceAnchorViewModel && <PriceAnchor priceAnchor={priceAnchorViewModel} className={styles.priceAnchor} />}\n\t\t\t\t\t\t<div className={styles.priceContainer}>\n\t\t\t\t\t\t\t<div className={styles.priceLabelContainer}>{price.label}</div>\n\t\t\t\t\t\t\t<div data-testid=\"track-product-price\">\n\t\t\t\t\t\t\t\t<DisplayPriceValue\n\t\t\t\t\t\t\t\t\tlargePriceClassName={classNames(shared.h5, isDiscounted && styles.priceDiscounted)}\n\t\t\t\t\t\t\t\t\tsmallPriceClassName={classNames(shared.h5, styles.priceSmall, isDiscounted && styles.priceDiscounted)}\n\t\t\t\t\t\t\t\t\tprice={price.value}\n\t\t\t\t\t\t\t\t\tdecimalSymbol={price.usdDecimalSymbol}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{isForeignCurrency && <ForeignPriceTooltip price={price.valueLocalized} />}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<AddToMiniCartButton\n\t\t\t\t\t\t\tbuttonClassName={styles.addToMiniCartButton}\n\t\t\t\t\t\t\tpayInFull={true}\n\t\t\t\t\t\t\tdisplayAddedToCart={false}\n\t\t\t\t\t\t\tskuIds={skuIds}\n\t\t\t\t\t\t\tproductId={productId}\n\t\t\t\t\t\t\tresources={addToMiniCartButton.resources}\n\t\t\t\t\t\t\tisOwnedByUser={isOwnedByUser}\n\t\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{shouldShowResourceCount && (\n\t\t\t\t<CommandSentence\n\t\t\t\t\tkey={desktopResourcesTemplate}\n\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\tclassName={styles.resourcesCount}\n\t\t\t\t\ttemplate={desktopResourcesTemplate}\n\t\t\t\t>\n\t\t\t\t\t<CommandSentence.Field name=\"BOOKS\">\n\t\t\t\t\t\t<CommandSentence\n\t\t\t\t\t\t\tkey={desktopResourceCountTemplate}\n\t\t\t\t\t\t\tContainer=\"span\"\n\t\t\t\t\t\t\tclassName={styles.resourceCount}\n\t\t\t\t\t\t\ttemplate={desktopResourceCountTemplate}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CommandSentence.Field name=\"COUNT\">{resourceCountToUse}</CommandSentence.Field>\n\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t</CommandSentence.Field>\n\t\t\t\t</CommandSentence>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nTrackProductCard.propTypes = {\n\tclassName: PropTypes.string,\n\tvariant: PropTypes.oneOf(['short', 'full', 'mobile']),\n\ttitle: PropTypes.string.isRequired,\n\tblurb: PropTypes.string,\n\tisForeignCurrency: PropTypes.bool,\n\tprice: PropTypes.shape({\n\t\tlabel: PropTypes.string,\n\t\tvalue: PropTypes.string.isRequired,\n\t\tvalueLocalized: PropTypes.string.isRequired,\n\t\tusdDecimalSymbol: PropTypes.string.isRequired,\n\t}).isRequired,\n\tskuIds: PropTypes.arrayOf(PropTypes.string).isRequired,\n\tpriceAnchorViewModel: PropTypes.object,\n\tproductId: PropTypes.string.isRequired,\n\taddToMiniCartButton: PropTypes.object.isRequired,\n\tisOwnedByUser: PropTypes.bool,\n\townershipNotice: PropTypes.string,\n\tpaymentPlanInfo: PropTypes.shape({\n\t\trecurringPrice: PropTypes.string.isRequired,\n\t\tnumberOfPayments: PropTypes.string.isRequired,\n\t\tresources: PropTypes.shape({\n\t\t\tPaymentPlanInfoTemplate: PropTypes.string.isRequired,\n\t\t}).isRequired,\n\t}),\n\tresourceCounts: PropTypes.shape({\n\t\tunownedResourceCount: PropTypes.number.isRequired,\n\t\ttotalAvailableResourceCount: PropTypes.number.isRequired,\n\t}),\n\tisRecommended: PropTypes.bool,\n\tonItemAddedToCart: PropTypes.func,\n\timageUrl: PropTypes.string,\n\tproductDetailsUrl: PropTypes.string,\n\tsavingsPercentage: PropTypes.number,\n};\n\nexport default TrackProductCard;\n","// extracted by mini-css-extract-plugin\nexport default {\"cardContainer\":\"index--cardContainer--8xt4T\",\"title\":\"index--title--JPGS1\",\"subTitle\":\"index--subTitle--cQCVz\",\"price\":\"index--price--G0gRL\",\"priceDiscounted\":\"index--priceDiscounted--klwur\",\"addToMiniCartButton\":\"index--addToMiniCartButton--y2SZE btn btn-primary\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport AddToMiniCartButton from '../../../../shared/add-to-mini-cart-button';\nimport styles from './index.less';\n\nconst ProductTab = ({\n\ttitle,\n\townershipNotice,\n\tprice,\n\tskuIds,\n\tproductId,\n\tisOwnedByUser,\n\tonItemAddedToCart,\n\taddToMiniCartButton,\n\tpriceAnchorViewModel,\n}) => {\n\tconst isDiscounted = priceAnchorViewModel?.isDiscounted;\n\n\treturn (\n\t\t<div className={styles.cardContainer}>\n\t\t\t<div className={styles.title}>{title}</div>\n\t\t\t{ownershipNotice && <div className={styles.subTitle}>{ownershipNotice}</div>}\n\t\t\t<div>\n\t\t\t\t<div className={classNames(styles.price, isDiscounted && styles.priceDiscounted)}>{price.valueLocalized}</div>\n\t\t\t\t{addToMiniCartButton && (\n\t\t\t\t\t<AddToMiniCartButton\n\t\t\t\t\t\tbuttonClassName={styles.addToMiniCartButton}\n\t\t\t\t\t\tpayInFull={true}\n\t\t\t\t\t\tdisplayAddedToCart={false}\n\t\t\t\t\t\tskuIds={skuIds}\n\t\t\t\t\t\tproductId={productId}\n\t\t\t\t\t\tresources={addToMiniCartButton.resources}\n\t\t\t\t\t\tisOwnedByUser={isOwnedByUser}\n\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nProductTab.propTypes = {\n\ttitle: PropTypes.string.isRequired,\n};\n\nexport default ProductTab;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SliderWrapper from '../../scrollable-table-with-slider/slider-wrapper';\nimport useScreensize from '../../../../util/hooks/use-screensize';\nimport TrackProductCard from '../track-product-card/';\nimport sliderArrowOptions from '../../scrollable-table-with-slider/slider-arrow-options';\nimport ProductTab from './product-tab';\nimport styles from './index.less';\n\nconst TrackProductSlider = ({ trackProducts, isSticky, ownershipNotice, onItemAddedToCart }) => {\n\tconst { isMobile } = useScreensize();\n\n\tif (!trackProducts || !trackProducts.length) {\n\t\treturn null;\n\t}\n\n\tconst trackProductCards = trackProducts.map(tp => ({\n\t\tid: tp.productId,\n\t\tcomponent: isMobile ? (\n\t\t\t<ProductTab\n\t\t\t\ttitle={tp.name}\n\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\tprice={tp.price}\n\t\t\t\tskuIds={tp.skuIds}\n\t\t\t\tproductId={tp.productId}\n\t\t\t\tisOwnedByUser={tp.isOwned}\n\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\taddToMiniCartButton={tp.addToMiniCartButton}\n\t\t\t\tpriceAnchorViewModel={tp.priceAnchorViewModel}\n\t\t\t/>\n\t\t) : (\n\t\t\t<TrackProductCard\n\t\t\t\tvariant={isSticky ? 'short' : 'full'}\n\t\t\t\ttitle={tp.name}\n\t\t\t\tblurb={tp.blurb}\n\t\t\t\tisForeignCurrency={tp.isForeignCurrency}\n\t\t\t\tprice={tp.price}\n\t\t\t\tskuIds={tp.skuIds}\n\t\t\t\tpriceAnchorViewModel={tp.priceAnchorViewModel}\n\t\t\t\tproductId={tp.productId}\n\t\t\t\taddToMiniCartButton={tp.addToMiniCartButton}\n\t\t\t\tisOwnedByUser={tp.isOwned}\n\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\tresourceCounts={tp.resourceCounts}\n\t\t\t\tisRecommended={tp.isRecommended}\n\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\timageUrl={tp.imageUrl}\n\t\t\t\tsavingsPercentage={tp.savingsPercentage}\n\t\t\t\tproductDetailsUrl={tp.productDetailsUrl}\n\t\t\t/>\n\t\t),\n\t}));\n\n\treturn (\n\t\t<SliderWrapper\n\t\t\titemsClassName={styles.sliderItems}\n\t\t\titems={trackProductCards}\n\t\t\tarrowOptions={{ buttonHeight: isSticky && sliderArrowOptions.buttonHeight.short }}\n\t\t/>\n\t);\n};\n\nTrackProductSlider.propTypes = {\n\ttrackProducts: PropTypes.array,\n\tisSticky: PropTypes.bool.isRequired,\n\townershipNotice: PropTypes.string,\n\tonItemAddedToCart: PropTypes.func,\n};\n\nexport default TrackProductSlider;\n","// extracted by mini-css-extract-plugin\nexport default {\"sliderItems\":\"index--sliderItems--8RdOB\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\nimport { useLocalization } from '../../../../localization';\n\nimport styles from './index.less';\n\nconst MobileTrackSelector = ({ selectedTrack, hideBooksIOwn, onFilterChange }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\treturn (\n\t\t<div>\n\t\t\t<CommandSentence Container=\"span\" template={resources.MobileComparisonHeaderLibraries}>\n\t\t\t\t<CommandSentence.Field name=\"SELECTEDTRACKNAME\">{selectedTrack.name}</CommandSentence.Field>\n\t\t\t\t<CommandSentence.Field name=\"SHOWINGORHIDING\">\n\t\t\t\t\t{hideBooksIOwn ? resources.Hiding : resources.Showing}\n\t\t\t\t</CommandSentence.Field>\n\t\t\t</CommandSentence>{' '}\n\t\t\t<button onClick={onFilterChange} className={styles.changeButton}>\n\t\t\t\t{resources.Change}\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nMobileTrackSelector.propTypes = {\n\tselectedTrack: PropTypes.shape({\n\t\tname: PropTypes.string.isRequired,\n\t}).isRequired,\n\thideBooksIOwn: PropTypes.bool.isRequired,\n\tonFilterChange: PropTypes.func.isRequired,\n};\n\nexport default MobileTrackSelector;\n","// extracted by mini-css-extract-plugin\nexport default {\"changeButton\":\"index--changeButton--llKCe\"};","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"index--modal--VXb0e\",\"content\":\"index--content--FgVut\",\"header\":\"index--header--3tVqQ\",\"headerWithTitle\":\"index--headerWithTitle--4xRHQ index--header--3tVqQ\",\"title\":\"index--title--hBdEt\",\"closeButton\":\"index--closeButton--dc71y\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SwipeableWrapper from '../../scrollable-table-with-slider/swipeable-wrapper';\nimport { CloseSvgUrl } from '../../../shared/svgs';\nimport { useLocalization } from '../../../../localization';\n\nimport styles from './index.less';\n\nconst ComparisonModal = ({ title, onClose, children }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\treturn (\n\t\t<div className={styles.modal}>\n\t\t\t<div className={title ? styles.headerWithTitle : styles.header}>\n\t\t\t\t{title && <div className={styles.title}>{title}</div>}\n\t\t\t\t<button onClick={onClose} className={styles.closeButton}>\n\t\t\t\t\t<img src={CloseSvgUrl} alt={resources.Close} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<SwipeableWrapper>\n\t\t\t\t<div className={styles.content}>{children}</div>\n\t\t\t</SwipeableWrapper>\n\t\t</div>\n\t);\n};\n\nComparisonModal.propTypes = {\n\ttitle: PropTypes.string,\n\tonClose: PropTypes.func,\n\tchildren: PropTypes.node,\n};\n\nexport default ComparisonModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TrackProductCard from '../track-product-card';\nimport { RightArrow } from '../../../configuration-wizard/svgs';\nimport ComparisonModal from '../comparison-modal';\nimport { useLocalization } from '../../../../localization';\n\nimport styles from './index.less';\n\nconst MobileProductComparison = ({\n\ttrackProducts,\n\townershipNotice,\n\tisComparisonModalOpen,\n\tonOpenComparisonModal,\n\tonCloseComparisonModal,\n\tonItemAddedToCart,\n\tchildren,\n}) => {\n\treturn (\n\t\t<>\n\t\t\t<div className={styles.productList}>\n\t\t\t\t<CompareLibrariesButton onClick={onOpenComparisonModal} />\n\t\t\t\t{trackProducts.map(tp => (\n\t\t\t\t\t<TrackProductCard\n\t\t\t\t\t\tkey={tp.productId}\n\t\t\t\t\t\tvariant=\"mobile\"\n\t\t\t\t\t\ttitle={tp.name}\n\t\t\t\t\t\tblurb={tp.blurb}\n\t\t\t\t\t\tisForeignCurrency={tp.isForeignCurrency}\n\t\t\t\t\t\tprice={tp.price}\n\t\t\t\t\t\tskuIds={tp.skuIds}\n\t\t\t\t\t\tpriceAnchorViewModel={tp.priceAnchorViewModel}\n\t\t\t\t\t\tproductId={tp.productId}\n\t\t\t\t\t\taddToMiniCartButton={tp.addToMiniCartButton}\n\t\t\t\t\t\tisOwnedByUser={tp.isOwned}\n\t\t\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t\tisRecommended={tp.isRecommended}\n\t\t\t\t\t\tsavingsPercentage={tp.savingsPercentage}\n\t\t\t\t\t\tproductDetailsUrl={tp.productDetailsUrl}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t\t<CompareLibrariesButton onClick={onOpenComparisonModal} />\n\t\t\t</div>\n\t\t\t{isComparisonModalOpen && <ComparisonModal onClose={onCloseComparisonModal}>{children}</ComparisonModal>}\n\t\t</>\n\t);\n};\n\nconst CompareLibrariesButton = ({ onClick }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\treturn (\n\t\t<button className={styles.compareLibrariesButton} onClick={onClick}>\n\t\t\t{resources.CompareLibraries}\n\t\t\t<RightArrow />\n\t\t</button>\n\t);\n};\n\nMobileProductComparison.propTypes = {\n\ttrackProducts: PropTypes.array.isRequired,\n\townershipNotice: PropTypes.string,\n\tisComparisonModalOpen: PropTypes.bool.isRequired,\n\tonOpenComparisonModal: PropTypes.func.isRequired,\n\tonCloseComparisonModal: PropTypes.func.isRequired,\n\tonItemAddedToCart: PropTypes.func,\n\tchildren: PropTypes.node.isRequired,\n};\n\nexport default MobileProductComparison;\n","// extracted by mini-css-extract-plugin\nexport default {\"productList\":\"index--productList--eJOIm\",\"compareLibrariesButton\":\"index--compareLibrariesButton--b5fKN btn\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--RzOyO\",\"viewMoreContainer\":\"index--viewMoreContainer--g6hc9\",\"viewMoreButton\":\"index--viewMoreButton--fcIMW\",\"containerBottomBorder\":\"index--containerBottomBorder--nROtE\",\"tabsContainer\":\"index--tabsContainer--duICI\",\"tabSection\":\"index--tabSection--xLewU\",\"tab\":\"index--tab--4J7E6\",\"customCompareTrackTab\":\"index--customCompareTrackTab--IfGMH\",\"selectedTab\":\"index--selectedTab--b6ZYo\",\"tabIndicator\":\"index--tabIndicator--lVdfG\"};","import React, { useCallback, useMemo, useRef, useState } from 'react';\nimport classNames from 'classnames';\n\nimport { DoubleRightArrow } from '../../svgs';\nimport { useLocalization } from '../../../../localization';\n\nimport styles from './index.less';\n\nconst customCompareTabToken = 'custom-compare';\nconst denominationalTabToken = 'denominational';\nconst getTrackTabToken = trackId => {\n\treturn `track-${trackId}`;\n};\n\nconst TabBasedTrackSelector = ({\n\tclassName,\n\ttrackOptions,\n\tselectedTrackId,\n\tuserIsBasePackageOwner,\n\tonTrackChange,\n\tonChangeComparison,\n}) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst { primaryTrack, denominationalTracks, alternateTracks, customCompareTrack } = trackOptions;\n\n\tconst selectedTab = useMemo(() => {\n\t\tif (selectedTrackId === customCompareTrack?.trackId) {\n\t\t\treturn customCompareTabToken;\n\t\t}\n\n\t\tif (denominationalTracks.some(track => track.trackId === selectedTrackId)) {\n\t\t\treturn denominationalTabToken;\n\t\t}\n\n\t\treturn getTrackTabToken(selectedTrackId);\n\t}, [customCompareTrack?.trackId, denominationalTracks, selectedTrackId]);\n\n\tconst [isOpen, setIsOpen] = useState(() => {\n\t\tif (userIsBasePackageOwner) {\n\t\t\treturn true;\n\t\t}\n\t\tconst firstTrack = primaryTrack ?? (denominationalTracks.length > 0 ? null : alternateTracks[0]) ?? null;\n\t\tif (firstTrack) {\n\t\t\treturn selectedTrackId !== firstTrack.trackId;\n\t\t}\n\t\treturn true;\n\t});\n\n\tconst handleViewMoreClick = useCallback(() => {\n\t\tsetIsOpen(true);\n\t}, []);\n\n\tconst lastDenominationalLibrarySelectedRef = useRef(null);\n\n\tif (selectedTab === denominationalTabToken) {\n\t\tlastDenominationalLibrarySelectedRef.current = selectedTrackId;\n\t}\n\n\tconst handleDenominationalTabSelected = useCallback(() => {\n\t\tlet trackId = lastDenominationalLibrarySelectedRef.current;\n\t\tif (!trackId || !denominationalTracks.some(track => track.trackId === trackId)) {\n\t\t\ttrackId = denominationalTracks[0]?.trackId ?? null;\n\t\t}\n\t\tif (trackId !== null) {\n\t\t\tonTrackChange?.(trackId);\n\t\t}\n\t}, [denominationalTracks, onTrackChange]);\n\n\tif (!isOpen) {\n\t\treturn (\n\t\t\t<div className={styles.viewMoreContainer}>\n\t\t\t\t<button className={styles.viewMoreButton} onClick={handleViewMoreClick}>\n\t\t\t\t\t<span>{resources.ViewMoreLibraries}</span>\n\t\t\t\t\t<DoubleRightArrow />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={classNames(className, styles.container)}>\n\t\t\t<div className={styles.containerBottomBorder}></div>\n\t\t\t<div className={styles.tabsContainer}>\n\t\t\t\t{primaryTrack && (\n\t\t\t\t\t<TabSection>\n\t\t\t\t\t\t<TrackTab\n\t\t\t\t\t\t\ttrack={primaryTrack}\n\t\t\t\t\t\t\tisSelected={selectedTab === getTrackTabToken(primaryTrack.trackId)}\n\t\t\t\t\t\t\tonTrackChange={onTrackChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TabSection>\n\t\t\t\t)}\n\t\t\t\t{denominationalTracks.length > 0 && (\n\t\t\t\t\t<TabSection>\n\t\t\t\t\t\t<Tab isSelected={selectedTab === denominationalTabToken} onClick={handleDenominationalTabSelected}>\n\t\t\t\t\t\t\t{resources.Traditions}\n\t\t\t\t\t\t</Tab>\n\t\t\t\t\t</TabSection>\n\t\t\t\t)}\n\t\t\t\t<TabSection>\n\t\t\t\t\t{alternateTracks.map(track => (\n\t\t\t\t\t\t<TrackTab\n\t\t\t\t\t\t\tkey={track.trackId}\n\t\t\t\t\t\t\ttrack={track}\n\t\t\t\t\t\t\tisSelected={selectedTab === getTrackTabToken(track.trackId)}\n\t\t\t\t\t\t\tonTrackChange={onTrackChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</TabSection>\n\t\t\t\t{customCompareTrack && (\n\t\t\t\t\t<TabSection>\n\t\t\t\t\t\t<CustomCompareTrackTab\n\t\t\t\t\t\t\ttrack={customCompareTrack}\n\t\t\t\t\t\t\tisSelected={selectedTab === customCompareTabToken}\n\t\t\t\t\t\t\tonTrackChange={onTrackChange}\n\t\t\t\t\t\t\tonChangeComparison={onChangeComparison}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</TabSection>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nfunction TabSection({ children }) {\n\treturn <div className={styles.tabSection}>{children}</div>;\n}\n\nfunction Tab({ className, children, onClick, isSelected }) {\n\treturn (\n\t\t<button onClick={onClick} className={classNames(className, styles.tab, isSelected && styles.selectedTab)}>\n\t\t\t{children}\n\t\t\t<div className={styles.tabIndicator} />\n\t\t</button>\n\t);\n}\n\nfunction TrackTab({ className, track, isSelected, onTrackChange }) {\n\tconst handleClick = useCallback(() => {\n\t\tonTrackChange?.(track.trackId);\n\t}, [onTrackChange, track.trackId]);\n\n\treturn (\n\t\t<Tab className={className} onClick={handleClick} isSelected={isSelected}>\n\t\t\t{track.name}\n\t\t</Tab>\n\t);\n}\n\nfunction CustomCompareTrackTab({ track, isSelected, onTrackChange, onChangeComparison }) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst handleClick = useCallback(() => {\n\t\tif (isSelected) {\n\t\t\tonChangeComparison?.();\n\t\t} else {\n\t\t\tonTrackChange?.(track.trackId);\n\t\t}\n\t}, [isSelected, onChangeComparison, onTrackChange, track.trackId]);\n\n\treturn (\n\t\t<Tab className={styles.customCompareTrackTab} onClick={handleClick} isSelected={isSelected}>\n\t\t\t{isSelected ? resources.ChangeComparison : resources.CustomCompare}\n\t\t</Tab>\n\t);\n}\n\nexport default TabBasedTrackSelector;\n","// extracted by mini-css-extract-plugin\nexport default {\"baseContainer\":\"index--baseContainer--ysDAr\",\"comparisonTable\":\"index--comparisonTable--Qbe49 index--baseContainer--ysDAr\",\"trackSection\":\"index--trackSection--2cwYf index--baseContainer--ysDAr\",\"tabBasedTrackSelector\":\"index--tabBasedTrackSelector--Gpq4L\",\"trackSectionContainer\":\"index--trackSectionContainer--plQi2\",\"trackUpperSection\":\"index--trackUpperSection--bjTsy\",\"trackUpperSectionLeftSide\":\"index--trackUpperSectionLeftSide--0uVSC\",\"trackSelectorContainer\":\"index--trackSelectorContainer--SOCko\",\"productSectionTitle\":\"index--productSectionTitle--o20oA\",\"leftSideProductSectionTitle\":\"index--leftSideProductSectionTitle--K-cg4 index--productSectionTitle--o20oA\",\"trackControls\":\"index--trackControls--ZGnhM\",\"trackSelector\":\"index--trackSelector--HFs+f\",\"comparisonTableLegendAndControlsContainer\":\"index--comparisonTableLegendAndControlsContainer--XcbpD\",\"paymentNotice\":\"index--paymentNotice--c2Z+K\",\"mobileFilterBody\":\"index--mobileFilterBody--31HPx\",\"errorMessage\":\"index--errorMessage--qwnvb\",\"mobileProductComparison\":\"index--mobileProductComparison--ofqit\",\"customCompareButton\":\"index--customCompareButton--hMjp1 btn btn-secondary-inverted\"};","import React, { useRef, useState, useCallback, useContext, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport usePreventBodyScrolling from '../../../util/hooks/use-prevent-body-scrolling';\nimport { updateUrlParamValues } from '../../../util/url';\nimport useScreensize from '../../../util/hooks/use-screensize';\nimport FullscreenOverlayLoadingSpinner from '../../shared/fullscreen-overlay-loading-spinner';\nimport StickyHeader from '../../sticky-header';\nimport sharedStyles from '../../configuration-wizard/shared.less';\nimport ComparisonTableLegend from '../comparison-table-legend';\nimport ComparisonTableControls from '../comparison-table-controls';\nimport { ScrollableTableWithSliderContext } from '../scrollable-table-with-slider/scrollable-table-with-slider-provider';\nimport useComparisonTracksWithCustomCompare, {\n\tcustomCompareTrackId,\n} from '../hooks/comparison-tracks-with-custom-compare';\nimport CustomCompareModal from '../custom-compare-modal';\nimport MobileCustomCompare from '../mobile-custom-compare';\nimport { useLocalization } from '../../../localization';\nimport TrackKinds from '../track-kinds';\nimport TrackSelector from './track-selector';\nimport ComparisonSectionsTable from './comparison-sections-table';\nimport TrackProductSlider from './track-product-slider';\nimport MobileTrackSelector from './mobile-track-selector';\nimport MobileProductComparison from './mobile-product-comparison';\nimport ComparisonModal from './comparison-modal';\nimport TabBasedTrackSelector from './tab-based-track-selector/index.jsx';\n\nimport styles from './index.less';\n\nconst NewComparisonTableWithSlider = ({\n\tinitialSelectedTrackId,\n\tinitialSelectedTrackProducts,\n\ttrackOptions: propsTrackOptions,\n\tuserIsBasePackageOwner,\n\tproductSectionTitle,\n\townershipNotice,\n\tupdateSelectedProductIndex,\n\ttrackKind,\n\trecommendedTrackProductId,\n\tonItemAddedToCart,\n\tcomparisonTableControlsHandler,\n\troutes,\n\tsuppressMobileProductComparison = false,\n}) => {\n\tconst [isMobileComparisonModalOpen, setIsMobileComparisonModalOpen] = useState(false);\n\tconst hasDemoedOpenSectionRef = useRef(false);\n\tconst resources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst pricingSidebarResources = useLocalization(\n\t\t'CommerceWeb.Resources.Product.DisplayTemplates.PricingSidebarViewModel'\n\t);\n\n\tconst handleTrackFetched = useCallback(track => {\n\t\t// note, `track` is a new object, that will be pushed into React state after this returns.\n\t\t// It is safe to mutate it like this.\n\t\ttrack.sections[0].isOpen = !hasDemoedOpenSectionRef.current;\n\t\thasDemoedOpenSectionRef.current = true;\n\t}, []);\n\n\tconst handleTrackSelected = useCallback(\n\t\ttrack => {\n\t\t\tupdateSelectedProductIndex(track);\n\n\t\t\tlet trackName = undefined,\n\t\t\t\tproductIds = undefined;\n\t\t\tif (track.trackId === customCompareTrackId) {\n\t\t\t\tproductIds = track.trackProducts.map(tp => tp.productId);\n\t\t\t} else {\n\t\t\t\ttrackName = track.name;\n\t\t\t}\n\t\t\tupdateUrlParamValues({ trackName, productIds });\n\t\t},\n\t\t[updateSelectedProductIndex]\n\t);\n\n\tconst {\n\t\ttrackOptions,\n\t\ttracks,\n\t\tselectedTrackId,\n\t\tselectedTrack,\n\t\thandleTrackChange,\n\t\tselectedCompareSections,\n\t\tselectedCustomCompareTrackProducts,\n\t\tisCustomCompareModalOpen,\n\t\tsetIsCustomCompareModalOpen,\n\t\thandleCustomCompare,\n\t\terrorMessage,\n\t\tisLoading,\n\t\tdisplayMobileFilter,\n\t\tselectedMobileFilterTrackId,\n\t\thandleMobileFilterTrackChange,\n\t\thandleFilterChange,\n\t\thandleCustomCompareTrackProductSelect,\n\t\thandleCustomCompareTrackProductDeselect,\n\t\thandleCustomCompareClearAll,\n\t} = useComparisonTracksWithCustomCompare({\n\t\tinitialSelectedTrackId,\n\t\tinitialSelectedTrackProducts,\n\t\ttrackOptions: propsTrackOptions,\n\t\trecommendedTrackProductId,\n\t\thandleTrackFetched,\n\t\thandleTrackSelected,\n\t\troutes,\n\t});\n\n\tconst handleChangeComparison = useCallback(() => {\n\t\tsetIsCustomCompareModalOpen(true);\n\t}, [setIsCustomCompareModalOpen]);\n\n\tconst handleCustomCompareModalClose = useCallback(() => {\n\t\tsetIsCustomCompareModalOpen(false);\n\t}, [setIsCustomCompareModalOpen]);\n\n\tconst { isMobile } = useScreensize();\n\n\tusePreventBodyScrolling(displayMobileFilter);\n\n\tconst handleOpenMobileComparisonModal = useCallback(() => setIsMobileComparisonModalOpen(true), []);\n\n\tconst handleCloseMobileComparisonModal = useCallback(() => setIsMobileComparisonModalOpen(false), []);\n\n\tconst stickyHeaderAnchorElementRef = useRef(null);\n\tconst comparisonTableRef = useRef(null);\n\tconst { isTableScrolling } = useContext(ScrollableTableWithSliderContext);\n\n\tconst categorizedTrackOptions = useMemo(() => {\n\t\tlet isAnyCategorizedTracks = false;\n\t\tlet firstTrack = null;\n\t\tconst denominationalTracks = [];\n\t\tconst alternateTracks = [];\n\t\tlet customCompareTrack = null;\n\t\tfor (const trackOption of trackOptions) {\n\t\t\tif (trackOption.trackId === customCompareTrackId) {\n\t\t\t\tcustomCompareTrack = trackOption;\n\t\t\t} else if (!firstTrack) {\n\t\t\t\tfirstTrack = trackOption;\n\t\t\t} else if (trackOption.trackGroup === 'denominational') {\n\t\t\t\tdenominationalTracks.push(trackOption);\n\t\t\t} else {\n\t\t\t\talternateTracks.push(trackOption);\n\t\t\t}\n\n\t\t\tif (trackOption.trackGroup) {\n\t\t\t\tisAnyCategorizedTracks = true;\n\t\t\t}\n\t\t}\n\n\t\tlet primaryTrack = null;\n\t\tif (isAnyCategorizedTracks) {\n\t\t\tprimaryTrack = firstTrack;\n\t\t} else if (firstTrack) {\n\t\t\talternateTracks.unshift(firstTrack);\n\t\t}\n\n\t\treturn {\n\t\t\tprimaryTrack,\n\t\t\tdenominationalTracks,\n\t\t\talternateTracks,\n\t\t\tcustomCompareTrack,\n\t\t};\n\t}, [trackOptions]);\n\n\tconst isDenominationalTrackSelected = categorizedTrackOptions.denominationalTracks.some(\n\t\ttrack => track.trackId === selectedTrackId\n\t);\n\n\tif (errorMessage) {\n\t\treturn <div className={styles.errorMessage}>{errorMessage}</div>;\n\t}\n\n\tif (displayMobileFilter) {\n\t\treturn (\n\t\t\t<ComparisonModal title={resources.ChangeComparison} onClose={handleFilterChange}>\n\t\t\t\t{isLoading && <FullscreenOverlayLoadingSpinner zIndex={5002} />}\n\t\t\t\t<div className={styles.mobileFilterBody}>\n\t\t\t\t\t{trackOptions && trackOptions.length > 1 && (\n\t\t\t\t\t\t<TrackSelector\n\t\t\t\t\t\t\tclassName={styles.trackSelector}\n\t\t\t\t\t\t\tselectedTrackId={selectedMobileFilterTrackId}\n\t\t\t\t\t\t\ttrackOptions={trackOptions}\n\t\t\t\t\t\t\tlabel={resources.Traditions}\n\t\t\t\t\t\t\tonTrackChange={handleMobileFilterTrackChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{trackOptions.length > 1 && (\n\t\t\t\t\t\t<MobileCustomCompare\n\t\t\t\t\t\t\tinitialExpandedTrackId={initialSelectedTrackId}\n\t\t\t\t\t\t\tisVisible={selectedMobileFilterTrackId === customCompareTrackId}\n\t\t\t\t\t\t\tonClearAll={handleCustomCompareClearAll}\n\t\t\t\t\t\t\tonCompare={handleCustomCompare}\n\t\t\t\t\t\t\tonTrackProductDeselect={handleCustomCompareTrackProductDeselect}\n\t\t\t\t\t\t\tonTrackProductSelect={handleCustomCompareTrackProductSelect}\n\t\t\t\t\t\t\tselectedTrackProducts={selectedCustomCompareTrackProducts}\n\t\t\t\t\t\t\ttracks={tracks}\n\t\t\t\t\t\t\ttrackOptions={trackOptions}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</ComparisonModal>\n\t\t);\n\t}\n\n\tconst showTrackHeader = trackKind !== TrackKinds.subscribableFeatureSet;\n\n\tconst isTrackLoaded = selectedTrack && selectedTrack.trackProducts;\n\n\tconst getTrackHeader = (isStickyHeader, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={styles.trackSectionContainer}>\n\t\t\t\t<div className={styles.trackSection}>\n\t\t\t\t\t{!isMobile && (\n\t\t\t\t\t\t<div className={styles.tabBasedTrackSelector}>\n\t\t\t\t\t\t\t{trackOptions && trackOptions.length > 1 && selectedTrack && (\n\t\t\t\t\t\t\t\t<TabBasedTrackSelector\n\t\t\t\t\t\t\t\t\tclassName={styles.tabBasedTrackSelector}\n\t\t\t\t\t\t\t\t\ttrackOptions={categorizedTrackOptions}\n\t\t\t\t\t\t\t\t\tselectedTrackId={selectedTrackId}\n\t\t\t\t\t\t\t\t\tuserIsBasePackageOwner={userIsBasePackageOwner}\n\t\t\t\t\t\t\t\t\tonTrackChange={handleTrackChange}\n\t\t\t\t\t\t\t\t\tonChangeComparison={handleChangeComparison}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{isMobile && trackOptions && trackOptions.length > 1 && selectedTrack && (\n\t\t\t\t\t\t<MobileTrackSelector\n\t\t\t\t\t\t\tselectedTrack={selectedTrack}\n\t\t\t\t\t\t\thideBooksIOwn={comparisonTableControlsHandler.hideBooksIOwn}\n\t\t\t\t\t\t\tonFilterChange={handleFilterChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className={styles.trackUpperSection}>\n\t\t\t\t\t\t<div className={styles.trackUpperSectionLeftSide}>\n\t\t\t\t\t\t\t<div className={styles.trackSelectorContainer}>\n\t\t\t\t\t\t\t\t<div className={styles.leftSideProductSectionTitle}>\n\t\t\t\t\t\t\t\t\t{productSectionTitle && <div className={sharedStyles.h5}>{productSectionTitle}</div>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{isTrackLoaded && !isStickyHeader && (\n\t\t\t\t\t\t\t\t\t<div className={styles.trackControls}>\n\t\t\t\t\t\t\t\t\t\t{trackOptions && trackOptions.length > 1 && isDenominationalTrackSelected && selectedTrack && (\n\t\t\t\t\t\t\t\t\t\t\t<TrackSelector\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={styles.trackSelector}\n\t\t\t\t\t\t\t\t\t\t\t\tselectedTrackId={selectedTrack.trackId}\n\t\t\t\t\t\t\t\t\t\t\t\ttrackOptions={categorizedTrackOptions.denominationalTracks}\n\t\t\t\t\t\t\t\t\t\t\t\tlabel={resources.Traditions}\n\t\t\t\t\t\t\t\t\t\t\t\tdesktopLabelPosition={'top'}\n\t\t\t\t\t\t\t\t\t\t\t\tonTrackChange={handleTrackChange}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<CustomCompareModal\n\t\t\t\t\t\t\t\t\t\t\tinitialExpandedTrackId={initialSelectedTrackId}\n\t\t\t\t\t\t\t\t\t\t\tisOpen={isCustomCompareModalOpen}\n\t\t\t\t\t\t\t\t\t\t\tselectedTrackProducts={selectedCustomCompareTrackProducts}\n\t\t\t\t\t\t\t\t\t\t\tonClose={handleCustomCompareModalClose}\n\t\t\t\t\t\t\t\t\t\t\ttrackOptions={trackOptions}\n\t\t\t\t\t\t\t\t\t\t\ttracks={tracks}\n\t\t\t\t\t\t\t\t\t\t\tonCompare={handleCustomCompare}\n\t\t\t\t\t\t\t\t\t\t\tonTrackProductSelect={handleCustomCompareTrackProductSelect}\n\t\t\t\t\t\t\t\t\t\t\tonTrackProductDeselect={handleCustomCompareTrackProductDeselect}\n\t\t\t\t\t\t\t\t\t\t\tonClearAll={handleCustomCompareClearAll}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{isTrackLoaded && !isStickyHeader && (\n\t\t\t\t\t\t\t\t<div className={styles.comparisonTableLegendAndControlsContainer}>\n\t\t\t\t\t\t\t\t\t<ComparisonTableLegend mode={isStickyHeader ? 'wide' : 'default'} />\n\t\t\t\t\t\t\t\t\t<ComparisonTableControls\n\t\t\t\t\t\t\t\t\t\tuserIsBasePackageOwner={userIsBasePackageOwner}\n\t\t\t\t\t\t\t\t\t\t{...comparisonTableControlsHandler}\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\t{isTrackLoaded && (\n\t\t\t\t\t\t\t<TrackProductSlider\n\t\t\t\t\t\t\t\ttrackProducts={selectedTrack.trackProducts}\n\t\t\t\t\t\t\t\tisSticky={isStickyHeader}\n\t\t\t\t\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t{isTrackLoaded && !isStickyHeader && (\n\t\t\t\t\t\t<div className={styles.paymentNotice}>\n\t\t\t\t\t\t\t{'*'}\n\t\t\t\t\t\t\t{pricingSidebarResources.PaymentPlansAvailableInCart.toLowerCase()}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst comparisonTableWithSlider = (\n\t\t<>\n\t\t\t{(isLoading || isTableScrolling) && <FullscreenOverlayLoadingSpinner zIndex={5002} />}\n\t\t\t{showTrackHeader && (\n\t\t\t\t<>\n\t\t\t\t\t{getTrackHeader(false, stickyHeaderAnchorElementRef)}\n\t\t\t\t\t{!isMobile && (\n\t\t\t\t\t\t<StickyHeader anchorElementRef={stickyHeaderAnchorElementRef} boundingElementRef={comparisonTableRef}>\n\t\t\t\t\t\t\t{getTrackHeader(true)}\n\t\t\t\t\t\t</StickyHeader>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t\t<div ref={comparisonTableRef} className={styles.comparisonTable}>\n\t\t\t\t<ComparisonSectionsTable\n\t\t\t\t\tselectedCompareSections={selectedCompareSections}\n\t\t\t\t\tcomparisonTableControlsHandler={comparisonTableControlsHandler}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</>\n\t);\n\n\tif (!suppressMobileProductComparison && isMobile) {\n\t\treturn (\n\t\t\t<div className={styles.mobileProductComparison}>\n\t\t\t\t<div className={styles.productSectionTitle}>{productSectionTitle && <div>{productSectionTitle}</div>}</div>\n\t\t\t\t{selectedTrack?.trackProducts?.length && (\n\t\t\t\t\t<MobileProductComparison\n\t\t\t\t\t\ttrackProducts={selectedTrack.trackProducts}\n\t\t\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\t\t\tisComparisonModalOpen={isMobileComparisonModalOpen}\n\t\t\t\t\t\tonOpenComparisonModal={handleOpenMobileComparisonModal}\n\t\t\t\t\t\tonCloseComparisonModal={handleCloseMobileComparisonModal}\n\t\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\t>\n\t\t\t\t\t\t{comparisonTableWithSlider}\n\t\t\t\t\t</MobileProductComparison>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn comparisonTableWithSlider;\n};\n\nNewComparisonTableWithSlider.propTypes = {\n\tinitialSelectedTrackId: PropTypes.string.isRequired,\n\ttrackOptions: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tname: PropTypes.string,\n\t\t\ttrackId: PropTypes.string,\n\t\t})\n\t),\n\tuserIsBasePackageOwner: PropTypes.bool,\n\tonTrackAffinityUpdate: PropTypes.func,\n\tproductSectionTitle: PropTypes.string,\n\townershipNotice: PropTypes.string,\n\tsuppressMobileProductComparison: PropTypes.bool,\n\tonItemAddedToCart: PropTypes.func,\n\troutes: PropTypes.shape({\n\t\tDisabledLinkUrl: PropTypes.string,\n\t\tCompareTrackBaseUrl: PropTypes.string,\n\t\tCompareTrackProductsBaseUrl: PropTypes.string,\n\t\tCompareTrackSectionsBaseUrl: PropTypes.string,\n\t}),\n};\n\nexport default NewComparisonTableWithSlider;\n","// extracted by mini-css-extract-plugin\nexport default {\"comparePage\":\"index--comparePage--9Xjbj\",\"loadingIndicator\":\"index--loadingIndicator--Kp6Kg\",\"headerContainer\":\"index--headerContainer--d1vIw\",\"header\":\"index--header--j1Q0n\",\"hideBooksIOwnContainer\":\"index--hideBooksIOwnContainer--RvGgH\",\"headerFilters\":\"index--headerFilters--mL+wc\",\"trackSelectAndCompare\":\"index--trackSelectAndCompare--jbRRq\",\"mobileHeaderText\":\"index--mobileHeaderText--WbHi9\",\"change\":\"index--change--O5Pb8\",\"controls\":\"index--controls--eI8uO\",\"control\":\"index--control---A23M\",\"borderedControl\":\"index--borderedControl--Jznel index--control---A23M\",\"controlLegendMobile\":\"index--controlLegendMobile--LM+OW index--control---A23M\",\"controlLegendDesktop\":\"index--controlLegendDesktop--JaMux\",\"controlIcon\":\"index--controlIcon--ZX6fH\",\"controlIconLabel\":\"index--controlIconLabel--UMaAX\",\"legendIcon\":\"index--legendIcon--Il7IM\",\"legendModal\":\"index--legendModal--wt7Ib\",\"legendModalItem\":\"index--legendModalItem--CEY42\",\"legendModalItemIcon\":\"index--legendModalItemIcon--oQjoL\",\"mobileFilter\":\"index--mobileFilter--q8rcu\",\"mobileFilterHeader\":\"index--mobileFilterHeader--rbucT\",\"mobileFilterBody\":\"index--mobileFilterBody--G-YuB\",\"mobileFilterTitle\":\"index--mobileFilterTitle--EylpR\",\"closeButton\":\"index--closeButton--AUGKR\",\"trackSelect\":\"index--trackSelect--l3TZg\",\"hideBooksIOwnCheckbox\":\"index--hideBooksIOwnCheckbox--SQ+hu\",\"singleTrackHideBooksIOwn\":\"index--singleTrackHideBooksIOwn--nSw-K\",\"sections\":\"index--sections--ewAB1\",\"errorMessage\":\"index--errorMessage--AmGN6\",\"customCompareButton\":\"index--customCompareButton--hFYzX btn btn-secondary-inverted\"};","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport DisabledMessage from '../disabled-message';\nimport NewComparisonTableWithSlider from '../new-comparison-table-with-slider';\nimport ScrollableTableWithSliderProvider from '../scrollable-table-with-slider/scrollable-table-with-slider-provider';\nimport scrollControlTypes from '../scroll-control-types';\nimport useComparisonTableControlsHandler from '../hooks/comparison-table-controls-handler';\nimport { useLocalization } from '../../../localization';\n\nimport styles from './index.less';\n\nconst comparisonTableWithSliderProps = {\n\tpropsByScreenSize: {\n\t\t/* [mobile, tablet, desktop, largeDesktop, extra: { size: value }] */\n\t\tnumbersOfVisibleColumnsByScreenSize: [1, { 450: 2, 768: 2, 1120: 3, 1320: 4, 1512: 5 }],\n\t\tcolumnWidthsByScreenSize: [84, 190],\n\t\tcolumnGapsByScreenSize: [18, 18],\n\t\tboundaryMarginWidthsByScreenSize: [16, 24],\n\t\tswipeRadiusXByScreenSize: [20, 50],\n\t\tsliderProps: {\n\t\t\tarrowWidthsByScreenSize: [0, 30, { 1350: 45 }],\n\t\t},\n\t},\n};\n\nconst getSelectedTrackProductIndex = track => {\n\tif (!track || !track.trackProducts || track.trackProducts.length <= 3) {\n\t\treturn 0;\n\t}\n\n\treturn Math.min(\n\t\tMath.max(\n\t\t\ttrack.trackProducts.findIndex(tp => tp.isSelected),\n\t\t\t0\n\t\t),\n\t\ttrack.trackProducts.length - 3\n\t);\n};\n\nconst ComparePage = ({\n\tinitialSelectedTrackId,\n\tinitialSelectedTrackProducts,\n\ttrackOptions,\n\tuserIsBasePackageOwner,\n\tproductSectionTitle,\n\townershipNotice,\n\trecommendedTrackProductId,\n\tonItemAddedToCart,\n\troutes,\n}) => {\n\tconst compareResources = useLocalization('CommerceWeb.Resources.Product.Compare');\n\tconst [selectedTrack, setSelectedTrack] = useState(\n\t\ttrackOptions\n\t\t\t? trackOptions.find(option => option.trackId === initialSelectedTrackId)\n\t\t\t: { name: compareResources.CustomCompare, trackId: -1 }\n\t);\n\tconst [selectedTrackProductIndex, setSelectedTrackProductIndex] = useState(0);\n\n\tconst handleUpdateSelectedProductIndex = useCallback(track => {\n\t\tsetSelectedTrack(track);\n\t\tsetSelectedTrackProductIndex(getSelectedTrackProductIndex(track));\n\t}, []);\n\n\tconst comparisonTableControlsHandler = useComparisonTableControlsHandler();\n\n\tconst handleFirstVisibleColumnChange = (updateTrackProductIndex, trackProductIndex) => {\n\t\tupdateTrackProductIndex(trackProductIndex);\n\t};\n\n\tif (routes.DisabledLinkUrl) {\n\t\treturn (\n\t\t\t<div className={styles.comparePage}>\n\t\t\t\t<DisabledMessage disabledLinkUrl={routes.DisabledLinkUrl} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={styles.comparePage}>\n\t\t\t<ScrollableTableWithSliderProvider\n\t\t\t\tfirstVisibleColumnIndex={selectedTrackProductIndex}\n\t\t\t\ttotalNumberOfColumns={selectedTrack?.trackProducts?.length ?? 0}\n\t\t\t\tonFirstVisibleColumnChange={i => handleFirstVisibleColumnChange(setSelectedTrackProductIndex, i)}\n\t\t\t\t{...comparisonTableWithSliderProps}\n\t\t\t>\n\t\t\t\t<NewComparisonTableWithSlider\n\t\t\t\t\tinitialSelectedTrackId={initialSelectedTrackId}\n\t\t\t\t\tinitialSelectedTrackProducts={initialSelectedTrackProducts}\n\t\t\t\t\ttrackOptions={trackOptions}\n\t\t\t\t\tuserIsBasePackageOwner={userIsBasePackageOwner}\n\t\t\t\t\tproductSectionTitle={productSectionTitle}\n\t\t\t\t\townershipNotice={ownershipNotice}\n\t\t\t\t\tupdateSelectedProductIndex={handleUpdateSelectedProductIndex}\n\t\t\t\t\trecommendedTrackProductId={recommendedTrackProductId}\n\t\t\t\t\tonItemAddedToCart={onItemAddedToCart}\n\t\t\t\t\tcomparisonTableControlsHandler={comparisonTableControlsHandler}\n\t\t\t\t\troutes={routes}\n\t\t\t\t/>\n\t\t\t</ScrollableTableWithSliderProvider>\n\t\t</div>\n\t);\n};\n\nComparePage.propTypes = {\n\tinitialSelectedTrackId: PropTypes.string.isRequired,\n\tinitialSelectedTrackProducts: PropTypes.array,\n\ttrackOptions: PropTypes.array,\n\tuserIsBasePackageOwner: PropTypes.bool,\n\tscrollControlType: PropTypes.oneOf([scrollControlTypes.scrollbar, scrollControlTypes.buttons]),\n\tonItemAddedToCart: PropTypes.func,\n\tupperBannerViewModel: PropTypes.object.isRequired,\n\troutes: PropTypes.shape({\n\t\tDisabledLinkUrl: PropTypes.string,\n\t\tCompareBaseUrl: PropTypes.string,\n\t\tCompareTrackBaseUrl: PropTypes.string,\n\t\tCompareTrackProductsBaseUrl: PropTypes.string,\n\t\tCompareTrackSectionsBaseUrl: PropTypes.string,\n\t}),\n};\n\nexport default ComparePage;\n","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--mxqjy h2\",\"h4\":\"index--h4---SFFh h2\",\"h5\":\"index--h5--A23tL h3\",\"ui1\":\"index--ui1--JpC8S\",\"ui2\":\"index--ui2--WakZX\",\"ui3\":\"index--ui3--T9oLQ\",\"ui5\":\"index--ui5--tFhyu\",\"b2\":\"index--b2--h3xgs\",\"b3\":\"index--b3--UGqWW\",\"loadingSpinner\":\"index--loadingSpinner--tUJuk\",\"interstitialModalContainer\":\"index--interstitialModalContainer--jaKAZ\",\"header\":\"index--header--nrOdq index--h2--mxqjy h2\",\"message\":\"index--message--yztyG index--ui1--JpC8S\",\"footer\":\"index--footer--25x4Q\",\"buttonsContainer\":\"index--buttonsContainer--tNikt\",\"button\":\"index--button--aIpAc\",\"primaryButton\":\"index--primaryButton--tK4fP index--button--aIpAc\",\"secondaryButton\":\"index--secondaryButton--z9Vo6 index--button--aIpAc\",\"disclaimer\":\"index--disclaimer--PntJL index--ui3--T9oLQ\",\"toastContainer\":\"index--toastContainer--QFfON\",\"subCartSlideIn\":\"index--subCartSlideIn--0QR7U\",\"subCartSlideOut\":\"index--subCartSlideOut--ORPVg\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from '@faithlife/styled-ui';\n\nimport { BlueCheckmark } from '../svgs';\n\nimport styles from './index.less';\n\nconst InterstitialModal = ({\n\tisOpen,\n\ttestId = undefined,\n\theader,\n\tchildren,\n\tprimaryButtonLabel,\n\tonPrimaryButtonClick,\n\tsecondaryButtonLabel,\n\tonSecondaryButtonClick,\n\tdisclaimer,\n\ttoast,\n}) => (\n\t<Modal\n\t\tisOpen={isOpen}\n\t\tcontainer=\"body\"\n\t\tallowBackgroundScrolling\n\t\tignoreClickOnBackdrop\n\t\twidth={['calc(100vw - 24px)', 'calc(100vw - 156px)']}\n\t\tmaxWidth={'1200px'}\n\t\t/* This z-index beats out the detail modals on mobile, so it always gets displayed over them */\n\t\tzIndex={10000}\n\t\tonClose={() => {\n\t\t\tthrow new Error('Close on the InterstitialModal should not have been triggered!');\n\t\t}} // required by Modal, but spec explicitly forbids close behavior\n\t>\n\t\t<div className={styles.interstitialModalContainer} data-testid={testId}>\n\t\t\t<h2 className={styles.header}>{header}</h2>\n\t\t\t<Modal.Content width={['100%', '75%']}>\n\t\t\t\t<p className={styles.message}>{children}</p>\n\t\t\t</Modal.Content>\n\t\t\t<div className={styles.footer}>\n\t\t\t\t<div className={styles.buttonsContainer}>\n\t\t\t\t\t<button className={styles.primaryButton} onClick={onPrimaryButtonClick}>\n\t\t\t\t\t\t{primaryButtonLabel}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button className={styles.secondaryButton} onClick={onSecondaryButtonClick}>\n\t\t\t\t\t\t{secondaryButtonLabel}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t{disclaimer && <div className={styles.disclaimer}>{disclaimer}</div>}\n\t\t\t</div>\n\t\t</div>\n\t\t{toast && (\n\t\t\t<div className={styles.toastContainer}>\n\t\t\t\t<BlueCheckmark />\n\t\t\t\t{toast}\n\t\t\t</div>\n\t\t)}\n\t</Modal>\n);\n\nInterstitialModal.propTypes = {\n\tisOpen: PropTypes.bool.isRequired,\n\ttestId: PropTypes.string,\n\theader: PropTypes.node.isRequired,\n\tchildren: PropTypes.node.isRequired,\n\tprimaryButtonLabel: PropTypes.node.isRequired,\n\tonPrimaryButtonClick: PropTypes.func,\n\tsecondaryButtonLabel: PropTypes.node.isRequired,\n\tonSecondaryButtonClick: PropTypes.func,\n\tdisclaimer: PropTypes.node,\n\ttoast: PropTypes.node,\n};\n\nexport default InterstitialModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport InterstitialModal from '../../interstitial-modal';\nimport { useLocalization } from '../../../../localization';\nimport { useLocation } from '../../../../location';\nimport useInterstitialModalHandler from '../../hooks/use-interstitial-modal-handler';\n\nconst nextTimeToShowAddASubscriptionModalStorageKey = 'next-enable-add-a-subscription-modal-time';\n\nconst useAddASubscriptionModalHandler = (onAddASubscriptionModalNotShown, getShouldShowModalFromState) => {\n\treturn useInterstitialModalHandler(onAddASubscriptionModalNotShown, {\n\t\tnextTimeToShowModalStorageKey: nextTimeToShowAddASubscriptionModalStorageKey,\n\t\tgetShouldShowModalFromState,\n\t\t// disable query parameters\n\t\tshowModalQueryStringParameterName: null,\n\t\tshowCoolDownMillisecondsQueryStringParameterName: null,\n\t});\n};\n\nconst AddASubscriptionModal = ({ isOpen, productTitle, doesUserQualifyForSubscriptionFreeTrial = false, routes }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardAddASubscriptionModal');\n\tconst { navigate } = useLocation();\n\treturn (\n\t\t<InterstitialModal\n\t\t\tisOpen={isOpen}\n\t\t\ttestId=\"subscription-popup-modal\"\n\t\t\theader={resources.SaveAndUnlockHeader}\n\t\t\tprimaryButtonLabel={resources.SeePlans}\n\t\t\tonPrimaryButtonClick={() => navigate(routes.ConfigurationWizardSubscriptionsUrl)}\n\t\t\tsecondaryButtonLabel={resources.ProceedToCheckout}\n\t\t\tonSecondaryButtonClick={() => navigate(routes.CartUrl)}\n\t\t\ttoast={\n\t\t\t\tproductTitle && (\n\t\t\t\t\t<CommandSentence template={resources.LibraryAddedToCart}>\n\t\t\t\t\t\t<CommandSentence.Field name=\"LIBRARY_NAME\">{productTitle}</CommandSentence.Field>\n\t\t\t\t\t</CommandSentence>\n\t\t\t\t)\n\t\t\t}\n\t\t>\n\t\t\t<span>{resources.DiscoverInsightsBeyondMessage}</span>\n\t\t\t{doesUserQualifyForSubscriptionFreeTrial && <span>{` ${resources.YourFirst30DaysAreFree}`}</span>}\n\t\t</InterstitialModal>\n\t);\n};\nAddASubscriptionModal.propTypes = {\n\tisOpen: PropTypes.bool.isRequired,\n\tproductTitle: PropTypes.string,\n\tdoesUserQualifyForSubscriptionFreeTrial: PropTypes.bool,\n\n\troutes: PropTypes.shape({\n\t\tConfigurationWizardSubscriptionsUrl: PropTypes.string.isRequired,\n\t\tCartUrl: PropTypes.string.isRequired,\n\t}).isRequired,\n};\n\nexport default AddASubscriptionModal;\nexport { useAddASubscriptionModalHandler };\n","import React, { useCallback, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nimport FullscreenOverlayLoadingSpinner from '../../shared/fullscreen-overlay-loading-spinner';\nimport ComparePage from '../../compare-page/compare-books-or-features';\nimport {\n\tConfigurationWizardCartContextProvider,\n\tuseConfigurationWizardCartContext,\n} from '../../shared/configuration-wizard-cart';\nimport SummaryTrough from '../summary-trough';\n\nimport WizardHero from '../wizard-hero';\nimport ProgressIndicatorV2 from '../progress-indicator-v2';\nimport { useLocalization } from '../../../localization';\nimport { useLocation } from '../../../location';\nimport styles from './index.less';\nimport AddASubscriptionModal, { useAddASubscriptionModalHandler } from './add-a-subscription-modal';\n\nconst ConfigurationWizardLibraries = ({\n\tcompareViewModel,\n\tsummaryTrough,\n\tlogosOrVerbum,\n\taddASubscriptionModalViewModel,\n\troutes,\n}) => {\n\tconst librariesResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardLibraries');\n\tconst subscriptionsResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\tconst plansResources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\tconst { navigate } = useLocation();\n\tconst [isRedirecting, setIsRedirecting] = useState(false);\n\n\tconst { value: cart } = useConfigurationWizardCartContext();\n\n\tconst handleSkipAddASubscriptionModal = useCallback(() => {\n\t\tsetIsRedirecting(true);\n\t\tnavigate(!cart?.hasEffectiveSubscription ? routes.ConfigurationWizardSubscriptionsUrl : routes.CartUrl);\n\t}, [cart?.hasEffectiveSubscription, navigate, routes.ConfigurationWizardSubscriptionsUrl, routes.CartUrl]);\n\n\tconst handleCheckShouldShow = useCallback(() => {\n\t\treturn !cart?.hasEffectiveSubscription && addASubscriptionModalViewModel;\n\t}, [addASubscriptionModalViewModel, cart?.hasEffectiveSubscription]);\n\n\tconst { isOpen: isAddASubscriptionModalOpen, handle: handleLibraryAddedToCart } = useAddASubscriptionModalHandler(\n\t\thandleSkipAddASubscriptionModal,\n\t\thandleCheckShouldShow\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t{summaryTrough && <SummaryTrough step=\"libraries\" {...summaryTrough} />}\n\t\t\t{isRedirecting && <FullscreenOverlayLoadingSpinner zIndex={5002} />}\n\t\t\t{addASubscriptionModalViewModel && (\n\t\t\t\t<AddASubscriptionModal isOpen={isAddASubscriptionModalOpen} {...addASubscriptionModalViewModel} />\n\t\t\t)}\n\t\t\t<WizardHero\n\t\t\t\ttitle={librariesResources.BuildYourLogosOrVerbumSubscription}\n\t\t\t\tsubtitle={librariesResources.ChooseYourSoftwareThenAddALibrary}\n\t\t\t\tlogosOrVerbum={logosOrVerbum}\n\t\t\t/>\n\t\t\t<ProgressIndicatorV2\n\t\t\t\tstep=\"libraries\"\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\tlibrariesLabel: librariesResources.Library,\n\t\t\t\t\tsubscriptionsLabel: librariesResources.AddASubscriptionOptional,\n\t\t\t\t\tlibraryTitleAndNMoreTemplate: librariesResources.LibraryTitleAndNMoreTemplate,\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t<div className={styles.lowerSectionContent}>\n\t\t\t\t{compareViewModel && (\n\t\t\t\t\t<ComparePage\n\t\t\t\t\t\t{...compareViewModel}\n\t\t\t\t\t\tonItemAddedToCart={handleLibraryAddedToCart}\n\t\t\t\t\t\tresources={{\n\t\t\t\t\t\t\t...compareViewModel.resources,\n\t\t\t\t\t\t\t...librariesResources,\n\t\t\t\t\t\t\t...subscriptionsResources,\n\t\t\t\t\t\t\t...plansResources,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nConfigurationWizardLibraries.propTypes = {\n\tcompareViewModel: PropTypes.object,\n\tsummaryTrough: PropTypes.object,\n\tlogosOrVerbum: PropTypes.string,\n\taddASubscriptionModalViewModel: PropTypes.object,\n\troutes: PropTypes.shape({\n\t\tCartUrl: PropTypes.string.isRequired,\n\t\tConfigurationWizardSubscriptionsUrl: PropTypes.string.isRequired,\n\t\tConfigurationWizardLibrariesUrl: PropTypes.string.isRequired,\n\t}).isRequired,\n};\n\nfunction ConfigurationWizardLibrariesContextWrapper(props) {\n\tconst { initialConfigurationWizardCartViewModel, routes } = props;\n\n\treturn (\n\t\t<ConfigurationWizardCartContextProvider initialValue={initialConfigurationWizardCartViewModel} routes={routes}>\n\t\t\t<ConfigurationWizardLibraries {...props} />\n\t\t</ConfigurationWizardCartContextProvider>\n\t);\n}\nConfigurationWizardLibrariesContextWrapper.propTypes = {\n\tinitialConfigurationWizardCartViewModel: PropTypes.object,\n\troutes: PropTypes.object,\n};\n\nexport default ConfigurationWizardLibrariesContextWrapper;\n","import { useCallback, useState } from 'react';\nimport { useLocation } from '../../../location';\n\nconst defaultShowModalQueryStringParameterName = 'showModal';\nconst defaultShowCoolDownMillisecondsQueryStringParamter = 'coolDownMs';\nconst defaultShowCoolDownMilliseconds = 24 * 60 * 60 * 1000;\n\nconst setNextTimeToShowModalInLocalStorage = (\n\tstorageKey,\n\tshowCoolDownMillisecondsQueryStringParameterName,\n\tconfiguredShowCoolDownMilliseconds,\n\tsearch\n) => {\n\tconst coolDownMillisecondsQueryStringParameterValue = parseInt(\n\t\tnew URLSearchParams(search).get(showCoolDownMillisecondsQueryStringParameterName)?.trim()\n\t);\n\n\tconst coolDownMilliseconds = isNaN(coolDownMillisecondsQueryStringParameterValue)\n\t\t? configuredShowCoolDownMilliseconds\n\t\t: coolDownMillisecondsQueryStringParameterValue;\n\n\tconst nextTimeToShowModal = Date.now() + coolDownMilliseconds;\n\n\twindow.localStorage.setItem(storageKey, nextTimeToShowModal.toString());\n};\n\nconst getShouldShowModal = (storageKey, showModalQueryStringParameterName, search) => {\n\tif (showModalQueryStringParameterName) {\n\t\tconst showModal = new URLSearchParams(search).get(showModalQueryStringParameterName)?.trim()?.toLowerCase();\n\n\t\tif (showModal !== 'true') {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tconst nextTimeToShowModal = parseInt(window.localStorage.getItem(storageKey));\n\tif (isNaN(nextTimeToShowModal)) {\n\t\treturn true;\n\t}\n\n\treturn Date.now() > nextTimeToShowModal;\n};\n\nconst useInterstitialModalHandler = (\n\tonInterstitialNotShown,\n\t{\n\t\tnextTimeToShowModalStorageKey,\n\t\tgetShouldShowModalFromState,\n\t\tshowModalQueryStringParameterName = defaultShowModalQueryStringParameterName,\n\t\tshowCoolDownMillisecondsQueryStringParameterName = defaultShowCoolDownMillisecondsQueryStringParamter,\n\t\tshowCoolDownMilliseconds = defaultShowCoolDownMilliseconds,\n\t}\n) => {\n\tconst { search } = useLocation();\n\tconst [isOpen, setIsOpen] = useState(false);\n\n\tconst handle = useCallback(() => {\n\t\tif (\n\t\t\t(getShouldShowModalFromState ? getShouldShowModalFromState() : true) &&\n\t\t\tgetShouldShowModal(nextTimeToShowModalStorageKey, showModalQueryStringParameterName, search)\n\t\t) {\n\t\t\tsetNextTimeToShowModalInLocalStorage(\n\t\t\t\tnextTimeToShowModalStorageKey,\n\t\t\t\tshowCoolDownMillisecondsQueryStringParameterName,\n\t\t\t\tshowCoolDownMilliseconds,\n\t\t\t\tsearch\n\t\t\t);\n\t\t\tsetIsOpen(true);\n\t\t} else {\n\t\t\tonInterstitialNotShown();\n\t\t}\n\t}, [\n\t\tgetShouldShowModalFromState,\n\t\tnextTimeToShowModalStorageKey,\n\t\tonInterstitialNotShown,\n\t\tsearch,\n\t\tshowCoolDownMilliseconds,\n\t\tshowCoolDownMillisecondsQueryStringParameterName,\n\t\tshowModalQueryStringParameterName,\n\t]);\n\n\treturn { isOpen, handle };\n};\n\nexport default useInterstitialModalHandler;\n","// extracted by mini-css-extract-plugin\nexport default {\"lowerSectionContent\":\"index--lowerSectionContent--556nz\"};","import React, { useMemo } from 'react';\nimport { mobileCutoffWidth, desktopMinWidth } from '../../../util/mobile-utility';\nimport { extraLargeDesktopMinWidth, largeDesktopMinWidth } from '../../../util/hooks/use-screensize';\n\ninterface SizeDescriptor {\n\twidth: number | string;\n\theight?: number;\n}\n\ntype SizeValue = number | string | SizeDescriptor;\n\ninterface ImageSizes {\n\tmobile?: SizeValue;\n\ttablet?: SizeValue;\n\tdesktop?: SizeValue;\n\tlargeDesktop?: SizeValue;\n\textraLargeDesktop?: SizeValue;\n}\n\ninterface ImageProps {\n\tsrc: string;\n\talt?: string;\n\twidth?: number | string;\n\theight?: number | string;\n\tsizes?: ImageSizes;\n\tbelowTheFold?: boolean;\n\tfetchPriority?: 'high' | 'low' | 'auto';\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\ttargetAspectRatio?: [number, number];\n}\n\ntype ImageElementProps = React.ImgHTMLAttributes<HTMLImageElement> & {\n\tfetchpriority?: ImageProps['fetchPriority'];\n};\n\ninterface ProcessedSize {\n\twidth: number | string;\n\theight?: number;\n}\n\ninterface ProcessedSizes {\n\t[key: string]: ProcessedSize;\n}\n\ninterface SizeResult {\n\tsize: number | string;\n\tmaxWidth: number | null;\n}\n\nconst breakPointNames = ['mobile', 'tablet', 'desktop', 'largeDesktop', 'extraLargeDesktop'] as const;\nconst breakPoints: (number | null)[] = [\n\tmobileCutoffWidth,\n\tdesktopMinWidth,\n\tlargeDesktopMinWidth,\n\textraLargeDesktopMinWidth,\n\tnull,\n];\n\nconst standardDeviceWidths = [360, 640, 768, 1024, 1366, 1600, 1920, 2560];\n\nfunction formatSizeValue(size: number | string): string {\n\treturn typeof size === 'string' ? size : `${size}px`;\n}\n\nfunction createSizesAttribute(inputSizes: ProcessedSizes): string {\n\tconst sizeResults: SizeResult[] = [];\n\n\tlet currentResult: SizeResult | undefined = undefined;\n\tfor (let i = 0; i < breakPointNames.length; i++) {\n\t\tconst breakPointName = breakPointNames[i];\n\t\tconst sizeEntry = inputSizes[breakPointName];\n\t\tconst size = sizeEntry?.width ?? null;\n\t\tconst breakPoint = breakPoints[i];\n\t\tif (size !== null) {\n\t\t\tcurrentResult = { size, maxWidth: breakPoint === null ? null : breakPoint - 1 };\n\t\t\tsizeResults.push(currentResult);\n\t\t} else if (currentResult) {\n\t\t\tcurrentResult.maxWidth = breakPoint === null ? null : breakPoint - 1;\n\t\t}\n\t}\n\tif (currentResult) {\n\t\tcurrentResult.maxWidth = null;\n\t}\n\n\treturn sizeResults\n\t\t.map(({ size, maxWidth }) => {\n\t\t\tif (maxWidth !== null) {\n\t\t\t\treturn `(max-width: ${maxWidth}px) ${formatSizeValue(size)}`;\n\t\t\t}\n\t\t\treturn formatSizeValue(size);\n\t\t})\n\t\t.join(',');\n}\n\nfunction computeSrcSetWidths(nominalWidths: number[], deviceWidths: number[]): number[] {\n\tconst widthSet = new Set(deviceWidths);\n\tfor (const nominalWidth of nominalWidths) {\n\t\twidthSet.add(nominalWidth);\n\t\twidthSet.add(nominalWidth * 2);\n\t}\n\treturn [...widthSet].sort((a, b) => a - b);\n}\n\nfunction createSrcSetAttribute(srcSetWidths: number[], src: string, aspectRatio?: number): string | undefined {\n\tconst entries: string[] = [];\n\tfor (const width of srcSetWidths) {\n\t\tconst url = new URL(src);\n\t\turl.searchParams.set('w', String(width));\n\t\tif (aspectRatio) {\n\t\t\turl.searchParams.set('h', String(Math.round(width / aspectRatio)));\n\t\t}\n\t\turl.searchParams.set('m', 'limit');\n\t\tentries.push(`${url.toString()} ${width}w`);\n\t}\n\treturn entries.length > 0 ? entries.join(',') : undefined;\n}\n\nfunction getNominalWidths(processedSizes: ProcessedSizes | undefined, widthProp?: number | string): number[] {\n\tif (processedSizes) {\n\t\tconst numericWidths = Object.values(processedSizes)\n\t\t\t.map(s => s.width)\n\t\t\t.filter((w): w is number => typeof w === 'number');\n\t\treturn numericWidths;\n\t}\n\tif (typeof widthProp === 'number') {\n\t\treturn [widthProp];\n\t}\n\treturn [];\n}\n\nconst amberCdnHost = 'files.logoscdn.com';\nconst amberUrls = ['internal.files.logos.com', 'files.logos.com', amberCdnHost, 'files.amberfile.com'];\n\n// Only production hosts; test/internal hosts serve a different environment's assets and must not be pointed at the production CDN.\nconst amberCdnUpgradableHosts = ['files.logos.com', 'files.amberfile.com'];\n\nfunction isAmberHost(host: string): boolean {\n\treturn amberUrls.includes(host);\n}\n\nfunction detectIsAmberOptimizedUrl(urlAsString: string): boolean {\n\ttry {\n\t\tconst url = new URL(urlAsString);\n\t\tconst isAmberCdn = isAmberHost(url.host);\n\t\tconst isOptimized = url.pathname.endsWith('optimized');\n\t\treturn isAmberCdn && isOptimized;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n// Amber link signatures are generated against a fixed host, so rewriting the host to the CDN keeps signed links valid.\nfunction toAmberCdnUrl(url: URL): string {\n\tif (!amberCdnUpgradableHosts.includes(url.host)) {\n\t\treturn url.toString();\n\t}\n\tconst cdnUrl = new URL(url.toString());\n\tcdnUrl.host = amberCdnHost;\n\tcdnUrl.protocol = 'https:';\n\tcdnUrl.port = '';\n\treturn cdnUrl.toString();\n}\n\nfunction tryUpgradeAmberUrlToCdn(urlAsString: string): string {\n\ttry {\n\t\treturn toAmberCdnUrl(new URL(urlAsString));\n\t} catch {\n\t\treturn urlAsString;\n\t}\n}\n\nfunction tryAddAmberLimit(urlAsString: string): string {\n\ttry {\n\t\tconst url = new URL(urlAsString);\n\t\tif (!isAmberHost(url.host) || !url.pathname.endsWith('optimized')) {\n\t\t\treturn urlAsString;\n\t\t}\n\t\turl.searchParams.set('m', 'limit');\n\t\treturn url.toString();\n\t} catch {\n\t\treturn urlAsString;\n\t}\n}\n\nfunction processSizes(inputSizes: ImageSizes | undefined, aspectRatio?: number): ProcessedSizes | undefined {\n\tif (!inputSizes) {\n\t\treturn undefined;\n\t}\n\tconst processedSizes: ProcessedSizes = {};\n\tfor (const [sizeName, size] of Object.entries(inputSizes)) {\n\t\tif (typeof size === 'string') {\n\t\t\tprocessedSizes[sizeName] = { width: size };\n\t\t} else if (size !== null && size !== undefined && typeof size === 'object') {\n\t\t\tprocessedSizes[sizeName] = {\n\t\t\t\twidth: size.width,\n\t\t\t\theight:\n\t\t\t\t\tsize.height ??\n\t\t\t\t\t(aspectRatio && typeof size.width === 'number' ? Math.floor(size.width / aspectRatio) : undefined),\n\t\t\t};\n\t\t} else if (typeof size === 'number') {\n\t\t\tprocessedSizes[sizeName] = { width: size, height: aspectRatio ? Math.floor(size / aspectRatio) : undefined };\n\t\t}\n\t}\n\treturn processedSizes;\n}\n\nconst Image = ({\n\tsrc: srcProp,\n\talt,\n\twidth,\n\theight,\n\tsizes: inputSizes,\n\tbelowTheFold = false,\n\tfetchPriority,\n\tclassName,\n\tstyle,\n\ttargetAspectRatio,\n}: ImageProps) => {\n\tconst numericAspectRatio = targetAspectRatio ? targetAspectRatio[0] / targetAspectRatio[1] : undefined;\n\n\tconst src = useMemo(() => tryAddAmberLimit(tryUpgradeAmberUrlToCdn(srcProp)), [srcProp]);\n\tconst processedSizes = processSizes(inputSizes, numericAspectRatio);\n\tconst isAmberOptimizedUrl = detectIsAmberOptimizedUrl(src);\n\n\tconst srcSetAttribute = useMemo(() => {\n\t\tif (!isAmberOptimizedUrl) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!processedSizes) {\n\t\t\tconst nominalWidths = getNominalWidths(undefined, width);\n\t\t\tconst srcSetWidths = computeSrcSetWidths(nominalWidths, []);\n\t\t\treturn createSrcSetAttribute(srcSetWidths, src, numericAspectRatio);\n\t\t}\n\n\t\tconst containsResponsiveWidth = Object.values(processedSizes).some(\n\t\t\tx => typeof x.width === 'string' && x.width.endsWith('vw')\n\t\t);\n\t\tconst nominalWidths = getNominalWidths(processedSizes, width);\n\t\tconst srcSetWidths = computeSrcSetWidths(nominalWidths, containsResponsiveWidth ? standardDeviceWidths : []);\n\t\treturn createSrcSetAttribute(srcSetWidths, src, numericAspectRatio);\n\t}, [isAmberOptimizedUrl, processedSizes, src, width, numericAspectRatio]);\n\n\tconst sizesAttribute = useMemo(() => {\n\t\tif (srcSetAttribute && processedSizes) {\n\t\t\treturn createSizesAttribute(processedSizes);\n\t\t}\n\t\treturn undefined;\n\t}, [srcSetAttribute, processedSizes]);\n\n\tconst widthAttribute = width ?? targetAspectRatio?.[0];\n\tconst heightAttribute = height ?? targetAspectRatio?.[1];\n\n\tconst imageProps: ImageElementProps = {\n\t\tsrc,\n\t\tsrcSet: srcSetAttribute,\n\t\tsizes: sizesAttribute,\n\t\twidth: widthAttribute,\n\t\theight: heightAttribute,\n\t\tloading: belowTheFold ? 'lazy' : undefined,\n\t\tfetchpriority: fetchPriority,\n\t\tclassName,\n\t\tstyle,\n\t};\n\n\treturn <img {...imageProps} alt={alt} />;\n};\n\nexport {\n\tImage,\n\tdetectIsAmberOptimizedUrl,\n\tisAmberHost,\n\ttoAmberCdnUrl,\n\ttryAddAmberLimit,\n\ttryUpgradeAmberUrlToCdn,\n\tamberCdnHost,\n};\nexport type { ImageProps, ImageSizes, SizeDescriptor };\n"],"names":["customCompareTrackId","track_kinds","track_selector","container","dropdown","desktopLabelPositionTop","desktopLabelPositionLeft","label","labelPunctuation","select","TrackSelector","className","selectedTrackId","trackOptions","desktopLabelPosition","onTrackChange","handleTrackChange","useCallback","event","trackId","target","value","sortedTrackOptions","useMemo","sortedOptions","sort","a","b","name","localeCompare","customCompareTrackIndex","findIndex","option","customCompareTrack","splice","push","React","classNames","styles","sharedStyles","h5","ui2","onChange","map","key","propTypes","PropTypes","isRequired","new_comparison_table_with_slider_track_selector","DisplayPriceValue","smallPriceClassName","largePriceClassName","price","decimalSymbol","integralValue","decimalValue","split","display_price_value","price_anchor","product_price_anchor","PriceAnchor","priceAnchor","resources","useLocalization","anchorPriceKinds","anchorPriceKind","apk","trim","cn","includes","CollectionValue","CommandSentence","collectionValue","Container","template","Field","PerDayAbbreviated","PerMonthAbbreviated","PerYearAbbreviated","DynamicCollectionValue","dynamicCollectionValue","DigitalListPriceLabel","digitalListPrice","PrintListPriceLabel","printPrice","RegularPriceLabel","regularPrice","DynamicPriceLabel","dynamicPrice","savingsDescription","isDiscounted","compare_page_recommendation_badge","RecommendationBadge","RecommendedForYou","track_product_card","TrackProductCard","variant","title","blurb","isForeignCurrency","skuIds","priceAnchorViewModel","productId","addToMiniCartButton","isOwnedByUser","ownershipNotice","resourceCounts","isRecommended","onItemAddedToCart","imageUrl","savingsPercentage","productDetailsUrl","showTrackProductDetails","shouldShowResourceCount","shouldShowNewToYou","unownedResourceCount","totalAvailableResourceCount","doesUserOwnAllResources","resourcesTemplate","resourceCountTemplate","BookCountAllOwned","BooksNewToYou","BooksNewToYouBookCount","BookCount","mobileResourceCountTemplate","BookCountNewToYou","desktopResourcesTemplate","desktopResourceCountTemplate","resourceCountToUse","columnWidth","useContext","ScrollableTableWithSliderContext","PercentOff","href","Image","src","alt","shared","usdDecimalSymbol","ForeignPriceTooltip","valueLocalized","AddToMiniCartButton","buttonClassName","payInFull","displayAddedToCart","sizes","tablet","desktop","paymentPlanInfo","recurringPrice","numberOfPayments","PaymentPlanInfoTemplate","new_comparison_table_with_slider_track_product_card","ProductTab","track_product_slider_product_tab","TrackProductSlider","trackProducts","isSticky","isMobile","useScreensize","length","trackProductCards","tp","id","component","isOwned","SliderWrapper","itemsClassName","items","arrowOptions","buttonHeight","sliderArrowOptions","short","new_comparison_table_with_slider_track_product_slider","MobileTrackSelector","selectedTrack","hideBooksIOwn","onFilterChange","MobileComparisonHeaderLibraries","Hiding","Showing","onClick","Change","new_comparison_table_with_slider_mobile_track_selector","ComparisonModal","onClose","children","CloseSvgUrl","Close","SwipeableWrapper","new_comparison_table_with_slider_comparison_modal","MobileProductComparison","isComparisonModalOpen","onOpenComparisonModal","onCloseComparisonModal","CompareLibrariesButton","CompareLibraries","RightArrow","new_comparison_table_with_slider_mobile_product_comparison","customCompareTabToken","denominationalTabToken","getTrackTabToken","TabSection","Tab","isSelected","TrackTab","track","handleClick","CustomCompareTrackTab","onChangeComparison","ChangeComparison","CustomCompare","new_comparison_table_with_slider_tab_based_track_selector","TabBasedTrackSelector","userIsBasePackageOwner","primaryTrack","denominationalTracks","alternateTracks","selectedTab","some","isOpen","setIsOpen","useState","firstTrack","handleViewMoreClick","lastDenominationalLibrarySelectedRef","useRef","current","handleDenominationalTabSelected","Traditions","ViewMoreLibraries","DoubleRightArrow","new_comparison_table_with_slider","NewComparisonTableWithSlider","initialSelectedTrackId","initialSelectedTrackProducts","propsTrackOptions","productSectionTitle","updateSelectedProductIndex","trackKind","recommendedTrackProductId","comparisonTableControlsHandler","routes","suppressMobileProductComparison","isMobileComparisonModalOpen","setIsMobileComparisonModalOpen","hasDemoedOpenSectionRef","pricingSidebarResources","handleTrackFetched","sections","handleTrackSelected","trackName","productIds","updateUrlParamValues","tracks","selectedCompareSections","selectedCustomCompareTrackProducts","isCustomCompareModalOpen","setIsCustomCompareModalOpen","handleCustomCompare","errorMessage","isLoading","displayMobileFilter","selectedMobileFilterTrackId","handleMobileFilterTrackChange","handleFilterChange","handleCustomCompareTrackProductSelect","handleCustomCompareTrackProductDeselect","handleCustomCompareClearAll","handleCustomCompareAllCleared","setTracks","tracksByTrackId","trackOption","setSelectedTrackId","setSelectedMobileFilterTrackId","setSelectedTrack","selectedTrackProductIndex","setSelectedTrackProductIndex","setSelectedCompareSections","sectionsByTrackId","setSectionsByTrackId","setDisplayMobileFilter","setIsLoading","setErrorMessage","setSelectedCustomCompareTrackProducts","i","newTracks","prev","_removedSections","rest","useEffect","SomethingWentWrong","async","tracksWithoutTrackProducts","responseTracks","CompareClient","getTrackProducts","CompareTrackProductsBaseUrl","forEach","responseTrack","ex","fetchTrackProducts","selectedTrackProducts","selectedTrackCachedSections","selectedTrackName","selectedTrackRecommendedProductId","recommendedProductId","fetchingSectionsTrackId","setFetchingSectionsTrackId","product","response","getCompareSectionData","CompareTrackSectionsBaseUrl","Math","min","max","getSelectedTrackProductIndex","fetchTrack","trackProduct","isAlreadySelected","newSelectedCustomCompareTrackProducts","filter","notifyError","YouHaveSelectedMaxNumberOfItemsToCompare","filteredSelectedCustomCompareTrackProducts","useComparisonTracksWithCustomCompare","handleChangeComparison","handleCustomCompareModalClose","usePreventBodyScrolling","handleOpenMobileComparisonModal","handleCloseMobileComparisonModal","stickyHeaderAnchorElementRef","comparisonTableRef","isTableScrolling","categorizedTrackOptions","isAnyCategorizedTracks","trackGroup","unshift","isDenominationalTrackSelected","FullscreenOverlayLoadingSpinner","zIndex","MobileCustomCompare","initialExpandedTrackId","isVisible","onClearAll","onCompare","onTrackProductDeselect","onTrackProductSelect","showTrackHeader","TrackKinds","isTrackLoaded","getTrackHeader","isStickyHeader","ref","CustomCompareModal","ComparisonTableLegend","mode","ComparisonTableControls","_extends","PaymentPlansAvailableInCart","toLowerCase","comparisonTableWithSlider","StickyHeader","anchorElementRef","boundingElementRef","ComparisonSectionsTable","onTrackAffinityUpdate","DisabledLinkUrl","CompareTrackBaseUrl","compare_page_new_comparison_table_with_slider","compare_books_or_features","comparisonTableWithSliderProps","propsByScreenSize","numbersOfVisibleColumnsByScreenSize","columnWidthsByScreenSize","columnGapsByScreenSize","boundaryMarginWidthsByScreenSize","swipeRadiusXByScreenSize","sliderProps","arrowWidthsByScreenSize","ComparePage","compareResources","find","handleUpdateSelectedProductIndex","useComparisonTableControlsHandler","DisabledMessage","disabledLinkUrl","ScrollableTableWithSliderProvider","firstVisibleColumnIndex","totalNumberOfColumns","onFirstVisibleColumnChange","scrollControlType","scrollControlTypes","scrollbar","buttons","upperBannerViewModel","CompareBaseUrl","compare_page_compare_books_or_features","InterstitialModal","testId","header","primaryButtonLabel","onPrimaryButtonClick","secondaryButtonLabel","onSecondaryButtonClick","disclaimer","toast","Modal","allowBackgroundScrolling","ignoreClickOnBackdrop","width","maxWidth","Error","Content","BlueCheckmark","configuration_wizard_interstitial_modal","AddASubscriptionModal","productTitle","doesUserQualifyForSubscriptionFreeTrial","navigate","useLocation","SaveAndUnlockHeader","SeePlans","ConfigurationWizardSubscriptionsUrl","ProceedToCheckout","CartUrl","LibraryAddedToCart","DiscoverInsightsBeyondMessage","YourFirst30DaysAreFree","add_a_subscription_modal","ConfigurationWizardLibraries","compareViewModel","summaryTrough","logosOrVerbum","addASubscriptionModalViewModel","librariesResources","subscriptionsResources","plansResources","isRedirecting","setIsRedirecting","cart","useConfigurationWizardCartContext","handleSkipAddASubscriptionModal","hasEffectiveSubscription","handleCheckShouldShow","isAddASubscriptionModalOpen","handle","handleLibraryAddedToCart","useInterstitialModalHandler","onInterstitialNotShown","nextTimeToShowModalStorageKey","getShouldShowModalFromState","showModalQueryStringParameterName","showCoolDownMillisecondsQueryStringParameterName","showCoolDownMilliseconds","search","getShouldShowModal","storageKey","showModal","URLSearchParams","get","nextTimeToShowModal","parseInt","window","localStorage","getItem","isNaN","Date","now","setNextTimeToShowModalInLocalStorage","configuredShowCoolDownMilliseconds","coolDownMillisecondsQueryStringParameterValue","coolDownMilliseconds","setItem","toString","SummaryTrough","step","WizardHero","BuildYourLogosOrVerbumSubscription","subtitle","ChooseYourSoftwareThenAddALibrary","ProgressIndicatorV2","subscriptionsUrl","librariesUrl","ConfigurationWizardLibrariesUrl","librariesLabel","Library","subscriptionsLabel","AddASubscriptionOptional","libraryTitleAndNMoreTemplate","LibraryTitleAndNMoreTemplate","ConfigurationWizardLibrariesContextWrapper","props","initialConfigurationWizardCartViewModel","ConfigurationWizardCartContextProvider","initialValue","configuration_wizard_libraries","breakPointNames","breakPoints","mobileCutoffWidth","desktopMinWidth","largeDesktopMinWidth","extraLargeDesktopMinWidth","standardDeviceWidths","formatSizeValue","size","computeSrcSetWidths","nominalWidths","deviceWidths","widthSet","Set","nominalWidth","add","createSrcSetAttribute","srcSetWidths","aspectRatio","entries","url","URL","searchParams","set","String","round","join","undefined","getNominalWidths","processedSizes","widthProp","Object","values","s","w","amberCdnHost","amberUrls","amberCdnUpgradableHosts","isAmberHost","host","detectIsAmberOptimizedUrl","urlAsString","isAmberCdn","isOptimized","pathname","endsWith","toAmberCdnUrl","cdnUrl","protocol","port","srcProp","height","inputSizes","belowTheFold","fetchPriority","style","targetAspectRatio","numericAspectRatio","tryAddAmberLimit","tryUpgradeAmberUrlToCdn","sizeName","floor","processSizes","isAmberOptimizedUrl","srcSetAttribute","containsResponsiveWidth","x","sizesAttribute","sizeResults","currentResult","sizeEntry","breakPoint","createSizesAttribute","imageProps","srcSet","loading","fetchpriority"],"sourceRoot":""}