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