@remit/web-client-dist 0.0.482 → 0.0.484

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/assets/BriefPane-B0KBzQuZ.js +1 -0
  2. package/assets/CalendarShell-DiHVNp99.js +1 -0
  3. package/assets/EmptyState-UvGe1EeC.js +1 -0
  4. package/assets/{ErrorState-4TfgxGLk.js → ErrorState-CAnJL03M.js} +1 -1
  5. package/assets/{FlaggedPane-B7mltHsE.js → FlaggedPane-DGC2GNsv.js} +1 -1
  6. package/assets/FullCompose-IMseQRR2.js +1 -0
  7. package/assets/MailListHeader-Cy_Ht48G.js +7 -0
  8. package/assets/MailNav-Bv_G4-oS.js +1 -0
  9. package/assets/MailShell-COCm38YA.js +1 -0
  10. package/assets/MailViewChrome-DlOr26H7.js +1 -0
  11. package/assets/MailboxPane-DwuKQYFt.js +1 -0
  12. package/assets/{NavMenuButton-n2Am7T-q.js → NavMenuButton-dxatXE13.js} +1 -1
  13. package/assets/{OnboardingWizard-BtlDSuHk.js → OnboardingWizard-t43IR5PY.js} +1 -1
  14. package/assets/OpenCalendarEvent-NhiEXYbP.js +1 -0
  15. package/assets/OutboxPane-DOrPD9P7.js +1 -0
  16. package/assets/_calendarObjectId-DAcewNpx.js +1 -0
  17. package/assets/_mailboxId-Bt6fnudz.js +1 -0
  18. package/assets/_messageId-BQlExVhe.js +1 -0
  19. package/assets/_messageId-D7ZHttPG.js +1 -0
  20. package/assets/_messageId-Dhp39H7M.js +1 -0
  21. package/assets/_outboxMessageId-d3xRa2gJ.js +1 -0
  22. package/assets/_recurrenceId-BmBQp5Uj.js +1 -0
  23. package/assets/_threadId-Bb5cGA_V.js +1 -0
  24. package/assets/_threadId-DwJxLhud.js +1 -0
  25. package/assets/_threadId-a8LS2Sxz.js +1 -0
  26. package/assets/_view._date-BpOwYGtZ.js +1 -0
  27. package/assets/accounts-DV7mtNnR.js +1 -0
  28. package/assets/{advanced-DtxZPECw.js → advanced-Dt6ijNCJ.js} +3 -3
  29. package/assets/appearance-k4hKZB94.js +1 -0
  30. package/assets/attachment-file-DbWeTMZB.js +1 -0
  31. package/assets/{avatar-G7g9Uwvc.js → avatar-aQ-i0c9h.js} +1 -1
  32. package/assets/bottom-sheet-Nsv1BTPs.js +1 -0
  33. package/assets/brief-CT44IQNg.js +1 -0
  34. package/assets/{brief-BcQPVd1X.js → brief-N5u-4bV6.js} +1 -1
  35. package/assets/browser-ponyfill-DH36f5af.js +2 -0
  36. package/assets/{bug-Dj9DPa4Y.js → bug-f2vZx0DC.js} +1 -1
  37. package/assets/calendar-DQ_pDi5k.js +1 -0
  38. package/assets/calendar-VGNPXUIf.js +1 -0
  39. package/assets/calendar-days-BV8DVXFr.js +1 -0
  40. package/assets/card-C_fbn_xs.js +1 -0
  41. package/assets/chevron-left-BpXfEZvy.js +1 -0
  42. package/assets/circle-check-CaBAHNKP.js +1 -0
  43. package/assets/{circle-check-big-SYJDr4tY.js → circle-check-big-CZ-eq6v_.js} +1 -1
  44. package/assets/{circle-help-BoGPc17x.js → circle-help-C65X6HVk.js} +1 -1
  45. package/assets/clock-C52S89qh.js +1 -0
  46. package/assets/compose._-_outboxMessageId_-BhcfH_fJ.js +1 -0
  47. package/assets/compose._-_outboxMessageId_-BswWJ2pH.js +1 -0
  48. package/assets/compose._-_outboxMessageId_-CBxw2CpE.js +1 -0
  49. package/assets/compose._-_outboxMessageId_-Det9tyml.js +1 -0
  50. package/assets/{config-import-1pqti4UQ.js → config-import-k3z94h3h.js} +1 -1
  51. package/assets/confirm-dialog-2aSA9qiE.js +1 -0
  52. package/assets/{credential-steps-BNmmF6YJ.js → credential-steps-GqgQMgJA.js} +1 -1
  53. package/assets/download-txuU7MbW.js +1 -0
  54. package/assets/filters-BWRkJO-Y.js +1 -0
  55. package/assets/{flagged-uZGUg7Dw.js → flagged-BUOMxJew.js} +1 -1
  56. package/assets/flagged-wNkV-jrJ.js +1 -0
  57. package/assets/folders-CF9AGU0J.js +1 -0
  58. package/assets/{format-BSk7Do06.js → format-QaqPDrCb.js} +1 -1
  59. package/assets/{help-copy-D6t16AP5.js → help-copy-BBuZerqp.js} +1 -1
  60. package/assets/import-B-UC9jpm.js +1 -0
  61. package/assets/index-65ZIXZu1.js +1 -0
  62. package/assets/{index-FpwHnbdV.js → index-7WhVkt7M.js} +64 -64
  63. package/assets/index-BOobI9qc.js +1 -0
  64. package/assets/index-Bs8uOIct.js +1 -0
  65. package/assets/index-CriSL7dl.js +1 -0
  66. package/assets/index-D2ENUB8I.js +1 -0
  67. package/assets/index-D5ceUIqR.js +1 -0
  68. package/assets/index-D7ZHttPG.js +1 -0
  69. package/assets/index-DJr7UinF.js +1 -0
  70. package/assets/index-Dhp39H7M.js +1 -0
  71. package/assets/index-Dz_5J1nP.js +1 -0
  72. package/assets/{index-CYwsmjFx.js → index-g6PsUOwB.js} +6 -6
  73. package/assets/kbd-Blpb6p4I.js +1 -0
  74. package/assets/labels-19YeerIG.js +1 -0
  75. package/assets/mail-DInNKuOk.js +1 -0
  76. package/assets/mail-zcNit_1Z.js +1 -0
  77. package/assets/menu-NvMuVQf5.js +1 -0
  78. package/assets/minus-BqLBKzSS.js +1 -0
  79. package/assets/new-Bbh5OjM_.js +1 -0
  80. package/assets/onboarding-QJez2goy.js +1 -0
  81. package/assets/onboarding-completion-feFvG1L1.js +1 -0
  82. package/assets/outbox-DG129LTh.js +1 -0
  83. package/assets/{pencil-DSzm4tGc.js → pencil-wmLgIhBO.js} +1 -1
  84. package/assets/{rich-text-Bi1khhyl.js → rich-text-BHFIk94q.js} +1 -1
  85. package/assets/{rich-text-spellcheck-worker-provider-vLdWVTOw.js → rich-text-spellcheck-worker-provider-8DntMN8J.js} +1 -1
  86. package/assets/rotate-ccw-DjWvpIZA.js +1 -0
  87. package/assets/{row-actions-DgziqjAx.js → row-actions-D3jp8z0N.js} +1 -1
  88. package/assets/search-mirror-BBsxJhr4.js +1 -0
  89. package/assets/{search-scope-DTcpOp3S.js → search-scope-B5-OK3Cq.js} +1 -1
  90. package/assets/search-token-index-D-muOZ-w.js +1 -0
  91. package/assets/sections-B8yJpCeU.js +1 -0
  92. package/assets/senders-C4P4WKrC.js +1 -0
  93. package/assets/settings-BKplijMG.js +1 -0
  94. package/assets/settings-screen-BAI2nwSy.js +1 -0
  95. package/assets/shield-check-BgZEq_2J.js +1 -0
  96. package/assets/{suggested-vips-CtCLsdy6.js → suggested-vips-DQDbWVIf.js} +1 -1
  97. package/assets/useCalendarData-CfCX2j35.js +1 -0
  98. package/assets/{useDebouncedValue-DU11pzlc.js → useDebouncedValue-BF4A-4yY.js} +1 -1
  99. package/assets/{useFilters-BBJu_93Q.js → useFilters-Dfjuaw2L.js} +1 -1
  100. package/assets/useLabels-C-lZfH7h.js +1 -0
  101. package/assets/useLayoutTier-Duo8ab9v.js +1 -0
  102. package/assets/useMessageBodyContent-D95NweJD.js +1 -0
  103. package/assets/useQueries-DhlFZnWS.js +1 -0
  104. package/assets/useRefreshControl-BA9qVZYV.js +1 -0
  105. package/assets/{useSearchTokenContext-DH5XswlU.js → useSearchTokenContext-DhiDMu0P.js} +4 -4
  106. package/assets/useSemanticSearch-DusT5GR1.js +1 -0
  107. package/assets/{useSignature-HAuR6_Ul.js → useSignature-DD4NErhS.js} +1 -1
  108. package/index.html +1 -1
  109. package/package.json +1 -1
  110. package/assets/BriefPane-CfitNMEu.js +0 -1
  111. package/assets/FullCompose-0DIPCtd6.js +0 -1
  112. package/assets/MailListHeader-Brjq4vBE.js +0 -7
  113. package/assets/MailShell-CvGuWCuj.js +0 -1
  114. package/assets/MailViewChrome-C7sCKY-n.js +0 -1
  115. package/assets/MailboxPane-COHQn6Yb.js +0 -1
  116. package/assets/OutboxPane-C-_EQFRO.js +0 -1
  117. package/assets/_mailboxId-Bqbp7c9M.js +0 -1
  118. package/assets/_messageId-BAluf3UO.js +0 -1
  119. package/assets/_messageId-CHs89GPR.js +0 -1
  120. package/assets/_messageId-Ctd9_Bl1.js +0 -1
  121. package/assets/_outboxMessageId-_2jJC1Qb.js +0 -1
  122. package/assets/_threadId-BYyW8ujt.js +0 -1
  123. package/assets/_threadId-BrgLQ-Pl.js +0 -1
  124. package/assets/_threadId-C9FCiXzy.js +0 -1
  125. package/assets/accounts-D3L3nj2z.js +0 -1
  126. package/assets/appearance-OV39hcLF.js +0 -1
  127. package/assets/attachment-file-ul58bxI4.js +0 -1
  128. package/assets/bottom-sheet-B6YVIwAN.js +0 -1
  129. package/assets/brief-Bc68FlBf.js +0 -1
  130. package/assets/browser-ponyfill-DXnwXxSp.js +0 -2
  131. package/assets/card-B1IEp2-a.js +0 -1
  132. package/assets/circle-check-CsnMhxDa.js +0 -1
  133. package/assets/clock-C2olBfsH.js +0 -1
  134. package/assets/compose._-_outboxMessageId_-C_qZJ56q.js +0 -1
  135. package/assets/compose._-_outboxMessageId_-DKWODs5S.js +0 -1
  136. package/assets/compose._-_outboxMessageId_-DwRvAUq2.js +0 -1
  137. package/assets/compose._-_outboxMessageId_-mWQ2SoXJ.js +0 -1
  138. package/assets/confirm-dialog-B4KJVTQx.js +0 -1
  139. package/assets/download-vw3zYEkx.js +0 -1
  140. package/assets/filters-BmW8kKxW.js +0 -1
  141. package/assets/flagged-R318UqUZ.js +0 -1
  142. package/assets/folders-CkYvGGkZ.js +0 -1
  143. package/assets/import-CNvHrBcn.js +0 -1
  144. package/assets/index-2Vc2Ycg0.js +0 -1
  145. package/assets/index-BBBVjIQK.js +0 -1
  146. package/assets/index-CAPjLYZ5.js +0 -1
  147. package/assets/index-CHs89GPR.js +0 -1
  148. package/assets/index-COugriit.js +0 -1
  149. package/assets/index-Ctd9_Bl1.js +0 -1
  150. package/assets/index-D93knX1J.js +0 -1
  151. package/assets/index-N1RMrj2-.js +0 -1
  152. package/assets/kbd-tXno4rYH.js +0 -1
  153. package/assets/labels-D8dMllXL.js +0 -1
  154. package/assets/mail-CFC6XnIq.js +0 -1
  155. package/assets/mail-DmVe7n1g.js +0 -1
  156. package/assets/menu-B-aaGy7K.js +0 -1
  157. package/assets/onboarding-completion-YE4GukFN.js +0 -1
  158. package/assets/onboarding-vJtatS1N.js +0 -1
  159. package/assets/outbox-C9Rxk-WO.js +0 -1
  160. package/assets/rotate-ccw-CwLIBdgY.js +0 -1
  161. package/assets/search-mirror-B2LoSoNR.js +0 -1
  162. package/assets/search-token-index-C9KNJC5_.js +0 -1
  163. package/assets/sections-DDQm-Sbc.js +0 -1
  164. package/assets/senders-BWTk7Fqx.js +0 -1
  165. package/assets/settings-B4qmCAFR.js +0 -1
  166. package/assets/settings-screen-m0Uy9zlo.js +0 -1
  167. package/assets/shield-check-Cs0C_oxK.js +0 -1
  168. package/assets/useLabels-GtiakPKP.js +0 -1
  169. package/assets/useMessageBodyContent-BOBb68Px.js +0 -1
  170. package/assets/useQueries-Dx2PHSps.js +0 -1
  171. package/assets/useRefreshControl-CWjutjgw.js +0 -1
  172. package/assets/useSemanticSearch-CZUtmciE.js +0 -1
