{"version":3,"file":"configuration-wizard-subscriptions.2db0caf23afe61cb13f0.js?ssi=0","mappings":"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","sources":["webpack://@logos/commerceweb-frontend/../node_modules/lodash.debounce/index.js","webpack://@logos/commerceweb-frontend/./Scripts/site/clients/products-client.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/billing-modes.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/context.tsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-modal-ui.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-modal-ui.less?98d4","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-product-card.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/library-upsell-product-card.less?6140","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/library-upsell-modal/index.less?59e1","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/plans-section/index.less?480f","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/plans-section/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/subscription-pricing-card-utils.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/subscription-product-card-sticky-header/index.less?2b1a","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/subscription-product-card-sticky-header/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/feature-component-details/index.less?c255","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/feature-component-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/index.less?6246","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/feature-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/feature-section-row-details/index.less?af84","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/index.less?8893","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/section-row/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/util/hooks/use-on-screen.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/featured-spoid-overlay.js","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/comparison-chart/index.less?358f","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/overlay-base/index.less?2581","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/overlay-base/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/mobile-comparison-chart/index.less?3b17","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/mobile-comparison-chart/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/compare-jump/index.less?9dbd","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/compare-jump/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/index.jsx","webpack://@logos/commerceweb-frontend/./Scripts/site/components/configuration-wizard/subscriptions/index.less?e84b"],"sourcesContent":["/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n *   console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n  return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n *  Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n *  The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n *  Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n *   'leading': true,\n *   'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n  var lastArgs,\n      lastThis,\n      maxWait,\n      result,\n      timerId,\n      lastCallTime,\n      lastInvokeTime = 0,\n      leading = false,\n      maxing = false,\n      trailing = true;\n\n  if (typeof func != 'function') {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  wait = toNumber(wait) || 0;\n  if (isObject(options)) {\n    leading = !!options.leading;\n    maxing = 'maxWait' in options;\n    maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n    trailing = 'trailing' in options ? !!options.trailing : trailing;\n  }\n\n  function invokeFunc(time) {\n    var args = lastArgs,\n        thisArg = lastThis;\n\n    lastArgs = lastThis = undefined;\n    lastInvokeTime = time;\n    result = func.apply(thisArg, args);\n    return result;\n  }\n\n  function leadingEdge(time) {\n    // Reset any `maxWait` timer.\n    lastInvokeTime = time;\n    // Start the timer for the trailing edge.\n    timerId = setTimeout(timerExpired, wait);\n    // Invoke the leading edge.\n    return leading ? invokeFunc(time) : result;\n  }\n\n  function remainingWait(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime,\n        result = wait - timeSinceLastCall;\n\n    return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n  }\n\n  function shouldInvoke(time) {\n    var timeSinceLastCall = time - lastCallTime,\n        timeSinceLastInvoke = time - lastInvokeTime;\n\n    // Either this is the first call, activity has stopped and we're at the\n    // trailing edge, the system time has gone backwards and we're treating\n    // it as the trailing edge, or we've hit the `maxWait` limit.\n    return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n      (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n  }\n\n  function timerExpired() {\n    var time = now();\n    if (shouldInvoke(time)) {\n      return trailingEdge(time);\n    }\n    // Restart the timer.\n    timerId = setTimeout(timerExpired, remainingWait(time));\n  }\n\n  function trailingEdge(time) {\n    timerId = undefined;\n\n    // Only invoke if we have `lastArgs` which means `func` has been\n    // debounced at least once.\n    if (trailing && lastArgs) {\n      return invokeFunc(time);\n    }\n    lastArgs = lastThis = undefined;\n    return result;\n  }\n\n  function cancel() {\n    if (timerId !== undefined) {\n      clearTimeout(timerId);\n    }\n    lastInvokeTime = 0;\n    lastArgs = lastCallTime = lastThis = timerId = undefined;\n  }\n\n  function flush() {\n    return timerId === undefined ? result : trailingEdge(now());\n  }\n\n  function debounced() {\n    var time = now(),\n        isInvoking = shouldInvoke(time);\n\n    lastArgs = arguments;\n    lastThis = this;\n    lastCallTime = time;\n\n    if (isInvoking) {\n      if (timerId === undefined) {\n        return leadingEdge(lastCallTime);\n      }\n      if (maxing) {\n        // Handle invocations in a tight loop.\n        timerId = setTimeout(timerExpired, wait);\n        return invokeFunc(lastCallTime);\n      }\n    }\n    if (timerId === undefined) {\n      timerId = setTimeout(timerExpired, wait);\n    }\n    return result;\n  }\n  debounced.cancel = cancel;\n  debounced.flush = flush;\n  return debounced;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n  if (typeof value == 'number') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return NAN;\n  }\n  if (isObject(value)) {\n    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n    value = isObject(other) ? (other + '') : other;\n  }\n  if (typeof value != 'string') {\n    return value === 0 ? value : +value;\n  }\n  value = value.replace(reTrim, '');\n  var isBinary = reIsBinary.test(value);\n  return (isBinary || reIsOctal.test(value))\n    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n    : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = debounce;\n","import { fetch } from '../util/fetch';\n\nexport default class ProductsClient {\n\tstatic async getContainingProductsAsync({ containingProductsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: containingProductsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getHasContainingProductsAsync({ hasContainingProductsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: hasContainingProductsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getContainingSubscriptionsAsync({ containingSubscriptionsUrl }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: containingSubscriptionsUrl,\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getProductsCustomersAlsoBoughtAsync({ customersAlsoBoughtUrl, skuIds }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: customersAlsoBoughtUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getTooltipAsync({ url }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: url,\n\t\t});\n\t\treturn await response.json();\n\t}\n\n\tstatic async getProductDownloadsAsync({ downloadsUrl, skuIds }) {\n\t\tconst response = await fetch.get({\n\t\t\turl: downloadsUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getFeaturedProducts(featuredProductIdsUrl) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: featuredProductIdsUrl,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn (await response.json()).featuredProducts;\n\t}\n\n\tstatic async getQuickCompare(quickCompareUrl) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: quickCompareUrl,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn await response.json();\n\t}\n\n\tstatic async getUnownedResourcesInfos(unownedResourcesInfosBaseUrl, productIds) {\n\t\tlet response;\n\n\t\ttry {\n\t\t\tresponse = await fetch.get({\n\t\t\t\turl: `${unownedResourcesInfosBaseUrl}?productIds=${productIds.join()}`,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tif (error.response.status === 404) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn (await response.json()).infos;\n\t}\n\n\tstatic async getShortBlurbsForProductIds(getShortBlurbsUrl, productIds) {\n\t\tconst response = await fetch.postWithBody({\n\t\t\turl: getShortBlurbsUrl,\n\t\t\tbody: {\n\t\t\t\tproductIds: productIds,\n\t\t\t},\n\t\t});\n\t\treturn await response.json();\n\t}\n\n\tstatic async getSubscriptionPromotionsForSkuIds(getSubscriptionPromotionsUrl, skuIds) {\n\t\tconst response = await fetch.get({\n\t\t\turl: getSubscriptionPromotionsUrl,\n\t\t\tparams: { skuIds },\n\t\t});\n\n\t\treturn await response.json();\n\t}\n}\n","const BillingMode = {\n\tMonthly: 'Monthly',\n\tAnnually: 'Annually',\n\tMultiAnnualTerm: 'MultiAnnualTerm',\n};\n\nconst allBillingModes = Object.values(BillingMode);\n\nexport { BillingMode, allBillingModes };\n","import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';\nimport { SubscriptionBillingPeriodOptions } from '@faithlife/commerce-components';\nimport { useConfigurationWizardCartContext } from '../shared/configuration-wizard-cart';\nimport { useLocation } from '../../location';\nimport { RouteContext } from '../../route-context';\nimport eventAggregator from '../../cart/utility/eventaggregator';\nimport {\n\tOptionBillingMode,\n\tSubscriptionProductData,\n\tuseSubscriptionProductData,\n} from '../per-user-data/per-user-data-context';\n\ninterface ConfigurationWizardContextType {\n\tisLibraryUpsellModalOpen: boolean;\n\tsetIsLibraryUpsellModalOpen: (isOpen: boolean) => void;\n\tisLoading: boolean;\n\tsetIsLoading: (isLoading: boolean) => void;\n\tselectedSubscribableProduct: SubscriptionProductData | null;\n\thandleShowLibraryUpsellModal: (optionId: string) => void;\n\tselectedBillingMode: SubscriptionBillingPeriodOptions | null;\n\tsetSelectedBillingMode: (mode: SubscriptionBillingPeriodOptions) => void;\n\tselectedSpoid?: string | null;\n\tsetSelectedSpoid?: (selectedSpoid: string) => void;\n\tspoids: string[];\n\tcouponCodes: string[];\n}\n\nconst ConfigurationWizardContext = createContext<ConfigurationWizardContextType | null>(null);\n\nexport interface ConfigurationWizardContextProps {\n\tinitialValue: {\n\t\tisLibraryUpsellAvailable: boolean;\n\t\tspoids: string[];\n\t\tcouponCodes: string[];\n\t\tdefaultBillingMode?: SubscriptionBillingPeriodOptions | null;\n\t};\n\tchildren: React.ReactNode;\n}\n\nexport function ConfigurationWizardContextProvider({ initialValue, children }: ConfigurationWizardContextProps) {\n\tconst { value: cart } = useConfigurationWizardCartContext() as {\n\t\tvalue: { hasLibraryInCart?: boolean; subscriptionsInCart?: { spoId: string; quantity: number }[] } | null;\n\t};\n\tconst { navigate } = useLocation();\n\tconst { routes } = useContext(RouteContext);\n\n\tconst isLibraryUpsellAvailable = initialValue.isLibraryUpsellAvailable;\n\n\tconst [isLibraryUpsellModalOpen, setIsModalOpen] = useState(false);\n\tconst [upsellSelection, setUpsellSelection] = useState<{ spoid: string; isMultiAnnual: boolean } | null>(null);\n\tconst setIsLibraryUpsellModalOpen = useCallback((isOpen: boolean) => {\n\t\tsetIsModalOpen(isOpen);\n\t\tif (!isOpen) {\n\t\t\tsetUpsellSelection(null);\n\t\t}\n\t}, []);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tconst subscriptionInCart = cart?.subscriptionsInCart?.[0];\n\tconst [selectedSpoid, setSelectedSpoid] = useState<string | null>(subscriptionInCart?.spoId ?? null);\n\n\tconst [selectedSubscribableProduct, setSelectedSubscribableProduct] = useState<SubscriptionProductData | null>(null);\n\tconst [selectedBillingMode, setSelectedBillingMode] = useState<SubscriptionBillingPeriodOptions | null>(\n\t\tinitialValue.defaultBillingMode ?? null\n\t);\n\n\tconst { data: cartSubscription, error: cartSubscriptionError } = useSubscriptionProductData(\n\t\tsubscriptionInCart?.spoId,\n\t\tinitialValue.couponCodes,\n\t\tsubscriptionInCart?.quantity === 2\n\t);\n\tconst { data: upsellSubscription, error: upsellSubscriptionError } = useSubscriptionProductData(\n\t\tupsellSelection?.spoid,\n\t\tinitialValue.couponCodes,\n\t\tupsellSelection?.isMultiAnnual\n\t);\n\n\tuseEffect(() => {\n\t\tif (!subscriptionInCart) {\n\t\t\tsetSelectedSubscribableProduct(null);\n\t\t\tsetSelectedBillingMode(null);\n\t\t\treturn;\n\t\t}\n\t\tif (cartSubscription) {\n\t\t\tsetSelectedSubscribableProduct(cartSubscription);\n\t\t\tsetSelectedBillingMode(\n\t\t\t\tcartSubscription.isMultiAnnualSubscription\n\t\t\t\t\t? SubscriptionBillingPeriodOptions.MultiAnnual\n\t\t\t\t\t: cartSubscription.optionBillingMode === OptionBillingMode.Annual\n\t\t\t\t\t\t? SubscriptionBillingPeriodOptions.Annual\n\t\t\t\t\t\t: SubscriptionBillingPeriodOptions.Monthly\n\t\t\t);\n\t\t}\n\t}, [cartSubscription, subscriptionInCart]);\n\n\tuseEffect(() => {\n\t\tif (upsellSelection && upsellSubscription) {\n\t\t\tsetSelectedSubscribableProduct(upsellSubscription);\n\t\t\tsetIsLibraryUpsellModalOpen(true);\n\t\t}\n\t}, [upsellSelection, upsellSubscription, setIsLibraryUpsellModalOpen]);\n\n\tconst handleShowLibraryUpsellModal = useCallback(\n\t\t(optionId: string) => {\n\t\t\tconst hasLibraryInCart = cart?.hasLibraryInCart ?? false;\n\n\t\t\tif (hasLibraryInCart) {\n\t\t\t\tsetIsLoading(true);\n\t\t\t\tnavigate(routes.CartUrl);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (isLibraryUpsellAvailable) {\n\t\t\t\tsetUpsellSelection({\n\t\t\t\t\tspoid: optionId,\n\t\t\t\t\tisMultiAnnual: selectedBillingMode === SubscriptionBillingPeriodOptions.MultiAnnual,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetIsLoading(true);\n\t\t\tnavigate(routes.ConfigurationWizardLibrariesUrl);\n\t\t},\n\t\t[\n\t\t\tcart?.hasLibraryInCart,\n\t\t\tisLibraryUpsellAvailable,\n\t\t\tnavigate,\n\t\t\troutes.CartUrl,\n\t\t\troutes.ConfigurationWizardLibrariesUrl,\n\t\t\tselectedBillingMode,\n\t\t]\n\t);\n\n\tfunction getSelectedSpoidFromUpdatedCart(\n\t\tupdatedCart: {\n\t\t\torder?: {\n\t\t\t\tsubscribableLineItems?: {\n\t\t\t\t\tisLogosSubscription?: boolean;\n\t\t\t\t\tsubscribableProductOptionId?: string | null;\n\t\t\t\t}[];\n\t\t\t};\n\t\t},\n\t\tselectedSpoid?: string | null\n\t) {\n\t\treturn (\n\t\t\tupdatedCart?.order?.subscribableLineItems?.find(\n\t\t\t\titem =>\n\t\t\t\t\titem?.isLogosSubscription &&\n\t\t\t\t\titem?.subscribableProductOptionId &&\n\t\t\t\t\titem?.subscribableProductOptionId !== selectedSpoid\n\t\t\t)?.subscribableProductOptionId ?? null\n\t\t);\n\t}\n\n\tuseEffect(() => {\n\t\tfunction handleCartUpdated(_event: { type: string }, updatedCart: { order?: { subscribableLineItems?: [] } }) {\n\t\t\tsetSelectedSpoid(currentSelectedSpoid => getSelectedSpoidFromUpdatedCart(updatedCart, currentSelectedSpoid));\n\t\t}\n\n\t\teventAggregator.on('cart:updated', handleCartUpdated);\n\n\t\treturn () => {\n\t\t\teventAggregator.off('cart:updated', handleCartUpdated);\n\t\t};\n\t}, []);\n\n\tconst subscriptionError = cartSubscriptionError ?? upsellSubscriptionError;\n\tif (subscriptionError) {\n\t\tthrow subscriptionError;\n\t}\n\n\treturn (\n\t\t<ConfigurationWizardContext.Provider\n\t\t\tvalue={{\n\t\t\t\tisLibraryUpsellModalOpen,\n\t\t\t\tsetIsLibraryUpsellModalOpen,\n\t\t\t\tisLoading,\n\t\t\t\tsetIsLoading,\n\t\t\t\tselectedSubscribableProduct,\n\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\tselectedBillingMode,\n\t\t\t\tsetSelectedBillingMode,\n\t\t\t\tselectedSpoid,\n\t\t\t\tsetSelectedSpoid,\n\t\t\t\tspoids: initialValue.spoids,\n\t\t\t\tcouponCodes: initialValue.couponCodes,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</ConfigurationWizardContext.Provider>\n\t);\n}\n\nexport const useConfigurationWizardContext = () => useContext(ConfigurationWizardContext);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport { Button } from '@faithlife/commerce-components';\nimport { Modal } from '../../../../vendor/styled-ui';\nimport { X, Checkmark, SubscriptionStar } from '../svgs';\n\nimport { useLocalization } from '../../../localization';\nimport styles from './library-upsell-modal-ui.less';\n\nexport function LibraryUpsellModalUi({\n\tselectedProduct,\n\tlibraryProductCards,\n\topen,\n\tonDismiss,\n\tonShopLibrariesClick,\n\tonProceedWithoutLibraryClick,\n}) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\treturn (\n\t\t<Modal\n\t\t\tisOpen={open}\n\t\t\tonClose={onDismiss}\n\t\t\tcontainer=\"body\"\n\t\t\twidth={['calc(100vw - 24px)', 'calc(100vw - 156px)']}\n\t\t\tmaxWidth=\"1164px\"\n\t\t\t/* This z-index beats out the detail modals on mobile, so it always gets displayed over them */\n\t\t\tzIndex={10000}\n\t\t\tclassName={styles.modal}\n\t\t>\n\t\t\t<div\n\t\t\t\tdata-testid=\"library-upsell-modal\"\n\t\t\t\tclassName={styles.modalContent}\n\t\t\t\tstyle={{ maxHeight: 'calc(100vh - 32px)' }}\n\t\t\t>\n\t\t\t\t<div className={styles.header}>\n\t\t\t\t\t<div className={styles.headerMessage}>\n\t\t\t\t\t\t<Checkmark />\n\t\t\t\t\t\t<div className={styles.headerText}>\n\t\t\t\t\t\t\t<CommandSentence template={resources.YouveSelectedSubscribableProduct}>\n\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRODUCT_NAME\">{selectedProduct.name}</CommandSentence.Field>\n\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button onClick={onDismiss} className={styles.closeButton}>\n\t\t\t\t\t\t<X />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.content}>\n\t\t\t\t\t<div className={styles.description}>{resources.WantMoreInsights}</div>\n\t\t\t\t\t<div className={styles.productCardsLayout}>\n\t\t\t\t\t\t{libraryProductCards.map((card, index) => (\n\t\t\t\t\t\t\t<div key={index} className={styles.productCardWrapper}>\n\t\t\t\t\t\t\t\t{card}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.footer}>\n\t\t\t\t\t<div className={styles.selectionInfo}>\n\t\t\t\t\t\t<div className={styles.selectionTitle}>{resources.YourSelection}</div>\n\t\t\t\t\t\t<div className={styles.selectionDetails}>\n\t\t\t\t\t\t\t<div className={styles.productInfo}>\n\t\t\t\t\t\t\t\t<SubscriptionStar />\n\t\t\t\t\t\t\t\t<div className={styles.productTier}>{selectedProduct.tier}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{selectedProduct.pricing !== null && (\n\t\t\t\t\t\t\t\t<div className={styles.pricingInfo}>\n\t\t\t\t\t\t\t\t\t{(() => {\n\t\t\t\t\t\t\t\t\t\tswitch (selectedProduct.pricing.termPeriod) {\n\t\t\t\t\t\t\t\t\t\t\tcase 'month':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerMonth}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcase 'year':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerYear}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\tcase 'twoYears':\n\t\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence template={resources.PricePerTwoYears}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"PRICE\">{selectedProduct.pricing.amount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t})()}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.buttons}>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName={styles.secondaryButton}\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tscale=\"medium\"\n\t\t\t\t\t\t\tonClick={onShopLibrariesClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{resources.ShopAllLibraries}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tclassName={styles.primaryButton}\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tscale=\"medium\"\n\t\t\t\t\t\t\tonClick={onProceedWithoutLibraryClick}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{resources.ProceedWithoutLibrary}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Modal>\n\t);\n}\n\nLibraryUpsellModalUi.propTypes = {\n\tlibraryProductCards: PropTypes.arrayOf(PropTypes.node).isRequired,\n\tselectedProduct: PropTypes.shape({\n\t\tname: PropTypes.string.isRequired,\n\t\ttier: PropTypes.string.isRequired,\n\t\tpricing: PropTypes.shape({\n\t\t\tamount: PropTypes.string.isRequired,\n\t\t\ttermPeriod: PropTypes.oneOf(['month', 'year', 'twoYears']).isRequired,\n\t\t}),\n\t}).isRequired,\n\topen: PropTypes.bool.isRequired,\n\tonDismiss: PropTypes.func,\n\tonShopLibrariesClick: PropTypes.func,\n\tonProceedWithoutLibraryClick: PropTypes.func,\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"modal\":\"library-upsell-modal-ui--modal--NO9uo\",\"modalContent\":\"library-upsell-modal-ui--modalContent--tfQTR\",\"header\":\"library-upsell-modal-ui--header--JjKED\",\"headerMessage\":\"library-upsell-modal-ui--headerMessage--Ij4yI\",\"headerText\":\"library-upsell-modal-ui--headerText--mgu2r\",\"closeButton\":\"library-upsell-modal-ui--closeButton--bDQog\",\"content\":\"library-upsell-modal-ui--content--fGfk9\",\"description\":\"library-upsell-modal-ui--description--21ntT\",\"productCardsLayout\":\"library-upsell-modal-ui--productCardsLayout--VyKZ-\",\"productCardWrapper\":\"library-upsell-modal-ui--productCardWrapper--ET0QI\",\"footer\":\"library-upsell-modal-ui--footer--jZT9H\",\"selectionInfo\":\"library-upsell-modal-ui--selectionInfo--MQ+X1\",\"selectionTitle\":\"library-upsell-modal-ui--selectionTitle--ENsMU\",\"selectionDetails\":\"library-upsell-modal-ui--selectionDetails--AuzxQ\",\"productInfo\":\"library-upsell-modal-ui--productInfo--c7UD4\",\"subscriptionIcon\":\"library-upsell-modal-ui--subscriptionIcon--ylowj\",\"productTier\":\"library-upsell-modal-ui--productTier--8Cscm\",\"pricingInfo\":\"library-upsell-modal-ui--pricingInfo--I-hjM\",\"buttons\":\"library-upsell-modal-ui--buttons--aCeSs\",\"primaryButton\":\"library-upsell-modal-ui--primaryButton--GgPoX btn btn-primary\",\"secondaryButton\":\"library-upsell-modal-ui--secondaryButton---QfgW btn btn-secondary-inverted\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { CommandSentence } from '@faithlife/command-sentence-control';\n\nimport { AddToCartButton, IdentifierTypes } from '@faithlife/commerce-components';\nimport { LibraryUpsellCartProvider } from '../../../commerce-contexts/cart';\nimport { AddToCartButtonResourcesProvider } from '../../../commerce-contexts/resources';\nimport { useLocalization } from '../../../localization';\nimport styles from './library-upsell-product-card.less';\n\nexport function LibraryUpsellProductCard({\n\tproductId,\n\tskuId,\n\timageUri,\n\tname,\n\tbookCount,\n\tlibraryValue,\n\tprice,\n\tsavingsPercentage,\n\tonLibraryAddedToCart,\n}) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\n\treturn (\n\t\t<div className={styles.productCard}>\n\t\t\t{savingsPercentage !== undefined && savingsPercentage > 1 && (\n\t\t\t\t<div className={styles.savingsBadge}>\n\t\t\t\t\t<SavingsPercentage savingsPercentage={savingsPercentage} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className={styles.imageContainer}>\n\t\t\t\t<img alt={name} src={imageUri || ''} className={styles.productImage} />\n\t\t\t</div>\n\t\t\t<div className={styles.contentContainer}>\n\t\t\t\t<div className={styles.productDetails}>\n\t\t\t\t\t<div className={styles.yoursForever}>{resources.YoursForever}</div>\n\t\t\t\t\t<div className={styles.productInfo}>\n\t\t\t\t\t\t<div className={styles.productName}>{name}</div>\n\t\t\t\t\t\t{bookCount && (\n\t\t\t\t\t\t\t<div className={styles.bookCount}>\n\t\t\t\t\t\t\t\t<CommandSentence template={resources.IncludesBooks}>\n\t\t\t\t\t\t\t\t\t<CommandSentence.Field name=\"BOOK_COUNT\">{bookCount}</CommandSentence.Field>\n\t\t\t\t\t\t\t\t</CommandSentence>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div className={styles.actionContainer}>\n\t\t\t\t\t<div className={styles.priceContainer}>\n\t\t\t\t\t\t{libraryValue && (\n\t\t\t\t\t\t\t<div className={styles.libraryValue}>\n\t\t\t\t\t\t\t\t{resources.Value}\n\t\t\t\t\t\t\t\t{':'} {libraryValue}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className={styles.price}>{price}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className={styles.buttonsContainer}>\n\t\t\t\t\t\t<AddToCartButtonResourcesProvider>\n\t\t\t\t\t\t\t<LibraryUpsellCartProvider onLibraryAddedToCart={onLibraryAddedToCart}>\n\t\t\t\t\t\t\t\t<AddToCartButton\n\t\t\t\t\t\t\t\t\titems={[skuId]\n\t\t\t\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t\t\t\t.map(id => ({ identifier: id, type: IdentifierTypes.SKU, quantity: 1 }))}\n\t\t\t\t\t\t\t\t\tscale=\"small\"\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</LibraryUpsellCartProvider>\n\t\t\t\t\t\t</AddToCartButtonResourcesProvider>\n\t\t\t\t\t\t<a className={styles.seeInsideLink} href={`/products/${productId}`}>\n\t\t\t\t\t\t\t{resources.SeeWhatsInside}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nLibraryUpsellProductCard.propTypes = {\n\tproductId: PropTypes.string.isRequired,\n\tskuId: PropTypes.string,\n\timageUri: PropTypes.string.isRequired,\n\tname: PropTypes.string.isRequired,\n\tbookCount: PropTypes.number,\n\tlibraryValue: PropTypes.string,\n\tprice: PropTypes.string,\n\tsavingsPercentage: PropTypes.number,\n\tonLibraryAddedToCart: PropTypes.func,\n};\n\nfunction SavingsPercentage({ savingsPercentage }) {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.LibraryUpsellModal');\n\treturn (\n\t\t<div className={styles.savingsPercentageBadge}>\n\t\t\t<CommandSentence template={resources.SavePercentage}>\n\t\t\t\t<CommandSentence.Field name=\"PERCENTAGE\">{Math.round(savingsPercentage)}</CommandSentence.Field>\n\t\t\t</CommandSentence>\n\t\t</div>\n\t);\n}\n\nSavingsPercentage.propTypes = {\n\tsavingsPercentage: PropTypes.number.isRequired,\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"productCard\":\"library-upsell-product-card--productCard--uXu5f\",\"savingsBadge\":\"library-upsell-product-card--savingsBadge--Z-x2G\",\"savingsPercentageBadge\":\"library-upsell-product-card--savingsPercentageBadge--Gyiog\",\"imageContainer\":\"library-upsell-product-card--imageContainer--aJhqn\",\"productImage\":\"library-upsell-product-card--productImage--tl3R8\",\"contentContainer\":\"library-upsell-product-card--contentContainer--r0H4o\",\"productDetails\":\"library-upsell-product-card--productDetails--wcyrd\",\"yoursForever\":\"library-upsell-product-card--yoursForever--KbLUP\",\"productInfo\":\"library-upsell-product-card--productInfo--RcLTI\",\"productName\":\"library-upsell-product-card--productName--6k6MR\",\"bookCount\":\"library-upsell-product-card--bookCount--WpyX6\",\"actionContainer\":\"library-upsell-product-card--actionContainer--IgI6b\",\"priceContainer\":\"library-upsell-product-card--priceContainer--30Lc9\",\"libraryValue\":\"library-upsell-product-card--libraryValue--q2hKw\",\"strikethrough\":\"library-upsell-product-card--strikethrough--muHA3\",\"price\":\"library-upsell-product-card--price--KxmNi\",\"buttonsContainer\":\"library-upsell-product-card--buttonsContainer--nLX8K\",\"addToCartButton\":\"library-upsell-product-card--addToCartButton--686Mb btn btn-secondary-inverted\",\"seeInsideLink\":\"library-upsell-product-card--seeInsideLink--5jStW\"};","import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';\n\nimport ErrorBoundary from '../../error-boundary';\nimport { useLocation } from '../../../location';\nimport { BillingMode } from '../billing-modes';\n\nimport { useConfigurationWizardContext } from '../context';\nimport { RouteContext } from '../../../route-context';\nimport { LibraryUpsellModalUi } from './library-upsell-modal-ui';\nimport { LibraryUpsellProductCard } from './library-upsell-product-card';\nimport styles from './index.less';\n\nfunction withCancellation(asyncFunction) {\n\tconst cancellationTokenSource = { isCancelled: false };\n\tconst cancellationToken = {\n\t\tget isCancelled() {\n\t\t\treturn cancellationTokenSource.isCancelled;\n\t\t},\n\t};\n\n\tasyncFunction(cancellationToken);\n\n\treturn () => {\n\t\tcancellationTokenSource.isCancelled = true;\n\t};\n}\n\nfunction mapBillingModeToTermPeriod(billingMode) {\n\tswitch (billingMode) {\n\t\tcase BillingMode.Monthly:\n\t\t\treturn 'month';\n\n\t\tcase BillingMode.Annually:\n\t\t\treturn 'year';\n\n\t\tcase BillingMode.MultiAnnualTerm:\n\t\t\treturn 'twoYears';\n\t}\n}\n\nconst cachedLibraryUpsellTrackProductsByTrackProductId = new Map();\nasync function getOrFetchLibraryUpsellTrackProducts(suggestedLibraryTrackProductId, routes, baseUrl) {\n\tif (cachedLibraryUpsellTrackProductsByTrackProductId.has(suggestedLibraryTrackProductId)) {\n\t\treturn cachedLibraryUpsellTrackProductsByTrackProductId.get(suggestedLibraryTrackProductId);\n\t}\n\n\tconst url = new URL(routes.GetLibraryUpsellTrackProductsUrl, baseUrl);\n\turl.searchParams.append('suggestedLibraryTrackProductId', suggestedLibraryTrackProductId);\n\n\tlet products = null;\n\ttry {\n\t\tconst response = await fetch(url);\n\t\tif (!response.ok) {\n\t\t\tproducts = [];\n\t\t} else {\n\t\t\tconst data = await response.json();\n\t\t\tproducts = data.products ?? [];\n\t\t}\n\t} catch (error) {\n\t\tproducts = [];\n\t}\n\n\tcachedLibraryUpsellTrackProductsByTrackProductId.set(suggestedLibraryTrackProductId, products);\n\treturn products;\n}\n\nfunction LibraryUpsellModal() {\n\tconst { origin, navigate } = useLocation();\n\tconst {\n\t\tisLibraryUpsellModalOpen,\n\t\tsetIsLibraryUpsellModalOpen,\n\t\tsetIsLoading,\n\t\tselectedSubscribableProduct,\n\t\tselectedBillingMode,\n\t} = useConfigurationWizardContext();\n\tconst suggestedLibraryTrackProductId = selectedSubscribableProduct?.recommendedTrackProductId ?? null;\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst [libraryUpsellTrackProductData, setLibraryUpsellTrackProductData] = useState(null);\n\n\tuseEffect(() => {\n\t\tasync function fetchUpsellData(cancellationToken) {\n\t\t\tsetLibraryUpsellTrackProductData(null);\n\t\t\tif (suggestedLibraryTrackProductId) {\n\t\t\t\tconst products = await getOrFetchLibraryUpsellTrackProducts(suggestedLibraryTrackProductId, routes, origin);\n\n\t\t\t\tif (!cancellationToken.isCancelled) {\n\t\t\t\t\tsetLibraryUpsellTrackProductData(products);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn withCancellation(fetchUpsellData);\n\t}, [origin, routes, suggestedLibraryTrackProductId]);\n\n\tconst handleLibraryUpsellModalProceedToCartClick = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleLibraryUpsellModalViewLibrariesClick = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.ConfigurationWizardLibrariesUrl);\n\t}, [navigate, routes.ConfigurationWizardLibrariesUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleLibraryUpsellModalLibraryAddedToCart = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst handleDismissLibraryUpsellModal = useCallback(() => {\n\t\tsetIsLoading(true);\n\t\tsetIsLibraryUpsellModalOpen(false);\n\t\tnavigate(routes.CartUrl);\n\t}, [navigate, routes.CartUrl, setIsLoading, setIsLibraryUpsellModalOpen]);\n\n\tconst selectedProduct = selectedSubscribableProduct\n\t\t? {\n\t\t\t\tname: selectedSubscribableProduct.title,\n\t\t\t\ttier: selectedSubscribableProduct.title,\n\t\t\t\tpricing: selectedSubscribableProduct.initialCharge\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tamount: selectedSubscribableProduct.initialCharge,\n\t\t\t\t\t\t\ttermPeriod: mapBillingModeToTermPeriod(selectedBillingMode),\n\t\t\t\t\t\t}\n\t\t\t\t\t: null,\n\t\t\t}\n\t\t: null;\n\n\tconst libraryProductCards = useMemo(() => {\n\t\tif (!libraryUpsellTrackProductData) {\n\t\t\treturn [<LoadingProductCard key=\"0\" />, <LoadingProductCard key=\"1\" />, <LoadingProductCard key=\"2\" />];\n\t\t}\n\n\t\treturn libraryUpsellTrackProductData.map(product => {\n\t\t\treturn (\n\t\t\t\t<div key={product.id}>\n\t\t\t\t\t<LibraryUpsellProductCard\n\t\t\t\t\t\tkey={product.productId}\n\t\t\t\t\t\tproductId={product.productId}\n\t\t\t\t\t\tskuId={product.skuId}\n\t\t\t\t\t\timageUri={product.imageUri}\n\t\t\t\t\t\tname={product.name}\n\t\t\t\t\t\tbookCount={product.bookCount}\n\t\t\t\t\t\tlibraryValue={product.libraryValue}\n\t\t\t\t\t\tprice={product.price}\n\t\t\t\t\t\tsavingsPercentage={product.savingsPercentage}\n\t\t\t\t\t\tonLibraryAddedToCart={handleLibraryUpsellModalLibraryAddedToCart}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t});\n\t}, [libraryUpsellTrackProductData, handleLibraryUpsellModalLibraryAddedToCart]);\n\n\tif (!selectedProduct) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<LibraryUpsellModalUi\n\t\t\tonDismiss={handleDismissLibraryUpsellModal}\n\t\t\tonProceedWithoutLibraryClick={handleLibraryUpsellModalProceedToCartClick}\n\t\t\tonShopLibrariesClick={handleLibraryUpsellModalViewLibrariesClick}\n\t\t\topen={isLibraryUpsellModalOpen}\n\t\t\tselectedProduct={selectedProduct}\n\t\t\tlibraryProductCards={libraryProductCards}\n\t\t/>\n\t);\n}\n\nfunction LoadingProductCard() {\n\treturn (\n\t\t<div className={styles.loadingSkeleton}>\n\t\t\t<div className={styles.skeletonBox} />\n\t\t</div>\n\t);\n}\n\nfunction LibraryUpsellModalWithErrorBoundary() {\n\treturn (\n\t\t<ErrorBoundary>\n\t\t\t<LibraryUpsellModal />\n\t\t</ErrorBoundary>\n\t);\n}\n\nexport { LibraryUpsellModalWithErrorBoundary as LibraryUpsellModal };\n","// extracted by mini-css-extract-plugin\nexport default {\"loadingSkeleton\":\"index--loadingSkeleton--5ZSoT\",\"pulse\":\"index--pulse--dzzcU\",\"skeletonBox\":\"index--skeletonBox--sheKH\"};","// extracted by mini-css-extract-plugin\nexport default {\"plansSectionControls\":\"index--plansSectionControls--LnVea\",\"plansSectionControlsMobile\":\"index--plansSectionControlsMobile--jE0xZ\",\"plansSection\":\"index--plansSection--0sNLu\",\"levels\":\"index--levels--Z46Xu\",\"compareSubscriptionsArrow\":\"index--compareSubscriptionsArrow--Pu+1O\",\"trackSelector\":\"index--trackSelector--HMeUN\"};","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport { RightArrow } from '../../svgs';\n\nimport { useLocalization } from '../../../../localization';\nimport sharedStyles from '../../shared.less';\nimport { useConfigurationWizardContext } from '../../context';\nimport RenderBuilderContent from '../../../builder/render-builder-content';\nimport styles from './index.less';\n\nconst PlansSection = ({ onDisplayMobileComparisonChart, subscriptionCardsContentViewModel }) => {\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\thandleShowLibraryUpsellModal,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\n\tconst handleCompareClick = () => {\n\t\tonDisplayMobileComparisonChart?.();\n\t};\n\n\treturn (\n\t\t<div className={styles.plansSectionContainer}>\n\t\t\t<div className={styles.plansSection} data-testid=\"plans-section\">\n\t\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.Full,\n\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RenderBuilderContent\n\t\t\t\t\t\t\t{...subscriptionCardsContentViewModel.builderIo}\n\t\t\t\t\t\t\trestrictOverflow={false}\n\t\t\t\t\t\t\tshouldSuppressMinicartDrawer={true}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t\t)}\n\t\t\t\t<CompareSubscriptionsArrow onClick={handleCompareClick} />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nPlansSection.propTypes = {\n\tonDisplayMobileComparisonChart: PropTypes.func.isRequired,\n\tsubscriptionCardsContentViewModel: PropTypes.object.isRequired,\n};\n\nconst CompareSubscriptionsArrow = ({ onClick }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\treturn (\n\t\t<button onClick={onClick} className={styles.compareSubscriptionsArrow}>\n\t\t\t<p className={sharedStyles.ui2}>{resources.CompareSubscriptions}</p>\n\t\t\t<RightArrow />\n\t\t</button>\n\t);\n};\n\nCompareSubscriptionsArrow.propTypes = {\n\tonClick: PropTypes.func.isRequired,\n};\n\nexport default PlansSection;\n","import React from 'react';\nimport { RenderBuilderContent } from '../../builder';\n\nexport function getSubscriptionPricingCards(subscriptionPricingCardsContent) {\n\treturn (subscriptionPricingCardsContent?.data?.blocks ?? []).find(\n\t\tb => b.component.name === 'v2: SubscriptionPricingCards'\n\t);\n}\nexport function getSubscriptionPricingCardsChildren(subscriptionPricingCardsContent) {\n\treturn getSubscriptionPricingCards(subscriptionPricingCardsContent)?.children ?? [];\n}\n\nfunction addClassToBuilderBlockProperties(builderBlock, className) {\n\tif (!builderBlock || !className) {\n\t\treturn builderBlock;\n\t}\n\n\tconst newBuilderBlock = { ...builderBlock };\n\tnewBuilderBlock.properties = {\n\t\t...newBuilderBlock.properties,\n\t\tclass: `${newBuilderBlock.properties?.class ?? ''} ${className}`,\n\t};\n\n\treturn newBuilderBlock;\n}\n\nexport function useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel) {\n\tconst subscriptionCardsContent = subscriptionCardsContentViewModel.builderIo.content;\n\tconst subscriptionCardsChildren = getSubscriptionPricingCardsChildren(subscriptionCardsContent);\n\n\tconst subscriptionCardsChildrenViewModels = subscriptionCardsChildren?.map(c => ({\n\t\tspoid: c.component.options.spoid,\n\t\t// Builder wraps content in .builder-component > .builder-content > [data-builder-content-id] > .builder-blocks; propagate height through each\n\t\tclassName:\n\t\t\t'[&>.builder-component]:h-full [&>.builder-component>.builder-content]:h-full [&>.builder-component>.builder-content>[data-builder-content-id]]:h-full [&>.builder-component>.builder-content>[data-builder-content-id]>.builder-blocks]:h-full',\n\t\tbuilderIo: {\n\t\t\t...subscriptionCardsContentViewModel.builderIo,\n\t\t\tcontent: {\n\t\t\t\t...subscriptionCardsContent,\n\t\t\t\tdata: {\n\t\t\t\t\t...subscriptionCardsContent?.data,\n\t\t\t\t\tblocks: [addClassToBuilderBlockProperties(c, 'h-full')],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}));\n\n\treturn subscriptionCardsChildrenViewModels?.map(vm => ({\n\t\tid: vm.spoid,\n\t\tcomponent: (\n\t\t\t<RenderBuilderContent\n\t\t\t\t{...vm.builderIo}\n\t\t\t\trestrictOverflow={false}\n\t\t\t\tclassName={vm.className}\n\t\t\t\tshouldSuppressMinicartDrawer={true}\n\t\t\t/>\n\t\t),\n\t}));\n}\n\nexport function useFeaturedSubscriptionPricingCards(subscriptionCardsContentViewModel) {\n\tconst subscriptionCardsContent = subscriptionCardsContentViewModel.builderIo.content;\n\tconst subscriptionPricingCards = getSubscriptionPricingCards(subscriptionCardsContent);\n\treturn subscriptionPricingCards?.children?.map(c => c.component.options.variant === 'featured') ?? [];\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"index--header--nAW2i\",\"content\":\"index--content--m1z6g\",\"cards\":\"index--cards--LBNDs\"};","import React from 'react';\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport StickyHeader from '../../../sticky-header';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport SliderWrapper from '../../../compare-page/scrollable-table-with-slider/slider-wrapper';\nimport sliderArrowOptions from '../../../compare-page/scrollable-table-with-slider/slider-arrow-options';\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../subscription-pricing-card-utils';\nimport styles from './index.less';\n\nconst SubscriptionProductCardStickyHeader = ({\n\theaderRef,\n\tanchorElementRef,\n\tboundingElementRef,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\thandleShowLibraryUpsellModal,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst subscriptionProductCardComponents = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<StickyHeader headerRef={headerRef} anchorElementRef={anchorElementRef} boundingElementRef={boundingElementRef}>\n\t\t\t<div className={styles.header} data-testid=\"sticky-header\">\n\t\t\t\t<div className={styles.content}>\n\t\t\t\t\t<div className={styles.cards}>\n\t\t\t\t\t\t<SwipeableWrapper>\n\t\t\t\t\t\t\t{subscriptionCardsContentViewModel &&\n\t\t\t\t\t\t\t\tsubscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.MicroAlt,\n\t\t\t\t\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<SliderWrapper\n\t\t\t\t\t\t\t\t\t\t\titems={subscriptionProductCardComponents}\n\t\t\t\t\t\t\t\t\t\t\tarrowOptions={{\n\t\t\t\t\t\t\t\t\t\t\t\tbuttonHeight: sliderArrowOptions.buttonHeight.short,\n\t\t\t\t\t\t\t\t\t\t\t\tdisplayTheme: sliderArrowOptions.displayTheme.dark,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</SwipeableWrapper>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</StickyHeader>\n\t);\n};\n\nexport default SubscriptionProductCardStickyHeader;\n","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--IQjUk h2\",\"h4\":\"index--h4--P+L-s h2\",\"h5\":\"index--h5--RjIfw h3\",\"ui1\":\"index--ui1--qC5WL\",\"ui2\":\"index--ui2--W+pRi\",\"ui3\":\"index--ui3--TAOPs\",\"ui5\":\"index--ui5--wa4sq\",\"b2\":\"index--b2--ieO86\",\"b3\":\"index--b3--X3hF6\",\"loadingSpinner\":\"index--loadingSpinner--Cx22m\",\"comparisonSubRow\":\"index--comparisonSubRow--8pY1u\",\"nameWithPreview\":\"index--nameWithPreview--4jGFI\",\"name\":\"index--name--A6-b7\",\"nameWithBlurb\":\"index--nameWithBlurb--SjnMA\",\"inclusionIconsContainer\":\"index--inclusionIconsContainer--QPBw6\",\"inclusionIconsWrapper\":\"index--inclusionIconsWrapper--mXWLY\",\"inclusionIcons\":\"index--inclusionIcons--aw6Xa\",\"inclusionIcon\":\"index--inclusionIcon---eoNf\",\"resourceTooltip\":\"index--resourceTooltip--VSns2\",\"shortBlurb\":\"index--shortBlurb--Pd6A2\",\"newToYou\":\"index--newToYou--6DEe4\"};","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RowWrapper from '../../../../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { FullyIncluded } from '../../../../../../svgs';\nimport Tooltip from '../../../../../../../shared/tooltip';\nimport { useLocalization } from '../../../../../../../../localization';\n\nimport styles from './index.less';\n\nconst FeatureComponentDetails = ({ name, orderedIncludedInProducts, shortBlurb, isOwned, isUserLoggedIn }) => (\n\t<div>\n\t\t<div className={styles.comparisonSubRow}>\n\t\t\t<NameWithPreview\n\t\t\t\tname={name}\n\t\t\t\tclassName={styles.nameWithPreview}\n\t\t\t\tshortBlurb={shortBlurb}\n\t\t\t\tisOwned={isOwned}\n\t\t\t\tisUserLoggedIn={isUserLoggedIn}\n\t\t\t/>\n\t\t\t<div className={styles.inclusionIcons}>\n\t\t\t\t<InclusionIcons orderedIncludedInProducts={orderedIncludedInProducts} />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n);\n\nFeatureComponentDetails.propTypes = {\n\tname: PropTypes.string,\n\torderedIncludedInProducts: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tproductId: PropTypes.string,\n\t\t\tisIncluded: PropTypes.bool,\n\t\t\tisPartiallyIncluded: PropTypes.bool,\n\t\t})\n\t),\n\tshortBlurb: PropTypes.string,\n\tisOwned: PropTypes.bool,\n};\n\nconst NameWithPreview = ({ name, className, shortBlurb, isOwned, isUserLoggedIn }) => {\n\tconst resources = useLocalization(\n\t\t'CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptionsFeatureComparison'\n\t);\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t{shortBlurb ? (\n\t\t\t\t<Tooltip\n\t\t\t\t\tlink={<div className={classNames(styles.name, shortBlurb && styles.nameWithBlurb)}>{name}</div>}\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\tcontentStyles={{ maxWidth: '320px', padding: '8px' }}\n\t\t\t\t\thideArrow={true}\n\t\t\t\t>\n\t\t\t\t\t<div className={styles.resourceTooltip}>\n\t\t\t\t\t\t<div className={styles.shortBlurb}>{shortBlurb}</div>\n\t\t\t\t\t</div>\n\t\t\t\t</Tooltip>\n\t\t\t) : (\n\t\t\t\t<div className={styles.name}>{name}</div>\n\t\t\t)}\n\t\t\t{!isOwned && isUserLoggedIn && <div className={styles.newToYou}>{resources.NewToYou}</div>}\n\t\t</div>\n\t);\n};\n\nconst InclusionIcons = ({ orderedIncludedInProducts }) => {\n\tconst inclusionIconComponents = orderedIncludedInProducts.map(iip => {\n\t\tconst isIncluded = iip.isIncluded || iip.isPartiallyIncluded;\n\n\t\treturn {\n\t\t\tid: iip.productId,\n\t\t\tcomponent: <div className={styles.inclusionIcon}>{isIncluded && <FullyIncluded />}</div>,\n\t\t};\n\t});\n\n\treturn (\n\t\t<div className={styles.inclusionIconsContainer}>\n\t\t\t<RowWrapper items={inclusionIconComponents} className={styles.inclusionIconsWrapper} />\n\t\t</div>\n\t);\n};\n\nexport default FeatureComponentDetails;\n","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--hmFJW h2\",\"h4\":\"index--h4--C0yFK h2\",\"h5\":\"index--h5--ZqF3M h3\",\"ui1\":\"index--ui1--grWLa\",\"ui2\":\"index--ui2--35xqp\",\"ui3\":\"index--ui3--slOi2\",\"ui5\":\"index--ui5--J4G9a\",\"b2\":\"index--b2--VSEBg\",\"b3\":\"index--b3--+Jrpk\",\"loadingSpinner\":\"index--loadingSpinner--c636d index--loadingSpinner--c636d\",\"comparisonRow\":\"index--comparisonRow--WccTm\",\"nameWithArrow\":\"index--nameWithArrow--mmQM4\",\"nameContainer\":\"index--nameContainer--jEC97\",\"name\":\"index--name--OhPH0\",\"arrow\":\"index--arrow--1-mCv\",\"closedArrow\":\"index--closedArrow--yXkhn\",\"shortBlurbRow\":\"index--shortBlurbRow--VFDhq\",\"shortBlurb\":\"index--shortBlurb--KzjMJ\",\"rowWrapperContainer\":\"index--rowWrapperContainer--iD+zs\",\"rowWrapperCellContainer\":\"index--rowWrapperCellContainer--R+jWr\",\"inclusionIcons\":\"index--inclusionIcons--puksO\",\"inclusionIconContainer\":\"index--inclusionIconContainer--MVEcf\",\"inclusionIcon\":\"index--inclusionIcon--wZyWh\",\"newToYou\":\"index--newToYou--eAdo5\",\"shortBlurbRowContainer\":\"index--shortBlurbRowContainer--HuWG7\"};","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { LoadingSpinner } from '../../../../../../../../vendor/styled-ui';\nimport RowWrapper from '../../../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { Chevron, EmptyCircle, FilledCircle } from '../../../../../svgs';\nimport ProductsClient from '../../../../../../../clients/products-client';\nimport FeatureComponentDetails from './feature-component-details';\n\nimport styles from './index.less';\n\nconst FeatureDetails = ({\n\tname,\n\tsubResources,\n\torderedIncludedInProducts,\n\tproductId,\n\troutes,\n\tinitialIsOpen,\n\tonSectionToggle,\n}) => {\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [isOpen, setIsOpen] = useState(initialIsOpen);\n\tconst [shortBlurb, setShortBlurb] = useState(null);\n\tconst [subResourceComponents, setSubResourceComponents] = useState(null);\n\n\tconst handleArrowClick = useCallback(async () => {\n\t\tonSectionToggle();\n\t\tsetIsOpen(isOpen => !isOpen);\n\t}, [onSectionToggle]);\n\n\tconst fetchingRef = useRef(false);\n\tconst fetchComponentInfo = useCallback(async () => {\n\t\tif (fetchingRef.current) {\n\t\t\treturn;\n\t\t}\n\t\tfetchingRef.current = true;\n\t\tsetIsLoading(true);\n\t\ttry {\n\t\t\tconst shortBlurbsByProductIds = await ProductsClient.getShortBlurbsForProductIds(\n\t\t\t\troutes.GetShortBlurbsUrl,\n\t\t\t\t[productId, ...subResources.map(sr => sr.productId)].filter(id => id)\n\t\t\t);\n\n\t\t\tif (Object.prototype.hasOwnProperty.call(shortBlurbsByProductIds, productId)) {\n\t\t\t\tsetShortBlurb(shortBlurbsByProductIds[productId]);\n\t\t\t}\n\n\t\t\tsetSubResourceComponents(\n\t\t\t\tsubResources.map(sr => {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(shortBlurbsByProductIds, sr.productId)) {\n\t\t\t\t\t\tsr.shortBlurb = shortBlurbsByProductIds[sr.productId];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn <FeatureComponentDetails key={sr.comparisonId} {...sr} />;\n\t\t\t\t})\n\t\t\t);\n\t\t} finally {\n\t\t\tfetchingRef.current = false;\n\t\t\tsetIsLoading(false);\n\t\t}\n\t}, [productId, routes.GetShortBlurbsUrl, subResources]);\n\n\tuseEffect(() => {\n\t\tif (isOpen && !subResourceComponents) {\n\t\t\tfetchComponentInfo();\n\t\t}\n\t}, [fetchComponentInfo, isOpen, subResourceComponents]);\n\n\tconst blankRowCells = orderedIncludedInProducts.map(iip => <div key={iip.productId} />);\n\n\treturn (\n\t\t<>\n\t\t\t<div className={styles.comparisonRow}>\n\t\t\t\t{isLoading && (\n\t\t\t\t\t<div className={styles.loadingSpinner}>\n\t\t\t\t\t\t<LoadingSpinner small />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<NameWithArrow name={name} isOpen={isOpen} onArrowClick={handleArrowClick} className={styles.nameWithArrow} />\n\t\t\t\t<div className={styles.inclusionIcons}>\n\t\t\t\t\t<InclusionIcons orderedIncludedInProducts={orderedIncludedInProducts} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{isOpen && (\n\t\t\t\t<>\n\t\t\t\t\t{shortBlurb && (\n\t\t\t\t\t\t<div className={styles.shortBlurbRow}>\n\t\t\t\t\t\t\t<div className={styles.shortBlurb}>{shortBlurb}</div>\n\t\t\t\t\t\t\t<div className={styles.rowWrapperContainer}>\n\t\t\t\t\t\t\t\t<RowWrapper items={blankRowCells} className={styles.rowWrapperCellContainer} />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{subResourceComponents}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nFeatureDetails.propTypes = {\n\tname: PropTypes.string,\n\tisOwned: PropTypes.bool,\n\tsubResources: PropTypes.arrayOf(PropTypes.object),\n\torderedIncludedInProducts: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\tproductId: PropTypes.string,\n\t\t\tisIncluded: PropTypes.bool,\n\t\t\tisPartiallyIncluded: PropTypes.bool,\n\t\t\tscaleAmount: PropTypes.number,\n\t\t})\n\t),\n\tshortBlurb: PropTypes.string,\n};\n\nconst NameWithArrow = ({ name, isOpen, onArrowClick, className }) => (\n\t<div className={className}>\n\t\t<button className={styles.nameContainer} onClick={onArrowClick}>\n\t\t\t<div className={styles.name}>{name}</div>\n\t\t\t<Chevron className={classNames(styles.arrow, !isOpen && styles.closedArrow)} />\n\t\t</button>\n\t</div>\n);\n\nconst InclusionIcons = ({ orderedIncludedInProducts }) => {\n\tconst inclusionIconComponents = orderedIncludedInProducts.map(iip => {\n\t\tconst limit = orderedIncludedInProducts.length;\n\t\treturn {\n\t\t\tid: iip.productId,\n\t\t\tcomponent: (\n\t\t\t\t<div className={styles.inclusionIconContainer}>\n\t\t\t\t\t<div className={styles.inclusionIcon}>\n\t\t\t\t\t\t{Array.from({ length: iip.scaleAmount }).map(index => {\n\t\t\t\t\t\t\treturn <FilledCircle key={index} />;\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{Array.from({ length: limit - iip.scaleAmount }).map(index => {\n\t\t\t\t\t\t\treturn <EmptyCircle key={index} />;\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t),\n\t\t};\n\t});\n\n\treturn (\n\t\t<div className={styles.rowWrapperContainer}>\n\t\t\t<RowWrapper items={inclusionIconComponents} className={styles.rowWrapperCellContainer} />\n\t\t</div>\n\t);\n};\n\nexport default FeatureDetails;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SwipeableWrapper from '../../../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport FeatureDetails from './feature-details';\n\nimport styles from './index.less';\n\nconst FeatureSectionRowDetails = ({ section, demoOpenSection, onSectionToggle }) => {\n\tconst comparisonRows = section.comparisonRows.map((row, index) => (\n\t\t<FeatureDetails\n\t\t\tkey={row.comparisonId}\n\t\t\t{...row}\n\t\t\tinitialIsOpen={demoOpenSection && index === 0}\n\t\t\tonSectionToggle={onSectionToggle}\n\t\t/>\n\t));\n\n\treturn (\n\t\t<>\n\t\t\t<div className={styles.comparisonTable}>\n\t\t\t\t<SwipeableWrapper>{comparisonRows}</SwipeableWrapper>\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\nFeatureSectionRowDetails.propTypes = {\n\tsection: PropTypes.object.isRequired,\n};\n\nexport default FeatureSectionRowDetails;\n","// extracted by mini-css-extract-plugin\nexport default {\"comparisonTable\":\"index--comparisonTable--oRLHR\",\"loadingIndicator\":\"index--loadingIndicator--IHSV2\"};","// extracted by mini-css-extract-plugin\nexport default {\"h2\":\"index--h2--KYmBU h2\",\"h4\":\"index--h4--po4-y h2\",\"h5\":\"index--h5--KWUH5 h3\",\"ui1\":\"index--ui1--S-R8q\",\"ui2\":\"index--ui2--kxUEy\",\"ui3\":\"index--ui3--F7y+u\",\"ui5\":\"index--ui5--wHOUy\",\"b2\":\"index--b2--Vi+PM\",\"b3\":\"index--b3--ctfht\",\"loadingSpinner\":\"index--loadingSpinner--TfJUb\",\"sectionRow\":\"index--sectionRow--YlVtE\",\"rowTitleContainer\":\"index--rowTitleContainer--Z3bSb\",\"titleContainer\":\"index--titleContainer--lqUTT\",\"iconContainer\":\"index--iconContainer--76r9H\",\"summaries\":\"index--summaries--f+sen\",\"summary\":\"index--summary--DM5vb\",\"legendContainer\":\"index--legendContainer--HLKdw\",\"includedBooksContainer\":\"index--includedBooksContainer--ioEC8\"};","import React, { useCallback, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport RowWrapper from '../../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { ExpandableClosedIcon, ExpandableOpenedIcon } from '../../../svgs';\n\nimport sharedStyles from '../../../shared.less';\nimport ComparisonSectionsTable from '../../../../compare-page/new-comparison-table-with-slider/comparison-sections-table';\nimport { useOnScreen } from '../../../../../util/hooks/use-on-screen';\nimport ComparisonTableLegend from '../../../../compare-page/comparison-table-legend';\nimport ComparisonTableControls from '../../../../compare-page/comparison-table-controls';\nimport useComparisonTableControlsHandler from '../../../../compare-page/hooks/comparison-table-controls-handler';\nimport FeatureSectionRowDetails from './feature-section-row-details';\nimport styles from './index.less';\n\nconst SectionRow = ({ title, token, summaries, compareViewModel, sections, demoOpenSection, onSectionToggle }) => {\n\tconst [section] = sections;\n\tconst [isSectionOpen, setIsSectionOpen] = useState(false);\n\n\tconst rowRef = useRef(null);\n\tuseOnScreen(rowRef, isRowOnScreen => {\n\t\tif (demoOpenSection && isRowOnScreen) {\n\t\t\tsetIsSectionOpen(true);\n\t\t}\n\t});\n\n\tconst handleTitleClick = useCallback(() => {\n\t\tonSectionToggle();\n\t\tsetIsSectionOpen(!isSectionOpen);\n\t}, [isSectionOpen, onSectionToggle]);\n\n\tconst comparisonTableControlsHandler = useComparisonTableControlsHandler();\n\n\tconst rowTitle = (\n\t\t<>\n\t\t\t{isSectionOpen ? <ExpandableOpenedIcon /> : <ExpandableClosedIcon />}\n\t\t\t<span>{title}</span>\n\t\t</>\n\t);\n\n\tconst rowTitleContainer = (\n\t\t<div className={styles.rowTitleContainer}>\n\t\t\t<button className={classNames(sharedStyles.h5, styles.titleContainer)} onClick={handleTitleClick}>\n\t\t\t\t{rowTitle}\n\t\t\t</button>\n\t\t\t{token === 'included-books' && isSectionOpen && compareViewModel && (\n\t\t\t\t<div className={styles.legendContainer}>\n\t\t\t\t\t<ComparisonTableLegend className={styles.legend} mode=\"responsive\" resources={compareViewModel.resources} />\n\t\t\t\t\t<ComparisonTableControls {...compareViewModel} {...comparisonTableControlsHandler} />\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\tconst summaryBlocks = summaries.map((s, index) => ({\n\t\tid: index,\n\t\tcomponent: <div className={styles.summary}>{s}</div>,\n\t}));\n\n\treturn (\n\t\t<div ref={rowRef}>\n\t\t\t<div className={styles.sectionRow}>\n\t\t\t\t{rowTitleContainer}\n\t\t\t\t<div className={styles.summaries}>\n\t\t\t\t\t<RowWrapper items={summaryBlocks}></RowWrapper>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{isSectionOpen && compareViewModel && compareViewModel.initialSelectedTrackId && (\n\t\t\t\t<>\n\t\t\t\t\t{token !== 'included-books' ? (\n\t\t\t\t\t\t<FeatureSectionRowDetails\n\t\t\t\t\t\t\tsection={section}\n\t\t\t\t\t\t\tdemoOpenSection={demoOpenSection}\n\t\t\t\t\t\t\tonSectionToggle={onSectionToggle}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className={styles.includedBooksContainer}>\n\t\t\t\t\t\t\t<ComparisonSectionsTable\n\t\t\t\t\t\t\t\tselectedCompareSections={sections}\n\t\t\t\t\t\t\t\tcomparisonTableControlsHandler={comparisonTableControlsHandler}\n\t\t\t\t\t\t\t\tresources={compareViewModel.resources}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nSectionRow.propTypes = {\n\tclassName: PropTypes.string,\n\ttitle: PropTypes.string.isRequired,\n\tsummaries: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default SectionRow;\n","import { useEffect } from 'react';\n\nexport function useOnScreen(ref, onChange) {\n\tuseEffect(() => {\n\t\tconst observer = new IntersectionObserver(([entry]) => {\n\t\t\tonChange(entry.isIntersecting);\n\t\t});\n\n\t\tobserver.observe(ref.current);\n\t\treturn () => observer.disconnect();\n\t}, [ref, onChange]);\n}\n","import React from 'react';\n\nimport { useFeaturedSubscriptionPricingCards } from '../subscription-pricing-card-utils';\nimport RowWrapper from '../../../compare-page/scrollable-table-with-slider/row-wrapper';\nimport { cn } from '../../../../util/cn';\n\nexport function FeaturedSpoidOverlay({ subscriptionCardsContentViewModel, children }) {\n\tconst isFeaturedSpoidList = useFeaturedSubscriptionPricingCards(subscriptionCardsContentViewModel);\n\treturn (\n\t\t<div className=\"relative isolate\">\n\t\t\t<div className=\"absolute inset-0 flex pointer-events-none z-10\">\n\t\t\t\t<div className=\"grow\"></div>\n\t\t\t\t<RowWrapper\n\t\t\t\t\tscrollableWrapperClassName=\"h-full\"\n\t\t\t\t\titemsClassName=\"h-full\"\n\t\t\t\t\tclassName=\"h-full\"\n\t\t\t\t\titems={isFeaturedSpoidList.map((isFeatured, index) => ({\n\t\t\t\t\t\tid: index,\n\t\t\t\t\t\tcomponent: <div className={cn({ 'border-x-2 border-b-2 border-primary-500 h-full -mb-1': isFeatured })} />,\n\t\t\t\t\t}))}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","import React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport SliderWrapper from '../../../compare-page/scrollable-table-with-slider/slider-wrapper';\nimport SubscriptionProductCardStickyHeader from '../subscription-product-card-sticky-header';\nimport { useLocalization } from '../../../../localization';\nimport sharedStyles from '../../shared.less';\n\nimport sliderArrowOptions from '../../../compare-page/scrollable-table-with-slider/slider-arrow-options';\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../subscription-pricing-card-utils';\nimport SectionRow from './section-row';\nimport styles from './index.less';\nimport { FeaturedSpoidOverlay } from './featured-spoid-overlay';\n\nconst ComparisonChart = ({\n\tcompareViewModel,\n\tsectionRowViewModels,\n\tstickyHeaderRef,\n\tcomparisonChartRef,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst comparisonChartHeadersRef = useRef(null);\n\n\treturn (\n\t\t<SwipeableWrapper>\n\t\t\t<div className={styles.comparisonSectionContainer}>\n\t\t\t\t{sectionRowViewModels?.length > 0 && sectionRowViewModels.filter(sr => sr.sections?.length).length > 0 && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<SubscriptionProductCardStickyHeader\n\t\t\t\t\t\t\theaderRef={stickyHeaderRef}\n\t\t\t\t\t\t\tanchorElementRef={comparisonChartHeadersRef}\n\t\t\t\t\t\t\tboundingElementRef={comparisonChartRef}\n\t\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<ComparisonChartHeaders\n\t\t\t\t\t\t\theadersRef={comparisonChartHeadersRef}\n\t\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<FeaturedSpoidOverlay subscriptionCardsContentViewModel={subscriptionCardsContentViewModel}>\n\t\t\t\t\t\t\t<ComparisonChartRows sectionRowViewModels={sectionRowViewModels} compareViewModel={compareViewModel} />\n\t\t\t\t\t\t</FeaturedSpoidOverlay>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</SwipeableWrapper>\n\t);\n};\n\nComparisonChart.propTypes = {\n\tcompareViewModel: PropTypes.shape({\n\t\tinitialSelectedTrackProducts: PropTypes.arrayOf(\n\t\t\tPropTypes.shape({\n\t\t\t\tproductId: PropTypes.string,\n\t\t\t}).isRequired\n\t\t),\n\t}).isRequired,\n};\n\nconst ComparisonChartRows = ({ sectionRowViewModels, compareViewModel }) => {\n\tconst [hasDemoedOpenSection, setHasDemoedOpenSection] = useState(false);\n\tconst sectionRows = sectionRowViewModels\n\t\t.filter(r => r.sections?.length)\n\t\t.map((r, index) => (\n\t\t\t<SectionRow\n\t\t\t\tkey={r.token}\n\t\t\t\t{...r}\n\t\t\t\tcompareViewModel={compareViewModel}\n\t\t\t\tdemoOpenSection={index === 0 && !hasDemoedOpenSection}\n\t\t\t\tonSectionToggle={() => setHasDemoedOpenSection(true)}\n\t\t\t/>\n\t\t));\n\n\treturn <>{sectionRows}</>;\n};\n\nComparisonChartRows.propTypes = {\n\tsectionRows: PropTypes.arrayOf(\n\t\tPropTypes.shape({\n\t\t\ttoken: PropTypes.string.isRequired,\n\t\t}).isRequired\n\t),\n\tcompareViewModel: PropTypes.object,\n\tsuppressMobileProductComparison: PropTypes.bool,\n};\n\nconst ComparisonChartHeaders = ({ headersRef, subscriptionCardsContentViewModel }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\thandleShowLibraryUpsellModal,\n\t\tcouponCodes,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst headers = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<div ref={headersRef} className={styles.headers} data-testid=\"comparison-chart-headers\">\n\t\t\t<div className={classNames(sharedStyles.h5, styles.headersRightSideTitle)}>{resources.Compare}</div>\n\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.Mini,\n\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<SliderWrapper items={headers} arrowOptions={{ displayTheme: sliderArrowOptions.displayTheme.dark }} />\n\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nexport default ComparisonChart;\nexport { ComparisonChartRows };\n","// extracted by mini-css-extract-plugin\nexport default {\"comparisonSectionContainer\":\"index--comparisonSectionContainer--W2y6W\",\"headers\":\"index--headers--sBlbC\",\"headersRightSideTitle\":\"index--headersRightSideTitle--HQMWz\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--Tf861\",\"topBar\":\"index--topBar--Z91bL\",\"topBarWithShadows\":\"index--topBarWithShadows--3ASzh\",\"exitButton\":\"index--exitButton--QuiJd\",\"content\":\"index--content--uvFWg\"};","import React, { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport usePreventBodyScrolling from '../../../util/hooks/use-prevent-body-scrolling';\n\nimport styles from './index.less';\n\nconst OverlayContext = createContext(null);\n\nconst OverlayContextProvider = ({ children }) => {\n\tconst contentRef = useRef(null);\n\n\treturn <OverlayContext.Provider value={{ contentRef }}>{children}</OverlayContext.Provider>;\n};\nOverlayContextProvider.propTypes = {\n\tchildren: PropTypes.node,\n};\n\nconst Overlay = ({ className, children, ...props }) => {\n\tusePreventBodyScrolling(true);\n\n\treturn (\n\t\t<OverlayContextProvider>\n\t\t\t<div className={classNames(styles.container, className)} {...props}>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</OverlayContextProvider>\n\t);\n};\nOverlay.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nconst TopBar = ({ className, children }) => {\n\tconst { contentRef } = useContext(OverlayContext);\n\n\tconst [isContentScrolled, setIsContentScrolled] = useState(false);\n\tuseEffect(() => {\n\t\tconst contentElement = contentRef.current;\n\t\tif (!contentElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = () => {\n\t\t\tsetIsContentScrolled(contentElement.scrollTop > 0);\n\t\t};\n\n\t\tcontentElement.addEventListener('scroll', handleScroll);\n\n\t\treturn () => {\n\t\t\tcontentElement.removeEventListener('scroll', handleScroll);\n\t\t};\n\t}, [contentRef]);\n\treturn (\n\t\t<div className={classNames(styles.topBar, isContentScrolled && styles.topBarWithShadows, className)}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nTopBar.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nconst ExitButton = ({ onClick, className, children }) => {\n\treturn (\n\t\t<div className={classNames(styles.exitButton, className)}>\n\t\t\t<button className={styles.exitButton} onClick={onClick}>\n\t\t\t\t{children}\n\t\t\t</button>\n\t\t</div>\n\t);\n};\nExitButton.propTypes = {\n\tonClick: PropTypes.func,\n\tclassName: PropTypes.string,\n};\n\nconst Content = ({ className, children }) => {\n\tconst { contentRef } = useContext(OverlayContext);\n\n\treturn (\n\t\t<div ref={contentRef} className={classNames(styles.content, className)}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\nContent.propTypes = {\n\tclassName: PropTypes.string,\n\tchildren: PropTypes.node,\n};\n\nOverlay.ExitButton = ExitButton;\nOverlay.TopBar = TopBar;\nOverlay.Content = Content;\n\nexport default Overlay;\n","// extracted by mini-css-extract-plugin\nexport default {\"topBar\":\"index--topBar--i6Txl\",\"titleRowContainer\":\"index--titleRowContainer--KBAgU\",\"titleContainer\":\"index--titleContainer--nxPOG\",\"closeButtonContainer\":\"index--closeButtonContainer--Gk5da\",\"productHeaderContainer\":\"index--productHeaderContainer--gtEpW\"};","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n\tSubscriptionPricingCardsContextProvider,\n\tSubscriptionPricingCardFormatOptions,\n} from '@faithlife/commerce-components';\nimport Overlay from '../../overlay-base';\nimport { ComparisonChartRows } from '../comparison-chart';\nimport ScrollableWrapper from '../../../compare-page/scrollable-table-with-slider/scrollable-wrapper';\nimport SwipeableWrapper from '../../../compare-page/scrollable-table-with-slider/swipeable-wrapper';\nimport { subscribeNotificationsContainerHeight } from '../../../notifications';\nimport { useLocalization } from '../../../../localization';\n\nimport { useConfigurationWizardContext } from '../../context';\nimport { useSubscriptionPricingCardsChildren } from '../subscription-pricing-card-utils';\nimport { FeaturedSpoidOverlay } from '../comparison-chart/featured-spoid-overlay';\nimport styles from './index.less';\n\nconst MobileComparisonChart = ({\n\tcompareViewModel,\n\tsectionRowViewModels,\n\tonClose,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst subscriptionPlansResources = useLocalization('CommerceWeb.Resources.Configure.SubscriptionPlans');\n\tconst wizardResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizard');\n\tconst [marginTop, setMarginTop] = useState(0);\n\n\tuseEffect(() => {\n\t\treturn subscribeNotificationsContainerHeight(notificatationsHeight => {\n\t\t\tsetMarginTop(notificatationsHeight);\n\t\t});\n\t}, []);\n\n\tconst {\n\t\tselectedSpoid,\n\t\tsetSelectedSpoid,\n\t\tselectedBillingMode,\n\t\tsetSelectedBillingMode,\n\t\tcouponCodes,\n\t\thandleShowLibraryUpsellModal,\n\t\tselectedSubscribableProduct,\n\t} = useConfigurationWizardContext();\n\tconst subscriptionProductCardComponents = useSubscriptionPricingCardsChildren(subscriptionCardsContentViewModel);\n\n\treturn (\n\t\t<SwipeableWrapper>\n\t\t\t<Overlay>\n\t\t\t\t<Overlay.TopBar className={styles.topBar}>\n\t\t\t\t\t<div className={styles.titleRowContainer} style={{ marginTop }}>\n\t\t\t\t\t\t<div className={styles.titleContainer}>{subscriptionPlansResources.CompareSubscriptions}</div>\n\t\t\t\t\t\t<div className={styles.closeButtonContainer}>\n\t\t\t\t\t\t\t<Overlay.ExitButton onClick={onClose}>{wizardResources.Close}</Overlay.ExitButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{subscriptionCardsContentViewModel && subscriptionCardsContentViewModel.contentSourceKind === 'builderIo' && (\n\t\t\t\t\t\t<SubscriptionPricingCardsContextProvider\n\t\t\t\t\t\t\tinitialValue={{\n\t\t\t\t\t\t\t\tselectedSpoid,\n\t\t\t\t\t\t\t\tsetSelectedSpoid,\n\t\t\t\t\t\t\t\tselectedBillingMode,\n\t\t\t\t\t\t\t\tsetSelectedBillingMode,\n\t\t\t\t\t\t\t\tformat: SubscriptionPricingCardFormatOptions.MicroAlt,\n\t\t\t\t\t\t\t\thandleShowLibraryUpsellModal,\n\t\t\t\t\t\t\t\tcouponCodes,\n\t\t\t\t\t\t\t\tselectedSubscribableProduct,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ScrollableWrapper className={styles.productHeaderContainer} items={subscriptionProductCardComponents} />\n\t\t\t\t\t\t</SubscriptionPricingCardsContextProvider>\n\t\t\t\t\t)}\n\t\t\t\t</Overlay.TopBar>\n\t\t\t\t<Overlay.Content>\n\t\t\t\t\t{sectionRowViewModels && (\n\t\t\t\t\t\t<FeaturedSpoidOverlay subscriptionCardsContentViewModel={subscriptionCardsContentViewModel}>\n\t\t\t\t\t\t\t<ComparisonChartRows sectionRowViewModels={sectionRowViewModels} compareViewModel={compareViewModel} />\n\t\t\t\t\t\t</FeaturedSpoidOverlay>\n\t\t\t\t\t)}\n\t\t\t\t</Overlay.Content>\n\t\t\t</Overlay>\n\t\t</SwipeableWrapper>\n\t);\n};\n\nMobileComparisonChart.propTypes = {\n\tcompareViewModel: PropTypes.shape({\n\t\tinitialSelectedTrackProducts: PropTypes.arrayOf(\n\t\t\tPropTypes.shape({\n\t\t\t\tsubscribableProductId: PropTypes.string.isRequired,\n\t\t\t\tname: PropTypes.string,\n\t\t\t}).isRequired\n\t\t).isRequired,\n\t}).isRequired,\n\tonClose: PropTypes.func,\n\tonSubscribeClick: PropTypes.func,\n};\n\nexport default MobileComparisonChart;\n","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"index--container--Gt5Cm\",\"hidden\":\"index--hidden--R72VR\",\"button\":\"index--button--Wi6Xv\",\"text\":\"index--text--LtcwM\",\"chevron\":\"index--chevron--+Khi5\"};","import React, { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash.debounce';\nimport classNames from 'classnames';\n\nimport { useLocalization } from '../../../../localization';\nimport { DownChevron24px } from '../../svgs';\nimport styles from './index.less';\n\nconst getUniversalHeaderHeight = document => {\n\tconst universalHeaderUpperHalfHeight =\n\t\tdocument.getElementById('universal-header-upper-half')?.getBoundingClientRect().height ?? 0;\n\n\tconst universalHeaderLowerHalfHeight =\n\t\tdocument.getElementById('universal-header-lower-half')?.getBoundingClientRect().height ?? 0;\n\n\treturn universalHeaderUpperHalfHeight + universalHeaderLowerHalfHeight;\n};\n\nconst CompareJump = ({ scrollTargetRef }) => {\n\tconst resources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\tconst handleClick = () => {\n\t\tif (!scrollTargetRef.current) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst universalHeaderHeight = getUniversalHeaderHeight(document);\n\t\tconst previousScrollMarginTop = scrollTargetRef.current.style.scrollMarginTop;\n\n\t\tscrollTargetRef.current.style.scrollMarginTop = `${universalHeaderHeight}px`;\n\t\tscrollTargetRef.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\t\tscrollTargetRef.current.style.scrollMarginTop = previousScrollMarginTop;\n\t};\n\n\tconst [isHidden, setIsHidden] = useState(false);\n\tconst containerRef = useRef(null);\n\n\tuseEffect(() => {\n\t\tif (isHidden) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleScroll = () => {\n\t\t\tif (!containerRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst containerRect = containerRef.current.getBoundingClientRect();\n\t\t\tconst universalHeaderHeight = getUniversalHeaderHeight(document);\n\n\t\t\tconst visibilityThreshold = containerRect.bottom - universalHeaderHeight;\n\n\t\t\tif (visibilityThreshold <= 0) {\n\t\t\t\t// scroll-padding-top allows us to control how the page scrolls when elements resize vertically\n\t\t\t\tconst previousScrollPaddingTop = document.documentElement.style.scrollPaddingTop;\n\t\t\t\tdocument.documentElement.style.scrollPaddingTop = `${Math.max(containerRect.bottom + 1, 0)}px`;\n\t\t\t\tsetIsHidden(true);\n\n\t\t\t\t// need to wait until after next render to reset scroll-padding-top\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdocument.documentElement.style.scrollPaddingTop = previousScrollPaddingTop;\n\t\t\t\t}, 50);\n\t\t\t}\n\t\t};\n\n\t\tconst debouncedHandleScroll = debounce(handleScroll, 100, false);\n\n\t\twindow.addEventListener('scroll', debouncedHandleScroll);\n\n\t\treturn () => window.removeEventListener('scroll', debouncedHandleScroll);\n\t}, [isHidden]);\n\n\treturn (\n\t\t<div ref={containerRef} className={classNames(styles.container, isHidden && styles.hidden)}>\n\t\t\t{!isHidden && (\n\t\t\t\t<button className={styles.button} onClick={handleClick}>\n\t\t\t\t\t<div className={styles.text}>{resources.Compare}</div>\n\t\t\t\t\t<div className={styles.chevron}>\n\t\t\t\t\t\t<DownChevron24px />\n\t\t\t\t\t</div>\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\nCompareJump.propTypes = {\n\tscrollTargetRef: PropTypes.object, // a React ref\n};\n\nexport default CompareJump;\n","import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport FullscreenOverlayLoadingSpinner from '../../shared/fullscreen-overlay-loading-spinner';\nimport ScrollableTableWithSliderProvider from '../../compare-page/scrollable-table-with-slider/scrollable-table-with-slider-provider';\nimport { ConfigurationWizardCartContextProvider } from '../../shared/configuration-wizard-cart';\nimport SummaryTrough from '../summary-trough';\nimport CompareClient from '../../../clients/compare-client';\nimport { LibraryUpsellModal } from '../library-upsell-modal';\nimport WizardHero from '../wizard-hero';\nimport ProgressIndicatorV2 from '../progress-indicator-v2';\nimport { useLocalization } from '../../../localization';\nimport { useLocation } from '../../../location';\nimport { ConfigurationWizardContextProvider, useConfigurationWizardContext } from '../context';\nimport { RouteContext } from '../../../route-context';\nimport { PerUserDataContextProvider } from '../../per-user-data/per-user-data-context';\nimport PlansSection from './plans-section';\nimport ComparisonChart from './comparison-chart';\nimport MobileComparisonChart from './mobile-comparison-chart';\nimport CompareJump from './compare-jump';\n\nimport styles from './index.less';\nimport { getSubscriptionPricingCards } from './subscription-pricing-card-utils';\n\nconst comparisonTableWithSliderProps = {\n\tpropsByScreenSize: {\n\t\t/* [mobile, tablet, desktop, largeDesktop, extra: { size: value }] */\n\t\tnumbersOfVisibleColumnsByScreenSize: [1, 2, 2, 2, { 1350: 3 }],\n\t\tcolumnWidthsByScreenSize: [200, 200, 200, 335],\n\t\tcolumnGapsByScreenSize: [0, 24],\n\t\tboundaryMarginWidthsByScreenSize: [15, 24, 45, { 1350: 55 }],\n\t\tsliderProps: {\n\t\t\tarrowWidthsByScreenSize: [30, { 1350: 45 }],\n\t\t},\n\t},\n};\n\nconst ConfigurationWizardSubscriptions = ({\n\tinitialComparisonChartViewModel: comparisonChartViewModel,\n\tshowAlreadySubscribedDisclaimer,\n\tsummaryTrough,\n\tisLibraryUpsellAvailable,\n\tlogosOrVerbum,\n\tsubscriptionCardsContentViewModel,\n}) => {\n\tconst subscriptionsResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizardSubscriptions');\n\tconst wizardResources = useLocalization('CommerceWeb.Resources.Configure.ConfigurationWizard');\n\tconst { pathname, search, origin, replaceUrl } = useLocation();\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst clearQueryStringParameters = useCallback(\n\t\t(...parameterNames) => {\n\t\t\tconst url = new URL(`${pathname}${search}`, origin);\n\t\t\tconst parameterNamesToClear = parameterNames.filter(name => url.searchParams.has(name));\n\t\t\tif (!parameterNamesToClear.length) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tparameterNamesToClear.forEach(name => url.searchParams.delete(name));\n\t\t\treplaceUrl(`${url.pathname}${url.search}`);\n\t\t},\n\t\t[pathname, search, origin, replaceUrl]\n\t);\n\n\t// notify: remove the query param used to show the subscription required for libraries message, so it doesn't reappear if the user returns here (e.g. via the back button) or refreshes\n\tuseEffect(() => clearQueryStringParameters('notify', 'term'), [clearQueryStringParameters]);\n\n\tconst [selectedTrackProductIndex, setSelectedTrackProductIndex] = useState(0);\n\n\tconst { compareViewModel } = comparisonChartViewModel;\n\tconst { initialSelectedTrackId: selectedTrackId } = compareViewModel;\n\n\tconst { isLoading, setIsLoading, spoids } = useConfigurationWizardContext();\n\n\tconst [errorMessage, setErrorMessage] = useState(!selectedTrackId ? wizardResources.SomethingWentWrong : null);\n\tconst [sectionRowViewModels, setSectionRowViewModels] = useState([]);\n\n\tuseEffect(() => {\n\t\tconst clearLoadingSpinner = () => setIsLoading(false);\n\t\twindow.addEventListener('pageshow', clearLoadingSpinner);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('pageshow', clearLoadingSpinner);\n\t\t};\n\t}, [setIsLoading]);\n\n\tuseEffect(() => {\n\t\tif (selectedTrackId) {\n\t\t\tconst url = new URL(`${pathname}${search}`, origin);\n\t\t\turl.searchParams.set('trackId', selectedTrackId);\n\t\t\treplaceUrl(`${url.pathname}${url.search}`);\n\t\t}\n\t}, [selectedTrackId, pathname, search, origin, replaceUrl]);\n\n\tconst sectionRowsFetched = useRef(false);\n\tuseEffect(() => {\n\t\tconst fetchComparisonSections = async spoids => {\n\t\t\tsetIsLoading(true);\n\t\t\ttry {\n\t\t\t\tconst newSections = await CompareClient.getCompareSectionDataForSubscribableProducts(\n\t\t\t\t\troutes.CompareSubscribableProductsSectionsBaseUrl,\n\t\t\t\t\tspoids\n\t\t\t\t);\n\t\t\t\tsetSectionRowViewModels(\n\t\t\t\t\tcomparisonChartViewModel.sectionRowViewModels.map(sr => {\n\t\t\t\t\t\tconst sections =\n\t\t\t\t\t\t\tsr.token !== 'included-books'\n\t\t\t\t\t\t\t\t? newSections.sections.filter(s => s.category.token === sr.resourceCategory)\n\t\t\t\t\t\t\t\t: newSections.sections.filter(s => s.category.token !== 'included-books');\n\t\t\t\t\t\treturn { ...sr, sections };\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tsectionRowsFetched.current = true;\n\t\t\t} catch (ex) {\n\t\t\t\tsetErrorMessage(wizardResources.SomethingWentWrong);\n\t\t\t\tthrow ex;\n\t\t\t}\n\t\t\tsetIsLoading(false);\n\t\t};\n\n\t\tif (!sectionRowsFetched.current && spoids?.length) {\n\t\t\tvoid fetchComparisonSections(spoids);\n\t\t}\n\t}, [\n\t\tcomparisonChartViewModel.sectionRowViewModels,\n\t\twizardResources.SomethingWentWrong,\n\t\troutes.CompareSubscribableProductsSectionsBaseUrl,\n\t\tspoids,\n\t\tsetIsLoading,\n\t]);\n\n\tconst [mobileComparisonChartInfo, setMobileComparisonChartInfo] = useState(null);\n\n\tconst handleDisplayMobileComparisonChart = () => {\n\t\tsetMobileComparisonChartInfo({\n\t\t\t...comparisonChartViewModel,\n\t\t\tsectionRowViewModels,\n\t\t});\n\t};\n\n\tconst handleMobileComparisonChartClose = () => {\n\t\tsetMobileComparisonChartInfo(null);\n\t};\n\n\tconst comparisonChartRef = useRef(null);\n\tconst plansStickyHeaderRef = useRef(null);\n\n\tconst upperBanner = (\n\t\t<>\n\t\t\t<WizardHero\n\t\t\t\ttitle={subscriptionsResources.goDeeperInTheWordWithTheRightPlan}\n\t\t\t\tsubtitle={subscriptionsResources.LogosOrVerbumLeadABibleStudyPreachTheWord}\n\t\t\t\tlogosOrVerbum={logosOrVerbum}\n\t\t\t/>\n\t\t\t<ProgressIndicatorV2\n\t\t\t\tstep=\"subscriptions\"\n\t\t\t\troutes={{\n\t\t\t\t\tsubscriptionsUrl: routes.ConfigurationWizardSubscriptionsUrl,\n\t\t\t\t\tlibrariesUrl: routes.ConfigurationWizardLibrariesUrl,\n\t\t\t\t}}\n\t\t\t\tresources={{\n\t\t\t\t\tsubscriptionsLabel: subscriptionsResources.Subscription,\n\t\t\t\t\tlibrariesLabel: subscriptionsResources.AddALibraryOptional,\n\t\t\t\t\tlibraryTitleAndNMoreTemplate: subscriptionsResources.LibraryTitleAndNMoreTemplate,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</>\n\t);\n\n\tif (errorMessage) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{upperBanner}\n\t\t\t\t<div className={styles.errorMessage}>{errorMessage}</div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<ScrollableTableWithSliderProvider\n\t\t\tfirstVisibleColumnIndex={selectedTrackProductIndex}\n\t\t\ttotalNumberOfColumns={spoids?.length}\n\t\t\tonFirstVisibleColumnChange={setSelectedTrackProductIndex}\n\t\t\t{...comparisonTableWithSliderProps}\n\t\t>\n\t\t\t{showAlreadySubscribedDisclaimer && (\n\t\t\t\t<div className=\"core-notifications-container notifications\">\n\t\t\t\t\t<div className=\"notification notification--success\">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span className=\"notification__message\">\n\t\t\t\t\t\t\t\t{subscriptionsResources.ChoosingANewSubscriptionReplacesYourExistingSubscriptionNotice}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{summaryTrough && <SummaryTrough step=\"subscriptions\" {...summaryTrough} />}\n\t\t\t{/* z-index: 10000 beats the mobile comparison chart */}\n\t\t\t{isLoading && <FullscreenOverlayLoadingSpinner zIndex={10000} />}\n\t\t\t{upperBanner}\n\t\t\t<PlansSection\n\t\t\t\tonDisplayMobileComparisonChart={handleDisplayMobileComparisonChart}\n\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t/>\n\t\t\t<div className={styles.lowerSectionContent}>\n\t\t\t\t<CompareJump scrollTargetRef={comparisonChartRef} />\n\t\t\t\t<div ref={comparisonChartRef}>\n\t\t\t\t\t<ComparisonChart\n\t\t\t\t\t\t{...comparisonChartViewModel}\n\t\t\t\t\t\tsectionRowViewModels={sectionRowViewModels}\n\t\t\t\t\t\tstickyHeaderRef={plansStickyHeaderRef}\n\t\t\t\t\t\tcomparisonChartRef={comparisonChartRef}\n\t\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{mobileComparisonChartInfo && (\n\t\t\t\t<MobileComparisonChart\n\t\t\t\t\t{...mobileComparisonChartInfo}\n\t\t\t\t\tonClose={handleMobileComparisonChartClose}\n\t\t\t\t\tsubscriptionCardsContentViewModel={subscriptionCardsContentViewModel}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{isLibraryUpsellAvailable && <LibraryUpsellModal />}\n\t\t</ScrollableTableWithSliderProvider>\n\t);\n};\n\nConfigurationWizardSubscriptions.propTypes = {\n\tinitialComparisonChartViewModel: PropTypes.object.isRequired,\n\tshowAlreadySubscribedDisclaimer: PropTypes.bool.isRequired,\n\tsummaryTrough: PropTypes.object,\n\tisLibraryUpsellAvailable: PropTypes.bool,\n\tcouponCodes: PropTypes.array,\n\tlogosOrVerbum: PropTypes.string,\n\tsubscriptionCardsContentViewModel: PropTypes.object,\n};\n\nfunction ConfigurationWizardSubscriptionsContextWrapper(props) {\n\tconst {\n\t\tinitialConfigurationWizardCartViewModel,\n\t\tsubscriptionCardsContentViewModel,\n\t\tisLibraryUpsellAvailable,\n\t\tcouponCodes,\n\t} = props;\n\n\tconst { routes } = useContext(RouteContext);\n\n\tconst subscriptionPricingCards = getSubscriptionPricingCards(subscriptionCardsContentViewModel.builderIo.content);\n\n\tconst defaultBillingMode = subscriptionPricingCards?.component?.options?.defaultBillingPeriod;\n\tconst spoids = useMemo(\n\t\t() => (subscriptionPricingCards?.children ?? []).map(c => c.component.options.spoid),\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[subscriptionPricingCards?.children]\n\t);\n\n\tconst initialContextValue = useMemo(\n\t\t() => ({ isLibraryUpsellAvailable, spoids, couponCodes, defaultBillingMode }),\n\t\t[isLibraryUpsellAvailable, spoids, couponCodes, defaultBillingMode]\n\t);\n\n\treturn (\n\t\t<PerUserDataContextProvider>\n\t\t\t<ConfigurationWizardCartContextProvider initialValue={initialConfigurationWizardCartViewModel} routes={routes}>\n\t\t\t\t<ConfigurationWizardContextProvider initialValue={initialContextValue}>\n\t\t\t\t\t<ConfigurationWizardSubscriptions {...props} />\n\t\t\t\t</ConfigurationWizardContextProvider>\n\t\t\t</ConfigurationWizardCartContextProvider>\n\t\t</PerUserDataContextProvider>\n\t);\n}\nConfigurationWizardSubscriptionsContextWrapper.propTypes = {\n\tinitialConfigurationWizardCartViewModel: PropTypes.object,\n\tisLibraryUpsellAvailable: PropTypes.bool,\n\tsubscriptionCardsContentViewModel: PropTypes.object,\n};\n\nexport default ConfigurationWizardSubscriptionsContextWrapper;\n","// extracted by mini-css-extract-plugin\nexport default {\"lowerSectionContent\":\"index--lowerSectionContent--yVui5\",\"errorMessage\":\"index--errorMessage--ZFVGL\"};"],"names":["reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","freeGlobal","globalThis","Object","freeSelf","self","root","Function","objectToString","prototype","toString","nativeMax","Math","max","nativeMin","min","now","Date","isObject","value","type","toNumber","isObjectLike","call","isSymbol","other","valueOf","replace","isBinary","test","slice","module","exports","func","wait","options","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","args","thisArg","undefined","apply","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","setTimeout","remainingWait","debounced","isInvoking","arguments","this","leadingEdge","cancel","clearTimeout","flush","ProductsClient","getContainingProductsAsync","containingProductsUrl","response","fetch","get","url","json","getHasContainingProductsAsync","hasContainingProductsUrl","getContainingSubscriptionsAsync","containingSubscriptionsUrl","getProductsCustomersAlsoBoughtAsync","customersAlsoBoughtUrl","skuIds","params","getTooltipAsync","getProductDownloadsAsync","downloadsUrl","getFeaturedProducts","featuredProductIdsUrl","error","status","featuredProducts","getQuickCompare","quickCompareUrl","getUnownedResourcesInfos","unownedResourcesInfosBaseUrl","productIds","join","infos","getShortBlurbsForProductIds","getShortBlurbsUrl","postWithBody","body","getSubscriptionPromotionsForSkuIds","getSubscriptionPromotionsUrl","BillingMode","Monthly","Annually","MultiAnnualTerm","values","ConfigurationWizardContext","createContext","ConfigurationWizardContextProvider","initialValue","children","cart","useConfigurationWizardCartContext","navigate","useLocation","routes","useContext","RouteContext","isLibraryUpsellAvailable","isLibraryUpsellModalOpen","setIsModalOpen","useState","upsellSelection","setUpsellSelection","setIsLibraryUpsellModalOpen","useCallback","isOpen","isLoading","setIsLoading","subscriptionInCart","subscriptionsInCart","selectedSpoid","setSelectedSpoid","spoId","selectedSubscribableProduct","setSelectedSubscribableProduct","selectedBillingMode","setSelectedBillingMode","defaultBillingMode","data","cartSubscription","cartSubscriptionError","useSubscriptionProductData","couponCodes","quantity","upsellSubscription","upsellSubscriptionError","spoid","isMultiAnnual","useEffect","isMultiAnnualSubscription","SubscriptionBillingPeriodOptions","MultiAnnual","optionBillingMode","OptionBillingMode","Annual","handleShowLibraryUpsellModal","optionId","hasLibraryInCart","CartUrl","ConfigurationWizardLibrariesUrl","handleCartUpdated","_event","updatedCart","currentSelectedSpoid","order","subscribableLineItems","find","item","isLogosSubscription","subscribableProductOptionId","getSelectedSpoidFromUpdatedCart","eventAggregator","subscriptionError","React","Provider","spoids","useConfigurationWizardContext","LibraryUpsellModalUi","selectedProduct","libraryProductCards","open","onDismiss","onShopLibrariesClick","onProceedWithoutLibraryClick","resources","useLocalization","Modal","onClose","container","width","maxWidth","zIndex","className","style","maxHeight","Checkmark","CommandSentence","template","YouveSelectedSubscribableProduct","Field","name","onClick","X","WantMoreInsights","map","card","index","key","YourSelection","SubscriptionStar","tier","pricing","termPeriod","PricePerMonth","amount","PricePerYear","PricePerTwoYears","Button","variant","scale","ShopAllLibraries","ProceedWithoutLibrary","propTypes","PropTypes","isRequired","LibraryUpsellProductCard","productId","skuId","imageUri","bookCount","libraryValue","price","savingsPercentage","onLibraryAddedToCart","SavingsPercentage","alt","src","YoursForever","IncludesBooks","Value","AddToCartButtonResourcesProvider","LibraryUpsellCartProvider","AddToCartButton","items","filter","Boolean","id","identifier","IdentifierTypes","SKU","href","SeeWhatsInside","SavePercentage","round","mapBillingModeToTermPeriod","billingMode","cachedLibraryUpsellTrackProductsByTrackProductId","Map","LibraryUpsellModal","origin","suggestedLibraryTrackProductId","recommendedTrackProductId","libraryUpsellTrackProductData","setLibraryUpsellTrackProductData","cancellationTokenSource","isCancelled","async","cancellationToken","products","baseUrl","has","URL","GetLibraryUpsellTrackProductsUrl","searchParams","append","ok","set","getOrFetchLibraryUpsellTrackProducts","asyncFunction","withCancellation","handleLibraryUpsellModalProceedToCartClick","handleLibraryUpsellModalViewLibrariesClick","handleLibraryUpsellModalLibraryAddedToCart","handleDismissLibraryUpsellModal","title","initialCharge","useMemo","product","LoadingProductCard","LibraryUpsellModalWithErrorBoundary","ErrorBoundary","plans_section","plansSectionControls","plansSectionControlsMobile","plansSection","levels","compareSubscriptionsArrow","trackSelector","PlansSection","onDisplayMobileComparisonChart","subscriptionCardsContentViewModel","styles","plansSectionContainer","contentSourceKind","SubscriptionPricingCardsContextProvider","format","SubscriptionPricingCardFormatOptions","Full","RenderBuilderContent","_extends","builderIo","restrictOverflow","shouldSuppressMinicartDrawer","CompareSubscriptionsArrow","handleCompareClick","sharedStyles","ui2","CompareSubscriptions","RightArrow","subscriptions_plans_section","getSubscriptionPricingCards","subscriptionPricingCardsContent","blocks","b","component","addClassToBuilderBlockProperties","builderBlock","newBuilderBlock","properties","class","useSubscriptionPricingCardsChildren","subscriptionCardsContent","content","subscriptionCardsChildren","subscriptionCardsChildrenViewModels","c","vm","subscriptions_subscription_product_card_sticky_header","SubscriptionProductCardStickyHeader","headerRef","anchorElementRef","boundingElementRef","subscriptionProductCardComponents","StickyHeader","SwipeableWrapper","MicroAlt","SliderWrapper","arrowOptions","buttonHeight","sliderArrowOptions","short","displayTheme","dark","feature_component_details","FeatureComponentDetails","orderedIncludedInProducts","shortBlurb","isOwned","isUserLoggedIn","NameWithPreview","InclusionIcons","isIncluded","isPartiallyIncluded","Tooltip","link","classNames","placement","contentStyles","padding","hideArrow","NewToYou","inclusionIconComponents","iip","FullyIncluded","RowWrapper","feature_details_feature_component_details","feature_details","FeatureDetails","subResources","initialIsOpen","onSectionToggle","setIsOpen","setShortBlurb","subResourceComponents","setSubResourceComponents","handleArrowClick","fetchingRef","useRef","fetchComponentInfo","current","shortBlurbsByProductIds","GetShortBlurbsUrl","sr","hasOwnProperty","comparisonId","blankRowCells","LoadingSpinner","small","NameWithArrow","onArrowClick","scaleAmount","Chevron","limit","length","Array","from","FilledCircle","EmptyCircle","feature_section_row_details_feature_details","FeatureSectionRowDetails","section","demoOpenSection","comparisonRows","row","section_row_feature_section_row_details","section_row","h2","h4","h5","ui1","ui3","ui5","b2","b3","loadingSpinner","sectionRow","rowTitleContainer","titleContainer","iconContainer","summaries","summary","legendContainer","includedBooksContainer","SectionRow","token","compareViewModel","sections","isSectionOpen","setIsSectionOpen","rowRef","ref","onChange","isRowOnScreen","observer","IntersectionObserver","entry","isIntersecting","observe","disconnect","handleTitleClick","comparisonTableControlsHandler","useComparisonTableControlsHandler","rowTitle","ExpandableOpenedIcon","ExpandableClosedIcon","ComparisonTableLegend","legend","mode","ComparisonTableControls","summaryBlocks","s","initialSelectedTrackId","ComparisonSectionsTable","selectedCompareSections","comparison_chart_section_row","FeaturedSpoidOverlay","isFeaturedSpoidList","subscriptionPricingCards","useFeaturedSubscriptionPricingCards","scrollableWrapperClassName","itemsClassName","isFeatured","cn","ComparisonChart","sectionRowViewModels","stickyHeaderRef","comparisonChartRef","comparisonChartHeadersRef","ComparisonChartHeaders","headersRef","ComparisonChartRows","initialSelectedTrackProducts","hasDemoedOpenSection","setHasDemoedOpenSection","sectionRows","r","suppressMobileProductComparison","headers","Compare","Mini","subscriptions_comparison_chart","overlay_base","OverlayContext","OverlayContextProvider","contentRef","Overlay","props","usePreventBodyScrolling","TopBar","isContentScrolled","setIsContentScrolled","contentElement","handleScroll","scrollTop","addEventListener","removeEventListener","ExitButton","Content","configuration_wizard_overlay_base","MobileComparisonChart","subscriptionPlansResources","wizardResources","marginTop","setMarginTop","subscribeNotificationsContainerHeight","notificatationsHeight","Close","ScrollableWrapper","subscribableProductId","onSubscribeClick","subscriptions_mobile_comparison_chart","getUniversalHeaderHeight","document","getElementById","getBoundingClientRect","height","CompareJump","scrollTargetRef","isHidden","setIsHidden","containerRef","debouncedHandleScroll","debounce","containerRect","universalHeaderHeight","bottom","previousScrollPaddingTop","documentElement","scrollPaddingTop","window","handleClick","previousScrollMarginTop","scrollMarginTop","scrollIntoView","behavior","block","DownChevron24px","subscriptions_compare_jump","comparisonTableWithSliderProps","propsByScreenSize","numbersOfVisibleColumnsByScreenSize","columnWidthsByScreenSize","columnGapsByScreenSize","boundaryMarginWidthsByScreenSize","sliderProps","arrowWidthsByScreenSize","ConfigurationWizardSubscriptions","initialComparisonChartViewModel","comparisonChartViewModel","showAlreadySubscribedDisclaimer","summaryTrough","logosOrVerbum","subscriptionsResources","pathname","search","replaceUrl","clearQueryStringParameters","parameterNames","parameterNamesToClear","forEach","delete","selectedTrackProductIndex","setSelectedTrackProductIndex","selectedTrackId","errorMessage","setErrorMessage","SomethingWentWrong","setSectionRowViewModels","clearLoadingSpinner","sectionRowsFetched","newSections","CompareClient","getCompareSectionDataForSubscribableProducts","CompareSubscribableProductsSectionsBaseUrl","category","resourceCategory","ex","fetchComparisonSections","mobileComparisonChartInfo","setMobileComparisonChartInfo","plansStickyHeaderRef","upperBanner","WizardHero","goDeeperInTheWordWithTheRightPlan","subtitle","LogosOrVerbumLeadABibleStudyPreachTheWord","ProgressIndicatorV2","step","subscriptionsUrl","ConfigurationWizardSubscriptionsUrl","librariesUrl","subscriptionsLabel","Subscription","librariesLabel","AddALibraryOptional","libraryTitleAndNMoreTemplate","LibraryTitleAndNMoreTemplate","ScrollableTableWithSliderProvider","firstVisibleColumnIndex","totalNumberOfColumns","onFirstVisibleColumnChange","ChoosingANewSubscriptionReplacesYourExistingSubscriptionNotice","SummaryTrough","FullscreenOverlayLoadingSpinner","handleDisplayMobileComparisonChart","handleMobileComparisonChartClose","ConfigurationWizardSubscriptionsContextWrapper","initialConfigurationWizardCartViewModel","defaultBillingPeriod","initialContextValue","PerUserDataContextProvider","ConfigurationWizardCartContextProvider","configuration_wizard_subscriptions"],"sourceRoot":""}