@remit/web-client-dist 0.0.608 → 0.0.610

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 (161) hide show
  1. package/assets/{BriefPane-9RAcKTr6.js → BriefPane-Kq7MoJAy.js} +1 -1
  2. package/assets/CalendarComposePane-ttBV9i0L.js +1 -0
  3. package/assets/{CalendarComposeSeed-CbLjS67l.js → CalendarComposeSeed-C7PMJf3X.js} +1 -1
  4. package/assets/{CalendarShell-CNTKoWaE.js → CalendarShell-BXd2Haz7.js} +1 -1
  5. package/assets/{EmptyState-ao1ueR2o.js → EmptyState-BKE2sE6S.js} +1 -1
  6. package/assets/{ErrorState-B-J6YL9j.js → ErrorState-B4doIuh3.js} +1 -1
  7. package/assets/FlaggedPane-KpOQPoF4.js +1 -0
  8. package/assets/{FullCompose-NQcucgOV.js → FullCompose-DZFqFx7R.js} +1 -1
  9. package/assets/MailListHeader-Cr3dh1lr.js +7 -0
  10. package/assets/{MailNav-BYKbXF9f.js → MailNav-BJkhFpG1.js} +1 -1
  11. package/assets/{MailShell-B05KaT94.js → MailShell-VD8T-esR.js} +1 -1
  12. package/assets/{MailViewChrome-DD5n_rfl.js → MailViewChrome-BNYMeppG.js} +1 -1
  13. package/assets/{MailboxPane-BIzY_LrI.js → MailboxPane-uT1N9BhB.js} +1 -1
  14. package/assets/{NavMenuButton-6fU218jt.js → NavMenuButton-Dt1LP3xE.js} +1 -1
  15. package/assets/{OnboardingWizard-BpX8hCZv.js → OnboardingWizard-CLrbNDe0.js} +1 -1
  16. package/assets/OpenCalendarEvent-B4t8buuN.js +2 -0
  17. package/assets/{OutboxPane-BoKXFcDY.js → OutboxPane-BgicoJNx.js} +1 -1
  18. package/assets/_calendarObjectId-CFtpT0Ix.js +1 -0
  19. package/assets/_mailboxId-D_qVBgnH.js +1 -0
  20. package/assets/_messageId-B2tb6nqD.js +1 -0
  21. package/assets/_messageId-CTfvCQ05.js +1 -0
  22. package/assets/_messageId-Dwnupv2j.js +1 -0
  23. package/assets/_outboxMessageId-B9NwJpUk.js +1 -0
  24. package/assets/_recurrenceId-BWuZ3_N-.js +1 -0
  25. package/assets/_threadId-DHfmKFv7.js +1 -0
  26. package/assets/_threadId-FxPMiWcj.js +1 -0
  27. package/assets/_threadId-sl_d6CQV.js +1 -0
  28. package/assets/_view._date-BUkVaJfJ.js +1 -0
  29. package/assets/{accounts-C8wHybOd.js → accounts-KxpTqYDU.js} +1 -1
  30. package/assets/{advanced-3sKZirDN.js → advanced-lZ0Z0Nxq.js} +1 -1
  31. package/assets/{appearance-Dc3v702s.js → appearance-D0f-oVFV.js} +1 -1
  32. package/assets/{attachment-file-DYTezijn.js → attachment-file-gAfp0dv-.js} +1 -1
  33. package/assets/{attendee-row-QIQWsWP6.js → attendee-row-DHIFSmzm.js} +1 -1
  34. package/assets/{avatar-BnZJq1FN.js → avatar-7RE-k5-A.js} +1 -1
  35. package/assets/{bell-off-BLq1jBN4.js → bell-off-2elvUVuL.js} +1 -1
  36. package/assets/{bottom-sheet-B8_C8sX6.js → bottom-sheet-COGW8Xhr.js} +1 -1
  37. package/assets/brief-CxKKKuQk.js +1 -0
  38. package/assets/{brief-BkJfyEo_.js → brief-Dxzfvs5G.js} +1 -1
  39. package/assets/{browser-ponyfill-ZOuEXW_V.js → browser-ponyfill-DrLxbvqZ.js} +2 -2
  40. package/assets/{bug-BmRqjTUA.js → bug-DJ0r63wN.js} +1 -1
  41. package/assets/calendar-clash-strip-eWCsRV5H.js +1 -0
  42. package/assets/{calendar-color-Cxn4ZPzR.js → calendar-color-B7xysQBF.js} +1 -1
  43. package/assets/{calendar-event-chip-B_Cf_OxT.js → calendar-event-chip-YG8KNEUD.js} +1 -1
  44. package/assets/{calendar-HYitsTfr.js → calendar-nUAU716h.js} +1 -1
  45. package/assets/calendars-DYQEUEYF.js +1 -0
  46. package/assets/{card-CkkUS8SZ.js → card-DcD9Y2of.js} +1 -1
  47. package/assets/chevron-left-Bs8EPTJ8.js +1 -0
  48. package/assets/{circle-check-DzZNhkkg.js → circle-check-BW5VvBID.js} +1 -1
  49. package/assets/{circle-check-big-CHW0iPjh.js → circle-check-big-DB4LtNLR.js} +1 -1
  50. package/assets/{circle-help-CSU4w5Pb.js → circle-help-B7f57nO2.js} +1 -1
  51. package/assets/{clock-BvXD0oTl.js → clock-KyDYmL_A.js} +1 -1
  52. package/assets/compose._-_outboxMessageId_-B_6khNUI.js +1 -0
  53. package/assets/compose._-_outboxMessageId_-D1BmLZaX.js +1 -0
  54. package/assets/compose._-_outboxMessageId_-D5qcsG7o.js +1 -0
  55. package/assets/compose._-_outboxMessageId_-DwAGbQVG.js +1 -0
  56. package/assets/{config-import-DV6FpU03.js → config-import-CftwNmED.js} +1 -1
  57. package/assets/{confirm-dialog-Bb4h-Jam.js → confirm-dialog-hp8qmvZN.js} +1 -1
  58. package/assets/{copy-CxjlxKuG.js → copy-BehHKJjo.js} +1 -1
  59. package/assets/{credential-steps-DHRsZ6HB.js → credential-steps-DmXpJwCH.js} +1 -1
  60. package/assets/{download-B14Ua3fd.js → download-DXuQtb0t.js} +1 -1
  61. package/assets/{file-json-Z8jO7RfX.js → file-json-B-S5BJx7.js} +1 -1
  62. package/assets/{filters-BgXBRhlg.js → filters-DRyIVoRk.js} +1 -1
  63. package/assets/flagged-CMBnwLQz.js +1 -0
  64. package/assets/{flagged-rtr6YddL.js → flagged-SRvsIdow.js} +1 -1
  65. package/assets/{folders-DYAoC001.js → folders-ZdK61UX1.js} +1 -1
  66. package/assets/{help-copy-CMfaQUWx.js → help-copy-DvXDd3A2.js} +1 -1
  67. package/assets/{import-D8GG25XX.js → import-CywdkU8D.js} +1 -1
  68. package/assets/index-BOWx-sgS.js +1 -0
  69. package/assets/index-BjYWtyXb.js +1 -0
  70. package/assets/{index-BfZf8_QG.js → index-CSe-0o3z.js} +4 -4
  71. package/assets/index-CTfvCQ05.js +1 -0
  72. package/assets/{index-CrpWQTJG.css → index-CzAIxx9Z.css} +1 -1
  73. package/assets/{index-Kq_EKdUy.js → index-DX-AkLZt.js} +1 -1
  74. package/assets/index-D_5qJImV.js +1 -0
  75. package/assets/{index-PzxNuyxu.js → index-DwhL5hnf.js} +16 -16
  76. package/assets/index-Dwnupv2j.js +1 -0
  77. package/assets/index-DxfAQwfN.js +1 -0
  78. package/assets/index-KnIZpIn3.js +1 -0
  79. package/assets/index-QCi5bf-f.js +1 -0
  80. package/assets/index-wMLxaOh9.js +1 -0
  81. package/assets/{kbd-BVBLrQ0Q.js → kbd-BtXVxwvP.js} +1 -1
  82. package/assets/{labels-Chh2tDZm.js → labels-D6qwIMrt.js} +1 -1
  83. package/assets/{mail-BT3gfvMZ.js → mail-Ccrh3W1B.js} +1 -1
  84. package/assets/{mail-B5AQNfwN.js → mail-rkmoOhw6.js} +1 -1
  85. package/assets/{map-pin-BNoNVfBF.js → map-pin-Dj0bt5rD.js} +1 -1
  86. package/assets/{menu-CNpPcIUi.js → menu-BPjTyRCV.js} +1 -1
  87. package/assets/new-QJ-4fc5u.js +1 -0
  88. package/assets/onboarding-YoCVBCb1.js +1 -0
  89. package/assets/{onboarding-completion-wjT6bq2W.js → onboarding-completion-T025R-la.js} +1 -1
  90. package/assets/outbox-yKrqS1SB.js +1 -0
  91. package/assets/{pencil-B_cEygQf.js → pencil-P-_8cd4g.js} +1 -1
  92. package/assets/{popover-menu-COZUO8Qj.js → popover-menu-zNHNSI3_.js} +1 -1
  93. package/assets/{refresh-cw-D_7Zl0fy.js → refresh-cw-Cs4y2h9j.js} +1 -1
  94. package/assets/{rich-text-spellcheck-worker-provider-B8ac9-ay.js → rich-text-spellcheck-worker-provider-BFfWZ_zK.js} +1 -1
  95. package/assets/{rich-text-CFwzHkkx.js → rich-text-z3u6nrPZ.js} +1 -1
  96. package/assets/{rotate-ccw-B9-iqmFv.js → rotate-ccw-D5sQyGgW.js} +1 -1
  97. package/assets/{roving-focus-Bu6nJrnj.js → roving-focus-Ct_H2vAt.js} +1 -1
  98. package/assets/{row-actions-DdXoR1Xu.js → row-actions-D0c6yFtF.js} +1 -1
  99. package/assets/{search-mirror-OOp8v1ZB.js → search-mirror-5oaQJJ5X.js} +1 -1
  100. package/assets/{search-token-index-DdGc2j7R.js → search-token-index-C-vkr8-Q.js} +1 -1
  101. package/assets/{sections-C_lN53Kd.js → sections-6u7X6kpS.js} +1 -1
  102. package/assets/{senders-3RrRujGK.js → senders-DVWtV0Jn.js} +1 -1
  103. package/assets/settings-0zdwOzw2.js +1 -0
  104. package/assets/{settings-screen-DAyAmbL-.js → settings-screen-CI1LKAj1.js} +1 -1
  105. package/assets/{shield-check-Dy39zTNy.js → shield-check-8fB_o9g_.js} +1 -1
  106. package/assets/{suggested-vips-Bi9ZzNwa.js → suggested-vips-eHBzizh2.js} +1 -1
  107. package/assets/useCalendarData-D3lnaVPT.js +1 -0
  108. package/assets/useCalendarEvents-BWtbpeou.js +1 -0
  109. package/assets/useCalendarWrites-DaYZtUht.js +1 -0
  110. package/assets/{useCalendars-hgkIqmPl.js → useCalendars-B_XYS-rT.js} +1 -1
  111. package/assets/{useDebouncedValue-CGTg2GA9.js → useDebouncedValue-B64vGBCU.js} +1 -1
  112. package/assets/{useFilters-CKh1WckH.js → useFilters-BJY1xkwL.js} +1 -1
  113. package/assets/{useLabels-DzVQRtbu.js → useLabels-Cv6tv63h.js} +1 -1
  114. package/assets/{useLayoutTier-BWxZ5OK5.js → useLayoutTier-C9LMS8G8.js} +1 -1
  115. package/assets/{useMessageBodyContent-C-IdvqlN.js → useMessageBodyContent-Booydip_.js} +1 -1
  116. package/assets/{useQueries-DFhZXKwO.js → useQueries-DgS8Aq9E.js} +1 -1
  117. package/assets/{useRefreshControl-BMmKiqsM.js → useRefreshControl-CqC7eCqT.js} +1 -1
  118. package/assets/{useResultFolderIndex-CM-jFah_.js → useResultFolderIndex-BSqeSFyx.js} +1 -1
  119. package/assets/{useSearchTokenContext-n3Gy_BGx.js → useSearchTokenContext-B2wE1jWs.js} +3 -3
  120. package/assets/{useSemanticSearch-lEuL2iqZ.js → useSemanticSearch-CD7vKuwt.js} +1 -1
  121. package/assets/{useSignature-riL1g2Ew.js → useSignature-CrtRyC6V.js} +1 -1
  122. package/index.html +2 -2
  123. package/package.json +1 -1
  124. package/assets/CalendarComposePane-DxyYI0_C.js +0 -1
  125. package/assets/FlaggedPane-BLa2k74e.js +0 -1
  126. package/assets/MailListHeader-D3a1nfmy.js +0 -7
  127. package/assets/OpenCalendarEvent-eTVbJZeS.js +0 -2
  128. package/assets/_calendarObjectId-h4BI-AjI.js +0 -1
  129. package/assets/_mailboxId-B_oI7K0X.js +0 -1
  130. package/assets/_messageId-BVxi69qr.js +0 -1
  131. package/assets/_messageId-DZ_11fPV.js +0 -1
  132. package/assets/_messageId-xVR7qCbQ.js +0 -1
  133. package/assets/_outboxMessageId-Dr1umFNi.js +0 -1
  134. package/assets/_recurrenceId-CJPjmqAO.js +0 -1
  135. package/assets/_threadId-B8Xw5kU0.js +0 -1
  136. package/assets/_threadId-BRVfWx2W.js +0 -1
  137. package/assets/_threadId-DlPxy65d.js +0 -1
  138. package/assets/_view._date-C4lh0OOz.js +0 -1
  139. package/assets/brief-CNWHYaAv.js +0 -1
  140. package/assets/calendars-tQrgSvcy.js +0 -1
  141. package/assets/chevron-left-BIHdvm_f.js +0 -1
  142. package/assets/compose._-_outboxMessageId_-5FudxfWK.js +0 -1
  143. package/assets/compose._-_outboxMessageId_-BjI6z8r8.js +0 -1
  144. package/assets/compose._-_outboxMessageId_-Dx_bd0oB.js +0 -1
  145. package/assets/compose._-_outboxMessageId_-IV_YOuJe.js +0 -1
  146. package/assets/flagged-CkLmPjJI.js +0 -1
  147. package/assets/index-1QEvQhvs.js +0 -1
  148. package/assets/index-BVxi69qr.js +0 -1
  149. package/assets/index-CAy8WyLu.js +0 -1
  150. package/assets/index-Cnff_o0J.js +0 -1
  151. package/assets/index-CrR3K9LI.js +0 -1
  152. package/assets/index-D8C-vlfl.js +0 -1
  153. package/assets/index-cdgGF3Qy.js +0 -1
  154. package/assets/index-mb-6DJMv.js +0 -1
  155. package/assets/index-xVR7qCbQ.js +0 -1
  156. package/assets/new-xfOeKAmg.js +0 -1
  157. package/assets/onboarding-BIXqzFxZ.js +0 -1
  158. package/assets/outbox-VzKAZbU_.js +0 -1
  159. package/assets/settings-CwmhayaS.js +0 -1
  160. package/assets/useCalendarData-CP3SyP9Z.js +0 -1
  161. package/assets/window-DwWXASUb.js +0 -1
