@bobfrankston/rmfmail 1.2.101 → 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/client/app.ts CHANGED
@@ -4286,10 +4286,10 @@ optTwoLine?.addEventListener("change", () => {
4286
4286
  localStorage.setItem("mailx-two-line", String(optTwoLine.checked));
4287
4287
  });
4288
4288
 
4289
- // Eleanor view toggle — Thunderbird-classic one-line summary list
4290
- // ( | Subject | From | Date, whitespace, monochrome). Pure CSS class;
4291
- // the row markup is unchanged. TODO.md: generalize into per-column view
4292
- // control instead of a named preset.
4289
+ // Eleanor view toggle — Thunderbird-classic two-line card list at every
4290
+ // width (From Date / Subject, outlined entries, airy, monochrome).
4291
+ // Pure CSS class; the row markup is unchanged. TODO.md: generalize into
4292
+ // per-column view control instead of a named preset.
4293
4293
  function applyEleanorView(on: boolean): void {
4294
4294
  document.getElementById("message-list")?.classList.toggle("eleanor-view", on);
4295
4295
  if (optEleanor) optEleanor.checked = on;
@@ -539,39 +539,49 @@ button.tb-menu-item { background: none; border: none; color: inherit; width: 100
539
539
  }
540
540
 
541
541
  /* ── Eleanor view ──────────────────────────────────────────────────────
542
- Thunderbird-classic summary list: one line per message in table order
543
- | Subject | From | Date no avatar, no snippet, no row tinting,
544
- generous row padding. Named for its first user; TODO.md tracks
545
- generalizing it into proper per-column view control.
546
- :not(.two-line) below 600px the ResizeObserver forces two-line,
547
- which must keep winning there; a one-line table is unusable that
548
- narrow anyway. The monochrome rules below apply in both cases. */
549
- .message-list.eleanor-view:not(.two-line) {
550
- /* flag | subject | from | date */
551
- grid-template-columns: 1.7em minmax(0, 1fr) minmax(140px, 220px) auto;
542
+ Thunderbird-classic two-line card list at EVERY width: From Date on
543
+ the first line, Subject on the second, each entry outlined and set off
544
+ with breathing room. No avatar, no snippet, monochrome rows. Named for
545
+ its first user; TODO.md tracks generalizing it into per-column view
546
+ control with drag-reorder.
547
+ Defined without reference to .two-line so the layout is identical
548
+ whether the ResizeObserver has forced two-line (narrow) or not (wide);
549
+ these rules sit after the .two-line block, so they win when both
550
+ classes are present. */
551
+ .message-list.eleanor-view {
552
+ /* flag | from + subject | date */
553
+ grid-template-columns: 1.7em minmax(0, 1fr) auto;
552
554
  column-gap: var(--gap-md);
553
555
  }
554
- .message-list.eleanor-view:not(.two-line) .ml-row {
555
- grid-template-rows: auto;
556
- padding-top: 9px;
557
- padding-bottom: 9px;
556
+ .message-list.eleanor-view .ml-row {
557
+ grid-template-columns: subgrid;
558
+ grid-template-rows: auto auto;
559
+ margin: var(--gap-xs) var(--gap-sm);
560
+ padding: 8px var(--gap-sm);
561
+ border: 1px solid color-mix(in oklch, var(--color-text-muted) 55%, transparent);
562
+ border-radius: 4px;
558
563
  line-height: 1.5;
559
564
  }
560
- .message-list.eleanor-view:not(.two-line) .ml-avatar { display: none; }
561
- .message-list.eleanor-view:not(.two-line) .ml-flag { grid-column: 1; grid-row: 1; font-size: 1.15em; }
562
- .message-list.eleanor-view:not(.two-line) .ml-subject {
563
- grid-column: 2; grid-row: 1;
565
+ .message-list.eleanor-view .ml-avatar { display: none; }
566
+ .message-list.eleanor-view .ml-flag { grid-column: 1; grid-row: 1 / 3; align-self: center; font-size: 1.15em; }
567
+ .message-list.eleanor-view .ml-from { grid-column: 2; grid-row: 1; }
568
+ .message-list.eleanor-view .ml-date { grid-column: 3; grid-row: 1; padding-right: var(--gap-md); }
569
+ .message-list.eleanor-view .ml-subject {
570
+ grid-column: 2 / 4;
571
+ grid-row: 2;
572
+ /* !important beats the two-line block's !important accent color when
573
+ both classes are present; muted gray keeps the view monochrome. */
574
+ color: var(--color-text-muted) !important;
575
+ font-size: var(--font-size-base);
564
576
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
565
577
  }
566
- .message-list.eleanor-view:not(.two-line) .ml-from { grid-column: 3; grid-row: 1; }
567
- .message-list.eleanor-view:not(.two-line) .ml-date { grid-column: 4; grid-row: 1; padding-right: var(--gap-md); }
568
- /* Sortable header follows the remapped column order. */
569
- .message-list.eleanor-view:not(.two-line) .ml-col-avatar { display: none; }
570
- .message-list.eleanor-view:not(.two-line) .ml-col-flag { grid-column: 1; }
571
- .message-list.eleanor-view:not(.two-line) .ml-col-subject { grid-column: 2; grid-row: 1; }
572
- .message-list.eleanor-view:not(.two-line) .ml-col-from { grid-column: 3; grid-row: 1; }
573
- .message-list.eleanor-view:not(.two-line) .ml-col-date { grid-column: 4; grid-row: 1; }
574
- /* Single clean line: no body snippet after the subject. */
578
+ /* Sortable header mirrors the row anatomy (Subject on its own line). */
579
+ .message-list.eleanor-view .ml-col-avatar { display: none; }
580
+ .message-list.eleanor-view .ml-col-flag { grid-column: 1; grid-row: 1; }
581
+ .message-list.eleanor-view .ml-col-from { grid-column: 2; grid-row: 1; }
582
+ .message-list.eleanor-view .ml-col-date { grid-column: 3; grid-row: 1; }
583
+ .message-list.eleanor-view .ml-col-subject { grid-column: 2 / 4; grid-row: 2; }
584
+ /* Clean rows: no body snippet after the subject. */
575
585
  .message-list.eleanor-view .ml-preview { display: none; }
576
586
  /* Monochrome: unread speaks through weight alone; flagged rows keep the
577
587
  gold ★ glyph but lose the row wash; priority loses bar + tint. The
@@ -579,7 +589,8 @@ button.tb-menu-item { background: none; border: none; color: inherit; width: 100
579
589
  .message-list.eleanor-view .ml-row.unread { color: var(--color-text); }
580
590
  .message-list.eleanor-view .ml-row.flagged:not(.selected) { background: transparent; }
581
591
  .message-list.eleanor-view .ml-row.priority:not(.selected) {
582
- border-left: none;
592
+ /* replace the gold accent bar with the card's own outline */
593
+ border-left: 1px solid color-mix(in oklch, var(--color-text-muted) 55%, transparent);
583
594
  padding-left: var(--gap-sm);
584
595
  background: transparent;
585
596
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/rmfmail",
3
- "version": "1.2.101",
3
+ "version": "1.2.102",
4
4
  "description": "Local-first email client with IMAP sync and standalone native app",
5
5
  "type": "module",
6
6
  "main": "bin/mailx.js",