{"version":3,"file":"js/main.8c10eb97001f34622742.js","mappings":"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","sources":["webpack://dynamic-pricing-calculator/./src/utils/tracker.js","webpack://dynamic-pricing-calculator/./src/utils/device.js","webpack://dynamic-pricing-calculator/./src/utils/helpers.js","webpack://dynamic-pricing-calculator/./src/utils/ssr/interval-timeout-shim.js","webpack://dynamic-pricing-calculator/./src/utils/polyfills.js","webpack://dynamic-pricing-calculator/./src/components/Hero/Hero.module.scss?2c0a","webpack://dynamic-pricing-calculator/./src/styles/variables.scss?86fd","webpack://dynamic-pricing-calculator/./src/styles/colors.scss?9658","webpack://dynamic-pricing-calculator/./src/hooks/useStyleVars.js","webpack://dynamic-pricing-calculator/./src/components/DashedLine/DashedLine.js","webpack://dynamic-pricing-calculator/./src/components/DashedLine/DashedLine.module.scss?ea92","webpack://dynamic-pricing-calculator/./src/hooks/useResizeObserver.js","webpack://dynamic-pricing-calculator/./src/components/Timeline/Timeline.js","webpack://dynamic-pricing-calculator/./src/components/Timeline/Timeline.module.scss?f01f","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/alerts.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/apply.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/calendar.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/call.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/chat.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/icons/consultation.svg","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/ActionButton.js","webpack://dynamic-pricing-calculator/./src/components/Hero/ActionButton/ActionButton.module.scss?e6c5","webpack://dynamic-pricing-calculator/./src/components/input/Button/Button.module.scss?d6c4","webpack://dynamic-pricing-calculator/./src/components/input/Button/icons/reset.svg","webpack://dynamic-pricing-calculator/./src/components/Tooltip/Tooltip.js","webpack://dynamic-pricing-calculator/./src/components/Tooltip/Tooltip.module.scss?f1be","webpack://dynamic-pricing-calculator/./src/components/input/Button/icons/cancel.svg","webpack://dynamic-pricing-calculator/./src/components/input/Button/Button.js","webpack://dynamic-pricing-calculator/./src/components/PhoneNumber.js","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanPurposeButtons/refinance.svg","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanPurposeButtons/purchase.svg","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanPurposeButtons/LoanPurposeButtons.js","webpack://dynamic-pricing-calculator/./src/hooks/useInitialValue.js","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanPurposeButtons/LoanPurposeButtons.module.scss?4dac","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanDetails/LoanDetails.module.scss?bda8","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanDetails/personalize.svg","webpack://dynamic-pricing-calculator/./src/components/Controls/ControlButton/ControlButton.js","webpack://dynamic-pricing-calculator/./src/components/Controls/ControlButton/ControlButton.module.scss?ff4d","webpack://dynamic-pricing-calculator/./src/images/arrow.svg","webpack://dynamic-pricing-calculator/./src/hooks/useIsomorphicLayoutEffect.js","webpack://dynamic-pricing-calculator/./src/hooks/useMatchMedia.js","webpack://dynamic-pricing-calculator/./src/hooks/useIsMobile.js","webpack://dynamic-pricing-calculator/./src/hooks/useHasRendered.js","webpack://dynamic-pricing-calculator/./src/components/Controls/LoanDetails/LoanDetails.js","webpack://dynamic-pricing-calculator/./src/components/input/Text/Text.js","webpack://dynamic-pricing-calculator/./src/components/input/Select/arrow.svg","webpack://dynamic-pricing-calculator/./src/components/input/Text/Text.module.scss?ddb3","webpack://dynamic-pricing-calculator/./src/components/input/Select/arrow-bold.svg","webpack://dynamic-pricing-calculator/./src/hooks/useClickOutside.js","webpack://dynamic-pricing-calculator/./src/hooks/useEscapeKey.js","webpack://dynamic-pricing-calculator/./src/hooks/useEvent.js","webpack://dynamic-pricing-calculator/./src/components/input/Select/Select.module.scss?e18a","webpack://dynamic-pricing-calculator/./src/components/input/Select/Select.js","webpack://dynamic-pricing-calculator/./src/components/input/Field/Field.module.scss?7b1d","webpack://dynamic-pricing-calculator/./src/components/input/Field/Field.js","webpack://dynamic-pricing-calculator/./src/components/input/ToggleButton/ToggleButton.module.scss?690c","webpack://dynamic-pricing-calculator/./src/components/Spinner/Spinner.module.scss?7de4","webpack://dynamic-pricing-calculator/./src/components/Spinner/Spinner.js","webpack://dynamic-pricing-calculator/./src/components/input/ToggleButton/ToggleButton.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/ZipCode.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/HomeValue.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/LoanAmount.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/CreditScore.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/PropertyType.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/OccupancyType.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Controls.module.scss?a05d","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/CashOutAmount.js","webpack://dynamic-pricing-calculator/./src/hooks/useConfig.js","webpack://dynamic-pricing-calculator/./src/hooks/usePrevious.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Fields/Fields.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/DesktopInputs/error.svg","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/DesktopInputs/DesktopInputs.module.scss?da8c","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/DesktopInputs/DesktopInputs.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/MobileInputs/MobileInputs.module.scss?c238","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/MobileInputs/MobileInputs.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/Inputs.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/RackRateInputs/RackRateInputs.module.scss?5340","webpack://dynamic-pricing-calculator/./src/components/Controls/Inputs/RackRateInputs/RackRateInputs.js","webpack://dynamic-pricing-calculator/./src/components/Controls/Controls.js","webpack://dynamic-pricing-calculator/./src/hooks/useWindowResizing.js","webpack://dynamic-pricing-calculator/./src/components/Modal/Modal.module.scss?3d36","webpack://dynamic-pricing-calculator/./src/components/Modal/Modal.js","webpack://dynamic-pricing-calculator/./src/hooks/useIsMounted.js","webpack://dynamic-pricing-calculator/./src/components/Form/Form.module.scss?60ac","webpack://dynamic-pricing-calculator/./src/components/Form/Form.js","webpack://dynamic-pricing-calculator/./src/components/Hero/Hero.js","webpack://dynamic-pricing-calculator/./src/components/Content/InfoText/icons/details.svg","webpack://dynamic-pricing-calculator/./src/components/Content/InfoText/icons/filter.svg","webpack://dynamic-pricing-calculator/./src/components/Content/InfoText/InfoText.js","webpack://dynamic-pricing-calculator/./src/components/Content/InfoText/InfoText.module.scss?0aa1","webpack://dynamic-pricing-calculator/./src/components/Content/ProductTypes/percent.svg","webpack://dynamic-pricing-calculator/./src/components/Content/ProductTypes/ProductTypes.module.scss?535b","webpack://dynamic-pricing-calculator/./src/components/Content/ProductTypes/ProductTypeButtons.js","webpack://dynamic-pricing-calculator/./src/components/Content/ProductTypes/ProductTypes.js","webpack://dynamic-pricing-calculator/./src/components/Content/Toolbar/ToolbarContent/ToolbarContent.js","webpack://dynamic-pricing-calculator/./src/components/Content/Toolbar/ToolbarContent/ToolbarContent.module.scss?be40","webpack://dynamic-pricing-calculator/./src/components/Content/Toolbar/Toolbar.module.scss?eefa","webpack://dynamic-pricing-calculator/./src/components/Content/Toolbar/Toolbar.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateTable/details.svg","webpack://dynamic-pricing-calculator/./src/hooks/useStickyOffset.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateTable/RateTable.module.scss?87e0","webpack://dynamic-pricing-calculator/./src/components/Content/RateTable/RateTable.js","webpack://dynamic-pricing-calculator/./src/components/Content/CalculatorMessages/ErrorMessages/ErrorMessages.module.scss?692f","webpack://dynamic-pricing-calculator/./src/components/Content/CalculatorMessages/ErrorMessages/error.svg","webpack://dynamic-pricing-calculator/./src/components/Content/CalculatorMessages/ErrorMessages/ErrorMessages.js","webpack://dynamic-pricing-calculator/./src/components/Content/CalculatorMessages/CalculatorMessages.module.scss?6323","webpack://dynamic-pricing-calculator/./src/components/Content/LoadMoreRates/plus.svg","webpack://dynamic-pricing-calculator/./src/components/Content/CalculatorMessages/CalculatorMessages.js","webpack://dynamic-pricing-calculator/./src/components/Content/LoadMoreRates/LoadMoreRates.module.scss?7078","webpack://dynamic-pricing-calculator/./src/components/Content/LoadMoreRates/LoadMoreRates.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateDisclosures/RateDisclosures.module.scss?c46a","webpack://dynamic-pricing-calculator/./src/components/Content/RateDisclosures/RateDisclosures.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModalForm/RateModalForm.module.scss?f719","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModalForm/Step.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModalForm/RateModalEmail.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModalForm/RateModalForm.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModal.module.scss?0bef","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/SampleLoan.js","webpack://dynamic-pricing-calculator/./src/components/Content/RateModal/RateModal.js","webpack://dynamic-pricing-calculator/./src/components/Content/RackRates/RackRates.module.scss?4e24","webpack://dynamic-pricing-calculator/./src/components/Content/RackRates/RackRates.js","webpack://dynamic-pricing-calculator/./src/components/Content/BottomContent/CTA/CTA.js","webpack://dynamic-pricing-calculator/./src/components/Content/BottomContent/CTA/CTA.module.scss?e4ea","webpack://dynamic-pricing-calculator/./src/components/Content/BottomContent/FAQ/FAQ.module.scss?0f28","webpack://dynamic-pricing-calculator/./src/components/Content/BottomContent/FAQ/FAQ.js","webpack://dynamic-pricing-calculator/./src/components/Content/BottomContent/BottomContent.js","webpack://dynamic-pricing-calculator/./src/components/Content/Content.module.scss?de60","webpack://dynamic-pricing-calculator/./src/components/Content/Content.js","webpack://dynamic-pricing-calculator/./src/hooks/useDocumentReady.js","webpack://dynamic-pricing-calculator/./src/components/DebugMenu/DebugMenu.js","webpack://dynamic-pricing-calculator/./src/components/DebugMenu/DebugMenu.module.scss?ec7b","webpack://dynamic-pricing-calculator/./src/hooks/useProductTypeHelpers.js","webpack://dynamic-pricing-calculator/./src/hooks/useProductTypeLabels.js","webpack://dynamic-pricing-calculator/./src/hooks/useRackRates.js","webpack://dynamic-pricing-calculator/./src/hooks/useProductTypes.js","webpack://dynamic-pricing-calculator/./src/utils/CalculatorError.js","webpack://dynamic-pricing-calculator/./src/hooks/useScenarioHelpers.js","webpack://dynamic-pricing-calculator/./src/hooks/useEffectAfterMount.js","webpack://dynamic-pricing-calculator/./src/App.js","webpack://dynamic-pricing-calculator/./src/index.js","webpack://dynamic-pricing-calculator/./src/hooks/useLoanDetails.js","webpack://dynamic-pricing-calculator/./src/hooks/useScenario.js","webpack://dynamic-pricing-calculator/./src/utils/constants.js","webpack://dynamic-pricing-calculator/./src/utils/enums.js"],"sourcesContent":["import { isSSR } from '@helpers';\r\nimport { snakeCase } from 'lodash';\r\n\r\nif (!isSSR() && !window.requestIdleCallback) {\r\n window.requestIdleCallback = callback => {\r\n setTimeout(callback, 100);\r\n };\r\n}\r\n\r\nconst actions = Object.freeze({\r\n OPEN_CONTROLS: 'open_myprice_inputs',\r\n PERSONALIZE_RATES: 'personalize_rates',\r\n FINISH_FETCHING: 'fetch_rates',\r\n SELECT_RATE: 'select_rate',\r\n LOAD_MORE_RATES: 'load_more_rates',\r\n ENABLE_PRODUCT_TYPE: 'enable_product_type',\r\n DISABLE_PRODUCT_TYPE: 'disable_product_type',\r\n OPEN_FAQ: 'open_faq',\r\n ERROR: 'myprice_error',\r\n VIEW_RACK_RATES: 'view_rack_rates',\r\n OPEN_BOOKING_MODAL: 'booking_open'\r\n});\r\n\r\nclass Tracker {\r\n constructor() {\r\n this.track = this.track.bind(this);\r\n this.isDebug = false;\r\n }\r\n\r\n get actions() {\r\n return actions;\r\n }\r\n\r\n track(eventName, eventParams, eventCallback) {\r\n if (isSSR() || this.isDebug) {\r\n return;\r\n }\r\n\r\n eventParams ??= {};\r\n\r\n const {\r\n callback = eventCallback,\r\n timeout = 2000,\r\n minCallbackTimeout,\r\n ...customParams\r\n } = eventParams;\r\n\r\n if (!eventName) {\r\n console.error('Event name is required');\r\n return;\r\n }\r\n\r\n const gtag =\r\n window.gtag ||\r\n function () {\r\n window.dataLayer = window.dataLayer || [];\r\n window.dataLayer.push(arguments);\r\n };\r\n\r\n const callbackWithTimeout = () => {\r\n let hasCalled = false;\r\n let hasReachedMinTimeout =\r\n isNaN(minCallbackTimeout) || minCallbackTimeout === 0;\r\n\r\n const fn = () => {\r\n if (callback && !hasCalled) {\r\n hasCalled = true;\r\n\r\n if (hasReachedMinTimeout) {\r\n callback();\r\n }\r\n }\r\n };\r\n\r\n setTimeout(fn, timeout);\r\n\r\n if (!hasReachedMinTimeout) {\r\n setTimeout(() => {\r\n hasReachedMinTimeout = true;\r\n\r\n if (hasCalled && callback) {\r\n callback();\r\n }\r\n }, minCallbackTimeout);\r\n }\r\n\r\n return fn;\r\n };\r\n\r\n requestIdleCallback(\r\n () => {\r\n const params = {\r\n event_callback: callbackWithTimeout(),\r\n event_timeout: timeout\r\n };\r\n\r\n Object.keys(customParams).forEach(key => {\r\n params[snakeCase(key)] = customParams[key];\r\n });\r\n\r\n gtag('event', eventName, params);\r\n },\r\n { timeout: 5000 }\r\n );\r\n }\r\n}\r\n\r\nconst tracker = new Tracker();\r\n\r\nexport default tracker;\r\n","import { isSSR } from '@helpers';\r\n\r\nconst device = isSSR()\r\n ? { windows: true }\r\n : {\r\n windows: /^Win/i.test(navigator.platform),\r\n mac: /^Mac/i.test(navigator.platform),\r\n android:\r\n /Android/i.test(navigator.userAgent) ||\r\n /webOS/i.test(navigator.userAgent),\r\n ios:\r\n /iPhone|iPad|iPod/i.test(navigator.platform) ||\r\n (/Macintosh/.test(navigator.userAgent) && navigator.maxTouchPoints > 0)\r\n };\r\n\r\nexport default device;\r\n\r\nexport function isMobile() {\r\n return !isSSR() && (device.ios || device.android);\r\n}\r\n\r\nexport function isDesktop() {\r\n return isSSR() || (!device.ios && !device.android);\r\n}\r\n","import React from 'react';\r\nimport { propertyTypes, loanPurpose, keys } from '@enums';\r\nimport { SCENARIO_PREFETCH_DELAY, BASE_SCENARIO } from '@constants';\r\nimport tracker from '@utils/tracker';\r\nimport {\r\n isPlainObject,\r\n isFunction,\r\n isNumber,\r\n isString,\r\n isEqual,\r\n sortBy,\r\n lowerFirst\r\n} from 'lodash';\r\nexport {\r\n isMobile as isMobileDevice,\r\n isDesktop as isDesktopDevice\r\n} from './device';\r\n\r\nexport function getState(state, value, name) {\r\n if (!isPlainObject(state) || (!value && !name)) {\r\n return state;\r\n }\r\n\r\n if (isFunction(value)) {\r\n return value(state);\r\n }\r\n\r\n if (isPlainObject(value)) {\r\n return { ...state, ...value };\r\n }\r\n\r\n if (!name) {\r\n return state;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n return { ...state, [name]: [...value] };\r\n }\r\n\r\n return { ...state, [name]: value };\r\n}\r\n\r\nlet config = null;\r\n\r\nexport function getConfig() {\r\n return config;\r\n}\r\n\r\nexport function initProps(props) {\r\n props = camelCaseProps(props);\r\n\r\n if (props.contactFormHtml) {\r\n const html = props.contactFormHtml\r\n .trim()\r\n .replace(//g, '>');\r\n\r\n props.contactFormHtml = decodeHtml(html);\r\n }\r\n\r\n if (!isPlainObject(props.validations)) {\r\n props.validations = {};\r\n }\r\n\r\n Object.keys(props.validations).forEach(key => {\r\n if (props.validations[key] === null && key.match(/^(min|max)/)) {\r\n props.validations[key] = 0;\r\n }\r\n });\r\n\r\n if (config === null) {\r\n config = Object.assign({}, props.configuration);\r\n\r\n Object.keys(config).forEach(key => {\r\n if (isString(config[key])) {\r\n config[key] = config[key].trim();\r\n }\r\n });\r\n\r\n config.scenarioPrefetchDelay ??= SCENARIO_PREFETCH_DELAY;\r\n\r\n config = Object.freeze(config);\r\n }\r\n\r\n const { defaultLoanPurpose, purchase, refinance } = props.defaultScenarios;\r\n\r\n [keys.LOAN_AMOUNT, keys.HOME_VALUE, keys.ZIP_CODE].forEach(key => {\r\n if (purchase[key]) {\r\n purchase[key] = String(purchase[key]);\r\n }\r\n\r\n if (refinance[key]) {\r\n refinance[key] = String(refinance[key]);\r\n }\r\n });\r\n\r\n props.defaultScenarios = {\r\n defaultLoanPurpose: isValidLoanPurpose(defaultLoanPurpose)\r\n ? defaultLoanPurpose\r\n : BASE_SCENARIO.loanPurpose,\r\n purchase: Object.assign({}, BASE_SCENARIO, purchase, {\r\n loanPurpose: loanPurpose.PURCHASE\r\n }),\r\n refinance: Object.assign({}, BASE_SCENARIO, refinance, {\r\n loanPurpose: loanPurpose.REFINANCE\r\n })\r\n };\r\n\r\n props.initialScenario =\r\n props.defaultScenarios[props.defaultScenarios.defaultLoanPurpose];\r\n\r\n tracker.isDebug = config.enableDebugMode;\r\n\r\n return props;\r\n}\r\n\r\nexport function camelCaseProps(props) {\r\n if (!props) {\r\n return props;\r\n }\r\n\r\n if (isPlainObject(props)) {\r\n const newProps = {};\r\n\r\n Object.keys(props).forEach(key => {\r\n const newKey = lowerFirst(key);\r\n const value = props[key];\r\n\r\n // If props are an array or an object\r\n // recursively map those keys as well\r\n const newValue =\r\n typeof value === 'object' ? camelCaseProps(value) : value;\r\n\r\n newProps[newKey] = newValue;\r\n });\r\n\r\n return newProps;\r\n }\r\n\r\n if (Array.isArray(props)) {\r\n return props.map(camelCaseProps);\r\n }\r\n\r\n return props;\r\n}\r\n\r\nexport function isValidLoanType(type) {\r\n if (!isString(type)) {\r\n return false;\r\n }\r\n\r\n return isFixedRate(type) || isAdjustableRate(type);\r\n}\r\n\r\nexport function isAdjustableRate(type) {\r\n if (!isString(type)) {\r\n return false;\r\n }\r\n\r\n return type.toLowerCase().trim() === 'adjustable';\r\n}\r\n\r\nexport function isFixedRate(type) {\r\n if (!isString(type)) {\r\n return false;\r\n }\r\n\r\n return type.toLowerCase().trim() === 'fixed';\r\n}\r\n\r\nexport function isPurchase(type) {\r\n if (!isString(type)) {\r\n return false;\r\n }\r\n\r\n return type.toLowerCase().trim() === 'purchase';\r\n}\r\n\r\nexport function isRefinance(type) {\r\n if (!isString(type)) {\r\n return false;\r\n }\r\n\r\n return type.toLowerCase().trim() === 'refinance';\r\n}\r\n\r\nexport function isValidLoanPurpose(type) {\r\n return isPurchase(type) || isRefinance(type);\r\n}\r\n\r\nexport function formatCurrency(num, showDecimals) {\r\n if (isString(num)) {\r\n num = num.replace(/[$,]/g, '');\r\n }\r\n\r\n const isNegative = num < 0;\r\n const decimals = showDecimals ? 2 : 0;\r\n\r\n num = Math.abs(Number(num)).toLocaleString('en-US', {\r\n maximumFractionDigits: decimals,\r\n minimumFractionDigits: decimals\r\n });\r\n\r\n return isNegative ? `-$${num}` : `$${num}`;\r\n}\r\n\r\nexport function calculatePercent(num1, num2, addDecimals) {\r\n let num = !isNumber(num2 || isNaN(Number(num2)))\r\n ? num1\r\n : Math.round((parseFloat(num1) / parseFloat(num2)) * 100);\r\n\r\n return formatPercent(num, addDecimals);\r\n}\r\n\r\nexport function formatPercent(num, addDecimals = true, addPercentSign = true) {\r\n if (addDecimals) {\r\n num = Number(num).toLocaleString('en-US', {\r\n minimumFractionDigits: 3,\r\n maximumFractionDigits: 3\r\n });\r\n }\r\n\r\n return num + (addPercentSign ? '%' : '');\r\n}\r\n\r\nexport function formatPhoneNumber(num, showIntlCode) {\r\n if (!num) {\r\n return null;\r\n }\r\n\r\n const cleaned = String(num).replace(/\\D/g, '');\r\n\r\n if (cleaned.length !== 10 && cleaned.length !== 11) {\r\n return null;\r\n }\r\n\r\n const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\r\n\r\n if (match) {\r\n const intlCode = showIntlCode && match[1] ? '+1 ' : '';\r\n return `${intlCode}(${match[2]}) ${match[3]}-${match[4]}`;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nconst emailRegex =\r\n /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\r\n\r\nexport function isValidEmail(email, maxLength = 320) {\r\n if (!isString(email) || email.length > maxLength) {\r\n return false;\r\n }\r\n\r\n const emailParts = email.split('@');\r\n\r\n if (emailParts.length !== 2) return false;\r\n\r\n const [account, address] = emailParts;\r\n\r\n if (account.length > 64 || address.length > 255) {\r\n return false;\r\n }\r\n\r\n if (address.split('.').some(part => part.length > 63)) {\r\n return false;\r\n }\r\n\r\n return emailRegex.test(email);\r\n}\r\n\r\nconst phoneRegex = /^(\\+\\d{1,2}\\s)?\\(?\\d{3}\\)?[\\s.-]\\d{3}[\\s.-]\\d{4}$/;\r\n\r\nexport function isValidPhone(phone) {\r\n if (!isString(phone) || !phone) return false;\r\n return phoneRegex.test(phone);\r\n}\r\n\r\nexport function isVowel(letter) {\r\n if (!isString(letter)) {\r\n return false;\r\n }\r\n\r\n return ['a', 'e', 'i', 'o', 'u'].includes(letter[0].toLowerCase());\r\n}\r\n\r\nexport function isSSR() {\r\n return typeof window === 'undefined' || typeof document === 'undefined';\r\n}\r\n\r\nexport function compareObjects(a, b, keys) {\r\n if ((!a && b) || (a && !b)) {\r\n return false;\r\n }\r\n\r\n if (!keys) {\r\n return isEqual(a, b);\r\n }\r\n\r\n keys = [keys].flat();\r\n\r\n const getObj = obj => {\r\n const newObj = {};\r\n keys.forEach(key => (newObj[key] = obj[key]));\r\n return newObj;\r\n };\r\n\r\n return isEqual(getObj(a), getObj(b));\r\n}\r\n\r\nexport function compareLoanDetails(a, b, keys) {\r\n if ((!a && b) || (a && !b)) {\r\n return false;\r\n }\r\n\r\n const getCashOut = value => {\r\n value = String(value).trim();\r\n\r\n if (!value || value === '0' || isNaN(value)) {\r\n value = '';\r\n } else {\r\n const num = parseFloat(value);\r\n\r\n if (!num || isNaN(num) || num < 0) {\r\n value = '';\r\n }\r\n }\r\n\r\n return value;\r\n };\r\n\r\n a = {\r\n ...a,\r\n loanAmount: String(a.loanAmount),\r\n homeValue: String(a.homeValue),\r\n cashOutAmount: getCashOut(a.cashOutAmount)\r\n };\r\n\r\n b = {\r\n ...b,\r\n loanAmount: String(b.loanAmount),\r\n homeValue: String(b.homeValue),\r\n cashOutAmount: getCashOut(b.cashOutAmount)\r\n };\r\n\r\n return compareObjects(a, b, keys);\r\n}\r\n\r\nexport function compareArrays(a, b, checkOrder) {\r\n if (!Array.isArray(a) || !Array.isArray(b)) {\r\n console.error('Arguments must be arrays');\r\n return false;\r\n }\r\n\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n if (!checkOrder) {\r\n a = sortBy(a);\r\n b = sortBy(b);\r\n }\r\n\r\n return isEqual(a, b);\r\n}\r\n\r\n// We cache the results of requests to avoid\r\n// redundant API calls. This function generates an\r\n// ID for a specific loan scenario, and is used\r\n// to identify a particular set of loan details\r\n// Original hash function: https://stackoverflow.com/a/52171480\r\nexport function generateId(obj, seed = 0) {\r\n const str = Object.values(obj)\r\n .map(v => String(v).trim())\r\n .join('')\r\n .toLowerCase()\r\n .replace(/[^a-z0-9]/gi, '');\r\n\r\n let h1 = 0xdeadbeef ^ seed;\r\n let h2 = 0x41c6ce57 ^ seed;\r\n\r\n for (let i = 0, ch; i < str.length; i++) {\r\n ch = str.charCodeAt(i);\r\n h1 = Math.imul(h1 ^ ch, 2654435761);\r\n h2 = Math.imul(h2 ^ ch, 1597334677);\r\n }\r\n\r\n h1 =\r\n Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^\r\n Math.imul(h2 ^ (h2 >>> 13), 3266489909);\r\n h2 =\r\n Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^\r\n Math.imul(h1 ^ (h1 >>> 13), 3266489909);\r\n\r\n return String(4294967296 * (2097151 & h2) + (h1 >>> 0));\r\n}\r\n\r\n// Gets array of elements that should be translated\r\n// down when the calculator inputs are open. We use\r\n// a closure to avoid querying elements multiple times\r\nconst getElementsToTransform = (() => {\r\n let elements = null;\r\n\r\n return () => {\r\n if (elements?.length || isSSR()) {\r\n return elements ?? [];\r\n }\r\n\r\n let sections = Array.from(\r\n document.querySelectorAll('#main > div, #main > section')\r\n );\r\n\r\n // Only transform sections after the calculator\r\n const index = sections.findIndex(\r\n s => s.id === 'mortgage-rate-calculator-wrapper'\r\n );\r\n\r\n if (index > -1) {\r\n sections = sections.slice(index + 1);\r\n }\r\n\r\n elements = sections\r\n .concat(document.querySelector('#footer'))\r\n .filter(s => s && s.id !== 'mortgage-rate-calculator-form');\r\n\r\n return elements;\r\n };\r\n})();\r\n\r\nexport { getElementsToTransform };\r\n\r\nexport function getPropertyTypeText(type) {\r\n const key = Object.keys(propertyTypes).find(p => {\r\n return propertyTypes[p].value === type;\r\n });\r\n\r\n const data = propertyTypes[key];\r\n\r\n return (data?.loanDetailsText ?? data?.label ?? 'home').toLowerCase();\r\n}\r\n\r\nexport function isValidDate(date) {\r\n if (!date) {\r\n return false;\r\n }\r\n\r\n date = new Date(date);\r\n\r\n return date instanceof Date && !isNaN(date);\r\n}\r\n\r\nexport function getEffectiveDate(date) {\r\n if (isString(date) && date.includes('/Date')) {\r\n date = new Date(parseInt(date.substr(6)));\r\n }\r\n\r\n date = new Date(date);\r\n\r\n return isValidDate(date) ? new Date(date) : new Date();\r\n}\r\n\r\nexport function decodeHtml(html) {\r\n const txt = document.createElement('textarea');\r\n txt.innerHTML = html;\r\n return txt.value;\r\n}\r\n\r\nexport function filterRequestPhaseData(loanDetails, requestPhases) {\r\n requestPhases = JSON.parse(JSON.stringify(requestPhases));\r\n\r\n return requestPhases\r\n .map(data => {\r\n const requestPhase = { ...data };\r\n\r\n requestPhase.products = requestPhase.products.filter(\r\n ({ productRestriction }) => {\r\n if (!productRestriction) {\r\n return true;\r\n }\r\n\r\n const {\r\n minLoanAmount,\r\n maxLoanAmount,\r\n minCreditScore,\r\n maxCreditScore\r\n } = productRestriction;\r\n\r\n const creditScore = parseInt(loanDetails.creditScore);\r\n\r\n let loanAmount = parseFloat(loanDetails.loanAmount);\r\n const cashOutAmount = parseFloat(loanDetails.cashOutAmount);\r\n\r\n if (\r\n isRefinance(loanDetails.loanPurpose) &&\r\n !isNaN(cashOutAmount) &&\r\n cashOutAmount > 0\r\n ) {\r\n loanAmount += cashOutAmount;\r\n }\r\n\r\n if (\r\n (minLoanAmount > 0 && loanAmount < minLoanAmount) ||\r\n (maxLoanAmount > 0 && loanAmount > maxLoanAmount) ||\r\n (minCreditScore > 0 && creditScore < minCreditScore) ||\r\n (maxCreditScore > 0 && creditScore > maxCreditScore)\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n );\r\n\r\n return requestPhase.products.length ? requestPhase : null;\r\n })\r\n .filter(r => r);\r\n}\r\n\r\nexport function paragraphToNewline(text) {\r\n if (!text) {\r\n return '';\r\n }\r\n\r\n return !isString(text)\r\n ? text\r\n : text\r\n .replace(//gm, '\\n')\r\n .replace(/<\\s*p[^>]*>([^<]*)<\\s*\\/\\s*p\\s*>/gm, '$1\\n')\r\n .trim()\r\n .replace(/[\\r\\n]+/g, '\\n');\r\n}\r\n\r\nexport function formatParagraphs(text, encode = true) {\r\n return paragraphToNewline(text)\r\n .split('\\n')\r\n .map((p, index) => {\r\n const text = p.trim();\r\n\r\n return encode ? (\r\n

{text}

\r\n ) : (\r\n \r\n );\r\n });\r\n}\r\n\r\nexport function isInPage(node) {\r\n if (isSSR() || !node) {\r\n return false;\r\n }\r\n\r\n return !document.body.contains || document.body.contains(node);\r\n}\r\n","// Shim for setInterval, setTimeout, etc. not being\r\n// supported in server-rendered JavaScript\r\n// https://gist.github.com/assertchris/927843/cb71a7f5723976a437b3f0f7a64f52dc7e0f00e3\r\n\r\nimport { isSSR } from '@helpers';\r\n\r\nif (isSSR()) {\r\n setTimeout = setTimeout || global.setTimeout;\r\n clearTimeout = clearTimeout || global.clearTimeout;\r\n setInterval = setInterval || global.setInterval;\r\n clearInterval = clearInterval || global.clearInterval;\r\n\r\n const objects = [];\r\n\r\n function getTime() {\r\n return +new Date();\r\n }\r\n\r\n function setObject(type, callback, delay) {\r\n const id = objects.length;\r\n\r\n objects.push({\r\n callback: callback,\r\n time: getTime(),\r\n delay: delay,\r\n type: type,\r\n id: id\r\n });\r\n return id;\r\n }\r\n\r\n function clearObject(id) {\r\n var i = objects.length;\r\n while (i--) {\r\n if (objects[i].id === id) {\r\n objects.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n function setTimeout(callback, delay) {\r\n return setObject('timeout', callback, delay);\r\n }\r\n\r\n function setInterval(callback, delay) {\r\n return setObject('interval', callback, delay);\r\n }\r\n\r\n function clearTimeout(id) {\r\n clearObject.call(global, id);\r\n }\r\n\r\n function clearInterval(id) {\r\n clearObject.call(global, id);\r\n }\r\n\r\n global.setTimeout = setTimeout;\r\n global.clearTimeout = clearTimeout;\r\n global.setInterval = setInterval;\r\n global.clearInterval = clearInterval;\r\n}\r\n","import { isSSR } from '@helpers';\r\nimport 'intersection-observer';\r\n\r\n(() => {\r\n if (isSSR()) {\r\n return;\r\n }\r\n\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n }\r\n\r\n if (!Element.prototype.closest) {\r\n Element.prototype.closest = function (s) {\r\n var el = this;\r\n\r\n do {\r\n if (Element.prototype.matches.call(el, s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n }\r\n\r\n if (window.NodeList && !NodeList.prototype.forEach) {\r\n NodeList.prototype.forEach = function (callback, thisArg) {\r\n thisArg = thisArg || window;\r\n for (var i = 0; i < this.length; i++) {\r\n callback.call(thisArg, this[i], i, this);\r\n }\r\n };\r\n }\r\n})();\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"hero_breadcrumbs__67mws\";\nvar _3 = \"hero_consultationform__84dm8\";\nvar _4 = \"hero_consultationmodal__3wquf\";\nvar _5 = \"hero_content__1rnn3\";\nvar _6 = \"640px\";\nvar _7 = \"790px\";\nvar _8 = \"hero_cta__dxzah\";\nvar _9 = \"#057676\";\nvar _a = \"hero_hasbreadcrumbs__o12pl\";\nvar _b = \"#434343\";\nvar _c = \"hero_linewrapper__1jgwi\";\nvar _d = \"hero_links__rpgud\";\nvar _e = \"hero_linksbox__lotlp\";\nvar _f = \"hero_linkswrapper__4bz+-\";\nvar _10 = \"79px\";\nvar _11 = \"110px\";\nvar _12 = \"72px\";\nvar _13 = \"665px\";\nvar _14 = \"hero_schedulemodal__dp18m\";\nvar _15 = \"teal\";\nvar _16 = \"hero_text__kle4v\";\nvar _17 = \"hero_textwrapper__pj2m0\";\nvar _18 = \"2\";\nvar _19 = \"#cdd3dc\";\nvar _1a = \"hero_wrapper__cnykn\";\nexport { _1 as \"body\", _2 as \"breadcrumbs\", _3 as \"consultationForm\", _4 as \"consultationModal\", _5 as \"content\", _6 as \"controlsMobileWidth\", _7 as \"controlsStackedWidth\", _8 as \"cta\", _9 as \"darkTeal\", _a as \"hasBreadcrumbs\", _b as \"headline\", _c as \"lineWrapper\", _d as \"links\", _e as \"linksBox\", _f as \"linksWrapper\", _10 as \"menuHeight\", _11 as \"menuHeightLarge\", _12 as \"menuHeightMobile\", _13 as \"modalMobileWidth\", _14 as \"scheduleModal\", _15 as \"teal\", _16 as \"text\", _17 as \"textWrapper\", _18 as \"timelineStrokeWidth\", _19 as \"timelineTrackColor\", _1a as \"wrapper\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"640px\";\nvar _2 = \"790px\";\nvar _3 = \"79px\";\nvar _4 = \"110px\";\nvar _5 = \"72px\";\nvar _6 = \"665px\";\nvar _7 = \"2\";\nvar _8 = \"#cdd3dc\";\nexport { _1 as \"controlsMobileWidth\", _2 as \"controlsStackedWidth\", _3 as \"menuHeight\", _4 as \"menuHeightLarge\", _5 as \"menuHeightMobile\", _6 as \"modalMobileWidth\", _7 as \"timelineStrokeWidth\", _8 as \"timelineTrackColor\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"#057676\";\nvar _3 = \"#434343\";\nvar _4 = \"teal\";\nexport { _1 as \"body\", _2 as \"darkTeal\", _3 as \"headline\", _4 as \"teal\" }\n","import * as styleVars from '@styles/variables.scss';\r\nimport * as colors from '@colors';\r\n\r\nconst vars = { colors };\r\n\r\nObject.keys(styleVars).forEach(key => {\r\n const num = parseInt(styleVars[key]);\r\n vars[key] = !isNaN(num) ? num : styleVars[key];\r\n});\r\n\r\nexport default function useStyleVars() {\r\n return vars;\r\n}\r\n","import React from 'react';\r\nimport useStyleVars from '@hooks/useStyleVars';\r\nimport classNames from 'classnames';\r\nimport * as styles from './DashedLine.module.scss';\r\n\r\nexport default React.forwardRef(function DashedLine(\r\n { className, strokeWidth, color, direction = 'vertical', ...restProps },\r\n ref\r\n) {\r\n const { timelineTrackColor, timelineStrokeWidth } = useStyleVars();\r\n\r\n color = color ?? timelineTrackColor;\r\n strokeWidth = strokeWidth ?? timelineStrokeWidth;\r\n\r\n const h = Math.ceil(strokeWidth / 2);\r\n const svgProps = {};\r\n const lineProps = {};\r\n\r\n if (direction === 'vertical') {\r\n svgProps.viewBox = `0 0 ${strokeWidth} 100`;\r\n svgProps.width = Math.ceil(strokeWidth);\r\n svgProps.height = 100;\r\n\r\n lineProps.x1 = h;\r\n lineProps.x2 = h;\r\n lineProps.y1 = 0;\r\n lineProps.y2 = 100;\r\n } else {\r\n svgProps.viewBox = `0 0 100 ${strokeWidth}`;\r\n svgProps.width = 100;\r\n svgProps.height = h;\r\n svgProps.style = { height: Math.ceil(strokeWidth) };\r\n\r\n lineProps.x1 = 0;\r\n lineProps.x2 = 100;\r\n lineProps.y1 = h;\r\n lineProps.y2 = h;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n});\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"dashedline_horizontal__prhum\";\nvar _2 = \"dashedline_line__qaura\";\nexport { _1 as \"horizontal\", _2 as \"line\" }\n","import { useState, useEffect, useRef, useMemo } from 'react';\r\nimport ResizeObserver from 'resize-observer-polyfill';\r\n\r\nexport default function useResizeObserver(ref, options = {}) {\r\n const {\r\n callback,\r\n shouldReturnValues = true,\r\n checkWidth = true,\r\n checkHeight = true\r\n } = options;\r\n\r\n const [size, setSize] = useState({\r\n width: ref.current?.offsetWidth ?? 0,\r\n height: ref.current?.offsetHeight ?? 0\r\n });\r\n\r\n const prevSize = useRef({ ...size });\r\n const hasInitialized = useRef(false);\r\n const observerRef = useRef(null);\r\n const didUnmount = useRef(false);\r\n\r\n const callbackRef = useRef(callback);\r\n callbackRef.current = callback;\r\n\r\n useEffect(() => {\r\n didUnmount.current = false;\r\n return () => (didUnmount.current = true);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (!observerRef.current) {\r\n observerRef.current = new ResizeObserver(entries => {\r\n if (!entries?.length) {\r\n return;\r\n }\r\n\r\n const entry = entries[0];\r\n const width = Math.round(entry.target.offsetWidth);\r\n const height = Math.round(entry.target.offsetHeight);\r\n\r\n if (\r\n !hasInitialized.current ||\r\n (checkWidth && prevSize.current.width !== width) ||\r\n (checkHeight && prevSize.current.height !== height)\r\n ) {\r\n hasInitialized.current = true;\r\n const newSize = { width, height };\r\n prevSize.current = newSize;\r\n\r\n if (callbackRef.current) {\r\n callbackRef.current(newSize, entry);\r\n }\r\n\r\n if (shouldReturnValues && !didUnmount.current) {\r\n setSize(newSize);\r\n }\r\n }\r\n });\r\n }\r\n\r\n const observer = observerRef.current;\r\n const el = ref.current;\r\n\r\n if (el) observer.observe(el);\r\n\r\n return () => {\r\n if (el) observer?.unobserve(el);\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [shouldReturnValues, ref.current, checkWidth, checkHeight]);\r\n\r\n const sizeValue = useMemo(() => {\r\n return { width: size.width, height: size.height };\r\n }, [size.width, size.height]);\r\n\r\n return shouldReturnValues ? sizeValue : null;\r\n}\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport * as styles from './Timeline.module.scss';\r\nimport DashedLine from '@components/DashedLine';\r\nimport useResizeObserver from '@hooks/useResizeObserver';\r\nimport classNames from 'classnames';\r\nimport { SHOW_TIMELINE_NUMBERS } from '@constants';\r\nimport { isNumber } from 'lodash';\r\n\r\nconst TimelineContent = React.forwardRef(\r\n (\r\n {\r\n children,\r\n className,\r\n isTimelineStart,\r\n topWrapper,\r\n startNumber,\r\n finalDot = null\r\n },\r\n ref\r\n ) => {\r\n return (\r\n \r\n {isTimelineStart && (\r\n \r\n )}\r\n {children}\r\n \r\n );\r\n }\r\n);\r\n\r\nexport default TimelineContent;\r\n\r\nlet finalDotRef = null;\r\nlet finalDotNumber = 0;\r\n\r\nconst Dot = React.forwardRef(\r\n (\r\n { color = 'teal', className, number, isMainTimeline = true, showOnMobile },\r\n ref\r\n ) => {\r\n const showNumber = SHOW_TIMELINE_NUMBERS && isNumber(number);\r\n const dotRef = useRef();\r\n const currentRef = ref ?? dotRef;\r\n\r\n // Store reference dot furthest down the page.\r\n // Used to calculate height of timeline\r\n useEffect(() => {\r\n if (isMainTimeline && isNumber(number) && number >= finalDotNumber) {\r\n finalDotNumber = number;\r\n finalDotRef = currentRef;\r\n }\r\n }, [isMainTimeline, number, currentRef]);\r\n\r\n return (\r\n \r\n {showNumber ? {number} : null}\r\n \r\n );\r\n }\r\n);\r\n\r\nfunction TimelineStart({ number, topWrapper, finalDot: _finalDot }) {\r\n const [height, setHeight] = useState(null);\r\n const finalDot = _finalDot !== undefined ? _finalDot : finalDotRef;\r\n const line = React.createRef();\r\n const { height: wrapperHeight } = useResizeObserver(topWrapper, {\r\n checkWidth: false\r\n });\r\n\r\n useEffect(() => {\r\n let lineHeight =\r\n !wrapperHeight || wrapperHeight <= 0 ? null : wrapperHeight;\r\n\r\n if (lineHeight) {\r\n lineHeight += finalDot?.current?.offsetTop ?? 82;\r\n lineHeight -= line.current?.parentElement?.offsetTop ?? 0;\r\n }\r\n\r\n setHeight(lineHeight);\r\n }, [wrapperHeight, line, finalDot]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport { TimelineContent, Dot };\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"timeline_content__kyk8d\";\nvar _3 = \"640px\";\nvar _4 = \"790px\";\nvar _5 = \"#057676\";\nvar _6 = \"timeline_dot__j+qrv\";\nvar _7 = \"timeline_gray__cl+qp\";\nvar _8 = \"#434343\";\nvar _9 = \"timeline_line__seq4t\";\nvar _a = \"79px\";\nvar _b = \"110px\";\nvar _c = \"72px\";\nvar _d = \"665px\";\nvar _e = \"timeline_number__3h9gi\";\nvar _f = \"timeline_showonmobile__yvahe\";\nvar _10 = \"timeline_start__yvmrj\";\nvar _11 = \"teal\";\nvar _12 = \"2\";\nvar _13 = \"#cdd3dc\";\nexport { _1 as \"body\", _2 as \"content\", _3 as \"controlsMobileWidth\", _4 as \"controlsStackedWidth\", _5 as \"darkTeal\", _6 as \"dot\", _7 as \"gray\", _8 as \"headline\", _9 as \"line\", _a as \"menuHeight\", _b as \"menuHeightLarge\", _c as \"menuHeightMobile\", _d as \"modalMobileWidth\", _e as \"number\", _f as \"showOnMobile\", _10 as \"start\", _11 as \"teal\", _12 as \"timelineStrokeWidth\", _13 as \"timelineTrackColor\" }\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgAlerts = function SvgAlerts(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n fill: \"none\",\n viewBox: \"0 0 33 33\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M26.201 16.455v3.967l1.553 2.166c.465.657.534 1.509.186 2.239s-1.044 1.192-1.833 1.192h-3.574a.4.4 0 0 1 .023.17c0 2.117-1.648 3.846-3.668 3.846-2.019 0-3.667-1.729-3.667-3.846l.012-.085q.01-.046.011-.085H11.67c-.789 0-1.485-.462-1.833-1.192a2.22 2.22 0 0 1 .186-2.239l1.555-2.19v-3.943c0-3.213 1.973-6.084 4.804-7.204v-.073c0-1.242.975-2.264 2.16-2.264h.672c1.184 0 2.159 1.022 2.159 2.264v.073c2.879 1.095 4.828 3.992 4.828 7.204\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n d: \"M24.068 17.798v-4.124c0-3.34-2.125-6.351-5.263-7.49v-.076a2.365 2.365 0 0 0-2.353-2.354h-.734a2.365 2.365 0 0 0-2.353 2.354v.076c-3.087 1.164-5.238 4.15-5.238 7.49v4.1L6.432 20.05a2.21 2.21 0 0 0-.203 2.328 2.22 2.22 0 0 0 1.999 1.24h3.896c0 .05-.025.126-.025.177a4.007 4.007 0 0 0 3.998 3.998 4.007 4.007 0 0 0 3.998-3.998c0-.077 0-.127-.026-.177h3.896c.86 0 1.62-.48 1.999-1.24a2.21 2.21 0 0 0-.203-2.328zm-9.64-10.222a.84.84 0 0 0 .606-.785v-.683c0-.38.304-.709.709-.709h.733c.38 0 .709.304.709.71v.682c0 .38.253.683.607.785a6.34 6.34 0 0 1 4.632 6.099v3.162H9.772v-3.162c0-2.835 1.923-5.34 4.655-6.1zm4.048 16.244a2.375 2.375 0 0 1-2.378 2.378 2.375 2.375 0 0 1-2.378-2.378c0-.076.025-.126.025-.177h4.707c0 .05.024.101.024.177m6.022-2.15a.58.58 0 0 1-.532.329H8.229a.58.58 0 0 1-.532-.33.54.54 0 0 1 .05-.606l1.873-2.48c.025-.026.025-.05.025-.076H22.55c.026.025.026.05.05.076l1.873 2.48c.178.253.077.506.026.607zM9.418 4.818c-.303-.354-.81-.38-1.164-.076a12 12 0 0 0-3.872 6.68c-.076.455.203.885.633.961.05 0 .1.026.152.026.38 0 .734-.279.81-.658a10.1 10.1 0 0 1 3.34-5.77.81.81 0 0 0 .101-1.163m14.524-.102a.834.834 0 0 0-1.164.076.834.834 0 0 0 .076 1.165c1.72 1.467 2.91 3.542 3.365 5.794.076.38.43.658.81.658.05 0 .1 0 .152-.026.456-.076.733-.506.658-.961a12.17 12.17 0 0 0-3.897-6.706\",\n className: \"icon-teal\"\n })));\n};\nexport default SvgAlerts;","var _path, _path2, _path3, _path4, _path5, _path6, _path7;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgApply = function SvgApply(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n fill: \"none\",\n className: \"apply\",\n viewBox: \"0 0 33 33\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M8.786 9.86a2.8 2.8 0 0 1 2.8-2.8h14.707a2.8 2.8 0 0 1 2.8 2.8v18.793a2.8 2.8 0 0 1-2.8 2.8H11.586a2.8 2.8 0 0 1-2.8-2.8z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M18.124 11.328c0 4.272-3.306 7.736-7.383 7.736S3.36 15.6 3.36 11.328s3.305-7.736 7.382-7.736 7.383 3.463 7.383 7.736Z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n fillRule: \"evenodd\",\n d: \"M23.158 5.124H8.45a1.38 1.38 0 0 0-1.38 1.38v18.793c0 .762.618 1.38 1.38 1.38h14.707a1.38 1.38 0 0 0 1.38-1.38V6.504a1.38 1.38 0 0 0-1.38-1.38ZM8.45 3.704a2.8 2.8 0 0 0-2.8 2.8v18.793a2.8 2.8 0 0 0 2.8 2.8h14.707a2.8 2.8 0 0 0 2.8-2.8V6.504a2.8 2.8 0 0 0-2.8-2.8z\",\n className: \"icon-teal\",\n clipRule: \"evenodd\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n d: \"M9.156 22.195a.73.73 0 0 1 .73-.73h6.524a.73.73 0 1 1 0 1.461H9.887a.73.73 0 0 1-.73-.731Zm0-4.01a.73.73 0 0 1 .73-.73H20.83a.73.73 0 1 1 0 1.461H9.887a.73.73 0 0 1-.73-.731Zm-2.807-4.01a.73.73 0 0 1 .73-.73h11.865a.73.73 0 0 1 0 1.461H7.08a.73.73 0 0 1-.73-.73Zm2.807-4.01a.73.73 0 0 1 .73-.73h11.836a.73.73 0 0 1 0 1.461H9.887a.73.73 0 0 1-.73-.73Z\",\n className: \"icon-teal\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14.766 7.873a6.984 6.984 0 1 1-13.966 0 6.984 6.984 0 1 1 13.966 0\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n fillRule: \"evenodd\",\n d: \"M7.783 13.438a5.564 5.564 0 0 0 5.563-5.565 5.564 5.564 0 1 0-5.563 5.565m0 1.42a6.984 6.984 0 0 0 6.983-6.985 6.984 6.984 0 1 0-13.966 0 6.984 6.984 0 0 0 6.983 6.985\",\n className: \"icon-teal\",\n clipRule: \"evenodd\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n d: \"M10.144 7.149c.265-.341.237-.836-.059-1.115a.75.75 0 0 0-1.064.062l-1.83 2.198-.887-.929a.725.725 0 0 0-1.063 0 .81.81 0 0 0 0 1.115l1.446 1.516a.7.7 0 0 0 .532.216h.03a.63.63 0 0 0 .532-.278z\",\n className: \"icon-teal\"\n })));\n};\nexport default SvgApply;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgCalendar = function SvgCalendar(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n fill: \"none\",\n viewBox: \"0 0 33 33\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M7.72 10.319c0-1.203.947-2.178 2.117-2.178h18.146c1.17 0 2.117.975 2.117 2.178v18.678c0 1.203-.948 2.178-2.117 2.178H9.837c-1.17 0-2.118-.975-2.118-2.178V10.319Z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M13.695 5.685c.415 0 .752.347.752.774v3.853a.763.763 0 0 1-.752.773.763.763 0 0 1-.752-.773V6.459c0-.427.337-.774.752-.774m10.43 0c.415 0 .751.347.751.774v3.853a.763.763 0 0 1-.752.773.763.763 0 0 1-.751-.773V6.459c0-.427.336-.774.752-.774\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n d: \"M8.863 17.687c0-.422.343-.765.765-.765h1.993a.764.764 0 0 1 0 1.529H9.628a.764.764 0 0 1-.765-.764m5.529 0c0-.422.342-.765.764-.765h1.994a.764.764 0 0 1 0 1.529h-1.994a.764.764 0 0 1-.764-.764m5.528 0c0-.422.343-.765.765-.765h1.993a.764.764 0 0 1 0 1.529h-1.993a.764.764 0 0 1-.765-.764M8.863 22.09c0-.422.343-.765.765-.765h1.993a.764.764 0 0 1 0 1.529H9.628a.764.764 0 0 1-.765-.764m5.529 0c0-.422.342-.765.764-.765h1.994a.764.764 0 0 1 0 1.529h-1.994a.764.764 0 0 1-.764-.764m5.528 0c0-.422.343-.765.765-.765h1.993a.764.764 0 0 1 0 1.529h-1.993a.764.764 0 0 1-.765-.764\",\n className: \"icon-teal\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n fillRule: \"evenodd\",\n d: \"M10.85 3.698c.423 0 .765.343.765.765v1.074h9.076V4.463a.764.764 0 1 1 1.528 0v1.074h2.313a3.014 3.014 0 0 1 3.014 3.014v16.743a3.014 3.014 0 0 1-3.014 3.014H7.774a3.014 3.014 0 0 1-3.014-3.014V8.551a3.014 3.014 0 0 1 3.014-3.014h2.312V4.463c0-.422.342-.765.765-.765Zm9.84 3.367v1.207a.764.764 0 1 0 1.53 0V7.065h2.312c.82 0 1.485.666 1.485 1.486v3.161H6.288v-3.16c0-.821.666-1.487 1.486-1.487h2.312v1.207a.764.764 0 1 0 1.529 0V7.065h9.076ZM6.289 13.241v12.053c0 .82.666 1.486 1.486 1.486h16.758c.82 0 1.485-.666 1.485-1.486V13.241z\",\n className: \"icon-teal\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgCalendar;","var _circle, _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgCall = function SvgCall(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n viewBox: \"0 0 33 33\"\n }, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 17.88,\n cy: 17.73,\n r: 12.16,\n fill: \"#ebf7f7\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n fillRule: \"evenodd\",\n d: \"m9.9 14.05 6.49 6.63a2.51 2.51 0 0 0 3.48-.16c.18-.18.45-.5.66-.76l-2.46-2.52-.5.52A.83.83 0 0 1 17 18a.82.82 0 0 1-.57-.24L12.72 14a.79.79 0 0 1 0-1.12l.53-.55-2.47-2.54a8 8 0 0 0-.72.66 2.59 2.59 0 0 0-.16 3.6\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n stroke: \"#fff\",\n strokeMiterlimit: 10,\n strokeWidth: 0.1,\n d: \"M15 3a12.44 12.44 0 0 0 0 24.88 12.3 12.3 0 0 0 3.47-.5.8.8 0 1 0-.47-1.54 11 11 0 0 1-3 .43 10.83 10.83 0 1 1 10.75-10.83A10.86 10.86 0 0 1 22.58 23l-1.44-1.44A8.5 8.5 0 0 0 22.3 20a.81.81 0 0 0-.15-.92l-3.51-3.58a.8.8 0 0 0-.57-.24.8.8 0 0 0-.58.25L17 16l-2.57-2.63.53-.54a.81.81 0 0 0 0-1.12l-3.52-3.54A.81.81 0 0 0 10.5 8a10 10 0 0 0-1.6 1.32 4.21 4.21 0 0 0-.15 5.85l6.49 6.64A3.82 3.82 0 0 0 18 23a4.3 4.3 0 0 0 1.85-.46L22 24.66s.08.05.11.08a1 1 0 0 0 .14.09h.42a1 1 0 0 0 .16 0l.26-.16a12.53 12.53 0 0 0 4.21-9.22A12.41 12.41 0 0 0 15 3zm1.38 17.68L9.9 14.05a2.59 2.59 0 0 1 .16-3.6 8 8 0 0 1 .72-.66l2.47 2.52-.53.55a.79.79 0 0 0 0 1.12l3.7 3.78a.81.81 0 0 0 1.15 0l.5-.52 2.46 2.52c-.21.26-.48.58-.66.76a2.51 2.51 0 0 1-3.48.16z\",\n className: \"icon-teal\"\n })));\n};\nexport default SvgCall;","var _path, _path2, _circle, _circle2, _circle3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgChat = function SvgChat(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n fill: \"none\",\n viewBox: \"0 0 33 33\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n d: \"M4.045 23.821V25.2a2.325 2.325 0 0 0 2.325 2.325h1.916c.102.01.184.09.184.193v2.675a.2.2 0 0 0 .322.16l3.999-2.996a.2.2 0 0 1 .098-.032l6.725-.009a2.324 2.324 0 0 0 2.324-2.325v-3.314h.644l5.625 3.867v-5.511h1.441a2.74 2.74 0 0 0 2.736-2.736V7.611a2.74 2.74 0 0 0-2.736-2.736H14.525a2.74 2.74 0 0 0-2.735 2.736v7.212H6.498a2.453 2.453 0 0 0-2.453 2.453z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n fillRule: \"evenodd\",\n d: \"M17.36 21.895v-2.86h1.41v2.86a2.377 2.377 0 0 1-2.376 2.377h-7.09a.2.2 0 0 0-.101.033l-4.088 3.063a.205.205 0 0 1-.33-.163v-2.736a.2.2 0 0 0-.187-.197H3.484a2.377 2.377 0 0 1-2.378-2.377v-7.942a2.376 2.376 0 0 1 2.377-2.376H6.84v1.41H3.483a.967.967 0 0 0-.966.966v7.942c0 .532.433.967.967.967h1.184l.07.006a1.61 1.61 0 0 1 1.458 1.601v.327l2.16-1.62a1.6 1.6 0 0 1 .782-.304l.083-.01h7.173a.967.967 0 0 0 .965-.967zM27.1 1.72a2.8 2.8 0 0 1 2.797 2.797v9.693a2.8 2.8 0 0 1-2.796 2.797h-1.61v3.953l-5.277-3.953h-8.575a2.8 2.8 0 0 1-2.796-2.797V4.517A2.8 2.8 0 0 1 11.64 1.72h15.462zm1.387 12.49V4.517c0-.765-.623-1.386-1.386-1.386H11.639c-.765 0-1.385.621-1.385 1.386v9.693c0 .765.62 1.387 1.385 1.387h9.045l3.397 2.544v-2.544h3.02c.763 0 1.386-.622 1.386-1.387\",\n className: \"icon-teal\",\n clipRule: \"evenodd\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 16.006,\n cy: 9.245,\n r: 1.064,\n fill: \"teal\",\n className: \"icon-teal\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 19.18,\n cy: 9.245,\n r: 1.064,\n fill: \"teal\",\n className: \"icon-teal\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 22.353,\n cy: 9.245,\n r: 1.064,\n fill: \"teal\",\n className: \"icon-teal\"\n })));\n};\nexport default SvgChat;","var _path, _path2, _path3, _path4;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgConsultation = function SvgConsultation(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 33,\n height: 33,\n fill: \"none\",\n className: \"consultation\",\n viewBox: \"0 0 33 33\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF7F7\",\n fillRule: \"evenodd\",\n d: \"M17.912 5.91c.908 0 1.706.461 2.157 1.156h1.023c1.074 0 1.99.657 2.348 1.579h1.871c1.48 0 2.681 1.167 2.681 2.607v17.816c0 1.44-1.2 2.607-2.681 2.607H10.514c-1.481 0-2.681-1.167-2.681-2.607V11.252c0-1.44 1.2-2.607 2.68-2.607h1.872a2.51 2.51 0 0 1 2.348-1.579h1.022a2.57 2.57 0 0 1 2.157-1.156\",\n clipRule: \"evenodd\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n d: \"M13.527 11.5c0-.373.302-.675.675-.675h5.972a.675.675 0 1 1 0 1.35h-5.972a.675.675 0 0 1-.675-.675m-2.087 0a1.158 1.158 0 1 1-2.317 0 1.158 1.158 0 0 1 2.317 0m2.087 5.317c0-.373.302-.676.675-.676h5.972a.675.675 0 0 1 0 1.351h-5.972a.675.675 0 0 1-.675-.675m-2.087 0a1.158 1.158 0 1 1-2.317 0 1.158 1.158 0 0 1 2.317 0m2.087 5.316c0-.373.302-.675.675-.675h4.35a.675.675 0 1 1 0 1.35h-4.35a.675.675 0 0 1-.675-.675m-2.087 0a1.158 1.158 0 1 1-2.317 0 1.158 1.158 0 0 1 2.317 0\",\n className: \"icon-teal\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"teal\",\n fillRule: \"evenodd\",\n d: \"M15.026 1.332c.948 0 1.78.495 2.252 1.242h1.068a2.62 2.62 0 0 1 2.452 1.695h1.954a2.8 2.8 0 0 1 2.8 2.8V26.2a2.8 2.8 0 0 1-2.8 2.8H7.3a2.8 2.8 0 0 1-2.8-2.8V7.069a2.8 2.8 0 0 1 2.8-2.8h1.954a2.62 2.62 0 0 1 2.452-1.695h1.068a2.66 2.66 0 0 1 2.252-1.242m-5.94 4.357H7.3a1.38 1.38 0 0 0-1.38 1.38V26.2c0 .762.618 1.38 1.38 1.38h15.452a1.38 1.38 0 0 0 1.38-1.38V7.069a1.38 1.38 0 0 0-1.38-1.38h-1.786v.02a1.62 1.62 0 0 1-1.62 1.62h-8.64a1.62 1.62 0 0 1-1.62-1.62zm10.46 0v.02a.2.2 0 0 1-.2.2h-8.64a.2.2 0 0 1-.2-.2v-.02zm-.435-1.42h-8.17c.208-.172.475-.275.765-.275h2.078a1.242 1.242 0 1 1 2.484 0h2.078c.29 0 .557.103.765.275\",\n className: \"icon-teal\",\n clipRule: \"evenodd\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M10.506 5.194a1.2 1.2 0 0 1 1.2-1.2h6.64a1.2 1.2 0 0 1 1.2 1.2v.516a.2.2 0 0 1-.2.2h-8.64a.2.2 0 0 1-.2-.2z\"\n })));\n};\nexport default SvgConsultation;","import React from 'react';\r\nimport * as Icon from './icons';\r\nimport * as styles from './ActionButton.module.scss';\r\nimport classNames from 'classnames';\r\nimport { upperFirst } from 'lodash';\r\n\r\nexport default function ActionButton({\r\n className,\r\n icon,\r\n href,\r\n children,\r\n ...restProps\r\n}) {\r\n const Tag = href ? 'a' : 'button';\r\n const IconComponent = Icon[upperFirst(icon)] ?? null;\r\n\r\n return !children ? null : (\r\n \r\n {IconComponent && (\r\n \r\n )}\r\n {children}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"640px\";\nvar _3 = \"790px\";\nvar _4 = \"#057676\";\nvar _5 = \"#434343\";\nvar _6 = \"actionbutton_icon__0t1hy\";\nvar _7 = \"79px\";\nvar _8 = \"110px\";\nvar _9 = \"72px\";\nvar _a = \"665px\";\nvar _b = \"teal\";\nvar _c = \"2\";\nvar _d = \"#cdd3dc\";\nvar _e = \"actionbutton_wrapper__hervo\";\nexport { _1 as \"body\", _2 as \"controlsMobileWidth\", _3 as \"controlsStackedWidth\", _4 as \"darkTeal\", _5 as \"headline\", _6 as \"icon\", _7 as \"menuHeight\", _8 as \"menuHeightLarge\", _9 as \"menuHeightMobile\", _a as \"modalMobileWidth\", _b as \"teal\", _c as \"timelineStrokeWidth\", _d as \"timelineTrackColor\", _e as \"wrapper\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"button_arrow__q3fzb\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"button_button__uastl\";\nvar _4 = \"button_close__tuybx\";\nvar _5 = \"button_content__sazer\";\nvar _6 = \"640px\";\nvar _7 = \"790px\";\nvar _8 = \"#057676\";\nvar _9 = \"button_disabled__g4+gk\";\nvar _a = \"#434343\";\nvar _b = \"button_icon__rdpir\";\nvar _c = \"79px\";\nvar _d = \"110px\";\nvar _e = \"72px\";\nvar _f = \"button_minimal__+g14h\";\nvar _10 = \"665px\";\nvar _11 = \"button_outline__+xuda\";\nvar _12 = \"button_primary__xziw9\";\nvar _13 = \"teal\";\nvar _14 = \"2\";\nvar _15 = \"#cdd3dc\";\nexport { _1 as \"arrow\", _2 as \"body\", _3 as \"button\", _4 as \"close\", _5 as \"content\", _6 as \"controlsMobileWidth\", _7 as \"controlsStackedWidth\", _8 as \"darkTeal\", _9 as \"disabled\", _a as \"headline\", _b as \"icon\", _c as \"menuHeight\", _d as \"menuHeightLarge\", _e as \"menuHeightMobile\", _f as \"minimal\", _10 as \"modalMobileWidth\", _11 as \"outline\", _12 as \"primary\", _13 as \"teal\", _14 as \"timelineStrokeWidth\", _15 as \"timelineTrackColor\" }\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgReset = function SvgReset(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 17 17\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"m3.6 3.5-.4.4V2.8c0-.5-.4-.8-.8-.8s-.8.3-.8.8v3c0 .2.1.4.2.6.2.1.4.2.6.2h3.1c.2 0 .4-.1.6-.2.1-.1.1-.4.2-.6 0-.4-.4-.8-.8-.8H4.3l.4-.4c2.1-2.1 5.6-2.1 7.6 0s2.1 5.6 0 7.6c-2.1 2.1-5.6 2.1-7.6 0-.9-.9-1.5-2.2-1.6-3.5 0-.4-.4-.8-.8-.7-.4 0-.8.4-.7.8.1 1.7.8 3.3 2 4.5 2.7 2.7 7.2 2.8 9.9 0s2.8-7.2 0-9.9C10.7.8 6.3.8 3.6 3.5\"\n })));\n};\nexport default SvgReset;","import React, { useMemo } from 'react';\r\nimport classNames from 'classnames';\r\nimport * as styles from './Tooltip.module.scss';\r\nimport { uniqueId, isNumber } from 'lodash';\r\n\r\nconst inputTags = ['button', 'input', 'select'];\r\n\r\nexport default React.memo(function Tooltip({\r\n id,\r\n className,\r\n inputId,\r\n wrapperClassName,\r\n children,\r\n text = '',\r\n position = 'bottom',\r\n forceHidden,\r\n forceVisible,\r\n addAriaTag = true,\r\n delay,\r\n offset,\r\n ...restProps\r\n}) {\r\n const tooltipId = useMemo(() => {\r\n return id ?? uniqueId('tooltip-');\r\n }, [id]);\r\n\r\n let hasAddedAriaTag = false;\r\n\r\n const style = {\r\n transitionDelay: isNumber(delay) ? `${delay}ms` : delay\r\n };\r\n\r\n if (offsetProperties.hasOwnProperty(position)) {\r\n style[offsetProperties[position]] = offset;\r\n }\r\n\r\n const content =\r\n !text || !addAriaTag\r\n ? children\r\n : React.Children.map(children, child => {\r\n if (!hasAddedAriaTag && React.isValidElement(child)) {\r\n if (\r\n (inputId && child.props.id === inputId) ||\r\n (!inputId && inputTags.includes(child.type))\r\n ) {\r\n hasAddedAriaTag = true;\r\n\r\n return React.cloneElement(child, {\r\n 'aria-describedby': tooltipId\r\n });\r\n }\r\n }\r\n\r\n return child;\r\n });\r\n\r\n return (\r\n \r\n {content}\r\n {text && (\r\n \r\n
\r\n forceHidden: {String(forceHidden)}, forceVisible:{' '}\r\n {String(forceVisible)}, position: {String(position)}\r\n
\r\n {text}\r\n
\r\n
\r\n )}\r\n \r\n );\r\n});\r\n\r\nconst offsetProperties = {\r\n bottom: 'marginTop',\r\n top: 'marginBottom',\r\n left: 'marginRight',\r\n right: 'marginLeft'\r\n};\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"tooltip_background__1vbq8\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"640px\";\nvar _4 = \"790px\";\nvar _5 = \"#057676\";\nvar _6 = \"#434343\";\nvar _7 = \"tooltip_hidden__thcpk\";\nvar _8 = \"79px\";\nvar _9 = \"110px\";\nvar _a = \"72px\";\nvar _b = \"665px\";\nvar _c = \"teal\";\nvar _d = \"2\";\nvar _e = \"#cdd3dc\";\nvar _f = \"tooltip_tooltip__jpjge\";\nvar _10 = \"tooltip_visible__fo0vt\";\nvar _11 = \"tooltip_wrapper__r-6co\";\nexport { _1 as \"background\", _2 as \"body\", _3 as \"controlsMobileWidth\", _4 as \"controlsStackedWidth\", _5 as \"darkTeal\", _6 as \"headline\", _7 as \"hidden\", _8 as \"menuHeight\", _9 as \"menuHeightLarge\", _a as \"menuHeightMobile\", _b as \"modalMobileWidth\", _c as \"teal\", _d as \"timelineStrokeWidth\", _e as \"timelineTrackColor\", _f as \"tooltip\", _10 as \"visible\", _11 as \"wrapper\" }\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgCancel = function SvgCancel(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 14,\n height: 14,\n fill: \"none\",\n viewBox: \"0 0 14 14\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#787878\",\n d: \"M7 .35A6.656 6.656 0 0 0 .35 7 6.656 6.656 0 0 0 7 13.65 6.656 6.656 0 0 0 13.65 7 6.656 6.656 0 0 0 7 .35m0 11.802A5.156 5.156 0 0 1 1.848 7 5.156 5.156 0 0 1 7 1.848 5.156 5.156 0 0 1 12.152 7 5.156 5.156 0 0 1 7 12.152\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#787878\",\n d: \"M9.439 4.562a.753.753 0 0 0-1.066 0L7 5.934 5.626 4.562a.753.753 0 0 0-1.065 1.064l1.374 1.372L4.56 8.37a.75.75 0 0 0 0 1.065c.14.14.336.224.533.224.196 0 .378-.07.532-.224L7 8.062l1.374 1.373c.14.14.336.224.532.224s.379-.07.533-.224a.75.75 0 0 0 0-1.065L8.066 6.998l1.373-1.372a.75.75 0 0 0 0-1.064\"\n })));\n};\nexport default SvgCancel;","import React from 'react';\r\nimport * as styles from './Button.module.scss';\r\nimport classNames from 'classnames';\r\nimport Tooltip from '@components/Tooltip';\r\nimport { Cancel, Reset } from './icons';\r\n\r\nconst icons = {\r\n cancel: Cancel,\r\n reset: Reset\r\n};\r\n\r\nexport default function Button({\r\n children,\r\n className,\r\n href,\r\n showArrow: _showArrow,\r\n theme = 'primary',\r\n style = {},\r\n contentStyle = {},\r\n contentClassName,\r\n icon,\r\n iconClassName,\r\n color,\r\n fontSize,\r\n isClose,\r\n closeTooltipText = 'Close',\r\n disabled,\r\n ...restProps\r\n}) {\r\n const showArrow = theme === 'primary' && _showArrow;\r\n const props = {\r\n ...restProps,\r\n style: { ...style, color, fontSize },\r\n disabled: !!disabled,\r\n // tabIndex: disabled ? 0 : -1,\r\n className: classNames('calculator-button', styles.button, {\r\n [className]: className && (!isClose || !closeTooltipText),\r\n [styles.arrow]: showArrow,\r\n [styles[theme]]: theme,\r\n [styles.close]: isClose,\r\n [styles.disabled]: disabled\r\n })\r\n };\r\n\r\n const Icon = icons[icon];\r\n\r\n const content = (\r\n \r\n {Icon && }\r\n {children}\r\n \r\n );\r\n\r\n const component = (\r\n <>\r\n {href ? (\r\n \r\n {content}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n\r\n if (isClose && closeTooltipText) {\r\n return (\r\n \r\n {component}\r\n \r\n );\r\n }\r\n\r\n return component;\r\n}\r\n","import React from 'react';\r\nimport { formatPhoneNumber } from '@helpers';\r\n\r\nexport default function PhoneNumber({\r\n component: Tag = 'a',\r\n num = '',\r\n ...rest\r\n}) {\r\n const displayNum = formatPhoneNumber(num);\r\n\r\n if (!displayNum) {\r\n return null;\r\n }\r\n\r\n const linkNum = num.replace(\r\n /(\\+1)?[\\s-]?\\(?(\\d{3})\\)?[\\s-]?(\\d{3})[\\s-]??(\\d{4})/,\r\n '+1-$2-$3-$4'\r\n );\r\n\r\n return (\r\n \r\n {displayNum}\r\n \r\n );\r\n}\r\n","var _path, _path2, _path3, _path4, _circle, _circle2, _path5, _path6;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgRefinance = function SvgRefinance(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 74,\n height: 74,\n fill: \"none\",\n viewBox: \"0 0 74 74\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E3EEF1\",\n d: \"M65.76 39.373h-9.043l-.556-7.853-2.459-4.046 12.376-.08 2.38-1.031 2.063 1.825-.476 7.774zM18.4 43.102l1.03 2.697-9.837.476-3.57.873-2.22.08-.318-8.965 3.966-3.49h9.838l1.11 8.33z\",\n className: \"icon-color-2\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFF9F9\",\n fillRule: \"evenodd\",\n d: \"M39.096 56.82c10.02-1.049 17.83-9.521 17.83-19.818A19.86 19.86 0 0 0 51.33 23.16l-5.793.111-.837 3.85-10.868-9.794c-9.5 1.517-16.76 9.75-16.76 19.676 0 5.32 2.085 10.152 5.481 13.725h6.409l.167-4.185 9.966 10.277z\",\n className: \"icon-color-1\",\n clipRule: \"evenodd\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M3.582 58.1V48.043l4.47 2.235 20.823.406.305-3.961 11.072 9.751-11.275 10.158-.203-4.368-20.418.305-4.774-4.47zm62.285-34.12 3.972 3.891.567-9.728-1.216-3.648-4.053-2.919-19.943-.08-.162-4.297-11.35 10.133 11.27 10.053.323-4.46z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#788D94\",\n d: \"M43.583 32.049 32.05 43.583l-1.632-1.632L41.95 30.417z\",\n className: \"icon-stroke-fill\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 43.267,\n cy: 43.267,\n r: 3.038,\n fill: \"#fff\",\n stroke: \"#788D94\",\n strokeWidth: 1.846,\n className: \"icon-stroke\",\n transform: \"rotate(-180 43.267 43.267)\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 30.733,\n cy: 31.233,\n r: 3.038,\n fill: \"#fff\",\n stroke: \"#788D94\",\n strokeWidth: 1.846,\n className: \"icon-stroke\",\n transform: \"rotate(-180 30.733 31.233)\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#788D94\",\n d: \"M10.47 63.53h17.302v3.46a1.153 1.153 0 0 0 1.923.86L41.23 57.469c.067-.06.104-.142.156-.214 8.406-1.802 14.695-8.483 16.079-16.79l7.218-.004a6.926 6.926 0 0 0 6.92-6.92V18.546c0-4.452-3.622-8.074-8.074-8.074H46.227v-3.46c0-.457-.269-.869-.684-1.056a1.15 1.15 0 0 0-1.243.199l-11.534 10.38c-.067.06-.104.142-.156.214-8.406 1.802-14.695 8.483-16.079 16.791H9.316a6.926 6.926 0 0 0-6.92 6.92v14.995c0 4.453 3.621 8.075 8.074 8.075m54.864-38.52c.21.101.415.213.597.317.245.147.49.294.715.473.095.075.179.159.27.237a4.6 4.6 0 0 1-2.234.582h-9.706c-.12-.207-.254-.407-.38-.611a20 20 0 0 0-1.168-1.695h8.948c1 0 1.998.233 2.958.697m3.962 8.53a4.62 4.62 0 0 1-4.614 4.614h-6.961c.029-.404.04-.782.04-1.154 0-2.82-.565-5.55-1.632-8.074h8.553a6.83 6.83 0 0 0 3.709-1.09 6.85 6.85 0 0 1 .905 3.397zM45.074 12.778h18.455a5.773 5.773 0 0 1 5.767 5.767v6.592c-.046-.055-.11-.098-.158-.15a10 10 0 0 0-1.064-1.003 10 10 0 0 0-.966-.643 11 11 0 0 0-.773-.41c-1.278-.614-2.61-.925-3.96-.925H45.074c-.637 0-1.153.516-1.153 1.153v2.024l-8.657-7.791L43.92 9.6v2.024c0 .637.516 1.153 1.153 1.153zm-11.581 6.125 10.808 9.73c.098.089.21.152.329.201.037.015.075.023.112.035q.13.04.263.049c.023-.003.046.009.069.009.017 0 .034-.012.052-.012.14-.006.282-.029.418-.09a1.15 1.15 0 0 0 .683-1.052v-3.46h4.156c.08.083.155.167.236.253q.353.387.68.79.21.252.407.51c.176.232.337.471.502.71q.456.661.85 1.361c.078.139.165.274.24.416a22 22 0 0 1 .623 1.306c.141.326.274.652.395.986.103.286.207.574.297.865a19 19 0 0 1 .4 1.531c.047.21.096.421.136.632q.12.662.19 1.338.025.229.044.461c.04.505.072 1.015.072 1.529 0 .41-.026.81-.052 1.21-.023.306-.05.615-.09.961v.009a18.34 18.34 0 0 1-14.807 15.917l-10.808-9.73a1.157 1.157 0 0 0-1.926.86v3.46h-4.156q-.118-.125-.236-.254a18 18 0 0 1-.681-.79 14 14 0 0 1-.407-.51c-.176-.231-.337-.47-.501-.71a18 18 0 0 1-.85-1.36c-.079-.14-.165-.275-.24-.416a22 22 0 0 1-.623-1.31 17 17 0 0 1-.395-.983 18 18 0 0 1-.297-.865 18 18 0 0 1-.4-1.534c-.047-.207-.096-.415-.134-.622q-.12-.668-.19-1.344-.024-.229-.043-.462A18 18 0 0 1 18.544 37c0-.41.026-.81.052-1.211.023-.306.049-.614.09-.96v-.009a18.34 18.34 0 0 1 14.807-15.917M8.665 48.99a9 9 0 0 1-.597-.318 7 7 0 0 1-.715-.472c-.096-.075-.18-.159-.271-.237a4.6 4.6 0 0 1 2.234-.582h9.706c.121.207.254.406.38.611.16.254.318.508.488.753.22.32.444.637.68.942h-8.947c-1 0-1.998-.233-2.959-.697zm-3.962-8.53a4.62 4.62 0 0 1 4.613-4.614h6.961c-.028.404-.04.781-.04 1.153 0 2.82.565 5.551 1.632 8.075H9.316c-1.326 0-2.607.38-3.708 1.09a6.85 6.85 0 0 1-.906-3.397zm0 8.403c.046.055.11.098.158.15.335.36.686.703 1.064 1.003.297.234.623.436.966.643q.376.218.773.41a9.1 9.1 0 0 0 3.96.925h17.301c.638 0 1.154-.516 1.154-1.153v-2.024l8.657 7.791-8.657 7.792v-2.024c0-.637-.516-1.154-1.154-1.154H10.47a5.773 5.773 0 0 1-5.767-5.767z\",\n className: \"icon-stroke-fill\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#C5CFD5\",\n strokeLinecap: \"round\",\n strokeWidth: 2,\n d: \"m66.823 52.512-4.295-2.362m.917 12.694-6.004-5.62m-4.613 9.443-2.026-4.454M7.177 21.488l4.295 2.362m-.917-12.694 6.004 5.62m4.613-9.443 2.026 4.454\",\n className: \"icon-color-3\"\n })));\n};\nexport default SvgRefinance;","var _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _path9, _path10, _path11, _path12, _path13, _path14, _path15, _path16, _path17;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPurchase = function SvgPurchase(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 74,\n height: 74,\n fill: \"none\",\n viewBox: \"0 0 74 74\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E5EDF0\",\n d: \"M12.138 9.742h49.455v6.761H12.138z\",\n className: \"icon-color-4\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M7.054 17.073h60.134v3.528H7.054z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DBF1F1\",\n d: \"M12.137 20.031h49.832v41.971H12.137z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M12.821 20.031h48.772v41.617H12.821z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EFF9F9\",\n d: \"M12.821 41.319h48.772v20.329H12.821z\",\n className: \"icon-color-1\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#F7FCFC\",\n d: \"M31.756 20.646H61.97v14.027H31.756z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#C5CFD5\",\n strokeLinecap: \"round\",\n strokeWidth: 1.347,\n d: \"m48.611 25.894-3.574 3.627m-.817-3.878-3.574 3.627m12.356-3.125-3.574 3.627\",\n className: \"icon-color-3\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#E5EDF0\",\n d: \"M48.241 34.745h4.609v33.55h-4.609z\",\n className: \"icon-color-4\"\n })), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#CFDADF\",\n d: \"M31.898 45.428h11.085v16.22H31.898z\",\n className: \"icon-color-5\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M61.91 38.431H39.197l-.297 8.63h22.713l5.554-4.464z\"\n })), _path11 || (_path11 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#788D94\",\n fillRule: \"evenodd\",\n d: \"m62.715 47.21 4.89-3.502a1.2 1.2 0 0 0 .05-1.914l-5-3.993h.06V21.46h4.07a1.5 1.5 0 0 0 1.5-1.5v-2.49a1.5 1.5 0 0 0-1.5-1.5h-4.07v-5.655a1.5 1.5 0 0 0-1.5-1.5H12.97a1.5 1.5 0 0 0-1.5 1.5v5.655H7.42a1.5 1.5 0 0 0-1.5 1.5v2.49a1.5 1.5 0 0 0 1.5 1.5h4.05v39.404H6.845v1.85h40.44v4.81h-4.64v1.85H58.46v-1.85h-4.61v-4.81h13.51v-1.85h-4.645zm-1.382-1.287H39.84v-6.746h21.57l4.21 3.364a.2.2 0 0 1-.008.319zM52 37.127a.2.2 0 0 1-.2.2h-2.465a.2.2 0 0 1-.2-.2v-1.57c0-.11.09-.2.2-.2H51.8c.11 0 .2.09.2.2zm1.85-.682h7.015v.882H53.85zm7.015-1.85H53.85c0-.6-.487-1.088-1.088-1.088h-4.389c-.6 0-1.088.487-1.088 1.088H32.699V21.46h28.166zm-13.58 1.85v.882h-9.296v3.313H13.32V21.46h17.53v14.985zM41.72 47.774v13.091H32.7V46.187h5.29v1.587h3.731zM13.32 10.87c0-.11.09-.2.2-.2h47.145c.11 0 .2.09.2.2v5.104H13.32zm-5.35 8.74a.2.2 0 0 1-.2-.2v-1.39c0-.11.09-.2.2-.2h58.265c.11 0 .2.09.2.2v1.39a.2.2 0 0 1-.2.2zm5.35 22.88h24.669v1.85h-7.14v16.525h-17.53zm30.25 18.375V47.774h3.715v13.091zm5.565 6.66V47.774h2.864v19.751zm11.73-19.751v13.091h-7.016V47.773z\",\n className: \"icon-stroke-fill\",\n clipRule: \"evenodd\"\n })), _path12 || (_path12 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n stroke: \"#788D94\",\n strokeWidth: 1.6,\n d: \"M17.156 25.1h9.9v11.909h-9.9z\",\n className: \"icon-stroke\"\n })), _path13 || (_path13 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF5F6\",\n d: \"m27.29 30.442-10.138 2.145.012 4.304h10.125z\"\n })), _path14 || (_path14 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#788D94\",\n strokeWidth: 1.6,\n d: \"M17.156 25.1h9.9v11.909h-9.9z\",\n className: \"icon-stroke\"\n })), _path15 || (_path15 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M16.356 45.511h11.5v12.335h-11.5z\"\n })), _path16 || (_path16 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#EBF5F6\",\n d: \"m27.29 50.288-10.138 2.145.012 4.304h10.125z\"\n })), _path17 || (_path17 = /*#__PURE__*/React.createElement(\"path\", {\n stroke: \"#788D94\",\n strokeWidth: 1.6,\n d: \"M17.156 46.311h9.9v10.735h-9.9z\",\n className: \"icon-stroke\"\n })));\n};\nexport default SvgPurchase;","import React from 'react';\r\nimport * as styles from './LoanPurposeButtons.module.scss';\r\nimport useInitialValue from '@hooks/useInitialValue';\r\nimport classNames from 'classnames';\r\nimport Refinance from './refinance.svg';\r\nimport Purchase from './purchase.svg';\r\nimport { loanPurpose as loanPurposeType } from '@enums';\r\n\r\nexport default React.memo(function LoanPurposeButtons({\r\n loanPurpose = 'refinance',\r\n labelId,\r\n setState\r\n}) {\r\n loanPurpose = loanPurpose.toLowerCase();\r\n const defaultValue = useInitialValue(loanPurpose);\r\n\r\n const components = [\r\n \r\n Refinance\r\n ,\r\n \r\n Purchase\r\n \r\n ];\r\n\r\n // Display the default type first\r\n if (defaultValue === loanPurposeType.PURCHASE) {\r\n components.reverse();\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {components}\r\n \r\n );\r\n});\r\n\r\nfunction LoanPurpose({ type, isActive, children, setState }) {\r\n return (\r\n setState(type, 'loanPurpose')}\r\n aria-pressed={isActive}\r\n >\r\n \r\n {type === 'refinance' ? : }\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","import { useRef, useEffect } from 'react';\r\n\r\nexport default function useInitialValue(value) {\r\n const initialValue = useRef(value);\r\n\r\n useEffect(() => {\r\n initialValue.current = value;\r\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n return initialValue.current;\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"loanpurposebuttons_active__pcq7g\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"loanpurposebuttons_button__ykipb\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"#434343\";\nvar _8 = \"loanpurposebuttons_iconwrapper__kniii\";\nvar _9 = \"79px\";\nvar _a = \"110px\";\nvar _b = \"72px\";\nvar _c = \"665px\";\nvar _d = \"loanpurposebuttons_right__q17ta\";\nvar _e = \"teal\";\nvar _f = \"2\";\nvar _10 = \"#cdd3dc\";\nvar _11 = \"loanpurposebuttons_togglebg__03vke\";\nvar _12 = \"loanpurposebuttons_togglebgwrapper__tanog\";\nvar _13 = \"loanpurposebuttons_wrapper__g+7jj\";\nexport { _1 as \"active\", _2 as \"body\", _3 as \"button\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"headline\", _8 as \"iconWrapper\", _9 as \"menuHeight\", _a as \"menuHeightLarge\", _b as \"menuHeightMobile\", _c as \"modalMobileWidth\", _d as \"right\", _e as \"teal\", _f as \"timelineStrokeWidth\", _10 as \"timelineTrackColor\", _11 as \"toggleBg\", _12 as \"toggleBgWrapper\", _13 as \"wrapper\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"loandetails_arrow__vtssr\";\nvar _2 = \"loandetails_arrowwrapper__ceijd\";\nvar _3 = \"#4c4c4c\";\nvar _4 = \"loandetails_button__qs0g+\";\nvar _5 = \"640px\";\nvar _6 = \"790px\";\nvar _7 = \"#057676\";\nvar _8 = \"loandetails_desktoptext__7mjj1\";\nvar _9 = \"loandetails_detailstext__7dfso\";\nvar _a = \"loandetails_down__5seb7\";\nvar _b = \"#434343\";\nvar _c = \"loandetails_icon__9ey-w\";\nvar _d = \"loandetails_label__6plvj\";\nvar _e = \"79px\";\nvar _f = \"110px\";\nvar _10 = \"72px\";\nvar _11 = \"loandetails_mobiletext__9d97q\";\nvar _12 = \"665px\";\nvar _13 = \"loandetails_open__tic5m\";\nvar _14 = \"loandetails_personalize__fuqar\";\nvar _15 = \"loandetails_summary__a5hzn\";\nvar _16 = \"teal\";\nvar _17 = \"loandetails_text__z3fx9\";\nvar _18 = \"2\";\nvar _19 = \"#cdd3dc\";\nvar _1a = \"loandetails_up__9-ff+\";\nvar _1b = \"loandetails_value__e6vsp\";\nvar _1c = \"loandetails_wrapper__jzufc\";\nexport { _1 as \"arrow\", _2 as \"arrowWrapper\", _3 as \"body\", _4 as \"button\", _5 as \"controlsMobileWidth\", _6 as \"controlsStackedWidth\", _7 as \"darkTeal\", _8 as \"desktopText\", _9 as \"detailsText\", _a as \"down\", _b as \"headline\", _c as \"icon\", _d as \"label\", _e as \"menuHeight\", _f as \"menuHeightLarge\", _10 as \"menuHeightMobile\", _11 as \"mobileText\", _12 as \"modalMobileWidth\", _13 as \"open\", _14 as \"personalize\", _15 as \"summary\", _16 as \"teal\", _17 as \"text\", _18 as \"timelineStrokeWidth\", _19 as \"timelineTrackColor\", _1a as \"up\", _1b as \"value\", _1c as \"wrapper\" }\n","var _path, _path2, _path3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPersonalize = function SvgPersonalize(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 29,\n height: 29,\n fill: \"none\",\n viewBox: \"0 0 29 29\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14.649 11.46a3.44 3.44 0 1 1-6.88 0 3.44 3.44 0 0 1 6.88 0\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#DCFBFB\",\n d: \"M11.21 3.315C5.394 3.315.665 8.044.665 13.86S5.394 24.403 11.21 24.403c1.517 0 2.961-.322 4.266-.901a7.9 7.9 0 0 1-.925-3.73c0-1.079.214-2.108.603-3.046.015-.036.007-.08-.025-.102a4.04 4.04 0 0 0-2.344-.744H9.61a4.064 4.064 0 0 0-4.062 4.062c0 .164-.192.25-.31.136a8.64 8.64 0 0 1-2.643-6.219c0-4.75 3.862-8.613 8.613-8.613 3.87 0 7.153 2.565 8.235 6.085.157.51.695.82 1.213.697.48-.115.832-.576.697-1.051-1.257-4.419-5.328-7.662-10.144-7.662\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m27.199 23.568.02-.032 1.043-1.782.014-.034a.743.743 0 0 0-.321-.933c-.009-.006-.9-.522-.904-1.157 0-.53.655-1.015.907-1.156a.785.785 0 0 0 .35-.927c-.009-.02-.197-.548-.455-.99a7 7 0 0 0-.643-.893.825.825 0 0 0-.984-.16c-.003.002-.527.3-1.025.3a.9.9 0 0 1-.438-.102c-.463-.264-.559-1.068-.556-1.355a.75.75 0 0 0-.654-.74c-.012-.003-.023-.012-.035-.003l-2.085.003q-.018 0-.032.003a.75.75 0 0 0-.657.737c0 .011-.003 1.039-.56 1.355a.85.85 0 0 1-.434.103c-.5 0-1.02-.299-1.025-.301a.78.78 0 0 0-.976.192l-.02.029-1.04 1.785q-.009.013-.017.031a.745.745 0 0 0 .321.933c.252.14.904.625.904 1.16 0 .53-.652 1.012-.906 1.153a.795.795 0 0 0-.351.927c.009.023.197.548.458.993.257.445.625.872.64.89a.82.82 0 0 0 .984.16c.006-.003.527-.301 1.028-.301a.86.86 0 0 1 .435.103c.466.267.562 1.068.559 1.352a.75.75 0 0 0 .692.746l2.082-.003h.035a.75.75 0 0 0 .654-.74c-.003-.287.093-1.09.556-1.355a.86.86 0 0 1 .435-.103c.504 0 1.022.301 1.025.301a.78.78 0 0 0 .976-.19m-4.723-1.642c-1.278 0-2.317-1.03-2.317-2.296s1.04-2.296 2.317-2.296 2.316 1.03 2.316 2.296-1.04 2.296-2.316 2.296\",\n className: \"gear\"\n })));\n};\nexport default SvgPersonalize;","import React from 'react';\r\nimport * as styles from './ControlButton.module.scss';\r\nimport classNames from 'classnames';\r\n\r\nexport default function ControlButton({\r\n className,\r\n small,\r\n disabled,\r\n children,\r\n onClick,\r\n ...rest\r\n}) {\r\n return (\r\n {\r\n if (!disabled && onClick) {\r\n onClick(e);\r\n }\r\n }}\r\n {...rest}\r\n >\r\n
{children}
\r\n
\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"controlbutton_button__cudlf\";\nvar _3 = \"controlbutton_buttoncontent__o-9fs\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"controlbutton_disabled__3nabi\";\nvar _8 = \"#434343\";\nvar _9 = \"79px\";\nvar _a = \"110px\";\nvar _b = \"72px\";\nvar _c = \"665px\";\nvar _d = \"controlbutton_overlay__7etbk\";\nvar _e = \"controlbutton_small__0duqp\";\nvar _f = \"teal\";\nvar _10 = \"2\";\nvar _11 = \"#cdd3dc\";\nexport { _1 as \"body\", _2 as \"button\", _3 as \"buttonContent\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"disabled\", _8 as \"headline\", _9 as \"menuHeight\", _a as \"menuHeightLarge\", _b as \"menuHeightMobile\", _c as \"modalMobileWidth\", _d as \"overlay\", _e as \"small\", _f as \"teal\", _10 as \"timelineStrokeWidth\", _11 as \"timelineTrackColor\" }\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgArrow = function SvgArrow(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 14,\n height: 9,\n fill: \"none\",\n viewBox: \"0 0 14 9\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#6C6C6C\",\n d: \"m7.155 8.257.6-.56 5.655-5.33-1.202-1.46-5.053 4.761L2.102.907.9 2.367l5.653 5.33.601.56z\"\n })));\n};\nexport default SvgArrow;","import { useLayoutEffect, useEffect } from 'react';\r\nimport { isSSR } from '@helpers';\r\n\r\nconst useIsomorphicLayoutEffect = isSSR() ? useEffect : useLayoutEffect;\r\n\r\nexport default useIsomorphicLayoutEffect;\r\n","import { useState, useEffect, useCallback, useMemo } from 'react';\r\nimport useIsomorphicLayoutEffect from '@hooks/useIsomorphicLayoutEffect';\r\nimport { isNumber } from 'lodash';\r\nimport { isSSR } from '@helpers';\r\n\r\nconst useMatchMedia = isSSR() ? useDefaultValues : useMediaQueries;\r\nexport default useMatchMedia;\r\n\r\nfunction useDefaultValues(...args) {\r\n return args[2] ?? false;\r\n}\r\n\r\nfunction useMediaQueries(queries, value = true, defaultValue = false) {\r\n const valuesArr = useMemo(() => {\r\n return Array.isArray(value) ? value : [value];\r\n }, [value]);\r\n\r\n const mediaQueries = useMemo(() => {\r\n return [queries]\r\n .flat()\r\n .map(q => {\r\n if (isNumber(q)) {\r\n q = `(max-width: ${q}px)`;\r\n } else if (!q) {\r\n return null;\r\n }\r\n\r\n q = q.includes('(') ? q : `(${q})`;\r\n\r\n return window.matchMedia(q);\r\n })\r\n .filter(q => q);\r\n }, [queries]);\r\n\r\n const getValue = useCallback(() => {\r\n const index = mediaQueries.findIndex(m => m.matches);\r\n return index === -1 ? defaultValue : valuesArr[index];\r\n }, [valuesArr, mediaQueries, defaultValue]);\r\n\r\n const [currentValue, setCurrentValue] = useState(getValue());\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n const handler = () => setCurrentValue(getValue);\r\n mediaQueries.forEach(m => m.addListener(handler));\r\n return () => mediaQueries.forEach(m => m.removeListener(handler));\r\n }, [mediaQueries, getValue]);\r\n\r\n // Force recheck query one time to ensure\r\n // the correct value displays after SSR\r\n const [hasInitialized, setHasInitialized] = useState(false);\r\n\r\n useEffect(() => {\r\n let timer = null;\r\n\r\n if (!hasInitialized) {\r\n setHasInitialized(true);\r\n\r\n timer = setTimeout(() => {\r\n setCurrentValue(getValue);\r\n }, 5);\r\n }\r\n\r\n return () => clearTimeout(timer);\r\n }, [hasInitialized, getValue]);\r\n\r\n return currentValue;\r\n}\r\n","import useStyleVars from '@hooks/useStyleVars';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\n\r\nexport default function useIsMobile() {\r\n const { controlsMobileWidth } = useStyleVars();\r\n const isMobile = useMatchMedia(controlsMobileWidth);\r\n\r\n return isMobile;\r\n}\r\n","import { useState, useEffect } from 'react';\r\n\r\n// This hook is used in several places where we render\r\n// both desktop and mobile elements initially. This is\r\n// sometimes necessary when using the useMatchMedia hook.\r\n\r\n// Because viewport size can't be calculated during SSR,\r\n// we conditionally render both mobile/desktop layouts\r\n// initially and use CSS to show/hide them. This\r\n// helps avoid the layout jumping on mobile\r\n// during the initial SSR hydration\r\nexport default function useHasRendered() {\r\n const [hasRendered, setHasRendered] = useState(false);\r\n\r\n useEffect(() => {\r\n setHasRendered(true);\r\n }, []);\r\n\r\n return hasRendered;\r\n}\r\n","import React, {\r\n useMemo,\r\n useState,\r\n useRef,\r\n useEffect,\r\n useCallback\r\n} from 'react';\r\nimport * as styles from './LoanDetails.module.scss';\r\nimport ControlButton from '../ControlButton';\r\nimport PersonalizeIcon from './personalize.svg';\r\nimport Arrow from '@images/arrow.svg';\r\nimport Tooltip from '@components/Tooltip';\r\nimport useStyleVars from '@hooks/useStyleVars';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport useIsMobile from '@hooks/useIsMobile';\r\nimport useHasRendered from '@hooks/useHasRendered';\r\nimport { upperFirst } from 'lodash';\r\nimport { creditScoreRanges } from '@enums';\r\nimport classNames from 'classnames';\r\nimport {\r\n formatCurrency,\r\n isVowel,\r\n calculatePercent,\r\n getPropertyTypeText\r\n} from '@helpers';\r\n\r\nexport default React.memo(function LoanDetails({\r\n state,\r\n inputsAreOpen,\r\n setInputsAreOpen,\r\n refreshData\r\n}) {\r\n const text = useMemo(() => getLoanText(state), [state]);\r\n\r\n const hasRendered = useHasRendered();\r\n const [hideTooltip, setHideTooltip] = useState(inputsAreOpen);\r\n const tooltipTimer = useRef();\r\n\r\n const setTooltipTimer = useCallback(() => {\r\n clearTimeout(tooltipTimer.current);\r\n\r\n tooltipTimer.current = setTimeout(() => {\r\n setHideTooltip(false);\r\n }, 1000);\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (inputsAreOpen) {\r\n clearTimeout(tooltipTimer.current);\r\n setHideTooltip(true);\r\n }\r\n }, [inputsAreOpen, setTooltipTimer]);\r\n\r\n const { controlsStackedWidth, controlsMobileWidth } = useStyleVars();\r\n const isMobile = useIsMobile();\r\n const { buttonText, tooltipText } = useMatchMedia(\r\n ['(max-width: 935px) and (min-width: 471px)', 'max-width: 470px'],\r\n [\r\n {\r\n buttonText: 'Personalize your loan',\r\n tooltipText: 'Edit loan details'\r\n },\r\n {\r\n buttonText: 'Edit loan details'\r\n }\r\n ],\r\n {\r\n buttonText: 'Personalize your loan details',\r\n tooltipText: 'Edit loan'\r\n }\r\n );\r\n\r\n const tooltipPosition = useMatchMedia(\r\n [\r\n `(max-width: ${controlsStackedWidth}px)`,\r\n `(min-width: ${controlsMobileWidth + 1}px)`\r\n ].join(' and '),\r\n 'right',\r\n 'bottom'\r\n );\r\n\r\n const button = (\r\n {\r\n if (!inputsAreOpen) {\r\n setTooltipTimer();\r\n }\r\n }}\r\n onClick={() => {\r\n setInputsAreOpen(prevIsOpen => {\r\n const isOpen = !prevIsOpen;\r\n\r\n if (!isOpen) {\r\n setTimeout(refreshData, 0);\r\n }\r\n\r\n return isOpen;\r\n });\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n {hasRendered ? (\r\n buttonText\r\n ) : (\r\n <>\r\n \r\n Personalize your loan{' '}\r\n details\r\n \r\n \r\n Edit loan details\r\n \r\n \r\n )}\r\n \r\n {!isMobile && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n\r\n return (\r\n
\r\n {!hasRendered ? (\r\n <>\r\n
\r\n {text}\r\n
\r\n \r\n \r\n ) : (\r\n <>\r\n {!isMobile ? (\r\n
\r\n {text}\r\n
\r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n {!hasRendered ? (\r\n button\r\n ) : (\r\n \r\n {button}\r\n \r\n )}\r\n
\r\n );\r\n});\r\n\r\nfunction MobileLoanSummary({ state }) {\r\n const creditScore = Object.values(creditScoreRanges).find(s => {\r\n return s.value === state.creditScore;\r\n });\r\n\r\n const creditScoreText = creditScore?.label;\r\n const propertyText = getPropertyTypeText(state.propertyType);\r\n const homeValueLabel =\r\n state.loanPurpose === 'purchase' ? 'Purchase Price' : 'Home Value';\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nfunction Item({ value, label }) {\r\n return !value || !label ? null : (\r\n
  • \r\n {label}\r\n {value}\r\n
  • \r\n );\r\n}\r\n\r\nfunction getLoanText(\r\n { loanPurpose, loanAmount, homeValue, zipCode, creditScore, propertyType },\r\n zipCodes\r\n) {\r\n const parts = [];\r\n const isPurchase = loanPurpose === 'purchase';\r\n\r\n // Loan type\r\n parts.push(isPurchase ? 'Purchasing a' : 'Refinancing a');\r\n\r\n // Loan amount\r\n // if (loanAmount !== undefined) {\r\n // parts.push(formatCurrency(homeValue, false));\r\n // }\r\n\r\n // parts.push(isPurchase ? 'home' : 'loan');\r\n // const formattedHomeValue = formatCurrency(homeValue);\r\n\r\n const propertyText = getPropertyTypeText(propertyType);\r\n\r\n if (isPurchase) {\r\n parts.push(`${formatCurrency(homeValue)} ${propertyText}`);\r\n } else {\r\n parts.push(`${formatCurrency(loanAmount)} loan`);\r\n parts.push(`for a ${formatCurrency(homeValue)} ${propertyText}`);\r\n }\r\n\r\n // Location\r\n // TODO add functionality to get cities from zip codes\r\n // TODO replace default zip code with configurable value\r\n // if (zipCode !== undefined) {\r\n // zipCodes = zipCodes ?? {};\r\n // const [city] = zipCodes[zipCode] ?? ['Livermore'];\r\n // parts.push(`in ${city}`);\r\n // }\r\n\r\n // Credit score\r\n if (creditScore !== undefined) {\r\n const score = Object.values(creditScoreRanges).find(s => {\r\n return s.value === creditScore;\r\n });\r\n\r\n if (score?.label) {\r\n const a = isVowel(score.label) ? 'an' : 'a';\r\n parts.push(`with ${a} ${score.label.toLowerCase()} credit score`);\r\n }\r\n }\r\n\r\n // Down payment\r\n loanAmount = parseInt(loanAmount);\r\n homeValue = parseInt(homeValue);\r\n\r\n if (isPurchase && !isNaN(loanAmount) && !isNaN(homeValue)) {\r\n if (homeValue > loanAmount) {\r\n const percent = calculatePercent(\r\n homeValue - loanAmount,\r\n homeValue,\r\n false\r\n );\r\n\r\n parts.push(`and ${percent} down`);\r\n }\r\n }\r\n\r\n const text = parts.join(' ').replace(/\\s\\s+/g, ' ').replace(' .', '.');\r\n\r\n return upperFirst(`${text}.`);\r\n}\r\n","import React, { useState, useMemo, useCallback, useRef, memo } from 'react';\r\nimport { Field } from '@input';\r\nimport classNames from 'classnames';\r\nimport * as styles from './Text.module.scss';\r\nimport { NumericFormat, PatternFormat } from 'react-number-format';\r\nimport { uniqueId } from 'lodash';\r\n\r\nexport default memo(\r\n React.forwardRef(function Text(\r\n {\r\n name,\r\n id: _id,\r\n className,\r\n fieldClassName,\r\n label,\r\n type = 'text',\r\n format,\r\n isCurrency,\r\n allowNegative,\r\n disableArrowKeyIncrement,\r\n theme = 'light',\r\n size,\r\n icon: _icon,\r\n iconPosition = 'left',\r\n iconStyle = {},\r\n iconLeft,\r\n iconPadding,\r\n iconClassName,\r\n style = {},\r\n fieldStyle,\r\n width,\r\n maxWidth,\r\n validate,\r\n inlineLabel,\r\n hasError,\r\n errorMessage,\r\n showErrorMessage,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onKeyDown,\r\n ...restProps\r\n },\r\n ref\r\n ) {\r\n const id = useMemo(() => _id ?? uniqueId('textinput-'), [_id]);\r\n const errorId = useMemo(() => uniqueId('textinput-error-'), []);\r\n const [isFocused, setIsFocused] = useState(false);\r\n const isNumber = !!isCurrency;\r\n const isPattern = !!(format || restProps.valueIsNumericString);\r\n const isFormatted = isNumber || isPattern;\r\n\r\n const value = restProps.value;\r\n const valueRef = useRef(value);\r\n\r\n if ('value' in restProps) {\r\n valueRef.current = value;\r\n }\r\n\r\n const handleFocus = useCallback(\r\n e => {\r\n setIsFocused(true);\r\n\r\n if (onFocus) {\r\n onFocus(valueRef.current, name);\r\n }\r\n },\r\n [onFocus, name]\r\n );\r\n\r\n const handleBlur = useCallback(() => {\r\n setIsFocused(false);\r\n\r\n if (onBlur) {\r\n onBlur(valueRef.current, name);\r\n }\r\n }, [onBlur, name]);\r\n\r\n const handleChange = useCallback(\r\n value => {\r\n valueRef.current = value;\r\n\r\n if (onChange) {\r\n onChange(value, name);\r\n }\r\n },\r\n [onChange, name]\r\n );\r\n\r\n const handleKeyDown = useCallback(\r\n e => {\r\n if (onKeyDown) {\r\n onKeyDown(valueRef.current, name, e);\r\n }\r\n\r\n if (isNumber && onChange && !disableArrowKeyIncrement) {\r\n const value = e.target.value.trim().replace(/[$,]/g, '');\r\n let num = parseInt(value);\r\n\r\n if (isNaN(num)) {\r\n return;\r\n }\r\n\r\n const isDown = ['Down', 'ArrowDown'].includes(e.key);\r\n const isUp = ['Up', 'ArrowUp'].includes(e.key);\r\n\r\n if (isDown || isUp) {\r\n e.preventDefault();\r\n\r\n const diff = e.shiftKey ? 10 : 1;\r\n num = Math.max(isDown ? num - diff : num + diff, 0);\r\n\r\n onChange(String(num), name);\r\n }\r\n }\r\n },\r\n [onKeyDown, onChange, name, isNumber, disableArrowKeyIncrement]\r\n );\r\n\r\n const [props, icon] = useMemo(() => {\r\n const paddingProperty =\r\n iconPosition === 'right' ? 'paddingRight' : 'paddingLeft';\r\n const props = {\r\n id,\r\n value,\r\n type,\r\n validate,\r\n className: classNames(styles.input, className),\r\n style: { ...style, [paddingProperty]: iconPadding },\r\n onFocus: handleFocus,\r\n onBlur: handleBlur\r\n };\r\n\r\n if (isFormatted) {\r\n props.onValueChange = ({ value }) => handleChange(value);\r\n props.onKeyDown = handleKeyDown;\r\n } else {\r\n props.onChange = e => handleChange(e.target.value);\r\n }\r\n\r\n if (hasError && showErrorMessage) {\r\n props['aria-invalid'] = true;\r\n props['aria-errormessage'] = errorId;\r\n }\r\n\r\n let icon = _icon;\r\n\r\n if (isCurrency) {\r\n icon = icon ?? ;\r\n props.thousandSeparator = ',';\r\n props.allowNegative = allowNegative ?? false;\r\n props.decimalSeparator = '.';\r\n\r\n const padding = props.iconPadding ?? (size === 'small' ? 20 : 35);\r\n props.style = { ...props.style, [paddingProperty]: padding };\r\n }\r\n\r\n return [props, icon];\r\n }, [\r\n id,\r\n value,\r\n isFormatted,\r\n isCurrency,\r\n allowNegative,\r\n size,\r\n _icon,\r\n iconPosition,\r\n className,\r\n iconPadding,\r\n style,\r\n type,\r\n hasError,\r\n showErrorMessage,\r\n errorId,\r\n handleFocus,\r\n handleBlur,\r\n handleChange,\r\n handleKeyDown,\r\n validate\r\n ]);\r\n\r\n return (\r\n \r\n \r\n {icon && (\r\n \r\n {icon}\r\n
    \r\n )}\r\n <>\r\n {isFormatted ? (\r\n <>\r\n {isPattern ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n })\r\n);\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgArrow = function SvgArrow(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 14 14\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#FFF\",\n d: \"m2.3 3.8-1 1L7 10.6l5.8-5.8-1-1L7 8.5z\"\n })));\n};\nexport default SvgArrow;","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"640px\";\nvar _3 = \"790px\";\nvar _4 = \"text_currency__vxwyi\";\nvar _5 = \"#057676\";\nvar _6 = \"text_focus__tsivd\";\nvar _7 = \"text_haserror__qgnvl\";\nvar _8 = \"#434343\";\nvar _9 = \"text_icon__h78ex\";\nvar _a = \"text_input__qwt9+\";\nvar _b = \"text_lefticon__48ckw\";\nvar _c = \"79px\";\nvar _d = \"110px\";\nvar _e = \"72px\";\nvar _f = \"665px\";\nvar _10 = \"text_righticon__swyfv\";\nvar _11 = \"text_small__kw4xj\";\nvar _12 = \"teal\";\nvar _13 = \"2\";\nvar _14 = \"#cdd3dc\";\nvar _15 = \"text_wrapper__sszse\";\nexport { _1 as \"body\", _2 as \"controlsMobileWidth\", _3 as \"controlsStackedWidth\", _4 as \"currency\", _5 as \"darkTeal\", _6 as \"focus\", _7 as \"hasError\", _8 as \"headline\", _9 as \"icon\", _a as \"input\", _b as \"leftIcon\", _c as \"menuHeight\", _d as \"menuHeightLarge\", _e as \"menuHeightMobile\", _f as \"modalMobileWidth\", _10 as \"rightIcon\", _11 as \"small\", _12 as \"teal\", _13 as \"timelineStrokeWidth\", _14 as \"timelineTrackColor\", _15 as \"wrapper\" }\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgArrowBold = function SvgArrowBold(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 11,\n height: 11,\n fill: \"none\",\n viewBox: \"0 0 11 11\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B4B4B4\",\n d: \"m5.5 8.61.509-.474 4.784-4.51L9.776 2.39 5.5 6.42 1.225 2.39.208 3.627l4.784 4.509z\"\n })));\n};\nexport default SvgArrowBold;","import { useEffect, useRef, useCallback } from 'react';\r\n\r\nexport default function useClickOutside(ref, callback, requireMouseUp) {\r\n const originalTarget = useRef(null);\r\n\r\n useEffect(() => {\r\n return () => {\r\n originalTarget.current = null;\r\n };\r\n }, []);\r\n\r\n const handler = useCallback(\r\n e => {\r\n const target =\r\n requireMouseUp && originalTarget.current\r\n ? originalTarget.current\r\n : e.target;\r\n\r\n if (callback && ref.current && !ref.current.contains(target)) {\r\n callback(e);\r\n }\r\n },\r\n [ref, requireMouseUp, callback]\r\n );\r\n\r\n useEffect(() => {\r\n const setOriginalTarget = e => {\r\n originalTarget.current = e.target;\r\n };\r\n\r\n const type = requireMouseUp ? 'click' : 'mousedown';\r\n\r\n document.addEventListener('mousedown', setOriginalTarget);\r\n document.addEventListener(type, handler);\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', setOriginalTarget);\r\n document.removeEventListener(type, handler);\r\n };\r\n }, [ref, handler, requireMouseUp]);\r\n}\r\n","import { useEffect } from 'react';\r\n\r\nexport default function useEscapeKey(callback, requireKeyUp) {\r\n useEffect(() => {\r\n const handler = e => {\r\n if (e.key === 'Esc' || e.key === 'Escape') {\r\n callback();\r\n }\r\n }\r\n\r\n const event = requireKeyUp ? 'keyup' : 'keydown';\r\n\r\n window.addEventListener(event, handler);\r\n\r\n return () => {\r\n window.removeEventListener(event, handler);\r\n }\r\n }, [callback, requireKeyUp]);\r\n}","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { useEffect, useRef } from 'react';\r\nimport { isFunction } from 'lodash';\r\n\r\nexport default function useEvent(\r\n type,\r\n elementOrCallback,\r\n callback,\r\n deps = []\r\n) {\r\n const hasElement = !isFunction(elementOrCallback);\r\n const callbackRef = useRef(\r\n hasElement ? callback : elementOrCallback\r\n );\r\n\r\n useEffect(() => {\r\n callbackRef.current = hasElement ? callback : elementOrCallback;\r\n });\r\n\r\n const element = useRef(null);\r\n\r\n useEffect(() => {\r\n const el =\r\n elementOrCallback === 'window' ? window : elementOrCallback;\r\n element.current = hasElement ? el : document;\r\n }, [hasElement]);\r\n\r\n useEffect(() => {\r\n const handler = e => {\r\n callbackRef.current(e);\r\n };\r\n\r\n const el = element.current;\r\n el.addEventListener(type, handler);\r\n\r\n return () => {\r\n el.removeEventListener(type, handler);\r\n };\r\n }, [type, element, ...deps]);\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"select_above__9zmlk\";\nvar _2 = \"select_arrow__3pkgi\";\nvar _3 = \"select_arrowwrapper__yqamb\";\nvar _4 = \"#4c4c4c\";\nvar _5 = \"640px\";\nvar _6 = \"790px\";\nvar _7 = \"select_current__vminv\";\nvar _8 = \"#057676\";\nvar _9 = \"select_disabled__xqtcx\";\nvar _a = \"select_focus__dv4da\";\nvar _b = \"select_haserror__h5lnf\";\nvar _c = \"#434343\";\nvar _d = \"select_icon__bjjux\";\nvar _e = \"select_info__4l5ho\";\nvar _f = \"select_inline__hou87\";\nvar _10 = \"select_inlinelabel__a5929\";\nvar _11 = \"select_input__h1oao\";\nvar _12 = \"79px\";\nvar _13 = \"110px\";\nvar _14 = \"72px\";\nvar _15 = \"select_minimal__s0mvo\";\nvar _16 = \"665px\";\nvar _17 = \"select_offsetemptyleft__lsa98\";\nvar _18 = \"select_offsetemptyright__wwpoj\";\nvar _19 = \"select_open__6dpji\";\nvar _1a = \"select_option__kcpus\";\nvar _1b = \"select_optionswrapper__5syiw\";\nvar _1c = \"select_placeholder__lqv01\";\nvar _1d = \"teal\";\nvar _1e = \"select_text__iyoz-\";\nvar _1f = \"2\";\nvar _20 = \"#cdd3dc\";\nvar _21 = \"select_value__kmrlv\";\nvar _22 = \"select_wrapper__tpudf\";\nexport { _1 as \"above\", _2 as \"arrow\", _3 as \"arrowWrapper\", _4 as \"body\", _5 as \"controlsMobileWidth\", _6 as \"controlsStackedWidth\", _7 as \"current\", _8 as \"darkTeal\", _9 as \"disabled\", _a as \"focus\", _b as \"hasError\", _c as \"headline\", _d as \"icon\", _e as \"info\", _f as \"inline\", _10 as \"inlineLabel\", _11 as \"input\", _12 as \"menuHeight\", _13 as \"menuHeightLarge\", _14 as \"menuHeightMobile\", _15 as \"minimal\", _16 as \"modalMobileWidth\", _17 as \"offsetEmptyLeft\", _18 as \"offsetEmptyRight\", _19 as \"open\", _1a as \"option\", _1b as \"optionsWrapper\", _1c as \"placeholder\", _1d as \"teal\", _1e as \"text\", _1f as \"timelineStrokeWidth\", _20 as \"timelineTrackColor\", _21 as \"value\", _22 as \"wrapper\" }\n","import React, {\r\n useState,\r\n useEffect,\r\n useCallback,\r\n useRef,\r\n useMemo\r\n} from 'react';\r\nimport { createPortal } from 'react-dom';\r\nimport { Field } from '@input';\r\nimport Arrow from './arrow.svg';\r\nimport ArrowBold from './arrow-bold.svg';\r\nimport useClickOutside from '@hooks/useClickOutside';\r\nimport useEscapeKey from '@hooks/useEscapeKey';\r\nimport useEvent from '@hooks/useEvent';\r\nimport useHasRendered from '@hooks/useHasRendered';\r\nimport * as styles from './Select.module.scss';\r\nimport classNames from 'classnames';\r\nimport { uniqueId, isNumber } from 'lodash';\r\nimport { isSSR } from '@helpers';\r\n\r\nexport default function Select({\r\n options = [],\r\n id: _id,\r\n value,\r\n name,\r\n label,\r\n inlineLabel,\r\n placeholder,\r\n isDisabled,\r\n optionsMinWidth,\r\n maxWidth,\r\n className,\r\n fieldClassName,\r\n fieldStyle,\r\n tabIndex = 0,\r\n usePortal = true,\r\n theme,\r\n offsetEmptyLeft,\r\n offsetEmptyRight,\r\n hasError,\r\n errorMessage,\r\n showErrorMessage,\r\n onChange,\r\n onFocus,\r\n onBlur,\r\n onKeyDown,\r\n ...restProps\r\n}) {\r\n const id = useMemo(() => _id ?? uniqueId('select-'), [_id]);\r\n const errorId = useMemo(() => uniqueId('select-error-'), []);\r\n const listId = useMemo(() => uniqueId('list-'), []);\r\n const labelId = useMemo(() => uniqueId('label-'), []);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const isOpenRef = useRef(false);\r\n const ref = useRef(null);\r\n const [rect, setRect] = useState(null);\r\n const valueRef = useRef('');\r\n\r\n useEffect(() => {\r\n valueRef.current = value;\r\n });\r\n\r\n const refreshRect = useCallback(usePortal => {\r\n let { left, top, width, height } = ref.current.getBoundingClientRect();\r\n\r\n if (usePortal) {\r\n left += window.pageXOffset;\r\n top += window.pageYOffset;\r\n }\r\n\r\n setRect({ left, top, width, height });\r\n }, []);\r\n\r\n useEffect(() => {\r\n refreshRect(usePortal);\r\n }, [usePortal, refreshRect]);\r\n\r\n const open = useCallback(() => {\r\n isOpenRef.current = true;\r\n\r\n refreshRect(usePortal);\r\n\r\n if (!isDisabled) {\r\n setIsOpen(true);\r\n }\r\n }, [usePortal, isDisabled, refreshRect]);\r\n\r\n const close = useCallback(() => {\r\n isOpenRef.current = false;\r\n setIsOpen(false);\r\n ref.current.blur();\r\n }, []);\r\n\r\n useEscapeKey(close);\r\n useEvent('visibilitychange', close);\r\n useEvent('blur', 'window', () => {\r\n ref.current.blur();\r\n close();\r\n });\r\n\r\n const handleKeyDown = useCallback(\r\n e => {\r\n if (e.key === 'Tab') {\r\n close();\r\n }\r\n\r\n if (onKeyDown) {\r\n onKeyDown(valueRef.current, name, e);\r\n }\r\n },\r\n [close, name, onKeyDown]\r\n );\r\n\r\n const handleChange = useCallback(\r\n value => {\r\n valueRef.current = value;\r\n onChange(value, name);\r\n close(value);\r\n },\r\n [name, onChange, close]\r\n );\r\n\r\n const valueLabel = options.find(v => v.value === value)?.label;\r\n const isMinimal = theme === 'minimal';\r\n const ArrowComponent = isMinimal ? ArrowBold : Arrow;\r\n\r\n useEffect(() => {\r\n if (isDisabled && isOpenRef.current) {\r\n close();\r\n }\r\n }, [isDisabled, close]);\r\n\r\n const hasVisibleError = errorMessage && showErrorMessage;\r\n\r\n // aria-invalid={errorMessage && showErrorMessage ? true : false}\r\n\r\n return (\r\n \r\n {\r\n ref.current.focus();\r\n }}\r\n onFocus={() => {\r\n if (!isOpen) {\r\n open();\r\n }\r\n }}\r\n onBlur={() => {\r\n if (onBlur) {\r\n onBlur(valueRef.current, name);\r\n }\r\n }}\r\n onKeyDown={handleKeyDown}\r\n {...restProps}\r\n >\r\n \r\n {inlineLabel && (\r\n \r\n {inlineLabel + ' '}\r\n \r\n )}\r\n {valueLabel ? (\r\n {valueLabel}\r\n ) : (\r\n <>\r\n {placeholder && (\r\n {placeholder}\r\n )}\r\n \r\n )}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction OptionsWrapper({\r\n id,\r\n isOpen,\r\n inputRect,\r\n optionsMinWidth,\r\n options = [],\r\n value: currentValue,\r\n usePortal,\r\n close,\r\n onChange,\r\n ...rest\r\n}) {\r\n const ref = useRef(null);\r\n const hasRendered = useHasRendered();\r\n const [focusedIndex, setFocusedIndex] = useState(() => {\r\n const index = options.findIndex(({ value }) => {\r\n return value === currentValue;\r\n });\r\n\r\n return index === -1 ? 0 : index;\r\n });\r\n\r\n useClickOutside(ref, () => close(currentValue));\r\n\r\n const handleKeyDown = useCallback(\r\n e => {\r\n if (!isOpen) {\r\n return;\r\n }\r\n\r\n // Select on enter key\r\n if (e.key === 'Enter' && focusedIndex !== null) {\r\n onChange(options[focusedIndex].value);\r\n return;\r\n }\r\n\r\n // Keyboard navigation with up and down arrows\r\n const isUp = ['ArrowUp', 'Up'].includes(e.key);\r\n const isDown = !isUp && ['ArrowDown', 'Down'].includes(e.key);\r\n\r\n if (isUp || isDown) {\r\n e.preventDefault();\r\n setFocusedIndex(index => {\r\n if (index === null) {\r\n return isUp ? options.length - 1 : 0;\r\n }\r\n\r\n index = isUp ? index - 1 : index + 1;\r\n\r\n if (index >= options.length) {\r\n index = 0;\r\n } else if (index < 0) {\r\n index = options.length - 1;\r\n }\r\n\r\n return index;\r\n });\r\n\r\n return;\r\n }\r\n\r\n // Close on tab out\r\n if (e.key === 'Tab') {\r\n close();\r\n }\r\n },\r\n [isOpen, options, focusedIndex, close, onChange]\r\n );\r\n\r\n useEvent('keydown', handleKeyDown);\r\n\r\n const selectOptions = useMemo(() => {\r\n return options.map(option => ({\r\n id: uniqueId('option-'),\r\n ...option\r\n }));\r\n }, [options]);\r\n\r\n const [optionComponents, focusedId] = useMemo(() => {\r\n let focusedId = selectOptions[focusedIndex].id;\r\n\r\n const items = selectOptions.map(({ value, label, info, id }, index) => {\r\n const isCurrent = value === currentValue;\r\n const isFocused = focusedIndex === index;\r\n\r\n if (isFocused) {\r\n focusedId = id;\r\n }\r\n\r\n return (\r\n \r\n );\r\n });\r\n\r\n return [items, focusedId];\r\n }, [selectOptions, currentValue, focusedIndex, onChange]);\r\n\r\n const { isAbove, style } = useMemo(() => {\r\n if (isSSR()) {\r\n return { isAbove: false, style: null };\r\n }\r\n\r\n const {\r\n left = 0,\r\n top = 0,\r\n width: inputWidth = 0,\r\n height = 0\r\n } = inputRect ?? {};\r\n const minWidth = isNumber(optionsMinWidth)\r\n ? Math.max(inputWidth, optionsMinWidth)\r\n : inputWidth;\r\n const width = !hasRendered ? inputWidth : minWidth;\r\n const wrapperHeight = ref.current?.offsetHeight ?? 0;\r\n const minOffset = 25;\r\n\r\n let offset = top + height + wrapperHeight + minOffset;\r\n\r\n if (usePortal) {\r\n offset -= window.scrollY;\r\n }\r\n\r\n const isAbove = offset > window.innerHeight;\r\n\r\n return {\r\n isAbove,\r\n style: {\r\n left: usePortal ? left : null,\r\n top: usePortal ? top : null,\r\n marginTop: isAbove ? (usePortal ? -6 : -height - 6) : null,\r\n minWidth: width,\r\n maxWidth: width + 30\r\n }\r\n };\r\n }, [inputRect, optionsMinWidth, usePortal, hasRendered]);\r\n\r\n useEffect(() => {\r\n if (!isOpen) {\r\n ref.current?.scrollTo(0, 0);\r\n }\r\n }, [isOpen]);\r\n\r\n const el = (\r\n \r\n {optionComponents}\r\n \r\n );\r\n\r\n return !usePortal || isSSR() ? el : createPortal(el, document.body);\r\n}\r\n\r\nconst Option = React.memo(\r\n ({ label, value, info, isCurrent, isFocused, onChange, id, ...rest }) => {\r\n return (\r\n onChange(value)}\r\n {...rest}\r\n >\r\n {label}\r\n {info && {info}}\r\n \r\n );\r\n }\r\n);\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"field_inlinelabel__dysbi\";\nvar _2 = \"field_label__7ys7j\";\nvar _3 = \"field_small__cff6f\";\nvar _4 = \"field_validation__cpctk\";\nvar _5 = \"field_wrapper__e2hub\";\nexport { _1 as \"inlineLabel\", _2 as \"label\", _3 as \"small\", _4 as \"validation\", _5 as \"wrapper\" }\n","import React from 'react';\r\nimport * as styles from './Field.module.scss';\r\nimport classNames from 'classnames';\r\n\r\nexport default function Field({\r\n inputId,\r\n label,\r\n labelId,\r\n errorId,\r\n labelClassName,\r\n className,\r\n children,\r\n maxWidth,\r\n style = {},\r\n size,\r\n inlineLabel,\r\n errorMessage,\r\n showErrorMessage,\r\n ...restProps\r\n}) {\r\n return (\r\n \r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n {children}\r\n {showErrorMessage && errorMessage && (\r\n \r\n {errorMessage}\r\n \r\n )}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"togglebutton_active__o-7em\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"togglebutton_button__l65fn\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"togglebutton_disablehover__5gj5o\";\nvar _8 = \"togglebutton_disabled__yxwgx\";\nvar _9 = \"togglebutton_hasloadingtext__yy-ag\";\nvar _a = \"#434343\";\nvar _b = \"togglebutton_icon__nrfeu\";\nvar _c = \"togglebutton_label__zah2p\";\nvar _d = \"togglebutton_loading__fg7ad\";\nvar _e = \"togglebutton_loadingtext__kpik1\";\nvar _f = \"79px\";\nvar _10 = \"110px\";\nvar _11 = \"72px\";\nvar _12 = \"665px\";\nvar _13 = \"togglebutton_spinner__-sd6y\";\nvar _14 = \"teal\";\nvar _15 = \"togglebutton_text__rp2tc\";\nvar _16 = \"2\";\nvar _17 = \"#cdd3dc\";\nexport { _1 as \"active\", _2 as \"body\", _3 as \"button\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"disableHover\", _8 as \"disabled\", _9 as \"hasLoadingText\", _a as \"headline\", _b as \"icon\", _c as \"label\", _d as \"loading\", _e as \"loadingText\", _f as \"menuHeight\", _10 as \"menuHeightLarge\", _11 as \"menuHeightMobile\", _12 as \"modalMobileWidth\", _13 as \"spinner\", _14 as \"teal\", _15 as \"text\", _16 as \"timelineStrokeWidth\", _17 as \"timelineTrackColor\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"44px\";\nvar _2 = \"6.8\";\nvar _3 = \"#4c4c4c\";\nvar _4 = \"spinner_circle__iteou\";\nvar _5 = \"spinner_circledash__4wbl3\";\nvar _6 = \"#057676\";\nvar _7 = \"#434343\";\nvar _8 = \"spinner_spinner__8dpib\";\nvar _9 = \"teal\";\nvar _a = \"spinner_wrapper__2el6r\";\nvar _b = \"spinner_wrapperrotate__7ymb+\";\nexport { _1 as \"baseSize\", _2 as \"baseThickness\", _3 as \"body\", _4 as \"circle\", _5 as \"circleDash\", _6 as \"darkTeal\", _7 as \"headline\", _8 as \"spinner\", _9 as \"teal\", _a as \"wrapper\", _b as \"wrapperRotate\" }\n","import React from 'react';\r\nimport * as styles from './Spinner.module.scss';\r\nimport classNames from 'classnames';\r\nimport { isNumber } from 'lodash';\r\n\r\nexport default function Spinner({ className, ...restProps }) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst baseSize = parseInt(styles.baseSize);\r\nconst baseThickness = parseInt(styles.baseThickness);\r\n\r\nexport function SmallSpinner({\r\n size,\r\n className,\r\n svgClassName,\r\n color,\r\n thickness = baseThickness\r\n}) {\r\n const wrapperStyle = { color };\r\n\r\n if (isNumber(size) && size !== baseSize) {\r\n wrapperStyle.width = size;\r\n wrapperStyle.height = size;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useState } from 'react';\r\nimport * as styles from './ToggleButton.module.scss';\r\nimport { SmallSpinner } from '@components/Spinner';\r\nimport classNames from 'classnames';\r\n\r\nexport default React.memo(function ToggleButton({\r\n isActive,\r\n isLoading,\r\n isDisabled,\r\n onChange,\r\n className,\r\n text,\r\n children,\r\n spinnerSize,\r\n spinnerThickness = 6.6,\r\n loadingText,\r\n ...restProps\r\n}) {\r\n const [disableHoverEffect, setDisableHoverEffect] = useState(false);\r\n const content = text ?? children;\r\n\r\n return (\r\n {\r\n setDisableHoverEffect(true);\r\n onChange?.(!isActive);\r\n }}\r\n onMouseLeave={() => setDisableHoverEffect(false)}\r\n {...restProps}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {content && (\r\n \r\n {content}\r\n {loadingText && (\r\n {loadingText}\r\n )}\r\n \r\n )}\r\n \r\n );\r\n});\r\n","import React from 'react';\r\nimport { Text } from '@input';\r\nimport { keys } from '@enums';\r\n\r\nfunction ZipCode(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(zipCode) {\r\n zipCode = String(zipCode);\r\n\r\n if (!zipCode?.match(/^\\d{5}$/)) {\r\n return 'Please enter a valid zip code';\r\n }\r\n}\r\n\r\nexport default { Component: ZipCode, validate };\r\n","import React from 'react';\r\nimport { Text } from '@input';\r\nimport { keys } from '@enums';\r\nimport { upperFirst, isNumber } from 'lodash';\r\nimport { formatCurrency, isPurchase } from '@helpers';\r\n\r\nfunction HomeValue({ loanPurpose, ...props }) {\r\n const text = isPurchase(loanPurpose) ? 'Purchase Price' : 'Home Value';\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(num, state, validations) {\r\n const label = isPurchase(state.loanPurpose) ? 'purchase price' : 'home value';\r\n\r\n num = parseFloat(num);\r\n\r\n if (isNaN(num)) {\r\n return `Enter a valid ${label}`;\r\n }\r\n\r\n const { minHomeValue = 0, maxHomeValue = 0 } = validations;\r\n const hasMinHomeValue = isNumber(minHomeValue) && minHomeValue > 0;\r\n const hasMaxHomeValue =\r\n isNumber(maxHomeValue) &&\r\n (hasMinHomeValue ? maxHomeValue > minHomeValue : maxHomeValue > 0);\r\n\r\n if (hasMinHomeValue || hasMaxHomeValue) {\r\n if (hasMinHomeValue && num < minHomeValue) {\r\n return hasMaxHomeValue\r\n ? `Enter a ${label} between ${formatCurrency(\r\n minHomeValue\r\n )} and ${formatCurrency(maxHomeValue)}`\r\n : `Enter a ${label} of at least ${formatCurrency(minHomeValue)}`;\r\n } else if (hasMaxHomeValue && num > maxHomeValue) {\r\n return hasMinHomeValue\r\n ? `Enter a ${label} between ${formatCurrency(\r\n minHomeValue\r\n )} and ${formatCurrency(maxHomeValue)}`\r\n : `Enter a ${label} of ${formatCurrency(maxHomeValue)} or less`;\r\n }\r\n }\r\n\r\n if (!hasMinHomeValue && num <= 0) {\r\n return `Enter a ${label} of at least $0`;\r\n }\r\n\r\n if (num < parseFloat(state[keys.LOAN_AMOUNT])) {\r\n return `${upperFirst(label)} must be greater than loan amount`;\r\n }\r\n}\r\n\r\nexport default {\r\n Component: HomeValue,\r\n dependencies: keys.LOAN_PURPOSE,\r\n validate: {\r\n fn: validate,\r\n dependencies: [keys.LOAN_AMOUNT, keys.CASH_OUT_AMOUNT]\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Text } from '@input';\r\nimport { formatCurrency, isRefinance } from '@helpers';\r\nimport { keys } from '@enums';\r\nimport { isNumber } from 'lodash';\r\n\r\nfunction LoanAmount(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(num, state, validations) {\r\n num = parseFloat(num);\r\n\r\n if (isNaN(num)) {\r\n return 'Enter a valid loan amount';\r\n }\r\n\r\n let cashOutAmount = parseFloat(state.cashOutAmount);\r\n\r\n let { minLoanAmount = 0, maxLoanAmount = 0 } = validations;\r\n const hasMinLoanAmount = isNumber(minLoanAmount) && minLoanAmount > 0;\r\n const hasMaxLoanAmount =\r\n isNumber(maxLoanAmount) &&\r\n (hasMinLoanAmount ? maxLoanAmount > minLoanAmount : maxLoanAmount > 0);\r\n\r\n if (\r\n isRefinance(state.loanPurpose) &&\r\n !isNaN(cashOutAmount) &&\r\n cashOutAmount > 0\r\n ) {\r\n num += cashOutAmount;\r\n } else {\r\n cashOutAmount = 0;\r\n }\r\n\r\n if (hasMinLoanAmount || hasMaxLoanAmount) {\r\n if (hasMinLoanAmount && num < minLoanAmount) {\r\n return hasMaxLoanAmount\r\n ? `Enter a loan amount between ${formatCurrency(\r\n minLoanAmount\r\n )} and ${formatCurrency(maxLoanAmount - cashOutAmount)}`\r\n : `Enter a loan amount of at least ${formatCurrency(minLoanAmount)}`;\r\n } else if (hasMaxLoanAmount && num > maxLoanAmount) {\r\n return hasMinLoanAmount\r\n ? `Enter a loan amount between ${formatCurrency(\r\n minLoanAmount\r\n )} and ${formatCurrency(maxLoanAmount - cashOutAmount)}`\r\n : `Enter a loan amount of ${formatCurrency(\r\n maxLoanAmount - cashOutAmount\r\n )} or less`;\r\n }\r\n }\r\n\r\n if (!hasMinLoanAmount && num <= 0) {\r\n return 'Enter a loan amount of at least $0';\r\n }\r\n\r\n if (num >= parseFloat(state[keys.HOME_VALUE])) {\r\n const name =\r\n state.loanPurpose === 'purchase' ? 'purchase price' : 'home value';\r\n return `Loan amount must be less than ${name}`;\r\n }\r\n}\r\n\r\nexport default {\r\n Component: LoanAmount,\r\n\r\n validate: {\r\n fn: validate,\r\n dependencies: [keys.HOME_VALUE, keys.CASH_OUT_AMOUNT]\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Select } from '@input';\r\nimport { keys, creditScoreRanges, fieldTypes } from '@enums';\r\n\r\nconst options = Object.values(creditScoreRanges);\r\n\r\nfunction CreditScore(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(value) {\r\n if (isNaN(value)) {\r\n return 'Please select a credit score';\r\n }\r\n\r\n if (!options.find(o => value === o.value)) {\r\n return 'Invalid credit score';\r\n }\r\n}\r\n\r\nexport default { Component: CreditScore, validate, type: fieldTypes.SELECT };\r\n","import React from 'react';\r\nimport { Select } from '@input';\r\nimport { keys, propertyTypes, fieldTypes } from '@enums';\r\n\r\nconst options = Object.values(propertyTypes);\r\n\r\nfunction PropertyType(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(value) {\r\n if (!value) {\r\n return 'Please select a property type';\r\n }\r\n\r\n if (!options.find(o => value === o.value)) {\r\n return 'Invalid property type';\r\n }\r\n}\r\n\r\nexport default { Component: PropertyType, validate, type: fieldTypes.SELECT };\r\n","import React from 'react';\r\nimport { Select } from '@input';\r\nimport { keys, occupancyTypes, fieldTypes } from '@enums';\r\n\r\nconst options = Object.values(occupancyTypes);\r\n\r\nfunction OccupancyType(props) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction validate(value) {\r\n if (!value) {\r\n return 'Please select an occupancy type';\r\n }\r\n\r\n if (!options.find(o => value === o.value)) {\r\n return 'Invalid occupancy type';\r\n }\r\n}\r\n\r\nexport default { Component: OccupancyType, validate, type: fieldTypes.SELECT };\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"controls_cashoutwrapper__ojijs\";\nvar _3 = \"controls_content__pax76\";\nvar _4 = \"controls_controldot__xdkvb\";\nvar _5 = \"640px\";\nvar _6 = \"790px\";\nvar _7 = \"#057676\";\nvar _8 = \"controls_full__ihtbk\";\nvar _9 = \"#434343\";\nvar _a = \"controls_item__n4drn\";\nvar _b = \"controls_itemlabel__sct52\";\nvar _c = \"controls_line__d-amw\";\nvar _d = \"controls_mask__hkqun\";\nvar _e = \"79px\";\nvar _f = \"110px\";\nvar _10 = \"72px\";\nvar _11 = \"665px\";\nvar _12 = \"controls_optional__oporv\";\nvar _13 = \"teal\";\nvar _14 = \"controls_timelinecontent__jave2\";\nvar _15 = \"2\";\nvar _16 = \"#cdd3dc\";\nvar _17 = \"controls_wrapper__memop\";\nexport { _1 as \"body\", _2 as \"cashOutWrapper\", _3 as \"content\", _4 as \"controlDot\", _5 as \"controlsMobileWidth\", _6 as \"controlsStackedWidth\", _7 as \"darkTeal\", _8 as \"full\", _9 as \"headline\", _a as \"item\", _b as \"itemLabel\", _c as \"line\", _d as \"mask\", _e as \"menuHeight\", _f as \"menuHeightLarge\", _10 as \"menuHeightMobile\", _11 as \"modalMobileWidth\", _12 as \"optional\", _13 as \"teal\", _14 as \"timelineContent\", _15 as \"timelineStrokeWidth\", _16 as \"timelineTrackColor\", _17 as \"wrapper\" }\n","import React from 'react';\r\nimport * as styles from '../../Controls.module.scss';\r\nimport { Text } from '@input';\r\nimport { keys } from '@enums';\r\nimport { isPurchase, isRefinance } from '@helpers';\r\nimport { isString } from 'lodash';\r\nimport classNames from 'classnames';\r\n\r\nfunction CashOutAmount({ loanAmount, loanPurpose, ...props }) {\r\n return isPurchase(loanPurpose) ? null : (\r\n
    \r\n \r\n Cash Out (Optional)\r\n \r\n }\r\n placeholder=\"Enter a cash out amount\"\r\n className=\"input-cash-out\"\r\n fieldClassName=\"field-cash-out\"\r\n name={keys.CASH_OUT_AMOUNT}\r\n maxWidth={350}\r\n isCurrency\r\n {...props}\r\n />\r\n
    \r\n );\r\n}\r\n\r\nfunction validate(num, state) {\r\n if (!isRefinance(state.loanPurpose)) {\r\n return null;\r\n }\r\n\r\n if (isString(num)) {\r\n num = num.trim();\r\n\r\n if (!num) {\r\n return null;\r\n }\r\n }\r\n\r\n const value = parseFloat(num);\r\n\r\n if (num && isNaN(value)) {\r\n return 'Enter a valid cash out amount';\r\n }\r\n\r\n if (value < 0) {\r\n return 'Cash out amount cannot be negative';\r\n }\r\n\r\n const loanAmount = parseFloat(state.loanAmount);\r\n const homeValue = parseFloat(state.homeValue);\r\n\r\n if (\r\n !isNaN(loanAmount) &&\r\n !isNaN(homeValue) &&\r\n !isNaN(value) &&\r\n value + loanAmount >= homeValue\r\n ) {\r\n return 'Cash out amount plus loan amount must be less than home value';\r\n }\r\n}\r\n\r\nexport default {\r\n Component: CashOutAmount,\r\n dependencies: keys.LOAN_PURPOSE,\r\n validate: {\r\n fn: validate,\r\n dependencies: [keys.LOAN_AMOUNT, keys.HOME_VALUE]\r\n }\r\n};\r\n","import { getConfig } from '@helpers';\r\n\r\nexport default function useConfig() {\r\n return getConfig() ?? {};\r\n}\r\n","import { useRef, useEffect } from 'react';\r\n\r\nexport default function usePrevious(value) {\r\n const ref = useRef();\r\n\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]);\r\n\r\n return ref.current;\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useRef } from 'react';\r\nimport { field, fieldTypes, keys } from '@enums';\r\nimport ZipCode from './ZipCode';\r\nimport HomeValue from './HomeValue';\r\nimport LoanAmount from './LoanAmount';\r\nimport CreditScore from './CreditScore';\r\nimport PropertyType from './PropertyType';\r\nimport OccupancyType from './OccupancyType';\r\nimport CashOutAmount from './CashOutAmount';\r\nimport useConfig from '@hooks/useConfig';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useIsMobile from '@hooks/useIsMobile';\r\nimport { isFunction, debounce } from 'lodash';\r\nimport {\r\n FORM_FIELDS,\r\n VALIDATE_ZIP_CODE_ENDPOINT,\r\n DEFAULT_ZIP_CODE_ERROR,\r\n ZIP_CODE_VALIDATION_DEBOUNCE_TIME,\r\n MAX_ZIP_CODE_VALIDATIONS_BEFORE_DEBOUNCE\r\n} from '@constants';\r\n\r\nexport default React.memo(function FieldComponents({\r\n state,\r\n errors,\r\n showInlineErrors,\r\n cachedZipCodes,\r\n addCachedZipCode,\r\n canRefresh,\r\n validations = {},\r\n canValidate,\r\n inputsAreOpen,\r\n onChange,\r\n updateErrors,\r\n setCanValidate,\r\n setCurrentInput,\r\n refresh,\r\n prefetchScenario\r\n}) {\r\n //////////////////////////\r\n // Prefetch\r\n //////////////////////////\r\n const { scenarioPrefetchDelay } = useConfig();\r\n const prefetchTimer = useRef();\r\n\r\n useEffect(() => {\r\n clearTimeout(prefetchTimer.current);\r\n\r\n if (scenarioPrefetchDelay && scenarioPrefetchDelay > 0) {\r\n prefetchTimer.current = setTimeout(() => {\r\n if (canRefresh) {\r\n prefetchScenario(state);\r\n }\r\n }, scenarioPrefetchDelay);\r\n }\r\n\r\n let timer = prefetchTimer.current;\r\n return () => clearTimeout(timer);\r\n }, [canRefresh, state, prefetchScenario, scenarioPrefetchDelay]);\r\n\r\n //////////////////////////\r\n // Field State\r\n //////////////////////////\r\n\r\n const stateRef = useRef(state);\r\n const cachedZipCodesRef = useRef({});\r\n\r\n useEffect(() => (stateRef.current = state), [state]);\r\n useEffect(\r\n () => (cachedZipCodesRef.current = cachedZipCodes),\r\n [cachedZipCodes]\r\n );\r\n\r\n const zipCodeCount = useRef(0);\r\n const checkZipCode = useCallback(\r\n async zipCode => {\r\n if (stateRef.current.zipCode !== zipCode) {\r\n return;\r\n }\r\n\r\n const response = await fetch(VALIDATE_ZIP_CODE_ENDPOINT, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept-Encoding': 'gzip, deflate',\r\n Accept: '*/*'\r\n },\r\n body: JSON.stringify({ zipCode })\r\n });\r\n\r\n const data = await response.json();\r\n\r\n if (stateRef.current.zipCode === zipCode) {\r\n updateErrors(\r\n data.isValid ? null : data.message ?? DEFAULT_ZIP_CODE_ERROR,\r\n keys.FOOTPRINT\r\n );\r\n }\r\n\r\n addCachedZipCode(zipCode, data);\r\n },\r\n [addCachedZipCode, updateErrors]\r\n );\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const debouncedCheckZipCode = useCallback(\r\n debounce(checkZipCode, ZIP_CODE_VALIDATION_DEBOUNCE_TIME, {\r\n leading: true,\r\n trailing: true\r\n }),\r\n [checkZipCode]\r\n );\r\n\r\n const validateZipCodeInFootprint = useCallback(\r\n async zipCode => {\r\n zipCode = String(zipCode);\r\n\r\n const cachedData = cachedZipCodesRef.current?.[zipCode];\r\n\r\n if (cachedData) {\r\n updateErrors(\r\n cachedData.isValid\r\n ? null\r\n : cachedData.message ?? DEFAULT_ZIP_CODE_ERROR,\r\n keys.ZIP_CODE\r\n );\r\n\r\n return;\r\n }\r\n\r\n try {\r\n const fn =\r\n zipCodeCount.current > MAX_ZIP_CODE_VALIDATIONS_BEFORE_DEBOUNCE\r\n ? debouncedCheckZipCode\r\n : checkZipCode;\r\n\r\n fn(zipCode);\r\n\r\n zipCodeCount.current++;\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n },\r\n [updateErrors, checkZipCode, debouncedCheckZipCode]\r\n );\r\n\r\n const validate = useCallback(\r\n (value, name, currentState = state) => {\r\n const { validate } = controls[name];\r\n const fn = isFunction(validate) ? validate : validate.fn;\r\n const dependencies = validate.dependencies;\r\n const _state = { ...currentState };\r\n const errorMessage = fn?.(value, _state, validations) ?? null;\r\n\r\n if (fn) {\r\n updateErrors(errorMessage, name);\r\n }\r\n\r\n if (dependencies) {\r\n [dependencies].flat().forEach(key => {\r\n const { validate } = controls[key];\r\n const fn = isFunction(validate) ? validate : validate.fn;\r\n\r\n if (fn) {\r\n const errorMessage = fn(_state[key], _state, validations) ?? null;\r\n updateErrors(errorMessage, key);\r\n }\r\n });\r\n }\r\n\r\n if (name === keys.ZIP_CODE && !errorMessage) {\r\n validateZipCodeInFootprint(value);\r\n }\r\n },\r\n [updateErrors, state, validations, validateZipCodeInFootprint]\r\n );\r\n\r\n const prevState = usePrevious(state);\r\n\r\n useEffect(() => {\r\n if (state && prevState) {\r\n Object.keys(controls).forEach(key => {\r\n if (\r\n state[key] !== prevState[key] ||\r\n state.loanPurpose !== prevState.loanPurpose\r\n // (state.loanPurpose !== prevState.loanPurpose &&\r\n // key === keys.CASH_OUT_AMOUNT)\r\n ) {\r\n validate(state[key], key, state);\r\n }\r\n });\r\n }\r\n }, [state, prevState, validate]);\r\n\r\n const handleFocus = useCallback(\r\n (_value, name) => {\r\n clearTimeout(prefetchTimer.current);\r\n setCurrentInput(name);\r\n },\r\n [setCurrentInput]\r\n );\r\n\r\n const handleBlur = useCallback(\r\n (_value, name) => {\r\n if (!canValidate.includes(name)) {\r\n setCanValidate([...canValidate, name]);\r\n }\r\n },\r\n [canValidate, setCanValidate]\r\n );\r\n\r\n const handleChange = useCallback(\r\n (value, name) => {\r\n onChange(value, name);\r\n\r\n if (name === keys.ZIP_CODE && String(value).length === 5) {\r\n setCanValidate([...canValidate, name]);\r\n }\r\n },\r\n [canValidate, onChange, setCanValidate]\r\n );\r\n\r\n const handleKeyDown = useCallback(\r\n (value, name, e) => {\r\n if (e.key === 'Enter') {\r\n refresh();\r\n }\r\n },\r\n [refresh]\r\n );\r\n\r\n const tabIndex = inputsAreOpen ? 0 : -1;\r\n const isMobile = useIsMobile();\r\n\r\n const fields = useMemo(() => {\r\n return FORM_FIELDS.map(name => {\r\n const { Component, dependencies, type } = controls[name];\r\n\r\n if (!Component) {\r\n return null;\r\n }\r\n\r\n const error = errors.find(e => {\r\n return (\r\n e.name === name ||\r\n (name === keys.ZIP_CODE && e.name === keys.FOOTPRINT)\r\n );\r\n });\r\n\r\n const props = {\r\n name,\r\n tabIndex,\r\n value: state[name],\r\n key: name,\r\n onFocus: handleFocus,\r\n onBlur: handleBlur,\r\n onChange: handleChange,\r\n onKeyDown: handleKeyDown,\r\n hasError: !!error,\r\n errorMessage: error?.message ?? null,\r\n showErrorMessage: showInlineErrors\r\n };\r\n\r\n if (type === fieldTypes.SELECT && isMobile) {\r\n props.usePortal = false;\r\n }\r\n\r\n if (dependencies) {\r\n [dependencies].flat().forEach(key => {\r\n props[key] = state[key];\r\n });\r\n }\r\n\r\n return ;\r\n });\r\n }, [\r\n state,\r\n tabIndex,\r\n isMobile,\r\n errors,\r\n showInlineErrors,\r\n handleBlur,\r\n handleChange,\r\n handleFocus,\r\n handleKeyDown\r\n ]);\r\n\r\n return fields;\r\n});\r\n\r\n// Object includes keys for each potential form field along\r\n// with a validation function. When the field's value changes\r\n// it will be passed to this function. It should return\r\n// a string with an error message if it is invalid.\r\nconst controls = {\r\n [field.LOAN_AMOUNT]: LoanAmount,\r\n [field.ZIP_CODE]: ZipCode,\r\n [field.HOME_VALUE]: HomeValue,\r\n [field.CREDIT_SCORE]: CreditScore,\r\n [field.PROPERTY_TYPE]: PropertyType,\r\n [field.OCCUPANCY_TYPE]: OccupancyType,\r\n [field.CASH_OUT_AMOUNT]: CashOutAmount\r\n};\r\n","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgError = function SvgError(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 15,\n height: 15,\n fill: \"none\",\n viewBox: \"0 0 15 15\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#B21E1E\",\n d: \"M7.5.299a7.2 7.2 0 1 0 0 14.401A7.2 7.2 0 0 0 7.5.3Zm.718 10.568a1 1 0 0 1-.718.302 1 1 0 0 1-.387-.08 1.1 1.1 0 0 1-.33-.218 1.02 1.02 0 0 1 .32-1.657 1.02 1.02 0 0 1 1.412.935 1 1 0 0 1-.297.718M8.515 7.5a1.016 1.016 0 0 1-2.03 0V4.85a1.015 1.015 0 1 1 2.03 0z\"\n })));\n};\nexport default SvgError;","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"desktopinputs_boxdash__y83iu\";\nvar _3 = \"desktopinputs_boxpath__fb27t\";\nvar _4 = \"desktopinputs_buttonswrapper__lkrbk\";\nvar _5 = \"desktopinputs_cancel__bplsq\";\nvar _6 = \"desktopinputs_content__svzya\";\nvar _7 = \"desktopinputs_contentwrapper__et4ox\";\nvar _8 = \"640px\";\nvar _9 = \"790px\";\nvar _a = \"#057676\";\nvar _b = \"desktopinputs_disableanimation__n89uy\";\nvar _c = \"desktopinputs_disabled__w3ett\";\nvar _d = \"desktopinputs_forceshow__atawz\";\nvar _e = \"#434343\";\nvar _f = \"desktopinputs_hidden__0ts1a\";\nvar _10 = \"desktopinputs_inputs__929ru\";\nvar _11 = \"79px\";\nvar _12 = \"110px\";\nvar _13 = \"72px\";\nvar _14 = \"665px\";\nvar _15 = \"desktopinputs_outline__y9+lx\";\nvar _16 = \"desktopinputs_refresh__8xigy\";\nvar _17 = \"teal\";\nvar _18 = \"2\";\nvar _19 = \"#cdd3dc\";\nvar _1a = \"desktopinputs_validation__t0rks\";\nexport { _1 as \"body\", _2 as \"boxDash\", _3 as \"boxPath\", _4 as \"buttonsWrapper\", _5 as \"cancel\", _6 as \"content\", _7 as \"contentWrapper\", _8 as \"controlsMobileWidth\", _9 as \"controlsStackedWidth\", _a as \"darkTeal\", _b as \"disableAnimation\", _c as \"disabled\", _d as \"forceShow\", _e as \"headline\", _f as \"hidden\", _10 as \"inputs\", _11 as \"menuHeight\", _12 as \"menuHeightLarge\", _13 as \"menuHeightMobile\", _14 as \"modalMobileWidth\", _15 as \"outline\", _16 as \"refresh\", _17 as \"teal\", _18 as \"timelineStrokeWidth\", _19 as \"timelineTrackColor\", _1a as \"validation\" }\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport Fields from '../Fields';\r\nimport ControlButton from '../../ControlButton';\r\nimport Button from '@input/Button';\r\nimport * as styles from './DesktopInputs.module.scss';\r\nimport Error from './error.svg';\r\nimport classNames from 'classnames';\r\nimport ResizeObserver from 'resize-observer-polyfill';\r\n\r\nexport default React.memo(function DesktopInputs({\r\n state,\r\n validations,\r\n canValidate,\r\n canRefresh,\r\n isMobile,\r\n visibleErrors,\r\n cachedZipCodes,\r\n addCachedZipCode,\r\n inputsAreOpen,\r\n setState,\r\n cancel,\r\n setInputsRect,\r\n dotRef,\r\n updateErrors,\r\n setCanValidate,\r\n refreshData,\r\n setCurrentInput,\r\n prefetchScenario\r\n}) {\r\n //////////////////////////\r\n // Layout\r\n //////////////////////////\r\n\r\n const [{ pathLength, pathStart }, setPathLength] = useState({\r\n pathLength: 0,\r\n pathStart: 39.1\r\n });\r\n\r\n // Used to disable animation when input height\r\n // changes due to cash out showing/hiding\r\n const pathLengthTimer = useRef();\r\n\r\n const wrapper = useRef();\r\n const outline = useRef();\r\n const dot = useRef();\r\n\r\n useEffect(() => {\r\n dot.current = dotRef.current;\r\n }, [dotRef]);\r\n\r\n useEffect(() => {\r\n let observer = null;\r\n\r\n if (!isMobile && wrapper.current && outline.current && dot.current) {\r\n observer = new ResizeObserver(entries => {\r\n const wrapperEl = wrapper?.current;\r\n const outlineEl = outline?.current;\r\n const dotEl = dot?.current;\r\n\r\n if (isMobile || !wrapperEl || !outlineEl || !dotEl) {\r\n return;\r\n }\r\n\r\n const entry = entries?.[0];\r\n const wrapperRect = wrapperEl.getBoundingClientRect();\r\n const outlineRect = outlineEl.getBoundingClientRect();\r\n const dotRect = dotEl.getBoundingClientRect();\r\n\r\n if (entry?.contentRect) {\r\n clearTimeout(pathLengthTimer.current);\r\n outlineEl.classList.add(styles.disableAnimation);\r\n\r\n let { width, height, top: controlsWrapperTop, left } = wrapperRect;\r\n\r\n width = Math.round(width);\r\n height = Math.round(height);\r\n controlsWrapperTop = Math.round(controlsWrapperTop);\r\n left = Math.round(left);\r\n\r\n const controlsTop = controlsWrapperTop + entry.contentRect.top;\r\n\r\n setInputsRect(prevRect => {\r\n if (\r\n prevRect.width &&\r\n prevRect.height &&\r\n prevRect.controlsTop &&\r\n prevRect.left &&\r\n height === prevRect.height &&\r\n width === prevRect.width &&\r\n controlsTop === prevRect.controlsTop &&\r\n left === prevRect.left\r\n ) {\r\n return prevRect;\r\n }\r\n\r\n return { width, height, controlsTop, controlsWrapperTop, left };\r\n });\r\n\r\n setPathLength(() => {\r\n const dotCenter = dotRect.left + dotRect.width / 2;\r\n const dotOffset = dotCenter - outlineRect.left;\r\n\r\n pathLengthTimer.current = setTimeout(() => {\r\n outline.current?.classList.remove(styles.disableAnimation);\r\n }, 20);\r\n\r\n return {\r\n pathLength: outlineRect.width * 2 + outlineRect.height * 2,\r\n pathStart: (dotOffset * 100) / outlineRect.width\r\n };\r\n });\r\n }\r\n });\r\n\r\n observer.observe(wrapper.current);\r\n }\r\n\r\n return () => observer?.disconnect();\r\n }, [setInputsRect, isMobile]);\r\n\r\n const [hasInitialized, setHasInitialized] = useState(false);\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => setHasInitialized(true), 10);\r\n return () => clearTimeout(timer);\r\n }, []);\r\n\r\n return (\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n Refresh Mortgage Rates\r\n \r\n \r\n {!isMobile && (\r\n \r\n Cancel\r\n \r\n )}\r\n
    \r\n
    \r\n {!isMobile && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n});\r\n\r\nfunction ValidationMessage({ errors }) {\r\n return !errors?.length ? null : (\r\n
    \r\n {errors[0].message}\r\n
    \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"mobileinputs_content__fc4cp\";\nvar _3 = \"mobileinputs_contentwrapper__2wv7b\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"#434343\";\nvar _8 = \"79px\";\nvar _9 = \"110px\";\nvar _a = \"72px\";\nvar _b = \"665px\";\nvar _c = \"teal\";\nvar _d = \"2\";\nvar _e = \"#cdd3dc\";\nexport { _1 as \"body\", _2 as \"content\", _3 as \"contentWrapper\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"headline\", _8 as \"menuHeight\", _9 as \"menuHeightLarge\", _a as \"menuHeightMobile\", _b as \"modalMobileWidth\", _c as \"teal\", _d as \"timelineStrokeWidth\", _e as \"timelineTrackColor\" }\n","import React, { useRef, useEffect } from 'react';\r\nimport Fields from '../Fields';\r\nimport Modal from '@components/Modal';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport * as styles from './MobileInputs.module.scss';\r\n\r\nexport default React.memo(function MobileInputs({\r\n state,\r\n validations,\r\n canValidate,\r\n canRefresh,\r\n visibleErrors,\r\n cachedZipCodes,\r\n addCachedZipCode,\r\n inputsAreOpen,\r\n setState,\r\n cancel,\r\n updateErrors,\r\n setCanValidate,\r\n refreshData,\r\n setCurrentInput,\r\n prefetchScenario\r\n}) {\r\n const content = React.createRef();\r\n const scrollTimer = useRef();\r\n\r\n useEffect(() => {\r\n clearTimeout(scrollTimer.current);\r\n\r\n if (!inputsAreOpen) {\r\n scrollTimer.current = setTimeout(() => {\r\n content.current?.scrollTo(0, 0);\r\n }, 300);\r\n }\r\n }, [inputsAreOpen, content]);\r\n\r\n const headline = useMatchMedia(\r\n '(max-width: 450px) and (min-width: 362px)',\r\n 'Personalize your loan',\r\n 'Personalize your loan details'\r\n );\r\n\r\n return (\r\n {\r\n if (canRefresh) {\r\n refreshData();\r\n } else {\r\n cancel();\r\n }\r\n }}\r\n isOpen={inputsAreOpen}\r\n close={cancel}\r\n >\r\n
    \r\n \r\n
    \r\n \r\n );\r\n});\r\n","import React, { useRef, useEffect, useCallback } from 'react';\r\nimport DesktopInputs from './DesktopInputs';\r\nimport MobileInputs from './MobileInputs';\r\nimport useIsMobile from '@hooks/useIsMobile';\r\nimport useHasRendered from '@hooks/useHasRendered';\r\n\r\nexport default function InputsWrapper({\r\n inputsAreOpen,\r\n state,\r\n prevState,\r\n canRefresh,\r\n setInputsAreOpen,\r\n setState,\r\n setCanValidate,\r\n ...rest\r\n}) {\r\n const isMobile = useIsMobile();\r\n const prevIsMobile = useRef(isMobile);\r\n\r\n useEffect(() => {\r\n if (isMobile && !prevIsMobile.current) {\r\n setInputsAreOpen(false);\r\n }\r\n\r\n prevIsMobile.current = isMobile;\r\n }, [isMobile, setInputsAreOpen]);\r\n\r\n const cancel = useCallback(() => {\r\n if (prevState) {\r\n setState(prevState);\r\n }\r\n\r\n setInputsAreOpen(false);\r\n setCanValidate([]);\r\n }, [prevState, setState, setInputsAreOpen, setCanValidate]);\r\n\r\n const Tag = isMobile ? MobileInputs : DesktopInputs;\r\n\r\n const props = {\r\n state,\r\n prevState,\r\n canRefresh,\r\n inputsAreOpen,\r\n setInputsAreOpen,\r\n setState,\r\n cancel,\r\n setCanValidate,\r\n ...rest\r\n };\r\n\r\n const hasRendered = useHasRendered();\r\n\r\n return hasRendered ? (\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"rackrateinputs_active__zmrxa\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"rackrateinputs_button__9vxqr\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"#434343\";\nvar _8 = \"rackrateinputs_item__8ze2c\";\nvar _9 = \"rackrateinputs_label__bhcey\";\nvar _a = \"79px\";\nvar _b = \"110px\";\nvar _c = \"72px\";\nvar _d = \"665px\";\nvar _e = \"rackrateinputs_right__r1ctx\";\nvar _f = \"teal\";\nvar _10 = \"2\";\nvar _11 = \"#cdd3dc\";\nvar _12 = \"rackrateinputs_toggle__sikop\";\nvar _13 = \"rackrateinputs_togglebg__5tfw4\";\nvar _14 = \"rackrateinputs_togglebgwrapper__g5ute\";\nvar _15 = \"rackrateinputs_wrapper__ymgj1\";\nexport { _1 as \"active\", _2 as \"body\", _3 as \"button\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"headline\", _8 as \"item\", _9 as \"label\", _a as \"menuHeight\", _b as \"menuHeightLarge\", _c as \"menuHeightMobile\", _d as \"modalMobileWidth\", _e as \"right\", _f as \"teal\", _10 as \"timelineStrokeWidth\", _11 as \"timelineTrackColor\", _12 as \"toggle\", _13 as \"toggleBg\", _14 as \"toggleBgWrapper\", _15 as \"wrapper\" }\n","import React, { useState, useMemo } from 'react';\r\nimport * as styles from './RackRateInputs.module.scss';\r\nimport classNames from 'classnames';\r\nimport { uniqueId } from 'lodash';\r\nimport { loanPurpose, closingCostType } from '@enums';\r\n\r\nexport default function RackRateInputs({\r\n defaultLoanPurpose,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n setRackRateLoanPurpose,\r\n setRackRateLoanType\r\n}) {\r\n const loanPurposeOptions = [\r\n { label: 'Refinance', value: loanPurpose.REFINANCE },\r\n { label: 'Purchase', value: loanPurpose.PURCHASE }\r\n ];\r\n\r\n const loanTypeOptions = [\r\n { label: 'No closing costs', value: closingCostType.NCC },\r\n { label: 'Points & Fees', value: closingCostType.POINTS }\r\n ];\r\n\r\n if (defaultLoanPurpose === loanPurpose.PURCHASE) {\r\n loanPurposeOptions.reverse();\r\n }\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n}\r\n\r\nfunction Toggle({ value, label, options = [], maxWidth, setValue }) {\r\n const [option1 = {}, option2 = {}] = options;\r\n const labelId = useMemo(() => uniqueId('label-'), []);\r\n\r\n return options?.length < 2 ? null : (\r\n \r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n \r\n
    \r\n \r\n
    \r\n\r\n setValue(option1.value)}\r\n >\r\n {option1.label}\r\n \r\n\r\n setValue(option2.value)}\r\n >\r\n {option2.label}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, {\r\n useState,\r\n useRef,\r\n useMemo,\r\n useCallback,\r\n useEffect\r\n} from 'react';\r\nimport { TimelineContent, Dot } from '@components/Timeline';\r\nimport LoanPurposeButtons from './LoanPurposeButtons';\r\nimport LoanDetails from './LoanDetails';\r\nimport Inputs, { RackRateInputs } from './Inputs';\r\nimport DashedLine from '@components/DashedLine';\r\nimport * as styles from './Controls.module.scss';\r\nimport classNames from 'classnames';\r\nimport { getState, compareLoanDetails, isRefinance } from '@helpers';\r\nimport { keys, field } from '@enums';\r\nimport { isPlainObject, uniqBy } from 'lodash';\r\nimport tracker from '@utils/tracker';\r\nimport { MAX_CACHED_ZIP_CODES } from '@constants';\r\n\r\nexport default function Controls({\r\n state,\r\n setState,\r\n inputsAreOpen,\r\n defaultLoanPurpose,\r\n validations,\r\n apiErrors,\r\n showRackRates,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n setRackRateLoanPurpose,\r\n setRackRateLoanType,\r\n setInputsRect,\r\n setInputsAreOpen,\r\n prefetchScenario\r\n}) {\r\n //////////////////////////\r\n // State\r\n //////////////////////////\r\n\r\n const [_currentState, _setCurrentState] = useState(() => ({\r\n ...state\r\n }));\r\n\r\n useEffect(() => {\r\n _setCurrentState(state);\r\n }, [state]);\r\n\r\n const setCurrentState = useCallback((value, name) => {\r\n _setCurrentState(state => getState(state, value, name));\r\n }, []);\r\n\r\n const [_errors, setErrors] = useState([]);\r\n\r\n const errors = useMemo(() => {\r\n if (!Array.isArray(_errors)) {\r\n return _errors;\r\n }\r\n\r\n return isRefinance(state.loanPurpose)\r\n ? _errors\r\n : _errors.filter(({ name }) => name !== keys.CASH_OUT_AMOUNT);\r\n }, [state.loanPurpose, _errors]);\r\n\r\n const [cachedZipCodes, setCachedZipCodes] = useState({\r\n [String(state.zipCode)]: { isValid: true }\r\n });\r\n\r\n const addCachedZipCode = useCallback((zipCode, data) => {\r\n if (!zipCode || !isPlainObject(data)) {\r\n return;\r\n }\r\n\r\n setCachedZipCodes(zipCodes => {\r\n if (zipCodes[zipCode]?.isValid === data.isValid) {\r\n return zipCodes;\r\n }\r\n\r\n const newZipCodes = { ...zipCodes };\r\n const keys = Object.keys(newZipCodes);\r\n\r\n if (keys.length >= MAX_CACHED_ZIP_CODES - 1) {\r\n delete newZipCodes[keys[0]];\r\n }\r\n\r\n newZipCodes[zipCode] = data;\r\n\r\n return newZipCodes;\r\n });\r\n }, []);\r\n\r\n const canRefresh = useMemo(() => {\r\n const hasChanged = !compareLoanDetails(\r\n _currentState,\r\n state,\r\n Object.values(field).filter(k => {\r\n // Exclude loan purpose from comparison, and only\r\n // compare cash out amount if refinance is selected\r\n return (\r\n k !== keys.LOAN_PURPOSE &&\r\n (isRefinance(state.loanPurpose) || k !== keys.CASH_OUT_AMOUNT)\r\n );\r\n })\r\n );\r\n\r\n const hasErrors = !!errors?.length;\r\n\r\n if (!hasChanged || hasErrors) {\r\n return false;\r\n }\r\n\r\n // It takes a split second to check whether\r\n // a zip code is valid because it requires\r\n // an API request. To avoid a flash between\r\n // when the user clicks refresh and when\r\n // an error is thrown, we disable refreshing\r\n // unless the zip code starts with '9', which\r\n // means it is likely a California zip code\r\n const zipCode = String(_currentState.zipCode);\r\n\r\n if (!cachedZipCodes.hasOwnProperty(zipCode)) {\r\n return zipCode[0] === '9';\r\n }\r\n\r\n return true;\r\n }, [state, _currentState, errors, cachedZipCodes]);\r\n\r\n const currentState = useMemo(() => {\r\n return { ..._currentState, loanPurpose: state.loanPurpose };\r\n }, [state.loanPurpose, _currentState]);\r\n\r\n const shouldTrackOpenInputs = useRef(true);\r\n\r\n useEffect(() => {\r\n if (inputsAreOpen && shouldTrackOpenInputs.current) {\r\n shouldTrackOpenInputs.current = false;\r\n tracker.track(tracker.actions.OPEN_CONTROLS);\r\n }\r\n }, [inputsAreOpen]);\r\n\r\n useEffect(() => {\r\n shouldTrackOpenInputs.current = true;\r\n }, [state]);\r\n\r\n //////////////////////////\r\n // Validations\r\n //////////////////////////\r\n\r\n const [currentInput, setCurrentInput] = useState(null);\r\n const [canValidate, setCanValidate] = useState([]);\r\n const apiValidationErrors = useRef(apiErrors?.validation ?? null);\r\n\r\n useEffect(() => {\r\n apiValidationErrors.current = apiErrors?.validation ?? null;\r\n\r\n if (apiErrors?.validation) {\r\n setInputsAreOpen(true);\r\n }\r\n }, [apiErrors, setInputsAreOpen]);\r\n\r\n // Persist previous footprint error while checking new zip code\r\n const footprintError = useRef(null);\r\n\r\n const updateErrors = useCallback((error = null, name) => {\r\n setErrors(errors => {\r\n if (!error && name !== keys.ZIP_CODE && apiValidationErrors.current) {\r\n delete apiValidationErrors.current[name];\r\n }\r\n\r\n if (name === keys.FOOTPRINT) {\r\n footprintError.current = error;\r\n } else if (error && name === keys.ZIP_CODE) {\r\n footprintError.current = null;\r\n }\r\n\r\n if (!error && !errors.length) {\r\n return errors.slice();\r\n }\r\n\r\n const newErrors = errors.slice().filter(e => e.name !== name);\r\n\r\n if (error) {\r\n newErrors.push({ name, message: error });\r\n }\r\n\r\n return newErrors;\r\n });\r\n }, []);\r\n\r\n const visibleErrors = useMemo(() => {\r\n const currentErrors = [];\r\n\r\n if (footprintError.current) {\r\n currentErrors.push({\r\n name: keys.FOOTPRINT,\r\n message: footprintError.current\r\n });\r\n }\r\n\r\n if (isPlainObject(apiErrors?.validation)) {\r\n Object.keys(apiErrors.validation).forEach(key => {\r\n currentErrors.push({\r\n name: key,\r\n message: apiErrors.validation[key]\r\n });\r\n });\r\n }\r\n\r\n return uniqBy(\r\n currentErrors.concat(\r\n errors.filter(({ name }) => canValidate.includes(name))\r\n ),\r\n 'message'\r\n );\r\n }, [apiErrors, errors, canValidate]);\r\n\r\n //////////////////////////\r\n // Personalize Rates\r\n //////////////////////////\r\n\r\n const refreshData = useCallback(\r\n (prevState = currentState) => {\r\n if (!canRefresh || !prevState) {\r\n return;\r\n }\r\n\r\n if (!isPlainObject(prevState)) {\r\n prevState = currentState;\r\n }\r\n\r\n const newState = { ...prevState, loanPurpose: state.loanPurpose };\r\n const hasErrors = errors?.length;\r\n\r\n if (hasErrors) {\r\n errors.forEach(({ name }) => {\r\n newState[name] = state[name];\r\n });\r\n }\r\n\r\n setInputsAreOpen(false);\r\n setErrors([]);\r\n\r\n if (hasErrors) {\r\n setCurrentState(newState);\r\n } else {\r\n setState(newState);\r\n setCurrentState(newState);\r\n setCanValidate([]);\r\n\r\n tracker.track(tracker.actions.PERSONALIZE_RATES, {\r\n loan_purpose: newState.loanPurpose,\r\n loan_amount: parseInt(newState.loanAmount),\r\n home_value: parseInt(newState.homeValue),\r\n zip_code: newState.zipCode,\r\n credit_score: parseInt(newState.creditScore),\r\n cashOutAmount: isRefinance(newState.loanPurpose)\r\n ? parseInt(newState.cashOutAmount)\r\n : undefined\r\n });\r\n }\r\n },\r\n [\r\n state,\r\n currentState,\r\n errors,\r\n canRefresh,\r\n setCurrentState,\r\n setState,\r\n setInputsAreOpen,\r\n setCanValidate\r\n ]\r\n );\r\n\r\n //////////////////////////\r\n // Layout\r\n //////////////////////////\r\n\r\n const wrapper = useRef();\r\n const dotRef = React.createRef();\r\n\r\n return (\r\n \r\n
    \r\n \r\n \r\n

    Let us know what kind of loan you’re looking for

    \r\n\r\n {!showRackRates ? (\r\n <>\r\n
    \r\n
    \r\n \r\n Select your Loan Type\r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n {' '}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
    \r\n \r\n );\r\n}\r\n","import { useState, useEffect, useRef } from 'react';\r\nimport { isString } from 'lodash';\r\n\r\nexport default function useWindowResizing(options) {\r\n const [isResizing, setIsResizing] = useState(false);\r\n const start = useRef(options?.start);\r\n const complete = useRef(options?.complete);\r\n const bodyClassName = useRef(\r\n isString(options) ? options : options?.bodyClassName\r\n );\r\n\r\n const delay = options?.delay ?? 150;\r\n\r\n useEffect(() => {\r\n if (isString(options)) {\r\n bodyClassName.current = options;\r\n } else {\r\n start.current = options?.start;\r\n complete.current = options?.complete;\r\n bodyClassName.current = options?.bodyClassName;\r\n }\r\n }, [options]);\r\n\r\n useEffect(() => {\r\n let windowIsResizing = false;\r\n let timer = null;\r\n\r\n const handler = () => {\r\n clearTimeout(timer);\r\n\r\n if (!windowIsResizing) {\r\n if (start.current) {\r\n start.current();\r\n }\r\n\r\n if (bodyClassName.current) {\r\n document.body.classList.add(bodyClassName.current);\r\n }\r\n\r\n setIsResizing(true);\r\n }\r\n\r\n windowIsResizing = true;\r\n\r\n timer = setTimeout(() => {\r\n requestAnimationFrame(() => {\r\n if (windowIsResizing) {\r\n windowIsResizing = false;\r\n setIsResizing(false);\r\n\r\n if (bodyClassName.current) {\r\n document.body.classList.remove(bodyClassName.current);\r\n }\r\n\r\n if (complete.current) {\r\n complete.current();\r\n }\r\n }\r\n });\r\n }, delay);\r\n };\r\n\r\n window.addEventListener('resize', handler);\r\n\r\n return () => {\r\n clearTimeout(timer);\r\n window.removeEventListener('resize', handler);\r\n };\r\n }, [delay]);\r\n\r\n return isResizing;\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"modal_bg__d+3d5\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"modal_button__vd+ex\";\nvar _4 = \"modal_buttonwrapper__unws6\";\nvar _5 = \"modal_close__qiz+u\";\nvar _6 = \"modal_content__qz3ua\";\nvar _7 = \"modal_contentwrapper__ime0c\";\nvar _8 = \"640px\";\nvar _9 = \"790px\";\nvar _a = \"#057676\";\nvar _b = \"modal_header__zonhw\";\nvar _c = \"modal_headerwrapper__kar7e\";\nvar _d = \"#434343\";\nvar _e = \".88\";\nvar _f = \"modal_innercontent__qubqa\";\nvar _10 = \"79px\";\nvar _11 = \"110px\";\nvar _12 = \"72px\";\nvar _13 = \"665px\";\nvar _14 = \"modal_scrollwrapper__mt6iu\";\nvar _15 = \"teal\";\nvar _16 = \"2\";\nvar _17 = \"#cdd3dc\";\nvar _18 = \"modal_wrapper__icltl\";\nexport { _1 as \"bg\", _2 as \"body\", _3 as \"button\", _4 as \"buttonWrapper\", _5 as \"close\", _6 as \"content\", _7 as \"contentWrapper\", _8 as \"controlsMobileWidth\", _9 as \"controlsStackedWidth\", _a as \"darkTeal\", _b as \"header\", _c as \"headerWrapper\", _d as \"headline\", _e as \"initialScale\", _f as \"innerContent\", _10 as \"menuHeight\", _11 as \"menuHeightLarge\", _12 as \"menuHeightMobile\", _13 as \"modalMobileWidth\", _14 as \"scrollWrapper\", _15 as \"teal\", _16 as \"timelineStrokeWidth\", _17 as \"timelineTrackColor\", _18 as \"wrapper\" }\n","import React, {\r\n useState,\r\n useRef,\r\n useCallback,\r\n useMemo,\r\n useEffect\r\n} from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { ControlButton } from '@components/Controls';\r\nimport useEvent from '@hooks/useEvent';\r\nimport useWindowResizing from '@hooks/useWindowResizing';\r\nimport useStyleVars from '@hooks/useStyleVars';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport useIsMounted from '@hooks/useIsMounted';\r\nimport * as styles from './Modal.module.scss';\r\nimport FocusLock from 'react-focus-lock';\r\nimport { RemoveScroll } from 'react-remove-scroll';\r\nimport classNames from 'classnames';\r\nimport { isSSR } from '@helpers';\r\nimport { useSpring, animated } from 'react-spring';\r\nimport { uniqueId, isString } from 'lodash';\r\n\r\nconst initialScale = parseFloat(styles.initialScale);\r\n\r\nexport default React.memo(\r\n React.forwardRef(function Modal(\r\n {\r\n className,\r\n wrapperClassName,\r\n isOpen,\r\n contentIsScrollable = true,\r\n header,\r\n headerLabelId,\r\n headerClassName,\r\n headerChildren,\r\n closeLabel,\r\n closeColor,\r\n closeClassName,\r\n contentClassName,\r\n children,\r\n hideWithCss = true,\r\n style = {},\r\n buttonText,\r\n buttonClassName,\r\n buttonIsDisabled,\r\n buttonAriaControls = null,\r\n onButtonClick,\r\n setIsOpen,\r\n close,\r\n ...restProps\r\n },\r\n contentRef\r\n ) {\r\n //////////////////////////\r\n // State\r\n //////////////////////////\r\n\r\n const wrapper = useRef(null);\r\n const ref = useRef(null);\r\n const closeModal = useCallback(() => {\r\n if (setIsOpen) {\r\n setIsOpen(false);\r\n }\r\n\r\n if (close) {\r\n close();\r\n }\r\n }, [close, setIsOpen]);\r\n\r\n useEvent('keydown', e => {\r\n if (isOpen && e.key === 'Escape') {\r\n closeModal();\r\n }\r\n });\r\n\r\n const { modalMobileWidth } = useStyleVars();\r\n const isMobile = useMatchMedia(modalMobileWidth);\r\n const windowIsResizing = useWindowResizing(250);\r\n const isMounted = useIsMounted();\r\n\r\n const isResizing = useRef(windowIsResizing);\r\n\r\n useEffect(() => {\r\n isResizing.current = windowIsResizing;\r\n }, [windowIsResizing]);\r\n\r\n //////////////////////////\r\n // Animation\r\n //////////////////////////\r\n\r\n const [contentIsAnimating, _setContentIsAnimating] = useState(false);\r\n const isHidden = useRef(true);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n isHidden.current = false;\r\n }\r\n }, [isOpen]);\r\n\r\n const setContentIsAnimating = useCallback(\r\n isAnimating => {\r\n if (!isMounted()) {\r\n return;\r\n }\r\n\r\n _setContentIsAnimating(isAnimating);\r\n },\r\n [isMounted]\r\n );\r\n\r\n const isVisible = useMemo(() => {\r\n return isOpen || !isHidden.current;\r\n }, [isOpen]);\r\n\r\n const contentStyle = useMemo(() => {\r\n return !isMobile\r\n ? {\r\n opacity: isOpen ? 1 : 0,\r\n scale: isOpen ? 1 : initialScale,\r\n pause: !isVisible,\r\n delay: isOpen ? 150 : 0,\r\n config: {\r\n mass: null,\r\n tension: 400,\r\n friction: null,\r\n precision: null,\r\n duration: isOpen ? undefined : 0\r\n }\r\n }\r\n : {\r\n y: isOpen ? '0%' : '100%',\r\n pause: !isVisible,\r\n config: {\r\n mass: 0.1,\r\n tension: 280,\r\n friction: 30,\r\n precision: 0.0001,\r\n velocity: 0.015\r\n }\r\n };\r\n }, [isMobile, isOpen, isVisible]);\r\n\r\n const contentSpring = useSpring({\r\n ...contentStyle,\r\n immediate: () => isResizing.current || !isVisible,\r\n onStart: () => {\r\n if (!isResizing.current) {\r\n setContentIsAnimating(true);\r\n }\r\n },\r\n onRest: () => {\r\n setContentIsAnimating(false);\r\n\r\n if (!isOpen) {\r\n isHidden.current = true;\r\n wrapper.current?.classList.add('modal-hidden');\r\n }\r\n }\r\n });\r\n\r\n const springRef = useRef(contentSpring);\r\n\r\n useEffect(() => {\r\n springRef.current = contentSpring;\r\n }, [contentSpring]);\r\n\r\n useEffect(() => {\r\n if (isMobile) {\r\n springRef.current.scale?.set(1);\r\n } else {\r\n springRef.current.y?.set(1);\r\n }\r\n }, [isMobile]);\r\n\r\n //////////////////////////\r\n // Header\r\n //////////////////////////\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setTimeout(() => {\r\n wrapper.current?.scrollTo(0, 0);\r\n }, 0);\r\n\r\n const el = ref.current;\r\n\r\n if (el) {\r\n el.tabIndex = 0;\r\n el.focus();\r\n el.blur();\r\n el.removeAttribute('tabindex');\r\n }\r\n }\r\n }, [isOpen]);\r\n\r\n let headerComponent = null;\r\n let hasAriaLabel = !!headerLabelId;\r\n\r\n const labelId = useMemo(() => {\r\n return headerLabelId ?? uniqueId('modal-label-');\r\n }, [headerLabelId]);\r\n\r\n if (React.isValidElement(header)) {\r\n headerComponent = header;\r\n } else {\r\n const hasLabel = isString(header);\r\n hasAriaLabel = hasLabel;\r\n\r\n const closeButton = (\r\n \r\n );\r\n\r\n headerComponent =\r\n hasLabel || headerChildren ? (\r\n
    \r\n {hasLabel &&

    {header}

    }\r\n {closeButton}\r\n {headerChildren}\r\n
    \r\n ) : (\r\n closeButton\r\n );\r\n }\r\n\r\n const headerWrapper = useRef();\r\n\r\n if (headerComponent) {\r\n headerComponent = (\r\n \r\n {headerComponent}\r\n
    \r\n );\r\n }\r\n\r\n return isSSR() || (!isOpen && !hideWithCss)\r\n ? null\r\n : ReactDOM.createPortal(\r\n \r\n \r\n \r\n {\r\n e.stopPropagation();\r\n }}\r\n >\r\n {headerComponent}\r\n {!contentIsScrollable ? (\r\n children\r\n ) : (\r\n \r\n
    {children}
    \r\n {!buttonText ? null : (\r\n
    \r\n \r\n {buttonText}\r\n \r\n
    \r\n )}\r\n \r\n )}\r\n \r\n \r\n
    \r\n \r\n ,\r\n document.body\r\n );\r\n })\r\n);\r\n\r\nexport const CloseModalButton = React.forwardRef(\r\n ({ className, label = 'Close', close, color }, ref) => {\r\n return (\r\n {\r\n e.stopPropagation();\r\n close();\r\n }}\r\n >\r\n \r\n \r\n );\r\n }\r\n);\r\n","import { useRef, useEffect, useCallback } from 'react';\r\n\r\nexport default function useIsMounted() {\r\n const ref = useRef(false);\r\n\r\n useEffect(() => {\r\n ref.current = true;\r\n return () => (ref.current = false);\r\n }, []);\r\n\r\n return useCallback(() => ref.current, [ref]);\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"640px\";\nvar _3 = \"790px\";\nvar _4 = \"#057676\";\nvar _5 = \"form_focus__5ldkm\";\nvar _6 = \"form_form__wvapw\";\nvar _7 = \"form_haserror__-47qs\";\nvar _8 = \"#434343\";\nvar _9 = \"form_hiddenfields__fwmhq\";\nvar _a = \"form_icon__fgziy\";\nvar _b = \"form_input__ii7io\";\nvar _c = \"79px\";\nvar _d = \"110px\";\nvar _e = \"72px\";\nvar _f = \"665px\";\nvar _10 = \"form_placeholder__te8wp\";\nvar _11 = \"teal\";\nvar _12 = \"2\";\nvar _13 = \"#cdd3dc\";\nexport { _1 as \"body\", _2 as \"controlsMobileWidth\", _3 as \"controlsStackedWidth\", _4 as \"darkTeal\", _5 as \"focus\", _6 as \"form\", _7 as \"hasError\", _8 as \"headline\", _9 as \"hiddenFields\", _a as \"icon\", _b as \"input\", _c as \"menuHeight\", _d as \"menuHeightLarge\", _e as \"menuHeightMobile\", _f as \"modalMobileWidth\", _10 as \"placeholder\", _11 as \"teal\", _12 as \"timelineStrokeWidth\", _13 as \"timelineTrackColor\" }\n","import React, {\r\n useRef,\r\n useEffect,\r\n useMemo,\r\n useState,\r\n useCallback\r\n} from 'react';\r\nimport * as styles from './Form.module.scss';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { upperfirst } from 'lodash';\r\n\r\nexport default React.memo(function FormWrapper({\r\n product,\r\n loanDetails,\r\n className,\r\n selector,\r\n header,\r\n hasPrefillFields = true\r\n}) {\r\n const config = useConfig();\r\n const [hasAddedForm, setHasAddedForm] = useState(false);\r\n const wrapper = useRef();\r\n const form = useMemo(() => {\r\n return ;\r\n }, [selector]);\r\n\r\n const isMutatingDOM = useRef(false);\r\n const mutateDOM = useCallback(callback => {\r\n isMutatingDOM.current = true;\r\n callback();\r\n isMutatingDOM.current = false;\r\n }, []);\r\n\r\n const toggleSelectPlaceholder = useCallback(select => {\r\n select?.classList.toggle(styles.placeholder, !select.value);\r\n }, []);\r\n\r\n const hiddenFields = useRef([]);\r\n\r\n const initElements = useCallback(() => {\r\n mutateDOM(() => {\r\n isMutatingDOM.current = true;\r\n\r\n wrapper.current\r\n .querySelectorAll('input[id*=PhoneNumber]')\r\n .forEach(setPhoneAttributes);\r\n\r\n wrapper.current.querySelectorAll('select').forEach(select => {\r\n toggleSelectPlaceholder(select);\r\n\r\n if (select.firstElementChild?.value === '') {\r\n select.firstElementChild.disabled = true;\r\n }\r\n });\r\n\r\n if (hasPrefillFields && wrapper.current) {\r\n hiddenFields.current = hiddenFieldKeys\r\n .map(key => {\r\n const el = wrapper.current.querySelector(`input[id*=\"${key}\"]`);\r\n\r\n if (!el) {\r\n return null;\r\n }\r\n\r\n if (el.type !== 'hidden' && !config.enableDebugMode) {\r\n el.type = 'hidden';\r\n\r\n const section = el.closest('.ktc-default-section');\r\n\r\n if (section) {\r\n if (!section.classList.contains(styles.hiddenFields)) {\r\n section.querySelectorAll('label').forEach(label => {\r\n label.parentElement.removeChild(label);\r\n });\r\n }\r\n\r\n section.classList.add(styles.hiddenFields);\r\n section.setAttribute('aria-hidden', 'true');\r\n }\r\n }\r\n\r\n return el ? { el, key } : null;\r\n })\r\n .filter(f => f);\r\n }\r\n });\r\n }, [\r\n hasPrefillFields,\r\n config.enableDebugMode,\r\n mutateDOM,\r\n toggleSelectPlaceholder\r\n ]);\r\n\r\n const prevProduct = useRef();\r\n const prevLoanDetails = useRef();\r\n const refreshTimer = useRef();\r\n\r\n const refreshForm = useCallback(\r\n (product, loanDetails, shouldInitElements) => {\r\n if (shouldInitElements) {\r\n initElements();\r\n }\r\n\r\n if (product && loanDetails) {\r\n if (\r\n !shouldInitElements &&\r\n product === prevProduct.current &&\r\n loanDetails === prevLoanDetails.current\r\n ) {\r\n return;\r\n }\r\n isMutatingDOM.current = true;\r\n\r\n clearTimeout(refreshTimer.current);\r\n const delay = config.enableDebugMode ? 100 : 650;\r\n\r\n refreshTimer.current = setTimeout(() => {\r\n mutateDOM(() => {\r\n const data = getHiddenFieldData(product, loanDetails);\r\n\r\n prevProduct.current = product;\r\n prevLoanDetails.current = loanDetails;\r\n\r\n hiddenFields.current.forEach(({ el, key }) => {\r\n if (data.hasOwnProperty(key)) {\r\n el.value = data[key];\r\n }\r\n });\r\n });\r\n }, delay);\r\n }\r\n },\r\n [initElements, mutateDOM, config]\r\n );\r\n\r\n useEffect(() => {\r\n let observer = null;\r\n\r\n if (hasAddedForm) {\r\n initElements();\r\n\r\n observer = new MutationObserver(e => {\r\n if (!isMutatingDOM.current) {\r\n refreshForm(prevProduct.current, prevLoanDetails.current, true);\r\n }\r\n });\r\n\r\n observer.observe(wrapper.current, {\r\n subtree: true,\r\n childList: true\r\n });\r\n }\r\n\r\n return () => observer?.disconnect();\r\n }, [hasAddedForm, initElements, refreshForm]);\r\n\r\n useEffect(() => {\r\n if ((product && loanDetails) || !hasPrefillFields) {\r\n refreshForm(product, loanDetails);\r\n } else {\r\n clearTimeout(refreshTimer.current);\r\n }\r\n }, [product, loanDetails, hasPrefillFields, refreshForm]);\r\n\r\n const resetPhoneAttributes = useCallback(e => {\r\n const el = e.target;\r\n const id = el.id?.toLowerCase();\r\n\r\n if (id?.includes('phonenumber')) {\r\n setPhoneAttributes(el);\r\n }\r\n }, []);\r\n\r\n const handleChange = useCallback(\r\n e => {\r\n if (e.target.tagName === 'SELECT') {\r\n toggleSelectPlaceholder(e.target);\r\n }\r\n },\r\n [toggleSelectPlaceholder]\r\n );\r\n\r\n return (\r\n \r\n {header &&

    {header}

    }\r\n {form}\r\n
    \r\n );\r\n});\r\n\r\nfunction setPhoneAttributes(el) {\r\n el.placeholder = 'Enter a phone number';\r\n\r\n if (el.type !== 'tel') {\r\n el.type = 'tel';\r\n }\r\n}\r\n\r\nfunction getHiddenFieldData(product, loanDetails) {\r\n if (!product || !loanDetails) {\r\n return {};\r\n }\r\n\r\n return {\r\n LoanPurpose: upperfirst(loanDetails.loanPurpose),\r\n PlanDescription: product.planDescription,\r\n PlanNumber: product.planNumber,\r\n QuotedRate: product.rate.toFixed(3),\r\n QuotedAPR: product.apr.toFixed(3),\r\n QuotedPayment: product.payment,\r\n LoanAmount: loanDetails.loanAmount,\r\n EstimatedValue: loanDetails.homeValue,\r\n ZipCode: loanDetails.zipCode,\r\n CreditScore: loanDetails.creditScore,\r\n PropertyType: loanDetails.propertyType,\r\n OccupancyType: loanDetails.occupancyType\r\n };\r\n}\r\n\r\nconst hiddenFieldKeys = [\r\n 'LoanPurpose',\r\n 'PlanDescription',\r\n 'PlanNumber',\r\n 'QuotedRate',\r\n 'QuotedAPR',\r\n 'QuotedPayment',\r\n 'LoanAmount',\r\n 'EstimatedValue',\r\n 'ZipCode',\r\n 'CreditScore',\r\n 'PropertyType',\r\n 'OccupancyType'\r\n];\r\n\r\nconst Form = React.memo(\r\n ({ setHasAddedForm, selector = '#mortgage-rate-calculator-form' }) => {\r\n const ref = useRef();\r\n const hasInitialized = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!hasInitialized.current) {\r\n hasInitialized.current = true;\r\n\r\n const initForm = () => {\r\n const formEl = document.querySelector(selector);\r\n\r\n if (formEl) {\r\n ref.current.appendChild(formEl);\r\n\r\n formEl.className = '';\r\n formEl.style.display = null;\r\n }\r\n\r\n setHasAddedForm(true);\r\n };\r\n\r\n if (document.readyState === 'interactive') {\r\n initForm();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', initForm);\r\n }\r\n }\r\n }, [setHasAddedForm, selector]);\r\n\r\n return ;\r\n }\r\n);\r\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport * as styles from './Hero.module.scss';\r\nimport { TimelineContent, Dot } from '@components/Timeline';\r\nimport DashedLine from '@components/DashedLine';\r\nimport ActionButton from './ActionButton';\r\nimport Button from '@input/Button';\r\nimport PhoneNumber from '@components/PhoneNumber';\r\nimport Modal from '@components/Modal';\r\nimport Form from '@components/Form';\r\nimport useConfig from '@hooks/useConfig';\r\nimport tracker from '@utils/tracker';\r\nimport classNames from 'classnames';\r\nimport { formatParagraphs } from '@helpers';\r\n\r\nexport default React.memo(function Hero({ topWrapper }) {\r\n const config = useConfig();\r\n const hasBreadcrumbs = config.showBreadcrumbs && config.breadcrumbsHtml;\r\n\r\n return (\r\n \r\n
    \r\n {hasBreadcrumbs && (\r\n \r\n )}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n \r\n );\r\n});\r\n\r\nfunction Text({ topWrapper, showPretitle }) {\r\n const config = useConfig();\r\n\r\n const headline = config.headline\r\n .replace(\r\n /]*>([^<]*)<\\/strong>/,\r\n '$1'\r\n )\r\n .replace(/ <\\/span>[^\\b\\w\\d]*/, ' ')\r\n .replace(/ ([^<> ]*)$/, ' $1');\r\n\r\n return (\r\n
    \r\n {showPretitle && (\r\n Today's Mortgage Rates\r\n )}\r\n \r\n \r\n {formatParagraphs(config.introText)}\r\n {config.showHeroLink && config.heroLinkText && config.heroLinkUrl && (\r\n
    \r\n \r\n {config.heroLinkText}\r\n \r\n
    \r\n )}\r\n \r\n
    \r\n );\r\n}\r\n\r\nfunction Links() {\r\n const config = useConfig();\r\n\r\n const showApply = config.showApplyButton && config.applyButtonUrl;\r\n const showChat = config.showChatButton;\r\n const showConsultation = config.showRequestConsultationButton;\r\n const showPhoneNumber = config.showPhoneNumberButton;\r\n const showRateWatch = config.showRateWatchButton && config.rateWatchUrl;\r\n const showScheduleAppointment =\r\n config.showScheduleAppointmentButton && config.bookingsPageUrl;\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n Not sure where to start?\r\n

    Our team of loan agents is here to help

    \r\n\r\n
    \r\n {showScheduleAppointment && (\r\n \r\n )}\r\n\r\n {showApply && (\r\n \r\n {config.applyButtonText}\r\n \r\n )}\r\n\r\n {showConsultation && (\r\n \r\n )}\r\n\r\n {showChat && (\r\n {config.chatButtonText}\r\n )}\r\n {showPhoneNumber && (\r\n \r\n )}\r\n {showRateWatch && (\r\n \r\n {config.rateWatchText}\r\n \r\n )}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nconst ScheduleAppointment = React.memo(\r\n ({\r\n buttonText = 'Schedule an appointment',\r\n modalText = 'Schedule an appointment',\r\n bookingsUrl\r\n }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n tracker.track(tracker.actions.OPEN_BOOKING_MODAL, {\r\n booking_page: bookingsUrl,\r\n is_agent: false\r\n });\r\n }\r\n }, [isOpen, bookingsUrl]);\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n {buttonText}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nconst RequestConsultation = React.memo(({ text }) => {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const content = React.createRef();\r\n const scrollTimer = useRef();\r\n\r\n useEffect(() => {\r\n clearTimeout(scrollTimer.current);\r\n\r\n if (!isOpen) {\r\n scrollTimer.current = setTimeout(() => {\r\n content.current?.scrollTo(0, 0);\r\n }, 300);\r\n }\r\n }, [isOpen, content]);\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n {text}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n \r\n );\r\n});\r\n","var _path, _rect, _rect2, _rect3;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgDetails = function SvgDetails(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n fill: \"none\",\n viewBox: \"0 0 20 20\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#788D94\",\n d: \"M15.206 1.108H4.794A2.765 2.765 0 0 0 2.02 3.882v12.502a2.78 2.78 0 0 0 2.774 2.775h10.43A2.78 2.78 0 0 0 18 16.384V3.882a2.794 2.794 0 0 0-2.793-2.774Zm1.197 15.275c0 .665-.532 1.197-1.197 1.197H4.794a1.19 1.19 0 0 1-1.197-1.197V3.882c0-.665.532-1.197 1.197-1.197h10.43c.666 0 1.198.532 1.198 1.197v12.501z\"\n })), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n width: 8.493,\n height: 1.584,\n x: 5.763,\n y: 5.565,\n fill: \"#788D94\",\n rx: 0.792\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 8.493,\n height: 1.584,\n x: 5.763,\n y: 9.34,\n fill: \"#788D94\",\n rx: 0.792\n })), _rect3 || (_rect3 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 6.343,\n height: 1.584,\n x: 5.763,\n y: 13.116,\n fill: \"#788D94\",\n rx: 0.792\n })));\n};\nexport default SvgDetails;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgFilter = function SvgFilter(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 20,\n height: 20,\n fill: \"none\",\n viewBox: \"0 0 20 20\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#788D94\",\n d: \"M17.229 9.389h-1.565c-.33-1.154-1.38-1.997-2.615-1.997s-2.287.864-2.637 1.997h-7.64a.76.76 0 0 0-.762.762c0 .412.33.762.762.762h7.64c.33 1.153 1.38 1.997 2.615 1.997s2.287-.845 2.616-1.997h1.565a.76.76 0 0 0 .762-.762.73.73 0 0 0-.741-.762m-4.18 1.997a1.24 1.24 0 0 1-1.236-1.235c0-.7.535-1.236 1.235-1.236s1.236.536 1.236 1.236-.577 1.235-1.236 1.235ZM2.773 4.878h1.626c.33 1.154 1.38 1.998 2.615 1.998s2.287-.845 2.616-1.998h7.598a.76.76 0 0 0 .762-.761.747.747 0 0 0-.762-.762H9.63C9.3 2.2 8.25 1.357 7.015 1.357S4.729 2.202 4.4 3.355H2.773a.76.76 0 0 0-.761.762.746.746 0 0 0 .76.761Zm4.242-1.997a1.24 1.24 0 0 1 1.236 1.236c0 .7-.536 1.235-1.236 1.235A1.24 1.24 0 0 1 5.78 4.117c0-.66.577-1.236 1.235-1.236M17.23 15.423h-7.6c-.33-1.153-1.38-1.997-2.615-1.997s-2.287.844-2.616 1.997H2.773a.76.76 0 0 0-.762.762c0 .433.33.762.762.762h1.626c.33 1.153 1.38 1.997 2.616 1.997 1.235 0 2.286-.845 2.615-1.997h7.598a.76.76 0 0 0 .762-.762.746.746 0 0 0-.761-.762ZM7.013 17.42a1.24 1.24 0 0 1-1.235-1.235c0-.7.536-1.236 1.235-1.236s1.236.536 1.236 1.236-.577 1.235-1.236 1.235\"\n })));\n};\nexport default SvgFilter;","import React from 'react';\r\nimport * as styles from './InfoText.module.scss';\r\nimport classNames from 'classnames';\r\nimport * as Icons from './icons';\r\n\r\nexport default function InfoText({\r\n tag: Tag = 'div',\r\n icon,\r\n className,\r\n children,\r\n ...rest\r\n}) {\r\n const Icon = Icons[icon] ?? null;\r\n\r\n return !children ? null : (\r\n \r\n {Icon && (\r\n
    \r\n \r\n
    \r\n )}\r\n {children}\r\n
    \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"infotext_icon__blh87\";\nvar _2 = \"infotext_wrapper__xac+8\";\nexport { _1 as \"icon\", _2 as \"wrapper\" }\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPercent = function SvgPercent(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 15,\n height: 15,\n fill: \"none\",\n viewBox: \"0 0 15 15\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#626262\",\n d: \"M7.5 0C3.365 0 0 3.365 0 7.5S3.365 15 7.5 15 15 11.635 15 7.5 11.635 0 7.5 0m0 13.313a5.812 5.812 0 1 1 0-11.625 5.812 5.812 0 0 1 0 11.624Z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#626262\",\n d: \"M6.306 5.447c0 1.145-1.718 1.145-1.718 0s1.718-1.145 1.718 0m4.103 4.103c0 1.145-1.718 1.145-1.718 0s1.718-1.145 1.718 0m-1.32-4.833L4.717 9.09a.844.844 0 0 0 1.193 1.193l4.372-4.372a.844.844 0 0 0-1.193-1.193Z\"\n })));\n};\nexport default SvgPercent;","// extracted by mini-css-extract-plugin\nvar _1 = \"producttypes_active__bi6bg\";\nvar _2 = \"producttypes_arrow__qrqmo\";\nvar _3 = \"producttypes_arrowwrapper__mw-kg\";\nvar _4 = \"#4c4c4c\";\nvar _5 = \"producttypes_buttonswrapper__lmda2\";\nvar _6 = \"producttypes_categoriesvisible__xziiq\";\nvar _7 = \"producttypes_checklist__ginaa\";\nvar _8 = \"640px\";\nvar _9 = \"790px\";\nvar _a = \"#057676\";\nvar _b = \"producttypes_disablehover__r61yr\";\nvar _c = \"producttypes_down__-ct8g\";\nvar _d = \"producttypes_dropdown__qdhlx\";\nvar _e = \"producttypes_dropdowncontent__9wjxj\";\nvar _f = \"12px\";\nvar _10 = \"producttypes_dropdowntoggle__vnowl\";\nvar _11 = \"producttypes_dropdowntop__ee5id\";\nvar _12 = \"producttypes_dropdownwrapper__ug-za\";\nvar _13 = \"producttypes_enabled__vtnot\";\nvar _14 = \"producttypes_haserror__ev9tz\";\nvar _15 = \"#434343\";\nvar _16 = \"producttypes_hidden__kgfsz\";\nvar _17 = \"producttypes_horizontal__+4iqb\";\nvar _18 = \"producttypes_icon__p6w-m\";\nvar _19 = \"producttypes_loading__+gzlj\";\nvar _1a = \"79px\";\nvar _1b = \"110px\";\nvar _1c = \"72px\";\nvar _1d = \"producttypes_modal__rupqy\";\nvar _1e = \"665px\";\nvar _1f = \"producttypes_modaltrigger__zb+wo\";\nvar _20 = \"producttypes_modaltriggerwrapper__utief\";\nvar _21 = \"producttypes_open__pxns-\";\nvar _22 = \"producttypes_percent__q2kow\";\nvar _23 = \"producttypes_productcategory__-zlr9\";\nvar _24 = \"producttypes_productcategorydivider__axhh5\";\nvar _25 = \"producttypes_productslidein__2tz-8\";\nvar _26 = \"producttypes_producttype__tnoae\";\nvar _27 = \"producttypes_products__mg34z\";\nvar _28 = \"producttypes_scrolling__ygopf\";\nvar _29 = \"producttypes_sizer__c9nho\";\nvar _2a = \"producttypes_spinner__kdpzi\";\nvar _2b = \"teal\";\nvar _2c = \"2\";\nvar _2d = \"#cdd3dc\";\nvar _2e = \"producttypes_up__iy1q+\";\nvar _2f = \"producttypes_wrapper__pst9k\";\nexport { _1 as \"active\", _2 as \"arrow\", _3 as \"arrowWrapper\", _4 as \"body\", _5 as \"buttonsWrapper\", _6 as \"categoriesVisible\", _7 as \"checklist\", _8 as \"controlsMobileWidth\", _9 as \"controlsStackedWidth\", _a as \"darkTeal\", _b as \"disableHover\", _c as \"down\", _d as \"dropdown\", _e as \"dropdownContent\", _f as \"dropdownPadding\", _10 as \"dropdownToggle\", _11 as \"dropdownTop\", _12 as \"dropdownWrapper\", _13 as \"enabled\", _14 as \"hasError\", _15 as \"headline\", _16 as \"hidden\", _17 as \"horizontal\", _18 as \"icon\", _19 as \"loading\", _1a as \"menuHeight\", _1b as \"menuHeightLarge\", _1c as \"menuHeightMobile\", _1d as \"modal\", _1e as \"modalMobileWidth\", _1f as \"modalTrigger\", _20 as \"modalTriggerWrapper\", _21 as \"open\", _22 as \"percent\", _23 as \"productCategory\", _24 as \"productCategoryDivider\", _25 as \"productSlideIn\", _26 as \"productType\", _27 as \"products\", _28 as \"scrolling\", _29 as \"sizer\", _2a as \"spinner\", _2b as \"teal\", _2c as \"timelineStrokeWidth\", _2d as \"timelineTrackColor\", _2e as \"up\", _2f as \"wrapper\" }\n","import React, {\r\n useCallback,\r\n useRef,\r\n useState,\r\n useMemo,\r\n useEffect\r\n} from 'react';\r\nimport ToggleButton from '@input/ToggleButton';\r\nimport DashedLine from '@components/DashedLine';\r\nimport useResizeObserver from '@hooks/useResizeObserver';\r\nimport useClickOutside from '@hooks/useClickOutside';\r\nimport useEscapeKey from '@hooks/useEscapeKey';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport * as styles from './ProductTypes.module.scss';\r\nimport Arrow from '@images/arrow.svg';\r\nimport classNames from 'classnames';\r\nimport { uniqueId, isBoolean } from 'lodash';\r\nimport tracker from '@utils/tracker';\r\n\r\nconst dropdownPadding = parseInt(styles.dropdownPadding);\r\n\r\nexport default React.memo(function ProductTypeButtons({\r\n productCategory,\r\n isEnabled,\r\n isLoading,\r\n isDropdown,\r\n isModal,\r\n isHidden,\r\n hasErrors,\r\n dropdownTextBreakpoint,\r\n className,\r\n categoryClassName,\r\n categoryText,\r\n categoryLoadingText,\r\n categoryTabIndex,\r\n productClassName,\r\n products = [],\r\n showProducts,\r\n categoryButtonIconSize,\r\n spinnerSize,\r\n spinnerThickness,\r\n onCategoryToggle,\r\n onProductToggle,\r\n ...rest\r\n}) {\r\n const wrapper = useRef();\r\n const [dropdownIsOpen, setDropdownIsOpen] = useState(false);\r\n const dropdownWrapper = useRef();\r\n const listId = useMemo(() => uniqueId('product-list-'), []);\r\n\r\n const handleCategoryChange = useCallback(\r\n isEnabled => {\r\n onCategoryToggle(productCategory, isEnabled);\r\n\r\n const action = isEnabled\r\n ? tracker.actions.ENABLE_PRODUCT_TYPE\r\n : tracker.actions.DISABLE_PRODUCT_TYPE;\r\n\r\n tracker.track(action, {\r\n product_category: productCategory\r\n });\r\n },\r\n [productCategory, onCategoryToggle]\r\n );\r\n\r\n const { height: wrapperHeight } = useResizeObserver(wrapper, {\r\n checkWidth: false\r\n });\r\n\r\n let productComponents = !showProducts\r\n ? null\r\n : products?.map((product, index) => (\r\n \r\n ));\r\n\r\n const openDropdown = useCallback(() => {\r\n if (isDropdown) {\r\n if (dropdownWrapper.current) {\r\n dropdownWrapper.current.classList.add(styles.scrolling);\r\n dropdownWrapper.current.scrollTop = 0;\r\n\r\n setTimeout(() => {\r\n dropdownWrapper.current.classList.remove(styles.scrolling);\r\n }, 0);\r\n }\r\n\r\n setDropdownIsOpen(true);\r\n }\r\n }, [isDropdown]);\r\n\r\n const closeDropdown = useCallback(\r\n force => {\r\n if (isDropdown || (isBoolean(force) && force)) {\r\n setDropdownIsOpen(false);\r\n }\r\n },\r\n [isDropdown]\r\n );\r\n\r\n useEffect(() => {\r\n if (!isDropdown) {\r\n closeDropdown(true);\r\n }\r\n }, [isDropdown, closeDropdown]);\r\n\r\n useClickOutside(wrapper, closeDropdown);\r\n useEscapeKey(closeDropdown);\r\n\r\n if (productComponents && isDropdown) {\r\n productComponents = (\r\n \r\n
    {productComponents}
    \r\n \r\n );\r\n }\r\n\r\n return (\r\n productCategory && (\r\n \r\n \r\n {productComponents && (\r\n <>\r\n {isModal && (\r\n \r\n )}\r\n \r\n \r\n {productComponents}\r\n \r\n \r\n )}\r\n \r\n )\r\n );\r\n});\r\n\r\nconst ProductType = React.memo(\r\n ({\r\n productTypeID,\r\n label,\r\n isEnabled,\r\n hasErrors,\r\n className,\r\n categoryIsEnabled,\r\n loanType,\r\n tabIndex,\r\n onChange,\r\n toggleProductCategory\r\n }) => {\r\n return (\r\n {\r\n if (hasErrors) {\r\n return;\r\n }\r\n\r\n if (!categoryIsEnabled) {\r\n toggleProductCategory(loanType, true);\r\n onChange(productTypeID, true);\r\n } else {\r\n onChange(productTypeID);\r\n }\r\n }}\r\n >\r\n {label}\r\n \r\n );\r\n }\r\n);\r\n\r\nconst DropdownToggle = React.memo(\r\n ({\r\n visible,\r\n categoryText,\r\n listId,\r\n textBreakpoint = 475,\r\n tabIndex,\r\n isOpen,\r\n open,\r\n close\r\n }) => {\r\n const [disableHoverEffect, setDisableHoverEffect] = useState(false);\r\n\r\n const isShortText = useMatchMedia(textBreakpoint);\r\n\r\n const dropdownLabel = useMemo(() => {\r\n const srLabel = categoryText\r\n .trim()\r\n .replace(/s$/i, '')\r\n .replace(/\\bproducts?$/i, '');\r\n\r\n return (\r\n \r\n {isShortText ? (\r\n <>\r\n Select {srLabel} Products\r\n \r\n ) : (\r\n <>\r\n Select {srLabel} Products\r\n \r\n )}\r\n \r\n );\r\n }, [categoryText, isShortText]);\r\n\r\n return (\r\n visible && (\r\n {\r\n setDisableHoverEffect(true);\r\n\r\n if (isOpen) {\r\n close();\r\n } else {\r\n open();\r\n }\r\n }}\r\n onMouseLeave={() => setDisableHoverEffect(false)}\r\n >\r\n {dropdownLabel}\r\n \r\n \r\n \r\n \r\n \r\n )\r\n );\r\n }\r\n);\r\n","import React, { useState, useRef, useMemo } from 'react';\r\nimport ProductTypeButtons from './ProductTypeButtons';\r\nimport Modal from '@components/Modal';\r\nimport useIsomorphicLayoutEffect from '@hooks/useIsomorphicLayoutEffect';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport useHasRendered from '@hooks/useHasRendered';\r\nimport { SmallSpinner } from '@components/Spinner';\r\nimport Percent from './percent.svg';\r\nimport * as styles from './ProductTypes.module.scss';\r\nimport classNames from 'classnames';\r\nimport { isNumber, uniqueId } from 'lodash';\r\nimport { isSSR } from '@helpers';\r\n\r\nconst BASE_DROPDOWN_BREAKPOINT = 755;\r\nconst BASE_DROPDOWN_BREAKPOINT_OFFSET = 20;\r\nconst BASE_MODAL_CATEGORY_BREAKPOINT = 785;\r\nconst MODAL_CATEGORY_BREAKPOINT_OFFSET = 210;\r\n\r\nexport default React.memo(function ProductTypes({\r\n className,\r\n categoryWrapperClassName,\r\n categoryButtonClassName,\r\n categoryTabIndex,\r\n productButtonClassName,\r\n productTypes = {},\r\n direction = 'vertical',\r\n categoryButtonIconSize,\r\n spinnerSize,\r\n spinnerThickness,\r\n isHidden,\r\n isLoading,\r\n isLoadingCategory,\r\n hasErrors,\r\n dropdownBreakpoint,\r\n modalCategoryBreakpoint,\r\n forceDropdown,\r\n isModal,\r\n modalIsOpen,\r\n openModal,\r\n closeModal,\r\n dropdownTextBreakpoint,\r\n showProducts = true,\r\n toggleProductCategory,\r\n toggleProductType,\r\n ...rest\r\n}) {\r\n //////////////////////////\r\n // Layout Calculations\r\n //////////////////////////\r\n\r\n const hasRendered = useHasRendered();\r\n const sizer = useRef();\r\n\r\n // Breakpoint at which product buttons move to dropdown\r\n const [dropdownLayout, setDropdownLayout] = useState({\r\n breakpoint: dropdownBreakpoint ?? BASE_DROPDOWN_BREAKPOINT,\r\n hasBreakpoint: forceDropdown || isNumber(dropdownBreakpoint)\r\n });\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n if (sizer.current) {\r\n const offset = BASE_DROPDOWN_BREAKPOINT_OFFSET;\r\n\r\n setDropdownLayout({\r\n breakpoint: sizer.current.offsetWidth + offset,\r\n hasBreakpoint: true\r\n });\r\n }\r\n }, []);\r\n\r\n dropdownBreakpoint = Math.max(\r\n dropdownLayout.breakpoint,\r\n BASE_DROPDOWN_BREAKPOINT\r\n );\r\n\r\n const isDropdown =\r\n !!(useMatchMedia(dropdownBreakpoint) || forceDropdown) && !isModal;\r\n\r\n // When displaying product toggles inside a modal,\r\n // we still display the categories outside the modal\r\n // until they no longer fit on the screen\r\n const [modalLayout, setModalLayout] = useState({\r\n breakpoint: modalCategoryBreakpoint ?? BASE_MODAL_CATEGORY_BREAKPOINT,\r\n hasBreakpoint: isNumber(modalCategoryBreakpoint)\r\n });\r\n\r\n modalCategoryBreakpoint = Math.max(\r\n modalLayout.breakpoint,\r\n BASE_MODAL_CATEGORY_BREAKPOINT\r\n );\r\n\r\n const hideModalCategories = useMatchMedia(modalCategoryBreakpoint);\r\n\r\n //////////////////////////\r\n // Content\r\n //////////////////////////\r\n\r\n const { fixed, adjustable } = productTypes;\r\n const modalId = useMemo(() => uniqueId('product-type-modal-'), []);\r\n\r\n const sharedProps = {\r\n categoryTabIndex,\r\n isDropdown,\r\n isModal,\r\n spinnerSize,\r\n spinnerThickness,\r\n categoryButtonIconSize,\r\n showProducts,\r\n dropdownTextBreakpoint,\r\n isHidden,\r\n hasErrors,\r\n className: categoryWrapperClassName,\r\n categoryClassName: categoryButtonClassName,\r\n productClassName: productButtonClassName,\r\n onCategoryToggle: toggleProductCategory,\r\n onProductToggle: toggleProductType,\r\n 'aria-hidden': hasErrors\r\n };\r\n\r\n const fixedProps = {\r\n productCategory: 'fixed',\r\n categoryText: 'Fixed Rate Mortgages',\r\n categoryLoadingText: 'Loading Fixed Rates',\r\n products: fixed.products,\r\n isEnabled: fixed.isEnabled,\r\n isLoading: isLoading && isLoadingCategory.fixed,\r\n ...sharedProps\r\n };\r\n\r\n const adjustableProps = {\r\n productCategory: 'adjustable',\r\n categoryText: 'Adjustable Rate Mortgages',\r\n categoryLoadingText: 'Loading Adjustable Rates',\r\n products: adjustable.products,\r\n isEnabled: adjustable.isEnabled,\r\n isLoading: isLoading && isLoadingCategory.adjustable,\r\n ...sharedProps\r\n };\r\n\r\n const modalProps = {\r\n modalId,\r\n className,\r\n isModal,\r\n isLoading,\r\n fixedProps,\r\n adjustableProps,\r\n openModal,\r\n categoryTabIndex,\r\n hideCategories: hideModalCategories,\r\n hasBreakpoint: modalLayout.hasBreakpoint,\r\n setLayout: setModalLayout\r\n };\r\n\r\n const content =\r\n !fixed && !adjustable ? null : (\r\n \r\n \r\n \r\n \r\n );\r\n\r\n const modalButtonText = useMatchMedia(\r\n 370,\r\n 'View your rates',\r\n 'View your mortgage rates'\r\n );\r\n\r\n return (\r\n <>\r\n {(isSSR() || dropdownLayout.hasBreakpoint || isModal) && (\r\n <>\r\n {!isModal ? (\r\n content\r\n ) : (\r\n <>\r\n \r\n \r\n {content}\r\n \r\n \r\n )}\r\n \r\n )}\r\n {!isSSR() && !dropdownLayout.hasBreakpoint && !isModal && (\r\n \r\n {content}\r\n \r\n )}\r\n {!isSSR() && isModal && !modalLayout.hasBreakpoint}{' '}\r\n \r\n \r\n );\r\n});\r\n\r\nconst ModalProductTriggers = React.memo(\r\n ({\r\n modalId,\r\n className,\r\n isModal,\r\n isLoading,\r\n hideCategories,\r\n categoryTabIndex,\r\n fixedProps,\r\n adjustableProps,\r\n isSizer,\r\n hasBreakpoint,\r\n openModal,\r\n setLayout\r\n }) => {\r\n const sizer = useRef();\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n if (sizer.current && !hasBreakpoint) {\r\n const offset = MODAL_CATEGORY_BREAKPOINT_OFFSET;\r\n\r\n setLayout({\r\n breakpoint: sizer.current.offsetWidth + offset,\r\n hasBreakpoint: true\r\n });\r\n }\r\n }, [hasBreakpoint]);\r\n\r\n const content = (\r\n \r\n {(!hideCategories || isSizer) && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n Select Products\r\n \r\n \r\n );\r\n\r\n const preventRender =\r\n isSSR() || (!isModal && !isSizer) || (isSizer && hasBreakpoint);\r\n\r\n return preventRender ? null : (\r\n <>\r\n {!isSizer ? (\r\n content\r\n ) : (\r\n \r\n {content}\r\n \r\n )}\r\n \r\n );\r\n }\r\n);\r\n","import React, { useState, useCallback } from 'react';\r\nimport { Select } from '@input';\r\nimport ProductTypes from '@components/Content/ProductTypes';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport useHasRendered from '@hooks/useHasRendered';\r\nimport * as styles from './ToolbarContent.module.scss';\r\nimport classNames from 'classnames';\r\nimport { sortStates } from '@enums';\r\n\r\nconst options = Object.values(sortStates);\r\n\r\nexport default React.memo(function ToolbarContent({\r\n isSticky,\r\n canShowContent,\r\n sort,\r\n setSort,\r\n productTypes,\r\n isLoading,\r\n isLoadingCategory,\r\n isDisabled,\r\n toggleProductCategory,\r\n toggleProductType\r\n}) {\r\n const sortText = useMatchMedia(970, 'Sort:', 'Sort by:');\r\n const isModalProductTypes = useMatchMedia(1080);\r\n const hasRendered = useHasRendered();\r\n const [modalIsOpen, setModalIsOpen] = useState(false);\r\n\r\n const openModal = useCallback(() => setModalIsOpen(true), []);\r\n const closeModal = useCallback(() => setModalIsOpen(false), []);\r\n\r\n return (\r\n \r\n
    \r\n {hasRendered && (\r\n \r\n )}\r\n
    \r\n \r\n \r\n );\r\n});\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"640px\";\nvar _3 = \"790px\";\nvar _4 = \"#057676\";\nvar _5 = \"#434343\";\nvar _6 = \"79px\";\nvar _7 = \"110px\";\nvar _8 = \"72px\";\nvar _9 = \"665px\";\nvar _a = \"toolbarcontent_productcategory__kkuju\";\nvar _b = \"toolbarcontent_producttypes__zw4z6\";\nvar _c = \"toolbarcontent_showcontent__fcnct\";\nvar _d = \"toolbarcontent_sort__l8xxr\";\nvar _e = \"teal\";\nvar _f = \"2\";\nvar _10 = \"#cdd3dc\";\nvar _11 = \"toolbarcontent_wrapper__gc4qx\";\nexport { _1 as \"body\", _2 as \"controlsMobileWidth\", _3 as \"controlsStackedWidth\", _4 as \"darkTeal\", _5 as \"headline\", _6 as \"menuHeight\", _7 as \"menuHeightLarge\", _8 as \"menuHeightMobile\", _9 as \"modalMobileWidth\", _a as \"productCategory\", _b as \"productTypes\", _c as \"showContent\", _d as \"sort\", _e as \"teal\", _f as \"timelineStrokeWidth\", _10 as \"timelineTrackColor\", _11 as \"wrapper\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"18px\";\nvar _3 = \"toolbar_bottomsentinel__eg8ez\";\nvar _4 = \"toolbar_contentsentinel__yuzqp\";\nvar _5 = \"12px\";\nvar _6 = \"640px\";\nvar _7 = \"790px\";\nvar _8 = \"#057676\";\nvar _9 = \"toolbar_finishedsticking__hpwq3\";\nvar _a = \"#434343\";\nvar _b = \"79px\";\nvar _c = \"110px\";\nvar _d = \"72px\";\nvar _e = \"665px\";\nvar _f = \"toolbar_showcontent__7hbjs\";\nvar _10 = \"toolbar_spacerbottom__x6tyu\";\nvar _11 = \"toolbar_spacertop__gjqex\";\nvar _12 = \"toolbar_static__nvfqh\";\nvar _13 = \"teal\";\nvar _14 = \"2\";\nvar _15 = \"#cdd3dc\";\nvar _16 = \"5px\";\nvar _17 = \"toolbar_topsentinel__ssv-7\";\nvar _18 = \"toolbar_wrapper__vdvsb\";\nexport { _1 as \"body\", _2 as \"bottomMargin\", _3 as \"bottomSentinel\", _4 as \"contentSentinel\", _5 as \"contentSentinelOffset\", _6 as \"controlsMobileWidth\", _7 as \"controlsStackedWidth\", _8 as \"darkTeal\", _9 as \"finishedSticking\", _a as \"headline\", _b as \"menuHeight\", _c as \"menuHeightLarge\", _d as \"menuHeightMobile\", _e as \"modalMobileWidth\", _f as \"showContent\", _10 as \"spacerBottom\", _11 as \"spacerTop\", _12 as \"static\", _13 as \"teal\", _14 as \"timelineStrokeWidth\", _15 as \"timelineTrackColor\", _16 as \"topMargin\", _17 as \"topSentinel\", _18 as \"wrapper\" }\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\r\nimport ToolbarContent from './ToolbarContent';\r\nimport useResizeObserver from '@hooks/useResizeObserver';\r\nimport useStickyOffset from '@hooks/useStickyOffset';\r\nimport * as styles from './Toolbar.module.scss';\r\nimport classNames from 'classnames';\r\n\r\nconst contentSentinelOffset = parseInt(styles.contentSentinelOffset);\r\nconst spacerTopHeight = parseInt(styles.topMargin);\r\n\r\nexport default React.memo(function Toolbar({\r\n offset = 0,\r\n isDisabled,\r\n isStatic,\r\n ...rest\r\n}) {\r\n const wrapper = useRef();\r\n const { height } = useResizeObserver(wrapper);\r\n const topSentinel = useRef();\r\n const contentSentinel = useRef();\r\n const bottomSentinel = useRef();\r\n const headerHeight = useStickyOffset();\r\n const isMounted = useRef(true);\r\n\r\n const [stickyState, _setStickyState] = useState({\r\n started: false,\r\n showContent: false,\r\n finished: false\r\n });\r\n\r\n const setStickyState = useCallback(state => {\r\n _setStickyState(prevState => {\r\n const newState = { ...prevState, ...state };\r\n\r\n document.body.classList.toggle(\r\n 'sticky-toolbar',\r\n newState.started && !newState.finished\r\n );\r\n\r\n return newState;\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n document.body.classList.toggle('disable-sticky-toolbar', isStatic);\r\n\r\n return () => {\r\n isMounted.current = false;\r\n document.body.classList.remove('sticky-toolbar');\r\n document.body.classList.remove('disable-sticky-toolbar');\r\n document.body.classList.remove('calculating-sticky-toolbar');\r\n };\r\n }, [isStatic]);\r\n\r\n useEffect(() => {\r\n const topEl = topSentinel.current;\r\n const contentEl = contentSentinel.current;\r\n const bottomEl = bottomSentinel.current;\r\n\r\n let hasInitialCheck = false;\r\n let topObserver = null;\r\n let contentObserver = null;\r\n let bottomObserver = null;\r\n\r\n const initObservers = () => {\r\n topObserver = new IntersectionObserver(\r\n ([e]) => {\r\n const rect = e.boundingClientRect;\r\n const rootRect = e.rootBounds;\r\n const ratio = e.intersectionRatio;\r\n\r\n if (!rect || !rootRect) {\r\n return;\r\n }\r\n\r\n setStickyState({ started: ratio < 1 && rect.top <= rootRect.height });\r\n },\r\n { threshold: [1] }\r\n );\r\n\r\n contentObserver = new IntersectionObserver(\r\n ([e]) => {\r\n const rect = e.boundingClientRect;\r\n const rootRect = e.rootBounds;\r\n const ratio = e.intersectionRatio;\r\n\r\n if (!rect || !rootRect) {\r\n return;\r\n }\r\n\r\n setStickyState({\r\n showContent: ratio < 1 && rect.top < rootRect.height\r\n });\r\n },\r\n { threshold: [1] }\r\n );\r\n\r\n // Remove sticky class when user scrolls\r\n // past the end of the rate table\r\n bottomObserver = new IntersectionObserver(\r\n ([e]) => {\r\n const rect = e.boundingClientRect;\r\n const rootRect = e.rootBounds;\r\n const ratio = e.intersectionRatio;\r\n\r\n if (!rect || !rootRect) {\r\n return;\r\n }\r\n\r\n // User scrolled back up from below the rate table\r\n if (rect.bottom > rootRect.top && ratio === 1) {\r\n setStickyState({ finished: false });\r\n }\r\n\r\n // User scrolled past rate table\r\n if (rect.top < rootRect.top && rect.bottom <= rootRect.bottom) {\r\n setStickyState({ finished: true });\r\n }\r\n },\r\n { threshold: [1] }\r\n );\r\n\r\n if (topEl) {\r\n topObserver.observe(topEl);\r\n }\r\n\r\n if (contentEl) {\r\n contentObserver.observe(contentEl);\r\n }\r\n\r\n if (bottomEl) {\r\n bottomObserver.observe(bottomEl);\r\n }\r\n };\r\n\r\n // Perform initial sticky check manually since the\r\n // observers are unreliable when the page first loads\r\n document.body.classList.add('calculating-sticky-toolbar');\r\n\r\n let timer = null;\r\n\r\n const initSticky = (shouldRecalculate, recheckIfWrapperNotFound = true) => {\r\n clearTimeout(timer);\r\n\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n\r\n const ratesWrapper = document.querySelector('#calculator-rates');\r\n const toolbar = wrapper.current;\r\n\r\n if ((!ratesWrapper || !toolbar) && recheckIfWrapperNotFound) {\r\n if (recheckIfWrapperNotFound) {\r\n timer = setTimeout(() => initSticky(true, false), 150);\r\n }\r\n\r\n return;\r\n }\r\n\r\n const wRect = ratesWrapper.getBoundingClientRect();\r\n const tRect = toolbar.getBoundingClientRect();\r\n const scroll = window.scrollY;\r\n\r\n const isAbove =\r\n wRect.top + spacerTopHeight + scroll >= tRect.top + scroll;\r\n const canShowContent =\r\n wRect.top + scroll + contentSentinelOffset <= tRect.top + scroll;\r\n const isBelow = wRect.bottom + scroll <= tRect.bottom + scroll;\r\n\r\n document.body.classList.toggle('sticky-toolbar', !isAbove && !isBelow);\r\n\r\n setStickyState({\r\n started: !isAbove,\r\n showContent: !isAbove && canShowContent,\r\n finished: isBelow\r\n });\r\n\r\n if (shouldRecalculate) {\r\n timer = setTimeout(() => initSticky(false, false), 150);\r\n }\r\n\r\n if (!topObserver && !contentObserver && !bottomObserver) {\r\n initObservers();\r\n }\r\n\r\n if (!hasInitialCheck) {\r\n hasInitialCheck = true;\r\n\r\n setTimeout(() => {\r\n document.body.classList.remove('calculating-sticky-toolbar');\r\n }, 50);\r\n }\r\n };\r\n\r\n const domReady = document.readyState === 'complete';\r\n\r\n initSticky(domReady);\r\n\r\n setTimeout(() => initSticky(), 100);\r\n\r\n if (!domReady) {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n setTimeout(() => initSticky(true), 100);\r\n });\r\n }\r\n\r\n let resizeTimer = null;\r\n\r\n const resizeHandler = () => {\r\n clearTimeout(resizeTimer);\r\n resizeTimer = setTimeout(initSticky, 100);\r\n };\r\n\r\n window.addEventListener('resize', resizeHandler);\r\n\r\n return () => {\r\n clearTimeout(timer);\r\n clearTimeout(resizeTimer);\r\n\r\n if (topEl && topObserver) {\r\n topObserver.unobserve(topEl);\r\n }\r\n\r\n if (contentEl && contentObserver) {\r\n topObserver.unobserve(contentEl);\r\n }\r\n\r\n if (bottomEl && bottomObserver) {\r\n bottomObserver.unobserve(bottomEl);\r\n }\r\n\r\n window.removeEventListener('resize', resizeHandler);\r\n };\r\n }, [setStickyState]);\r\n\r\n return (\r\n <>\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n );\r\n});\r\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgDetails = function SvgDetails(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 19,\n height: 19,\n fill: \"none\",\n viewBox: \"0 0 19 19\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#036D6D\",\n d: \"M14.478 9.33a.633.633 0 0 1-.627-.628V3.04c0-.608-.038-.646-.628-.646H2.983a.6.6 0 0 0-.608.608v13.015c0 .513.076.59.59.59h10.202c.342 0 .627.265.627.607a.633.633 0 0 1-.627.628H2.887c-.93 0-1.557-.438-1.729-1.216-.037-.19-.037-.38-.037-.57 0-4.314.019-8.646-.019-12.959 0-.665.152-1.197.57-1.558.285-.265.684-.38 1.064-.38H13.51c.4 0 .78.133 1.083.4.418.38.55.93.55 1.595-.037 1.995-.019 3.61-.019 5.53a.64.64 0 0 1-.645.646Z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#036D6D\",\n d: \"M17.67 17.632a.72.72 0 0 1-1.026 0c-.835-.836-1.672-1.672-2.432-2.45-.627.095-1.14.265-1.634.247-1.425-.038-2.565-1.216-2.623-2.68-.057-1.425 1.046-2.64 2.546-2.812 1.31-.152 2.622.836 2.907 2.205.115.57.057 1.14-.19 1.652-.095.19-.057.285.076.438.798.779 1.577 1.577 2.375 2.355a.745.745 0 0 1 0 1.045Zm-4.978-3.325c.93 0 1.634-.684 1.653-1.596 0-.912-.703-1.634-1.596-1.634a1.63 1.63 0 0 0-1.653 1.596c-.019.912.665 1.634 1.596 1.634m-1.406-5.871V9.67H3.515V8.436zM3.496 6.1V4.864h7.77V6.1z\"\n })));\n};\nexport default SvgDetails;","import { useRef, useEffect } from 'react';\r\nimport useResizeObserver from '@hooks/useResizeObserver';\r\n\r\nexport default function useStickyOffset() {\r\n const nav = useRef();\r\n\r\n useEffect(() => {\r\n nav.current = document.querySelector('#header');\r\n }, []);\r\n\r\n const { height } = useResizeObserver(nav, { checkWidth: false });\r\n\r\n return Math.floor(height || 79);\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"ratetable_card__bmmvf\";\nvar _3 = \"ratetable_cardbottom__x-buu\";\nvar _4 = \"ratetable_cardcontent__iywhz\";\nvar _5 = \"ratetable_carddata__yqy20\";\nvar _6 = \"ratetable_carddetails__8z0wc\";\nvar _7 = \"ratetable_cardrates__f8z92\";\nvar _8 = \"ratetable_cardwrapper__chnhe\";\nvar _9 = \"ratetable_cell__gmu8h\";\nvar _a = \"ratetable_cellcontent__mlbzm\";\nvar _b = \"640px\";\nvar _c = \"790px\";\nvar _d = \"#057676\";\nvar _e = \"ratetable_debugcontent__ecr7h\";\nvar _f = \"ratetable_debuginfo__kdqvy\";\nvar _10 = \"ratetable_debugitem__+uvxd\";\nvar _11 = \"ratetable_detailsicon__hyvtf\";\nvar _12 = \"#434343\";\nvar _13 = \"ratetable_highlight__qtiri\";\nvar _14 = \"ratetable_label__gtjph\";\nvar _15 = \"ratetable_labelslash__ia0la\";\nvar _16 = \"ratetable_loadingfade__iruir\";\nvar _17 = \"79px\";\nvar _18 = \"110px\";\nvar _19 = \"72px\";\nvar _1a = \"750px\";\nvar _1b = \"665px\";\nvar _1c = \"ratetable_month__4ltz7\";\nvar _1d = \"ratetable_negative__bisuu\";\nvar _1e = \"ratetable_percent__uhpy5\";\nvar _1f = \"ratetable_placeholder__4o3sj\";\nvar _20 = \"ratetable_product__qpuyi\";\nvar _21 = \"ratetable_row__krp61\";\nvar _22 = \"ratetable_rowwrapper__-+ji+\";\nvar _23 = \"ratetable_sign__kdc4+\";\nvar _24 = \"ratetable_slash__t4dzu\";\nvar _25 = \"ratetable_spinner__vqiir\";\nvar _26 = \"ratetable_table__dk2bf\";\nvar _27 = \"ratetable_tablewrapper__y+9u-\";\nvar _28 = \"teal\";\nvar _29 = \"2\";\nvar _2a = \"#cdd3dc\";\nvar _2b = \"ratetable_value__3-aoe\";\nexport { _1 as \"body\", _2 as \"card\", _3 as \"cardBottom\", _4 as \"cardContent\", _5 as \"cardData\", _6 as \"cardDetails\", _7 as \"cardRates\", _8 as \"cardWrapper\", _9 as \"cell\", _a as \"cellContent\", _b as \"controlsMobileWidth\", _c as \"controlsStackedWidth\", _d as \"darkTeal\", _e as \"debugContent\", _f as \"debugInfo\", _10 as \"debugItem\", _11 as \"detailsIcon\", _12 as \"headline\", _13 as \"highlight\", _14 as \"label\", _15 as \"labelSlash\", _16 as \"loadingFade\", _17 as \"menuHeight\", _18 as \"menuHeightLarge\", _19 as \"menuHeightMobile\", _1a as \"mobileTableWidth\", _1b as \"modalMobileWidth\", _1c as \"month\", _1d as \"negative\", _1e as \"percent\", _1f as \"placeholder\", _20 as \"product\", _21 as \"row\", _22 as \"rowWrapper\", _23 as \"sign\", _24 as \"slash\", _25 as \"spinner\", _26 as \"table\", _27 as \"tableWrapper\", _28 as \"teal\", _29 as \"timelineStrokeWidth\", _2a as \"timelineTrackColor\", _2b as \"value\" }\n","import React, {\r\n useMemo,\r\n useCallback,\r\n useState,\r\n useEffect,\r\n useRef\r\n} from 'react';\r\nimport Details from './details.svg';\r\nimport * as styles from './RateTable.module.scss';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport useConfig from '@hooks/useConfig';\r\nimport classNames from 'classnames';\r\nimport { formatCurrency, formatPercent } from '@helpers';\r\nimport { MAX_LOADING_ROWS } from '@constants';\r\n\r\nconst mobileTableWidth = parseInt(styles.mobileTableWidth);\r\n\r\nexport default React.memo(function RateTable({\r\n rates = [],\r\n isLoading: _isLoading,\r\n hasInitialData,\r\n footerIsVisible,\r\n setModalProduct\r\n}) {\r\n const isMobile = useMatchMedia(mobileTableWidth);\r\n const [key, setKey] = useState('ssr');\r\n\r\n useEffect(() => {\r\n setKey('rendered');\r\n }, []);\r\n\r\n let rows = useMemo(() => {\r\n return (\r\n rates?.map((data, index) => (\r\n \r\n )) ?? null\r\n );\r\n }, [rates, key, isMobile, setModalProduct]);\r\n\r\n const isLoading = _isLoading && (!hasInitialData || !rows?.length);\r\n\r\n if (isLoading && footerIsVisible && rows?.length > MAX_LOADING_ROWS) {\r\n rows = rows.slice(0, MAX_LOADING_ROWS);\r\n }\r\n\r\n return (\r\n \r\n \r\n {!isLoading || rows?.length ? (\r\n rows\r\n ) : (\r\n \r\n )}\r\n
    \r\n \r\n );\r\n});\r\n\r\nconst Row = React.memo(({ isMobile, setModalProduct, ...data }) => {\r\n const config = useConfig();\r\n\r\n const rowProps = useMemo(() => {\r\n const { closingCosts } = data;\r\n let pointsComponent = null;\r\n\r\n if (data.isNCC || closingCosts === 0) {\r\n pointsComponent = '$0.00';\r\n } else {\r\n const isPositive = closingCosts > 0;\r\n const sign = isPositive ? '+' : '-';\r\n const points = formatCurrency(Math.abs(closingCosts));\r\n\r\n pointsComponent = (\r\n <>\r\n \r\n {sign}\r\n \r\n {points}\r\n \r\n );\r\n }\r\n\r\n return {\r\n apr: (\r\n <>\r\n {formatPercent(data.apr, true, false)}\r\n %\r\n \r\n ),\r\n rate: (\r\n <>\r\n {formatPercent(data.rate, true, false)}\r\n %\r\n \r\n ),\r\n payment: formatCurrency(data.payment),\r\n points: pointsComponent\r\n };\r\n }, [data]);\r\n\r\n const openModal = useCallback(() => {\r\n setModalProduct(data);\r\n }, [data, setModalProduct]);\r\n\r\n const openModalRef = useRef();\r\n openModalRef.current = () => openModal();\r\n\r\n const handleClick = useCallback(() => openModalRef.current(), []);\r\n\r\n const handleKeyDown = useCallback(e => {\r\n if (e.key === 'Enter' || e.key === ' ') {\r\n openModalRef.current();\r\n }\r\n }, []);\r\n\r\n const props = {\r\n ...rowProps,\r\n data,\r\n isMobile,\r\n openModal,\r\n onClick: handleClick,\r\n onKeyDown: handleKeyDown,\r\n enableDebugMode: config.enableDebugMode,\r\n ariaProps: {\r\n tabIndex: 0,\r\n role: 'button',\r\n 'aria-controls': 'calculator-rate-modal'\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n});\r\n\r\nfunction DesktopRow({\r\n data = {},\r\n apr,\r\n rate,\r\n payment,\r\n points,\r\n enableDebugMode,\r\n ariaProps = {},\r\n isPlaceholder,\r\n isMobile,\r\n onClick,\r\n onKeyDown\r\n}) {\r\n return (\r\n \r\n
    \r\n \r\n {data.productLabel}\r\n \r\n \r\n Interest rate APR\r\n \r\n }\r\n data-column=\"rate\"\r\n isPlaceholder={isPlaceholder}\r\n >\r\n {rate} {apr}\r\n \r\n \r\n {points}\r\n \r\n \r\n {payment}\r\n \r\n per month\r\n \r\n \r\n
    \r\n {enableDebugMode && !isPlaceholder && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nfunction LabelSlash() {\r\n return (\r\n \r\n /\r\n \r\n );\r\n}\r\n\r\nfunction Cell({\r\n className,\r\n label,\r\n children,\r\n isPlaceholder,\r\n showHighlightLabel,\r\n highlightLabel,\r\n ...restProps\r\n}) {\r\n const labelText = showHighlightLabel ? highlightLabel ?? label : label;\r\n\r\n return (\r\n \r\n {(labelText || isPlaceholder) && (\r\n \r\n {labelText}\r\n \r\n )}\r\n {(children || isPlaceholder) && {children}}\r\n \r\n );\r\n}\r\n\r\nfunction MobileRow({\r\n data = {},\r\n apr,\r\n rate,\r\n payment,\r\n points,\r\n isPlaceholder,\r\n isMobile,\r\n enableDebugMode,\r\n ariaProps = {},\r\n onClick,\r\n onKeyDown\r\n}) {\r\n const mortgageTypeLabel = data.isNCC ? 'No closing costs' : 'Mortgage type';\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \r\n \r\n Interest rate APR\r\n \r\n }\r\n value={\r\n <>\r\n {rate} {apr}\r\n \r\n }\r\n labelPlaceholderWidth={124}\r\n valuePlaceholderWidth={159}\r\n animationDelay={700}\r\n />\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n {payment}\r\n \r\n per month\r\n \r\n \r\n }\r\n labelPlaceholderWidth={113}\r\n valuePlaceholderWidth={122}\r\n />\r\n \r\n
    \r\n\r\n \r\n
    \r\n
    \r\n
    \r\n {enableDebugMode && !isPlaceholder && }\r\n \r\n \r\n );\r\n}\r\n\r\nfunction CardData({\r\n className,\r\n label,\r\n labelClassName,\r\n labelPlaceholderWidth = null,\r\n labelPlaceholderHeight = null,\r\n value,\r\n valueClassName,\r\n valuePlaceholderWidth = null,\r\n valuePlaceholderHeight = null,\r\n animationDelay,\r\n isPlaceholder,\r\n children,\r\n ...rest\r\n}) {\r\n return (\r\n \r\n {!isPlaceholder ? (\r\n <>\r\n {label && }\r\n {value && {value}}\r\n {children}\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nfunction Label({ className, children, ...rest }) {\r\n return (\r\n \r\n
    {children}
    \r\n \r\n );\r\n}\r\n\r\nfunction Value({ className, children, ...rest }) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\n// Empty row used to display placeholder\r\n// content while loading if there was\r\n// no rate data previously in the table\r\nfunction PlaceholderRows({ count = 4 }) {\r\n return Array.from({ length: count }, (_, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n });\r\n}\r\n\r\nfunction DebugInfo({ data, className }) {\r\n return (\r\n
    \r\n
    \r\n
    \r\n Plan Number: {data.planNumber}\r\n
    \r\n
    \r\n Description: {data.planDescription}\r\n
    \r\n
    \r\n
    \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"640px\";\nvar _3 = \"790px\";\nvar _4 = \"#057676\";\nvar _5 = \"#434343\";\nvar _6 = \"errormessages_icon__3misi\";\nvar _7 = \"79px\";\nvar _8 = \"110px\";\nvar _9 = \"72px\";\nvar _a = \"errormessages_message__hl5so\";\nvar _b = \"665px\";\nvar _c = \"errormessages_rackrates__duiax\";\nvar _d = \"errormessages_rackratesbutton__v7gnd\";\nvar _e = \"errormessages_rackratestext__cdg0b\";\nvar _f = \"teal\";\nvar _10 = \"errormessages_text__llg01\";\nvar _11 = \"2\";\nvar _12 = \"#cdd3dc\";\nvar _13 = \"errormessages_title__j-1od\";\nvar _14 = \"errormessages_wrapper__ibhgl\";\nexport { _1 as \"body\", _2 as \"controlsMobileWidth\", _3 as \"controlsStackedWidth\", _4 as \"darkTeal\", _5 as \"headline\", _6 as \"icon\", _7 as \"menuHeight\", _8 as \"menuHeightLarge\", _9 as \"menuHeightMobile\", _a as \"message\", _b as \"modalMobileWidth\", _c as \"rackRates\", _d as \"rackRatesButton\", _e as \"rackRatesText\", _f as \"teal\", _10 as \"text\", _11 as \"timelineStrokeWidth\", _12 as \"timelineTrackColor\", _13 as \"title\", _14 as \"wrapper\" }\n","var _path, _path2;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgError = function SvgError(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 28,\n height: 28,\n fill: \"none\",\n viewBox: \"0 0 28 28\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M14 .028a13.96 13.96 0 0 0-9.879 4.093A13.96 13.96 0 0 0 .028 14c0 3.706 1.472 7.259 4.093 9.879a13.96 13.96 0 0 0 9.88 4.092c3.705 0 7.258-1.47 9.878-4.092a13.96 13.96 0 0 0 4.093-9.88c0-3.706-1.471-7.259-4.093-9.878A13.96 13.96 0 0 0 14 .028m0 25.48a11.509 11.509 0 0 1 0-23.016A11.51 11.51 0 0 1 25.508 14a11.5 11.5 0 0 1-3.368 8.139A11.5 11.5 0 0 1 14 25.507Z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"m18.356 7.894 1.75 1.75L15.74 14l4.365 4.355-1.75 1.75L14 15.741l-4.355 4.364-1.75-1.75L12.259 14 7.895 9.644l1.75-1.75L14 12.26z\"\n })));\n};\nexport default SvgError;","import React from 'react';\r\nimport useConfig from '@hooks/useConfig';\r\nimport * as styles from './ErrorMessages.module.scss';\r\nimport { formatParagraphs } from '@helpers';\r\nimport ErrorIcon from './error.svg';\r\nimport classNames from 'classnames';\r\nimport { isString } from 'lodash';\r\nimport { DEFAULT_ERROR_TITLE, DEFAULT_ERROR_MESSAGE } from '@constants';\r\n\r\nexport default function ErrorMessagesWrapper({\r\n messages,\r\n showRackRatesInvitation,\r\n fetchRackRateGroups\r\n}) {\r\n const config = useConfig();\r\n const rackRatesText = config.showRackRatesMessage?.trim();\r\n\r\n return !messages ? null : (\r\n
    \r\n
    \r\n \r\n {showRackRatesInvitation && (\r\n
    \r\n \r\n \r\n View Mortgage Rates\r\n \r\n
    \r\n )}\r\n \r\n
    \r\n
    \r\n );\r\n}\r\n\r\nexport function ErrorMessage({\r\n className,\r\n title = DEFAULT_ERROR_TITLE,\r\n message,\r\n children\r\n}) {\r\n if (isString(message)) {\r\n if (message.includes('JSON at')) {\r\n message = DEFAULT_ERROR_MESSAGE;\r\n }\r\n\r\n message = formatParagraphs(message);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {title && {title}}\r\n {message}\r\n {children}\r\n
    \r\n
    \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"calculatormessages_content__r6jak\";\nvar _3 = \"640px\";\nvar _4 = \"790px\";\nvar _5 = \"#057676\";\nvar _6 = \"#434343\";\nvar _7 = \"79px\";\nvar _8 = \"110px\";\nvar _9 = \"72px\";\nvar _a = \"665px\";\nvar _b = \"teal\";\nvar _c = \"calculatormessages_text__cbfbq\";\nvar _d = \"2\";\nvar _e = \"#cdd3dc\";\nvar _f = \"calculatormessages_title__sce+l\";\nvar _10 = \"calculatormessages_wrapper__bmav4\";\nexport { _1 as \"body\", _2 as \"content\", _3 as \"controlsMobileWidth\", _4 as \"controlsStackedWidth\", _5 as \"darkTeal\", _6 as \"headline\", _7 as \"menuHeight\", _8 as \"menuHeightLarge\", _9 as \"menuHeightMobile\", _a as \"modalMobileWidth\", _b as \"teal\", _c as \"text\", _d as \"timelineStrokeWidth\", _e as \"timelineTrackColor\", _f as \"title\", _10 as \"wrapper\" }\n","var _circle, _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nvar SvgPlus = function SvgPlus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 22,\n height: 22,\n fill: \"none\",\n viewBox: \"0 0 22 22\"\n }, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 11.049,\n cy: 11.334,\n r: 9.451,\n stroke: \"#036D6D\",\n strokeWidth: 2\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#036D6D\",\n fillRule: \"evenodd\",\n d: \"M11.049 6.368c-.579 0-1.048.469-1.048 1.047v2.872H7.13a1.048 1.048 0 1 0 0 2.095H10v2.871a1.048 1.048 0 1 0 2.096 0v-2.871h2.87a1.048 1.048 0 1 0 0-2.095h-2.87V7.415c0-.578-.47-1.047-1.048-1.047z\",\n clipRule: \"evenodd\"\n })));\n};\nexport default SvgPlus;","import React from 'react';\r\nimport ErrorMessages from './ErrorMessages';\r\nimport * as styles from './CalculatorMessages.module.scss';\r\nimport classNames from 'classnames';\r\nimport { isString } from 'lodash';\r\nimport { DEFAULT_ERROR_MESSAGE } from '@constants';\r\n\r\nexport default React.memo(function CalculatorMessages({\r\n errors,\r\n className,\r\n noProductsSelected,\r\n noRatesFound,\r\n fetchRackRateGroups,\r\n showRackRatesInvitation = true,\r\n messageTitle,\r\n messageText\r\n}) {\r\n // We only display errors here if they\r\n // are not related to input validations\r\n let errorMessages = null;\r\n\r\n if (errors) {\r\n if (isString(errors)) {\r\n errors = { general: errors };\r\n }\r\n\r\n errorMessages = Object.keys(errors)\r\n .filter(key => key !== 'validation')\r\n .map((key, index) => {\r\n let error = errors[key] ?? DEFAULT_ERROR_MESSAGE;\r\n\r\n if (isString(error) && error.includes('JSON at')) {\r\n error = DEFAULT_ERROR_MESSAGE;\r\n }\r\n\r\n return

    {error}

    ;\r\n });\r\n }\r\n\r\n // If there are any error messages, we\r\n // only display those and hide any\r\n // additional calculator messages\r\n if (errorMessages?.length) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // If there are no errors, we check if\r\n // any additional messages should be displayed\r\n let messageData = null;\r\n\r\n if (messageText) {\r\n messageData = {\r\n title: messageTitle,\r\n text: messageText\r\n };\r\n } else if (noProductsSelected) {\r\n messageData = messages.noProductsSelected;\r\n } else if (noRatesFound) {\r\n messageData = messages.noRatesFound;\r\n }\r\n\r\n return (\r\n messageData && (\r\n
    \r\n
    \r\n {messageData.title && (\r\n

    {messageData.title}

    \r\n )}\r\n {messageData.text && (\r\n
    \r\n {messageData.text.split('\\n').map((t, index) => (\r\n

    {t}

    \r\n ))}\r\n
    \r\n )}\r\n
    \r\n
    \r\n )\r\n );\r\n});\r\n\r\n// TODO make these configurable in Kentico\r\nconst messages = {\r\n noProductsSelected: {\r\n title: 'No product types selected',\r\n text: 'Select one or more products to view your personalized rates'\r\n },\r\n noRatesFound: {\r\n title: 'No eligible rates found',\r\n text: 'Please try adjusting your loan details'\r\n }\r\n};\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"loadmorerates_button__n8u45\";\nvar _3 = \"640px\";\nvar _4 = \"790px\";\nvar _5 = \"#057676\";\nvar _6 = \"loadmorerates_dash__asb0y\";\nvar _7 = \"loadmorerates_disabled__eqgxv\";\nvar _8 = \"#434343\";\nvar _9 = \"loadmorerates_loading__v9pe6\";\nvar _a = \"79px\";\nvar _b = \"110px\";\nvar _c = \"72px\";\nvar _d = \"665px\";\nvar _e = \"teal\";\nvar _f = \"2\";\nvar _10 = \"#cdd3dc\";\nvar _11 = \"loadmorerates_wrapper__-xzww\";\nexport { _1 as \"body\", _2 as \"button\", _3 as \"controlsMobileWidth\", _4 as \"controlsStackedWidth\", _5 as \"darkTeal\", _6 as \"dash\", _7 as \"disabled\", _8 as \"headline\", _9 as \"loading\", _a as \"menuHeight\", _b as \"menuHeightLarge\", _c as \"menuHeightMobile\", _d as \"modalMobileWidth\", _e as \"teal\", _f as \"timelineStrokeWidth\", _10 as \"timelineTrackColor\", _11 as \"wrapper\" }\n","import React from 'react';\r\nimport DashedLine from '@components/DashedLine';\r\nimport * as styles from './LoadMoreRates.module.scss';\r\nimport classNames from 'classnames';\r\nimport Plus from './plus.svg';\r\nimport tracker from '@utils/tracker';\r\n\r\nexport default function LoadMoreRates({\r\n hasInitialData,\r\n forceHide,\r\n errors,\r\n canLoadMore,\r\n isLoading,\r\n loadMore\r\n}) {\r\n const isDisabled = !!errors?.validation;\r\n\r\n return forceHide || !hasInitialData || !canLoadMore ? null : (\r\n
    \r\n \r\n {\r\n if (!isLoading && !isDisabled) {\r\n loadMore();\r\n tracker.track(tracker.actions.LOAD_MORE_RATES);\r\n }\r\n }}\r\n >\r\n {isLoading ? (\r\n 'Loading'\r\n ) : (\r\n <>\r\n \r\n Load more rates\r\n \r\n )}\r\n \r\n \r\n
    \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ratedisclosures_effectivedate__bkv6t\";\nvar _2 = \"ratedisclosures_wrapper__5bt1e\";\nexport { _1 as \"effectiveDate\", _2 as \"wrapper\" }\n","import React from 'react';\r\nimport * as styles from './RateDisclosures.module.scss';\r\nimport { isString } from 'lodash';\r\nimport classNames from 'classnames';\r\nimport { format } from 'fecha';\r\nimport { isValidDate } from '@helpers';\r\n\r\nexport default function RateDisclosure({ effectiveDate }) {\r\n const disclosures = [];\r\n\r\n if (effectiveDate) {\r\n if (!isValidDate(effectiveDate)) {\r\n effectiveDate = new Date();\r\n }\r\n\r\n try {\r\n const dateString = format(effectiveDate, 'MMMM Do, YYYY');\r\n const timeString = format(effectiveDate, 'h:mm A');\r\n\r\n disclosures.push(\r\n \r\n Rates and terms effective as of {dateString} at {timeString} and are\r\n subject to change without notice.\r\n

    \r\n );\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n\r\n return !disclosures.length ? null : (\r\n \r\n {disclosures.map((d, index) => {\r\n return !isString(d) ? d :

    {d}

    ;\r\n })}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ratemodalform_applystep__ghpoe\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"ratemodalform_buttons__6xth5\";\nvar _4 = \"ratemodalform_canshow__oi3nb\";\nvar _5 = \"ratemodalform_complete__uz6s2\";\nvar _6 = \"ratemodalform_content__g9int\";\nvar _7 = \"640px\";\nvar _8 = \"790px\";\nvar _9 = \"#057676\";\nvar _a = \"ratemodalform_dot__wlhi+\";\nvar _b = \"ratemodalform_dotin__hn-qc\";\nvar _c = \"ratemodalform_emailstep__jmogu\";\nvar _d = \"ratemodalform_form__ea8jw\";\nvar _e = \"ratemodalform_hashighlights__wf8t9\";\nvar _f = \"#434343\";\nvar _10 = \"ratemodalform_highlight__kmx9y\";\nvar _11 = \"ratemodalform_highlightswrapper__orzyv\";\nvar _12 = \"ratemodalform_label__y8ooe\";\nvar _13 = \"ratemodalform_line__sl28h\";\nvar _14 = \"ratemodalform_linewrapper__qfq3v\";\nvar _15 = \"ratemodalform_longtext__vj+em\";\nvar _16 = \"79px\";\nvar _17 = \"110px\";\nvar _18 = \"72px\";\nvar _19 = \"665px\";\nvar _1a = \"ratemodalform_shorttext__qmvjv\";\nvar _1b = \"ratemodalform_step__arjir\";\nvar _1c = \"ratemodalform_stepcontent__qphzc\";\nvar _1d = \"ratemodalform_stepfadein__qhfba\";\nvar _1e = \"ratemodalform_stepfadeout__ypeyq\";\nvar _1f = \"ratemodalform_stepgroup__c+pt6\";\nvar _20 = \"ratemodalform_stepgroupwrapper__hjfbg\";\nvar _21 = \"ratemodalform_stepwrapper__peayu\";\nvar _22 = \"teal\";\nvar _23 = \"2\";\nvar _24 = \"#cdd3dc\";\nvar _25 = \"ratemodalform_visible__jwumr\";\nvar _26 = \"ratemodalform_wrapper__lc+rm\";\nexport { _1 as \"applyStep\", _2 as \"body\", _3 as \"buttons\", _4 as \"canShow\", _5 as \"complete\", _6 as \"content\", _7 as \"controlsMobileWidth\", _8 as \"controlsStackedWidth\", _9 as \"darkTeal\", _a as \"dot\", _b as \"dotIn\", _c as \"emailStep\", _d as \"form\", _e as \"hasHighlights\", _f as \"headline\", _10 as \"highlight\", _11 as \"highlightsWrapper\", _12 as \"label\", _13 as \"line\", _14 as \"lineWrapper\", _15 as \"longText\", _16 as \"menuHeight\", _17 as \"menuHeightLarge\", _18 as \"menuHeightMobile\", _19 as \"modalMobileWidth\", _1a as \"shortText\", _1b as \"step\", _1c as \"stepContent\", _1d as \"stepFadeIn\", _1e as \"stepFadeOut\", _1f as \"stepGroup\", _20 as \"stepGroupWrapper\", _21 as \"stepWrapper\", _22 as \"teal\", _23 as \"timelineStrokeWidth\", _24 as \"timelineTrackColor\", _25 as \"visible\", _26 as \"wrapper\" }\n","import React from 'react';\r\nimport * as styles from './RateModalForm.module.scss';\r\nimport { Dot } from '@components/Timeline';\r\nimport DashedLine from '@components/DashedLine';\r\nimport classNames from 'classnames';\r\n\r\nexport function StepGroup({ className, isVisible, children }) {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nexport function Step({\r\n label,\r\n labelId,\r\n number,\r\n className,\r\n isVisible,\r\n isComplete,\r\n canShow = true,\r\n showLine = true,\r\n children\r\n}) {\r\n return (\r\n \r\n {number !== undefined && (\r\n \r\n )}\r\n {showLine && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n {label && (\r\n \r\n {label}\r\n \r\n )}\r\n {children}\r\n
    \r\n \r\n );\r\n}\r\n","import React, { useEffect, useRef } from 'react';\r\nimport { Text } from '@input';\r\nimport { isValidEmail } from '@helpers';\r\n\r\nexport default function RateModalEmail({\r\n emailState,\r\n setEmailState,\r\n isVisible\r\n}) {\r\n const hasError = emailState.canShowError && !emailState.isValid;\r\n const ref = useRef();\r\n\r\n // Check ref value on first load just in case\r\n // the browser autofilled the input field\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n const value = ref.current?.value;\r\n\r\n if (value) {\r\n setEmailState(emailState => {\r\n const isValid = isValidEmail(value);\r\n\r\n setEmailState({\r\n ...emailState,\r\n value,\r\n isValid,\r\n lastValidEmail: isValid ? value : emailState.lastValidEmail\r\n });\r\n });\r\n }\r\n }, 100);\r\n\r\n return () => clearTimeout(timer);\r\n }, [setEmailState]);\r\n\r\n useEffect(() => {\r\n if (isVisible && !emailState.isValid && ref.current) {\r\n ref.current.focus();\r\n }\r\n }, [isVisible, emailState.isValid]);\r\n\r\n return (\r\n {\r\n const isValid = isValidEmail(value);\r\n\r\n setEmailState({\r\n ...emailState,\r\n value,\r\n isValid,\r\n lastValidEmail: isValid ? value : emailState.lastValidEmail\r\n });\r\n }}\r\n onBlur={value => {\r\n if (emailState.value && !emailState.canShowError) {\r\n setEmailState({ ...emailState, value, canShowError: true });\r\n }\r\n }}\r\n />\r\n );\r\n}\r\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\r\nimport * as styles from './RateModalForm.module.scss';\r\nimport { StepGroup, Step } from './Step';\r\nimport RateModalEmail from './RateModalEmail';\r\nimport Form from '@components/Form';\r\nimport { Dot } from '@components/Timeline';\r\nimport Button from '@input/Button';\r\nimport ToggleButton from '@input/ToggleButton';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { SAVE_LOAN_DATA_ENDPOINT } from '@constants';\r\nimport {\r\n isRefinance,\r\n formatCurrency,\r\n isValidEmail,\r\n isValidPhone,\r\n formatParagraphs\r\n} from '@helpers';\r\nimport classNames from 'classnames';\r\n\r\nexport default function RateModalForm({ product, loanDetails, className }) {\r\n const [action, setAction] = useState(null);\r\n const isApply = action === 'apply';\r\n const isConsultation = action === 'consultation';\r\n const hasSelectedAction = isApply || isConsultation;\r\n const [emailState, setEmailState] = useState({\r\n value: '',\r\n lastValidEmail: '',\r\n isValid: false,\r\n canShowError: false\r\n });\r\n\r\n const productText = isRefinance(loanDetails.loanPurpose)\r\n ? 'refinance'\r\n : 'home purchase';\r\n\r\n const applyButtonText = (\r\n <>\r\n Apply now online\r\n Apply now\r\n \r\n );\r\n\r\n const consultationButtonText = (\r\n <>\r\n Request a consultation\r\n Request a call\r\n \r\n );\r\n\r\n const consultationForm = useRef();\r\n const focusedConsultationInput = useRef(null);\r\n\r\n useEffect(() => {\r\n const form = consultationForm.current;\r\n\r\n if (isConsultation && form) {\r\n const prevInput = focusedConsultationInput.current;\r\n\r\n if (prevInput && !prevInput.value) {\r\n prevInput.focus();\r\n } else {\r\n const fields = form.querySelectorAll('input');\r\n const input = Array.from(fields).find(el => {\r\n if (el.type === 'tel' && !isValidPhone(el.value)) return true;\r\n if (el.type === 'email' && !isValidEmail(el.value)) return true;\r\n return !el.value;\r\n });\r\n\r\n if (input) input.focus();\r\n }\r\n }\r\n }, [isConsultation]);\r\n\r\n const {\r\n selectActionLabel = 'How would you like to proceed?',\r\n emailFieldLabel = 'What is your email address?',\r\n emailFieldDescription,\r\n loginFieldLabel = 'Do you have an existing personal online banking account?',\r\n loginFieldDescription,\r\n consultationFieldLabel = 'Our expert loan officers will help guide you through your application',\r\n consultationFieldDescription,\r\n blendOnlineBankingSSOLink,\r\n blendSignUpLink\r\n } = useConfig();\r\n\r\n const handleApplyClick = useCallback(\r\n async e => {\r\n if (!emailState.lastValidEmail || !product || !loanDetails) return;\r\n\r\n const node =\r\n e.currentTarget?.tagName === 'A'\r\n ? e.currentTarget\r\n : e.target.closest('a');\r\n if (!node || !node.href) return;\r\n e.preventDefault();\r\n\r\n const redirectUrl = node.href ?? window.location.href;\r\n\r\n // Prevents speedbump from showing without having to\r\n // add the staging Blend site to the public whitelist\r\n if (redirectUrl.includes('blendlabs')) {\r\n e.nativeEvent.stopPropagation();\r\n e.nativeEvent.stopImmediatePropagation();\r\n }\r\n\r\n const args = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept-Encoding': 'gzip, deflate',\r\n Accept: '*/*'\r\n },\r\n body: JSON.stringify({\r\n email: emailState.lastValidEmail,\r\n ...product,\r\n ...loanDetails\r\n })\r\n };\r\n\r\n try {\r\n await fetch(SAVE_LOAN_DATA_ENDPOINT, args);\r\n window.location.href = redirectUrl;\r\n } catch (error) {\r\n console.error(error);\r\n window.location.href = redirectUrl;\r\n }\r\n },\r\n [emailState.lastValidEmail, product, loanDetails]\r\n );\r\n\r\n return (\r\n \r\n
    \r\n

    Let's get your {productText} started

    \r\n\r\n \r\n\r\n
    \r\n \r\n \r\n
    \r\n setAction('apply')}\r\n />\r\n setAction('consultation')}\r\n />\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n\r\n \r\n \r\n {formatParagraphs(emailFieldDescription, false)}\r\n \r\n \r\n\r\n \r\n
    \r\n \r\n Yes, log in to apply\r\n \r\n\r\n \r\n No, continue to application\r\n \r\n
    \r\n\r\n {formatParagraphs(loginFieldDescription, false)}\r\n \r\n
    \r\n\r\n \r\n \r\n {formatParagraphs(consultationFieldDescription, false)}\r\n {\r\n if (e.target.tagName === 'INPUT') {\r\n focusedConsultationInput.current = e.target;\r\n }\r\n }}\r\n >\r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst Highlights = React.memo(function Highlights({ product, loanDetails }) {\r\n if (!product || !loanDetails) {\r\n return null;\r\n }\r\n\r\n const productLabel = product.productLabel\r\n .split(' ')\r\n .map(word => {\r\n return word.toUpperCase().replace(/(\\/\\d+)M$/, '$1m');\r\n })\r\n .join(' ');\r\n\r\n const cashOutAmount = parseFloat(loanDetails.cashOutAmount);\r\n\r\n return (\r\n
    \r\n {productLabel}\r\n {formatCurrency(loanDetails.loanAmount)} loan\r\n {isRefinance(loanDetails.loanPurpose) &&\r\n !!cashOutAmount &&\r\n !isNaN(cashOutAmount) && (\r\n {formatCurrency(cashOutAmount)} cash out\r\n )}\r\n {product.isNCC && No Closing Costs}\r\n
    \r\n );\r\n});\r\n\r\nfunction Highlight({ children, uppercase = true }) {\r\n const style = {\r\n textTransform: !uppercase ? null : 'uppercase'\r\n };\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"ratemodal_adjustablepayments__zdtze\";\nvar _2 = \"#4c4c4c\";\nvar _3 = \"ratemodal_closed__krx1z\";\nvar _4 = \"ratemodal_content__bp9uy\";\nvar _5 = \"640px\";\nvar _6 = \"790px\";\nvar _7 = \"#057676\";\nvar _8 = \"ratemodal_details__ngtf7\";\nvar _9 = \"ratemodal_divider__ul5yw\";\nvar _a = \"ratemodal_formwrapper__my52s\";\nvar _b = \"ratemodal_header__axbbu\";\nvar _c = \"#434343\";\nvar _d = \"ratemodal_label__idgvt\";\nvar _e = \"79px\";\nvar _f = \"110px\";\nvar _10 = \"72px\";\nvar _11 = \"665px\";\nvar _12 = \"ratemodal_payment__bljs8\";\nvar _13 = \"ratemodal_paymentswrapper__yv6xv\";\nvar _14 = \"ratemodal_plus__mz8ll\";\nvar _15 = \"ratemodal_row__ug3p5\";\nvar _16 = \"ratemodal_rowcontent__4kkgz\";\nvar _17 = \"ratemodal_sampleloan__d8b11\";\nvar _18 = \"ratemodal_sampleloancontent__g7wux\";\nvar _19 = \"ratemodal_sampleloandisclosure__jsgto\";\nvar _1a = \"ratemodal_sampleloanwrapper__bteli\";\nvar _1b = \"teal\";\nvar _1c = \"2\";\nvar _1d = \"#cdd3dc\";\nvar _1e = \"ratemodal_value__jogci\";\nvar _1f = \"ratemodal_wrapper__ipulx\";\nexport { _1 as \"adjustablePayments\", _2 as \"body\", _3 as \"closed\", _4 as \"content\", _5 as \"controlsMobileWidth\", _6 as \"controlsStackedWidth\", _7 as \"darkTeal\", _8 as \"details\", _9 as \"divider\", _a as \"formWrapper\", _b as \"header\", _c as \"headline\", _d as \"label\", _e as \"menuHeight\", _f as \"menuHeightLarge\", _10 as \"menuHeightMobile\", _11 as \"modalMobileWidth\", _12 as \"payment\", _13 as \"paymentsWrapper\", _14 as \"plus\", _15 as \"row\", _16 as \"rowContent\", _17 as \"sampleLoan\", _18 as \"sampleLoanContent\", _19 as \"sampleLoanDisclosure\", _1a as \"sampleLoanWrapper\", _1b as \"teal\", _1c as \"timelineStrokeWidth\", _1d as \"timelineTrackColor\", _1e as \"value\", _1f as \"wrapper\" }\n","import React, { useMemo } from 'react';\r\nimport DashedLine from '@components/DashedLine';\r\nimport * as styles from './RateModal.module.scss';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { isFunction, round } from 'lodash';\r\nimport classNames from 'classnames';\r\nimport { keys } from '@enums';\r\nimport {\r\n formatCurrency,\r\n formatPercent,\r\n calculatePercent,\r\n formatParagraphs,\r\n isRefinance\r\n} from '@helpers';\r\n\r\nconst types = {\r\n CURRENCY: 'currency',\r\n PERCENT: 'percent'\r\n};\r\n\r\nexport default React.memo(function SampleLoan({ product, loanDetails }) {\r\n const data = useMemo(() => {\r\n if (!product || !loanDetails) {\r\n return null;\r\n }\r\n\r\n const cashOutAmount = round(loanDetails.cashOutAmount, 2);\r\n\r\n const newLoanDetails = {\r\n ...loanDetails,\r\n loanAmount: round(loanDetails.loanAmount, 2),\r\n homeValue: round(loanDetails.homeValue, 2),\r\n cashOutAmount:\r\n cashOutAmount &&\r\n !isNaN(cashOutAmount) &&\r\n isRefinance(loanDetails.loanPurpose)\r\n ? cashOutAmount\r\n : 0\r\n };\r\n\r\n return { ...product, ...newLoanDetails };\r\n }, [product, loanDetails]);\r\n\r\n const rows = sharedRows.concat(product?.isAdjustable ? adjustableRows : []);\r\n\r\n return !data ? null : (\r\n \r\n
    \r\n

    Your loan details

    \r\n\r\n
    \r\n {rows.map((row, index) => {\r\n const value = isFunction(row.value)\r\n ? row.value(data)\r\n : data[row.key];\r\n\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
    \r\n \r\n
    \r\n \r\n );\r\n});\r\n\r\nfunction SampleLoanDisclosure({ product }) {\r\n const config = useConfig();\r\n\r\n if (!product) {\r\n return null;\r\n }\r\n\r\n const text = (\r\n product.isAdjustable\r\n ? config.sampleLoanDisclosureAdjustable\r\n : config.sampleLoanDisclosureFixed\r\n )\r\n ?.replace(//g, '\\n')\r\n .replace(/ /g, '')\r\n .trim();\r\n\r\n return !text ? null : (\r\n
    {formatParagraphs(text)}
    \r\n );\r\n}\r\n\r\nfunction SampleLoanRow({\r\n className,\r\n name,\r\n label,\r\n value,\r\n type,\r\n children,\r\n data,\r\n addDecimals = true\r\n}) {\r\n if (type && !React.isValidElement(value)) {\r\n value =\r\n type === types.CURRENCY\r\n ? formatCurrency(value, addDecimals)\r\n : formatPercent(value, addDecimals);\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n {children ?? (\r\n <>\r\n
    {label}
    \r\n
    {value}
    \r\n \r\n )}\r\n
    \r\n {name === keys.LOAN_AMOUNT && }\r\n \r\n
    \r\n );\r\n}\r\n\r\nfunction CashOutDetails({ data }) {\r\n return !isRefinance(data.loanPurpose) || data.cashOutAmount <= 0 ? null : (\r\n
    \r\n {formatCurrency(data.loanAmount, true)} loan{' '}\r\n +{' '}\r\n {formatCurrency(data.cashOutAmount, true)} cash out\r\n
    \r\n );\r\n}\r\n\r\nfunction PaymentRow({ product }) {\r\n const label = 'Monthly Principal & Interest Payments*';\r\n\r\n return (\r\n \r\n
    {label}
    \r\n
    \r\n {!product.isAdjustable ? (\r\n <>\r\n {product.months} payments of {formatCurrency(product.payment, true)}\r\n \r\n ) : (\r\n
    \r\n {getAdjustablePayments(product)}\r\n
    \r\n )}\r\n
    \r\n \r\n );\r\n}\r\n\r\nfunction getAdjustablePayments(product) {\r\n // Fixed and adjustable period lengths\r\n const totalYears = parseInt(product.term);\r\n const fixedMonths = parseInt(product.timePeriodOfInitialRate);\r\n const fixedYears = Math.round(fixedMonths / 12);\r\n const adjustableMonths = totalYears * 12 - fixedYears * 12;\r\n\r\n // Payment amounts\r\n const fixedPayment = formatCurrency(product.payment, true);\r\n const min = parseFloat(product.minPaymentAfter1stRateChange);\r\n const max = parseFloat(product.maxPaymentAfterMaxRateChange);\r\n const minPayment = formatCurrency(min, true);\r\n const maxPayment = formatCurrency(max, true);\r\n\r\n const adjustablePaymentText =\r\n min < max\r\n ? `${adjustableMonths} monthly payments between ${minPayment} – ${maxPayment}`\r\n : `${adjustableMonths} monthly maximum payments of ${maxPayment}`;\r\n\r\n return (\r\n <>\r\n
    \r\n Years 1 – {fixedYears}: {fixedMonths} monthly payments\r\n of {fixedPayment}\r\n
    \r\n
    \r\n \r\n Years {fixedYears + 1} – {totalYears}:\r\n {' '}\r\n {adjustablePaymentText}\r\n
    \r\n \r\n );\r\n}\r\n\r\nconst sharedRows = [\r\n {\r\n key: keys.LOAN_AMOUNT,\r\n label: 'Loan amount',\r\n type: types.CURRENCY,\r\n value: ({ loanAmount, loanPurpose, cashOutAmount }) => {\r\n return isRefinance(loanPurpose) ? loanAmount + cashOutAmount : loanAmount;\r\n }\r\n },\r\n { key: keys.RATE, label: 'Interest rate', type: types.PERCENT },\r\n { key: keys.APR, label: 'APR', type: types.PERCENT },\r\n { label: 'Loan term', value: ({ term }) => `${term} years` },\r\n {\r\n label: 'Down payment',\r\n value: ({ loanAmount, homeValue, loanPurpose, cashOutAmount }) => {\r\n if (isRefinance(loanPurpose)) {\r\n loanAmount += cashOutAmount;\r\n }\r\n\r\n return calculatePercent(homeValue - loanAmount, homeValue, false);\r\n }\r\n },\r\n {\r\n label: 'Loan-to-value (LTV)',\r\n value: ({ loanAmount, homeValue, loanPurpose, cashOutAmount }) => {\r\n if (isRefinance(loanPurpose)) {\r\n loanAmount += cashOutAmount;\r\n }\r\n\r\n return calculatePercent(loanAmount, homeValue, false);\r\n }\r\n },\r\n {\r\n label: 'Points',\r\n value: ({ closingCosts, points }) =>\r\n `${formatCurrency(closingCosts)} (${points.toFixed(3)})`\r\n }\r\n];\r\n\r\nconst adjustableRows = [\r\n {\r\n label: 'Time period of initial rate',\r\n value: ({ timePeriodOfInitialRate: t }) => `${t} months`\r\n },\r\n {\r\n label: 'Rate change frequency after initial period',\r\n value: data => `${data.rateChangeFrequency} ${data.changeFrequencyUnits}`\r\n },\r\n {\r\n key: 'firstRateChangeCap',\r\n label: 'First interest rate change cap',\r\n type: types.PERCENT,\r\n addDecimals: false\r\n },\r\n {\r\n key: 'nextRateChangeCap',\r\n label: 'Subsequent interest rate change cap',\r\n type: types.PERCENT,\r\n addDecimals: false\r\n },\r\n {\r\n key: 'maxChangeCap',\r\n label: 'Maximum lifetime cap over initial rate',\r\n type: types.PERCENT,\r\n addDecimals: false\r\n }\r\n];\r\n","import React, { useCallback, useEffect, useRef, useMemo } from 'react';\r\nimport Modal from '@components/Modal';\r\nimport RateModalForm from './RateModalForm';\r\nimport SampleLoan from './SampleLoan';\r\nimport * as styles from './RateModal.module.scss';\r\nimport classNames from 'classnames';\r\nimport tracker from '@utils/tracker';\r\n\r\nexport default React.memo(function RateModal({\r\n id,\r\n product,\r\n loanDetails: loanInfo,\r\n isRackRate,\r\n setProduct\r\n}) {\r\n const close = useCallback(() => setProduct(null), [setProduct]);\r\n const loanDetails = useMemo(() => {\r\n return !isRackRate ? loanInfo : product?.loanDetails ?? loanInfo;\r\n }, [isRackRate, loanInfo, product]);\r\n\r\n const modalContentWrapper = React.createRef();\r\n const content = useRef();\r\n const scrollTimer = useRef();\r\n const prevProduct = useRef(null);\r\n\r\n const visibleProduct = product ?? prevProduct.current;\r\n\r\n useEffect(() => {\r\n clearTimeout(scrollTimer.current);\r\n\r\n if (product) {\r\n if (prevProduct.current !== product) {\r\n setTimeout(() => {\r\n tracker.track(tracker.actions.SELECT_RATE, {\r\n product_name: product.planDescription\r\n });\r\n }, 1000);\r\n }\r\n\r\n prevProduct.current = product;\r\n } else if (prevProduct.current) {\r\n scrollTimer.current = setTimeout(() => {\r\n if (content.current?.children?.length) {\r\n Array.from(content.current.children).forEach(el => {\r\n el.scrollTop = 0;\r\n });\r\n }\r\n content.current?.scrollTo(0, 0);\r\n modalContentWrapper.current?.scrollTo(0, 0);\r\n }, 300);\r\n }\r\n\r\n return () => clearTimeout(scrollTimer.current);\r\n }, [product, modalContentWrapper]);\r\n\r\n const currentProduct = product ?? visibleProduct;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n});\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"rackrates_apr__uqlmo\";\nvar _2 = \"rackrates_asterisk__iipfe\";\nvar _3 = \"#4c4c4c\";\nvar _4 = \"rackrates_cell__qicvo\";\nvar _5 = \"640px\";\nvar _6 = \"790px\";\nvar _7 = \"#057676\";\nvar _8 = \"rackrates_group__9syod\";\nvar _9 = \"rackrates_header__d7o4f\";\nvar _a = \"rackrates_headercell__oh-ew\";\nvar _b = \"#434343\";\nvar _c = \"rackrates_interestrate__wksoi\";\nvar _d = \"rackrates_label__4guiu\";\nvar _e = \"rackrates_loading__iwvha\";\nvar _f = \"79px\";\nvar _10 = \"110px\";\nvar _11 = \"72px\";\nvar _12 = \"rackrates_message__dj+dg\";\nvar _13 = \"rackrates_messagewrapper__nlf8k\";\nvar _14 = \"rackrates_messages__pqlto\";\nvar _15 = \"665px\";\nvar _16 = \"rackrates_month__uzeme\";\nvar _17 = \"rackrates_negative__rrjxs\";\nvar _18 = \"rackrates_percent__c34xw\";\nvar _19 = \"rackrates_product__cntbw\";\nvar _1a = \"rackrates_rate__ctbxv\";\nvar _1b = \"rackrates_row__kh9qn\";\nvar _1c = \"rackrates_sign__u0h5-\";\nvar _1d = \"rackrates_slash__tushe\";\nvar _1e = \"rackrates_table__jdw5b\";\nvar _1f = \"teal\";\nvar _20 = \"2\";\nvar _21 = \"#cdd3dc\";\nvar _22 = \"rackrates_title__um0eh\";\nvar _23 = \"rackrates_wrapper__mniav\";\nexport { _1 as \"apr\", _2 as \"asterisk\", _3 as \"body\", _4 as \"cell\", _5 as \"controlsMobileWidth\", _6 as \"controlsStackedWidth\", _7 as \"darkTeal\", _8 as \"group\", _9 as \"header\", _a as \"headerCell\", _b as \"headline\", _c as \"interestRate\", _d as \"label\", _e as \"loading\", _f as \"menuHeight\", _10 as \"menuHeightLarge\", _11 as \"menuHeightMobile\", _12 as \"message\", _13 as \"messageWrapper\", _14 as \"messages\", _15 as \"modalMobileWidth\", _16 as \"month\", _17 as \"negative\", _18 as \"percent\", _19 as \"product\", _1a as \"rate\", _1b as \"row\", _1c as \"sign\", _1d as \"slash\", _1e as \"table\", _1f as \"teal\", _20 as \"timelineStrokeWidth\", _21 as \"timelineTrackColor\", _22 as \"title\", _23 as \"wrapper\" }\n","import React, { useMemo } from 'react';\r\nimport RateDisclosures from '../RateDisclosures';\r\nimport Spinner from '@components/Spinner';\r\nimport CalculatorMessages from '@components/Content/CalculatorMessages';\r\nimport useConfig from '@hooks/useConfig';\r\nimport * as styles from './RackRates.module.scss';\r\nimport classNames from 'classnames';\r\nimport { loanPurpose, closingCostType } from '@enums';\r\nimport { formatPercent, formatCurrency, isValidDate } from '@helpers';\r\n\r\nexport default function RackRates({\r\n groups = [],\r\n currentLoanPurpose = loanPurpose.REFINANCE,\r\n currentLoanType = closingCostType.NCC,\r\n rackRatesAreLoading,\r\n rackRatesError,\r\n setModalProduct\r\n}) {\r\n const config = useConfig();\r\n const { components, effectiveDate } = useMemo(() => {\r\n if (!groups?.length) {\r\n return { components: null, effectiveDate: null };\r\n }\r\n\r\n let effectiveDate = null;\r\n\r\n const components = groups\r\n .map((group, index) => {\r\n const isNCC = currentLoanType === closingCostType.NCC;\r\n const isPoints = currentLoanType === closingCostType.POINTS;\r\n\r\n if (\r\n group.loanPurpose !== currentLoanPurpose ||\r\n !isValidDate(group.effectiveDate) ||\r\n (!isNCC && !isPoints)\r\n ) {\r\n return null;\r\n }\r\n\r\n const date = new Date(group.effectiveDate);\r\n\r\n if (!effectiveDate || date < effectiveDate) {\r\n effectiveDate = date;\r\n }\r\n\r\n return (\r\n \r\n );\r\n })\r\n .filter(g => g);\r\n\r\n return { components, effectiveDate };\r\n }, [groups, currentLoanType, currentLoanPurpose, setModalProduct]);\r\n\r\n const content =\r\n rackRatesAreLoading || (components?.length && !rackRatesError) ? (\r\n components\r\n ) : (\r\n
    \r\n \r\n
    \r\n );\r\n\r\n return (\r\n <>\r\n \r\n {rackRatesAreLoading ? : content}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction RackRateGroup({ title, products, setModalProduct }) {\r\n return !products?.length ? null : (\r\n
    \r\n {title &&
    {title}
    }\r\n
    \r\n
    \r\n Product & Term\r\n \r\n Interest Rate / APR\r\n \r\n Points\r\n Monthly Payment\r\n
    \r\n {products.map((product, index) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n );\r\n}\r\n\r\nfunction Row({ product, setModalProduct }) {\r\n const { productLabel, rate, apr, closingCosts, payment, isNCC } = product;\r\n\r\n let pointsComponent = null;\r\n\r\n if (isNCC || closingCosts === 0) {\r\n pointsComponent = '$0.00';\r\n } else {\r\n const isPositive = closingCosts > 0;\r\n const sign = isPositive ? '+' : '-';\r\n const points = formatCurrency(Math.abs(closingCosts));\r\n\r\n pointsComponent = (\r\n <>\r\n \r\n {sign}\r\n \r\n {points}\r\n \r\n );\r\n }\r\n\r\n return (\r\n setModalProduct(product)}\r\n >\r\n {productLabel}\r\n \r\n \r\n \r\n {' '}\r\n /{' '}\r\n \r\n \r\n \r\n \r\n {pointsComponent}\r\n {formatCurrency(payment)}\r\n \r\n );\r\n}\r\n\r\nfunction Cell({ label, className, children }) {\r\n return (\r\n
    \r\n {label && } {children && {children}}\r\n
    \r\n );\r\n}\r\n\r\nfunction HeaderCell({ className, ...rest }) {\r\n return (\r\n \r\n );\r\n}\r\n\r\nfunction Label({ children }) {\r\n return !children ? null : {children};\r\n}\r\n\r\nfunction Percent({ value }) {\r\n return (\r\n <>\r\n {formatPercent(value, true, false)}\r\n %\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport * as styles from './CTA.module.scss';\r\nimport { formatParagraphs } from '@helpers';\r\nimport classNames from 'classnames';\r\n\r\nexport default function CTA({ items = [] }) {\r\n return !items?.length ? null : (\r\n \r\n
    \r\n {items.map((item, index) => (\r\n \r\n ))}\r\n
    \r\n \r\n );\r\n}\r\n\r\nfunction Item({\r\n headline,\r\n text,\r\n buttonText,\r\n buttonUrl,\r\n buttonType = 'primary'\r\n}) {\r\n const buttonTypeClassName =\r\n buttonType === 'outline' ? 'btn-outline-primary' : 'btn-primary';\r\n\r\n return !headline || !text || !buttonText || !buttonUrl ? null : (\r\n \r\n
    \r\n {headline && (\r\n \r\n {headline}\r\n \r\n )}\r\n {formatParagraphs(text)}\r\n
    \r\n {buttonText && buttonUrl && (\r\n
    \r\n \r\n {buttonText}\r\n \r\n
    \r\n )}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"cta_buttonwrapper__qbj87\";\nvar _3 = \"cta_content__w6mhh\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"cta_hasheadline__+wil3\";\nvar _8 = \"cta_headline__azloj\";\nvar _9 = \"cta_item__rpsrs\";\nvar _a = \"79px\";\nvar _b = \"110px\";\nvar _c = \"72px\";\nvar _d = \"665px\";\nvar _e = \"cta_single__9slq4\";\nvar _f = \"teal\";\nvar _10 = \"cta_text__-ho0p\";\nvar _11 = \"2\";\nvar _12 = \"#cdd3dc\";\nvar _13 = \"cta_wrapper__fpjhn\";\nexport { _1 as \"body\", _2 as \"buttonWrapper\", _3 as \"content\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"hasHeadline\", _8 as \"headline\", _9 as \"item\", _a as \"menuHeight\", _b as \"menuHeightLarge\", _c as \"menuHeightMobile\", _d as \"modalMobileWidth\", _e as \"single\", _f as \"teal\", _10 as \"text\", _11 as \"timelineStrokeWidth\", _12 as \"timelineTrackColor\", _13 as \"wrapper\" }\n","// extracted by mini-css-extract-plugin\nvar _1 = \"faq_answer__wbd5g\";\nvar _2 = \"faq_answerwrapper__3xzcn\";\nvar _3 = \"#4c4c4c\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"faq_divider__lygai\";\nvar _8 = \"#434343\";\nvar _9 = \"faq_hidebg__eijpn\";\nvar _a = \"faq_list__jd98x\";\nvar _b = \"79px\";\nvar _c = \"110px\";\nvar _d = \"72px\";\nvar _e = \"665px\";\nvar _f = \"faq_open__9ccaw\";\nvar _10 = \"faq_question__gxyjw\";\nvar _11 = \"teal\";\nvar _12 = \"faq_text__b+d3q\";\nvar _13 = \"2\";\nvar _14 = \"#cdd3dc\";\nvar _15 = \"faq_wrapper__h2e91\";\nexport { _1 as \"answer\", _2 as \"answerWrapper\", _3 as \"body\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"divider\", _8 as \"headline\", _9 as \"hideBg\", _a as \"list\", _b as \"menuHeight\", _c as \"menuHeightLarge\", _d as \"menuHeightMobile\", _e as \"modalMobileWidth\", _f as \"open\", _10 as \"question\", _11 as \"teal\", _12 as \"text\", _13 as \"timelineStrokeWidth\", _14 as \"timelineTrackColor\", _15 as \"wrapper\" }\n","import React, { useState, useRef, useEffect } from 'react';\r\nimport DashedLine from '@components/DashedLine';\r\nimport useResizeObserver from '@hooks/useResizeObserver';\r\nimport * as styles from './FAQ.module.scss';\r\nimport classNames from 'classnames';\r\nimport { uniqueId } from 'lodash';\r\nimport tracker from '@utils/tracker';\r\n\r\nexport default React.memo(function FAQ({ items }) {\r\n return !items?.length ? null : (\r\n \r\n
    \r\n
    \r\n

    Frequently Asked Questions

    \r\n
    \r\n\r\n
      \r\n {items.map((item, index) => (\r\n \r\n ))}\r\n
    \r\n
    \r\n \r\n );\r\n});\r\n\r\nfunction Item({ name, question, answer }) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n const questionId = useRef(uniqueId('question-'));\r\n const answerId = useRef(uniqueId('answer-'));\r\n const [hideBg, setHideBg] = useState(false);\r\n\r\n question = question?.trim();\r\n answer = answer?.trim();\r\n\r\n if (!question) {\r\n question = name?.trim();\r\n }\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n tracker.track(tracker.actions.OPEN_FAQ, { question });\r\n }\r\n }, [isOpen, question]);\r\n\r\n return !question || !answer ? null : (\r\n
  • \r\n {\r\n setIsOpen(!isOpen);\r\n setHideBg(true);\r\n }}\r\n onMouseLeave={() => setHideBg(false)}\r\n aria-expanded={isOpen}\r\n aria-controls={answerId.current}\r\n >\r\n
    \r\n {question}\r\n
    \r\n \r\n\r\n
    \r\n \r\n \r\n
    \r\n
  • \r\n );\r\n}\r\n\r\nfunction Answer({ isOpen, html, style = {}, ...rest }) {\r\n const ref = useRef();\r\n const { height = 0 } = useResizeObserver(ref);\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport CTA from './CTA';\r\nimport FAQ from './FAQ';\r\nimport useConfig from '@hooks/useConfig';\r\n\r\nexport default React.memo(function BottomContent({ faqs, ctas }) {\r\n const { positionCtaBelowFaq } = useConfig();\r\n\r\n const content = [\r\n ,\r\n \r\n ];\r\n\r\n if (positionCtaBelowFaq) {\r\n content.reverse();\r\n }\r\n\r\n return
    {content}
    ;\r\n});\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"content_bottom__nsen2\";\nvar _3 = \"content_content__8yftw\";\nvar _4 = \"640px\";\nvar _5 = \"790px\";\nvar _6 = \"#057676\";\nvar _7 = \"content_dot__dkes2\";\nvar _8 = \"content_dotwrapper__kzmje\";\nvar _9 = \"#434343\";\nvar _a = \"79px\";\nvar _b = \"110px\";\nvar _c = \"72px\";\nvar _d = \"665px\";\nvar _e = \"content_placeholder__o0kum\";\nvar _f = \"content_producttypes__ai7y7\";\nvar _10 = \"content_producttypescategory__frj9l\";\nvar _11 = \"content_producttypescategorywrapper__q3bje\";\nvar _12 = \"content_producttypeslabel__7bmyc\";\nvar _13 = \"content_producttypeswrapper__fnznc\";\nvar _14 = \"content_productsdivider__tt5nw\";\nvar _15 = \"content_ratetablelabel__tkx28\";\nvar _16 = \"content_ratetablelabelwrapper__ftg91\";\nvar _17 = \"content_rates__nvv1j\";\nvar _18 = \"teal\";\nvar _19 = \"content_text__3cihf\";\nvar _1a = \"2\";\nvar _1b = \"#cdd3dc\";\nvar _1c = \"content_whitebg__dkxzg\";\nvar _1d = \"content_wrapper__fvwzi\";\nexport { _1 as \"body\", _2 as \"bottom\", _3 as \"content\", _4 as \"controlsMobileWidth\", _5 as \"controlsStackedWidth\", _6 as \"darkTeal\", _7 as \"dot\", _8 as \"dotWrapper\", _9 as \"headline\", _a as \"menuHeight\", _b as \"menuHeightLarge\", _c as \"menuHeightMobile\", _d as \"modalMobileWidth\", _e as \"placeholder\", _f as \"productTypes\", _10 as \"productTypesCategory\", _11 as \"productTypesCategoryWrapper\", _12 as \"productTypesLabel\", _13 as \"productTypesWrapper\", _14 as \"productsDivider\", _15 as \"rateTableLabel\", _16 as \"rateTableLabelWrapper\", _17 as \"rates\", _18 as \"teal\", _19 as \"text\", _1a as \"timelineStrokeWidth\", _1b as \"timelineTrackColor\", _1c as \"whiteBg\", _1d as \"wrapper\" }\n","import React, { useState, useEffect, useMemo, useRef } from 'react';\r\nimport { TimelineContent, Dot } from '@components/Timeline';\r\nimport InfoText from './InfoText';\r\nimport ProductTypes from './ProductTypes';\r\nimport Toolbar from './Toolbar';\r\nimport RateTable from './RateTable';\r\nimport CalculatorMessages from './CalculatorMessages';\r\nimport LoadMoreRates from './LoadMoreRates';\r\nimport RateDisclosures from './RateDisclosures';\r\nimport RateModal from './RateModal';\r\nimport RackRates from './RackRates';\r\nimport BottomContent from './BottomContent';\r\nimport DashedLine from '@components/DashedLine';\r\nimport usePrevious from '@hooks/usePrevious';\r\nimport useWindowResizing from '@hooks/useWindowResizing';\r\nimport useDocumentReady from '@hooks/useDocumentReady';\r\nimport useIsMobile from '@hooks/useIsMobile';\r\nimport useMatchMedia from '@hooks/useMatchMedia';\r\nimport * as styles from './Content.module.scss';\r\nimport classNames from 'classnames';\r\nimport { getElementsToTransform, isMobileDevice } from '@helpers';\r\nimport { sortStates } from '@enums';\r\nimport { orderBy } from 'lodash';\r\nimport { useSpring, animated } from 'react-spring';\r\n\r\nexport default React.memo(function Content({\r\n loanDetails,\r\n inputsRect,\r\n inputsAreOpen,\r\n productTypes,\r\n hasEnabledProductTypes,\r\n rates,\r\n effectiveDate,\r\n isLoading,\r\n isLoadingCategory,\r\n canLoadMore,\r\n hasInitialData,\r\n errors,\r\n showRackRates,\r\n rackRateGroups,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n rackRatesAreLoading,\r\n rackRatesError,\r\n ctas,\r\n faqs,\r\n toggleProductCategory,\r\n toggleProductType,\r\n loadMore,\r\n fetchRackRateGroups\r\n}) {\r\n //////////////////////////\r\n // User Interface\r\n //////////////////////////\r\n\r\n const isMobile = useIsMobile();\r\n\r\n const style = useMemo(() => {\r\n const height = inputsRect?.height;\r\n const hasRect = !!height;\r\n const property = val => {\r\n return isMobile || !hasRect ? null : val;\r\n };\r\n\r\n return {\r\n height: property(height),\r\n marginTop: property(-height),\r\n y: property(height),\r\n transform: property(`translate3d(0, ${height}px, 0)`)\r\n };\r\n }, [inputsRect, isMobile]);\r\n\r\n const isAnimating = useRef(false);\r\n const isResizing = useWindowResizing();\r\n\r\n const prevLoanPurpose = useRef(loanDetails?.loanPurpose);\r\n const isSwitchingLoanPurpose = useMemo(() => {\r\n const currentLoanPurpose = prevLoanPurpose.current;\r\n const newLoanPurpose = loanDetails?.loanPurpose;\r\n prevLoanPurpose.current = newLoanPurpose;\r\n\r\n return inputsAreOpen && currentLoanPurpose !== newLoanPurpose;\r\n }, [loanDetails?.loanPurpose, inputsAreOpen]);\r\n\r\n const spring = useSpring({\r\n y: isMobile || showRackRates || !inputsAreOpen ? 0 : style.y,\r\n cancel: isMobile || showRackRates,\r\n immediate: isResizing || isSwitchingLoanPurpose,\r\n config: {\r\n tension: inputsAreOpen || isAnimating.current ? 165 : 120\r\n },\r\n delay: () =>\r\n isMobile || showRackRates || inputsAreOpen || isAnimating.current\r\n ? 0\r\n : 260,\r\n onStart: () => (isAnimating.current = true),\r\n onRest: () => (isAnimating.current = false),\r\n onChange: transformElements\r\n });\r\n\r\n const springRef = useRef(spring);\r\n\r\n useEffect(() => {\r\n springRef.current = spring;\r\n }, [spring]);\r\n\r\n useEffect(() => {\r\n if (isMobile || showRackRates) {\r\n springRef.current.y?.set(0);\r\n }\r\n }, [isMobile, showRackRates]);\r\n\r\n // Ensure transform elements are\r\n // queried before animation starts\r\n useDocumentReady(getElementsToTransform);\r\n\r\n const toolbarOffset = useMemo(() => {\r\n return !inputsAreOpen ? 0 : inputsRect?.height ?? 0;\r\n }, [inputsAreOpen, inputsRect]);\r\n\r\n //////////////////////////\r\n // Rates\r\n //////////////////////////\r\n\r\n const [sortState, setSortState] = useState(sortStates.PRODUCT.value);\r\n\r\n const prevRates = usePrevious(rates);\r\n const currentRates = useMemo(() => {\r\n const currentRates = isLoading && !hasInitialData ? prevRates : rates;\r\n const order = Object.values(sortStates).find(\r\n ({ value }) => value === sortState.value\r\n )?.order;\r\n\r\n return orderBy(\r\n currentRates,\r\n sortState.split(/, */),\r\n order?.split(/, */) ?? 'asc'\r\n );\r\n }, [isLoading, rates, prevRates, hasInitialData, sortState]);\r\n\r\n const hasRates = !!currentRates?.length;\r\n const hasErrors = !!errors?.general;\r\n const disableInteraction =\r\n hasErrors || !hasInitialData || !hasEnabledProductTypes || !hasRates;\r\n\r\n // The product displayed in the sample loan\r\n // and sent with the modal CTA form\r\n const [modalProduct, setModalProduct] = useState(null);\r\n\r\n useEffect(() => {\r\n setModalProduct(null);\r\n }, [loanDetails, showRackRates]);\r\n\r\n const loanPurposeLabel = (\r\n showRackRates ? rackRateLoanPurpose : loanDetails?.loanPurpose ?? null\r\n )?.toLowerCase();\r\n\r\n const productTypesLabel = useMatchMedia(\r\n 530,\r\n 'Select mortgage loan types to compare',\r\n 'Select the types of mortgage loans you would like to compare'\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n

    \r\n Compare your{' '}\r\n {loanPurposeLabel}{' '}\r\n mortgage rates\r\n

    \r\n
    \r\n
    \r\n {!showRackRates && (\r\n \r\n \r\n \r\n {productTypesLabel}\r\n \r\n \r\n {!hasErrors && (\r\n \r\n )}\r\n \r\n )}\r\n
    \r\n {(!hasErrors || (showRackRates && !rackRatesAreLoading)) && (\r\n \r\n \r\n {isMobileDevice() ? 'Tap' : 'Click'} a row to see detailed\r\n information about that loan product and rate\r\n \r\n \r\n )}\r\n
    \r\n \r\n {!showRackRates ? (\r\n <>\r\n {!hasErrors && (\r\n <>\r\n \r\n \r\n \r\n )}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n {!showRackRates && (\r\n <>\r\n
    \r\n \r\n \r\n {hasRates && !hasErrors && (\r\n \r\n )}\r\n
    \r\n \r\n )}\r\n \r\n
    \r\n \r\n \r\n \r\n );\r\n});\r\n\r\nfunction transformElements({ value }) {\r\n const transform = `translate3d(0, ${value.y}px, 0)`;\r\n\r\n getElementsToTransform().forEach(el => {\r\n el.style.transform = transform;\r\n });\r\n}\r\n","import { useEffect, useRef } from 'react';\r\nimport { isFunction } from 'lodash';\r\n\r\nexport default function useDocumentReady(callback) {\r\n const callbackRef = useRef(callback);\r\n\r\n useEffect(() => {\r\n if (isFunction(callbackRef.current)) {\r\n if (document.readyState === 'complete') {\r\n callbackRef.current();\r\n } else {\r\n document.addEventListener('DOMContentLoaded', () => {\r\n callbackRef.current();\r\n });\r\n }\r\n }\r\n }, []);\r\n}\r\n","import React, { useState, useCallback } from 'react';\r\nimport Modal from '@components/Modal';\r\nimport * as styles from './DebugMenu.module.scss';\r\n\r\nexport default function DebugMenu({\r\n debugErrorCodes,\r\n showRackRates,\r\n testApiError\r\n}) {\r\n const [isOpen, setIsOpen] = useState(false);\r\n\r\n const handleErrorButtonClick = useCallback(\r\n code => {\r\n setIsOpen(false);\r\n testApiError(code);\r\n },\r\n [testApiError]\r\n );\r\n\r\n return (\r\n <>\r\n setIsOpen(true)}\r\n >\r\n Debug Menu\r\n \r\n \r\n
    \r\n {showRackRates ? (\r\n

    \r\n Cannot test API errors when rack rates are rendered. API errors\r\n can only be returned when fetching dynamic rates from the MORRIS\r\n API.\r\n

    \r\n ) : (\r\n <>\r\n {debugErrorCodes?.length ? (\r\n <>\r\n

    \r\n Click a button to simulate the API returning a specific\r\n error code.\r\n

    \r\n
    \r\n {debugErrorCodes.map((code, index) => (\r\n \r\n ))}\r\n
    \r\n \r\n ) : (\r\n

    \r\n No error codes found. You can configure errors from the\r\n administration interface.\r\n

    \r\n )}\r\n \r\n )}\r\n
    \r\n \r\n \r\n );\r\n}\r\n\r\nfunction Section({ title, children }) {\r\n return (\r\n
    \r\n {title && {title}}\r\n {children}\r\n
    \r\n );\r\n}\r\n\r\nfunction ErrorButton({ code, onClick }) {\r\n return (\r\n onClick(code)}\r\n >\r\n {code}\r\n \r\n );\r\n}\r\n","// extracted by mini-css-extract-plugin\nvar _1 = \"#4c4c4c\";\nvar _2 = \"debugmenu_button__xqaen\";\nvar _3 = \"640px\";\nvar _4 = \"790px\";\nvar _5 = \"#057676\";\nvar _6 = \"debugmenu_errorbuttons__bev-h\";\nvar _7 = \"#434343\";\nvar _8 = \"79px\";\nvar _9 = \"110px\";\nvar _a = \"72px\";\nvar _b = \"665px\";\nvar _c = \"debugmenu_section__r-mit\";\nvar _d = \"debugmenu_subtitle__ny81k\";\nvar _e = \"teal\";\nvar _f = \"2\";\nvar _10 = \"#cdd3dc\";\nexport { _1 as \"body\", _2 as \"button\", _3 as \"controlsMobileWidth\", _4 as \"controlsStackedWidth\", _5 as \"darkTeal\", _6 as \"errorButtons\", _7 as \"headline\", _8 as \"menuHeight\", _9 as \"menuHeightLarge\", _a as \"menuHeightMobile\", _b as \"modalMobileWidth\", _c as \"section\", _d as \"subtitle\", _e as \"teal\", _f as \"timelineStrokeWidth\", _10 as \"timelineTrackColor\" }\n","import { useRef, useEffect, useCallback } from 'react';\r\nimport useProductTypeLabels from '@hooks/useProductTypeLabels';\r\nimport { isString, minBy } from 'lodash';\r\nimport { productLoadState } from '@enums';\r\n\r\nexport default function useProductTypeHelpers(productTypes) {\r\n // Saved ref of current product types to avoid re-renders\r\n const productTypesRef = useRef(getProductTypesRef(productTypes));\r\n\r\n useEffect(() => {\r\n productTypesRef.current = getProductTypesRef(productTypes);\r\n }, [productTypes]);\r\n\r\n // Stores which product types have been requested\r\n // for each loading state. This helps us avoid\r\n // fetching products multiple times\r\n const createRequestPhaseArray = useCallback((requestPhases, shouldQueue) => {\r\n const arr = new Array(requestPhases?.length ?? 0).fill(\r\n productLoadState.NOT_STARTED\r\n );\r\n\r\n if (shouldQueue && arr.length) {\r\n arr[0] = productLoadState.QUEUED;\r\n }\r\n\r\n return arr;\r\n }, []);\r\n\r\n const productIsEnabled = useCallback(\r\n (productTypeID, loanType, productTypes) => {\r\n productTypes = productTypes ?? productTypesRef.current;\r\n\r\n if (!productTypes || !productTypes[loanType]?.isEnabled) {\r\n return false;\r\n }\r\n\r\n const products = loanType\r\n ? productTypes[loanType]?.products\r\n : getAllProductTypes(productTypes);\r\n\r\n const product = products?.find(p => p.productTypeID === productTypeID);\r\n\r\n return product?.isEnabled && productTypes[product.loanType].isEnabled;\r\n },\r\n []\r\n );\r\n\r\n const createLoadingState = useCallback(\r\n (requestPhases, productTypes) => {\r\n productTypes = productTypes ?? productTypesRef.current ?? {};\r\n\r\n if (!productTypes || (!productTypes.fixed && !productTypes.adjustable)) {\r\n return [];\r\n }\r\n\r\n return getAllProductTypes(productTypes)\r\n .map(({ productTypeID, isEnabled, loanType, label }) => {\r\n return productTypeID <= 0 || !productTypes[loanType]\r\n ? null\r\n : {\r\n productTypeID,\r\n label,\r\n loanType,\r\n totalRequestPhases: requestPhases.length,\r\n requestPhases: createRequestPhaseArray(\r\n requestPhases,\r\n isEnabled && productTypes[loanType].isEnabled\r\n )\r\n };\r\n })\r\n .filter(p => p);\r\n },\r\n [createRequestPhaseArray]\r\n );\r\n\r\n const updateLoadingState = useCallback(\r\n (\r\n loadState,\r\n currentLoadingState,\r\n productTypeIDs = [],\r\n requestPhaseIndex = 0\r\n ) => {\r\n const totalRequestPhases =\r\n currentLoadingState?.[0]?.requestPhases.length ?? 0;\r\n\r\n if (!isLoadState(loadState) || requestPhaseIndex >= totalRequestPhases) {\r\n console.error('Invalid loading state or request phase');\r\n return currentLoadingState;\r\n }\r\n\r\n return currentLoadingState?.map(state => {\r\n if (!productTypeIDs.find(id => id === state.productTypeID)) {\r\n return state;\r\n }\r\n\r\n const newState = { ...state };\r\n const prevState = newState.requestPhases[requestPhaseIndex];\r\n\r\n if (\r\n loadState === productLoadState.LOADING &&\r\n prevState === productLoadState.QUEUED_LOAD_MORE\r\n ) {\r\n newState.requestPhases[requestPhaseIndex] =\r\n productLoadState.LOADING_MORE;\r\n } else {\r\n newState.requestPhases[requestPhaseIndex] = loadState;\r\n }\r\n\r\n return newState;\r\n });\r\n },\r\n []\r\n );\r\n\r\n const getEnabledProducts = useCallback(\r\n (productTypes = productTypesRef.current) => {\r\n const { fixed, adjustable } = productTypes;\r\n\r\n const products = [\r\n fixed?.isEnabled ? fixed.products : [],\r\n adjustable?.isEnabled ? adjustable.products : []\r\n ];\r\n\r\n return products.flat().filter(p => p.isEnabled);\r\n },\r\n []\r\n );\r\n\r\n const getProductsToLoad = useCallback(\r\n (\r\n requestPhaseIndex,\r\n loadingState = [],\r\n onlyReturnIds = true,\r\n includeDisabledProducts\r\n ) => {\r\n if (!loadingState?.length || !productTypesRef.current.products) {\r\n return [];\r\n }\r\n\r\n const totalRequestPhases = loadingState[0].requestPhases.length;\r\n\r\n const productTypes = includeDisabledProducts\r\n ? getAllProductTypes(productTypesRef.current)\r\n : getEnabledProducts(productTypesRef.current);\r\n\r\n const products = productTypes\r\n .map(product => {\r\n const productState = loadingState.find(\r\n p => p.productTypeID === product.productTypeID\r\n );\r\n\r\n if (\r\n (!includeDisabledProducts && !product.isEnabled) ||\r\n !productState\r\n ) {\r\n return null;\r\n }\r\n\r\n const currentLoadState =\r\n productState.requestPhases[requestPhaseIndex];\r\n\r\n const canLoad =\r\n requestPhaseIndex < totalRequestPhases &&\r\n (currentLoadState === productLoadState.NOT_STARTED ||\r\n currentLoadState === productLoadState.QUEUED ||\r\n currentLoadState === productLoadState.QUEUED_LOAD_MORE);\r\n\r\n return canLoad ? product : null;\r\n })\r\n .filter(p => p)\r\n .sort(p => (p.isAdjustable ? -1 : 1));\r\n\r\n return !onlyReturnIds ? products : products.map(p => p.productTypeID);\r\n },\r\n [getEnabledProducts]\r\n );\r\n\r\n const getRequestPhaseWithProductsToLoad = useCallback(\r\n (loadingState, productTypes) => {\r\n productTypes = productTypes ?? productTypesRef.current;\r\n\r\n const minProduct = minBy(loadingState, product => {\r\n if (\r\n !product.requestPhases?.length ||\r\n !productIsEnabled(\r\n product.productTypeID,\r\n product.loanType,\r\n productTypes\r\n )\r\n ) {\r\n return null;\r\n }\r\n\r\n const index = product.requestPhases.findIndex(loadState => {\r\n return loadState === productLoadState.NOT_STARTED;\r\n });\r\n\r\n return index < 0 ? null : index;\r\n });\r\n\r\n return !minProduct\r\n ? null\r\n : minProduct.requestPhases.indexOf(productLoadState.NOT_STARTED);\r\n },\r\n [productIsEnabled]\r\n );\r\n\r\n // Object to hold labels for each different product type.\r\n // This allows us to avoid searching the productTypes\r\n // array for the label of every rate returned from the API\r\n const labels = useProductTypeLabels(productTypes);\r\n\r\n return {\r\n labels,\r\n productIsEnabled,\r\n getProductsToLoad,\r\n createLoadingState,\r\n updateLoadingState,\r\n getEnabledProducts,\r\n getAllProductTypes,\r\n getRequestPhaseWithProductsToLoad,\r\n cachedProductTypes: productTypesRef.current\r\n };\r\n}\r\n\r\nconst isLoadState = (() => {\r\n const values = Object.values(productLoadState);\r\n\r\n return state => {\r\n return isString(state) && values.includes(state);\r\n };\r\n})();\r\n\r\nfunction getProductTypesRef(productTypes = {}) {\r\n return {\r\n ...productTypes,\r\n products: getAllProductTypes(productTypes)\r\n };\r\n}\r\n\r\nexport function getAllProductTypes(productTypes = {}) {\r\n return [\r\n productTypes?.fixed?.products ?? [],\r\n productTypes?.adjustable?.products ?? []\r\n ]\r\n .flat()\r\n .filter(p => p);\r\n}\r\n","import { useRef } from 'react';\r\nimport { getAllProductTypes } from '@hooks/useProductTypeHelpers';\r\n\r\nexport default function useProductTypeLabels(productTypes) {\r\n const labels = useRef(createProductLabels(productTypes));\r\n return labels;\r\n}\r\n\r\nfunction createProductLabels(productTypes) {\r\n const labels = {};\r\n\r\n getAllProductTypes(productTypes).forEach(\r\n ({ productTypeID, name, changeFrequencyUnits }) => {\r\n if (productTypeID > 0) {\r\n labels[String(productTypeID)] = { name, changeFrequencyUnits };\r\n }\r\n }\r\n );\r\n\r\n return labels;\r\n}\r\n","import { useState, useCallback, useRef, useEffect } from 'react';\r\nimport useProductTypeLabels from '@hooks/useProductTypeLabels';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { isAdjustableRate, isFixedRate, isSSR, camelCaseProps } from '@helpers';\r\nimport { loanPurpose, closingCostType } from '@enums';\r\nimport { RACK_RATES_ENDPOINT } from '@constants';\r\nimport { round } from 'lodash';\r\n\r\nexport default function useRackRates(\r\n forceShowRackRates,\r\n initialData = [],\r\n productTypes,\r\n defaultScenario\r\n) {\r\n const config = useConfig();\r\n const [showRackRates, setShowRackRates] = useState(!!forceShowRackRates);\r\n const labels = useProductTypeLabels(productTypes);\r\n const [rackRateGroups, setRackRateGroups] = useState(\r\n formatRackRateGroups(initialData, labels.current, defaultScenario)\r\n );\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [error, setError] = useState(null);\r\n\r\n const loadingTimer = useRef(null);\r\n useEffect(() => clearTimeout(loadingTimer.current), []);\r\n\r\n const fetchRackRateGroups = useCallback(async () => {\r\n try {\r\n setIsLoading(true);\r\n setShowRackRates(true);\r\n clearTimeout(loadingTimer.current);\r\n\r\n // Ensure loading spinner displays to\r\n // avoid awkward layout shift\r\n const minLoadTime = 600;\r\n const start = performance.now();\r\n\r\n const response = await fetch(RACK_RATES_ENDPOINT, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept-Encoding': 'gzip, deflate',\r\n Accept: '*/*'\r\n }\r\n });\r\n\r\n const data = camelCaseProps(await response.json());\r\n const groups = formatRackRateGroups(\r\n data,\r\n labels.current,\r\n defaultScenario\r\n );\r\n\r\n const end = performance.now();\r\n const delay = Math.max(0, minLoadTime - (end - start));\r\n\r\n loadingTimer.current = setTimeout(() => {\r\n setRackRateGroups(groups);\r\n setIsLoading(false);\r\n }, Math.round(delay));\r\n } catch (error) {\r\n clearTimeout(loadingTimer.current);\r\n console.error(error);\r\n\r\n setIsLoading(false);\r\n setError(config.rackRatesErrorMessage);\r\n }\r\n }, [labels, defaultScenario, config.rackRatesErrorMessage]);\r\n\r\n const [rackRateLoanPurpose, setRackRateLoanPurpose] = useState(\r\n defaultScenario.loanPurpose ?? loanPurpose.REFINANCE\r\n );\r\n const [rackRateLoanType, setRackRateLoanType] = useState(closingCostType.NCC);\r\n\r\n if (!isSSR()) {\r\n window.getRackRates = () => rackRateGroups;\r\n }\r\n\r\n return {\r\n showRackRates,\r\n setShowRackRates,\r\n rackRateGroups,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n error,\r\n isLoading,\r\n setRackRateLoanPurpose,\r\n setRackRateLoanType,\r\n fetchRackRateGroups\r\n };\r\n}\r\n\r\nfunction formatRackRateGroups(groups, labels, defaultScenario) {\r\n if (!Array.isArray(groups)) {\r\n return [];\r\n }\r\n\r\n return groups.map(group => {\r\n group.loanPurpose = group.loanPurpose?.trim().toLowerCase();\r\n group.nccRates = mapRates(group.nccRates, labels, defaultScenario);\r\n group.ptsFeesRates = mapRates(group.ptsFeesRates, labels, defaultScenario);\r\n\r\n return group;\r\n });\r\n}\r\n\r\nfunction mapRates(rates, labels, defaultScenario) {\r\n if (!Array.isArray(rates)) {\r\n return [];\r\n }\r\n\r\n return rates\r\n .map(r => formatRackRate(r, labels, defaultScenario))\r\n .filter(r => r);\r\n}\r\n\r\nfunction formatRackRate(rate, labels, defaultScenario) {\r\n // Normalize data to match the object\r\n // shape used on the dynamic rates\r\n rate.planDescription ??= rate.description ?? '';\r\n rate.type ??= rate.loanType ?? '';\r\n rate.term ??= rate.loanTerm ?? '';\r\n rate.minPaymentAfter1stRateChange ??= rate.minPaymentAfterFirstRateChange;\r\n\r\n delete rate.description;\r\n delete rate.loanType;\r\n delete rate.loanTerm;\r\n delete rate.minPaymentAfterFirstRateChange;\r\n\r\n // Format data\r\n rate.type = rate.type.toLowerCase();\r\n rate.loanPurpose = rate.loanPurpose?.trim().toLowerCase();\r\n rate.isAdjustable = isAdjustableRate(rate.type);\r\n rate.isFixed = isFixedRate(rate.type);\r\n rate.rate = round(rate.rate, 3);\r\n rate.apr = round(rate.apr, 3);\r\n rate.payment = round(rate.payment, 2);\r\n rate.closingCosts = round(rate.closingCosts, 2);\r\n rate.term = parseFloat(rate.term);\r\n rate.months = parseFloat(rate.months ?? rate.term * 12);\r\n\r\n // Add loan details as separate object that\r\n // mirrors the shape of dynamic input fields\r\n rate.loanDetails = {\r\n creditScore: defaultScenario.creditScore,\r\n loanAmount: rate.loanAmount,\r\n homeValue: round(rate.loanAmount / (rate.loanToValue / 100)),\r\n loanPurpose: rate.loanPurpose,\r\n occupancyType: defaultScenario.occupancyType,\r\n propertyType: defaultScenario.propertyType,\r\n zipCode: defaultScenario.zipCode\r\n };\r\n\r\n const productLabels = labels[String(rate.productTypeID)];\r\n rate.productLabel = productLabels?.name.trim();\r\n\r\n if (rate.isAdjustable) {\r\n rate.changeFrequencyUnits = productLabels?.changeFrequencyUnits ?? 'years';\r\n\r\n rate.timePeriodOfInitialRate = parseInt(rate.timePeriodOfInitialRate);\r\n rate.rateChangeFrequency = parseInt(rate.rateChangeFrequency);\r\n }\r\n\r\n // Fallback in case product label not found\r\n if (!rate.productLabel) {\r\n if (rate.isFixed) {\r\n rate.productLabel = `${rate.term} year fixed rate`;\r\n } else if (rate.isAdjustable) {\r\n const r = new RegExp(`[^/]\\\\d/${rate.rateChangeFrequency}[a-z ]`, 'i');\r\n const match = rate.planDescription?.match(r);\r\n rate.productLabel = match ? `${match[0].trim()} adjustable rate` : null;\r\n }\r\n }\r\n\r\n if (\r\n !rate.term ||\r\n !rate.productLabel ||\r\n rate.apr === 0 ||\r\n rate.rate === 0 ||\r\n isNaN(rate.apr) ||\r\n isNaN(rate.rate) ||\r\n isNaN(rate.payment) ||\r\n isNaN(rate.closingCosts) ||\r\n (!rate.isAdjustable && !rate.isFixed)\r\n ) {\r\n console.warn('Invalid rack rate', rate);\r\n return null;\r\n }\r\n\r\n return rate;\r\n}\r\n","import { useState, useCallback, useMemo } from 'react';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { isBoolean, orderBy } from 'lodash';\r\nimport { isValidLoanType, isFixedRate, isAdjustableRate } from '@helpers';\r\n\r\nexport default function useProductTypes(defaultProductTypes = []) {\r\n const config = useConfig();\r\n\r\n //////////////////////////\r\n // Product Categories\r\n //////////////////////////\r\n\r\n const [productCategories, setProductCategories] = useState({\r\n fixed: isDefaultCategory('fixed', config),\r\n adjustable: isDefaultCategory('adjustable', config)\r\n });\r\n\r\n const toggleProductCategory = useCallback((name, isEnabled) => {\r\n setProductCategories(prevCategories => {\r\n if (!prevCategories.hasOwnProperty(name)) {\r\n return prevCategories;\r\n }\r\n\r\n return {\r\n ...prevCategories,\r\n [name]: isBoolean(isEnabled) ? isEnabled : !prevCategories[name]\r\n };\r\n });\r\n }, []);\r\n\r\n //////////////////////////\r\n // Product Types\r\n //////////////////////////\r\n\r\n const [productTypes, setProductTypes] = useState(() => {\r\n return defaultProductTypes\r\n .map(({ isEnabled, loanType, isDefaultSelection, ...rest }) => {\r\n loanType = loanType?.toLowerCase().trim();\r\n\r\n if (!isEnabled || !isValidLoanType(loanType)) {\r\n return null;\r\n }\r\n\r\n return { loanType, isEnabled: !!isDefaultSelection, ...rest };\r\n })\r\n .filter(p => p);\r\n });\r\n\r\n const toggleProductType = useCallback((id, isEnabled) => {\r\n setProductTypes((prevProductTypes = []) => {\r\n const index = prevProductTypes.findIndex(p => id === p.productTypeID);\r\n\r\n if (index < 0) {\r\n return prevProductTypes;\r\n }\r\n\r\n const productTypes = prevProductTypes.slice();\r\n\r\n productTypes[index] = {\r\n ...productTypes[index],\r\n isEnabled: isBoolean(isEnabled)\r\n ? isEnabled\r\n : !productTypes[index].isEnabled\r\n };\r\n\r\n return productTypes;\r\n });\r\n }, []);\r\n\r\n //////////////////////////\r\n // Combined State\r\n //////////////////////////\r\n\r\n const { hasEnabledProductTypes, data } = useMemo(() => {\r\n const fixedProductTypes = [];\r\n const adjustableProductTypes = [];\r\n const fixedIsEnabled = !!productCategories.fixed;\r\n const adjustableIsEnabled = !!productCategories.adjustable;\r\n\r\n let hasEnabledProductTypes = false;\r\n\r\n productTypes.forEach(product => {\r\n if (isFixedRate(product.loanType)) {\r\n fixedProductTypes.push(product);\r\n\r\n if (fixedIsEnabled && product.isEnabled) {\r\n hasEnabledProductTypes = true;\r\n }\r\n } else if (isAdjustableRate(product.loanType)) {\r\n adjustableProductTypes.push(product);\r\n\r\n if (adjustableIsEnabled && product.isEnabled) {\r\n hasEnabledProductTypes = true;\r\n }\r\n }\r\n });\r\n\r\n return {\r\n hasEnabledProductTypes,\r\n data: {\r\n fixed: {\r\n isEnabled: fixedIsEnabled,\r\n products: orderBy(fixedProductTypes, productSort, 'desc')\r\n },\r\n adjustable: {\r\n isEnabled: adjustableIsEnabled,\r\n products: orderBy(adjustableProductTypes, productSort, 'asc')\r\n }\r\n }\r\n };\r\n }, [productCategories, productTypes]);\r\n\r\n return {\r\n productTypes: data,\r\n hasEnabledProductTypes,\r\n toggleProductCategory,\r\n toggleProductType\r\n };\r\n}\r\n\r\nfunction isDefaultCategory(\r\n category = '',\r\n { defaultProductCategory: defaultCategory = 'fixed' }\r\n) {\r\n category = category.toLowerCase();\r\n defaultCategory = defaultCategory?.toLowerCase();\r\n\r\n return defaultCategory === 'both' || category === defaultCategory;\r\n}\r\n\r\nfunction productSort({ label = '' }) {\r\n const num = parseInt(label.replace(/(\\d+)([^0-9].*)/, '$1').trim());\r\n return isNaN(num) ? 0 : num;\r\n}\r\n","import { isPlainObject } from 'lodash';\r\nimport { DEFAULT_ERROR_MESSAGE } from '@constants';\r\nimport { camelCaseProps } from '@helpers';\r\n\r\nexport default class CalculatorError extends Error {\r\n constructor(data) {\r\n let message = null;\r\n let errorData = {};\r\n let hasGeneralError = false;\r\n let hasValidationError = false;\r\n\r\n if (isPlainObject(data)) {\r\n if (\r\n isPlainObject(data.validation) &&\r\n Object.keys(data.validation).length\r\n ) {\r\n hasValidationError = true;\r\n errorData.validation = camelCaseProps(data.validation);\r\n message = 'Invalid user inputs';\r\n delete data.validation;\r\n } else {\r\n hasGeneralError = true;\r\n }\r\n\r\n const keys = Object.keys(data);\r\n\r\n if (keys.length) {\r\n errorData = data;\r\n message = data.general ?? data[Object.keys(data)[0]] ?? message;\r\n hasGeneralError = true;\r\n }\r\n } else {\r\n errorData.general = DEFAULT_ERROR_MESSAGE;\r\n hasGeneralError = true;\r\n }\r\n\r\n super(message ?? DEFAULT_ERROR_MESSAGE);\r\n\r\n this.name = 'CalculatorError';\r\n this.data = errorData;\r\n this.isValidation = hasValidationError;\r\n this.isGeneral = hasGeneralError;\r\n }\r\n}\r\n","import { useCallback, useRef, useEffect } from 'react';\r\nimport useProductTypeHelpers from '@hooks/useProductTypeHelpers';\r\nimport useConfig from '@hooks/useConfig';\r\nimport { round, isPlainObject, uniq, groupBy } from 'lodash';\r\nimport { DYNAMIC_RATES_ENDPOINT } from '@constants';\r\nimport { keys, productLoadState, closingCostType } from '@enums';\r\nimport CalculatorError from '@utils/CalculatorError';\r\nimport {\r\n generateId,\r\n camelCaseProps,\r\n isFixedRate,\r\n isAdjustableRate,\r\n isPurchase,\r\n getEffectiveDate,\r\n filterRequestPhaseData\r\n} from '@helpers';\r\n\r\nexport default function useScenarioHelpers(requestPhaseData, productTypes) {\r\n const config = useConfig();\r\n\r\n const {\r\n labels,\r\n productIsEnabled,\r\n createLoadingState,\r\n getProductsToLoad,\r\n getEnabledProducts,\r\n getRequestPhaseWithProductsToLoad,\r\n updateLoadingState\r\n } = useProductTypeHelpers(productTypes);\r\n\r\n const productTypesRef = useRef(productTypes);\r\n\r\n useEffect(() => {\r\n productTypesRef.current = productTypes;\r\n }, [productTypes]);\r\n\r\n // Store data from each request phase in a different\r\n // nested array so that we only show additional\r\n // when the user clicks load more\r\n const createRatesArray = useCallback(requestPhases => {\r\n return new Array(requestPhases?.length ?? 0).fill([]);\r\n }, []);\r\n\r\n const fetchRates = useCallback(\r\n async (\r\n loanDetails,\r\n requestPhaseID,\r\n productTypeIDs,\r\n closingCosts = closingCostType.BOTH,\r\n debugErrorCode\r\n ) => {\r\n const body = {\r\n requestPhaseID,\r\n productTypeIDs,\r\n closingCostType: closingCosts,\r\n ...loanDetails\r\n };\r\n\r\n if (isPurchase(loanDetails.loanPurpose)) {\r\n body.cashOutAmount = null;\r\n }\r\n\r\n if (config.enableDebugMode && debugErrorCode) {\r\n body.debugErrorCode = debugErrorCode;\r\n }\r\n\r\n const args = {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'Accept-Encoding': 'gzip, deflate',\r\n Accept: '*/*'\r\n },\r\n body: JSON.stringify(body)\r\n };\r\n\r\n const response = await fetch(DYNAMIC_RATES_ENDPOINT, args);\r\n\r\n if (!response.ok) {\r\n throw new CalculatorError();\r\n }\r\n\r\n const data = camelCaseProps(await response.json());\r\n\r\n if (isPlainObject(data) && !data.errors && data.rates?.length) {\r\n data.effectiveDate = getEffectiveDate(data.effectiveDate);\r\n } else {\r\n data.effectiveDate = null;\r\n }\r\n\r\n return data;\r\n },\r\n [config.enableDebugMode]\r\n );\r\n\r\n const formatData = useCallback(\r\n data => {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n\r\n return data\r\n .map(p => {\r\n if (!p.productTypeID) {\r\n console.error('Invalid product type', p);\r\n return null;\r\n }\r\n\r\n p.type = p.type.toLowerCase();\r\n p.isAdjustable = isAdjustableRate(p.type);\r\n p.isFixed = isFixedRate(p.type);\r\n p.rate = round(p.rate, 3);\r\n p.apr = round(p.apr, 3);\r\n p.payment = round(p.payment, 2);\r\n p.closingCosts = round(p.closingCosts, 2);\r\n p.term = parseFloat(p.term);\r\n p.months = parseFloat(p.months);\r\n\r\n const productLabels = labels.current[String(p.productTypeID)];\r\n\r\n p.productLabel = productLabels?.name.trim();\r\n\r\n if (p.isAdjustable) {\r\n p.changeFrequencyUnits =\r\n productLabels?.changeFrequencyUnits ?? 'years';\r\n\r\n p.timePeriodOfInitialRate = parseInt(p.timePeriodOfInitialRate);\r\n p.rateChangeFrequency = parseInt(p.rateChangeFrequency);\r\n }\r\n\r\n // We store a numeric value for the term for sorting\r\n p.termValue = p.isAdjustable\r\n ? parseInt(\r\n `${p.timePeriodOfInitialRate / 12}${p.rateChangeFrequency}`\r\n )\r\n : parseInt(p.term);\r\n\r\n // Generate hash used to deduplicate rates if necessary\r\n p.hash = generateId({\r\n planNumber: p.planNumber,\r\n rate: p.rate,\r\n apr: p.apr,\r\n payment: p.payment,\r\n closingCosts: p.closingCosts\r\n });\r\n\r\n // Fallback in case product label not found\r\n if (!p.productLabel) {\r\n if (p.isFixed) {\r\n p.productLabel = `${p.term} year fixed rate`;\r\n } else if (p.isAdjustable) {\r\n const r = new RegExp(\r\n `[^/]\\\\d/${p.rateChangeFrequency}[a-z ]`,\r\n 'i'\r\n );\r\n const match = p.planDescription?.match(r);\r\n p.productLabel = match\r\n ? `${match[0].trim()} adjustable rate`\r\n : null;\r\n }\r\n }\r\n\r\n if (\r\n !p.term ||\r\n !p.productLabel ||\r\n p.apr === 0 ||\r\n p.rate === 0 ||\r\n isNaN(p.apr) ||\r\n isNaN(p.rate) ||\r\n isNaN(p.payment) ||\r\n isNaN(p.closingCosts) ||\r\n (!p.isAdjustable && !p.isFixed)\r\n ) {\r\n if (config.enableDebugMode) {\r\n console.warn('Invalid product', p);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n return p;\r\n })\r\n .filter(p => p);\r\n },\r\n [labels, config.enableDebugMode]\r\n );\r\n\r\n // Creates a base state object for a given set of loan details\r\n const createScenario = useCallback(\r\n (loanDetails, initialRateData) => {\r\n [keys.LOAN_AMOUNT, keys.HOME_VALUE, keys.ZIP_CODE].forEach(key => {\r\n if (loanDetails[key]) {\r\n loanDetails[key] = String(loanDetails[key]);\r\n }\r\n });\r\n\r\n const requestPhases = filterRequestPhaseData(\r\n loanDetails,\r\n requestPhaseData\r\n );\r\n\r\n const scenario = {\r\n loanDetails,\r\n requestPhases,\r\n id: generateId(loanDetails),\r\n data: createRatesArray(requestPhases),\r\n loadingState: createLoadingState(requestPhases),\r\n effectiveDates: [{ requestPhaseIndex: 0, date: new Date() }],\r\n rates: [],\r\n errors: null,\r\n visibleRequestPhaseIndex: 0,\r\n hasInitialData: false,\r\n hasCachedRateData: false\r\n };\r\n\r\n // Mark loading complete for request phases\r\n // that don't include a particular product\r\n scenario.loadingState.forEach(product => {\r\n product.requestPhases = product.requestPhases.map((state, index) => {\r\n const requestPhaseProducts = requestPhases[index].products;\r\n const hasProduct = !!requestPhaseProducts.find(\r\n r => r.productTypeID === product.productTypeID\r\n );\r\n\r\n return hasProduct ? state : productLoadState.COMPLETE;\r\n });\r\n });\r\n\r\n // Cached rates for the initial scenario are passed\r\n // as props so that they can display on initial render\r\n if (initialRateData?.rates?.length) {\r\n const data = camelCaseProps(initialRateData);\r\n const rates = formatData(data.rates);\r\n const productTypeIDs = uniq(rates.map(r => r.productTypeID));\r\n\r\n scenario.data[0] = rates;\r\n scenario.hasCachedRateData = true;\r\n scenario.hasInitialData = true;\r\n scenario.effectiveDates[0].date = getEffectiveDate(data.effectiveDate);\r\n\r\n if (!requestPhases[0].separateNCC) {\r\n scenario.loadingState = updateLoadingState(\r\n productLoadState.COMPLETE,\r\n scenario.loadingState,\r\n productTypeIDs\r\n );\r\n } else {\r\n const shouldLoad = (type, productTypeID) => {\r\n const nccValue = type === 'ncc';\r\n\r\n return (\r\n !!scenario.requestPhases.find(({ products }) => {\r\n return !!products.find(\r\n p => p.productTypeID === productTypeID && p.isNCC === nccValue\r\n );\r\n }) &&\r\n !rates.find(\r\n r => r.productTypeID === productTypeID && r.isNCC === nccValue\r\n )\r\n );\r\n };\r\n\r\n const initialLoadState = groupBy(productTypeIDs, id => {\r\n return shouldLoad('ncc', id) || shouldLoad('ptsfees', id)\r\n ? productLoadState.NOT_STARTED\r\n : productLoadState.COMPLETE;\r\n });\r\n\r\n Object.keys(initialLoadState).forEach(state => {\r\n scenario.loadingState = updateLoadingState(\r\n state,\r\n scenario.loadingState,\r\n initialLoadState[state]\r\n );\r\n });\r\n }\r\n\r\n scenario.hasInitialData = !!getEnabledProducts().find(p => {\r\n return productTypeIDs.includes(p.productTypeID);\r\n });\r\n }\r\n\r\n return scenario;\r\n },\r\n [\r\n requestPhaseData,\r\n createRatesArray,\r\n createLoadingState,\r\n formatData,\r\n updateLoadingState,\r\n getEnabledProducts\r\n ]\r\n );\r\n\r\n return {\r\n createScenario,\r\n createRatesArray,\r\n productIsEnabled,\r\n getProductsToLoad,\r\n getRequestPhaseWithProductsToLoad,\r\n updateLoadingState,\r\n fetchRates,\r\n formatData\r\n };\r\n}\r\n","import { useEffect, useRef } from 'react';\r\n\r\nexport default function useEffectAfterMount(callback, deps = []) {\r\n const hasInitialized = useRef(false);\r\n\r\n useEffect(() => {\r\n if (!hasInitialized.current) {\r\n hasInitialized.current = true;\r\n return;\r\n }\r\n\r\n if (callback) {\r\n return callback();\r\n }\r\n }, deps); // eslint-disable-line react-hooks/exhaustive-deps\r\n}\r\n","import React, { useState, useMemo, useRef, useEffect } from 'react';\r\nimport Hero from '@components/Hero';\r\nimport Controls from '@components/Controls';\r\nimport Content from '@components/Content';\r\nimport DebugMenu from '@components/DebugMenu';\r\nimport useLoanDetails from '@hooks/useLoanDetails';\r\nimport useRackRates from '@hooks/useRackRates';\r\nimport useProductTypes from '@hooks/useProductTypes';\r\nimport useScenario from '@hooks/useScenario';\r\nimport useWindowResizing from '@hooks/useWindowResizing';\r\nimport { initProps } from '@helpers';\r\nimport classNames from 'classnames';\r\n\r\nexport default function App(initialProps) {\r\n //////////////////////////\r\n // Server Props\r\n //////////////////////////\r\n\r\n const {\r\n productTypes: defaultProductTypes,\r\n cachedRates: initialRateData,\r\n rackRates: initialRackRates,\r\n defaultScenarios,\r\n configuration,\r\n requestPhases,\r\n validations,\r\n ctas,\r\n faqs,\r\n debugErrorCodes\r\n } = useMemo(() => {\r\n return initProps(initialProps);\r\n }, [initialProps]);\r\n\r\n //////////////////////////\r\n // Global State\r\n //////////////////////////\r\n\r\n const { loanDetails, setLoanDetails } = useLoanDetails(defaultScenarios);\r\n\r\n const {\r\n productTypes,\r\n hasEnabledProductTypes,\r\n toggleProductCategory,\r\n toggleProductType\r\n } = useProductTypes(defaultProductTypes);\r\n\r\n const {\r\n showRackRates,\r\n rackRateGroups,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n setRackRateLoanPurpose,\r\n setRackRateLoanType,\r\n fetchRackRateGroups,\r\n error: rackRatesError,\r\n isLoading: rackRatesAreLoading\r\n } = useRackRates(\r\n configuration.showRackRates,\r\n initialRackRates,\r\n productTypes,\r\n defaultScenarios[defaultScenarios.defaultLoanPurpose]\r\n );\r\n\r\n const {\r\n rates,\r\n effectiveDate,\r\n errors,\r\n isLoading,\r\n isLoadingCategory,\r\n canLoadMore,\r\n hasInitialData,\r\n loadMore,\r\n prefetchScenario,\r\n testApiError\r\n } = useScenario(\r\n loanDetails,\r\n requestPhases,\r\n productTypes,\r\n initialRateData,\r\n defaultScenarios,\r\n showRackRates\r\n );\r\n\r\n //////////////////////////\r\n // User Interface\r\n //////////////////////////\r\n\r\n const [inputsAreOpen, setInputsAreOpen] = useState(false);\r\n const [inputsRect, setInputsRect] = useState({\r\n width: 0,\r\n height: 0,\r\n left: 0,\r\n controlsTop: 0,\r\n controlsWrapperTop: 0\r\n });\r\n\r\n useWindowResizing('calculator-resizing');\r\n\r\n useEffect(() => {\r\n if (configuration.enableDebugMode) {\r\n document.body.classList.add('debug');\r\n }\r\n }, [configuration.enableDebugMode]);\r\n\r\n return (\r\n \r\n \r\n \r\n {configuration.enableDebugMode && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nconst TopWrapper = React.memo(\r\n ({\r\n loanDetails,\r\n setLoanDetails,\r\n inputsAreOpen,\r\n defaultLoanPurpose,\r\n validations,\r\n errors,\r\n showRackRates,\r\n rackRateLoanPurpose,\r\n rackRateLoanType,\r\n setRackRateLoanPurpose,\r\n setRackRateLoanType,\r\n setInputsRect,\r\n setInputsAreOpen,\r\n prefetchScenario\r\n }) => {\r\n const ref = useRef();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n);\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport ReactDOMServer from 'react-dom/server';\r\nimport '@utils/ssr/interval-timeout-shim';\r\nimport '@utils/polyfills';\r\nimport DynamicPricingCalculator from './App';\r\nimport '@styles/general.scss';\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n const props = window.initialProps ?? {};\r\n\r\n ReactDOM.render(\r\n ,\r\n document.getElementById('app')\r\n );\r\n}\r\n\r\nglobal.React = React;\r\nglobal.ReactDOM = ReactDOM;\r\nglobal.ReactDOMServer = ReactDOMServer;\r\nglobal.Components = { DynamicPricingCalculator };\r\n","import { useState, useCallback, useRef } from 'react';\r\nimport { getState, compareLoanDetails } from '@helpers';\r\nimport { keys } from '@enums';\r\n\r\nexport default function useLoanDetails(defaultScenarios) {\r\n const shouldUseDefaultScenario = useRef(true);\r\n const [loanDetails, _setLoanDetails] = useState(\r\n defaultScenarios[defaultScenarios.defaultLoanPurpose]\r\n );\r\n\r\n const setLoanDetails = useCallback(\r\n (value, name) => {\r\n _setLoanDetails(prevState => {\r\n const state = getState(prevState, value, name);\r\n\r\n if (!!state.cashOutAmount) {\r\n shouldUseDefaultScenario.current = false;\r\n }\r\n\r\n if (shouldUseDefaultScenario.current) {\r\n const stateKeys = Object.keys(state).filter(key => {\r\n return key !== keys.LOAN_PURPOSE && key !== keys.CASH_OUT_AMOUNT;\r\n });\r\n\r\n if (compareLoanDetails(state, prevState, stateKeys)) {\r\n return defaultScenarios[state.loanPurpose];\r\n }\r\n\r\n shouldUseDefaultScenario.current = false;\r\n }\r\n\r\n return state;\r\n });\r\n },\r\n [defaultScenarios]\r\n );\r\n\r\n return { loanDetails, setLoanDetails };\r\n}\r\n","import { useState, useCallback, useEffect, useRef, useMemo } from 'react';\r\nimport useScenarioHelpers from '@hooks/useScenarioHelpers';\r\nimport useEffectAfterMount from '@hooks/useEffectAfterMount';\r\nimport useConfig from '@hooks/useConfig';\r\nimport {\r\n MAX_CACHED_SCENARIOS,\r\n INITIAL_REQUEST_CHUNK_SIZE,\r\n DEFAULT_ERROR_MESSAGE\r\n} from '@constants';\r\nimport { productLoadState, closingCostType, loanPurpose } from '@enums';\r\nimport tracker from '@utils/tracker';\r\nimport CalculatorError from '@utils/CalculatorError';\r\nimport { generateId, isFixedRate, isSSR, isPurchase } from '@helpers';\r\nimport {\r\n isPlainObject,\r\n isFunction,\r\n uniqBy,\r\n partition,\r\n minBy,\r\n chunk,\r\n uniqueId\r\n} from 'lodash';\r\n\r\nexport default function useScenario(\r\n loanDetails,\r\n requestPhases,\r\n productTypes,\r\n initialRateData,\r\n defaultScenarios,\r\n showRackRates\r\n) {\r\n //////////////////////////\r\n // Helpers\r\n //////////////////////////\r\n\r\n const config = useConfig();\r\n\r\n const {\r\n createScenario,\r\n productIsEnabled,\r\n getProductsToLoad,\r\n getRequestPhaseWithProductsToLoad,\r\n updateLoadingState,\r\n fetchRates,\r\n formatData\r\n } = useScenarioHelpers(requestPhases, productTypes);\r\n\r\n //////////////////////////\r\n // Scenario Data\r\n //////////////////////////\r\n\r\n const [scenario, setScenario] = useState(() =>\r\n createScenario(loanDetails, initialRateData[loanDetails.loanPurpose])\r\n );\r\n\r\n const scenarioRef = useRef(scenario);\r\n const cachedScenarios = useRef([scenario]);\r\n\r\n const getCachedScenario = useCallback(id => {\r\n return cachedScenarios.current.find(s => s.id === id);\r\n }, []);\r\n\r\n const getCachedScenarioIndex = useCallback(id => {\r\n return cachedScenarios.current.findIndex(s => s.id === id);\r\n }, []);\r\n\r\n // Update an existing scenario and its cached,\r\n // data, even if it isn't currently active.\r\n const updateScenario = useCallback(\r\n (id, value) => {\r\n if (id === scenarioRef.current.id) {\r\n setScenario(value);\r\n } else {\r\n const cacheIndex = getCachedScenarioIndex(id);\r\n\r\n if (cacheIndex > -1) {\r\n cachedScenarios.current[cacheIndex] = isFunction(value)\r\n ? value(cachedScenarios.current[cacheIndex])\r\n : value;\r\n }\r\n }\r\n },\r\n [getCachedScenarioIndex]\r\n );\r\n\r\n // Ensure changes to current scenario object are cached\r\n useEffect(() => {\r\n scenarioRef.current = scenario;\r\n const cacheIndex = getCachedScenarioIndex(scenario.id);\r\n\r\n if (cacheIndex > -1) {\r\n cachedScenarios.current[cacheIndex] = scenario;\r\n }\r\n }, [scenario, getCachedScenarioIndex]);\r\n\r\n const initScenario = useCallback(\r\n (loanDetails, initialRateData) => {\r\n const scenario = createScenario(loanDetails, initialRateData);\r\n\r\n cachedScenarios.current.push(scenario);\r\n\r\n // Only cache a certain number of scenarios\r\n // to avoid potential performance issues\r\n if (cachedScenarios.current.length > MAX_CACHED_SCENARIOS) {\r\n cachedScenarios.current.shift();\r\n }\r\n\r\n return scenario;\r\n },\r\n [createScenario]\r\n );\r\n\r\n // Add a second scenario for the loan\r\n // purpose that was not initially visible\r\n useEffect(() => {\r\n const key = isPurchase(defaultScenarios.defaultLoanPurpose)\r\n ? loanPurpose.REFINANCE\r\n : loanPurpose.PURCHASE;\r\n\r\n initScenario(defaultScenarios[key], initialRateData[key]);\r\n }, [defaultScenarios, initialRateData, initScenario]);\r\n\r\n // When loan details change, first check to see if\r\n // we already have data for this scenario cached.\r\n // If not, we generate a new scenario object and cache it\r\n const hasInitialLoanDetails = useRef(false);\r\n const shouldTrackFetch = useRef(!scenario.hasCachedRateData);\r\n\r\n useEffectAfterMount(() => {\r\n const id = generateId(loanDetails);\r\n const cachedScenario = getCachedScenario(id);\r\n\r\n if (cachedScenario) {\r\n scenarioRef.current = cachedScenario;\r\n shouldTrackFetch.current = !hasInitialLoanDetails.current;\r\n\r\n setScenario(cachedScenario);\r\n } else {\r\n const scenario = initScenario(loanDetails);\r\n scenarioRef.current = scenario;\r\n shouldTrackFetch.current = true;\r\n\r\n setScenario(scenario);\r\n }\r\n\r\n hasInitialLoanDetails.current = true;\r\n }, [loanDetails, getCachedScenario, initScenario]);\r\n\r\n //////////////////////////\r\n // Fetch Rates\r\n //////////////////////////\r\n\r\n const disableDynamicRates = useRef(!!showRackRates);\r\n\r\n useEffect(() => {\r\n disableDynamicRates.current = !!showRackRates;\r\n }, [showRackRates]);\r\n\r\n const errors = useRef(null);\r\n\r\n useEffect(() => {\r\n errors.current = scenario.errors;\r\n }, [scenario.errors]);\r\n\r\n // Sets the loading state for a given scenario. Either a scenario\r\n // object or its ID can be passed in to avoid unnecessary loops\r\n const setIsLoading = useCallback(\r\n (loadState, scenarioId, requestPhaseIndex, products) => {\r\n if (!scenarioId) {\r\n return;\r\n }\r\n\r\n updateScenario(scenarioId, scenario => {\r\n if (!products) {\r\n products = getProductsToLoad(\r\n requestPhaseIndex,\r\n scenario.loadingState\r\n );\r\n }\r\n\r\n return {\r\n ...scenario,\r\n loadingState: updateLoadingState(\r\n loadState,\r\n scenario.loadingState,\r\n products,\r\n requestPhaseIndex\r\n )\r\n };\r\n });\r\n },\r\n [updateLoadingState, getProductsToLoad, updateScenario]\r\n );\r\n\r\n let prefetchScenario;\r\n\r\n // Update UI state and fetch data from API\r\n const getData = useCallback(\r\n async (\r\n scenarioId,\r\n requestPhaseIndex,\r\n hasInitialCachedData,\r\n productsSubset,\r\n prevFetchedProducts,\r\n includeDisabledProducts\r\n ) => {\r\n if (disableDynamicRates.current) {\r\n return;\r\n }\r\n\r\n const currentScenario = getCachedScenario(scenarioId);\r\n const { requestPhases } = currentScenario;\r\n const requestPhase = requestPhases[requestPhaseIndex];\r\n\r\n if (!currentScenario || !requestPhase || errors.current) {\r\n return;\r\n }\r\n\r\n let { requestPhaseID, separateNCC } = requestPhase;\r\n const { loadingState } = currentScenario;\r\n const isLastRequest = requestPhaseIndex >= requestPhases.length - 1;\r\n\r\n if (currentScenario.debugErrorCode) {\r\n separateNCC = false;\r\n }\r\n\r\n let products = getProductsToLoad(\r\n requestPhaseIndex,\r\n loadingState,\r\n false,\r\n includeDisabledProducts\r\n );\r\n\r\n if (!products?.length) {\r\n if (requestPhaseIndex === 0 && !isLastRequest) {\r\n if (currentScenario.isPrefetching) {\r\n delete currentScenario.isPrefetching;\r\n getData(scenarioId, requestPhaseIndex + 1);\r\n return;\r\n }\r\n\r\n if (hasInitialCachedData) {\r\n await getData(scenarioId, requestPhaseIndex + 1, false);\r\n }\r\n }\r\n\r\n if (isLastRequest && prevFetchedProducts?.length) {\r\n updateScenario(scenarioId, prevScenario => {\r\n const newScenario = { ...prevScenario };\r\n\r\n if (isPlainObject(prevFetchedProducts[0])) {\r\n prevFetchedProducts = prevFetchedProducts.map(\r\n p => p.productTypeID\r\n );\r\n }\r\n\r\n newScenario.loadingState = prevScenario.loadingState\r\n .slice()\r\n .map(state => {\r\n if (prevFetchedProducts.includes(state.productTypeID)) {\r\n state.requestPhases = state.requestPhases.fill(\r\n productLoadState.COMPLETE\r\n );\r\n }\r\n\r\n return state;\r\n });\r\n\r\n return newScenario;\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (Array.isArray(productsSubset)) {\r\n products = products.filter(p => {\r\n return !!productsSubset.find(({ productTypeID }) => {\r\n return productTypeID === p.productTypeID;\r\n });\r\n });\r\n }\r\n\r\n if (\r\n !productsSubset &&\r\n requestPhaseIndex === 0 &&\r\n !includeDisabledProducts &&\r\n products.length > INITIAL_REQUEST_CHUNK_SIZE\r\n ) {\r\n partition(products, p => isFixedRate(p.loanType))\r\n .map(p => chunk(p, INITIAL_REQUEST_CHUNK_SIZE))\r\n .flat()\r\n .forEach(subset =>\r\n getData(\r\n scenarioId,\r\n requestPhaseIndex,\r\n hasInitialCachedData,\r\n subset,\r\n products\r\n )\r\n );\r\n\r\n return;\r\n }\r\n\r\n products = products.map(p => p.productTypeID);\r\n\r\n setIsLoading(\r\n productLoadState.LOADING,\r\n scenarioId,\r\n requestPhaseIndex,\r\n products\r\n );\r\n\r\n let currentLoadedRates = [];\r\n\r\n try {\r\n const loanDetails = currentScenario.loanDetails;\r\n\r\n let shouldCompleteLoading = !separateNCC;\r\n\r\n const fetch = async closingCostType => {\r\n const data = await fetchRates(\r\n loanDetails,\r\n requestPhaseID,\r\n products,\r\n closingCostType,\r\n currentScenario.debugErrorCode\r\n );\r\n\r\n if (errors.current) {\r\n return;\r\n }\r\n\r\n if (isPlainObject(data) && data.errors) {\r\n throw new CalculatorError(data.errors);\r\n }\r\n\r\n const rates = data?.rates ?? [];\r\n\r\n if (!Array.isArray(rates)) {\r\n return;\r\n }\r\n\r\n updateScenario(scenarioId, prevScenario => {\r\n const newScenario = {\r\n ...prevScenario,\r\n data: prevScenario.data.slice(),\r\n effectiveDates: prevScenario.effectiveDates.slice()\r\n };\r\n\r\n const newErrors =\r\n rates.length || isLastRequest\r\n ? data.errors ?? null\r\n : data.errors ?? errors.current ?? null;\r\n\r\n newScenario.errors = newErrors;\r\n errors.current = newErrors;\r\n\r\n if (data.effectiveDate) {\r\n newScenario.effectiveDates.push({\r\n requestPhaseIndex,\r\n date: data.effectiveDate\r\n });\r\n }\r\n\r\n let formattedRates = formatData(rates);\r\n\r\n newScenario.hasInitialData =\r\n !!formattedRates.length || isLastRequest;\r\n\r\n const currentLoadState = shouldCompleteLoading\r\n ? productLoadState.COMPLETE\r\n : productLoadState.PARTIALLY_LOADED;\r\n\r\n const loadingState = updateLoadingState(\r\n currentLoadState,\r\n prevScenario.loadingState,\r\n products,\r\n requestPhaseIndex\r\n );\r\n\r\n // If request phase splits NCC/points, we do not handle\r\n // checking for empty data for each product type\r\n // until both requests have finished. On the first\r\n // request we populate the table but showing a loading spinner\r\n if (!shouldCompleteLoading) {\r\n shouldCompleteLoading = true;\r\n newScenario.loadingState = loadingState;\r\n currentLoadedRates = formattedRates;\r\n newScenario.data[requestPhaseIndex] =\r\n newScenario.data[requestPhaseIndex].concat(formattedRates);\r\n\r\n return newScenario;\r\n } else if (separateNCC) {\r\n formattedRates = currentLoadedRates.concat(formattedRates);\r\n }\r\n\r\n // If the user selects a specific product type but\r\n // it isn't included until they click 'load more',\r\n // we force it to show up in the list for the user\r\n const [productsWithData, productsWithoutData] = partition(\r\n products,\r\n id => {\r\n return !!formattedRates.find(\r\n ({ productTypeID }) => id === productTypeID\r\n );\r\n }\r\n );\r\n\r\n if (requestPhaseIndex === 0 && !isLastRequest) {\r\n newScenario.data[0] = newScenario.data[0].concat(formattedRates);\r\n\r\n productsWithoutData.forEach(id => {\r\n const state = loadingState.find(p => p.productTypeID === id);\r\n\r\n if (\r\n state &&\r\n state.requestPhases[1] === productLoadState.NOT_STARATED\r\n ) {\r\n state.requestPhases[0] = productLoadState.LOADING;\r\n state.hasNoData = true;\r\n }\r\n });\r\n } else {\r\n productsWithData.forEach(id => {\r\n const state = loadingState.find(p => p.productTypeID === id);\r\n\r\n if (!state) {\r\n return;\r\n }\r\n\r\n const index = state.hasNoData ? 0 : requestPhaseIndex;\r\n\r\n newScenario.data[index] = newScenario.data[index].concat(\r\n formattedRates.filter(r => r.productTypeID === id)\r\n );\r\n\r\n state.requestPhases[0] = productLoadState.COMPLETE;\r\n state.hasNoData = false;\r\n });\r\n\r\n if (isLastRequest) {\r\n products.forEach(id => {\r\n const state = loadingState.find(p => p.productTypeID === id);\r\n\r\n if (!state) {\r\n return;\r\n }\r\n\r\n state.requestPhases = state.requestPhases.fill(\r\n productLoadState.COMPLETE\r\n );\r\n });\r\n }\r\n }\r\n\r\n newScenario.loadingState = loadingState;\r\n\r\n return newScenario;\r\n });\r\n };\r\n\r\n const shouldTrack = requestPhaseIndex === 0 && shouldTrackFetch.current;\r\n const start = performance.now();\r\n\r\n if (separateNCC) {\r\n await Promise.all([\r\n fetch(closingCostType.NCC),\r\n fetch(closingCostType.POINTS)\r\n ]);\r\n } else {\r\n await fetch(closingCostType.BOTH);\r\n }\r\n\r\n const end = performance.now();\r\n\r\n if (!isSSR() && shouldTrack) {\r\n const time = Math.round((end - start) / 1000);\r\n\r\n if (config.enableDebugMode) {\r\n console.log(\r\n `Finished fetching initial rate data in ${time} seconds`\r\n );\r\n } else {\r\n tracker.track(tracker.actions.FINISH_FETCHING, {\r\n time_seconds: time\r\n });\r\n }\r\n }\r\n\r\n shouldTrackFetch.current = false;\r\n\r\n if (scenarioId === scenarioRef.current.id) {\r\n if (!isLastRequest) {\r\n // Fetch next request phase if this is still the\r\n // active scenario and there is more data to get\r\n getData(scenarioId, requestPhaseIndex + 1);\r\n } else {\r\n // After finish fetching prefetch additional data\r\n const disabledProductsToLoad = getProductsToLoad(\r\n 0,\r\n currentScenario.loadingState,\r\n false,\r\n true\r\n );\r\n\r\n if (disabledProductsToLoad.length) {\r\n // First we fetch any currently\r\n // disabled so that they load quickly\r\n // if the user decides to enable them\r\n getData(scenarioId, 0, false, null, null, true);\r\n } else {\r\n // If there are no disabled products\r\n // to load, we prefetch the same scenario,\r\n // except with the opposite loan purpose\r\n const newLoanDetails = { ...currentScenario.loanDetails };\r\n newLoanDetails.loanPurpose =\r\n newLoanDetails.loanPurpose === 'refinance'\r\n ? 'purchase'\r\n : 'refinance';\r\n\r\n prefetchScenario(newLoanDetails);\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n const isValidation = error.isValidation && error.data?.validation;\r\n const isGeneral = error.isGeneral || !isValidation;\r\n const errorData = {};\r\n\r\n if (error.name === 'CalculatorError') {\r\n if (isValidation) {\r\n errorData.validation = error.data.validation;\r\n }\r\n\r\n if (isGeneral) {\r\n errorData.general = error.data.general ?? DEFAULT_ERROR_MESSAGE;\r\n }\r\n } else {\r\n errorData.general = error.message ?? DEFAULT_ERROR_MESSAGE;\r\n }\r\n\r\n if (isGeneral) {\r\n console.error(error.message);\r\n }\r\n\r\n errors.current = errorData;\r\n\r\n const loadState =\r\n isValidation && !isGeneral\r\n ? productLoadState.NOT_STARTED\r\n : productLoadState.ERROR;\r\n\r\n updateScenario(scenarioId, scenario => {\r\n return {\r\n ...scenario,\r\n hasInitialData: true,\r\n errors: errorData,\r\n loadingState: updateLoadingState(\r\n loadState,\r\n scenario.loadingState,\r\n products,\r\n requestPhaseIndex\r\n )\r\n };\r\n });\r\n\r\n if (isGeneral && !config.enableDebugMode) {\r\n tracker.track(tracker.actions.ERROR);\r\n }\r\n }\r\n },\r\n [\r\n updateScenario,\r\n fetchRates,\r\n formatData,\r\n config.enableDebugMode,\r\n getProductsToLoad,\r\n getCachedScenario,\r\n setIsLoading,\r\n updateLoadingState,\r\n prefetchScenario\r\n ]\r\n );\r\n\r\n prefetchScenario = useCallback(\r\n loanDetails => {\r\n const id = generateId(loanDetails);\r\n const cachedScenario = getCachedScenario(id);\r\n\r\n if (!cachedScenario) {\r\n const scenario = initScenario(loanDetails);\r\n scenario.isPrefetching = true;\r\n getData(scenario.id, 0);\r\n }\r\n },\r\n [getCachedScenario, initScenario, getData]\r\n );\r\n\r\n // Make request when loan details change\r\n const hasNewLoanDetails = useRef(true);\r\n\r\n useEffect(() => {\r\n hasNewLoanDetails.current = true;\r\n }, [loanDetails]);\r\n\r\n useEffect(() => {\r\n if (hasNewLoanDetails.current) {\r\n hasNewLoanDetails.current = false;\r\n getData(scenario.id, 0, scenario.hasCachedRateData);\r\n }\r\n }, [scenario.id, scenario, getData]);\r\n\r\n // Make request when selected products changes\r\n useEffectAfterMount(() => {\r\n const { id, loadingState } = scenarioRef.current;\r\n const index = getRequestPhaseWithProductsToLoad(loadingState);\r\n\r\n if (index !== null) {\r\n getData(id, index);\r\n }\r\n }, [productTypes, getRequestPhaseWithProductsToLoad, getData]);\r\n\r\n // Only display loading spinner when rates are loading that will\r\n // be rendered on the UI. Additional rates are fetched in the\r\n // background and will render when the user clicks 'load more'\r\n const { isLoading, isLoadingCategory } = useMemo(() => {\r\n const isLoadingCategory = { fixed: false, adjustable: false };\r\n\r\n if (showRackRates) {\r\n return { isLoading: false, isLoadingCategory };\r\n }\r\n\r\n scenario.loadingState.forEach(\r\n ({ productTypeID, loanType, requestPhases }) => {\r\n const productIsLoading =\r\n productIsEnabled(productTypeID, loanType, productTypes) &&\r\n !!requestPhases\r\n .slice(0, scenario.visibleRequestPhaseIndex + 1)\r\n .find(s => {\r\n return (\r\n s === productLoadState.LOADING ||\r\n s === productLoadState.PARTIALLY_LOADED ||\r\n s === productLoadState.QUEUED ||\r\n s === productLoadState.QUEUED_LOAD_MORE\r\n );\r\n });\r\n\r\n if (productIsLoading) {\r\n isLoadingCategory[loanType] = true;\r\n }\r\n\r\n return productIsLoading;\r\n }\r\n );\r\n\r\n return {\r\n isLoading: isLoadingCategory.fixed || isLoadingCategory.adjustable,\r\n isLoadingCategory\r\n };\r\n }, [\r\n productTypes,\r\n scenario.loadingState,\r\n scenario.visibleRequestPhaseIndex,\r\n productIsEnabled,\r\n showRackRates\r\n ]);\r\n\r\n // Only show rates in the table for product types that\r\n // are selected and included in the current request phase\r\n const rates = useMemo(() => {\r\n const data = scenario.data ?? [];\r\n\r\n return uniqBy(\r\n data\r\n .slice(0, scenario.visibleRequestPhaseIndex + 1)\r\n .flat()\r\n .filter(({ productTypeID, type }) => {\r\n return productIsEnabled(productTypeID, type, productTypes);\r\n }),\r\n 'hash'\r\n );\r\n }, [\r\n scenario.data,\r\n scenario.visibleRequestPhaseIndex,\r\n productTypes,\r\n productIsEnabled\r\n ]);\r\n\r\n //////////////////////////\r\n // Handlers\r\n //////////////////////////\r\n\r\n const loadMore = useCallback(() => {\r\n setScenario(s => ({\r\n ...s,\r\n visibleRequestPhaseIndex: s.visibleRequestPhaseIndex + 1\r\n }));\r\n }, []);\r\n\r\n const canLoadMore = useMemo(() => {\r\n if (\r\n scenario.visibleRequestPhaseIndex >=\r\n scenario.requestPhases.length - 1\r\n ) {\r\n return false;\r\n }\r\n\r\n const enabledProductTypeIds = [\r\n productTypes?.fixed?.isEnabled ? productTypes.fixed.products : [],\r\n productTypes?.adjustable?.isEnabled\r\n ? productTypes.adjustable.products\r\n : []\r\n ]\r\n .flat()\r\n .filter(p => p.isEnabled)\r\n .map(p => p.productTypeID);\r\n\r\n return !!scenario.requestPhases\r\n .slice(scenario.visibleRequestPhaseIndex + 1)\r\n .find(({ products }) => {\r\n return !!products.find(({ productTypeID }) => {\r\n return enabledProductTypeIds.includes(productTypeID);\r\n });\r\n });\r\n }, [productTypes, scenario.requestPhases, scenario.visibleRequestPhaseIndex]);\r\n\r\n const effectiveDate = useMemo(() => {\r\n const dates = scenario.effectiveDates.filter(({ requestPhaseIndex }) => {\r\n return requestPhaseIndex <= scenario.visibleRequestPhaseIndex;\r\n });\r\n\r\n return minBy(dates, 'date')?.date ?? new Date();\r\n }, [scenario.effectiveDates, scenario.visibleRequestPhaseIndex]);\r\n\r\n if (!isSSR()) {\r\n window.getScenario = () => ({\r\n ...scenario,\r\n isLoading,\r\n isLoadingCategory,\r\n canLoadMore,\r\n rates\r\n });\r\n\r\n window.getCachedScenarios = () => cachedScenarios.current;\r\n }\r\n\r\n //////////////////////////\r\n // Debug\r\n //////////////////////////\r\n\r\n const testApiError = useCallback(\r\n errorCode => {\r\n if (!config.enableDebugMode || !errorCode) {\r\n return;\r\n }\r\n\r\n const scenario = initScenario(scenarioRef.current.loanDetails);\r\n scenario.id += uniqueId('_debug');\r\n scenario.debugErrorCode = errorCode;\r\n\r\n hasNewLoanDetails.current = true;\r\n scenarioRef.current = scenario;\r\n\r\n setScenario(scenario);\r\n },\r\n [config.enableDebugMode, initScenario]\r\n );\r\n\r\n return {\r\n ...scenario,\r\n rates,\r\n effectiveDate,\r\n isLoading,\r\n isLoadingCategory,\r\n canLoadMore,\r\n loadMore,\r\n prefetchScenario,\r\n testApiError\r\n };\r\n}\r\n","const { field, loanPurpose } = require('@enums');\r\n\r\nmodule.exports = {\r\n //////////////////////////\r\n // API\r\n //////////////////////////\r\n\r\n DYNAMIC_RATES_ENDPOINT: '/apis/mortgageratesapi/fetchrates',\r\n RACK_RATES_ENDPOINT: '/apis/mortgageratesapi/fetchrackrates',\r\n VALIDATE_ZIP_CODE_ENDPOINT: '/apis/mortgageratesapi/validatezipcode',\r\n SAVE_LOAN_DATA_ENDPOINT: '/apis/mortgageratesapi/saveloandata',\r\n\r\n // If requesting many product types\r\n // at once, we split it into multiple\r\n // requests so that rates can start\r\n // filling the table as they come in\r\n INITIAL_REQUEST_CHUNK_SIZE: 4,\r\n\r\n // When the user edits their loan details,\r\n // we prefretch rates before they click\r\n // the refresh button. This is the delay\r\n // between when a field is edited and\r\n // when data is prefetched\r\n SCENARIO_PREFETCH_DELAY: 700,\r\n\r\n // We validate that the user's zip code is\r\n // within our lending footprint using an\r\n // API route. To avoid repeated requests,\r\n // we cache the results of this call.\r\n MAX_CACHED_ZIP_CODES: 50,\r\n MAX_ZIP_CODE_VALIDATIONS_BEFORE_DEBOUNCE: 10,\r\n ZIP_CODE_VALIDATION_DEBOUNCE_TIME: 250,\r\n\r\n //////////////////////////\r\n // User Interface\r\n //////////////////////////\r\n\r\n MAX_LOADING_ROWS: 6,\r\n MAX_CACHED_SCENARIOS: 45,\r\n SHOW_TIMELINE_NUMBERS: true,\r\n\r\n // TODO Move field configurations into Kentico\r\n FORM_FIELDS: [\r\n field.LOAN_AMOUNT,\r\n field.HOME_VALUE,\r\n field.ZIP_CODE,\r\n field.CREDIT_SCORE,\r\n field.PROPERTY_TYPE,\r\n field.OCCUPANCY_TYPE,\r\n field.CASH_OUT_AMOUNT\r\n ],\r\n\r\n // Fallback values in case scenario is passed incorrectly\r\n BASE_SCENARIO: {\r\n loanPurpose: loanPurpose.REFINANCE,\r\n loanAmount: 400000,\r\n homeValue: 600000,\r\n zipCode: '94551',\r\n creditScore: 740,\r\n cashOutAmount: ''\r\n },\r\n\r\n //////////////////////////\r\n // Errors\r\n //////////////////////////\r\n\r\n DEFAULT_ERROR_TITLE: 'Something went wrong',\r\n DEFAULT_ERROR_MESSAGE:\r\n 'We were unable to fetch your personalized mortgage rates, please try again later.',\r\n DEFAULT_ZIP_CODE_ERROR: 'Zip code not found'\r\n};\r\n","// The list of all possible keys used in\r\n// both editable fields and URL parameters\r\nexport const keys = Object.freeze({\r\n APR: 'apr',\r\n CACHED_RATES_PURCHASE: 'cachedRatesPurchase',\r\n CACHED_RATES_REFINANCE: 'cachedRatesRefinance',\r\n CACHED_REQUEST_STATE: 'cachedRequestState',\r\n CASH_OUT_AMOUNT: 'cashOutAmount',\r\n CURRENT_LOCATION: 'currentLocation',\r\n CITY: 'city',\r\n CLOSING_COSTS: 'closingCosts',\r\n CREDIT_SCORE: 'creditScore',\r\n FILTER_STATE: 'filterState',\r\n HAS_VISITED: 'hasVisited',\r\n HOME_VALUE: 'homeValue',\r\n LOAN_AMOUNT: 'loanAmount',\r\n LOAN_SIZE: 'loanSize',\r\n LOAN_STATE: 'loanState',\r\n LOAN_PURPOSE: 'loanPurpose',\r\n OCCUPANCY_TYPE: 'occupancyType',\r\n PAYMENT: 'payment',\r\n PROPERTY_TYPE: 'propertyType',\r\n RATE: 'rate',\r\n SORT_STATE: 'sortState',\r\n STATE: 'state',\r\n USER_SET_LOCATION: 'userSetLocation',\r\n ZIP_CODE: 'zipCode',\r\n ZIP_CODES: 'zipCodes',\r\n FOOTPRINT: 'footprint'\r\n});\r\n\r\nexport const loanPurpose = Object.freeze({\r\n REFINANCE: 'refinance',\r\n PURCHASE: 'purchase'\r\n});\r\n\r\nexport const closingCostType = Object.freeze({\r\n NCC: 'ncc',\r\n POINTS: 'ptsfees',\r\n BOTH: 'both'\r\n});\r\n\r\nexport const productLoadState = Object.freeze({\r\n NOT_STARTED: 'not_started',\r\n QUEUED: 'queued',\r\n LOADING: 'loading',\r\n PRELOADING: 'preloading',\r\n PARTIALLY_LOADED: 'partially_loaded',\r\n QUEUED_LOAD_MORE: 'queued_loading_more',\r\n LOADING_MORE: 'loading_more',\r\n COMPLETE: 'complete',\r\n ERROR: 'error'\r\n});\r\n\r\nexport const errorSource = Object.freeze({\r\n SERVER: 'server',\r\n CLIENT: 'client'\r\n});\r\n\r\n// The list of all possible fields to include in\r\n// the loan assumptions box for the user to edit.\r\nexport const field = Object.freeze({\r\n CREDIT_SCORE: keys.CREDIT_SCORE,\r\n HOME_VALUE: keys.HOME_VALUE,\r\n LOAN_TYPE: keys.LOAN_TYPE,\r\n LOAN_AMOUNT: keys.LOAN_AMOUNT,\r\n OCCUPANCY_TYPE: keys.OCCUPANCY_TYPE,\r\n PROPERTY_TYPE: keys.PROPERTY_TYPE,\r\n ZIP_CODE: keys.ZIP_CODE,\r\n CASH_OUT_AMOUNT: keys.CASH_OUT_AMOUNT\r\n});\r\n\r\nexport const fieldTypes = Object.freeze({\r\n TEXT: 'text',\r\n SELECT: 'select'\r\n});\r\n\r\nexport const requestBody = Object.freeze({\r\n LoanAmount: keys.LOAN_AMOUNT,\r\n PropertyValue: keys.HOME_VALUE,\r\n LoanPurpose: keys.LOAN_TYPE,\r\n PropertyType: keys.PROPERTY_TYPE,\r\n OccupancyType: keys.OCCUPANCY_TYPE,\r\n ZipCode: keys.ZIP_CODE,\r\n FicoScore: keys.CREDIT_SCORE,\r\n CashOutAmount: keys.CASH_OUT_AMOUNT\r\n});\r\n\r\nexport const creditScoreRanges = Object.freeze({\r\n EXCELLENT: {\r\n value: '780',\r\n label: 'Excellent',\r\n info: '780+'\r\n },\r\n GREAT: {\r\n value: '779',\r\n label: 'Great',\r\n info: '760-779'\r\n },\r\n VERY_GOOD: {\r\n value: '759',\r\n label: 'Very good',\r\n info: '740-759'\r\n },\r\n ABOVE_AVERAGE: {\r\n value: '739',\r\n label: 'Above average',\r\n info: '720-739'\r\n },\r\n AVERAGE: {\r\n value: '719',\r\n label: 'Average',\r\n info: '700-719'\r\n },\r\n BELOW_AVERAGE: {\r\n value: '699',\r\n label: 'Below average',\r\n info: '680-699'\r\n },\r\n FAIR: {\r\n value: '679',\r\n label: 'Fair',\r\n info: '660-679'\r\n },\r\n LOW: {\r\n value: '659',\r\n label: 'Low',\r\n info: '640-659'\r\n },\r\n VERY_LOW: {\r\n value: '639',\r\n label: 'Very low',\r\n info: '620-639'\r\n },\r\n POOR: {\r\n value: '619',\r\n label: 'Poor',\r\n info: '619-'\r\n }\r\n});\r\n\r\nexport const propertyTypes = Object.freeze({\r\n SFR: {\r\n value: 'Single Family - 1 unit',\r\n label: 'Single family home'\r\n },\r\n PUD: {\r\n value: 'PUD',\r\n label: 'Planned development'\r\n },\r\n CONDO: { value: 'Condo', label: 'Condo' },\r\n TWO_UNIT: {\r\n value: '2 Unit',\r\n label: '2 Unit',\r\n loanDetailsText: '2 unit property'\r\n },\r\n THREE_UNIT: {\r\n value: '3 Unit',\r\n label: '3 Unit',\r\n loanDetailsText: '3 unit property'\r\n },\r\n FOUR_UNIT: {\r\n value: '4 Unit',\r\n label: '4 Unit',\r\n loanDetailsText: '4 unit property'\r\n },\r\n MANUFACTURED: {\r\n value: 'Manufactured Home',\r\n label: 'Manufactured home'\r\n }\r\n});\r\n\r\nexport const occupancyTypes = Object.freeze({\r\n OWNER_OCCUPIED: {\r\n value: 'Owner Occupied',\r\n label: 'Owner occupied'\r\n },\r\n SECOND_HOME: { value: 'Second Home', label: 'Second home' },\r\n INVESTMENT: { value: 'Investment Property', label: 'Investment' }\r\n});\r\n\r\n// The columns and order user can\r\n// sort the rate table by\r\nexport const sortStates = Object.freeze({\r\n PRODUCT: {\r\n label: 'Product',\r\n value: 'termValue, rate, apr',\r\n order: 'desc, asc, asc'\r\n },\r\n RATE: {\r\n label: 'Rate',\r\n value: 'rate, apr, termValue',\r\n order: 'asc'\r\n },\r\n CLOSING_COSTS: {\r\n label: 'Points',\r\n value: 'closingCosts, termValue',\r\n order: 'asc'\r\n },\r\n PAYMENT: {\r\n label: 'Payment',\r\n value: 'payment',\r\n order: 'asc'\r\n }\r\n});\r\n"],"names":["isSSR","window","requestIdleCallback","callback","setTimeout","actions","Object","freeze","OPEN_CONTROLS","PERSONALIZE_RATES","FINISH_FETCHING","SELECT_RATE","LOAD_MORE_RATES","ENABLE_PRODUCT_TYPE","DISABLE_PRODUCT_TYPE","OPEN_FAQ","ERROR","VIEW_RACK_RATES","OPEN_BOOKING_MODAL","Tracker","_createClass","_classCallCheck","this","track","bind","isDebug","key","get","value","eventName","eventParams","eventCallback","_eventParams","_eventParams2","_eventParams2$callbac","_eventParams2$timeout","timeout","minCallbackTimeout","customParams","_objectWithoutProperties","_excluded","gtag","dataLayer","push","arguments","hasCalled","hasReachedMinTimeout","fn","params","event_callback","isNaN","event_timeout","keys","forEach","_snakeCase","console","error","device","windows","test","navigator","platform","mac","android","userAgent","ios","maxTouchPoints","getState","state","name","_isPlainObject","_isFunction","_objectSpread","Array","isArray","_defineProperty","_toConsumableArray","config","initProps","props","camelCaseProps","contactFormHtml","html","trim","replace","txt","document","createElement","innerHTML","decodeHtml","_config","_config$scenarioPrefe","validations","match","assign","configuration","_isString","scenarioPrefetchDelay","SCENARIO_PREFETCH_DELAY","type","_props$defaultScenari","defaultScenarios","defaultLoanPurpose","purchase","refinance","LOAN_AMOUNT","HOME_VALUE","ZIP_CODE","String","isPurchase","isRefinance","BASE_SCENARIO","loanPurpose","PURCHASE","REFINANCE","initialScenario","tracker","enableDebugMode","newProps","newKey","_lowerFirst","newValue","_typeof","map","isAdjustableRate","toLowerCase","isFixedRate","formatCurrency","num","showDecimals","isNegative","decimals","Math","abs","Number","toLocaleString","maximumFractionDigits","minimumFractionDigits","concat","calculatePercent","num1","num2","addDecimals","formatPercent","_isNumber","round","parseFloat","addPercentSign","length","undefined","emailRegex","isValidEmail","email","maxLength","emailParts","split","_emailParts","_slicedToArray","account","address","some","part","phoneRegex","compareLoanDetails","a","b","getCashOut","_isEqual","flat","getObj","obj","newObj","compareObjects","loanAmount","homeValue","cashOutAmount","generateId","ch","seed","str","values","v","join","h1","h2","i","charCodeAt","imul","elements","getElementsToTransform","_elements","_elements2","sections","from","querySelectorAll","index","findIndex","s","id","slice","querySelector","filter","getPropertyTypeText","_ref","_data$loanDetailsText","propertyTypes","find","p","data","loanDetailsText","label","isValidDate","date","Date","getEffectiveDate","includes","parseInt","substr","formatParagraphs","text","encode","paragraphToNewline","React","dangerouslySetInnerHTML","__html","global","clearTimeout","setInterval","clearInterval","objects","setObject","delay","time","clearObject","splice","call","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","el","parentElement","parentNode","nodeType","NodeList","thisArg","vars","colors","useStyleVars","styleVars","ref","_color","_strokeWidth","className","strokeWidth","color","_ref$direction","direction","restProps","_useStyleVars","timelineTrackColor","timelineStrokeWidth","h","ceil","svgProps","lineProps","viewBox","width","height","x1","x2","y1","y2","style","_extends","classNames","preserveAspectRatio","stroke","vectorEffect","strokeDasharray","useResizeObserver","_ref$current$offsetWi","_ref$current","_ref$current$offsetHe","_ref$current2","options","_options$shouldReturn","shouldReturnValues","_options$checkWidth","checkWidth","_options$checkHeight","checkHeight","_useState","useState","current","offsetWidth","offsetHeight","_useState2","size","setSize","prevSize","useRef","hasInitialized","observerRef","didUnmount","callbackRef","useEffect","ResizeObserver","entries","entry","target","newSize","observer","observe","unobserve","sizeValue","useMemo","TimelineContent","children","isTimelineStart","topWrapper","startNumber","_ref$finalDot","finalDot","TimelineStart","number","finalDotRef","finalDotNumber","Dot","_ref2","_ref2$color","_ref2$isMainTimeline","isMainTimeline","showOnMobile","showNumber","SHOW_TIMELINE_NUMBERS","dotRef","currentRef","_ref3","_finalDot","setHeight","line","wrapperHeight","_finalDot$current$off","_finalDot$current","_line$current$parentE","_line$current","_line$current$parentE2","lineHeight","offsetTop","DashedLine","_path","_path2","n","e","t","r","hasOwnProperty","apply","_path3","_path4","_path5","_path6","_path7","xmlns","fill","d","fillRule","clipRule","_circle","_circle2","_circle3","cx","cy","strokeMiterlimit","ActionButton","_Icon$_upperFirst","icon","href","Tag","IconComponent","Icon","_upperFirst","inputTags","inputId","wrapperClassName","_ref$text","_ref$position","position","forceHidden","forceVisible","_ref$addAriaTag","addAriaTag","offset","tooltipId","_uniqueId","hasAddedAriaTag","transitionDelay","offsetProperties","content","child","marginTop","bottom","top","left","right","icons","cancel","Cancel","reset","Reset","Button","_showArrow","showArrow","_ref$theme","theme","_ref$style","_ref$contentStyle","contentStyle","contentClassName","iconClassName","fontSize","isClose","_ref$closeTooltipText","closeTooltipText","disabled","styles","tabIndex","component","Tooltip","PhoneNumber","_ref$component","_ref$num","rest","displayNum","showIntlCode","cleaned","intlCode","formatPhoneNumber","linkNum","_path8","_path9","_path10","_path11","_path12","_path13","_path14","_path15","_path16","_path17","transform","strokeLinecap","_ref$loanPurpose","labelId","setState","initialValue","defaultValue","components","LoanPurpose","loanPurposeType","isActive","reverse","role","onClick","Refinance","Purchase","ControlButton","small","useLayoutEffect","useMatchMedia","queries","valuesArr","mediaQueries","q","matchMedia","getValue","useCallback","m","currentValue","setCurrentValue","useIsomorphicLayoutEffect","handler","addListener","removeListener","_useState3","_useState4","setHasInitialized","timer","useIsMobile","controlsMobileWidth","useHasRendered","hasRendered","setHasRendered","inputsAreOpen","setInputsAreOpen","refreshData","_ref4","creditScore","zipCode","propertyType","parts","propertyText","score","creditScoreRanges","letter","percent","getLoanText","hideTooltip","setHideTooltip","tooltipTimer","setTooltipTimer","controlsStackedWidth","isMobile","_useMatchMedia","buttonText","tooltipText","tooltipPosition","button","onMouseLeave","prevIsOpen","isOpen","PersonalizeIcon","Arrow","MobileLoanSummary","creditScoreText","homeValueLabel","Item","occupancyType","memo","_id","fieldClassName","_ref$type","format","isCurrency","allowNegative","disableArrowKeyIncrement","_icon","_ref$iconPosition","iconPosition","_ref$iconStyle","iconStyle","iconLeft","iconPadding","fieldStyle","maxWidth","validate","inlineLabel","hasError","errorMessage","showErrorMessage","onChange","onFocus","onBlur","onKeyDown","errorId","isFocused","setIsFocused","isNumber","isPattern","valueIsNumericString","isFormatted","valueRef","handleFocus","handleBlur","handleChange","handleKeyDown","isDown","isUp","preventDefault","diff","shiftKey","max","_useMemo","paddingProperty","onValueChange","_icon2","_props$iconPadding","thousandSeparator","decimalSeparator","padding","_useMemo2","Field","PatternFormat","NumericFormat","decimalScale","useClickOutside","requireMouseUp","originalTarget","contains","setOriginalTarget","addEventListener","removeEventListener","useEscapeKey","requireKeyUp","event","useEvent","elementOrCallback","deps","hasElement","element","Select","_options$find","_ref$options","placeholder","isDisabled","optionsMinWidth","_ref$tabIndex","_ref$usePortal","usePortal","offsetEmptyLeft","offsetEmptyRight","listId","setIsOpen","isOpenRef","rect","setRect","refreshRect","_ref$current$getBound","getBoundingClientRect","pageXOffset","pageYOffset","open","close","blur","valueLabel","isMinimal","ArrowComponent","ArrowBold","hasVisibleError","focus","OptionsWrapper","inputRect","_ref2$options","_excluded2","_useState5","_useState6","focusedIndex","setFocusedIndex","selectOptions","option","focusedId","items","info","isCurrent","Option","optionComponents","_useMemo3","isAbove","_ref5","_ref5$left","_ref5$top","_ref5$width","inputWidth","_ref5$height","minWidth","scrollY","innerHeight","scrollTo","createPortal","body","_ref6","_excluded3","labelClassName","htmlFor","Spinner","baseSize","baseThickness","SmallSpinner","svgClassName","_ref2$thickness","thickness","wrapperStyle","isLoading","spinnerSize","_ref$spinnerThickness","spinnerThickness","loadingText","disableHoverEffect","setDisableHoverEffect","Component","Text","mask","autoComplete","_zipCode","dependencies","LOAN_PURPOSE","_validations$minHomeV","minHomeValue","_validations$maxHomeV","maxHomeValue","hasMinHomeValue","hasMaxHomeValue","CASH_OUT_AMOUNT","_validations$minLoanA","minLoanAmount","_validations$maxLoanA","maxLoanAmount","hasMinLoanAmount","hasMaxLoanAmount","CREDIT_SCORE","o","fieldTypes","SELECT","PROPERTY_TYPE","occupancyTypes","OCCUPANCY_TYPE","useConfig","_getConfig","usePrevious","errors","showInlineErrors","cachedZipCodes","addCachedZipCode","canRefresh","_ref$validations","canValidate","updateErrors","setCanValidate","setCurrentInput","refresh","prefetchScenario","prefetchTimer","stateRef","cachedZipCodesRef","zipCodeCount","checkZipCode","_asyncToGenerator","_regeneratorRuntime","_callee","response","_data$message","_context","prev","next","abrupt","fetch","VALIDATE_ZIP_CODE_ENDPOINT","method","headers","Accept","JSON","stringify","sent","json","isValid","message","DEFAULT_ZIP_CODE_ERROR","FOOTPRINT","stop","_x","debouncedCheckZipCode","_debounce","ZIP_CODE_VALIDATION_DEBOUNCE_TIME","leading","trailing","validateZipCodeInFootprint","_callee2","_cachedZipCodesRef$cu","cachedData","_cachedData$message","_context2","MAX_ZIP_CODE_VALIDATIONS_BEFORE_DEBOUNCE","_x2","_fn","currentState","controls","_state","_fn2","prevState","_value","fields","FORM_FIELDS","_error$message","_controls$name","field","LoanAmount","ZipCode","HomeValue","CreditScore","PropertyType","OccupancyType","CashOutAmount","visibleErrors","setInputsRect","pathLength","pathStart","_useState2$","setPathLength","pathLengthTimer","wrapper","outline","dot","wrapperEl","outlineEl","dotEl","wrapperRect","outlineRect","dotRect","contentRect","classList","add","controlsWrapperTop","controlsTop","prevRect","dotOffset","_outline$current","remove","_observer","disconnect","Fields","loading","ValidationMessage","xlinkHref","strokeDashoffset","Error","scrollTimer","_content$current","headline","Modal","header","closeLabel","buttonAriaControls","onButtonClick","InputsWrapper","prevIsMobile","MobileInputs","DesktopInputs","RackRateInputs","rackRateLoanPurpose","rackRateLoanType","setRackRateLoanPurpose","setRackRateLoanType","loanPurposeOptions","loanTypeOptions","closingCostType","NCC","POINTS","Toggle","setValue","_options","_options$","option1","_options$2","option2","Controls","_apiErrors$validation","apiErrors","showRackRates","_currentState","_setCurrentState","setCurrentState","_errors","setErrors","setCachedZipCodes","zipCodes","_zipCodes$zipCode","newZipCodes","MAX_CACHED_ZIP_CODES","hasChanged","k","hasErrors","shouldTrackOpenInputs","_useState8","_useState9","currentInput","_useState10","_useState11","apiValidationErrors","validation","_apiErrors$validation2","footprintError","newErrors","currentErrors","_uniqBy","newState","loan_purpose","loan_amount","home_value","zip_code","credit_score","LoanPurposeButtons","LoanDetails","Inputs","useWindowResizing","_options$delay","isResizing","setIsResizing","start","complete","bodyClassName","windowIsResizing","requestAnimationFrame","initialScale","contentRef","_ref$contentIsScrolla","contentIsScrollable","headerLabelId","headerClassName","headerChildren","closeColor","closeClassName","_ref$hideWithCss","hideWithCss","buttonClassName","buttonIsDisabled","_ref$buttonAriaContro","closeModal","modalMobileWidth","isMounted","useIsMounted","contentIsAnimating","_setContentIsAnimating","isHidden","setContentIsAnimating","isAnimating","isVisible","y","pause","mass","tension","friction","precision","velocity","opacity","scale","duration","contentSpring","useSpring","immediate","onStart","onRest","_wrapper$current","springRef","_springRef$current$sc","_springRef$current$y","set","_wrapper$current2","removeAttribute","headerComponent","hasAriaLabel","hasLabel","closeButton","CloseModalButton","headerWrapper","ReactDOM","FocusLock","autoFocus","RemoveScroll","allowPinchZoom","enabled","closed","animating","onMouseDown","animated","div","stopPropagation","_ref2$label","product","loanDetails","selector","_ref$hasPrefillFields","hasPrefillFields","hasAddedForm","setHasAddedForm","form","Form","isMutatingDOM","mutateDOM","toggleSelectPlaceholder","select","toggle","hiddenFields","initElements","setPhoneAttributes","_select$firstElementC","firstElementChild","hiddenFieldKeys","section","removeChild","setAttribute","f","prevProduct","prevLoanDetails","refreshTimer","refreshForm","shouldInitElements","_upperfirst","PlanDescription","planDescription","PlanNumber","planNumber","QuotedRate","rate","toFixed","QuotedAPR","apr","QuotedPayment","payment","EstimatedValue","getHiddenFieldData","MutationObserver","subtree","childList","resetPhoneAttributes","_el$id","tagName","onMouseOut","onInput","_ref3$selector","initForm","formEl","appendChild","display","readyState","hasBreadcrumbs","showBreadcrumbs","breadcrumbsHtml","showPretitle","Links","introText","showHeroLink","heroLinkText","heroLinkUrl","showApply","showApplyButton","applyButtonUrl","showChat","showChatButton","showConsultation","showRequestConsultationButton","showPhoneNumber","showPhoneNumberButton","showRateWatch","showRateWatchButton","rateWatchUrl","showScheduleAppointment","showScheduleAppointmentButton","bookingsPageUrl","ScheduleAppointment","scheduleAppointmentText","modalText","scheduleAppointmentModalText","bookingsUrl","applyButtonText","RequestConsultation","requestConsultationText","chatButtonText","phoneNumber","rateWatchText","_rect","_rect2","_rect3","_ref3$buttonText","_ref3$modalText","booking_page","is_agent","title","scrolling","src","x","rx","InfoText","_Icons$icon","_ref$tag","tag","Icons","_28","_29","dropdownPadding","productCategory","isEnabled","isDropdown","isModal","dropdownTextBreakpoint","categoryClassName","categoryText","categoryLoadingText","categoryTabIndex","productClassName","_ref$products","products","showProducts","categoryButtonIconSize","onCategoryToggle","onProductToggle","dropdownIsOpen","setDropdownIsOpen","dropdownWrapper","handleCategoryChange","action","product_category","productComponents","ProductType","categoryIsEnabled","toggleProductCategory","openDropdown","scrollTop","closeDropdown","force","_isBoolean","ToggleButton","DropdownToggle","visible","textBreakpoint","paddingTop","productTypeID","loanType","_ref3$textBreakpoint","isShortText","dropdownLabel","srLabel","_dropdownBreakpoint","_modalCategoryBreakpo","categoryWrapperClassName","categoryButtonClassName","productButtonClassName","_ref$productTypes","productTypes","isLoadingCategory","dropdownBreakpoint","modalCategoryBreakpoint","forceDropdown","modalIsOpen","openModal","_ref$showProducts","toggleProductType","sizer","breakpoint","hasBreakpoint","dropdownLayout","setDropdownLayout","modalLayout","setModalLayout","hideModalCategories","fixed","adjustable","modalId","sharedProps","fixedProps","adjustableProps","modalProps","hideCategories","setLayout","ProductTypeButtons","modalButtonText","ModalProductTriggers","isSizer","Percent","sortStates","isSticky","canShowContent","sort","setSort","sortText","isModalProductTypes","setModalIsOpen","ProductTypes","contentSentinelOffset","spacerTopHeight","_ref$offset","isStatic","topSentinel","contentSentinel","bottomSentinel","headerHeight","nav","floor","useStickyOffset","started","showContent","finished","stickyState","_setStickyState","setStickyState","topEl","contentEl","bottomEl","hasInitialCheck","topObserver","contentObserver","bottomObserver","initSticky","shouldRecalculate","recheckIfWrapperNotFound","ratesWrapper","toolbar","wRect","tRect","scroll","isBelow","IntersectionObserver","boundingClientRect","rootRect","rootBounds","ratio","intersectionRatio","threshold","domReady","resizeTimer","resizeHandler","ToolbarContent","mobileTableWidth","_rows","_rows2","_rows3","_ref$rates","rates","_isLoading","hasInitialData","footerIsVisible","setModalProduct","setKey","rows","_rates$map","Row","MAX_LOADING_ROWS","PlaceholderRows","rowProps","closingCosts","pointsComponent","isNCC","isPositive","sign","points","openModalRef","handleClick","ariaProps","DesktopRow","MobileRow","_ref3$data","_ref3$ariaProps","isPlaceholder","Cell","productLabel","LabelSlash","showHighlightLabel","highlightLabel","DebugInfo","labelText","Label","Value","_ref5$data","_ref5$ariaProps","mortgageTypeLabel","CardData","valueClassName","labelPlaceholderWidth","valuePlaceholderWidth","valuePlaceholderHeight","animationDelay","Details","_ref6$labelPlaceholde","_ref6$labelPlaceholde2","labelPlaceholderHeight","_ref6$valuePlaceholde","_ref6$valuePlaceholde2","_ref7","_excluded4","_ref8","_excluded5","_ref9","_ref9$count","count","_","_ref10","ErrorMessagesWrapper","_config$showRackRates","messages","showRackRatesInvitation","fetchRackRateGroups","rackRatesText","showRackRatesMessage","ErrorMessage","DEFAULT_ERROR_TITLE","_ref2$title","DEFAULT_ERROR_MESSAGE","ErrorIcon","_errorMessages","noProductsSelected","noRatesFound","_ref$showRackRatesInv","messageTitle","messageText","errorMessages","general","_errors$key","ErrorMessages","messageData","LoadMoreRates","forceHide","canLoadMore","loadMore","Plus","RateDisclosure","effectiveDate","disclosures","dateString","timeString","StepGroup","Step","isComplete","_ref2$canShow","canShow","_ref2$showLine","showLine","RateModalEmail","emailState","setEmailState","canShowError","lastValidEmail","RateModalForm","setAction","isApply","isConsultation","hasSelectedAction","productText","consultationButtonText","consultationForm","focusedConsultationInput","prevInput","input","phone","_useConfig","_useConfig$selectActi","selectActionLabel","_useConfig$emailField","emailFieldLabel","emailFieldDescription","_useConfig$loginField","loginFieldLabel","loginFieldDescription","_useConfig$consultati","consultationFieldLabel","consultationFieldDescription","blendOnlineBankingSSOLink","blendSignUpLink","handleApplyClick","_e$currentTarget","_node$href","node","redirectUrl","args","currentTarget","location","nativeEvent","stopImmediatePropagation","SAVE_LOAN_DATA_ENDPOINT","t0","Highlights","onClickCapture","word","toUpperCase","Highlight","uppercase","_ref4$uppercase","textTransform","types","_round","newLoanDetails","sharedRows","isAdjustable","adjustableRows","row","SampleLoanRow","PaymentRow","SampleLoanDisclosure","sampleLoanDisclosureAdjustable","sampleLoanDisclosureFixed","_ref4$addDecimals","CashOutDetails","totalYears","term","fixedMonths","timePeriodOfInitialRate","fixedYears","adjustableMonths","fixedPayment","min","minPaymentAfter1stRateChange","maxPaymentAfterMaxRateChange","minPayment","maxPayment","adjustablePaymentText","getAdjustablePayments","months","RATE","APR","_ref11","_ref12","rateChangeFrequency","changeFrequencyUnits","loanInfo","isRackRate","setProduct","_product$loanDetails","modalContentWrapper","visibleProduct","product_name","_content$current$chil","_content$current2","_modalContentWrapper$","currentProduct","SampleLoan","RackRates","_ref$groups","groups","_ref$currentLoanPurpo","currentLoanPurpose","_ref$currentLoanType","currentLoanType","rackRatesAreLoading","rackRatesError","group","isPoints","RackRateGroup","nccRates","ptsFeesRates","g","CalculatorMessages","noRackRatesMessage","RateDisclosures","HeaderCell","CTA","_ref$items","item","buttonUrl","_ref2$buttonType","buttonType","buttonTypeClassName","_question","_answer","question","answer","questionId","answerId","hideBg","setHideBg","Answer","_useResizeObserver$he","maxHeight","faqs","ctas","positionCtaBelowFaq","FAQ","_loanDetails$loanPurp","inputsRect","hasEnabledProductTypes","rackRateGroups","hasRect","property","val","prevLoanPurpose","isSwitchingLoanPurpose","newLoanPurpose","spring","transformElements","toolbarOffset","_inputsRect$height","PRODUCT","sortState","setSortState","prevRates","currentRates","_Object$values$find","_order$split","order","_orderBy","hasRates","disableInteraction","modalProduct","loanPurposeLabel","productTypesLabel","Toolbar","RateTable","RateModal","BottomContent","DebugMenu","debugErrorCodes","testApiError","handleErrorButtonClick","code","Section","ErrorButton","isLoadState","productLoadState","getProductTypesRef","getAllProductTypes","_productTypes$fixed$p","_productTypes$fixed","_productTypes$adjusta","_productTypes$adjusta2","useProductTypeLabels","labels","createProductLabels","formatRackRateGroups","defaultScenario","_group$loanPurpose","mapRates","_rate$planDescription","_rate$description","_rate$type","_rate$loanType","_rate$term","_rate$loanTerm","_rate$minPaymentAfter","_rate$loanPurpose","_rate$months","description","loanTerm","minPaymentAfterFirstRateChange","isFixed","loanToValue","productLabels","_productLabels$change","_rate$planDescription2","RegExp","warn","formatRackRate","useProductTypes","defaultProductTypes","isDefaultCategory","productCategories","setProductCategories","prevCategories","_loanType","isDefaultSelection","setProductTypes","prevProductTypes","fixedProductTypes","adjustableProductTypes","fixedIsEnabled","adjustableIsEnabled","productSort","_defaultCategory","category","_ref2$defaultProductC","defaultProductCategory","defaultCategory","_ref3$label","CalculatorError","_Error","_message","_this","_data$general","errorData","hasGeneralError","hasValidationError","isValidation","isGeneral","_inherits","_wrapNativeSuper","useScenarioHelpers","requestPhaseData","_useProductTypeHelper","productTypesRef","createRequestPhaseArray","requestPhases","shouldQueue","_requestPhases$length","arr","NOT_STARTED","QUEUED","productIsEnabled","_productTypes","_productTypes$loanTyp","_productTypes$loanTyp2","createLoadingState","_productTypes2","totalRequestPhases","updateLoadingState","loadState","currentLoadingState","_currentLoadingState$","_currentLoadingState$2","productTypeIDs","requestPhaseIndex","LOADING","QUEUED_LOAD_MORE","LOADING_MORE","getEnabledProducts","getProductsToLoad","loadingState","onlyReturnIds","includeDisabledProducts","productState","currentLoadState","getRequestPhaseWithProductsToLoad","_productTypes3","minProduct","_minBy","_product$requestPhase","indexOf","cachedProductTypes","useProductTypeHelpers","createRatesArray","fetchRates","requestPhaseID","_data$rates","debugErrorCode","_args","BOTH","DYNAMIC_RATES_ENDPOINT","ok","t1","_x3","formatData","termValue","hash","_p$planDescription","createScenario","initialRateData","_initialRateData$rate","parse","requestPhase","productRestriction","minCreditScore","maxCreditScore","filterRequestPhaseData","scenario","effectiveDates","visibleRequestPhaseIndex","hasCachedRateData","COMPLETE","_uniq","separateNCC","shouldLoad","nccValue","initialLoadState","_groupBy","useEffectAfterMount","TopWrapper","setLoanDetails","Hero","ReactDOMServer","Components","DynamicPricingCalculator","initialProps","cachedRates","initialRackRates","rackRates","_useLoanDetails","shouldUseDefaultScenario","_setLoanDetails","useLoanDetails","_useProductTypes","_useRackRates","forceShowRackRates","_defaultScenario$loan","initialData","setShowRackRates","setRackRateGroups","setIsLoading","_useState7","setError","loadingTimer","minLoadTime","end","performance","now","RACK_RATES_ENDPOINT","t2","rackRatesErrorMessage","_useState12","getRackRates","useRackRates","_useScenario","_useScenarioHelpers","setScenario","scenarioRef","cachedScenarios","getCachedScenario","getCachedScenarioIndex","updateScenario","cacheIndex","initScenario","MAX_CACHED_SCENARIOS","shift","hasInitialLoanDetails","shouldTrackFetch","cachedScenario","disableDynamicRates","scenarioId","getData","hasInitialCachedData","productsSubset","prevFetchedProducts","_products","currentScenario","isLastRequest","_prevFetchedProducts","currentLoadedRates","_loanDetails","shouldCompleteLoading","shouldTrack","_error$data","_error$data$general","isPrefetching","prevScenario","newScenario","INITIAL_REQUEST_CHUNK_SIZE","_partition","_chunk","subset","_data$errors","_data$errors2","formattedRates","PARTIALLY_LOADED","_partition2","_partition3","productsWithData","productsWithoutData","hasNoData","NOT_STARATED","_x7","Promise","all","log","time_seconds","_x4","_x5","_x6","hasNewLoanDetails","_scenarioRef$current","productIsLoading","_scenario$data","enabledProductTypeIds","_minBy$date","_minBy2","dates","getScenario","getCachedScenarios","errorCode","useScenario","debug","Content","_require","require","module","exports","CACHED_RATES_PURCHASE","CACHED_RATES_REFINANCE","CACHED_REQUEST_STATE","CURRENT_LOCATION","CITY","CLOSING_COSTS","FILTER_STATE","HAS_VISITED","LOAN_SIZE","LOAN_STATE","PAYMENT","SORT_STATE","STATE","USER_SET_LOCATION","ZIP_CODES","PRELOADING","errorSource","SERVER","CLIENT","LOAN_TYPE","TEXT","requestBody","PropertyValue","FicoScore","EXCELLENT","GREAT","VERY_GOOD","ABOVE_AVERAGE","AVERAGE","BELOW_AVERAGE","FAIR","LOW","VERY_LOW","POOR","SFR","PUD","CONDO","TWO_UNIT","THREE_UNIT","FOUR_UNIT","MANUFACTURED","OWNER_OCCUPIED","SECOND_HOME","INVESTMENT"],"sourceRoot":""}