@@ -1,4 +1,4 @@
1
- import{cp as V,r as g,j as a,p as b,I as Q,u as Y,ar as q,f as X,at as Z,cF as J,bD as ee,P as te,t as se,X as re,bS as R,Q as ne,c5 as ae}from"./index-FpwHnbdV.js";import{K as k}from"./kbd-tXno4rYH.js";import{B as oe,d as ie}from"./useMessageBodyContent-BOBb68Px.js";import{i as ce}from"./search-scope-DTcpOp3S.js";const le=(e,t)=>{const r=e==="newsletter"||e==="marketing"||t;return{framed:r,isPlain:!r}},de=()=>`
1
+ import{cc as V,r as g,j as a,t as b,I as Q,h as Y,as as q,i as X,au as Z,cu as J,bE as ee,aa as te,_ as se,X as re,cJ as R,C as ne,c4 as ae}from"./index-7WhVkt7M.js";import{K as k}from"./kbd-Blpb6p4I.js";import{B as oe,b as ie}from"./useMessageBodyContent-D95NweJD.js";import{i as ce}from"./search-scope-B5-OK3Cq.js";const le=(e,t)=>{const r=e==="newsletter"||e==="marketing"||t;return{framed:r,isPlain:!r}},de=()=>`
2
2
  /* Zero the UA default body margin and clamp the document to the iframe width so
3
3
  wide author markup can't push the body (and the page) past the viewport. */
