@remit/web-client-dist 0.0.646 → 0.0.648

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 (162) hide show
  1. package/assets/{BriefPane-NTEZn5iT.js → BriefPane-6SeduuWz.js} +1 -1
  2. package/assets/{CalendarComposePane-CTOr6Y9H.js → CalendarComposePane-Cw5GmsCb.js} +1 -1
  3. package/assets/{CalendarComposeSeed-DnC9M3Bc.js → CalendarComposeSeed-BYQID6Zq.js} +1 -1
  4. package/assets/{CalendarShell-DFdIYCjl.js → CalendarShell-D-QilRHB.js} +1 -1
  5. package/assets/{EmptyState-iJkDD5wT.js → EmptyState-B0e0Fyab.js} +1 -1
  6. package/assets/{ErrorState-DBbVLnRy.js → ErrorState-BvRoI00P.js} +1 -1
  7. package/assets/{FlaggedPane-BKPeEpex.js → FlaggedPane-CqU4A5n1.js} +1 -1
  8. package/assets/{FullCompose-DVarPVpc.js → FullCompose-CO9Qd5cw.js} +1 -1
  9. package/assets/MailListHeader-U5Wr2TGm.js +7 -0
  10. package/assets/{MailNav-BIKpkzZO.js → MailNav-Bu6T-RaV.js} +1 -1
  11. package/assets/{MailShell-2Uz12rUT.js → MailShell-Bk32z8li.js} +1 -1
  12. package/assets/{MailViewChrome-D3QfNfHi.js → MailViewChrome-C2SUa5Zc.js} +1 -1
  13. package/assets/{MailboxPane-BW8Oo31r.js → MailboxPane-CakLdj2O.js} +1 -1
  14. package/assets/{NavMenuButton-BDbMyjBe.js → NavMenuButton-zGIUjuCz.js} +1 -1
  15. package/assets/{OnboardingWizard-DXfD69y4.js → OnboardingWizard-C1MwyxbF.js} +1 -1
  16. package/assets/{OpenCalendarEvent-DQxup_5A.js → OpenCalendarEvent-XlgqQLYu.js} +1 -1
  17. package/assets/{OutboxPane-51AmIoV1.js → OutboxPane-34kWcbQ8.js} +1 -1
  18. package/assets/_calendarObjectId-BMa2-zqs.js +1 -0
  19. package/assets/_mailboxId-C7sJGa3E.js +1 -0
  20. package/assets/_messageId-C1bvBcA_.js +1 -0
  21. package/assets/_messageId-CAZx46CE.js +1 -0
  22. package/assets/_messageId-KMwf3aVi.js +1 -0
  23. package/assets/_outboxMessageId-DMqKmP4p.js +1 -0
  24. package/assets/_recurrenceId-DWxk61ua.js +1 -0
  25. package/assets/_threadId-BFvPyxvk.js +1 -0
  26. package/assets/_threadId-Cn9s33oU.js +1 -0
  27. package/assets/_threadId-hnMswDzn.js +1 -0
  28. package/assets/{_view._date-DsHOBJGZ.js → _view._date-BpO0DQMt.js} +1 -1
  29. package/assets/{accounts-AqojvJPO.js → accounts-Db5HLljt.js} +1 -1
  30. package/assets/{advanced-B6LXVBZn.js → advanced-CDcsqqfJ.js} +1 -1
  31. package/assets/{appearance-hDHe0sCR.js → appearance-BN2ymT0f.js} +1 -1
  32. package/assets/{attendee-row-D056H7on.js → attendee-row-B17fnTlq.js} +1 -1
  33. package/assets/{avatar-KiM5ncyR.js → avatar-CVy1NIOI.js} +1 -1
  34. package/assets/{bell-off-aDzc6-uu.js → bell-off-C6pIOJuw.js} +1 -1
  35. package/assets/{bottom-sheet-CyaTcIno.js → bottom-sheet-fFpTIBl3.js} +1 -1
  36. package/assets/{brief-w0GjdNJg.js → brief-BvhcczD6.js} +1 -1
  37. package/assets/brief-CwZYdqT4.js +1 -0
  38. package/assets/{browser-ponyfill-BxYoyQUR.js → browser-ponyfill-C6LUxBR9.js} +1 -1
  39. package/assets/{bug-Dz6mFK2v.js → bug-C0o6sVq8.js} +1 -1
  40. package/assets/{calendar-6scIQiwU.js → calendar--_kN4V0u.js} +1 -1
  41. package/assets/{calendar-clash-strip-4uWwSJgT.js → calendar-clash-strip-Bm-MYQet.js} +1 -1
  42. package/assets/{calendar-format-B3u8XeCh.js → calendar-format-DeXXPgld.js} +1 -1
  43. package/assets/{calendar-report-DcwY6HH-.js → calendar-report-DJ8H5rPt.js} +1 -1
  44. package/assets/{calendar-suggestion-D1-lMf3B.js → calendar-suggestion-BdENUHgp.js} +1 -1
  45. package/assets/{calendars-1qdVhrw6.js → calendars-C9FpsmHu.js} +1 -1
  46. package/assets/{card-CPp6hN7Y.js → card-D5-QETHZ.js} +1 -1
  47. package/assets/{checkbox-FDumPklc.js → checkbox-DHX4RXRp.js} +1 -1
  48. package/assets/chevron-left-dJxdLFYn.js +1 -0
  49. package/assets/{circle-check-Bcrk6K1k.js → circle-check-DnfNFifm.js} +1 -1
  50. package/assets/{circle-check-big-CFRFqxT6.js → circle-check-big-C-z_fIR2.js} +1 -1
  51. package/assets/{circle-help-cF1gR2q7.js → circle-help-B0j9iMea.js} +1 -1
  52. package/assets/{clock-CMYYJ0a3.js → clock-WYPpiy7W.js} +1 -1
  53. package/assets/compose._-_outboxMessageId_-011ajlS-.js +1 -0
  54. package/assets/compose._-_outboxMessageId_-BB0997HI.js +1 -0
  55. package/assets/compose._-_outboxMessageId_-BlrwashK.js +1 -0
  56. package/assets/compose._-_outboxMessageId_-CR73ieY-.js +1 -0
  57. package/assets/{config-import-B5ShP2v6.js → config-import-BhzjBZHn.js} +1 -1
  58. package/assets/{confirm-dialog-DP653uUK.js → confirm-dialog-C86T_96x.js} +1 -1
  59. package/assets/{copy-CIm_o4Mr.js → copy-BHWk39AO.js} +1 -1
  60. package/assets/{credential-steps-DpKvw37C.js → credential-steps-BocZzgRx.js} +1 -1
  61. package/assets/{download-13r0ltdh.js → download-BDUsG8uv.js} +1 -1
  62. package/assets/{file-json-YH4c3ZTR.js → file-json-CH3D4V9l.js} +1 -1
  63. package/assets/filters-P8AdjJhc.js +1 -0
  64. package/assets/flagged-DDIJoBUx.js +1 -0
  65. package/assets/{flagged-C0QU0Pz_.js → flagged-r9rvSSKu.js} +1 -1
  66. package/assets/{folders-BlohuMsA.js → folders-FHpyokiL.js} +1 -1
  67. package/assets/{help-copy-CBHMrKUf.js → help-copy-0l4D28qZ.js} +1 -1
  68. package/assets/{import-3YvqTmkU.js → import-DOeRnZWh.js} +1 -1
  69. package/assets/index-BYFVPCSW.js +1 -0
  70. package/assets/{index-aC5-hvDE.js → index-BmphFwUI.js} +1 -1
  71. package/assets/index-BwJgsyEU.js +1 -0
  72. package/assets/index-C1bvBcA_.js +1 -0
  73. package/assets/index-CQ_R_yZ3.js +1 -0
  74. package/assets/index-D6fi4rKR.js +1 -0
  75. package/assets/index-DNmgLR8G.js +1 -0
  76. package/assets/index-KMwf3aVi.js +1 -0
  77. package/assets/index-TcQLNyzX.js +1 -0
  78. package/assets/index-cx55C5bq.js +1 -0
  79. package/assets/{index-DyXh0uZR.js → index-sX1xY_ye.js} +4 -4
  80. package/assets/{index-Cgq4hxti.js → index-tC8B4Qkq.js} +4 -4
  81. package/assets/{kbd-BZqsDz_U.js → kbd-C2HaWlmQ.js} +1 -1
  82. package/assets/{labels-BIaU1vWQ.js → labels-D0EN6mY_.js} +1 -1
  83. package/assets/{mail-D-devbMY.js → mail-Ce5BEspm.js} +1 -1
  84. package/assets/{mail-B7zN4zHx.js → mail-Cyr1NbkS.js} +1 -1
  85. package/assets/{map-pin-xN7wT2-l.js → map-pin-DRN0BhjA.js} +1 -1
  86. package/assets/{menu-Cp4H-jyN.js → menu-CQspPBY1.js} +1 -1
  87. package/assets/minus-DIJTpiGn.js +1 -0
  88. package/assets/{new-KA2ie897.js → new-CCLchdvs.js} +1 -1
  89. package/assets/{onboarding-completion-CwuHJfhv.js → onboarding-completion-BxtUqUSR.js} +1 -1
  90. package/assets/onboarding-k_b7HtSB.js +1 -0
  91. package/assets/outbox-RK4noyR-.js +1 -0
  92. package/assets/{pane-header-DidbhnoI.js → pane-header-B5zvb4Lq.js} +1 -1
  93. package/assets/{pencil-DqDMjiQE.js → pencil-nDRamPGy.js} +1 -1
  94. package/assets/{popover-menu-2PYa43as.js → popover-menu-6EW5dPCf.js} +1 -1
  95. package/assets/{refresh-cw-DWAbkoT3.js → refresh-cw-5WZnJ3vE.js} +1 -1
  96. package/assets/{rich-text-D9n_7aOO.js → rich-text-BVh3MilZ.js} +1 -1
  97. package/assets/{rich-text-spellcheck-worker-provider-BbFToiMX.js → rich-text-spellcheck-worker-provider-Bhe6nYv5.js} +1 -1
  98. package/assets/{rotate-ccw-cBgqjisw.js → rotate-ccw-DD52wAh_.js} +1 -1
  99. package/assets/{roving-focus-lihtPwbC.js → roving-focus-CPkr5FTJ.js} +1 -1
  100. package/assets/{row-actions-CfL_K-t9.js → row-actions-odmLDYb6.js} +1 -1
  101. package/assets/{search-mirror-DhqKXhMJ.js → search-mirror-AfArrCF4.js} +1 -1
  102. package/assets/{search-token-index-Bkj6PIXs.js → search-token-index-zzFp1OWm.js} +1 -1
  103. package/assets/{sections-wK3DX2yg.js → sections-CNH_hutr.js} +1 -1
  104. package/assets/{senders-B9DfZ-ZD.js → senders-B4kKJcVc.js} +1 -1
  105. package/assets/settings-C-J1_Lo2.js +1 -0
  106. package/assets/{settings-screen-pRDnJYvp.js → settings-screen-af78w2mN.js} +1 -1
  107. package/assets/{shield-check-D1Sajk90.js → shield-check-Dv9973Ie.js} +1 -1
  108. package/assets/{suggested-vips-DpmmsrLE.js → suggested-vips-CJKiDyjS.js} +1 -1
  109. package/assets/{suggestion._suggestionId-DQy5Hr1g.js → suggestion._suggestionId-BFPn70Ft.js} +1 -1
  110. package/assets/{undo-2-C8HhV7-9.js → undo-2-DgvBsOEv.js} +1 -1
  111. package/assets/{useCalendarData-C2ICAesb.js → useCalendarData-DRO3xOST.js} +1 -1
  112. package/assets/{useCalendarFreeBusy-xzt10efX.js → useCalendarFreeBusy-gIly18MB.js} +1 -1
  113. package/assets/{useCalendarWrites-BqWuIv6N.js → useCalendarWrites-BjpSgweR.js} +1 -1
  114. package/assets/{useCalendars-B-DdrqSn.js → useCalendars-Q4eHkTES.js} +1 -1
  115. package/assets/{useDebouncedValue-BnDpBnRn.js → useDebouncedValue-s8y_FI-2.js} +1 -1
  116. package/assets/useFilters-CqBmHL-q.js +1 -0
  117. package/assets/{useLabels-Cae2UsI0.js → useLabels-D-8squEI.js} +1 -1
  118. package/assets/{useLayoutTier-ob5yzPuz.js → useLayoutTier-CmvG4PY1.js} +1 -1
  119. package/assets/{useMessageBodyContent-BAKTxkDn.js → useMessageBodyContent-hPuofJUT.js} +1 -1
  120. package/assets/{useQueries-DWGt2_77.js → useQueries-Yk6rRJaD.js} +1 -1
  121. package/assets/{useRefreshControl-DcMVjO86.js → useRefreshControl-H0TU9ViP.js} +1 -1
  122. package/assets/{useResultFolderIndex-Dt4mGDHa.js → useResultFolderIndex-DBl3mV9T.js} +1 -1
  123. package/assets/{useSearchTokenContext-DdCG0VLu.js → useSearchTokenContext-D5JEnGSM.js} +1 -1
  124. package/assets/{useSemanticSearch-CEWP6FrA.js → useSemanticSearch-B-Yc7Fw6.js} +1 -1
  125. package/assets/{useSignature-DdekzCf5.js → useSignature-CTFhZvTT.js} +1 -1
  126. package/assets/wizard-selection-zWa1qc6-.js +1 -0
  127. package/index.html +1 -1
  128. package/package.json +1 -1
  129. package/assets/MailListHeader-BF_0ASsH.js +0 -7
  130. package/assets/_calendarObjectId-DJ80udMy.js +0 -1
  131. package/assets/_mailboxId-C9UW9W4T.js +0 -1
  132. package/assets/_messageId-1d6VRzrV.js +0 -1
  133. package/assets/_messageId-D9MRmCiH.js +0 -1
  134. package/assets/_messageId-DKygSbee.js +0 -1
  135. package/assets/_outboxMessageId-CeDsl4kP.js +0 -1
  136. package/assets/_recurrenceId-Dbda2nYB.js +0 -1
  137. package/assets/_threadId-BeZ5Vxp6.js +0 -1
  138. package/assets/_threadId-BtM_kvlj.js +0 -1
  139. package/assets/_threadId-Der4olFj.js +0 -1
  140. package/assets/brief-C5rFb2wO.js +0 -1
  141. package/assets/chevron-left-DCZx9oDN.js +0 -1
  142. package/assets/compose._-_outboxMessageId_-BO_7_qza.js +0 -1
  143. package/assets/compose._-_outboxMessageId_-C8mE4Dmv.js +0 -1
  144. package/assets/compose._-_outboxMessageId_-D0dLVmgz.js +0 -1
  145. package/assets/compose._-_outboxMessageId_-Z5XM3aWq.js +0 -1
  146. package/assets/filters-dukwnLt3.js +0 -1
  147. package/assets/flagged-BFmI2rSm.js +0 -1
  148. package/assets/index-1d6VRzrV.js +0 -1
  149. package/assets/index-B0s4iZrX.js +0 -1
  150. package/assets/index-BUYn5SAl.js +0 -1
  151. package/assets/index-Bn7jIKxB.js +0 -1
  152. package/assets/index-Cy7peBCe.js +0 -1
  153. package/assets/index-DKygSbee.js +0 -1
  154. package/assets/index-DwDnm88d.js +0 -1
  155. package/assets/index-rIsTYCqN.js +0 -1
  156. package/assets/index-wZGBzbmC.js +0 -1
  157. package/assets/minus-DL9Mw3nM.js +0 -1
  158. package/assets/onboarding-CjzRDnvm.js +0 -1
  159. package/assets/outbox-Cy9JZikZ.js +0 -1
  160. package/assets/settings-Cr283p3E.js +0 -1
  161. package/assets/useFilters-Ctb8KI_h.js +0 -1
  162. package/assets/wizard-selection-DxUM65kM.js +0 -1
