@bobfrankston/rmfmail 1.2.274 → 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.
Files changed (112) hide show
  1. package/.commitmsg +31 -0
  2. package/bin/build-tinymce.js +27 -0
  3. package/client/android-bootstrap.bundle.js +169 -0
  4. package/client/android-bootstrap.bundle.js.map +2 -2
  5. package/client/app.bundle.js +231 -23
  6. package/client/app.bundle.js.map +4 -4
  7. package/client/app.js +81 -1
  8. package/client/app.js.map +1 -1
  9. package/client/app.ts +75 -1
  10. package/client/components/invite-card.js +107 -0
  11. package/client/components/invite-card.js.map +1 -0
  12. package/client/components/invite-card.ts +119 -0
  13. package/client/components/message-viewer.js +42 -17
  14. package/client/components/message-viewer.js.map +1 -1
  15. package/client/components/message-viewer.ts +42 -16
  16. package/client/compose/compose.bundle.js +90 -2
  17. package/client/compose/compose.bundle.js.map +4 -4
  18. package/client/compose/compose.js +26 -1
  19. package/client/compose/compose.js.map +1 -1
  20. package/client/compose/compose.ts +22 -1
  21. package/client/compose/editor.js +12 -1
  22. package/client/compose/editor.js.map +1 -1
  23. package/client/compose/editor.ts +17 -2
  24. package/client/index.html +1 -0
  25. package/client/lib/rmf-tiny.js +3 -0
  26. package/client/lib/tinymce/langs/ar-SA.js +440 -0
  27. package/client/lib/tinymce/langs/ar.js +441 -0
  28. package/client/lib/tinymce/langs/az.js +440 -0
  29. package/client/lib/tinymce/langs/be.js +440 -0
  30. package/client/lib/tinymce/langs/bg-BG.js +440 -0
  31. package/client/lib/tinymce/langs/bn-BD.js +440 -0
  32. package/client/lib/tinymce/langs/bs.js +440 -0
  33. package/client/lib/tinymce/langs/ca.js +440 -0
  34. package/client/lib/tinymce/langs/cs.js +440 -0
  35. package/client/lib/tinymce/langs/cy.js +440 -0
  36. package/client/lib/tinymce/langs/da.js +440 -0
  37. package/client/lib/tinymce/langs/de.js +440 -0
  38. package/client/lib/tinymce/langs/el.js +440 -0
  39. package/client/lib/tinymce/langs/eo.js +440 -0
  40. package/client/lib/tinymce/langs/es-MX.js +440 -0
  41. package/client/lib/tinymce/langs/es.js +440 -0
  42. package/client/lib/tinymce/langs/et.js +440 -0
  43. package/client/lib/tinymce/langs/eu.js +440 -0
  44. package/client/lib/tinymce/langs/fa.js +441 -0
  45. package/client/lib/tinymce/langs/fi.js +440 -0
  46. package/client/lib/tinymce/langs/fr-FR.js +440 -0
  47. package/client/lib/tinymce/langs/gl.js +440 -0
  48. package/client/lib/tinymce/langs/he-IL.js +440 -0
  49. package/client/lib/tinymce/langs/hr.js +440 -0
  50. package/client/lib/tinymce/langs/hu-HU.js +440 -0
  51. package/client/lib/tinymce/langs/hy.js +440 -0
  52. package/client/lib/tinymce/langs/id.js +440 -0
  53. package/client/lib/tinymce/langs/index.json +63 -0
  54. package/client/lib/tinymce/langs/is-IS.js +440 -0
  55. package/client/lib/tinymce/langs/it.js +440 -0
  56. package/client/lib/tinymce/langs/ja.js +440 -0
  57. package/client/lib/tinymce/langs/ka-GE.js +440 -0
  58. package/client/lib/tinymce/langs/kab.js +440 -0
  59. package/client/lib/tinymce/langs/kk.js +440 -0
  60. package/client/lib/tinymce/langs/ko-KR.js +440 -0
  61. package/client/lib/tinymce/langs/lt.js +440 -0
  62. package/client/lib/tinymce/langs/lv.js +440 -0
  63. package/client/lib/tinymce/langs/nb-NO.js +440 -0
  64. package/client/lib/tinymce/langs/ne.js +440 -0
  65. package/client/lib/tinymce/langs/nl-BE.js +440 -0
  66. package/client/lib/tinymce/langs/nl.js +440 -0
  67. package/client/lib/tinymce/langs/oc.js +440 -0
  68. package/client/lib/tinymce/langs/pl.js +440 -0
  69. package/client/lib/tinymce/langs/pt-BR.js +440 -0
  70. package/client/lib/tinymce/langs/pt-PT.js +440 -0
  71. package/client/lib/tinymce/langs/ro.js +440 -0
  72. package/client/lib/tinymce/langs/ru.js +440 -0
  73. package/client/lib/tinymce/langs/sk.js +440 -0
  74. package/client/lib/tinymce/langs/sl-SI.js +440 -0
  75. package/client/lib/tinymce/langs/sr.js +440 -0
  76. package/client/lib/tinymce/langs/sv-SE.js +440 -0
  77. package/client/lib/tinymce/langs/ta.js +440 -0
  78. package/client/lib/tinymce/langs/tg.js +440 -0
  79. package/client/lib/tinymce/langs/th-TH.js +440 -0
  80. package/client/lib/tinymce/langs/tr.js +440 -0
  81. package/client/lib/tinymce/langs/ug.js +440 -0
  82. package/client/lib/tinymce/langs/uk.js +440 -0
  83. package/client/lib/tinymce/langs/vi.js +440 -0
  84. package/client/lib/tinymce/langs/zh-CN.js +440 -0
  85. package/client/lib/tinymce/langs/zh-HK.js +440 -0
  86. package/client/lib/tinymce/langs/zh-MO.js +440 -0
  87. package/client/lib/tinymce/langs/zh-TW.js +440 -0
  88. package/client/lib/tinymce-langs.js +96 -0
  89. package/client/lib/tinymce-langs.js.map +1 -0
  90. package/client/lib/tinymce-langs.ts +99 -0
  91. package/client/package.json +1 -1
  92. package/client/styles/components.css +48 -0
  93. package/docs/editor.md +29 -3
  94. package/docs/preferences.md +2 -1
  95. package/npmchanges.md +29 -0
  96. package/package.json +18 -15
  97. package/packages/mailx-imap/package-lock.json +2 -2
  98. package/packages/mailx-imap/package.json +2 -2
  99. package/packages/mailx-settings/package.json +1 -1
  100. package/packages/mailx-store/package.json +1 -1
  101. package/packages/mailx-store/store.d.ts +5 -0
  102. package/packages/mailx-store/store.d.ts.map +1 -1
  103. package/packages/mailx-store/store.js +21 -0
  104. package/packages/mailx-store/store.js.map +1 -1
  105. package/packages/mailx-store/store.ts +27 -0
  106. package/packages/mailx-types/index.d.ts +56 -0
  107. package/packages/mailx-types/index.d.ts.map +1 -1
  108. package/packages/mailx-types/index.js +187 -0
  109. package/packages/mailx-types/index.js.map +1 -1
  110. package/packages/mailx-types/index.ts +192 -0
  111. package/packages/mailx-types/package.json +1 -1
  112. /package/packages/mailx-imap/{node_modules.npmglobalize-stash-31304 → node_modules.npmglobalize-stash-48352}/.package-lock.json +0 -0
