PageSourceSearch

https://waypointbudget.com/_next/static/chunks/app/contact/page-0c…?dpl=dpl_D9PRytqhu5T7UMhcXCEmyKwAdwgq

js waypointbudget.com collected 2026-09-24 13:40:50 UTC 8,813 bytes, 2 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[90977],{10480:(e,t,s)=>{"use strict";s.d(t,{b:()=>n});var a=s(95155),r=s(25016);function n(e){let{message:t,className:s}=e;return t?(0,a.jsx)("p",{className:(0,r.cn)("text-sm font-medium text-destructive",s),children:t}):null}},14823:()=>{},17664:(e,t,s)=>{Promise.resolve().then(s.t.bind(s,14823,23)),Promise.resolve().then(s.bind(s,89617)),Promise.resolve().then(s.bind(s,92499)),Promise.resolve().then(s.bind(s,80526)),Promise.resolve().then(s.t.bind(s,52619,23)),Promise.resolve().then(s.t.bind(s,81356,23))},33789:(e,t,s)=>{"use strict";s.d(t,{p:()=>i});var a=s(95155),r=s(12115),n=s(25016);let i=r.forwardRef((e,t)=>{let{className:s,type:r,...i}=e;return(0,a.jsx)("input",{type:r,className:(0,n.cn)("flex h-11 sm:h-9 !min-h-0 w-full rounded-md border border-input bg-background px-3 py-2 text-base file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground placeholder:text-sm focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm transition-colors",s),ref:t,...i})});i.displayName="Input"},67001:(e,t,s)=>{"use strict";s.d(t,{T:()=>i});var a=s(95155),r=s(12115),n=s(25016);let i=r.forwardRef((e,t)=>{let{className:s,...r}=e;return(0,a.jsx)("textarea",{className:(0,n.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground placeholder:text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),ref:t,...r})});i.displayName="Textarea"},80526:(e,t,s)=>{"use strict";s.d(t,{default:()=>h});var a=s(95155),r=s(73680),n=s(97003),i=s(6621),l=s(52619),o=s.n(l),m=s(20063),d=s(12115),c=s(90368),u=s(47416);function h(){let{isSignedIn:e}=(0,r.As)(),t=(0,m.useRouter)(),[s,l]=(0,d.useState)(!1);return(0,d.useEffect)(()=>
1{l((0,u.isNativePlatform)())},[]),(0,a.jsx)("nav",{className:"sticky top-0 z-50 border-b bg-background/95 backdrop-blur-sm",style:{paddingTop:"env(safe-area-inset-top, 0px)"},children:(0,a.jsx)("div",{className:"container mx-auto px-4 sm:px-6 py-4",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[s&&(0,a.jsx)("button",{type:"button",onClick:()=>{window.history.length>1?t.back():window.location.assign("/sign-in")},"aria-label":"Back",className:"flex items-center justify-center -ml-2 mr-0.5 h-9 w-9 rounded-full hover:bg-muted active:bg-muted/80 transition-colors flex-shrink-0",children:(0,a.jsx)(c.A,{className:"h-5 w-5"})}),(0,a.jsxs)(o(),{href:"/",className:"flex items-center gap-2 hover:opacity-80 transition-opacity group min-w-0",children:[(0,a.jsx)("img",{src:"/assets/logo-mobile.svg",alt:"Waypoint Budget",className:"w-8 h-8 flex-shrink-0 transition-transform group-hover:scale-105"}),(0,a.jsxs)("span",{className:"font-semibold text-base sm:text-lg leading-tight truncate",style:{letterSpacing:"-0.02em"},children:[(0,a.jsx)("span",{className:"text-primary",children:"Waypoint"})," ",(0,a.jsx)("span",{className:"text-foreground",children:"Budget"})]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 sm:gap-4 flex-shrink-0",children:[(0,a.jsx)(i.A,{}),e?(0,a.jsx)(n.$,{asChild:!0,size:"sm",className:"text-xs sm:text-sm",children:(0,a.jsx)("a",{href:"/dashboard",children:"Dashboard"})}):(0,a.jsx)(n.$,{asChild:!0,size:"sm",className:"text-xs sm:text-sm",children:(0,a.jsx)("a",{href:"/sign-in",children:"Sign in"})})]})]})})})}},89617:(e,t,s)=>{"use strict";s.d(t,{default:()=>g});var a=s(95155),r=s(12115),n=s(52619),i=s.n(n),l=s(97003),o=s(33789),m=s(67001),d=s(10480),c=s(35299),u=s(25016),h=s(15239);function x(e){let{className:t,alt:s="",priority:r=!1}=e;return(0,a.jsx)(h.default,{src:"/assets/founders-illustration.png",alt:s,width:750,height:458,priority:r,className:(0,u.cn)("dark:invert dark:opacity-90",t)})}let f=["Something's broken","Bank won't connect","Feature idea","Billing","Just saying hi"],p={"Something's broken":"What did you expect to happen, and what happened instead?","Bank won't connect":"Which bank, and what did you see on screen? A screenshot helps.","Feature idea":"What would it let you do that you can't today?",Billing:"What are you seeing on your invoice or plan? Include the email on your account.","Just saying hi":"Go on, these are our favourite emails."};function g(){let[e,t]=(0,r.useState)(""),[s,n]=(0,r.useState)(""),[h,g]=(0,r.useState)(""),[b,y]=(0,r.useState)(""),[j,v]=(0,r.useState)(""),[w,N]=(0,r.useState)(!1),[k,S]=(0,r.useState)(!1),[C,B]=(0,r.useState)(""),[P,E]=(0,r.useState)(null),F=async t=>{if(t.preventDefault(),e.trim()&&s.trim()&&h.trim()&&b.trim()){if(!/^\S+@\S+\.\S+$/.test(s.trim()))return void E("Enter a valid email address");E(null),N(!0),B("");try{let t=await fetch("/api/contact",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:e.trim(),email:s.trim(),subject:h.trim(),message:b.trim(),website:j.trim()})});if(!t.ok){let e=await t.json();throw Error(e.error||"Something went wrong.")}S(!0)}catch(e){B(e instanceof Error?e.message:"Something went wrong. Please try again.")}finally{N(!1)}}};if(k)return(0,a.jsxs)("div",{className:"flex-1 flex flex-col justify-center items-center text-center py-6",children:[(0,a.jsx)(x,{className:"w-[160px] sm:w-[180px] h-auto"}),(0,a.jsx)("h3",{className:"text-lg font-semibold mt-4 mb-2",children:"Got it."}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground max-w-sm",children:"One of us will reply from a real inbox, usually today."}),(0,a.jsx)(i(),{href:"/whats-new",className:"mt-5 text-sm text-primary underline underline-offset-4 hover:text-primary/80 transition-colors",children:"See what we shipped recently"})]});let T=f.includes(h)?p[h]:"Bug, idea, confusing screen, or just saying hi. All welcome.";return(0,a.jsxs)("form",{onSubmit:F,noValidate:!0,className:"flex-1 flex flex-col space-y-4",children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{htmlFor:"name",className:"text-sm font-medium mb-1.5 block",children:"Name"}
1),(0,a.jsx)(o.p,{id:"name",value:e,onChange:e=>t(e.target.value),placeholder:"Your name",maxLength:100})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{htmlFor:"email",className:"text-sm font-medium mb-1.5 block",children:"Email"}),(0,a.jsx)(o.p,{id:"email",type:"email",value:s,onChange:e=>{n(e.target.value),P&&E(null)},placeholder:"[email protected]",maxLength:255}),(0,a.jsx)(d.b,{message:P,className:"mt-1.5"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{htmlFor:"subject",className:"text-sm font-medium mb-1.5 block",children:"What's this about?"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2 mb-2.5",role:"group","aria-label":"Common subjects",children:f.map(e=>{let t=h===e;return(0,a.jsx)("button",{type:"button",onClick:()=>g(t?"":e),"aria-pressed":t,className:(0,u.cn)("inline-flex items-center rounded-full border px-3.5 py-1.5 text-sm whitespace-nowrap select-none !min-h-11 sm:!min-h-0","transition-[background-color,border-color,color,transform] duration-150 active:scale-[0.97]","focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30",t?"border-primary bg-primary text-primary-foreground font-medium shadow-sm":"border-border bg-background text-foreground hover-elevate"),children:e},e)})}),(0,a.jsx)(o.p,{id:"subject",value:h,onChange:e=>g(e.target.value),placeholder:"Or type your own subject",maxLength:200})]}),(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsx)("label",{htmlFor:"message",className:"text-sm font-medium mb-1.5 block",children:"Message"}),(0,a.jsx)(m.T,{id:"message",value:b,onChange:e=>y(e.target.value),placeholder:T,maxLength:5e3,rows:5,className:"flex-1 rounded-lg resize-none"}),"Bank won't connect"===h&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground mt-1.5",children:"Tell us which bank and what you saw. It saves a round trip."})]}),(0,a.jsx)("div",{className:"absolute -left-[9999px]","aria-hidden":"true",children:(0,a.jsx)("input",{type:"text",name:"website",tabIndex:-1,autoComplete:"off",value:j,onChange:e=>v(e.target.value)})}),(0,a.jsx)(d.b,{message:C}),(0,a.jsx)(l.$,{type:"submit",className:"w-full sm:w-auto sm:self-start",disabled:w||!e.trim()||!s.trim()||!h.trim()||!b.trim(),children:w?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.A,{className:"w-4 h-4 mr-2 animate-spin"}),"Sending..."]}):"Send Message"})]})}}},e=>{e.O(0,[27556,8229,66711,69779,86814,73680,71157,81356,65485,64986,92499,28441,53636,77358],()=>e(e.s=17664)),_N_E=e.O()}]);
2//# sourceMappingURL=page-0c19f04bd05180c7.js.map

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.