{"version":3,"file":"Tooltip.CutlKAHR.mjs","names":["useState","useRef","useState","useCallback","results","useMemo","useCallback","useState","useRef","useMemo","useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/QiQxddxvgK2YcuN3NIev/syeNwJmo5O7oUEMetkZw/constants.js","https:/framerusercontent.com/modules/YFjMCqenRYattCvr9gfq/1u9MHMBzFgGWuGw9sD2R/constants.js","https:/framerusercontent.com/modules/rYPHAwTVnpqLZ1FciP9I/UFD8lh7fTeIZ4kkF3o8B/calculator_utils.js","https:/framerusercontent.com/modules/pOgXHfYGBr8PpY7rMTqk/qlrpcApuQeJABAZPRv0J/calculator_formula.js","https:/framerusercontent.com/modules/zwwjtl3w8dIHy6SlWPBi/0CjnHHDvYzpN1UkjZhIv/calculator_utils_1.js","https:/framerusercontent.com/modules/DUAjCaZqxaRleEqDZxm3/jdbU95MWBYW8wJd04QAW/InputHeading.js","https:/framerusercontent.com/modules/lnUsVZ7SqI4xuIhv7orw/RCbB10u8RgZYixMz7oAz/useOutsideClick.js","https:/framerusercontent.com/modules/rfyC3pKR3VzDjh0jpqs8/vyAPMr1CebBZAxrnVpl1/Label.js","https:/framerusercontent.com/modules/7dRurgfEbF6chwrdb9v2/vxErPTHBP3But22kkFu0/Select.js","https:/framerusercontent.com/modules/XWoXhHg6yOi1JadaGRL0/ZEQGyVXyzDRTwAd5CsWU/StartMyApplication.js","https:/framerusercontent.com/modules/D5KLNXZYlo38wdvdYWtt/AheCghhMzhsuCe6n94ga/Tooltip.js"],"sourcesContent":["// APR is used for calculating a monthly payment amount. This is determined given the entered credit score and term\n// originationFee is used to determine the total cash received on a loan\nexport const aprBrackets={36:{\"640-659\":{originationFee:6.95,apr:19.35},\"660-679\":{originationFee:6.95,apr:18.79},\"680-699\":{originationFee:6.95,apr:16.47},\"700-719\":{originationFee:6.95,apr:14.92},\"720-739\":{originationFee:5.95,apr:12.12},\"740-759\":{originationFee:3.35,apr:10.08},\"760-779\":{originationFee:3.35,apr:9.82},\"780-799\":{originationFee:3.25,apr:9.2},\"800-824\":{originationFee:3,apr:8.51},\"825-850\":{originationFee:3,apr:8.01}},60:{\"640-659\":{originationFee:7.3,apr:20.51},\"660-679\":{originationFee:7.3,apr:19.94},\"680-699\":{originationFee:7.3,apr:17.62},\"700-719\":{originationFee:7.3,apr:16.06},\"720-739\":{originationFee:6.3,apr:13.26},\"740-759\":{originationFee:3.7,apr:11.89},\"760-779\":{originationFee:3.7,apr:11.64},\"780-799\":{originationFee:3.25,apr:10.37},\"800-824\":{originationFee:3,apr:9.75},\"825-850\":{originationFee:3,apr:9.25}}};// Derive loan terms from aprBrackets - single source of truth\nexport const SELECT_ITEMS_LOAN_TERMS=Object.keys(aprBrackets).map(term=>({label:`${term} Months`,value:term}));// Derive credit score ranges from aprBrackets - single source of truth\n// Uses the first term's ranges (all terms should have the same ranges)\nexport const SELECT_ITEMS_CREDIT_SCORE_RANGE=Object.keys(aprBrackets[36]).map(range=>({label:range.replace(\"-\",\" - \"),value:range}));export const APR_TOOLTIP_CONTENT=\"An annual percentage rate (APR) is a yearly amount you'll pay once you take out your loan and includes interest and fees. This number reflects a 0.25% autopay discount.\";export const PERSONAL_LOAN_RESULTS_TOOLTIP_CONTENT={totalLoanCost:\"This is an estimate of how much money you could pay based on the information you provided.\",apr:APR_TOOLTIP_CONTENT,payoffDate:\"This is an estimate of when your loan will be completely paid off if you get a loan today.\"};\nexport const __FramerMetadata__ = {\"exports\":{\"aprBrackets\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"APR_TOOLTIP_CONTENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"AprBracket\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PERSONAL_LOAN_RESULTS_TOOLTIP_CONTENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SELECT_ITEMS_CREDIT_SCORE_RANGE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SELECT_ITEMS_LOAN_TERMS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./constants.map","import{APR_TOOLTIP_CONTENT}from\"https://framerusercontent.com/modules/QiQxddxvgK2YcuN3NIev/syeNwJmo5O7oUEMetkZw/constants.js\";export const PERSONAL_LOAN_RANGE={min:2e3,max:45e3};export const DEBT_VALIDATION_ERROR_MESSAGES={currentBalance:{required:\"Enter a balance\"},monthlyPayment:{required:\"Enter a monthly payment\",max:\"Enter a monthly payment that's less than the balance\"},apr:{required:\"Enter an APR\",max:\"Enter an APR of 36 or less\"}};export const DEBT_VALIDATION_FORM_ERRORS={invalidTotalBalance:`Please enter debt totaling between $2,000 and $45,000.`};export const DEFAULT_DEBT_VALIDATION_ERRORS={formError:undefined,debtRows:[]};export const DEFAULT_DEBT_ROW_VALUES={currentBalance:\"\",monthlyPayment:\"\",apr:\"\"};export const MAX_DEBT_ROWS=10;export const SAVINGS_HEADINGS={resultsTotal:\"Your estimated total savings\",resultsMonthlyPayment:\"Your estimated monthly savings\",barGraphTotal:\"Total cost comparison\",barGraphMonthlyPayment:\"Monthly payment comparison\"};export const DEFAULT_OUTPUTS={currentDebtTotalInterestPaid:0,apr:0,payoffDate:null,monthlyPayment:0,totalLoanCost:0,totalDebt:0,currentDebtsAverageApr:0,currentDebtMonthlyPayment:0,debtRowCount:0,debtComparison:{savingsType:null,totalSavings:0,currentDebtAmount:0,personalLoanAmount:0,resultsHeading:SAVINGS_HEADINGS.resultsTotal,barGraphTitle:SAVINGS_HEADINGS.barGraphTotal}};export const DEBT_CON_RESULTS_TOOLTIP_CONTENT={totalLoanCost:\"This is an estimate of how much money you could pay based on the information you provided.\",monthlyPayment:\"This is an estimate of your monthly payment based on the information you provided.\",apr:APR_TOOLTIP_CONTENT,payoffDate:\"This is an estimate of when your loan will be completely paid off if you get a loan today. \"};\nexport const __FramerMetadata__ = {\"exports\":{\"DEFAULT_OUTPUTS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"SAVINGS_HEADINGS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MAX_DEBT_ROWS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PERSONAL_LOAN_RANGE\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_DEBT_VALIDATION_ERRORS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEBT_VALIDATION_FORM_ERRORS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEBT_CON_RESULTS_TOOLTIP_CONTENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEBT_VALIDATION_ERROR_MESSAGES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DEFAULT_DEBT_ROW_VALUES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./constants.map","\"use client\";import{useEffect,useRef,useState}from\"react\";import{DEBT_VALIDATION_ERROR_MESSAGES}from\"https://framerusercontent.com/modules/YFjMCqenRYattCvr9gfq/1u9MHMBzFgGWuGw9sD2R/constants.js\";// ID used for the results card\nexport const RESULTS_CARD_ID=\"calculator-results\";/**\n * @description Used to immediately scroll to the results on mobile layouts\n */export function useScrollToResults(){function scrollTo({scrollOnDesktop=false,id=RESULTS_CARD_ID}={}){if(typeof document===\"undefined\"||typeof window===\"undefined\"){return;}const shouldScroll=scrollOnDesktop?true:window.innerWidth<1199;if(!shouldScroll){return;}const element=document.getElementById(id);if(element){element.scrollIntoView({behavior:\"smooth\"});}}return{scrollTo};}/**\n * @description Convert a number to a dollar amount\n * eg: 123874 -> \"$123,874\"\n */export function numberToDollars(number){return number.toLocaleString(\"en-US\",{style:\"currency\",currency:\"USD\",minimumFractionDigits:0,maximumFractionDigits:0});}export const NUMBERS_PATTERN=/[^0-9.]/g;/**\n * @description Convert currency to a number\n * eg: \"$13,392.434\" -> 13392.434\n */export function currencyToNumber(value){const numericValue=value.replace(NUMBERS_PATTERN,\"\");if(numericValue===\"\"){return 0;}return parseFloat(numericValue);}export function getPayoffDate(payoffDate){return`${(payoffDate.getMonth()+1).toString().padStart(2,\"0\")}/${payoffDate.getFullYear()}`;}/**\n * @param amount A value used to being the count up/down animation\n * @returns The \"counting\" value\n */export function useNumberCounter({amount}){const[amountAnimated,setAmountAnimated]=useState(amount);const currentMonthlyPayment=useRef(amount);const animationFrameId=useRef(null);useEffect(()=>{if(typeof window===\"undefined\")return;// The \"target\" is the new monthlyPayment\nconst targetAmount=amount;const animate=()=>{setAmountAnimated(previousAmount=>{// Determine if we need to count down or up to the target amount\nconst direction=previousAmount<targetAmount?1:-1;// Either increment or decrement the displayed amount. Multiply by 15 as it can be quite slow for larger jumps\nconst nextAmount=previousAmount+direction*15;const isDoneCountingUp=direction===1&&nextAmount>=targetAmount;const isDoneCountingDown=direction===-1&&nextAmount<=targetAmount;// If counting is complete, then set the current state to the target amount, and set the cached monthlyPaymentAmount to the target amount\nif(isDoneCountingUp||isDoneCountingDown){currentMonthlyPayment.current=targetAmount;animationFrameId.current=null;return targetAmount;}animationFrameId.current=window.requestAnimationFrame(animate);return nextAmount;});};animationFrameId.current=window.requestAnimationFrame(animate);// Cleanup function to cancel animation frame on unmount or when amount changes\nreturn()=>{if(animationFrameId.current!==null){window.cancelAnimationFrame(animationFrameId.current);}};},[amount]);return amountAnimated;}/**\n * Form field validation rules for a single debt row\n */export const debtRowValidationRules={currentBalance:value=>{const currentBalance=currencyToNumber(value.currentBalance);if(!currentBalance){return DEBT_VALIDATION_ERROR_MESSAGES.currentBalance.required;}},monthlyPayment:value=>{const monthlyPayment=currencyToNumber(value.monthlyPayment);const currentBalance=currencyToNumber(value.currentBalance);if(!monthlyPayment){return DEBT_VALIDATION_ERROR_MESSAGES.monthlyPayment.required;}if(monthlyPayment>=currentBalance){return DEBT_VALIDATION_ERROR_MESSAGES.monthlyPayment.max;}},apr:value=>{const apr=currencyToNumber(value.apr);if(!apr){return DEBT_VALIDATION_ERROR_MESSAGES.apr.required;}if(apr>36){return DEBT_VALIDATION_ERROR_MESSAGES.apr.max;}}};/**\n * Formats an APR up to three decimal places without trailing zeros\n * @param apr The APR value to format\n * @returns A formatted string (e.g., \"5.125\", \"5.1\", \"5\")\n */export function formatApr(apr){return apr.toLocaleString(\"en-US\",{minimumFractionDigits:0,maximumFractionDigits:3});}\nexport const __FramerMetadata__ = {\"exports\":{\"currencyToNumber\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useNumberCounter\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"RESULTS_CARD_ID\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NUMBERS_PATTERN\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatApr\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getPayoffDate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"debtRowValidationRules\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"numberToDollars\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useScrollToResults\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{numberToDollars}from\"https://framerusercontent.com/modules/rYPHAwTVnpqLZ1FciP9I/UFD8lh7fTeIZ4kkF3o8B/calculator_utils.js\";import{aprBrackets}from\"https://framerusercontent.com/modules/QiQxddxvgK2YcuN3NIev/syeNwJmo5O7oUEMetkZw/constants.js\";/**\n * Calculates and returns the monthly payment on a loan\n *\n * @returns {object} An object containing the monthly payment and the full amortization schedule.\n */export function calculateMonthlyPayment({principalLoanAmount,apr,loanTermMonths}){// Convert annual interest rate to a monthly rate\nconst monthlyInterestRate=apr/100/12;// Calculate the monthly payment using the amortization formula\nreturn principalLoanAmount*(monthlyInterestRate*Math.pow(1+monthlyInterestRate,loanTermMonths)/(Math.pow(1+monthlyInterestRate,loanTermMonths)-1));}/**\n * Calculate the total loan cost, which includes the sum of all monthly payments, and the the origination fee\n *\n * @returns {number} Total loan cost\n */export function calculateTotalLoanCost({monthlyPayment,loanTermMonths,originationFee}){const totalPayments=monthlyPayment*loanTermMonths;return totalPayments+originationFee;}/**\n * @description Calculate data about a given debt\n * eg: For the results of a personal loan, or for individual debts on the debt-consolidation calculator\n */export function calculateLoanResultsData({principalLoanAmount,loanTermMonths,creditScore,defaultApr}){// An \"APR bracket\" is derived from the calculator's loan term and credit score\nconst aprBracket=aprBrackets?.[loanTermMonths]?.[creditScore];if(!aprBracket){return null;}// From that, we get the APR and origination fee\nconst{originationFee,apr:personalLoanApr}=aprBracket;const apr=defaultApr??personalLoanApr;// Calculate the monthly payment\nconst monthlyPayment=calculateMonthlyPayment({principalLoanAmount,apr,loanTermMonths});// Calculate the total loan cost\nconst totalLoanCost=calculateTotalLoanCost({monthlyPayment,loanTermMonths,originationFee});// The \"payoff date\" is the loan term plus the current date\nconst payoffDateObj=new Date;payoffDateObj.setMonth(payoffDateObj.getMonth()+loanTermMonths);return{monthlyPayment,apr,payoffDate:payoffDateObj,totalLoanCost};}/**\n * @description A wrapper for \"calculateLoanResultsData\" that formats the results for the UI\n */export function calculateLoanResultFormatted(args){const results=calculateLoanResultsData(args);if(results==null)return null;const{monthlyPayment,apr,payoffDate,totalLoanCost}=results;return{monthlyPayment,totalLoanCost:numberToDollars(totalLoanCost),apr:`${apr}%`,payoffDate:`${(payoffDate.getMonth()+1).toString().padStart(2,\"0\")}/${payoffDate.getFullYear()}`};}\nexport const __FramerMetadata__ = {\"exports\":{\"calculateLoanResultsData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"calculateTotalLoanCost\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"calculateMonthlyPayment\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"calculateLoanResultFormatted\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","\"use client\";import{jsx as _jsx}from\"react/jsx-runtime\";import{createContext,useCallback,useMemo,useState}from\"react\";/**\n * @description Reusable function for creating and returning a context object, and provider. Internally handles state manipulation\n */export function CreateContext(defaultState){const Context=/*#__PURE__*/createContext(defaultState);// Context provider. Contains logic for submitting the calculator, setting results given the provided \"calculate\" callback: This is unique to each calculator.\nfunction CalculatorProvider({children}){const[results,setResults]=useState(defaultState.outputs);const[isCalculated,setIsCalculated]=useState(false);const{calculate}=defaultState;const handleCalculate=useCallback(inputs=>{const results=calculate(inputs);if(results){setResults(results);setIsCalculated(true);}},[calculate]);const contextValue=useMemo(()=>{return{...defaultState,handleCalculate,outputs:results,isCalculated};},[results,handleCalculate,isCalculated]);return /*#__PURE__*/_jsx(Context.Provider,{value:contextValue,children:children});}return{Context,CalculatorProvider};}// ID used for the results card\nexport const RESULTS_CARD_ID=\"calculator-results\";/**\n * @description Used to immediately scroll to the results on mobile layouts\n */export function useScrollToResults(){function scrollTo(scrollOnDesktop=false){if(typeof document===\"undefined\"||typeof window===\"undefined\"){return;}const shouldScroll=scrollOnDesktop?true:window.innerWidth<1180;if(!shouldScroll){return;}const element=document.getElementById(RESULTS_CARD_ID);if(element){element.scrollIntoView({behavior:\"smooth\"});}}return{scrollTo};}/**\n * @description Convert a number to a dollar amount\n * eg: 123874 -> \"$123,874\"\n */export function numberToDollars(number){return number.toLocaleString(\"en-US\",{style:\"currency\",currency:\"USD\",minimumFractionDigits:0,maximumFractionDigits:0});}export const NUMBERS_PATTERN=/[^0-9]/g;/**\n * @description Convert currency to an integer\n * eg: \"$13,392\" -> 13392\n */export function currencyToInt(value){const numericValue=value.replace(NUMBERS_PATTERN,\"\");if(numericValue===\"\"){return 0;}return parseInt(numericValue);}export function getPayoffDate(payoffDate){return`${(payoffDate.getMonth()+1).toString().padStart(2,\"0\")}/${payoffDate.getFullYear()}`;}// interface UseNumberCounterProps {\n//   amount: number;\n// }\n// export function useNumberCounter({ amount }: UseNumberCounterProps) {\n//   const [amountAnimated, setAmountAnimated] = useState<number>(amount);\n//   const currentMonthlyPayment = useRef(amount);\n//   const animationFrameId = useRef<number | null>(null);\n//   useEffect(() => {\n//     if (typeof window === \"undefined\") return;\n//     // The \"target\" is the new monthlyPayment\n//     const targetAmount = amount;\n//     const animate = () => {\n//       setAmountAnimated((previousMonthlyPayment) => {\n//         // Determine if we need to count down or up to the target amount\n//         const direction = previousMonthlyPayment < targetAmount ? 1 : -1;\n//         // Either increment or decrement the displayed amount. Multiply by 15 as it can be quite slow for larger jumps\n//         const nextAmount = previousMonthlyPayment + direction * 15;\n//         const isDoneCountingUp = direction === 1 && nextAmount >= targetAmount;\n//         const isDoneCountingDown =\n//           direction === -1 && nextAmount <= targetAmount;\n//         // If counting is complete, then set the current state to the target amount, and set the cached monthlyPaymentAmount to the target amount\n//         if (isDoneCountingUp || isDoneCountingDown) {\n//           currentMonthlyPayment.current = targetAmount;\n//           animationFrameId.current = null;\n//           return targetAmount;\n//         }\n//         animationFrameId.current = window.requestAnimationFrame(animate);\n//         return nextAmount;\n//       });\n//     };\n//     animationFrameId.current = window.requestAnimationFrame(animate);\n//     // Cleanup function to cancel animation frame on unmount or when amount changes\n//     return () => {\n//       if (animationFrameId.current !== null) {\n//         window.cancelAnimationFrame(animationFrameId.current);\n//       }\n//     };\n//   }, [amount]);\n//   return amountAnimated;\n// }\n\nexport const __FramerMetadata__ = {\"exports\":{\"useScrollToResults\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NUMBERS_PATTERN\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"numberToDollars\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CalculatorContextValue\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"RESULTS_CARD_ID\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CreateContext\":{\"type\":\"reactComponent\",\"name\":\"CreateContext\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"currencyToInt\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getPayoffDate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./calculator_utils_1.map","import{jsx as _jsx}from\"react/jsx-runtime\";export function InputHeading({children,className=\"\"}){return /*#__PURE__*/_jsx(\"h3\",{className:`rl-input-heading rkt-Heading-20 rkt-Heading-20--responsive ${className}`,children:children});}\nexport const __FramerMetadata__ = {\"exports\":{\"InputHeading\":{\"type\":\"reactComponent\",\"name\":\"InputHeading\",\"slots\":[\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./InputHeading.map","\"use client\";import{useCallback,useEffect}from\"react\";export function useOutsideClick({targetElements,onOutsideClick}){const handleOutsideClick=useCallback(e=>{const clickContainsTarget=targetElements?.some(element=>element?.contains(e.target));if(targetElements&&clickContainsTarget){return;}onOutsideClick();},[onOutsideClick,targetElements]);useEffect(()=>{document.addEventListener(\"click\",handleOutsideClick);return()=>{document.removeEventListener(\"click\",handleOutsideClick);};},[handleOutsideClick]);}\nexport const __FramerMetadata__ = {\"exports\":{\"useOutsideClick\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./useOutsideClick.map","import{jsx as _jsx}from\"react/jsx-runtime\";export function Label({children,htmlFor}){return /*#__PURE__*/_jsx(\"label\",{className:\"rkt-Caption-12 rl-label\",htmlFor:htmlFor,children:children});}\nexport const __FramerMetadata__ = {\"exports\":{\"Label\":{\"type\":\"reactComponent\",\"name\":\"Label\",\"slots\":[\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Label.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useMemo,useRef,useState}from\"react\";import{useOutsideClick}from\"https://framerusercontent.com/modules/lnUsVZ7SqI4xuIhv7orw/RCbB10u8RgZYixMz7oAz/useOutsideClick.js\";import{Label}from\"https://framerusercontent.com/modules/rfyC3pKR3VzDjh0jpqs8/vyAPMr1CebBZAxrnVpl1/Label.js\";/**\n * @description Select / Combobox component\n * @see https://react.rocketdesignsystem.foc.zone/?path=/docs/components-select--docs\n */export function Select({items,value,label,id,onChange}){const[open,setOpen]=useState(false);const[focusedItemIndex,setFocusedItemIndex]=useState(0);const listRef=useRef(null);const selectOuterRef=useRef(null);const selectRef=useRef(null);useOutsideClick({targetElements:[listRef.current,selectRef.current],onOutsideClick:()=>{setOpen(false);}});// Handle closing the select list\nfunction handleClose(){if(listRef.current){// Set the opacity to zero, so the next time it opens, its position can be re-calculated\nlistRef.current.style.opacity=\"0\";}setOpen(false);}// Callback for selecting a new value\nfunction handleSelect(targetValue){onChange(targetValue);handleClose();}// The index of the selected item\nconst selectedItemIndex=useMemo(()=>{const index=items.findIndex(item=>item.value===value);return index>=0?index:0;},[items,value]);// Selected value\nconst selectedItem=useMemo(()=>{return items?.[selectedItemIndex]||items[0];},[selectedItemIndex,items]);// Keyboard navigation for the combobox\nfunction handleKeyboardNavigation(e){// If the key is \"enter\" and it's not already open, open the list\nif(e.key===\"Enter\"&&!open){e.preventDefault();handleOpen();}// If the key is \"enter\" and the list is open, then set the value to the focused item\nif(e.key===\"Enter\"&&open&&focusedItemIndex!=null){e.preventDefault();onChange(items[focusedItemIndex].value);handleClose();}// If the key is ArrowDown, select the next or first item depending on the current active item\nif(e.key===\"ArrowDown\"&&open){e.preventDefault();setFocusedItemIndex(()=>{return focusedItemIndex<items.length-1?focusedItemIndex+1:items.length-1;});}// If the key is ArrowDown, select the previous or last item depending on the current active item\nif(e.key===\"ArrowUp\"&&open){e.preventDefault();setFocusedItemIndex(focusedItemIndex-1);setFocusedItemIndex(()=>{return focusedItemIndex>0?focusedItemIndex-1:0;});}// If the key is escape, then close the list\nif(e.key===\"Escape\"){e.preventDefault();handleClose();}}// Handle opening the select list: Includes dynamically setting the position above and below\nfunction handleOpen(){if(open){return;}setOpen(true);let listHeight=0;setTimeout(()=>{if(!listRef.current||!selectOuterRef.current){return;}setFocusedItemIndex(selectedItemIndex);// Get the height of the select options list\nlistHeight=listRef.current?.offsetHeight??0;// Get the distance from the top of the window\nconst selectOuterRect=selectOuterRef.current.getBoundingClientRect();// Get the distance from the bottom of the window\nconst bottom=window.innerHeight-(selectOuterRect.top+selectOuterRef.current?.offsetHeight);// Determine if the open list will extend beyond the bottom of the window, including a 50px buffer\nconst isOverflowBottom=bottom<listHeight+50;// If it is, ensure that the list will open above\nif(isOverflowBottom){selectRef.current?.classList.add(\"rl-select--open-above\");}else{selectRef.current?.classList.remove(\"rl-select--open-above\");}setTimeout(()=>{if(!listRef.current){return;}listRef.current.style.opacity=\"1\";},30);});}function toggleOpen(){if(!open){handleOpen();}else{setOpen(false);}}return /*#__PURE__*/_jsx(\"div\",{className:\"MuiPaper-root\",children:/*#__PURE__*/_jsxs(\"div\",{className:\"rl-select\",role:\"combobox\",tabIndex:0,\"aria-expanded\":open,\"aria-controls\":`${id}-listbox`,\"aria-haspopup\":\"listbox\",onKeyDown:handleKeyboardNavigation,ref:selectRef,children:[/*#__PURE__*/_jsxs(\"div\",{onClick:toggleOpen,ref:selectOuterRef,className:\"rl-select__main\",\"data-testid\":`select-${id}`,children:[/*#__PURE__*/_jsx(Label,{htmlFor:id,children:label}),/*#__PURE__*/_jsx(\"div\",{className:\"rl-list__value\",children:selectedItem?.label}),/*#__PURE__*/_jsx(\"i\",{className:\"rl-select__icon\",style:{transform:open?\"rotate(180deg)\":\"none\"},children:/*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M8 10L12 14L16 10\",stroke:\"black\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})})})]}),/*#__PURE__*/_jsx(\"div\",{className:\"MuiList-root MuiPaper-root rl-select__list\",role:\"listbox\",style:{display:open?\"block\":\"none\",visibility:open?\"visible\":\"hidden\",// Default the opacity to 0 so it's not visible the first time it's opened and the position is being calculated\nopacity:0},ref:listRef,id:id,children:items.map((item,index)=>{const isSelected=item.value===selectedItem?.value;const classNames=[\"rkt-SelectItem\",\"MuiMenuItem-gutters\",\"MuiMenuItem-root\",\"rkt-SelectItem\",\"MuiMenuItem-gutters\",\"rl-select__item\",...focusedItemIndex===index?[\"rl-select__item--focused\"]:[],...isSelected?[\"rl-select__item--active\"]:[]];const className=classNames.join(\" \");return /*#__PURE__*/_jsxs(\"div\",{role:\"option\",\"aria-selected\":isSelected,className:className,\"data-testid\":`select-option-${item.value}`,onClick:()=>{handleSelect(item.value);},children:[/*#__PURE__*/_jsx(\"span\",{children:item.label}),isSelected?/*#__PURE__*/_jsx(\"i\",{className:\"rl-select__item-selected-icon\",children:/*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M8 12.4238L10.6706 15.0943L16.5 9.26367\",stroke:\"#0b5e36\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})})}):null]},item.value);})})]})});}\nexport const __FramerMetadata__ = {\"exports\":{\"Select\":{\"type\":\"reactComponent\",\"name\":\"Select\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"SelectItems\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useTrackingEvents}from\"https://framerusercontent.com/modules/dl6NF18IBVaCIEqMYmbC/1ERI5V7Cbe328qIYNacE/useTrackingEvents.js\";import{useEnvironmentURLs}from\"https://framerusercontent.com/modules/VcWf9viUxq6pXm4bBSD3/9yRu7ysytSpJGBxWhkSq/useEnvironmentURLs.js\";export function StartMyApplication({ctaTrackingPrefix,variant}){const{getEnvironmentURL}=useEnvironmentURLs();const startMyApplicationURL=getEnvironmentURL(\"rocketLoans\",\"/inq/index.html#/\");const{clickEventTrackingProps}=useTrackingEvents();return /*#__PURE__*/_jsx(\"div\",{className:`start-my-application-cta start-my-application-cta--${variant}`,children:/*#__PURE__*/_jsxs(\"a\",{className:`start-my-application-cta__link `,\"data-testid\":\"start-my-application-link\",href:startMyApplicationURL,...clickEventTrackingProps(`${ctaTrackingPrefix}calculator_start_application`),children:[/*#__PURE__*/_jsx(\"span\",{className:\"start-my-application-cta__text rkt-Heading-24 rkt-Heading-24--responsive\",children:\"Start my application\"}),/*#__PURE__*/_jsx(\"span\",{className:\"start-my-application-cta__icon\",children:/*#__PURE__*/_jsx(\"svg\",{width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M4.5 12.016H18.51M12.52 6.26367L18.557 12.0352L12.52 17.8067\",stroke:\"#111111\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})})})]})});}\nexport const __FramerMetadata__ = {\"exports\":{\"StartMyApplication\":{\"type\":\"reactComponent\",\"name\":\"StartMyApplication\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef,useRef,useState}from\"react\";import{useCallback}from\"react\";/**\n * The tooltip by default is positioned horizontally center, above below the trigger\n */const defaultTranslateX=\"calc(-50% + 18px)\";const defaultTranslateY=\"calc(-100% - 31px)\";const DEFAULT_TOOLTIP_CONTENT_STYLES={transform:`translate(${defaultTranslateX}, ${defaultTranslateY})`,opacity:0};export const TooltipPopOver=/*#__PURE__*/forwardRef(({style={},children},ref)=>{return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:\"rl-tooltip__content\",style:style,children:/*#__PURE__*/_jsx(\"p\",{className:\"rkt-Caption-12\",children:children})});});TooltipPopOver.displayName=\"TooltipPopOver\";export function Tooltip({title}){// Determines if the content is rendering\nconst[isVisible,setIsVisible]=useState(false);// CSS for the tooltip content, responsible for dynamic opacity and transformation\nconst[tooltipStyle,setTooltipStyle]=useState(DEFAULT_TOOLTIP_CONTENT_STYLES);// The content of the tooltip\nconst tooltipContentRef=useRef(null);// The button that triggers the tooltip\nconst triggerRef=useRef(null);// If the tooltip content is sticking outside of the browser window, its position needs to be adjusted\nconst calculatePosition=useCallback(()=>{if(tooltipContentRef.current){const style={...tooltipStyle};// Start the content's position at the default transform values\nlet translateX=defaultTranslateX;let translateY=defaultTranslateY;const contentClientRect=tooltipContentRef.current.getBoundingClientRect();// Get the distance between the tooltip content and the right of the window\nconst contentFromRight=window.innerWidth-(contentClientRect.x+contentClientRect.width);// Get the distance between the tooltip content and the left of the window\nconst contentFromLeft=contentClientRect.x;// Is the tooltip content overflowing from the right of the window?\nconst overflowingRight=contentFromRight<0;// Is the tooltip content overflowing from the left of the window?\nconst overflowingLeft=contentFromLeft<0;// Is the tooltip content overflowing from the top of the window?\nconst overflowingTop=contentClientRect.y<0;if(overflowingRight){// Move the tooltip content far enough left that there is space to the right\ntranslateX=\"calc(-100% + 35px)\";}else if(overflowingLeft){// Move the tooltip content far enough left that there is space to the left\ntranslateX=`calc(-50% + 35px - ${contentFromLeft}px )`;}if(overflowingTop){// Position the tooltip content so it's below the trigger, as opposed to above\ntranslateY=\"0\";}Object.assign(style,{transform:`translate(${translateX}, ${translateY})`,opacity:\"1\"});setTooltipStyle(style);}},[tooltipStyle]);// Before the ToolTip can be displayed, first calculate its position\nconst showTooltip=useCallback(()=>{// Ensure the content is rendering in the DOM\nsetIsVisible(true);// Then calculate its position and set its style\nsetTimeout(()=>{calculatePosition();},100);},[calculatePosition,setIsVisible]);const hideTooltip=useCallback(()=>{setTooltipStyle(DEFAULT_TOOLTIP_CONTENT_STYLES);setIsVisible(false);},[]);return /*#__PURE__*/_jsxs(\"div\",{className:\"rl-tooltip\",children:[/*#__PURE__*/_jsx(\"button\",{className:\"rl-tooltip__trigger\",ref:triggerRef,// Mouse navigation\nonMouseEnter:showTooltip,onMouseLeave:hideTooltip,// Keyboard navigation\nonClick:showTooltip,onBlur:hideTooltip,children:/*#__PURE__*/_jsx(\"i\",{className:\"rl-tooltip__icon\",children:/*#__PURE__*/_jsx(\"svg\",{fill:\"none\",viewBox:\"0 0 16 16\",id:\"tooltip-small\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{fillRule:\"evenodd\",clipRule:\"evenodd\",d:\"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm.916-3.94c0-.11-.07-.2-.18-.2h-.421c-.11 0-.18-.09-.18-.25 0-.23.234-1.228.433-2.078.148-.63.277-1.179.277-1.272 0-.16-.1-.26-.26-.26-.06 0-.364.001-.668.044-.214.025-.293.032-.348.037a6.46 6.46 0 0 0-.384.05c-.23.03-.513.123-.513.343 0 .188.109.243.221.301.121.062.246.126.246.359 0 .214-.122.707-.252 1.236-.15.609-.312 1.264-.312 1.59 0 .64.38.89.86.89.81 0 1.481-.47 1.481-.79zm-.551-5c.34 0 1.06-.62 1.06-.94 0-.32-.54-.97-.84-.97-.33 0-1.06.62-1.06.94 0 .32.54.97.84.97z\",fill:\"#111111\"})})})}),isVisible&&/*#__PURE__*/_jsx(TooltipPopOver,{ref:tooltipContentRef,style:tooltipStyle,children:title})]});}export function TextAndTooltip({children,toolTipContent}){return /*#__PURE__*/_jsxs(\"div\",{className:\"text-and-tooltip\",children:[children,/*#__PURE__*/_jsx(\"span\",{children:/*#__PURE__*/_jsx(Tooltip,{title:toolTipContent})})]});}\nexport const __FramerMetadata__ = {\"exports\":{\"TextAndTooltip\":{\"type\":\"reactComponent\",\"name\":\"TextAndTooltip\",\"slots\":[\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"TooltipPopOver\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Tooltip\":{\"type\":\"reactComponent\",\"name\":\"Tooltip\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Tooltip.map"],"mappings":"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"}