fable-editor 1.2.4 → 1.2.6

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.
@@ -1,4 +1,4 @@
1
- const et = {
1
+ const it = {
2
2
  en: {
3
3
  dir: "ltr",
4
4
  file: "File",
@@ -385,9 +385,9 @@ const et = {
385
385
  }
386
386
  };
387
387
  function R(p) {
388
- return et[p];
388
+ return it[p];
389
389
  }
390
- const it = "undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode", st = "file edit view insert format tools table help", lt = [
390
+ const st = "undo redo | preview print | importword revhistory | fontfamily fontsize | fontsizeincrease fontsizedecrease | bold italic underline strikethrough | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent | link blockquote code changecase lineheight wordspacing letterspacing | removeformat | blocks | ltr rtl | quickimage quickvideo quicktable codesample template charmap emoji | fullscreen sourcecode", lt = "file edit view insert format tools table help", ot = [
391
391
  ["Andale Mono", "andale mono,times"],
392
392
  ["Arial", "arial,helvetica,sans-serif"],
393
393
  ["Arial Black", "arial black,avant garde"],
@@ -407,7 +407,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
407
407
  ["Verdana", "verdana,geneva"],
408
408
  ["Webdings", "webdings"],
409
409
  ["Wingdings", "wingdings,zapf dingbats"]
410
- ], ot = ["8px", "9px", "10px", "11px", "12px", "14px", "16px", "18px", "20px", "24px", "28px", "32px", "36px", "48px", "72px", "96px"], nt = 1, rt = 100, _ = ["1", "1.15", "1.4", "1.5", "1.75", "2", "2.5", "3"], U = ["1px", "2px", "4px", "6px", "8px", "12px"], V = ["0.5px", "1px", "1.5px", "2px", "3px", "4px"], W = [
410
+ ], nt = ["8px", "9px", "10px", "11px", "12px", "14px", "16px", "18px", "20px", "24px", "28px", "32px", "36px", "48px", "72px", "96px"], rt = 1, at = 100, z = ["1", "1.15", "1.4", "1.5", "1.75", "2", "2.5", "3"], U = ["1px", "2px", "4px", "6px", "8px", "12px"], V = ["0.5px", "1px", "1.5px", "2px", "3px", "4px"], W = [
411
411
  ["plain", "Plain text"],
412
412
  ["html", "HTML/XML"],
413
413
  ["css", "CSS"],
@@ -433,7 +433,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
433
433
  ["h5", "heading5"],
434
434
  ["h6", "heading6"],
435
435
  ["pre", "pre"]
436
- ], at = ["#F76707", "#4263EB", "#CC5DE8"], ct = [
436
+ ], ct = ["#F76707", "#4263EB", "#CC5DE8"], ht = [
437
437
  "#FFFFFF",
438
438
  "#F4F4F4",
439
439
  "#E8EAED",
@@ -459,7 +459,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
459
459
  "#8E24AA",
460
460
  "#C2185B",
461
461
  "#6D4C41"
462
- ], ht = [
462
+ ], dt = [
463
463
  {
464
464
  key: "chcat_currency",
465
465
  chars: [
@@ -799,7 +799,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
799
799
  "ة"
800
800
  ]
801
801
  }
802
- ], dt = [
802
+ ], pt = [
803
803
  {
804
804
  key: "emcat_smileys",
805
805
  chars: [
@@ -1524,7 +1524,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
1524
1524
  "🇲🇦"
1525
1525
  ]
1526
1526
  }
1527
- ], Nt = [
1527
+ ], Ft = [
1528
1528
  "©",
1529
1529
  "®",
1530
1530
  "™",
@@ -1810,7 +1810,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
1810
1810
  codesampleic: y(
1811
1811
  '<rect x="3.5" y="4" width="17" height="16" rx="2"/><path d="M3.5 8.5h17"/><path d="M9.5 12 7 14.25l2.5 2.25M14.5 12l2.5 2.25-2.5 2.25"/>'
1812
1812
  )
1813
- }, Zt = (p) => `<span class="txt">${p}</span>`, pt = /* @__PURE__ */ new Set([
1813
+ }, Ot = (p) => `<span class="txt">${p}</span>`, mt = /* @__PURE__ */ new Set([
1814
1814
  "p",
1815
1815
  "div",
1816
1816
  "span",
@@ -1852,7 +1852,7 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
1852
1852
  "figure",
1853
1853
  "figcaption",
1854
1854
  "mark"
1855
- ]), mt = /* @__PURE__ */ new Set([
1855
+ ]), ut = /* @__PURE__ */ new Set([
1856
1856
  "text-align",
1857
1857
  "direction",
1858
1858
  "unicode-bidi",
@@ -1917,20 +1917,20 @@ const it = "undo redo | preview print | importword revhistory | fontfamily fonts
1917
1917
  th: ["width", "valign"],
1918
1918
  table: ["width", "cellpadding", "cellspacing"]
1919
1919
  };
1920
- function D(p) {
1920
+ function P(p) {
1921
1921
  const t = {}, e = p.getAttribute && p.getAttribute("style");
1922
1922
  return e && e.split(";").forEach((i) => {
1923
1923
  const s = i.indexOf(":");
1924
1924
  s < 1 || (t[i.slice(0, s).trim().toLowerCase()] = i.slice(s + 1).trim());
1925
1925
  }), t;
1926
1926
  }
1927
- function ut(p) {
1927
+ function gt(p) {
1928
1928
  return p.replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi, "$1").replace(/<!--\[if !supportLists\]>([\s\S]*?)<!\[endif\]-->/gi, "$1").replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi, "$1").replace(/<!--\[if [\s\S]*?<!\[endif\]-->/gi, "").replace(/<!--[\s\S]*?-->/g, "").replace(/<(script|style|xml|title)[\s\S]*?<\/\1>/gi, "").replace(/<\/?(meta|link)[^>]*>/gi, "").replace(/<\?xml[\s\S]*?\?>/gi, "").replace(/<\/?(o|v|w|m|st1):[^>]*>/gi, "");
1929
1929
  }
1930
- function gt(p) {
1930
+ function ft(p) {
1931
1931
  return /^[0-9]+[\.\)،]/.test(p) ? { ordered: !0 } : /^[٠-٩۰-۹]+/.test(p) ? { ordered: !0, style: "arabic-indic" } : /^[ivxlc]{2,}[\.\)]/.test(p) ? { ordered: !0, style: "lower-roman" } : /^[IVXLC]{2,}[\.\)]/.test(p) ? { ordered: !0, style: "upper-roman" } : /^[a-z][\.\)]/.test(p) ? { ordered: !0, style: "lower-alpha" } : /^[A-Z][\.\)]/.test(p) ? { ordered: !0, style: "upper-alpha" } : /^[ء-ي][\.\)،-]/.test(p) ? { ordered: !0, style: "arabic-indic" } : { ordered: !1 };
1932
1932
  }
1933
- function ft(p) {
1933
+ function vt(p) {
1934
1934
  const t = (s) => {
1935
1935
  const l = (s.getAttribute("style") || "") + " " + (s.className || "");
1936
1936
  return /mso-list\s*:(?!\s*ignore)/i.test(l) || /MsoListParagraph/i.test(l);
@@ -1949,33 +1949,33 @@ function ft(p) {
1949
1949
  var x, C, M;
1950
1950
  const c = +(((x = (n.getAttribute("style") || "").match(/level(\d+)/i)) == null ? void 0 : x[1]) || 1), h = Array.from(n.querySelectorAll("span")).find(
1951
1951
  (w) => /mso-list\s*:\s*ignore/i.test(w.getAttribute("style") || "")
1952
- ), d = h ? ((C = h.textContent) == null ? void 0 : C.trim()) || "" : (((M = n.textContent) == null ? void 0 : M.trim().match(/^\S{1,4}/)) || [""])[0], { ordered: m, style: g } = gt(d);
1952
+ ), d = h ? ((C = h.textContent) == null ? void 0 : C.trim()) || "" : (((M = n.textContent) == null ? void 0 : M.trim().match(/^\S{1,4}/)) || [""])[0], { ordered: m, style: g } = ft(d);
1953
1953
  for (h && h.remove(); l.length && l[l.length - 1].level > c; ) l.pop();
1954
1954
  if (!l.length || l[l.length - 1].level < c) {
1955
1955
  const w = p.createElement(m ? "ol" : "ul");
1956
1956
  if (m && g && (w.style.listStyleType = g), l.length) {
1957
- const H = l[l.length - 1].list;
1958
- (H.lastElementChild || H).appendChild(w);
1957
+ const k = l[l.length - 1].list;
1958
+ (k.lastElementChild || k).appendChild(w);
1959
1959
  } else
1960
1960
  o.parentNode.insertBefore(w, o);
1961
1961
  l.push({ list: w, level: c });
1962
1962
  }
1963
- const u = p.createElement("li"), v = D(n), b = ["text-align", "direction", "unicode-bidi", "color", "font-size", "font-family", "background-color"].filter((w) => v[w]).map((w) => w + ":" + v[w]).join(";");
1963
+ const u = p.createElement("li"), v = P(n), b = ["text-align", "direction", "unicode-bidi", "color", "font-size", "font-family", "background-color"].filter((w) => v[w]).map((w) => w + ":" + v[w]).join(";");
1964
1964
  for (b && u.setAttribute("style", b), n.getAttribute("dir") && u.setAttribute("dir", n.getAttribute("dir")); n.firstChild; ) u.appendChild(n.firstChild);
1965
1965
  l[l.length - 1].list.appendChild(u), n.remove();
1966
1966
  });
1967
1967
  });
