@aeriz/wysiwyg 1.0.2 → 1.0.3

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 (108) hide show
  1. package/README.md +610 -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 +6912 -0
  27. package/dist/aeriz-wysiwyg.css +37 -129
  28. package/dist/aeriz-wysiwyg.esm.js +1170 -149
  29. package/dist/aeriz-wysiwyg.esm.min.js +2057 -1209
  30. package/dist/aeriz-wysiwyg.js +1169 -148
  31. package/dist/aeriz-wysiwyg.min.cjs +54 -0
  32. package/dist/aeriz-wysiwyg.min.css +1 -1
  33. package/dist/aeriz-wysiwyg.min.js +44 -13
  34. package/dist/server.cjs +32 -0
  35. package/dist/server.js +666 -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 +357 -0
  58. package/dist-types/cjs/core/AerizViewer.d.cts +61 -0
  59. package/dist-types/cjs/core/block-meta.d.cts +32 -0
  60. package/dist-types/cjs/core/blocks.d.cts +368 -0
  61. package/dist-types/cjs/core/fonts.d.cts +60 -0
  62. package/dist-types/cjs/core/highlight.d.cts +44 -0
  63. package/dist-types/cjs/core/html-mini.d.cts +65 -0
  64. package/dist-types/cjs/core/i18n.d.cts +209 -0
  65. package/dist-types/cjs/core/import-html.d.cts +39 -0
  66. package/dist-types/cjs/core/import-markdown.d.cts +37 -0
  67. package/dist-types/cjs/core/markdown-export.d.cts +30 -0
  68. package/dist-types/cjs/core/plain-text.d.cts +17 -0
  69. package/dist-types/cjs/core/render-string.d.cts +68 -0
  70. package/dist-types/cjs/core/snapshot.d.cts +51 -0
  71. package/dist-types/cjs/index.d.cts +20 -0
  72. package/dist-types/cjs/server/index.d.cts +37 -0
  73. package/dist-types/cjs/types/index.d.cts +61 -0
  74. package/dist-types/cjs/ui/Toolbar.d.cts +21 -0
  75. package/dist-types/cjs/ui/dialogs.d.cts +74 -0
  76. package/dist-types/cjs/ui/icons.d.cts +2 -0
  77. package/dist-types/cjs/ui/popovers.d.cts +70 -0
  78. package/dist-types/core/AerizEditor.d.ts +30 -10
  79. package/dist-types/core/AerizEditor.d.ts.map +1 -1
  80. package/dist-types/core/AerizViewer.d.ts +16 -4
  81. package/dist-types/core/AerizViewer.d.ts.map +1 -1
  82. package/dist-types/core/block-meta.d.ts +32 -0
  83. package/dist-types/core/block-meta.d.ts.map +1 -0
  84. package/dist-types/core/blocks.d.ts +62 -7
  85. package/dist-types/core/blocks.d.ts.map +1 -1
  86. package/dist-types/core/fonts.d.ts +11 -0
  87. package/dist-types/core/fonts.d.ts.map +1 -1
  88. package/dist-types/core/html-mini.d.ts +65 -0
  89. package/dist-types/core/html-mini.d.ts.map +1 -0
  90. package/dist-types/core/import-html.d.ts.map +1 -1
  91. package/dist-types/core/markdown-export.d.ts +30 -0
  92. package/dist-types/core/markdown-export.d.ts.map +1 -0
  93. package/dist-types/core/plain-text.d.ts +17 -0
  94. package/dist-types/core/plain-text.d.ts.map +1 -0
  95. package/dist-types/core/render-string.d.ts +68 -0
  96. package/dist-types/core/render-string.d.ts.map +1 -0
  97. package/dist-types/core/snapshot.d.ts +51 -0
  98. package/dist-types/core/snapshot.d.ts.map +1 -0
  99. package/dist-types/index.d.ts +19 -10
  100. package/dist-types/index.d.ts.map +1 -1
  101. package/dist-types/server/index.d.ts +37 -0
  102. package/dist-types/server/index.d.ts.map +1 -0
  103. package/dist-types/types/index.d.ts +21 -0
  104. package/dist-types/types/index.d.ts.map +1 -1
  105. package/dist-types/ui/Toolbar.d.ts +1 -1
  106. package/dist-types/ui/popovers.d.ts +1 -1
  107. package/dist-types/ui/popovers.d.ts.map +1 -1
  108. package/package.json +213 -58
