@lofcz/edix 0.3.0

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.
package/lib/index.js ADDED
@@ -0,0 +1,737 @@
1
+ const t = Math.min, {keys: n, is: e} = Object, r = t => "string" == typeof t, o = t => "function" == typeof t, s = o(queueMicrotask) ? queueMicrotask : t => {
2
+ Promise.resolve().then(t);
3
+ }, i = (n, e) => {
4
+ const r = t(n.length, e.length);
5
+ for (let t = 0; t < r; t++) {
6
+ const r = n[t], o = e[t];
7
+ if (r < o) return -1;
8
+ if (r > o) return 1;
9
+ }
10
+ return 0;
11
+ }, c = ([t, n], [e, r]) => {
12
+ const o = i(t, e);
13
+ return 0 === o ? n === r ? 0 : n < r ? -1 : 1 : o;
14
+ }, u = ([t, n]) => 1 === c(t, n) ? [ n, t ] : [ t, n ], f = (t, n = t => g(t) ? t.text : "") => t.children.reduce((t, e, r) => (0 !== r && (t += "\n"),
15
+ t + e.reduce((t, e) => t + n(e), "")), ""), l = (t, n) => t.split("\n").map(t => [ {
16
+ ...n,
17
+ text: t
18
+ } ]), a = "delete", d = "insert_text", h = "insert_node", p = "set_attr", m = ({type: t}) => t === h || t === p;
19
+
20
+ class y {
21
+ t;
22
+ selection;
23
+ constructor(t) {
24
+ this.t = t ? t.slice() : [];
25
+ }
26
+ get ops() {
27
+ return this.t;
28
+ }
29
+ insertText(t, n) {
30
+ return this.t.push({
31
+ type: d,
32
+ at: t,
33
+ text: n
34
+ }), this;
35
+ }
36
+ insertFragment(t, n) {
37
+ return this.t.push({
38
+ type: h,
39
+ at: t,
40
+ fragment: n
41
+ }), this;
42
+ }
43
+ delete(t, n) {
44
+ return this.t.push({
45
+ type: a,
46
+ start: t,
47
+ end: n
48
+ }), this;
49
+ }
50
+ attr(t, n, e, r) {
51
+ return this.t.push({
52
+ type: p,
53
+ start: t,
54
+ end: n,
55
+ key: e,
56
+ value: r
57
+ }), this;
58
+ }
59
+ transform(t) {
60
+ return this.t.reduce((t, n) => C(t, n), t);
61
+ }
62
+ }
63
+
64
+ const g = t => "text" in t, w = (t, r) => {
65
+ const o = n(t);
66
+ return o.length === n(r).length && o.every(n => n in r && ("text" === n || e(t[n], r[n])));
67
+ }, x = t => g(t) ? t.text.length : 1, k = t => t.reduce((t, n) => t + x(n), 0), b = (...t) => t.reduce((t, n) => (((t, n) => {
68
+ if (n.length) {
69
+ const e = t.length;
70
+ t.push(...n), e && ((t, n = 0, e = t.length - 1) => {
71
+ let r = n + 1;
72
+ for (;r <= e; ) {
73
+ const n = t[r - 1], o = t[r];
74
+ g(n) && g(o) && w(n, o) ? (t[r - 1] = {
75
+ ...n,
76
+ text: n.text + o.text
77
+ }, t.splice(r, 1), e--) : r++;
78
+ }
79
+ for (r = n; r <= e; ) {
80
+ const n = t[r];
81
+ g(n) && !n.text && t.length > 1 ? (t.splice(r, 1), e--) : r++;
82
+ }
83
+ })(t, e - 1, e);
84
+ }
85
+ })(t, n), t), []), E = (t, n) => {
86
+ for (let e = 0; e < t.length; e++) {
87
+ const r = t[e], o = x(r);
88
+ if (o > n) {
89
+ const o = t.slice(0, e), s = t.slice(e + 1);
90
+ if (g(r)) {
91
+ const t = r.text.slice(0, n), e = r.text.slice(n);
92
+ !t && o.length || o.push({
93
+ ...r,
94
+ text: t
95
+ }), !e && s.length || s.unshift({
96
+ ...r,
97
+ text: e
98
+ });
99
+ } else s.unshift(r);
100
+ return [ o, s ];
101
+ }
102
+ n -= o;
103
+ }
104
+ return [ t, [] ];
105
+ }, D = t => t.length ? t[0] : 0, O = (t, n) => t.children[D(n)], S = (t, n) => [ D(t) + n ], _ = (t, n, e, o) => {
106
+ const [s, i] = n, [u, f] = e, [a, d] = E(O(t, s), i), h = -1 === c(n, e) ? E(O(t, u), f)[1] : d;
107
+ if (r(o)) {
108
+ const t = a.length;
109
+ let n;
110
+ if (t) {
111
+ const e = a[t - 1];
112
+ g(e) && (n = e);
113
+ }
114
+ o = l(o, n);
115
+ }
116
+ let p;
117
+ o.length ? (p = o.slice(), p[p.length - 1] = b(p[p.length - 1], h)) : p = [ h ],
118
+ p[0] = b(a, p[0]);
119
+ const m = t.children.slice();
120
+ return m.splice(D(s), D(u) - D(s) + 1, ...p), {
121
+ ...t,
122
+ children: m
123
+ };
124
+ }, v = (t, n, e) => {
125
+ if (-1 !== c(n, e)) return [];
126
+ const r = t.children.slice(D(n[0]), D(e[0]) + 1), o = r.length - 1;
127
+ return r[o] = E(r[o], e[1])[0], r[0] = E(r[0], n[1])[1], r;
128
+ }, M = (t, [n, e]) => (!n.length || n[0] >= 0 && n[0] < t.children.length) && e >= 0 && e <= k(O(t, n)), C = (t, n) => {
129
+ switch (n.type) {
130
+ case a:
131
+ {
132
+ const {start: e, end: r} = n;
133
+ if (-1 !== c(t, e)) return -1 === c(r, t) ? [ S(t[0], D(e[0]) - D(r[0])), t[1] + (0 === i(r[0], t[0]) ? e[1] - r[1] : 0) ] : e;
134
+ break;
135
+ }
136
+
137
+ case d:
138
+ case h:
139
+ {
140
+ const e = n.at, r = n.type === d ? l(n.text) : n.fragment, o = r.length, s = o - 1;
141
+ if (-1 !== c(t, e)) return [ S(t[0], s), t[1] + (0 === i(t[0], e[0]) ? k(r[o - 1]) - (0 === s ? 0 : e[1]) : 0) ];
142
+ break;
143
+ }
144
+ }
145
+ return t;
146
+ }, A = (t, n) => [ C(t[0], n), C(t[1], n) ], I = (t, n, e) => {
147
+ switch (e.type) {
148
+ case a:
149
+ {
150
+ const {start: r, end: o} = e;
151
+ M(t, r) && M(t, o) && -1 === c(r, o) && (t = _(t, r, o, []), n = A(n, e));
152
+ break;
153
+ }
154
+
155
+ case d:
156
+ {
157
+ const {at: r, text: o} = e;
158
+ M(t, r) && o && (t = _(t, r, r, o), n = A(n, e));
159
+ break;
160
+ }
161
+
162
+ case h:
163
+ {
164
+ const {at: r, fragment: o} = e;
165
+ M(t, r) && o.length && (t = _(t, r, r, o), n = A(n, e));
166
+ break;
167
+ }
168
+
169
+ case p:
170
+ {
171
+ const {start: n, end: r, key: o, value: s} = e;
172
+ M(t, n) && M(t, r) && -1 === c(n, r) && (t = _(t, n, r, v(t, n, r).map(t => t.map(t => g(t) ? {
173
+ ...t,
174
+ [o]: s
175
+ } : t))));
176
+ break;
177
+ }
178
+ }
179
+ return [ t, n ];
180
+ };
181
+
182
+ function F(t = u(this.selection)) {
183
+ this.apply((new y).delete(...t));
184
+ }
185
+
186
+ function H(t, n = this.selection[0]) {
187
+ this.apply((new y).insertText(n, t));
188
+ }
189
+
190
+ function P(t, n = this.selection[0]) {
191
+ this.apply((new y).insertFragment(n, [ [ t ] ]));
192
+ }
193
+
194
+ function R(t, n = this.selection[0], e = !0) {
195
+ const r = (new y).insertFragment(n, [ t ]);
196
+ if (e) {
197
+ const t = r.transform(n);
198
+ r.selection = [ t, t ];
199
+ }
200
+ this.apply(r);
201
+ }
202
+
203
+ function B(t) {
204
+ const [n, e] = u(this.selection);
205
+ this.apply((new y).delete(n, e).insertText(n, t));
206
+ }
207
+
208
+ function T(t) {
209
+ const n = this.doc;
210
+ this.apply((new y).delete([ [], 0 ], [ [ n.children.length - 1 ], k(n.children[n.children.length - 1]) ]).insertText([ [], 0 ], t));
211
+ }
212
+
213
+ function V(t, n, e = u(this.selection)) {
214
+ this.apply((new y).attr(...e, t, n));
215
+ }
216
+
217
+ function L(t, n = u(this.selection)) {
218
+ const e = v(this.doc, ...n).flatMap(t => t.filter(g));
219
+ e.length && this.apply((new y).attr(...n, t, !!e.some(n => !n[t])));
220
+ }
221
+
222
+ const N = t => "at" in t ? [ t.at, t.at ] : [ t.start, t.end ];
223
+
224
+ let q = null, z = null, J = null, U = null;
225
+
226
+ const G = t => 1 === t.nodeType, j = t => 8 === t.nodeType, W = () => z, X = () => {
227
+ const t = Y();
228
+ return 1 === t ? z.data.length : 2 === t ? 1 : 0;
229
+ }, Y = () => {
230
+ if (null != J) return J;
231
+ if (z) if ((t => 3 === t.nodeType)(z)) {
232
+ const t = z.data;
233
+ if (t) return J = "\n" === t ? $() ? 3 : 6 : 1;
234
+ } else if (G(z)) {
235
+ if ("BR" === z.tagName) return J = $() ? 3 : 5;
236
+ if (U.o(z)) return J = 2;
237
+ if (U.i(z)) return J = 4;
238
+ }
239
+ return J = 0;
240
+ }, K = () => (J = null, z = q.nextNode()), Q = () => {
241
+ for (;(J = null) || (z = q.nextSibling()); ) if (4 === Y()) return;
242
+ }, Z = () => {
243
+ for (;(J = null) || (z = q.parentNode()); ) if (4 === Y()) return;
244
+ }, $ = () => {
245
+ const t = z.parentNode;
246
+ return nt(() => {
247
+ for (;K(); ) {
248
+ if (Y()) return !0;
249
+ if (!t.contains(z)) break;
250
+ }
251
+ return !1;
252
+ });
253
+ }, tt = () => {
254
+ for (;;) {
255
+ if (2 === Y()) {
256
+ const t = z;
257
+ for (;K() && t.contains(z); ) ;
258
+ } else K();
259
+ if (!z) break;
260
+ const t = Y();
261
+ if (t) return t;
262
+ }
263
+ }, nt = (t, n, e, r) => {
264
+ const o = U, s = q, i = z, c = J;
265
+ try {
266
+ return e && (U = e, q = U.u.createTreeWalker(n, 5)), r && (q.currentNode = z = r),
267
+ t();
268
+ } finally {
269
+ U = o, q = s, z = i, J = c, q && i && (q.currentNode = i);
270
+ }
271
+ }, et = new Set([ "DIV", "H1", "H2", "H3", "H4", "H5", "H6", "P", "PRE", "LI", "DT", "DD", "TR" ]), rt = t => et.has(t.tagName), ot = new Set([ "EMBED", "IMG", "PICTURE", "AUDIO", "VIDEO", "SVG", "CANVAS", "MATH", "IFRAME", "OBJECT" ]), st = t => "false" === t.contentEditable || ot.has(t.tagName), it = (t, n) => t.compareDocumentPosition(n), ct = t => t.ownerDocument, ut = t => ct(t).getSelection(), ft = (t, n) => {
272
+ if (t.rangeCount) {
273
+ const e = t.getRangeAt(0);
274
+ if (n.contains(e.commonAncestorContainer)) return e;
275
+ }
276
+ }, lt = (t, n, e, r) => {
277
+ const o = ut(t);
278
+ return !(!e && !ft(o, t) || (o.removeAllRanges(), o.addRange(n), r && (o.collapseToEnd(),
279
+ o.extend(n.startContainer, n.startOffset)), 0));
280
+ }, at = (t, n, [e, r], o, s) => {
281
+ const i = c(e, r), u = 0 === i, f = 1 === i, l = f ? r : e, a = f ? e : r;
282
+ if (0 === l[0].length && 0 === l[1] && u && !n.hasChildNodes()) {
283
+ const e = t.createRange();
284
+ return e.setStart(n, 0), e.setEnd(n, 0), lt(n, e, s);
285
+ }
286
+ const d = dt(n, l, o);
287
+ if (!d) return !1;
288
+ const h = u ? d : dt(n, a, o);
289
+ if (!h) return !1;
290
+ const p = t.createRange(), [m, y] = d, [g, w] = h;
291
+ return G(m) ? y < 1 ? p.setStartBefore(m) : p.setStartAfter(m) : p.setStart(m, y),
292
+ G(g) ? w < 1 ? p.setEndBefore(g) : p.setEndAfter(g) : p.setEnd(g, w), lt(n, p, s, f);
293
+ }, dt = (t, [n, e], r) => nt(() => {
294
+ let t, r = 0;
295
+ for (;t = tt(); ) if (4 === t) {
296
+ if (r < n.length) for (let t = n[r++]; t > 0; t--) Q();
297
+ } else {
298
+ const t = X();
299
+ if (e <= t) return [ W(), e ];
300
+ e -= t;
301
+ }
302
+ }, t, r), ht = (n, e, r, o) => {
303
+ let s = !0;
304
+ if (n === e && !e.hasChildNodes()) return [ [], 0 ];
305
+ if (G(e) && !o.o(e) && e.hasChildNodes()) {
306
+ const n = t(r, e.childNodes.length - 1);
307
+ e = e.childNodes[n], s = n === r, r = 0;
308
+ }
309
+ return nt(() => {
310
+ 4 !== Y() && Z();
311
+ const t = nt(() => {
312
+ const t = [];
313
+ let e;
314
+ for (;(e = W()) && e !== n; ) t.unshift(e), Z();
315
+ if (!t.length) return [];
316
+ let r = 0, o = t[t.length - 1];
317
+ for (;o = o.previousElementSibling; ) r++;
318
+ return [ r ];
319
+ });
320
+ let o = 0;
321
+ for (;tt(); ) {
322
+ const t = it(e, W());
323
+ if (0 === t || 16 & t) {
324
+ if (s) break;
325
+ } else if (4 & t) break;
326
+ o += X();
327
+ }
328
+ return [ t, o + r ];
329
+ }, n, o, e);
330
+ }, pt = (t, n, {startOffset: e, startContainer: r, endOffset: o, endContainer: s}) => {
331
+ const i = ht(t, r, e, n);
332
+ return [ i, r === s && e === o ? i : ht(t, s, o, n) ];
333
+ }, mt = t => (n, e) => {
334
+ n.setData("text/plain", f({
335
+ children: e
336
+ }, t));
337
+ }, yt = () => (t, n, e) => {
338
+ const r = document.createElement("div");
339
+ r.appendChild(ft(ut(e), e).cloneContents()), t.setData("text/html", r.innerHTML);
340
+ }, gt = "application/x-edix-editor", wt = ({key: t = gt} = {}) => (n, e) => {
341
+ n.setData(t, JSON.stringify(e));
342
+ }, xt = t => n => {
343
+ for (const e of n.items) if ("file" === e.kind) {
344
+ const n = t[e.type];
345
+ if (n) {
346
+ const t = e.getAsFile();
347
+ if (t) return [ [ n(t) ] ];
348
+ }
349
+ }
350
+ return null;
351
+ }, kt = () => t => t.getData("text/plain"), bt = (t, n = []) => (e, r) => {
352
+ const o = e.getData("text/html");
353
+ if (o) {
354
+ let e = (new DOMParser).parseFromString(o, "text/html").body, s = !1;
355
+ for (const t of [ ...e.childNodes ]) j(t) ? "StartFragment" === t.data ? (s = !0,
356
+ e = new DocumentFragment) : "EndFragment" === t.data && (s = !1) : s && e.appendChild(t);
357
+ return ((t, n, e, r) => nt(() => {
358
+ let t, n = null, o = "", s = !1;
359
+ const i = [], c = () => {
360
+ o && (n || (n = []), n.push(e(o)), o = "");
361
+ }, u = () => {
362
+ c(), !n && s && (n = []), n && i.push(n), n = null, s = !1;
363
+ };
364
+ for (;t = tt(); ) if (4 === t) u(); else if (s = !0, 1 === t) o += W().data; else if (2 === t) {
365
+ c();
366
+ const t = r(W());
367
+ t && n.push(t);
368
+ } else 3 === t && u();
369
+ return u(), i.length || i.push([]), i;
370
+ }, t, n))(e, r, t, t => {
371
+ for (const e of n) {
372
+ const n = e(t);
373
+ if (n) return n;
374
+ }
375
+ });
376
+ }
377
+ return null;
378
+ }, Et = ({key: t = gt} = {}) => n => {
379
+ try {
380
+ return JSON.parse(n.getData(t));
381
+ } catch (t) {
382
+ return null;
383
+ }
384
+ }, Dt = (t, n, {mod: e, shift: r = !1, alt: o = !1} = {}) => (t = t.toLowerCase(),
385
+ s => {
386
+ if (s.key.toLowerCase() === t && (!e || s.ctrlKey || s.metaKey) && r === s.shiftKey && o === s.altKey) return n(s),
387
+ !0;
388
+ }), Ot = () => {}, St = ({doc: t, readonly: n = !1, schema: i, plugins: f, keyboard: l, copy: a = [ mt() ], paste: d = [ t => t.getData("text/plain") ], isBlock: h = rt, autoScroll: p = !1, onChange: w, onError: x = console.error}) => {
389
+ let k = [ [ [], 0 ], [ [], 0 ] ], b = Ot, E = null, D = 0;
390
+ const O = () => {
391
+ if (E && !D) {
392
+ const t = E;
393
+ D = requestAnimationFrame(() => {
394
+ D = 0, t.scrollTop = t.scrollHeight;
395
+ });
396
+ }
397
+ }, S = t => {
398
+ for (const n of t.children) for (const t of n) if (!g(t) || t.text.length > 0) return !1;
399
+ return !0;
400
+ };
401
+ let _ = S(t);
402
+ const A = (t, n) => {
403
+ if (!i) return n("An unsafe operation was detected. We recommend using schema option."),
404
+ !0;
405
+ const e = i["~standard"].validate(t);
406
+ if (e instanceof Promise) n("async validate is not supported."); else {
407
+ if (!e.issues) return !0;
408
+ n(e.issues.map(t => t.message).join("\n"));
409
+ }
410
+ return !1;
411
+ };
412
+ let F;
413
+ if (!A(t, t => {
414
+ F = t;
415
+ }) && F) throw Error(F);
416
+ const H = [ Dt("z", () => {
417
+ if (!n) {
418
+ const n = z.undo();
419
+ n && (t = n[0], _ = S(t), L(n[1]), w(t), p && O());
420
+ }
421
+ }, {
422
+ mod: !0
423
+ }), Dt("z", () => {
424
+ if (!n) {
425
+ const n = z.redo();
426
+ n && (t = n[0], _ = S(t), L(n[1]), w(t), p && O());
427
+ }
428
+ }, {
429
+ mod: !0,
430
+ shift: !0
431
+ }) ];
432
+ l && H.push(...l);
433
+ const P = [], R = [];
434
+ f && (f.forEach(({apply: t, mount: n}) => {
435
+ t && P.push(t), n && R.push(n);
436
+ }), f = void 0);
437
+ const B = [], T = (t, e) => {
438
+ if (!n) {
439
+ const n = !B.length;
440
+ B.unshift(t), e ? V() : n && s(V);
441
+ }
442
+ }, V = () => {
443
+ if (B.length) {
444
+ const n = t, r = [], o = P.length;
445
+ let s;
446
+ for (;s = B.pop(); ) {
447
+ for (let n of s.ops) {
448
+ let e = 0;
449
+ const s = () => {
450
+ if (e < o) {
451
+ const t = e;
452
+ P[e](n, i), t === e && i();
453
+ } else if (e === o) {
454
+ e++;
455
+ try {
456
+ const [e, o] = I(t, k, n);
457
+ m(n) && !A(e, x) || (t = e, k = o, r.push(n));
458
+ } catch (t) {
459
+ x("rollback operation: " + t);
460
+ }
461
+ }
462
+ }, i = t => {
463
+ t && (n = t), e++, s();
464
+ };
465
+ s();
466
+ }
467
+ s.selection && L(s.selection);
468
+ }
469
+ e(n, t) || (_ = S(t), z.change(t, r), w(t), p && O());
470
+ }
471
+ }, L = n => {
472
+ ((t, [n, e]) => M(t, n) && M(t, e))(t, n) && (k = n);
473
+ }, q = {
474
+ get doc() {
475
+ return t;
476
+ },
477
+ get isEmpty() {
478
+ return _;
479
+ },
480
+ get selection() {
481
+ return k;
482
+ },
483
+ set selection(t) {
484
+ L(t);
485
+ },
486
+ get readonly() {
487
+ return n;
488
+ },
489
+ set readonly(t) {
490
+ n = t, b();
491
+ },
492
+ get autoScroll() {
493
+ return p;
494
+ },
495
+ set autoScroll(t) {
496
+ p = t;
497
+ },
498
+ apply: (t, ...n) => (o(t) ? t.call(q, ...n) : T(t, n[0]), q),
499
+ input: e => {
500
+ if (E = e, !window.InputEvent || !o(InputEvent.prototype.getTargetRanges)) return x("beforeinput event is not supported."),
501
+ Ot;
502
+ const {contentEditable: s, role: i, ariaMultiLine: f, ariaReadOnly: l} = e, p = e.style.whiteSpace;
503
+ e.role = "textbox", e.style.whiteSpace = "pre-wrap", e.ariaMultiLine = "true";
504
+ let m = !1, g = !1, w = null, O = !1, S = !1, _ = !1;
505
+ const M = ct(e), C = {
506
+ u: M,
507
+ i: h,
508
+ o: st
509
+ };
510
+ b = () => {
511
+ e.contentEditable = n ? "false" : "true", e.ariaReadOnly = n ? "true" : null;
512
+ }, b();
513
+ const A = t => {
514
+ for (const n of d) {
515
+ const e = n(t, C);
516
+ if (e) return e;
517
+ }
518
+ x("failed to serialize pasted data");
519
+ }, I = ((t, n) => {
520
+ let e = !1;
521
+ const r = [], o = t => {
522
+ e && r.push(...t);
523
+ }, s = new MutationObserver(t => {
524
+ o(t), e || n();
525
+ }), i = () => {
526
+ o(s.takeRecords());
527
+ };
528
+ return s.observe(t, {
529
+ characterData: !0,
530
+ characterDataOldValue: !0,
531
+ childList: !0,
532
+ subtree: !0
533
+ }), {
534
+ l(t) {
535
+ !e && t && i(), e = t;
536
+ },
537
+ h: () => (i(), r.splice(0)),
538
+ p() {
539
+ r.splice(0), s.disconnect();
540
+ }
541
+ };
542
+ })(e, () => {
543
+ at(M, e, k, C);
544
+ }), F = () => {
545
+ L(((t, n) => {
546
+ const e = ut(t), r = ft(e, t);
547
+ if (!r) return [ [ [], 0 ], [ [], 0 ] ];
548
+ const o = pt(t, n, r), s = it(e.anchorNode, e.focusNode);
549
+ return (0 === s ? e.anchorOffset > e.focusOffset : 2 & s) ? [ o[1], o[0] ] : o;
550
+ })(e, C));
551
+ }, P = () => {
552
+ const t = I.h();
553
+ if (I.l(!1), t.length) {
554
+ let n;
555
+ for (;n = t.pop(); ) if ("childList" === n.type) {
556
+ const {target: t, removedNodes: e, addedNodes: r, nextSibling: o} = n;
557
+ for (let n = e.length - 1; n >= 0; n--) t.insertBefore(e[n], o);
558
+ for (let n = r.length - 1; n >= 0; n--) t.removeChild(r[n]);
559
+ } else n.target.nodeValue = n.oldValue;
560
+ I.h(), g = at(M, e, k, C, !0);
561
+ }
562
+ w && (L(w[1]), T(w[0]), w = null), O = !1;
563
+ }, B = t => {
564
+ if (!O) for (const n of H) if (n(t)) return t.preventDefault(), void I.l(!1);
565
+ }, V = () => {
566
+ O || P();
567
+ }, N = t => {
568
+ t.preventDefault();
569
+ const n = t.inputType;
570
+ if (n.startsWith("format")) return;
571
+ if ("historyUndo" === n || "historyRedo" === n) return;
572
+ O ? I.l(!0) : F();
573
+ const r = t.getTargetRanges()[0];
574
+ if (r) {
575
+ const o = pt(e, C, r);
576
+ let s, i = "insertParagraph" === n || "insertLineBreak" === n ? "\n" : t.data;
577
+ if (null == i) {
578
+ const n = t.dataTransfer;
579
+ n && (i = n.getData("text/plain"));
580
+ }
581
+ w || (w = [ new y, k ]), s = w[0], 0 !== c(...o) && s.delete(...o), i && s.insertText(o[0], i);
582
+ }
583
+ O || P();
584
+ }, q = () => {
585
+ O || F(), O = !0;
586
+ }, z = () => {
587
+ P();
588
+ }, J = () => {
589
+ S = !0, F();
590
+ }, U = () => {
591
+ S = !1;
592
+ }, G = () => {
593
+ g ? g = !1 : !S || O || _ || F();
594
+ }, j = n => {
595
+ F(), 0 !== c(...k) && ((t, n) => {
596
+ for (const r of a) r(t, n, e);
597
+ })(n, v(t, ...u(k)));
598
+ }, W = t => {
599
+ t.preventDefault(), j(t.clipboardData);
600
+ }, X = t => {
601
+ t.preventDefault(), n || (j(t.clipboardData), T((new y).delete(...u(k))));
602
+ }, Y = t => {
603
+ t.preventDefault();
604
+ const n = A(t.clipboardData);
605
+ if (n) {
606
+ const [t, e] = u(k), o = (new y).delete(t, e);
607
+ r(n) ? o.insertText(t, n) : o.insertFragment(t, n), T(o);
608
+ }
609
+ }, K = t => {
610
+ t.preventDefault();
611
+ const n = t.dataTransfer, o = ((t, n, {clientX: e, clientY: r}, o) => {
612
+ if (t.caretPositionFromPoint) {
613
+ const s = t.caretPositionFromPoint(e, r);
614
+ if (s) return ht(n, s.offsetNode, s.offset, o);
615
+ } else if (t.caretRangeFromPoint) {
616
+ const s = t.caretRangeFromPoint(e, r);
617
+ if (s) return ht(n, s.startContainer, s.startOffset, o);
618
+ }
619
+ })(M, e, t, C);
620
+ if (n && o) {
621
+ const t = new y;
622
+ _ && t.delete(...u(k));
623
+ const s = A(n);
624
+ if (s) {
625
+ const n = t.transform(o);
626
+ r(s) ? t.insertText(n, s) : t.insertFragment(n, s), t.selection = [ n, t.transform(o) ];
627
+ }
628
+ T(t), e.focus({
629
+ preventScroll: !0
630
+ });
631
+ }
632
+ }, Q = t => {
633
+ _ = !0, j(t.dataTransfer);
634
+ }, Z = () => {
635
+ _ = !1;
636
+ };
637
+ M.addEventListener("selectionchange", G), e.addEventListener("keydown", B), e.addEventListener("input", V),
638
+ e.addEventListener("beforeinput", N), e.addEventListener("compositionstart", q),
639
+ e.addEventListener("compositionend", z), e.addEventListener("focus", J), e.addEventListener("blur", U),
640
+ e.addEventListener("copy", W), e.addEventListener("cut", X), e.addEventListener("paste", Y),
641
+ e.addEventListener("drop", K), e.addEventListener("dragstart", Q), e.addEventListener("dragend", Z);
642
+ const $ = [];
643
+ return R.forEach(t => {
644
+ const n = t(e);
645
+ n && $.push(n);
646
+ }), () => {
647
+ m || (m = !0, D && (cancelAnimationFrame(D), D = 0), E = null, b = Ot, e.contentEditable = s,
648
+ e.role = i, e.ariaMultiLine = f, e.ariaReadOnly = l, e.style.whiteSpace = p, I.p(),
649
+ M.removeEventListener("selectionchange", G), e.removeEventListener("keydown", B),
650
+ e.removeEventListener("input", V), e.removeEventListener("beforeinput", N), e.removeEventListener("compositionstart", q),
651
+ e.removeEventListener("compositionend", z), e.removeEventListener("focus", J), e.removeEventListener("blur", U),
652
+ e.removeEventListener("copy", W), e.removeEventListener("cut", X), e.removeEventListener("paste", Y),
653
+ e.removeEventListener("drop", K), e.removeEventListener("dragstart", Q), e.removeEventListener("dragend", Z),
654
+ $.forEach(t => {
655
+ t();
656
+ }));
657
+ };
658
+ }
659
+ }, z = (t => {
660
+ let n = 0, e = 0;
661
+ const r = Date.now, o = [ [ t, [] ] ], s = () => o[n];
662
+ return {
663
+ change: (t, s) => {
664
+ const i = r();
665
+ (0 === n || i - e >= 500) && (n++, n >= o.length ? o.push([ t, [] ]) : o[n][1].splice(0)),
666
+ e = i, o[n][0] = t, o[n][1].push(...s), o.splice(n + 1), n > 500 && (n--, o.shift());
667
+ },
668
+ undo: () => {
669
+ if (n > 0) {
670
+ const t = s()[1];
671
+ return n--, [ s()[0], N(t[0]) ];
672
+ }
673
+ },
674
+ redo: () => {
675
+ if (n < o.length - 1) {
676
+ n++;
677
+ const [t, e] = s(), r = e[e.length - 1], o = N(r);
678
+ return [ t, [ C(o[0], r), C(o[1], r) ] ];
679
+ }
680
+ }
681
+ };
682
+ })(t);
683
+ return q;
684
+ }, _t = () => ({
685
+ mount: t => {
686
+ t.ariaMultiLine = null;
687
+ },
688
+ apply: (t, n) => {
689
+ "insert_text" === t.type ? t = {
690
+ ...t,
691
+ text: t.text.replaceAll("\n", "")
692
+ } : "insert_node" === t.type && (t = {
693
+ ...t,
694
+ fragment: [ b(...t.fragment) ]
695
+ }), n(t);
696
+ }
697
+ }), vt = t => {
698
+ let n = "";
699
+ for (let e = 0; e < t.length; e++) {
700
+ const r = t[e];
701
+ g(r) && (n += r.text);
702
+ }
703
+ return n;
704
+ }, Mt = ({text: t, singleline: n, plugins: e = [], onChange: r, ...o}) => {
705
+ const s = [ ...e ];
706
+ n && s.unshift(_t());
707
+ const i = l(t);
708
+ let c = i;
709
+ return St({
710
+ ...o,
711
+ doc: {
712
+ children: i
713
+ },
714
+ plugins: s,
715
+ onChange: t => {
716
+ const n = ((t, n) => {
717
+ const e = t.length, r = n.length, o = Math.min(e, r);
718
+ let s = 0;
719
+ for (;s < o && t[s] === n[s]; ) s++;
720
+ let i = e, c = r;
721
+ for (;i > s && c > s && t[i - 1] === n[c - 1]; ) i--, c--;
722
+ const u = c - s, f = Array(u);
723
+ for (let t = 0; t < u; t++) f[t] = vt(n[s + t]);
724
+ return {
725
+ start: s,
726
+ oldCount: i - s,
727
+ newCount: u,
728
+ lines: f
729
+ };
730
+ })(c, t.children);
731
+ c = t.children, r(f(t), n);
732
+ }
733
+ });
734
+ };
735
+
736
+ export { F as Delete, V as Format, P as InsertNode, R as InsertNodes, H as InsertText, T as ReplaceAll, B as ReplaceText, L as ToggleFormat, y as Transaction, St as createEditor, Mt as createPlainEditor, xt as filePaste, Dt as hotkey, yt as htmlCopy, bt as htmlPaste, wt as internalCopy, Et as internalPaste, mt as plainCopy, kt as plainPaste, _t as singlelinePlugin };
737
+ //# sourceMappingURL=index.js.map