@bobfrankston/rmfmail 1.1.3 → 1.1.5

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 (72) hide show
  1. package/bin/build-bundles.mjs +14 -4
  2. package/bin/mailx.js +15 -21
  3. package/bin/mailx.js.map +1 -1
  4. package/bin/mailx.ts +16 -22
  5. package/client/android-bootstrap.bundle.js +2151 -2
  6. package/client/android-bootstrap.bundle.js.map +4 -4
  7. package/client/app.bundle.js +30 -16
  8. package/client/app.bundle.js.map +2 -2
  9. package/client/app.js +20 -20
  10. package/client/app.js.map +1 -1
  11. package/client/app.ts +20 -20
  12. package/client/components/context-menu.js +9 -0
  13. package/client/components/context-menu.js.map +1 -1
  14. package/client/components/context-menu.ts +8 -0
  15. package/client/components/message-viewer.js +21 -5
  16. package/client/components/message-viewer.js.map +1 -1
  17. package/client/components/message-viewer.ts +21 -5
  18. package/client/compose/compose.bundle.js +4 -0
  19. package/client/compose/compose.bundle.js.map +2 -2
  20. package/client/index.html +23 -4
  21. package/client/lib/mailxapi.js +11 -7
  22. package/package.json +9 -9
  23. package/packages/mailx-api/index.d.ts +2 -2
  24. package/packages/mailx-api/index.d.ts.map +1 -1
  25. package/packages/mailx-api/index.js +2 -2
  26. package/packages/mailx-api/index.js.map +1 -1
  27. package/packages/mailx-api/index.ts +3 -3
  28. package/packages/mailx-core/index.d.ts.map +1 -1
  29. package/packages/mailx-core/index.js +3 -2
  30. package/packages/mailx-core/index.js.map +1 -1
  31. package/packages/mailx-core/index.ts +3 -2
  32. package/packages/mailx-imap/index.d.ts +13 -4
  33. package/packages/mailx-imap/index.d.ts.map +1 -1
  34. package/packages/mailx-imap/index.js +16 -8
  35. package/packages/mailx-imap/index.js.map +1 -1
  36. package/packages/mailx-imap/index.ts +15 -7
  37. package/packages/mailx-imap/package-lock.json +2 -2
  38. package/packages/mailx-imap/package.json +1 -1
  39. package/packages/mailx-server/index.d.ts.map +1 -1
  40. package/packages/mailx-server/index.js +4 -3
  41. package/packages/mailx-server/index.js.map +1 -1
  42. package/packages/mailx-server/index.ts +4 -3
  43. package/packages/mailx-service/db-worker.js +3 -4
  44. package/packages/mailx-service/db-worker.js.map +1 -1
  45. package/packages/mailx-service/db-worker.ts +5 -6
  46. package/packages/mailx-service/index.d.ts +20 -3
  47. package/packages/mailx-service/index.d.ts.map +1 -1
  48. package/packages/mailx-service/index.js +19 -17
  49. package/packages/mailx-service/index.js.map +1 -1
  50. package/packages/mailx-service/index.ts +18 -17
  51. package/packages/mailx-service/local-store.d.ts +7 -144
  52. package/packages/mailx-service/local-store.d.ts.map +1 -1
  53. package/packages/mailx-service/local-store.js +6 -511
  54. package/packages/mailx-service/local-store.js.map +1 -1
  55. package/packages/mailx-service/local-store.ts +7 -551
  56. package/packages/mailx-store/charset.d.ts +15 -0
  57. package/packages/mailx-store/charset.d.ts.map +1 -0
  58. package/packages/mailx-store/charset.js +61 -0
  59. package/packages/mailx-store/charset.js.map +1 -0
  60. package/packages/mailx-store/charset.ts +45 -0
  61. package/packages/mailx-store/index.d.ts +2 -0
  62. package/packages/mailx-store/index.d.ts.map +1 -1
  63. package/packages/mailx-store/index.js +2 -0
  64. package/packages/mailx-store/index.js.map +1 -1
  65. package/packages/mailx-store/index.ts +4 -0
  66. package/packages/mailx-store/package.json +1 -1
  67. package/packages/mailx-store/store.d.ts +169 -0
  68. package/packages/mailx-store/store.d.ts.map +1 -0
  69. package/packages/mailx-store/store.js +528 -0
  70. package/packages/mailx-store/store.js.map +1 -0
  71. package/packages/mailx-store/store.ts +567 -0
  72. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-444 → node_modules.npmglobalize-stash-11408}/.package-lock.json +0 -0
@@ -591,6 +591,10 @@ var init_context_menu = __esm({
591
591
  document.addEventListener("scroll", closeContextMenu, true);
592
592
  document.addEventListener("contextmenu", () => {
593
593
  });
594
+ window.addEventListener("message", (e) => {
595
+ if (e.data && e.data.type === "iframePointerDown")
596
+ closeContextMenu();
597
+ });
594
598
  }
595
599
  });