@@ -1 +1 @@
1
- import{j as t,an as e}from"./index-PzxNuyxu.js";const o=()=>t.jsx(e,{to:"/settings/senders",replace:!0});export{o as component};
1
+ import{j as t,an as e}from"./index-DwhL5hnf.js";const o=()=>t.jsx(e,{to:"/settings/senders",replace:!0});export{o as component};
@@ -0,0 +1 @@
1
+ import{r as C}from"./index-DwhL5hnf.js";import{o as g,z as m,A as I}from"./useCalendarEvents-BWtbpeou.js";import{u as p,i as v,t as D,U as E,r as y}from"./useCalendars-B_XYS-rT.js";function L(a,e){const r=a.map(n=>n.id);if(e.length===0)return r;const t=new Set(e),s=r.filter(n=>t.has(n));return s.length===0?r:s}function A(a){const{calendars:e,colorByCalendarId:r,timeZoneByCalendarId:t,isLoading:s}=p(),n=L(e,a),o=n.length===e.length?[]:n,c=a.length===0||e.length>0;return{calendars:e,colorByCalendarId:r,timeZoneByCalendarId:t,shown:n,narrowed:o,resolved:c,isLoading:s}}function B(a,e,r){const t=r.join(",");return C.useMemo(()=>{const s=new Set(t===""?[]:t.split(","));return a.filter(n=>v(n)&&s.has(n.calendarId)).map(n=>D(n,e[n.calendarId]??E))},[a,e,t])}function b({view:a,date:e,calendarIds:r,enabled:t=!0}){const{calendars:s,colorByCalendarId:n,timeZoneByCalendarId:o,shown:c,narrowed:l,resolved:u,isLoading:w}=A(r),h=g(a,e),i=t&&u,d=m({...h,calendarIds:l,enabled:i});I(a,e,l,i);const f=B(d.instances,o,c);return{calendars:s,events:f,colorByCalendarId:n,timeZoneByCalendarId:o,isLoading:w||d.isLoading,error:d.error,retry:d.refetch,instanceOf:y}}export{B as a,b,A as u};
@@ -0,0 +1 @@
1
+ import{a9 as y,eJ as R,r as d,eK as _,bZ as O,u as W,cn as B,eL as k,c as P,eM as T,h as z,s as F}from"./index-DwhL5hnf.js";import{u as G}from"./useQueries-DgS8Aq9E.js";const p=480,h=1320,b=90;function w(t){return Number(t.slice(11,13))*60+Number(t.slice(14,16))}function ut(t){const e=Math.max(0,Math.min(1440,Math.round(t)));return`${String(Math.floor(e/60)).padStart(2,"0")}:${String(e%60).padStart(2,"0")}`}function ft(t){const e=Math.round(t);if(e<60)return`${e}m`;const n=Math.floor(e/60),r=e%60;return r===0?`${n}h`:`${n}h ${r}m`}function A(t,e){const n=new Date(`${t}T00:00:00Z`);return n.setUTCDate(n.getUTCDate()+e),n.toISOString().slice(0,10)}function lt(t,e){return Math.round((Date.parse(`${e}T00:00:00Z`)-Date.parse(`${t}T00:00:00Z`))/864e5)}function dt(t){const e=t.start.slice(0,10),n=t.end.slice(0,10);if(!t.allDay)return n;const r=A(n,-1);return r<e?e:r}function ht(t,e){const n=[];for(let r=t;r<=e;r=A(r,1))n.push(r);return n}function mt(t){const[e,n,r]=t.split("-").map(Number);return new Date(e,n-1,r).toLocaleDateString("en-GB",{month:"long",year:"numeric"})}function pt(t){const[e,n,r]=t.split("-").map(Number);return new Date(e,n-1,r).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short"})}function yt(t){const[e,n,r]=t.split("-").map(Number);return new Date(e,n-1,r).toLocaleDateString("en-GB",{weekday:"long"})}function Dt(t,e){const[n,r,s]=t.split("-").map(Number),[a,o,c]=e.split("-").map(Number),u=new Date(n,r-1,s),f=new Date(a,o-1,c),i=u.toLocaleDateString("en-GB",{weekday:"short",day:"numeric",...r===o?{}:{month:"short"}}),g=f.toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short"});return`${i} – ${g}`}function Y(t){const[e,n,r]=t.split("-").map(Number);return new Date(e,n-1,r).toLocaleDateString("en-GB",{weekday:"short"})}function l(t){return new Date(t).getTime()}function q(t,e){return t.allDay?e>=t.start.slice(0,10)&&e<t.end.slice(0,10):t.start.slice(0,10)===e}function Q(t,e){return l(t.start)<l(e.end)&&l(e.start)<l(t.end)}function K(t){const e=t.map(a=>[l(a.start),l(a.end)]).sort((a,o)=>a[0]-o[0]);let n=0,r=0,s=0;for(const[a,o]of e){if(a>s){n+=s-r,r=a,s=o;continue}s=Math.max(s,o)}return n+=s-r,Math.round(n/6e4)}function V(t){const e=[];for(const n of t){const r=t.filter(a=>a.id===n.id||Q(n,a)).map(a=>a.id).sort();if(r.length<2)continue;const s=r.join("|");e.some(a=>a.join("|")===s)||e.push(r)}return e.filter(n=>!e.some(r=>r!==n&&n.every(s=>r.includes(s))))}function gt(t,e,n){const r=e.filter(a=>q(a,t)),s=r.filter(a=>!a.allDay).sort((a,o)=>l(a.start)-l(o.start));return{date:t,weekdayLabel:Y(t),dayNumber:Number(t.slice(8)),isToday:t===n,timed:s,allDay:r.filter(a=>a.allDay),busyMinutes:K(s),conflicts:V(s)}}function J(t){return t.timed.length===0&&t.allDay.length===0}function Z(t){return I(t.timed.map(e=>({from:w(e.start),to:w(e.end)})))}function I(t){const e=[...t].sort((r,s)=>r.from-s.from),n=[];for(const r of e){const s=n[n.length-1];if(s&&r.from<=s.to){s.to=Math.max(s.to,r.to);continue}n.push({...r})}return n}function E(t){return Math.min(Math.max(t,p),h)}function H(t,e,n=b){const r=I(e);if(r.length===0)return[{date:t,startMinute:p,endMinute:h,minutes:h-p,wholeDay:!0}];const s=[];let a=p;for(const o of r){const c=E(o.from),u=E(o.to);c-a>=n&&s.push({date:t,startMinute:a,endMinute:c,minutes:c-a,wholeDay:!1}),a=Math.max(a,c,u)}return h-a>=n&&s.push({date:t,startMinute:a,endMinute:h,minutes:h-a,wholeDay:!1}),s}function X(t,e=b){return H(t.date,Z(t),e)}function $t(t,e,{ignoreIds:n=[]}={}){const r=Date.parse(t.start),s=Date.parse(t.end);return e.filter(a=>a.allDay||a.myRsvp==="declined"||n.includes(a.id)?!1:Date.parse(a.start)<s&&r<Date.parse(a.end))}function wt(t,e){const n=[];let r=[];const s=()=>{r.length!==0&&(r.length===1?n.push({kind:"day",key:r[0].date,day:r[0]}):n.push({kind:"run",key:`run_${r[0].date}`,from:r[0].date,to:r[r.length-1].date,days:r.length}),r=[])};for(const a of t){if(J(a)&&!e.includes(a.date)){r.push(a);continue}s(),n.push({kind:"day",key:a.date,day:a})}return s(),n}function Mt(t){const e=[];for(const n of t){const r=e[e.length-1],s=r?Math.max(...r.map(a=>Date.parse(a.end))):0;if(r&&Date.parse(n.start)<s){r.push(n);continue}e.push([n])}return e}function Tt(t,e){const n=Date.parse(e),r=e.slice(0,10),s=t.flatMap(f=>f.timed).sort((f,i)=>Date.parse(f.start)-Date.parse(i.start)),a=s.filter(f=>Date.parse(f.start)<=n&&Date.parse(f.end)>n),o=s.filter(f=>Date.parse(f.start)>n),c=o[0],u=a.filter(f=>f.start.slice(0,10)===r).length+o.filter(f=>f.start.slice(0,10)===r).length;return{running:a,next:c,minutesUntilNext:c?Math.round((Date.parse(c.start)-n)/6e4):0,after:o[1],restOfDay:u,free:tt(t,e,1)[0]}}function tt(t,e,n){const r=e.slice(0,10),s=w(e),a=[];for(const o of t)if(!(o.date<r))for(const c of X(o)){if(o.date>r)a.push(c);else{const u=Math.max(c.startMinute,s);if(c.endMinute-u<b)continue;a.push({...c,startMinute:u,minutes:c.endMinute-u,wholeDay:c.wholeDay&&u===c.startMinute})}if(a.length===n)return a}return a}const D="/calendar/$view/$date";function et(){const t=y({from:D,shouldThrow:!1}),e=R({from:D,shouldThrow:!1}),n=t?.view??"",r=t?.date??"",s=e?.calendarId;return d.useMemo(()=>({..._({view:n,date:r},O(new Date)),calendarIds:s??[]}),[n,r,s])}function bt(){const t=y({from:"/calendar/$view/$date/$calendarObjectId",shouldThrow:!1}),e=y({from:"/calendar/$view/$date/$calendarObjectId/$recurrenceId",shouldThrow:!1}),n=t?.calendarObjectId,r=e?.recurrenceId;return d.useMemo(()=>n?{calendarObjectId:n,recurrenceId:r}:void 0,[n,r])}function Nt(){return y({from:"/calendar/$view/$date/new",shouldThrow:!1})!==void 0}function St(){const t=W(),e=B(),{view:n,date:r}=et(),s=d.useCallback(a=>{t({to:D,params:a,search:!0,hash:e})},[t,e]);return d.useMemo(()=>({goToView:a=>s({view:a,date:r}),step:a=>s({view:n,date:k(r,n,a)}),goToToday:()=>s({view:n,date:O(new Date)}),setAnchorDate:a=>t({to:D,params:{view:n,date:a},search:!0,hash:e,replace:!0}),zoomToDay:a=>s({view:"day",date:a}),openEvent:(a,o)=>t(o===void 0||o===""?{to:"/calendar/$view/$date/$calendarObjectId",params:{view:n,date:r,calendarObjectId:a},search:!0,hash:e}:{to:"/calendar/$view/$date/$calendarObjectId/$recurrenceId",params:{view:n,date:r,calendarObjectId:a,recurrenceId:o},search:!0,hash:e}),closeEvent:()=>s({view:n,date:r}),openComposer:()=>t({to:"/calendar/$view/$date/new",params:{view:n,date:r},search:!0,hash:e})}),[s,t,e,n,r])}const m=t=>String(t).padStart(2,"0"),nt=t=>`${t.getUTCFullYear()}-${m(t.getUTCMonth()+1)}-${m(t.getUTCDate())}`,L=t=>{const e=t<0?"-":"+",n=Math.abs(t);return`${e}${m(Math.floor(n/60))}:${m(n%60)}`};function U(t,e){const n=new Date(`${t}T${e}:00`);return`${t}T${e}:00${L(-n.getTimezoneOffset())}`}const $=new Map;function rt(t){if($.has(t))return $.get(t);let e;try{e=new Intl.DateTimeFormat("en-US",{timeZone:t,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{e=void 0}return $.set(t,e),e}function v(t,e){const n=rt(t);if(!n)return Number.NaN;const r=n.formatToParts(new Date(e)),s=c=>Number(r.find(u=>u.type===c)?.value),a=s("hour")%24;return(Date.UTC(s("year"),s("month")-1,s("day"),a,s("minute"),s("second"))-e)/6e4}function Et(t,e,n){if(n==="")return`${t}T${e}:00+00:00`;const r=Date.parse(`${t}T${e}:00Z`),s=v(n,r);if(Number.isNaN(s))return U(t,e);const a=v(n,r-s*6e4);return`${t}T${e}:00${L(Number.isNaN(a)?s:a)}`}const C=t=>U(t,"00:00");function M(t,e){const[n,r,s]=t.split("-").map(Number);return nt(new Date(Date.UTC(n,r-1,s+e)))}function at(t){const[e,n,r]=t.split("-").map(Number),s=new Date(Date.UTC(e,n-1,r));return M(t,-((s.getUTCDay()+6)%7))}function st(t,e){const[n,r]=e.split("-").map(Number);if(t==="year")return[`${n}-01-01`,`${n+1}-01-01`];if(t==="month"){const a=`${n}-${m(r)}-01`,o=r===12?`${n+1}-01-01`:`${n}-${m(r+1)}-01`;return[a,o]}if(t==="day")return[e,M(e,1)];const s=at(e);return[s,M(s,7)]}function ot(t,e){const[n,r]=st(t,e);return{from:C(n),to:C(r)}}const x=F(400,404),N=5*6e4,S=({from:t,to:e,calendarIds:n})=>({query:n.length===0?{from:t,to:e}:{from:t,to:e,calendarId:[...n]}});function vt(t){const{data:e,isLoading:n,error:r,refetch:s}=P({...T(S(t)),meta:x,staleTime:N,enabled:t.enabled??!0});return{instances:e?.items??[],isLoading:n,error:r,refetch:()=>{s()}}}function Ct(t,e,n){const r=G({queries:t.map(i=>({...T(S({...i,calendarIds:e})),meta:x,staleTime:N,enabled:n}))}),s=t.map(i=>i.from).join("|"),a=r.map(i=>i.data),o=r.map(i=>i.isPending).join("|"),c=r.find(i=>i.error)?.error??null,u=d.useMemo(()=>a.flatMap(i=>i?.items??[]),[s,o]),f=d.useMemo(()=>{const i=new Set;return t.forEach((g,j)=>{r[j]?.isPending&&i.add(g.from)}),i},[s,o]);return{instances:u,pendingWindows:f,error:c,refetch:()=>{for(const i of r)i.error&&i.refetch()}}}function Ot(t,e,n,r){const s=z(),a=[...n].join(",");d.useEffect(()=>{if(!r)return;const o=a===""?[]:a.split(",");for(const c of[-1,1]){const u=ot(t,k(e,t,c));s.prefetchQuery({...T(S({...u,calendarIds:o})),staleTime:N})}},[s,t,e,a,r])}export{Ot as A,lt as B,N as C,p as D,Et as E,dt as F,$t as G,Dt as a,wt as b,w as c,ut as d,Z as e,X as f,Mt as g,h,ft as i,A as j,pt as k,M as l,mt as m,ht as n,ot as o,H as p,I as q,Tt as r,St as s,bt as t,et as u,Ct as v,yt as w,gt as x,Nt as y,vt as z};
@@ -0,0 +1 @@
1
+ import{h as C,r,i as c,eG as h,eH as f,eI as y,s as g,b3 as m}from"./index-DwhL5hnf.js";import{f as I}from"./ErrorState-B4doIuh3.js";const o=g(400,404,412),b=new Set(["calendarEventOperationsListCalendarEvents","calendarEventDetailOperationsGetCalendarEvent","calendarFreeBusyOperationsListCalendarFreeBusy"]),d={kind:"written"},i=e=>m(e)===412?{kind:"conflict"}:{kind:"refused",message:I(e)},O={this:"This",following:"Following",all:"All"};function A(){const e=C();return r.useCallback(()=>{e.invalidateQueries({predicate:t=>{const n=t.queryKey[0];if(typeof n!="object"||n===null)return!1;const s=n._id;return typeof s=="string"&&b.has(s)}})},[e])}const p=({scope:e,recurrenceId:t})=>e===void 0?{}:{scope:O[e],recurrenceId:t};function k(){const e=A(),t=c({...h(),meta:o,onSuccess:e}),n=c({...f(),meta:o,onSuccess:e}),s=c({...y(),meta:o,onSuccess:e}),l=r.useCallback(a=>t.mutateAsync({body:a}).then(()=>d).catch(i),[t]),u=r.useCallback((a,v)=>n.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...p(a)},headers:{"If-Match":a.etag},body:v}).then(()=>d).catch(i),[n]),E=r.useCallback(a=>s.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...p(a)},headers:{"If-Match":a.etag}}).then(()=>d).catch(i),[s]);return r.useMemo(()=>({createEvent:l,updateEvent:u,deleteEvent:E,isWriting:t.isPending||n.isPending||s.isPending}),[l,u,E,t.isPending,n.isPending,s.isPending])}export{k as a,A as u};
@@ -1 +1 @@
1
- import{c as o,eB as s,r as l}from"./index-PzxNuyxu.js";const I=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,p="",d={Cal1:"cal-1",Cal2:"cal-2",Cal3:"cal-3",Cal4:"cal-4",Cal5:"cal-5",Cal6:"cal-6"},i={Local:"local",Explicit:"explicit",Ambiguous:"ambiguous"},n="#";function u(e,a){return a===""?e:`${e}${n}${a}`}function O(e){const a=e.indexOf(n);return a===-1?{calendarObjectId:e,recurrenceId:""}:{calendarObjectId:e.slice(0,a),recurrenceId:e.slice(a+1)}}function m(e){return{id:e.calendarId,accountId:e.accountConfigId,accountLabel:"",name:e.displayName,color:d[e.color]??"cal-1"}}function f(e,a){return{id:u(e.calendarObjectId,e.recurrenceId),calendarId:e.calendarId,title:e.summary,start:e.start,end:e.end,allDay:e.allDay,location:"",notes:"",attendees:[],myRsvp:"accepted",threadId:"",threadSubject:"",timeZone:a,zoneCertainty:i[e.zoneCertainty]??"explicit",recurrenceRule:e.hasRecurrence?"Repeats":"",seriesId:e.hasRecurrence?e.icalUid:"",seriesException:!1,status:e.status==="Tentative"?"tentative":"confirmed"}}const E=e=>e.status!=="Cancelled";function R(){const{data:e,isLoading:a}=o(s());return l.useMemo(()=>{const r=e?.items??[],c=r.map(m);return{calendars:c,colorByCalendarId:Object.fromEntries(c.map(t=>[t.id,t.color])),timeZoneByCalendarId:Object.fromEntries(r.map(t=>[t.calendarId,t.timezone])),isLoading:a}},[e,a])}export{p as U,u as c,I as d,E as i,O as r,f as t,R as u};
1
+ import{c as o,eF as s,r as l}from"./index-DwhL5hnf.js";const I=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,p="",d={Cal1:"cal-1",Cal2:"cal-2",Cal3:"cal-3",Cal4:"cal-4",Cal5:"cal-5",Cal6:"cal-6"},i={Local:"local",Explicit:"explicit",Ambiguous:"ambiguous"},n="#";function u(e,a){return a===""?e:`${e}${n}${a}`}function O(e){const a=e.indexOf(n);return a===-1?{calendarObjectId:e,recurrenceId:""}:{calendarObjectId:e.slice(0,a),recurrenceId:e.slice(a+1)}}function m(e){return{id:e.calendarId,accountId:e.accountConfigId,accountLabel:"",name:e.displayName,color:d[e.color]??"cal-1"}}function f(e,a){return{id:u(e.calendarObjectId,e.recurrenceId),calendarId:e.calendarId,title:e.summary,start:e.start,end:e.end,allDay:e.allDay,location:"",notes:"",attendees:[],myRsvp:"accepted",threadId:"",threadSubject:"",timeZone:a,zoneCertainty:i[e.zoneCertainty]??"explicit",recurrenceRule:e.hasRecurrence?"Repeats":"",seriesId:e.hasRecurrence?e.icalUid:"",seriesException:!1,status:e.status==="Tentative"?"tentative":"confirmed"}}const E=e=>e.status!=="Cancelled";function R(){const{data:e,isLoading:a}=o(s());return l.useMemo(()=>{const r=e?.items??[],c=r.map(m);return{calendars:c,colorByCalendarId:Object.fromEntries(c.map(t=>[t.id,t.color])),timeZoneByCalendarId:Object.fromEntries(r.map(t=>[t.calendarId,t.timezone])),isLoading:a}},[e,a])}export{p as U,u as c,I as d,E as i,O as r,f as t,R as u};
@@ -1 +1 @@
1
- import{r as o}from"./index-PzxNuyxu.js";const n=(e,t)=>{const[r,u]=o.useState(e);return o.useEffect(()=>{const s=setTimeout(()=>u(e),t);return()=>clearTimeout(s)},[e,t]),r};export{n as u};
1
+ import{r as o}from"./index-DwhL5hnf.js";const n=(e,t)=>{const[r,u]=o.useState(e);return o.useEffect(()=>{const s=setTimeout(()=>u(e),t);return()=>clearTimeout(s)},[e,t]),r};export{n as u};
@@ -1 +1 @@
1
- import{r as p,i as b,eo as x,c as C,ep as I,dW as F,eq as D,h as y,er as N,es as P,et as L,eu as z}from"./index-PzxNuyxu.js";const B=(e,t)=>{if(e.state==="Expired")return"Expired";if(e.scope!=="Temporary"||!e.expiresAt)return"Active";const r=Date.parse(e.expiresAt);return Number.isNaN(r)?"Active":r<=t?"Expired":"Active"},K=e=>{if(!e)return;const t=Date.parse(e);if(!Number.isNaN(t))return new Date(t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})},M=(e,t=new Date)=>{if(!e)return;const r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!r)return;const[,a,i,n]=r,s=new Date(Number(a),Number(i)-1,Number(n),23,59,59,0);if(Number.isNaN(s.getTime()))return;const o=-t.getTimezoneOffset(),d=o>=0?"+":"-",l=Math.abs(o),c=String(Math.floor(l/60)).padStart(2,"0"),f=String(l%60).padStart(2,"0"),u=m=>String(m).padStart(2,"0");return`${s.getFullYear()}-${u(s.getMonth()+1)}-${u(s.getDate())}T${u(s.getHours())}:${u(s.getMinutes())}:${u(s.getSeconds())}${d}${c}:${f}`},h="None",V=e=>!e.literalClauses.some(t=>t.field==="HasWords"),O=e=>({...e.anchorMessageId?{anchorMessageId:e.anchorMessageId}:{},matchOperator:e.matchOperator,literalClauses:e.literalClauses,actionLabelId:e.labelId??h,actionMailboxId:e.moveMailboxId??h}),G=({mode:e,ruleScope:t})=>t==="standing"?"standing":t==="until"?"temporary":e==="selected"?"just-these":"all-like-these",X=({mode:e,ruleScope:t,anchorMessageId:r,clauses:a,matchOperator:i,moveMailboxId:n,until:s})=>({...e==="similar"&&r?{anchorMessageId:r}:{},matchOperator:i==="all"?"And":"Or",literalClauses:a.map(o=>({field:o.field,value:o.value})),moveMailboxId:n,expiresAt:t==="until"?M(s??""):void 0}),S=(e,t,r)=>({name:r,scope:t==="standing"?"Standing":"Temporary",...t==="temporary"&&e.expiresAt?{expiresAt:e.expiresAt}:{},matchOperator:e.matchOperator,literalClauses:e.literalClauses,actionLabelId:e.labelId??h,actionMailboxId:e.moveMailboxId??h,...e.anchorMessageId?{anchorMessageId:e.anchorMessageId}:{}}),T=new Set(["Complete","Failed"]),v=e=>e!==void 0&&T.has(e),w=1e3,J=15e3,_=e=>{const t=Math.max(0,e),r=w*2**t;return Math.min(r,J)},$=(e,t,r)=>{if(e)return{kind:r?"restartFailed":"startFailed",error:e};if(t)return{kind:"statusUnreadable",error:t}},Y=e=>{const[t,r]=p.useState(),a=b({...x(),onSuccess:g=>r(g.organizeJobId)}),{mutate:i}=a,n=C({...I({path:{accountId:e??"",organizeJobId:t??""}}),enabled:!!e&&!!t,refetchInterval:g=>{const E=g.state.data?.state;return v(E)?!1:_(g.state.dataUpdateCount)}}),s=p.useCallback(g=>{e&&i({path:{accountId:e},body:O(g)})},[e,i]),{refetch:o}=n,d=p.useCallback(()=>{o()},[o]),l=n.data,c=a.isPending?void 0:l,f=c?.state??a.data?.state,u=v(c?.state),m={state:f,matchedCount:c?.matchedCount??0,appliedCount:c?.appliedCount??0,failedCount:c?.failedCount??0,errorMessage:c?.errorMessage??""};return{start:s,refreshStatus:d,progress:m,isStarting:a.isPending,isRunning:!!t&&!u,isDone:u,failure:$(a.error,n.error,!!l)}},Z=["From","Subject","HasWords","ListId","FromDomain"],k=e=>{const t=e.trim(),r=t.match(/<([^>]+)>/);return(r?r[1]:t).trim().toLowerCase()},ee=(e,t)=>e==="ListId"?k(t):t.trim(),R=e=>e==="all"?"And":"Or",U=(e,t)=>{const r=e.widen!==void 0&&!e.widen.inactive,a=e.clauses.map(i=>({field:i.field,value:i.value}));return{...r&&t?{anchorMessageId:t}:{},matchOperator:R(e.matchOperator),literalClauses:a}},q=e=>e.anchorMessageId!==void 0||!e.literalClauses.some(t=>t.field==="HasWords"),Q=e=>JSON.stringify({anchor:e.anchorMessageId??null,operator:e.matchOperator,clauses:e.literalClauses.map(t=>`${t.field} ${t.value}`)}),te=(e,t)=>{const r=U(e,t);return{...r.anchorMessageId?{anchorMessageId:r.anchorMessageId}:{},matchOperator:r.matchOperator,literalClauses:r.literalClauses,moveMailboxId:e.moveMailboxId,labelId:e.labelId,expiresAt:e.scope==="until"?M(e.until??""):void 0}},W=(e,t)=>{if(e.error!==void 0&&e.errorSignature===t)return{status:"error",reason:e.error};if(e.count===void 0)return{status:"loading"};const r=e.indexEmpty===!0?{indexEmpty:!0}:{};return e.previewedSignature===t?{status:"ready",count:e.count,...r}:{status:"ready",count:e.count,stale:!0,...r}},j=350,re=(e,t,r)=>{const a=b(F()),{mutateAsync:i}=a,n=Q(t),[s,o]=p.useState(()=>({})),d=p.useRef(t);d.current=t;const l=p.useRef(n),c=q(t);return p.useEffect(()=>{if(!e||!c||n===s.previewedSignature||n===s.errorSignature)return;const f=setTimeout(()=>{const u=n;l.current=u,i({path:{accountId:e},body:O({...d.current})}).then(m=>{l.current===u&&o({count:m.matchedCount,matchedIds:m.messageIds,indexEmpty:m.semanticIndexEmpty===!0,previewedSignature:u})}).catch(m=>{l.current===u&&o(g=>({...g,error:m instanceof Error?m.message:"Couldn't count matches.",errorSignature:u}))})},j);return()=>clearTimeout(f)},[e,c,n,s.previewedSignature,s.errorSignature,i]),c?{count:W(s,n),matchedIds:s.previewedSignature===n?s.matchedIds??[]:[]}:{count:{status:"error",reason:D},matchedIds:[]}},A=e=>P({path:{accountId:e}}),se=e=>{const t=C({...L({path:{accountId:e??""}}),enabled:!!e});return{filters:t.data?.items??[],isPending:t.isPending,isError:t.isError,error:t.error,refetch:t.refetch}},ae=e=>{const t=y(),r=b({...N(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:A(e)})}}),{mutate:a,mutateAsync:i}=r,n=p.useCallback((o,d,l)=>{e&&a({path:{accountId:e},body:S(o,d,l)})},[e,a]),s=p.useCallback(async(o,d,l)=>e?i({path:{accountId:e},body:S(o,d,l)}).then(()=>!0,()=>!1):!1,[e,i]);return{createFilter:n,createFilterAsync:s,isPending:r.isPending,isSuccess:r.isSuccess,isError:r.isError,error:r.error,reset:r.reset}},ne=e=>{const t=y(),r=b({...z(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:A(e)})}}),{mutate:a}=r;return{deleteFilter:p.useCallback(n=>{e&&a({path:{accountId:e,filterId:n}})},[e,a]),isPending:r.isPending,deletingFilterId:r.isPending?r.variables?.path.filterId:void 0}};export{h as N,Z as S,Y as a,A as b,te as c,K as d,se as e,B as f,ne as g,O as h,ae as i,X as j,V as k,ee as n,G as o,M as p,U as r,re as u};
1
+ import{r as p,i as b,es as x,c as y,et as I,d_ as F,eu as D,h as C,ev as N,ew as P,ex as L,ey as z}from"./index-DwhL5hnf.js";const B=(e,t)=>{if(e.state==="Expired")return"Expired";if(e.scope!=="Temporary"||!e.expiresAt)return"Active";const r=Date.parse(e.expiresAt);return Number.isNaN(r)?"Active":r<=t?"Expired":"Active"},K=e=>{if(!e)return;const t=Date.parse(e);if(!Number.isNaN(t))return new Date(t).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})},M=(e,t=new Date)=>{if(!e)return;const r=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(!r)return;const[,a,i,n]=r,s=new Date(Number(a),Number(i)-1,Number(n),23,59,59,0);if(Number.isNaN(s.getTime()))return;const o=-t.getTimezoneOffset(),d=o>=0?"+":"-",l=Math.abs(o),c=String(Math.floor(l/60)).padStart(2,"0"),f=String(l%60).padStart(2,"0"),u=m=>String(m).padStart(2,"0");return`${s.getFullYear()}-${u(s.getMonth()+1)}-${u(s.getDate())}T${u(s.getHours())}:${u(s.getMinutes())}:${u(s.getSeconds())}${d}${c}:${f}`},h="None",V=e=>!e.literalClauses.some(t=>t.field==="HasWords"),O=e=>({...e.anchorMessageId?{anchorMessageId:e.anchorMessageId}:{},matchOperator:e.matchOperator,literalClauses:e.literalClauses,actionLabelId:e.labelId??h,actionMailboxId:e.moveMailboxId??h}),G=({mode:e,ruleScope:t})=>t==="standing"?"standing":t==="until"?"temporary":e==="selected"?"just-these":"all-like-these",X=({mode:e,ruleScope:t,anchorMessageId:r,clauses:a,matchOperator:i,moveMailboxId:n,until:s})=>({...e==="similar"&&r?{anchorMessageId:r}:{},matchOperator:i==="all"?"And":"Or",literalClauses:a.map(o=>({field:o.field,value:o.value})),moveMailboxId:n,expiresAt:t==="until"?M(s??""):void 0}),S=(e,t,r)=>({name:r,scope:t==="standing"?"Standing":"Temporary",...t==="temporary"&&e.expiresAt?{expiresAt:e.expiresAt}:{},matchOperator:e.matchOperator,literalClauses:e.literalClauses,actionLabelId:e.labelId??h,actionMailboxId:e.moveMailboxId??h,...e.anchorMessageId?{anchorMessageId:e.anchorMessageId}:{}}),w=new Set(["Complete","Failed"]),v=e=>e!==void 0&&w.has(e),T=1e3,_=15e3,J=e=>{const t=Math.max(0,e),r=T*2**t;return Math.min(r,_)},$=(e,t,r)=>{if(e)return{kind:r?"restartFailed":"startFailed",error:e};if(t)return{kind:"statusUnreadable",error:t}},Y=e=>{const[t,r]=p.useState(),a=b({...x(),onSuccess:g=>r(g.organizeJobId)}),{mutate:i}=a,n=y({...I({path:{accountId:e??"",organizeJobId:t??""}}),enabled:!!e&&!!t,refetchInterval:g=>{const E=g.state.data?.state;return v(E)?!1:J(g.state.dataUpdateCount)}}),s=p.useCallback(g=>{e&&i({path:{accountId:e},body:O(g)})},[e,i]),{refetch:o}=n,d=p.useCallback(()=>{o()},[o]),l=n.data,c=a.isPending?void 0:l,f=c?.state??a.data?.state,u=v(c?.state),m={state:f,matchedCount:c?.matchedCount??0,appliedCount:c?.appliedCount??0,failedCount:c?.failedCount??0,errorMessage:c?.errorMessage??""};return{start:s,refreshStatus:d,progress:m,isStarting:a.isPending,isRunning:!!t&&!u,isDone:u,failure:$(a.error,n.error,!!l)}},Z=["From","Subject","HasWords","ListId","FromDomain"],k=e=>{const t=e.trim(),r=t.match(/<([^>]+)>/);return(r?r[1]:t).trim().toLowerCase()},ee=(e,t)=>e==="ListId"?k(t):t.trim(),R=e=>e==="all"?"And":"Or",U=(e,t)=>{const r=e.widen!==void 0&&!e.widen.inactive,a=e.clauses.map(i=>({field:i.field,value:i.value}));return{...r&&t?{anchorMessageId:t}:{},matchOperator:R(e.matchOperator),literalClauses:a}},Q=e=>e.anchorMessageId!==void 0||!e.literalClauses.some(t=>t.field==="HasWords"),j=e=>JSON.stringify({anchor:e.anchorMessageId??null,operator:e.matchOperator,clauses:e.literalClauses.map(t=>`${t.field} ${t.value}`)}),te=(e,t)=>{const r=U(e,t);return{...r.anchorMessageId?{anchorMessageId:r.anchorMessageId}:{},matchOperator:r.matchOperator,literalClauses:r.literalClauses,moveMailboxId:e.moveMailboxId,labelId:e.labelId,expiresAt:e.scope==="until"?M(e.until??""):void 0}},q=(e,t)=>{if(e.error!==void 0&&e.errorSignature===t)return{status:"error",reason:e.error};if(e.count===void 0)return{status:"loading"};const r=e.indexEmpty===!0?{indexEmpty:!0}:{};return e.previewedSignature===t?{status:"ready",count:e.count,...r}:{status:"ready",count:e.count,stale:!0,...r}},H=350,re=(e,t,r)=>{const a=b(F()),{mutateAsync:i}=a,n=j(t),[s,o]=p.useState(()=>({})),d=p.useRef(t);d.current=t;const l=p.useRef(n),c=Q(t);return p.useEffect(()=>{if(!e||!c||n===s.previewedSignature||n===s.errorSignature)return;const f=setTimeout(()=>{const u=n;l.current=u,i({path:{accountId:e},body:O({...d.current})}).then(m=>{l.current===u&&o({count:m.matchedCount,matchedIds:m.messageIds,indexEmpty:m.semanticIndexEmpty===!0,previewedSignature:u})}).catch(m=>{l.current===u&&o(g=>({...g,error:m instanceof Error?m.message:"Couldn't count matches.",errorSignature:u}))})},H);return()=>clearTimeout(f)},[e,c,n,s.previewedSignature,s.errorSignature,i]),c?{count:q(s,n),matchedIds:s.previewedSignature===n?s.matchedIds??[]:[]}:{count:{status:"error",reason:D},matchedIds:[]}},A=e=>P({path:{accountId:e}}),se=e=>{const t=y({...L({path:{accountId:e??""}}),enabled:!!e});return{filters:t.data?.items??[],isPending:t.isPending,isError:t.isError,error:t.error,refetch:t.refetch}},ae=e=>{const t=C(),r=b({...N(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:A(e)})}}),{mutate:a,mutateAsync:i}=r,n=p.useCallback((o,d,l)=>{e&&a({path:{accountId:e},body:S(o,d,l)})},[e,a]),s=p.useCallback(async(o,d,l)=>e?i({path:{accountId:e},body:S(o,d,l)}).then(()=>!0,()=>!1):!1,[e,i]);return{createFilter:n,createFilterAsync:s,isPending:r.isPending,isSuccess:r.isSuccess,isError:r.isError,error:r.error,reset:r.reset}},ne=e=>{const t=C(),r=b({...z(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:A(e)})}}),{mutate:a}=r;return{deleteFilter:p.useCallback(n=>{e&&a({path:{accountId:e,filterId:n}})},[e,a]),isPending:r.isPending,deletingFilterId:r.isPending?r.variables?.path.filterId:void 0}};export{h as N,Z as S,Y as a,A as b,te as c,K as d,se as e,B as f,ne as g,O as h,ae as i,X as j,V as k,ee as n,G as o,M as p,U as r,re as u};
@@ -1 +1 @@
1
- import{c as L,ej as p,h as n,i as l,ek as d,r as o,el as y,em as c,en as g}from"./index-PzxNuyxu.js";const u=e=>y({path:{accountId:e}}),P=e=>{const r=L({...p({path:{accountId:e??""}}),enabled:!!e});return{labels:r.data?.items??[],isPending:r.isPending,isError:r.isError,error:r.error,refetch:r.refetch}},f=e=>{const r=n(),t=l({...d(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutateAsync:s}=t;return{createLabel:o.useCallback((a,i="Default")=>e?s({path:{accountId:e},body:{name:a,color:i}}):Promise.reject(new Error("No account")),[e,s]),isPending:t.isPending,isError:t.isError,error:t.error,reset:t.reset}},h=e=>{const r=n(),t=l({...c(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutate:s}=t;return{updateLabel:o.useCallback((a,i)=>{e&&s({path:{accountId:e,labelId:a},body:i})},[e,s]),isPending:t.isPending,updatingLabelId:t.isPending?t.variables?.path.labelId:void 0}},C=e=>{const r=n(),t=l({...g(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutate:s}=t;return{deleteLabel:o.useCallback(a=>{e&&s({path:{accountId:e,labelId:a}})},[e,s]),isPending:t.isPending,deletingLabelId:t.isPending?t.variables?.path.labelId:void 0}};export{P as a,h as b,C as c,f as u};
1
+ import{c as p,en as L,h as n,i as l,eo as d,r as o,ep as y,eq as c,er as g}from"./index-DwhL5hnf.js";const u=e=>y({path:{accountId:e}}),f=e=>{const r=p({...L({path:{accountId:e??""}}),enabled:!!e});return{labels:r.data?.items??[],isPending:r.isPending,isError:r.isError,error:r.error,refetch:r.refetch}},h=e=>{const r=n(),t=l({...d(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutateAsync:s}=t;return{createLabel:o.useCallback((a,i="Default")=>e?s({path:{accountId:e},body:{name:a,color:i}}):Promise.reject(new Error("No account")),[e,s]),isPending:t.isPending,isError:t.isError,error:t.error,reset:t.reset}},m=e=>{const r=n(),t=l({...c(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutate:s}=t;return{updateLabel:o.useCallback((a,i)=>{e&&s({path:{accountId:e,labelId:a},body:i})},[e,s]),isPending:t.isPending,updatingLabelId:t.isPending?t.variables?.path.labelId:void 0}},C=e=>{const r=n(),t=l({...g(),onSuccess:()=>{e&&r.invalidateQueries({queryKey:u(e)})}}),{mutate:s}=t;return{deleteLabel:o.useCallback(a=>{e&&s({path:{accountId:e,labelId:a}})},[e,s]),isPending:t.isPending,deletingLabelId:t.isPending?t.variables?.path.labelId:void 0}};export{f as a,m as b,C as c,h as u};
@@ -1 +1 @@
1
- import{bZ as s,b_ as e}from"./index-PzxNuyxu.js";const i=768,r=t=>t!=="desktop",a=()=>{const t=s(`(min-width: ${i}px)`);return s(e)?"desktop":t?"tablet":"phone"};export{r as i,a as u};
1
+ import{c1 as s,c2 as e}from"./index-DwhL5hnf.js";const i=768,r=t=>t!=="desktop",a=()=>{const t=s(`(min-width: ${i}px)`);return s(e)?"desktop":t?"tablet":"phone"};export{r as i,a as u};
@@ -1 +1 @@
1
- import{r as c,u as S,cj as O,ck as B,a9 as h,cl as N,q as P,ab as U,h as $,c as D,cG as F,cH as v}from"./index-PzxNuyxu.js";const R="/mail/brief/compose/{-$outboxMessageId}",w="/mail/flagged/compose/{-$outboxMessageId}",E="/mail/outbox/compose/{-$outboxMessageId}",k="/mail/$mailboxId/compose/{-$outboxMessageId}";function T(){const e=h({from:R,shouldThrow:!1}),t=h({from:w,shouldThrow:!1}),r=h({from:E,shouldThrow:!1}),s=h({from:k,shouldThrow:!1});return e??t??r??s}function z(){return T()!==void 0}function Y(){return T()?.outboxMessageId}function L(e,t,r){return e==="flagged"?{to:w,params:{outboxMessageId:r}}:e==="outbox"?{to:E,params:{outboxMessageId:r}}:e==="mailbox"&&t?{to:k,params:{mailboxId:t,outboxMessageId:r}}:{to:R,params:{outboxMessageId:r}}}function g(){const e=S(),t=O(),{list:r,mailboxId:s}=B();return c.useCallback((n,o)=>{e({...L(r,s,n),search:a=>a,hash:o?.keepPanels?!0:t,replace:o?.replace??!1})},[e,t,r,s])}function J(){const e=g();return c.useCallback(()=>e(void 0),[e])}function V(){const e=g();return c.useCallback(t=>e(t),[e])}function Z(){const e=g();return c.useCallback(t=>e(t,{replace:!0,keepPanels:!0}),[e])}function ee(){return N()}const _=e=>{const t=e.filter(n=>!n.isMultipart&&n.disposition!=="attachment"&&n.mediaType==="TEXT"&&n.contentUrl.length>0),r=t.find(n=>n.mediaSubtype.toUpperCase()==="HTML");if(r)return{kind:"html",contentUrl:r.contentUrl};const s=t.find(n=>n.mediaSubtype.toUpperCase()==="PLAIN");return s?{kind:"text",contentUrl:s.contentUrl}:null},b={all:["messages"],detail:e=>[...b.all,"detail",e],body:e=>[...b.detail(e),"body"]};class f extends Error{reason;status;retryAfterSeconds;constructor(t,r,s,n){super(r),this.name="BodyFetchError",this.reason=t,this.status=s,this.retryAfterSeconds=n}}const q=e=>{const t=Number.parseInt(e??"",10);return!Number.isFinite(t)||t<=0?1:Math.min(t,30)},K=8,Q="x-remit-403-reason",I=(e,t)=>{const r=t?.trim()??"";return e===401?"auth":e===403?r.length>0?"auth":"body-missing":e===404?"body-missing":"generic"},X=(e,t)=>(t??"").toLowerCase().startsWith("text/html")?/<div\s+id=["']root["']/i.test(e):!1,G=(e,t)=>{const r=(t??"").toLowerCase();return!!(e==="text"&&r.startsWith("text/html"))},H=async(e,t,r=async()=>null)=>{const s={},n=await r();n&&(s.Authorization=`Bearer ${n}`);const o=await v(e,{headers:s});if(o.status===202)throw new f("not-ready","Message body is still syncing",202,q(o.headers.get("Retry-After")));if(!o.ok){const l=o.headers.get(Q),y=I(o.status,l);throw new f(y,`Failed to load message body (${o.status} ${o.statusText})`,o.status)}const a=o.headers.get("content-type");if(G(t,a))throw new f("content-type-mismatch",`Refusing to render message body — expected ${t}, got Content-Type ${a}`);const m=await o.text();if(X(m,a))throw new f("spa-shell-leak","Refusing to render message body — response looks like the SPA shell (CloudFront 403/404 fallback leaked through to /content/*)");return m},W=async(e,t)=>(t.isRetryAfterNotReady&&await e.refetchDescribeMessage(),e.fetchContent(t.contentUrl,t.kind)),te=({messageId:e,bodyParts:t,enabled:r=!0})=>{const s=t?_(t):null,n=P(),{getToken:o}=U(),a=c.useRef(null),m=$(),l=c.useRef(!1),y=c.useRef(null),C=e&&s?`${e}:${s.contentUrl}`:null;y.current!==C&&(y.current=C,l.current=!1);const i=D({queryKey:e?[...b.body(e),s?.contentUrl??null]:["messages","body","noop"],queryFn:()=>{if(!s)throw new Error("No renderable body part");if(!e)throw new Error("No messageId");const d=l.current;return l.current=!1,W({fetchContent:(u,M)=>H(u,M,o),refetchDescribeMessage:()=>m.refetchQueries({queryKey:F({path:{messageId:e}})})},{contentUrl:s.contentUrl,kind:s.kind,isRetryAfterNotReady:d})},enabled:r&&!!e&&!!s,staleTime:300*1e3,gcTime:1800*1e3,retry:(d,u)=>u instanceof f&&u.reason==="not-ready"?d<K:d<1,retryDelay:(d,u)=>u instanceof f&&u.reason==="not-ready"?(l.current=!0,(u.retryAfterSeconds??1)*1e3):1e3,meta:{softError:!0}}),p=i.isLoading&&!!s,x=t!==void 0&&s===null;c.useEffect(()=>{p&&(a.current=performance.now())},[p]),c.useEffect(()=>{i.isSuccess&&a.current!==null&&(n.recordTiming("message.body.load",Math.round(performance.now()-a.current)),a.current=null)},[i.isSuccess,n]);const A=i.data&&s?{kind:s.kind,body:i.data}:void 0;return{picked:s,data:A,isLoading:p,hasNoRenderablePart:x,isError:i.isError,error:i.error,refetch:i.refetch}};export{f as B,z as a,te as b,Y as c,Z as d,ee as e,V as f,I as g,J as u};
1
+ import{r as c,u as S,cn as O,co as B,a9 as h,cp as N,q as P,ab as U,h as $,c as D,cK as F,cL as L}from"./index-DwhL5hnf.js";const R="/mail/brief/compose/{-$outboxMessageId}",w="/mail/flagged/compose/{-$outboxMessageId}",E="/mail/outbox/compose/{-$outboxMessageId}",k="/mail/$mailboxId/compose/{-$outboxMessageId}";function T(){const e=h({from:R,shouldThrow:!1}),t=h({from:w,shouldThrow:!1}),r=h({from:E,shouldThrow:!1}),s=h({from:k,shouldThrow:!1});return e??t??r??s}function Y(){return T()!==void 0}function j(){return T()?.outboxMessageId}function v(e,t,r){return e==="flagged"?{to:w,params:{outboxMessageId:r}}:e==="outbox"?{to:E,params:{outboxMessageId:r}}:e==="mailbox"&&t?{to:k,params:{mailboxId:t,outboxMessageId:r}}:{to:R,params:{outboxMessageId:r}}}function g(){const e=S(),t=O(),{list:r,mailboxId:s}=B();return c.useCallback((n,o)=>{e({...v(r,s,n),search:a=>a,hash:o?.keepPanels?!0:t,replace:o?.replace??!1})},[e,t,r,s])}function J(){const e=g();return c.useCallback(()=>e(void 0),[e])}function V(){const e=g();return c.useCallback(t=>e(t),[e])}function Z(){const e=g();return c.useCallback(t=>e(t,{replace:!0,keepPanels:!0}),[e])}function ee(){return N()}const _=e=>{const t=e.filter(n=>!n.isMultipart&&n.disposition!=="attachment"&&n.mediaType==="TEXT"&&n.contentUrl.length>0),r=t.find(n=>n.mediaSubtype.toUpperCase()==="HTML");if(r)return{kind:"html",contentUrl:r.contentUrl};const s=t.find(n=>n.mediaSubtype.toUpperCase()==="PLAIN");return s?{kind:"text",contentUrl:s.contentUrl}:null},b={all:["messages"],detail:e=>[...b.all,"detail",e],body:e=>[...b.detail(e),"body"]};class f extends Error{reason;status;retryAfterSeconds;constructor(t,r,s,n){super(r),this.name="BodyFetchError",this.reason=t,this.status=s,this.retryAfterSeconds=n}}const K=e=>{const t=Number.parseInt(e??"",10);return!Number.isFinite(t)||t<=0?1:Math.min(t,30)},q=8,Q="x-remit-403-reason",I=(e,t)=>{const r=t?.trim()??"";return e===401?"auth":e===403?r.length>0?"auth":"body-missing":e===404?"body-missing":"generic"},X=(e,t)=>(t??"").toLowerCase().startsWith("text/html")?/<div\s+id=["']root["']/i.test(e):!1,G=(e,t)=>{const r=(t??"").toLowerCase();return!!(e==="text"&&r.startsWith("text/html"))},H=async(e,t,r=async()=>null)=>{const s={},n=await r();n&&(s.Authorization=`Bearer ${n}`);const o=await L(e,{headers:s});if(o.status===202)throw new f("not-ready","Message body is still syncing",202,K(o.headers.get("Retry-After")));if(!o.ok){const l=o.headers.get(Q),y=I(o.status,l);throw new f(y,`Failed to load message body (${o.status} ${o.statusText})`,o.status)}const a=o.headers.get("content-type");if(G(t,a))throw new f("content-type-mismatch",`Refusing to render message body — expected ${t}, got Content-Type ${a}`);const m=await o.text();if(X(m,a))throw new f("spa-shell-leak","Refusing to render message body — response looks like the SPA shell (CloudFront 403/404 fallback leaked through to /content/*)");return m},W=async(e,t)=>(t.isRetryAfterNotReady&&await e.refetchDescribeMessage(),e.fetchContent(t.contentUrl,t.kind)),te=({messageId:e,bodyParts:t,enabled:r=!0})=>{const s=t?_(t):null,n=P(),{getToken:o}=U(),a=c.useRef(null),m=$(),l=c.useRef(!1),y=c.useRef(null),C=e&&s?`${e}:${s.contentUrl}`:null;y.current!==C&&(y.current=C,l.current=!1);const i=D({queryKey:e?[...b.body(e),s?.contentUrl??null]:["messages","body","noop"],queryFn:()=>{if(!s)throw new Error("No renderable body part");if(!e)throw new Error("No messageId");const d=l.current;return l.current=!1,W({fetchContent:(u,M)=>H(u,M,o),refetchDescribeMessage:()=>m.refetchQueries({queryKey:F({path:{messageId:e}})})},{contentUrl:s.contentUrl,kind:s.kind,isRetryAfterNotReady:d})},enabled:r&&!!e&&!!s,staleTime:300*1e3,gcTime:1800*1e3,retry:(d,u)=>u instanceof f&&u.reason==="not-ready"?d<q:d<1,retryDelay:(d,u)=>u instanceof f&&u.reason==="not-ready"?(l.current=!0,(u.retryAfterSeconds??1)*1e3):1e3,meta:{softError:!0}}),p=i.isLoading&&!!s,x=t!==void 0&&s===null;c.useEffect(()=>{p&&(a.current=performance.now())},[p]),c.useEffect(()=>{i.isSuccess&&a.current!==null&&(n.recordTiming("message.body.load",Math.round(performance.now()-a.current)),a.current=null)},[i.isSuccess,n]);const A=i.data&&s?{kind:s.kind,body:i.data}:void 0;return{picked:s,data:A,isLoading:p,hasNoRenderablePart:x,isError:i.isError,error:i.error,refetch:i.refetch}};export{f as B,Y as a,te as b,j as c,Z as d,ee as e,V as f,I as g,J as u};
@@ -1 +1 @@
1
- import{b$ as Q,c0 as y,c1 as S,c2 as w,c3 as C,h as k,c4 as q,c5 as x,r as p,c6 as M,c7 as H,c8 as L,c9 as P,ca as O,cb as B,cc as A}from"./index-PzxNuyxu.js";function R(r,e){const s=new Set(e);return r.filter(t=>!s.has(t))}function T(r,e,s){const t=r.slice(0);return t[e]=s,t}var z=class extends Q{#i;#e;#n;#r;#s;#t;#o;#u;#h;#c=[];constructor(r,e,s){super(),this.#i=r,this.#r=s,this.#n=[],this.#s=[],this.#e=[],this.setQueries(e)}onSubscribe(){this.listeners.size===1&&this.#s.forEach(r=>{r.subscribe(e=>{this.#d(r,e)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#s.forEach(r=>{r.destroy()})}setQueries(r,e){this.#n=r,this.#r=e,y.batch(()=>{const s=this.#s,t=this.#f(this.#n);t.forEach(o=>o.observer.setOptions(o.defaultedQueryOptions));const i=t.map(o=>o.observer),n=i.map(o=>o.getCurrentResult()),u=s.length!==i.length,a=i.some((o,d)=>o!==s[d]),f=u||a,b=f?!0:n.some((o,d)=>{const g=this.#e[d];return!g||!S(o,g)});!f&&!b||(f&&(this.#c=t,this.#s=i),this.#e=n,this.hasListeners()&&(f&&(R(s,i).forEach(o=>{o.destroy()}),R(i,s).forEach(o=>{o.subscribe(d=>{this.#d(o,d)})})),this.#p()))})}getCurrentResult(){return this.#e}getQueries(){return this.#s.map(r=>r.getCurrentQuery())}getObservers(){return this.#s}getOptimisticResult(r,e){const s=this.#f(r),t=s.map(n=>n.observer.getOptimisticResult(n.defaultedQueryOptions)),i=s.map(n=>n.defaultedQueryOptions.queryHash);return[t,n=>this.#l(n??t,e,i),()=>this.#a(t,s)]}#a(r,e){return e.map((s,t)=>{const i=r[t];return s.defaultedQueryOptions.notifyOnChangeProps?i:s.observer.trackResult(i,n=>{e.forEach(u=>{u.observer.trackProp(n)})})})}#l(r,e,s){if(e){const t=this.#h,i=s!==void 0&&t!==void 0&&(t.length!==s.length||s.some((n,u)=>n!==t[u]));return(!this.#t||this.#e!==this.#u||i||e!==this.#o)&&(this.#o=e,this.#u=this.#e,s!==void 0&&(this.#h=s),this.#t=w(this.#t,e(r))),this.#t}return r}#b(){return this.#r?.combine!==void 0&&this.#s.some((r,e)=>r.options.suspense&&this.#e[e]?.data===void 0)}#f(r){const e=new Map;this.#s.forEach(t=>{const i=t.options.queryHash;if(!i)return;const n=e.get(i);n?n.push(t):e.set(i,[t])});const s=[];return r.forEach(t=>{const i=this.#i.defaultQueryOptions(t),u=e.get(i.queryHash)?.shift()??new C(this.#i,i);s.push({defaultedQueryOptions:i,observer:u})}),s}#d(r,e){const s=this.#s.indexOf(r);s!==-1&&(this.#e=T(this.#e,s,e),this.#p())}#p(){if(this.hasListeners()){const r=this.#a(this.#e,this.#c),e=this.#b(),s=this.#t,t=e?s:this.#l(r,this.#r?.combine);(e||s!==t)&&y.batch(()=>{this.listeners.forEach(i=>{i(this.#e)})})}}};function U({queries:r,...e},s){const t=k(),i=q(),n=x(),u=p.useMemo(()=>r.map(h=>{const c=t.defaultQueryOptions(h);return c._optimisticResults=i?"isRestoring":"optimistic",c}),[r,t,i]);u.forEach(h=>{M(h);const c=t.getQueryCache().get(h.queryHash);H(h,n,c)}),L(n);const[a]=p.useState(()=>new z(t,u,e)),[f,b,o]=a.getOptimisticResult(u,e.combine),d=!i&&e.subscribed!==!1;p.useSyncExternalStore(p.useCallback(h=>d?a.subscribe(y.batchCalls(h)):P,[a,d]),()=>a.getCurrentResult(),()=>a.getCurrentResult()),p.useEffect(()=>{a.setQueries(u,e)},[u,e,a]);const m=f.some((h,c)=>O(u[c],h))?f.flatMap((h,c)=>{const l=u[c];if(l&&O(l,h)){const E=new C(t,l);return B(l,E,n)}return[]}):[];if(m.length>0)throw Promise.all(m);const v=f.find((h,c)=>{const l=u[c];return l&&A({result:h,errorResetBoundary:n,throwOnError:l.throwOnError,query:t.getQueryCache().get(l.queryHash),suspense:l.suspense})});if(v?.error)throw v.error;return b(o())}export{U as u};
1
+ import{c3 as Q,c4 as y,c5 as S,c6 as w,c7 as C,h as k,c8 as q,c9 as x,r as p,ca as M,cb as H,cc as L,cd as P,ce as O,cf as B,cg as A}from"./index-DwhL5hnf.js";function R(r,e){const s=new Set(e);return r.filter(t=>!s.has(t))}function T(r,e,s){const t=r.slice(0);return t[e]=s,t}var z=class extends Q{#i;#e;#n;#r;#s;#t;#o;#u;#h;#c=[];constructor(r,e,s){super(),this.#i=r,this.#r=s,this.#n=[],this.#s=[],this.#e=[],this.setQueries(e)}onSubscribe(){this.listeners.size===1&&this.#s.forEach(r=>{r.subscribe(e=>{this.#d(r,e)})})}onUnsubscribe(){this.listeners.size||this.destroy()}destroy(){this.listeners=new Set,this.#s.forEach(r=>{r.destroy()})}setQueries(r,e){this.#n=r,this.#r=e,y.batch(()=>{const s=this.#s,t=this.#f(this.#n);t.forEach(o=>o.observer.setOptions(o.defaultedQueryOptions));const i=t.map(o=>o.observer),n=i.map(o=>o.getCurrentResult()),u=s.length!==i.length,a=i.some((o,d)=>o!==s[d]),f=u||a,b=f?!0:n.some((o,d)=>{const g=this.#e[d];return!g||!S(o,g)});!f&&!b||(f&&(this.#c=t,this.#s=i),this.#e=n,this.hasListeners()&&(f&&(R(s,i).forEach(o=>{o.destroy()}),R(i,s).forEach(o=>{o.subscribe(d=>{this.#d(o,d)})})),this.#p()))})}getCurrentResult(){return this.#e}getQueries(){return this.#s.map(r=>r.getCurrentQuery())}getObservers(){return this.#s}getOptimisticResult(r,e){const s=this.#f(r),t=s.map(n=>n.observer.getOptimisticResult(n.defaultedQueryOptions)),i=s.map(n=>n.defaultedQueryOptions.queryHash);return[t,n=>this.#l(n??t,e,i),()=>this.#a(t,s)]}#a(r,e){return e.map((s,t)=>{const i=r[t];return s.defaultedQueryOptions.notifyOnChangeProps?i:s.observer.trackResult(i,n=>{e.forEach(u=>{u.observer.trackProp(n)})})})}#l(r,e,s){if(e){const t=this.#h,i=s!==void 0&&t!==void 0&&(t.length!==s.length||s.some((n,u)=>n!==t[u]));return(!this.#t||this.#e!==this.#u||i||e!==this.#o)&&(this.#o=e,this.#u=this.#e,s!==void 0&&(this.#h=s),this.#t=w(this.#t,e(r))),this.#t}return r}#b(){return this.#r?.combine!==void 0&&this.#s.some((r,e)=>r.options.suspense&&this.#e[e]?.data===void 0)}#f(r){const e=new Map;this.#s.forEach(t=>{const i=t.options.queryHash;if(!i)return;const n=e.get(i);n?n.push(t):e.set(i,[t])});const s=[];return r.forEach(t=>{const i=this.#i.defaultQueryOptions(t),u=e.get(i.queryHash)?.shift()??new C(this.#i,i);s.push({defaultedQueryOptions:i,observer:u})}),s}#d(r,e){const s=this.#s.indexOf(r);s!==-1&&(this.#e=T(this.#e,s,e),this.#p())}#p(){if(this.hasListeners()){const r=this.#a(this.#e,this.#c),e=this.#b(),s=this.#t,t=e?s:this.#l(r,this.#r?.combine);(e||s!==t)&&y.batch(()=>{this.listeners.forEach(i=>{i(this.#e)})})}}};function U({queries:r,...e},s){const t=k(),i=q(),n=x(),u=p.useMemo(()=>r.map(h=>{const c=t.defaultQueryOptions(h);return c._optimisticResults=i?"isRestoring":"optimistic",c}),[r,t,i]);u.forEach(h=>{M(h);const c=t.getQueryCache().get(h.queryHash);H(h,n,c)}),L(n);const[a]=p.useState(()=>new z(t,u,e)),[f,b,o]=a.getOptimisticResult(u,e.combine),d=!i&&e.subscribed!==!1;p.useSyncExternalStore(p.useCallback(h=>d?a.subscribe(y.batchCalls(h)):P,[a,d]),()=>a.getCurrentResult(),()=>a.getCurrentResult()),p.useEffect(()=>{a.setQueries(u,e)},[u,e,a]);const m=f.some((h,c)=>O(u[c],h))?f.flatMap((h,c)=>{const l=u[c];if(l&&O(l,h)){const E=new C(t,l);return B(l,E,n)}return[]}):[];if(m.length>0)throw Promise.all(m);const v=f.find((h,c)=>{const l=u[c];return l&&A({result:h,errorResetBoundary:n,throwOnError:l.throwOnError,query:t.getQueryCache().get(l.queryHash),suspense:l.suspense})});if(v?.error)throw v.error;return b(o())}export{U as u};
@@ -1 +1 @@
1
- import{j as E,a0 as K,t as Q,f as U,r as o,aP as R,h as T,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-PzxNuyxu.js";import{C as Y}from"./circle-check-big-CHW0iPjh.js";import{R as Z}from"./refresh-cw-D_7Zl0fy.js";import{u as N}from"./useQueries-DFhZXKwO.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=N({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)}),_=6e4,ne=new Set(["sent","drafts","trash","archive"]),O=(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=T(),{resultFolderIndex:n}=$(),a=o.useRef(new Map),u=o.useRef(new Set),c=o.useRef(new Map),[i,r]=o.useState(new Set),h=N({queries:e.map(l=>({...R({path:{accountId:l}}),refetchInterval:_,staleTime:_,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=O(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,O(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)},P=(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 P(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:()=>P(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=T(),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,aP as R,h as T,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-DwhL5hnf.js";import{C as Y}from"./circle-check-big-DB4LtNLR.js";import{R as Z}from"./refresh-cw-Cs4y2h9j.js";import{u as N}from"./useQueries-DgS8Aq9E.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=N({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)}),_=6e4,ne=new Set(["sent","drafts","trash","archive"]),O=(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=T(),{resultFolderIndex:n}=$(),a=o.useRef(new Map),u=o.useRef(new Set),c=o.useRef(new Map),[i,r]=o.useState(new Set),h=N({queries:e.map(l=>({...R({path:{accountId:l}}),refetchInterval:_,staleTime:_,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=O(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,O(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)},P=(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 P(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:()=>P(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=T(),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,b5 as t}from"./index-PzxNuyxu.js";import{u as m}from"./useQueries-DFhZXKwO.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,b5 as t}from"./index-DwhL5hnf.js";import{u as m}from"./useQueries-DgS8Aq9E.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 h,j as a,cq as Y,t as b,I as X,h as Z,at as J,i as ee,av as te,cG as se,bN as re,ab as ne,a0 as ae,X as oe,c$ as _,d0 as $,C as ie,ck as ce}from"./index-PzxNuyxu.js";import{K as A}from"./kbd-BVBLrQ0Q.js";import{B as le,b as de}from"./useMessageBodyContent-C-IdvqlN.js";import{i as ue}from"./search-scope-B5-OK3Cq.js";const me='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',k={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)"}},fe={background:!1,spacing:!1},he="16px",ge=()=>`html{padding:0}body{padding:${he};box-sizing:border-box}`,pe=()=>"html{overflow:hidden}body{overflow-x:auto}",be=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,ye='<meta name="viewport" content="width=device-width, initial-scale=1">',xe=e=>{const t=e?k.dark:k.light;return`
1
+ import{r as h,j as a,cu as Y,t as b,I as X,h as Z,at as J,i as ee,av as te,cK as se,bR as re,ab as ne,a0 as ae,X as oe,d3 as _,d4 as I,C as ie,co as ce}from"./index-DwhL5hnf.js";import{K as A}from"./kbd-BtXVxwvP.js";import{B as le,b as de}from"./useMessageBodyContent-Booydip_.js";import{i as ue}from"./search-scope-B5-OK3Cq.js";const me='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',k={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)"}},fe={background:!1,spacing:!1},he="16px",ge=()=>`html{padding:0}body{padding:${he};box-sizing:border-box}`,pe=()=>"html{overflow:hidden}body{overflow-x:auto}",be=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,ye='<meta name="viewport" content="width=device-width, initial-scale=1">',xe=e=>{const t=e?k.dark:k.light;return`
2
2
  /* Plain-email base: UI font-stack + theme-aware colors (#424) */
3
3
  html, body {
4
4
  font-family: ${me};
@@ -74,11 +74,11 @@ pre, code {
74
74
  :is(pre, code, pre *, code *):is([nowrap], [style*="nowrap" i]) {
75
75
  white-space: pre-wrap !important;
76
76
  }
77
- `,je=e=>{const t=new Map;for(const s of e){if(!s.contentId||s.contentUrl.length===0)continue;const r=s.contentId.replace(/^<|>$/g,"");t.set(r,s.contentUrl)}return s=>t.get(s.replace(/^<|>$/g,""))},Le=/^(none|transparent|inherit|initial|unset)\s*$/i,I=e=>{const t=[],s=/<style[^>]*>([\s\S]*?)<\/style>/gi;let r;for(r=s.exec(e);r!==null;)t.push(r[1]),r=s.exec(e);return t},Re=e=>{const t=/background(?:-color)?\s*:\s*([^;}\n]+)/gi;let s;for(s=t.exec(e);s!==null;){const r=s[1].trim();if(!Le.test(r))return!0;s=t.exec(e)}return!1},_e=e=>{if(/\bstyle\s*=\s*["'][^"']*background/i.test(e)||/\bbgcolor\s*=/i.test(e))return!0;for(const t of I(e))if(Re(t))return!0;return!1},$e=new Set(["auto","none","initial","inherit","unset","revert","revert-layer"]),Ie=new RegExp(`(?<![-\\w])(?:padding|margin)(?:-(top|right|bottom|left|block|inline)(?:-(?:start|end))?)?\\s*:\\s*([^;}"']+)`,"gi"),Be=new Set(["top","bottom","block"]),B=e=>e.replace(/\/\*[\s\S]*?\*\//g,""),T=e=>{const t=e.toLowerCase();if(!t||$e.has(t)||t.startsWith("-"))return!1;const s=/^\+?(\d*\.?\d+)[a-z%]*$/.exec(t);return s?Number.parseFloat(s[1])!==0:!0},Oe=e=>{const t=e.split(/\s+/).filter(Boolean);return t.length<2?t:t.length<4?[t[1]]:[t[1],t[3]]},Me=(e,t)=>{if(e&&Be.has(e))return!1;const s=t.replace(/!\s*important/gi,"").trim();return s?e?s.split(/\s+/).some(T):Oe(s).some(T):!1},j=e=>{for(const t of B(e).matchAll(Ie))if(Me(t[1],t[2]))return!0;return!1},O=new Set(["blockquote"]),De=e=>e.replace(/<!--[\s\S]*?-->/g,""),ze=e=>{const t=[],s=/<([a-zA-Z][\w:-]*)((?:"[^"]*"|'[^']*'|[^>"'])*)>/g,r=/\bstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;for(const[,n,o]of e.matchAll(s))for(const d of o.matchAll(r))t.push({tag:n.toLowerCase(),style:d[1]??d[2]??""});return t},Pe=e=>[...B(e).matchAll(/([^{}]*)\{([^{}]*)\}/g)].map(t=>({selector:t[1].trim(),body:t[2]})),Ke=e=>{const t=e.trim().split(/[\s>+~]+/).pop()??"";return(/^[a-zA-Z][\w-]*/.exec(t)?.[0]??"").toLowerCase()},Fe=e=>e.split(",").every(t=>O.has(Ke(t))),He=e=>{const t=I(e),s=De(e);if(/\bcellpadding\s*=\s*["']?(?!0["'\s>])\d/i.test(s))return!0;for(const{tag:r,style:n}of ze(s))if(!O.has(r)&&j(n))return!0;for(const r of t)for(const n of Pe(r))if(!Fe(n.selector)&&j(n.body))return!0;return!1},Ge=["script","iframe","object","embed","form","input","button","textarea","select","meta","link","base"],Ue=["onerror","onload","onclick","onmouseover","onmouseout","onfocus","onblur","onsubmit","onkeydown","onkeyup","formaction","xlink:href","data-bind"],We="data:image/svg+xml,"+encodeURIComponent(`
77
+ `,je=e=>{const t=new Map;for(const s of e){if(!s.contentId||s.contentUrl.length===0)continue;const r=s.contentId.replace(/^<|>$/g,"");t.set(r,s.contentUrl)}return s=>t.get(s.replace(/^<|>$/g,""))},Re=/^(none|transparent|inherit|initial|unset)\s*$/i,$=e=>{const t=[],s=/<style[^>]*>([\s\S]*?)<\/style>/gi;let r;for(r=s.exec(e);r!==null;)t.push(r[1]),r=s.exec(e);return t},Le=e=>{const t=/background(?:-color)?\s*:\s*([^;}\n]+)/gi;let s;for(s=t.exec(e);s!==null;){const r=s[1].trim();if(!Re.test(r))return!0;s=t.exec(e)}return!1},_e=e=>{if(/\bstyle\s*=\s*["'][^"']*background/i.test(e)||/\bbgcolor\s*=/i.test(e))return!0;for(const t of $(e))if(Le(t))return!0;return!1},Ie=new Set(["auto","none","initial","inherit","unset","revert","revert-layer"]),$e=new RegExp(`(?<![-\\w])(?:padding|margin)(?:-(top|right|bottom|left|block|inline)(?:-(?:start|end))?)?\\s*:\\s*([^;}"']+)`,"gi"),Be=new Set(["top","bottom","block"]),B=e=>e.replace(/\/\*[\s\S]*?\*\//g,""),T=e=>{const t=e.toLowerCase();if(!t||Ie.has(t)||t.startsWith("-"))return!1;const s=/^\+?(\d*\.?\d+)[a-z%]*$/.exec(t);return s?Number.parseFloat(s[1])!==0:!0},Oe=e=>{const t=e.split(/\s+/).filter(Boolean);return t.length<2?t:t.length<4?[t[1]]:[t[1],t[3]]},Me=(e,t)=>{if(e&&Be.has(e))return!1;const s=t.replace(/!\s*important/gi,"").trim();return s?e?s.split(/\s+/).some(T):Oe(s).some(T):!1},j=e=>{for(const t of B(e).matchAll($e))if(Me(t[1],t[2]))return!0;return!1},O=new Set(["blockquote"]),De=e=>e.replace(/<!--[\s\S]*?-->/g,""),ze=e=>{const t=[],s=/<([a-zA-Z][\w:-]*)((?:"[^"]*"|'[^']*'|[^>"'])*)>/g,r=/\bstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;for(const[,n,o]of e.matchAll(s))for(const d of o.matchAll(r))t.push({tag:n.toLowerCase(),style:d[1]??d[2]??""});return t},Pe=e=>[...B(e).matchAll(/([^{}]*)\{([^{}]*)\}/g)].map(t=>({selector:t[1].trim(),body:t[2]})),Ke=e=>{const t=e.trim().split(/[\s>+~]+/).pop()??"";return(/^[a-zA-Z][\w-]*/.exec(t)?.[0]??"").toLowerCase()},Fe=e=>e.split(",").every(t=>O.has(Ke(t))),He=e=>{const t=$(e),s=De(e);if(/\bcellpadding\s*=\s*["']?(?!0["'\s>])\d/i.test(s))return!0;for(const{tag:r,style:n}of ze(s))if(!O.has(r)&&j(n))return!0;for(const r of t)for(const n of Pe(r))if(!Fe(n.selector)&&j(n.body))return!0;return!1},Ge=["script","iframe","object","embed","form","input","button","textarea","select","meta","link","base"],Ue=["onerror","onload","onclick","onmouseover","onmouseout","onfocus","onblur","onsubmit","onkeydown","onkeyup","formaction","xlink:href","data-bind"],We="data:image/svg+xml,"+encodeURIComponent(`
78
78
  <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
79
79
  <rect fill="#f0f0f0" width="100" height="100"/>
80
80
  <text x="50" y="50" text-anchor="middle" dy=".3em" fill="#999" font-size="12">
81
81
  Image blocked
82
82
  </text>
83
83
  </svg>
84
- `),Ve=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Qe=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),qe=(e={})=>{const t=Y(),s={FORBID_TAGS:Ge,FORBID_ATTR:Ue,ALLOW_DATA_ATTR:!1,ALLOW_UNKNOWN_PROTOCOLS:!1};return t.addHook("afterSanitizeAttributes",r=>{if(e.allowExternalImages||(r.tagName==="IMG"&&r.removeAttribute("srcset"),r.tagName==="SOURCE"&&(r.removeAttribute("srcset"),r.removeAttribute("src")),r.tagName==="VIDEO"&&r.removeAttribute("poster")),r.tagName==="IMG"){const n=r.getAttribute("src")||"";if(n.startsWith("data:"))return;if(n.startsWith("cid:")){const d=n.slice(4).replace(/^<|>$/g,""),g=e.resolveCid?.(d);g&&(r.setAttribute("src",g),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",We),r.setAttribute("alt","[Blocked image]"),r.classList.add("blocked-image"))}if(r.tagName==="A"){const n=r.getAttribute("href")||"";if(/^(javascript|data):/i.test(n)){r.removeAttribute("href");return}r.setAttribute("target","_blank"),r.setAttribute("rel","noopener noreferrer nofollow"),r.classList.add("external-link")}if(r.hasAttribute("style")){const n=r.getAttribute("style")||"";r.setAttribute("style",Ve(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=Qe(o)}}),r=>{const n=_e(r),o=He(r),d=t.sanitize(r,s);return{html:`<style>${Te()}</style>${d}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},L=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Et=({className:e,children:t})=>a.jsx("div",{className:b("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),Ye=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:d,renderBlockedNotice:g})=>{const i=h.useMemo(()=>!e||typeof document>"u"?null:qe({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),c=i?.html??null,{framed:u,isPlain:m}=Ce(r,i?.hasAuthorBackground??!1),f=h.useMemo(()=>({background:i?.hasAuthorBackground??!1,spacing:i?.hasAuthorSpacing??!1}),[i?.hasAuthorBackground,i?.hasAuthorSpacing]),p=h.useMemo(()=>!c||n?0:(c.match(/data-blocked-src/g)||[]).length,[c,n]);return!c&&!t?a.jsx("div",{className:b("message-body",d),children:a.jsx(L,{})}):a.jsxs("div",{className:b("message-body",d),children:[p>0&&a.jsx("div",{children:g?.(p)}),c?a.jsx("div",{className:"message-body-frame",children:u?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(C,{html:c,variant:"framed",isDark:s,declares:f})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(C,{html:c,variant:m?"plain":"framed",isDark:s,declares:f})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(L,{})]})};function Nt({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:b("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(X,{className:"size-10 text-fg-subtle"}),a.jsx("p",{className:"mt-3 text-sm text-fg-muted",children:e}),s&&a.jsxs("p",{className:"text-2xs text-fg-subtle",children:[a.jsx(A,{children:"j"})," / ",a.jsx(A,{children:"k"})," to move, ",a.jsx(A,{children:"Enter"})," to open"]})]})}function M(e){const t=[];let s=-1,r=!1;for(let n=0;n<e.length;n++){const o=e[n];if(o==='"'){r=!r,s<0&&(s=n);continue}if(!r&&/\s/.test(o)){s>=0&&t.push({raw:e.slice(s,n),start:s,end:n}),s=-1;continue}s<0&&(s=n)}return s>=0&&t.push({raw:e.slice(s),start:s,end:e.length}),t}const Xe=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function Ze(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:Xe(s),rawValue:s}}const Je=e=>/[\s"]/.test(e),et=e=>Je(e)?`"${e.replace(/"/g,"")}"`:e,Ct=(e,t)=>`${e}:${et(t)}`,D=(e,t=Date.now())=>({value:e,setAt:t}),tt=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=D(!0,r):delete n.trusted,{...e,flags:n}},st=(e,t,s,r)=>{const n=o=>o.map(d=>tt(d,t,s,r));return{...e,envelope:{...e.envelope,from:n(e.envelope.from),to:n(e.envelope.to),cc:n(e.envelope.cc),bcc:n(e.envelope.bcc),replyTo:n(e.envelope.replyTo)}}},rt=({messageId:e})=>{const t=Z(),{pushError:s}=J(),{mutate:r,isPending:n,error:o,reset:d}=ee({...re(),onMutate:async i=>{const c=i.path.addressId,m=i.body.flags?.trusted?.value===!0,f=se({path:{messageId:e}});await t.cancelQueries({queryKey:f});const p=t.getQueriesData({queryKey:f}).filter(l=>l[1]!==void 0).map(([l,x])=>({queryKey:l,data:x}));return t.setQueriesData({queryKey:f},l=>l&&st(l,c,m)),{describePrefix:f,previous:p}},onError:(i,c,u)=>{if(u)for(const m of u.previous)t.setQueryData(m.queryKey,m.data);s(te("Couldn't trust sender","The change wasn't saved.",i))},onSettled:(i,c,u,m)=>{m&&t.invalidateQueries({queryKey:m.describePrefix})}});return{toggleTrusted:(i,c)=>{r({path:{addressId:i},body:{flags:{trusted:D(!c)}}})},isPending:n,error:o,reset:d}},nt=()=>{const[e,t]=h.useState(()=>typeof document<"u"&&document.documentElement.classList.contains("dark"));return h.useEffect(()=>{const s=document.documentElement,r=new MutationObserver(()=>{t(s.classList.contains("dark"))});return r.observe(s,{attributes:!0,attributeFilter:["class"]}),()=>r.disconnect()},[]),e},at=(e,t)=>{const s=`${e} image${e>1?"s":""}`;return t?`${s} hidden — you blocked this sender`:`${s} blocked for privacy`},ot=({blockedImageCount:e,canAlwaysTrust:t,isTrustPending:s,isSenderBlocked:r,onLoadOnce:n,onAlwaysTrust:o})=>a.jsxs("div",{"data-testid":"blocked-images-notice",className:"mb-3 flex items-center justify-between rounded-md bg-surface-sunken/50 px-3 py-2 text-sm",children:[a.jsx("span",{className:"text-fg-muted",children:at(e,r)}),!r&&a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("button",{type:"button",onClick:n,className:"text-accent hover:underline",children:"Load once"}),t&&a.jsx("button",{type:"button",onClick:o,"aria-busy":s,className:"text-accent hover:underline aria-busy:opacity-50",children:s?"Trusting…":"Always trust"})]})]}),it=(e,t)=>{switch(e){case"auth":return{title:"Your session expired",detail:"Sign in again to reload the message body. Other parts of the app may also stop responding until you do."};case"body-missing":return{title:"Message body is missing in storage",detail:"A sync failure may have left this message without its body bytes. Contact support, or run the reconcile script to refetch from the upstream IMAP server."};case"content-type-mismatch":return{title:"Couldn't load message body",detail:"The server returned an unexpected content type for this part. The message body has not been rendered to keep you safe."};case"spa-shell-leak":return{title:"Couldn't load message body",detail:"The server returned the app shell instead of the message body. This is an infrastructure bug — please report it."};case"not-ready":return{title:"Message body is still syncing",detail:"This message's body hasn't finished downloading from the mail server yet. It should appear shortly — reopen the message to try again."};default:return{title:"Couldn't load message body",detail:t}}},ct=e=>e instanceof le?e.reason:"generic",lt=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",dt=({error:e,onRetry:t})=>{const s=ct(e),r=lt(e),{title:n,detail:o}=it(s,r),[d,g]=h.useState(!1),{Account:i}=ne();return d?null:a.jsxs("div",{role:"alert","data-testid":"message-body-error-banner","data-reason":s,className:"flex items-start gap-2 rounded-md border border-danger/40 bg-danger-soft px-3 py-2 text-sm",children:[a.jsx(ae,{className:"size-4 shrink-0 text-danger mt-0.5","aria-hidden":"true"}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("p",{className:"font-medium text-danger",children:n}),a.jsx("p",{className:"text-fg-muted mt-1 break-words",children:o})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-3",children:[s==="auth"&&a.jsx(i,{children:({signOut:c})=>a.jsx("button",{type:"button",onClick:()=>c(),className:"text-sm font-medium text-accent hover:underline",children:"Sign in again"})}),t&&a.jsx("button",{type:"button",onClick:t,className:"text-sm font-medium text-accent hover:underline",children:"Retry"}),a.jsx("button",{type:"button",onClick:()=>g(!0),"aria-label":"Dismiss message body error",className:"rounded-md p-1 text-fg-muted hover:bg-surface-raised hover:text-fg transition-colors",children:a.jsx(oe,{className:"size-4","aria-hidden":"true"})})]})]})},ut=()=>a.jsxs("div",{className:"animate-pulse space-y-2",role:"status","aria-label":"Loading message body",children:[a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-full"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-11/12"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-3/4"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-5/6"})]}),R=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Tt=({bodyParts:e,html:t,text:s,isTrusted:r=!1,isBlocked:n=!1,messageId:o,fromAddressId:d,category:g,className:i})=>{const[c,u]=h.useState(!1),[m,f]=h.useState(o);m!==o&&(f(o),u(!1));const p=!n&&(r||c),l=nt(),{toggleTrusted:x,isPending:w}=rt({messageId:o??""}),y=!!e&&e.length>0,{picked:z,data:v,isLoading:P,isError:K,error:F,refetch:H}=de({messageId:o,bodyParts:e,enabled:y}),G=h.useMemo(()=>je(e??[]),[e]),U=y&&v?.kind==="html"?v.body:t,W=y&&v?.kind==="text"?v.body:s;if(y){if(P)return a.jsx("div",{className:b("message-body",i),children:a.jsx(ut,{})});if(K)return a.jsx("div",{className:b("message-body",i),children:a.jsx(dt,{error:F,onRetry:()=>H()})});if(!z)return a.jsx("div",{className:b("message-body",i),children:a.jsx(R,{})})}else if(!t&&!s)return a.jsx("div",{className:b("message-body",i),children:a.jsx(R,{})});const V=!!(d&&o),Q=()=>{!d||w||(u(!0),x(d,!1))};return a.jsx(Ye,{className:i,html:U,text:W,isDark:l,category:g,allowImages:p,resolveCid:G,renderBlockedNotice:q=>a.jsx(ot,{blockedImageCount:q,canAlwaysTrust:V,isTrustPending:w,isSenderBlocked:n,onLoadOnce:()=>u(!0),onAlwaysTrust:Q})})},mt=Object.values(_).map(e=>({value:e,label:$[e]})),ft={unclassified:"uncategorized"},ht=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:mt},{name:"is",label:"State",values:"fixed",options:[{value:"unread",label:"Unread"},{value:"read",label:"Read"},{value:"starred",label:"Starred"}]},{name:"has",label:"Contents",values:"fixed",options:[{value:"attachment",label:"Has attachment"}]},{name:"in",label:"Folder",values:"mailbox"},{name:"account",label:"Account",values:"account"},{name:"after",label:"Sent on or after",values:"date"},{name:"before",label:"Sent before",values:"date"}],gt=new Map(ht.map(e=>[e.name,e])),jt=e=>gt.get(e.toLowerCase()),pt=/^\d{4}-\d{2}-\d{2}$/;function bt(e,t,s){if(!pt.test(s))return;const r=Date.parse(`${s}T00:00:00Z`);if(!Number.isNaN(r))return{type:e,raw:t,value:s,epochSeconds:Math.floor(r/1e3)}}function yt(e){const t=e.toLowerCase(),s=ft[t];return s||Object.values(_).find(n=>n===t)}function xt(e,t){switch(t.toLowerCase()){case"unread":return{type:"isUnread",raw:e};case"read":return{type:"isRead",raw:e};case"starred":case"flagged":return{type:"isStarred",raw:e};default:return}}function wt(e,t){const s=Ze(e);if(!s||s.value.length===0)return;const{name:r,value:n}=s;switch(r){case"from":return{type:"from",raw:e,value:n};case"subject":return{type:"subject",raw:e,value:n};case"category":{const o=yt(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return xt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return bt(r,e,n);case"in":{const o=t.mailboxesByName?.get(n.toLowerCase());return o?{type:"in",raw:e,value:n,mailboxId:o}:void 0}case"account":{const o=t.accountsByName?.get(n.toLowerCase());return o?{type:"account",raw:e,value:n,accountId:o}:void 0}default:return}}function Lt(e,t={}){const s=[],r=[];for(const n of M(e)){const o=wt(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Rt(e,t){return M(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function _t(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${$[e.category]}`;case"hasAttachment":return"Has attachment";case"isUnread":return"Unread";case"isRead":return"Read";case"isStarred":return"Starred";case"before":return`Before ${e.value}`;case"after":return`After ${e.value}`;case"in":return`In: ${e.value}`;case"account":return`Account: ${e.value}`}}function $t(){const{mailboxNameIndex:e,accountNameIndex:t}=ie(),s=ce();return{...ue(s)?{}:{mailboxesByName:e},accountsByName:t}}export{Et as M,Nt as R,ht as S,Ye as a,rt as b,Tt as c,jt as d,M as e,Ze as f,Ct as g,Lt as p,Rt as r,_t as s,$t as u};
84
+ `),Ve=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Qe=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),qe=(e={})=>{const t=Y(),s={FORBID_TAGS:Ge,FORBID_ATTR:Ue,ALLOW_DATA_ATTR:!1,ALLOW_UNKNOWN_PROTOCOLS:!1};return t.addHook("afterSanitizeAttributes",r=>{if(e.allowExternalImages||(r.tagName==="IMG"&&r.removeAttribute("srcset"),r.tagName==="SOURCE"&&(r.removeAttribute("srcset"),r.removeAttribute("src")),r.tagName==="VIDEO"&&r.removeAttribute("poster")),r.tagName==="IMG"){const n=r.getAttribute("src")||"";if(n.startsWith("data:"))return;if(n.startsWith("cid:")){const d=n.slice(4).replace(/^<|>$/g,""),g=e.resolveCid?.(d);g&&(r.setAttribute("src",g),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",We),r.setAttribute("alt","[Blocked image]"),r.classList.add("blocked-image"))}if(r.tagName==="A"){const n=r.getAttribute("href")||"";if(/^(javascript|data):/i.test(n)){r.removeAttribute("href");return}r.setAttribute("target","_blank"),r.setAttribute("rel","noopener noreferrer nofollow"),r.classList.add("external-link")}if(r.hasAttribute("style")){const n=r.getAttribute("style")||"";r.setAttribute("style",Ve(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=Qe(o)}}),r=>{const n=_e(r),o=He(r),d=t.sanitize(r,s);return{html:`<style>${Te()}</style>${d}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},R=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Et=({className:e,children:t})=>a.jsx("div",{className:b("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),Ye=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:d,renderBlockedNotice:g})=>{const i=h.useMemo(()=>!e||typeof document>"u"?null:qe({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),c=i?.html??null,{framed:u,isPlain:m}=Ce(r,i?.hasAuthorBackground??!1),f=h.useMemo(()=>({background:i?.hasAuthorBackground??!1,spacing:i?.hasAuthorSpacing??!1}),[i?.hasAuthorBackground,i?.hasAuthorSpacing]),p=h.useMemo(()=>!c||n?0:(c.match(/data-blocked-src/g)||[]).length,[c,n]);return!c&&!t?a.jsx("div",{className:b("message-body",d),children:a.jsx(R,{})}):a.jsxs("div",{className:b("message-body",d),children:[p>0&&a.jsx("div",{children:g?.(p)}),c?a.jsx("div",{className:"message-body-frame",children:u?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(C,{html:c,variant:"framed",isDark:s,declares:f})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(C,{html:c,variant:m?"plain":"framed",isDark:s,declares:f})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(R,{})]})};function Nt({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:b("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(X,{className:"size-10 text-fg-subtle"}),a.jsx("p",{className:"mt-3 text-sm text-fg-muted",children:e}),s&&a.jsxs("p",{className:"text-2xs text-fg-subtle",children:[a.jsx(A,{children:"j"})," / ",a.jsx(A,{children:"k"})," to move, ",a.jsx(A,{children:"Enter"})," to open"]})]})}function M(e){const t=[];let s=-1,r=!1;for(let n=0;n<e.length;n++){const o=e[n];if(o==='"'){r=!r,s<0&&(s=n);continue}if(!r&&/\s/.test(o)){s>=0&&t.push({raw:e.slice(s,n),start:s,end:n}),s=-1;continue}s<0&&(s=n)}return s>=0&&t.push({raw:e.slice(s),start:s,end:e.length}),t}const Xe=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function Ze(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:Xe(s),rawValue:s}}const Je=e=>/[\s"]/.test(e),et=e=>Je(e)?`"${e.replace(/"/g,"")}"`:e,Ct=(e,t)=>`${e}:${et(t)}`,D=(e,t=Date.now())=>({value:e,setAt:t}),tt=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=D(!0,r):delete n.trusted,{...e,flags:n}},st=(e,t,s,r)=>{const n=o=>o.map(d=>tt(d,t,s,r));return{...e,envelope:{...e.envelope,from:n(e.envelope.from),to:n(e.envelope.to),cc:n(e.envelope.cc),bcc:n(e.envelope.bcc),replyTo:n(e.envelope.replyTo)}}},rt=({messageId:e})=>{const t=Z(),{pushError:s}=J(),{mutate:r,isPending:n,error:o,reset:d}=ee({...re(),onMutate:async i=>{const c=i.path.addressId,m=i.body.flags?.trusted?.value===!0,f=se({path:{messageId:e}});await t.cancelQueries({queryKey:f});const p=t.getQueriesData({queryKey:f}).filter(l=>l[1]!==void 0).map(([l,x])=>({queryKey:l,data:x}));return t.setQueriesData({queryKey:f},l=>l&&st(l,c,m)),{describePrefix:f,previous:p}},onError:(i,c,u)=>{if(u)for(const m of u.previous)t.setQueryData(m.queryKey,m.data);s(te("Couldn't trust sender","The change wasn't saved.",i))},onSettled:(i,c,u,m)=>{m&&t.invalidateQueries({queryKey:m.describePrefix})}});return{toggleTrusted:(i,c)=>{r({path:{addressId:i},body:{flags:{trusted:D(!c)}}})},isPending:n,error:o,reset:d}},nt=()=>{const[e,t]=h.useState(()=>typeof document<"u"&&document.documentElement.classList.contains("dark"));return h.useEffect(()=>{const s=document.documentElement,r=new MutationObserver(()=>{t(s.classList.contains("dark"))});return r.observe(s,{attributes:!0,attributeFilter:["class"]}),()=>r.disconnect()},[]),e},at=(e,t)=>{const s=`${e} image${e>1?"s":""}`;return t?`${s} hidden — you blocked this sender`:`${s} blocked for privacy`},ot=({blockedImageCount:e,canAlwaysTrust:t,isTrustPending:s,isSenderBlocked:r,onLoadOnce:n,onAlwaysTrust:o})=>a.jsxs("div",{"data-testid":"blocked-images-notice",className:"mb-3 flex items-center justify-between rounded-md bg-surface-sunken/50 px-3 py-2 text-sm",children:[a.jsx("span",{className:"text-fg-muted",children:at(e,r)}),!r&&a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("button",{type:"button",onClick:n,className:"text-accent hover:underline",children:"Load once"}),t&&a.jsx("button",{type:"button",onClick:o,"aria-busy":s,className:"text-accent hover:underline aria-busy:opacity-50",children:s?"Trusting…":"Always trust"})]})]}),it=(e,t)=>{switch(e){case"auth":return{title:"Your session expired",detail:"Sign in again to reload the message body. Other parts of the app may also stop responding until you do."};case"body-missing":return{title:"Message body is missing in storage",detail:"A sync failure may have left this message without its body bytes. Contact support, or run the reconcile script to refetch from the upstream IMAP server."};case"content-type-mismatch":return{title:"Couldn't load message body",detail:"The server returned an unexpected content type for this part. The message body has not been rendered to keep you safe."};case"spa-shell-leak":return{title:"Couldn't load message body",detail:"The server returned the app shell instead of the message body. This is an infrastructure bug — please report it."};case"not-ready":return{title:"Message body is still syncing",detail:"This message's body hasn't finished downloading from the mail server yet. It should appear shortly — reopen the message to try again."};default:return{title:"Couldn't load message body",detail:t}}},ct=e=>e instanceof le?e.reason:"generic",lt=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",dt=({error:e,onRetry:t})=>{const s=ct(e),r=lt(e),{title:n,detail:o}=it(s,r),[d,g]=h.useState(!1),{Account:i}=ne();return d?null:a.jsxs("div",{role:"alert","data-testid":"message-body-error-banner","data-reason":s,className:"flex items-start gap-2 rounded-md border border-danger/40 bg-danger-soft px-3 py-2 text-sm",children:[a.jsx(ae,{className:"size-4 shrink-0 text-danger mt-0.5","aria-hidden":"true"}),a.jsxs("div",{className:"flex-1 min-w-0",children:[a.jsx("p",{className:"font-medium text-danger",children:n}),a.jsx("p",{className:"text-fg-muted mt-1 break-words",children:o})]}),a.jsxs("div",{className:"flex shrink-0 items-center gap-3",children:[s==="auth"&&a.jsx(i,{children:({signOut:c})=>a.jsx("button",{type:"button",onClick:()=>c(),className:"text-sm font-medium text-accent hover:underline",children:"Sign in again"})}),t&&a.jsx("button",{type:"button",onClick:t,className:"text-sm font-medium text-accent hover:underline",children:"Retry"}),a.jsx("button",{type:"button",onClick:()=>g(!0),"aria-label":"Dismiss message body error",className:"rounded-md p-1 text-fg-muted hover:bg-surface-raised hover:text-fg transition-colors",children:a.jsx(oe,{className:"size-4","aria-hidden":"true"})})]})]})},ut=()=>a.jsxs("div",{className:"animate-pulse space-y-2",role:"status","aria-label":"Loading message body",children:[a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-full"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-11/12"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-3/4"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-5/6"})]}),L=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Tt=({bodyParts:e,html:t,text:s,isTrusted:r=!1,isBlocked:n=!1,messageId:o,fromAddressId:d,category:g,className:i})=>{const[c,u]=h.useState(!1),[m,f]=h.useState(o);m!==o&&(f(o),u(!1));const p=!n&&(r||c),l=nt(),{toggleTrusted:x,isPending:w}=rt({messageId:o??""}),y=!!e&&e.length>0,{picked:z,data:v,isLoading:P,isError:K,error:F,refetch:H}=de({messageId:o,bodyParts:e,enabled:y}),G=h.useMemo(()=>je(e??[]),[e]),U=y&&v?.kind==="html"?v.body:t,W=y&&v?.kind==="text"?v.body:s;if(y){if(P)return a.jsx("div",{className:b("message-body",i),children:a.jsx(ut,{})});if(K)return a.jsx("div",{className:b("message-body",i),children:a.jsx(dt,{error:F,onRetry:()=>H()})});if(!z)return a.jsx("div",{className:b("message-body",i),children:a.jsx(L,{})})}else if(!t&&!s)return a.jsx("div",{className:b("message-body",i),children:a.jsx(L,{})});const V=!!(d&&o),Q=()=>{!d||w||(u(!0),x(d,!1))};return a.jsx(Ye,{className:i,html:U,text:W,isDark:l,category:g,allowImages:p,resolveCid:G,renderBlockedNotice:q=>a.jsx(ot,{blockedImageCount:q,canAlwaysTrust:V,isTrustPending:w,isSenderBlocked:n,onLoadOnce:()=>u(!0),onAlwaysTrust:Q})})},mt=Object.values(_).map(e=>({value:e,label:I[e]})),ft={unclassified:"uncategorized"},ht=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:mt},{name:"is",label:"State",values:"fixed",options:[{value:"unread",label:"Unread"},{value:"read",label:"Read"},{value:"starred",label:"Starred"}]},{name:"has",label:"Contents",values:"fixed",options:[{value:"attachment",label:"Has attachment"}]},{name:"in",label:"Folder",values:"mailbox"},{name:"account",label:"Account",values:"account"},{name:"after",label:"Sent on or after",values:"date"},{name:"before",label:"Sent before",values:"date"}],gt=new Map(ht.map(e=>[e.name,e])),jt=e=>gt.get(e.toLowerCase()),pt=/^\d{4}-\d{2}-\d{2}$/;function bt(e,t,s){if(!pt.test(s))return;const r=Date.parse(`${s}T00:00:00Z`);if(!Number.isNaN(r))return{type:e,raw:t,value:s,epochSeconds:Math.floor(r/1e3)}}function yt(e){const t=e.toLowerCase(),s=ft[t];return s||Object.values(_).find(n=>n===t)}function xt(e,t){switch(t.toLowerCase()){case"unread":return{type:"isUnread",raw:e};case"read":return{type:"isRead",raw:e};case"starred":case"flagged":return{type:"isStarred",raw:e};default:return}}function wt(e,t){const s=Ze(e);if(!s||s.value.length===0)return;const{name:r,value:n}=s;switch(r){case"from":return{type:"from",raw:e,value:n};case"subject":return{type:"subject",raw:e,value:n};case"category":{const o=yt(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return xt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return bt(r,e,n);case"in":{const o=t.mailboxesByName?.get(n.toLowerCase());return o?{type:"in",raw:e,value:n,mailboxId:o}:void 0}case"account":{const o=t.accountsByName?.get(n.toLowerCase());return o?{type:"account",raw:e,value:n,accountId:o}:void 0}default:return}}function Rt(e,t={}){const s=[],r=[];for(const n of M(e)){const o=wt(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Lt(e,t){return M(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function _t(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${I[e.category]}`;case"hasAttachment":return"Has attachment";case"isUnread":return"Unread";case"isRead":return"Read";case"isStarred":return"Starred";case"before":return`Before ${e.value}`;case"after":return`After ${e.value}`;case"in":return`In: ${e.value}`;case"account":return`Account: ${e.value}`}}function It(){const{mailboxNameIndex:e,accountNameIndex:t}=ie(),s=ce();return{...ue(s)?{}:{mailboxesByName:e},accountsByName:t}}export{Et as M,Nt as R,ht as S,Ye as a,rt as b,Tt as c,jt as d,M as e,Ze as f,Ct as g,Rt as p,Lt as r,_t as s,It as u};
@@ -1 +1 @@
1
- import{h as T,at as L,i as k,E as I,F as E,cC as A,ef as R,r as v,dr as j,j as p,eg as h,eh as w,ei as D,C as _,ck as N,c as Q,dM as z,c$ as O}from"./index-PzxNuyxu.js";import{c as U}from"./popover-menu-COZUO8Qj.js";import{aj as q}from"./MailListHeader-D3a1nfmy.js";import{a as P}from"./useLabels-DzVQRtbu.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-n3Gy_BGx.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}},$=e=>{const{mailboxId:t,messages:s}=e,n=T(),{pushError:l}=L(),{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}=$({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 K=3,ie=({hasSearchQuery:e,freeText:t,residualTokenCount:s})=>{if(!e||s>0)return!1;const n=t.trim();return n.length===0||n.length>=K},ce=e=>e===void 0?{kind:"unknown"}:{kind:"exact",value:e},V=20,Y=new Set(Object.values(O)),J=e=>e!==void 0&&Y.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),g=i.find(o=>o.type==="after"),b=i.find(o=>o.type==="before"),x=i.find(o=>o.type==="in"),S=F({browsed:l,callerMailboxId:e,inTokenMailboxId:x?.mailboxId}),{data:C,isLoading:M}=Q({...z({query:{query:a,mailboxId:S,limit:V,...d!==void 0?{category:d}:{},...m!==void 0?{hasAttachment:m}:{},...f!==void 0?{hasStars:f}:{},...y!==void 0?{isRead:y}:{},...g?{sentDateFrom:g.epochSeconds}:{},...b?{sentDateTo:b.epochSeconds}:{}}}),enabled:r,staleTime:6e4});return{hits:C?.items??[],isLoading:r&&M}}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,cG as A,ej as R,r as v,dv as j,j as p,ek as h,el as w,em as D,C as Q,co as _,c as N,dQ as z,d3 as O}from"./index-DwhL5hnf.js";import{c as U}from"./popover-menu-zNHNSI3_.js";import{aj as q}from"./MailListHeader-Cr3dh1lr.js";import{a as G}from"./useLabels-Cv6tv63h.js";import{n as P}from"./search-query-Cr_ZXBCp.js";import{b as B}from"./search-scope-B5-OK3Cq.js";import{u as F,p as H}from"./useSearchTokenContext-B2wE1jWs.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}=G(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}=Q(),n=F(),l=_(),c=P(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=B({browsed:l,callerMailboxId:e,inTokenMailboxId:x?.mailboxId}),{data:T,isLoading:C}=N({...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-PzxNuyxu.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-DwhL5hnf.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};
package/index.html CHANGED
@@ -38,8 +38,8 @@
38
38
  } catch (_) {}
39
39
  })();
40
40
  </script>
41
- <script type="module" crossorigin src="/assets/index-PzxNuyxu.js"></script>
42
- <link rel="stylesheet" crossorigin href="/assets/index-CrpWQTJG.css">
41
+ <script type="module" crossorigin src="/assets/index-DwhL5hnf.js"></script>
42
+ <link rel="stylesheet" crossorigin href="/assets/index-CzAIxx9Z.css">
43
43
  </head>
44
44
  <body>
45
45
  <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.608",
3
+ "version": "0.0.610",
4
4
  "description": "Built Remit web client — static assets and the default runtime config.",
5
5
  "files": [
6
6
  "**/*"
@@ -1 +0,0 @@
1
- import{j as n,f as N,t as u,_ as te,$ as ne,az as y,r as v,ay as se,X as ae,i as j,eG as ie,eH as re,eI as le,h as oe,s as ce,b3 as de,a0 as ue}from"./index-PzxNuyxu.js";import{j as $,y as me,l as he,z as U,A as xe}from"./window-DwWXASUb.js";import{f as pe}from"./ErrorState-B-J6YL9j.js";import{R as H,c as ye}from"./calendar-color-Cxn4ZPzR.js";const ve=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ge=["January","February","March","April","May","June","July","August","September","October","November","December"],fe=["first","second","third","fourth","last"],A="";function be(e,t){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return[];const[s,a,r]=e.split("-").map(Number),i=new Date(Date.UTC(s,a-1,r)),l=ve[i.getUTCDay()],o=fe[Math.min(Math.floor((r-1)/7),4)],c=t===""?"":`, ${t}`,d=i.getUTCDay()>=1&&i.getUTCDay()<=5;return[`Every day${c}`,...d?[`Every weekday${c}`]:[],`Every week on ${l}${c}`,`Every month on the ${o} ${l}${c}`,`Every year on ${r} ${ge[a-1]}${c}`]}const Ee="w-full rounded-md border border-line bg-surface-sunken px-3 py-2 text-sm text-fg outline-none placeholder:text-fg-subtle focus-visible:border-line-strong focus-visible:ring-2 focus-visible:ring-ring/30",m=({draft:e,onChange:t},s,a)=>t({...e,[s]:a});function p({label:e,children:t}){return n.jsxs("div",{className:"flex flex-col gap-2",children:[n.jsx("span",{className:"text-2xs font-semibold uppercase tracking-wider text-fg-subtle",children:e}),t]})}function De({draft:e,onChange:t,layout:s="compact",touch:a}){const r=s==="pane";return n.jsx(y,{value:e.title,placeholder:"Title","aria-label":"Title",onChange:i=>m({draft:e,onChange:t},"title",i.target.value),className:u(r?"text-lg font-medium":"text-md font-medium",r?"h-11":a?"min-h-11":"")})}function Q(e){return e.date===""||e.endDate===""?!1:e.allDay?e.endDate<e.date:e.startTime===""||e.endTime===""?!1:`${e.endDate}T${e.endTime}`<`${e.date}T${e.startTime}`}function Ne(e,t){return t===""?{...e,date:t}:e.endDate===""?{...e,date:t,endDate:t}:e.date===""?{...e,date:t}:{...e,date:t,endDate:$(t,me(e.date,e.endDate))}}function je(e,t){const s=e.date!==""&&e.endDate===$(e.date,1)&&e.startTime!==""&&e.endTime!==""&&e.endTime<e.startTime;return t&&s?{...e,allDay:t,endDate:e.date}:!t&&e.date!==""&&e.endDate===e.date&&e.startTime!==""&&e.endTime!==""&&e.endTime<e.startTime?{...e,allDay:t,endDate:$(e.date,1)}:{...e,allDay:t}}function Te({draft:e,onChange:t,touch:s}){const a=s?"min-h-11":"",r=Q(e),i=v.useId(),l={"aria-invalid":r,"aria-describedby":r?i:void 0},o=u("w-40",a,r&&"border-danger/60"),c=u("w-28",a,r&&"border-danger/60");return n.jsxs("div",{className:"flex flex-col gap-1.5",children:[n.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[n.jsx(y,{type:"date",value:e.date,"aria-label":"Date",...l,onChange:d=>t(Ne(e,d.target.value)),className:o}),!e.allDay&&n.jsx(y,{type:"time",value:e.startTime,"aria-label":"Start time",...l,onChange:d=>m({draft:e,onChange:t},"startTime",d.target.value),className:c}),n.jsx("span",{className:"text-sm text-fg-subtle",children:"to"}),n.jsx(y,{type:"date",value:e.endDate,"aria-label":"End date",min:e.date===""?void 0:e.date,...l,onChange:d=>m({draft:e,onChange:t},"endDate",d.target.value),className:o}),!e.allDay&&n.jsx(y,{type:"time",value:e.endTime,"aria-label":"End time",...l,onChange:d=>m({draft:e,onChange:t},"endTime",d.target.value),className:c}),n.jsxs("label",{className:"flex items-center gap-2 text-sm text-fg-muted",children:[n.jsx("input",{type:"checkbox",checked:e.allDay,onChange:d=>t(je(e,d.target.checked)),className:"size-4 accent-current"}),"All day"]})]}),r&&n.jsx("p",{id:i,className:"text-xs text-danger",role:"alert",children:e.allDay?`Ends before it starts. Move the end to ${e.date} or later.`:`Ends before it starts. Move the end past ${e.date} ${e.startTime}, or start earlier.`})]})}function Ce({draft:e,onChange:t,calendars:s,touch:a}){return n.jsx(we,{calendars:s,value:e.calendarId,onChange:r=>m({draft:e,onChange:t},"calendarId",r),touch:a})}function ke({draft:e,onChange:t,touch:s,repeatEditable:a=!0,onCustom:r}){return a?n.jsx(Ie,{value:e.repeat,date:e.date,startTime:e.startTime,onChange:i=>m({draft:e,onChange:t},"repeat",i),onCustom:r,className:s?"min-h-11":""}):n.jsxs("p",{className:"flex items-center gap-2 text-sm text-fg-muted",children:[n.jsx(H,{className:"size-4 shrink-0 text-fg-subtle","aria-hidden":!0}),e.repeat===A?"Does not repeat":e.repeat]})}function $e({draft:e,onChange:t,touch:s}){return n.jsx(y,{value:e.location,placeholder:"Location","aria-label":"Location",onChange:a=>m({draft:e,onChange:t},"location",a.target.value),className:s?"min-h-11":""})}function Ae({draft:e,onChange:t,touch:s}){return n.jsx(y,{value:e.guests,placeholder:"Guests, comma separated","aria-label":"Guests",onChange:a=>m({draft:e,onChange:t},"guests",a.target.value),className:s?"min-h-11":""})}function Oe({draft:e,onChange:t,layout:s="compact"}){return n.jsx("textarea",{value:e.notes,placeholder:"Notes","aria-label":"Notes",onChange:a=>m({draft:e,onChange:t},"notes",a.target.value),rows:s==="pane"?6:3,className:Ee})}function Me({draft:e,onChange:t,calendars:s,layout:a="compact",expanded:r=!1,onToggleExpanded:i,onSave:l,onCancel:o,onDelete:c,saveLabel:d="Add",header:f,repeatEditable:b=!0,guestsEditable:M=!1,calendarEditable:I=!0,onCustomRepeat:Z,touch:h,className:w}){const g=a==="pane",x={draft:e,onChange:t,layout:a,touch:h},S=n.jsx(De,{...x}),R=n.jsx(Te,{...x}),F=n.jsx(Ce,{...x,calendars:s}),Y=n.jsx(ke,{...x,repeatEditable:b,onCustom:Z}),L=n.jsx($e,{...x}),P=n.jsx(Ae,{...x}),W=n.jsx(Oe,{...x}),_=n.jsxs("div",{className:u("flex items-center gap-2",g?"pt-2":"pt-1"),children:[n.jsx(N,{variant:"primary",size:h||g?"md":"sm",onClick:l,disabled:Q(e),className:h?"min-h-11 flex-1":"",children:d}),n.jsx(N,{variant:"ghost",size:h||g?"md":"sm",onClick:o,className:h?"min-h-11":"",children:"Cancel"}),c&&n.jsx(N,{variant:"ghost",size:h||g?"md":"sm",onClick:c,className:u("ml-auto text-danger",h&&"min-h-11"),children:"Delete"})]});if(g)return n.jsxs("div",{className:u("flex flex-col gap-5",w),children:[f,n.jsx(p,{label:"Title",children:S}),n.jsx(p,{label:"When",children:R}),I&&n.jsx(p,{label:"Calendar",children:F}),n.jsx(p,{label:"Repeat",children:Y}),n.jsx(p,{label:"Location",children:L}),M&&n.jsx(p,{label:"Guests",children:P}),n.jsx(p,{label:"Notes",children:W}),_]});const ee=i!==void 0&&!r;return n.jsxs("div",{className:u("flex flex-col gap-3",w),children:[f,S,R,I&&F,i&&n.jsxs("button",{type:"button",onClick:i,"aria-expanded":r,className:u("flex items-center gap-1 self-start rounded-sm text-xs font-medium text-fg-muted outline-none hover:text-fg focus-visible:ring-2 focus-visible:ring-ring",h&&"min-h-11"),children:[r?n.jsx(te,{className:"size-3.5"}):n.jsx(ne,{className:"size-3.5"}),r?"Fewer details":"More details"]}),!ee&&n.jsxs("div",{className:"flex flex-col gap-2 border-t border-line pt-3",children:[L,M&&P,Y,W]}),_]})}const z="__custom__";function Ie({value:e,date:t,startTime:s,onChange:a,onCustom:r,className:i}){const l=be(t,s),o=e===A||l.includes(e)?l:[e,...l];return n.jsxs(se,{icon:n.jsx(H,{className:"size-4"}),"aria-label":"Repeat",value:e,onChange:c=>{if(c.target.value===z){r?.();return}a(c.target.value)},className:i,children:[n.jsx("option",{value:A,children:"Does not repeat"}),o.map(c=>n.jsx("option",{value:c,children:c},c)),r&&n.jsx("option",{value:z,children:"Custom…"})]})}function we({calendars:e,value:t,onChange:s,touch:a}){const r=v.useId();return n.jsxs("fieldset",{className:"flex flex-wrap gap-1.5",children:[n.jsx("legend",{className:"sr-only",children:"Calendar"}),e.map(i=>{const l=ye(i.color),o=i.id===t;return n.jsxs("label",{className:u("inline-flex cursor-pointer items-center gap-1.5 rounded-full border px-2.5 text-xs transition-colors","has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-ring",a?"min-h-11":"h-7",o?u(l.soft,l.text,l.border):"border-line text-fg-muted hover:bg-surface-sunken"),children:[n.jsx("input",{type:"radio",name:r,value:i.id,checked:o,onChange:()=>s(i.id),className:"sr-only"}),n.jsx("span",{className:u("size-2 rounded-full",l.solid)}),i.name]},i.id)})]})}function Se({title:e,subtitle:t,onClose:s,children:a,className:r}){return n.jsxs("section",{className:u("flex h-full w-full flex-col bg-surface",r),children:[n.jsxs("header",{className:"flex h-pane-header shrink-0 items-center gap-2 border-b border-line px-row-inset",children:[n.jsx("h2",{className:"shrink-0 text-xs font-medium text-fg",children:e}),t!==void 0&&t!==""&&n.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-fg-muted",children:t}),n.jsx("button",{type:"button","aria-label":"Close editor",onClick:s,className:"ml-auto flex size-7 shrink-0 items-center justify-center rounded-md text-fg-subtle outline-none hover:bg-surface-sunken hover:text-fg focus-visible:ring-2 focus-visible:ring-ring",children:n.jsx(ae,{className:"size-4"})})]}),n.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-row-inset py-5",children:n.jsx("div",{className:"mx-auto w-full max-w-2xl",children:a})})]})}const E=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],D=["SU","MO","TU","WE","TH","FR","SA"],G=["January","February","March","April","May","June","July","August","September","October","November","December"],K=["first","second","third","fourth","last"],J=[1,2,3,4,-1],q="MO,TU,WE,TH,FR",Re=e=>e.replace(/,\s*\d{2}:\d{2}$/,"").trim();function O(e){const t=Re(e);if(t==="")return"";if(t==="Every day")return"FREQ=DAILY";if(t==="Every weekday")return`FREQ=WEEKLY;BYDAY=${q}`;const s=t.match(/^Every week on (\w+)$/);if(s){const i=E.indexOf(s[1]);return i===-1?void 0:`FREQ=WEEKLY;BYDAY=${D[i]}`}const a=t.match(/^Every month on the (\w+) (\w+)$/);if(a){const i=K.indexOf(a[1]),l=E.indexOf(a[2]);return i===-1||l===-1?void 0:`FREQ=MONTHLY;BYDAY=${J[i]}${D[l]}`}const r=t.match(/^Every year on (\d{1,2}) (\w+)$/);if(r){const i=G.indexOf(r[2]);return i===-1?void 0:`FREQ=YEARLY;BYMONTH=${i+1};BYMONTHDAY=${Number(r[1])}`}}const Fe=e=>e===""?"":`, ${e}`;function Be(e,t){const s=new Map(e.split(";").map(l=>l.split("=")).filter(l=>l.length===2).map(([l,o])=>[l.toUpperCase(),o.toUpperCase()])),a=Fe(t),r=s.get("FREQ"),i=s.get("BYDAY");if(!(s.has("INTERVAL")&&s.get("INTERVAL")!=="1")&&!(s.has("UNTIL")||s.has("COUNT"))){if(r==="DAILY")return`Every day${a}`;if(r==="WEEKLY"){if(i===void 0)return;if(i===q)return`Every weekday${a}`;const l=D.indexOf(i);return l===-1?void 0:`Every week on ${E[l]}${a}`}if(r==="MONTHLY"){const l=i?.match(/^(-?\d)([A-Z]{2})$/);if(!l)return;const o=J.indexOf(Number(l[1])),c=D.indexOf(l[2]);return o===-1||c===-1?void 0:`Every month on the ${K[o]} ${E[c]}${a}`}if(r==="YEARLY"){const l=Number(s.get("BYMONTH")),o=Number(s.get("BYMONTHDAY"));return!l||!o||l>12?void 0:`Every year on ${o} ${G[l-1]}${a}`}}}function He(e,t){return{title:"",date:e,startTime:"09:00",endDate:e,endTime:"10:00",allDay:!1,calendarId:t,location:"",guests:"",notes:"",repeat:""}}function Qe(e,t){return{title:e.title,date:e.start.slice(0,10),startTime:e.allDay?"":e.start.slice(11,16),endDate:xe(e),endTime:e.allDay?"":e.end.slice(11,16),allDay:e.allDay,calendarId:e.calendarId,location:t.location,guests:"",notes:t.notes,repeat:t.repeat}}function V(e,t){return e.allDay?{start:e.date,end:he(e.endDate,1)}:{start:U(e.date,e.startTime,t),end:U(e.endDate,e.endTime,t)}}function X(e,t){return e.title.trim()===""?"Give the event a title before saving it.":e.date===""?"Pick the day the event is on.":e.endDate===""?"Pick the day the event ends on.":e.calendarId===""?"Pick the calendar to save the event in.":!e.allDay&&(e.startTime===""||e.endTime==="")?"Set a start and an end time, or mark the event all day.":e.allDay&&e.endDate<e.date?"The last day is before the first. Move one of them.":!e.allDay&&`${e.endDate}T${e.endTime}`<=`${e.date}T${e.startTime}`?"The end is not after the start. Move one of them.":t&&O(e.repeat)===void 0?"This calendar can't store that repeat rule. Pick one of the offered rules, or turn the repeat off.":""}function Ge(e,t){const s=X(e,!0);if(s!=="")return{ok:!1,problem:s};const{start:a,end:r}=V(e,t);return{ok:!0,input:{calendarId:e.calendarId,summary:e.title.trim(),description:e.notes,location:e.location,start:a,end:r,allDay:e.allDay,...t===""?{}:{timeZone:t},recurrenceRule:O(e.repeat)??""}}}function Ke(e,t,s){const a=t.repeat!==e.repeat,r=X(t,a);if(r!=="")return{ok:!1,problem:r};const i={};if(t.title.trim()!==e.title.trim()&&(i.summary=t.title.trim()),t.location!==e.location&&(i.location=t.location),t.notes!==e.notes&&(i.description=t.notes),t.date!==e.date||t.startTime!==e.startTime||t.endDate!==e.endDate||t.endTime!==e.endTime||t.allDay!==e.allDay){const{start:o,end:c}=V(t,s);i.start=o,i.end=c,i.allDay=t.allDay,s!==""&&(i.timeZone=s)}return a&&(i.recurrenceRule=O(t.repeat)??""),{ok:!0,patch:i}}const T=ce(400,404,412),Ye=new Set(["calendarEventOperationsListCalendarEvents","calendarEventDetailOperationsGetCalendarEvent","calendarFreeBusyOperationsListCalendarFreeBusy"]),C={kind:"written"},k=e=>de(e)===412?{kind:"conflict"}:{kind:"refused",message:pe(e)},Le={this:"This",following:"Following",all:"All"};function Pe(){const e=oe();return v.useCallback(()=>{e.invalidateQueries({predicate:t=>{const s=t.queryKey[0];if(typeof s!="object"||s===null)return!1;const a=s._id;return typeof a=="string"&&Ye.has(a)}})},[e])}const B=({scope:e,recurrenceId:t})=>e===void 0||e==="all"?{}:{scope:Le[e],recurrenceId:t};function Je(){const e=Pe(),t=j({...ie(),meta:T,onSuccess:e}),s=j({...re(),meta:T,onSuccess:e}),a=j({...le(),meta:T,onSuccess:e}),r=v.useCallback(o=>t.mutateAsync({body:o}).then(()=>C).catch(k),[t]),i=v.useCallback((o,c)=>s.mutateAsync({path:{calendarObjectId:o.calendarObjectId},query:{calendarId:o.calendarId,...B(o)},headers:{"If-Match":o.etag},body:c}).then(()=>C).catch(k),[s]),l=v.useCallback(o=>a.mutateAsync({path:{calendarObjectId:o.calendarObjectId},query:{calendarId:o.calendarId,...B(o)},headers:{"If-Match":o.etag}}).then(()=>C).catch(k),[a]);return v.useMemo(()=>({createEvent:r,updateEvent:i,deleteEvent:l,isWriting:t.isPending||s.isPending||a.isPending}),[r,i,l,t.isPending,s.isPending,a.isPending])}function qe({title:e,subtitle:t,calendars:s,draft:a,onChange:r,problem:i,saveLabel:l,isSaving:o,repeatEditable:c=!0,calendarEditable:d=!0,onSave:f,onCancel:b}){return n.jsx(Se,{title:e,subtitle:t,onClose:b,children:n.jsx(Me,{draft:a,onChange:r,calendars:s,layout:"pane",repeatEditable:c,calendarEditable:d,saveLabel:o?"Saving…":l,onSave:f,onCancel:b,header:i===""?void 0:n.jsxs("div",{role:"alert",className:"flex items-start gap-2 rounded-md border border-danger/40 bg-danger-soft px-3 py-2 text-sm",children:[n.jsx(ue,{className:"mt-0.5 size-4 shrink-0 text-danger","aria-hidden":"true"}),n.jsx("p",{className:"min-w-0 flex-1 break-words text-fg",children:i})]})})})}export{qe as C,Ge as c,Qe as d,He as e,Ke as p,Be as t,Je as u};
@@ -1 +0,0 @@
1
- import{ew as Z,r as o,dX as U,c as de,C as z,bl as le,cN as ce,aZ as ue,a_ as ge,j as a,ak as he,cZ as me,c_ as fe}from"./index-PzxNuyxu.js";import{u as pe,p as G,R as Ie}from"./useSearchTokenContext-n3Gy_BGx.js";import{A as xe,E as Te,al as ye,am as be,aw as ve,an as Ce,b as Se,M as Re,at as we,ax as je,av as Fe,m as Me,J as Oe,O as W,N as ke,K as Pe,d as Le,Y as Ne,Z as Ae,$ as J,a0 as X,a1 as De,a2 as Ee,a3 as qe}from"./MailListHeader-D3a1nfmy.js";import{u as Be,l as Qe,b as Ke,a as ze}from"./MailViewChrome-DD5n_rfl.js";import{f as He}from"./ErrorState-B-J6YL9j.js";import{d as Ve,w as _e}from"./wizard-selection-DxUM65kM.js";import{a as Ge}from"./useMessageBodyContent-C-IdvqlN.js";import{e as We,f as Ze}from"./search-token-index-DdGc2j7R.js";import{u as Ue}from"./sections-C_lN53Kd.js";const H=e=>({...e,starred:!0,order:"desc"}),Je=(e={})=>U({query:H(e)});function Y(e={}){const{data:t,isLoading:s,isError:r,error:c,refetch:u,fetchNextPage:n,hasNextPage:g,isFetchingNextPage:h}=Be({queryKey:Je(e),queryFn:async({pageParam:I})=>{const{data:l}=await Z({query:{...H(e),continuationToken:I},throwOnError:!0});return l},initialPageParam:void 0,getNextPageParam:I=>I.continuationToken,staleTime:6e4});return{threads:o.useMemo(()=>(t?.pages??[]).flatMap(I=>I.items??[]),[t]),isLoading:s,isError:r,error:c,refetch:u,fetchNextPage:n,hasNextPage:g,isFetchingNextPage:h}}function Xe(e={}){const t={...H(e),unread:!0,count:!0,results:!1},{data:s}=de({queryKey:U({query:t}),queryFn:async()=>{const{data:r}=await Z({query:t,throwOnError:!0});return r},staleTime:6e4});return s?.count}const Ye=["from","subject","category","unread","starred","attachments"],$e=(e,t)=>{const s=xe(e),{params:r,residual:c}=Te(t,{...s,starred:!0},Ye);return{criteria:{...r,...s},residual:c}};function et({rows:e,verb:t}){const{selectedIds:s,exitSelection:r}=Fe(),c=o.useMemo(()=>_e(e,s),[e,s]);return a.jsx(Me,{verb:t,selection:c,selectionRestriction:"spansAccounts",onFinished:r})}function tt({selectedMessageId:e,onOpenThread:t,commandsRef:s,onTriageContextChange:r,onDeleteMessages:c}){const{searchQuery:u,resultFolderIndex:n,onSearchClearQuery:g}=z(),h=pe(),k=le(),I=ce(),[l,m]=o.useState("all"),[b,P]=o.useState(new Set),R=o.useCallback(i=>{P(S=>{const x=new Set(S);return x.has(i)?x.delete(i):x.add(i),x})},[]),w=o.useCallback(()=>{m("all"),P(new Set)},[]),T=o.useCallback(()=>{w(),g()},[w,g]),{freeText:j,tokens:v}=G(u.trim().toLowerCase(),h),L=G(u.trim(),h).freeText,{criteria:N,residual:f}=o.useMemo(()=>$e({category:l,attributes:b},v),[l,b,v]),F=o.useMemo(()=>j?{...N,query:j}:N,[N,j]),{threads:A,isLoading:D,isError:y,error:q,refetch:M,fetchNextPage:B,hasNextPage:Q,isFetchingNextPage:O}=Y(F),p=o.useMemo(()=>Ve(A).map(ye).filter(i=>be(i,f)),[A,f]),d=o.useCallback((i,S)=>{const x=p.find(ie=>ie.id===i)?.threadId;x&&t?.({threadId:x,messageId:i},S)},[p,t]),C=o.useCallback(i=>{const S=i.threadId??p.find(x=>x.id===i.id)?.threadId;S&&t?.({threadId:S,messageId:i.id})},[p,t]),K=o.useMemo(()=>ve(),[]),te=o.useMemo(()=>p.map(i=>Ce(i,n)),[p,n]),se=Xe(F)??null,ae=o.useMemo(()=>v.filter(i=>i.type!=="isStarred"),[v]),re=Qe({chips:{category:l,attributes:b},tokens:ae,reach:f.length>0?"loaded-pages":"whole-folder",onClear:T}),V=D?"loading":y?"error":p.length===0?"empty":"ready",oe=o.useCallback(()=>{const i=ue(ge());window.open(i,"_blank","noopener,noreferrer")},[]),_=Se(),ne=a.jsx("div",{className:"flex h-full min-h-0 flex-col",children:a.jsxs("div",{className:"flex-1 overflow-y-auto",children:[a.jsx("div",{className:"divide-y divide-line",children:p.map(i=>a.jsx(Re,{thread:i,active:i.id===e,onClick:()=>d(i.id)},i.id))}),Q?a.jsx("button",{type:"button",className:"w-full py-3 text-sm text-muted hover:text-fg disabled:opacity-50",onClick:()=>B(),disabled:O,children:O?"Loading…":"Load more"}):null]})});return a.jsx(Ke,{title:"Starred",unreadCount:se,preset:K,selectedCategory:l,activeFilters:b,onSelectCategory:m,onToggleFilter:R,onClearFilters:w,searchResults:te,searchLoading:D,onSelectSearchResult:C,searchResultsInBody:!0,children:a.jsxs(we,{selectedMessageId:e,rows:p,onOpen:d,onDeleteMessages:c,onSelectionVerb:I.start,commandsRef:s,onTriageContextChange:r,children:[a.jsx(ze,{listTitle:"Starred",sections:[{id:"flagged",threads:p}],flatList:!0,hideHeader:!0,listState:_.searchResults?"ready":V,listFilter:re,listScopeLabel:"Starred",searchQuery:L||void 0,errorMessage:y?He(q):void 0,onRetry:()=>M(),onReportError:oe,selectedThreadId:e,onSelectThread:d,isDesktop:k,selectionBar:a.jsx(je,{title:"Starred"}),listBody:_.searchResults??(V==="ready"?ne:void 0)}),a.jsx(et,{rows:p,verb:I.verb})]})})}const $=o.createContext(null);function E(){const e=o.useContext($);if(!e)throw new Error("FlaggedPane.* must be used inside <FlaggedPane>");return e}function st({thread:e,children:t}){const s=We(),r=Ze(),c=Ue(),{searchInput:u}=z(),n=e?.threadId,g=e?.messageId,{threads:h}=Y(),k=o.useMemo(()=>{if(n)return h.find(d=>d.messageId===g)??h.find(d=>d.threadId===n)},[h,n,g]),I=Oe(n,g),l=k??I,m=g??l?.messageId,b=o.useMemo(()=>{if(n)return{threadId:n,mailboxId:l?.mailboxId??"",subject:l?.subject,messageId:m,authenticity:l?.authenticity}},[n,l,m]),P=o.useCallback((d,C)=>{s(d,{replace:C?.replace,query:u})},[s,u]),R=o.useCallback(d=>{m&&d.includes(m)&&r()},[m,r]),w=W({thread:l,isOpen:!0,onAfterOptimisticRemove:R}),T=ke(),{deleteMessages:j}=Pe({mailboxId:l?.mailboxId??"",messages:h,onAfterOptimisticRemove:R}),{toggleReadFor:v}=Le({mailboxId:l?.mailboxId??"",messages:h}),L=T.focusedMessageId,f=o.useMemo(()=>h.find(d=>d.messageId===L),[h,L])??l,F=W({thread:f,isOpen:f?.messageId===m}),A=Ge(),D=he(),y=me(),q=o.useMemo(()=>fe(y,n,m),[y,n,m]),M=o.useMemo(()=>{if(f)return d=>y({threadId:f.threadId,messageId:f.messageId,mode:d})},[y,f]),{nextMessageId:B,previousMessageId:Q}=Ne({context:T,orderedIds:T.orderedIds,selectedMessageId:m,enabled:!A&&!D,hasOpenThread:n!==void 0,onClose:r,handlers:{reply:()=>M?.("reply"),replyAll:()=>M?.("reply-all"),forward:()=>M?.("forward"),delete:()=>{T.listCommandsRef.current?.requestVerb("delete")||F.deleteThread()},toggleStar:F.toggleStar,toggleRead:()=>{T.listCommandsRef.current?.requestVerb("markRead")||f&&v([f.messageId],!f.isRead)},goBrief:()=>c("brief"),goSettings:()=>c("settings")}}),O=o.useCallback(d=>{if(!d)return;const C=h.find(K=>K.messageId===d);return C?{threadId:C.threadId,messageId:d}:void 0},[h]),p={selectedMessageId:m,selectedThread:l,conversation:b,onOpenThread:P,onCloseThread:r,nextThread:O(B),previousThread:O(Q),actions:w,onReply:q,triage:T,onDeleteMessages:j,handleDeselectIfRemoved:R};return a.jsx($.Provider,{value:p,children:t})}function ee(){const{selectedMessageId:e,onOpenThread:t,triage:s,onDeleteMessages:r}=E();return a.jsx(tt,{selectedMessageId:e,onOpenThread:t,commandsRef:s.listCommandsRef,onTriageContextChange:s.onTriageContextChange,onDeleteMessages:r})}function at(){const{conversation:e,selectedThread:t,actions:s,onReply:r,handleDeselectIfRemoved:c}=E(),u=!!e,n=Ee(e?.threadId);return a.jsxs(a.Fragment,{children:[a.jsxs("section",{className:"flex h-full w-full min-w-0 flex-col bg-canvas",children:[a.jsx(qe,{hasThread:u,intelligenceOpen:n.isShowing,canToggleIntelligence:n.canToggle,onToggleIntelligence:n.toggle,onReply:r?()=>r("reply"):void 0,onReplyAll:r?()=>r("reply-all"):void 0,onForward:r?()=>r("forward"):void 0,onDelete:u?s.deleteThread:void 0,onToggleStar:u?s.toggleStar:void 0,isStarred:s.isStarred,moveContext:u&&s.accountId&&s.mailboxId?{accountId:s.accountId,currentMailboxId:s.mailboxId,onMove:s.moveThread}:void 0}),a.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:e?a.jsx(J,{threadId:e.threadId,mailboxId:e.mailboxId,subject:e.subject,selectedMessageId:e.messageId,authenticity:e.authenticity,onOpenIntelligence:n.open,listOnScreen:!0}):a.jsx(Ie,{})})]}),a.jsx(X,{isOpen:n.drawerOpen,onClose:n.closeDrawer,thread:t,mailboxId:t?.mailboxId,accountId:t?.accountId,onAfterOptimisticRemove:c})]})}function rt(){const{selectedThread:e,handleDeselectIfRemoved:t}=E(),{onToggleIntelligence:s}=z();return a.jsx(De,{onClose:s,thread:e,mailboxId:e?.mailboxId,accountId:e?.accountId,onAfterOptimisticRemove:t})}function ot(){const{selectedThread:e,conversation:t,onCloseThread:s,onOpenThread:r,nextThread:c,previousThread:u,handleDeselectIfRemoved:n}=E(),g=Ae(t?.threadId??null);return t?a.jsxs(a.Fragment,{children:[a.jsx(J,{threadId:t.threadId,mailboxId:t.mailboxId,subject:t.subject,selectedMessageId:t.messageId,authenticity:t.authenticity,onBack:s,onOpenIntelligence:g.toggle,onSwipeNext:c?()=>r(c):void 0,onSwipePrevious:u?()=>r(u):void 0,mobileIntelligenceOpen:g.isOpen}),a.jsx(X,{isOpen:g.isOpen,onClose:g.close,thread:e,mailboxId:e?.mailboxId,accountId:e?.accountId,onAfterOptimisticRemove:n})]}):a.jsx("div",{className:"h-full",children:a.jsx(ee,{})})}const ft=Object.assign(st,{List:ee,Reading:at,Intelligence:rt,Phone:ot});export{ft as F};