package/dist/server.js ADDED
@@ -0,0 +1,666 @@
1
+ function U(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 W(e, n) {
5
+ if (e) {
6
+ const t = e.lastIndexOf(".");
7
+ if (t > 0 && t < e.length - 1)
8
+ return e.slice(t + 1).toUpperCase();
9
+ }
10
+ return n ? (n.split("/").pop() ?? "").toUpperCase() : "";
11
+ }
12
+ function j(e) {
13
+ try {
14
+ return new URL(e).hostname;
15
+ } catch {
16
+ return "";
17
+ }
18
+ }
19
+ function P(e) {
20
+ const n = j(e);
21
+ return n ? `https://www.google.com/s2/favicons?domain=${encodeURIComponent(n)}&sz=64` : "";
22
+ }
23
+ const V = '<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>', G = '<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>', K = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture", O = "https://www.youtube-nocookie.com/embed/", Y = "파일", Z = "data-block-id", z = /* @__PURE__ */ new Set([
24
+ "area",
25
+ "base",
26
+ "br",
27
+ "col",
28
+ "embed",
29
+ "hr",
30
+ "img",
31
+ "input",
32
+ "link",
33
+ "meta",
34
+ "param",
35
+ "source",
36
+ "track",
37
+ "wbr"
38
+ ]), X = /* @__PURE__ */ new Set(["script", "style"]), J = /* @__PURE__ */ new Map([
39
+ ["li", /* @__PURE__ */ new Set(["li"])],
40
+ ["p", /* @__PURE__ */ new Set(["p", "div", "ul", "ol", "blockquote", "pre", "table", "h1", "h2", "h3", "h4", "h5", "h6"])],
41
+ ["td", /* @__PURE__ */ new Set(["td", "th", "tr"])],
42
+ ["th", /* @__PURE__ */ new Set(["td", "th", "tr"])],
43
+ ["tr", /* @__PURE__ */ new Set(["tr"])],
44
+ ["option", /* @__PURE__ */ new Set(["option"])]
45
+ ]), Q = {
46
+ amp: "&",
47
+ lt: "<",
48
+ gt: ">",
49
+ quot: '"',
50
+ apos: "'",
51
+ nbsp: " ",
52
+ ensp: " ",
53
+ emsp: " ",
54
+ thinsp: " ",
55
+ zwnj: "‌",
56
+ zwj: "‍",
57
+ hellip: "…",
58
+ mdash: "—",
59
+ ndash: "–",
60
+ lsquo: "‘",
61
+ rsquo: "’",
62
+ ldquo: "“",
63
+ rdquo: "”",
64
+ middot: "·",
65
+ bull: "•",
66
+ copy: "©",
67
+ reg: "®",
68
+ trade: "™",
69
+ deg: "°",
70
+ plusmn: "±",
71
+ times: "×",
72
+ divide: "÷",
73
+ laquo: "«",
74
+ raquo: "»"
75
+ };
76
+ function w(e) {
77
+ return e.includes("&") ? e.replace(
78
+ /&(#[Xx][0-9A-Fa-f]+|#\d+|[A-Za-z][A-Za-z0-9]{1,31});/g,
79
+ (n, t) => {
80
+ if (t.charCodeAt(0) === 35) {
81
+ const i = t[1] === "x" || t[1] === "X", o = i ? t.slice(2) : t.slice(1), a = Number.parseInt(o, i ? 16 : 10);
82
+ if (!Number.isFinite(a) || a < 0 || a > 1114111 || a >= 55296 && a <= 57343) return n;
83
+ try {
84
+ return String.fromCodePoint(a);
85
+ } catch {
86
+ return n;
87
+ }
88
+ }
89
+ return Q[t.toLowerCase()] ?? n;
90
+ }
91
+ ) : e;
92
+ }
93
+ function h(e) {
94
+ return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
95
+ }
96
+ function f(e) {
97
+ return h(e).replace(/"/g, "&quot;");
98
+ }
99
+ function ee(e) {
100
+ const n = {}, t = /([^\s/=>"']+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'>]+)))?/g;
101
+ let r;
102
+ for (; (r = t.exec(e)) !== null; ) {
103
+ const i = r[1];
104
+ if (!i) continue;
105
+ const o = r[2] ?? r[3] ?? r[4] ?? "";
106
+ n[i.toLowerCase()] = w(o);
107
+ }
108
+ return n;
109
+ }
110
+ function y(e) {
111
+ const n = [], t = [], r = () => {
112
+ const c = t[t.length - 1];
113
+ return c ? c.children : n;
114
+ }, i = (c) => {
115
+ if (c.length === 0) return;
116
+ const d = r(), u = d[d.length - 1];
117
+ u && u.type === "text" ? u.value += c : d.push({ type: "text", value: c });
118
+ }, o = (c) => {
119
+ var d;
120
+ for (let u = t.length - 1; u >= 0; u--)
121
+ if (((d = t[u]) == null ? void 0 : d.tag) === c) {
122
+ t.length = u;
123
+ return;
124
+ }
125
+ };
126
+ let a = 0;
127
+ for (; a < e.length; ) {
128
+ const c = e.indexOf("<", a);
129
+ if (c < 0) {
130
+ i(w(e.slice(a)));
131
+ break;
132
+ }
133
+ if (c > a && i(w(e.slice(a, c))), e.startsWith("<!--", c)) {
134
+ const $ = e.indexOf("-->", c + 4);
135
+ a = $ < 0 ? e.length : $ + 3;
136
+ continue;
137
+ }
138
+ if (e.startsWith("<!", c) || e.startsWith("<?", c)) {
139
+ const $ = e.indexOf(">", c + 2);
140
+ a = $ < 0 ? e.length : $ + 1;
141
+ continue;
142
+ }
143
+ const d = e.indexOf(">", c + 1);
144
+ if (d < 0) {
145
+ i(w(e.slice(c)));
146
+ break;
147
+ }
148
+ const u = e.slice(c + 1, d);
149
+ if (a = d + 1, u.startsWith("/")) {
150
+ const $ = u.slice(1).trim().toLowerCase();
151
+ $ && o($);
152
+ continue;
153
+ }
154
+ const s = /^([A-Za-z][^\s/>]*)/.exec(u);
155
+ if (!s || !s[1]) {
156
+ i(w(e.slice(c, a)));
157
+ continue;
158
+ }
159
+ const l = s[1].toLowerCase(), p = u.slice(s[1].length), g = /\/\s*$/.test(p), x = ee(g ? p.replace(/\/\s*$/, "") : p);
160
+ if (X.has(l)) {
161
+ const $ = new RegExp(`</${l}\\s*>`, "i"), D = e.slice(a), L = $.exec(D);
162
+ a = L ? a + L.index + L[0].length : e.length;
163
+ continue;
164
+ }
165
+ const M = t[t.length - 1];
166
+ if (M) {
167
+ const $ = J.get(M.tag);
168
+ $ != null && $.has(l) && t.pop();
169
+ }
170
+ const N = { type: "element", tag: l, attrs: x, children: [] };
171
+ r().push(N), !g && !z.has(l) && t.push(N);
172
+ }
173
+ return n;
174
+ }
175
+ function R(e) {
176
+ let n = "";
177
+ for (const t of e) {
178
+ if (t.type === "text") {
179
+ n += h(t.value);
180
+ continue;
181
+ }
182
+ const r = Object.entries(t.attrs).map(([i, o]) => o === "" ? ` ${i}` : ` ${i}="${f(o)}"`).join("");
183
+ if (z.has(t.tag)) {
184
+ n += `<${t.tag}${r}>`;
185
+ continue;
186
+ }
187
+ n += `<${t.tag}${r}>${R(t.children)}</${t.tag}>`;
188
+ }
189
+ return n;
190
+ }
191
+ function I(e) {
192
+ let n = "";
193
+ for (const t of e) {
194
+ if (t.type === "text") {
195
+ n += t.value;
196
+ continue;
197
+ }
198
+ if (t.tag === "br") {
199
+ n += `
200
+ `;
201
+ continue;
202
+ }
203
+ n += I(t.children);
204
+ }
205
+ return n;
206
+ }
207
+ const te = /* @__PURE__ */ new Set([
208
+ "address",
209
+ "article",
210
+ "aside",
211
+ "blockquote",
212
+ "div",
213
+ "dd",
214
+ "dl",
215
+ "dt",
216
+ "fieldset",
217
+ "figcaption",
218
+ "figure",
219
+ "footer",
220
+ "form",
221
+ "h1",
222
+ "h2",
223
+ "h3",
224
+ "h4",
225
+ "h5",
226
+ "h6",
227
+ "header",
228
+ "hr",
229
+ "li",
230
+ "main",
231
+ "nav",
232
+ "ol",
233
+ "p",
234
+ "pre",
235
+ "section",
236
+ "table",
237
+ "tbody",
238
+ "td",
239
+ "tfoot",
240
+ "th",
241
+ "thead",
242
+ "tr",
243
+ "ul"
244
+ ]);
245
+ function A(e) {
246
+ let n = "";
247
+ for (const t of e) {
248
+ if (t.type === "text") {
249
+ n += t.value;
250
+ continue;
251
+ }
252
+ if (t.tag === "br") {
253
+ n += `
254
+ `;
255
+ continue;
256
+ }
257
+ const r = te.has(t.tag);
258
+ r && n !== "" && !n.endsWith(`
259
+ `) && (n += `
260
+ `), n += A(t.children), r && !n.endsWith(`
261
+ `) && (n += `
262
+ `);
263
+ }
264
+ return n;
265
+ }
266
+ function S(e, n) {
267
+ return e.filter(
268
+ (t) => t.type === "element" && t.tag === n
269
+ );
270
+ }
271
+ const be = 1;
272
+ function ne(e) {
273
+ const n = e.version;
274
+ return typeof n == "number" && Number.isFinite(n) && n > 0 ? n : 1;
275
+ }
276
+ const re = /* @__PURE__ */ new Set([
277
+ "paragraph",
278
+ "heading",
279
+ "bulletList",
280
+ "orderedList",
281
+ "blockquote",
282
+ "codeBlock",
283
+ "image",
284
+ "table",
285
+ "hr",
286
+ "linkCard",
287
+ "youtube",
288
+ "file",
289
+ "importedHtml",
290
+ "unknown"
291
+ ]);
292
+ function C(e) {
293
+ return e.map((n) => F(n));
294
+ }
295
+ function F(e) {
296
+ const n = re.has(e.kind) ? e.kind : "unknown", t = Math.max(ne(e), 1);
297
+ return {
298
+ ...e,
299
+ kind: n,
300
+ version: t,
301
+ html: typeof e.html == "string" ? e.html : ""
302
+ };
303
+ }
304
+ function ke(e, n = {}) {
305
+ const t = n.blockIds !== !1, r = C(e).map((o) => q(o, { blockIds: t })).join("");
306
+ return n.wrapper !== "content" ? r : `<div class="aeriz-wysiwyg aeriz-wysiwyg-viewer"${n.theme ? ` data-theme="${n.theme}"` : ""}><div class="aw-content-wrap"><div class="aw-content">${r}</div></div></div>`;
307
+ }
308
+ function we(e, n = {}) {
309
+ return q(F(e), n);
310
+ }
311
+ function q(e, n = {}) {
312
+ const t = n.blockIds === !1 ? "" : ` ${Z}="${f(e.id)}"`, r = e.html, i = e.style ? ` style="${f(e.style)}"` : "";
313
+ switch (e.kind) {
314
+ case "paragraph":
315
+ return `<p${t}${i}>${r || "<br>"}</p>`;
316
+ case "unknown":
317
+ return `<div${t}${i}>${r || "<br>"}</div>`;
318
+ case "heading": {
319
+ const o = ie(e.attrs.level);
320
+ return `<h${o}${t}${i}>${r || "<br>"}</h${o}>`;
321
+ }
322
+ case "bulletList":
323
+ return `<ul${t}${i}>${r || "<li><br></li>"}</ul>`;
324
+ case "orderedList":
325
+ return `<ol${t}${i}>${r || "<li><br></li>"}</ol>`;
326
+ case "blockquote":
327
+ return `<blockquote${t}${i}>${r || "<p><br></p>"}</blockquote>`;
328
+ case "codeBlock": {
329
+ if (r) return `<pre${t}${i}>${r}</pre>`;
330
+ const o = e.attrs.language, a = o ? ` data-language="${f(o)}"` : "";
331
+ return `<pre${t}${i}><code${a}></code></pre>`;
332
+ }
333
+ case "table":
334
+ return `<table${t}${i}>${r || oe(e.attrs.rows, e.attrs.cols)}</table>`;
335
+ case "hr":
336
+ return `<hr${t}${i}>`;
337
+ case "image":
338
+ return r ? `<figure${t}${i}>${T(r)}</figure>` : ce(e.attrs, t, i);
339
+ case "youtube": {
340
+ if (!r) return ae(e.attrs, t, i);
341
+ const o = e.attrs.videoId;
342
+ return `<div class="aw-youtube-embed"${o ? ` data-youtube-id="${f(o)}"` : ""}${t}${i}>${T(r)}</div>`;
343
+ }
344
+ case "linkCard":
345
+ return se(e.attrs, t, i, r);
346
+ case "file":
347
+ return le(e.attrs, t, i, r);
348
+ case "importedHtml": {
349
+ const o = e.attrs.importedStyle, a = e.attrs.importedClass, c = e.style ? i : o ? ` style="${f(o)}"` : "";
350
+ return `<div data-imported-html="true"${a ? ` class="${f(a)}"` : ""}${c}${t}>${r}</div>`;
351
+ }
352
+ default:
353
+ return "";
354
+ }
355
+ }
356
+ const _ = /aw-block-align-controls|aw-resize-handle/;
357
+ function T(e) {
358
+ if (!_.test(e)) return e;
359
+ const n = y(e).filter(
360
+ (t) => !(t.type === "element" && _.test(t.attrs.class ?? ""))
361
+ );
362
+ return R(n);
363
+ }
364
+ function ie(e) {
365
+ return e === void 0 || e < 1 ? 1 : e > 6 ? 6 : e;
366
+ }
367
+ function oe(e, n) {
368
+ const t = Math.max(1, Number.isFinite(e) ? e : 1), r = Math.max(1, Number.isFinite(n) ? n : 1);
369
+ return `<tbody>${`<tr>${"<td><br></td>".repeat(r)}</tr>`.repeat(t)}</tbody>`;
370
+ }
371
+ function ce(e, n, t) {
372
+ const r = t || (e.wrapperStyle ? ` style="${f(e.wrapperStyle)}"` : ""), i = e.src ? ` src="${f(e.src)}"` : "", o = ` alt="${f(e.alt ?? "")}"`;
373
+ return `<figure${n}${r}><img${i}${o}></figure>`;
374
+ }
375
+ function ae(e, n, t) {
376
+ const r = e.videoId ?? "", i = t || (e.wrapperStyle ? ` style="${f(e.wrapperStyle)}"` : ""), o = r ? ` data-youtube-id="${f(r)}"` : "", a = r ? ` src="${f(`${O}${r}`)}"` : "";
377
+ return `<div class="aw-youtube-embed"${o}${n}${i}><iframe${a} allow="${f(K)}" allowfullscreen frameborder="0" referrerpolicy="strict-origin-when-cross-origin"></iframe></div>`;
378
+ }
379
+ function se(e, n, t, r) {
380
+ const i = e.href ?? "#", o = e.text && e.text.length > 0 ? e.text : j(i) || i, a = e.description ?? "", c = e.image ?? "", d = e.favicon ?? P(i), s = `<a class="${c ? "aw-link-card aw-link-card-with-image" : "aw-link-card"}" href="${f(i)}" target="_blank" rel="noopener"${n}${t}>`;
381
+ if (r) return `${s}${T(r)}</a>`;
382
+ let l = s;
383
+ return c && (l += `<img class="aw-link-card-image" src="${f(c)}" alt="" loading="lazy">`), l += '<span class="aw-link-card-body">', l += `<span class="aw-link-card-title">${h(o)}</span>`, a && (l += `<span class="aw-link-card-desc">${h(a)}</span>`), l += '<span class="aw-link-card-url">', d && (l += `<img class="aw-link-card-favicon" src="${f(d)}" alt="" loading="lazy">`), l += `<span class="aw-link-card-url-text">${h(i)}</span>`, l += "</span></span></a>", l;
384
+ }
385
+ function le(e, n, t, r) {
386
+ const i = e.fileSrc ? ` href="${f(e.fileSrc)}"` : "", o = e.fileName ? ` data-file-name="${f(e.fileName)}"` : "", a = e.fileSize !== void 0 ? ` data-file-size="${f(String(e.fileSize))}"` : "", c = e.fileType ? ` data-file-type="${f(e.fileType)}"` : "", d = ` download="${f(e.fileName ?? "")}"`, u = [], s = W(e.fileName, e.fileType);
387
+ s && u.push(s), e.fileSize !== void 0 && u.push(U(e.fileSize));
388
+ const l = `<a class="aw-file-attachment" target="_blank" rel="noopener"${i}${d}${o}${a}${c}${n}${t}>`;
389
+ if (r) return `${l}${T(r)}</a>`;
390
+ let p = l;
391
+ return p += `<span class="aw-file-icon" aria-hidden="true">${V}</span>`, p += '<span class="aw-file-meta">', p += `<span class="aw-file-name">${h(e.fileName ?? Y)}</span>`, u.length > 0 && (p += `<span class="aw-file-info">${h(u.join(" · "))}</span>`), p += "</span>", p += `<span class="aw-file-action" aria-hidden="true">${G}</span>`, p += "</a>", p;
392
+ }
393
+ const ue = /([\\`*_[\]<])/g, de = /^([#>|+-]|\d+\.)/;
394
+ function ye(e, n = {}) {
395
+ const t = n.bullet ?? "-", r = n.gfmTables !== !1, i = [];
396
+ for (const o of C(e)) {
397
+ const a = fe(o, t, r);
398
+ a !== "" && i.push(a);
399
+ }
400
+ return i.length > 0 ? `${i.join(`
401
+
402
+ `)}
403
+ ` : "";
404
+ }
405
+ function fe(e, n, t) {
406
+ var i, o, a;
407
+ const r = y(e.html);
408
+ switch (e.kind) {
409
+ case "paragraph":
410
+ case "unknown": {
411
+ const c = m(r).trim();
412
+ return c === "" ? "" : B(c);
413
+ }
414
+ case "heading": {
415
+ const c = Math.min(6, Math.max(1, e.attrs.level ?? 1)), d = m(r).trim();
416
+ return d === "" ? "" : `${"#".repeat(c)} ${d}`;
417
+ }
418
+ case "bulletList":
419
+ return E(r, { ordered: !1, bullet: n, depth: 0 });
420
+ case "orderedList":
421
+ return E(r, { ordered: !0, bullet: n, depth: 0 });
422
+ case "blockquote": {
423
+ const c = S(r, "p"), u = (c.length > 0 ? c.map((s) => m(s.children).trim()) : [m(r).trim()]).filter((s) => s !== "").join(`
424
+
425
+ `).split(`
426
+ `).map((s) => s === "" ? ">" : `> ${s}`);
427
+ return u.length > 0 && u[0] !== void 0 ? u.join(`
428
+ `) : "";
429
+ }
430
+ case "codeBlock": {
431
+ const c = S(r, "code")[0], d = I(c ? c.children : r).replace(/\n$/, ""), u = e.attrs.language ?? (c == null ? void 0 : c.attrs["data-language"]) ?? "", s = "`".repeat(Math.max(3, H(d) + 1));
432
+ return `${s}${u}
433
+ ${d}
434
+ ${s}`;
435
+ }
436
+ case "image": {
437
+ const c = e.attrs.src ?? "";
438
+ return c === "" ? "" : `![${k(e.attrs.alt ?? "")}](${v(c)})`;
439
+ }
440
+ case "table":
441
+ return t ? pe(r) : `<table>${e.html}</table>`;
442
+ case "hr":
443
+ return "---";
444
+ case "linkCard": {
445
+ const c = e.attrs.href ?? "";
446
+ if (c === "") return "";
447
+ const d = ((i = e.attrs.text) == null ? void 0 : i.trim()) || c, u = `[${k(d)}](${v(c)})`, s = (o = e.attrs.description) == null ? void 0 : o.trim();
448
+ return s ? `${u}
449
+
450
+ ${B(k(s))}` : u;
451
+ }
452
+ case "youtube": {
453
+ const c = e.attrs.videoId;
454
+ return c ? `[YouTube](${O}${encodeURIComponent(c)})` : "";
455
+ }
456
+ case "file": {
457
+ const c = e.attrs.fileSrc ?? "";
458
+ if (c === "") return "";
459
+ const d = ((a = e.attrs.fileName) == null ? void 0 : a.trim()) || c;
460
+ return `[${k(d)}](${v(c)})`;
461
+ }
462
+ case "importedHtml":
463
+ return e.html.trim();
464
+ default:
465
+ return "";
466
+ }
467
+ }
468
+ function E(e, n) {
469
+ const t = S(e, "li");
470
+ if (t.length === 0) return "";
471
+ const r = " ".repeat(n.depth), i = [];
472
+ return t.forEach((o, a) => {
473
+ const c = [], d = [];
474
+ for (const g of o.children)
475
+ g.type === "element" && (g.tag === "ul" || g.tag === "ol") ? d.push(g) : c.push(g);
476
+ const u = n.ordered ? `${a + 1}.` : n.bullet, s = m(c).trim(), l = `${r}${" ".repeat(u.length + 1)}`, p = s.split(`
477
+ `).join(`
478
+ ${l}`);
479
+ i.push(`${r}${u} ${p}`);
480
+ for (const g of d) {
481
+ const x = E(g.children, {
482
+ ordered: g.tag === "ol",
483
+ bullet: n.bullet,
484
+ depth: n.depth + 1
485
+ });
486
+ x !== "" && i.push(x);
487
+ }
488
+ }), i.join(`
489
+ `);
490
+ }
491
+ function pe(e) {
492
+ const n = [], t = (s) => {
493
+ for (const l of s)
494
+ if (l.type === "element") {
495
+ if (l.tag === "tr") {
496
+ n.push(l);
497
+ continue;
498
+ }
499
+ (l.tag === "tbody" || l.tag === "thead" || l.tag === "tfoot") && t(l.children);
500
+ }
501
+ };
502
+ if (t(e), n.length === 0) return "";
503
+ const r = n.map(
504
+ (s) => s.children.filter(
505
+ (l) => l.type === "element" && (l.tag === "td" || l.tag === "th")
506
+ ).map((l) => $e(l.children))
507
+ ), i = r.reduce((s, l) => Math.max(s, l.length), 0);
508
+ if (i === 0) return "";
509
+ const o = (s) => s.length === i ? s : [...s, ...Array(i - s.length).fill("")], [a, ...c] = r.map(o);
510
+ return [
511
+ `| ${(a ?? Array(i).fill("")).join(" | ")} |`,
512
+ `| ${Array(i).fill("---").join(" | ")} |`,
513
+ ...c.map((s) => `| ${s.join(" | ")} |`)
514
+ ].join(`
515
+ `);
516
+ }
517
+ function $e(e) {
518
+ return m(e, { inTableCell: !0 }).replace(/\n+/g, "<br>").replace(/\|/g, "\\|").trim();
519
+ }
520
+ function m(e, n = {}) {
521
+ let t = "";
522
+ for (const r of e) {
523
+ if (r.type === "text") {
524
+ t += k(r.value);
525
+ continue;
526
+ }
527
+ const i = () => m(r.children, n);
528
+ switch (r.tag) {
529
+ case "br":
530
+ t += n.inTableCell ? `
531
+ ` : `
532
+ `;
533
+ break;
534
+ case "b":
535
+ case "strong": {
536
+ const o = i();
537
+ t += o.trim() === "" ? o : `**${o}**`;
538
+ break;
539
+ }
540
+ case "i":
541
+ case "em": {
542
+ const o = i();
543
+ t += o.trim() === "" ? o : `*${o}*`;
544
+ break;
545
+ }
546
+ case "s":
547
+ case "del":
548
+ case "strike": {
549
+ const o = i();
550
+ t += o.trim() === "" ? o : `~~${o}~~`;
551
+ break;
552
+ }
553
+ case "code": {
554
+ const o = I(r.children), a = "`".repeat(H(o) + 1), c = o.startsWith("`") || o.endsWith("`") ? " " : "";
555
+ t += `${a}${c}${o}${c}${a}`;
556
+ break;
557
+ }
558
+ case "a": {
559
+ const o = r.attrs.href, a = i();
560
+ t += o ? `[${a}](${v(o)})` : a;
561
+ break;
562
+ }
563
+ case "img": {
564
+ const o = r.attrs.src;
565
+ o && (t += `![${k(r.attrs.alt ?? "")}](${v(o)})`);
566
+ break;
567
+ }
568
+ case "u":
569
+ case "sub":
570
+ case "sup":
571
+ case "mark":
572
+ t += `<${r.tag}>${i()}</${r.tag}>`;
573
+ break;
574
+ default:
575
+ t += i();
576
+ break;
577
+ }
578
+ }
579
+ return t;
580
+ }
581
+ function k(e) {
582
+ return e.replace(ue, "\\$1");
583
+ }
584
+ function B(e) {
585
+ return e.replace(de, "\\$1");
586
+ }
587
+ function H(e) {
588
+ let n = 0, t = 0;
589
+ for (const r of e)
590
+ r === "`" ? (t += 1, t > n && (n = t)) : t = 0;
591
+ return n;
592
+ }
593
+ function v(e) {
594
+ const n = e.trim();
595
+ return /[\s()]/.test(n) ? `<${n.replace(/[<>]/g, "")}>` : n;
596
+ }
597
+ function ve(e, n = {}) {
598
+ const t = n.blockSeparator ?? `
599
+
600
+ `, r = n.cellSeparator ?? " ", i = [];
601
+ for (const o of C(e)) {
602
+ const a = ge(o, r);
603
+ a !== "" && i.push(a);
604
+ }
605
+ return i.join(t);
606
+ }
607
+ function ge(e, n) {
608
+ switch (e.kind) {
609
+ case "hr":
610
+ case "youtube":
611
+ return "";
612
+ case "image":
613
+ return b(e.attrs.alt ?? "");
614
+ case "linkCard":
615
+ return b(e.attrs.text ?? e.attrs.href ?? "");
616
+ case "file":
617
+ return b(e.attrs.fileName ?? "");
618
+ case "bulletList":
619
+ case "orderedList":
620
+ return S(y(e.html), "li").map((r) => b(A(r.children))).filter((r) => r !== "").join(`
621
+ `);
622
+ case "table":
623
+ return me(y(e.html), n);
624
+ default:
625
+ return b(A(y(e.html)));
626
+ }
627
+ }
628
+ function me(e, n) {
629
+ const t = [], r = (i) => {
630
+ for (const o of i)
631
+ o.type === "element" && (o.tag === "tr" ? t.push(o) : ["tbody", "thead", "tfoot"].includes(o.tag) && r(o.children));
632
+ };
633
+ return r(e), t.map(
634
+ (i) => i.children.filter(
635
+ (o) => o.type === "element" && (o.tag === "td" || o.tag === "th")
636
+ ).map((o) => b(A(o.children)).replace(/\n+/g, " ")).join(n)
637
+ ).filter((i) => i.replace(new RegExp(he(n), "g"), "").trim() !== "").join(`
638
+ `);
639
+ }
640
+ function b(e) {
641
+ return e.replace(/[​-‍]/g, "").split(`
642
+ `).map((n) => n.replace(/[^\S\n]+/g, " ").trim()).join(`
643
+ `).replace(/\n{3,}/g, `
644
+
645
+ `).trim();
646
+ }
647
+ function he(e) {
648
+ return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
649
+ }
650
+ export {
651
+ be as SNAPSHOT_VERSION,
652
+ ye as blocksToMarkdown,
653
+ ve as blocksToPlainText,
654
+ w as decodeEntities,
655
+ f as escapeAttr,
656
+ h as escapeHtml,
657
+ y as parseHtmlFragment,
658
+ we as renderBlockToHTML,
659
+ ke as renderBlocksToHTML,
660
+ R as serializeNodes,
661
+ ne as snapshotVersionOf,
662
+ I as textOf,
663
+ A as textWithBlockBreaks,
664
+ F as upgradeSnapshot,
665
+ C as upgradeSnapshots
666
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * jQuery 플러그인 어댑터.
3
+ *
4
+ * `jquery` 를 import 하지 않는다. 전역 `jQuery` 가 있으면 로드 시점에 자동
5
+ * 등록하고, 모듈 번들 환경에서는 `registerAerizJQuery($)` 로 명시 등록한다.
6
+ * 덕분에 jQuery 타입 패키지(`@types/jquery`) 없이도 타입이 성립한다.
7
+ *
8
+ * @example
9
+ * <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
10
+ * <script src="/aeriz-wysiwyg.min.js"></script>
11
+ * <script src="/adapters/jquery.js"></script>
12
+ * <script>
13
+ * $('#editor').aerizEditor({ value: '<p>안녕하세요</p>',
14
+ * onChange: (html) => console.log(html) });
15
+ * const html = $('#editor').aerizEditor('getHTML');
16
+ * $('#editor').aerizEditor('destroy');
17
+ * </script>
18
+ */
19
+ import type { AerizEditor, AerizViewer } from '@aeriz/wysiwyg';
20
+ import type { AerizEditorProps, AerizViewerProps } from './shared.js';
21
+ /** `$.fn` 을 가진 jQuery 정적 객체의 최소 형태. */
22
+ export interface JQueryLike {
23
+ fn: Record<string, unknown>;
24
+ }
25
+ /** 문자열 명령 없이 호출했을 때 초기화에 쓰이는 옵션. */
26
+ export type AerizEditorPluginOptions = AerizEditorProps;
27
+ export type AerizViewerPluginOptions = AerizViewerProps;
28
+ /**
29
+ * `$.fn.aerizEditor` / `$.fn.aerizViewer` 를 등록한다.
30
+ * 이미 등록돼 있으면 아무것도 하지 않으므로 여러 번 불러도 안전하다.
31
+ */
32
+ export declare function registerAerizJQuery($: JQueryLike): void;
33
+ export type { AerizEditor, AerizViewer, AerizEditorProps, AerizViewerProps };
34
+ //# sourceMappingURL=jquery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jquery.d.ts","sourceRoot":"","sources":["../../src/adapters/jquery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAEV,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAUlB,uCAAuC;AACvC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B;AAED,oCAAoC;AACpC,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AACxD,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AA+HxD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAMvD;AAQD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}