@bobfrankston/rmfmail 1.2.243 → 1.2.245

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.
@@ -1621,6 +1621,24 @@ var init_address_book = __esm({
1621
1621
  });
1622
1622
 
1623
1623
  // client/components/message-viewer.js
1624
+ var message_viewer_exports = {};
1625
+ __export(message_viewer_exports, {
1626
+ clearViewer: () => clearViewer,
1627
+ getCurrentMessage: () => getCurrentMessage,
1628
+ initViewer: () => initViewer,
1629
+ invalidateParsedCache: () => invalidateParsedCache,
1630
+ popOutCurrentMessage: () => popOutCurrentMessage,
1631
+ popOutToWindow: () => popOutToWindow,
1632
+ printCurrentMessage: () => printCurrentMessage,
1633
+ printMessage: () => printMessage,
1634
+ saveCurrentMessageAsEml: () => saveCurrentMessageAsEml,
1635
+ saveCurrentMessageAsHtml: () => saveCurrentMessageAsHtml,
1636
+ showMessage: () => showMessage,
1637
+ showPreviewBodyMenu: () => showPreviewBodyMenu,
1638
+ spawnDesktopPopout: () => spawnDesktopPopout,
1639
+ toggleFullscreenPreview: () => toggleFullscreenPreview,
1640
+ wrapHtmlBody: () => wrapHtmlBody
1641
+ });
1624
1642
  function parsedCacheGet(accountId, folderId, uid) {
1625
1643
  if (folderId == null)
1626
1644
  return null;
@@ -3607,30 +3625,6 @@ function spawnDesktopPopout(msg, accountId) {
3607
3625
  closeBtn.addEventListener("mouseleave", () => closeBtn.style.color = "#666");
3608
3626
  closeBtn.addEventListener("click", () => wrapper.remove());
3609
3627
  titleBar.appendChild(closeBtn);
3610
- const actions = document.createElement("div");
3611
- actions.style.cssText = "display:flex;gap:4px;padding:6px 10px;border-bottom:1px solid var(--color-border, #ddd);flex-shrink:0;flex-wrap:wrap;";
3612
- const compose = (mode) => {
3613
- document.dispatchEvent(new CustomEvent("mailx-compose", {
3614
- detail: { mode, message: msg, accountId }
3615
- }));
3616
- };
3617
- const mkBtn = (label, title, onClick) => {
3618
- const b = document.createElement("button");
3619
- b.className = "tb-btn";
3620
- b.textContent = label;
3621
- b.title = title;
3622
- b.style.cssText = "padding:3px 10px;font-size:13px;cursor:pointer;";
3623
- b.addEventListener("click", onClick);
3624
- return b;
3625
- };
3626
- actions.appendChild(mkBtn("\u21A9 Reply", "Reply to the sender of this message", () => compose("reply")));
3627
- actions.appendChild(mkBtn("\u21A9\u21A9 Reply All", "Reply to everyone on this message", () => compose("replyAll")));
3628
- actions.appendChild(mkBtn("\u2192 Forward", "Forward this message", () => compose("forward")));
3629
- actions.appendChild(mkBtn("\u270E Edit as new", "Open a copy of this message in compose \u2014 the way to rework and resend one you sent", () => compose("editAsNew")));
3630
- const spacer = document.createElement("span");
3631
- spacer.style.cssText = "flex:1;";
3632
- actions.appendChild(spacer);
3633
- actions.appendChild(mkBtn("\u{1F5A8}", "Print this message", () => printMessage(msg)));
3634
3628
  const headerInfo = document.createElement("div");
3635
3629
  headerInfo.style.cssText = "padding:8px 12px;border-bottom:1px solid var(--color-border, #ddd);font-size:13px;line-height:1.4;flex-shrink:0;";
3636
3630
  const formatAddrLocal = (a) => a.name ? `${a.name} <${a.address}>` : a.address;
@@ -3721,7 +3715,6 @@ function spawnDesktopPopout(msg, accountId) {
3721
3715
  wrapper.remove();
3722
3716
  }));
3723
3717
  wrapper.appendChild(titleBar);
3724
- wrapper.appendChild(actions);
3725
3718
  wrapper.appendChild(headerInfo);
3726
3719
  wrapper.appendChild(toolbar);
3727
3720
  wrapper.appendChild(bodyContainer);
