@bobfrankston/rmfmail 1.1.170 → 1.1.177

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 (53) hide show
  1. package/bin/mailx.js +140 -4
  2. package/bin/mailx.js.map +1 -1
  3. package/bin/mailx.ts +127 -5
  4. package/client/android-bootstrap.bundle.js +4 -3
  5. package/client/android-bootstrap.bundle.js.map +2 -2
  6. package/client/app.bundle.js +91 -6
  7. package/client/app.bundle.js.map +2 -2
  8. package/client/app.js +39 -0
  9. package/client/app.js.map +1 -1
  10. package/client/app.ts +33 -0
  11. package/client/components/message-list.js +114 -7
  12. package/client/components/message-list.js.map +1 -1
  13. package/client/components/message-list.ts +113 -6
  14. package/client/compose/compose.bundle.js +2068 -1775
  15. package/client/compose/compose.bundle.js.map +4 -4
  16. package/client/compose/editor.js +85 -0
  17. package/client/compose/editor.js.map +1 -1
  18. package/client/compose/editor.ts +79 -0
  19. package/client/compose/spellcheck-core.js +253 -0
  20. package/client/compose/spellcheck-core.js.map +1 -0
  21. package/client/compose/spellcheck-core.ts +242 -0
  22. package/package.json +5 -5
  23. package/packages/mailx-core/index.js +1 -1
  24. package/packages/mailx-core/index.js.map +1 -1
  25. package/packages/mailx-core/index.ts +1 -1
  26. package/packages/mailx-imap/index.d.ts.map +1 -1
  27. package/packages/mailx-imap/index.js +15 -1
  28. package/packages/mailx-imap/index.js.map +1 -1
  29. package/packages/mailx-imap/index.ts +9 -1
  30. package/packages/mailx-imap/package-lock.json +2 -2
  31. package/packages/mailx-imap/package.json +1 -1
  32. package/packages/mailx-store/db.d.ts +9 -1
  33. package/packages/mailx-store/db.d.ts.map +1 -1
  34. package/packages/mailx-store/db.js +15 -2
  35. package/packages/mailx-store/db.js.map +1 -1
  36. package/packages/mailx-store/db.ts +18 -4
  37. package/packages/mailx-store/package.json +1 -1
  38. package/packages/mailx-store/store.js +1 -1
  39. package/packages/mailx-store/store.js.map +1 -1
  40. package/packages/mailx-store/store.ts +1 -1
  41. package/packages/mailx-store-web/android-bootstrap.js +1 -1
  42. package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
  43. package/packages/mailx-store-web/android-bootstrap.ts +1 -1
  44. package/packages/mailx-store-web/db.d.ts +2 -1
  45. package/packages/mailx-store-web/db.d.ts.map +1 -1
  46. package/packages/mailx-store-web/db.js +3 -2
  47. package/packages/mailx-store-web/db.js.map +1 -1
  48. package/packages/mailx-store-web/db.ts +4 -3
  49. package/packages/mailx-store-web/package.json +1 -1
  50. package/packages/mailx-store-web/sync-manager.js +1 -1
  51. package/packages/mailx-store-web/sync-manager.js.map +1 -1
  52. package/packages/mailx-store-web/sync-manager.ts +1 -1
  53. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-46236 → node_modules.npmglobalize-stash-50992}/.package-lock.json +0 -0
package/client/app.js CHANGED
@@ -3377,6 +3377,45 @@ document.getElementById("message-viewer")?.addEventListener("dblclick", (e) => {
3377
3377
  toggleFullscreenPreview();
3378
3378
  });
3379
3379
  // ── F6 pane cycling ──
3380
+ /** Focus a specific pane by element id. Same visual hint as cyclePaneFocus
3381
+ * so the user can see which pane took focus. Wired to middle-click. */
3382
+ function focusPaneById(id) {
3383
+ const el = document.getElementById(id);
3384
+ if (!el)
3385
+ return;
3386
+ if (!el.hasAttribute("tabindex"))
3387
+ el.setAttribute("tabindex", "-1");
3388
+ el.focus();
3389
+ el.style.outline = "2px solid var(--color-accent, #3b82f6)";
3390
+ el.style.outlineOffset = "-2px";
3391
+ setTimeout(() => { el.style.outline = ""; el.style.outlineOffset = ""; }, 600);
3392
+ }
3393
+ // Middle-click anywhere in a pane focuses that pane. Doesn't conflict with
3394
+ // any existing right-click context menus or left-click selection handlers.
3395
+ // Bob 2026-05-27: F6/Shift+F6 isn't memorable; right-click feels natural.
3396
+ // We do middle-click (button=1) because right-click is already overloaded
3397
+ // for row/message context menus throughout the UI.
3398
+ document.addEventListener("auxclick", (e) => {
3399
+ if (e.button !== 1)
3400
+ return; // middle button only
3401
+ const target = e.target;
3402
+ if (!target)
3403
+ return;
3404
+ const ft = target.closest("#folder-tree");
3405
+ const ml = target.closest("#ml-body");
3406
+ const mv = target.closest("#message-viewer");
3407
+ let id = null;
3408
+ if (ft)
3409
+ id = "folder-tree";
3410
+ else if (ml)
3411
+ id = "ml-body";
3412
+ else if (mv)
3413
+ id = "message-viewer";
3414
+ if (!id)
3415
+ return;
3416
+ e.preventDefault();
3417
+ focusPaneById(id);
3418
+ });
3380
3419
  function cyclePaneFocus(reverse) {
3381
3420
  // Major panes in tab order. Skip ones not currently visible (folder
3382
3421
  // tree is hidden in narrow tier when the rail/drawer is closed; message