@bobfrankston/rmfmail 1.0.565 → 1.0.570

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 (44) hide show
  1. package/client/app.js +13 -5
  2. package/client/app.js.map +1 -1
  3. package/client/app.ts +12 -4
  4. package/client/components/folder-tree.js +11 -0
  5. package/client/components/folder-tree.js.map +1 -1
  6. package/client/components/folder-tree.ts +8 -0
  7. package/client/components/message-list.js +6 -3
  8. package/client/components/message-list.js.map +1 -1
  9. package/client/components/message-list.ts +6 -3
  10. package/client/components/message-viewer.js +58 -5
  11. package/client/components/message-viewer.js.map +1 -1
  12. package/client/components/message-viewer.ts +58 -5
  13. package/client/index.html +1 -0
  14. package/client/lib/api-client.js +2 -2
  15. package/client/lib/api-client.js.map +1 -1
  16. package/client/lib/api-client.ts +2 -2
  17. package/client/lib/mailxapi.js +2 -2
  18. package/client/styles/components.css +13 -0
  19. package/package.json +3 -3
  20. package/packages/mailx-imap/index.d.ts.map +1 -1
  21. package/packages/mailx-imap/index.js +29 -13
  22. package/packages/mailx-imap/index.js.map +1 -1
  23. package/packages/mailx-imap/index.ts +29 -13
  24. package/packages/mailx-imap/package-lock.json +2 -2
  25. package/packages/mailx-imap/package.json +1 -1
  26. package/packages/mailx-service/index.d.ts +1 -1
  27. package/packages/mailx-service/index.d.ts.map +1 -1
  28. package/packages/mailx-service/index.js +5 -3
  29. package/packages/mailx-service/index.js.map +1 -1
  30. package/packages/mailx-service/index.ts +5 -3
  31. package/packages/mailx-service/jsonrpc.js +1 -1
  32. package/packages/mailx-service/jsonrpc.js.map +1 -1
  33. package/packages/mailx-service/jsonrpc.ts +1 -1
  34. package/packages/mailx-service/local-store.d.ts +1 -1
  35. package/packages/mailx-service/local-store.d.ts.map +1 -1
  36. package/packages/mailx-service/local-store.js +2 -2
  37. package/packages/mailx-service/local-store.js.map +1 -1
  38. package/packages/mailx-service/local-store.ts +2 -2
  39. package/packages/mailx-store/db.d.ts +65 -6
  40. package/packages/mailx-store/db.d.ts.map +1 -1
  41. package/packages/mailx-store/db.js +311 -53
  42. package/packages/mailx-store/db.js.map +1 -1
  43. package/packages/mailx-store/db.ts +340 -54
  44. package/packages/mailx-store/package.json +1 -1
package/client/app.js CHANGED
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { initFolderTree, refreshFolderTree, updateFolderCounts, setFolderSynced, getFolderSynced, setOutboxTotal } from "./components/folder-tree.js";
6
6
  import { initMessageList, loadMessages, loadUnifiedInbox, loadSearchResults, reloadCurrentFolder, clearSearchMode, getSelectedMessages, markBodiesCached, getCurrentFocused, releaseFocus, removeMessagesAndReconcile, setRowFlagged, scrollFocusedIntoView, refreshPriorityIndex } from "./components/message-list.js";
7
- import { showMessage, getCurrentMessage, initViewer, popOutCurrentMessage, toggleFullscreenPreview, showPreviewBodyMenu } from "./components/message-viewer.js";
7
+ import { getCurrentMessage, initViewer, popOutCurrentMessage, toggleFullscreenPreview, showPreviewBodyMenu } from "./components/message-viewer.js";
8
8
  import { connectWebSocket, onWsEvent, triggerSync, syncAccount, reauthenticate, getAccounts, getFolders, deleteMessages, undeleteMessage, restartServer, getSyncPending, getVersion, getSettings, saveSettings, getAutocompleteSettings, saveAutocompleteSettings, repairAccounts, updateFlags, markAsSpamMessages, logClientEvent, sendMessage as apiSendMessage } from "./lib/api-client.js";
9
9
  import * as messageState from "./lib/message-state.js";
10
10
  // ── New message badge (favicon + title) ──
@@ -324,9 +324,14 @@ initFolderTree(folderTree, (accountId, folderId, folderName, specialUse) => {
324
324
  setTitle(`${APP_NAME} - All Inboxes`);
325
325
  setNarrowFolderTitle("All Inboxes");
326
326
  });
327
- initMessageList((accountId, uid, folderId) => {
328
- showMessage(accountId, uid, folderId, currentFolderSpecialUse);
329
- // Narrow screen: show message viewer, hide list
327
+ initMessageList((_accountId, _uid, _folderId) => {
328
+ // The list row's setFocus() already drove the viewer with its own
329
+ // envelope (header + preview paint synchronously, body fetches in
330
+ // background). Calling showMessage here a SECOND time without the
331
+ // envelope wiped the good render and forced a bare "Loading…"
332
+ // placeholder until the body IPC returned — making every click feel
333
+ // like a network round-trip. This callback now only handles the
334
+ // narrow-screen layout switch.
330
335
  if (window.innerWidth <= 768) {
331
336
  document.getElementById("message-viewer")?.classList.add("narrow-active");
332
337
  document.getElementById("message-list")?.classList.add("narrow-hidden");
@@ -1450,8 +1455,10 @@ function doSearch(immediate = false) {
1450
1455
  // "server" which spans all folders on all accounts. Local scope dropdown
1451
1456
  // is unchanged (all/current) for the local-only case.
1452
1457
  const serverCheck = document.getElementById("search-server-too");
1458
+ const trashCheck = document.getElementById("search-include-trash");
1453
1459
  const localScope = searchScope?.value || "all";
1454
1460
  const effectiveScope = serverCheck?.checked ? "server" : localScope;
1461
+ const includeTrash = !!trashCheck?.checked;
1455
1462
  // "This folder" scope: instant client-side filter on debounce, server search on Enter
1456
1463
  if (effectiveScope === "current" && !immediate) {
1457
1464
  // Client-side filter of visible rows
@@ -1465,7 +1472,7 @@ function doSearch(immediate = false) {
1465
1472
  }
1466
1473
  return;
1467
1474
  }
1468
- loadSearchResults(query, effectiveScope, currentAccountId, currentFolderId);
1475
+ loadSearchResults(query, effectiveScope, currentAccountId, currentFolderId, includeTrash);
1469
1476
  setTitle(`${APP_NAME} - Search: ${query}`);
1470
1477
  }
1471
1478
  // Track current folder for scoped search
@@ -1523,6 +1530,7 @@ function rerunActiveSearch() {
1523
1530
  }
1524
1531
  searchScope?.addEventListener("change", rerunActiveSearch);
1525
1532
  document.getElementById("search-server-too")?.addEventListener("change", rerunActiveSearch);
1533
+ document.getElementById("search-include-trash")?.addEventListener("change", rerunActiveSearch);
1526
1534
  // Message state handles move/delete — no manual event listener needed
1527
1535
  // ── Folder filter ──
1528
1536
  const ftFilterInput = document.getElementById("ft-filter-input");