@@ -13262,56 +13255,9 @@ document.addEventListener("mailx-popout-message", (async (e) => {
13262
13255
  showComposeOverlay(msg.subject ? `Edit: ${msg.subject}` : "Edit draft");
13263
13256
  return;
13264
13257
  }
13265
- const wrapper = document.createElement("div");
13266
- wrapper.className = "popout-overlay";
13267
- wrapper.style.cssText = "position:fixed;top:5vh;right:5vw;width:min(900px,60vw);height:min(800px,80vh);z-index:1500;background:var(--color-bg);border:1px solid var(--color-border);border-radius:6px;box-shadow:0 8px 32px rgba(0,0,0,0.3);display:flex;flex-direction:column;resize:both;overflow:hidden;";
13268
- const header = document.createElement("div");
13269
- header.style.cssText = "display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--color-bg-surface);border-bottom:1px solid var(--color-border);font-weight:600;cursor:move;";
13270
- const title = document.createElement("span");
13271
- title.textContent = subject || "(no subject)";
13272
- title.style.cssText = "flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;";
13273
- const closeBtn = document.createElement("button");
13274
- closeBtn.textContent = "\xD7";
13275
- closeBtn.style.cssText = "background:none;border:none;font-size:1.4rem;cursor:pointer;padding:0 8px;";
13276
- closeBtn.addEventListener("click", () => wrapper.remove());
13277
- header.appendChild(title);
13278
- header.appendChild(closeBtn);
13279
- const meta = document.createElement("div");
13280
- meta.style.cssText = "padding:8px 12px;border-bottom:1px solid var(--color-border);font-size:0.9rem;color:var(--color-text-muted);";
13281
- meta.innerHTML = `<div><b>From:</b> ${escapeHtmlBasic(msg.from?.name || "")} &lt;${escapeHtmlBasic(msg.from?.address || "")}&gt;</div>
13282
- <div><b>To:</b> ${(msg.to || []).map((a) => escapeHtmlBasic(`${a.name || ""} <${a.address}>`)).join(", ")}</div>
13283
- ${msg.cc?.length ? `<div><b>Cc:</b> ${msg.cc.map((a) => escapeHtmlBasic(`${a.name || ""} <${a.address}>`)).join(", ")}</div>` : ""}
13284
- <div><b>Date:</b> ${new Date(msg.date).toLocaleString()}</div>`;
13285
- const body = document.createElement("iframe");
13286
- body.style.cssText = "flex:1;border:none;width:100%;background:#fff;";
13287
- body.sandbox.add("allow-same-origin");
13288
- wrapper.appendChild(header);
13289
- wrapper.appendChild(meta);
13290
- wrapper.appendChild(body);
13291
- document.body.appendChild(wrapper);
13292
- body.srcdoc = msg.bodyHtml ? wrapHtmlBody(msg.bodyHtml, !!msg.remoteAllowed) : `<!DOCTYPE html><html><head><style>body{font-family:system-ui,sans-serif;font-size:17.5px;line-height:1.5;color:#1a1a2e;padding:1rem;margin:0;}pre{white-space:pre-wrap;word-break:break-word;font-family:inherit;font-size:inherit;margin:0;}</style></head><body><pre>${escapeHtmlBasic(msg.bodyText || "(no body)")}</pre></body></html>`;
13293
- let dragX = 0, dragY = 0, dragging = false;
13294
- header.addEventListener("mousedown", (de) => {
13295
- if (de.target.tagName === "BUTTON") return;
13296
- dragging = true;
13297
- const rect = wrapper.getBoundingClientRect();
13298
- dragX = de.clientX - rect.left;
13299
- dragY = de.clientY - rect.top;
13300
- de.preventDefault();
13301
- });
13302
- document.addEventListener("mousemove", (de) => {
13303
- if (!dragging) return;
13304
- wrapper.style.left = `${de.clientX - dragX}px`;
13305
- wrapper.style.top = `${de.clientY - dragY}px`;
13306
- wrapper.style.right = "auto";
13307
- });
13308
- document.addEventListener("mouseup", () => {
13309
- dragging = false;
13310
- });
13258
+ const { spawnDesktopPopout: spawnDesktopPopout2 } = await Promise.resolve().then(() => (init_message_viewer(), message_viewer_exports));
13259
+ spawnDesktopPopout2(msg, accountId);
13311
13260
  }));
13312
- function escapeHtmlBasic(s) {
13313
- return (s || "").replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[c]);
13314
- }
13315
13261
  document.getElementById("status-queue")?.addEventListener("click", async () => {
13316
13262
  try {
13317
13263
  const { openOutboxView: openOutboxView2 } = await Promise.resolve().then(() => (init_outbox_view(), outbox_view_exports));