@bobfrankston/mailx-settings 0.1.20 → 0.1.21

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 (2) hide show
  1. package/docs/rmf-tiny.md +31 -2
  2. package/package.json +3 -3
package/docs/rmf-tiny.md CHANGED
@@ -1,6 +1,6 @@
1
- # `rmf-tiny` — optional TinyMCE editor adapter for rmfmail
1
+ # `rmf-tiny` — TinyMCE editor adapter for rmfmail
2
2
 
3
- Status: design only. Not implemented.
3
+ Status: **implemented and shipping.** Source: `y:/dev/utils/msgx/libs/rmf-tiny/src/adapter.ts`; built copy served as `client/lib/rmf-tiny.js` (via `bin/build-rmf-tiny.js`). Selectable in Settings → Compose → Editor. The design notes below are kept for history; see **Known TinyMCE quirks** at the bottom for the live gotcha list.
4
4
 
5
5
  ## Goal
6
6
 
@@ -154,3 +154,32 @@ Don't publish the adapter until the Word-paste case actually works end-to-end th
154
154
  - The adapter must not re-implement parts of TinyMCE — it's a thin wrapper. Re-implementing parts of GPL code in MIT is the legal trap; staying purely in adapter / interface territory is safe.
155
155
  - TinyMCE's bundle is large (~1MB minified). Users opting in pay that cost on the first compose-window load. Fine for opt-in; would be unacceptable as a default.
156
156
  - `rmf-tiny` major version should track TinyMCE's major version (rmf-tiny@7.x for tinymce@7.x) so peerDependency mismatches are obvious.
157
+
158
+ ## Known TinyMCE quirks
159
+
160
+ TinyMCE frequently gets caret / scroll / block behaviour wrong. Each entry
161
+ below is a quirk found in use and the workaround in `adapter.ts`. Add to
162
+ this list whenever a new one turns up — it's the running gotcha log.
163
+
164
+ - **Viewport doesn't follow `setCursor`.** After `setContent` of a long
165
+ reply, collapsing the selection to the start (caret at top, where the
166
+ user types above the quote) does NOT scroll the iframe — it can be left
167
+ scrolled down inside the quoted block. Fix: `setCursor(0)` explicitly
168
+ calls `editor.getWin().scrollTo(0, 0)`; non-zero positions call
169
+ `editor.selection.scrollIntoView()`. (Bob 2026-05-18.)
170
+
171
+ - **Typing at a link's trailing edge extends the link.** With the caret
172
+ collapsed at the end of an `<a>`, contenteditable keeps appending typed
173
+ characters INTO the link — a whole sentence becomes link text. Fix: a
174
+ `keypress` handler hops the caret to just after the `<a>` first.
175
+
176
+ - **Native spellcheck is force-enabled.** `adapter.ts`'s `init` handler
177
+ sets `spellcheck="true"` on the body. mailx runs its own nspell checker
178
+ and overrides this back to `"false"` in `wireSpellcheck` (with a
179
+ MutationObserver) so the two don't double-underline.
180
+
181
+ - **`<p>` collapses to `<br>`.** Enter / paste sometimes produces a `<br>`
182
+ line break where a `<p>` paragraph was expected, so paragraph spacing is
183
+ lost until the lines are merged and Enter re-pressed. Not yet fixed —
184
+ candidate: `forced_root_block` / paste-normalization config. (Bob
185
+ 2026-05-18, exact trigger still unclear.)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bobfrankston/mailx-settings",
3
- "version": "0.1.20",
3
+ "version": "0.1.21",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "license": "ISC",
19
19
  "dependencies": {
20
- "@bobfrankston/mailx-types": "^0.1.17",
20
+ "@bobfrankston/mailx-types": "^0.1.18",
21
21
  "jsonc-parser": "^3.3.1"
22
22
  },
23
23
  "repository": {
@@ -33,7 +33,7 @@
33
33
  },
34
34
  ".transformedSnapshot": {
35
35
  "dependencies": {
36
- "@bobfrankston/mailx-types": "^0.1.17",
36
+ "@bobfrankston/mailx-types": "^0.1.18",
37
37
  "jsonc-parser": "^3.3.1"
38
38
  }
39
39
  }