4
4
  html, body {
@@ -53,14 +53,14 @@ pre, code {
53
53
  :is(pre, code, pre *, code *):is([nowrap], [style*="nowrap" i]) {
54
54
  white-space: pre-wrap !important;
55
55
  }
56
- `,ue=e=>{const t=new Map;for(const s of e){if(!s.contentId||s.contentUrl.length===0)continue;const r=s.contentId.replace(/^<|>$/g,"");t.set(r,s.contentUrl)}return s=>t.get(s.replace(/^<|>$/g,""))},me=/^(none|transparent|inherit|initial|unset)\s*$/i,_=e=>{const t=[],s=/<style[^>]*>([\s\S]*?)<\/style>/gi;let r;for(r=s.exec(e);r!==null;)t.push(r[1]),r=s.exec(e);return t},fe=e=>{const t=/background(?:-color)?\s*:\s*([^;}\n]+)/gi;let s;for(s=t.exec(e);s!==null;){const r=s[1].trim();if(!me.test(r))return!0;s=t.exec(e)}return!1},he=e=>{if(/\bstyle\s*=\s*["'][^"']*background/i.test(e)||/\bbgcolor\s*=/i.test(e))return!0;for(const t of _(e))if(fe(t))return!0;return!1},ge=new Set(["auto","none","initial","inherit","unset","revert","revert-layer"]),pe=new RegExp(`(?<![-\\w])(?:padding|margin)(?:-(top|right|bottom|left|block|inline)(?:-(?:start|end))?)?\\s*:\\s*([^;}"']+)`,"gi"),be=new Set(["top","bottom","block"]),B=e=>e.replace(/\/\*[\s\S]*?\*\//g,""),E=e=>{const t=e.toLowerCase();if(!t||ge.has(t)||t.startsWith("-"))return!1;const s=/^\+?(\d*\.?\d+)[a-z%]*$/.exec(t);return s?Number.parseFloat(s[1])!==0:!0},ye=e=>{const t=e.split(/\s+/).filter(Boolean);return t.length<2?t:t.length<4?[t[1]]:[t[1],t[3]]},xe=(e,t)=>{if(e&&be.has(e))return!1;const s=t.replace(/!\s*important/gi,"").trim();return s?e?s.split(/\s+/).some(E):ye(s).some(E):!1},T=e=>{for(const t of B(e).matchAll(pe))if(xe(t[1],t[2]))return!0;return!1},I=new Set(["blockquote"]),we=e=>e.replace(/<!--[\s\S]*?-->/g,""),ve=e=>{const t=[],s=/<([a-zA-Z][\w:-]*)((?:"[^"]*"|'[^']*'|[^>"'])*)>/g,r=/\bstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;for(const[,n,o]of e.matchAll(s))for(const l of o.matchAll(r))t.push({tag:n.toLowerCase(),style:l[1]??l[2]??""});return t},ke=e=>[...B(e).matchAll(/([^{}]*)\{([^{}]*)\}/g)].map(t=>({selector:t[1].trim(),body:t[2]})),Se=e=>{const t=e.trim().split(/[\s>+~]+/).pop()??"";return(/^[a-zA-Z][\w-]*/.exec(t)?.[0]??"").toLowerCase()},Ae=e=>e.split(",").every(t=>I.has(Se(t))),Ee=e=>{const t=_(e),s=we(e);if(/\bcellpadding\s*=\s*["']?(?!0["'\s>])\d/i.test(s))return!0;for(const{tag:r,style:n}of ve(s))if(!I.has(r)&&T(n))return!0;for(const r of t)for(const n of ke(r))if(!Ae(n.selector)&&T(n.body))return!0;return!1},Te=["script","iframe","object","embed","form","input","button","textarea","select","meta","link","base"],Ne=["onerror","onload","onclick","onmouseover","onmouseout","onfocus","onblur","onsubmit","onkeydown","onkeyup","formaction","xlink:href","data-bind"],Ce="data:image/svg+xml,"+encodeURIComponent(`
56
+ `,ue=e=>{const t=new Map;for(const s of e){if(!s.contentId||s.contentUrl.length===0)continue;const r=s.contentId.replace(/^<|>$/g,"");t.set(r,s.contentUrl)}return s=>t.get(s.replace(/^<|>$/g,""))},me=/^(none|transparent|inherit|initial|unset)\s*$/i,_=e=>{const t=[],s=/<style[^>]*>([\s\S]*?)<\/style>/gi;let r;for(r=s.exec(e);r!==null;)t.push(r[1]),r=s.exec(e);return t},fe=e=>{const t=/background(?:-color)?\s*:\s*([^;}\n]+)/gi;let s;for(s=t.exec(e);s!==null;){const r=s[1].trim();if(!me.test(r))return!0;s=t.exec(e)}return!1},he=e=>{if(/\bstyle\s*=\s*["'][^"']*background/i.test(e)||/\bbgcolor\s*=/i.test(e))return!0;for(const t of _(e))if(fe(t))return!0;return!1},ge=new Set(["auto","none","initial","inherit","unset","revert","revert-layer"]),pe=new RegExp(`(?<![-\\w])(?:padding|margin)(?:-(top|right|bottom|left|block|inline)(?:-(?:start|end))?)?\\s*:\\s*([^;}"']+)`,"gi"),be=new Set(["top","bottom","block"]),B=e=>e.replace(/\/\*[\s\S]*?\*\//g,""),E=e=>{const t=e.toLowerCase();if(!t||ge.has(t)||t.startsWith("-"))return!1;const s=/^\+?(\d*\.?\d+)[a-z%]*$/.exec(t);return s?Number.parseFloat(s[1])!==0:!0},ye=e=>{const t=e.split(/\s+/).filter(Boolean);return t.length<2?t:t.length<4?[t[1]]:[t[1],t[3]]},xe=(e,t)=>{if(e&&be.has(e))return!1;const s=t.replace(/!\s*important/gi,"").trim();return s?e?s.split(/\s+/).some(E):ye(s).some(E):!1},T=e=>{for(const t of B(e).matchAll(pe))if(xe(t[1],t[2]))return!0;return!1},I=new Set(["blockquote"]),we=e=>e.replace(/<!--[\s\S]*?-->/g,""),ve=e=>{const t=[],s=/<([a-zA-Z][\w:-]*)((?:"[^"]*"|'[^']*'|[^>"'])*)>/g,r=/\bstyle\s*=\s*(?:"([^"]*)"|'([^']*)')/gi;for(const[,n,o]of e.matchAll(s))for(const l of o.matchAll(r))t.push({tag:n.toLowerCase(),style:l[1]??l[2]??""});return t},ke=e=>[...B(e).matchAll(/([^{}]*)\{([^{}]*)\}/g)].map(t=>({selector:t[1].trim(),body:t[2]})),Ae=e=>{const t=e.trim().split(/[\s>+~]+/).pop()??"";return(/^[a-zA-Z][\w-]*/.exec(t)?.[0]??"").toLowerCase()},Se=e=>e.split(",").every(t=>I.has(Ae(t))),Ee=e=>{const t=_(e),s=we(e);if(/\bcellpadding\s*=\s*["']?(?!0["'\s>])\d/i.test(s))return!0;for(const{tag:r,style:n}of ve(s))if(!I.has(r)&&T(n))return!0;for(const r of t)for(const n of ke(r))if(!Se(n.selector)&&T(n.body))return!0;return!1},Te=["script","iframe","object","embed","form","input","button","textarea","select","meta","link","base"],Ce=["onerror","onload","onclick","onmouseover","onmouseout","onfocus","onblur","onsubmit","onkeydown","onkeyup","formaction","xlink:href","data-bind"],Ne="data:image/svg+xml,"+encodeURIComponent(`
57
57
  <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100">
58
58
  <rect fill="#f0f0f0" width="100" height="100"/>
59
59
  <text x="50" y="50" text-anchor="middle" dy=".3em" fill="#999" font-size="12">
60
60
  Image blocked
61
61
  </text>
62
62
  </svg>
63
- `),je=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Le=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Re=(e={})=>{const t=V(),s={FORBID_TAGS:Te,FORBID_ATTR:Ne,ALLOW_DATA_ATTR:!1,ALLOW_UNKNOWN_PROTOCOLS:!1};return t.addHook("afterSanitizeAttributes",r=>{if(r.tagName==="IMG"){const n=r.getAttribute("src")||"";if(n.startsWith("data:"))return;if(n.startsWith("cid:")){const l=n.slice(4).replace(/^<|>$/g,""),m=e.resolveCid?.(l);m&&(r.setAttribute("src",m),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",Ce),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",je(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=Le(o)}}),r=>{const n=he(r),o=Ee(r),l=t.sanitize(r,s);return{html:`<style>${de()}</style>${l}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},_e='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',v={light:{fg:"oklch(0.3 0.025 235)",canvas:"oklch(0.96 0.015 90)",accent:"oklch(0.55 0.14 150)"},dark:{fg:"oklch(0.88 0.02 90)",canvas:"oklch(0.22 0.025 220)",accent:"oklch(0.78 0.16 150)"}},Be={background:!1,spacing:!1},Ie="16px",Me=()=>`html{padding:0}body{padding:${Ie};box-sizing:border-box}`,Oe=()=>"html{overflow:hidden}body{overflow-x:auto}",De=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,$e='<meta name="viewport" content="width=device-width, initial-scale=1">',ze=e=>{const t=e?v.dark:v.light;return`
63
+ `),je=e=>e.replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Le=e=>e.replace(/@import[^;]*;/gi,"/* @import blocked */").replace(/url\s*\([^)]*\)/gi,"none").replace(/expression\s*\([^)]*\)/gi,"").replace(/-moz-binding\s*:[^;]*/gi,""),Re=(e={})=>{const t=V(),s={FORBID_TAGS:Te,FORBID_ATTR:Ce,ALLOW_DATA_ATTR:!1,ALLOW_UNKNOWN_PROTOCOLS:!1};return t.addHook("afterSanitizeAttributes",r=>{if(r.tagName==="IMG"){const n=r.getAttribute("src")||"";if(n.startsWith("data:"))return;if(n.startsWith("cid:")){const l=n.slice(4).replace(/^<|>$/g,""),m=e.resolveCid?.(l);m&&(r.setAttribute("src",m),r.classList.add("inline-content"));return}e.allowExternalImages||(r.setAttribute("data-blocked-src",n),r.setAttribute("src",Ne),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",je(n))}}),t.addHook("uponSanitizeElement",(r,n)=>{if(n.tagName==="style"){const o=r.textContent||"";r.textContent=Le(o)}}),r=>{const n=he(r),o=Ee(r),l=t.sanitize(r,s);return{html:`<style>${de()}</style>${l}`,hasAuthorBackground:n,hasAuthorSpacing:o}}},_e='"Geist Variable", "Geist", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',v={light:{fg:"oklch(0.3 0.025 235)",canvas:"oklch(0.96 0.015 90)",accent:"oklch(0.55 0.14 150)"},dark:{fg:"oklch(0.88 0.02 90)",canvas:"oklch(0.22 0.025 220)",accent:"oklch(0.78 0.16 150)"}},Be={background:!1,spacing:!1},Ie="16px",Me=()=>`html{padding:0}body{padding:${Ie};box-sizing:border-box}`,Oe=()=>"html{overflow:hidden}body{overflow-x:auto}",$e=/prefers-color-scheme\s*:\s*dark|color-scheme\s*:\s*[^;}"']*\bdark\b/i,De='<meta name="viewport" content="width=device-width, initial-scale=1">',ze=e=>{const t=e?v.dark:v.light;return`
64
64
  /* Plain-email base: UI font-stack + theme-aware colors (#424) */
65
65
  html, body {
66
66
  font-family: ${_e};
@@ -81,4 +81,4 @@ a, a:visited {
81
81
  color: ${t.accent} !important;
82
82
  text-decoration: underline;
83
83
  }
84
- `},A="invert(0.92) hue-rotate(180deg)",N=`img,picture,video,svg,canvas,[style*='background-image'],[background]{filter:${A}}`,Pe=(e,t,s)=>{const r=e?v.dark.canvas:v.light.canvas;return s?e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:#ffffff;filter:${A}}body{margin:0}${N}`:"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:${A}}${N}`:`html,body{margin:0;background-color:${r};color-scheme:light}`},Ke=(e,t,s,r=Be)=>{const n=t==="plain"?ze(s):Pe(s,De.test(e),r.background),o=r.spacing?"":Me();return`${$e}<style>${n}</style>${e}<style>${Oe()}${o}</style>`},Fe=5e4,He="allow-same-origin allow-popups allow-popups-to-escape-sandbox",Ue=(e,t,s)=>Math.min(Math.ceil(Math.max(e,t)),s),Ge=new Set(["Enter","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]),We=e=>e===" "?!1:e.length===1?!0:Ge.has(e),S=e=>{if(e.metaKey||e.ctrlKey||e.altKey||!We(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}))},C=({html:e,variant:t="framed",isDark:s=!1,declares:r,className:n})=>{const o=g.useRef(null),[l,m]=g.useState(0),d=g.useMemo(()=>Ke(e,t,s,r),[e,t,s,r]);return g.useEffect(()=>{const c=o.current;if(!c)return;const f=()=>{const i=c.contentDocument;if(!i?.body)return;const x=i.documentElement,y=Ue(i.body.scrollHeight,x?.scrollHeight??0,Fe);m(w=>w===y?w:y)};let u,h;const p=()=>{f(),u?.disconnect(),u=void 0,h?.removeEventListener("keydown",S),h?.removeEventListener("load",f,!0),h=void 0;const i=c.contentDocument;i?.body&&(u=new ResizeObserver(f),u.observe(i.body),i.documentElement&&u.observe(i.documentElement),i.addEventListener("load",f,!0),i.fonts?.ready.then(f),i.addEventListener("keydown",S),h=i)};return c.addEventListener("load",p),()=>{c.removeEventListener("load",p),h?.removeEventListener("keydown",S),h?.removeEventListener("load",f,!0),u?.disconnect()}},[]),a.jsx("iframe",{ref:o,title:"Email content",sandbox:He,srcDoc:d,className:n,style:{width:"100%",border:"none",display:"block",height:l===0?"1px":`${l}px`,colorScheme:"normal"}})},j=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),vt=({className:e,children:t})=>a.jsx("div",{className:b("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),Ve=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:l,renderBlockedNotice:m})=>{const d=g.useMemo(()=>!e||typeof document>"u"?null:Re({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),c=d?.html??null,{framed:f,isPlain:u}=le(r,d?.hasAuthorBackground??!1),h=g.useMemo(()=>({background:d?.hasAuthorBackground??!1,spacing:d?.hasAuthorSpacing??!1}),[d?.hasAuthorBackground,d?.hasAuthorSpacing]),p=g.useMemo(()=>!c||n?0:(c.match(/data-blocked-src/g)||[]).length,[c,n]);return!c&&!t?a.jsx("div",{className:b("message-body",l),children:a.jsx(j,{})}):a.jsxs("div",{className:b("message-body",l),children:[p>0&&a.jsx("div",{children:m?.(p)}),c?a.jsx("div",{className:"message-body-frame",children:f?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(C,{html:c,variant:"framed",isDark:s,declares:h})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(C,{html:c,variant:u?"plain":"framed",isDark:s,declares:h})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(j,{})]})};function kt({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:b("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(Q,{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(k,{children:"j"})," / ",a.jsx(k,{children:"k"})," to move, ",a.jsx(k,{children:"Enter"})," to open"]})]})}function M(e){const t=[];let s=-1,r=!1;for(let n=0;n<e.length;n++){const o=e[n];if(o==='"'){r=!r,s<0&&(s=n);continue}if(!r&&/\s/.test(o)){s>=0&&t.push({raw:e.slice(s,n),start:s,end:n}),s=-1;continue}s<0&&(s=n)}return s>=0&&t.push({raw:e.slice(s),start:s,end:e.length}),t}const Qe=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function Ye(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:Qe(s),rawValue:s}}const qe=e=>/[\s"]/.test(e),Xe=e=>qe(e)?`"${e.replace(/"/g,"")}"`:e,St=(e,t)=>`${e}:${Xe(t)}`,O=(e,t=Date.now())=>({value:e,setAt:t}),Ze=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=O(!0,r):delete n.trusted,{...e,flags:n}},Je=(e,t,s,r)=>{const n=o=>o.map(l=>Ze(l,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)}}},et=({messageId:e})=>{const t=Y(),{pushError:s}=q(),{mutate:r,isPending:n,error:o,reset:l}=X({...ee(),onMutate:async d=>{const c=d.path.addressId,u=d.body.flags?.trusted?.value===!0,h=J({path:{messageId:e}});await t.cancelQueries({queryKey:h});const p=t.getQueriesData({queryKey:h}).filter(i=>i[1]!==void 0).map(([i,x])=>({queryKey:i,data:x}));return t.setQueriesData({queryKey:h},i=>i&&Je(i,c,u)),{describePrefix:h,previous:p}},onError:(d,c,f)=>{if(f)for(const u of f.previous)t.setQueryData(u.queryKey,u.data);s(Z("Couldn't trust sender","The change wasn't saved.",d))},onSettled:(d,c,f,u)=>{u&&t.invalidateQueries({queryKey:u.describePrefix})}});return{toggleTrusted:(d,c)=>{r({path:{addressId:d},body:{flags:{trusted:O(!c)}}})},isPending:n,error:o,reset:l}},tt=()=>{const[e,t]=g.useState(()=>typeof document<"u"&&document.documentElement.classList.contains("dark"));return g.useEffect(()=>{const s=document.documentElement,r=new MutationObserver(()=>{t(s.classList.contains("dark"))});return r.observe(s,{attributes:!0,attributeFilter:["class"]}),()=>r.disconnect()},[]),e},st=({blockedImageCount:e,canAlwaysTrust:t,isTrustPending:s,onLoadOnce:r,onAlwaysTrust:n})=>a.jsxs("div",{className:"mb-3 flex items-center justify-between rounded-md bg-surface-sunken/50 px-3 py-2 text-sm",children:[a.jsxs("span",{className:"text-fg-muted",children:[e," image",e>1?"s":""," blocked for privacy"]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("button",{type:"button",onClick:r,className:"text-accent hover:underline",children:"Load once"}),t&&a.jsx("button",{type:"button",onClick:n,"aria-busy":s,className:"text-accent hover:underline aria-busy:opacity-50",children:s?"Trusting…":"Always trust"})]})]}),rt=(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}}},nt=e=>e instanceof oe?e.reason:"generic",at=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",ot=({error:e,onRetry:t})=>{const s=nt(e),r=at(e),{title:n,detail:o}=rt(s,r),[l,m]=g.useState(!1),{Account:d}=te();return l?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(se,{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(d,{children:({signOut:c})=>a.jsx("button",{type:"button",onClick:()=>c(),className:"text-sm font-medium text-accent hover:underline",children:"Sign in again"})}),t&&a.jsx("button",{type:"button",onClick:t,className:"text-sm font-medium text-accent hover:underline",children:"Retry"}),a.jsx("button",{type:"button",onClick:()=>m(!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(re,{className:"size-4","aria-hidden":"true"})})]})]})},it=()=>a.jsxs("div",{className:"animate-pulse space-y-2",role:"status","aria-label":"Loading message body",children:[a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-full"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-11/12"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-3/4"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-5/6"})]}),L=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),At=({bodyParts:e,html:t,text:s,isTrusted:r=!1,messageId:n,fromAddressId:o,category:l,className:m})=>{const[d,c]=g.useState(!1),f=r||d,u=tt(),{toggleTrusted:h,isPending:p}=et({messageId:n??""}),i=!!e&&e.length>0,{picked:x,data:y,isLoading:w,isError:$,error:z,refetch:P}=ie({messageId:n,bodyParts:e,enabled:i}),K=g.useMemo(()=>ue(e??[]),[e]),F=i&&y?.kind==="html"?y.body:t,H=i&&y?.kind==="text"?y.body:s;if(i){if(w)return a.jsx("div",{className:b("message-body",m),children:a.jsx(it,{})});if($)return a.jsx("div",{className:b("message-body",m),children:a.jsx(ot,{error:z,onRetry:()=>P()})});if(!x)return a.jsx("div",{className:b("message-body",m),children:a.jsx(L,{})})}else if(!t&&!s)return a.jsx("div",{className:b("message-body",m),children:a.jsx(L,{})});const U=!!(o&&n),G=()=>{!o||p||(c(!0),h(o,!1))};return a.jsx(Ve,{className:m,html:F,text:H,isDark:u,category:l,allowImages:f,resolveCid:K,renderBlockedNotice:W=>a.jsx(st,{blockedImageCount:W,canAlwaysTrust:U,isTrustPending:p,onLoadOnce:()=>c(!0),onAlwaysTrust:G})})},D={personal:"Personal",uncategorized:"Unclassified",transactional:"Transactional",newsletter:"Newsletter",marketing:"Marketing",social:"Social",automated:"Automated"},ct=Object.values(R).map(e=>({value:e,label:D[e]})),lt={unclassified:"uncategorized"},dt=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:ct},{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"}],ut=new Map(dt.map(e=>[e.name,e])),Et=e=>ut.get(e.toLowerCase()),mt=/^\d{4}-\d{2}-\d{2}$/;function ft(e,t,s){if(!mt.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 ht(e){const t=e.toLowerCase(),s=lt[t];return s||Object.values(R).find(n=>n===t)}function gt(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 pt(e,t){const s=Ye(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=ht(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return gt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return ft(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 Tt(e,t={}){const s=[],r=[];for(const n of M(e)){const o=pt(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Nt(e,t){return M(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function Ct(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${D[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}=ne(),s=ae();return{...ce(s)?{}:{mailboxesByName:e},accountsByName:t}}export{vt as M,kt as R,dt as S,M as a,Ye as b,Ve as c,et as d,At as e,Ct as f,Et as g,Tt as p,Nt as r,St as s,jt as u};
84
+ `},S="invert(0.92) hue-rotate(180deg)",C=`img,picture,video,svg,canvas,[style*='background-image'],[background]{filter:${S}}`,Pe=(e,t,s)=>{const r=e?v.dark.canvas:v.light.canvas;return s?e?t?`html,body{margin:0;background-color:${r};color-scheme:dark light}`:`html{margin:0;background-color:#ffffff;filter:${S}}body{margin:0}${C}`:"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:${S}}${C}`:`html,body{margin:0;background-color:${r};color-scheme:light}`},Ke=(e,t,s,r=Be)=>{const n=t==="plain"?ze(s):Pe(s,$e.test(e),r.background),o=r.spacing?"":Me();return`${De}<style>${n}</style>${e}<style>${Oe()}${o}</style>`},Fe=5e4,He="allow-same-origin allow-popups allow-popups-to-escape-sandbox",Ue=(e,t,s)=>Math.min(Math.ceil(Math.max(e,t)),s),Ge=new Set(["Enter","Escape","ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"]),We=e=>e===" "?!1:e.length===1?!0:Ge.has(e),A=e=>{if(e.metaKey||e.ctrlKey||e.altKey||!We(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}))},N=({html:e,variant:t="framed",isDark:s=!1,declares:r,className:n})=>{const o=g.useRef(null),[l,m]=g.useState(0),d=g.useMemo(()=>Ke(e,t,s,r),[e,t,s,r]);return g.useEffect(()=>{const c=o.current;if(!c)return;const f=()=>{const i=c.contentDocument;if(!i?.body)return;const x=i.documentElement,y=Ue(i.body.scrollHeight,x?.scrollHeight??0,Fe);m(w=>w===y?w:y)};let u,h;const p=()=>{f(),u?.disconnect(),u=void 0,h?.removeEventListener("keydown",A),h?.removeEventListener("load",f,!0),h=void 0;const i=c.contentDocument;i?.body&&(u=new ResizeObserver(f),u.observe(i.body),i.documentElement&&u.observe(i.documentElement),i.addEventListener("load",f,!0),i.fonts?.ready.then(f),i.addEventListener("keydown",A),h=i)};return c.addEventListener("load",p),()=>{c.removeEventListener("load",p),h?.removeEventListener("keydown",A),h?.removeEventListener("load",f,!0),u?.disconnect()}},[]),a.jsx("iframe",{ref:o,title:"Email content",sandbox:He,srcDoc:d,className:n,style:{width:"100%",border:"none",display:"block",height:l===0?"1px":`${l}px`,colorScheme:"normal"}})},j=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),vt=({className:e,children:t})=>a.jsx("div",{className:b("[&_.message-body-frame]:-mx-2 lg:[&_.message-body-frame]:-mx-4",e),children:t}),Ve=({html:e,text:t,isDark:s=!1,category:r,allowImages:n=!1,resolveCid:o,className:l,renderBlockedNotice:m})=>{const d=g.useMemo(()=>!e||typeof document>"u"?null:Re({allowExternalImages:n,resolveCid:o})(e),[e,n,o]),c=d?.html??null,{framed:f,isPlain:u}=le(r,d?.hasAuthorBackground??!1),h=g.useMemo(()=>({background:d?.hasAuthorBackground??!1,spacing:d?.hasAuthorSpacing??!1}),[d?.hasAuthorBackground,d?.hasAuthorSpacing]),p=g.useMemo(()=>!c||n?0:(c.match(/data-blocked-src/g)||[]).length,[c,n]);return!c&&!t?a.jsx("div",{className:b("message-body",l),children:a.jsx(j,{})}):a.jsxs("div",{className:b("message-body",l),children:[p>0&&a.jsx("div",{children:m?.(p)}),c?a.jsx("div",{className:"message-body-frame",children:f?a.jsx("div",{className:"w-full max-w-full",children:a.jsx(N,{html:c,variant:"framed",isDark:s,declares:h})}):a.jsx("div",{className:"max-w-full lg:max-w-2xl",children:a.jsx(N,{html:c,variant:u?"plain":"framed",isDark:s,declares:h})})}):t?a.jsx("pre",{className:"email-text whitespace-pre-wrap text-sm leading-relaxed",children:t}):a.jsx(j,{})]})};function kt({message:e="Select a thread to read",icon:t,showHints:s=!0,className:r}){return a.jsxs("div",{className:b("flex flex-1 flex-col items-center justify-center text-center",r),children:[t??a.jsx(Q,{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(k,{children:"j"})," / ",a.jsx(k,{children:"k"})," to move, ",a.jsx(k,{children:"Enter"})," to open"]})]})}function M(e){const t=[];let s=-1,r=!1;for(let n=0;n<e.length;n++){const o=e[n];if(o==='"'){r=!r,s<0&&(s=n);continue}if(!r&&/\s/.test(o)){s>=0&&t.push({raw:e.slice(s,n),start:s,end:n}),s=-1;continue}s<0&&(s=n)}return s>=0&&t.push({raw:e.slice(s),start:s,end:e.length}),t}const Qe=e=>{if(!e.startsWith('"'))return e;const t=e.slice(1);return t.endsWith('"')?t.slice(0,-1):t};function Ye(e){const t=e.indexOf(":");if(t<=0)return;const s=e.slice(t+1);return{name:e.slice(0,t).toLowerCase(),value:Qe(s),rawValue:s}}const qe=e=>/[\s"]/.test(e),Xe=e=>qe(e)?`"${e.replace(/"/g,"")}"`:e,At=(e,t)=>`${e}:${Xe(t)}`,O=(e,t=Date.now())=>({value:e,setAt:t}),Ze=(e,t,s,r)=>{if(e.addressId!==t)return e;const n={...e.flags??{}};return s?n.trusted=O(!0,r):delete n.trusted,{...e,flags:n}},Je=(e,t,s,r)=>{const n=o=>o.map(l=>Ze(l,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)}}},et=({messageId:e})=>{const t=Y(),{pushError:s}=q(),{mutate:r,isPending:n,error:o,reset:l}=X({...ee(),onMutate:async d=>{const c=d.path.addressId,u=d.body.flags?.trusted?.value===!0,h=J({path:{messageId:e}});await t.cancelQueries({queryKey:h});const p=t.getQueriesData({queryKey:h}).filter(i=>i[1]!==void 0).map(([i,x])=>({queryKey:i,data:x}));return t.setQueriesData({queryKey:h},i=>i&&Je(i,c,u)),{describePrefix:h,previous:p}},onError:(d,c,f)=>{if(f)for(const u of f.previous)t.setQueryData(u.queryKey,u.data);s(Z("Couldn't trust sender","The change wasn't saved.",d))},onSettled:(d,c,f,u)=>{u&&t.invalidateQueries({queryKey:u.describePrefix})}});return{toggleTrusted:(d,c)=>{r({path:{addressId:d},body:{flags:{trusted:O(!c)}}})},isPending:n,error:o,reset:l}},tt=()=>{const[e,t]=g.useState(()=>typeof document<"u"&&document.documentElement.classList.contains("dark"));return g.useEffect(()=>{const s=document.documentElement,r=new MutationObserver(()=>{t(s.classList.contains("dark"))});return r.observe(s,{attributes:!0,attributeFilter:["class"]}),()=>r.disconnect()},[]),e},st=({blockedImageCount:e,canAlwaysTrust:t,isTrustPending:s,onLoadOnce:r,onAlwaysTrust:n})=>a.jsxs("div",{className:"mb-3 flex items-center justify-between rounded-md bg-surface-sunken/50 px-3 py-2 text-sm",children:[a.jsxs("span",{className:"text-fg-muted",children:[e," image",e>1?"s":""," blocked for privacy"]}),a.jsxs("div",{className:"flex items-center gap-3",children:[a.jsx("button",{type:"button",onClick:r,className:"text-accent hover:underline",children:"Load once"}),t&&a.jsx("button",{type:"button",onClick:n,"aria-busy":s,className:"text-accent hover:underline aria-busy:opacity-50",children:s?"Trusting…":"Always trust"})]})]}),rt=(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}}},nt=e=>e instanceof oe?e.reason:"generic",at=e=>e instanceof Error?e.message:typeof e=="string"?e:"An unexpected error occurred while loading the message body.",ot=({error:e,onRetry:t})=>{const s=nt(e),r=at(e),{title:n,detail:o}=rt(s,r),[l,m]=g.useState(!1),{Account:d}=te();return l?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(se,{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(d,{children:({signOut:c})=>a.jsx("button",{type:"button",onClick:()=>c(),className:"text-sm font-medium text-accent hover:underline",children:"Sign in again"})}),t&&a.jsx("button",{type:"button",onClick:t,className:"text-sm font-medium text-accent hover:underline",children:"Retry"}),a.jsx("button",{type:"button",onClick:()=>m(!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(re,{className:"size-4","aria-hidden":"true"})})]})]})},it=()=>a.jsxs("div",{className:"animate-pulse space-y-2",role:"status","aria-label":"Loading message body",children:[a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-full"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-11/12"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-3/4"}),a.jsx("div",{className:"h-4 bg-surface-sunken rounded w-5/6"})]}),L=()=>a.jsx("p",{className:"text-fg-muted text-sm italic",children:"This message has no body content."}),St=({bodyParts:e,html:t,text:s,isTrusted:r=!1,messageId:n,fromAddressId:o,category:l,className:m})=>{const[d,c]=g.useState(!1),f=r||d,u=tt(),{toggleTrusted:h,isPending:p}=et({messageId:n??""}),i=!!e&&e.length>0,{picked:x,data:y,isLoading:w,isError:D,error:z,refetch:P}=ie({messageId:n,bodyParts:e,enabled:i}),K=g.useMemo(()=>ue(e??[]),[e]),F=i&&y?.kind==="html"?y.body:t,H=i&&y?.kind==="text"?y.body:s;if(i){if(w)return a.jsx("div",{className:b("message-body",m),children:a.jsx(it,{})});if(D)return a.jsx("div",{className:b("message-body",m),children:a.jsx(ot,{error:z,onRetry:()=>P()})});if(!x)return a.jsx("div",{className:b("message-body",m),children:a.jsx(L,{})})}else if(!t&&!s)return a.jsx("div",{className:b("message-body",m),children:a.jsx(L,{})});const U=!!(o&&n),G=()=>{!o||p||(c(!0),h(o,!1))};return a.jsx(Ve,{className:m,html:F,text:H,isDark:u,category:l,allowImages:f,resolveCid:K,renderBlockedNotice:W=>a.jsx(st,{blockedImageCount:W,canAlwaysTrust:U,isTrustPending:p,onLoadOnce:()=>c(!0),onAlwaysTrust:G})})},$={personal:"Personal",uncategorized:"Unclassified",transactional:"Transactional",newsletter:"Newsletter",marketing:"Marketing",social:"Social",automated:"Automated"},ct=Object.values(R).map(e=>({value:e,label:$[e]})),lt={unclassified:"uncategorized"},dt=[{name:"from",label:"Sender",values:"contact"},{name:"subject",label:"Subject",values:"text"},{name:"category",label:"Category",values:"fixed",options:ct},{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"}],ut=new Map(dt.map(e=>[e.name,e])),Et=e=>ut.get(e.toLowerCase()),mt=/^\d{4}-\d{2}-\d{2}$/;function ft(e,t,s){if(!mt.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 ht(e){const t=e.toLowerCase(),s=lt[t];return s||Object.values(R).find(n=>n===t)}function gt(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 pt(e,t){const s=Ye(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=ht(n);return o?{type:"category",raw:e,value:n,category:o}:void 0}case"is":return gt(e,n);case"has":return n.toLowerCase()==="attachment"?{type:"hasAttachment",raw:e}:void 0;case"before":case"after":return ft(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 Tt(e,t={}){const s=[],r=[];for(const n of M(e)){const o=pt(n.raw,t);o?s.push(o):r.push(n.raw)}return{freeText:r.join(" "),tokens:s}}function Ct(e,t){return M(e).filter(s=>s.raw!==t.raw).map(s=>s.raw).join(" ")}function Nt(e){switch(e.type){case"from":return`From: ${e.value}`;case"subject":return`Subject: ${e.value}`;case"category":return`Category: ${$[e.category]}`;case"hasAttachment":return"Has attachment";case"isUnread":return"Unread";case"isRead":return"Read";case"isStarred":return"Starred";case"before":return`Before ${e.value}`;case"after":return`After ${e.value}`;case"in":return`In: ${e.value}`;case"account":return`Account: ${e.value}`}}function jt(){const{mailboxNameIndex:e,accountNameIndex:t}=ne(),s=ae();return{...ce(s)?{}:{mailboxesByName:e},accountsByName:t}}export{vt as M,kt as R,dt as S,Ve as a,et as b,St as c,Et as d,M as e,Ye as f,At as g,Tt as p,Ct as r,Nt as s,jt as u};
@@ -0,0 +1 @@
1
+ import{h as T,as as I,i as C,cq as k,dI as A,r as v,j as p,dJ as h,dK as E,dL as j,C as w,c4 as D,c as z,dh as Q,cJ as R}from"./index-7WhVkt7M.js";import{P as O}from"./attachment-file-DbWeTMZB.js";import{ag as P,ah as _}from"./MailListHeader-Cy_Ht48G.js";import{i as q,t as N}from"./search-token-index-D-muOZ-w.js";import{a as B}from"./useLabels-C-lZfH7h.js";import{n as U}from"./search-query-Cr_ZXBCp.js";import{b as F}from"./search-scope-B5-OK3Cq.js";import{u as G,p as H}from"./useSearchTokenContext-DhiDMu0P.js";const ne=e=>{const t=new Set;for(const a of e)a&&t.add(a);return t.size>1?{accountId:void 0,restriction:"spansAccounts",moveDisabledHint:"Move only works within one account — clear selection or pick messages from a single account"}:{accountId:t.size===1?[...t][0]:void 0,restriction:void 0,moveDisabledHint:void 0}},J=e=>{const{mailboxId:t,messages:a}=e,c=T(),{pushError:l}=I(),{mutateAsync:i,isPending:o}=C({...A(),onError:(n,d)=>{l({title:d.body.action==="Remove"?"Couldn't remove label":"Couldn't apply label",detail:k(n),error:n})},onSettled:(n,d,u)=>{q(c,N(P(u.body.messageIds??[],a??[],t)))}});return{applyLabel:v.useCallback((n,d,u)=>{n.length!==0&&_(n,m=>i({body:{messageIds:m,labelId:d,action:u}}))},[i]),isPending:o}};function re({accountId:e,mailboxId:t,messageIds:a}){const{labels:c}=B(e),{applyLabel:l}=J({mailboxId:t}),i=v.useMemo(()=>c.map(o=>({key:o.labelId,label:o.name,icon:p.jsx("span",{className:`size-2.5 rounded-full ${E(o.color)?h[o.color]:h.Default}`}),onSelect:()=>l(a,o.labelId,"Apply")})),[c,a,l]);return i.length===0?null:p.jsx(O,{triggerLabel:"Apply label to selected messages",triggerIcon:p.jsx(j,{className:"size-4 text-fg-subtle"}),triggerText:"Apply label",items:i,align:"start",nested:!0,touch:!1,triggerClassName:"min-h-11 w-full justify-start gap-3 px-4 py-2.5 text-sm font-normal text-fg"})}const K=20,V=new Set(Object.values(R)),$=e=>e!==void 0&&V.has(e)?e:void 0,W=e=>{if(e.some(t=>t.type==="isUnread"))return!1;if(e.some(t=>t.type==="isRead"))return!0};function ie({mailboxId:e,filterCategory:t}={}){const{searchQuery:a}=w(),c=G(),l=D(),i=U(a),{freeText:o,tokens:r}=H(i,c),n=o.length>0,d=r.find(s=>s.type==="category"),u=$(t)??d?.category,m=r.some(s=>s.type==="hasAttachment")?!0:void 0,f=r.some(s=>s.type==="isStarred")?!0:void 0,y=W(r),b=r.find(s=>s.type==="after"),g=r.find(s=>s.type==="before"),S=r.find(s=>s.type==="in"),x=F({browsed:l,callerMailboxId:e,inTokenMailboxId:S?.mailboxId}),{data:L,isLoading:M}=z({...Q({query:{query:o,mailboxId:x,limit:K,...u!==void 0?{category:u}:{},...m!==void 0?{hasAttachment:m}:{},...f!==void 0?{hasStars:f}:{},...y!==void 0?{isRead:y}:{},...b?{sentDateFrom:b.epochSeconds}:{},...g?{sentDateTo:g.epochSeconds}:{}}}),enabled:n,staleTime:6e4});return{hits:L?.items??[],isLoading:n&&M}}export{re as L,ne as r,ie as u};
@@ -1 +1 @@
1
- import{u as g,ar as f,d as p,e as m,r,f as y,at as T,k as E,h as d}from"./index-FpwHnbdV.js";const i={html:"",plainText:""},x=e=>{const u=g(),{pushError:o}=f(),{data:n}=p({...m(),staleTime:1/0}),l=r.useMemo(()=>{if(!e||!n)return i;const t=n.accounts.find(a=>a.accountId===e);return t?{html:t.signatureHtml??"",plainText:t.signaturePlainText??""}:i},[e,n]),s=y({...d(),onSuccess:()=>{u.invalidateQueries({queryKey:E()})},onError:t=>{o(T("Couldn't save signature","The signature wasn't saved.",t))}}),c=r.useCallback((t,a)=>{e&&s.mutate({path:{accountId:e},body:{signatureHtml:t,signaturePlainText:a}})},[e,s]);return{signature:l,setSignature:c,isSaving:s.isPending}};export{x as u};
1
+ import{h as g,as as p,c as f,d as m,r,i as y,au as T,o as E,l as d}from"./index-7WhVkt7M.js";const i={html:"",plainText:""},x=e=>{const u=g(),{pushError:o}=p(),{data:n}=f({...m(),staleTime:1/0}),l=r.useMemo(()=>{if(!e||!n)return i;const t=n.accounts.find(a=>a.accountId===e);return t?{html:t.signatureHtml??"",plainText:t.signaturePlainText??""}:i},[e,n]),s=y({...d(),onSuccess:()=>{u.invalidateQueries({queryKey:E()})},onError:t=>{o(T("Couldn't save signature","The signature wasn't saved.",t))}}),c=r.useCallback((t,a)=>{e&&s.mutate({path:{accountId:e},body:{signatureHtml:t,signaturePlainText:a}})},[e,s]);return{signature:l,setSignature:c,isSaving:s.isPending}};export{x as u};
package/index.html CHANGED
@@ -38,7 +38,7 @@
38
38
  } catch (_) {}
39
39
  })();
