@bobfrankston/rmfmail 1.2.242 → 1.2.243

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 (31) hide show
  1. package/client/android-bootstrap.bundle.js +24 -2
  2. package/client/android-bootstrap.bundle.js.map +2 -2
  3. package/client/app.bundle.js +33 -3
  4. package/client/app.bundle.js.map +2 -2
  5. package/client/app.js +6 -1
  6. package/client/app.js.map +1 -1
  7. package/client/app.ts +6 -1
  8. package/client/components/message-list.js +13 -2
  9. package/client/components/message-list.js.map +1 -1
  10. package/client/components/message-viewer.js +48 -2
  11. package/client/components/message-viewer.js.map +1 -1
  12. package/client/components/message-viewer.ts +50 -2
  13. package/package.json +5 -5
  14. package/packages/mailx-imap/index.d.ts +9 -0
  15. package/packages/mailx-imap/index.d.ts.map +1 -1
  16. package/packages/mailx-imap/index.js +86 -0
  17. package/packages/mailx-imap/index.js.map +1 -1
  18. package/packages/mailx-imap/index.ts +73 -0
  19. package/packages/mailx-imap/package-lock.json +2 -2
  20. package/packages/mailx-imap/package.json +1 -1
  21. package/packages/mailx-service/index.d.ts.map +1 -1
  22. package/packages/mailx-service/index.js +37 -4
  23. package/packages/mailx-service/index.js.map +1 -1
  24. package/packages/mailx-types/mime-inline-images.d.ts +0 -4
  25. package/packages/mailx-types/mime-inline-images.d.ts.map +1 -1
  26. package/packages/mailx-types/mime-inline-images.js +48 -4
  27. package/packages/mailx-types/mime-inline-images.js.map +1 -1
  28. package/packages/mailx-types/mime-inline-images.ts +45 -5
  29. package/packages/mailx-types/package.json +1 -1
  30. package/packages/mailx-types/test/inline-images.test.mjs +79 -0
  31. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-33484 → node_modules.npmglobalize-stash-17784}/.package-lock.json +0 -0
@@ -3503,7 +3503,10 @@ function buildPrintableDoc(m) {
3503
3503
  function printCurrentMessage() {
3504
3504
  if (!currentMessage)
3505
3505
  return;
3506
- const doc = buildPrintableDoc(currentMessage);
3506
+ printMessage(currentMessage);
3507
+ }
3508
+ function printMessage(msg) {
3509
+ const doc = buildPrintableDoc(msg);
3507
3510
  if (!doc)
3508
3511
  return;
3509
3512
  const iframe = document.createElement("iframe");
@@ -3604,6 +3607,30 @@ function spawnDesktopPopout(msg, accountId) {
3604
3607
  closeBtn.addEventListener("mouseleave", () => closeBtn.style.color = "#666");
3605
3608
  closeBtn.addEventListener("click", () => wrapper.remove());
3606
3609
  titleBar.appendChild(closeBtn);
3610
+ const actions = document.createElement("div");
3611
+ actions.style.cssText = "display:flex;gap:4px;padding:6px 10px;border-bottom:1px solid var(--color-border, #ddd);flex-shrink:0;flex-wrap:wrap;";
3612
+ const compose = (mode) => {
3613
+ document.dispatchEvent(new CustomEvent("mailx-compose", {
3614
+ detail: { mode, message: msg, accountId }
3615
+ }));
3616
+ };
3617
+ const mkBtn = (label, title, onClick) => {
3618
+ const b = document.createElement("button");
3619
+ b.className = "tb-btn";
3620
+ b.textContent = label;
3621
+ b.title = title;
3622
+ b.style.cssText = "padding:3px 10px;font-size:13px;cursor:pointer;";
3623
+ b.addEventListener("click", onClick);
3624
+ return b;
3625
+ };
3626
+ actions.appendChild(mkBtn("\u21A9 Reply", "Reply to the sender of this message", () => compose("reply")));
3627
+ actions.appendChild(mkBtn("\u21A9\u21A9 Reply All", "Reply to everyone on this message", () => compose("replyAll")));
3628
+ actions.appendChild(mkBtn("\u2192 Forward", "Forward this message", () => compose("forward")));
3629
+ actions.appendChild(mkBtn("\u270E Edit as new", "Open a copy of this message in compose \u2014 the way to rework and resend one you sent", () => compose("editAsNew")));
3630
+ const spacer = document.createElement("span");
3631
+ spacer.style.cssText = "flex:1;";
3632
+ actions.appendChild(spacer);
3633
+ actions.appendChild(mkBtn("\u{1F5A8}", "Print this message", () => printMessage(msg)));
3607
3634
  const headerInfo = document.createElement("div");
3608
3635
  headerInfo.style.cssText = "padding:8px 12px;border-bottom:1px solid var(--color-border, #ddd);font-size:13px;line-height:1.4;flex-shrink:0;";
3609
3636
  const formatAddrLocal = (a) => a.name ? `${a.name} <${a.address}>` : a.address;
@@ -3694,6 +3721,7 @@ function spawnDesktopPopout(msg, accountId) {
3694
3721
  wrapper.remove();
3695
3722
  }));
3696
3723
  wrapper.appendChild(titleBar);
3724
+ wrapper.appendChild(actions);
3697
3725
  wrapper.appendChild(headerInfo);
3698
3726
  wrapper.appendChild(toolbar);
3699
3727
  wrapper.appendChild(bodyContainer);
@@ -4691,7 +4719,9 @@ async function loadSearchResults(query, scope = "all", accountId = "", folderId
4691
4719
  const partial = !!result.partial;
4692
4720
  const foldersFailed = result.foldersFailed || 0;
4693
4721
  const foldersSearched = result.foldersSearched || 0;
4694
- const partialNote = partial ? `<div class="ml-search-warning">\u26A0 Searched ${foldersSearched} folder(s); ${foldersFailed} could not be searched (timeout / connection). Results may be incomplete \u2014 retry to search them again.</div>` : "";
4722
+ const foldersGone = result.foldersGone || 0;
4723
+ const goneNote = foldersGone > 0 ? `<div class="ml-search-warning">Removed ${foldersGone} stale folder(s) that no longer exist on the server \u2014 they won't be searched again.</div>` : "";
4724
+ const partialNote = (partial && foldersFailed > 0 ? `<div class="ml-search-warning">\u26A0 Searched ${foldersSearched} folder(s); ${foldersFailed} timed out. Results may be incomplete \u2014 search again to retry those.</div>` : "") + goneNote;
4695
4725
  if (result.items.length === 0) {
4696
4726
  setMessages([]);
4697
4727
  body.innerHTML = partialNote + `<div class="ml-empty">No messages found by "${escapeHtmlText(query)}"${partial ? " in the folders that responded" : ""}</div>`;
@@ -10336,7 +10366,7 @@ document.addEventListener("mailx-compose", ((e) => {
10336
10366
  if (e.detail.mode === "draft" && sessionStorage.getItem("composeInit")) {
10337
10367
  showComposeOverlay();
10338
10368
  } else {
10339
- openCompose(e.detail.mode);
10369
+ openCompose(e.detail.mode, e.detail.message, e.detail.accountId);
10340
10370
  }
10341
10371
  }));
10342
10372
  document.addEventListener("mailx-delete", () => deleteSelection());