@bobfrankston/rmfmail 1.1.98 → 1.1.101

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 (47) hide show
  1. package/client/android-bootstrap.bundle.js.map +2 -2
  2. package/client/app.bundle.js +45 -2
  3. package/client/app.bundle.js.map +2 -2
  4. package/client/components/message-list.js +63 -3
  5. package/client/components/message-list.js.map +1 -1
  6. package/client/components/message-list.ts +63 -3
  7. package/client/styles/components.css +10 -0
  8. package/npmchanges.md +29 -0
  9. package/package.json +1 -1
  10. package/packages/mailx-core/index.d.ts +1 -0
  11. package/packages/mailx-core/index.d.ts.map +1 -1
  12. package/packages/mailx-imap/index.d.ts +24 -0
  13. package/packages/mailx-imap/index.d.ts.map +1 -1
  14. package/packages/mailx-imap/index.js +96 -4
  15. package/packages/mailx-imap/index.js.map +1 -1
  16. package/packages/mailx-imap/index.ts +90 -4
  17. package/packages/mailx-imap/package-lock.json +2 -2
  18. package/packages/mailx-imap/package.json +1 -1
  19. package/packages/mailx-service/index.d.ts.map +1 -1
  20. package/packages/mailx-service/index.js +17 -0
  21. package/packages/mailx-service/index.js.map +1 -1
  22. package/packages/mailx-service/index.ts +15 -0
  23. package/packages/mailx-service/reconciler.d.ts.map +1 -1
  24. package/packages/mailx-service/reconciler.js +4 -0
  25. package/packages/mailx-service/reconciler.js.map +1 -1
  26. package/packages/mailx-service/reconciler.ts +6 -0
  27. package/packages/mailx-service/sync-queue.d.ts +8 -0
  28. package/packages/mailx-service/sync-queue.d.ts.map +1 -1
  29. package/packages/mailx-service/sync-queue.js +40 -4
  30. package/packages/mailx-service/sync-queue.js.map +1 -1
  31. package/packages/mailx-service/sync-queue.ts +39 -4
  32. package/packages/mailx-settings/docs/rmf-tiny.md +31 -2
  33. package/packages/mailx-settings/package.json +1 -1
  34. package/packages/mailx-store/db.d.ts +27 -0
  35. package/packages/mailx-store/db.d.ts.map +1 -1
  36. package/packages/mailx-store/db.js +99 -5
  37. package/packages/mailx-store/db.js.map +1 -1
  38. package/packages/mailx-store/db.ts +113 -5
  39. package/packages/mailx-store/package.json +1 -1
  40. package/packages/mailx-store-web/package.json +1 -1
  41. package/packages/mailx-types/index.d.ts +1 -0
  42. package/packages/mailx-types/index.d.ts.map +1 -1
  43. package/packages/mailx-types/index.js.map +1 -1
  44. package/packages/mailx-types/index.ts +1 -0
  45. package/packages/mailx-types/package.json +1 -1
  46. package/.commitmsg +0 -7
  47. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-82308 → node_modules.npmglobalize-stash-12320}/.package-lock.json +0 -0
@@ -2612,6 +2612,31 @@ function senderColor(seed) {
2612
2612
  const hue = Math.abs(h) % 12 * 30 + 15;
2613
2613
  return `oklch(0.62 0.14 ${hue})`;
2614
2614
  }
2615
+ function renderStatusIcons(host, msg) {
2616
+ host.textContent = "";
2617
+ if (msg.hasAttachments) {
2618
+ const a = document.createElement("span");
2619
+ a.className = "ml-icon ml-icon-attach";
2620
+ a.textContent = "\u{1F4CE}";
2621
+ a.title = "Has attachments";
2622
+ host.appendChild(a);
2623
+ }
2624
+ const flags = msg.flags || [];
2625
+ if (msg.isReplied || flags.includes("\\Answered")) {
2626
+ const r = document.createElement("span");
2627
+ r.className = "ml-icon ml-icon-replied";
2628
+ r.textContent = "\u21A9";
2629
+ r.title = "Replied";
2630
+ host.appendChild(r);
2631
+ }
2632
+ if (flags.includes("$Forwarded")) {
2633
+ const f = document.createElement("span");
2634
+ f.className = "ml-icon ml-icon-forwarded";
2635
+ f.textContent = "\u21AA";
2636
+ f.title = "Forwarded";
2637
+ host.appendChild(f);
2638
+ }
2639
+ }
2615
2640
  function exitMultiSelect() {
2616
2641
  const body = document.getElementById("ml-body");
2617
2642
  if (!body?.classList.contains("multi-select-on"))
@@ -2633,6 +2658,8 @@ function selectRange(from, to) {
2633
2658
  return;
2634
2659
  const lo = Math.min(fromIdx, toIdx);
2635
2660
  const hi = Math.max(fromIdx, toIdx);
2661
+ if (hi > lo)
2662
+ body.classList.add("multi-select-on");
2636
2663
  for (let i = lo; i <= hi; i++)
2637
2664
  rows[i].classList.add("selected");
2638
2665
  }
@@ -3322,7 +3349,14 @@ var init_message_list = __esm({
3322
3349
  }
3323
3350
  const date = document.createElement("span");
3324
3351
  date.className = "ml-date";
3325
- date.textContent = formatDate(msg.date);
3352
+ const icons = document.createElement("span");
3353
+ icons.className = "ml-status-icons";
3354
+ renderStatusIcons(icons, msg);
3355
+ const dateText = document.createElement("span");
3356
+ dateText.className = "ml-date-text";
3357
+ dateText.textContent = formatDate(msg.date);
3358
+ date.appendChild(icons);
3359
+ date.appendChild(dateText);
3326
3360
  row.appendChild(avatar);
3327
3361
  row.appendChild(flag);
3328
3362
  row.appendChild(from);
@@ -3369,10 +3403,19 @@ var init_message_list = __esm({
3369
3403
  * rather than waiting for the next IMAP APPEND + sync round-trip. */
3370
3404
  setDate(epochMs) {
3371
3405
  this.msg.date = epochMs;
3372
- const el = this.el.querySelector(".ml-date");
3406
+ const el = this.el.querySelector(".ml-date-text");
3373
3407
  if (el)
3374
3408
  el.textContent = formatDate(epochMs);
3375
3409
  }
3410
+ /** Re-render the attachment / replied / forwarded glyphs in the date
3411
+ * cell. Called when a flag-change event (Answered, $Forwarded) lands
3412
+ * for this row so the icon strip reflects current state without a
3413
+ * full row rebuild. */
3414
+ refreshStatusIcons() {
3415
+ const icons = this.el.querySelector(".ml-status-icons");
3416
+ if (icons)
3417
+ renderStatusIcons(icons, this.msg);
3418
+ }
3376
3419
  // Visual-state accessors for flag toggles. Read the *visual* state
3377
3420
  // (CSS class), not `this.msg.flags`, because the flag array can lag
3378
3421
  // the rendered class — auto-mark-as-read removes the `unread` class