@bobfrankston/rmfmail 1.2.296 → 1.2.298

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 (36) hide show
  1. package/.commitmsg +28 -24
  2. package/client/android-bootstrap.bundle.js.map +2 -2
  3. package/client/app.bundle.js +20 -0
  4. package/client/app.bundle.js.map +2 -2
  5. package/client/app.js +27 -1
  6. package/client/app.js.map +1 -1
  7. package/client/app.ts +25 -1
  8. package/client/compose/compose.bundle.js.map +2 -2
  9. package/client/compose/compose.js +7 -4
  10. package/client/compose/compose.js.map +1 -1
  11. package/client/compose/compose.ts +7 -4
  12. package/client/index.html +5 -0
  13. package/client/styles/components.css +22 -5
  14. package/npmchanges.md +67 -0
  15. package/package.json +7 -7
  16. package/packages/mailx-imap/index.d.ts +1 -0
  17. package/packages/mailx-imap/index.d.ts.map +1 -1
  18. package/packages/mailx-imap/index.js +34 -4
  19. package/packages/mailx-imap/index.js.map +1 -1
  20. package/packages/mailx-imap/index.ts +32 -5
  21. package/packages/mailx-imap/package-lock.json +2 -2
  22. package/packages/mailx-imap/package.json +1 -1
  23. package/packages/mailx-service/index.d.ts.map +1 -1
  24. package/packages/mailx-service/index.js +10 -0
  25. package/packages/mailx-service/index.js.map +1 -1
  26. package/packages/mailx-service/index.ts +10 -0
  27. package/packages/mailx-service/package.json +1 -1
  28. package/packages/mailx-settings/package.json +1 -1
  29. package/packages/mailx-store/package.json +1 -1
  30. package/packages/mailx-store-web/package.json +1 -1
  31. package/packages/mailx-types/index.d.ts +10 -4
  32. package/packages/mailx-types/index.d.ts.map +1 -1
  33. package/packages/mailx-types/index.js.map +1 -1
  34. package/packages/mailx-types/index.ts +10 -4
  35. package/packages/mailx-types/package.json +1 -1
  36. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-40440 → node_modules.npmglobalize-stash-39180}/.package-lock.json +0 -0
package/client/app.ts CHANGED
@@ -2157,7 +2157,7 @@ document.getElementById("btn-flag")?.addEventListener("click", async () => {
2157
2157
  try {
2158
2158
  await updateFlags(sel.accountId, sel.uid, sel.flags, (sel as any).folderId);
2159
2159
  messageState.updateMessageFlags(sel.accountId, sel.uid, sel.flags, (sel as any).folderId);
2160
- // Row owns its own DOM \u2014 go through the row object so class + star
2160
+ // Row owns its own DOM go through the row object so class + star
2161
2161
  // update atomically and the list/preview stay in sync.
2162
2162
  setRowFlagged(sel.accountId, sel.uid, !wasFlagged, (sel as any).folderId);
2163
2163
  } catch (e: unknown) {
@@ -5537,6 +5537,27 @@ function syncFilterFlaggedButton(): void {
5537
5537
  btn.setAttribute("aria-pressed", optFlagged?.checked ? "true" : "false");
5538
5538
  }
5539
5539
 
5540
+ /** Name the active list filter above the list, and make the name the way out
5541
+ * of it. The filter used to announce itself by tinting every row — which is
5542
+ * how the list says "selected", so a filtered list read as a selected one
5543
+ * (Bob 2026-08-29: "if I press * on search it shouldn't automatically select
5544
+ * those letters, just show them"). Names which filter, not "a filter is on". */
5545
+ function syncFilterChip(): void {
5546
+ const chip = document.getElementById("ml-filter-chip");
5547
+ if (!chip) return;
5548
+ const flagged = !!(document.getElementById("opt-flagged") as HTMLInputElement | null)?.checked;
5549
+ const priority = !!(document.getElementById("opt-priority-only") as HTMLInputElement | null)?.checked;
5550
+ const names = [flagged ? "flagged (★) messages" : "", priority ? "priority senders" : ""].filter(Boolean);
5551
+ if (!names.length) { chip.hidden = true; return; }
5552
+ chip.hidden = false;
5553
+ chip.textContent = "Showing " + names.join(" and ") + " only — click to show everything";
5554
+ chip.title = "Clear the list filter";
5555
+ }
5556
+
5557
+ document.getElementById("ml-filter-chip")?.addEventListener("click", () => {
5558
+ document.dispatchEvent(new CustomEvent("mailx-clear-list-filters"));
5559
+ });
5560
+
5540
5561
  function applyFlaggedFilter(on: boolean): void {
5541
5562
  try { logClientEvent("applyFlaggedFilter", { on, caller: new Error().stack?.split("\n").slice(2, 5).join(" | ") }); } catch { /* */ }
5542
5563
  if (optFlagged) optFlagged.checked = on;
@@ -5545,6 +5566,7 @@ function applyFlaggedFilter(on: boolean): void {
5545
5566
  else body?.classList.remove("flagged-only");
5546
5567
  localStorage.setItem("mailx-flagged", String(on));
5547
5568
  syncFilterFlaggedButton();
5569
+ syncFilterChip();
5548
5570
  reloadCurrentFolder();
5549
5571
  }
5550
5572
 
@@ -5559,6 +5581,7 @@ document.getElementById("btn-filter-flagged")?.addEventListener("click", () => {
5559
5581
  // Initial paint of the button's pressed state (covers the localStorage-restored
5560
5582
  // value loaded earlier in this file).
5561
5583
  syncFilterFlaggedButton();
5584
+ syncFilterChip();
5562
5585
 
5563
5586
  // Priority-senders-only filter — same pattern as flagged-only. Adds
5564
5587
  // .priority-only to the list body; CSS hides any row without .priority.
@@ -5572,6 +5595,7 @@ if (optPriorityOnly) {
5572
5595
  if (optPriorityOnly.checked) body?.classList.add("priority-only");
5573
5596
  else body?.classList.remove("priority-only");
5574
5597
  localStorage.setItem("mailx-priority-only", String(optPriorityOnly.checked));
5598
+ syncFilterChip();
5575
5599
  });
5576
5600
  }
5577
5601