@remit/web-client-dist 0.0.657 → 0.0.659

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 (189) hide show
  1. package/assets/BriefPane-BdrK2exQ.js +1 -0
  2. package/assets/CalendarComposePane-C4QJ-2yz.js +1 -0
  3. package/assets/{CalendarComposeSeed-B3HKxMFT.js → CalendarComposeSeed-DDQ_6KwG.js} +1 -1
  4. package/assets/{CalendarShell-D9HK76un.js → CalendarShell-BxWfrZ1K.js} +1 -1
  5. package/assets/{EmptyState-1soLLrUm.js → EmptyState-DfgfTFyx.js} +1 -1
  6. package/assets/{ErrorState-DPzwHis8.js → ErrorState-BxamrMX4.js} +1 -1
  7. package/assets/{FlaggedPane-C6qW3NPH.js → FlaggedPane-B81F-Ius.js} +1 -1
  8. package/assets/{FullCompose-rxgtwgLT.js → FullCompose-CGEtdvHI.js} +1 -1
  9. package/assets/MailListHeader-DKQDxTr-.js +1 -0
  10. package/assets/MailNav-BtDjmyjz.js +1 -0
  11. package/assets/MailShell-Bz1hiaGc.js +1 -0
  12. package/assets/{MailViewChrome-HO-DgTY5.js → MailViewChrome-jgVI0MNT.js} +1 -1
  13. package/assets/MailboxPane-xtVMKMJI.js +1 -0
  14. package/assets/{NavMenuButton-DLvNMRhx.js → NavMenuButton-D9CW9yXs.js} +1 -1
  15. package/assets/{OnboardingWizard-BwiBwlF7.js → OnboardingWizard-C4yhjGtR.js} +1 -1
  16. package/assets/OpenCalendarEvent-GIzII9CD.js +2 -0
  17. package/assets/OutboxPane-CGpgJAXw.js +1 -0
  18. package/assets/SignInAgain-jn58nQP6.js +1 -0
  19. package/assets/_calendarObjectId-nxT9Cd4b.js +1 -0
  20. package/assets/_mailboxId-oLYxQCD3.js +1 -0
  21. package/assets/_messageId-CCO8nZeh.js +1 -0
  22. package/assets/_messageId-i0DWT1LI.js +1 -0
  23. package/assets/_messageId-mRTnvK5c.js +1 -0
  24. package/assets/_outboxMessageId-ChboPh8E.js +1 -0
  25. package/assets/_recurrenceId-BGJ8Sm-l.js +1 -0
  26. package/assets/_threadId-CaYtB_WN.js +1 -0
  27. package/assets/_threadId-OVejPT9k.js +1 -0
  28. package/assets/_threadId-fRx1zVFy.js +1 -0
  29. package/assets/_view._date-CIup_Q5W.js +1 -0
  30. package/assets/accounts-SAuzFQ3C.js +1 -0
  31. package/assets/advanced-DQMn-u_6.js +1 -0
  32. package/assets/{appearance-C5blyz0O.js → appearance-GEiZelw-.js} +1 -1
  33. package/assets/{attendee-row-CvGDzdA4.js → attendee-row-uWc3noHO.js} +1 -1
  34. package/assets/{avatar-Bb8ScTir.js → avatar-DcDIT3A8.js} +1 -1
  35. package/assets/{bell-off-CS6Duk18.js → bell-off-DUtdhBfF.js} +1 -1
  36. package/assets/{bottom-sheet-B5cf6MWK.js → bottom-sheet-l0no0Avc.js} +1 -1
  37. package/assets/brief-BDAlZsbh.js +1 -0
  38. package/assets/{brief-sKxBiyAp.js → brief-CrG0TXf-.js} +1 -1
  39. package/assets/{bug-BZRMWJ8e.js → bug-DucI4vmB.js} +1 -1
  40. package/assets/calendar-boBQgeWi.js +1 -0
  41. package/assets/{calendar-clash-strip-BFmDAwFK.js → calendar-clash-strip-BpOMxYTS.js} +1 -1
  42. package/assets/{calendar-format-Dl_kGdpq.js → calendar-format-D-v5Wjn8.js} +1 -1
  43. package/assets/{calendar-report-Dq8_JMmG.js → calendar-report-BTxDp0XA.js} +1 -1
  44. package/assets/{calendar-suggestion-CRkDiioj.js → calendar-suggestion-j6PFwg_2.js} +1 -1
  45. package/assets/{calendars-DbaCmJpW.js → calendars-BRMCZNMT.js} +1 -1
  46. package/assets/{card-BrGvFBtQ.js → card-VSc_eLI7.js} +1 -1
  47. package/assets/{checkbox-7X0zR8En.js → checkbox-DyheZb9X.js} +1 -1
  48. package/assets/chevron-left-DYU2nQOC.js +1 -0
  49. package/assets/{circle-check-big-BpsV2KD8.js → circle-check-big-3kpPwCgK.js} +1 -1
  50. package/assets/{circle-check-BAFZLxGj.js → circle-check-makGBNzJ.js} +1 -1
  51. package/assets/{circle-help-BizC7pb0.js → circle-help-De0-XbHV.js} +1 -1
  52. package/assets/{clock-CPsIZ6zJ.js → clock-tuesWj8Y.js} +1 -1
  53. package/assets/compose._-_outboxMessageId_-D3PM2hJA.js +1 -0
  54. package/assets/compose._-_outboxMessageId_-D3dfLj3E.js +1 -0
  55. package/assets/compose._-_outboxMessageId_-by9UvleU.js +1 -0
  56. package/assets/compose._-_outboxMessageId_-t0uDuGCl.js +1 -0
  57. package/assets/{config-import-Dx5GIogE.js → config-import-D3RZSoC0.js} +1 -1
  58. package/assets/{confirm-dialog-Cv8nzgk0.js → confirm-dialog-DyvhMD1R.js} +1 -1
  59. package/assets/{copy-CkXIeeHD.js → copy-Zm_0Ajof.js} +1 -1
  60. package/assets/{credential-steps-BZUL46-x.js → credential-steps-ub2ww0ge.js} +1 -1
  61. package/assets/{download-C4etwdLI.js → download-B8H9UItJ.js} +1 -1
  62. package/assets/external-link-CGtw0pwj.js +1 -0
  63. package/assets/{file-json-DqsJ4xJs.js → file-json-BTzNgrHv.js} +1 -1
  64. package/assets/filters-B12L_wOK.js +1 -0
  65. package/assets/flagged-CB_iIMnJ.js +1 -0
  66. package/assets/{flagged-DRgV59IG.js → flagged-DglDNhoh.js} +1 -1
  67. package/assets/folders-C2jVZZ1E.js +1 -0
  68. package/assets/{help-copy-tJC0-ZMl.js → help-copy-ETAaDkc7.js} +1 -1
  69. package/assets/{import-CELB-bnR.js → import-BeylQ7Mh.js} +1 -1
  70. package/assets/{index-BLTKJWNr.js → index-BD0xR1To.js} +8 -8
  71. package/assets/index-BLnfv0a9.js +1 -0
  72. package/assets/{index-BtYEmjxr.css → index-C2Hz4y-Q.css} +1 -1
  73. package/assets/index-CFZD4Llh.js +1 -0
  74. package/assets/index-CcJMBsLJ.js +1 -0
  75. package/assets/index-CtuiSaCS.js +1 -0
  76. package/assets/{index-BhjCjLJw.js → index-Cw5aGFb4.js} +1 -1
  77. package/assets/index-D0DzGa5J.js +293 -0
  78. package/assets/index-T7UWz5y9.js +1 -0
  79. package/assets/index-WIu9MfmE.js +1 -0
  80. package/assets/index-WRGoXiDS.js +1 -0
  81. package/assets/index-i0DWT1LI.js +1 -0
  82. package/assets/index-mRTnvK5c.js +1 -0
  83. package/assets/{kbd-lTvecOmZ.js → kbd-BHwdDuqC.js} +1 -1
  84. package/assets/{labels-DiA2JGmB.js → labels-CYFWEYMz.js} +1 -1
  85. package/assets/{mail-BxwAAW5X.js → mail-DPTdQBcn.js} +1 -1
  86. package/assets/mail-Hxhm7JAo.js +1 -0
  87. package/assets/{map-pin-D6VMw4yS.js → map-pin-DxzepqfO.js} +1 -1
  88. package/assets/{menu-BQKKG_dY.js → menu-rin4kYB3.js} +1 -1
  89. package/assets/minus-BnkvlNMP.js +1 -0
  90. package/assets/{new-CJ6kSPRF.js → new-BCF8EX_O.js} +1 -1
  91. package/assets/onboarding-BJbB8X0X.js +1 -0
  92. package/assets/{onboarding-completion-BbqmDbx7.js → onboarding-completion-6rCRGnvt.js} +1 -1
  93. package/assets/outbox-e5Vzaasr.js +1 -0
  94. package/assets/{pencil-DiRy6H7l.js → pencil-3eT8l-dG.js} +1 -1
  95. package/assets/{popover-menu-B4BMf6LK.js → popover-menu-CIQ9EMwG.js} +1 -1
  96. package/assets/{refresh-cw-Bot6vhqM.js → refresh-cw-C9XDa0FY.js} +1 -1
  97. package/assets/result-count-DKmjOSbb.js +1 -0
  98. package/assets/{rich-text-BUR-C2Q6.js → rich-text-D9jhmnjK.js} +1 -1
  99. package/assets/{rich-text-spellcheck-worker-provider-CQ8rF4WA.js → rich-text-spellcheck-worker-provider-DJhYkD50.js} +1 -1
  100. package/assets/{rotate-ccw-gjLXKk9W.js → rotate-ccw-VkL9A6f1.js} +1 -1
  101. package/assets/{roving-focus-C3VQzsoq.js → roving-focus-DprxQ_bn.js} +1 -1
  102. package/assets/{row-actions-_wAkj89Q.js → row-actions-D_7JYBtJ.js} +1 -1
  103. package/assets/{search-mirror-a3wl8YKf.js → search-mirror-BysDlccX.js} +1 -1
  104. package/assets/search-query-DwbiCfJg.js +1 -0
  105. package/assets/search-scope-UI1H6AzA.js +1 -0
  106. package/assets/{search-token-index-BwY3fr3v.js → search-token-index-BvfhQWOt.js} +1 -1
  107. package/assets/{sections-DKODQMWX.js → sections-BDzSu1iK.js} +1 -1
  108. package/assets/senders-CpVur9bb.js +1 -0
  109. package/assets/settings-D3ZXcAs5.js +1 -0
  110. package/assets/{settings-screen-3GaT_yCl.js → settings-screen-Bj41qBzw.js} +1 -1
  111. package/assets/{shield-check-t1RKp08F.js → shield-check-CIfUEzg6.js} +1 -1
  112. package/assets/suggested-vips-BmIFp0CH.js +1 -0
  113. package/assets/{suggestion._suggestionId-DSs2aOE3.js → suggestion._suggestionId-Dxf5-pZK.js} +1 -1
  114. package/assets/{undo-2-CjsdasNX.js → undo-2-M8rPT8DL.js} +1 -1
  115. package/assets/{useCalendarData-BNg59BCE.js → useCalendarData-BXOzhj4q.js} +1 -1
  116. package/assets/useCalendarFreeBusy-Lcu0PN0A.js +1 -0
  117. package/assets/{useCalendarWrites-onNcOsh0.js → useCalendarWrites-DLWNbspq.js} +1 -1
  118. package/assets/{useCalendars-LZefvRrA.js → useCalendars-C0yLfYxq.js} +1 -1
  119. package/assets/{useDebouncedValue-WWRLD9R5.js → useDebouncedValue-DKRtYZvq.js} +1 -1
  120. package/assets/useFilters-DUTq-e5L.js +1 -0
  121. package/assets/{useLabels-C955uVg_.js → useLabels-oOwVRlpl.js} +1 -1
  122. package/assets/useLayoutTier-BQZGFMh6.js +1 -0
  123. package/assets/useMessageBodyContent-UsHOXnjm.js +1 -0
  124. package/assets/{useQueries-jIdAkC8e.js → useQueries-C45-CTu6.js} +1 -1
  125. package/assets/useRefreshControl-ayWr09Y0.js +1 -0
  126. package/assets/{useResultFolderIndex-CTrDyucm.js → useResultFolderIndex-jVeEM1tT.js} +1 -1
  127. package/assets/{useSearchTokenContext-CDbE53C_.js → useSearchTokenContext-CWaQeo6z.js} +3 -3
  128. package/assets/{useSignature-BqhqHAev.js → useSignature-DGhao7OD.js} +1 -1
  129. package/assets/warnings-DRuw_qoM.js +5 -0
  130. package/index.html +2 -2
  131. package/package.json +1 -1
  132. package/assets/BriefPane-DSaOlf0F.js +0 -1
  133. package/assets/CalendarComposePane-BU_sayZB.js +0 -1
  134. package/assets/MailListHeader-BFFGRKyg.js +0 -1
  135. package/assets/MailNav-DJlI7RmG.js +0 -1
  136. package/assets/MailShell-DWiQS--r.js +0 -1
  137. package/assets/MailboxPane-hAP08rcM.js +0 -1
  138. package/assets/OpenCalendarEvent-BnGbsK2W.js +0 -2
  139. package/assets/OutboxPane-BoLQds66.js +0 -1
  140. package/assets/_calendarObjectId-Dk6ypYk-.js +0 -1
  141. package/assets/_mailboxId-BI2fCYSk.js +0 -1
  142. package/assets/_messageId-BojdkbIt.js +0 -1
  143. package/assets/_messageId-Br63cxHP.js +0 -1
  144. package/assets/_messageId-CElscOOg.js +0 -1
  145. package/assets/_outboxMessageId-B-LOsBw2.js +0 -1
  146. package/assets/_recurrenceId-CVQPBnfp.js +0 -1
  147. package/assets/_threadId-CBcvsEMo.js +0 -1
  148. package/assets/_threadId-DYIW9tHx.js +0 -1
  149. package/assets/_threadId-DbH9GuNd.js +0 -1
  150. package/assets/_view._date-DzTM5JlS.js +0 -1
  151. package/assets/accounts-Dvrx4IYM.js +0 -1
  152. package/assets/advanced-CJg3p5Bv.js +0 -4
  153. package/assets/brief-BFYTJF86.js +0 -1
  154. package/assets/browser-ponyfill-GPT1caT6.js +0 -2
  155. package/assets/calendar-Bkx3aBLi.js +0 -1
  156. package/assets/chevron-left-BLnMK6Hm.js +0 -1
  157. package/assets/compose._-_outboxMessageId_-BmM1JqAv.js +0 -1
  158. package/assets/compose._-_outboxMessageId_-CXeMohJi.js +0 -1
  159. package/assets/compose._-_outboxMessageId_-ColAL-TU.js +0 -1
  160. package/assets/compose._-_outboxMessageId_-RC8PrqCU.js +0 -1
  161. package/assets/filters-vQ_2-kyd.js +0 -1
  162. package/assets/flagged-DseDsjLu.js +0 -1
  163. package/assets/folders-DyTauiz9.js +0 -1
  164. package/assets/index-B9DvuvdG.js +0 -1
  165. package/assets/index-BK6Ub1jz.js +0 -1
  166. package/assets/index-BWg_f2zC.js +0 -1
  167. package/assets/index-BojdkbIt.js +0 -1
  168. package/assets/index-CElscOOg.js +0 -1
  169. package/assets/index-DQGwT3GV.js +0 -1
  170. package/assets/index-DXKcs-mY.js +0 -1
  171. package/assets/index-KSHhd0R1.js +0 -1
  172. package/assets/index-_GSqQaV3.js +0 -1
  173. package/assets/index-owcFTp8Y.js +0 -294
  174. package/assets/mail-CBC7EsCL.js +0 -1
  175. package/assets/minus-6qNWLdn9.js +0 -1
  176. package/assets/onboarding-GJtMi48D.js +0 -1
  177. package/assets/outbox-B0H34lHj.js +0 -1
  178. package/assets/pane-header-Ca09EcL8.js +0 -1
  179. package/assets/search-query-Cr_ZXBCp.js +0 -1
  180. package/assets/search-scope-B5-OK3Cq.js +0 -1
  181. package/assets/senders-Dpwg8Gn7.js +0 -1
  182. package/assets/settings-CasU94x9.js +0 -1
  183. package/assets/suggested-vips-CAHDehKY.js +0 -1
  184. package/assets/useCalendarFreeBusy-ClOpmxzB.js +0 -1
  185. package/assets/useFilters-1hN5d4xr.js +0 -1
  186. package/assets/useLayoutTier-A889tOk-.js +0 -1
  187. package/assets/useMessageBodyContent-C6R-iTkz.js +0 -1
  188. package/assets/useRefreshControl-DT4gm04X.js +0 -1
  189. package/assets/useSemanticSearch-CX-jW79N.js +0 -1