1968
1968
  }
1969
- function vt(p) {
1969
+ function bt(p) {
1970
1970
  p.querySelectorAll('b[id^="docs-internal-guid"]').forEach((t) => {
1971
1971
  for (; t.firstChild; ) t.parentNode.insertBefore(t.firstChild, t);
1972
1972
  t.remove();
1973
1973
  });
1974
1974
  }
1975
- function bt(p) {
1975
+ function yt(p) {
1976
1976
  p.querySelectorAll("table").forEach((t) => {
1977
1977
  const e = t;
1978
- D(e)["border-collapse"] || (e.style.borderCollapse = "collapse");
1978
+ P(e)["border-collapse"] || (e.style.borderCollapse = "collapse");
1979
1979
  }), p.querySelectorAll("[align]").forEach((t) => {
1980
1980
  const e = t, i = e.getAttribute("align").toLowerCase();
1981
1981
  e.tagName.toLowerCase() === "table" ? i === "center" ? (e.style.marginLeft = e.style.marginLeft || "auto", e.style.marginRight = e.style.marginRight || "auto") : i === "right" ? e.style.marginLeft = e.style.marginLeft || "auto" : i === "left" && (e.style.marginRight = e.style.marginRight || "auto") : ["left", "right", "center", "justify"].includes(i) && (e.style.textAlign = e.style.textAlign || i, Array.from(e.children).forEach((s) => {
@@ -1999,7 +1999,7 @@ function Z(p, t) {
1999
1999
  }
2000
2000
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2001
2001
  const i = e, s = i.tagName.toLowerCase();
2002
- if (!pt.has(s)) {
2002
+ if (!mt.has(s)) {
2003
2003
  if (s === "font") {
2004
2004
  const r = t.createElement("span");
2005
2005
  i.getAttribute("style") && r.setAttribute("style", i.getAttribute("style")), i.getAttribute("color") && (r.style.color = i.getAttribute("color")), i.getAttribute("face") && (r.style.fontFamily = i.getAttribute("face"));
@@ -2040,16 +2040,16 @@ function Z(p, t) {
2040
2040
  return;
2041
2041
  }
2042
2042
  }
2043
- const o = D(i), n = [];
2043
+ const o = P(i), n = [];
2044
2044
  for (const [r, c] of Object.entries(o))
2045
- mt.has(r) && (/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(c) || r === "font-weight" && /^(400|normal)$/i.test(c) || r === "font-style" && /^normal$/i.test(c) || r === "text-decoration" && /^none$/i.test(c) || n.push(r + ":" + c));
2045
+ ut.has(r) && (/expression|javascript|url\s*\(\s*['"]?\s*file:/i.test(c) || r === "font-weight" && /^(400|normal)$/i.test(c) || r === "font-style" && /^normal$/i.test(c) || r === "text-decoration" && /^none$/i.test(c) || n.push(r + ":" + c));
2046
2046
  if (n.length ? i.setAttribute("style", n.join(";")) : i.removeAttribute("style"), i.removeAttribute("class"), Z(i, t), s === "span" && !i.attributes.length) {
2047
2047
  for (; i.firstChild; ) i.parentNode.insertBefore(i.firstChild, i);
2048
2048
  i.remove();
2049
2049
  }
2050
2050
  });
2051
2051
  }
2052
- function yt(p) {
2052
+ function xt(p) {
2053
2053
  const t = [], e = /<style[^>]*>([\s\S]*?)<\/style>/gi;
2054
2054
  let i;
2055
2055
  for (; i = e.exec(p); ) {
@@ -2067,7 +2067,7 @@ function yt(p) {
2067
2067
  }
2068
2068
  return t;
2069
2069
  }
2070
- function xt(p, t) {
2070
+ function Ct(p, t) {
2071
2071
  if (!t.length) return;
2072
2072
  const e = /* @__PURE__ */ new Map();
2073
2073
  t.forEach(({ sel: i, decls: s }) => {
@@ -2084,7 +2084,7 @@ function xt(p, t) {
2084
2084
  });
2085
2085
  });
2086
2086
  }), e.forEach((i, s) => {
2087
- const l = D(s), o = s.hasAttribute("dir"), n = s.hasAttribute("align"), r = Object.entries(i).filter(([d]) => !(d in l || (d === "direction" || d === "unicode-bidi") && o || d === "text-align" && (n || o) || (d === "background" || d === "background-color") && s.hasAttribute("bgcolor")));
2087
+ const l = P(s), o = s.hasAttribute("dir"), n = s.hasAttribute("align"), r = Object.entries(i).filter(([d]) => !(d in l || (d === "direction" || d === "unicode-bidi") && o || d === "text-align" && (n || o) || (d === "background" || d === "background-color") && s.hasAttribute("bgcolor")));
2088
2088
  if (!r.length) return;
2089
2089
  const c = r.map(([d, m]) => d + ":" + m).join(";"), h = s.getAttribute("style");
2090
2090
  s.setAttribute("style", h ? c + ";" + h : c);
@@ -2093,15 +2093,15 @@ function xt(p, t) {
2093
2093
  function tt(p) {
2094
2094
  return p.replace(/[ﭐ-﷿ﹰ-ﻼ]+/g, (t) => t.normalize("NFKC"));
2095
2095
  }
2096
- function Ct(p) {
2096
+ function wt(p) {
2097
2097
  const t = p.createTreeWalker(p.body, NodeFilter.SHOW_TEXT, null);
2098
2098
  let e;
2099
2099
  for (; e = t.nextNode(); )
2100
2100
  /[ﭐ-﷿ﹰ-ﻼ]/.test(e.nodeValue || "") && (e.nodeValue = tt(e.nodeValue || ""));
2101
2101
  }
2102
- function wt(p, t = "ltr") {
2103
- const e = yt(p), i = new DOMParser().parseFromString(ut(p), "text/html");
2104
- xt(i, e), /class="?Mso|mso-|urn:schemas-microsoft-com/i.test(i.body.innerHTML) && ft(i), vt(i), bt(i), Z(i.body, i), Ct(i);
2102
+ function Tt(p, t = "ltr") {
2103
+ const e = xt(p), i = new DOMParser().parseFromString(gt(p), "text/html");
2104
+ Ct(i, e), /class="?Mso|mso-|urn:schemas-microsoft-com/i.test(i.body.innerHTML) && vt(i), bt(i), yt(i), Z(i.body, i), wt(i);
2105
2105
  const s = (l) => {
2106
2106
  var o;
2107
2107
  return l && l.tagName === "P" && !((o = l.textContent) != null && o.trim()) && !l.querySelector("img,table");
@@ -2110,11 +2110,11 @@ function wt(p, t = "ltr") {
2110
2110
  for (; s(i.body.lastElementChild); ) i.body.lastElementChild.remove();
2111
2111
  return i.body.innerHTML.trim();
2112
2112
  }
2113
- function Tt(p) {
2113
+ function Mt(p) {
2114
2114
  const t = tt(p).replace(/\r/g, ""), e = (i) => i.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
2115
2115
  return /\n/.test(t) ? t.split(/\n{2,}/).map((i) => `<p dir="auto">${e(i).replace(/\n/g, "<br>") || "<br>"}</p>`).join("") : e(t);
2116
2116
  }
2117
- function Mt(p) {
2117
+ function Et(p) {
2118
2118
  const t = new DataView(p), e = /* @__PURE__ */ new Map();
2119
2119
  let i = -1;
2120
2120
  for (let n = p.byteLength - 22; n >= Math.max(0, p.byteLength - 22 - 65535); n--)
@@ -2141,7 +2141,7 @@ async function Q(p, t) {
2141
2141
  const n = new Blob([o]).stream().pipeThrough(new DecompressionStream("deflate-raw"));
2142
2142
  return new Uint8Array(await new Response(n).arrayBuffer());
2143
2143
  }
2144
- const G = (p) => p.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), P = (p, t) => Array.from(p.children).filter((e) => e.localName === t), S = (p, ...t) => {
2144
+ const G = (p) => p.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;"), D = (p, t) => Array.from(p.children).filter((e) => e.localName === t), E = (p, ...t) => {
2145
2145
  let e = p;
2146
2146
  for (const i of t) {
2147
2147
  if (!e) return null;
@@ -2154,7 +2154,7 @@ const G = (p) => p.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&
2154
2154
  if (e.localName === t) return e.value;
2155
2155
  return "";
2156
2156
  }, B = (p, t) => {
2157
- const e = p ? S(p, t) : null;
2157
+ const e = p ? E(p, t) : null;
2158
2158
  if (!e) return !1;
2159
2159
  const i = T(e);
2160
2160
  return i !== "false" && i !== "0";
@@ -2183,13 +2183,13 @@ const G = (p) => p.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&
2183
2183
  bmp: "image/bmp",
2184
2184
  webp: "image/webp"
2185
2185
  };
2186
- function Et(p) {
2186
+ function Lt(p) {
2187
2187
  let t = "";
2188
2188
  for (let e = 0; e < p.length; e += 32768)
2189
2189
  t += String.fromCharCode(...p.subarray(e, e + 32768));
2190
2190
  return btoa(t);
2191
2191
  }
2192
- class Lt {
2192
+ class Ht {
2193
2193
  constructor(t, e, i) {
2194
2194
  this.rels = t, this.images = e, this.numFmt = i;
2195
2195
  }
@@ -2214,20 +2214,20 @@ class Lt {
2214
2214
  return s(0), e || "<p><br></p>";
2215
2215
  }
2216
2216
  paraList(t) {
2217
- const e = S(t, "pPr", "numPr");
2217
+ const e = E(t, "pPr", "numPr");
2218
2218
  if (!e) return null;
2219
- const i = T(S(e, "numId"));
2219
+ const i = T(E(e, "numId"));
2220
2220
  if (!i || i === "0") return null;
2221
- const s = parseInt(T(S(e, "ilvl")) || "0", 10) || 0;
2221
+ const s = parseInt(T(E(e, "ilvl")) || "0", 10) || 0;
2222
2222
  return { type: this.numFmt.get(i) || "ul", ilvl: Math.min(s, 8) };
2223
2223
  }
2224
2224
  convertPara(t) {
2225
- const e = S(t, "pPr"), i = T(S(t, "pPr", "pStyle"));
2225
+ const e = E(t, "pPr"), i = T(E(t, "pPr", "pStyle"));
2226
2226
  let s = "p";
2227
2227
  const l = /^Heading([1-6])$/i.exec(i);
2228
2228
  l ? s = "h" + l[1] : /^Title$/i.test(i) && (s = "h1");
2229
- const o = [], n = T(S(t, "pPr", "jc"));
2230
- n === "center" ? o.push("text-align:center") : n === "right" || n === "end" ? o.push("text-align:right") : (n === "both" || n === "distribute") && o.push("text-align:justify"), e && S(e, "bidi") && o.push("direction:rtl");
2229
+ const o = [], n = T(E(t, "pPr", "jc"));
2230
+ n === "center" ? o.push("text-align:center") : n === "right" || n === "end" ? o.push("text-align:right") : (n === "both" || n === "distribute") && o.push("text-align:justify"), e && E(e, "bidi") && o.push("direction:rtl");
2231
2231
  const r = this.runsOf(t), c = o.length ? ` style="${o.join(";")}"` : "";
2232
2232
  return `<${s}${c}>${r || "<br>"}</${s}>`;
2233
2233
  }
@@ -2245,20 +2245,20 @@ class Lt {
2245
2245
  return e;
2246
2246
  }
2247
2247
  convertRun(t) {
2248
- const e = S(t, "rPr");
2248
+ const e = E(t, "rPr");
2249
2249
  let i = "";
2250
2250
  for (const d of Array.from(t.children))
2251
2251
  d.localName === "t" ? i += G(d.textContent || "") : d.localName === "br" || d.localName === "cr" ? i += "<br>" : d.localName === "tab" ? i += "&emsp;" : (d.localName === "drawing" || d.localName === "pict" || d.localName === "object") && (i += this.convertImage(d));
2252
2252
  if (!i) return "";
2253
- const s = [], l = T(e ? S(e, "color") : null);
2253
+ const s = [], l = T(e ? E(e, "color") : null);
2254
2254
  l && l !== "auto" && s.push("color:#" + l);
2255
- const o = T(e ? S(e, "highlight") : null);
2255
+ const o = T(e ? E(e, "highlight") : null);
2256
2256
  o && Y[o] && s.push("background-color:" + Y[o]);
2257
- const n = parseFloat(T(e ? S(e, "sz") : null));
2257
+ const n = parseFloat(T(e ? E(e, "sz") : null));
2258
2258
  n && s.push("font-size:" + Math.round(n / 2 * (4 / 3)) + "px");
2259
- const r = e ? S(e, "rFonts") : null, c = T(r, "ascii") || T(r, "cs");
2260
- c && s.push(`font-family:'${c}'`), s.length && (i = `<span style="${s.join(";")}">${i}</span>`), B(e, "b") && (i = `<strong>${i}</strong>`), B(e, "i") && (i = `<em>${i}</em>`), B(e, "u") && T(S(e, "u")) !== "none" && (i = `<u>${i}</u>`), B(e, "strike") && (i = `<s>${i}</s>`);
2261
- const h = T(e ? S(e, "vertAlign") : null);
2259
+ const r = e ? E(e, "rFonts") : null, c = T(r, "ascii") || T(r, "cs");
2260
+ c && s.push(`font-family:'${c}'`), s.length && (i = `<span style="${s.join(";")}">${i}</span>`), B(e, "b") && (i = `<strong>${i}</strong>`), B(e, "i") && (i = `<em>${i}</em>`), B(e, "u") && T(E(e, "u")) !== "none" && (i = `<u>${i}</u>`), B(e, "strike") && (i = `<s>${i}</s>`);
2261
+ const h = T(e ? E(e, "vertAlign") : null);
2262
2262
  return h === "superscript" ? i = `<sup>${i}</sup>` : h === "subscript" && (i = `<sub>${i}</sub>`), i;
2263
2263
  }
2264
2264
  convertImage(t) {
@@ -2278,10 +2278,10 @@ class Lt {
2278
2278
  }
2279
2279
  convertTable(t) {
2280
2280
  let e = '<table style="border-collapse:collapse;width:100%"><tbody>';
2281
- for (const i of P(t, "tr")) {
2281
+ for (const i of D(t, "tr")) {
2282
2282
  e += "<tr>";
2283
- for (const s of P(i, "tc")) {
2284
- const l = parseInt(T(S(s, "tcPr", "gridSpan")) || "1", 10) || 1, o = l > 1 ? ` colspan="${l}"` : "";
2283
+ for (const s of D(i, "tc")) {
2284
+ const l = parseInt(T(E(s, "tcPr", "gridSpan")) || "1", 10) || 1, o = l > 1 ? ` colspan="${l}"` : "";
2285
2285
  let n = "";
2286
2286
  for (const r of Array.from(s.children))
2287
2287
  r.localName === "p" ? n += this.convertPara(r) : r.localName === "tbl" && (n += this.convertTable(r));
@@ -2293,7 +2293,7 @@ class Lt {
2293
2293
  }
2294
2294
  }
2295
2295
  async function kt(p) {
2296
- const t = p instanceof ArrayBuffer ? p : await p.arrayBuffer(), e = Mt(t), i = new TextDecoder(), s = async (u) => {
2296
+ const t = p instanceof ArrayBuffer ? p : await p.arrayBuffer(), e = Et(t), i = new TextDecoder(), s = async (u) => {
2297
2297
  const v = e.get(u);
2298
2298
  return v ? new DOMParser().parseFromString(i.decode(await Q(t, v)), "application/xml") : null;
2299
2299
  }, l = await s("word/document.xml"), o = l == null ? void 0 : l.getElementsByTagName("*");
@@ -2320,7 +2320,7 @@ async function kt(p) {
2320
2320
  const C = (b.split(".").pop() || "").toLowerCase(), M = St[C];
2321
2321
  if (M)
2322
2322
  try {
2323
- d.set(u, `data:${M};base64,${Et(await Q(t, x))}`);
2323
+ d.set(u, `data:${M};base64,${Lt(await Q(t, x))}`);
2324
2324
  } catch {
2325
2325
  }
2326
2326
  }
@@ -2329,18 +2329,18 @@ async function kt(p) {
2329
2329
  const u = /* @__PURE__ */ new Map(), v = Array.from(g.getElementsByTagName("*"));
2330
2330
  for (const b of v) {
2331
2331
  if (b.localName !== "abstractNum") continue;
2332
- const x = T(b, "abstractNumId"), C = P(b, "lvl").find((w) => T(w, "ilvl") === "0") || P(b, "lvl")[0], M = C ? T(S(C, "numFmt")) : "";
2332
+ const x = T(b, "abstractNumId"), C = D(b, "lvl").find((w) => T(w, "ilvl") === "0") || D(b, "lvl")[0], M = C ? T(E(C, "numFmt")) : "";
2333
2333
  u.set(x, M === "bullet" ? "ul" : "ol");
2334
2334
  }
2335
2335
  for (const b of v) {
2336
2336
  if (b.localName !== "num") continue;
2337
- const x = T(b, "numId"), C = T(S(b, "abstractNumId"));
2337
+ const x = T(b, "numId"), C = T(E(b, "abstractNumId"));
2338
2338
  m.set(x, u.get(C) || "ul");
2339
2339
  }
2340
2340
  }
2341
- return new Lt(r, d, m).convertBody(n);
2341
+ return new Ht(r, d, m).convertBody(n);
2342
2342
  }
2343
- const Ht = ["nw", "ne", "sw", "se"], O = ["img-left", "img-right", "img-top", "img-center"], F = {
2343
+ const At = ["nw", "ne", "sw", "se"], F = ["img-left", "img-right", "img-top", "img-center"], O = {
2344
2344
  "img-left": "tplimgleft",
2345
2345
  "img-right": "tplimgright",
2346
2346
  "img-top": "tplimgtop",
@@ -2350,42 +2350,62 @@ const Ht = ["nw", "ne", "sw", "se"], O = ["img-left", "img-right", "img-top", "i
2350
2350
  "img-right": a.tplright,
2351
2351
  "img-top": a.tpltop,
2352
2352
  "img-center": a.tplcenter
2353
- }, At = ".tox,.pop,.tblctx,.imgctx,.selctx,.dlg";
2354
- let E = null, I = null, $ = 0, K = !1;
2353
+ }, qt = ".tox,.pop,.tblctx,.imgctx,.selctx,.dlg";
2354
+ let S = null, A = null, $ = 0, K = !1;
2355
2355
  function N() {
2356
- clearTimeout($), I = null, E && E.classList.remove("show");
2356
+ clearTimeout($), A = null, S && S.classList.remove("show");
2357
2357
  }
2358
- function qt(p) {
2358
+ function Bt(p) {
2359
2359
  const t = p.dataset.tip;
2360
2360
  if (!t) return;
2361
- I = p, clearTimeout($);
2362
- const e = E && E.classList.contains("show") ? 60 : 350;
2361
+ A = p, clearTimeout($);
2362
+ const e = S && S.classList.contains("show") ? 60 : 350;
2363
2363
  $ = window.setTimeout(() => {
2364
- if (I !== p || !document.contains(p)) return;
2365
- E || (E = document.createElement("div"), E.className = "etip", document.body.appendChild(E)), E.textContent = t, E.classList.add("show");
2366
- const i = p.getBoundingClientRect(), s = E.offsetWidth, l = E.offsetHeight;
2364
+ if (A !== p || !document.contains(p)) return;
2365
+ S || (S = document.createElement("div"), S.className = "etip", document.body.appendChild(S)), S.textContent = t, S.classList.add("show");
2366
+ const i = p.getBoundingClientRect(), s = S.offsetWidth, l = S.offsetHeight;
2367
2367
  let o = i.left + i.width / 2 - s / 2;
2368
2368
  o = Math.max(6, Math.min(o, innerWidth - s - 6));
2369
2369
  let n = i.bottom + 7;
2370
- n + l > innerHeight - 6 && (n = i.top - l - 7), E.style.left = o + "px", E.style.top = n + "px";
2370
+ n + l > innerHeight - 6 && (n = i.top - l - 7), S.style.left = o + "px", S.style.top = n + "px";
2371
2371
  }, e);
2372
2372
  }
2373
- function Bt() {
2373
+ function Nt() {
2374
2374
  K || (K = !0, document.addEventListener("mouseover", (p) => {
2375
2375
  const t = p.target, e = t.closest ? t.closest("[title],[data-tip]") : null;
2376
- if (!e || !e.closest(At) || e.closest(".earea")) {
2377
- e !== I && N();
2376
+ if (!e || !e.closest(qt) || e.closest(".earea")) {
2377
+ e !== A && N();
2378
2378
  return;
2379
2379
  }
2380
2380
  const i = e.getAttribute("title");
2381
- i && (e.dataset.tip = i, e.removeAttribute("title"), e.getAttribute("aria-label") || e.setAttribute("aria-label", i)), e !== I && qt(e);
2381
+ i && (e.dataset.tip = i, e.removeAttribute("title"), e.getAttribute("aria-label") || e.setAttribute("aria-label", i)), e !== A && Bt(e);
2382
2382
  }), document.addEventListener("mouseout", (p) => {
2383
- I && !I.contains(p.relatedTarget) && N();
2383
+ A && !A.contains(p.relatedTarget) && N();
2384
2384
  }), document.addEventListener("mousedown", N, !0), addEventListener("scroll", N, !0));
2385
2385
  }
2386
- const A = class A {
2386
+ const Zt = /[\u0590-\u05FF\u0600-\u06FF\u0750-\u077F\u0780-\u07BF\u08A0-\u08FF\uFB1D-\uFB4F\uFB50-\uFDFF\uFE70-\uFEFF]/, Dt = new RegExp("\\p{L}", "u"), Pt = "p,div,li,td,th,blockquote,h1,h2,h3,h4,h5,h6,pre,figcaption";
2387
+ function Rt(p) {
2388
+ for (const t of p) {
2389
+ if (Zt.test(t)) return "rtl";
2390
+ if (Dt.test(t)) return "ltr";
2391
+ }
2392
+ return null;
2393
+ }
2394
+ function et(p) {
2395
+ let t = "";
2396
+ return p.childNodes.forEach((e) => {
2397
+ if (e.nodeType === Node.TEXT_NODE)
2398
+ t += e.nodeValue || "";
2399
+ else if (e.nodeType === Node.ELEMENT_NODE) {
2400
+ const i = e, s = (i.getAttribute("dir") || "").toLowerCase();
2401
+ if (s === "rtl" || s === "ltr") return;
2402
+ t += et(i);
2403
+ }
2404
+ }), t;
2405
+ }
2406
+ const I = class I {
2387
2407
  constructor(t) {
2388
- this.lang = "en", this.contentClass = "fable-content-" + A.instanceCounter++, this.contentStyleEl = null, this.savedRange = null, this.foreColor = "#000000", this.backColor = "#FACC15", this.openPop = null, this.openSubEl = null, this.popAnchor = null, this.dlgOvl = null, this.tblActive = null, this.tblCorner = null, this.tblColBars = [], this.tblCtx = null, this.tblCellMark = null, this.tblOpMark = null, this.tblOpMarkKind = null, this.imgActive = null, this.imgHandles = [], this.imgCtx = null, this.imgHideTimer = null, this.phActive = null, this.phCtx = null, this.phUploadTarget = null, this.vidActive = null, this.vidCtx = null, this.vidHideTimer = null, this.vphActive = null, this.vphCtx = null, this.vphUploadTarget = null, this.selCtx = null, this.tbrMore = null, this.tbrExpanded = !1, this.codeActive = null, this.codeCtx = null, this.tplActive = null, this.tplCtx = null, this.revisions = [], this.revTimer = null, this.draftTimer = null, this.draftStorageKey = "", this.listeners = [], this.isDestroyed = !1, this.options = {
2408
+ this.lang = "en", this.contentClass = "fable-content-" + I.instanceCounter++, this.contentStyleEl = null, this.savedRange = null, this.foreColor = "#000000", this.backColor = "#FACC15", this.openPop = null, this.openSubEl = null, this.popAnchor = null, this.dlgOvl = null, this.tblActive = null, this.tblCorner = null, this.tblColBars = [], this.tblCtx = null, this.tblCellMark = null, this.tblOpMark = null, this.tblOpMarkKind = null, this.imgActive = null, this.imgHandles = [], this.imgCtx = null, this.imgHideTimer = null, this.phActive = null, this.phCtx = null, this.phUploadTarget = null, this.vidActive = null, this.vidCtx = null, this.vidHideTimer = null, this.vphActive = null, this.vphCtx = null, this.vphUploadTarget = null, this.selCtx = null, this.tbrMore = null, this.tbrExpanded = !1, this.codeActive = null, this.codeCtx = null, this.tplActive = null, this.tplCtx = null, this.revisions = [], this.revTimer = null, this.draftTimer = null, this.draftStorageKey = "", this.listeners = [], this.isDestroyed = !1, this.options = {
2389
2409
  target: t.target,
2390
2410
  language: t.language || "en",
2391
2411
  height: t.height ?? 302,
@@ -2399,7 +2419,7 @@ const A = class A {
2399
2419
  statusbar: t.statusbar ?? !0,
2400
2420
  readonly: t.readonly ?? !1,
2401
2421
  draftKey: t.draftKey ?? (typeof location < "u" ? location.pathname : "default"),
2402
- fontFamilyFormats: t.fontFamilyFormats ?? lt,
2422
+ fontFamilyFormats: t.fontFamilyFormats ?? ot,
2403
2423
  imageFileTypes: t.imageFileTypes ?? ["image/jpeg", "image/jpg", "image/png", "image/gif", "image/bmp", "image/webp"],
2404
2424
  videoFileTypes: t.videoFileTypes ?? ["video/mp4", "video/webm", "video/ogg"]
2405
2425
  }, this.imageUploadHandler = t.imageUploadHandler, this.onImageUploadError = t.onImageUploadError, this.videoUploadHandler = t.videoUploadHandler, this.onVideoUploadError = t.onVideoUploadError, this.contentStyle = t.contentStyle, this.applyTheme(t), this.lang = this.options.language, this.draftStorageKey = "tmclone-draft:" + this.options.draftKey, this.initDOM(), this.bindEvents(), this.initUI(), this.recordRevision(), this.options.onReady(this);
@@ -2425,7 +2445,7 @@ const A = class A {
2425
2445
  </span>
2426
2446
  `, this.sbHelp = this.statusbar.querySelector(".mid"), this.sbWords = this.statusbar.querySelector(".words");
2427
2447
  const e = this.statusbar.querySelector(".grip");
2428
- this.bindGrip(e), this.shell.appendChild(this.menubar), this.shell.appendChild(this.toolbar), this.shell.appendChild(this.ed), this.shell.appendChild(this.statusbar), this.contentStyle && (this.contentStyleEl = document.createElement("style"), this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle), this.shell.appendChild(this.contentStyleEl)), t.appendChild(this.shell), Bt(), this.options.statusbar || (this.statusbar.style.display = "none"), this.imgInput = document.createElement("input"), this.imgInput.type = "file", this.imgInput.accept = this.options.imageFileTypes.join(","), this.imgInput.style.display = "none", t.appendChild(this.imgInput), this.vidInput = document.createElement("input"), this.vidInput.type = "file", this.vidInput.accept = this.options.videoFileTypes.join(","), this.vidInput.style.display = "none", t.appendChild(this.vidInput), this.docInput = document.createElement("input"), this.docInput.type = "file", this.docInput.accept = ".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document", this.docInput.style.display = "none", t.appendChild(this.docInput);
2448
+ this.bindGrip(e), this.shell.appendChild(this.menubar), this.shell.appendChild(this.toolbar), this.shell.appendChild(this.ed), this.shell.appendChild(this.statusbar), this.contentStyle && (this.contentStyleEl = document.createElement("style"), this.contentStyleEl.textContent = this.scopeContentStyle(this.contentStyle), this.shell.appendChild(this.contentStyleEl)), t.appendChild(this.shell), Nt(), this.options.statusbar || (this.statusbar.style.display = "none"), this.imgInput = document.createElement("input"), this.imgInput.type = "file", this.imgInput.accept = this.options.imageFileTypes.join(","), this.imgInput.style.display = "none", t.appendChild(this.imgInput), this.vidInput = document.createElement("input"), this.vidInput.type = "file", this.vidInput.accept = this.options.videoFileTypes.join(","), this.vidInput.style.display = "none", t.appendChild(this.vidInput), this.docInput = document.createElement("input"), this.docInput.type = "file", this.docInput.accept = ".docx,application/vnd.openxmlformats-officedocument.wordprocessingml.document", this.docInput.style.display = "none", t.appendChild(this.docInput);
2429
2449
  }
2430
2450
  /** Theme options land as CSS variables on the document root rather than the editor
2431
2451
  * shell, because dialogs, popups and floating context toolbars are appended to
@@ -2577,6 +2597,45 @@ const A = class A {
2577
2597
  getContent() {
2578
2598
  return this.ed.innerHTML;
2579
2599
  }
2600
+ /** Same HTML as getContent(), wrapped so its RTL/LTR direction survives being
2601
+ * dropped into a fixed-alignment host (e.g. an email template's
2602
+ * `<td align="left">`), which otherwise forces left alignment onto any
2603
+ * descendant that has no `text-align` of its own — even one with its own
2604
+ * dir="rtl". Elements that already carry their own dir (preserved as-is by
2605
+ * the paste engine) each get their own matching text-align only if they
2606
+ * don't already have one. Blocks with no reliable explicit dir (missing, or
2607
+ * dir="auto" from plain-text paste) get their direction from a first-strong-
2608
+ * character scan of their own text instead of silently inheriting the
2609
+ * editor's configured UI language — mixed-direction content and any
2610
+ * alignment the user explicitly set are left untouched either way. Only
2611
+ * content with no strongly-directional character anywhere falls back to the
2612
+ * editor's current direction. */
2613
+ getContentForEmail() {
2614
+ const t = (o, n) => {
2615
+ const r = (o.getAttribute("style") || "").trim();
2616
+ o.setAttribute("style", r ? r.replace(/;?$/, "; ") + n : n);
2617
+ }, e = document.createElement("div");
2618
+ e.innerHTML = this.ed.innerHTML;
2619
+ let i = null;
2620
+ e.querySelectorAll("[dir]").forEach((o) => {
2621
+ const n = (o.getAttribute("dir") || "").toLowerCase();
2622
+ if (n !== "rtl" && n !== "ltr") return;
2623
+ const r = n;
2624
+ i || (i = r), /text-align\s*:/i.test(o.getAttribute("style") || "") || t(o, `text-align:${r === "rtl" ? "right" : "left"}`);
2625
+ }), e.querySelectorAll(Pt).forEach((o) => {
2626
+ const n = (o.getAttribute("dir") || "").toLowerCase();
2627
+ if (n === "rtl" || n === "ltr") return;
2628
+ const r = Rt(et(o));
2629
+ if (!r) return;
2630
+ i || (i = r), o.setAttribute("dir", r);
2631
+ const c = /text-align\s*:/i.test(o.getAttribute("style") || "");
2632
+ t(o, c ? `direction:${r}` : `direction:${r};text-align:${r === "rtl" ? "right" : "left"}`);
2633
+ });
2634
+ const s = i || this.ed.getAttribute("dir") || this.dir();
2635
+ return e.querySelectorAll("table:not([dir])").forEach((o) => {
2636
+ o.setAttribute("dir", s), /direction\s*:/i.test(o.getAttribute("style") || "") || t(o, `direction:${s}`);
2637
+ }), `<div dir="${s}" style="direction:${s};text-align:${s === "rtl" ? "right" : "left"}">${e.innerHTML}</div>`;
2638
+ }
2580
2639
  setContent(t) {
2581
2640
  this.ed.innerHTML = t || "<p><br></p>", this.refreshState(), this.clearTableHandles(), this.clearImageHandles(), this.clearImgPlaceholderSel(), this.clearTplSel(), this.clearVphPlaceholderSel(), this.clearVidHandles(), this.clearCodeSel(), this.clearSelToolbar(), this.onChange();
2582
2641
  }
@@ -2802,7 +2861,7 @@ const A = class A {
2802
2861
  return l.type = "button", l.className = "cchip", l.title = s, l.addEventListener("mousedown", (o) => {
2803
2862
  o.preventDefault(), this.saveSel();
2804
2863
  }), l;
2805
- }, e = at.map((s) => {
2864
+ }, e = ct.map((s) => {
2806
2865
  const l = t(this.t("forecolor"));
2807
2866
  return l.style.background = s, l.addEventListener("click", () => this.applyColor("fore", s)), l;
2808
2867
  }), i = t(this.t("forecolor"));
@@ -2862,7 +2921,7 @@ const A = class A {
2862
2921
  * table cell-background menu all show the identical popup. */
2863
2922
  buildPaletteInto(t, e, i) {
2864
2923
  const s = document.createElement("div");
2865
- s.className = "cpal", ct.forEach((d) => {
2924
+ s.className = "cpal", ht.forEach((d) => {
2866
2925
  const m = document.createElement("button");
2867
2926
  m.type = "button", m.style.background = d, m.title = d, m.addEventListener("click", () => {
2868
2927
  this.closePop(), i(d);
@@ -2911,7 +2970,7 @@ const A = class A {
2911
2970
  this.popup(t, (e) => this.menuItems(e, this.fontItems()));
2912
2971
  }
2913
2972
  sizeItems() {
2914
- return ot.map((t) => ({
2973
+ return nt.map((t) => ({
2915
2974
  label: t,
2916
2975
  on: this.currentSize() === t,
2917
2976
  action: () => this.applyFontSize(t)
@@ -2964,7 +3023,7 @@ const A = class A {
2964
3023
  this.saveSel(), this.refreshState(), this.onChange();
2965
3024
  }
2966
3025
  stepFontSize(t) {
2967
- const e = parseInt(this.currentSize(), 10) || 14, i = Math.min(rt, Math.max(nt, e + t));
3026
+ const e = parseInt(this.currentSize(), 10) || 14, i = Math.min(at, Math.max(rt, e + t));
2968
3027
  i !== e && this.applyFontSize(i + "px");
2969
3028
  }
2970
3029
  /* ------------------------------------------------ case / spacing / link */
@@ -3016,7 +3075,7 @@ const A = class A {
3016
3075
  ];
3017
3076
  }
3018
3077
  lineHeightMenu(t) {
3019
- this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("lineHeight", _)));
3078
+ this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("lineHeight", z)));
3020
3079
  }
3021
3080
  wordSpacingMenu(t) {
3022
3081
  this.popup(t, (e) => this.menuItems(e, this.blockStyleItems("wordSpacing", U)));
@@ -3205,7 +3264,7 @@ const A = class A {
3205
3264
  }
3206
3265
  buildToolbar() {
3207
3266
  this.toolbar.innerHTML = "";
3208
- const t = this.options.toolbar === !0 ? it : this.options.toolbar, e = this.buildToolbarRegistry();
3267
+ const t = this.options.toolbar === !0 ? st : this.options.toolbar, e = this.buildToolbarRegistry();
3209
3268
  this.parseToolbarString(t).forEach((i) => {
3210
3269
  const s = [];
3211
3270
  i.forEach((l) => {
@@ -3232,7 +3291,7 @@ const A = class A {
3232
3291
  t.classList.add("tbr-measure");
3233
3292
  const e = t.scrollWidth > t.clientWidth + 1;
3234
3293
  t.classList.remove("tbr-measure");
3235
- const i = this.shell.offsetWidth < A.TBR_COLLAPSE_MAX;
3294
+ const i = this.shell.offsetWidth < I.TBR_COLLAPSE_MAX;
3236
3295
  if (!e || !i) {
3237
3296
  this.tbrExpanded = !1, t.classList.remove("collapsible", "expanded"), this.tbrMore.classList.remove("on");
3238
3297
  return;
@@ -3315,7 +3374,7 @@ const A = class A {
3315
3374
  { label: this.t("fontsize"), subBuild: (s) => this.menuItems(s, this.sizeItems()) },
3316
3375
  { label: this.t("blocks"), subBuild: (s) => this.menuItems(s, this.blockItems()) },
3317
3376
  { label: this.t("align"), subBuild: (s) => this.menuItems(s, this.alignItems()) },
3318
- { label: this.t("lineheight"), icon: a.lineheight, subBuild: (s) => this.menuItems(s, this.blockStyleItems("lineHeight", _)) },
3377
+ { label: this.t("lineheight"), icon: a.lineheight, subBuild: (s) => this.menuItems(s, this.blockStyleItems("lineHeight", z)) },
3319
3378
  { label: this.t("wordspacing"), icon: a.wordspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("wordSpacing", U)) },
3320
3379
  { label: this.t("letterspacing"), icon: a.letterspacing, subBuild: (s) => this.menuItems(s, this.blockStyleItems("letterSpacing", V)) },
3321
3380
  "|",
@@ -3387,7 +3446,7 @@ const A = class A {
3387
3446
  { label: this.t("deltable"), icon: a.trash, action: () => this.tableOp("deltable") }
3388
3447
  ],
3389
3448
  help: [this.mItem("helpttl", a.helpic, () => this.helpDlg(), "Alt+0")]
3390
- }, e = this.options.menubar === !0 ? st : this.options.menubar, i = /* @__PURE__ */ new Set();
3449
+ }, e = this.options.menubar === !0 ? lt : this.options.menubar, i = /* @__PURE__ */ new Set();
3391
3450
  e.split(/\s+/).filter(Boolean).forEach((s) => {
3392
3451
  if (i.has(s)) return;
3393
3452
  if (i.add(s), !t[s]) {
@@ -3495,20 +3554,20 @@ const A = class A {
3495
3554
  this.dialog(
3496
3555
  this.t("tablepropsttl"),
3497
3556
  (C) => {
3498
- const M = (w, H) => {
3557
+ const M = (w, k) => {
3499
3558
  const L = document.createElement("div");
3500
3559
  L.style.cssText = n;
3501
- const k = document.createElement("span");
3502
- k.style.cssText = r, k.textContent = this.t(w), L.append(k, H), C.appendChild(L);
3560
+ const H = document.createElement("span");
3561
+ H.style.cssText = r, H.textContent = this.t(w), L.append(H, k), C.appendChild(L);
3503
3562
  };
3504
3563
  e = document.createElement("input"), e.type = "text", e.style.cssText = c, e.placeholder = "e.g. 600px or 100%", e.value = d, M("tblwidth", e), i = document.createElement("input"), i.type = "number", i.min = "0", i.style.cssText = c, i.value = String(m), M("tblcellpadding", i), s = document.createElement("input"), s.type = "number", s.min = "0", s.style.cssText = c, s.value = String(g), M("tblcellspacing", s), l = document.createElement("input"), l.type = "number", l.min = "0", l.style.cssText = c, l.value = String(u), M("tblborder", l), o = document.createElement("select"), o.style.cssText = c, [
3505
3564
  ["", "alignnone"],
3506
3565
  ["left", "alignleft"],
3507
3566
  ["center", "aligncenter"],
3508
3567
  ["right", "alignright"]
3509
- ].forEach(([w, H]) => {
3568
+ ].forEach(([w, k]) => {
3510
3569
  const L = document.createElement("option");
3511
- L.value = w, L.textContent = this.t(H), w === x && (L.selected = !0), o.appendChild(L);
3570
+ L.value = w, L.textContent = this.t(k), w === x && (L.selected = !0), o.appendChild(L);
3512
3571
  }), M("tblalign", o);
3513
3572
  },
3514
3573
  [
@@ -3761,10 +3820,10 @@ const A = class A {
3761
3820
  });
3762
3821
  }
3763
3822
  charMap() {
3764
- this.glyphPickerDlg(this.t("charmap").replace("…", ""), ht, !1);
3823
+ this.glyphPickerDlg(this.t("charmap").replace("…", ""), dt, !1);
3765
3824
  }
3766
3825
  emojiMap() {
3767
- this.glyphPickerDlg(this.t("emoji").replace("…", ""), dt, !0);
3826
+ this.glyphPickerDlg(this.t("emoji").replace("…", ""), pt, !0);
3768
3827
  }
3769
3828
  printDoc() {
3770
3829
  const t = window.open("", "_blank");
@@ -4100,17 +4159,17 @@ const A = class A {
4100
4159
  const w = (L = C.files) == null ? void 0 : L[0];
4101
4160
  if (!w) return;
4102
4161
  x.disabled = !0, x.textContent = this.t("uploading");
4103
- const H = (k) => {
4104
- t.value = k, x.disabled = !1, x.textContent = this.t("uploadvideo");
4162
+ const k = (H) => {
4163
+ t.value = H, x.disabled = !1, x.textContent = this.t("uploadvideo");
4105
4164
  };
4106
4165
  if (this.videoUploadHandler)
4107
- this.videoUploadHandler(w).then(H).catch((k) => {
4108
- var z;
4109
- x.disabled = !1, x.textContent = this.t("uploadfailed"), (z = this.onVideoUploadError) == null || z.call(this, k, w);
4166
+ this.videoUploadHandler(w).then(k).catch((H) => {
4167
+ var _;
4168
+ x.disabled = !1, x.textContent = this.t("uploadfailed"), (_ = this.onVideoUploadError) == null || _.call(this, H, w);
4110
4169
  });
4111
4170
  else {
4112
- const k = new FileReader();
4113
- k.onload = () => H(k.result), k.readAsDataURL(w);
4171
+ const H = new FileReader();
4172
+ H.onload = () => k(H.result), H.readAsDataURL(w);
4114
4173
  }
4115
4174
  }), b.append(t, x, C), t.style.flex = "1", v.appendChild(n("vidsource", b));
4116
4175
  const M = document.createElement("div");
@@ -4334,9 +4393,9 @@ const A = class A {
4334
4393
  }
4335
4394
  buildTemplatePickInto(t, e) {
4336
4395
  const i = document.createElement("div");
4337
- i.className = "tplpick", O.forEach((s) => {
4396
+ i.className = "tplpick", F.forEach((s) => {
4338
4397
  const l = document.createElement("button");
4339
- l.type = "button", l.className = "tpltile", l.title = this.t(F[s]), l.innerHTML = this.tplPreviewHTML(s) + `<span class="tpllbl">${this.t(F[s])}</span>`, l.addEventListener("click", () => {
4398
+ l.type = "button", l.className = "tpltile", l.title = this.t(O[s]), l.innerHTML = this.tplPreviewHTML(s) + `<span class="tpllbl">${this.t(O[s])}</span>`, l.addEventListener("click", () => {
4340
4399
  this.closePop(), this.insertTemplate(s), e == null || e();
4341
4400
  }), i.appendChild(l);
4342
4401
  }), t.appendChild(i);
@@ -4355,15 +4414,15 @@ const A = class A {
4355
4414
  }
4356
4415
  renderTplCtxButtons() {
4357
4416
  const t = this.tplCtx, e = this.tplActive;
4358
- !t || !e || (t.innerHTML = "", O.forEach((i) => {
4359
- const s = this.ctxBtn(It[i], this.t(F[i]), () => this.setTplLayout(i));
4417
+ !t || !e || (t.innerHTML = "", F.forEach((i) => {
4418
+ const s = this.ctxBtn(It[i], this.t(O[i]), () => this.setTplLayout(i));
4360
4419
  s.classList.toggle("on", e.classList.contains("tpl-" + i)), t.appendChild(s);
4361
4420
  }), t.append(this.ctxSep(), this.ctxBtn(a.trash, this.t("deltemplate"), () => this.removeTemplate())), this.positionTplCtx());
4362
4421
  }
4363
4422
  setTplLayout(t) {
4364
4423
  const e = this.tplActive;
4365
4424
  if (!e) return;
4366
- O.forEach((l) => e.classList.remove("tpl-" + l)), e.classList.add("tpl-" + t);
4425
+ F.forEach((l) => e.classList.remove("tpl-" + l)), e.classList.add("tpl-" + t);
4367
4426
  const i = e.querySelector(":scope > .tpl-media"), s = e.querySelector(":scope > .tpl-text");
4368
4427
  i && s && (t === "img-center" ? e.appendChild(i) : e.insertBefore(i, s)), this.renderTplCtxButtons(), this.positionImgPhCtx(), this.positionImageHandles(), this.onChange();
4369
4428
  }
@@ -4539,7 +4598,7 @@ const A = class A {
4539
4598
  this.cancelImgHide(), this.imgHandles.forEach((i) => i.remove()), this.imgHandles = [], (t = this.imgCtx) == null || t.remove(), this.imgCtx = null, (e = this.imgActive) == null || e.classList.remove("img-selected"), this.imgActive = null;
4540
4599
  }
4541
4600
  selectImage(t) {
4542
- this.imgActive !== t && (this.clearImageHandles(), this.imgActive = t, t.classList.add("img-selected"), this.imgHandles = Ht.map((e) => {
4601
+ this.imgActive !== t && (this.clearImageHandles(), this.imgActive = t, t.classList.add("img-selected"), this.imgHandles = At.map((e) => {
4543
4602
  const i = document.createElement("div");
4544
4603
  return i.className = "img-handle img-handle-" + e, i.dataset.corner = e, i.addEventListener("mousedown", (s) => this.startImageResizeDrag(s, e)), i.addEventListener("mouseenter", () => this.cancelImgHide()), i.addEventListener("mouseleave", () => this.scheduleImgHide()), document.body.appendChild(i), i;
4545
4604
  }), this.imgCtx = this.buildImageCtxToolbar(t), this.positionImageHandles());
@@ -4792,26 +4851,26 @@ const A = class A {
4792
4851
  return;
4793
4852
  }
4794
4853
  }
4795
- i ? document.execCommand("insertHTML", !1, wt(i, this.dir())) : document.execCommand("insertHTML", !1, Tt(e.getData("text/plain"))), this.onChange();
4854
+ i ? document.execCommand("insertHTML", !1, Tt(i, this.dir())) : document.execCommand("insertHTML", !1, Mt(e.getData("text/plain"))), this.onChange();
4796
4855
  }
4797
4856
  /* ---------------------------------------------------------- init */
4798
4857
  initUI() {
4799
4858
  this.closePop(), this.closeDlg(), this.clearTableHandles(), this.clearImgPlaceholderSel(), this.clearVphPlaceholderSel(), this.clearVidHandles(), this.clearCodeSel(), this.shell.dir = this.dir(), this.ed.dir = this.dir(), this.options.menubar ? this.buildMenubar() : this.menubar.style.display = "none", this.options.toolbar ? this.buildToolbar() : this.toolbar.style.display = "none", this.sbHelp.textContent = this.t("statushelp"), this.refreshState();
4800
4859
  }
4801
4860
  };
4802
- A.instanceCounter = 0, A.TBR_COLLAPSE_MAX = 992;
4803
- let J = A;
4861
+ I.instanceCounter = 0, I.TBR_COLLAPSE_MAX = 992;
4862
+ let J = I;
4804
4863
  export {
4805
4864
  j as BLOCKS,
4806
- Nt as CHARS,
4807
- ct as COLORS,
4808
- lt as FONTS,
4865
+ Ft as CHARS,
4866
+ ht as COLORS,
4867
+ ot as FONTS,
4809
4868
  J as FableEditor,
4810
- et as I18N,
4869
+ it as I18N,
4811
4870
  a as IC,
4812
- ot as SIZES,
4813
- Zt as TXT,
4814
- wt as cleanPastedHTML,
4871
+ nt as SIZES,
4872
+ Ot as TXT,
4873
+ Tt as cleanPastedHTML,
4815
4874
  R as getStrings,
4816
- Tt as normalizeTextPaste
4875
+ Mt as normalizeTextPaste
4817
4876
  };