596
600
 
@@ -1139,8 +1143,8 @@ async function showMessage(accountId, uid, folderId, specialUse, isRetry = false
1139
1143
  const previewText = (msg.preview || cached?.preview || "").trim();
1140
1144
  bodyEl.innerHTML = previewText ? `<div class="mv-preview-placeholder">${escapeHtml(previewText)}</div>` : `<div class="mv-empty">Fetching body from server\u2026</div>`;
1141
1145
  const captureGen = gen;
1142
- const off = onEvent((ev) => {
1143
- if (!ev || ev.type !== "bodyAvailable")
1146
+ const off = subscribeStore("*", (ev) => {
1147
+ if (ev.kind !== "bodyAvailable")
1144
1148
  return;
1145
1149
  if (ev.accountId !== accountId || ev.uid !== uid)
1146
1150
  return;
@@ -1984,6 +1988,18 @@ ${csp}
1984
1988
  iframeLeft: rect.left, iframeTop: rect.top
1985
1989
  }, "*");
1986
1990
  });
1991
+ // Iframe pointerdown \u2192 tell the parent to dismiss any open context menu.
1992
+ // The parent's dismissListener listens to its own document's pointerdown,
1993
+ // but iframe events don't bubble across the boundary; without this, a
1994
+ // click in the message body to dismiss the menu would be invisible to
1995
+ // the parent and the menu would stick open.
1996
+ document.addEventListener("pointerdown", function (e) {
1997
+ // The contextmenu handler above ALSO fires pointerdown on right-click;
1998
+ // that one opens a fresh menu, which already closes the previous.
1999
+ // Skip right-click (button 2) to avoid a publish/close race.
2000
+ if (e.button === 2) return;
2001
+ try { window.parent.postMessage({ type: "iframePointerDown" }, "*"); } catch (_) {}
2002
+ }, true);
1987
2003
  // Key forwarding \u2014 Delete, Ctrl+D, arrow keys, etc. need to reach app.ts
1988
2004
  // even when focus is inside the sandboxed iframe. Parent-side
1989
2005
  // contentDocument listeners (see installPreviewControls) work on
@@ -2152,8 +2168,8 @@ var init_message_viewer = __esm({
2152
2168
  ZOOM_MAX = 3;
2153
2169
  ZOOM_STEP = 0.1;
2154
2170
  previewZoom = clampZoom(parseFloat(localStorage.getItem(ZOOM_KEY) || "1"));
2155
- onEvent((ev) => {
2156
- if (!ev || ev.type !== "bodyFetchError")
2171
+ subscribeStore("*", (ev) => {
2172
+ if (ev.kind !== "bodyFetchError")
2157
2173
  return;
2158
2174
  recentFetchErrors.set(`${ev.accountId}:${ev.uid}`, {
2159
2175
  error: String(ev.error || "fetch failed"),
@@ -7796,18 +7812,7 @@ onWsEvent((event) => {
7796
7812
  case "bodyCached":
7797
7813
  markBodiesCached(event.items || []);
7798
7814
  break;
7799
- case "bodyAvailable":
7800
- if (event.accountId && event.uid) {
7801
- markBodiesCached([{ accountId: event.accountId, uid: event.uid }]);
7802
- }
7803
- break;
7804
- case "messageRemoved":
7805
- if (event.accountId && event.uid) {
7806
- document.dispatchEvent(new CustomEvent("mailx-remove-stale", {
7807
- detail: { accountId: event.accountId, uid: event.uid }
7808
- }));
7809
- }
7810
- break;
7815
+ // bodyAvailable and messageRemoved migrated to subscribeStore below.
7811
7816
  case "syncStateChanged": {
7812
7817
  if (!statusSync) break;
7813
7818
  const msgs = event.messageActions ?? 0;
@@ -7976,6 +7981,15 @@ onWsEvent((event) => {
7976
7981
  }
7977
7982
  }
7978
7983
  });
7984
+ subscribeStore("*", (ev) => {
7985
+ if (ev.kind === "bodyAvailable" && ev.accountId && ev.uid) {
7986
+ markBodiesCached([{ accountId: ev.accountId, uid: ev.uid }]);
7987
+ } else if (ev.kind === "messageRemoved" && ev.accountId && ev.uid) {
7988
+ document.dispatchEvent(new CustomEvent("mailx-remove-stale", {
7989
+ detail: { accountId: ev.accountId, uid: ev.uid }
7990
+ }));
7991
+ }
7992
+ });
7979
7993
  async function openComposeFromMailto(m) {
7980
7994
  const accountsP = getAccounts();
7981
7995
  const frame = showComposeOverlay(m.subject ? `Compose: ${m.subject}` : "Compose");