@remit/web-client-dist 0.0.657 → 0.0.658
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/BriefPane-DTnPypWR.js +1 -0
- package/assets/CalendarComposePane-B5vgWbn2.js +1 -0
- package/assets/{CalendarComposeSeed-B3HKxMFT.js → CalendarComposeSeed-CvfYDo6K.js} +1 -1
- package/assets/{CalendarShell-D9HK76un.js → CalendarShell-CNCnuYI7.js} +1 -1
- package/assets/{EmptyState-1soLLrUm.js → EmptyState-DCvsovpV.js} +1 -1
- package/assets/{ErrorState-DPzwHis8.js → ErrorState-BVvZa9Hj.js} +1 -1
- package/assets/{FlaggedPane-C6qW3NPH.js → FlaggedPane-CmOkn_je.js} +1 -1
- package/assets/{FullCompose-rxgtwgLT.js → FullCompose-C-kYe1x_.js} +1 -1
- package/assets/MailListHeader-qqqmfyRg.js +1 -0
- package/assets/MailNav-UWoxDID1.js +1 -0
- package/assets/MailShell-D1RYjXBs.js +1 -0
- package/assets/{MailViewChrome-HO-DgTY5.js → MailViewChrome-CyrIkwO-.js} +1 -1
- package/assets/MailboxPane-sVCHNXDC.js +1 -0
- package/assets/{NavMenuButton-DLvNMRhx.js → NavMenuButton-tjQzgXI6.js} +1 -1
- package/assets/{OnboardingWizard-BwiBwlF7.js → OnboardingWizard-DC3VOl45.js} +1 -1
- package/assets/OpenCalendarEvent-DIV9Zaoz.js +2 -0
- package/assets/OutboxPane-DYMpq8YL.js +1 -0
- package/assets/SignInAgain-BroDYbz-.js +1 -0
- package/assets/_calendarObjectId-vj5yYITL.js +1 -0
- package/assets/_mailboxId-Cd2gcjfj.js +1 -0
- package/assets/_messageId-CKLpxaGL.js +1 -0
- package/assets/_messageId-otRrahEY.js +1 -0
- package/assets/_messageId-r661xgv7.js +1 -0
- package/assets/_outboxMessageId-DDWh3QXk.js +1 -0
- package/assets/_recurrenceId-Dmg0Y1yT.js +1 -0
- package/assets/_threadId-CatNqDrS.js +1 -0
- package/assets/_threadId-CtFGotoc.js +1 -0
- package/assets/_threadId-bIsty-QI.js +1 -0
- package/assets/_view._date-DWJzo3Lb.js +1 -0
- package/assets/accounts-BnWAstqJ.js +1 -0
- package/assets/advanced-CO3uos8-.js +1 -0
- package/assets/{appearance-C5blyz0O.js → appearance-l54q8jn2.js} +1 -1
- package/assets/{attendee-row-CvGDzdA4.js → attendee-row-D2LMbq_7.js} +1 -1
- package/assets/{avatar-Bb8ScTir.js → avatar-BEy9bmfT.js} +1 -1
- package/assets/{bell-off-CS6Duk18.js → bell-off-o-5HqpFD.js} +1 -1
- package/assets/{bottom-sheet-B5cf6MWK.js → bottom-sheet-BQrIuUAp.js} +1 -1
- package/assets/{brief-sKxBiyAp.js → brief-BRyi3cpm.js} +1 -1
- package/assets/brief-CubStJH7.js +1 -0
- package/assets/{bug-BZRMWJ8e.js → bug-CiMAHRp3.js} +1 -1
- package/assets/calendar-CUTV9vSe.js +1 -0
- package/assets/{calendar-clash-strip-BFmDAwFK.js → calendar-clash-strip-BbznG7yo.js} +1 -1
- package/assets/{calendar-format-Dl_kGdpq.js → calendar-format-BZ1D5Ywu.js} +1 -1
- package/assets/{calendar-report-Dq8_JMmG.js → calendar-report-1ttmpioo.js} +1 -1
- package/assets/{calendar-suggestion-CRkDiioj.js → calendar-suggestion-DJ5uMZX8.js} +1 -1
- package/assets/{calendars-DbaCmJpW.js → calendars-Db5I-yCU.js} +1 -1
- package/assets/{card-BrGvFBtQ.js → card-BKgdv2bH.js} +1 -1
- package/assets/{checkbox-7X0zR8En.js → checkbox-p9mLPjVs.js} +1 -1
- package/assets/chevron-left-iD9K0p2O.js +1 -0
- package/assets/{circle-check-BAFZLxGj.js → circle-check-6Bb3NNZS.js} +1 -1
- package/assets/{circle-check-big-BpsV2KD8.js → circle-check-big-Cc1ertAI.js} +1 -1
- package/assets/{circle-help-BizC7pb0.js → circle-help-C0X0r4BQ.js} +1 -1
- package/assets/{clock-CPsIZ6zJ.js → clock-BDHe3TX8.js} +1 -1
- package/assets/compose._-_outboxMessageId_-BAjHEoO7.js +1 -0
- package/assets/compose._-_outboxMessageId_-BjU_oGCR.js +1 -0
- package/assets/compose._-_outboxMessageId_-C-wPU4AM.js +1 -0
- package/assets/compose._-_outboxMessageId_-OEkiz68p.js +1 -0
- package/assets/{config-import-Dx5GIogE.js → config-import-DH8GC5mw.js} +1 -1
- package/assets/{confirm-dialog-Cv8nzgk0.js → confirm-dialog-BmiOsB9N.js} +1 -1
- package/assets/{copy-CkXIeeHD.js → copy-B89b-33D.js} +1 -1
- package/assets/{credential-steps-BZUL46-x.js → credential-steps-CKcZdVNd.js} +1 -1
- package/assets/{download-C4etwdLI.js → download-53lT8mTP.js} +1 -1
- package/assets/external-link-NCezTZkT.js +1 -0
- package/assets/{file-json-DqsJ4xJs.js → file-json-ofsJkIbX.js} +1 -1
- package/assets/filters-aur8iSET.js +1 -0
- package/assets/flagged-Cr5tlDf5.js +1 -0
- package/assets/{flagged-DRgV59IG.js → flagged-gRZxDkLX.js} +1 -1
- package/assets/folders-17G_KhLm.js +1 -0
- package/assets/{help-copy-tJC0-ZMl.js → help-copy-CADUhLzQ.js} +1 -1
- package/assets/{import-CELB-bnR.js → import-CdvuJtNy.js} +1 -1
- package/assets/index-69yokqv5.js +1 -0
- package/assets/index-BDIVfNXM.js +293 -0
- package/assets/index-BFBfS7ek.js +1 -0
- package/assets/index-BRntGNJA.js +1 -0
- package/assets/{index-BhjCjLJw.js → index-BngpvrPX.js} +1 -1
- package/assets/{index-BtYEmjxr.css → index-C2Hz4y-Q.css} +1 -1
- package/assets/index-Cg4p98vB.js +1 -0
- package/assets/{index-BLTKJWNr.js → index-DDSpdJ8F.js} +8 -8
- package/assets/index-RmCPyEb8.js +1 -0
- package/assets/index-bYkeiMeC.js +1 -0
- package/assets/index-otRrahEY.js +1 -0
- package/assets/index-r661xgv7.js +1 -0
- package/assets/index-tN5HaTuq.js +1 -0
- package/assets/{kbd-lTvecOmZ.js → kbd-BTTdW6-z.js} +1 -1
- package/assets/{labels-DiA2JGmB.js → labels-DoKExISZ.js} +1 -1
- package/assets/mail--BAAD5Tl.js +1 -0
- package/assets/{mail-BxwAAW5X.js → mail-bV9GGVUQ.js} +1 -1
- package/assets/{map-pin-D6VMw4yS.js → map-pin-Bme-miZ2.js} +1 -1
- package/assets/{menu-BQKKG_dY.js → menu-DQ-pJ4eT.js} +1 -1
- package/assets/minus-kSr1dVnA.js +1 -0
- package/assets/{new-CJ6kSPRF.js → new-B4HXKzav.js} +1 -1
- package/assets/onboarding-Bsm3JVIj.js +1 -0
- package/assets/{onboarding-completion-BbqmDbx7.js → onboarding-completion-5Y5D9Jbr.js} +1 -1
- package/assets/outbox-BfHInRjp.js +1 -0
- package/assets/{pencil-DiRy6H7l.js → pencil-D3GOCGCB.js} +1 -1
- package/assets/{popover-menu-B4BMf6LK.js → popover-menu-BRPef6re.js} +1 -1
- package/assets/{refresh-cw-Bot6vhqM.js → refresh-cw-BQa9I63p.js} +1 -1
- package/assets/result-count-C11MdZzg.js +1 -0
- package/assets/{rich-text-BUR-C2Q6.js → rich-text-BxJPXURQ.js} +1 -1
- package/assets/{rich-text-spellcheck-worker-provider-CQ8rF4WA.js → rich-text-spellcheck-worker-provider-BL2Dc5f1.js} +1 -1
- package/assets/{rotate-ccw-gjLXKk9W.js → rotate-ccw-BzM31Pwc.js} +1 -1
- package/assets/{roving-focus-C3VQzsoq.js → roving-focus-DyhhSwbQ.js} +1 -1
- package/assets/{row-actions-_wAkj89Q.js → row-actions-BtiK9OA9.js} +1 -1
- package/assets/{search-mirror-a3wl8YKf.js → search-mirror-CJ0qbKsO.js} +1 -1
- package/assets/search-query-hRPzdZsl.js +1 -0
- package/assets/search-scope-UI1H6AzA.js +1 -0
- package/assets/{search-token-index-BwY3fr3v.js → search-token-index-C1Z6zA5N.js} +1 -1
- package/assets/{sections-DKODQMWX.js → sections-FEvJ4c2c.js} +1 -1
- package/assets/senders-DtHgpQ3C.js +1 -0
- package/assets/settings-DO0FWB3_.js +1 -0
- package/assets/{settings-screen-3GaT_yCl.js → settings-screen-B51b9lvj.js} +1 -1
- package/assets/{shield-check-t1RKp08F.js → shield-check-CgX3iFVl.js} +1 -1
- package/assets/suggested-vips-CZ7lFymc.js +1 -0
- package/assets/{suggestion._suggestionId-DSs2aOE3.js → suggestion._suggestionId-YuPshPzz.js} +1 -1
- package/assets/{undo-2-CjsdasNX.js → undo-2-DkaYLmdO.js} +1 -1
- package/assets/{useCalendarData-BNg59BCE.js → useCalendarData-BQoK5111.js} +1 -1
- package/assets/useCalendarFreeBusy-d-s_-0eR.js +1 -0
- package/assets/{useCalendarWrites-onNcOsh0.js → useCalendarWrites-xN5WbPCM.js} +1 -1
- package/assets/{useCalendars-LZefvRrA.js → useCalendars-CqOpDn21.js} +1 -1
- package/assets/{useDebouncedValue-WWRLD9R5.js → useDebouncedValue-CTq8lKtR.js} +1 -1
- package/assets/useFilters-Oiv4LZCZ.js +1 -0
- package/assets/{useLabels-C955uVg_.js → useLabels-DLtLZsv9.js} +1 -1
- package/assets/useLayoutTier-94OSKAiu.js +1 -0
- package/assets/useMessageBodyContent-BTmHg9m0.js +1 -0
- package/assets/{useQueries-jIdAkC8e.js → useQueries-DFq_6laq.js} +1 -1
- package/assets/useRefreshControl-DzEBgWRZ.js +1 -0
- package/assets/{useResultFolderIndex-CTrDyucm.js → useResultFolderIndex-DqH89sZ0.js} +1 -1
- package/assets/{useSearchTokenContext-CDbE53C_.js → useSearchTokenContext-BYEkwdSc.js} +3 -3
- package/assets/{useSignature-BqhqHAev.js → useSignature-V-VSVmYl.js} +1 -1
- package/assets/warnings-rdkIsd04.js +5 -0
- package/index.html +2 -2
- package/package.json +1 -1
- package/assets/BriefPane-DSaOlf0F.js +0 -1
- package/assets/CalendarComposePane-BU_sayZB.js +0 -1
- package/assets/MailListHeader-BFFGRKyg.js +0 -1
- package/assets/MailNav-DJlI7RmG.js +0 -1
- package/assets/MailShell-DWiQS--r.js +0 -1
- package/assets/MailboxPane-hAP08rcM.js +0 -1
- package/assets/OpenCalendarEvent-BnGbsK2W.js +0 -2
- package/assets/OutboxPane-BoLQds66.js +0 -1
- package/assets/_calendarObjectId-Dk6ypYk-.js +0 -1
- package/assets/_mailboxId-BI2fCYSk.js +0 -1
- package/assets/_messageId-BojdkbIt.js +0 -1
- package/assets/_messageId-Br63cxHP.js +0 -1
- package/assets/_messageId-CElscOOg.js +0 -1
- package/assets/_outboxMessageId-B-LOsBw2.js +0 -1
- package/assets/_recurrenceId-CVQPBnfp.js +0 -1
- package/assets/_threadId-CBcvsEMo.js +0 -1
- package/assets/_threadId-DYIW9tHx.js +0 -1
- package/assets/_threadId-DbH9GuNd.js +0 -1
- package/assets/_view._date-DzTM5JlS.js +0 -1
- package/assets/accounts-Dvrx4IYM.js +0 -1
- package/assets/advanced-CJg3p5Bv.js +0 -4
- package/assets/brief-BFYTJF86.js +0 -1
- package/assets/browser-ponyfill-GPT1caT6.js +0 -2
- package/assets/calendar-Bkx3aBLi.js +0 -1
- package/assets/chevron-left-BLnMK6Hm.js +0 -1
- package/assets/compose._-_outboxMessageId_-BmM1JqAv.js +0 -1
- package/assets/compose._-_outboxMessageId_-CXeMohJi.js +0 -1
- package/assets/compose._-_outboxMessageId_-ColAL-TU.js +0 -1
- package/assets/compose._-_outboxMessageId_-RC8PrqCU.js +0 -1
- package/assets/filters-vQ_2-kyd.js +0 -1
- package/assets/flagged-DseDsjLu.js +0 -1
- package/assets/folders-DyTauiz9.js +0 -1
- package/assets/index-B9DvuvdG.js +0 -1
- package/assets/index-BK6Ub1jz.js +0 -1
- package/assets/index-BWg_f2zC.js +0 -1
- package/assets/index-BojdkbIt.js +0 -1
- package/assets/index-CElscOOg.js +0 -1
- package/assets/index-DQGwT3GV.js +0 -1
- package/assets/index-DXKcs-mY.js +0 -1
- package/assets/index-KSHhd0R1.js +0 -1
- package/assets/index-_GSqQaV3.js +0 -1
- package/assets/index-owcFTp8Y.js +0 -294
- package/assets/mail-CBC7EsCL.js +0 -1
- package/assets/minus-6qNWLdn9.js +0 -1
- package/assets/onboarding-GJtMi48D.js +0 -1
- package/assets/outbox-B0H34lHj.js +0 -1
- package/assets/pane-header-Ca09EcL8.js +0 -1
- package/assets/search-query-Cr_ZXBCp.js +0 -1
- package/assets/search-scope-B5-OK3Cq.js +0 -1
- package/assets/senders-Dpwg8Gn7.js +0 -1
- package/assets/settings-CasU94x9.js +0 -1
- package/assets/suggested-vips-CAHDehKY.js +0 -1
- package/assets/useCalendarFreeBusy-ClOpmxzB.js +0 -1
- package/assets/useFilters-1hN5d4xr.js +0 -1
- package/assets/useLayoutTier-A889tOk-.js +0 -1
- package/assets/useMessageBodyContent-C6R-iTkz.js +0 -1
- package/assets/useRefreshControl-DT4gm04X.js +0 -1
- package/assets/useSemanticSearch-CX-jW79N.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as m}from"./index-
|
|
1
|
+
import{r as m}from"./index-BDIVfNXM.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-CqOpDn21.js";import{x as y,I as L}from"./calendar-format-BZ1D5Ywu.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-BDIVfNXM.js";import{c as _,R as F,C as B}from"./calendar-format-BZ1D5Ywu.js";import{M as C}from"./mail-bV9GGVUQ.js";import{G as A}from"./map-pin-Bme-miZ2.js";import{S as W}from"./useLayoutTier-94OSKAiu.js";import{u as G}from"./useQueries-DFq_6laq.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,
|
|
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-BDIVfNXM.js";import{f as I}from"./ErrorState-BVvZa9Hj.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,
|
|
1
|
+
import{c as T,eH as h,r as N}from"./index-BDIVfNXM.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-
|
|
1
|
+
import{r as o}from"./index-BDIVfNXM.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-BDIVfNXM.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,
|
|
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-BDIVfNXM.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-BDIVfNXM.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-BDIVfNXM.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{
|
|
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-BDIVfNXM.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-BDIVfNXM.js";import{C as Y}from"./circle-check-big-Cc1ertAI.js";import{R as Z}from"./refresh-cw-BQa9I63p.js";import{u as L}from"./useQueries-DFq_6laq.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{
|
|
1
|
+
import{N as r,r as s,bZ as t}from"./index-BDIVfNXM.js";import{u as m}from"./useQueries-DFq_6laq.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{
|
|
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-BDIVfNXM.js";import{K as O}from"./kbd-BTTdW6-z.js";import{B as Ee,b as Ae}from"./useMessageBodyContent-BTmHg9m0.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,
|
|
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,
|
|
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-BDIVfNXM.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-BDIVfNXM.js";import{S as q}from"./settings-screen-B51b9lvj.js";import{f as B}from"./ErrorState-BVvZa9Hj.js";import{C as D}from"./copy-B89b-33D.js";import{E as U}from"./external-link-NCezTZkT.js";import{B as h}from"./bug-CiMAHRp3.js";import{C as S}from"./circle-check-6Bb3NNZS.js";import{S as F}from"./SignInAgain-BroDYbz-.js";import{u as G}from"./useResultFolderIndex-DqH89sZ0.js";import{w as H}from"./help-copy-CADUhLzQ.js";import"./avatar-BEy9bmfT.js";import"./chevron-left-iD9K0p2O.js";import"./menu-DQ-pJ4eT.js";import"./circle-help-C0X0r4BQ.js";import"./useQueries-DFq_6laq.js";import"./kbd-BTTdW6-z.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-
|
|
42
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
41
|
+
<script type="module" crossorigin src="/assets/index-BDIVfNXM.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 +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};
|