@bobfrankston/rmfmail 1.2.231 → 1.2.233
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 +164 -152
- package/client/android-bootstrap.bundle.js.map +4 -4
- package/client/app.bundle.js +13 -107
- package/client/app.bundle.js.map +4 -4
- package/client/components/calendar-sidebar.js +1 -1
- package/client/components/calendar-sidebar.js.map +1 -1
- package/client/components/calendar-sidebar.ts +1 -1
- package/client/components/message-list.js +0 -60
- package/client/components/message-list.js.map +1 -1
- package/client/components/message-list.ts +0 -56
- package/client/components/message-viewer.js +3 -2
- package/client/components/message-viewer.js.map +1 -1
- package/client/components/message-viewer.ts +3 -2
- package/client/compose/compose.bundle.js +198 -211
- package/client/compose/compose.bundle.js.map +4 -4
- package/client/compose/compose.html +0 -8
- package/client/compose/compose.js +1 -1
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +1 -1
- package/client/compose/editor.js +30 -32
- package/client/compose/editor.js.map +1 -1
- package/client/compose/editor.ts +27 -29
- package/client/compose/ghost-text.js +0 -8
- package/client/compose/ghost-text.js.map +1 -1
- package/client/compose/ghost-text.ts +0 -6
- package/client/compose/spellcheck-core.js +0 -1
- package/client/compose/spellcheck-core.js.map +1 -1
- package/client/compose/spellcheck-core.ts +0 -1
- package/client/index.html +0 -8
- package/client/lib/local-service.js +0 -73
- package/client/lib/local-service.js.map +1 -1
- package/client/lib/local-service.ts +0 -71
- package/client/lib/local-store.js +0 -3
- package/client/lib/local-store.js.map +1 -1
- package/client/lib/local-store.ts +0 -4
- package/package.json +1 -3
- package/packages/mailx-host/index.d.ts +0 -1
- package/packages/mailx-host/index.d.ts.map +1 -1
- package/packages/mailx-host/index.js +0 -1
- package/packages/mailx-host/index.js.map +1 -1
- package/packages/mailx-host/index.ts +0 -1
- package/packages/mailx-host/package.json +1 -1
- package/packages/mailx-service/index.d.ts.map +1 -1
- package/packages/mailx-service/index.js +36 -139
- package/packages/mailx-service/index.js.map +1 -1
- package/packages/mailx-service/index.ts +36 -148
- package/packages/mailx-settings/cloud.d.ts +0 -5
- package/packages/mailx-settings/cloud.d.ts.map +1 -1
- package/packages/mailx-settings/cloud.js +0 -16
- package/packages/mailx-settings/cloud.js.map +1 -1
- package/packages/mailx-settings/cloud.ts +0 -12
- package/packages/mailx-settings/index.d.ts +0 -3
- package/packages/mailx-settings/index.d.ts.map +1 -1
- package/packages/mailx-settings/index.js +0 -5
- package/packages/mailx-settings/index.js.map +1 -1
- package/packages/mailx-settings/index.ts +0 -7
- package/packages/mailx-store-web/main-thread-host.d.ts +1 -1
- package/packages/mailx-store-web/main-thread-host.d.ts.map +1 -1
- package/packages/mailx-store-web/main-thread-host.js +1 -38
- package/packages/mailx-store-web/main-thread-host.js.map +1 -1
- package/packages/mailx-store-web/main-thread-host.ts +0 -42
- package/packages/mailx-store-web/package.json +1 -1
- package/packages/mailx-store-web/web-service.d.ts.map +1 -1
- package/packages/mailx-store-web/web-service.js +28 -114
- package/packages/mailx-store-web/web-service.js.map +1 -1
- package/packages/mailx-store-web/web-service.ts +28 -124
- package/packages/mailx-store-web/web-settings.d.ts +0 -4
- package/packages/mailx-store-web/web-settings.d.ts.map +1 -1
- package/packages/mailx-store-web/web-settings.js +0 -29
- package/packages/mailx-store-web/web-settings.js.map +1 -1
- package/packages/mailx-store-web/web-settings.ts +0 -24
- package/packages/mailx-types/index.d.ts +2 -0
- package/packages/mailx-types/index.d.ts.map +1 -1
- package/packages/mailx-types/index.js +1 -0
- package/packages/mailx-types/index.js.map +1 -1
- package/packages/mailx-types/index.ts +2 -0
- package/packages/mailx-types/mime-build.d.ts +74 -0
- package/packages/mailx-types/mime-build.d.ts.map +1 -0
- package/packages/mailx-types/mime-build.js +160 -0
- package/packages/mailx-types/mime-build.js.map +1 -0
- package/packages/mailx-types/mime-build.ts +217 -0
- package/packages/mailx-types/package.json +1 -1
- package/packages/mailx-types/test/mime-build.test.mjs +200 -0
- package/client/components/calendar.js +0 -220
- package/client/components/calendar.js.map +0 -1
- package/client/components/calendar.ts +0 -213
- package/client/components/tasks.js +0 -261
- package/client/components/tasks.js.map +0 -1
- package/client/components/tasks.ts +0 -234
- package/packages/mailx-compose/.gitattributes +0 -10
- package/packages/mailx-compose/index.d.ts +0 -21
- package/packages/mailx-compose/index.d.ts.map +0 -1
- package/packages/mailx-compose/index.js +0 -66
- package/packages/mailx-compose/index.js.map +0 -1
- package/packages/mailx-compose/index.ts +0 -91
- package/packages/mailx-compose/package.json +0 -18
- package/packages/mailx-compose/tsconfig.json +0 -9
- package/packages/mailx-core/index.d.ts +0 -142
- package/packages/mailx-core/index.d.ts.map +0 -1
- package/packages/mailx-core/index.js +0 -430
- package/packages/mailx-core/index.js.map +0 -1
- package/packages/mailx-core/index.ts +0 -450
- package/packages/mailx-core/ipc.d.ts +0 -13
- package/packages/mailx-core/ipc.d.ts.map +0 -1
- package/packages/mailx-core/ipc.js +0 -56
- package/packages/mailx-core/ipc.js.map +0 -1
- package/packages/mailx-core/ipc.ts +0 -62
- package/packages/mailx-core/package.json +0 -18
- package/packages/mailx-core/tsconfig.json +0 -9
- package/packages/mailx-send/.gitattributes +0 -10
- package/packages/mailx-send/README.md +0 -217
- package/packages/mailx-send/cli-queue.d.ts +0 -11
- package/packages/mailx-send/cli-queue.d.ts.map +0 -1
- package/packages/mailx-send/cli-queue.js +0 -59
- package/packages/mailx-send/cli-queue.js.map +0 -1
- package/packages/mailx-send/cli-queue.ts +0 -62
- package/packages/mailx-send/cli-send.d.ts +0 -17
- package/packages/mailx-send/cli-send.d.ts.map +0 -1
- package/packages/mailx-send/cli-send.js +0 -75
- package/packages/mailx-send/cli-send.js.map +0 -1
- package/packages/mailx-send/cli-send.ts +0 -83
- package/packages/mailx-send/cli.d.ts +0 -22
- package/packages/mailx-send/cli.d.ts.map +0 -1
- package/packages/mailx-send/cli.js +0 -115
- package/packages/mailx-send/cli.js.map +0 -1
- package/packages/mailx-send/cli.ts +0 -126
- package/packages/mailx-send/index.d.ts +0 -77
- package/packages/mailx-send/index.d.ts.map +0 -1
- package/packages/mailx-send/index.js +0 -269
- package/packages/mailx-send/index.js.map +0 -1
- package/packages/mailx-send/index.ts +0 -338
- package/packages/mailx-send/mailsend/README.md +0 -133
- package/packages/mailx-send/mailsend/cli.d.ts +0 -12
- package/packages/mailx-send/mailsend/cli.d.ts.map +0 -1
- package/packages/mailx-send/mailsend/cli.js +0 -70
- package/packages/mailx-send/mailsend/cli.js.map +0 -1
- package/packages/mailx-send/mailsend/cli.ts +0 -81
- package/packages/mailx-send/mailsend/index.d.ts +0 -77
- package/packages/mailx-send/mailsend/index.d.ts.map +0 -1
- package/packages/mailx-send/mailsend/index.js +0 -264
- package/packages/mailx-send/mailsend/index.js.map +0 -1
- package/packages/mailx-send/mailsend/index.ts +0 -336
- package/packages/mailx-send/mailsend/package-lock.json +0 -65
- package/packages/mailx-send/mailsend/package.json +0 -26
- package/packages/mailx-send/mailsend/tsconfig.json +0 -21
- package/packages/mailx-send/package-lock.json +0 -65
- package/packages/mailx-send/package.json +0 -37
- package/packages/mailx-send/tsconfig.json +0 -21
- package/packages/mailx-server/.gitattributes +0 -10
- package/packages/mailx-server/index.d.ts +0 -8
- package/packages/mailx-server/index.d.ts.map +0 -1
- package/packages/mailx-server/index.js +0 -412
- package/packages/mailx-server/index.js.map +0 -1
- package/packages/mailx-server/index.ts +0 -445
- package/packages/mailx-server/package.json +0 -28
- package/packages/mailx-server/tsconfig.json +0 -9
- package/packages/mailx-server/tsconfig.tsbuildinfo +0 -1
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-7472 → node_modules.npmglobalize-stash-40004}/.package-lock.json +0 -0
|
@@ -1717,7 +1717,6 @@ var init_api_client = __esm({
|
|
|
1717
1717
|
// client/compose/spellcheck-core.js
|
|
1718
1718
|
var spellcheck_core_exports = {};
|
|
1719
1719
|
__export(spellcheck_core_exports, {
|
|
1720
|
-
MARKER_ATTR: () => MARKER_ATTR,
|
|
1721
1720
|
MIN_WORD_LEN: () => MIN_WORD_LEN,
|
|
1722
1721
|
SKIP_TAGS: () => SKIP_TAGS,
|
|
1723
1722
|
USER_DICT_KEY: () => USER_DICT_KEY,
|
|
@@ -1960,14 +1959,13 @@ function getWordAtPoint(root, x, y) {
|
|
|
1960
1959
|
return null;
|
|
1961
1960
|
return { word, node, start, end };
|
|
1962
1961
|
}
|
|
1963
|
-
var import_nspell, USER_DICT_KEY,
|
|
1962
|
+
var import_nspell, USER_DICT_KEY, MIN_WORD_LEN, SKIP_TAGS, spellPromise, URL_BODY, SKIP_SPAN_RE;
|
|
1964
1963
|
var init_spellcheck_core = __esm({
|
|
1965
1964
|
"client/compose/spellcheck-core.js"() {
|
|
1966
1965
|
"use strict";
|
|
1967
1966
|
import_nspell = __toESM(require_lib(), 1);
|
|
1968
1967
|
init_api_client();
|
|
1969
1968
|
USER_DICT_KEY = "mailx-user-dict";
|
|
1970
|
-
MARKER_ATTR = "data-mailx-spellerror";
|
|
1971
1969
|
MIN_WORD_LEN = 3;
|
|
1972
1970
|
SKIP_TAGS = /* @__PURE__ */ new Set(["BLOCKQUOTE", "CODE", "PRE", "A", "SCRIPT", "STYLE", "KBD", "SAMP", "VAR"]);
|
|
1973
1971
|
spellPromise = null;
|
|
@@ -2363,6 +2361,182 @@ var init_edit_commands = __esm({
|
|
|
2363
2361
|
}
|
|
2364
2362
|
});
|
|
2365
2363
|
|
|
2364
|
+
// client/components/context-menu.js
|
|
2365
|
+
var context_menu_exports = {};
|
|
2366
|
+
__export(context_menu_exports, {
|
|
2367
|
+
closeContextMenu: () => closeContextMenu,
|
|
2368
|
+
showContextMenu: () => showContextMenu
|
|
2369
|
+
});
|
|
2370
|
+
function closeSubmenu() {
|
|
2371
|
+
if (activeSubmenu) {
|
|
2372
|
+
activeSubmenu.remove();
|
|
2373
|
+
activeSubmenu = null;
|
|
2374
|
+
}
|
|
2375
|
+
}
|
|
2376
|
+
function closeContextMenu() {
|
|
2377
|
+
closeSubmenu();
|
|
2378
|
+
if (activeMenu) {
|
|
2379
|
+
activeMenu.remove();
|
|
2380
|
+
activeMenu = null;
|
|
2381
|
+
}
|
|
2382
|
+
if (dismissListener) {
|
|
2383
|
+
document.removeEventListener("pointerdown", dismissListener, true);
|
|
2384
|
+
dismissListener = null;
|
|
2385
|
+
}
|
|
2386
|
+
if (escapeListener) {
|
|
2387
|
+
document.removeEventListener("keydown", escapeListener, true);
|
|
2388
|
+
escapeListener = null;
|
|
2389
|
+
}
|
|
2390
|
+
}
|
|
2391
|
+
function openSubmenu(parentRow, items) {
|
|
2392
|
+
closeSubmenu();
|
|
2393
|
+
const sub = document.createElement("div");
|
|
2394
|
+
sub.className = "ctx-menu";
|
|
2395
|
+
for (const item of items) {
|
|
2396
|
+
if (item.separator) {
|
|
2397
|
+
const sep = document.createElement("div");
|
|
2398
|
+
sep.className = "ctx-sep";
|
|
2399
|
+
sub.appendChild(sep);
|
|
2400
|
+
continue;
|
|
2401
|
+
}
|
|
2402
|
+
const el = document.createElement("div");
|
|
2403
|
+
el.className = "ctx-item" + (item.disabled ? " ctx-disabled" : "");
|
|
2404
|
+
el.textContent = item.label;
|
|
2405
|
+
if (item.tooltip)
|
|
2406
|
+
el.title = item.tooltip;
|
|
2407
|
+
if (!item.disabled) {
|
|
2408
|
+
el.addEventListener("click", () => {
|
|
2409
|
+
closeContextMenu();
|
|
2410
|
+
item.action();
|
|
2411
|
+
});
|
|
2412
|
+
}
|
|
2413
|
+
sub.appendChild(el);
|
|
2414
|
+
}
|
|
2415
|
+
document.body.appendChild(sub);
|
|
2416
|
+
const anchor = parentRow.getBoundingClientRect();
|
|
2417
|
+
const vw = window.visualViewport?.width ?? window.innerWidth;
|
|
2418
|
+
const vh = window.visualViewport?.height ?? window.innerHeight;
|
|
2419
|
+
const rect = sub.getBoundingClientRect();
|
|
2420
|
+
let left = anchor.right - 2;
|
|
2421
|
+
if (left + rect.width > vw)
|
|
2422
|
+
left = anchor.left - rect.width + 2;
|
|
2423
|
+
let top = anchor.top;
|
|
2424
|
+
if (top + rect.height > vh)
|
|
2425
|
+
top = vh - rect.height - 4;
|
|
2426
|
+
sub.style.left = `${Math.max(4, left)}px`;
|
|
2427
|
+
sub.style.top = `${Math.max(4, top)}px`;
|
|
2428
|
+
activeSubmenu = sub;
|
|
2429
|
+
}
|
|
2430
|
+
function showContextMenu(x, y, items, opts = {}) {
|
|
2431
|
+
closeContextMenu();
|
|
2432
|
+
if (opts.editTarget !== void 0 || opts.editEngine) {
|
|
2433
|
+
const edit = editMenuItems({ target: opts.editTarget, engine: opts.editEngine }, { onError: opts.onEditError });
|
|
2434
|
+
if (edit.length > 0) {
|
|
2435
|
+
items = items.length > 0 ? [...edit, { label: "", action: () => {
|
|
2436
|
+
}, separator: true }, ...items] : edit;
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
const menu = document.createElement("div");
|
|
2440
|
+
menu.className = "ctx-menu";
|
|
2441
|
+
for (const item of items) {
|
|
2442
|
+
if (item.separator) {
|
|
2443
|
+
const sep = document.createElement("div");
|
|
2444
|
+
sep.className = "ctx-sep";
|
|
2445
|
+
menu.appendChild(sep);
|
|
2446
|
+
continue;
|
|
2447
|
+
}
|
|
2448
|
+
const el = document.createElement("div");
|
|
2449
|
+
el.className = "ctx-item" + (item.disabled ? " ctx-disabled" : "") + (item.emphasized ? " ctx-emphasized" : "");
|
|
2450
|
+
if (item.emphasized)
|
|
2451
|
+
el.style.fontWeight = "600";
|
|
2452
|
+
el.textContent = item.label;
|
|
2453
|
+
if (item.tooltip)
|
|
2454
|
+
el.title = item.tooltip;
|
|
2455
|
+
if (item.submenu && item.submenu.length > 0 && !item.disabled) {
|
|
2456
|
+
el.style.display = "flex";
|
|
2457
|
+
el.style.justifyContent = "space-between";
|
|
2458
|
+
el.style.gap = "12px";
|
|
2459
|
+
const caret = document.createElement("span");
|
|
2460
|
+
caret.textContent = "\u25B8";
|
|
2461
|
+
caret.style.opacity = "0.6";
|
|
2462
|
+
el.appendChild(caret);
|
|
2463
|
+
const open = () => openSubmenu(el, item.submenu);
|
|
2464
|
+
el.addEventListener("mouseenter", open);
|
|
2465
|
+
el.addEventListener("click", (e) => {
|
|
2466
|
+
e.stopPropagation();
|
|
2467
|
+
open();
|
|
2468
|
+
});
|
|
2469
|
+
menu.appendChild(el);
|
|
2470
|
+
continue;
|
|
2471
|
+
}
|
|
2472
|
+
el.addEventListener("mouseenter", closeSubmenu);
|
|
2473
|
+
if (!item.disabled) {
|
|
2474
|
+
el.addEventListener("click", () => {
|
|
2475
|
+
closeContextMenu();
|
|
2476
|
+
item.action();
|
|
2477
|
+
});
|
|
2478
|
+
}
|
|
2479
|
+
menu.appendChild(el);
|
|
2480
|
+
}
|
|
2481
|
+
menu.style.left = `${x}px`;
|
|
2482
|
+
menu.style.top = `${y}px`;
|
|
2483
|
+
document.body.appendChild(menu);
|
|
2484
|
+
const vw = window.visualViewport?.width ?? window.innerWidth;
|
|
2485
|
+
const vh = window.visualViewport?.height ?? window.innerHeight;
|
|
2486
|
+
let rect = menu.getBoundingClientRect();
|
|
2487
|
+
if (rect.height > vh - 8) {
|
|
2488
|
+
menu.style.maxHeight = `${vh - 8}px`;
|
|
2489
|
+
menu.style.overflowY = "auto";
|
|
2490
|
+
rect = menu.getBoundingClientRect();
|
|
2491
|
+
}
|
|
2492
|
+
let left = x, top = y;
|
|
2493
|
+
if (left + rect.width > vw)
|
|
2494
|
+
left = x - rect.width;
|
|
2495
|
+
if (top + rect.height > vh)
|
|
2496
|
+
top = y - rect.height;
|
|
2497
|
+
left = Math.max(4, Math.min(left, vw - rect.width - 4));
|
|
2498
|
+
top = Math.max(4, Math.min(top, vh - rect.height - 4));
|
|
2499
|
+
menu.style.left = `${left}px`;
|
|
2500
|
+
menu.style.top = `${top}px`;
|
|
2501
|
+
activeMenu = menu;
|
|
2502
|
+
requestAnimationFrame(() => {
|
|
2503
|
+
dismissListener = (e) => {
|
|
2504
|
+
if (activeSubmenu?.contains(e.target))
|
|
2505
|
+
return;
|
|
2506
|
+
if (activeMenu && !activeMenu.contains(e.target)) {
|
|
2507
|
+
closeContextMenu();
|
|
2508
|
+
}
|
|
2509
|
+
};
|
|
2510
|
+
document.addEventListener("pointerdown", dismissListener, true);
|
|
2511
|
+
escapeListener = (e) => {
|
|
2512
|
+
if (e.key === "Escape") {
|
|
2513
|
+
e.preventDefault();
|
|
2514
|
+
e.stopPropagation();
|
|
2515
|
+
closeContextMenu();
|
|
2516
|
+
}
|
|
2517
|
+
};
|
|
2518
|
+
document.addEventListener("keydown", escapeListener, true);
|
|
2519
|
+
});
|
|
2520
|
+
}
|
|
2521
|
+
var activeMenu, dismissListener, escapeListener, activeSubmenu;
|
|
2522
|
+
var init_context_menu = __esm({
|
|
2523
|
+
"client/components/context-menu.js"() {
|
|
2524
|
+
"use strict";
|
|
2525
|
+
init_edit_menu();
|
|
2526
|
+
activeMenu = null;
|
|
2527
|
+
dismissListener = null;
|
|
2528
|
+
escapeListener = null;
|
|
2529
|
+
activeSubmenu = null;
|
|
2530
|
+
document.addEventListener("scroll", closeContextMenu, true);
|
|
2531
|
+
document.addEventListener("contextmenu", () => {
|
|
2532
|
+
});
|
|
2533
|
+
window.addEventListener("message", (e) => {
|
|
2534
|
+
if (e.data && e.data.type === "iframePointerDown")
|
|
2535
|
+
closeContextMenu();
|
|
2536
|
+
});
|
|
2537
|
+
}
|
|
2538
|
+
});
|
|
2539
|
+
|
|
2366
2540
|
// client/lib/rmf-tiny.js
|
|
2367
2541
|
var rmf_tiny_exports = {};
|
|
2368
2542
|
__export(rmf_tiny_exports, {
|
|
@@ -3623,7 +3797,6 @@ var init_harper_lint = __esm({
|
|
|
3623
3797
|
// client/compose/ghost-text.js
|
|
3624
3798
|
var ghost_text_exports = {};
|
|
3625
3799
|
__export(ghost_text_exports, {
|
|
3626
|
-
destroyGhostText: () => destroyGhostText,
|
|
3627
3800
|
initGhostText: () => initGhostText
|
|
3628
3801
|
});
|
|
3629
3802
|
function dismiss() {
|
|
@@ -3719,14 +3892,6 @@ function initGhostText(editor2, context, options) {
|
|
|
3719
3892
|
editor2.root.addEventListener("blur", dismiss);
|
|
3720
3893
|
editor2.getScrollContainer().addEventListener("scroll", dismiss);
|
|
3721
3894
|
}
|
|
3722
|
-
function destroyGhostText() {
|
|
3723
|
-
dismiss();
|
|
3724
|
-
if (debounceTimer)
|
|
3725
|
-
clearTimeout(debounceTimer);
|
|
3726
|
-
if (abortController)
|
|
3727
|
-
abortController.abort();
|
|
3728
|
-
activeEditor = null;
|
|
3729
|
-
}
|
|
3730
3895
|
var ghostEl, currentSuggestion, debounceTimer, abortController, activeEditor, debounceMs;
|
|
3731
3896
|
var init_ghost_text = __esm({
|
|
3732
3897
|
"client/compose/ghost-text.js"() {
|
|
@@ -4356,38 +4521,26 @@ function createQuillEditor(container2) {
|
|
|
4356
4521
|
if (!text.trim())
|
|
4357
4522
|
return;
|
|
4358
4523
|
e.preventDefault();
|
|
4359
|
-
const
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
|
|
4366
|
-
|
|
4367
|
-
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
|
|
4371
|
-
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
|
|
4375
|
-
q.insertText(sel.index, r.text);
|
|
4376
|
-
q.setSelection(sel.index, r.text.length);
|
|
4377
|
-
} else if (r?.reason) {
|
|
4378
|
-
alert(`Proofread: ${r.reason}`);
|
|
4524
|
+
const { showContextMenu: showContextMenu2 } = await Promise.resolve().then(() => (init_context_menu(), context_menu_exports));
|
|
4525
|
+
const { standardEditItems: standardEditItems2 } = await Promise.resolve().then(() => (init_edit_commands(), edit_commands_exports));
|
|
4526
|
+
showContextMenu2(e.clientX, e.clientY, [
|
|
4527
|
+
{ label: "Proofread selection", action: async () => {
|
|
4528
|
+
try {
|
|
4529
|
+
const { aiTransform: aiTransform2 } = await Promise.resolve().then(() => (init_api_client(), api_client_exports));
|
|
4530
|
+
const r = await aiTransform2({ action: "proofread", text });
|
|
4531
|
+
if (r?.text && r.text !== text) {
|
|
4532
|
+
q.deleteText(sel.index, sel.length);
|
|
4533
|
+
q.insertText(sel.index, r.text);
|
|
4534
|
+
q.setSelection(sel.index, r.text.length);
|
|
4535
|
+
} else if (r?.reason) {
|
|
4536
|
+
alert(`Proofread: ${r.reason}`);
|
|
4537
|
+
}
|
|
4538
|
+
} catch (err) {
|
|
4539
|
+
alert(`Proofread failed: ${err?.message || err}`);
|
|
4379
4540
|
}
|
|
4380
|
-
}
|
|
4381
|
-
|
|
4382
|
-
|
|
4383
|
-
});
|
|
4384
|
-
menu.appendChild(item);
|
|
4385
|
-
document.body.appendChild(menu);
|
|
4386
|
-
const dismiss2 = () => {
|
|
4387
|
-
menu.remove();
|
|
4388
|
-
document.removeEventListener("mousedown", dismiss2);
|
|
4389
|
-
};
|
|
4390
|
-
setTimeout(() => document.addEventListener("mousedown", dismiss2), 0);
|
|
4541
|
+
} },
|
|
4542
|
+
...standardEditItems2(() => q)
|
|
4543
|
+
]);
|
|
4391
4544
|
} catch {
|
|
4392
4545
|
}
|
|
4393
4546
|
});
|
|
@@ -4816,173 +4969,7 @@ async function createTinyMceEditor2(container2, opts = {}) {
|
|
|
4816
4969
|
// client/compose/compose.ts
|
|
4817
4970
|
init_api_client();
|
|
4818
4971
|
init_edit_commands();
|
|
4819
|
-
|
|
4820
|
-
// client/components/context-menu.js
|
|
4821
|
-
init_edit_menu();
|
|
4822
|
-
var activeMenu = null;
|
|
4823
|
-
var dismissListener = null;
|
|
4824
|
-
var escapeListener = null;
|
|
4825
|
-
var activeSubmenu = null;
|
|
4826
|
-
function closeSubmenu() {
|
|
4827
|
-
if (activeSubmenu) {
|
|
4828
|
-
activeSubmenu.remove();
|
|
4829
|
-
activeSubmenu = null;
|
|
4830
|
-
}
|
|
4831
|
-
}
|
|
4832
|
-
function closeContextMenu() {
|
|
4833
|
-
closeSubmenu();
|
|
4834
|
-
if (activeMenu) {
|
|
4835
|
-
activeMenu.remove();
|
|
4836
|
-
activeMenu = null;
|
|
4837
|
-
}
|
|
4838
|
-
if (dismissListener) {
|
|
4839
|
-
document.removeEventListener("pointerdown", dismissListener, true);
|
|
4840
|
-
dismissListener = null;
|
|
4841
|
-
}
|
|
4842
|
-
if (escapeListener) {
|
|
4843
|
-
document.removeEventListener("keydown", escapeListener, true);
|
|
4844
|
-
escapeListener = null;
|
|
4845
|
-
}
|
|
4846
|
-
}
|
|
4847
|
-
function openSubmenu(parentRow, items) {
|
|
4848
|
-
closeSubmenu();
|
|
4849
|
-
const sub = document.createElement("div");
|
|
4850
|
-
sub.className = "ctx-menu";
|
|
4851
|
-
for (const item of items) {
|
|
4852
|
-
if (item.separator) {
|
|
4853
|
-
const sep = document.createElement("div");
|
|
4854
|
-
sep.className = "ctx-sep";
|
|
4855
|
-
sub.appendChild(sep);
|
|
4856
|
-
continue;
|
|
4857
|
-
}
|
|
4858
|
-
const el = document.createElement("div");
|
|
4859
|
-
el.className = "ctx-item" + (item.disabled ? " ctx-disabled" : "");
|
|
4860
|
-
el.textContent = item.label;
|
|
4861
|
-
if (item.tooltip)
|
|
4862
|
-
el.title = item.tooltip;
|
|
4863
|
-
if (!item.disabled) {
|
|
4864
|
-
el.addEventListener("click", () => {
|
|
4865
|
-
closeContextMenu();
|
|
4866
|
-
item.action();
|
|
4867
|
-
});
|
|
4868
|
-
}
|
|
4869
|
-
sub.appendChild(el);
|
|
4870
|
-
}
|
|
4871
|
-
document.body.appendChild(sub);
|
|
4872
|
-
const anchor = parentRow.getBoundingClientRect();
|
|
4873
|
-
const vw = window.visualViewport?.width ?? window.innerWidth;
|
|
4874
|
-
const vh = window.visualViewport?.height ?? window.innerHeight;
|
|
4875
|
-
const rect = sub.getBoundingClientRect();
|
|
4876
|
-
let left = anchor.right - 2;
|
|
4877
|
-
if (left + rect.width > vw)
|
|
4878
|
-
left = anchor.left - rect.width + 2;
|
|
4879
|
-
let top = anchor.top;
|
|
4880
|
-
if (top + rect.height > vh)
|
|
4881
|
-
top = vh - rect.height - 4;
|
|
4882
|
-
sub.style.left = `${Math.max(4, left)}px`;
|
|
4883
|
-
sub.style.top = `${Math.max(4, top)}px`;
|
|
4884
|
-
activeSubmenu = sub;
|
|
4885
|
-
}
|
|
4886
|
-
function showContextMenu(x, y, items, opts = {}) {
|
|
4887
|
-
closeContextMenu();
|
|
4888
|
-
if (opts.editTarget !== void 0 || opts.editEngine) {
|
|
4889
|
-
const edit = editMenuItems({ target: opts.editTarget, engine: opts.editEngine }, { onError: opts.onEditError });
|
|
4890
|
-
if (edit.length > 0) {
|
|
4891
|
-
items = items.length > 0 ? [...edit, { label: "", action: () => {
|
|
4892
|
-
}, separator: true }, ...items] : edit;
|
|
4893
|
-
}
|
|
4894
|
-
}
|
|
4895
|
-
const menu = document.createElement("div");
|
|
4896
|
-
menu.className = "ctx-menu";
|
|
4897
|
-
for (const item of items) {
|
|
4898
|
-
if (item.separator) {
|
|
4899
|
-
const sep = document.createElement("div");
|
|
4900
|
-
sep.className = "ctx-sep";
|
|
4901
|
-
menu.appendChild(sep);
|
|
4902
|
-
continue;
|
|
4903
|
-
}
|
|
4904
|
-
const el = document.createElement("div");
|
|
4905
|
-
el.className = "ctx-item" + (item.disabled ? " ctx-disabled" : "") + (item.emphasized ? " ctx-emphasized" : "");
|
|
4906
|
-
if (item.emphasized)
|
|
4907
|
-
el.style.fontWeight = "600";
|
|
4908
|
-
el.textContent = item.label;
|
|
4909
|
-
if (item.tooltip)
|
|
4910
|
-
el.title = item.tooltip;
|
|
4911
|
-
if (item.submenu && item.submenu.length > 0 && !item.disabled) {
|
|
4912
|
-
el.style.display = "flex";
|
|
4913
|
-
el.style.justifyContent = "space-between";
|
|
4914
|
-
el.style.gap = "12px";
|
|
4915
|
-
const caret = document.createElement("span");
|
|
4916
|
-
caret.textContent = "\u25B8";
|
|
4917
|
-
caret.style.opacity = "0.6";
|
|
4918
|
-
el.appendChild(caret);
|
|
4919
|
-
const open = () => openSubmenu(el, item.submenu);
|
|
4920
|
-
el.addEventListener("mouseenter", open);
|
|
4921
|
-
el.addEventListener("click", (e) => {
|
|
4922
|
-
e.stopPropagation();
|
|
4923
|
-
open();
|
|
4924
|
-
});
|
|
4925
|
-
menu.appendChild(el);
|
|
4926
|
-
continue;
|
|
4927
|
-
}
|
|
4928
|
-
el.addEventListener("mouseenter", closeSubmenu);
|
|
4929
|
-
if (!item.disabled) {
|
|
4930
|
-
el.addEventListener("click", () => {
|
|
4931
|
-
closeContextMenu();
|
|
4932
|
-
item.action();
|
|
4933
|
-
});
|
|
4934
|
-
}
|
|
4935
|
-
menu.appendChild(el);
|
|
4936
|
-
}
|
|
4937
|
-
menu.style.left = `${x}px`;
|
|
4938
|
-
menu.style.top = `${y}px`;
|
|
4939
|
-
document.body.appendChild(menu);
|
|
4940
|
-
const vw = window.visualViewport?.width ?? window.innerWidth;
|
|
4941
|
-
const vh = window.visualViewport?.height ?? window.innerHeight;
|
|
4942
|
-
let rect = menu.getBoundingClientRect();
|
|
4943
|
-
if (rect.height > vh - 8) {
|
|
4944
|
-
menu.style.maxHeight = `${vh - 8}px`;
|
|
4945
|
-
menu.style.overflowY = "auto";
|
|
4946
|
-
rect = menu.getBoundingClientRect();
|
|
4947
|
-
}
|
|
4948
|
-
let left = x, top = y;
|
|
4949
|
-
if (left + rect.width > vw)
|
|
4950
|
-
left = x - rect.width;
|
|
4951
|
-
if (top + rect.height > vh)
|
|
4952
|
-
top = y - rect.height;
|
|
4953
|
-
left = Math.max(4, Math.min(left, vw - rect.width - 4));
|
|
4954
|
-
top = Math.max(4, Math.min(top, vh - rect.height - 4));
|
|
4955
|
-
menu.style.left = `${left}px`;
|
|
4956
|
-
menu.style.top = `${top}px`;
|
|
4957
|
-
activeMenu = menu;
|
|
4958
|
-
requestAnimationFrame(() => {
|
|
4959
|
-
dismissListener = (e) => {
|
|
4960
|
-
if (activeSubmenu?.contains(e.target))
|
|
4961
|
-
return;
|
|
4962
|
-
if (activeMenu && !activeMenu.contains(e.target)) {
|
|
4963
|
-
closeContextMenu();
|
|
4964
|
-
}
|
|
4965
|
-
};
|
|
4966
|
-
document.addEventListener("pointerdown", dismissListener, true);
|
|
4967
|
-
escapeListener = (e) => {
|
|
4968
|
-
if (e.key === "Escape") {
|
|
4969
|
-
e.preventDefault();
|
|
4970
|
-
e.stopPropagation();
|
|
4971
|
-
closeContextMenu();
|
|
4972
|
-
}
|
|
4973
|
-
};
|
|
4974
|
-
document.addEventListener("keydown", escapeListener, true);
|
|
4975
|
-
});
|
|
4976
|
-
}
|
|
4977
|
-
document.addEventListener("scroll", closeContextMenu, true);
|
|
4978
|
-
document.addEventListener("contextmenu", () => {
|
|
4979
|
-
});
|
|
4980
|
-
window.addEventListener("message", (e) => {
|
|
4981
|
-
if (e.data && e.data.type === "iframePointerDown")
|
|
4982
|
-
closeContextMenu();
|
|
4983
|
-
});
|
|
4984
|
-
|
|
4985
|
-
// client/compose/compose.ts
|
|
4972
|
+
init_context_menu();
|
|
4986
4973
|
installConsoleCapture();
|
|
4987
4974
|
logClientEvent("compose-module-loaded", { href: location.href, version: window.mailxVersion || "?" });
|
|
4988
4975
|
var _composeT0 = performance.now();
|
|
@@ -5454,7 +5441,7 @@ function showAutocompleteContextMenu(e, row) {
|
|
|
5454
5441
|
window.open(`https://contacts.google.com/search/${encodeURIComponent(row.name || row.email)}`, "_blank");
|
|
5455
5442
|
}
|
|
5456
5443
|
}
|
|
5457
|
-
]);
|
|
5444
|
+
], { editTarget: e.target });
|
|
5458
5445
|
}
|
|
5459
5446
|
function openAddToPreferredModal(prefill) {
|
|
5460
5447
|
const overlay = document.createElement("div");
|