PageSourceSearch

https://kathrynfinney.com/assets/resources.tools.exit-number.use-_D56Jz8q.js

js kathrynfinney.com collected 2026-09-25 02:52:45 UTC 5,462 bytes, 1 lines download raw bytes

1import{j as e,L as v,r as d}from"./main-exKlCx7X.js";import{A as y}from"./arrow-left-mNTKwg5S.js";function E(){return e.jsxs("main",{className:"bg-cream pb-24 md:pb-32",children:[e.jsx("section",{className:"bg-sand pt-32 pb-12 md:pt-40 md:pb-16",children:e.jsxs("div",{className:"mx-auto max-w-[1100px] px-6 md:px-10",children:[e.jsxs(v,{to:"/resources/tools/exit-number",className:"inline-flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.25em] text-foreground/55 transition-colors hover:text-foreground",children:[e.jsx(y,{size:14})," Back to overview"]}),e.jsx("p",{className:"mt-8 text-[11px] font-semibold uppercase tracking-[0.3em] text-foreground/55",children:"Calculator"}),e.jsx("h1",{className:"mt-4 font-serif text-[2.25rem] font-medium leading-[1.05] text-foreground md:text-[3.25rem]",children:"Find Your Exit Number"})]})}),e.jsx("section",{className:"mx-auto max-w-[1100px] px-6 pt-12 md:px-10 md:pt-16",children:e.jsx(k,{})})]})}function k(){const[s,o]=d.useState(""),[t,u]=d.useState(""),[n,f]=d.useState("30"),[r,l]=d.useState("20"),a=d.useMemo(()=>{const i=Number(s),p=Number(t),m=Number(n),g=Number(r);
1if(!isFinite(i)||i<=0||!isFinite(p)||p<=0||!isFinite(m)||m<0||m>=100||!isFinite(g)||g<0)return null;const h=i*p,N=h*(1+g/100),j=N/(1-m/100);return{livingTotal:h,withBuffer:N,grossNeeded:j}},[s,t,n,r]),x=i=>new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(i);return e.jsxs("div",{className:"overflow-hidden rounded-sm border border-foreground/10 bg-background shadow-sm",children:[e.jsxs("div",{className:"bg-yellow px-8 py-8 md:px-10 md:py-10",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.3em] text-foreground/65",children:"Calculator"}),e.jsx("h2",{className:"mt-3 font-serif text-3xl font-medium leading-[1.05] text-foreground md:text-[2.5rem]",children:"Run your numbers"}),e.jsx("p",{className:"mt-4 max-w-2xl text-base leading-relaxed text-foreground/80 md:text-lg",children:"Fill in the four fields. Your Exit Number updates as you type."})]}),e.jsxs("div",{className:"grid gap-0 md:grid-cols-2",children:[e.jsxs("div",{className:"border-foreground/10 p-8 md:border-r md:p-10",children:[e.jsx(c,{id:"exit-annual",label:"Annual living expenses",hint:"What it costs you to live for one year, all in.",value:s,onChange:o,prefix:"$",placeholder:"120000"}),e.jsx(c,{id:"exit-years",label:"Years of freedom",hint:"How long you want this exit to last before you work again.",value:t,onChange:u,suffix:"yrs",placeholder:"10"}),e.jsx(c,{id:"exit-tax",label:"Estimated tax rate",hint:"Federal plus state on your exit proceeds. 25 to 35% is typical.",value:n,onChange:f,suffix:"%",placeholder:"30"}),e.jsx(c,{id:"exit-buffer",label:"Safety buffer",hint:"Cushion for inflation, surprises, and the next move.",value:r,onChange:l,suffix:"%",placeholder:"20"})]}),e.jsxs("div",{className:"bg-foreground p-8 text-background md:p-10",children:[e.jsx("p",{className:"text-[11px] font-semibold uppercase tracking-[0.3em] text-yellow",children:"Your Exit Number"}),a?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-4 font-serif text-5xl font-medium leading-none text-background md:text-[4.5rem]",children:x(a.grossNeeded)}),e.jsxs("p",{className:"mt-4 text-sm leading-relaxed text-background/70",children:["That's the gross sale price you need to cover"," ",t||"0"," year",Number(t)===1?"":"s"," of freedom after taxes and a ",r||"0","% buffer."]}),e.jsxs("dl",{className:"mt-8 space-y-3 border-t border-background/15 pt-6 text-sm",children:[e.jsx(b,{label:"Living costs over the period",value:x(a.livingTotal)}),e.jsx(b,{label:"With safety buffer",value:x(a.withBuffer)}),e.jsx(b,{label:`Pre-tax (gross) needed at ${n||"0"}%`,value:x(a.grossNeeded),emphasis:!0})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"mt-4 font-serif text-5xl font-medium leading-none text-background/30 md:text-[4.5rem]",children:"$—"}),e.jsx("p",{className:"mt-4 text-sm leading-relaxed text-background/65",children:"Fill in the fields on the left and your number appears here."})]})]})]})]})}function b({label:s,value:o,emphasis:t=!1}){return e.jsxs("div",{className:"flex items-baseline justify-between gap-4",children:[e.jsx("dt",{className:"text-background/65",children:s}),e.jsx("dd",{className:t?"font-serif text-lg text-yellow":"font-serif text-base text-background",children:o})]})}function c({id:s,label:o,hint:t,value:u,onChange:n,placeholder:f,prefix:r,suffix:l}){return e.jsxs("div",{className:"mb-6 last:mb-0",children:[e.jsx("label",{htmlFor:s,className:"text-[11px] font-semibold uppercase tracking-[0.25em] text-foreground/65",children:o}),e.jsxs("div",{className:"relative mt-2",children:[r&&e.jsx("span",{className:"pointer-events-none absolute left-4 top-1/2 -translate-y-1/2 text-base text-foreground/55",children:r}),e.jsx("input",{id:s,type:"number",inputMode:"decimal",min:0,value:u,onChange:a=>n(a.target.value),placeholder:f,className:`h-13 w-full rounded-sm border border-foreground
1/20 bg-background ${r?"pl-9":"pl-4"} ${l?"pr-14":"pr-4"} text-base text-foreground placeholder:text-foreground/35 focus:border-foreground focus:outline-none`}),l&&e.jsx("span",{className:"pointer-events-none absolute right-4 top-1/2 -translate-y-1/2 text-sm font-semibold uppercase tracking-[0.2em] text-foreground/55",children:l})]}),e.jsx("p",{className:"mt-2 text-xs leading-relaxed text-foreground/55",children:t})]})}export{E as component};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.