@@ -1 +1 @@
1
- import{r as m}from"./index-owcFTp8Y.js";import{u as C,d as g,i as I,t as v,U as p,b as D,r as E}from"./useCalendars-LZefvRrA.js";import{x as y,I as L}from"./calendar-format-Dl_kGdpq.js";function Z(a,n){const t=a.map(e=>e.id);if(n.length===0)return t;const s=new Set(n),o=t.filter(e=>s.has(e));return o.length===0?t:o}function b(a){const{calendars:n,colorByCalendarId:t,timeZoneByCalendarId:s,isLoading:o}=C(),e=Z(n,a),r=e.length===n.length?[]:e,c=a.length===0||n.length>0;return{calendars:n,colorByCalendarId:t,timeZoneByCalendarId:s,shown:e,narrowed:r,resolved:c,isLoading:o}}function x(a,n,t){const s=t.join(",");return m.useMemo(()=>{const o=g(),e=new Set(s===""?[]:s.split(","));return a.filter(r=>I(r)&&e.has(r.calendarId)).map(r=>v(r,n[r.calendarId]??p,o))},[a,n,s])}function S({view:a,date:n,calendarIds:t,enabled:s=!0}){const{calendars:o,colorByCalendarId:e,timeZoneByCalendarId:r,shown:c,narrowed:l,resolved:u,isLoading:w}=b(t),h=D(a,n),i=s&&u,d=y({...h,calendarIds:l,enabled:i});L(a,n,l,i);const f=x(d.instances,r,c);return{calendars:o,events:f,colorByCalendarId:e,timeZoneByCalendarId:r,isLoading:w||d.isLoading,error:d.error,retry:d.refetch,instanceOf:E}}export{x as a,S as b,b as u};
1
+ import{r as m}from"./index-D0DzGa5J.js";import{u as C,d as g,i as I,t as v,U as p,b as D,r as E}from"./useCalendars-C0yLfYxq.js";import{x as y,I as L}from"./calendar-format-D-v5Wjn8.js";function Z(a,n){const t=a.map(e=>e.id);if(n.length===0)return t;const s=new Set(n),o=t.filter(e=>s.has(e));return o.length===0?t:o}function b(a){const{calendars:n,colorByCalendarId:t,timeZoneByCalendarId:s,isLoading:o}=C(),e=Z(n,a),r=e.length===n.length?[]:e,c=a.length===0||n.length>0;return{calendars:n,colorByCalendarId:t,timeZoneByCalendarId:s,shown:e,narrowed:r,resolved:c,isLoading:o}}function x(a,n,t){const s=t.join(",");return m.useMemo(()=>{const o=g(),e=new Set(s===""?[]:s.split(","));return a.filter(r=>I(r)&&e.has(r.calendarId)).map(r=>v(r,n[r.calendarId]??p,o))},[a,n,s])}function S({view:a,date:n,calendarIds:t,enabled:s=!0}){const{calendars:o,colorByCalendarId:e,timeZoneByCalendarId:r,shown:c,narrowed:l,resolved:u,isLoading:w}=b(t),h=D(a,n),i=s&&u,d=y({...h,calendarIds:l,enabled:i});L(a,n,l,i);const f=x(d.instances,r,c);return{calendars:o,events:f,colorByCalendarId:e,timeZoneByCalendarId:r,isLoading:w||d.isLoading,error:d.error,retry:d.refetch,instanceOf:E}}export{x as a,S as b,b as u};
@@ -0,0 +1 @@
1
+ import{e as M,t as c,j as e,r as N,X as D,as as P,dA as T,f as z,aR as Z,ai as I,eG as L,s as O}from"./index-D0DzGa5J.js";import{c as _,R as F,C as B}from"./calendar-format-D-v5Wjn8.js";import{M as C}from"./mail-DPTdQBcn.js";import{G as A}from"./map-pin-DxzepqfO.js";import{S as W}from"./useLayoutTier-BQZGFMh6.js";import{u as G}from"./useQueries-C45-CTu6.js";const U=M("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);function X(s){const n=_(s.color),a=s.rsvp==="tentative"||s.status==="tentative";return c("flex min-w-0 overflow-hidden rounded-sm border-l-2 px-1.5 py-0.5",n.soft,n.text,n.rail,s.layout==="column"||s.stacked?"flex-col":"items-center gap-1.5",a&&"border-y border-r border-dashed",a&&n.border,s.rsvp==="declined"&&"opacity-60",s.selected&&"ring-2 ring-ring",s.density==="compact"?"text-2xs":"text-xs")}function $({title:s,timeText:n,layout:a,rsvp:l,hasThread:d,isRecurring:m,zoneCertainty:x,trailing:t,detail:p}){const r=a==="column",i=x==="ambiguous",o=!r&&p!==void 0,u=e.jsxs("span",{className:c("flex min-w-0 items-center gap-1",r&&"w-full",l==="declined"&&"line-through"),children:[n!==""&&e.jsx("span",{className:"shrink-0 tabular-nums opacity-80",children:n}),e.jsx("span",{className:"truncate font-medium",children:s})]}),h=(m||d||i)&&e.jsxs("span",{className:c("flex shrink-0 items-center gap-1",r&&"mt-0.5",!r&&t===void 0&&"ml-auto"),children:[m&&e.jsx(F,{className:"size-2.5","aria-label":"Repeats"}),d&&e.jsx(C,{className:"size-2.5","aria-label":"From mail"}),i&&e.jsx(A,{className:"size-2.5 text-warning","aria-label":"Unclear zone"})]}),g=t!==void 0&&e.jsx("span",{className:c("shrink-0 opacity-80",!r&&"ml-auto"),children:t});return e.jsxs(e.Fragment,{children:[o?e.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[u,h,g]}):e.jsxs(e.Fragment,{children:[u,h,g]}),p]})}function ae({title:s,timeText:n,color:a,layout:l,density:d,rsvp:m,status:x,hasThread:t,isRecurring:p,zoneCertainty:r,selected:i,onClick:o,leading:u,trailing:h,detail:g}){const j=l==="column";return e.jsxs("button",{type:"button",onClick:o,"aria-pressed":i,className:c("group flex w-full min-w-0 text-left outline-none transition-colors","focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-surface",j?"h-full":"items-start",u!==void 0&&"gap-2"),children:[u,e.jsx("span",{className:c(X({color:a,layout:l,density:d,rsvp:m,status:x,selected:i,stacked:g!==void 0}),"flex-1",j&&"h-full"),children:e.jsx($,{title:s,timeText:n,layout:l,rsvp:m,hasThread:t,isRecurring:p,zoneCertainty:r,trailing:h,detail:g})})]})}const E=96,q=6;function re({children:s,hasCard:n,onConfirm:a,onReject:l,blocked:d,blockedReason:m,remaining:x,confirmLabel:t="Add",emptyText:p="Nothing in your mail is waiting on a decision about time.",className:r}){const[i,o]=N.useState(0),[u,h]=N.useState(null);if(!n)return e.jsxs("div",{className:c("flex flex-col items-center gap-2 p-6 text-center",r),children:[e.jsx(W,{className:"size-6 text-fg-subtle","aria-hidden":!0}),e.jsx("p",{className:"text-sm text-fg-muted",children:p})]});const g=Math.abs(i)>E,j=i>0;return e.jsxs("div",{className:c("flex flex-col gap-3",r),children:[e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"touch-pan-y select-none",style:{transform:`translateX(${i}px) rotate(${i/40}deg)`,transition:u===null?"transform 180ms ease-out":"none"},onPointerDown:b=>{h(b.clientX)},onPointerMove:b=>{if(u===null)return;const v=b.clientX-u;Math.abs(v)>q&&!b.currentTarget.hasPointerCapture(b.pointerId)&&b.currentTarget.setPointerCapture(b.pointerId),o(v)},onPointerUp:()=>{Math.abs(i)>E&&(i>0&&!d&&a(),i<0&&l()),h(null),o(0)},onPointerCancel:()=>{h(null),o(0)},children:s}),g&&e.jsx("span",{className:c("pointer-events-none absolute top-3 rounded-md px-2 py-1 text-xs font-semibold",j?"right-3 bg-accent-soft text-accent":"left-3 bg-danger-soft text-danger"),children:j?d?m:t:"Not this"})]}),e.jsxs("p",{className:"text-center text-2xs text-fg-subtle",children:[x," left · swipe right to accept, left to drop, or use the buttons"]})]})}const H="Pick a clock first. The mail never said, and the reader will not choose for you.";function K(s,n){const a=s.zoneOptions;return a===void 0?{settled:!0,timeZone:""}:a.some(l=>l.timeZone===n)?{settled:!0,timeZone:n}:{settled:!1,reason:H}}function S(s){return s.threadSubject===""?s.sender:`${s.sender} — ${s.threadSubject}`}function Q(s){return s>=.85?"Read cleanly":s>=.6?"Read with gaps":"Barely read"}function ie({suggestion:s,whenText:n,onAdd:a,onReview:l,onDismiss:d,onOpenThread:m,busy:x=!1,addBlocked:t=!1,zoneChoice:p,onZoneChoice:r,addLabel:i="Add",touch:o,className:u}){const[h,g]=N.useState(""),[j,b]=N.useState(!1),v=N.useId(),k=p??h,R=f=>{b(!1),r?r(f):g(f)},y=K(s,k),w=f=>()=>{if(!y.settled){b(!0);return}f(y.timeZone)};return e.jsxs("article",{"aria-label":s.title,className:c("flex flex-col gap-2 rounded-lg border border-dashed border-line-strong bg-surface-sunken p-3",u),children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsxs("span",{className:"block text-2xs uppercase tracking-wider text-fg-subtle",children:["Suggested from mail · ",Q(s.confidence)]}),e.jsx("span",{className:"block truncate text-sm font-medium text-fg",children:s.title}),e.jsx("span",{className:"block text-xs text-fg-muted",children:n}),s.location!==""&&e.jsx("span",{className:"block truncate text-xs text-fg-muted",children:s.location})]}),e.jsx("button",{type:"button","aria-label":"Dismiss suggestion",onClick:d,disabled:x,className:c("flex shrink-0 items-center justify-center rounded-md text-fg-subtle outline-none hover:bg-surface hover:text-fg focus-visible:ring-2 focus-visible:ring-ring",o?"size-11":"size-7"),children:e.jsx(D,{className:"size-4"})})]}),s.ambiguity!==""&&e.jsxs("p",{className:"flex items-start gap-1.5 text-2xs text-warning",children:[e.jsx(P,{className:"mt-0.5 size-3 shrink-0","aria-hidden":!0}),s.ambiguity]}),m?e.jsxs("button",{type:"button",onClick:m,className:"flex w-full min-w-0 items-center gap-1.5 rounded-sm text-left text-2xs text-accent-2 outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring",children:[e.jsx(C,{className:"size-3 shrink-0"}),e.jsx("span",{className:"truncate",children:S(s)})]}):e.jsxs("p",{className:"flex w-full min-w-0 items-center gap-1.5 text-2xs text-fg-subtle",children:[e.jsx(C,{className:"size-3 shrink-0"}),e.jsx("span",{className:"truncate",children:S(s)})]}),s.zoneOptions&&e.jsxs("div",{className:"flex flex-col gap-1.5 rounded-md border border-warning/40 p-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-2xs font-semibold text-warning",children:[e.jsx(A,{className:"size-3 shrink-0","aria-hidden":!0}),"Which clock is this on?"]}),s.zoneOptions.map(f=>e.jsxs("button",{type:"button","aria-pressed":k===f.timeZone,onClick:()=>R(f.timeZone),className:c("rounded-md border px-2 py-1 text-left outline-none focus-visible:ring-2 focus-visible:ring-ring",o&&"min-h-11",k===f.timeZone?"border-accent bg-accent-soft":"border-line bg-surface hover:border-line-strong"),children:[e.jsx("span",{className:"block text-xs font-medium text-fg",children:f.label}),e.jsx("span",{className:"block text-2xs text-fg-subtle",children:f.note})]},f.timeZone))]}),!y.settled&&e.jsx(T,{id:v,reason:y.reason,nudged:j,className:"text-2xs text-warning"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(z,{variant:"primary",size:o?"md":"sm",icon:e.jsx(Z,{className:"size-3.5"}),onClick:w(a),disabled:x||t,"aria-describedby":y.settled?void 0:v,className:c(o&&"min-h-11 flex-1",!y.settled&&"opacity-55"),children:i}),l&&e.jsx(z,{variant:"secondary",size:o?"md":"sm",icon:e.jsx(U,{className:"size-3.5"}),onClick:w(l),disabled:x,"aria-describedby":y.settled?void 0:v,className:c(o&&"min-h-11",!y.settled&&"opacity-55"),children:"Change first"})]})]})}function le(s){return s.defaultCalendarId!==""?"ready":s.error!==null?"failed":s.isLoading?"loading":"none"}function oe(s,n){if(s!=="ready")return s==="loading"?"Reading your calendars…":s==="failed"?e.jsxs(e.Fragment,{children:["Couldn't read your calendars, so there is nowhere to add this yet. Reload to try again."," ",e.jsx("a",{href:n,target:"_blank",rel:"noreferrer",className:"font-medium text-accent hover:underline",children:"Report an issue"})]}):e.jsxs(e.Fragment,{children:["You have no calendar yet, so there is nowhere to add this."," ",e.jsx(I,{to:"/settings/calendars",className:"font-medium text-accent hover:underline",children:"Create a calendar"})]})}const Y=O(400,404);function ce(s){const n=G({queries:s.map(t=>({...L({query:{from:t.from,to:t.to}}),meta:Y,staleTime:B}))}),a=s.map(t=>t.from).join("|"),l=n.map(t=>t.data),d=n.map(t=>t.isPending).join("|"),m=N.useMemo(()=>l.flatMap(t=>t?.items??[]),[a,d]),x=N.useMemo(()=>{const t=new Set;return s.forEach((p,r)=>{n[r]?.isPending&&t.add(p.from)}),t},[a,d]);return{spans:m,pendingWindows:x,error:n.find(t=>t.error)?.error??null,refetch:()=>{for(const t of n)t.error&&t.refetch()}}}export{ae as C,ie as E,H as Z,$ as a,re as b,X as c,oe as d,le as e,K as s,ce as u};
@@ -1 +1 @@
1
- import{h as v,r,i as c,f6 as C,f7 as h,f8 as y,s as g,b5 as m}from"./index-owcFTp8Y.js";import{f as I}from"./ErrorState-DPzwHis8.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=v();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 f=({scope:e,recurrenceId:t})=>e===void 0?{}:{scope:O[e],recurrenceId:t};function k(){const e=A(),t=c({...C(),meta:o,onSuccess:e}),n=c({...h(),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,p)=>n.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...f(a)},headers:{"If-Match":a.etag},body:p}).then(()=>d).catch(i),[n]),E=r.useCallback(a=>s.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...f(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
+ import{h as v,r,i as c,f5 as C,f6 as h,f7 as y,s as g,b2 as m}from"./index-D0DzGa5J.js";import{f as I}from"./ErrorState-BxamrMX4.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=v();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 f=({scope:e,recurrenceId:t})=>e===void 0?{}:{scope:O[e],recurrenceId:t};function k(){const e=A(),t=c({...C(),meta:o,onSuccess:e}),n=c({...h(),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,p)=>n.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...f(a)},headers:{"If-Match":a.etag},body:p}).then(()=>d).catch(i),[n]),E=r.useCallback(a=>s.mutateAsync({path:{calendarObjectId:a.calendarObjectId},query:{calendarId:a.calendarId,...f(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 T,eJ as h,r as N}from"./index-owcFTp8Y.js";const o=e=>String(e).padStart(2,"0"),$=e=>`${e.getUTCFullYear()}-${o(e.getUTCMonth()+1)}-${o(e.getUTCDate())}`,m=e=>{const t=e<0?"-":"+",r=Math.abs(e);return`${t}${o(Math.floor(r/60))}:${o(r%60)}`};function D(e,t){const r=new Date(`${e}T${t}:00`);return`${e}T${t}:00${m(-r.getTimezoneOffset())}`}const i=new Map;function U(e){if(i.has(e))return i.get(e);let t;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{t=void 0}return i.set(e,t),t}function l(e,t){const r=U(e);if(!r)return Number.NaN;const n=r.formatToParts(new Date(t)),a=b=>Number(n.find(g=>g.type===b)?.value),s=a("hour")%24;return(Date.UTC(a("year"),a("month")-1,a("day"),s,a("minute"),a("second"))-t)/6e4}function L(e,t,r){if(r==="")return`${e}T${t}:00+00:00`;const n=Date.parse(`${e}T${t}:00Z`),a=l(r,n);if(Number.isNaN(a))return D(e,t);const s=l(r,n-a*6e4);return`${e}T${t}:00${m(Number.isNaN(s)?a:s)}`}function C(e,t){const r=Date.parse(e),n=l(t,r),a=Number.isNaN(n)?-new Date(r).getTimezoneOffset():n,s=new Date(r+a*6e4);return`${$(s)}T${o(s.getUTCHours())}:${o(s.getUTCMinutes())}:${o(s.getUTCSeconds())}${m(a)}`}const u=e=>D(e,"00:00");function c(e,t){const[r,n,a]=e.split("-").map(Number);return $(new Date(Date.UTC(r,n-1,a+t)))}function d(e){const[t,r,n]=e.split("-").map(Number),a=new Date(Date.UTC(t,r-1,n));return c(e,-((a.getUTCDay()+6)%7))}function E(e,t){const[r,n]=t.split("-").map(Number);if(e==="year")return[`${r}-01-01`,`${r+1}-01-01`];if(e==="month"){const s=`${r}-${o(n)}-01`,p=n===12?`${r+1}-01-01`:`${r}-${o(n+1)}-01`;return[d(s),c(d(c(p,-1)),7)]}if(e==="day")return[t,c(t,1)];const a=d(t);return[a,c(a,7)]}function M(e,t){const[r,n]=E(e,t);return{from:u(r),to:u(n)}}function F(e,t){return{from:u(e),to:u(c(e,t))}}const R=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,y="";function k(e){if(e!==y)return e;const t=R();return Intl.supportedValuesOf("timeZone").includes(t)?t:y}const v={Cal1:"cal-1",Cal2:"cal-2",Cal3:"cal-3",Cal4:"cal-4",Cal5:"cal-5",Cal6:"cal-6"},w={Local:"local",Explicit:"explicit",Ambiguous:"ambiguous"},I="#";function z(e,t){return t===""?e:`${e}${I}${t}`}function f(e){const t=e.indexOf(I);return t===-1?{calendarObjectId:e,recurrenceId:""}:{calendarObjectId:e.slice(0,t),recurrenceId:e.slice(t+1)}}const O=(e,t)=>{const r=[...e].sort((n,a)=>Date.parse(n.start)-Date.parse(a.start));return r.find(n=>Date.parse(n.end)>Date.parse(t))??r[0]};function B(e,t,r){const n=O(e.filter(a=>{const s=f(a.id);return s.calendarObjectId===t&&s.recurrenceId!==""}),r);return n?f(n.id):void 0}function J(e,t,r,n){const a=O(e.filter(s=>s.calendarObjectId===t&&j(s)).map(s=>x(s,"",n)),r);if(a)return{...f(a.id),calendarId:a.calendarId,date:a.start.slice(0,10)}}function S(e){return{id:e.calendarId,accountId:e.accountConfigId,accountLabel:"",name:e.displayName,color:v[e.color]??"cal-1",...e.source==="Subscribed"?{readOnly:!0,sync:e.subscriptionEnabled?"live":"paused",syncError:e.subscriptionError}:{}}}function x(e,t,r){return{id:z(e.calendarObjectId,e.recurrenceId),calendarId:e.calendarId,title:e.summary,start:e.allDay?e.start.slice(0,10):C(e.start,r),end:e.allDay?e.end.slice(0,10):C(e.end,r),allDay:e.allDay,location:"",notes:"",attendees:[],myRsvp:"accepted",threadId:"",threadSubject:"",timeZone:t,zoneCertainty:w[e.zoneCertainty]??"explicit",recurrenceRule:e.hasRecurrence?"Repeats":"",seriesId:e.hasRecurrence?e.icalUid:"",seriesException:!1,status:e.status==="Tentative"?"tentative":"confirmed"}}const j=e=>e.status!=="Cancelled";function P(){const{data:e,isLoading:t,error:r}=T(h());return N.useMemo(()=>{const n=e?.items??[],a=n.map(S);return{calendars:a,collections:n,colorByCalendarId:Object.fromEntries(a.map(s=>[s.id,s.color])),timeZoneByCalendarId:Object.fromEntries(n.map(s=>[s.calendarId,s.timezone])),defaultCalendarId:(n.find(s=>s.source==="Default")??n[0])?.calendarId??"",isLoading:t,error:r??null}},[e,t,r])}export{y as U,F as a,M as b,z as c,R as d,c as e,k as f,L as g,C as h,j as i,J as j,f as r,B as s,x as t,P as u};
1
+ import{c as T,eH as h,r as N}from"./index-D0DzGa5J.js";const o=e=>String(e).padStart(2,"0"),$=e=>`${e.getUTCFullYear()}-${o(e.getUTCMonth()+1)}-${o(e.getUTCDate())}`,m=e=>{const t=e<0?"-":"+",r=Math.abs(e);return`${t}${o(Math.floor(r/60))}:${o(r%60)}`};function D(e,t){const r=new Date(`${e}T${t}:00`);return`${e}T${t}:00${m(-r.getTimezoneOffset())}`}const i=new Map;function U(e){if(i.has(e))return i.get(e);let t;try{t=new Intl.DateTimeFormat("en-US",{timeZone:e,hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})}catch{t=void 0}return i.set(e,t),t}function l(e,t){const r=U(e);if(!r)return Number.NaN;const n=r.formatToParts(new Date(t)),a=b=>Number(n.find(g=>g.type===b)?.value),s=a("hour")%24;return(Date.UTC(a("year"),a("month")-1,a("day"),s,a("minute"),a("second"))-t)/6e4}function L(e,t,r){if(r==="")return`${e}T${t}:00+00:00`;const n=Date.parse(`${e}T${t}:00Z`),a=l(r,n);if(Number.isNaN(a))return D(e,t);const s=l(r,n-a*6e4);return`${e}T${t}:00${m(Number.isNaN(s)?a:s)}`}function C(e,t){const r=Date.parse(e),n=l(t,r),a=Number.isNaN(n)?-new Date(r).getTimezoneOffset():n,s=new Date(r+a*6e4);return`${$(s)}T${o(s.getUTCHours())}:${o(s.getUTCMinutes())}:${o(s.getUTCSeconds())}${m(a)}`}const u=e=>D(e,"00:00");function c(e,t){const[r,n,a]=e.split("-").map(Number);return $(new Date(Date.UTC(r,n-1,a+t)))}function d(e){const[t,r,n]=e.split("-").map(Number),a=new Date(Date.UTC(t,r-1,n));return c(e,-((a.getUTCDay()+6)%7))}function E(e,t){const[r,n]=t.split("-").map(Number);if(e==="year")return[`${r}-01-01`,`${r+1}-01-01`];if(e==="month"){const s=`${r}-${o(n)}-01`,p=n===12?`${r+1}-01-01`:`${r}-${o(n+1)}-01`;return[d(s),c(d(c(p,-1)),7)]}if(e==="day")return[t,c(t,1)];const a=d(t);return[a,c(a,7)]}function M(e,t){const[r,n]=E(e,t);return{from:u(r),to:u(n)}}function F(e,t){return{from:u(e),to:u(c(e,t))}}const R=()=>Intl.DateTimeFormat().resolvedOptions().timeZone,y="";function k(e){if(e!==y)return e;const t=R();return Intl.supportedValuesOf("timeZone").includes(t)?t:y}const v={Cal1:"cal-1",Cal2:"cal-2",Cal3:"cal-3",Cal4:"cal-4",Cal5:"cal-5",Cal6:"cal-6"},w={Local:"local",Explicit:"explicit",Ambiguous:"ambiguous"},I="#";function z(e,t){return t===""?e:`${e}${I}${t}`}function f(e){const t=e.indexOf(I);return t===-1?{calendarObjectId:e,recurrenceId:""}:{calendarObjectId:e.slice(0,t),recurrenceId:e.slice(t+1)}}const O=(e,t)=>{const r=[...e].sort((n,a)=>Date.parse(n.start)-Date.parse(a.start));return r.find(n=>Date.parse(n.end)>Date.parse(t))??r[0]};function B(e,t,r){const n=O(e.filter(a=>{const s=f(a.id);return s.calendarObjectId===t&&s.recurrenceId!==""}),r);return n?f(n.id):void 0}function H(e,t,r,n){const a=O(e.filter(s=>s.calendarObjectId===t&&j(s)).map(s=>x(s,"",n)),r);if(a)return{...f(a.id),calendarId:a.calendarId,date:a.start.slice(0,10)}}function S(e){return{id:e.calendarId,accountId:e.accountConfigId,accountLabel:"",name:e.displayName,color:v[e.color]??"cal-1",...e.source==="Subscribed"?{readOnly:!0,sync:e.subscriptionEnabled?"live":"paused",syncError:e.subscriptionError}:{}}}function x(e,t,r){return{id:z(e.calendarObjectId,e.recurrenceId),calendarId:e.calendarId,title:e.summary,start:e.allDay?e.start.slice(0,10):C(e.start,r),end:e.allDay?e.end.slice(0,10):C(e.end,r),allDay:e.allDay,location:"",notes:"",attendees:[],myRsvp:"accepted",threadId:"",threadSubject:"",timeZone:t,zoneCertainty:w[e.zoneCertainty]??"explicit",recurrenceRule:e.hasRecurrence?"Repeats":"",seriesId:e.hasRecurrence?e.icalUid:"",seriesException:!1,status:e.status==="Tentative"?"tentative":"confirmed"}}const j=e=>e.status!=="Cancelled";function P(){const{data:e,isLoading:t,error:r}=T(h());return N.useMemo(()=>{const n=e?.items??[],a=n.map(S);return{calendars:a,collections:n,colorByCalendarId:Object.fromEntries(a.map(s=>[s.id,s.color])),timeZoneByCalendarId:Object.fromEntries(n.map(s=>[s.calendarId,s.timezone])),defaultCalendarId:(n.find(s=>s.source==="Default")??n[0])?.calendarId??"",isLoading:t,error:r??null}},[e,t,r])}export{y as U,F as a,M as b,z as c,R as d,c as e,k as f,L as g,C as h,j as i,H as j,f as r,B as s,x as t,P as u};
@@ -1 +1 @@
1
- import{r as o}from"./index-owcFTp8Y.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-D0DzGa5J.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};
@@ -0,0 +1 @@
1
+ import{r as d,i as h,eT as x,c as A,eU as P,eV as N,eW as L,h as v,eX as T,eY as I,eZ as z,e_ as R,bi as w}from"./index-D0DzGa5J.js";const X=(e,t)=>{if(e.state==="Expired")return"Expired";const r=e.state==="Disabled"?"Disabled":"Active";if(e.scope!=="Temporary"||!e.expiresAt)return r;const s=Date.parse(e.expiresAt);return Number.isNaN(s)?r:s<=t?"Expired":r},O={UserDisabled:"Turned off. Turn it on to run it on new mail again.",AwaitingFolder:"Off until its folder exists on the mail server. It turns on by itself once the folder is created.",FolderCreateFailed:"Off: the mail server refused to create its folder. Pick another folder in the rule, then turn it on.",FolderMissing:"Off: the folder it moves mail into no longer exists. Pick another folder in the rule, then turn it on."},G=e=>e.disabledReason==="None"?void 0:(e.disabledReason==="AwaitingFolder"||e.disabledReason==="FolderCreateFailed")&&e.actionMailboxId!=="None"?O.UserDisabled:O[e.disabledReason],Z=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[,s,i,a]=r,n=new Date(Number(s),Number(i)-1,Number(a),23,59,59,0);if(Number.isNaN(n.getTime()))return;const o=-t.getTimezoneOffset(),l=o>=0?"+":"-",c=Math.abs(o),p=String(Math.floor(c/60)).padStart(2,"0"),m=String(c%60).padStart(2,"0"),u=f=>String(f).padStart(2,"0");return`${n.getFullYear()}-${u(n.getMonth()+1)}-${u(n.getDate())}T${u(n.getHours())}:${u(n.getMinutes())}:${u(n.getSeconds())}${l}${p}:${m}`},g="None",k=e=>({filterId:e,matchOperator:"And",literalClauses:[],actionLabelId:g,actionMailboxId:g}),D=e=>({matchOperator:e.matchOperator,literalClauses:e.literalClauses,actionLabelId:e.labelId??g,actionMailboxId:e.moveMailboxId??g}),ee=({mode:e,ruleScope:t})=>t==="standing"?"standing":t==="until"?"temporary":e==="selected"?"just-these":"all-like-these",te=({ruleScope:e,clauses:t,matchOperator:r,moveMailboxId:s,until:i})=>({matchOperator:r==="all"?"And":"Or",literalClauses:t.map(a=>({field:a.field,value:a.value})),moveMailboxId:s,expiresAt:e==="until"?M(i??""):void 0}),y=(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??g,actionMailboxId:e.moveMailboxId??g}),_=new Set(["Complete","Failed"]),F=e=>e!==void 0&&_.has(e),J=1e3,$=15e3,U=e=>{const t=Math.max(0,e),r=J*2**t;return Math.min(r,$)},q=(e,t,r)=>{if(e)return{kind:r?"restartFailed":"startFailed",error:e};if(t)return{kind:"statusUnreadable",error:t}},re=e=>{const[t,r]=d.useState(),s=h({...x(),onSuccess:b=>r(b.organizeJobId)}),{mutate:i}=s,a=A({...P({path:{accountId:e??"",organizeJobId:t??""}}),enabled:!!e&&!!t,refetchInterval:b=>{const E=b.state.data?.state;return F(E)?!1:U(b.state.dataUpdateCount)}}),n=d.useCallback(b=>{e&&i({path:{accountId:e},body:D(b)})},[e,i]),o=d.useCallback(b=>{e&&i({path:{accountId:e},body:k(b)})},[e,i]),{refetch:l}=a,c=d.useCallback(()=>{l()},[l]),p=a.data,m=s.isPending?void 0:p,u=m?.state??s.data?.state,f=F(m?.state),S={state:u,matchedCount:m?.matchedCount??0,appliedCount:m?.appliedCount??0,failedCount:m?.failedCount??0,errorMessage:m?.errorMessage??""};return{start:n,startForFilter:o,watch:r,refreshStatus:c,progress:S,isStarting:s.isPending,isRunning:!!t&&!f,isDone:f,failure:q(s.error,a.error,!!p)}},se=["From","Subject","HasWords","ListId","FromDomain"],Q=e=>{const t=e.trim(),r=t.match(/<([^>]+)>/);return(r?r[1]:t).trim().toLowerCase()},ae=(e,t)=>e==="ListId"?Q(t):t.trim(),j=e=>e==="all"?"And":"Or",K=e=>({matchOperator:j(e.matchOperator),literalClauses:e.clauses.map(t=>({field:t.field,value:t.value}))}),W=e=>!e.literalClauses.some(t=>t.field==="HasWords"),B=e=>JSON.stringify({operator:e.matchOperator,clauses:e.literalClauses.map(t=>`${t.field} ${t.value}`)}),ie=e=>{const t=K(e);return{matchOperator:t.matchOperator,literalClauses:t.literalClauses,moveMailboxId:e.moveMailboxId,labelId:e.labelId,expiresAt:e.scope==="until"?M(e.until??""):void 0}},H=(e,t)=>e.error!==void 0&&e.errorSignature===t?{status:"error",reason:e.error}:e.count===void 0?{status:"loading"}:e.previewedSignature===t?{status:"ready",count:e.count}:{status:"ready",count:e.count,stale:!0},V=350,ne=(e,t,r)=>{const s=h(N()),{mutateAsync:i}=s,a=B(t),[n,o]=d.useState(()=>({})),l=d.useRef(t);l.current=t;const c=d.useRef(a),p=W(t);return d.useEffect(()=>{if(!e||!p||a===n.previewedSignature||a===n.errorSignature)return;const m=setTimeout(()=>{const u=a;c.current=u,i({path:{accountId:e},body:D({...l.current})}).then(f=>{c.current===u&&o({count:f.matchedCount,matchedIds:f.messageIds,previewedSignature:u})}).catch(f=>{c.current===u&&o(S=>({...S,error:f instanceof Error?f.message:"Couldn't count matches.",errorSignature:u}))})},V);return()=>clearTimeout(m)},[e,p,a,n.previewedSignature,n.errorSignature,i]),p?{count:H(n,a),matchedIds:n.previewedSignature===a?n.matchedIds??[]:[]}:{count:{status:"error",reason:L},matchedIds:[]}},C=e=>I({path:{accountId:e}}),oe=e=>{const t=A({...z({path:{accountId:e??""}}),enabled:!!e});return{filters:t.data?.items??[],isPending:t.isPending,isError:t.isError,error:t.error,refetch:t.refetch}},le=e=>{const t=v(),r=h({...T(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:C(e)})}}),{mutate:s,mutateAsync:i}=r,a=d.useCallback((o,l,c)=>{e&&s({path:{accountId:e},body:y(o,l,c)})},[e,s]),n=d.useCallback(async(o,l,c)=>{if(e)return i({path:{accountId:e},body:y(o,l,c)}).then(p=>p,()=>{})},[e,i]);return{createFilter:a,createFilterAsync:n,data:r.data,isPending:r.isPending,isSuccess:r.isSuccess,isError:r.isError,error:r.error,reset:r.reset}},ue=e=>{const t=v(),r=h({...R(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:C(e)})}}),{mutate:s}=r;return{deleteFilter:d.useCallback(a=>{e&&s({path:{accountId:e,filterId:a}})},[e,s]),isPending:r.isPending,deletingFilterId:r.isPending?r.variables?.path.filterId:void 0}},de=e=>{const t=v(),r=h({...w(),onSuccess:()=>{e&&t.invalidateQueries({queryKey:C(e)})}}),{mutate:s,variables:i}=r,a=d.useCallback((o,l)=>{e&&s({path:{accountId:e,filterId:o},body:{state:l?"Active":"Disabled"}})},[e,s]),n=d.useCallback(()=>{i&&s(i)},[s,i]);return{toggleFilter:a,retry:n,togglingFilterId:r.isPending?i?.path.filterId:void 0,isError:r.isError,error:r.error,enabling:i?.body?.state==="Active"}};export{g as N,se as S,re as a,C as b,ie as c,G as d,Z as e,X as f,oe as g,ue as h,de as i,le as j,te as k,ae as n,ee as o,M as p,K as r,ne as u};
@@ -1 +1 @@
1
- import{c as L,eD as p,h as n,i as l,eE as d,r as o,eF as y,eG as c,eH as g}from"./index-owcFTp8Y.js";const u=e=>y({path:{accountId:e}}),f=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}},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
+ import{c as L,eB as p,h as n,i as l,eC as d,r as o,eD as y,eE as c,eF as g}from"./index-D0DzGa5J.js";const u=e=>y({path:{accountId:e}}),f=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}},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};
@@ -0,0 +1 @@
1
+ import{e as a,c3 as t,c4 as s}from"./index-D0DzGa5J.js";const n=a("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]),p=768,r=e=>e!=="desktop",c=()=>{const e=t(`(min-width: ${p}px)`);return t(s)?"desktop":e?"tablet":"phone"};export{n as S,r as i,c as u};
@@ -0,0 +1 @@
1
+ import{r as a,u as P,cp as O,cq as U,cQ as B,aa as p,cr as N,q as $,ac as D,h as F,c as L,cR as _,cF as v}from"./index-D0DzGa5J.js";const E="/mail/brief/compose/{-$outboxMessageId}",w="/mail/flagged/compose/{-$outboxMessageId}",R="/mail/outbox/compose/{-$outboxMessageId}",S="/mail/$mailboxId/compose/{-$outboxMessageId}";function T(){const e=p({from:E,shouldThrow:!1}),t=p({from:w,shouldThrow:!1}),s=p({from:R,shouldThrow:!1}),r=p({from:S,shouldThrow:!1});return e??t??s??r}function ee(){return T()!==void 0}function te(){return T()?.outboxMessageId}function q(e,t,s){return e==="flagged"?{to:w,params:{outboxMessageId:s}}:e==="outbox"?{to:R,params:{outboxMessageId:s}}:e==="mailbox"&&t?{to:S,params:{mailboxId:t,outboxMessageId:s}}:{to:E,params:{outboxMessageId:s}}}function b(){const e=P(),t=O(),{list:s,mailboxId:r}=U();return a.useCallback((n,o)=>{e({...q(s,r,n),search:B,hash:o?.keepPanels?!0:t,replace:o?.replace??!1})},[e,t,s,r])}function se(){const e=b();return a.useCallback(()=>e(void 0),[e])}function re(){const e=b();return a.useCallback(t=>e(t),[e])}function ne(){const e=b();return a.useCallback(t=>e(t,{replace:!0,keepPanels:!0}),[e])}function oe(){return N()}const Q=new Set(["rfc822","global"]),K=e=>e.mediaType.toUpperCase()==="MESSAGE"&&Q.has(e.mediaSubtype.toLowerCase()),k=(e,t)=>e.partPath.startsWith(`${t}.`),I=e=>{const t=e.filter(K);return e.filter(s=>!t.some(r=>k(s,r.partPath)))},ae=(e,t)=>e.filter(s=>k(s,t)),G=e=>{const t=I(e).filter(n=>!n.isMultipart&&n.disposition!=="attachment"&&n.mediaType==="TEXT"&&n.contentUrl.length>0),s=t.find(n=>n.mediaSubtype.toUpperCase()==="HTML");if(s)return{kind:"html",contentUrl:s.contentUrl};const r=t.find(n=>n.mediaSubtype.toUpperCase()==="PLAIN");return r?{kind:"text",contentUrl:r.contentUrl}:null},g={all:["messages"],detail:e=>[...g.all,"detail",e],body:e=>[...g.detail(e),"body"]};class f extends Error{reason;status;retryAfterSeconds;constructor(t,s,r,n){super(s),this.name="BodyFetchError",this.reason=t,this.status=r,this.retryAfterSeconds=n}}const W=e=>{const t=Number.parseInt(e??"",10);return!Number.isFinite(t)||t<=0?1:Math.min(t,30)},X=8,H="x-remit-403-reason",Y=(e,t)=>{const s=t?.trim()??"";return e===401?"auth":e===403?s.length>0?"auth":"body-missing":e===404?"body-missing":"generic"},z=(e,t)=>(t??"").toLowerCase().startsWith("text/html")?/<div\s+id=["']root["']/i.test(e):!1,j=(e,t)=>{const s=(t??"").toLowerCase();return!!(e==="text"&&s.startsWith("text/html"))},J=async(e,t,s=async()=>null)=>{const r={},n=await s();n&&(r.Authorization=`Bearer ${n}`);const o=await v(e,{headers:r});if(o.status===202)throw new f("not-ready","Message body is still syncing",202,W(o.headers.get("Retry-After")));if(!o.ok){const l=o.headers.get(H),m=Y(o.status,l);throw new f(m,`Failed to load message body (${o.status} ${o.statusText})`,o.status)}const c=o.headers.get("content-type");if(j(t,c))throw new f("content-type-mismatch",`Refusing to render message body — expected ${t}, got Content-Type ${c}`);const h=await o.text();if(z(h,c))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 h},V=async(e,t)=>(t.isRetryAfterNotReady&&await e.refetchDescribeMessage(),e.fetchContent(t.contentUrl,t.kind)),ce=({messageId:e,bodyParts:t,enabled:s=!0})=>{const r=t?G(t):null,n=$(),{getToken:o}=D(),c=a.useRef(null),h=F(),l=a.useRef(!1),m=a.useRef(null),C=e&&r?`${e}:${r.contentUrl}`:null;m.current!==C&&(m.current=C,l.current=!1);const i=L({queryKey:e?[...g.body(e),r?.contentUrl??null]:["messages","body","noop"],queryFn:()=>{if(!r)throw new Error("No renderable body part");if(!e)throw new Error("No messageId");const d=l.current;return l.current=!1,V({fetchContent:(u,x)=>J(u,x,o),refetchDescribeMessage:()=>h.refetchQueries({queryKey:_({path:{messageId:e}})})},{contentUrl:r.contentUrl,kind:r.kind,isRetryAfterNotReady:d})},enabled:s&&!!e&&!!r,staleTime:300*1e3,gcTime:1800*1e3,retry:(d,u)=>u instanceof f&&u.reason==="not-ready"?d<X:d<1,retryDelay:(d,u)=>u instanceof f&&u.reason==="not-ready"?(l.current=!0,(u.retryAfterSeconds??1)*1e3):1e3,meta:{softError:!0}}),y=i.isLoading&&!!r,A=t!==void 0&&r===null;a.useEffect(()=>{y&&(c.current=performance.now())},[y]),a.useEffect(()=>{i.isSuccess&&c.current!==null&&(n.recordTiming("message.body.load",Math.round(performance.now()-c.current)),c.current=null)},[i.isSuccess,n]);const M=i.data&&r?{kind:r.kind,body:i.data}:void 0;return{picked:r,data:M,isLoading:y,hasNoRenderablePart:A,isError:i.isError,error:i.error,refetch:i.refetch}};export{f as B,ee as a,ce as b,Y as c,te as d,ne as e,oe as f,re as g,ae as h,K as i,I as o,se as u};
@@ -1 +1 @@
1
- import{c2 as Q,c3 as y,c4 as S,c5 as w,c6 as C,h as k,c7 as q,c8 as x,r as p,c9 as M,ca as H,cb as L,cc as P,cd as O,ce as B,cf as A}from"./index-owcFTp8Y.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{c5 as Q,c6 as y,c7 as S,c8 as w,c9 as C,h as k,ca as q,cb as x,r as p,cc as M,cd as H,ce as L,cf as P,cg as O,ch as B,ci as A}from"./index-D0DzGa5J.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};
@@ -0,0 +1 @@
1
+ import{j as E,a1 as K,t as U,f as Q,r as o,aU as R,h as N,G,K as $,M as z,q as B,R as I,S as X,T as V,U as J}from"./index-D0DzGa5J.js";import{C as Y}from"./circle-check-big-3kpPwCgK.js";import{R as Z}from"./refresh-cw-C9XDa0FY.js";import{u as L}from"./useQueries-C45-CTu6.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:U("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(Q,{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 P(e){return!!e&&ee.has(e)}const q=3e3,te=q*2,T={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=L({queries:e.map(m=>({...R({path:{accountId:m}}),enabled:s&&!n,refetchInterval:q,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(P(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?T:{syncing:S,resolved:!0,synced:w,total:y}}const se=180*1e3,xe=30*1e3;let F=0;const M=new Set,re=(e=Date.now())=>{F=e+se;for(const s of M)s()},pe=(e=Date.now())=>e<F,Ee=e=>(M.add(e),()=>{M.delete(e)}),_=6e4,ne=new Set(["sent","drafts","trash","archive"]),C=(e,s)=>{const t=new Map;for(const n of e){const a=s.get(n.mailboxId)?.role;a&&ne.has(a)||t.set(n.mailboxId,n.highWaterMarkUid)}return t},j=(e,s)=>{const t=[];for(const[n,a]of s)a>(e.get(n)??0)&&t.push(n);return t},oe=(e,s)=>j(e,s).length>0,D=o.createContext(null),ae=()=>{const e=o.useContext(D);if(!e)throw new Error("useMailFreshness must be used inside <MailFreshnessProvider>");return e};function be({accountIds:e,children:s}){const t=N(),{resultFolderIndex:n}=G(),a=o.useRef(new Map),u=o.useRef(new Set),c=o.useRef(new Map),[i,r]=o.useState(new Set),h=L({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=C(b.mailboxes??[],n),v=c.current.get(d);if(c.current.set(d,g),v){const A=j(v,g);A.length>0&&$(t,z(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,C(d?.mailboxes??[],n)),u.current.add(f)}},[t,n]),m=o.useMemo(()=>({hasNewMail:y,acknowledge:x}),[y,x]);return E.jsx(D.Provider,{value:m,children:s})}const ie=2e3,ce=45e3,ue=e=>new Promise(s=>setTimeout(s,e)),k=e=>e instanceof Error&&e.message?e.message:"Something went wrong",le=e=>{V(e,{softError:!0},"user")&&J(e)},O=(e,s)=>e.fetchQuery({...R({path:{accountId:s}}),staleTime:0}),H=e=>e.mailboxes?.find(s=>s.fullPath?.toUpperCase()==="INBOX")?.lastSyncedAt??0,fe=async({accountId:e,readStatus:s,baselineLastSyncAt:t,baselineInboxSyncedAt:n=0,onInboxSynced:a,deadline:u,pollMs:c=ie})=>{let i=!1;for(;;){const r=await s().then(y=>({ok:!0,data:y})).catch(y=>({ok:!1,error:y}));if(!r.ok)return{accountId:e,message:k(r.error)};const{syncPhase:h,lastSyncAt:S}=r.data;if((S??0)>t&&!P(h))return h==="error"?{accountId:e,message:"Sync failed for this account"}:void 0;if(!i&&H(r.data)>n&&(i=!0,a?.()),Date.now()>=u)return{accountId:e,message:"Refresh is taking longer than usual"};await ue(c)}},de=async(e,s,t,n,a)=>{const u=await O(e,t).then(r=>({ok:!0,lastSyncAt:r.lastSyncAt??0,inboxSyncedAt:H(r)})).catch(r=>({ok:!1,error:r}));if(!u.ok)return{accountId:t,enqueued:!1,ok:!1,message:k(u.error)};const c=await I({path:{accountId:t},throwOnError:!0}).then(()=>({ok:!0})).catch(r=>({ok:!1,error:r}));if(!c.ok)return le(c.error),{accountId:t,enqueued:!1,ok:!1,message:k(c.error)};s.recordEvent("sync.triggered");const i=await fe({accountId:t,readStatus:()=>O(e,t),baselineLastSyncAt:u.lastSyncAt,baselineInboxSyncedAt:u.inboxSyncedAt,onInboxSynced:()=>a(t),deadline:n});return i?{accountId:t,enqueued:!0,ok:!1,message:i.message}:{accountId:t,enqueued:!0,ok:!0}},Re=(e,s={})=>{const t=N(),n=B(),{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,P as b,we as c,pe as i,Ee as s,ae as u};
@@ -1 +1 @@
1
- import{K as r,r as s,b7 as t}from"./index-owcFTp8Y.js";import{u as m}from"./useQueries-jIdAkC8e.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{N as r,r as s,bZ as t}from"./index-D0DzGa5J.js";import{u as m}from"./useQueries-C45-CTu6.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{d6 as se,d7 as re,d8 as ne,r as h,d9 as ae,da as oe,j as a,db as ie,dc as ce,dd as le,de as ue,ct as de,t as v,I as me,h as fe,at as he,i as ge,av as pe,cO as be,bS as ye,ab as xe,a0 as we,X as ve,df as W,dg as U,C as ke,cn as Se}from"./index-owcFTp8Y.js";import{K as O}from"./kbd-lTvecOmZ.js";import{B as Ee,b as Ae}from"./useMessageBodyContent-C6R-iTkz.js";import{i as Ce}from"./search-scope-B5-OK3Cq.js";function Te(e,t){if(typeof e!="object"||e===null)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var r=s.call(e,t);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function je(e){var t=Te(e,"string");return typeof t=="symbol"?t:String(t)}function Ne(e,t,s){return t=je(t),t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function D(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),s.push.apply(s,r)}return s}function N(e){for(var t=1;t<arguments.length;t++){var s=arguments[t]!=null?arguments[t]:{};t%2?D(Object(s),!0).forEach(function(r){Ne(e,r,s[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):D(Object(s)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))})}return e}class _e{constructor(t,s,r,n,o){this._target=t,this._gestureKey=n,this._ctrl=new ne(s),this._ctrl.applyHandlers(s,o),this._ctrl.applyConfig(N(N({},r),{},{target:t}),n),this._ctrl.effect()}destroy(){this._ctrl.clean()}setConfig(t){this._ctrl.clean(),this._ctrl.applyConfig(N(N({},t),{},{target:this._target}),this._gestureKey),this._ctrl.effect()}}const Oe=function(t,s,r){return se(re),new _e(t,{drag:s},r||{},"drag")},Re='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',_={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)"}},Ie={background:!1,spacing:!1},Le="16px",De=()=>`html{padding:0}body{padding:${Le};box-sizing:border-box}`,$e=()=>"html{overflow:hidden}body{overflow-x:auto}",Me=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,Pe='<meta name="viewport" content="width=device-width, initial-scale=1">',Be=e=>{const t=e?_.dark:_.light;return`
1
+ import{d9 as se,da as re,db as ne,r as h,dc as ae,dd as oe,j as a,de as ie,df as ce,dg as le,dh as ue,cw as de,t as v,I as me,h as fe,au as he,i as ge,aw as pe,cR as be,bQ as ye,ac as xe,a1 as we,X as ve,di as W,dj as U,G as ke,cq as Se}from"./index-D0DzGa5J.js";import{K as O}from"./kbd-BHwdDuqC.js";import{B as Ee,b as Ae}from"./useMessageBodyContent-UsHOXnjm.js";import{i as Ce}from"./search-scope-UI1H6AzA.js";function je(e,t){if(typeof e!="object"||e===null)return e;var s=e[Symbol.toPrimitive];if(s!==void 0){var r=s.call(e,t);if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Te(e){var t=je(e,"string");return typeof t=="symbol"?t:String(t)}function Ne(e,t,s){return t=Te(t),t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function D(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),s.push.apply(s,r)}return s}function N(e){for(var t=1;t<arguments.length;t++){var s=arguments[t]!=null?arguments[t]:{};t%2?D(Object(s),!0).forEach(function(r){Ne(e,r,s[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):D(Object(s)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(s,r))})}return e}class _e{constructor(t,s,r,n,o){this._target=t,this._gestureKey=n,this._ctrl=new ne(s),this._ctrl.applyHandlers(s,o),this._ctrl.applyConfig(N(N({},r),{},{target:t}),n),this._ctrl.effect()}destroy(){this._ctrl.clean()}setConfig(t){this._ctrl.clean(),this._ctrl.applyConfig(N(N({},t),{},{target:this._target}),this._gestureKey),this._ctrl.effect()}}const Oe=function(t,s,r){return se(re),new _e(t,{drag:s},r||{},"drag")},Re='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',_={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)"}},Ie={background:!1,spacing:!1},Le="16px",De=()=>`html{padding:0}body{padding:${Le};box-sizing:border-box}`,$e=()=>"html{overflow:hidden}body{overflow-x:auto}",Me=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,Pe='<meta name="viewport" content="width=device-width, initial-scale=1">',Be=e=>{const t=e?_.dark:_.light;return`
2
2
  /* Plain-email base: UI font-stack + theme-aware colors (#424) */
3
3
  html, body {
4
4
  font-family: ${Re};
@@ -19,7 +19,7 @@ a, a:visited {
19
19
  color: ${t.accent} !important;
20
20
  text-decoration: underline;
21
21
  }
22
- `},I="invert(0.92) hue-rotate(180deg)",$=`img,picture,video,svg,canvas,[style*='background-image'],[background]{filter:${I}}`,Fe=(e,t,s)=>{const r=e?_.dark.canvas:_.light.canvas;return s?e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:#ffffff;filter:${I}}body{margin:0}${$}`:"html,body{margin:0;background-color:#ffffff;color-scheme:light}":e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:${r}}body{margin:0;filter:${I}}${$}`:`html,body{margin:0;background-color:${r};color-scheme:light}`},ze=(e,t,s,r=Ie)=>{const n=t==="plain"?Be(s):Fe(s,Me.test(e),r.background),o=r.spacing?"":De();return`${Pe}<style>${n}</style>${e}<style>${$e()}${o}</style>`},M=5e4,Ke="allow-same-origin allow-popups allow-popups-to-escape-sandbox",P=(e,t,s)=>Math.min(Math.ceil(Math.max(e,t)),s),L=.5,B=(e,t)=>t>0&&e>t+1?Math.max(t/e,L):1,Ge=["box-sizing","width","max-width","transform","transform-origin","margin-bottom","overflow-x"],He=e=>{for(const c of Ge)e.style.removeProperty(c);const t=e.clientWidth,s=e.scrollWidth;if(B(s,t)===1)return 1;const r=(c,f)=>e.style.setProperty(c,f,"important");r("box-sizing","border-box"),r("max-width","none"),r("width",`${s}px`);const n=Math.max(s,e.scrollWidth),o=B(n,t);return o>L?r("overflow-x","visible"):r("width",`${t/L}px`),r("transform-origin","0 0"),r("transform",`scale(${o})`),r("margin-bottom",`${-e.offsetHeight*(1-o)}px`),o},We=new Set(["Enter","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]),Ue=e=>e===" "?!1:e.length===1?!0:We.has(e),R=e=>{if(e.metaKey||e.ctrlKey||e.altKey||!Ue(e.key))return;const t=e.currentTarget??e.target,s=t?.defaultView?.parent;!s||s===t?.defaultView||s.dispatchEvent(new KeyboardEvent("keydown",{key:e.key,code:e.code,shiftKey:e.shiftKey,bubbles:!0,cancelable:!0}))},F=({html:e,variant:t="framed",isDark:s=!1,declares:r,className:n})=>{const o=h.useRef(null),[c,f]=h.useState(0),i=h.useContext(ae),u=h.useMemo(()=>ze(e,t,s,r),[e,t,s,r]);return h.useEffect(()=>{const d=o.current;if(!d)return;const m=()=>{const l=d.contentDocument;if(!l?.body)return;k();const y=l.documentElement,T=He(l.body)<1?P(l.body.getBoundingClientRect().height,0,M):P(l.body.scrollHeight,y?.scrollHeight??0,M);f(j=>j===T?j:T)};let g=0;const w=()=>{cancelAnimationFrame(g),g=requestAnimationFrame(m)},p=l=>{const y=l.documentElement;return le()||y.scrollWidth>y.clientWidth+1},k=()=>{const l=d.contentDocument;if(!i||!l?.body)return;const y=p(l)?"auto":"pan-y pinch-zoom";l.documentElement.style.touchAction=y,l.body.style.touchAction=y};let x,b,S;const E=i?oe(k):void 0,C=()=>{m(),x?.disconnect(),x=void 0,b?.removeEventListener("keydown",R),b?.removeEventListener("load",m,!0),b=void 0,S?.destroy(),S=void 0;const l=d.contentDocument;l?.body&&(k(),i&&(S=new Oe(l.documentElement,y=>{const A=ie(y);A&&d.dispatchEvent(new CustomEvent(ce,{bubbles:!0,detail:A}))},{...ue,axis:"x",window:l.defaultView??void 0})),x=new ResizeObserver(w),x.observe(l.body),l.documentElement&&x.observe(l.documentElement),l.addEventListener("load",m,!0),l.fonts?.ready.then(m),l.addEventListener("keydown",R),b=l)};return d.addEventListener("load",C),()=>{d.removeEventListener("load",C),b?.removeEventListener("keydown",R),b?.removeEventListener("load",m,!0),x?.disconnect(),S?.destroy(),E?.(),cancelAnimationFrame(g)}},[i]),a.jsx("iframe",{ref:o,title:"Email content",sandbox:Ke,srcDoc:u,className:n,style:{width:"100%",border:"none",display:"block",height:c===0?"1px":`${c}px`,colorScheme:"normal"}})},Ve=(e,t)=>{const r=e==="newsletter"||e==="marketing"||t;return{framed:r,isPlain:!r}},Qe=()=>`
22
+ `},I="invert(0.92) hue-rotate(180deg)",$=`img,picture,video,svg,canvas,[style*='background-image'],[background]{filter:${I}}`,Fe=(e,t,s)=>{const r=e?_.dark.canvas:_.light.canvas;return s?e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:#ffffff;filter:${I}}body{margin:0}${$}`:"html,body{margin:0;background-color:#ffffff;color-scheme:light}":e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:${r}}body{margin:0;filter:${I}}${$}`:`html,body{margin:0;background-color:${r};color-scheme:light}`},ze=(e,t,s,r=Ie)=>{const n=t==="plain"?Be(s):Fe(s,Me.test(e),r.background),o=r.spacing?"":De();return`${Pe}<style>${n}</style>${e}<style>${$e()}${o}</style>`},M=5e4,Ke="allow-same-origin allow-popups allow-popups-to-escape-sandbox",P=(e,t,s)=>Math.min(Math.ceil(Math.max(e,t)),s),L=.5,B=(e,t)=>t>0&&e>t+1?Math.max(t/e,L):1,Ge=["box-sizing","width","max-width","transform","transform-origin","margin-bottom","overflow-x"],He=e=>{for(const c of Ge)e.style.removeProperty(c);const t=e.clientWidth,s=e.scrollWidth;if(B(s,t)===1)return 1;const r=(c,f)=>e.style.setProperty(c,f,"important");r("box-sizing","border-box"),r("max-width","none"),r("width",`${s}px`);const n=Math.max(s,e.scrollWidth),o=B(n,t);return o>L?r("overflow-x","visible"):r("width",`${t/L}px`),r("transform-origin","0 0"),r("transform",`scale(${o})`),r("margin-bottom",`${-e.offsetHeight*(1-o)}px`),o},We=new Set(["Enter","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]),Ue=e=>e===" "?!1:e.length===1?!0:We.has(e),R=e=>{if(e.metaKey||e.ctrlKey||e.altKey||!Ue(e.key))return;const t=e.currentTarget??e.target,s=t?.defaultView?.parent;!s||s===t?.defaultView||s.dispatchEvent(new KeyboardEvent("keydown",{key:e.key,code:e.code,shiftKey:e.shiftKey,bubbles:!0,cancelable:!0}))},F=({html:e,variant:t="framed",isDark:s=!1,declares:r,className:n})=>{const o=h.useRef(null),[c,f]=h.useState(0),i=h.useContext(ae),u=h.useMemo(()=>ze(e,t,s,r),[e,t,s,r]);return h.useEffect(()=>{const d=o.current;if(!d)return;const m=()=>{const l=d.contentDocument;if(!l?.body)return;k();const y=l.documentElement,j=He(l.body)<1?P(l.body.getBoundingClientRect().height,0,M):P(l.body.scrollHeight,y?.scrollHeight??0,M);f(T=>T===j?T:j)};let g=0;const w=()=>{cancelAnimationFrame(g),g=requestAnimationFrame(m)},p=l=>{const y=l.documentElement;return le()||y.scrollWidth>y.clientWidth+1},k=()=>{const l=d.contentDocument;if(!i||!l?.body)return;const y=p(l)?"auto":"pan-y pinch-zoom";l.documentElement.style.touchAction=y,l.body.style.touchAction=y};let x,b,S;const E=i?oe(k):void 0,C=()=>{m(),x?.disconnect(),x=void 0,b?.removeEventListener("keydown",R),b?.removeEventListener("load",m,!0),b=void 0,S?.destroy(),S=void 0;const l=d.contentDocument;l?.body&&(k(),i&&(S=new Oe(l.documentElement,y=>{const A=ie(y);A&&d.dispatchEvent(new CustomEvent(ce,{bubbles:!0,detail:A}))},{...ue,axis:"x",window:l.defaultView??void 0})),x=new ResizeObserver(w),x.observe(l.body),l.documentElement&&x.observe(l.documentElement),l.addEventListener("load",m,!0),l.fonts?.ready.then(m),l.addEventListener("keydown",R),b=l)};return d.addEventListener("load",C),()=>{d.removeEventListener("load",C),b?.removeEventListener("keydown",R),b?.removeEventListener("load",m,!0),x?.disconnect(),S?.destroy(),E?.(),cancelAnimationFrame(g)}},[i]),a.jsx("iframe",{ref:o,title:"Email content",sandbox:Ke,srcDoc:u,className:n,style:{width:"100%",border:"none",display:"block",height:c===0?"1px":`${c}px`,colorScheme:"normal"}})},Ve=(e,t)=>{const r=e==="newsletter"||e==="marketing"||t;return{framed:r,isPlain:!r}},Qe=()=>`
23
23
  /* Zero the UA default body margin and clamp the document to the iframe width so
24
24
  wide author markup can't push the body (and the page) past the viewport. */
25
25
  html, body {
@@ -81,4 +81,4 @@ pre, code {
81
81
  Image blocked
82
82
  </text>
83
83
  </svg>
84
- `),ft=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),ht=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),gt=(e={})=>{const t=de(),s={FORBID_TAGS:ut,FORBID_ATTR:dt,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 c=n.slice(4).replace(/^<|>$/g,""),f=e.resolveCid?.(c);f&&(r.setAttribute("src",f),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",mt),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",ft(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=ht(o)}}),r=>{const n=Xe(r),o=lt(r),c=t.sanitize(r,s);return{html:`<style>${Qe()}</style>${c}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},G=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Wt=({className:e,children:t})=>a.jsx("div",{className:v("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),pt=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:c,renderBlockedNotice:f})=>{const i=h.useMemo(()=>!e||typeof document>"u"?null:gt({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),u=i?.html??null,{framed:d,isPlain:m}=Ve(r,i?.hasAuthorBackground??!1),g=h.useMemo(()=>({background:i?.hasAuthorBackground??!1,spacing:i?.hasAuthorSpacing??!1}),[i?.hasAuthorBackground,i?.hasAuthorSpacing]),w=h.useMemo(()=>!u||n?0:(u.match(/data-blocked-src/g)||[]).length,[u,n]);return!u&&!t?a.jsx("div",{className:v("message-body",c),children:a.jsx(G,{})}):a.jsxs("div",{className:v("message-body",c),children:[w>0&&a.jsx("div",{children:f?.(w)}),u?a.jsx("div",{className:"message-body-frame",children:d?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(F,{html:u,variant:"framed",isDark:s,declares:g})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(F,{html:u,variant:m?"plain":"framed",isDark:s,declares:g})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(G,{})]})};function Ut({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:v("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(me,{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(O,{children:"j"})," / ",a.jsx(O,{children:"k"})," to move, ",a.jsx(O,{children:"Enter"})," to open"]})]})}function Z(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 bt=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function yt(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:bt(s),rawValue:s}}const xt=e=>/[\s"]/.test(e),wt=e=>xt(e)?`"${e.replace(/"/g,"")}"`:e,Vt=(e,t)=>`${e}:${wt(t)}`,Y=(e,t=Date.now())=>({value:e,setAt:t}),vt=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=Y(!0,r):delete n.trusted,{...e,flags:n}},kt=(e,t,s,r)=>{const n=o=>o.map(c=>vt(c,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)}}},St=({messageId:e})=>{const t=fe(),{pushError:s}=he(),{mutate:r,isPending:n,error:o,reset:c}=ge({...ye(),onMutate:async i=>{const u=i.path.addressId,m=i.body.flags?.trusted?.value===!0,g=be({path:{messageId:e}});await t.cancelQueries({queryKey:g});const w=t.getQueriesData({queryKey:g}).filter(p=>p[1]!==void 0).map(([p,k])=>({queryKey:p,data:k}));return t.setQueriesData({queryKey:g},p=>p&&kt(p,u,m)),{describePrefix:g,previous:w}},onError:(i,u,d)=>{if(d)for(const m of d.previous)t.setQueryData(m.queryKey,m.data);s(pe("Couldn't trust sender","The change wasn't saved.",i))},onSettled:(i,u,d,m)=>{m&&t.invalidateQueries({queryKey:m.describePrefix})}});return{toggleTrusted:(i,u)=>{r({path:{addressId:i},body:{flags:{trusted:Y(!u)}}})},isPending:n,error:o,reset:c}},Et=()=>{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`},Ct=({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"})]})]}),Tt=(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}}},jt=e=>e instanceof Ee?e.reason:"generic",Nt=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",_t=({error:e,onRetry:t})=>{const s=jt(e),r=Nt(e),{title:n,detail:o}=Tt(s,r),[c,f]=h.useState(!1),{Account:i}=xe();return c?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(we,{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:u})=>a.jsx("button",{type:"button",onClick:()=>u(),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:()=>f(!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(ve,{className:"size-4","aria-hidden":"true"})})]})]})},Ot=()=>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"})]}),H=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Qt=({bodyParts:e,html:t,text:s,isTrusted:r=!1,isBlocked:n=!1,messageId:o,fromAddressId:c,category:f,className:i})=>{const[u,d]=h.useState(!1),[m,g]=h.useState(o);m!==o&&(g(o),d(!1));const w=!n&&(r||u),p=Et(),{toggleTrusted:k,isPending:x}=St({messageId:o??""}),b=!!e&&e.length>0,{picked:S,data:E,isLoading:C,isError:l,error:y,refetch:A}=Ae({messageId:o,bodyParts:e,enabled:b}),T=h.useMemo(()=>qe(e??[]),[e]),j=b&&E?.kind==="html"?E.body:t,X=b&&E?.kind==="text"?E.body:s;if(b){if(C)return a.jsx("div",{className:v("message-body",i),children:a.jsx(Ot,{})});if(l)return a.jsx("div",{className:v("message-body",i),children:a.jsx(_t,{error:y,onRetry:()=>A()})});if(!S)return a.jsx("div",{className:v("message-body",i),children:a.jsx(H,{})})}else if(!t&&!s)return a.jsx("div",{className:v("message-body",i),children:a.jsx(H,{})});const J=!!(c&&o),ee=()=>{!c||x||(d(!0),k(c,!1))};return a.jsx(pt,{className:i,html:j,text:X,isDark:p,category:f,allowImages:w,resolveCid:T,renderBlockedNotice:te=>a.jsx(Ct,{blockedImageCount:te,canAlwaysTrust:J,isTrustPending:x,isSenderBlocked:n,onLoadOnce:()=>d(!0),onAlwaysTrust:ee})})},Rt=Object.values(W).map(e=>({value:e,label:U[e]})),It={unclassified:"uncategorized"},Lt=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:Rt},{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"}],Dt=new Map(Lt.map(e=>[e.name,e])),qt=e=>Dt.get(e.toLowerCase()),$t=/^\d{4}-\d{2}-\d{2}$/;function Mt(e,t,s){if(!$t.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 Pt(e){const t=e.toLowerCase(),s=It[t];return s||Object.values(W).find(n=>n===t)}function Bt(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 Ft(e,t){const s=yt(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=Pt(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return Bt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return Mt(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 Zt(e,t={}){const s=[],r=[];for(const n of Z(e)){const o=Ft(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Yt(e,t){return Z(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function Xt(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${U[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 Jt(){const{mailboxNameIndex:e,accountNameIndex:t}=ke(),s=Se();return{...Ce(s)?{}:{mailboxesByName:e},accountsByName:t}}export{Wt as M,Ut as R,Lt as S,pt as a,St as b,Qt as c,qt as d,Z as e,yt as f,Vt as g,Zt as p,Yt as r,Xt as s,Jt as u};
84
+ `),ft=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),ht=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),gt=(e={})=>{const t=de(),s={FORBID_TAGS:ut,FORBID_ATTR:dt,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 c=n.slice(4).replace(/^<|>$/g,""),f=e.resolveCid?.(c);f&&(r.setAttribute("src",f),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",mt),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",ft(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=ht(o)}}),r=>{const n=Xe(r),o=lt(r),c=t.sanitize(r,s);return{html:`<style>${Qe()}</style>${c}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},G=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Wt=({className:e,children:t})=>a.jsx("div",{className:v("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),pt=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:c,renderBlockedNotice:f})=>{const i=h.useMemo(()=>!e||typeof document>"u"?null:gt({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),u=i?.html??null,{framed:d,isPlain:m}=Ve(r,i?.hasAuthorBackground??!1),g=h.useMemo(()=>({background:i?.hasAuthorBackground??!1,spacing:i?.hasAuthorSpacing??!1}),[i?.hasAuthorBackground,i?.hasAuthorSpacing]),w=h.useMemo(()=>!u||n?0:(u.match(/data-blocked-src/g)||[]).length,[u,n]);return!u&&!t?a.jsx("div",{className:v("message-body",c),children:a.jsx(G,{})}):a.jsxs("div",{className:v("message-body",c),children:[w>0&&a.jsx("div",{children:f?.(w)}),u?a.jsx("div",{className:"message-body-frame",children:d?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(F,{html:u,variant:"framed",isDark:s,declares:g})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(F,{html:u,variant:m?"plain":"framed",isDark:s,declares:g})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(G,{})]})};function Ut({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:v("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(me,{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(O,{children:"j"})," / ",a.jsx(O,{children:"k"})," to move, ",a.jsx(O,{children:"Enter"})," to open"]})]})}function Z(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 bt=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function yt(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:bt(s),rawValue:s}}const xt=e=>/[\s"]/.test(e),wt=e=>xt(e)?`"${e.replace(/"/g,"")}"`:e,Vt=(e,t)=>`${e}:${wt(t)}`,Y=(e,t=Date.now())=>({value:e,setAt:t}),vt=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=Y(!0,r):delete n.trusted,{...e,flags:n}},kt=(e,t,s,r)=>{const n=o=>o.map(c=>vt(c,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)}}},St=({messageId:e})=>{const t=fe(),{pushError:s}=he(),{mutate:r,isPending:n,error:o,reset:c}=ge({...ye(),onMutate:async i=>{const u=i.path.addressId,m=i.body.flags?.trusted?.value===!0,g=be({path:{messageId:e}});await t.cancelQueries({queryKey:g});const w=t.getQueriesData({queryKey:g}).filter(p=>p[1]!==void 0).map(([p,k])=>({queryKey:p,data:k}));return t.setQueriesData({queryKey:g},p=>p&&kt(p,u,m)),{describePrefix:g,previous:w}},onError:(i,u,d)=>{if(d)for(const m of d.previous)t.setQueryData(m.queryKey,m.data);s(pe("Couldn't trust sender","The change wasn't saved.",i))},onSettled:(i,u,d,m)=>{m&&t.invalidateQueries({queryKey:m.describePrefix})}});return{toggleTrusted:(i,u)=>{r({path:{addressId:i},body:{flags:{trusted:Y(!u)}}})},isPending:n,error:o,reset:c}},Et=()=>{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`},Ct=({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"})]})]}),jt=(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}}},Tt=e=>e instanceof Ee?e.reason:"generic",Nt=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",_t=({error:e,onRetry:t})=>{const s=Tt(e),r=Nt(e),{title:n,detail:o}=jt(s,r),[c,f]=h.useState(!1),{Account:i}=xe();return c?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(we,{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:u})=>a.jsx("button",{type:"button",onClick:()=>u(),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:()=>f(!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(ve,{className:"size-4","aria-hidden":"true"})})]})]})},Ot=()=>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"})]}),H=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),Qt=({bodyParts:e,html:t,text:s,isTrusted:r=!1,isBlocked:n=!1,messageId:o,fromAddressId:c,category:f,className:i})=>{const[u,d]=h.useState(!1),[m,g]=h.useState(o);m!==o&&(g(o),d(!1));const w=!n&&(r||u),p=Et(),{toggleTrusted:k,isPending:x}=St({messageId:o??""}),b=!!e&&e.length>0,{picked:S,data:E,isLoading:C,isError:l,error:y,refetch:A}=Ae({messageId:o,bodyParts:e,enabled:b}),j=h.useMemo(()=>qe(e??[]),[e]),T=b&&E?.kind==="html"?E.body:t,X=b&&E?.kind==="text"?E.body:s;if(b){if(C)return a.jsx("div",{className:v("message-body",i),children:a.jsx(Ot,{})});if(l)return a.jsx("div",{className:v("message-body",i),children:a.jsx(_t,{error:y,onRetry:()=>A()})});if(!S)return a.jsx("div",{className:v("message-body",i),children:a.jsx(H,{})})}else if(!t&&!s)return a.jsx("div",{className:v("message-body",i),children:a.jsx(H,{})});const J=!!(c&&o),ee=()=>{!c||x||(d(!0),k(c,!1))};return a.jsx(pt,{className:i,html:T,text:X,isDark:p,category:f,allowImages:w,resolveCid:j,renderBlockedNotice:te=>a.jsx(Ct,{blockedImageCount:te,canAlwaysTrust:J,isTrustPending:x,isSenderBlocked:n,onLoadOnce:()=>d(!0),onAlwaysTrust:ee})})},Rt=Object.values(W).map(e=>({value:e,label:U[e]})),It={unclassified:"uncategorized"},Lt=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:Rt},{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"}],Dt=new Map(Lt.map(e=>[e.name,e])),qt=e=>Dt.get(e.toLowerCase()),$t=/^\d{4}-\d{2}-\d{2}$/;function Mt(e,t,s){if(!$t.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 Pt(e){const t=e.toLowerCase(),s=It[t];return s||Object.values(W).find(n=>n===t)}function Bt(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 Ft(e,t){const s=yt(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=Pt(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return Bt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return Mt(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 Zt(e,t={}){const s=[],r=[];for(const n of Z(e)){const o=Ft(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Yt(e,t){return Z(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function Xt(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${U[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 Jt(){const{mailboxNameIndex:e,accountNameIndex:t}=ke(),s=Se();return{...Ce(s)?{}:{mailboxesByName:e},accountsByName:t}}export{Wt as M,Ut as R,Lt as S,pt as a,St as b,Qt as c,qt as d,Z as e,yt as f,Vt as g,Zt as p,Yt as r,Xt as s,Jt 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-owcFTp8Y.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,au as p,c as f,d as m,r,i as y,aw as T,o as E,l as d}from"./index-D0DzGa5J.js";const i={html:"",plainText:""},x=e=>{const u=g(),{pushError:o}=p(),{data:n}=f({...m(),staleTime:1/0}),l=r.useMemo(()=>{if(!e||!n)return i;const t=n.accounts.find(a=>a.accountId===e);return t?{html:t.signatureHtml??"",plainText:t.signaturePlainText??""}:i},[e,n]),s=y({...d(),onSuccess:()=>{u.invalidateQueries({queryKey:E()})},onError:t=>{o(T("Couldn't save signature","The signature wasn't saved.",t))}}),c=r.useCallback((t,a)=>{e&&s.mutate({path:{accountId:e},body:{signatureHtml:t,signaturePlainText:a}})},[e,s]);return{signature:l,setSignature:c,isSaving:s.isPending}};export{x as u};
@@ -0,0 +1,5 @@
1
+ import{j as s,aN as v,f as d,aX as _,g as j,bu as N,bs as y,B as E,as as $,bL as C,bV as f,bW as A,bX as M,c as k,d as P,r as l,bY as W,aI as p,aJ as x,u as z,aQ as O,aS as L}from"./index-D0DzGa5J.js";import{S as q}from"./settings-screen-Bj41qBzw.js";import{f as B}from"./ErrorState-BxamrMX4.js";import{C as D}from"./copy-Zm_0Ajof.js";import{E as U}from"./external-link-CGtw0pwj.js";import{B as h}from"./bug-DucI4vmB.js";import{C as S}from"./circle-check-makGBNzJ.js";import{S as F}from"./SignInAgain-jn58nQP6.js";import{u as G}from"./useResultFolderIndex-jVeEM1tT.js";import{w as H}from"./help-copy-ETAaDkc7.js";import"./avatar-DcDIT3A8.js";import"./chevron-left-DYU2nQOC.js";import"./menu-rin4kYB3.js";import"./circle-help-De0-XbHV.js";import"./useQueries-C45-CTu6.js";import"./kbd-BHwdDuqC.js";function Q({report:e,onClose:t,issueUrl:a,onCopy:n}){return e===null?null:s.jsx(v,{open:!0,onClose:t,title:"Report this message",children:s.jsxs("div",{className:"flex max-h-[80vh] flex-col",children:[s.jsxs("header",{className:"space-y-1 border-b border-line px-4 py-3",children:[s.jsx("h3",{className:"text-sm font-semibold text-fg",children:"Report this message"}),s.jsx("p",{className:"text-xs text-fg-muted",children:"This is everything the report contains. It describes what went wrong with the message — never its contents, addresses, subject, attachment names, folder name, or the parser's own error text."})]}),s.jsx("pre",{className:"flex-1 overflow-auto bg-surface-sunken px-4 py-3 text-2xs leading-relaxed whitespace-pre-wrap text-fg-muted",children:e}),s.jsxs("footer",{className:"flex flex-wrap items-center justify-end gap-2 border-t border-line px-4 py-3",children:[s.jsx(d,{variant:"ghost",size:"sm",onClick:t,children:"Cancel"}),s.jsx(d,{variant:"secondary",size:"sm",icon:s.jsx(D,{className:"size-3.5"}),onClick:()=>n(e),children:"Copy report"}),s.jsx(_,{external:!0,size:"sm",href:a,icon:s.jsx(U,{className:"size-3.5"}),children:"Open on GitHub"})]})]})})}const V={BodyParse:"The message is built in a way Remit could not read."};function Y(e){return V[e]}function R(e){return e.split(";")[0].trim()}const b=/^[A-Za-z0-9!#$%&'*+._-]+$/,T=/^[A-Za-z0-9!#$%&'*+._-]+\/[A-Za-z0-9!#$%&'*+._-]+$/;function m(e,t){return t.test(e)?`\`${e}\``:`\`${JSON.stringify(e).replace(/`/g,"\\u0060")}\` (malformed)`}function J(e){const t=R(e);return T.test(t)?t:JSON.stringify(t)}const g="_not read_";function Z(e){return e.length===0?["(no MIME structure was read)"]:e.map(t=>`${" ".repeat(t.depth)}- ${J(t.contentType)}`)}const X="_No message content, addresses, subject, attachment names or parser output are included._";function I(e){return{head:[`### Message quarantined at \`${e.failureStage}\``,"",`- **Failure**: \`${e.failureCode}\``,`- **Folder role**: ${e.mailboxRole??"_none appointed_"}`,`- **Failing part**: ${e.failurePartPath==null?"_whole message_":`\`${e.failurePartPath}\``}`,`- **Attempts before quarantine**: ${e.attempts}`,`- **Worker build**: ${e.workerVersion}`,`- **Message-ID hash**: ${e.messageIdHash==null?"_none declared_":`\`${e.messageIdHash}\``}`,"","#### Message shape","",`- **Content-Type**: ${e.contentType==null?g:m(R(e.contentType),T)}`,`- **Content-Transfer-Encoding**: ${e.transferEncoding==null?g:m(e.transferEncoding,b)}`,`- **Charset**: ${e.charset==null?"_not declared_":m(e.charset,b)}`,`- **Size**: ${e.sizeBytes==null?g:`${e.sizeBytes} bytes`}`,"","MIME structure:"].join(`
2
+ `),structure:Z(e.structure).join(`
3
+ `),disclaimer:X}}function K(e){const{head:t,structure:a,disclaimer:n}=I(e);return[t,"","```",a,"```","",n].join(`
4
+ `)}function ee(e){return`Message quarantined: ${e.failureCode} at ${e.failureStage}`}function se(e){return new Date(e).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function te({entry:e,onCutBug:t}){return s.jsxs("li",{className:"flex flex-col gap-2 border-b border-line px-row-inset py-3 last:border-b-0 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"min-w-0 space-y-1",children:[s.jsx("p",{className:"text-sm text-fg",children:Y(e.failureStage)}),s.jsx("p",{className:"truncate text-xs text-fg-muted",title:e.failureMessage,children:e.failureMessage}),s.jsxs("p",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-2xs text-fg-subtle",children:[e.mailboxRole&&s.jsx(j,{tone:"warning",children:N(e.mailboxRole)}),s.jsx("span",{className:"truncate",title:e.mailboxPath,children:y(e.mailboxPath,e.mailboxDelimiter)}),s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:`uid ${e.uid}`}),s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:se(e.quarantinedAt)}),e.attempts>1&&s.jsxs(s.Fragment,{children:[s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:`${e.attempts} attempts`})]})]})]}),s.jsx(d,{variant:"secondary",size:"sm",className:"shrink-0",icon:s.jsx(h,{className:"size-3.5"}),onClick:()=>t(e),children:"Cut a bug"})]})}function ae({entries:e,onCutBug:t}){return s.jsxs("section",{className:"space-y-3",children:[s.jsxs("header",{className:"space-y-1",children:[s.jsx("h2",{className:"text-sm font-semibold text-fg",children:"Messages set aside"}),s.jsx("p",{className:"text-xs text-fg-muted",children:"Mail Remit could not read is set aside here instead of being skipped, so nothing goes missing quietly. The rest of the folder keeps syncing. Recovering a set-aside message is a re-sync, not a per-row action."})]}),e.length===0&&s.jsxs("div",{className:"flex items-center gap-2 rounded-sm border border-line bg-surface px-row-inset py-3",children:[s.jsx(S,{className:"size-4 shrink-0 text-positive","aria-hidden":!0}),s.jsx("p",{className:"text-sm text-fg-muted",children:"Every message has been read successfully. Nothing is set aside."})]}),e.length>1&&s.jsx(E,{tone:"warning",children:s.jsxs("p",{className:"flex items-start gap-2",children:[s.jsx($,{className:"mt-0.5 size-4 shrink-0","aria-hidden":!0}),s.jsxs("span",{children:[s.jsx("span",{className:"font-semibold",children:`${e.length} messages could not be read.`})," ","More than one means something is wrong with how Remit reads mail, not with the mail. Reporting one of these gets it fixed."]})]})}),e.length>0&&s.jsx("ul",{className:"rounded-sm border border-line bg-surface",children:e.map(a=>s.jsx(te,{entry:a,onCutBug:t},a.quarantineId))})]})}const ne={Retrying:"The message could not be synced. Remit tries again every sync.",GaveUp:"The message body could not be downloaded. Remit has stopped trying."};function re(e){return ne[e.state]}const ie="_No message content, addresses, subject, folder name or error text are included._";function oe(e){return[`### Message failed to sync at \`${e.stage}\``,"",`- **State**: \`${e.state}\``,`- **Attempts**: ${e.attempts}`,"",ie].join(`
5
+ `)}function le(e){return`Message failed to sync: ${e.state} at ${e.stage}`}function ce(e){return new Date(e).toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}function de({entry:e,onReport:t}){const a=e.state==="GaveUp";return s.jsxs("li",{className:"flex flex-col gap-2 border-b border-line px-row-inset py-3 last:border-b-0 sm:flex-row sm:items-start sm:justify-between",children:[s.jsxs("div",{className:"min-w-0 space-y-1",children:[s.jsx("p",{className:"text-sm text-fg",children:re(e)}),s.jsxs("p",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-2xs text-fg-subtle",children:[s.jsx(j,{tone:a?"danger":"warning",children:a?"Gave up":"Retrying"}),s.jsx("span",{className:"truncate",children:e.folderLabel}),s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:`uid ${e.uid}`}),s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:`since ${ce(e.createdAt)}`}),s.jsx("span",{"aria-hidden":!0,children:"·"}),s.jsx("span",{children:`${e.attempts} attempts`})]})]}),s.jsx(d,{variant:"secondary",size:"sm",className:"shrink-0",icon:s.jsx(h,{className:"size-3.5"}),onClick:()=>t(e),children:"Cut a bug"})]})}function ue({entries:e,total:t,onReport:a}){return s.jsxs("section",{className:"space-y-3",children:[s.jsxs("header",{className:"space-y-1",children:[s.jsx("h2",{className:"text-sm font-semibold text-fg",children:"Messages that failed to sync"}),s.jsx("p",{className:"text-xs text-fg-muted",children:"A message shows here after three failed rounds and leaves on its own once it syncs. The rest of the folder keeps syncing."})]}),e.length===0&&s.jsxs("div",{className:"flex items-center gap-2 rounded-sm border border-line bg-surface px-row-inset py-3",children:[s.jsx(S,{className:"size-4 shrink-0 text-positive","aria-hidden":!0}),s.jsx("p",{className:"text-sm text-fg-muted",children:"Every message is syncing. Nothing has failed."})]}),t>e.length&&s.jsx("p",{className:"text-xs text-fg-muted",children:`Showing the ${e.length} newest of ${t} messages that failed to sync.`}),e.length>0&&s.jsx("ul",{className:"rounded-sm border border-line bg-surface",children:e.map(n=>s.jsx(de,{entry:n,onReport:a},n.syncWarningId))})]})}function me(e,t){return{quarantineId:e.quarantineId,accountId:e.accountId,mailboxId:e.mailboxId,uidValidity:e.uidValidity,uid:e.uid,mailboxRole:e.mailboxRole?C[e.mailboxRole]:void 0,mailboxPath:e.mailboxPath,mailboxDelimiter:t,failureStage:e.failureStage,failureCode:e.failureCode,failureMessage:e.failureMessage,failurePartPath:e.failurePartPath,quarantinedAt:e.quarantinedAt,attempts:e.attempts,sizeBytes:e.sizeBytes,contentType:e.contentType,transferEncoding:e.transferEncoding,charset:e.charset,structure:e.structure,messageIdHash:e.messageIdHash,workerVersion:e.workerVersion}}const ge=3,pe=(e,t)=>e===A.Body&&t>=ge?f.GaveUp:f.Retrying,xe="A folder no longer listed";function he(e){return e?.role?N(e.role):e?.providerPath?y(e.providerPath,e.hierarchyDelimiter):xe}function fe(e,t){return{syncWarningId:e.syncWarningId,uid:e.uid,stage:e.stage,state:pe(e.stage,e.attempts),attempts:e.attempts,createdAt:e.createdAt,folderLabel:he(t)}}const be=[],je=[];function Ne(e){window.open(e,"_blank","noopener,noreferrer")}function ye(e){return{report:K(e),issueUrl:p(x({quarantine:I(e),title:ee(e)}))}}function Se(e){const t=oe(e);return{report:t,issueUrl:p(x({syncWarning:t,title:le(e)}))}}function Re({signIn:e}){return s.jsx("section",{role:"alert",className:"space-y-3",children:s.jsxs("div",{className:"space-y-2 rounded-sm border border-danger/40 bg-danger-soft px-row-inset py-3",children:[s.jsx("p",{className:"text-sm font-medium text-danger",children:"Your session has ended."}),s.jsx("p",{className:"text-sm text-fg-muted",children:"Sign in again to see the messages that failed to sync or were set aside."}),e]})})}function Te({error:e}){return s.jsx("section",{role:"alert",className:"space-y-3",children:s.jsxs("div",{className:"space-y-2 rounded-sm border border-danger/40 bg-danger-soft px-row-inset py-3",children:[s.jsx("p",{className:"text-sm font-medium text-danger",children:"The warnings could not be read."}),s.jsx("p",{className:"break-words text-sm text-fg-muted",children:B(e)}),s.jsx("p",{className:"text-xs text-fg-muted",children:"Mail may still be failing to sync or have been set aside — this page cannot say either way until it can read the list. Reporting this gets it fixed."}),s.jsx(d,{variant:"secondary",size:"sm",icon:s.jsx(h,{className:"size-3.5"}),onClick:()=>Ne(p(x())),children:"Report this"})]})})}function Ie({read:e,signIn:t}){const[a,n]=l.useState(null),[r,i]=l.useState(!1);if(e.kind==="Pending")return s.jsx("p",{className:"animate-pulse text-sm text-fg-subtle",children:"Checking for warnings…"});if(e.kind==="SignedOut")return s.jsx(Re,{signIn:t});if(e.kind==="Failed")return s.jsx(Te,{error:e.error});const u=o=>{navigator.clipboard.writeText(o).then(()=>{i(!1),n(null)},()=>{i(!0),n(null)})};return s.jsxs("div",{className:"space-y-6",children:[r&&s.jsx("p",{role:"alert",className:"text-sm text-danger",children:"The report was not copied — this browser refused clipboard access. Cut the bug again and use Open on GitHub, which needs no clipboard."}),s.jsx(ue,{entries:e.warnings,total:e.warningsTotal,onReport:o=>n(Se(o))}),s.jsx(ae,{entries:e.quarantine,onCutBug:o=>n(ye(o))}),s.jsx(Q,{report:a?.report??null,issueUrl:a?.issueUrl??"",onClose:()=>n(null),onCopy:u})]})}function we(e,t){return e.get(t)?.hierarchyDelimiter??""}function ve(){const e=M(),t=k(P()),a=l.useMemo(()=>t.data?.accounts??[],[t.data]),n=G(a),r=e.data?.entries??be,i=e.data?.warnings??je,u=l.useMemo(()=>r.map(c=>me(c,we(n.index,c.mailboxId))),[r,n.index]),o=l.useMemo(()=>i.map(c=>fe(c,n.index.get(c.mailboxId))),[i,n.index]),w=_e(e.error??t.error??n.error,e.isPending||t.isPending||n.isPending,{kind:"Ready",quarantine:u,warnings:o,warningsTotal:e.data?.warningsTotal??0});return s.jsx(Ie,{read:w,signIn:s.jsx(F,{})})}function _e(e,t,a){return W(e)?{kind:"SignedOut"}:e?{kind:"Failed",error:e}:t?{kind:"Pending"}:a}function Ge(){const e=z(),[t,a]=l.useState(!0),n=r=>{const i=L[r];i&&e({to:i})};return s.jsx(q,{items:O,activeId:"warnings",title:"Warnings",description:"Messages that failed to sync, and messages set aside.",help:H,helpOpen:t,onToggleHelp:()=>a(r=>!r),onSelect:n,onBackToMail:()=>{e({to:"/mail"})},children:s.jsx(ve,{})})}export{Ge as component};
package/index.html CHANGED
@@ -38,8 +38,8 @@
38
38
  } catch (_) {}
39
39
  })();
40
40
  </script>
41
- <script type="module" crossorigin src="/assets/index-owcFTp8Y.js"></script>
42
- <link rel="stylesheet" crossorigin href="/assets/index-BtYEmjxr.css">
41
+ <script type="module" crossorigin src="/assets/index-D0DzGa5J.js"></script>
42
+ <link rel="stylesheet" crossorigin href="/assets/index-C2Hz4y-Q.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.657",
3
+ "version": "0.0.659",
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 r,L as Et,W as Ot,f0 as $e,f1 as ne,ee as re,r as a,c as Ye,C as ie,bq as Ft,cU as At,K as Nt,e4 as Bt,f2 as Lt,f3 as qt,a0 as Ve,ey as Dt,f4 as Pt,ak as _t,d4 as Qt,d5 as zt}from"./index-owcFTp8Y.js";import{g as Je,e as Wt,f as Ze,u as Ht,p as Ut,R as Kt}from"./useSearchTokenContext-CDbE53C_.js";import{a8 as Gt,z as $t,B as Yt,ao as Vt,ap as Jt,aq as Zt,ar as _e,as as Xt,at as es,a7 as ts,au as ss,av as os,aw as ns,aj as rs,M as as,ax as is,ak as cs,ay as ls,az as ds,d as us,o as fs,am as ms,l as hs,S as gs,I as ps,N as Qe,L as xs,J as Is,b as ys,X as vs,Y as Ie,Z as bs,$ as Xe,a0 as et,a1 as Ss,a2 as Ts,a3 as Cs}from"./MailListHeader-BFFGRKyg.js";import{u as ws,a as Rs,R as Ms,b as js,c as ks}from"./useRefreshControl-DT4gm04X.js";import{u as ae}from"./useQueries-jIdAkC8e.js";import{t as tt,s as Es,u as Os,r as Fs,L as As}from"./useSemanticSearch-CX-jW79N.js";import{a as Ns}from"./useLabels-C955uVg_.js";import{u as Bs}from"./useLayoutTier-A889tOk-.js";import{d as Ls,w as qs}from"./wizard-selection-zWa1qc6-.js";import{m as Ds,e as Ps,f as _s}from"./search-token-index-BwY3fr3v.js";import{u as st}from"./sections-DKODQMWX.js";import{R as Qs}from"./refresh-cw-Bot6vhqM.js";import{a as zs}from"./useMessageBodyContent-C6R-iTkz.js";function Ws({sync:e}){return e?r.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 py-12 text-center px-4",role:"status","aria-live":"polite",children:[r.jsx(Et,{className:"size-8 animate-spin text-fg-subtle","aria-hidden":"true"}),r.jsx("p",{className:"text-sm font-medium text-fg",children:"Still syncing your mail"}),r.jsx("p",{className:"text-xs text-fg-subtle",children:Hs(e)})]}):r.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 py-12 text-center px-4",children:[r.jsx(Ot,{className:"size-8 text-fg-subtle","aria-hidden":"true"}),r.jsx("p",{className:"text-sm font-medium text-fg",children:"You're caught up"}),r.jsx("p",{className:"text-xs text-fg-subtle",children:"Nothing needs attention."})]})}function Hs({synced:e,total:t}){return t>0?`${e.toLocaleString()} of ${t.toLocaleString()} messages downloaded. This list fills in as they arrive.`:"Downloading your messages. This list fills in as they arrive."}const ot=[{id:"unread",name:"is",value:"unread"},{id:"attachment",name:"has",value:"attachment"}],nt="category",Us={unclassified:"uncategorized"},H=e=>Wt(e).map(t=>t.raw),W=e=>e.join(" "),ye=e=>{const t=Ze(e);if(t)return ot.find(s=>s.name===t.name&&s.value===t.value.toLowerCase())?.id},ve=e=>{const t=Ze(e);if(!t||t.name!==nt)return;const s=t.value.toLowerCase(),n=Us[s];if(n)return n;if(!(!$e(s)||s==="all"))return s},rt=e=>ot.find(t=>t.id===e),at=e=>rt(e)!==void 0,Ks=e=>{const t=new Set;for(const s of H(e)){const n=ye(s);n&&t.add(n)}return t},Gs=e=>{let t="all";for(const s of H(e)){const n=ve(s);n&&(t=n)}return t},$s=(e,t)=>{const s=rt(t);if(!s)return;const n=H(e),i=n.filter(d=>ye(d)!==t);return i.length<n.length?W(i):W([...n,Je(s.name,s.value)])},Ys=(e,t)=>{const s=H(e).filter(n=>!ve(n));return W(t==="all"?s:[...s,Je(nt,t)])},Vs=e=>W(H(e).filter(t=>!ye(t)&&!ve(t))),it=e=>e.trim().length>0,ze=e=>{if(!it(e.query))return e.ownFilters;const t=new Set(Ks(e.query));for(const s of e.ownFilters)at(s)||t.add(s);return t},We=e=>it(e.query)?Gs(e.query):e.ownCategory,He=6e4,Js=3e4,Zs={kind:"unknown"},Ue=e=>(t,s)=>Gt(s?.queryKey,e)?t:void 0,Xs=(e,t,s)=>({...e,category:[t],limit:s,order:"desc"}),eo=(e,t)=>({...e,category:[t],order:"desc",count:!0,results:!1}),Ke=(e,t)=>({category:[t],...e.unread!==void 0?{unread:e.unread}:{},...e.starred!==void 0?{starred:e.starred}:{},...e.attachments!==void 0?{attachments:e.attachments}:{},...e.accountId!==void 0?{accountId:e.accountId}:{},...e.muted!==void 0?{muted:e.muted}:{}});function to({categories:e,criteria:t,limit:s,counted:n}){const i=ae({queries:e.map(c=>{const h=Xs(t,c,s),f=Ke(t,c);return{queryKey:re({query:h}),queryFn:async()=>{const{data:v}=await ne({query:h,throwOnError:!0});return v},placeholderData:Ue(f),staleTime:He}})}),d=ae({queries:e.map(c=>{const h=eo(t,c),f=Ke(t,c);return{queryKey:re({query:h}),queryFn:async()=>{const{data:v}=await ne({query:h,throwOnError:!0});return v},enabled:n,placeholderData:Ue(f),staleTime:He}})}),m=a.useMemo(()=>e.map((c,h)=>{const f=i[h],v=d[h],p=f?.data?.items??[];return{category:c,rows:p,atCap:p.length>=s,total:n?tt(v?.data?.count):Zs,loading:f?.isPending??!0,failed:f?.isError??!1,retry:()=>{f?.refetch(),n&&v?.refetch()}}}),[e,i,d,n,s]),l=a.useCallback(()=>{for(const c of i)c.refetch();for(const c of d)c.refetch()},[i,d]);return{sections:m,isLoading:i.length>0&&i.every(c=>c.isPending),isError:i.length>0&&i.every(c=>c.isError),refetch:l}}function so(e,t,s){const n={...e,limit:t,order:"desc"},{data:i,isLoading:d,isError:m,refetch:l}=Ye({queryKey:re({query:n}),queryFn:async()=>{const{data:h}=await ne({query:n,throwOnError:!0});return h},enabled:s,staleTime:Js});return{rows:a.useMemo(()=>s?i?.items??[]:[],[i,s]),isLoading:s&&d,isError:s&&m,refetch:a.useCallback(()=>{l()},[l])}}const oo=3e4,no={kind:"unknown"},ro=(e,t)=>({...e,mailboxId:t,order:"desc",count:!0,results:!1});function ao({criteria:e,junkMailboxIds:t,enabled:s}){const n=ae({queries:t.map(i=>{const d=ro(e,i);return{queryKey:re({query:d}),queryFn:async()=>{const{data:m}=await ne({query:d,throwOnError:!0});return m},enabled:s,staleTime:oo}})});return a.useMemo(()=>t.map((i,d)=>({mailboxId:i,count:s?tt(n[d]?.data?.count):no,failed:s?n[d]?.isError??!1:!1})),[t,n,s])}const io=(e,t)=>e.createdAt!==t.createdAt?e.createdAt-t.createdAt:e.accountId.localeCompare(t.accountId),co=e=>[...e].sort(io),lo=["from","subject","category","unread","starred","attachments"],ct=["contacts","today"],uo=e=>new Set(ct.filter(t=>e.has(t))),fo=(e,t,s,n)=>{const i=$t({category:e,attributes:t}),{params:d,residual:m}=Yt(s,i,lo),l={...d,...i},c={muted:!1};return l.from!==void 0&&(c.from=l.from),l.subject!==void 0&&(c.subject=l.subject),l.unread!==void 0&&(c.unread=l.unread),l.starred!==void 0&&(c.starred=l.starred),l.attachments!==void 0&&(c.attachments=l.attachments),n!==void 0&&(c.accountId=n),{criteria:c,residual:m}},mo=({residual:e,attributes:t})=>e.length===0&&!ct.some(s=>t.has(s)),se=e=>e.count.kind==="exact"&&e.count.value>0?3:e.pageRows>0?2:e.count.kind==="unknown"?1:0,oe=e=>e.count.kind==="exact"?e.count.value:0,ho=(e,t)=>se(e)!==se(t)?se(e)>se(t):oe(e)!==oe(t)?oe(e)>oe(t):e.pageRows>t.pageRows;function go(e,{pageRowsByMailbox:t}){const s=e.map(f=>({...f,pageRows:t.get(f.mailboxId)??0}));for(const[f,v]of t)v<=0||s.some(p=>p.mailboxId===f)||s.push({mailboxId:f,count:{kind:"unknown"},failed:!1,pageRows:v});const n=s[0];if(!n)return;let i=0,d=!0,m=n;for(const f of s)f.count.kind==="unknown"?d=!1:i+=f.count.value,ho(f,m)&&(m=f);const l=s.some(f=>f.pageRows>0),c=s.some(f=>f.failed);if(i===0&&!l&&(d||!c))return;const h=d&&i===0&&l;return{mailboxId:m.mailboxId,count:d&&!h?{kind:"exact",value:i}:{kind:"unknown"}}}const po=50,xo=200,Io=[],Ge=()=>r.jsx("div",{className:"animate-pulse",children:Array.from({length:3}).map((e,t)=>r.jsxs("div",{className:"flex items-start gap-3 py-2 pl-5 pr-4 border-b border-line",children:[r.jsx("div",{className:"size-7 rounded-full bg-surface-sunken shrink-0 mt-0.5"}),r.jsxs("div",{className:"flex-1 space-y-1.5",children:[r.jsxs("div",{className:"flex justify-between gap-2",children:[r.jsx("div",{className:"h-3.5 bg-surface-sunken rounded w-28"}),r.jsx("div",{className:"h-3 bg-surface-sunken rounded w-12"})]}),r.jsx("div",{className:"h-3.5 bg-surface-sunken rounded w-48"}),r.jsx("div",{className:"h-3 bg-surface-sunken rounded w-full"})]})]},t))}),yo=({accountEmail:e})=>{const t=st();return r.jsxs("div",{className:"flex items-center gap-2 px-row-inset py-2 border-b border-line bg-danger-soft/40 text-xs text-danger",children:[r.jsx(Ve,{className:"size-3.5 shrink-0"}),r.jsxs("span",{className:"flex-1 truncate",children:[e," can't connect"]}),r.jsx("button",{type:"button",onClick:()=>t("accounts"),className:"shrink-0 underline text-danger hover:opacity-80",children:"Reconnect"})]})},vo=(e,t)=>{if(t.size===0)return{};const s=e.filter(d=>t.has(d.id)),n=Fs(s.map(d=>d.accountId));if(n.restriction)return n;const i=new Set;for(const d of s)d.mailboxId&&i.add(d.mailboxId);return i.size>1?{accountId:n.accountId,restriction:"spansFolders",moveDisabledHint:`Move only works within one folder — this selection spans ${i.size} folders`}:{accountId:n.accountId,mailboxId:i.size===1?[...i][0]:void 0}};function bo({header:e,rows:t,wizard:s,children:n}){const{selectedIds:i,selectedCount:d,exitSelection:m,orderedIds:l,allSelected:c,toggleAllLoaded:h}=ds(),f=a.useMemo(()=>vo(t,i),[t,i]),{junkMailboxId:v}=us(f.accountId),{labels:p}=Ns(f.accountId),b=a.useMemo(()=>Array.from(i),[i]),L=a.useMemo(()=>qs(t,i),[t,i]),x=fs(v,f.mailboxId),S=a.useMemo(()=>l.length>0?{checked:c,indeterminate:d>0&&!c,onChange:h}:void 0,[l.length,c,d,h]),A=f.moveDisabledHint?{tone:"warning",text:f.moveDisabledHint}:void 0,T=M=>r.jsx(gs,{title:M.title,navSlot:M.navSlot,titleMeta:M.titleMeta,searchSlot:M.searchSlot,searchField:M.searchField,idleSlot:M.makeFilterSlot,count:d,onCancel:m,onDelete:()=>s.start("delete"),onMove:()=>s.start("move"),onOrganize:()=>s.start("organize"),onJunk:x?()=>s.start("junk"):void 0,onMarkRead:()=>s.start("markRead"),overflowSlot:f.accountId&&f.mailboxId&&d>0&&p.length>0?r.jsx(As,{accountId:f.accountId,mailboxId:f.mailboxId,messageIds:b}):void 0,selectAll:S,notice:A});return r.jsx(ms,{...e,selectionBar:T,paneOverlay:r.jsx(hs,{verb:s.verb,accountId:f.accountId,mailboxId:f.mailboxId,selection:L,selectionRestriction:f.restriction,onFinished:m}),children:n})}function So({accounts:e,selectedMessageId:t,onOpenThread:s,commandsRef:n,onTriageContextChange:i,onDeleteMessages:d}){const{searchQuery:m,searchInput:l,resultFolderIndex:c,onSearchChange:h}=ie(),f=Ht(),v=Ft(),p=Bs(),b=At(),L=Ds(),x=a.useMemo(()=>co(e.filter(o=>!o.muted?.value)),[e]),[S,A]=a.useState("all"),[T,M]=a.useState("all"),[N,q]=a.useState(new Set),[le,j]=a.useState(!1),D=a.useCallback(o=>{q(u=>{const g=new Set(u);return g.has(o)?g.delete(o):g.add(o),g})},[]),U=a.useCallback(()=>q(new Set),[]),E=l.trim().length>0,{freeText:w,tokens:P}=Ut(m.trim().toLowerCase(),f),y=w.length>0,_=a.useMemo(()=>ze({query:l,ownFilters:N}),[l,N]),Q=a.useMemo(()=>We({query:l,ownCategory:T}),[l,T]),F=a.useMemo(()=>ze({query:m,ownFilters:N}),[m,N]),C=a.useMemo(()=>We({query:m,ownCategory:T}),[m,T]),I=a.useCallback(o=>{if(!E||!at(o)){D(o);return}const u=$s(l,o);u!==void 0&&h(u)},[E,l,h,D]),k=a.useCallback(o=>{if(!E){M(o);return}h(Ys(l,o))},[E,l,h]),de=a.useMemo(()=>C==="all"&&!y?o=>{$e(o)&&k(o)}:void 0,[C,y,k]),ue=a.useCallback(()=>{M("all"),A("all"),U(),E&&h(Vs(l))},[E,l,h,U]),K=ae({queries:x.map(o=>({...Nt({path:{accountId:o.accountId}}),staleTime:1/0,meta:{softError:!0}}))}),G=a.useMemo(()=>{const o=new Map;for(let u=0;u<x.length;u++){const g=x[u].accountId,te=(K[u]?.data?.items??[]).reduce((O,kt)=>O+(kt.unseenCount??0),0);o.set(g,te)}return o},[x,K]),ut=a.useMemo(()=>x.filter((o,u)=>{const g=K[u];return g?.isError?!Bt(g.error):!1}),[x,K]),{criteria:fe,residual:$}=a.useMemo(()=>fo(C,F,P,S==="all"?void 0:S),[C,F,P,S]),ft=a.useMemo(()=>C==="all"?[...Vt]:[C],[C]),be=a.useMemo(()=>({...fe,query:w,...C==="all"?{}:{category:[C]}}),[fe,w,C]),Se=mo({residual:$,attributes:F}),{sections:Y,isLoading:mt,isError:ht,refetch:Te}=to({categories:y?Io:ft,criteria:fe,limit:C==="all"?ls:po,counted:Se}),{rows:Ce,isLoading:gt,isError:pt,refetch:we}=so(be,xo,y),me=y?gt:mt,Re=y?pt:ht,Me=a.useCallback(()=>{if(y){we();return}Te()},[y,we,Te]),je=a.useMemo(()=>uo(F),[F]),V=a.useCallback(o=>Ls(o).map(Jt).filter(u=>Lt(u,je)&&Zt(u,$)),[je,$]),J=a.useMemo(()=>Y.map(o=>({category:o.category,total:o.total,atCap:o.atCap,loading:o.loading,failed:o.failed,rows:V(o.rows)})),[Y,V]),Z=a.useMemo(()=>V(Ce),[Ce,V]),xt=a.useCallback(o=>{Y.find(u=>u.category===o)?.retry()},[Y]),R=a.useMemo(()=>y?Z:J.flatMap(o=>o.rows),[y,Z,J]),It=a.useMemo(()=>qt(c),[c]),ke=ao({criteria:be,junkMailboxIds:It,enabled:Se&&Es({hasSearchQuery:y,freeText:w,residualTokenCount:$.length})}),{spamIds:he,briefSpamOffer:X}=a.useMemo(()=>{const o={spamIds:void 0,briefSpamOffer:void 0};if(!w)return o;const u=R.map(O=>_e(O,c)),{spam:g}=Xt(u),B=new Map;for(const O of g)O.mailboxId&&B.set(O.mailboxId,(B.get(O.mailboxId)??0)+1);const te=go(ke,{pageRowsByMailbox:B});return g.length===0&&!te?o:{spamIds:g.length>0?new Set(g.map(O=>O.id)):void 0,briefSpamOffer:te}},[R,w,c,ke]),Ee=a.useMemo(()=>{const o=u=>he===void 0?u:u.filter(g=>!he.has(g.id));return y?[{id:"matches",threads:o(Z)}]:es(J.map(u=>({...u,rows:o(u.rows)})))},[y,Z,J,he]),Oe=a.useCallback((o,u)=>{const g=R.find(B=>B.id===o)?.threadId;g&&s?.({threadId:g,messageId:o},u)},[R,s]),yt=a.useCallback(o=>{const u=o.threadId??R.find(g=>g.id===o.id)?.threadId;u&&s?.({threadId:u,messageId:o.id})},[R,s]),ge=a.useMemo(()=>x.length<=1?[]:[{id:"all",label:"All",active:S==="all"},...x.map(o=>({id:o.accountId,label:o.email.split("@")[0]??o.email,count:G.get(o.accountId),active:S===o.accountId}))],[x,G,S]),z=a.useMemo(()=>e.filter(o=>o.muted?.value).length,[e]),vt=a.useMemo(()=>Array.from(G.values()).reduce((o,u)=>o+u,0),[G]),pe=a.useMemo(()=>x.map(o=>o.accountId),[x]),{hasNewMail:Fe}=ws(),{state:Ae,errorMessage:Ne,refresh:Be}=Rs(pe,{onSettled:()=>Me()}),bt=a.useMemo(()=>r.jsx(Ms,{state:Ae,onRefresh:Be,label:"Refresh daily brief",errorMessage:Ne,hasUpdate:Fe(pe)}),[Ae,Be,Ne,Fe,pe]),xe=a.useMemo(()=>R.map(o=>_e(o,c)),[R,c]),{hits:Le,isLoading:St}=Os(),Tt=a.useMemo(()=>{const o=new Map(R.map(g=>[g.id,g.threadId])),u=xe.map(g=>o.get(g.id)).filter(g=>g!=null);return ts(Le,u,c)},[Le,xe,R,c]),Ct=a.useMemo(()=>{const o=ss(ge.map(u=>({id:u.id,label:u.label,count:u.count,active:u.active})));return{categories:o.categories,filters:o.filters,sources:o.sources,sourcesNote:z>0?`+${z} muted`:void 0,selectedCategory:Q,activeFilters:_,expanded:le,onExpandedChange:j,onSelectCategory:u=>k(u),onSelectSource:A,onToggleFilter:u=>I(u),onClear:ue}},[ge,z,Q,_,le,I,k,ue]),qe=Ee.length===0&&S==="all"&&w.length===0&&P.length===0,wt=a.useMemo(()=>x.map(o=>o.accountId),[x]),Rt=a.useMemo(()=>x.some(o=>js(o.syncPhase)),[x]),ee=ks(wt,qe||Rt),De=r.jsxs("div",{className:"h-full overflow-y-auto",children:[r.jsx(Ge,{}),r.jsx(Ge,{})]}),Pe=!me&&!Re&&!qe,Mt=os({tier:p,hasLiveInput:E,hasCommittedQuery:m.trim().length>0,bodyRendersCommittedResults:!0}),jt=Pe?r.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[X&&r.jsx(ns,{count:X.count,onScopeToSpam:()=>L(X.mailboxId,m)}),r.jsx("div",{className:"min-h-0 flex-1",children:r.jsx(rs,{sections:Ee,briefCategory:Q,Row:as,selectedThreadId:t,onSelectThread:Oe,onShowAllSection:de,onRetrySection:xt,flat:y,onSelectBriefCategory:k,sources:ge,sourcesNote:z>0?`+${z} muted`:void 0,onSelectSource:A,activeFilters:_,onToggleFilter:I,onClearFilters:ue})})]}):me?De:Re?r.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3 py-12 text-sm text-fg-muted",children:[r.jsx(Ve,{className:"size-8 text-danger"}),r.jsx("p",{children:"Couldn't load your messages"}),r.jsxs("button",{type:"button",onClick:()=>Me(),className:"flex items-center gap-1 text-accent underline text-xs",children:[r.jsx(Qs,{className:"size-3.5"}),"Try again"]})]}):ee.resolved?r.jsx(Ws,{sync:ee.syncing?{synced:ee.synced,total:ee.total}:void 0}):De;return r.jsx(Dt,{hasSheet:Pe&&!Mt,children:r.jsx(is,{selectedMessageId:t,rows:R,onOpen:Oe,onDeleteMessages:d,onSelectionVerb:b.start,commandsRef:n,onTriageContextChange:i,children:r.jsx(bo,{wizard:b,header:{title:"Daily brief",unreadCount:vt,footer:v?r.jsx(cs,{}):void 0,searchFilter:Ct,searchResults:xe,searchLoading:me,relatedResults:Tt,relatedLoading:St,onSelectSearchResult:yt,spamOffer:X,searchResultsInBody:!0,refreshControl:bt},rows:R,children:r.jsxs("div",{className:"flex h-full flex-col",children:[ut.map(o=>r.jsx(yo,{accountEmail:o.email,accountId:o.accountId},o.accountId)),r.jsx("div",{className:"min-h-0 flex-1",children:jt})]})})})})}const lt=a.createContext(null);function ce(){const e=a.useContext(lt);if(!e)throw new Error("BriefPane.* must be used inside <BriefPane>");return e}function To({thread:e,children:t}){const s=Ps(),n=_s(),i=st(),{searchInput:d}=ie(),m=e?.threadId,l=e?.messageId,{data:c}=Ye({...Pt(),staleTime:6e4}),h=a.useMemo(()=>c?.items??[],[c]),f=a.useMemo(()=>{if(m)return h.find(I=>I.messageId===l)??h.find(I=>I.threadId===m)},[h,m,l]),v=ps(m,l),p=f??v,b=l??p?.messageId,L=a.useMemo(()=>{if(m)return{threadId:m,mailboxId:p?.mailboxId??"",subject:p?.subject,messageId:b,authenticity:p?.authenticity}},[m,p,b]),x=a.useCallback((I,k)=>{s(I,{replace:k?.replace,query:d})},[s,d]),S=a.useCallback(I=>{b&&I.includes(b)&&n()},[b,n]),A=Qe({thread:p,isOpen:!0,onAfterOptimisticRemove:S}),T=xs(),{deleteMessages:M}=Is({mailboxId:p?.mailboxId??"",messages:h,onAfterOptimisticRemove:S}),{toggleReadFor:N}=ys({mailboxId:p?.mailboxId??"",messages:h}),q=T.focusedMessageId,j=a.useMemo(()=>h.find(I=>I.messageId===q),[h,q])??p,D=Qe({thread:j,isOpen:j?.messageId===b}),U=zs(),E=_t(),w=Qt(),P=a.useMemo(()=>zt(w,m,b),[w,m,b]),y=a.useMemo(()=>{if(j)return I=>w({threadId:j.threadId,messageId:j.messageId,mode:I})},[w,j]),{nextMessageId:_,previousMessageId:Q}=vs({context:T,orderedIds:T.orderedIds,selectedMessageId:b,enabled:!U&&!E,hasOpenThread:m!==void 0,onClose:n,handlers:{reply:()=>y?.("reply"),replyAll:()=>y?.("reply-all"),forward:()=>y?.("forward"),delete:()=>{T.listCommandsRef.current?.requestVerb("delete")||D.deleteThread()},toggleStar:D.toggleStar,toggleRead:()=>{T.listCommandsRef.current?.requestVerb("markRead")||j&&N([j.messageId],!j.isRead)},goFlagged:()=>i("flagged"),goSettings:()=>i("settings")}}),F=a.useCallback(I=>{if(!I)return;const k=h.find(de=>de.messageId===I);return k?{threadId:k.threadId,messageId:I}:void 0},[h]),C={selectedMessageId:b,selectedThread:p,conversation:L,onOpenThread:x,onCloseThread:n,nextThread:F(_),previousThread:F(Q),actions:A,onReply:P,triage:T,onDeleteMessages:M,handleDeselectIfRemoved:S};return r.jsx(lt.Provider,{value:C,children:t})}function dt(){const{selectedMessageId:e,onOpenThread:t,triage:s,onDeleteMessages:n}=ce(),{accounts:i}=ie();return r.jsx(So,{accounts:i,selectedMessageId:e,onOpenThread:t,commandsRef:s.listCommandsRef,onTriageContextChange:s.onTriageContextChange,onDeleteMessages:n})}function Co(){const e=Ie(),{conversation:t,selectedThread:s,actions:n,onReply:i,handleDeselectIfRemoved:d,onOpenThread:m}=ce(),l=!!t,c=Ts(t?.threadId);return r.jsxs(r.Fragment,{children:[r.jsxs("section",{className:"flex h-full w-full min-w-0 flex-col bg-canvas",children:[r.jsx(Cs,{hasThread:l,intelligenceOpen:c.isShowing,canToggleIntelligence:c.canToggle,onToggleIntelligence:c.toggle,onReply:i?()=>i("reply"):void 0,onReplyAll:i?()=>i("reply-all"):void 0,onForward:i?()=>i("forward"):void 0,onDelete:l?n.deleteThread:void 0,onToggleStar:l?n.toggleStar:void 0,isStarred:n.isStarred,moveContext:l&&n.accountId&&n.mailboxId?{accountId:n.accountId,currentMailboxId:n.mailboxId,onMove:n.moveThread}:void 0}),r.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:t?r.jsx(Xe,{threadId:t.threadId,mailboxId:t.mailboxId,subject:t.subject,selectedMessageId:t.messageId,authenticity:t.authenticity,onOpenIntelligence:c.open,listOnScreen:!0}):r.jsx(Kt,{})})]}),r.jsx(et,{isOpen:c.drawerOpen,onClose:c.closeDrawer,thread:s,mailboxId:s?.mailboxId,accountId:s?.accountId,onAfterOptimisticRemove:d,onReplyWithText:e,onOpenThread:m})]})}function wo(){const e=Ie(),{selectedThread:t,handleDeselectIfRemoved:s,onOpenThread:n}=ce(),{onToggleIntelligence:i}=ie();return r.jsx(Ss,{onClose:i,thread:t,mailboxId:t?.mailboxId,accountId:t?.accountId,onAfterOptimisticRemove:s,onReplyWithText:e,onOpenThread:n})}function Ro(){const e=Ie(),{selectedThread:t,conversation:s,onOpenThread:n,onCloseThread:i,nextThread:d,previousThread:m,handleDeselectIfRemoved:l}=ce(),c=bs(s?.threadId??null);return s?r.jsxs(r.Fragment,{children:[r.jsx(Xe,{threadId:s.threadId,mailboxId:s.mailboxId,subject:s.subject,selectedMessageId:s.messageId,authenticity:s.authenticity,onBack:i,onOpenIntelligence:c.toggle,onSwipeNext:d?()=>n(d):void 0,onSwipePrevious:m?()=>n(m):void 0,mobileIntelligenceOpen:c.isOpen}),r.jsx(et,{isOpen:c.isOpen,onClose:c.close,thread:t,mailboxId:t?.mailboxId,accountId:t?.accountId,onAfterOptimisticRemove:l,onReplyWithText:e,onOpenThread:n})]}):r.jsx("div",{className:"h-full",children:r.jsx(dt,{})})}const _o=Object.assign(To,{List:dt,Reading:Co,Intelligence:wo,Phone:Ro});export{_o as B};
@@ -1 +0,0 @@
1
- import{j as n,f as C,t as m,_ as X,$ as ee,az as N,r as w,ay as te,X as ne,ar as se,a0 as ae}from"./index-owcFTp8Y.js";import{R as _,k as $,J as ie,c as re,K as oe,x as le,L as ce,G as de}from"./calendar-format-Dl_kGdpq.js";import{e as ue,g as j,h as me,u as he,b as U,d as xe,i as pe,t as ye,U as ve}from"./useCalendars-LZefvRrA.js";import{C as ge}from"./calendar-clash-strip-BFmDAwFK.js";const De=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Ne=["January","February","March","April","May","June","July","August","September","October","November","December"],Te=["first","second","third","fourth","last"],k="";function fe(e,t){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return[];const[s,a,r]=e.split("-").map(Number),o=new Date(Date.UTC(s,a-1,r)),i=De[o.getUTCDay()],c=Te[Math.min(Math.floor((r-1)/7),4)],l=t===""?"":`, ${t}`,d=o.getUTCDay()>=1&&o.getUTCDay()<=5;return[`Every day${l}`,...d?[`Every weekday${l}`]:[],`Every week on ${i}${l}`,`Every month on the ${c} ${i}${l}`,`Every year on ${r} ${Ne[a-1]}${l}`]}const be="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",p=({draft:e,onChange:t},s,a)=>t({...e,[s]:a});function D({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 je({draft:e,onChange:t,layout:s="compact",touch:a}){const r=s==="pane";return n.jsx(N,{value:e.title,placeholder:"Title","aria-label":"Title",onChange:o=>p({draft:e,onChange:t},"title",o.target.value),className:m(r?"text-lg font-medium":"text-md font-medium",r?"h-11":a?"min-h-11":"")})}function P(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 Ee(e,t){return t===""?{...e,date:t}:e.endDate===""?{...e,date:t,endDate:t}:e.date===""?{...e,date:t}:{...e,date:t,endDate:$(t,ie(e.date,e.endDate))}}function Ce(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 $e({draft:e,onChange:t,touch:s}){const a=s?"min-h-11":"",r=P(e),o=w.useId(),i={"aria-invalid":r,"aria-describedby":r?o:void 0},c=m("w-40",a,r&&"border-danger/60"),l=m("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(N,{type:"date",value:e.date,"aria-label":"Date",...i,onChange:d=>t(Ee(e,d.target.value)),className:c}),!e.allDay&&n.jsx(N,{type:"time",value:e.startTime,"aria-label":"Start time",...i,onChange:d=>p({draft:e,onChange:t},"startTime",d.target.value),className:l}),n.jsx("span",{className:"text-sm text-fg-subtle",children:"to"}),n.jsx(N,{type:"date",value:e.endDate,"aria-label":"End date",min:e.date===""?void 0:e.date,...i,onChange:d=>p({draft:e,onChange:t},"endDate",d.target.value),className:c}),!e.allDay&&n.jsx(N,{type:"time",value:e.endTime,"aria-label":"End time",...i,onChange:d=>p({draft:e,onChange:t},"endTime",d.target.value),className:l}),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(Ce(e,d.target.checked)),className:"size-4 accent-current"}),"All day"]})]}),r&&n.jsx("p",{id:o,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 ke({draft:e,onChange:t,calendars:s,touch:a}){return n.jsx(Fe,{calendars:s,value:e.calendarId,onChange:r=>p({draft:e,onChange:t},"calendarId",r),touch:a})}function we({draft:e,onChange:t,touch:s,repeatEditable:a=!0,onCustom:r}){return a?n.jsx(Re,{value:e.repeat,date:e.date,startTime:e.startTime,onChange:o=>p({draft:e,onChange:t},"repeat",o),onCustom:r,className:s?"min-h-11":""}):n.jsxs("p",{className:"flex items-center gap-2 text-sm text-fg-muted",children:[n.jsx(_,{className:"size-4 shrink-0 text-fg-subtle","aria-hidden":!0}),e.repeat===k?"Does not repeat":e.repeat]})}function Ye({draft:e,onChange:t,touch:s}){return n.jsx(N,{value:e.location,placeholder:"Location","aria-label":"Location",onChange:a=>p({draft:e,onChange:t},"location",a.target.value),className:s?"min-h-11":""})}function Ae({draft:e,onChange:t,touch:s}){return n.jsx(N,{value:e.guests,placeholder:"Guests, comma separated","aria-label":"Guests",onChange:a=>p({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=>p({draft:e,onChange:t},"notes",a.target.value),rows:s==="pane"?6:3,className:be})}function Me({draft:e,onChange:t,calendars:s,layout:a="compact",expanded:r=!1,onToggleExpanded:o,onSave:i,onCancel:c,onDelete:l,saveLabel:d="Add",header:h,repeatEditable:u=!0,guestsEditable:x=!1,calendarEditable:y=!0,onCustomRepeat:b,touch:v,className:A}){const f=a==="pane",g={draft:e,onChange:t,layout:a,touch:v},O=n.jsx(je,{...g}),M=n.jsx($e,{...g}),R=n.jsx(ke,{...g,calendars:s}),F=n.jsx(we,{...g,repeatEditable:u,onCustom:b}),S=n.jsx(Ye,{...g}),I=n.jsx(Ae,{...g}),L=n.jsx(Oe,{...g}),B=n.jsxs("div",{className:m("flex items-center gap-2",f?"pt-2":"pt-1"),children:[n.jsx(C,{variant:"primary",size:v||f?"md":"sm",onClick:i,disabled:P(e),className:v?"min-h-11 flex-1":"",children:d}),n.jsx(C,{variant:"ghost",size:v||f?"md":"sm",onClick:c,className:v?"min-h-11":"",children:"Cancel"}),l&&n.jsx(C,{variant:"ghost",size:v||f?"md":"sm",onClick:l,className:m("ml-auto text-danger",v&&"min-h-11"),children:"Delete"})]});if(f)return n.jsxs("div",{className:m("flex flex-col gap-5",A),children:[h,n.jsx(D,{label:"Title",children:O}),n.jsx(D,{label:"When",children:M}),y&&n.jsx(D,{label:"Calendar",children:R}),n.jsx(D,{label:"Repeat",children:F}),n.jsx(D,{label:"Location",children:S}),x&&n.jsx(D,{label:"Guests",children:I}),n.jsx(D,{label:"Notes",children:L}),B]});const q=o!==void 0&&!r;return n.jsxs("div",{className:m("flex flex-col gap-3",A),children:[h,O,M,y&&R,o&&n.jsxs("button",{type:"button",onClick:o,"aria-expanded":r,className:m("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",v&&"min-h-11"),children:[r?n.jsx(X,{className:"size-3.5"}):n.jsx(ee,{className:"size-3.5"}),r?"Fewer details":"More details"]}),!q&&n.jsxs("div",{className:"flex flex-col gap-2 border-t border-line pt-3",children:[S,x&&I,F,L]}),B]})}const W="__custom__";function Re({value:e,date:t,startTime:s,onChange:a,onCustom:r,className:o}){const i=fe(t,s),c=e===k||i.includes(e)?i:[e,...i];return n.jsxs(te,{icon:n.jsx(_,{className:"size-4"}),"aria-label":"Repeat",value:e,onChange:l=>{if(l.target.value===W){r?.();return}a(l.target.value)},className:o,children:[n.jsx("option",{value:k,children:"Does not repeat"}),c.map(l=>n.jsx("option",{value:l,children:l},l)),r&&n.jsx("option",{value:W,children:"Custom…"})]})}function Fe({calendars:e,value:t,onChange:s,touch:a}){const r=w.useId();return n.jsxs("fieldset",{className:"flex flex-wrap gap-1.5",children:[n.jsx("legend",{className:"sr-only",children:"Calendar"}),e.map(o=>{const i=re(o.color),c=o.id===t;return n.jsxs("label",{className:m("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",c?m(i.soft,i.text,i.border):"border-line text-fg-muted hover:bg-surface-sunken"),children:[n.jsx("input",{type:"radio",name:r,value:o.id,checked:c,onChange:()=>s(o.id),className:"sr-only"}),n.jsx("span",{className:m("size-2 rounded-full",i.solid)}),o.name]},o.id)})]})}function Se({title:e,subtitle:t,onClose:s,children:a,className:r}){return n.jsxs("section",{className:m("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(ne,{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"],T=["SU","MO","TU","WE","TH","FR","SA"],z=["January","February","March","April","May","June","July","August","September","October","November","December"],Z=["first","second","third","fourth","last"],Y=[1,2,3,4,-1],J="MO,TU,WE,TH,FR",Ie=e=>e.replace(/,\s*\d{2}:\d{2}$/,"").trim();function K(e){const t=Ie(e);if(t==="")return"";if(t==="Every day")return"FREQ=DAILY";if(t==="Every weekday")return`FREQ=WEEKLY;BYDAY=${J}`;const s=t.match(/^Every week on (\w+)$/);if(s){const o=E.indexOf(s[1]);return o===-1?void 0:`FREQ=WEEKLY;BYDAY=${T[o]}`}const a=t.match(/^Every month on the (\w+) (\w+)$/);if(a){const o=Z.indexOf(a[1]),i=E.indexOf(a[2]);return o===-1||i===-1?void 0:`FREQ=MONTHLY;BYDAY=${Y[o]}${T[i]}`}const r=t.match(/^Every year on (\d{1,2}) (\w+)$/);if(r){const o=z.indexOf(r[2]);return o===-1?void 0:`FREQ=YEARLY;BYMONTH=${o+1};BYMONTHDAY=${Number(r[1])}`}}const Le=e=>e===""?"":`, ${e}`;function Ze(e,t){const s=new Map(e.split(";").map(i=>i.split("=")).filter(i=>i.length===2).map(([i,c])=>[i.toUpperCase(),c.toUpperCase()])),a=Le(t),r=s.get("FREQ"),o=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(o===void 0)return;if(o===J)return`Every weekday${a}`;const i=T.indexOf(o);return i===-1?void 0:`Every week on ${E[i]}${a}`}if(r==="MONTHLY"){const i=o?.match(/^(-?\d)([A-Z]{2})$/);if(!i)return;const c=Y.indexOf(Number(i[1])),l=T.indexOf(i[2]);return c===-1||l===-1?void 0:`Every month on the ${Z[c]} ${E[l]}${a}`}if(r==="YEARLY"){const i=Number(s.get("BYMONTH")),c=Number(s.get("BYMONTHDAY"));return!i||!c||i>12?void 0:`Every year on ${c} ${z[i-1]}${a}`}}}const H=e=>Date.parse(`${e}T00:00:00Z`)/864e5;function Be(e,t,s){const a=H(s)-H(t);if(e===""||a===0||Number.isNaN(a))return e;const[r,o,i]=s.split("-").map(Number),c=new Date(Date.UTC(r,o-1,i)).getUTCDay(),l=/FREQ=(\w+)/i.exec(e)?.[1]?.toUpperCase();return e.split(";").map(d=>{const[h,u=""]=d.split("="),x=h.toUpperCase();return x==="BYDAY"&&l==="MONTHLY"?`BYDAY=${Y[Math.min(Math.floor((i-1)/7),4)]}${T[c]}`:x==="BYDAY"?`BYDAY=${u.split(",").map(y=>{const b=T.indexOf(y.toUpperCase());return b===-1?y:T[(b+a+7)%7]}).join(",")}`:x==="BYMONTH"?`BYMONTH=${o}`:x==="BYMONTHDAY"?`BYMONTHDAY=${i}`:d}).join(";")}function Je(e,t){return{title:"",date:e,startTime:"09:00",endDate:e,endTime:"10:00",allDay:!1,calendarId:t,location:"",guests:"",notes:"",repeat:""}}function Ke(e,t){return{title:e.title,date:e.start.slice(0,10),startTime:e.allDay?"":e.start.slice(11,16),endDate:oe(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 Q(e,t){return e.allDay?{start:e.date,end:ue(e.endDate,1)}:{start:j(e.date,e.startTime,t),end:j(e.endDate,e.endTime,t)}}function G(e,t,s){const a=K(e.repeat)??"",r=e.allDay?e.date:me(t,s.anchor===""?"UTC":s.anchor).slice(0,10);return Be(a,e.date,r)}function V(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&&K(e.repeat)===void 0?"This calendar can't store that repeat rule. Pick one of the offered rules, or turn the repeat off.":""}function Qe(e,t){const s=V(e,!0);if(s!=="")return{ok:!1,problem:s};const{start:a,end:r}=Q(e,t.clock);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.anchor===""?{}:{timeZone:t.anchor},recurrenceRule:G(e,a,t)}}}function Ge(e,t,s){const a=t.repeat!==e.repeat,o=t.allDay!==e.allDay||t.date!==e.date||t.startTime!==e.startTime,i=o||t.endDate!==e.endDate||t.endTime!==e.endTime,c=V(t,a);if(c!=="")return{ok:!1,problem:c};const l={};t.title.trim()!==e.title.trim()&&(l.summary=t.title.trim()),t.location!==e.location&&(l.location=t.location),t.notes!==e.notes&&(l.description=t.notes);const{start:d,end:h}=Q(t,s.clock);return o&&(l.start=d),i&&(l.end=h,l.allDay=t.allDay,s.anchor!==""&&(l.timeZone=s.anchor)),a&&(l.recurrenceRule=G(t,d,s)),{ok:!0,patch:l}}const Ue=[],We={from:"",to:""};function Ve(e,t=""){const{timeZoneByCalendarId:s}=he(),a=e.date!==""&&!e.allDay&&e.endDate!==""&&e.startTime!==""&&e.endTime!==""&&`${e.endDate}T${e.endTime}`>`${e.date}T${e.startTime}`,{instances:r,isLoading:o,error:i}=le({...a?{from:U("week",e.date).from,to:U("week",e.endDate).to}:We,calendarIds:Ue,enabled:a}),c=xe();return w.useMemo(()=>{if(!a||o||i)return;const l=j(e.date,e.startTime,c),d=j(e.endDate,e.endTime,c),h=r.filter(u=>pe(u)&&u.calendarObjectId!==t).map(u=>ye(u,s[u.calendarId]??ve,c));return ce({start:l,end:d},h).map(u=>({id:u.id,label:`${u.title}, ${de(u)}`}))},[a,o,i,e.date,e.endDate,e.startTime,e.endTime,c,r,t,s])}function qe({title:e,subtitle:t,notice:s="",calendars:a,draft:r,onChange:o,problem:i,saveLabel:c,isSaving:l,repeatEditable:d=!0,calendarEditable:h=!0,clashes:u,onSave:x,onCancel:y}){return n.jsx(Se,{title:e,subtitle:t,onClose:y,children:n.jsx(Me,{draft:r,onChange:o,calendars:a,layout:"pane",repeatEditable:d,calendarEditable:h,saveLabel:l?"Saving…":c,onSave:x,onCancel:y,header:i===""&&s===""&&u===void 0?void 0:n.jsxs("div",{className:"space-y-2",children:[s!==""&&n.jsxs("p",{className:"flex items-start gap-2 rounded-md border border-warning/40 bg-warning-soft px-3 py-2 text-sm text-fg",children:[n.jsx(se,{className:"mt-0.5 size-4 shrink-0 text-warning","aria-hidden":"true"}),n.jsx("span",{className:"min-w-0 flex-1 break-words",children:s})]}),i!==""&&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(ae,{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})]}),u!==void 0&&n.jsx(ge,{clashes:u,clearText:"Nothing else is booked at this time."})]})})})}export{qe as C,Se as E,Q as a,Qe as c,Ke as d,Je as e,Be as m,Ge as p,Ze as t,Ve as u};