40
40
  </script>
41
- <script type="module" crossorigin src="/assets/index-FpwHnbdV.js"></script>
41
+ <script type="module" crossorigin src="/assets/index-7WhVkt7M.js"></script>
42
42
  <link rel="stylesheet" crossorigin href="/assets/index-DYO-sbPN.css">
43
43
  </head>
44
44
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remit/web-client-dist",
3
- "version": "0.0.482",
3
+ "version": "0.0.484",
4
4
  "description": "Built Remit web client — static assets and the default runtime config.",
5
5
  "files": [
6
6
  "**/*"
@@ -1 +0,0 @@
1
- import{j as o,L as Ke,S as Xe,bX as es,Q as Y,bb as ss,bL as ts,r as a,d as oe,bY as ne,V as os,bZ as ns,b_ as as,b$ as rs,t as Te,c0 as is,ai as cs,bU as ls,bV as ds}from"./index-FpwHnbdV.js";import{s as je,a as us,b as Re,u as ms,p as fs,R as hs}from"./useSearchTokenContext-DH5XswlU.js";import{a8 as be,F as ve,a9 as gs,aa as xs,G as ps,ab as ye,ac as Is,ad as bs,ae as vs,a7 as ys,af as Ss,ag as Cs,ah as Ts,M as js,ai as Rs,aj as ws,ak as Ms,e as ks,v as Fs,al as Os,q as As,S as Ns,J as Bs,O as Se,N as Ls,K as Ds,d as Es,Y as Ps,Z as qs,$ as we,a0 as Me,a1 as zs,a2 as Qs,a3 as _s}from"./MailListHeader-Brjq4vBE.js";import{u as Hs,a as $s,R as Vs,b as Gs,c as Us}from"./useRefreshControl-CWjutjgw.js";import{u as Ws}from"./useQueries-Dx2PHSps.js";import{a as Ys}from"./useLabels-GtiakPKP.js";import{e as Js,p as Zs,R as Ks,k as Xs,l as et}from"./search-token-index-C9KNJC5_.js";import{u as st,r as tt,L as ot}from"./useSemanticSearch-CZUtmciE.js";import{w as nt}from"./wizard-selection-B1bng5Jq.js";import{u as ke}from"./sections-DDQm-Sbc.js";import{a as at}from"./useMessageBodyContent-BOBb68Px.js";function rt({sync:e}){return e?o.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:[o.jsx(Ke,{className:"size-8 animate-spin text-fg-subtle","aria-hidden":"true"}),o.jsx("p",{className:"text-sm font-medium text-fg",children:"Still syncing your mail"}),o.jsx("p",{className:"text-xs text-fg-subtle",children:it(e)})]}):o.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-2 py-12 text-center px-4",children:[o.jsx(Xe,{className:"size-8 text-fg-subtle","aria-hidden":"true"}),o.jsx("p",{className:"text-sm font-medium text-fg",children:"You're caught up"}),o.jsx("p",{className:"text-xs text-fg-subtle",children:"Nothing needs attention."})]})}function it({synced:e,total:s}){return s>0?`${e.toLocaleString()} of ${s.toLocaleString()} messages downloaded. This list fills in as they arrive.`:"Downloading your messages. This list fills in as they arrive."}const Fe=[{id:"unread",name:"is",value:"unread"},{id:"attachment",name:"has",value:"attachment"}],Oe="category",ct={unclassified:"uncategorized"},$=e=>us(e).map(s=>s.raw),H=e=>e.join(" "),ae=e=>{const s=Re(e);if(s)return Fe.find(n=>n.name===s.name&&n.value===s.value.toLowerCase())?.id},re=e=>{const s=Re(e);if(!s||s.name!==Oe)return;const n=s.value.toLowerCase(),r=ct[n];if(r)return r;if(!(!es(n)||n==="all"))return n},Ae=e=>Fe.find(s=>s.id===e),Ne=e=>Ae(e)!==void 0,lt=e=>{const s=new Set;for(const n of $(e)){const r=ae(n);r&&s.add(r)}return s},dt=e=>{let s="all";for(const n of $(e)){const r=re(n);r&&(s=r)}return s},ut=(e,s)=>{const n=Ae(s);if(!n)return;const r=$(e),l=r.filter(d=>ae(d)!==s);return l.length<r.length?H(l):H([...r,je(n.name,n.value)])},mt=(e,s)=>{const n=$(e).filter(r=>!re(r));return H(s==="all"?n:[...n,je(Oe,s)])},ft=e=>H($(e).filter(s=>!ae(s)&&!re(s))),Be=e=>e.trim().length>0,ht=e=>{if(!Be(e.query))return e.ownFilters;const s=new Set(lt(e.query));for(const n of e.ownFilters)Ne(n)||s.add(n);return s},gt=e=>Be(e.query)?dt(e.query):e.ownCategory,xt=(e,s)=>e.createdAt!==s.createdAt?e.createdAt-s.createdAt:e.accountId.localeCompare(s.accountId),pt=e=>[...e].sort(xt),It=200,Ce=()=>o.jsx("div",{className:"animate-pulse",children:Array.from({length:3}).map((e,s)=>o.jsxs("div",{className:"flex items-start gap-3 py-2 pl-5 pr-4 border-b border-line",children:[o.jsx("div",{className:"size-7 rounded-full bg-surface-sunken shrink-0 mt-0.5"}),o.jsxs("div",{className:"flex-1 space-y-1.5",children:[o.jsxs("div",{className:"flex justify-between gap-2",children:[o.jsx("div",{className:"h-3.5 bg-surface-sunken rounded w-28"}),o.jsx("div",{className:"h-3 bg-surface-sunken rounded w-12"})]}),o.jsx("div",{className:"h-3.5 bg-surface-sunken rounded w-48"}),o.jsx("div",{className:"h-3 bg-surface-sunken rounded w-full"})]})]},s))}),bt=({accountEmail:e})=>{const s=ke();return o.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:[o.jsx(Te,{className:"size-3.5 shrink-0"}),o.jsxs("span",{className:"flex-1 truncate",children:[e," can't connect"]}),o.jsx("button",{type:"button",onClick:()=>s("accounts"),className:"shrink-0 underline text-danger hover:opacity-80",children:"Reconnect"})]})},vt=(e,s)=>{if(s.size===0)return{};const n=e.filter(d=>s.has(d.id)),r=tt(n.map(d=>d.accountId));if(r.restriction)return r;const l=new Set;for(const d of n)d.mailboxId&&l.add(d.mailboxId);return l.size>1?{accountId:r.accountId,restriction:"spansFolders",moveDisabledHint:`Move only works within one folder — this selection spans ${l.size} folders`}:{accountId:r.accountId,mailboxId:l.size===1?[...l][0]:void 0}};function yt({header:e,rows:s,wizard:n,children:r}){const{selectedIds:l,selectedCount:d,exitSelection:u,orderedIds:m,allSelected:b,toggleAllLoaded:f}=Ms(),x=a.useMemo(()=>vt(s,l),[s,l]),{junkMailboxId:L}=ks(x.accountId),{labels:I}=Ys(x.accountId),p=a.useMemo(()=>Array.from(l),[l]),D=a.useMemo(()=>nt(s,l),[s,l]),h=Fs(L,x.mailboxId),v=a.useMemo(()=>m.length>0?{checked:b,indeterminate:d>0&&!b,onChange:f}:void 0,[m.length,b,d,f]),F=x.moveDisabledHint?{tone:"warning",text:x.moveDisabledHint}:void 0,S=C=>o.jsx(Ns,{title:C.title,navSlot:C.navSlot,titleMeta:C.titleMeta,searchSlot:C.searchSlot,searchField:C.searchField,idleSlot:C.makeFilterSlot,count:d,onCancel:u,onDelete:()=>n.start("delete"),onMove:()=>n.start("move"),onOrganize:()=>n.start("organize"),onJunk:h?()=>n.start("junk"):void 0,onMarkRead:()=>n.start("markRead"),overflowSlot:x.accountId&&x.mailboxId&&d>0&&I.length>0?o.jsx(ot,{accountId:x.accountId,mailboxId:x.mailboxId,messageIds:p}):void 0,selectAll:v,notice:F});return o.jsx(Os,{...e,selectionBar:S,paneOverlay:o.jsx(As,{verb:n.verb,accountId:x.accountId,mailboxId:x.mailboxId,selection:D,selectionRestriction:x.restriction,onFinished:u}),children:r})}function St({accounts:e,selectedMessageId:s,onOpenThread:n,commandsRef:r,onTriageContextChange:l,onDeleteMessages:d}){const{searchQuery:u,searchInput:m,resultFolderIndex:b,onSearchChange:f}=Y(),x=ms(),L=ss(),I=Js(),p=ts(),D=Zs(),h=a.useMemo(()=>pt(e.filter(t=>!t.muted?.value)),[e]),[v,F]=a.useState("all"),[S,C]=a.useState("all"),[V,E]=a.useState(new Set),[Z,T]=a.useState(!1),P=a.useCallback(t=>{E(i=>{const c=new Set(i);return c.has(t)?c.delete(t):c.add(t),c})},[]),G=a.useCallback(()=>E(new Set),[]),R=m.trim().length>0,j=a.useMemo(()=>ht({query:m,ownFilters:V}),[m,V]),w=a.useMemo(()=>gt({query:m,ownCategory:S}),[m,S]),O=a.useCallback(t=>{if(!R||!Ne(t)){P(t);return}const i=ut(m,t);i!==void 0&&f(i)},[R,m,f,P]),q=a.useCallback(t=>{if(!R){C(t);return}f(mt(m,t))},[R,m,f]),z=a.useCallback(()=>{C("all"),F("all"),G(),R&&f(ft(m))},[R,m,f,G]),{data:A,isLoading:Q,isError:g,refetch:N}=oe({...ne(),staleTime:6e4}),B=Ws({queries:h.map(t=>({...os({path:{accountId:t.accountId}}),staleTime:1/0,meta:{softError:!0}}))}),U=a.useMemo(()=>{const t=new Map;for(let i=0;i<h.length;i++){const c=h[i].accountId,Ye=(B[i]?.data?.items??[]).reduce((Je,Ze)=>Je+(Ze.unseenCount??0),0);t.set(c,Ye)}return t},[h,B]),Ee=a.useMemo(()=>h.filter((t,i)=>{const c=B[i];return c?.isError?!ns(c.error):!1}),[h,B]),{freeText:M,tokens:K}=fs(u.trim().toLowerCase(),x),{data:ie,isFetching:Pe}=oe({...ne({query:{query:M,limit:It}}),enabled:M.length>0,staleTime:3e4}),y=a.useMemo(()=>{const t=be(A?.items??[]).map(ve);return(M?gs(t.filter(c=>xs(c,M)),be(ie?.items??[]).map(ve)):t).filter(c=>(v==="all"||c.accountId===v)&&ps(c,K))},[A,ie,v,M,K]),{bodyRows:ce,briefSpamOffer:X}=a.useMemo(()=>{if(!M)return{bodyRows:y,briefSpamOffer:void 0};const t=y.map(k=>ye(k,b)),{spam:i}=Is(t);if(i.length===0)return{bodyRows:y,briefSpamOffer:void 0};const c=new Set(i.map(k=>k.id));return{bodyRows:y.filter(k=>!c.has(k.id)),briefSpamOffer:bs(t)}},[y,M,b]),le=a.useMemo(()=>vs(ce),[ce]),de=a.useCallback((t,i)=>{const c=y.find(k=>k.id===t)?.threadId;c&&n?.({threadId:c,messageId:t},i)},[y,n]),qe=a.useCallback(t=>{const i=t.threadId??y.find(c=>c.id===t.id)?.threadId;i&&n?.({threadId:i,messageId:t.id})},[y,n]),ee=a.useMemo(()=>h.length<=1?[]:[{id:"all",label:"All",active:v==="all"},...h.map(t=>({id:t.accountId,label:t.email.split("@")[0]??t.email,count:U.get(t.accountId),active:v===t.accountId}))],[h,U,v]),_=a.useMemo(()=>e.filter(t=>t.muted?.value).length,[e]),ze=a.useMemo(()=>Array.from(U.values()).reduce((t,i)=>t+i,0),[U]),se=a.useMemo(()=>h.map(t=>t.accountId),[h]),{hasNewMail:ue}=Hs(),{state:me,errorMessage:fe,refresh:he}=$s(se,{onSettled:()=>N()}),Qe=a.useMemo(()=>o.jsx(Vs,{state:me,onRefresh:he,label:"Refresh daily brief",errorMessage:fe,hasUpdate:ue(se)}),[me,he,fe,ue,se]),te=a.useMemo(()=>y.filter(t=>(w==="all"||t.category===w)&&as(t,j)).map(t=>ye(t,b)),[y,w,j,b]),{hits:ge,isLoading:_e}=st(),He=a.useMemo(()=>{const t=new Map;for(const c of A?.items??[])t.set(c.messageId,c.threadId);const i=te.map(c=>t.get(c.id)).filter(c=>c!=null);return ys(ge,i,b)},[ge,te,A,b]),$e=a.useMemo(()=>{const t=Ss(ee.map(i=>({id:i.id,label:i.label,count:i.count,active:i.active})));return{categories:t.categories,filters:t.filters,sources:t.sources,sourcesNote:_>0?`+${_} muted`:void 0,selectedCategory:w,activeFilters:j,expanded:Z,onExpandedChange:T,onSelectCategory:i=>q(i),onSelectSource:F,onToggleFilter:i=>O(i),onClear:z}},[ee,_,w,j,Z,O,q,z]),xe=le.length===0&&v==="all"&&M.length===0&&K.length===0,Ve=a.useMemo(()=>h.map(t=>t.accountId),[h]),Ge=a.useMemo(()=>h.some(t=>Gs(t.syncPhase)),[h]),W=Us(Ve,xe||Ge),pe=o.jsxs("div",{className:"h-full overflow-y-auto",children:[o.jsx(Ce,{}),o.jsx(Ce,{})]}),Ie=!Q&&!g&&!xe,Ue=Cs({tier:I,hasLiveInput:R,hasCommittedQuery:u.trim().length>0,bodyRendersCommittedResults:!0}),We=Ie?o.jsxs("div",{className:"flex h-full min-h-0 flex-col",children:[X&&o.jsx(Ts,{count:X.count,onScopeToSpam:()=>D(X.mailboxId,u)}),o.jsx("div",{className:"min-h-0 flex-1",children:o.jsx(rs,{sections:le,briefCategory:w,Row:js,selectedThreadId:s,onSelectThread:de,onSelectBriefCategory:q,sources:ee,sourcesNote:_>0?`+${_} muted`:void 0,onSelectSource:F,activeFilters:j,onToggleFilter:O,onClearFilters:z})})]}):Q?pe:g?o.jsxs("div",{className:"flex h-full flex-col items-center justify-center gap-3 py-12 text-sm text-fg-muted",children:[o.jsx(Te,{className:"size-8 text-danger"}),o.jsx("p",{children:"Couldn't load your messages"}),o.jsxs("button",{type:"button",onClick:()=>N(),className:"flex items-center gap-1 text-accent underline text-xs",children:[o.jsx(Ks,{className:"size-3.5"}),"Try again"]})]}):W.resolved?o.jsx(rt,{sync:W.syncing?{synced:W.synced,total:W.total}:void 0}):pe;return o.jsx(is,{hasSheet:Ie&&!Ue,children:o.jsx(Rs,{selectedMessageId:s,rows:y,onOpen:de,onDeleteMessages:d,onSelectionVerb:p.start,commandsRef:r,onTriageContextChange:l,children:o.jsx(yt,{wizard:p,header:{title:"Daily brief",unreadCount:ze,footer:L?o.jsx(ws,{}):void 0,searchFilter:$e,searchResults:te,searchLoading:Q||Pe,relatedResults:He,relatedLoading:_e,onSelectSearchResult:qe,searchResultsInBody:!0,refreshControl:Qe},rows:y,children:o.jsxs("div",{className:"flex h-full flex-col",children:[Ee.map(t=>o.jsx(bt,{accountEmail:t.email,accountId:t.accountId},t.accountId)),o.jsx("div",{className:"min-h-0 flex-1",children:We})]})})})})}const Le=a.createContext(null);function J(){const e=a.useContext(Le);if(!e)throw new Error("BriefPane.* must be used inside <BriefPane>");return e}function Ct({thread:e,children:s}){const n=Xs(),r=et(),l=ke(),{searchInput:d}=Y(),u=e?.threadId,m=e?.messageId,{data:b}=oe({...ne(),staleTime:6e4}),f=a.useMemo(()=>b?.items??[],[b]),x=a.useMemo(()=>{if(u)return f.find(g=>g.messageId===m)??f.find(g=>g.threadId===u)},[f,u,m]),L=Bs(u,m),I=x??L,p=m??I?.messageId,D=a.useMemo(()=>{if(u)return{threadId:u,mailboxId:I?.mailboxId??"",subject:I?.subject,messageId:p,authenticity:I?.authenticity}},[u,I,p]),h=a.useCallback((g,N)=>{n(g,{replace:N?.replace,query:d})},[n,d]),v=a.useCallback(g=>{p&&g.includes(p)&&r()},[p,r]),F=Se({thread:I,isOpen:!0,onAfterOptimisticRemove:v}),S=Ls(),{deleteMessages:C}=Ds({mailboxId:I?.mailboxId??"",messages:f,onAfterOptimisticRemove:v}),{toggleReadFor:V}=Es({mailboxId:I?.mailboxId??"",messages:f}),E=S.focusedMessageId,T=a.useMemo(()=>f.find(g=>g.messageId===E),[f,E])??I,P=Se({thread:T,isOpen:T?.messageId===p}),G=at(),R=cs(),j=ls(),w=a.useMemo(()=>ds(j,u,p),[j,u,p]),O=a.useMemo(()=>{if(T)return g=>j({threadId:T.threadId,messageId:T.messageId,mode:g})},[j,T]),{nextMessageId:q,previousMessageId:z}=Ps({context:S,orderedIds:S.orderedIds,selectedMessageId:p,enabled:!G&&!R,hasOpenThread:u!==void 0,onClose:r,handlers:{reply:()=>O?.("reply"),replyAll:()=>O?.("reply-all"),forward:()=>O?.("forward"),delete:()=>{S.listCommandsRef.current?.requestVerb("delete")||P.deleteThread()},toggleStar:P.toggleStar,toggleRead:()=>{S.listCommandsRef.current?.requestVerb("markRead")||T&&V([T.messageId],!T.isRead)},goFlagged:()=>l("flagged"),goSettings:()=>l("settings")}}),A=a.useCallback(g=>{if(!g)return;const N=f.find(B=>B.messageId===g);return N?{threadId:N.threadId,messageId:g}:void 0},[f]),Q={selectedMessageId:p,selectedThread:I,conversation:D,onOpenThread:h,onCloseThread:r,nextThread:A(q),previousThread:A(z),actions:F,onReply:w,triage:S,onDeleteMessages:C,handleDeselectIfRemoved:v};return o.jsx(Le.Provider,{value:Q,children:s})}function De(){const{selectedMessageId:e,onOpenThread:s,triage:n,onDeleteMessages:r}=J(),{accounts:l}=Y();return o.jsx(St,{accounts:l,selectedMessageId:e,onOpenThread:s,commandsRef:n.listCommandsRef,onTriageContextChange:n.onTriageContextChange,onDeleteMessages:r})}function Tt(){const{conversation:e,selectedThread:s,actions:n,onReply:r,handleDeselectIfRemoved:l}=J(),d=!!e,u=Qs(e?.threadId);return o.jsxs(o.Fragment,{children:[o.jsxs("section",{className:"flex h-full w-full min-w-0 flex-col bg-canvas",children:[o.jsx(_s,{hasThread:d,intelligenceOpen:u.isShowing,canToggleIntelligence:u.canToggle,onToggleIntelligence:u.toggle,onReply:r?()=>r("reply"):void 0,onReplyAll:r?()=>r("reply-all"):void 0,onForward:r?()=>r("forward"):void 0,onDelete:d?n.deleteThread:void 0,onToggleStar:d?n.toggleStar:void 0,isStarred:n.isStarred,moveContext:d&&n.accountId&&n.mailboxId?{accountId:n.accountId,currentMailboxId:n.mailboxId,onMove:n.moveThread}:void 0}),o.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:e?o.jsx(we,{threadId:e.threadId,mailboxId:e.mailboxId,subject:e.subject,selectedMessageId:e.messageId,authenticity:e.authenticity,onOpenIntelligence:u.open,listOnScreen:!0}):o.jsx(hs,{})})]}),o.jsx(Me,{isOpen:u.drawerOpen,onClose:u.closeDrawer,thread:s,mailboxId:s?.mailboxId,accountId:s?.accountId,onAfterOptimisticRemove:l})]})}function jt(){const{selectedThread:e,handleDeselectIfRemoved:s}=J(),{onToggleIntelligence:n}=Y();return o.jsx(zs,{onClose:n,thread:e,mailboxId:e?.mailboxId,accountId:e?.accountId,onAfterOptimisticRemove:s})}function Rt(){const{selectedThread:e,conversation:s,onOpenThread:n,onCloseThread:r,nextThread:l,previousThread:d,handleDeselectIfRemoved:u}=J(),m=qs(s?.threadId??null);return s?o.jsxs(o.Fragment,{children:[o.jsx(we,{threadId:s.threadId,mailboxId:s.mailboxId,subject:s.subject,selectedMessageId:s.messageId,authenticity:s.authenticity,onBack:r,onOpenIntelligence:m.toggle,onSwipeNext:l?()=>n(l):void 0,onSwipePrevious:d?()=>n(d):void 0,mobileIntelligenceOpen:m.isOpen}),o.jsx(Me,{isOpen:m.isOpen,onClose:m.close,thread:e,mailboxId:e?.mailboxId,accountId:e?.accountId,onAfterOptimisticRemove:u})]}):o.jsx("div",{className:"h-full",children:o.jsx(De,{})})}const Pt=Object.assign(Ct,{List:De,Reading:Tt,Intelligence:jt,Phone:Rt});export{Pt as B};
@@ -1 +0,0 @@
1
- import{r as n,d as f,e as m,a1 as N,j as e,bb as w,X as E}from"./index-FpwHnbdV.js";import{E as u}from"./ErrorState-4TfgxGLk.js";import{D as r,C as x,u as k}from"./index-CYwsmjFx.js";import{b as p,e as h,f as b}from"./useMessageBodyContent-BOBb68Px.js";import{C as S}from"./confirm-dialog-B4KJVTQx.js";const C=t=>t?"Draft":"New Message",I=()=>{const t=n.useRef(!1);return n.useCallback(()=>{const s=document.querySelector("[data-subject-field]")?.value??"",o=(document.querySelector('[data-testid="compose-body"]')?.textContent??"").replace(/--\s*/g,"").trim();return t.current=s.trim().length>0||o.length>0,t.current},[])},O=()=>{const t=p(),i=h(),s=b(),a=I(),[l,o]=n.useState(!1),{isError:d,error:c,refetch:g}=f({...m(),staleTime:1/0}),j=n.useCallback(D=>{D||(a()?o(!0):s())},[s,a]),y=n.useCallback(()=>{o(!1),s()},[s]),v=n.useCallback(()=>{o(!1)},[]);return N({id:"mobile-compose",open:!0}),e.jsxs(r.Root,{open:!0,onOpenChange:j,children:[e.jsxs(r.Portal,{children:[e.jsx(r.Overlay,{className:"fixed inset-0 z-40 bg-black/40"}),e.jsxs(r.Content,{className:"fixed inset-x-0 bottom-0 z-50 flex flex-col rounded-t-lg bg-canvas pb-[env(safe-area-inset-bottom,0px)]",style:{height:"95dvh"},children:[e.jsx(r.Handle,{className:"mx-auto mt-2 mb-1 h-1.5 w-12 rounded-full bg-fg-muted/30"}),e.jsx(r.Title,{className:"px-4 py-2 text-base font-semibold border-b border-line",children:C(t)}),d?e.jsx("div",{className:"flex-1 flex items-center justify-center p-4",children:e.jsx(u,{title:"Couldn't load compose",error:c,onRetry:()=>{g()}})}):e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx(x,{mode:"new",outboxMessageId:t,onDraftCreated:i,onClose:s})})]})]}),e.jsx(S,{isOpen:l,title:"Discard draft?",description:"Your message has unsaved content. Are you sure you want to discard it?",confirmLabel:"Discard",cancelLabel:"Keep editing",destructive:!0,onConfirm:y,onCancel:v})]})},q=()=>{const t=p(),i=h(),s=b(),a=w(),{isError:l,error:o,refetch:d}=f({...m(),staleTime:1/0});if(k({bindings:[{key:"Escape",handler:s,preventDefault:!0}]}),!a)return e.jsx(O,{});const c=e.jsxs("header",{className:"flex items-center justify-between gap-2 px-4 py-3 border-b border-line shrink-0",children:[e.jsx("div",{className:"flex items-center gap-2 min-w-0",children:e.jsx("h2",{className:"text-lg font-semibold truncate",children:C(t)})}),e.jsx("button",{type:"button",onClick:s,className:"p-2 rounded-md hover:bg-surface-raised transition-colors min-h-11 min-w-11 inline-flex items-center justify-center","aria-label":"Close",children:e.jsx(E,{className:"size-5"})})]});return l?e.jsxs("div",{className:"h-full flex flex-col bg-canvas",children:[c,e.jsx("div",{className:"flex-1 flex items-center justify-center p-4",children:e.jsx(u,{title:"Couldn't load compose",error:o,onRetry:()=>{d()}})})]}):e.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-canvas",children:[c,e.jsx("div",{className:"min-h-0 flex-1 overflow-hidden",children:e.jsx(x,{mode:"new",outboxMessageId:t,onDraftCreated:i,onClose:s})})]})};export{q as F};