@@ -1 +1 @@
1
- import{j as E,a0 as K,t as Q,f as U,r as o,aT as R,h as N,C as $,E as z,F as B,q as G,P as I,Q as X,R as V,S as J}from"./index-DyXh0uZR.js";import{C as Y}from"./circle-check-big-CFRFqxT6.js";import{R as Z}from"./refresh-cw-DWAbkoT3.js";import{u as P}from"./useQueries-DWGt2_77.js";function ye({state:e,onRefresh:s,label:t,errorMessage:n,hasUpdate:a,size:u="sm",className:c}){const i=e==="refreshing",r=e==="error",h=e==="success",S=r?E.jsx(K,{className:"size-4 text-danger"}):h?E.jsx(Y,{className:"size-4 text-positive"}):E.jsx(Z,{className:Q("size-4",i&&"animate-spin")}),w=r?`${t} — failed: ${n??"try again"}`:i?`${t} — refreshing`:h?`${t} — up to date`:a?`${t} — new mail`:t;return E.jsxs("div",{className:"relative inline-flex",children:[E.jsx(U,{variant:"ghost",size:u,icon:S,onClick:s,disabled:i,"aria-label":w,"aria-busy":i||void 0,title:r?n:t,className:c}),e==="idle"&&a&&E.jsx("span",{"aria-hidden":"true",className:"absolute right-1 top-1 size-1.5 rounded-full bg-accent-2"})]})}const ee=new Set(["discovering_mailboxes","syncing_inbox","syncing_others"]);function L(e){return!!e&&ee.has(e)}const F=3e3,te=F*2,C={syncing:!1,resolved:!1,synced:0,total:0};function we(e,s){const t=e.join(","),[n,a]=o.useState(!1),[u,c]=o.useState(!1);o.useEffect(()=>{a(!1),c(!1)},[t,s]),o.useEffect(()=>{if(!s)return;const m=setTimeout(()=>c(!0),te);return()=>clearTimeout(m)},[t,s]);const i=P({queries:e.map(m=>({...R({path:{accountId:m}}),enabled:s&&!n,refetchInterval:F,meta:{softError:!0}}))}),r=i.every(m=>m.isSuccess||m.isError),h=i.length===0||r||u;let S=!1,w=0,y=0;for(const m of i)if(L(m.data?.syncPhase)){S=!0;for(const l of m.data?.mailboxes??[])w+=l.messagesSynced,y+=l.messagesTotal}const x=s&&h&&!S;return o.useEffect(()=>{x&&a(!0)},[x]),!s||!h?C:{syncing:S,resolved:!0,synced:w,total:y}}const se=180*1e3,xe=30*1e3;let q=0;const M=new Set,re=(e=Date.now())=>{q=e+se;for(const s of M)s()},pe=(e=Date.now())=>e<q,Ee=e=>(M.add(e),()=>{M.delete(e)}),T=6e4,ne=new Set(["sent","drafts","trash","archive"]),_=(e,s)=>{const t=new Map;for(const n of e){const a=s.get(n.mailboxId)?.role;a&&ne.has(a)||t.set(n.mailboxId,n.highWaterMarkUid)}return t},j=(e,s)=>{const t=[];for(const[n,a]of s)a>(e.get(n)??0)&&t.push(n);return t},oe=(e,s)=>j(e,s).length>0,D=o.createContext(null),ae=()=>{const e=o.useContext(D);if(!e)throw new Error("useMailFreshness must be used inside <MailFreshnessProvider>");return e};function be({accountIds:e,children:s}){const t=N(),{resultFolderIndex:n}=$(),a=o.useRef(new Map),u=o.useRef(new Set),c=o.useRef(new Map),[i,r]=o.useState(new Set),h=P({queries:e.map(l=>({...R({path:{accountId:l}}),refetchInterval:T,staleTime:T,meta:{softError:!0}}))}),S=h.map(l=>l.dataUpdatedAt).join(","),w=e.join(",");o.useEffect(()=>{let l=!1;const f=new Set(i);e.forEach((d,p)=>{const b=h[p]?.data;if(!b)return;const g=_(b.mailboxes??[],n),v=c.current.get(d);if(c.current.set(d,g),v){const A=j(v,g);A.length>0&&z(t,B(A))}if(!u.current.has(d)){u.current.add(d),a.current.set(d,g);return}if(f.has(d))return;const W=a.current.get(d)??new Map;oe(W,g)&&(f.add(d),l=!0)}),l&&r(f)},[w,S]);const y=o.useCallback(l=>l.some(f=>i.has(f)),[i]),x=o.useCallback(l=>{r(f=>{if(l.every(p=>!f.has(p)))return f;const d=new Set(f);for(const p of l)d.delete(p);return d});for(const f of l){const d=t.getQueryData(R({path:{accountId:f}}).queryKey);a.current.set(f,_(d?.mailboxes??[],n)),u.current.add(f)}},[t,n]),m=o.useMemo(()=>({hasNewMail:y,acknowledge:x}),[y,x]);return E.jsx(D.Provider,{value:m,children:s})}const ie=2e3,ce=45e3,ue=e=>new Promise(s=>setTimeout(s,e)),k=e=>e instanceof Error&&e.message?e.message:"Something went wrong",le=e=>{V(e,{softError:!0},"user")&&J(e)},O=(e,s)=>e.fetchQuery({...R({path:{accountId:s}}),staleTime:0}),H=e=>e.mailboxes?.find(s=>s.fullPath?.toUpperCase()==="INBOX")?.lastSyncedAt??0,fe=async({accountId:e,readStatus:s,baselineLastSyncAt:t,baselineInboxSyncedAt:n=0,onInboxSynced:a,deadline:u,pollMs:c=ie})=>{let i=!1;for(;;){const r=await s().then(y=>({ok:!0,data:y})).catch(y=>({ok:!1,error:y}));if(!r.ok)return{accountId:e,message:k(r.error)};const{syncPhase:h,lastSyncAt:S}=r.data;if((S??0)>t&&!L(h))return h==="error"?{accountId:e,message:"Sync failed for this account"}:void 0;if(!i&&H(r.data)>n&&(i=!0,a?.()),Date.now()>=u)return{accountId:e,message:"Refresh is taking longer than usual"};await ue(c)}},de=async(e,s,t,n,a)=>{const u=await O(e,t).then(r=>({ok:!0,lastSyncAt:r.lastSyncAt??0,inboxSyncedAt:H(r)})).catch(r=>({ok:!1,error:r}));if(!u.ok)return{accountId:t,enqueued:!1,ok:!1,message:k(u.error)};const c=await I({path:{accountId:t},throwOnError:!0}).then(()=>({ok:!0})).catch(r=>({ok:!1,error:r}));if(!c.ok)return le(c.error),{accountId:t,enqueued:!1,ok:!1,message:k(c.error)};s.recordEvent("sync.triggered");const i=await fe({accountId:t,readStatus:()=>O(e,t),baselineLastSyncAt:u.lastSyncAt,baselineInboxSyncedAt:u.inboxSyncedAt,onInboxSynced:()=>a(t),deadline:n});return i?{accountId:t,enqueued:!0,ok:!1,message:i.message}:{accountId:t,enqueued:!0,ok:!0}},Re=(e,s={})=>{const t=N(),n=G(),{acknowledge:a}=ae(),[u,c]=o.useState("idle"),[i,r]=o.useState(),h=o.useRef(0),S=o.useRef(e);S.current=e;const w=o.useRef(s);w.current=s,o.useEffect(()=>{if(u!=="success")return;const x=setTimeout(()=>c("idle"),2e3);return()=>clearTimeout(x)},[u]);const y=o.useCallback(()=>{const x=S.current;if(x.length===0){c("error"),r("Nothing to refresh yet");return}const m=++h.current;c("refreshing"),r(void 0),re();const l=f=>{h.current===m&&(t.invalidateQueries({queryKey:X({path:{accountId:f}})}),w.current.onSettled?.())};(async()=>{const f=Date.now()+ce,d=await Promise.all(x.map(g=>de(t,n,g,f,l)));if(h.current!==m)return;const p=d.filter(g=>g.enqueued).map(g=>g.accountId);for(const g of p)l(g);p.length>0&&a(p);const b=d.filter(g=>!g.ok);b.length===0?c("success"):(c("error"),r(b[0]?.message))})()},[a,t,n]);return{state:u,errorMessage:i,refresh:y}};export{xe as H,be as M,ye as R,Re as a,L as b,we as c,pe as i,Ee as s,ae as u};
1
+ import{j as E,a0 as K,t as Q,f as U,r as o,aT as R,h as N,C as $,E as z,F as B,q as G,P as I,Q as X,R as V,S as J}from"./index-sX1xY_ye.js";import{C as Y}from"./circle-check-big-C-z_fIR2.js";import{R as Z}from"./refresh-cw-5WZnJ3vE.js";import{u as P}from"./useQueries-Yk6rRJaD.js";function ye({state:e,onRefresh:s,label:t,errorMessage:n,hasUpdate:a,size:u="sm",className:c}){const i=e==="refreshing",r=e==="error",h=e==="success",S=r?E.jsx(K,{className:"size-4 text-danger"}):h?E.jsx(Y,{className:"size-4 text-positive"}):E.jsx(Z,{className:Q("size-4",i&&"animate-spin")}),w=r?`${t} — failed: ${n??"try again"}`:i?`${t} — refreshing`:h?`${t} — up to date`:a?`${t} — new mail`:t;return E.jsxs("div",{className:"relative inline-flex",children:[E.jsx(U,{variant:"ghost",size:u,icon:S,onClick:s,disabled:i,"aria-label":w,"aria-busy":i||void 0,title:r?n:t,className:c}),e==="idle"&&a&&E.jsx("span",{"aria-hidden":"true",className:"absolute right-1 top-1 size-1.5 rounded-full bg-accent-2"})]})}const ee=new Set(["discovering_mailboxes","syncing_inbox","syncing_others"]);function L(e){return!!e&&ee.has(e)}const F=3e3,te=F*2,C={syncing:!1,resolved:!1,synced:0,total:0};function we(e,s){const t=e.join(","),[n,a]=o.useState(!1),[u,c]=o.useState(!1);o.useEffect(()=>{a(!1),c(!1)},[t,s]),o.useEffect(()=>{if(!s)return;const m=setTimeout(()=>c(!0),te);return()=>clearTimeout(m)},[t,s]);const i=P({queries:e.map(m=>({...R({path:{accountId:m}}),enabled:s&&!n,refetchInterval:F,meta:{softError:!0}}))}),r=i.every(m=>m.isSuccess||m.isError),h=i.length===0||r||u;let S=!1,w=0,y=0;for(const m of i)if(L(m.data?.syncPhase)){S=!0;for(const l of m.data?.mailboxes??[])w+=l.messagesSynced,y+=l.messagesTotal}const x=s&&h&&!S;return o.useEffect(()=>{x&&a(!0)},[x]),!s||!h?C:{syncing:S,resolved:!0,synced:w,total:y}}const se=180*1e3,xe=30*1e3;let q=0;const M=new Set,re=(e=Date.now())=>{q=e+se;for(const s of M)s()},pe=(e=Date.now())=>e<q,Ee=e=>(M.add(e),()=>{M.delete(e)}),T=6e4,ne=new Set(["sent","drafts","trash","archive"]),_=(e,s)=>{const t=new Map;for(const n of e){const a=s.get(n.mailboxId)?.role;a&&ne.has(a)||t.set(n.mailboxId,n.highWaterMarkUid)}return t},j=(e,s)=>{const t=[];for(const[n,a]of s)a>(e.get(n)??0)&&t.push(n);return t},oe=(e,s)=>j(e,s).length>0,D=o.createContext(null),ae=()=>{const e=o.useContext(D);if(!e)throw new Error("useMailFreshness must be used inside <MailFreshnessProvider>");return e};function be({accountIds:e,children:s}){const t=N(),{resultFolderIndex:n}=$(),a=o.useRef(new Map),u=o.useRef(new Set),c=o.useRef(new Map),[i,r]=o.useState(new Set),h=P({queries:e.map(l=>({...R({path:{accountId:l}}),refetchInterval:T,staleTime:T,meta:{softError:!0}}))}),S=h.map(l=>l.dataUpdatedAt).join(","),w=e.join(",");o.useEffect(()=>{let l=!1;const f=new Set(i);e.forEach((d,p)=>{const b=h[p]?.data;if(!b)return;const g=_(b.mailboxes??[],n),v=c.current.get(d);if(c.current.set(d,g),v){const A=j(v,g);A.length>0&&z(t,B(A))}if(!u.current.has(d)){u.current.add(d),a.current.set(d,g);return}if(f.has(d))return;const W=a.current.get(d)??new Map;oe(W,g)&&(f.add(d),l=!0)}),l&&r(f)},[w,S]);const y=o.useCallback(l=>l.some(f=>i.has(f)),[i]),x=o.useCallback(l=>{r(f=>{if(l.every(p=>!f.has(p)))return f;const d=new Set(f);for(const p of l)d.delete(p);return d});for(const f of l){const d=t.getQueryData(R({path:{accountId:f}}).queryKey);a.current.set(f,_(d?.mailboxes??[],n)),u.current.add(f)}},[t,n]),m=o.useMemo(()=>({hasNewMail:y,acknowledge:x}),[y,x]);return E.jsx(D.Provider,{value:m,children:s})}const ie=2e3,ce=45e3,ue=e=>new Promise(s=>setTimeout(s,e)),k=e=>e instanceof Error&&e.message?e.message:"Something went wrong",le=e=>{V(e,{softError:!0},"user")&&J(e)},O=(e,s)=>e.fetchQuery({...R({path:{accountId:s}}),staleTime:0}),H=e=>e.mailboxes?.find(s=>s.fullPath?.toUpperCase()==="INBOX")?.lastSyncedAt??0,fe=async({accountId:e,readStatus:s,baselineLastSyncAt:t,baselineInboxSyncedAt:n=0,onInboxSynced:a,deadline:u,pollMs:c=ie})=>{let i=!1;for(;;){const r=await s().then(y=>({ok:!0,data:y})).catch(y=>({ok:!1,error:y}));if(!r.ok)return{accountId:e,message:k(r.error)};const{syncPhase:h,lastSyncAt:S}=r.data;if((S??0)>t&&!L(h))return h==="error"?{accountId:e,message:"Sync failed for this account"}:void 0;if(!i&&H(r.data)>n&&(i=!0,a?.()),Date.now()>=u)return{accountId:e,message:"Refresh is taking longer than usual"};await ue(c)}},de=async(e,s,t,n,a)=>{const u=await O(e,t).then(r=>({ok:!0,lastSyncAt:r.lastSyncAt??0,inboxSyncedAt:H(r)})).catch(r=>({ok:!1,error:r}));if(!u.ok)return{accountId:t,enqueued:!1,ok:!1,message:k(u.error)};const c=await I({path:{accountId:t},throwOnError:!0}).then(()=>({ok:!0})).catch(r=>({ok:!1,error:r}));if(!c.ok)return le(c.error),{accountId:t,enqueued:!1,ok:!1,message:k(c.error)};s.recordEvent("sync.triggered");const i=await fe({accountId:t,readStatus:()=>O(e,t),baselineLastSyncAt:u.lastSyncAt,baselineInboxSyncedAt:u.inboxSyncedAt,onInboxSynced:()=>a(t),deadline:n});return i?{accountId:t,enqueued:!0,ok:!1,message:i.message}:{accountId:t,enqueued:!0,ok:!0}},Re=(e,s={})=>{const t=N(),n=G(),{acknowledge:a}=ae(),[u,c]=o.useState("idle"),[i,r]=o.useState(),h=o.useRef(0),S=o.useRef(e);S.current=e;const w=o.useRef(s);w.current=s,o.useEffect(()=>{if(u!=="success")return;const x=setTimeout(()=>c("idle"),2e3);return()=>clearTimeout(x)},[u]);const y=o.useCallback(()=>{const x=S.current;if(x.length===0){c("error"),r("Nothing to refresh yet");return}const m=++h.current;c("refreshing"),r(void 0),re();const l=f=>{h.current===m&&(t.invalidateQueries({queryKey:X({path:{accountId:f}})}),w.current.onSettled?.())};(async()=>{const f=Date.now()+ce,d=await Promise.all(x.map(g=>de(t,n,g,f,l)));if(h.current!==m)return;const p=d.filter(g=>g.enqueued).map(g=>g.accountId);for(const g of p)l(g);p.length>0&&a(p);const b=d.filter(g=>!g.ok);b.length===0?c("success"):(c("error"),r(b[0]?.message))})()},[a,t,n]);return{state:u,errorMessage:i,refresh:y}};export{xe as H,be as M,ye as R,Re as a,L as b,we as c,pe as i,Ee as s,ae as u};
@@ -1 +1 @@
1
- import{K as r,r as s,b7 as t}from"./index-DyXh0uZR.js";import{u as m}from"./useQueries-DWGt2_77.js";const a=i=>({items:i.map(e=>e.data?.items??[]),isPending:i.some(e=>e.isPending),error:i.find(e=>e.error)?.error??null});function u(i){const e=m({queries:i.map(o=>({...r({path:{accountId:o.accountId}}),staleTime:1/0})),combine:a});return{index:s.useMemo(()=>t(i.map((o,n)=>({folderAppointments:o.folderAppointments,mailboxes:e.items[n]??[]}))),[i,e]),isPending:e.isPending,error:e.error}}export{u};
1
+ import{K as r,r as s,b7 as t}from"./index-sX1xY_ye.js";import{u as m}from"./useQueries-Yk6rRJaD.js";const a=i=>({items:i.map(e=>e.data?.items??[]),isPending:i.some(e=>e.isPending),error:i.find(e=>e.error)?.error??null});function u(i){const e=m({queries:i.map(o=>({...r({path:{accountId:o.accountId}}),staleTime:1/0})),combine:a});return{index:s.useMemo(()=>t(i.map((o,n)=>({folderAppointments:o.folderAppointments,mailboxes:e.items[n]??[]}))),[i,e]),isPending:e.isPending,error:e.error}}export{u};
@@ -1,4 +1,4 @@
1
- import{r as p,j as a,ct as ee,t as y,I as te,h as se,at as re,i as ne,av as ae,cO as oe,bS as ie,ab as ce,a0 as le,X as de,d6 as D,d7 as F,C as ue,cn as me}from"./index-DyXh0uZR.js";import{K as S}from"./kbd-BZqsDz_U.js";import{B as fe,b as he}from"./useMessageBodyContent-BAKTxkDn.js";import{i as ge}from"./search-scope-B5-OK3Cq.js";const pe='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',A={light:{fg:"oklch(0.3 0.025 235)",canvas:"oklch(0.96 0.015 90)",accent:"oklch(0.55 0.14 150)"},dark:{fg:"oklch(0.88 0.02 90)",canvas:"oklch(0.22 0.025 220)",accent:"oklch(0.78 0.16 150)"}},be={background:!1,spacing:!1},ye="16px",xe=()=>`html{padding:0}body{padding:${ye};box-sizing:border-box}`,we=()=>"html{overflow:hidden}body{overflow-x:auto}",ve=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,ke='<meta name="viewport" content="width=device-width, initial-scale=1">',Ae=e=>{const t=e?A.dark:A.light;return`
1
+ import{r as p,j as a,ct as ee,t as y,I as te,h as se,at as re,i as ne,av as ae,cO as oe,bS as ie,ab as ce,a0 as le,X as de,d6 as D,d7 as F,C as ue,cn as me}from"./index-sX1xY_ye.js";import{K as S}from"./kbd-C2HaWlmQ.js";import{B as fe,b as he}from"./useMessageBodyContent-hPuofJUT.js";import{i as ge}from"./search-scope-B5-OK3Cq.js";const pe='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',A={light:{fg:"oklch(0.3 0.025 235)",canvas:"oklch(0.96 0.015 90)",accent:"oklch(0.55 0.14 150)"},dark:{fg:"oklch(0.88 0.02 90)",canvas:"oklch(0.22 0.025 220)",accent:"oklch(0.78 0.16 150)"}},be={background:!1,spacing:!1},ye="16px",xe=()=>`html{padding:0}body{padding:${ye};box-sizing:border-box}`,we=()=>"html{overflow:hidden}body{overflow-x:auto}",ve=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,ke='<meta name="viewport" content="width=device-width, initial-scale=1">',Ae=e=>{const t=e?A.dark:A.light;return`
2
2
  /* Plain-email base: UI font-stack + theme-aware colors (#424) */
3
3
  html, body {
4
4
  font-family: ${pe};
@@ -1 +1 @@
1
- import{h as L,at as M,i as k,E as I,F as E,cy as A,em as R,r as v,dy as j,j as p,en as h,eo as w,ep as D,C as _,cn as N,c as Q,dT as z,d6 as O}from"./index-DyXh0uZR.js";import{c as U}from"./popover-menu-2PYa43as.js";import{aj as q}from"./MailListHeader-BF_0ASsH.js";import{a as P}from"./useLabels-Cae2UsI0.js";import{n as B}from"./search-query-Cr_ZXBCp.js";import{b as F}from"./search-scope-B5-OK3Cq.js";import{u as G,p as H}from"./useSearchTokenContext-DdCG0VLu.js";const ne=e=>{const t=new Set;for(const s of e)s&&t.add(s);return t.size>1?{accountId:void 0,restriction:"spansAccounts",moveDisabledHint:"Move only works within one account — clear selection or pick messages from a single account"}:{accountId:t.size===1?[...t][0]:void 0,restriction:void 0,moveDisabledHint:void 0}},K=e=>{const{mailboxId:t,messages:s}=e,n=L(),{pushError:l}=M(),{mutateAsync:c,isPending:a}=k({...R(),onError:(r,u)=>{l({title:u.body.action==="Remove"?"Couldn't remove label":"Couldn't apply label",detail:A(r),error:r})},onSettled:(r,u,d)=>{I(n,E(q(d.body.messageIds??[],s??[],t)))}});return{applyLabel:v.useCallback((r,u,d)=>{r.length!==0&&j(r,m=>c({body:{messageIds:m,labelId:u,action:d}}))},[c]),isPending:a}};function re({accountId:e,mailboxId:t,messageIds:s}){const{labels:n}=P(e),{applyLabel:l}=K({mailboxId:t}),c=v.useMemo(()=>n.map(a=>({key:a.labelId,label:a.name,icon:p.jsx("span",{className:`size-2.5 rounded-full ${w(a.color)?h[a.color]:h.Default}`}),onSelect:()=>l(s,a.labelId,"Apply")})),[n,s,l]);return c.length===0?null:p.jsx(U,{triggerLabel:"Apply label to selected messages",triggerIcon:p.jsx(D,{className:"size-4 text-fg-subtle"}),triggerText:"Apply label",items:c,align:"start",nested:!0,touch:!1,triggerClassName:"min-h-11 w-full justify-start gap-3 px-4 py-2.5 text-sm font-normal text-fg"})}const V=3,ie=({hasSearchQuery:e,freeText:t,residualTokenCount:s})=>{if(!e||s>0)return!1;const n=t.trim();return n.length===0||n.length>=V},ce=e=>e===void 0?{kind:"unknown"}:{kind:"exact",value:e},Y=20,$=new Set(Object.values(O)),J=e=>e!==void 0&&$.has(e)?e:void 0,W=e=>{if(e.some(t=>t.type==="isUnread"))return!1;if(e.some(t=>t.type==="isRead"))return!0};function le({mailboxId:e,filterCategory:t}={}){const{searchQuery:s}=_(),n=G(),l=N(),c=B(s),{freeText:a,tokens:i}=H(c,n),r=a.length>0,u=i.find(o=>o.type==="category"),d=J(t)??u?.category,m=i.some(o=>o.type==="hasAttachment")?!0:void 0,f=i.some(o=>o.type==="isStarred")?!0:void 0,y=W(i),b=i.find(o=>o.type==="after"),g=i.find(o=>o.type==="before"),x=i.find(o=>o.type==="in"),S=F({browsed:l,callerMailboxId:e,inTokenMailboxId:x?.mailboxId}),{data:T,isLoading:C}=Q({...z({query:{query:a,mailboxId:S,limit:Y,...d!==void 0?{category:d}:{},...m!==void 0?{hasAttachment:m}:{},...f!==void 0?{hasStars:f}:{},...y!==void 0?{isRead:y}:{},...b?{sentDateFrom:b.epochSeconds}:{},...g?{sentDateTo:g.epochSeconds}:{}}}),enabled:r,staleTime:6e4});return{hits:T?.items??[],isLoading:r&&C}}export{re as L,ne as r,ie as s,ce as t,le as u};
1
+ import{h as L,at as M,i as k,E as I,F as E,cy as A,em as R,r as v,dy as j,j as p,en as h,eo as w,ep as D,C as _,cn as N,c as Q,dT as z,d6 as O}from"./index-sX1xY_ye.js";import{c as U}from"./popover-menu-6EW5dPCf.js";import{aj as q}from"./MailListHeader-U5Wr2TGm.js";import{a as P}from"./useLabels-D-8squEI.js";import{n as B}from"./search-query-Cr_ZXBCp.js";import{b as F}from"./search-scope-B5-OK3Cq.js";import{u as G,p as H}from"./useSearchTokenContext-D5JEnGSM.js";const ne=e=>{const t=new Set;for(const s of e)s&&t.add(s);return t.size>1?{accountId:void 0,restriction:"spansAccounts",moveDisabledHint:"Move only works within one account — clear selection or pick messages from a single account"}:{accountId:t.size===1?[...t][0]:void 0,restriction:void 0,moveDisabledHint:void 0}},K=e=>{const{mailboxId:t,messages:s}=e,n=L(),{pushError:l}=M(),{mutateAsync:c,isPending:a}=k({...R(),onError:(r,u)=>{l({title:u.body.action==="Remove"?"Couldn't remove label":"Couldn't apply label",detail:A(r),error:r})},onSettled:(r,u,d)=>{I(n,E(q(d.body.messageIds??[],s??[],t)))}});return{applyLabel:v.useCallback((r,u,d)=>{r.length!==0&&j(r,m=>c({body:{messageIds:m,labelId:u,action:d}}))},[c]),isPending:a}};function re({accountId:e,mailboxId:t,messageIds:s}){const{labels:n}=P(e),{applyLabel:l}=K({mailboxId:t}),c=v.useMemo(()=>n.map(a=>({key:a.labelId,label:a.name,icon:p.jsx("span",{className:`size-2.5 rounded-full ${w(a.color)?h[a.color]:h.Default}`}),onSelect:()=>l(s,a.labelId,"Apply")})),[n,s,l]);return c.length===0?null:p.jsx(U,{triggerLabel:"Apply label to selected messages",triggerIcon:p.jsx(D,{className:"size-4 text-fg-subtle"}),triggerText:"Apply label",items:c,align:"start",nested:!0,touch:!1,triggerClassName:"min-h-11 w-full justify-start gap-3 px-4 py-2.5 text-sm font-normal text-fg"})}const V=3,ie=({hasSearchQuery:e,freeText:t,residualTokenCount:s})=>{if(!e||s>0)return!1;const n=t.trim();return n.length===0||n.length>=V},ce=e=>e===void 0?{kind:"unknown"}:{kind:"exact",value:e},Y=20,$=new Set(Object.values(O)),J=e=>e!==void 0&&$.has(e)?e:void 0,W=e=>{if(e.some(t=>t.type==="isUnread"))return!1;if(e.some(t=>t.type==="isRead"))return!0};function le({mailboxId:e,filterCategory:t}={}){const{searchQuery:s}=_(),n=G(),l=N(),c=B(s),{freeText:a,tokens:i}=H(c,n),r=a.length>0,u=i.find(o=>o.type==="category"),d=J(t)??u?.category,m=i.some(o=>o.type==="hasAttachment")?!0:void 0,f=i.some(o=>o.type==="isStarred")?!0:void 0,y=W(i),b=i.find(o=>o.type==="after"),g=i.find(o=>o.type==="before"),x=i.find(o=>o.type==="in"),S=F({browsed:l,callerMailboxId:e,inTokenMailboxId:x?.mailboxId}),{data:T,isLoading:C}=Q({...z({query:{query:a,mailboxId:S,limit:Y,...d!==void 0?{category:d}:{},...m!==void 0?{hasAttachment:m}:{},...f!==void 0?{hasStars:f}:{},...y!==void 0?{isRead:y}:{},...b?{sentDateFrom:b.epochSeconds}:{},...g?{sentDateTo:g.epochSeconds}:{}}}),enabled:r,staleTime:6e4});return{hits:T?.items??[],isLoading:r&&C}}export{re as L,ne as r,ie as s,ce as t,le as u};
@@ -1 +1 @@
1
- import{h as g,at as p,c as f,d as m,r,i as y,av as T,o as E,l as d}from"./index-DyXh0uZR.js";const i={html:"",plainText:""},x=e=>{const u=g(),{pushError:o}=p(),{data:n}=f({...m(),staleTime:1/0}),l=r.useMemo(()=>{if(!e||!n)return i;const t=n.accounts.find(a=>a.accountId===e);return t?{html:t.signatureHtml??"",plainText:t.signaturePlainText??""}:i},[e,n]),s=y({...d(),onSuccess:()=>{u.invalidateQueries({queryKey:E()})},onError:t=>{o(T("Couldn't save signature","The signature wasn't saved.",t))}}),c=r.useCallback((t,a)=>{e&&s.mutate({path:{accountId:e},body:{signatureHtml:t,signaturePlainText:a}})},[e,s]);return{signature:l,setSignature:c,isSaving:s.isPending}};export{x as u};
1
+ import{h as g,at as p,c as f,d as m,r,i as y,av as T,o as E,l as d}from"./index-sX1xY_ye.js";const i={html:"",plainText:""},x=e=>{const u=g(),{pushError:o}=p(),{data:n}=f({...m(),staleTime:1/0}),l=r.useMemo(()=>{if(!e||!n)return i;const t=n.accounts.find(a=>a.accountId===e);return t?{html:t.signatureHtml??"",plainText:t.signaturePlainText??""}:i},[e,n]),s=y({...d(),onSuccess:()=>{u.invalidateQueries({queryKey:E()})},onError:t=>{o(T("Couldn't save signature","The signature wasn't saved.",t))}}),c=r.useCallback((t,a)=>{e&&s.mutate({path:{accountId:e},body:{signatureHtml:t,signaturePlainText:a}})},[e,s]);return{signature:l,setSignature:c,isSaving:s.isPending}};export{x as u};
@@ -0,0 +1 @@
1
+ const t=a=>{const d=new Set;return a.filter(e=>e.threadId===void 0?!0:d.has(e.threadId)?!1:(d.add(e.threadId),!0))},r=(a,d)=>a.filter(e=>d.has(e.id)).map(e=>({id:e.id,sender:e.fromName,email:e.fromEmail,subject:e.subject,date:e.timeLabel,accountId:e.accountId,mailboxId:e.mailboxId}));export{t as d,r as w};
package/index.html CHANGED
@@ -38,7 +38,7 @@
38
38
  } catch (_) {}
39
39
  })();
40
40
  </script>
41
- <script type="module" crossorigin src="/assets/index-DyXh0uZR.js"></script>
41
+ <script type="module" crossorigin src="/assets/index-sX1xY_ye.js"></script>
42
42
  <link rel="stylesheet" crossorigin href="/assets/index-BtYEmjxr.css">
43
43
  </head>
44
44
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remit/web-client-dist",
3
- "version": "0.0.646",
3
+ "version": "0.0.648",
4
4
  "description": "Built Remit web client — static assets and the default runtime config.",
5
5
  "files": [
6
6
  "**/*"