@@ -2714,6 +2714,9 @@ async function createTinyMceEditor(container2, opts = {}) {
2714
2714
  // Adding Text first so it's the default; rest are the modern
2715
2715
  // languages we actually paste.
2716
2716
  codesample_languages: CODE_LANGS,
2717
+ // UI language. Left unset (TinyMCE default "en") when the host
2718
+ // passes nothing, which also skips the langs/ fetch entirely.
2719
+ ...opts.language && opts.language !== "en" ? { language: opts.language } : {},
2717
2720
  // WebView's native spell-check (red underlines, right-click
2718
2721
  // "Add to dictionary"). Free; same UX as Quill's spellcheck=true.
2719
2722
  // Premium tinymcespellchecker plugin would replace this with a
@@ -3428,6 +3431,67 @@ var init_rmf_tiny = __esm({
3428
3431
  }
3429
3432
  });
3430
3433
 
3434
+ // client/lib/tinymce-langs.js
3435
+ var tinymce_langs_exports = {};
3436
+ __export(tinymce_langs_exports, {
3437
+ LANGUAGE_AUTO: () => LANGUAGE_AUTO,
3438
+ LANGUAGE_ENGLISH: () => LANGUAGE_ENGLISH,
3439
+ availableLanguages: () => availableLanguages,
3440
+ langManifestUrl: () => langManifestUrl,
3441
+ languageLabel: () => languageLabel,
3442
+ resolveLanguage: () => resolveLanguage
3443
+ });
3444
+ function langManifestUrl(tinymceScriptUrl) {
3445
+ return new URL("langs/index.json", new URL(tinymceScriptUrl, location.href)).href;
3446
+ }
3447
+ async function availableLanguages(tinymceScriptUrl) {
3448
+ try {
3449
+ const r = await fetch(langManifestUrl(tinymceScriptUrl));
3450
+ if (!r.ok)
3451
+ return [];
3452
+ const list = await r.json();
3453
+ return Array.isArray(list) ? list.filter((x) => typeof x === "string") : [];
3454
+ } catch {
3455
+ return [];
3456
+ }
3457
+ }
3458
+ function resolveLanguage(setting, available, preferred = navigator.languages || [navigator.language]) {
3459
+ const byLower = new Map(available.map((code) => [code.toLowerCase(), code]));
3460
+ if (setting && setting !== LANGUAGE_AUTO) {
3461
+ if (setting === LANGUAGE_ENGLISH)
3462
+ return LANGUAGE_ENGLISH;
3463
+ return byLower.get(setting.toLowerCase()) || LANGUAGE_ENGLISH;
3464
+ }
3465
+ for (const tag of preferred) {
3466
+ if (!tag)
3467
+ continue;
3468
+ const lower = tag.toLowerCase();
3469
+ const base = lower.split("-")[0];
3470
+ if (base === LANGUAGE_ENGLISH)
3471
+ return LANGUAGE_ENGLISH;
3472
+ const hit = byLower.get(lower) || byLower.get(base) || available.find((code) => code.toLowerCase().split("-")[0] === base);
3473
+ if (hit)
3474
+ return hit;
3475
+ }
3476
+ return LANGUAGE_ENGLISH;
3477
+ }
3478
+ function languageLabel(code) {
3479
+ try {
3480
+ const names = new Intl.DisplayNames(navigator.languages || void 0, { type: "language" });
3481
+ return names.of(code) || code;
3482
+ } catch {
3483
+ return code;
3484
+ }
3485
+ }
3486
+ var LANGUAGE_AUTO, LANGUAGE_ENGLISH;
3487
+ var init_tinymce_langs = __esm({
3488
+ "client/lib/tinymce-langs.js"() {
3489
+ "use strict";
3490
+ LANGUAGE_AUTO = "auto";
3491
+ LANGUAGE_ENGLISH = "en";
3492
+ }
3493
+ });
3494
+
3431
3495
  // client/compose/spellcheck.js
