@remit/web-client-dist 0.0.133 → 0.0.135

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.
Files changed (39) hide show
  1. package/assets/{ComposeBody-4TZWUog_.js → ComposeBody-CXluR0mJ.js} +3 -3
  2. package/assets/{ErrorState-Qyr85Xyz.js → ErrorState-xuU2Ycex.js} +1 -1
  3. package/assets/{OnboardingWizard-DKci22gI.js → OnboardingWizard-DlBawZQa.js} +1 -1
  4. package/assets/{account-form-helpers-BYqkWlDo.js → account-form-helpers-C-R-t-TP.js} +1 -1
  5. package/assets/{accounts-CxuS8UEA.js → accounts-ADCcmorB.js} +1 -1
  6. package/assets/{advanced-owsjRzM5.js → advanced-CRu4UqDe.js} +1 -1
  7. package/assets/{appearance-ClCRIT2m.js → appearance-DDoSefIs.js} +1 -1
  8. package/assets/{avatar-C9jCQUO-.js → avatar-DO7vnPxY.js} +1 -1
  9. package/assets/{browser-ponyfill-DrrIHcTp.js → browser-ponyfill-FuWjKEd5.js} +1 -1
  10. package/assets/{circle-check-BKQBncbL.js → circle-check-C86Aiiep.js} +1 -1
  11. package/assets/{download-CkHRsDqJ.js → download-C1F8f8Cm.js} +1 -1
  12. package/assets/filters-B-QK-_x9.js +1 -0
  13. package/assets/{flagged-Bfbt5YNc.js → flagged-dNLl7pSz.js} +1 -1
  14. package/assets/{folder-BqRohEKt.js → folder-AERC-jiq.js} +1 -1
  15. package/assets/folders-D_SSE4kH.js +1 -0
  16. package/assets/index-CA8m1jib.js +1 -0
  17. package/assets/{index-ChxiTmNG.css → index-CIEsBq5i.css} +1 -1
  18. package/assets/index-DccQqmHT.js +295 -0
  19. package/assets/{index-xpekyoor.js → index-Ds6rm6WR.js} +1 -1
  20. package/assets/{kbd-0K2ewyTX.js → kbd-CJm0PdtR.js} +1 -1
  21. package/assets/mail-CGtAo1Ry.js +118 -0
  22. package/assets/{onboarding-D8K6TW2Z.js → onboarding-Dd5aSsGp.js} +1 -1
  23. package/assets/{rotate-ccw-0vqgrfBM.js → rotate-ccw-Vwe0kY7O.js} +1 -1
  24. package/assets/{senders-n4d8Kq6e.js → senders-d0E-TE0w.js} +1 -1
  25. package/assets/settings-epL7Dplk.js +1 -0
  26. package/assets/{settings-screen-BpTHue4P.js → settings-screen-CGcJfaFe.js} +1 -1
  27. package/assets/{suggested-vips-DCaVHu50.js → suggested-vips-DzhuY5XT.js} +1 -1
  28. package/assets/useCreateMailbox-C4OH6qHD.js +1 -0
  29. package/assets/{useDebouncedValue-Dv0RGxEO.js → useDebouncedValue-DZZtIlXe.js} +1 -1
  30. package/assets/{useRulePreview-3nagP4N4.js → useRulePreview-B7LWIphh.js} +1 -1
  31. package/assets/{useSignature-G8PIr3OM.js → useSignature-BuMCTh1I.js} +1 -1
  32. package/index.html +2 -2
  33. package/package.json +1 -1
  34. package/assets/filters-CeTEyrxS.js +0 -1
  35. package/assets/folders-DKp7WD2J.js +0 -1
  36. package/assets/index-CA0QigtD.js +0 -1
  37. package/assets/index-Do5QkG4r.js +0 -295
  38. package/assets/mail-CyYDTHI8.js +0 -118
  39. package/assets/settings-C00EEdZT.js +0 -1
