@bobfrankston/rmfmail 1.2.276 → 1.2.277
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/.commitmsg +28 -23
- package/bin/build-tinymce.js +27 -0
- package/client/app.bundle.js +108 -0
- package/client/app.bundle.js.map +4 -4
- package/client/app.js +65 -0
- package/client/app.js.map +1 -1
- package/client/app.ts +59 -0
- package/client/compose/compose.bundle.js +90 -2
- package/client/compose/compose.bundle.js.map +4 -4
- package/client/compose/compose.js +26 -1
- package/client/compose/compose.js.map +1 -1
- package/client/compose/compose.ts +22 -1
- package/client/compose/editor.js +12 -1
- package/client/compose/editor.js.map +1 -1
- package/client/compose/editor.ts +17 -2
- package/client/index.html +1 -0
- package/client/lib/rmf-tiny.js +3 -0
- package/client/lib/tinymce/langs/ar-SA.js +440 -0
- package/client/lib/tinymce/langs/ar.js +441 -0
- package/client/lib/tinymce/langs/az.js +440 -0
- package/client/lib/tinymce/langs/be.js +440 -0
- package/client/lib/tinymce/langs/bg-BG.js +440 -0
- package/client/lib/tinymce/langs/bn-BD.js +440 -0
- package/client/lib/tinymce/langs/bs.js +440 -0
- package/client/lib/tinymce/langs/ca.js +440 -0
- package/client/lib/tinymce/langs/cs.js +440 -0
- package/client/lib/tinymce/langs/cy.js +440 -0
- package/client/lib/tinymce/langs/da.js +440 -0
- package/client/lib/tinymce/langs/de.js +440 -0
- package/client/lib/tinymce/langs/el.js +440 -0
- package/client/lib/tinymce/langs/eo.js +440 -0
- package/client/lib/tinymce/langs/es-MX.js +440 -0
- package/client/lib/tinymce/langs/es.js +440 -0
- package/client/lib/tinymce/langs/et.js +440 -0
- package/client/lib/tinymce/langs/eu.js +440 -0
- package/client/lib/tinymce/langs/fa.js +441 -0
- package/client/lib/tinymce/langs/fi.js +440 -0
- package/client/lib/tinymce/langs/fr-FR.js +440 -0
- package/client/lib/tinymce/langs/gl.js +440 -0
- package/client/lib/tinymce/langs/he-IL.js +440 -0
- package/client/lib/tinymce/langs/hr.js +440 -0
- package/client/lib/tinymce/langs/hu-HU.js +440 -0
- package/client/lib/tinymce/langs/hy.js +440 -0
- package/client/lib/tinymce/langs/id.js +440 -0
- package/client/lib/tinymce/langs/index.json +63 -0
- package/client/lib/tinymce/langs/is-IS.js +440 -0
- package/client/lib/tinymce/langs/it.js +440 -0
- package/client/lib/tinymce/langs/ja.js +440 -0
- package/client/lib/tinymce/langs/ka-GE.js +440 -0
- package/client/lib/tinymce/langs/kab.js +440 -0
- package/client/lib/tinymce/langs/kk.js +440 -0
- package/client/lib/tinymce/langs/ko-KR.js +440 -0
- package/client/lib/tinymce/langs/lt.js +440 -0
- package/client/lib/tinymce/langs/lv.js +440 -0
- package/client/lib/tinymce/langs/nb-NO.js +440 -0
- package/client/lib/tinymce/langs/ne.js +440 -0
- package/client/lib/tinymce/langs/nl-BE.js +440 -0
- package/client/lib/tinymce/langs/nl.js +440 -0
- package/client/lib/tinymce/langs/oc.js +440 -0
- package/client/lib/tinymce/langs/pl.js +440 -0
- package/client/lib/tinymce/langs/pt-BR.js +440 -0
- package/client/lib/tinymce/langs/pt-PT.js +440 -0
- package/client/lib/tinymce/langs/ro.js +440 -0
- package/client/lib/tinymce/langs/ru.js +440 -0
- package/client/lib/tinymce/langs/sk.js +440 -0
- package/client/lib/tinymce/langs/sl-SI.js +440 -0
- package/client/lib/tinymce/langs/sr.js +440 -0
- package/client/lib/tinymce/langs/sv-SE.js +440 -0
- package/client/lib/tinymce/langs/ta.js +440 -0
- package/client/lib/tinymce/langs/tg.js +440 -0
- package/client/lib/tinymce/langs/th-TH.js +440 -0
- package/client/lib/tinymce/langs/tr.js +440 -0
- package/client/lib/tinymce/langs/ug.js +440 -0
- package/client/lib/tinymce/langs/uk.js +440 -0
- package/client/lib/tinymce/langs/vi.js +440 -0
- package/client/lib/tinymce/langs/zh-CN.js +440 -0
- package/client/lib/tinymce/langs/zh-HK.js +440 -0
- package/client/lib/tinymce/langs/zh-MO.js +440 -0
- package/client/lib/tinymce/langs/zh-TW.js +440 -0
- package/client/lib/tinymce-langs.js +96 -0
- package/client/lib/tinymce-langs.js.map +1 -0
- package/client/lib/tinymce-langs.ts +99 -0
- package/docs/editor.md +29 -3
- package/docs/preferences.md +2 -1
- package/npmchanges.md +29 -0
- package/package.json +11 -8
- /package/packages/mailx-imap/{node_modules.npmglobalize-stash-59216 → node_modules.npmglobalize-stash-48352}/.package-lock.json +0 -0
package/docs/editor.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Compose editor — formatting and shortcuts
|
|
2
2
|
|
|
3
|
-
mailx ships with
|
|
4
|
-
Most things work the same in
|
|
3
|
+
mailx ships with three rich-text editors: **Quill** (default), **tiptap**,
|
|
4
|
+
and **TinyMCE**. Most things work the same in all of them. Differences are
|
|
5
|
+
called out below.
|
|
5
6
|
|
|
6
|
-
Switch editors via **Settings → Editor → Quill | tiptap**.
|
|
7
|
+
Switch editors via **Settings → Editor → Quill | tiptap | TinyMCE**.
|
|
7
8
|
|
|
8
9
|
## Universal — works in both editors
|
|
9
10
|
|
|
@@ -74,6 +75,31 @@ use the heading select / format menu instead.
|
|
|
74
75
|
- **Ghost-text autocomplete** (off by default) — Settings →
|
|
75
76
|
AI autocomplete → on. Predicts the next words while you type.
|
|
76
77
|
|
|
78
|
+
## Editor language (TinyMCE only)
|
|
79
|
+
|
|
80
|
+
**Settings → Editor → Editor language** translates the editor *chrome* —
|
|
81
|
+
menus, dialogs, tooltips — into one of 61 languages. It does **not** touch:
|
|
82
|
+
|
|
83
|
+
- your message text,
|
|
84
|
+
- the spellchecker (English dictionary),
|
|
85
|
+
- the grammar check (Harper is English-only).
|
|
86
|
+
|
|
87
|
+
So German chrome wraps an unchanged English writing experience. Quill and
|
|
88
|
+
tiptap have no localized chrome and ignore the setting.
|
|
89
|
+
|
|
90
|
+
**Auto** (the default) follows this browser's language list, taking the first
|
|
91
|
+
one we have a pack for: an exact match (`pt-BR`), then the bare language
|
|
92
|
+
(`de-CH` → `de`), then any regional variant of it (`he` → `he-IL`). English
|
|
93
|
+
short-circuits — TinyMCE's built-in strings are English, there is no pack to
|
|
94
|
+
load. The menu names what Auto currently resolves to, so it is never a guess.
|
|
95
|
+
|
|
96
|
+
Everything is local: the packs ship with the app, and only the one language in
|
|
97
|
+
force is ever loaded. Translation coverage is community-contributed and uneven
|
|
98
|
+
— untranslated strings stay English even in widely-used languages.
|
|
99
|
+
|
|
100
|
+
The language is fixed when a compose window opens, so a change takes effect on
|
|
101
|
+
the next Reply / Forward / Compose, not in a window already open.
|
|
102
|
+
|
|
77
103
|
## When the toolbar doesn't appear
|
|
78
104
|
|
|
79
105
|
The editor loads from a CDN (jsdelivr). If your network can't reach it,
|
package/docs/preferences.md
CHANGED
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"flaggedOnly": false,
|
|
21
21
|
"folderCounts": false,
|
|
22
22
|
"calendarSidebar": false,
|
|
23
|
-
"editor": "quill"
|
|
23
|
+
"editor": "quill", // "quill" | "tiptap" | "tinymce"
|
|
24
|
+
"editorLanguage": "auto" // TinyMCE menu/dialog language; "auto" | "en" | pack code ("de", "pt-BR", ...)
|
|
24
25
|
},
|
|
25
26
|
"sync": {
|
|
26
27
|
"intervalMinutes": 5, // full-sync interval (per-folder); IDLE handles INBOX inline
|
package/npmchanges.md
CHANGED
|
@@ -501,3 +501,32 @@ gets retried instead of staying broken until the next -repair. Pairs
|
|
|
501
501
|
with the elapsed-time wait indicator (1.1.135) which surfaces the
|
|
502
502
|
in-progress retry to the user.
|
|
503
503
|
|
|
504
|
+
## v1.2.276 — 2026-08-23
|
|
505
|
+
|
|
506
|
+
Preview hotkeys fired twice — Ctrl+F opened two compose windows
|
|
507
|
+
|
|
508
|
+
A keydown in the message preview reached app.ts by TWO routes on desktop
|
|
509
|
+
WebView2: the iframe's own inline script posts every keydown to the parent as
|
|
510
|
+
`previewKey` (app.ts re-dispatches it), and installPreviewControls ALSO attached
|
|
511
|
+
a contentDocument listener that re-dispatched a synthetic keydown of its own.
|
|
512
|
+
The srcdoc document is same-origin, so both are live. One Ctrl+F therefore ran
|
|
513
|
+
openCompose("forward") twice and opened two compose popouts — the second never
|
|
514
|
+
finished loading and sat blank and "(Not Responding)" until it was killed (Bob
|
|
515
|
+
2026-08-23, "Compose: Fwd: FirstCare Slide Deck (Not Responding)"; the log shows
|
|
516
|
+
openCompose-entry mode=forward twice in the same millisecond, two popoutCompose
|
|
517
|
+
windows, and the loaded one exiting while the blank duplicate survived). Ctrl+D
|
|
518
|
+
and Ctrl+P doubled the same way.
|
|
519
|
+
|
|
520
|
+
The inline forwarder is the mechanism that survives — it is the only one that
|
|
521
|
+
works on Android WebView, where parent-side contentDocument listeners never
|
|
522
|
+
fire. installPreviewControls keeps only what is genuinely iframe-local: zoom and
|
|
523
|
+
Ctrl+A.
|
|
524
|
+
|
|
525
|
+
Also: push the Windows taskbar overlay only when the unread count CHANGES.
|
|
526
|
+
Windows holds the overlay icon until the next SetOverlayIcon, so the host cannot
|
|
527
|
+
free the icon it just handed over; re-sending an identical badge every few
|
|
528
|
+
seconds cost GDI objects for nothing and helped drive rmfmail.exe to the
|
|
529
|
+
10,000-object per-process cap (measured at GDI=9995, with 3423
|
|
530
|
+
"CreateIconIndirect failed: Not enough memory resources" in one day's log).
|
|
531
|
+
msger 0.1.429 fixes the leak itself by freeing the retired icon.
|
|
532
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bobfrankston/rmfmail",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.277",
|
|
4
4
|
"description": "Local-first email client with IMAP sync and standalone native app",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "bin/mailx.js",
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
36
36
|
"@bobfrankston/mailx-host": "^0.1.15",
|
|
37
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
37
|
+
"@bobfrankston/mailx-imap": "^0.1.158",
|
|
38
38
|
"@bobfrankston/mailx-store-web": "^0.1.86",
|
|
39
39
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
40
40
|
"@bobfrankston/miscinfo": "^1.0.20",
|
|
41
41
|
"@bobfrankston/msger": "^0.1.429",
|
|
42
42
|
"@bobfrankston/node-tcp-transport": "^0.1.10",
|
|
43
43
|
"@bobfrankston/oauthsupport": "^1.0.35",
|
|
44
|
-
"@bobfrankston/rmf-tiny": "^0.1.
|
|
44
|
+
"@bobfrankston/rmf-tiny": "^0.1.52",
|
|
45
45
|
"@bobfrankston/smtp-direct": "^0.1.9",
|
|
46
46
|
"@bobfrankston/tcp-transport": "^0.1.8",
|
|
47
47
|
"@capacitor/android": "^8.3.0",
|
|
@@ -58,7 +58,8 @@
|
|
|
58
58
|
"nspell": "^2.1.5",
|
|
59
59
|
"quill": "^2.0.3",
|
|
60
60
|
"sql.js": "^1.14.1",
|
|
61
|
-
"tinymce": "^8.5.0"
|
|
61
|
+
"tinymce": "^8.5.0",
|
|
62
|
+
"tinymce-i18n": "26.8.2"
|
|
62
63
|
},
|
|
63
64
|
"devDependencies": {
|
|
64
65
|
"@types/mailparser": "^3.4.6",
|
|
@@ -108,20 +109,21 @@
|
|
|
108
109
|
"nspell": "^2.1.5",
|
|
109
110
|
"quill": "^2.0.3",
|
|
110
111
|
"sql.js": "^1.14.1",
|
|
111
|
-
"tinymce": "^8.5.0"
|
|
112
|
+
"tinymce": "^8.5.0",
|
|
113
|
+
"tinymce-i18n": "26.8.2"
|
|
112
114
|
},
|
|
113
115
|
".transformedSnapshot": {
|
|
114
116
|
"dependencies": {
|
|
115
117
|
"@bobfrankston/iflow-direct": "^0.1.65",
|
|
116
118
|
"@bobfrankston/mailx-host": "^0.1.15",
|
|
117
|
-
"@bobfrankston/mailx-imap": "^0.1.
|
|
119
|
+
"@bobfrankston/mailx-imap": "^0.1.158",
|
|
118
120
|
"@bobfrankston/mailx-store-web": "^0.1.86",
|
|
119
121
|
"@bobfrankston/mailx-sync": "^0.1.29",
|
|
120
122
|
"@bobfrankston/miscinfo": "^1.0.20",
|
|
121
123
|
"@bobfrankston/msger": "^0.1.429",
|
|
122
124
|
"@bobfrankston/node-tcp-transport": "^0.1.10",
|
|
123
125
|
"@bobfrankston/oauthsupport": "^1.0.35",
|
|
124
|
-
"@bobfrankston/rmf-tiny": "^0.1.
|
|
126
|
+
"@bobfrankston/rmf-tiny": "^0.1.52",
|
|
125
127
|
"@bobfrankston/smtp-direct": "^0.1.9",
|
|
126
128
|
"@bobfrankston/tcp-transport": "^0.1.8",
|
|
127
129
|
"@capacitor/android": "^8.3.0",
|
|
@@ -138,7 +140,8 @@
|
|
|
138
140
|
"nspell": "^2.1.5",
|
|
139
141
|
"quill": "^2.0.3",
|
|
140
142
|
"sql.js": "^1.14.1",
|
|
141
|
-
"tinymce": "^8.5.0"
|
|
143
|
+
"tinymce": "^8.5.0",
|
|
144
|
+
"tinymce-i18n": "26.8.2"
|
|
142
145
|
}
|
|
143
146
|
}
|
|
144
147
|
}
|