@aeriz/wysiwyg 1.0.2 → 1.0.4

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 (131) hide show
  1. package/README.md +634 -96
  2. package/angular/README.md +112 -0
  3. package/angular/aeriz-editor.directive.ts +243 -0
  4. package/angular/aeriz-wysiwyg.module.ts +14 -0
  5. package/angular/index.ts +5 -0
  6. package/dist/adapters/jquery.cjs +1 -0
  7. package/dist/adapters/jquery.js +91 -0
  8. package/dist/adapters/react.cjs +1 -0
  9. package/dist/adapters/react.js +66 -0
  10. package/dist/adapters/shared.cjs +1 -0
  11. package/dist/adapters/shared.js +87 -0
  12. package/dist/adapters/svelte.cjs +1 -0
  13. package/dist/adapters/svelte.js +29 -0
  14. package/dist/adapters/vue.cjs +1 -0
  15. package/dist/adapters/vue.js +110 -0
  16. package/dist/adapters/vue2.cjs +1 -0
  17. package/dist/adapters/vue2.js +117 -0
  18. package/dist/adapters/wc.cjs +1 -0
  19. package/dist/adapters/wc.js +207 -0
  20. package/dist/aeriz-wysiwyg-adapter.js +169 -0
  21. package/dist/aeriz-wysiwyg-adapter.min.js +1 -0
  22. package/dist/aeriz-wysiwyg-jquery.js +275 -0
  23. package/dist/aeriz-wysiwyg-jquery.min.js +1 -0
  24. package/dist/aeriz-wysiwyg-wc.js +401 -0
  25. package/dist/aeriz-wysiwyg-wc.min.js +1 -0
  26. package/dist/aeriz-wysiwyg.cjs +8759 -0
  27. package/dist/aeriz-wysiwyg.css +587 -163
  28. package/dist/aeriz-wysiwyg.esm.js +4249 -1381
  29. package/dist/aeriz-wysiwyg.esm.min.js +4456 -1995
  30. package/dist/aeriz-wysiwyg.js +4249 -1381
  31. package/dist/aeriz-wysiwyg.min.cjs +56 -0
  32. package/dist/aeriz-wysiwyg.min.css +1 -1
  33. package/dist/aeriz-wysiwyg.min.js +54 -21
  34. package/dist/server.cjs +34 -0
  35. package/dist/server.js +798 -0
  36. package/dist-types/adapters/jquery.d.ts +34 -0
  37. package/dist-types/adapters/jquery.d.ts.map +1 -0
  38. package/dist-types/adapters/react.d.ts +28 -0
  39. package/dist-types/adapters/react.d.ts.map +1 -0
  40. package/dist-types/adapters/shared.d.ts +83 -0
  41. package/dist-types/adapters/shared.d.ts.map +1 -0
  42. package/dist-types/adapters/svelte.d.ts +38 -0
  43. package/dist-types/adapters/svelte.d.ts.map +1 -0
  44. package/dist-types/adapters/vue.d.ts +189 -0
  45. package/dist-types/adapters/vue.d.ts.map +1 -0
  46. package/dist-types/adapters/vue2.d.ts +175 -0
  47. package/dist-types/adapters/vue2.d.ts.map +1 -0
  48. package/dist-types/adapters/wc.d.ts +96 -0
  49. package/dist-types/adapters/wc.d.ts.map +1 -0
  50. package/dist-types/cjs/adapters/jquery.d.cts +34 -0
  51. package/dist-types/cjs/adapters/react.d.cts +28 -0
  52. package/dist-types/cjs/adapters/shared.d.cts +83 -0
  53. package/dist-types/cjs/adapters/svelte.d.cts +38 -0
  54. package/dist-types/cjs/adapters/vue.d.cts +189 -0
  55. package/dist-types/cjs/adapters/vue2.d.cts +175 -0
  56. package/dist-types/cjs/adapters/wc.d.cts +96 -0
  57. package/dist-types/cjs/core/AerizEditor.d.cts +530 -0
  58. package/dist-types/cjs/core/AerizViewer.d.cts +61 -0
  59. package/dist-types/cjs/core/block-meta.d.cts +98 -0
  60. package/dist-types/cjs/core/block-policy.d.cts +43 -0
  61. package/dist-types/cjs/core/blocks.d.cts +411 -0
  62. package/dist-types/cjs/core/fonts.d.cts +60 -0
  63. package/dist-types/cjs/core/highlight.d.cts +44 -0
  64. package/dist-types/cjs/core/history.d.cts +86 -0
  65. package/dist-types/cjs/core/html-mini.d.cts +65 -0
  66. package/dist-types/cjs/core/i18n.d.cts +221 -0
  67. package/dist-types/cjs/core/import-html.d.cts +40 -0
  68. package/dist-types/cjs/core/import-markdown.d.cts +33 -0
  69. package/dist-types/cjs/core/input-rules.d.cts +46 -0
  70. package/dist-types/cjs/core/markdown-export.d.cts +30 -0
  71. package/dist-types/cjs/core/plain-text.d.cts +17 -0
  72. package/dist-types/cjs/core/render-string.d.cts +68 -0
  73. package/dist-types/cjs/core/selection.d.cts +46 -0
  74. package/dist-types/cjs/core/snapshot.d.cts +51 -0
  75. package/dist-types/cjs/core/table-ops.d.cts +30 -0
  76. package/dist-types/cjs/index.d.cts +22 -0
  77. package/dist-types/cjs/server/index.d.cts +37 -0
  78. package/dist-types/cjs/types/index.d.cts +61 -0
  79. package/dist-types/cjs/ui/Toolbar.d.cts +21 -0
  80. package/dist-types/cjs/ui/dialogs.d.cts +74 -0
  81. package/dist-types/cjs/ui/icons.d.cts +2 -0
  82. package/dist-types/cjs/ui/popovers.d.cts +70 -0
  83. package/dist-types/core/AerizEditor.d.ts +210 -17
  84. package/dist-types/core/AerizEditor.d.ts.map +1 -1
  85. package/dist-types/core/AerizViewer.d.ts +16 -4
  86. package/dist-types/core/AerizViewer.d.ts.map +1 -1
  87. package/dist-types/core/block-meta.d.ts +98 -0
  88. package/dist-types/core/block-meta.d.ts.map +1 -0
  89. package/dist-types/core/block-policy.d.ts +43 -0
  90. package/dist-types/core/block-policy.d.ts.map +1 -0
  91. package/dist-types/core/blocks.d.ts +109 -11
  92. package/dist-types/core/blocks.d.ts.map +1 -1
  93. package/dist-types/core/fonts.d.ts +11 -0
  94. package/dist-types/core/fonts.d.ts.map +1 -1
  95. package/dist-types/core/history.d.ts +86 -0
  96. package/dist-types/core/history.d.ts.map +1 -0
  97. package/dist-types/core/html-mini.d.ts +65 -0
  98. package/dist-types/core/html-mini.d.ts.map +1 -0
  99. package/dist-types/core/i18n.d.ts +12 -0
  100. package/dist-types/core/i18n.d.ts.map +1 -1
  101. package/dist-types/core/import-html.d.ts +1 -0
  102. package/dist-types/core/import-html.d.ts.map +1 -1
  103. package/dist-types/core/import-markdown.d.ts +0 -4
  104. package/dist-types/core/import-markdown.d.ts.map +1 -1
  105. package/dist-types/core/input-rules.d.ts +46 -0
  106. package/dist-types/core/input-rules.d.ts.map +1 -0
  107. package/dist-types/core/markdown-export.d.ts +30 -0
  108. package/dist-types/core/markdown-export.d.ts.map +1 -0
  109. package/dist-types/core/plain-text.d.ts +17 -0
  110. package/dist-types/core/plain-text.d.ts.map +1 -0
  111. package/dist-types/core/render-string.d.ts +68 -0
  112. package/dist-types/core/render-string.d.ts.map +1 -0
  113. package/dist-types/core/selection.d.ts +46 -0
  114. package/dist-types/core/selection.d.ts.map +1 -0
  115. package/dist-types/core/snapshot.d.ts +51 -0
  116. package/dist-types/core/snapshot.d.ts.map +1 -0
  117. package/dist-types/core/table-ops.d.ts +30 -0
  118. package/dist-types/core/table-ops.d.ts.map +1 -0
  119. package/dist-types/index.d.ts +21 -10
  120. package/dist-types/index.d.ts.map +1 -1
  121. package/dist-types/server/index.d.ts +37 -0
  122. package/dist-types/server/index.d.ts.map +1 -0
  123. package/dist-types/types/index.d.ts +21 -0
  124. package/dist-types/types/index.d.ts.map +1 -1
  125. package/dist-types/ui/Toolbar.d.ts +1 -1
  126. package/dist-types/ui/Toolbar.d.ts.map +1 -1
  127. package/dist-types/ui/dialogs.d.ts.map +1 -1
  128. package/dist-types/ui/icons.d.ts.map +1 -1
  129. package/dist-types/ui/popovers.d.ts +1 -1
  130. package/dist-types/ui/popovers.d.ts.map +1 -1
  131. package/package.json +213 -58