@@ -1 +1 @@
1
- import{r as y,j as i,B as u,b as m,i as p,$ as x,az as C,aq as h,ay as j,at as k,aD as L,bo as E,bs as O}from"./index-Do5QkG4r.js";const t=()=>i.jsx(p,{className:"size-3.5 animate-spin"}),f=(s,n)=>n?i.jsx("span",{className:"sr-only",children:s}):s;function z({actions:s=[],destructive:n,className:l}){const[r,o]=y.useState(!1);return r&&n?.confirm?i.jsxs("div",{className:m("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?t():void 0,onClick:()=>{n.busy||n.onClick()},children:n.busy?n.busyLabel??"Working…":n.confirm.confirmLabel??n.label})]}):i.jsxs("div",{className:m("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?t():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?t():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:""},S=s=>{const n=x(),{pushError:l}=C(),{data:r}=h({...j(),staleTime:1/0}),o=y.useMemo(()=>{if(!s||!r)return c;const e=r.accounts.find(b=>b.accountId===s);return e?{html:e.signatureHtml??"",plainText:e.signaturePlainText??""}:c},[s,r]),a=k({...O(),onSuccess:()=>{n.invalidateQueries({queryKey:E()})},onError:e=>{l(L("Couldn't save signature","The signature wasn't saved.",e))}}),g=y.useCallback((e,b)=>{s&&a.mutate({path:{accountId:s},body:{signatureHtml:e,signaturePlainText:b}})},[s,a]);return{signature:o,setSignature:g,isSaving:a.isPending}};export{z as R,S as u};
1
+ import{r as y,j as i,B as u,b as m,i as p,$ as x,az as C,aq as h,ay as j,at as k,aD as L,bo as E,bs as O}from"./index-DccQqmHT.js";const t=()=>i.jsx(p,{className:"size-3.5 animate-spin"}),f=(s,n)=>n?i.jsx("span",{className:"sr-only",children:s}):s;function z({actions:s=[],destructive:n,className:l}){const[r,o]=y.useState(!1);return r&&n?.confirm?i.jsxs("div",{className:m("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?t():void 0,onClick:()=>{n.busy||n.onClick()},children:n.busy?n.busyLabel??"Working…":n.confirm.confirmLabel??n.label})]}):i.jsxs("div",{className:m("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?t():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?t():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:""},S=s=>{const n=x(),{pushError:l}=C(),{data:r}=h({...j(),staleTime:1/0}),o=y.useMemo(()=>{if(!s||!r)return c;const e=r.accounts.find(b=>b.accountId===s);return e?{html:e.signatureHtml??"",plainText:e.signaturePlainText??""}:c},[s,r]),a=k({...O(),onSuccess:()=>{n.invalidateQueries({queryKey:E()})},onError:e=>{l(L("Couldn't save signature","The signature wasn't saved.",e))}}),g=y.useCallback((e,b)=>{s&&a.mutate({path:{accountId:s},body:{signatureHtml:e,signaturePlainText:b}})},[s,a]);return{signature:o,setSignature:g,isSaving:a.isPending}};export{z as R,S as u};
package/index.html CHANGED
@@ -31,8 +31,8 @@
31
31
  } catch (_) {}
32
32
  })();
33
33
  </script>
34
- <script type="module" crossorigin src="/assets/index-Do5QkG4r.js"></script>
35
- <link rel="stylesheet" crossorigin href="/assets/index-ChxiTmNG.css">
34
+ <script type="module" crossorigin src="/assets/index-DccQqmHT.js"></script>
35
+ <link rel="stylesheet" crossorigin href="/assets/index-CIEsBq5i.css">
36
36
  </head>
37
37
  <body>
38
38
  <div id="root"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remit/web-client-dist",
3
- "version": "0.0.133",
3
+ "version": "0.0.135",
4
4
  "description": "Built Remit web client — static assets and the default runtime config.",
5
5
  "files": [
6
6
  "**/*"
@@ -1 +0,0 @@
1
- import{$ as q,at as K,bR as Q,bS as G,r as h,j as e,bT as H,aZ as V,i as M,B as j,D as J,d as W,bU as Y,T as Z,ae as X,aq as I,ay as ee,bD as te,bF as se,af as ae,aO as O}from"./index-Do5QkG4r.js";import{S as ie}from"./settings-screen-BpTHue4P.js";import{l as ne,N as F,d as re,r as le,e as oe,S as D,g as ce,n as de,u as me,B as ue,m as xe,o as pe,p as fe,q as he,b as ge}from"./useRulePreview-3nagP4N4.js";import{C as w}from"./circle-check-BKQBncbL.js";import{E as T}from"./ErrorState-Qyr85Xyz.js";import"./avatar-C9jCQUO-.js";const ve=(t,s)=>{const n=q(),a=K({...G(),onSuccess:()=>{t&&(n.invalidateQueries({queryKey:ne(t)}),s&&n.invalidateQueries({queryKey:Q({path:{accountId:t,filterId:s}})}))}}),{mutate:r}=a;return{updateFilter:h.useCallback(d=>{!t||!s||r({path:{accountId:t,filterId:s},body:d})},[t,s,r]),isPending:a.isPending,isSuccess:a.isSuccess,isError:a.isError,error:a.error,reset:a.reset}},je=(t,s=!1)=>({clauses:t.literalClauses.map((a,r)=>({id:`clause-${r}`,field:a.field,value:a.value})),matchOperator:t.matchOperator==="And"?"all":"any",widen:t.hasAnchor?{anchorCount:1,...s?{inactive:!0}:{}}:void 0,moveMailboxId:t.actionMailboxId!==F?t.actionMailboxId:void 0,scope:t.scope==="Temporary"?"until":"standing",until:t.scope==="Temporary"?ye(t.expiresAt):void 0,name:t.name}),ye=t=>{if(!t)return"";const s=Date.parse(t);if(Number.isNaN(s))return"";const n=new Date(s),a=r=>String(r).padStart(2,"0");return`${n.getFullYear()}-${a(n.getMonth()+1)}-${a(n.getDate())}`},E=t=>JSON.stringify({clauses:t.clauses.map(s=>[s.field,s.value]),operator:t.matchOperator,move:t.moveMailboxId??null,widen:t.widen?t.widen.inactive?"inactive":"active":"none"}),k=(t,s)=>E(t)!==E(s),be=(t,s)=>{const n={},a=(t.name??"").trim();return a!==(s.name??"").trim()&&(n.name=a),k(t,s)&&(n.matchOperator=t.matchOperator==="all"?"And":"Or",n.literalClauses=t.clauses.map(r=>({field:r.field,value:r.value})),n.actionMailboxId=t.moveMailboxId??F),n};function Ne({accountId:t,filter:s,folders:n,semanticUnavailable:a=!1,onClose:r}){const x=h.useMemo(()=>je(s,a),[s,a]),[d,l]=h.useState(x),[m,c]=h.useState(),[p,f]=h.useState(!1),b=h.useRef(0),y=re(t,le(d)),g=ve(t,s.filterId),u=oe(t),N=()=>c({mode:"add",draft:{field:D[0],value:""}}),C=o=>{const i=d.clauses.find(v=>v.id===o);i&&c({mode:"edit",clauseId:o,draft:{field:i.field,value:i.value}})},A=o=>c(i=>i&&{...i,draft:{...i.draft,field:o}}),R=o=>c(i=>i&&{...i,draft:{...i.draft,value:o}}),P=()=>{if(!m)return;const o=m.draft.field,i=de(o,m.draft.value);i!==""&&(l(v=>m.mode==="edit"&&m.clauseId?{...v,clauses:v.clauses.map(S=>S.id===m.clauseId?{id:S.id,field:o,value:i}:S)}:(b.current+=1,{...v,clauses:[...v.clauses,{id:`new-${b.current}`,field:o,value:i}]})),c(void 0))},$=o=>l(i=>({...i,clauses:i.clauses.filter(v=>v.id!==o)})),z=o=>l(i=>({...i,matchOperator:o})),L=o=>l(i=>({...i,moveMailboxId:o||void 0})),_=o=>l(i=>({...i,name:o})),B=()=>{const o=k(d,x),i=be(d,x);if(Object.keys(i).length===0){r();return}f(o),g.updateFilter(i)},U=()=>u.start(ce(d));return u.isStarting||u.isRunning||u.isDone?e.jsx(we,{progress:u.progress,isDone:u.isDone,onClose:r}):g.isPending?e.jsx(Ce,{}):g.isError?e.jsx(Oe,{onRetry:g.reset,onClose:r}):g.isSuccess?p?e.jsx(Fe,{preview:H(y),blocked:y.status!=="ready"||y.stale===!0,onReapply:U,onClose:r}):e.jsx(Se,{onClose:r}):e.jsx(V,{rule:d,folders:n,preview:y,semanticAvailable:!1,clauseFields:D,lifecycleLocked:!0,clauseEdit:m,onStartAddClause:N,onStartEditClause:C,onRemoveClause:$,onChangeDraftField:A,onChangeDraftValue:R,onSubmitClause:P,onCancelClause:()=>c(void 0),onChangeMatchOperator:z,onChangeMove:L,onChangeName:_,onCommit:B,onCancel:r})}function Ce(){return e.jsxs("div",{className:"flex flex-col items-center gap-3 px-5 py-10 text-center",children:[e.jsx(M,{className:"size-8 animate-spin text-accent-2"}),e.jsx("p",{className:"text-sm font-medium text-fg",children:"Saving changes…"})]})}function Se({onClose:t}){return e.jsxs("div",{className:"flex flex-col items-center gap-3 px-5 py-8 text-center",children:[e.jsx(w,{className:"size-8 text-positive"}),e.jsx("p",{className:"text-sm font-medium text-fg",children:"Filter updated"}),e.jsx(j,{variant:"primary",onClick:t,className:"mt-2",children:"Done"})]})}function Fe({preview:t,blocked:s,onReapply:n,onClose:a}){return e.jsxs("div",{className:"flex flex-col items-center gap-3 px-5 py-8 text-center",children:[e.jsx(w,{className:"size-8 text-positive"}),e.jsx("p",{className:"text-sm font-medium text-fg",children:"Rule saved"}),e.jsxs("p",{className:"max-w-xs text-xs text-fg-muted",children:["New mail follows the rule automatically. ",t," — move the mail already in your mailbox too?"]}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx(j,{variant:"primary",onClick:n,disabled:s,children:"Move existing mail"}),e.jsx(j,{variant:"ghost",onClick:a,children:"Not now"})]})]})}function we({progress:t,isDone:s,onClose:n}){const a=t.state==="Failed";return e.jsxs("div",{className:"flex flex-col items-center gap-3 px-5 py-8 text-center",children:[s?a?e.jsx("span",{className:"text-sm font-semibold text-danger",children:"Move failed"}):e.jsx(w,{className:"size-8 text-positive"}):e.jsx(M,{className:"size-8 animate-spin text-accent-2"}),!s&&e.jsx("p",{className:"text-sm font-medium text-fg",children:"Moving existing mail…"}),s&&!a&&e.jsxs("div",{className:"text-sm text-fg",children:[e.jsx("p",{className:"font-medium",children:"Done"}),e.jsxs("p",{className:"mt-1 text-xs text-fg-muted",children:[t.appliedCount," of ",t.matchedCount," moved",t.failedCount>0?` · ${t.failedCount} failed`:"","."]})]}),s&&a&&e.jsx("p",{className:"max-w-xs text-xs text-fg-muted",children:t.errorMessage||"Something went wrong. Please try again."}),s&&e.jsx(j,{variant:"primary",onClick:n,className:"mt-2",children:"Done"})]})}function Oe({onRetry:t,onClose:s}){return e.jsxs("div",{className:"flex flex-col items-center gap-3 px-5 py-8 text-center",children:[e.jsx("p",{className:"text-sm font-medium text-danger",children:"Couldn't save changes"}),e.jsx("p",{className:"max-w-xs text-xs text-fg-muted",children:"Please try again."}),e.jsxs("div",{className:"mt-2 flex gap-2",children:[e.jsx(j,{variant:"primary",onClick:t,children:"Try again"}),e.jsx(j,{variant:"ghost",onClick:s,children:"Not now"})]})]})}function De({accountId:t,filter:s,folders:n,semanticUnavailable:a,onClose:r}){const x=me(),d=e.jsx(Ne,{accountId:t,filter:s,folders:n,semanticUnavailable:a,onClose:r});return x?e.jsx(J,{open:!0,onClose:r,title:"Filter rule",children:d}):e.jsx(ue,{open:!0,onClose:r,dismissLabel:"Dismiss filter rule",children:d})}function Ee({filters:t,mailboxName:s,onEdit:n,onDelete:a,deletingFilterId:r,semanticUnavailable:x=!1,now:d=Date.now()}){return t.length===0?e.jsx("p",{className:"py-6 text-sm text-fg-muted",children:"No filters yet. Select a few messages in the inbox and choose Organize to make one."}):e.jsx("ul",{className:"divide-y divide-line rounded-md border border-line",children:t.map(l=>{const m=xe(l,d),c=m==="Expired",p=l.actionMailboxId!==F?s(l.actionMailboxId):void 0,f=pe(l.expiresAt);return e.jsxs("li",{className:"flex items-start gap-3 px-3 py-2.5",children:[e.jsxs("button",{type:"button",onClick:()=>n(l.filterId),"aria-label":`Edit filter ${l.name}`,className:"min-w-0 flex-1 rounded-sm text-left hover:opacity-80",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:`truncate text-sm font-medium ${c?"text-fg-muted":"text-fg"}`,children:l.name}),e.jsx(W,{tone:c?"neutral":"positive",dot:!0,children:m})]}),e.jsxs("p",{className:"mt-0.5 text-xs text-fg-subtle",children:[p?`Moves matches to ${p}`:"No move action",l.scope==="Temporary"&&f?c?` · expired ${f}`:` · until ${f}`:l.scope==="Standing"?" · always":""]}),l.hasAnchor&&e.jsx("div",{className:"mt-1.5 flex flex-wrap gap-1.5",children:e.jsx(Y,{widen:{anchorCount:1,...x?{inactive:!0}:{}}})})]}),e.jsx(j,{variant:"ghost",size:"sm",icon:e.jsx(Z,{className:"size-4 text-danger"}),onClick:()=>a(l.filterId),disabled:r===l.filterId,"aria-label":`Delete filter ${l.name}`})]},l.filterId)})})}const Me=e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{children:["Filters are the standing rules Organize creates. A"," ",e.jsx("strong",{children:"Standing"})," filter keeps working on new mail; a"," ",e.jsx("strong",{children:"Temporary"})," one stops on its own at the date you picked."]}),e.jsx("p",{children:"An expired filter isn't deleted the instant it lapses — it stays here, marked Expired, so you can see what it did and when it stopped."})]});function Ie({account:t}){const s=t.accountId,{filters:n,isPending:a,isError:r,error:x,refetch:d}=fe(s),{deleteFilter:l,deletingFilterId:m}=he(s),[c,p]=h.useState(),{data:f}=I({...ae({path:{accountId:s}}),staleTime:1/0}),b=h.useCallback(u=>{const N=f?.items.find(C=>C.mailboxId===u);return N?O(N.fullPath):void 0},[f?.items]),y=h.useMemo(()=>ge(f?.items??[]).map(u=>({id:u.mailboxId,label:O(u.fullPath)})),[f?.items]),g=n.find(u=>u.filterId===c);return e.jsxs("section",{className:"space-y-2",children:[e.jsx("h2",{className:"text-sm font-semibold text-fg",children:t.email}),g&&e.jsx(De,{accountId:s,filter:g,folders:y,onClose:()=>p(void 0)}),a?e.jsx("div",{className:"h-16 animate-pulse rounded-md border border-line bg-surface","aria-busy":"true","aria-label":`Loading filters for ${t.email}`}):r?e.jsx(T,{variant:"inline",title:`Couldn't load filters for ${t.email}`,error:x,onRetry:()=>{d()}}):e.jsx(Ee,{filters:n,mailboxName:b,onEdit:p,onDelete:l,deletingFilterId:m})]})}function ze(){const t=X(),[s,n]=h.useState(!0),{data:a,isPending:r,isError:x,error:d,refetch:l}=I(ee()),m=c=>{const p=se[c];p&&t({to:p})};return e.jsx(ie,{items:te,activeId:"filters",title:"Filters",description:"Standing and temporary rules created by Organize, per account.",help:Me,helpOpen:s,onToggleHelp:()=>n(c=>!c),onSelect:m,onBackToMail:()=>{t({to:"/mail"})},children:r?e.jsx("div",{className:"h-24 animate-pulse rounded-sm border border-line bg-surface","aria-busy":"true","aria-label":"Loading accounts"}):x?e.jsx(T,{title:"Couldn't load accounts",error:d,onRetry:()=>{l()}}):a.accounts.length===0?e.jsx("p",{className:"py-12 text-sm text-fg-muted",children:"No accounts configured."}):e.jsx("div",{className:"space-y-8",children:a.accounts.map(c=>e.jsx(Ie,{account:c},c.accountId))})})}export{ze as component};
@@ -1 +0,0 @@
1
- import{j as e,c0 as v,r as y,c1 as C,bt as S,y as A,B as E,h as k,c2 as R,ae as L,aq as j,ay as P,bD as T,bF as _,$ as w,af as F,at as N,bo as M,c3 as D,aJ as $,c4 as Q,c5 as B,k as q,c6 as G}from"./index-Do5QkG4r.js";import{F as H}from"./folder-BqRohEKt.js";import{S as K}from"./settings-screen-BpTHue4P.js";import{E as O}from"./ErrorState-Qyr85Xyz.js";import"./avatar-C9jCQUO-.js";const z=["inbox","drafts","sent","archive","junk","trash"],x="";function V(a){const n=a.messageCount===1?"msg":"msgs";return`${v(a.providerPath)} · ${a.messageCount} ${n}`}function J({role:a,folders:n,appointedId:r,displayName:i,onAppoint:m,onRename:p}){const[c,d]=y.useState(i),s=n.find(l=>l.mailboxId===r)??null,t=R(a),u=s!=null&&c.trim()!==i.trim();return e.jsxs("div",{className:"flex flex-col gap-1 border-b border-line px-row-inset py-2.5 last:border-b-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:"flex w-28 shrink-0 items-center gap-2 text-sm font-medium text-fg",children:[C(a),t]}),e.jsxs(S,{className:"w-56 shrink-0",value:r??x,"aria-label":`Folder for ${t}`,onChange:l=>m(a,l.target.value===x?null:l.target.value),children:[e.jsx("option",{value:x,children:"None"}),n.map(l=>e.jsx("option",{value:l.mailboxId,children:V(l)},l.mailboxId))]}),s&&e.jsxs(e.Fragment,{children:[e.jsx(A,{className:"flex-1",value:c,placeholder:t,"aria-label":`Display name for ${t}`,onChange:l=>d(l.target.value)}),u&&e.jsx(E,{variant:"ghost",size:"sm",className:"shrink-0",icon:e.jsx(k,{className:"size-4"}),"aria-label":"Save display name",onClick:()=>p(s.mailboxId,c)})]})]}),s&&e.jsxs("span",{className:"truncate pl-[7.5rem] text-2xs text-fg-subtle",title:s.providerPath,children:[s.providerPath," · ",s.messageCount," ",s.messageCount===1?"message":"messages"]})]})}function U({accountEmail:a,folders:n,appointments:r,displayNames:i={},onAppoint:m,onRename:p}){const c=new Set(Object.values(r).filter(s=>s!=null)),d=n.filter(s=>!c.has(s.mailboxId));return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("header",{className:"space-y-1",children:[e.jsxs("h2",{className:"text-sm font-semibold text-fg",children:["Folder roles — ",a]}),e.jsx("p",{className:"text-xs text-fg-muted",children:"Each role points to one folder. Pick the folder that holds the mail — the counts help you tell real folders from empty look-alikes. Appointing a folder here removes it from any other role."})]}),e.jsx("div",{className:"rounded-sm border border-line bg-surface",children:z.map(s=>{const t=r[s]??null;return e.jsx(J,{role:s,folders:n,appointedId:t,displayName:t?i[t]??"":"",onAppoint:m,onRename:p},s)})}),d.length>0&&e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("h3",{className:"text-xs font-medium text-fg-muted",children:"Other folders"}),e.jsx("ul",{className:"rounded-sm border border-line bg-surface",children:d.map(s=>e.jsxs("li",{className:"flex items-center gap-2 border-b border-line px-row-inset py-2 text-sm text-fg last:border-b-0",children:[e.jsx(H,{className:"size-4 shrink-0 text-fg-subtle"}),e.jsx("span",{className:"truncate",children:v(s.providerPath)}),e.jsxs("span",{className:"ml-auto shrink-0 text-2xs text-fg-subtle",children:[s.messageCount," ",s.messageCount===1?"message":"messages"]})]},s.mailboxId))})]})]})}const W=e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{children:"Each canonical role — Inbox, Drafts, Sent, Archive, Spam, Trash — points at one of your account's real folders. Pick the one that actually holds the mail; the message counts tell real folders from empty look-alikes."}),e.jsx("p",{children:`Appointing a folder to a role here doesn't touch any other role, and doesn't move or rename anything on the server — it just tells Remit which folder to treat as e.g. "Drafts" everywhere (sidebar, unread badges, the compose flow).`}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-fg",children:"Display name"})," renames the appointed folder for the sidebar. Leave it blank to use the role's canonical name."]})]});function X({account:a}){const n=w(),r=a.accountId,{data:i,isPending:m,isError:p,error:c,refetch:d}=j(F({path:{accountId:r}})),s=N({...D(),onSuccess:()=>{n.invalidateQueries({queryKey:M()})}}),t=N({...Q(),onSuccess:()=>{n.invalidateQueries({queryKey:$({path:{accountId:r}})})}}),u=(o,h)=>{s.mutate({path:{accountId:r,role:G[o]},body:{mailboxId:h}})},l=(o,h)=>{const b=h.trim();t.mutate({path:{accountId:r,mailboxId:o},body:{displayNameOverride:b===""?null:b}})};if(m)return e.jsx("div",{className:"h-24 animate-pulse rounded-sm border border-line bg-surface","aria-busy":"true","aria-label":`Loading folders for ${a.email}`});if(p)return e.jsx(O,{variant:"inline",title:`Couldn't load folders for ${a.email}`,error:c,onRetry:()=>{d()}});const I=i.items.map(o=>({mailboxId:o.mailboxId,providerPath:o.fullPath,messageCount:o.messageCount})),f={};for(const o of a.folderAppointments){const h=B[o.role];h&&(f[h]=o.mailboxId??null)}const g={};for(const o of i.items)o.displayNameOverride&&(g[o.mailboxId]=o.displayNameOverride);return e.jsxs("div",{className:"space-y-2",children:[(s.isError||t.isError)&&e.jsx(q,{tone:"danger",variant:"soft",children:"Couldn't save that change. Please try again."}),e.jsx(U,{accountEmail:a.email,folders:I,appointments:f,displayNames:g,onAppoint:u,onRename:l})]})}function te(){const a=L(),[n,r]=y.useState(!0),{data:i,isPending:m,isError:p,error:c,refetch:d}=j(P()),s=t=>{const u=_[t];u&&a({to:u})};return e.jsx(K,{items:T,activeId:"folders",title:"Folder roles",description:"Appoint which real folder fills each canonical role, per account.",help:W,helpOpen:n,onToggleHelp:()=>r(t=>!t),onSelect:s,onBackToMail:()=>{a({to:"/mail"})},children:m?e.jsx("div",{className:"h-24 animate-pulse rounded-sm border border-line bg-surface","aria-busy":"true","aria-label":"Loading accounts"}):p?e.jsx(O,{title:"Couldn't load accounts",error:c,onRetry:()=>{d()}}):i.accounts.length===0?e.jsx("p",{className:"py-12 text-sm text-fg-muted",children:"No accounts configured."}):e.jsx("div",{className:"space-y-8",children:i.accounts.map(t=>e.jsx(X,{account:t},t.accountId))})})}export{te as component};
@@ -1 +0,0 @@
1
- import{j as t,bp as o}from"./index-Do5QkG4r.js";const n=()=>t.jsx(o,{to:"/settings/accounts"});export{n as component};