@bobfrankston/rmfmail 1.2.210 → 1.2.213
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/android-bootstrap.bundle.js +7 -1
- package/client/android-bootstrap.bundle.js.map +2 -2
- package/client/app.bundle.js +41 -9
- package/client/app.bundle.js.map +2 -2
- package/client/app.js +57 -13
- package/client/app.js.map +1 -1
- package/client/app.ts +52 -13
- package/client/components/folder-tree.js +45 -3
- package/client/components/folder-tree.js.map +1 -1
- package/client/components/folder-tree.ts +42 -3
- package/client/index.html +1 -1
- package/client/package.json +1 -1
- package/package.json +5 -5
- package/packages/mailx-imap/package-lock.json +2 -2
- package/packages/mailx-imap/package.json +1 -1
- package/packages/mailx-service/index.d.ts +6 -0
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +8 -0
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +9 -0
- package/packages/mailx-service/jsonrpc.js +1 -1
- package/packages/mailx-service/jsonrpc.js.map +1 -1
- package/packages/mailx-service/jsonrpc.ts +1 -1
- package/packages/mailx-service/package.json +1 -1
- package/packages/mailx-store/db.d.ts +27 -0
- package/packages/mailx-store/db.d.ts.map +1 -1
- package/packages/mailx-store/db.js +81 -1
- package/packages/mailx-store/db.js.map +1 -1
- package/packages/mailx-store/db.ts +78 -1
- package/packages/mailx-store/package.json +1 -1
- package/packages/mailx-store-web/android-bootstrap.d.ts.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.js +14 -1
- package/packages/mailx-store-web/android-bootstrap.js.map +1 -1
- package/packages/mailx-store-web/android-bootstrap.ts +14 -1
- package/packages/mailx-store-web/package.json +1 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-14572 → node_modules.npmglobalize-stash-38948}/.package-lock.json +0 -0
package/client/app.bundle.js
CHANGED
|
@@ -7518,7 +7518,8 @@ async function loadFolderTree(container) {
|
|
|
7518
7518
|
setTimeout(() => earlyOverlay.remove(), 400);
|
|
7519
7519
|
}
|
|
7520
7520
|
if (accounts.length === 0) {
|
|
7521
|
-
|
|
7521
|
+
const onAndroid = window.mailxapi?.platform === "android";
|
|
7522
|
+
container.innerHTML = onAndroid ? `<div class="folder-loading">Initializing\u2026</div>` : `<div class="folder-loading">No accounts</div>`;
|
|
7522
7523
|
const mlSection = document.querySelector(".message-list");
|
|
7523
7524
|
if (mlSection)
|
|
7524
7525
|
mlSection.style.display = "none";
|
|
@@ -7528,12 +7529,15 @@ async function loadFolderTree(container) {
|
|
|
7528
7529
|
const mvHeader = document.getElementById("mv-header");
|
|
7529
7530
|
if (mvHeader)
|
|
7530
7531
|
mvHeader.style.display = "none";
|
|
7532
|
+
const mvSection = document.querySelector(".message-viewer");
|
|
7533
|
+
if (mvSection && onAndroid)
|
|
7534
|
+
mvSection.classList.add("narrow-active");
|
|
7531
7535
|
const mainBody = document.getElementById("mv-body");
|
|
7532
7536
|
if (mainBody) {
|
|
7533
|
-
const isAndroid =
|
|
7537
|
+
const isAndroid = onAndroid;
|
|
7534
7538
|
const formDisplay = isAndroid ? "display:none;" : "";
|
|
7535
7539
|
const introText = isAndroid ? "" : "Add your email account to get started.";
|
|
7536
|
-
const checkingHtml = isAndroid ? '<div style="padding:0.5rem;color:var(--color-text-muted)">
|
|
7540
|
+
const checkingHtml = isAndroid ? '<div id="bootstrap-narration" style="padding:0.5rem;color:var(--color-text-muted)">Initializing\u2026</div>' : "";
|
|
7537
7541
|
const gmailNote = isAndroid ? "" : `<p style="margin-top:0.5rem;padding:0.5rem 0.75rem;background:color-mix(in oklch, var(--color-accent) 12%, var(--color-bg-surface));border:1px solid var(--color-border);border-radius:4px;font-size:0.9rem">For now, a <strong>Gmail</strong> or Google Workspace account is required. Support for other providers is coming.</p>`;
|
|
7538
7542
|
mainBody.innerHTML = `<div style="padding:2rem;line-height:1.8;max-width:500px">
|
|
7539
7543
|
<h2 style="margin-bottom:1rem">Welcome to mailx</h2>
|
|
@@ -7769,6 +7773,19 @@ async function loadFolderTree(container) {
|
|
|
7769
7773
|
}
|
|
7770
7774
|
return;
|
|
7771
7775
|
}
|
|
7776
|
+
const mlPane = document.querySelector(".message-list");
|
|
7777
|
+
if (mlPane?.style.display === "none")
|
|
7778
|
+
mlPane.style.display = "";
|
|
7779
|
+
const splitterPane = document.getElementById("splitter-h");
|
|
7780
|
+
if (splitterPane?.style.display === "none")
|
|
7781
|
+
splitterPane.style.display = "";
|
|
7782
|
+
const mvHead = document.getElementById("mv-header");
|
|
7783
|
+
if (mvHead?.style.display === "none")
|
|
7784
|
+
mvHead.style.display = "";
|
|
7785
|
+
const mvPane = document.querySelector(".message-viewer");
|
|
7786
|
+
if (mvPane?.classList.contains("narrow-active") && document.getElementById("bootstrap-narration")) {
|
|
7787
|
+
mvPane.classList.remove("narrow-active");
|
|
7788
|
+
}
|
|
7772
7789
|
const accountFolderData = await Promise.all(accounts.map(async (account) => {
|
|
7773
7790
|
const accountKey = `account:${account.id}`;
|
|
7774
7791
|
const accountExpanded = expandState[accountKey] !== false;
|
|
@@ -8321,8 +8338,10 @@ var alertText = document.getElementById("alert-text");
|
|
|
8321
8338
|
var alertDismiss = document.getElementById("alert-dismiss");
|
|
8322
8339
|
var dismissedAlerts = /* @__PURE__ */ new Set();
|
|
8323
8340
|
var alertAutoDismissTimer = null;
|
|
8341
|
+
var dbReadOnlyLatched = false;
|
|
8324
8342
|
function showAlert(message, key, opts) {
|
|
8325
8343
|
if (key && dismissedAlerts.has(key)) return;
|
|
8344
|
+
if (dbReadOnlyLatched && key !== "db-readonly") return;
|
|
8326
8345
|
if (alertBanner && alertText) {
|
|
8327
8346
|
alertText.textContent = message;
|
|
8328
8347
|
alertBanner.hidden = false;
|
|
@@ -8355,12 +8374,8 @@ function hideAlert(opts) {
|
|
|
8355
8374
|
}
|
|
8356
8375
|
}
|
|
8357
8376
|
alertDismiss?.addEventListener("click", () => hideAlert({ force: true }));
|
|
8358
|
-
function
|
|
8377
|
+
function addRestartButton() {
|
|
8359
8378
|
if (!alertBanner || !alertText) return;
|
|
8360
|
-
const ts = (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour12: false });
|
|
8361
|
-
alertText.textContent = `[${ts}] accounts.jsonc changed \u2014 restart to apply.`;
|
|
8362
|
-
alertBanner.hidden = false;
|
|
8363
|
-
alertBanner.dataset.key = "config-restart";
|
|
8364
8379
|
const existing = alertBanner.querySelector("#alert-restart-btn");
|
|
8365
8380
|
if (existing) return;
|
|
8366
8381
|
const btn = document.createElement("button");
|
|
@@ -8385,6 +8400,14 @@ function showRestartForConfigBanner() {
|
|
|
8385
8400
|
});
|
|
8386
8401
|
alertText.after(btn);
|
|
8387
8402
|
}
|
|
8403
|
+
function showRestartForConfigBanner() {
|
|
8404
|
+
if (!alertBanner || !alertText) return;
|
|
8405
|
+
const ts = (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour12: false });
|
|
8406
|
+
alertText.textContent = `[${ts}] accounts.jsonc changed \u2014 restart to apply.`;
|
|
8407
|
+
alertBanner.hidden = false;
|
|
8408
|
+
alertBanner.dataset.key = "config-restart";
|
|
8409
|
+
addRestartButton();
|
|
8410
|
+
}
|
|
8388
8411
|
var folderTree = document.getElementById("folder-tree");
|
|
8389
8412
|
var currentFolderSpecialUse = "";
|
|
8390
8413
|
var folderTitleEl = document.getElementById("ml-folder-title");
|
|
@@ -10372,6 +10395,10 @@ onWsEvent((event) => {
|
|
|
10372
10395
|
if (startupStatus) startupStatus.textContent = msg;
|
|
10373
10396
|
const slot = document.querySelector(".folder-loading");
|
|
10374
10397
|
if (slot) slot.textContent = msg;
|
|
10398
|
+
const mlEmpty = document.querySelector("#ml-body .ml-empty");
|
|
10399
|
+
if (mlEmpty) mlEmpty.textContent = msg;
|
|
10400
|
+
const narrationSlot = document.getElementById("bootstrap-narration");
|
|
10401
|
+
if (narrationSlot) narrationSlot.textContent = msg;
|
|
10375
10402
|
}
|
|
10376
10403
|
break;
|
|
10377
10404
|
}
|
|
@@ -12484,7 +12511,12 @@ versionPromise.then((d) => {
|
|
|
12484
12511
|
el.textContent = text;
|
|
12485
12512
|
if (tip) el.title = tip;
|
|
12486
12513
|
}
|
|
12487
|
-
if (d.
|
|
12514
|
+
if (d.dbWriteDenied) {
|
|
12515
|
+
if (alertBanner) alertBanner.style.background = "oklch(0.45 0.18 25)";
|
|
12516
|
+
dbReadOnlyLatched = true;
|
|
12517
|
+
showAlert("Database is READ-ONLY \u2014 nothing you do is being saved (\u2605, moves, new mail). Restart rmfmail.", "db-readonly", { sticky: true });
|
|
12518
|
+
addRestartButton();
|
|
12519
|
+
} else if (d.settingsError) {
|
|
12488
12520
|
showAlert(d.settingsError, "settings-error");
|
|
12489
12521
|
const banner = document.getElementById("alert-banner");
|
|
12490
12522
|
if (banner && !banner.querySelector(".repair-btn")) {
|