PageSourceSearch

https://app.fintective.ai/assets/Settings-mrOtY-7A.js

js fintective.ai collected 2026-10-05 12:02:46 UTC 26,970 bytes, 2 lines download raw bytes

1import{B as h,j as e,r as g,p as ne,q as re,Q as ie,a4 as V,ay as ce,az as oe,U as le,ae as de,aA as me,aB as ue}from"./react-vendor-DhHiR6oo.js";import{d as ye}from"./router-C-6JOlnF.js";import{B as F,P as xe}from"./PageHeader-DzvcnSI-.js";import{T as he,a as fe,b as Y,c as M}from"./tabs-BfoFNZkM.js";import{b as K,u as k,c as T}from"./query-Dwc0wqew.js";import{a1 as pe,C as b,a2 as R,a3 as O,a4 as $,a as v,F as W,a5 as ge,u as je,a6 as be,a7 as ve,B as E,a8 as Ne,a9 as _e,aa as we,ab as ke,t as Ce,h as w,ac as ee,ad as Se,ae as Ae,af as Fe,I as Te,ag as De,ah as H,ai as se,aj as Pe,ak as Ee,al as qe,am as Be}from"./index-DMh5MpXc.js";import{C as Ye,a as Me,b as Ie}from"./collapsible-BRzMIGM0.js";import{P as Qe}from"./PaginationBar-Ctu7ufd5.js";import{T as Le,a as Ue,b as te,c as D,d as Ke,e as P}from"./table-5G_XrLNw.js";import"./app-vendor-CZGo0gMC.js";import"./ui-vendor-G2hslWMA.js";import"./recharts-DdfqAV_w.js";import"./backend-clients-DDAZ_8wi.js";(function(){try{var a=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};a.SENTRY_RELEASE={id:"72c723734fb5647bafabbb01efe0deb2a9be2629"};var s=new a.Error().stack;s&&(a._sentryDebugIds=a._sentryDebugIds||{},a._sentryDebugIds[s]="d65c2130-f3aa-4381-aed2-27156bcf524a",a._sentryDebugIdIdentifier="sentry-dbid-d65c2130-f3aa-4381-aed2-27156bcf524a")}catch{}})();function I(a){return a??!1}function J(a){return{canInvoke:(a==null?void 0:a.can_invoke)??!1,canNotify:(a==null?void 0:a.can_notify)??!1}}function Re(){const a=K(),{data:s,isLoading:i,isError:l}=k({queryKey:["notification-preferences"],queryFn:ge}),m=T({mutationFn:t=>pe(t),onMutate:async t=>{await a.cancelQueries({queryKey:["notification-preferences"]});const c=a.getQueryData(["notification-preferences"]);return a.setQueryData(["notification-preferences"],r=>r&&{...r,...t}),{previous:c}},onSuccess:()=>{h.success("Notification preferences saved"),a.invalidateQueries({queryKey:["notification-preferences"]}),a.invalidateQueries({queryKey:["dashboard-summary"]})},onError:(t,c,r)=>{r!=null&&r.previous&&a.setQueryData(["notification-preferences"],r.previous),h.error(t instanceof Error?t.message:"Failed to save notification preferences")}}),x=[{label:"New findings",desc:"Get notified when new clues are detected",key:"new_findings",value:I(s==null?void 0:s.new_findings),c
1omingSoon:!1},{label:"Weekly digest",desc:"Receive a weekly summary of your finances",key:"weekly_digest",value:I(s==null?void 0:s.weekly_digest),comingSoon:!1},{label:"Product updates",desc:"Product news and new feature announcements",key:"product_updates",value:I(s==null?void 0:s.product_updates),comingSoon:!1},{label:"Weekly AI summary",desc:"Receive an AI-generated weekly summary",key:"weekly_ai_summary",value:I(s==null?void 0:s.weekly_ai_summary),comingSoon:!0},{label:"Monthly AI summary",desc:"Receive an AI-generated monthly summary",key:"monthly_ai_summary",value:I(s==null?void 0:s.monthly_ai_summary),comingSoon:!0}],d=(t,c)=>{s&&m.mutate({new_findings:t==="new_findings"?c:s.new_findings,weekly_digest:t==="weekly_digest"?c:s.weekly_digest,weekly_ai_summary:t==="weekly_ai_summary"?c:s.weekly_ai_summary,monthly_ai_summary:t==="monthly_ai_summary"?c:s.monthly_ai_summary,summary_timezone:s.summary_timezone||"UTC",summary_weekday:s.summary_weekday||"Monday",summary_time:s.summary_time||"08:30",product_updates:t==="product_updates"?c:s.product_updates})},y=t=>{s&&m.mutate({new_findings:s.new_findings,weekly_digest:s.weekly_digest,weekly_ai_summary:s.weekly_ai_summary,monthly_ai_summary:s.monthly_ai_summary,summary_timezone:t.summary_timezone??s.summary_timezone??"UTC",summary_weekday:t.summary_weekday??s.summary_weekday??"Monday",summary_time:t.summary_time??s.summary_time??"08:30",product_updates:s.product_updates})};return e.jsx("div",{className:"space-y-4",children:e.jsxs(b,{children:[e.jsxs(R,{children:[e.jsx(O,{children:"Email Notifications"}),e.jsx($,{children:"Choose which updates you want to receive"})]}),e.jsxs(v,{className:"space-y-4",children:[i&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading notification preferences..."}),l&&e.jsx("p",{className:"text-sm text-destructive",children:"Failed to load notification preferences."}),x.map(t=>e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("p",{className:"text-sm font-medium",children:t.label}),t.comingSoon&&e.jsx(F,{variant:"secondary",className:"text-[10px] font-medium uppercase tracking-wide",children:"Coming soon"})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t.desc})]}),e.jsx(W,{checked:t.value,disabled:i||l,onCheckedChange:c=>d(t.key,c)})]},t.label)),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3 pt-2",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-1",children:"Time zone"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",value:(s==null?void 0:s.summary_timezone)||"UTC",disabled:i||l,onChange:t=>y({summary_timezone:t.target.value}),children:[e.jsx("option",{value:"UTC",children:"UTC"}
1),e.jsx("option",{value:"America/New_York",children:"America/New_York"}),e.jsx("option",{value:"Europe/London",children:"Europe/London"}),e.jsx("option",{value:"Asia/Tokyo",children:"Asia/Tokyo"})]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-1",children:"Day"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",value:(s==null?void 0:s.summary_weekday)||"Monday",disabled:i||l,onChange:t=>y({summary_weekday:t.target.value}),children:[e.jsx("option",{value:"Sunday",children:"Sunday"}),e.jsx("option",{value:"Monday",children:"Monday"})]})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium mb-1",children:"Time"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2 text-sm",value:(s==null?void 0:s.summary_time)||"08:30",disabled:i||l,onChange:t=>y({summary_time:t.target.value||"08:30"}),children:[e.jsx("option",{value:"08:00",children:"08:00"}),e.jsx("option",{value:"08:30",children:"08:30"}),e.jsx("option",{value:"09:00",children:"09:00"}),e.jsx("option",{value:"09:30",children:"09:30"}),e.jsx("option",{value:"10:00",children:"10:00"}),e.jsx("option",{value:"10:30",children:"10:30"})]})]})]})]})]})})}function Oe(a){if(!a)return null;const s=a.trim().toLowerCase();if(s==="@daily")return"Daily";if(s==="@weekly")return"Weekly";if(s==="@monthly")return"Monthly";if(s==="@hourly")return"Hourly";const i=s.split(/\s+/);if(i.length===5){const[l,m,,,x]=i;if(x!=="*")return"Weekly";if(l!=="*"&&m!=="*")return"Daily"}return a}function $e({d:a,prefs:s,onToggle:i}){const l=s==null?void 0:s[a.id],{canInvoke:m,canNotify:x}=J(l),d=a.notify_locked===!0,y=!m||d;return e.jsxs("div",{className:"flex items-start justify-between gap-4 py-3 border-b border-border/50 last:border-0",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"text-sm font-medium",children:a.name||a.id}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5 line-clamp-2",children:a.description||""}),a.schedule&&e.jsxs("span",{className:"inline-flex items-center gap-1 text-xs text-muted-foreground/60 mt-1",children:[e.jsx(ie,{className:"h-3 w-3"}),Oe(a.schedule)]})]}),e.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[e.jsx(F,{variant:"outline",className:"text-xs",children:a.tier||"-"}),e.jsxs("label",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(W,{checked:m,onCheckedChange:t=>i({detector_id:a.id,can_invoke:t,can_notify:t&&!d?x:!1})}),"Run"]}),!d&&e.jsxs("label",{className:`flex items-center gap-1.5 text-xs text-muted-foreground ${y?"o
1pacity-40":""}`,children:[e.jsx(W,{checked:x&&m&&!d,disabled:y,onCheckedChange:t=>i({detector_id:a.id,can_invoke:m,can_notify:t})}),"Notify"]})]})]})}function ze({group:a,prefs:s,onToggle:i,onEnableAll:l}){const[m,x]=g.useState(!1),d=a.detectors.every(t=>{const c=s==null?void 0:s[t.id],{canInvoke:r,canNotify:p}=J(c);return!(!r||!t.notify_locked&&!p)}),y=a.detectors.filter(t=>{const c=s==null?void 0:s[t.id],{canInvoke:r}=J(c);return r}).length;return e.jsx(Ye,{open:m,onOpenChange:x,children:e.jsxs(b,{className:"animate-fade-in",children:[e.jsx(R,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Me,{asChild:!0,children:e.jsxs("button",{className:"flex items-center gap-2 text-left flex-1 min-w-0 hover:opacity-80 transition-opacity",children:[m?e.jsx(ne,{className:"h-4 w-4 shrink-0 text-muted-foreground"}):e.jsx(re,{className:"h-4 w-4 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx(O,{className:"text-base",children:a.group_name}),e.jsx($,{className:"mt-0.5 text-xs",children:a.group_description})]})]})}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[e.jsxs(F,{variant:"secondary",className:`text-xs ${d?"bg-success/15 text-success border-success/30":"bg-destructive/15 text-destructive border-destructive/30"}`,children:[y,"/",a.detectors.length," on"]}),e.jsx(E,{size:"sm",variant:"outline",className:"text-xs h-7 px-2",onClick:t=>{t.stopPropagation(),l(a.detectors,d)},children:"Enable All"})]})]})}),e.jsx(Ie,{children:e.jsx(v,{className:"pt-0",children:a.detectors.map(t=>e.jsx($e,{d:t,prefs:s,onToggle:i},t.id))})})]})})}function Ge(){const{agencyContext:a}=je(),s=K(),{data:i,isLoading:l}=k({queryKey:["grouped-detectors"],queryFn:Ne}),{data:m}=k({queryKey:["detector-prefs"],queryFn:_e}),x=T({mutationFn:t=>be(t.detector_id,t.can_invoke,t.can_notify),onMutate:async t=>{await s.cancelQueries({queryKey:["detector-prefs"]});const c=s.getQueryData(["detector-prefs"]);return s.setQueryData(["detector-prefs"],r=>r&&{...r,[t.detector_id]:{...r[t.detector_id],can_invoke:t.can_invoke,can_notify:t.can_notify}}),{previous:c}},onSuccess:()=>{s.invalidateQueries({queryKey:["detector-prefs"]}),s.invalidateQueries({queryKey:["dashboard-summary"]})},onError:(t,c,r)=>{r!=null&&r.previous&&s.setQueryData(["detector-prefs"],r.previous),h.error(t instanceof Error?t.message:"Failed to update preference")}}),d=T({mutationFn:t=>ve(t),onMutate:async t=>{await s.cancelQueries({queryKey:["detector-prefs"]});const c=s.getQueryData(["detector-prefs"]);return s.setQueryData(["detector-prefs"],r=>{const p={...r??{}};for(const N of t)p[N.detector_id]={...p[N.detector_id],can_invoke:N.can_invoke,can_notify:N.can_notify};return p}),{previous:c}},onSuccess:()=>{h.success("All detectors enabled"),s.invalidateQueries({queryKey:["detector-prefs"]}),s.invalidateQueries({queryKey:["dashboard-summary"]})},onError:(t,c,r)=>{r!=null&&r.previous&&s.setQueryData(["detector-prefs"],r.previous),h.error(t instanceof Error?t.message:"Failed to enable detectors")}}),y=(t,c)=>{if(c){h.info("All detectors in this group are already enabled");return}d.mutate(t.map(r=>({detector_id:r.id,can_invoke:!0,can_notify:r.notify_locked!==!0})))};return e.jsxs("div",{className:"space-y-3",children:[l&&e.jsx(b,{children:e.jsx(v,{className:"py-10 text-sm text-muted-foreground",children:"Loading detectors..."})}),(i??[]).map(t=>e.jsx(ze,{group:t,prefs:m,onToggle:c=>x.mutate(c),onEnableAll:y},t.group_key)),!l&&(i??[]).length===0&&e.jsx(b,{children:e.jsx(v,{className:"py-10 text-sm text-muted-foreground",children:"No enabled detectors available."})})]})}function He({refreshHint:a}){var X,Z;const s=K(),[i,l]=g.useState("all"),[m,x]=g.useState(0),d=10,{data:y,isLoading:t,isError:c}=k({queryKey:["ynab-status"],queryFn:Se});g.useEffect(()=>{a&&(s.invalidateQueries({queryKey:["ynab-status"]}),s.invalidateQueries({queryKey:["ynab-default-plan"]}))},[a,s]);const r=T({mutationFn:we,onSuccess:o=>{window.location.href=o},onError:()=>{h.error("Failed to start YNAB OAuth")}}),p=T({mutationFn:ke,onSuccess:()=>{h.success("YNAB disconnected"),s.invalidateQueries({queryKey:["
1ynab-status"]})},onError:()=>{h.error("Failed to disconnect YNAB")}}),N=T({mutationFn:Ce,onMutate:()=>{h.success(w.TOAST_YNAB_SYNC_SENT)},onSuccess:o=>{(o==null?void 0:o.status)==="in_progress"?h.info(w.TOAST_YNAB_SYNC_IN_PROGRESS):(o==null?void 0:o.status)==="running"?h.info(w.TOAST_YNAB_SYNC_RUNNING):h.success(w.TOAST_YNAB_SYNC_COMPLETED),s.invalidateQueries({queryKey:["ynab-sync-logs"]})},onError:o=>{h.error(o instanceof Error?o.message:w.TOAST_YNAB_SYNC_FAILED)}}),f=(y==null?void 0:y.connected)??!1,{data:C}=k({queryKey:["ynab-default-plan",f],queryFn:Ae,enabled:f}),z=f?((X=C==null?void 0:C.default_plan)==null?void 0:X.name)||"Not selected":"-",Q=!!((Z=C==null?void 0:C.default_plan)!=null&&Z.id),L=y!=null&&y.last_synced_at?ee(y.last_synced_at):"Never",{data:n}=k({queryKey:["ynab-sync-logs",f],queryFn:()=>Fe(25),enabled:f}),u=t?"Checking":c?"Unknown":f?"Connected":"Disconnected",S=t||c?"secondary":f?"default":"destructive",_=(n==null?void 0:n.logs)||[],j=_.filter(o=>i==="all"?!0:o.sync_status===i),q=Math.max(1,Math.ceil(j.length/d)),B=Math.min(m,q-1),U=j.slice(B*d,B*d+d),A=o=>{const G=o||"";return G.length<=4?G:`${G.slice(0,4)}...`},ae=async o=>{try{await navigator.clipboard.writeText(o),h.success("Run ID copied")}catch{h.error("Failed to copy Run ID")}};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs(b,{className:"overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-3 bg-muted/40 px-6 py-4 border-b",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10",children:e.jsx(V,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"text-base font-semibold",children:"YNAB"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"OAuth 2.0 · Secure token-based connection"})]}),e.jsx("img",{src:"https://api.ynab.com/papi/works_with_ynab.svg",alt:"Works with YNAB",className:"h-8"}),e.jsx(F,{variant:S,className:"text-xs",children:u})]}),e.jsxs(v,{className:"p-6 space-y-4",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Securely connect your YNAB account via OAuth to import categories and transactions. Fintective never stores your YNAB password."}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-1",children:"Selected Plan"}),e.jsx("p",{className:"font-medium",children:z})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-muted-foreground text-xs uppercase tracking-wider mb-1",children:"Last Sync"}),e.jsx("p",{className:"font-medium",children:f?L:"-"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 gap-2 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs(E,{className:"gap-2 w-full sm:w-auto",variant:f?"outline":"default",disabled:r.isPending||p.isPending,onClick:()=>r.mutate(),children:[e.jsx(V,{className:"h-4 w-4"}),f?"Reconnect":w.BTN_CONNECT_YNAB]}),f&&e.jsx(E,{className:"w-full sm:w-auto",variant:"destructive",disabled:p.isPending||r.isPending,onClick:()=>p.mutate(),children:"Disconnect"})]}),e.jsx("div",{className:"sm:justify-self-start",children:f&&Q&&e.jsx(E,{className:"w-full sm:w-auto bg-emerald-600 hover:bg-emerald-700 text-white",disabled:N.isPending||p.isPending||r.isPending,onClick:()=>N.mutate(),children:w.BTN_SYNC})})]})]})]}),f&&e.jsxs(b,{children:[e.jsxs(R,{children:[e.jsx(O,{className:"text-base",children:"Recent YNAB Syncs"}),e.jsx($,{children:"Sync history for your active YNAB plan."})]}),e.jsx(v,{children:_.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"No sync history yet."}):e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"text-sm text-muted-foreground",children:[j.length," runs"]}),e.jsxs("select",{className:"rounded-md border border-input bg-background px-3 py-2 text-sm",value:i,onChange:o=>{l(o.target.value),x(0)},children:[e.jsx("option",{value:"all",children:"All status"}),e.jsx("option",{value:"ok",children:"ok"}),e.jsx("option",{value:"error",children:"error"})]})]}),e.jsx("div",{className:"rounded-lg border border-border overflow-hidden",children:e.jsxs(Le,{children:[e.jsx(Ue,{children:e.jsxs(te,{children:[e.jsx(D,{children:"Plan"}),e.jsx(D,{children:"Date"}),e.jsx(D,{className:"text-right",children:"Tx"}),e.jsx(D,{className:"text-right",children:"Payees"}),e.jsx(D,{children:"Status"}),e.jsx(D,{children:"Id"})]})}),e.jsx(Ke,{children:U.map(o=>e.jsxs(te,{children:[e.jsx(P,{className:"font-medium",children:o.plan_name||o.plan_id}),e.jsx(P,{className:"text-muted-foreground text-sm",children:ee(o.created_at)}),e.jsx(P,{className:"text-right font-mono",children:o.tx_count}),e.jsx(P,{className:"text-right font-mono",children:o.payee_count}),e.jsx(P,{children:e.jsx(F,{variant:o.sync_status==="ok"?"default":"destructive",children:o.sync_status})}),e.jsx(P,{children:e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx("span",{className:"font-mono",children:A(o.id)}),e.jsx("button",{type:"button",className:"rounded p-1 hover:bg-accent",onClick:()=>ae(o.id),"aria-label":"Copy run id",title:"Copy run id",children:e.jsx(ce,{className:"h-3.5 w-3.5"})})]})})]},o.id))})]})}),e.jsx(Qe,{page:B,totalPages:q,onPage:x})]})})]})]})}function Ve(){var l;const{data:a,isLoading:s}=k({queryKey:["family"],queryFn:De}),i=((a==null?void 0:a.members)||[]).find(m=>m.role==="owner");return e.jsx("div",{className:"space-y-6",children:s?e.jsx("div",{className:"flex justify-center p-12",children:e.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-4 border-primary border-t-transparent"})}):e.jsxs("div",{className:"space-y-3",children:[e.jsx("h2",{className:"text-sm font-semibold text-muted-foreground uppercase tracking-wider",children:"Members"}),i&&e.jsx(b,{className:"animate-fade-in",children:e.jsxs(v,{className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-full bg-primary/10 text-primary text-sm font-semibold",children:((l=i.name[0])==null?void 0:l.toUpperCase())||"?"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:i.name}),e.jsx("p",{className:"text-xs text-muted-foreground",children:i.email})]})]}),e.jsx(F,{variant:"default",children:i.role})]})}),e.jsxs("div",{className:"relative mt-6",children:[e.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center",children:e.jsx(F,{className:"bg-muted text-muted-foreground border-border text-sm px-4 py-1.5",children:"Coming Soon"})}),e.jsxs("div",{className:"opacity-30 pointer-events-none space-y-3",children:[e.jsx(b,{children:e.jsx(v,{className:"p-4",children:e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(oe,{className:"absolute left-3 top-3 h-4 w-4 text-muted-foreground"}),e.jsx(Te,{type:"email",placeholder:"Email address to invite",className:"pl-9",disabled:!0})]}),e.jsxs(E,{disabled:!0,className:"gap-2",children:[e.jsx(le,{className:"h-4 w-4"}),w.BTN_INVITE]})]})})}),e.jsx(b,{children:e.jsxs(v,{className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 items-center justify-center rounded-full bg-primary/10 text-primary text-sm font-semibold",children:"?"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:"Family Member"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"[email protected]"})]})]}),e.jsx(F,{variant:"outline",children:"member"})]})})]})]})]})})}function We(){var Q,L;const a=K(),[s,i]=g.useState(()=>H()),[l,m]=g.useState(()=>H()),x=g.useRef(l),{data:d,isLoading:y}=k({queryKey:["formatting-preferences"],queryFn:qe});g.useEffect(()=>{if(!d)return;const n={currency:d.currency,currencyPlacement:d.currency_placement,numberFormat:d.number_format,dateFormat:d.date_format,hideAmounts:d.hide_amounts};se(n),i(n),m(n)},[d]);const{data:t}=k({queryKey:["formatting-supported-currencies"],queryFn:Be}),c=T({mutationFn:n=>Pe({currency:n.currency,currency_placement:n.currencyPlacement,number_format:n.numberFormat,date_format:n.dateFormat,hide_amounts:n.hideAmounts}),onSuccess:n=>{const u={currency:n.currency,currencyPlacement:n.currency_placement,numberFormat:n.number_format,dateFormat:n.date_format,hideAmounts:n.hide_amounts};se(u),m(u),i(u),a.invalidateQueries({queryKey:["formatting-preferences"]}),h.success("Formatting preferences saved")},onError:n=>{h.error(n instanceof Error?n.message:"Failed to save formatting preferences")}});g.useEffect(()=>{x.current=l},[l]),g.useEffect(()=>Ee(()=>{const n=H();m(n),i(u=>JSON.stringify(u)!==JSON.stringify(x.current)?{...u,hideAmounts:n.hideAmounts}:n)}),[]);const r=g.useMemo(()=>JSON.stringify(s)!==JSON.stringify(l),[s,l]),p=(Q=t==null?void 0:t.common)!=null&&Q.length?t.common:[{code:"USD",name:"US Dollar"}],N=(L=t==null?void 0:t.all)!=null&&L.length?t.all:[{code:"USD",name:"US Dollar"}],f=()=>{c.mutate(s)},C=n=>{var U;if(s.hideAmounts)return"*****";
1const u=n/1e3,S=s.numberFormat==="eu"?"de-DE":"en-US",_=new Intl.NumberFormat(S,{style:"currency",currency:s.currency,currencyDisplay:"symbol",minimumFractionDigits:2});if(s.currencyPlacement==="before")return _.format(u);const j=_.formatToParts(u),q=j.filter(A=>A.type!=="currency"&&A.type!=="literal").map(A=>A.value).join(""),B=((U=j.find(A=>A.type==="currency"))==null?void 0:U.value)||s.currency;return s.currencyPlacement==="none"?q:`${q} ${B}`},z=(n,u,S)=>{const _=String(u).padStart(2,"0"),j=String(S).padStart(2,"0");return s.dateFormat==="yyyy_mm_dd"?`${n}-${_}-${j}`:s.dateFormat==="dd_mm_yyyy"?`${j}/${_}/${n}`:s.dateFormat==="mm_dd_yyyy"?`${_}/${j}/${n}`:s.dateFormat==="d_mmm_yyyy"?new Date(n,u-1,S).toLocaleDateString("en-US",{day:"numeric",month:"short",year:"numeric"}):new Date(n,u-1,S).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})};return e.jsx("div",{className:"space-y-4",children:e.jsxs(b,{children:[e.jsxs(R,{children:[e.jsx(O,{children:"Formatting"}),e.jsx($,{children:"Choose how amounts and dates appear across your dashboard."})]}),e.jsxs(v,{className:"space-y-4",children:[y&&e.jsx("p",{className:"text-sm text-muted-foreground",children:"Loading formatting preferences..."}),e.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"space-y-2 text-sm",children:[e.jsx("span",{className:"font-medium",children:"Currency"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2",value:s.currency,onChange:n=>i(u=>({...u,currency:n.target.value})),children:[e.jsx("optgroup",{label:"Common Currencies",children:p.map(n=>e.jsxs("option",{value:n.code,children:[n.name,"-",n.code]},`common-${n.code}`))}),e.jsx("optgroup",{label:"All Currencies",children:N.map(n=>e.jsxs("option",{value:n.code,children:[n.name,"-",n.code]},`all-${n.code}`))})]})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:[e.jsx("span",{className:"font-medium",children:"Currency placement"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2",value:s.currencyPlacement,onChange:n=>i(u=>({...u,currencyPlacement:n.target.value})),children:[e.jsx("option",{value:"before",children:"Before amount ($1,234.56)"}),e.jsx("option",{value:"after",children:"After amount (1,234.56 $)"}),e.jsx("option",{value:"none",children:"Don't show (1,234.56)"})]})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:[e.jsx("span",{className:"font-medium",children:"Number format"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2",value:s.numberFormat,onChange:n=>i(u=>({...u,numberFormat:n.target.value})),children:[e.jsx("option",{value:"us",children:"US (1,234.56)"}),e.jsx("option",{value:"eu",children:"EU (1.234,56)"})]})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:[e.jsx("span",{className:"font-medium",children:"Date format"}),e.jsxs("select",{className:"w-full rounded-md border border-input bg-background px-3 py-2",value:s.dateFormat,onChange:n=>i(u=>({...u,dateFormat:n.target.value})),children:[e.jsx("option",{value:"mmm_d_yyyy",children:"Apr 30, 2026"}),e.jsx("option",{value:"yyyy_mm_dd",children:"2026-04-30"}),e.jsx("option",{value:"dd_mm_yyyy",children:"30/04/2026"}),e.jsx("option",{value:"mm_dd_yyyy",children:"04/30/2026"}),e.jsx("option",{value:"d_mmm_yyyy",children:"30 Apr, 2026"})]})]})]}),e.jsxs("div",{className:"rounded-md border border-border bg-muted/30 p-4",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"Preview"}),e.jsxs("p",{className:"mt-2 text-sm font-medium",children:["Amount: ",C(1234567)]}),e.jsxs("p",{className:"text-sm font-medium",children:["Date: ",z(2026,4,30)]})]}),e.jsx(E,{onClick:f,disabled:!r||c.isPending,children:w.BTN_SAVE})]})]})})}function ds(){const[a,s]=ye(),i=a.get("tab")||"notifications",l=a.get("ynab")==="connected",m=x=>{const d=new URLSearchParams(a);d.set("tab",x),s(d)};return e.jsxs("div",{children:[e.jsx(xe,{title:"Settings",badge:"CONFIG"}),e.jsx("div",{className:"p-6",children:e.jsxs(he,{value:i,onValueChange:m,children:[e.jsxs(fe,{className:"mb-6 grid h-auto grid-cols-2 gap-2 bg-transparent p-0 sm:grid-cols-5",children:[e.jsxs(Y,{value:"notifications",className:"gap-2 rounded-md border border-border bg-card px-3 py-2 data-[state=active]:border-primary data-[state=active]:bg-primary/10",children:[e.jsx(de,{className:"h-3.5 w-3.5"}),"Notifications"]}),e.jsxs(Y,{value:"detectors",className:"gap-2 rounded-md border border-border bg-card px-3 py-2 data-[state=active]:border-primary data-[state=active]:bg-primary/10",children:[e.jsx(me,{className:"h-3.5 w-3.5"}),"Detectors"]}),e.jsxs(Y,{value:"connectors",className:"gap-2 rounded-md border border-border bg-card px-3 py-2 data-[state=active]:border-primary data-[state=active]:bg-primary/10",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),"Connectors"]}),e.jsxs(Y,{value:"family",className:"gap-2 rounded-md border border-border bg-card px-3 py-2 data-[state=active]:border-primary data-[state=active]:bg-primary/10",children:[e.jsx(ue,{className:"h-3.5 w-3.5"}),"Family"]}),e.jsx(Y,{value:"formatting",className:"gap-2 rounded-md border border-border bg-card px-3 py-2 data-[state=active]:border-primary data-[state=active]:bg-primary/10",children:"Formatting"})]}),e.jsx(M,{value:"notifications",children:e.jsx(Re,{})}),e.jsx(M,{value:"detectors",children:e.jsx(Ge,{})}),e.jsx(M,{value:"connectors",children:e.jsx(He,{refreshHint:l})}),e.jsx(M,{value:"family",children:e.jsx(Ve,{})}),e.jsx(M,{value:"formatting",children:e.jsx(We,{})})]})})]})}export{ds as default};
2//# sourceMappingURL=Settings-mrOtY-7A.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.