@bobfrankston/rmfmail 1.1.132 → 1.1.133

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/npmchanges.md CHANGED
@@ -376,3 +376,25 @@ on first run. Swap the dynamic import to node:sqlite's DatabaseSync, and
376
376
  move the WAL setting from .pragma() (better-sqlite3-specific) to
377
377
  .exec("PRAGMA …") (works on both).
378
378
 
379
+ ## v1.1.132 — 2026-05-24
380
+
381
+ feat: multi-level undo, viewer fate-sharing, ★ filter + ★ bulk-flag
382
+
383
+ - Multi-level undo (Ctrl+Z). Replaces single-slot lastDeleted / lastMoved
384
+ with a LIFO undoStack. Each user-driven destructive action (delete,
385
+ move, bulk-flag) pushes a typed UndoOp; Ctrl+Z pops and reverses via
386
+ existing service IPC. Bounded at 50 entries, 10 min per-entry TTL,
387
+ checked at pop time. No redo (undoing an undo isn't itself undoable).
388
+ - Viewer/list fate-sharing: when loadMessages produces an empty result OR
389
+ the focused row's message isn't in the freshly-loaded set (filter
390
+ toggle, sync drop, navigation), clearViewer() runs so the preview pane
391
+ doesn't keep showing a stale message that the list says doesn't exist.
392
+ - Search-bar ★ filter button (id=btn-filter-flagged). Mirrors the
393
+ buried-in-View-menu opt-flagged checkbox so the flagged-only filter is
394
+ reachable in one click. Pressed/active state via .active CSS marker.
395
+ - Toolbar ★ bulk-flag button (id=btn-tb-flag) next to trash/spam.
396
+ Operates on the message-list selection (falls back to viewer focus when
397
+ empty). Smart toggle: if any selected row is unflagged → flag all;
398
+ if all flagged → unflag all. Pushes a single undo entry capturing each
399
+ row's prior state so Ctrl+Z restores the exact mix.
400
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/rmfmail",
3
- "version": "1.1.132",
3
+ "version": "1.1.133",
4
4
  "description": "Local-first email client with IMAP sync and standalone native app",
5
5
  "type": "module",
6
6
  "main": "bin/mailx.js",
package/.commitmsg DELETED
@@ -1,19 +0,0 @@
1
- feat: multi-level undo, viewer fate-sharing, ★ filter + ★ bulk-flag
2
-
3
- - Multi-level undo (Ctrl+Z). Replaces single-slot lastDeleted / lastMoved
4
- with a LIFO undoStack. Each user-driven destructive action (delete,
5
- move, bulk-flag) pushes a typed UndoOp; Ctrl+Z pops and reverses via
6
- existing service IPC. Bounded at 50 entries, 10 min per-entry TTL,
7
- checked at pop time. No redo (undoing an undo isn't itself undoable).
8
- - Viewer/list fate-sharing: when loadMessages produces an empty result OR
9
- the focused row's message isn't in the freshly-loaded set (filter
10
- toggle, sync drop, navigation), clearViewer() runs so the preview pane
11
- doesn't keep showing a stale message that the list says doesn't exist.
12
- - Search-bar ★ filter button (id=btn-filter-flagged). Mirrors the
13
- buried-in-View-menu opt-flagged checkbox so the flagged-only filter is
14
- reachable in one click. Pressed/active state via .active CSS marker.
15
- - Toolbar ★ bulk-flag button (id=btn-tb-flag) next to trash/spam.
16
- Operates on the message-list selection (falls back to viewer focus when
17
- empty). Smart toggle: if any selected row is unflagged → flag all;
18
- if all flagged → unflag all. Pushes a single undo entry capturing each
19
- row's prior state so Ctrl+Z restores the exact mix.