@bobfrankston/rmfmail 1.2.100 → 1.2.102
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.
- package/TODO.md +2 -1
- package/client/app.bundle.js +27 -0
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +38 -0
- package/client/app.js.map +1 -1
- package/client/app.ts +33 -0
- package/client/index.html +1 -0
- package/client/styles/components.css +61 -0
- package/docs/preferences.md +1 -0
- package/package.json +5 -5
- package/packages/mailx-settings/docs/preferences.md +1 -0
package/TODO.md
CHANGED
|
@@ -783,7 +783,8 @@ Was part of S1 "local-first reconciliation refactor" until 2026-04-23 when S1's
|
|
|
783
783
|
- [ ] **Full menu bar** — File, Edit, View, Message menus with keyboard shortcuts
|
|
784
784
|
- [x] **Validate email addresses on send** — To/Cc/Bcc/From all vetted against `local@domain.tld` shape before send.
|
|
785
785
|
- [x] **Undo move (Ctrl+Z)** — works for last move and last delete (whichever is more recent), 60s window.
|
|
786
|
-
- [ ] **Message list management** — column resize (drag headers), column
|
|
786
|
+
- [ ] **Message list management** — column resize (drag headers), drag-to-rearrange column order, sort by clicking column headers (from/date/subject/size with secondary sort by date), show/hide columns (size, account) via View menu. Column layout persists LOCALLY (per-machine, localStorage) — explicit user request 2026-07-04.
|
|
787
|
+
- [ ] **Generalize "Eleanor view" into finer view control [M]** — the View-menu "Eleanor view" checkbox (2026-07-04, reworked same day per feedback) is a named CSS preset: always-two-line card list (From … Date / Subject), outlined entries, extra vertical whitespace, monochrome rows, no avatar/snippet, at every width. Replace the one-off preset with real per-view settings — column set + order, row density (compact/normal/airy), row tinting on/off, snippet on/off — persisted per folder or as named view profiles. The preset becomes just a saved profile once profiles exist.
|
|
787
788
|
- [ ] **Duplicate Message-ID handling** — detect messages with the same Message-ID (copies from multiple accounts, re-delivered mail). Options: deduplicate in unified inbox, show indicator, or let user choose which to keep.
|
|
788
789
|
|
|
789
790
|
### msger / mailx factoring
|
package/client/app.bundle.js
CHANGED
|
@@ -10473,6 +10473,7 @@ function openShortcutsDialog() {
|
|
|
10473
10473
|
var viewBtn = document.getElementById("btn-view");
|
|
10474
10474
|
var viewDropdown = document.getElementById("view-dropdown");
|
|
10475
10475
|
var optTwoLine = document.getElementById("opt-two-line");
|
|
10476
|
+
var optEleanor = document.getElementById("opt-eleanor");
|
|
10476
10477
|
var optPreview = document.getElementById("opt-preview");
|
|
10477
10478
|
var optSnippet = document.getElementById("opt-snippet");
|
|
10478
10479
|
var optFlagStars = document.getElementById("opt-flag-stars");
|
|
@@ -10600,6 +10601,7 @@ document.addEventListener("keydown", (e) => {
|
|
|
10600
10601
|
}
|
|
10601
10602
|
});
|
|
10602
10603
|
var savedTwoLine = localStorage.getItem("mailx-two-line") === "true";
|
|
10604
|
+
var savedEleanor = localStorage.getItem("mailx-eleanor-view") === "true";
|
|
10603
10605
|
var savedPreview = localStorage.getItem("mailx-preview") !== "false";
|
|
10604
10606
|
var savedSnippet = localStorage.getItem("mailx-snippet") !== "false";
|
|
10605
10607
|
var savedFlagStars = localStorage.getItem("mailx-flag-stars") !== "false";
|
|
@@ -10611,6 +10613,7 @@ try {
|
|
|
10611
10613
|
}
|
|
10612
10614
|
var savedFolderCounts = localStorage.getItem("mailx-folder-counts") === "true";
|
|
10613
10615
|
if (optTwoLine) optTwoLine.checked = savedTwoLine;
|
|
10616
|
+
if (optEleanor) optEleanor.checked = savedEleanor;
|
|
10614
10617
|
if (optPreview) optPreview.checked = savedPreview;
|
|
10615
10618
|
if (optSnippet) optSnippet.checked = savedSnippet;
|
|
10616
10619
|
if (optFlagStars) optFlagStars.checked = savedFlagStars;
|
|
@@ -10618,6 +10621,7 @@ if (optThreaded) optThreaded.checked = savedThreaded;
|
|
|
10618
10621
|
if (optFlagged) optFlagged.checked = savedFlagged;
|
|
10619
10622
|
if (optFolderCounts) optFolderCounts.checked = savedFolderCounts;
|
|
10620
10623
|
if (savedTwoLine) document.getElementById("message-list")?.classList.add("two-line");
|
|
10624
|
+
if (savedEleanor) document.getElementById("message-list")?.classList.add("eleanor-view");
|
|
10621
10625
|
if (!savedPreview) document.querySelector(".main-area")?.classList.add("no-preview");
|
|
10622
10626
|
if (!savedSnippet) document.getElementById("message-list")?.classList.add("no-snippets");
|
|
10623
10627
|
if (!savedFlagStars) document.getElementById("message-list")?.classList.add("no-empty-stars");
|
|
@@ -10765,6 +10769,29 @@ optTwoLine?.addEventListener("change", () => {
|
|
|
10765
10769
|
}
|
|
10766
10770
|
localStorage.setItem("mailx-two-line", String(optTwoLine.checked));
|
|
10767
10771
|
});
|
|
10772
|
+
function applyEleanorView(on) {
|
|
10773
|
+
document.getElementById("message-list")?.classList.toggle("eleanor-view", on);
|
|
10774
|
+
if (optEleanor) optEleanor.checked = on;
|
|
10775
|
+
try {
|
|
10776
|
+
localStorage.setItem("mailx-eleanor-view", String(on));
|
|
10777
|
+
} catch {
|
|
10778
|
+
}
|
|
10779
|
+
}
|
|
10780
|
+
optEleanor?.addEventListener("change", () => {
|
|
10781
|
+
applyEleanorView(optEleanor.checked);
|
|
10782
|
+
getSettings().then((settings) => {
|
|
10783
|
+
settings.ui = { ...settings.ui, eleanorView: optEleanor.checked };
|
|
10784
|
+
saveSettings(settings);
|
|
10785
|
+
}).catch(() => {
|
|
10786
|
+
});
|
|
10787
|
+
});
|
|
10788
|
+
getSettings().then((s) => {
|
|
10789
|
+
const pref = s.ui?.eleanorView;
|
|
10790
|
+
if (typeof pref === "boolean" && pref !== (localStorage.getItem("mailx-eleanor-view") === "true")) {
|
|
10791
|
+
applyEleanorView(pref);
|
|
10792
|
+
}
|
|
10793
|
+
}).catch(() => {
|
|
10794
|
+
});
|
|
10768
10795
|
optPreview?.addEventListener("change", () => {
|
|
10769
10796
|
const main = document.querySelector(".main-area");
|
|
10770
10797
|
if (optPreview.checked) {
|