package/dist/server.js ADDED
@@ -0,0 +1,798 @@
1
+ function Z(e) {
2
+ return e < 1024 ? `${e} B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)} KB` : e < 1024 * 1024 * 1024 ? `${(e / 1024 / 1024).toFixed(1)} MB` : `${(e / 1024 / 1024 / 1024).toFixed(1)} GB`;
3
+ }
4
+ function X(e, t) {
5
+ if (e) {
6
+ const n = e.lastIndexOf(".");
7
+ if (n > 0 && n < e.length - 1)
8
+ return e.slice(n + 1).toUpperCase();
9
+ }
10
+ return t ? (t.split("/").pop() ?? "").toUpperCase() : "";
11
+ }
12
+ function U(e) {
13
+ try {
14
+ return new URL(e).hostname;
15
+ } catch {
16
+ return "";
17
+ }
18
+ }
19
+ function J(e) {
20
+ const t = U(e);
21
+ return t ? `https://www.google.com/s2/favicons?domain=${encodeURIComponent(t)}&sz=64` : "";
22
+ }
23
+ const Q = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z"/><path d="M14 3v6h6"/></svg>', ee = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>', te = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", N = "https://www.youtube-nocookie.com/embed/", ne = "파일", re = "data-block-id", ie = /[​-‍]/g, oe = [
24
+ "id",
25
+ "class",
26
+ "dir",
27
+ "lang",
28
+ "title"
29
+ ], ce = /* @__PURE__ */ new Set([
30
+ "div",
31
+ "section",
32
+ "article",
33
+ "aside",
34
+ "header",
35
+ "footer",
36
+ "main",
37
+ "nav",
38
+ "details",
39
+ "summary",
40
+ "figure",
41
+ "figcaption",
42
+ "address",
43
+ "fieldset",
44
+ "dl",
45
+ "dt",
46
+ "dd",
47
+ "small",
48
+ "span"
49
+ ]);
50
+ function se(e) {
51
+ if (!e) return "div";
52
+ const t = e.toLowerCase();
53
+ return ce.has(t) ? t : "div";
54
+ }
55
+ function ae(...e) {
56
+ const t = /* @__PURE__ */ new Set();
57
+ for (const n of e)
58
+ if (n)
59
+ for (const r of n.split(/\s+/))
60
+ r && t.add(r);
61
+ return [...t].join(" ");
62
+ }
63
+ const le = "aw-task-list", ue = "data-checked", de = /* @__PURE__ */ new Set([
64
+ "http:",
65
+ "https:",
66
+ "mailto:",
67
+ "tel:",
68
+ "ftp:",
69
+ "sms:"
70
+ ]), fe = /* @__PURE__ */ new Set([
71
+ "http:",
72
+ "https:",
73
+ "blob:"
74
+ ]), pe = /^data:image\/[a-z0-9.+-]+[,;]/i;
75
+ function H(e) {
76
+ return e.replace($e, "");
77
+ }
78
+ const $e = new RegExp("[\\u0000-\\u0020\\u007f]", "g");
79
+ function q(e) {
80
+ const t = /^([a-z][a-z0-9+.-]*):/i.exec(e);
81
+ return t && t[1] ? `${t[1].toLowerCase()}:` : null;
82
+ }
83
+ function C(e) {
84
+ if (!e) return "";
85
+ const t = e.trim();
86
+ if (!t) return "";
87
+ const n = q(H(t));
88
+ return n === null || de.has(n) ? t : "";
89
+ }
90
+ function T(e) {
91
+ if (!e) return "";
92
+ const t = e.trim();
93
+ if (!t) return "";
94
+ const n = H(t), r = q(n);
95
+ return r === null ? t : r === "data:" ? pe.test(n) ? t : "" : fe.has(r) ? t : "";
96
+ }
97
+ function D(e) {
98
+ return e && /^[A-Za-z0-9_-]{6,20}$/.test(e) ? e : "";
99
+ }
100
+ const W = /* @__PURE__ */ new Set([
101
+ "area",
102
+ "base",
103
+ "br",
104
+ "col",
105
+ "embed",
106
+ "hr",
107
+ "img",
108
+ "input",
109
+ "link",
110
+ "meta",
111
+ "param",
112
+ "source",
113
+ "track",
114
+ "wbr"
115
+ ]), me = /* @__PURE__ */ new Set(["script", "style"]), ge = /* @__PURE__ */ new Map([
116
+ ["li", /* @__PURE__ */ new Set(["li"])],
117
+ ["p", /* @__PURE__ */ new Set(["p", "div", "ul", "ol", "blockquote", "pre", "table", "h1", "h2", "h3", "h4", "h5", "h6"])],
118
+ ["td", /* @__PURE__ */ new Set(["td", "th", "tr"])],
119
+ ["th", /* @__PURE__ */ new Set(["td", "th", "tr"])],
120
+ ["tr", /* @__PURE__ */ new Set(["tr"])],
121
+ ["option", /* @__PURE__ */ new Set(["option"])]
122
+ ]), he = {
123
+ amp: "&",
124
+ lt: "<",
125
+ gt: ">",
126
+ quot: '"',
127
+ apos: "'",
128
+ nbsp: " ",
129
+ ensp: " ",
130
+ emsp: " ",
131
+ thinsp: " ",
132
+ zwnj: "‌",
133
+ zwj: "‍",
134
+ hellip: "…",
135
+ mdash: "—",
136
+ ndash: "–",
137
+ lsquo: "‘",
138
+ rsquo: "’",
139
+ ldquo: "“",
140
+ rdquo: "”",
141
+ middot: "·",
142
+ bull: "•",
143
+ copy: "©",
144
+ reg: "®",
145
+ trade: "™",
146
+ deg: "°",
147
+ plusmn: "±",
148
+ times: "×",
149
+ divide: "÷",
150
+ laquo: "«",
151
+ raquo: "»"
152
+ };
153
+ function y(e) {
154
+ return e.includes("&") ? e.replace(
155
+ /&(#[Xx][0-9A-Fa-f]+|#\d+|[A-Za-z][A-Za-z0-9]{1,31});/g,
156
+ (t, n) => {
157
+ if (n.charCodeAt(0) === 35) {
158
+ const i = n[1] === "x" || n[1] === "X", o = i ? n.slice(2) : n.slice(1), c = Number.parseInt(o, i ? 16 : 10);
159
+ if (!Number.isFinite(c) || c < 0 || c > 1114111 || c >= 55296 && c <= 57343) return t;
160
+ try {
161
+ return String.fromCodePoint(c);
162
+ } catch {
163
+ return t;
164
+ }
165
+ }
166
+ return he[n.toLowerCase()] ?? t;
167
+ }
168
+ ) : e;
169
+ }
170
+ function g(e) {
171
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
172
+ }
173
+ function f(e) {
174
+ return g(e).replace(/"/g, "&quot;");
175
+ }
176
+ function be(e) {
177
+ const t = {}, n = /([^\s/=>"']+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;
178
+ let r;
179
+ for (; (r = n.exec(e)) !== null; ) {
180
+ const i = r[1];
181
+ if (!i) continue;
182
+ const o = r[2] ?? r[3] ?? r[4] ?? "";
183
+ t[i.toLowerCase()] = y(o);
184
+ }
185
+ return t;
186
+ }
187
+ function S(e) {
188
+ const t = [], n = [], r = () => {
189
+ const a = n[n.length - 1];
190
+ return a ? a.children : t;
191
+ }, i = (a) => {
192
+ if (a.length === 0) return;
193
+ const s = r(), u = s[s.length - 1];
194
+ u && u.type === "text" ? u.value += a : s.push({ type: "text", value: a });
195
+ }, o = (a) => {
196
+ var s;
197
+ for (let u = n.length - 1; u >= 0; u--)
198
+ if (((s = n[u]) == null ? void 0 : s.tag) === a) {
199
+ n.length = u;
200
+ return;
201
+ }
202
+ };
203
+ let c = 0;
204
+ for (; c < e.length; ) {
205
+ const a = e.indexOf("<", c);
206
+ if (a < 0) {
207
+ i(y(e.slice(c)));
208
+ break;
209
+ }
210
+ if (a > c && i(y(e.slice(c, a))), e.startsWith("<!--", a)) {
211
+ const m = e.indexOf("-->", a + 4);
212
+ c = m < 0 ? e.length : m + 3;
213
+ continue;
214
+ }
215
+ if (e.startsWith("<!", a) || e.startsWith("<?", a)) {
216
+ const m = e.indexOf(">", a + 2);
217
+ c = m < 0 ? e.length : m + 1;
218
+ continue;
219
+ }
220
+ const s = e.indexOf(">", a + 1);
221
+ if (s < 0) {
222
+ i(y(e.slice(a)));
223
+ break;
224
+ }
225
+ const u = e.slice(a + 1, s);
226
+ if (c = s + 1, u.startsWith("/")) {
227
+ const m = u.slice(1).trim().toLowerCase();
228
+ m && o(m);
229
+ continue;
230
+ }
231
+ const d = /^([A-Za-z][^\s/>]*)/.exec(u);
232
+ if (!d || !d[1]) {
233
+ i(y(e.slice(a, c)));
234
+ continue;
235
+ }
236
+ const l = d[1].toLowerCase(), $ = u.slice(d[1].length), h = /\/\s*$/.test($), p = be(h ? $.replace(/\/\s*$/, "") : $);
237
+ if (me.has(l)) {
238
+ const m = new RegExp(`</${l}\\s*>`, "i"), Y = e.slice(c), I = m.exec(Y);
239
+ c = I ? c + I.index + I[0].length : e.length;
240
+ continue;
241
+ }
242
+ const A = n[n.length - 1];
243
+ if (A) {
244
+ const m = ge.get(A.tag);
245
+ m != null && m.has(l) && n.pop();
246
+ }
247
+ const z = { type: "element", tag: l, attrs: p, children: [] };
248
+ r().push(z), !h && !W.has(l) && n.push(z);
249
+ }
250
+ return t;
251
+ }
252
+ function M(e) {
253
+ let t = "";
254
+ for (const n of e) {
255
+ if (n.type === "text") {
256
+ t += g(n.value);
257
+ continue;
258
+ }
259
+ const r = Object.entries(n.attrs).map(([i, o]) => o === "" ? ` ${i}` : ` ${i}="${f(o)}"`).join("");
260
+ if (W.has(n.tag)) {
261
+ t += `<${n.tag}${r}>`;
262
+ continue;
263
+ }
264
+ t += `<${n.tag}${r}>${M(n.children)}</${n.tag}>`;
265
+ }
266
+ return t;
267
+ }
268
+ function R(e) {
269
+ let t = "";
270
+ for (const n of e) {
271
+ if (n.type === "text") {
272
+ t += n.value;
273
+ continue;
274
+ }
275
+ if (n.tag === "br") {
276
+ t += `
277
+ `;
278
+ continue;
279
+ }
280
+ t += R(n.children);
281
+ }
282
+ return t;
283
+ }
284
+ const ke = /* @__PURE__ */ new Set([
285
+ "address",
286
+ "article",
287
+ "aside",
288
+ "blockquote",
289
+ "div",
290
+ "dd",
291
+ "dl",
292
+ "dt",
293
+ "fieldset",
294
+ "figcaption",
295
+ "figure",
296
+ "footer",
297
+ "form",
298
+ "h1",
299
+ "h2",
300
+ "h3",
301
+ "h4",
302
+ "h5",
303
+ "h6",
304
+ "header",
305
+ "hr",
306
+ "li",
307
+ "main",
308
+ "nav",
309
+ "ol",
310
+ "p",
311
+ "pre",
312
+ "section",
313
+ "table",
314
+ "tbody",
315
+ "td",
316
+ "tfoot",
317
+ "th",
318
+ "thead",
319
+ "tr",
320
+ "ul"
321
+ ]);
322
+ function x(e) {
323
+ let t = "";
324
+ for (const n of e) {
325
+ if (n.type === "text") {
326
+ t += n.value;
327
+ continue;
328
+ }
329
+ if (n.tag === "br") {
330
+ t += `
331
+ `;
332
+ continue;
333
+ }
334
+ const r = ke.has(n.tag);
335
+ r && t !== "" && !t.endsWith(`
336
+ `) && (t += `
337
+ `), t += x(n.children), r && !t.endsWith(`
338
+ `) && (t += `
339
+ `);
340
+ }
341
+ return t;
342
+ }
343
+ function _(e, t) {
344
+ return e.filter(
345
+ (n) => n.type === "element" && n.tag === t
346
+ );
347
+ }
348
+ const Ue = 1;
349
+ function we(e) {
350
+ const t = e.version;
351
+ return typeof t == "number" && Number.isFinite(t) && t > 0 ? t : 1;
352
+ }
353
+ const ye = /* @__PURE__ */ new Set([
354
+ "paragraph",
355
+ "heading",
356
+ "bulletList",
357
+ "orderedList",
358
+ "taskList",
359
+ "blockquote",
360
+ "codeBlock",
361
+ "image",
362
+ "table",
363
+ "hr",
364
+ "linkCard",
365
+ "youtube",
366
+ "file",
367
+ "importedHtml",
368
+ "unknown"
369
+ ]);
370
+ function O(e) {
371
+ return e.map((t) => K(t));
372
+ }
373
+ function K(e) {
374
+ const t = ye.has(e.kind) ? e.kind : "unknown", n = Math.max(we(e), 1);
375
+ return {
376
+ ...e,
377
+ kind: t,
378
+ version: n,
379
+ html: typeof e.html == "string" ? e.html : ""
380
+ };
381
+ }
382
+ function He(e, t = {}) {
383
+ const n = t.blockIds !== !1, r = O(e).map((o) => P(o, { blockIds: n })).join("");
384
+ return t.wrapper !== "content" ? r : `<div class="aeriz-wysiwyg aeriz-wysiwyg-viewer"${t.theme ? ` data-theme="${t.theme}"` : ""}><div class="aw-content-wrap"><div class="aw-content">${r}</div></div></div>`;
385
+ }
386
+ function qe(e, t = {}) {
387
+ return P(K(e), t);
388
+ }
389
+ function P(e, t = {}) {
390
+ const n = t.blockIds === !1 ? "" : ` ${re}="${f(e.id)}"`, r = Ae(e.html), i = (e.style ? ` style="${f(e.style)}"` : "") + Se(e.attributes), o = (c) => {
391
+ var s;
392
+ const a = ae(c, (s = e.attributes) == null ? void 0 : s.class);
393
+ return a ? ` class="${f(a)}"` : "";
394
+ };
395
+ switch (e.kind) {
396
+ case "paragraph":
397
+ return `<p${n}${i}>${r || "<br>"}</p>`;
398
+ case "unknown": {
399
+ const c = se(e.attrs.tag);
400
+ return `<${c}${n}${i}>${r || "<br>"}</${c}>`;
401
+ }
402
+ case "heading": {
403
+ const c = Ee(e.attrs.level);
404
+ return `<h${c}${n}${i}>${r || "<br>"}</h${c}>`;
405
+ }
406
+ case "bulletList":
407
+ return `<ul${n}${i}>${r || "<li><br></li>"}</ul>`;
408
+ case "orderedList":
409
+ return `<ol${n}${i}>${r || "<li><br></li>"}</ol>`;
410
+ case "taskList":
411
+ return `<ul${o(le)}${n}${i}>${r || "<li><br></li>"}</ul>`;
412
+ case "blockquote":
413
+ return `<blockquote${n}${i}>${r || "<p><br></p>"}</blockquote>`;
414
+ case "codeBlock": {
415
+ if (r) return `<pre${n}${i}>${r}</pre>`;
416
+ const c = e.attrs.language, a = c ? ` data-language="${f(c)}"` : "";
417
+ return `<pre${n}${i}><code${a}></code></pre>`;
418
+ }
419
+ case "table":
420
+ return `<table${n}${i}>${r || xe(e.attrs.rows, e.attrs.cols)}</table>`;
421
+ case "hr":
422
+ return `<hr${n}${i}>`;
423
+ case "image":
424
+ return r ? `<figure${n}${i}>${L(r)}</figure>` : _e(e.attrs, n, i);
425
+ case "youtube": {
426
+ if (!r)
427
+ return Le(e.attrs, n, i, o);
428
+ const c = D(e.attrs.videoId), a = c ? ` data-youtube-id="${f(c)}"` : "";
429
+ return `<div${o("aw-youtube-embed")}${a}${n}${i}>${L(r)}</div>`;
430
+ }
431
+ case "linkCard":
432
+ return Ce(e.attrs, n, i, r, o);
433
+ case "file":
434
+ return Ie(e.attrs, n, i, r, o);
435
+ case "importedHtml": {
436
+ const c = e.attrs.importedStyle, a = e.style ? i : c ? ` style="${f(c)}"` : "";
437
+ return `<div data-imported-html="true"${o(e.attrs.importedClass)}${a}${n}>${r}</div>`;
438
+ }
439
+ default:
440
+ return "";
441
+ }
442
+ }
443
+ function Se(e) {
444
+ if (!e) return "";
445
+ let t = "";
446
+ for (const n of oe) {
447
+ if (n === "class") continue;
448
+ const r = e[n];
449
+ r === void 0 || r === "" || (t += ` ${n}="${f(r)}"`);
450
+ }
451
+ return t;
452
+ }
453
+ const B = /\s(href|src)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s>]+))/gi;
454
+ function Ae(e) {
455
+ return !e || !Te(e) && !ve.test(e) ? e : M(S(e).map(G));
456
+ }
457
+ const ve = /<iframe[\s>]/i;
458
+ function Te(e) {
459
+ B.lastIndex = 0;
460
+ let t;
461
+ for (; (t = B.exec(e)) !== null; ) {
462
+ const n = (t[1] ?? "").toLowerCase(), r = y(t[2] ?? t[3] ?? t[4] ?? "");
463
+ if (!(n === "href" ? C(r) : T(r))) return !0;
464
+ }
465
+ return !1;
466
+ }
467
+ function G(e) {
468
+ if (e.type !== "element") return e;
469
+ const t = e.tag === "iframe", n = {};
470
+ for (const [r, i] of Object.entries(e.attrs))
471
+ r === "href" && !C(i) || r === "src" && !(t ? i.startsWith(N) : T(i)) || (n[r] = i);
472
+ return { ...e, attrs: n, children: e.children.map(G) };
473
+ }
474
+ const j = /aw-block-align-controls|aw-resize-handle/;
475
+ function L(e) {
476
+ if (!j.test(e)) return e;
477
+ const t = S(e).filter(
478
+ (n) => !(n.type === "element" && j.test(n.attrs.class ?? ""))
479
+ );
480
+ return M(t);
481
+ }
482
+ function Ee(e) {
483
+ return e === void 0 || e < 1 ? 1 : e > 6 ? 6 : e;
484
+ }
485
+ function xe(e, t) {
486
+ const n = Math.max(1, Number.isFinite(e) ? e : 1), r = Math.max(1, Number.isFinite(t) ? t : 1);
487
+ return `<tbody>${`<tr>${"<td><br></td>".repeat(r)}</tr>`.repeat(n)}</tbody>`;
488
+ }
489
+ function _e(e, t, n) {
490
+ const r = n || (e.wrapperStyle ? ` style="${f(e.wrapperStyle)}"` : ""), i = T(e.src), o = i ? ` src="${f(i)}"` : "", c = ` alt="${f(e.alt ?? "")}"`, a = e.caption ? `<figcaption>${g(e.caption)}</figcaption>` : "";
491
+ return `<figure${t}${r}><img${o}${c}>${a}</figure>`;
492
+ }
493
+ function Le(e, t, n, r) {
494
+ const i = D(e.videoId), o = n || (e.wrapperStyle ? ` style="${f(e.wrapperStyle)}"` : ""), c = i ? ` data-youtube-id="${f(i)}"` : "", a = i ? ` src="${f(`${N}${i}`)}"` : "";
495
+ return `<div${r("aw-youtube-embed")}${c}${t}${o}><iframe${a} allow="${f(te)}" allowfullscreen frameborder="0" referrerpolicy="strict-origin-when-cross-origin"></iframe></div>`;
496
+ }
497
+ function Ce(e, t, n, r, i) {
498
+ const o = C(e.href) || "#", c = e.text && e.text.length > 0 ? e.text : U(o) || o, a = e.description ?? "", s = T(e.image), u = e.favicon ? T(e.favicon) : J(o), l = `<a${i(s ? "aw-link-card aw-link-card-with-image" : "aw-link-card")} href="${f(o)}" target="_blank" rel="noopener"${t}${n}>`;
499
+ if (r) return `${l}${L(r)}</a>`;
500
+ let $ = l;
501
+ return s && ($ += `<img class="aw-link-card-image" src="${f(s)}" alt="" loading="lazy">`), $ += '<span class="aw-link-card-body">', $ += `<span class="aw-link-card-title">${g(c)}</span>`, a && ($ += `<span class="aw-link-card-desc">${g(a)}</span>`), $ += '<span class="aw-link-card-url">', u && ($ += `<img class="aw-link-card-favicon" src="${f(u)}" alt="" loading="lazy">`), $ += `<span class="aw-link-card-url-text">${g(o)}</span>`, $ += "</span></span></a>", $;
502
+ }
503
+ function Ie(e, t, n, r, i) {
504
+ const o = C(e.fileSrc), c = o ? ` href="${f(o)}"` : "", a = e.fileName ? ` data-file-name="${f(e.fileName)}"` : "", s = e.fileSize !== void 0 ? ` data-file-size="${f(String(e.fileSize))}"` : "", u = e.fileType ? ` data-file-type="${f(e.fileType)}"` : "", d = ` download="${f(e.fileName ?? "")}"`, l = [], $ = X(e.fileName, e.fileType);
505
+ $ && l.push($), e.fileSize !== void 0 && l.push(Z(e.fileSize));
506
+ const h = `<a${i("aw-file-attachment")} target="_blank" rel="noopener"${c}${d}${a}${s}${u}${t}${n}>`;
507
+ if (r) return `${h}${L(r)}</a>`;
508
+ let p = h;
509
+ return p += `<span class="aw-file-icon" aria-hidden="true">${Q}</span>`, p += '<span class="aw-file-meta">', p += `<span class="aw-file-name">${g(e.fileName ?? ne)}</span>`, l.length > 0 && (p += `<span class="aw-file-info">${g(l.join(" · "))}</span>`), p += "</span>", p += `<span class="aw-file-action" aria-hidden="true">${ee}</span>`, p += "</a>", p;
510
+ }
511
+ const Ne = /([\\`*_[\]<])/g, Me = /^([#>|+-]|\d+\.)/;
512
+ function De(e, t = {}) {
513
+ const n = t.bullet ?? "-", r = t.gfmTables !== !1, i = [];
514
+ for (const o of O(e)) {
515
+ const c = Re(o, n, r);
516
+ c !== "" && i.push(c);
517
+ }
518
+ return i.length > 0 ? `${i.join(`
519
+
520
+ `)}
521
+ ` : "";
522
+ }
523
+ function Re(e, t, n) {
524
+ var i, o, c, a;
525
+ const r = S(e.html);
526
+ switch (e.kind) {
527
+ case "paragraph":
528
+ case "unknown": {
529
+ const s = k(r).trim();
530
+ return s === "" ? "" : F(s);
531
+ }
532
+ case "heading": {
533
+ const s = Math.min(6, Math.max(1, e.attrs.level ?? 1)), u = k(r).trim();
534
+ return u === "" ? "" : `${"#".repeat(s)} ${u}`;
535
+ }
536
+ case "bulletList":
537
+ return E(r, { ordered: !1, bullet: t, depth: 0 });
538
+ case "orderedList":
539
+ return E(r, { ordered: !0, bullet: t, depth: 0 });
540
+ case "taskList":
541
+ return E(r, {
542
+ ordered: !1,
543
+ bullet: t,
544
+ depth: 0,
545
+ task: !0
546
+ });
547
+ case "blockquote": {
548
+ const s = _(r, "p"), d = (s.length > 0 ? s.map((l) => k(l.children).trim()) : [k(r).trim()]).filter((l) => l !== "").join(`
549
+
550
+ `).split(`
551
+ `).map((l) => l === "" ? ">" : `> ${l}`);
552
+ return d.length > 0 && d[0] !== void 0 ? d.join(`
553
+ `) : "";
554
+ }
555
+ case "codeBlock": {
556
+ const s = _(r, "code")[0], u = R(s ? s.children : r).replace(/\n$/, ""), d = e.attrs.language ?? (s == null ? void 0 : s.attrs["data-language"]) ?? "", l = "`".repeat(Math.max(3, V(u) + 1));
557
+ return `${l}${d}
558
+ ${u}
559
+ ${l}`;
560
+ }
561
+ case "image": {
562
+ const s = e.attrs.src ?? "";
563
+ if (s === "") return "";
564
+ const u = `![${b(e.attrs.alt ?? "")}](${v(s)})`, d = (i = e.attrs.caption) == null ? void 0 : i.trim();
565
+ return d ? `${u}
566
+ *${b(d)}*` : u;
567
+ }
568
+ case "table":
569
+ return n ? Oe(r) : `<table>${e.html}</table>`;
570
+ case "hr":
571
+ return "---";
572
+ case "linkCard": {
573
+ const s = e.attrs.href ?? "";
574
+ if (s === "") return "";
575
+ const u = ((o = e.attrs.text) == null ? void 0 : o.trim()) || s, d = `[${b(u)}](${v(s)})`, l = (c = e.attrs.description) == null ? void 0 : c.trim();
576
+ return l ? `${d}
577
+
578
+ ${F(b(l))}` : d;
579
+ }
580
+ case "youtube": {
581
+ const s = e.attrs.videoId;
582
+ return s ? `[YouTube](${N}${encodeURIComponent(s)})` : "";
583
+ }
584
+ case "file": {
585
+ const s = e.attrs.fileSrc ?? "";
586
+ if (s === "") return "";
587
+ const u = ((a = e.attrs.fileName) == null ? void 0 : a.trim()) || s;
588
+ return `[${b(u)}](${v(s)})`;
589
+ }
590
+ case "importedHtml":
591
+ return e.html.trim();
592
+ default:
593
+ return "";
594
+ }
595
+ }
596
+ function E(e, t) {
597
+ const n = _(e, "li");
598
+ if (n.length === 0) return "";
599
+ const r = " ".repeat(t.depth), i = [];
600
+ return n.forEach((o, c) => {
601
+ const a = [], s = [];
602
+ for (const p of o.children)
603
+ p.type === "element" && (p.tag === "ul" || p.tag === "ol") ? s.push(p) : a.push(p);
604
+ const u = t.ordered ? `${c + 1}.` : t.bullet, d = t.task ? `${u} ${o.attrs[ue] === "true" ? "[x]" : "[ ]"}` : u, l = k(a).trim(), $ = `${r}${" ".repeat(d.length + 1)}`, h = l.split(`
605
+ `).join(`
606
+ ${$}`);
607
+ i.push(`${r}${d} ${h}`);
608
+ for (const p of s) {
609
+ const A = E(p.children, {
610
+ ordered: p.tag === "ol",
611
+ bullet: t.bullet,
612
+ depth: t.depth + 1
613
+ });
614
+ A !== "" && i.push(A);
615
+ }
616
+ }), i.join(`
617
+ `);
618
+ }
619
+ function Oe(e) {
620
+ const t = [], n = (d) => {
621
+ for (const l of d)
622
+ if (l.type === "element") {
623
+ if (l.tag === "tr") {
624
+ t.push(l);
625
+ continue;
626
+ }
627
+ (l.tag === "tbody" || l.tag === "thead" || l.tag === "tfoot") && n(l.children);
628
+ }
629
+ };
630
+ if (n(e), t.length === 0) return "";
631
+ const r = t.map(
632
+ (d) => d.children.filter(
633
+ (l) => l.type === "element" && (l.tag === "td" || l.tag === "th")
634
+ ).map((l) => ze(l.children))
635
+ ), i = r.reduce((d, l) => Math.max(d, l.length), 0);
636
+ if (i === 0) return "";
637
+ const o = (d) => d.length === i ? d : [...d, ...Array(i - d.length).fill("")], [c, ...a] = r.map(o);
638
+ return [
639
+ `| ${(c ?? Array(i).fill("")).join(" | ")} |`,
640
+ `| ${Array(i).fill("---").join(" | ")} |`,
641
+ ...a.map((d) => `| ${d.join(" | ")} |`)
642
+ ].join(`
643
+ `);
644
+ }
645
+ function ze(e) {
646
+ return k(e, { inTableCell: !0 }).replace(/\n+/g, "<br>").replace(/\|/g, "\\|").trim();
647
+ }
648
+ function k(e, t = {}) {
649
+ let n = "";
650
+ for (const r of e) {
651
+ if (r.type === "text") {
652
+ n += b(r.value);
653
+ continue;
654
+ }
655
+ const i = () => k(r.children, t);
656
+ switch (r.tag) {
657
+ case "br":
658
+ n += t.inTableCell ? `
659
+ ` : `
660
+ `;
661
+ break;
662
+ case "b":
663
+ case "strong": {
664
+ const o = i();
665
+ n += o.trim() === "" ? o : `**${o}**`;
666
+ break;
667
+ }
668
+ case "i":
669
+ case "em": {
670
+ const o = i();
671
+ n += o.trim() === "" ? o : `*${o}*`;
672
+ break;
673
+ }
674
+ case "s":
675
+ case "del":
676
+ case "strike": {
677
+ const o = i();
678
+ n += o.trim() === "" ? o : `~~${o}~~`;
679
+ break;
680
+ }
681
+ case "code": {
682
+ const o = R(r.children), c = "`".repeat(V(o) + 1), a = o.startsWith("`") || o.endsWith("`") ? " " : "";
683
+ n += `${c}${a}${o}${a}${c}`;
684
+ break;
685
+ }
686
+ case "a": {
687
+ const o = r.attrs.href, c = i();
688
+ n += o ? `[${c}](${v(o)})` : c;
689
+ break;
690
+ }
691
+ case "img": {
692
+ const o = r.attrs.src;
693
+ o && (n += `![${b(r.attrs.alt ?? "")}](${v(o)})`);
694
+ break;
695
+ }
696
+ case "u":
697
+ case "sub":
698
+ case "sup":
699
+ case "mark":
700
+ n += `<${r.tag}>${i()}</${r.tag}>`;
701
+ break;
702
+ default:
703
+ n += i();
704
+ break;
705
+ }
706
+ }
707
+ return n;
708
+ }
709
+ function b(e) {
710
+ return e.replace(Ne, "\\$1");
711
+ }
712
+ function F(e) {
713
+ return e.replace(Me, "\\$1");
714
+ }
715
+ function V(e) {
716
+ let t = 0, n = 0;
717
+ for (const r of e)
718
+ r === "`" ? (n += 1, n > t && (t = n)) : n = 0;
719
+ return t;
720
+ }
721
+ function v(e) {
722
+ const t = e.trim();
723
+ return /[\s()]/.test(t) ? `<${t.replace(/[<>]/g, "")}>` : t;
724
+ }
725
+ function We(e, t = {}) {
726
+ const n = t.blockSeparator ?? `
727
+
728
+ `, r = t.cellSeparator ?? " ", i = [];
729
+ for (const o of O(e)) {
730
+ const c = Be(o, r);
731
+ c !== "" && i.push(c);
732
+ }
733
+ return i.join(n);
734
+ }
735
+ function Be(e, t) {
736
+ switch (e.kind) {
737
+ case "hr":
738
+ case "youtube":
739
+ return "";
740
+ case "image":
741
+ return w(
742
+ [e.attrs.alt, e.attrs.caption].filter(Boolean).join(`
743
+ `)
744
+ );
745
+ case "linkCard":
746
+ return w(e.attrs.text ?? e.attrs.href ?? "");
747
+ case "file":
748
+ return w(e.attrs.fileName ?? "");
749
+ case "bulletList":
750
+ case "orderedList":
751
+ case "taskList":
752
+ return _(S(e.html), "li").map((r) => w(x(r.children))).filter((r) => r !== "").join(`
753
+ `);
754
+ case "table":
755
+ return je(S(e.html), t);
756
+ default:
757
+ return w(x(S(e.html)));
758
+ }
759
+ }
760
+ function je(e, t) {
761
+ const n = [], r = (i) => {
762
+ for (const o of i)
763
+ o.type === "element" && (o.tag === "tr" ? n.push(o) : ["tbody", "thead", "tfoot"].includes(o.tag) && r(o.children));
764
+ };
765
+ return r(e), n.map(
766
+ (i) => i.children.filter(
767
+ (o) => o.type === "element" && (o.tag === "td" || o.tag === "th")
768
+ ).map((o) => w(x(o.children)).replace(/\n+/g, " ")).join(t)
769
+ ).filter((i) => i.replace(new RegExp(Fe(t), "g"), "").trim() !== "").join(`
770
+ `);
771
+ }
772
+ function w(e) {
773
+ return e.replace(ie, "").split(`
774
+ `).map((t) => t.replace(/[^\S\n]+/g, " ").trim()).join(`
775
+ `).replace(/\n{3,}/g, `
776
+
777
+ `).trim();
778
+ }
779
+ function Fe(e) {
780
+ return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
781
+ }
782
+ export {
783
+ Ue as SNAPSHOT_VERSION,
784
+ De as blocksToMarkdown,
785
+ We as blocksToPlainText,
786
+ y as decodeEntities,
787
+ f as escapeAttr,
788
+ g as escapeHtml,
789
+ S as parseHtmlFragment,
790
+ qe as renderBlockToHTML,
791
+ He as renderBlocksToHTML,
792
+ M as serializeNodes,
793
+ we as snapshotVersionOf,
794
+ R as textOf,
795
+ x as textWithBlockBreaks,
796
+ K as upgradeSnapshot,
797
+ O as upgradeSnapshots
798
+ };