3432
3496
  var spellcheck_exports = {};
3433
3497
  __export(spellcheck_exports, {
@@ -5074,7 +5138,15 @@ async function createTinyMceEditor2(container2, opts = {}) {
5074
5138
  }
5075
5139
  const m = await Promise.resolve().then(() => (init_rmf_tiny(), rmf_tiny_exports));
5076
5140
  const cssPx = parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--compose-font-size"));
5077
- const ed = await m.createTinyMceEditor(container2, { cdnUrl, apiKey, onFiles: opts.onFiles, fontSizePx: Number.isFinite(cssPx) ? cssPx : void 0 });
5141
+ let language;
5142
+ try {
5143
+ const { availableLanguages: availableLanguages2, resolveLanguage: resolveLanguage2, LANGUAGE_ENGLISH: LANGUAGE_ENGLISH2 } = await Promise.resolve().then(() => (init_tinymce_langs(), tinymce_langs_exports));
5144
+ const resolved = resolveLanguage2(opts.language || "auto", await availableLanguages2(cdnUrl));
5145
+ if (resolved !== LANGUAGE_ENGLISH2)
5146
+ language = resolved;
5147
+ } catch {
5148
+ }
5149
+ const ed = await m.createTinyMceEditor(container2, { cdnUrl, apiKey, onFiles: opts.onFiles, fontSizePx: Number.isFinite(cssPx) ? cssPx : void 0, language });
5078
5150
  try {
5079
5151
  const native = ed.nativeEditor;
5080
5152
  const body = native?.getBody?.();
@@ -5161,6 +5233,15 @@ if (__bootUi?.editor === "tiptap" || __bootUi?.editor === "quill" || __bootUi?.e
5161
5233
  } catch {
5162
5234
  }
5163
5235
  }
5236
+ var editorLanguage = "auto";
5237
+ if (typeof __bootUi?.editorLanguage === "string" && __bootUi.editorLanguage) {
5238
+ editorLanguage = __bootUi.editorLanguage;
5239
+ } else {
5240
+ try {
5241
+ editorLanguage = localStorage.getItem("mailx-editor-language") || "auto";
5242
+ } catch {
5243
+ }
5244
+ }
5164
5245
  var COMPOSE_FONT_MIN_PX = 8;
5165
5246
  var COMPOSE_FONT_MAX_PX = 32;
5166
5247
  var COMPOSE_FONT_DEFAULT_PX = 20;
@@ -5183,6 +5264,13 @@ try {
5183
5264
  localStorage.setItem("mailx-editor-type", next);
5184
5265
  } catch {
5185
5266
  }
5267
+ const lang = appSettings?.ui?.editorLanguage;
5268
+ if (typeof lang === "string" && lang) {
5269
+ try {
5270
+ localStorage.setItem("mailx-editor-language", lang);
5271
+ } catch {
5272
+ }
5273
+ }
5186
5274
  const fontPx = Number(appSettings?.ui?.composeFontSize);
5187
5275
  if (Number.isFinite(fontPx) && fontPx >= COMPOSE_FONT_MIN_PX && fontPx <= COMPOSE_FONT_MAX_PX) {
5188
5276
  try {
@@ -5243,7 +5331,7 @@ async function tryEditor(type) {
5243
5331
  try {
5244
5332
  const ed = await createEditor(container, type, { onFiles: (files) => {
5245
5333
  void ingestFiles(files);
5246
- } });
5334
+ }, language: editorLanguage });
5247
5335
  if (type === "tinymce" && ed && ed.nativeEditor) {
5248
5336
  const native = ed.nativeEditor;
5249
5337
  const attach = () => {