@remit/web-client-dist 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/ComposeBody-aBxSwMFx.js +26 -0
- package/assets/ErrorState-CWz3ZzTM.js +1 -0
- package/assets/OnboardingWizard-BhFl4gCX.js +1 -0
- package/assets/_mailboxId-DtqBFgK5.js +1 -0
- package/assets/account-form-helpers-CTpj2uLI.js +1 -0
- package/assets/accounts-BvhEwfb2.js +1 -0
- package/assets/advanced-BDJxTH_n.js +1 -0
- package/assets/appearance-CHdDWkw_.js +1 -0
- package/assets/avatar-oY_wEvtv.js +1 -0
- package/assets/browser-ponyfill-CMFDlVql.js +2 -0
- package/assets/filter-status-CeQbzi2r.js +1 -0
- package/assets/filters-DKRKo0z8.js +1 -0
- package/assets/flagged-DFXdbkZA.js +1 -0
- package/assets/flagged-DtqBFgK5.js +1 -0
- package/assets/folder-roles-XnseeyyD.js +1 -0
- package/assets/folders-hQiLV99A.js +1 -0
- package/assets/format-BGdB831k.js +1 -0
- package/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/assets/hanken-grotesk-latin-ext-wght-normal-Dg-wlmqe.woff2 +0 -0
- package/assets/hanken-grotesk-latin-wght-normal-CaVRRdDk.woff2 +0 -0
- package/assets/hanken-grotesk-vietnamese-wght-normal-CHiFlh_0.woff2 +0 -0
- package/assets/index-BFeuoxPt.js +295 -0
- package/assets/index-CaeklzBt.js +1 -0
- package/assets/index-Czg1CqQC.js +1 -0
- package/assets/index-DEJQ3OJJ.css +1 -0
- package/assets/index-DtqBFgK5.js +1 -0
- package/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/assets/kbd-CDpzhkUB.js +1 -0
- package/assets/mail-C6GmqBz5.js +112 -0
- package/assets/onboarding-Cb5vjmx8.js +1 -0
- package/assets/outbox-DtqBFgK5.js +1 -0
- package/assets/select-B4IMFiui.js +1 -0
- package/assets/send-DhbTNeod.js +1 -0
- package/assets/senders-lAfIRRB4.js +1 -0
- package/assets/settings-Kmq-_D_z.js +1 -0
- package/assets/settings-screen-DEw1vClH.js +1 -0
- package/assets/star-CkFv0GXu.js +1 -0
- package/assets/suggested-vips-CsZI5xE4.js +1 -0
- package/assets/trash-2-WJQWAcqb.js +1 -0
- package/assets/useDebouncedValue-fj6OyJrO.js +1 -0
- package/assets/useMutation-iXt4Qkuv.js +1 -0
- package/assets/useSignature-DoTk6mQO.js +1 -0
- package/config.js +5 -0
- package/index.html +48 -0
- package/locales/de/common.json +1 -0
- package/locales/de/errors.json +1 -0
- package/locales/de/mail.json +13 -0
- package/locales/de/settings.json +1 -0
- package/locales/en/common.json +26 -0
- package/locales/en/errors.json +1 -0
- package/locales/en/mail.json +69 -0
- package/locales/en/settings.json +1 -0
- package/locales/fr/common.json +1 -0
- package/locales/fr/errors.json +1 -0
- package/locales/fr/mail.json +13 -0
- package/locales/fr/settings.json +1 -0
- package/locales/nl/common.json +1 -0
- package/locales/nl/errors.json +1 -0
- package/locales/nl/mail.json +13 -0
- package/locales/nl/settings.json +1 -0
- package/package.json +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{b1 as r,W as a,Z as i,u as s,d as c,t as m}from"./index-BFeuoxPt.js";import{O as l}from"./OnboardingWizard-BhFl4gCX.js";import"./kbd-CDpzhkUB.js";import"./select-B4IMFiui.js";import"./useMutation-iXt4Qkuv.js";import"./account-form-helpers-CTpj2uLI.js";async function p(e){e.recordCompleted(),await e.queryClient.refetchQueries({queryKey:r()}),e.navigateToInbox()}function v(){const e=a(),o=i(),t=s(),n=c.useCallback(u=>{p({queryClient:t,recordCompleted:()=>o.recordEvent("onboarding.completed"),navigateToInbox:()=>{e({to:"/mail"})}})},[e,o,t]);return m.jsx(l,{skipWelcome:!1,onComplete:n})}export{v as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const n=()=>null;export{n as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as a,t as e,C as i,z as o}from"./index-BFeuoxPt.js";const l=a("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);function u({icon:s,className:n,children:t,...r}){return e.jsxs("div",{className:o("relative flex h-9 items-center gap-2 rounded-md border border-line bg-surface-sunken pl-3 text-sm","focus-within:border-line-strong focus-within:ring-2 focus-within:ring-ring/30 transition-colors",n),children:[s&&e.jsx("span",{className:"shrink-0 text-fg-subtle",children:s}),e.jsx("select",{className:"min-w-0 flex-1 appearance-none bg-transparent py-0 pr-8 text-fg outline-none",...r,children:t}),e.jsx(i,{className:"pointer-events-none absolute right-2.5 size-4 text-fg-subtle"})]})}export{l as C,u as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as a}from"./index-BFeuoxPt.js";const t=a("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);const h=a("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);const d=a("Folder",[["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]]);const p=a("Mails",[["rect",{width:"16",height:"13",x:"6",y:"4",rx:"2",key:"1drq3f"}],["path",{d:"m22 7-7.1 3.78c-.57.3-1.23.3-1.8 0L6 7",key:"xn252p"}],["path",{d:"M2 8v11c0 1.1.9 2 2 2h14",key:"n13cji"}]]);const y=a("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);export{t as A,d as F,p as M,y as S,h as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e,z as N,W as T,d as c,bf as $,M as L,bg as M,$ as I,bt as O,u as k,bu as q,an as C,B as S,a5 as A,X as R}from"./index-BFeuoxPt.js";import{K as m}from"./kbd-CDpzhkUB.js";import{S as B,a as P}from"./settings-screen-DEw1vClH.js";import{u as E}from"./useMutation-iXt4Qkuv.js";import{E as V}from"./ErrorState-CWz3ZzTM.js";import{S as G,u as Q}from"./useDebouncedValue-fj6OyJrO.js";import{b as K}from"./format-BGdB831k.js";import{S as _}from"./star-CkFv0GXu.js";import"./avatar-oY_wEvtv.js";function D({options:t,active:r,onSelect:x}){return e.jsx("div",{role:"tablist",className:N("flex shrink-0 gap-1 overflow-x-auto border-b border-line p-2","lg:w-44 lg:flex-col lg:gap-0 lg:overflow-visible lg:border-r lg:border-b-0 lg:py-2 lg:pr-2 lg:pl-3"),children:t.map(a=>{const d=a.id===r;return e.jsxs("button",{type:"button",role:"tab","aria-selected":d,onClick:()=>x(a.id),className:N("flex min-h-11 shrink-0 items-center gap-2 rounded-md px-3 text-left text-sm transition-colors lg:min-h-0 lg:px-2 lg:py-1",d?"bg-accent-2-soft font-medium text-accent-2":"text-fg-muted hover:bg-surface-sunken hover:text-fg"),children:[e.jsx("span",{className:"flex-1 truncate",children:a.label}),e.jsx("span",{className:N("text-2xs tabular-nums",d?"text-accent-2":"text-fg-subtle"),children:a.count??"—"})]},a.id)})})}const v={vip:"VIPs",muted:"Muted",blocked:"Blocked"},F=e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-fg",children:"VIP"})," senders get priority surface in the daily brief and notification escalation, even when an account is quiet."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-fg",children:"Muted"})," senders never notify and stay out of the brief. Their mail still syncs and stays searchable."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-fg",children:"Blocked"})," senders never load images and go straight to junk."]}),e.jsxs("p",{children:["Tip: flag from the keyboard on any message — ",e.jsx(m,{children:"v"})," VIP,"," ",e.jsx(m,{children:"m"})," mute, ",e.jsx(m,{children:"b"})," block. Every rule an automation creates shows up here and can be removed."]})]});function H({query:t,onCount:r}){const{data:x,isPending:a,isError:d,error:b}=I(O()),h=k(),i=E({...C(),onSettled:()=>{h.invalidateQueries({queryKey:q()})}}),l=x?.suggestions??[],p=t.trim().toLowerCase(),u=p?l.filter(n=>(n.displayName??"").toLowerCase().includes(p)||n.normalizedEmail.toLowerCase().includes(p)):l;return c.useEffect(()=>{r?.(u.length,l.length)},[r,u.length,l.length]),a?e.jsx("div",{className:"px-row-inset py-3 text-sm text-fg-subtle animate-pulse",children:"Loading VIP suggestions…"}):d?e.jsx("div",{className:"px-row-inset py-3",children:e.jsx(V,{variant:"inline",title:"Couldn't load VIP suggestions",error:b})}):l.length===0?e.jsxs("div",{className:"px-row-inset py-5 text-sm text-fg-subtle",children:["No VIP suggestions yet. As you reply to senders, they'll appear here. Press ",e.jsx(m,{children:"v"})," on any message to promote a sender to VIP."]}):u.length===0?e.jsxs("p",{className:"px-row-inset py-5 text-sm text-fg-subtle",children:["No VIPs match “",t,"”."]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"px-row-inset py-1 text-2xs font-semibold uppercase tracking-wider text-fg-subtle",children:"Suggested — promote to VIP"}),u.map(n=>e.jsx(P,{name:n.displayName??n.normalizedEmail,email:n.normalizedEmail,meta:n.replyCount>0?`${n.inboundCount} received · you replied ${n.replyCount}×`:`${n.inboundCount} received · you've never replied`,trailing:e.jsx(S,{variant:"ghost",size:"sm",icon:e.jsx(_,{className:"size-3.5"}),"aria-busy":i.isPending,onClick:()=>{i.isPending||i.mutate({path:{addressId:n.addressId},body:{flags:{vip:{value:!0,setAt:Date.now(),setBy:"user"}}}})},children:"Add VIP"})},n.addressId))]})}function U({group:t,query:r,onCount:x}){const a=Q(r.trim(),300),d=k(),[b,h]=c.useState(null),i=a.length>=2,l=A({query:{q:a,limit:50}}),{data:p,isPending:u,isError:n,error:j}=I({...l,enabled:i}),g=E({...C(),onSuccess:()=>{d.invalidateQueries({queryKey:l.queryKey})}}),f=(p?.items??[]).filter(s=>t==="muted"?s.flags?.muted?.value??!1:s.flags?.blocked?.value??!1);return c.useEffect(()=>{x?.(i?f.length:0,null)},[x,i,f.length]),i?u?e.jsx("div",{className:"px-row-inset py-3 text-sm text-fg-subtle animate-pulse",children:"Searching…"}):n?e.jsx("div",{className:"px-row-inset py-3",children:e.jsx(V,{variant:"inline",title:"Search failed",error:j})}):f.length===0?e.jsxs("p",{className:"px-row-inset py-5 text-sm text-fg-subtle",children:["No ",v[t].toLowerCase()," senders matching “",a,"”."]}):e.jsx(e.Fragment,{children:f.map(s=>{const o=t==="muted"?s.flags?.muted:s.flags?.blocked,y=o?[`${t}`,o.setAt&&K(o.setAt,{month:"short",year:"numeric"})||null,o.reason?`— ${o.reason}`:null].filter(Boolean).join(" "):t,w=g.isPending&&g.variables?.path.addressId===s.addressId,z=g.isError&&b===s.addressId;return e.jsx(P,{name:s.displayName??s.normalizedEmail,email:s.normalizedEmail,danger:t==="blocked",meta:y,trailing:z?e.jsx(S,{variant:"secondary",size:"sm",onClick:()=>{h(s.addressId),g.mutate({path:{addressId:s.addressId},body:{flags:{[t]:null}}})},children:"Retry"}):e.jsx(S,{variant:"ghost",size:"sm",icon:e.jsx(R,{className:"size-3.5"}),"aria-busy":w,"aria-label":`Remove ${t} flag`,onClick:()=>{w||(h(s.addressId),g.mutate({path:{addressId:s.addressId},body:{flags:{[t]:null}}}))}})},s.addressId)})}):e.jsxs("div",{className:"px-row-inset py-5 text-sm text-fg-subtle space-y-2",children:[e.jsxs("p",{children:["Type 2+ characters to search ",v[t].toLowerCase()," ","senders by name or address."]}),e.jsxs("p",{className:"text-2xs text-fg-subtle",children:["Note: a dedicated flagged-address list endpoint is in the backlog. Press ",e.jsx(m,{children:"m"})," on any message to mute its sender; ",e.jsx(m,{children:"b"})," to block."]})]})}function ae(){const t=T(),[r,x]=c.useState("vip"),[a,d]=c.useState(""),[b,h]=c.useState(!0),[i,l]=c.useState(0),[p,u]=c.useState({vip:0,muted:null,blocked:null}),n=c.useCallback((s,o)=>{l(s),u(y=>({...y,vip:o}))},[]),j=c.useCallback((s,o)=>{l(s),u(y=>({...y,[r]:s}))},[r]),g=p[r],f=s=>{const o=M[s];o&&t({to:o})};return e.jsx(B,{items:$,activeId:"senders",title:"Senders & Rules",description:"Per-sender preferences — set with one key from any message, managed here.",flush:!0,help:F,helpOpen:b,onToggleHelp:()=>h(s=>!s),onSelect:f,onBackToMail:()=>{t({to:"/mail"})},children:e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col lg:flex-row",children:[e.jsx(D,{active:r,onSelect:s=>{x(s),d("")},options:["vip","muted","blocked"].map(s=>({id:s,label:v[s],count:p[s]}))}),e.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[e.jsx("div",{className:"border-b border-line px-row-inset py-2",children:e.jsx(L,{icon:e.jsx(G,{className:"size-4"}),placeholder:`Filter ${v[r].toLowerCase()} by name or address`,className:"h-8 max-w-sm",value:a,onChange:s=>d(s.target.value)})}),e.jsx("div",{className:"min-h-0 flex-1 divide-y divide-line overflow-y-auto",children:r==="vip"?e.jsx(H,{query:a,onCount:n}):e.jsx(U,{group:r,query:a,onCount:j})}),e.jsxs("footer",{className:"flex items-center justify-between border-t border-line px-row-inset py-1 text-2xs text-fg-subtle",children:[e.jsx("span",{children:g!=null?`${i} of ${g} flagged senders`:`${i} flagged senders`}),e.jsxs("span",{children:[e.jsx(m,{children:"j"})," ",e.jsx(m,{children:"k"})," navigate · ",e.jsx(m,{children:"⌫"})," remove flag"]})]})]})]})})}export{ae as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t,b0 as o}from"./index-BFeuoxPt.js";const n=()=>t.jsx(o,{});export{n as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as z,d as g,t as e,z as m,B as x,X as j,A as S}from"./index-BFeuoxPt.js";import{M as B,C as N,A as w}from"./avatar-oY_wEvtv.js";const v=z("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);function L({items:l,activeId:t,title:i,description:n,children:r,help:s,helpOpen:d=!0,flush:o,onSelect:k,onToggleHelp:f,onBackToMail:h}){const[y,c]=g.useState(!1),[u,C]=g.useState(!1),b=!!s&&d,p=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"px-3 pt-3 pb-1 text-2xs font-semibold uppercase tracking-wider text-fg-subtle",children:"Settings"}),e.jsx("nav",{className:"flex-1 overflow-y-auto px-2 py-1",children:l.map(a=>e.jsxs("button",{type:"button",onClick:()=>{k?.(a.id),c(!1)},className:m("flex min-h-11 w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm transition-colors lg:min-h-0",a.id===t?"bg-accent-2-soft font-medium text-accent-2":"text-fg-muted hover:bg-surface hover:text-fg"),children:[a.icon&&e.jsx("span",{className:m("shrink-0",a.id===t?"text-accent-2":"text-fg-subtle"),children:a.icon}),a.label]},a.id))})]});return e.jsxs("div",{className:"flex h-dvh w-full overflow-hidden bg-canvas font-sans text-fg",children:[e.jsxs("aside",{className:"hidden w-60 shrink-0 flex-col border-r border-line bg-surface-sunken lg:flex",children:[e.jsx("div",{className:"flex h-pane-header shrink-0 items-center border-b border-line px-2",children:e.jsxs("button",{type:"button",onClick:h,className:"flex w-full items-center gap-2 rounded-md px-2 py-1 text-left text-sm text-fg-muted hover:bg-surface hover:text-fg",children:[e.jsx(v,{className:"size-4 text-fg-subtle"}),"Back to mail"]})}),p]}),y&&e.jsxs("div",{className:"fixed inset-0 z-50 flex lg:hidden",children:[e.jsx("button",{type:"button","aria-label":"Close menu",className:"absolute inset-0 bg-canvas/60",onClick:()=>c(!1)}),e.jsxs("aside",{className:"relative flex w-72 max-w-[85%] flex-col border-r border-line bg-surface-sunken",children:[e.jsxs("div",{className:"flex h-pane-header shrink-0 items-center justify-between border-b border-line px-2",children:[e.jsxs("button",{type:"button",onClick:()=>{h?.(),c(!1)},className:"flex items-center gap-2 rounded-md px-2 py-1 text-left text-sm text-fg-muted hover:bg-surface hover:text-fg",children:[e.jsx(v,{className:"size-4 text-fg-subtle"}),"Back to mail"]}),e.jsx(x,{variant:"ghost",size:"sm",icon:e.jsx(j,{className:"size-4"}),onClick:()=>c(!1),"aria-label":"Close menu"})]}),p]})]}),e.jsxs("main",{className:"flex min-w-0 flex-1 flex-col",children:[e.jsxs("header",{className:"flex h-pane-header shrink-0 items-center gap-3 border-b border-line px-3 lg:px-5",children:[e.jsx(x,{variant:"ghost",size:"sm",icon:e.jsx(B,{className:"size-4"}),className:"lg:hidden",onClick:()=>c(!0),"aria-label":"Open settings menu"}),e.jsx("h1",{className:"text-md font-semibold text-fg",children:i}),n&&e.jsx("p",{className:"hidden min-w-0 truncate text-xs text-fg-subtle lg:block",children:n}),s&&e.jsx(x,{variant:"ghost",size:"sm",icon:e.jsx(N,{className:"size-4"}),className:"ml-auto lg:hidden",onClick:()=>C(a=>!a),"aria-label":"Tips","aria-expanded":u}),s&&!b&&e.jsx(x,{variant:"ghost",size:"sm",icon:e.jsx(N,{className:"size-4"}),className:"hidden ml-auto lg:inline-flex",onClick:f,"aria-label":"Show tips"})]}),s&&u&&e.jsx("div",{className:"border-b border-line bg-surface-sunken px-row-inset py-3 text-xs leading-relaxed text-fg-muted lg:hidden",children:s}),o?e.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:r}):e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto",children:e.jsx("div",{className:"max-w-2xl px-3 py-5 lg:px-5",children:e.jsx("div",{className:"space-y-5",children:r})})})]}),b&&e.jsxs("aside",{className:"hidden w-64 shrink-0 flex-col border-l border-line bg-surface-sunken lg:flex",children:[e.jsxs("header",{className:"flex h-pane-header shrink-0 items-center justify-between border-b border-line px-row-inset",children:[e.jsx("span",{className:"text-2xs font-semibold uppercase tracking-wider text-fg-subtle",children:"Tips & tricks"}),e.jsx(x,{variant:"ghost",size:"sm",icon:e.jsx(j,{className:"size-3.5"}),onClick:f,"aria-label":"Collapse tips"})]}),e.jsx("div",{className:"flex-1 overflow-y-auto px-row-inset py-3 text-xs leading-relaxed text-fg-muted",children:s})]})]})}function E({name:l,email:t,meta:i,caption:n,danger:r,trailing:s}){return e.jsxs("div",{className:"flex items-center gap-3 px-row-inset py-2 hover:bg-surface-sunken",children:[e.jsx("span",{className:m(r&&"rounded-full ring-2 ring-danger/40"),children:e.jsx(w,{name:l,email:t,size:"sm"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-col gap-0 sm:flex-row sm:items-baseline sm:gap-2",children:[e.jsx("span",{className:"truncate text-sm font-medium text-fg",children:l}),e.jsx("span",{className:"truncate text-2xs text-fg-subtle",children:t})]}),e.jsxs("div",{className:"text-xs text-fg-subtle",children:[i,n&&e.jsxs("span",{className:"text-fg-muted",children:[" · ",n]})]})]}),s&&e.jsx("div",{className:"shrink-0",children:s})]})}const A={healthy:{tone:"positive",label:"healthy"},error:{tone:"danger",label:"error"},muted:{tone:"neutral",label:"muted"}};function F({label:l,email:t,connector:i,syncLabel:n,state:r,errorDetail:s,trailing:d}){const o=A[r];return e.jsxs("div",{className:m("rounded-sm border border-line bg-surface",r==="muted"&&"opacity-65"),children:[e.jsxs("div",{className:"flex flex-col gap-3 px-row-inset py-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx(w,{name:l,email:t,size:"md"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"truncate text-sm font-semibold text-fg",children:l}),e.jsx(S,{tone:o.tone,dot:!0,children:o.label})]}),e.jsxs("div",{className:"truncate text-xs text-fg-subtle",children:[t," · ",i," · ",n]})]})]}),d&&e.jsx("div",{className:"shrink-0",children:d})]}),s&&e.jsx("div",{className:"border-t border-line px-row-inset py-2",children:e.jsx("code",{className:"block rounded-xs bg-danger-soft px-2 py-1 text-2xs text-danger",children:s})})]})}export{F as A,L as S,E as a};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as a}from"./index-BFeuoxPt.js";const r=a("Star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]]);export{r as S};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t,b2 as e}from"./index-BFeuoxPt.js";const o=()=>t.jsx(e,{to:"/settings/senders",replace:!0});export{o as component};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as e}from"./index-BFeuoxPt.js";const a=e("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);export{a as T};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as u,d as c}from"./index-BFeuoxPt.js";const n=u("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]),i=(e,t)=>{const[r,o]=c.useState(e);return c.useEffect(()=>{const s=setTimeout(()=>o(e),t);return()=>clearTimeout(s)},[e,t]),r};export{n as S,i as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{S as l,s as d,bv as a,bw as b,n as h,u as p,d as o,i as m,bx as v}from"./index-BFeuoxPt.js";var y=class extends l{#s;#i=void 0;#t;#e;constructor(t,s){super(),this.#s=t,this.setOptions(s),this.bindMethods(),this.#r()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){const s=this.options;this.options=this.#s.defaultMutationOptions(t),d(this.options,s)||this.#s.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#t,observer:this}),s?.mutationKey&&this.options.mutationKey&&a(s.mutationKey)!==a(this.options.mutationKey)?this.reset():this.#t?.state.status==="pending"&&this.#t.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#t?.removeObserver(this)}onMutationUpdate(t){this.#r(),this.#o(t)}getCurrentResult(){return this.#i}reset(){this.#t?.removeObserver(this),this.#t=void 0,this.#r(),this.#o()}mutate(t,s){return this.#e=s,this.#t?.removeObserver(this),this.#t=this.#s.getMutationCache().build(this.#s,this.options),this.#t.addObserver(this),this.#t.execute(t)}#r(){const t=this.#t?.state??b();this.#i={...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset}}#o(t){h.batch(()=>{if(this.#e&&this.hasListeners()){const s=this.#i.variables,r=this.#i.context,e={client:this.#s,meta:this.options.meta,mutationKey:this.options.mutationKey};if(t?.type==="success"){try{this.#e.onSuccess?.(t.data,s,r,e)}catch(i){Promise.reject(i)}try{this.#e.onSettled?.(t.data,null,s,r,e)}catch(i){Promise.reject(i)}}else if(t?.type==="error"){try{this.#e.onError?.(t.error,s,r,e)}catch(i){Promise.reject(i)}try{this.#e.onSettled?.(void 0,t.error,s,r,e)}catch(i){Promise.reject(i)}}}this.listeners.forEach(s=>{s(this.#i)})})}};function O(t,s){const r=p(),[e]=o.useState(()=>new y(r,t));o.useEffect(()=>{e.setOptions(t)},[e,t]);const i=o.useSyncExternalStore(o.useCallback(n=>e.subscribe(h.batchCalls(n)),[e]),()=>e.getCurrentResult(),()=>e.getCurrentResult()),u=o.useCallback((n,c)=>{e.mutate(n,c).catch(m)},[e]);if(i.error&&v(e.options.throwOnError,[i.error]))throw i.error;return{...i,mutate:u,mutateAsync:i.mutate}}export{O as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as m,t as i,B as u,z as y,u as p,a7 as x,$ as C,a6 as h,ab as j,b1 as L,b5 as k}from"./index-BFeuoxPt.js";import{L as E}from"./account-form-helpers-CTpj2uLI.js";import{u as O}from"./useMutation-iXt4Qkuv.js";const b=()=>i.jsx(E,{className:"size-3.5 animate-spin"}),f=(s,n)=>n?i.jsx("span",{className:"sr-only",children:s}):s;function M({actions:s=[],destructive:n,className:l}){const[e,o]=m.useState(!1);return e&&n?.confirm?i.jsxs("div",{className:y("flex items-center gap-2",l),children:[i.jsx("span",{className:"text-xs text-fg-muted",children:n.confirm.prompt}),i.jsx(u,{variant:"secondary",size:"sm",onClick:()=>o(!1),children:n.confirm.cancelLabel??"Cancel"}),i.jsx(u,{variant:"danger",size:"sm","aria-busy":n.busy,icon:n.busy?b():void 0,onClick:()=>{n.busy||n.onClick()},children:n.busy?n.busyLabel??"Working…":n.confirm.confirmLabel??n.label})]}):i.jsxs("div",{className:y("flex items-center gap-2",l),children:[s.map(a=>i.jsx(u,{variant:a.variant??"ghost",size:"sm","aria-busy":a.busy,"aria-label":a.iconOnly?a.label:void 0,icon:a.busy?b():a.icon,onClick:()=>{a.busy||a.onClick()},children:a.busy&&a.busyLabel?a.busyLabel:f(a.label,a.iconOnly)},a.label)),n&&i.jsx(u,{variant:"ghost",size:"sm","aria-busy":n.busy,"aria-label":n.iconOnly?n.label:void 0,icon:n.busy?b():n.icon,onClick:()=>{if(!n.busy){if(n.confirm){o(!0);return}n.onClick()}},children:n.busy&&n.busyLabel?n.busyLabel:f(n.label,n.iconOnly)})]})}const c={html:"",plainText:""},N=s=>{const n=p(),{pushError:l}=x(),{data:e}=C({...h(),staleTime:1/0}),o=m.useMemo(()=>{if(!s||!e)return c;const r=e.accounts.find(t=>t.accountId===s);return r?{html:r.signatureHtml??"",plainText:r.signaturePlainText??""}:c},[s,e]),a=O({...k(),onSuccess:()=>{n.invalidateQueries({queryKey:L()})},onError:r=>{l(j("Couldn't save signature","The signature wasn't saved.",r))}}),g=m.useCallback((r,t)=>{s&&a.mutate({path:{accountId:s},body:{signatureHtml:r,signaturePlainText:t}})},[s,a]);return{signature:o,setSignature:g,isSaving:a.isPending}};export{M as R,N as u};
|
package/config.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Runtime deployment configuration, read by src/runtime-config.ts before the
|
|
2
|
+
// app boots. This default serves the self-host stack (better-auth identity).
|
|
3
|
+
// Each deployment replaces this file: the AWS deploy writes Cognito values, and
|
|
4
|
+
// the dev server injects it from REMIT_RUNTIME_CONFIG.
|
|
5
|
+
window.__REMIT_CONFIG__ = { betterAuthEnabled: true };
|
package/index.html
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Remit</title>
|
|
7
|
+
<!--
|
|
8
|
+
Hint the browser to start the TLS handshake to API Gateway in parallel
|
|
9
|
+
with the JS bundle download. Saves ~150-300ms before the first /config
|
|
10
|
+
request fires. Hardcoded to the prod API origin; in local dev this
|
|
11
|
+
preconnect is harmless (it's just a hint and the dev API is proxied
|
|
12
|
+
through the Vite server).
|
|
13
|
+
-->
|
|
14
|
+
<link rel="preconnect" href="https://cr0f00ych7.execute-api.eu-west-1.amazonaws.com" crossorigin />
|
|
15
|
+
<!--
|
|
16
|
+
Pre-paint theme to avoid a flash-of-wrong-theme on reload. Mirrors
|
|
17
|
+
theme-preference.ts: a stored "remit.theme" of "light"/"dark" wins;
|
|
18
|
+
"system" (or no key) follows prefers-color-scheme. Keep this in sync
|
|
19
|
+
with src/lib/theme-preference.ts (STORAGE_KEY / resolution logic).
|
|
20
|
+
-->
|
|
21
|
+
<script>
|
|
22
|
+
(function () {
|
|
23
|
+
try {
|
|
24
|
+
var pref = localStorage.getItem("remit.theme");
|
|
25
|
+
var isDark =
|
|
26
|
+
pref === "dark" ||
|
|
27
|
+
(pref !== "light" &&
|
|
28
|
+
window.matchMedia &&
|
|
29
|
+
window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
30
|
+
document.documentElement.classList.toggle("dark", isDark);
|
|
31
|
+
} catch (_) {}
|
|
32
|
+
})();
|
|
33
|
+
</script>
|
|
34
|
+
<script type="module" crossorigin src="/assets/index-BFeuoxPt.js"></script>
|
|
35
|
+
<link rel="stylesheet" crossorigin href="/assets/index-DEJQ3OJJ.css">
|
|
36
|
+
</head>
|
|
37
|
+
<body>
|
|
38
|
+
<div id="root"></div>
|
|
39
|
+
<!--
|
|
40
|
+
Runtime deployment config. A classic (non-module) script so it runs before
|
|
41
|
+
the deferred module bundle: it sets window.__REMIT_CONFIG__, which
|
|
42
|
+
src/runtime-config.ts reads. Served as a static default in the built dist
|
|
43
|
+
and replaced per deployment; never bundled, so one build serves every
|
|
44
|
+
deployment.
|
|
45
|
+
-->
|
|
46
|
+
<script src="/config.js"></script>
|
|
47
|
+
</body>
|
|
48
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"app": {
|
|
3
|
+
"title": "Remit",
|
|
4
|
+
"loading": "Loading...",
|
|
5
|
+
"error": "Something went wrong"
|
|
6
|
+
},
|
|
7
|
+
"actions": {
|
|
8
|
+
"save": "Save",
|
|
9
|
+
"cancel": "Cancel",
|
|
10
|
+
"delete": "Delete",
|
|
11
|
+
"close": "Close",
|
|
12
|
+
"confirm": "Confirm"
|
|
13
|
+
},
|
|
14
|
+
"pagination": {
|
|
15
|
+
"previous": "Previous",
|
|
16
|
+
"next": "Next",
|
|
17
|
+
"page": "Page {{current}} of {{total}}",
|
|
18
|
+
"showing": "Showing {{from}}-{{to}} of {{total}}"
|
|
19
|
+
},
|
|
20
|
+
"accessibility": {
|
|
21
|
+
"skipToContent": "Skip to main content",
|
|
22
|
+
"loading": "Loading content",
|
|
23
|
+
"menuOpen": "Open menu",
|
|
24
|
+
"menuClose": "Close menu"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sidebar": {
|
|
3
|
+
"inbox": "Inbox",
|
|
4
|
+
"sent": "Sent",
|
|
5
|
+
"drafts": "Drafts",
|
|
6
|
+
"trash": "Trash",
|
|
7
|
+
"archive": "Archive",
|
|
8
|
+
"spam": "Spam",
|
|
9
|
+
"junk": "Spam",
|
|
10
|
+
"flagged": "Starred",
|
|
11
|
+
"all": "All Mail",
|
|
12
|
+
"noAccounts": "No accounts configured",
|
|
13
|
+
"noMailboxes": "No mailboxes"
|
|
14
|
+
},
|
|
15
|
+
"emptyState": {
|
|
16
|
+
"selectMailbox": "Select a mailbox to view messages",
|
|
17
|
+
"selectMessage": "Select a message to read",
|
|
18
|
+
"noMessages": "No messages in this mailbox",
|
|
19
|
+
"messageNotFound": "Message not found"
|
|
20
|
+
},
|
|
21
|
+
"inbox": {
|
|
22
|
+
"title": "Inbox",
|
|
23
|
+
"empty": "No messages in your inbox",
|
|
24
|
+
"emptyFiltered": "No {{filter}} messages",
|
|
25
|
+
"noSubject": "(No subject)"
|
|
26
|
+
},
|
|
27
|
+
"thread": {
|
|
28
|
+
"messageCount": "{{count}} message",
|
|
29
|
+
"messageCount_other": "{{count}} messages",
|
|
30
|
+
"unreadCount": "{{count}} unread",
|
|
31
|
+
"participants": "{{count}} participant",
|
|
32
|
+
"participants_other": "{{count}} participants"
|
|
33
|
+
},
|
|
34
|
+
"filters": {
|
|
35
|
+
"all": "All",
|
|
36
|
+
"unread": "Unread",
|
|
37
|
+
"starred": "Starred",
|
|
38
|
+
"attachments": "Has attachments"
|
|
39
|
+
},
|
|
40
|
+
"actions": {
|
|
41
|
+
"compose": "Compose",
|
|
42
|
+
"reply": "Reply",
|
|
43
|
+
"replyAll": "Reply all",
|
|
44
|
+
"forward": "Forward",
|
|
45
|
+
"archive": "Archive",
|
|
46
|
+
"markRead": "Mark as read",
|
|
47
|
+
"markUnread": "Mark as unread",
|
|
48
|
+
"star": "Star",
|
|
49
|
+
"unstar": "Remove star",
|
|
50
|
+
"moveToTrash": "Move to trash"
|
|
51
|
+
},
|
|
52
|
+
"compose": {
|
|
53
|
+
"title": "New message",
|
|
54
|
+
"description": "Compose a new email message",
|
|
55
|
+
"to": "To",
|
|
56
|
+
"cc": "Cc",
|
|
57
|
+
"bcc": "Bcc",
|
|
58
|
+
"subject": "Subject",
|
|
59
|
+
"body": "Message",
|
|
60
|
+
"send": "Send",
|
|
61
|
+
"discard": "Discard",
|
|
62
|
+
"attachFiles": "Attach files"
|
|
63
|
+
},
|
|
64
|
+
"time": {
|
|
65
|
+
"justNow": "Just now",
|
|
66
|
+
"today": "Today",
|
|
67
|
+
"yesterday": "Yesterday"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"sidebar": {
|
|
3
|
+
"inbox": "Boîte de réception",
|
|
4
|
+
"sent": "Envoyés",
|
|
5
|
+
"drafts": "Brouillons",
|
|
6
|
+
"trash": "Corbeille",
|
|
7
|
+
"archive": "Archives",
|
|
8
|
+
"spam": "Indésirables",
|
|
9
|
+
"junk": "Indésirables",
|
|
10
|
+
"flagged": "Suivis",
|
|
11
|
+
"all": "Tous les messages"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
package/package.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@remit/web-client-dist",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Built Remit web client — static assets and the default runtime config.",
|
|
5
|
+
"files": [
|
|
6
|
+
"**/*"
|
|
7
|
+
],
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"publishConfig": {
|
|
10
|
+
"access": "public"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://github.com/remit-mail/reader.git"
|
|
15
|
+
}
|
|
16
|
+
}
|