edytor 0.0.6 → 0.0.8

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 (107) hide show
  1. package/README.md +225 -5
  2. package/dist/block/block.svelte.d.ts +123 -0
  3. package/dist/block/block.svelte.js +430 -0
  4. package/dist/block/block.utils.d.ts +82 -0
  5. package/dist/block/block.utils.js +499 -0
  6. package/dist/block/content.svelte.d.ts +14 -0
  7. package/dist/block/content.svelte.js +40 -0
  8. package/dist/block/inlineBlock.svelte.d.ts +30 -0
  9. package/dist/block/inlineBlock.svelte.js +53 -0
  10. package/dist/components/Block.svelte +27 -0
  11. package/dist/components/Block.svelte.d.ts +7 -0
  12. package/dist/components/Content.svelte +44 -0
  13. package/dist/components/Content.svelte.d.ts +7 -0
  14. package/dist/components/Edytor.svelte +165 -0
  15. package/dist/components/Edytor.svelte.d.ts +33 -0
  16. package/dist/components/InlineBlock.svelte +17 -0
  17. package/dist/components/InlineBlock.svelte.d.ts +7 -0
  18. package/dist/components/Mark.svelte +38 -0
  19. package/dist/components/Mark.svelte.d.ts +11 -0
  20. package/dist/components/ReadonlyEditor.svelte +46 -0
  21. package/dist/components/ReadonlyEditor.svelte.d.ts +4 -0
  22. package/dist/components/Text.svelte +37 -0
  23. package/dist/components/Text.svelte.d.ts +7 -0
  24. package/dist/components/readonlyElements.svelte.d.ts +82 -0
  25. package/dist/components/readonlyElements.svelte.js +144 -0
  26. package/dist/constants.d.ts +4 -0
  27. package/dist/constants.js +4 -0
  28. package/dist/dnd.svelte.d.ts +17 -0
  29. package/dist/dnd.svelte.js +125 -0
  30. package/dist/edytor.svelte.d.ts +94 -0
  31. package/dist/edytor.svelte.js +262 -0
  32. package/dist/edytor.utils.d.ts +3 -0
  33. package/dist/edytor.utils.js +78 -0
  34. package/dist/events/onBeforeInput.d.ts +2 -2
  35. package/dist/events/onBeforeInput.js +338 -0
  36. package/dist/events/onKeyDown.d.ts +2 -69
  37. package/dist/events/onKeyDown.js +18 -0
  38. package/dist/hotkeys.d.ts +27 -0
  39. package/dist/hotkeys.js +282 -0
  40. package/dist/index.d.ts +1 -5
  41. package/dist/index.js +2 -8
  42. package/dist/localProvider.d.ts +82 -0
  43. package/dist/localProvider.js +267 -0
  44. package/dist/plugins/arrowMove/arrowMove.d.ts +2 -0
  45. package/dist/plugins/arrowMove/arrowMove.js +66 -0
  46. package/dist/plugins/code/CodePlugin.svelte +218 -0
  47. package/dist/plugins/code/CodePlugin.svelte.d.ts +23 -0
  48. package/dist/plugins/code/prism.css +141 -0
  49. package/dist/plugins/image/ImagePlugin.svelte +22 -0
  50. package/dist/plugins/image/ImagePlugin.svelte.d.ts +20 -0
  51. package/dist/plugins/mention/MentionPlugin.svelte +40 -0
  52. package/dist/plugins/mention/MentionPlugin.svelte.d.ts +20 -0
  53. package/dist/plugins/richtext/RichTextPlugin.svelte +241 -0
  54. package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +26 -0
  55. package/dist/plugins.d.ts +202 -0
  56. package/dist/plugins.js +19 -0
  57. package/dist/selection/selection.svelte.d.ts +68 -0
  58. package/dist/selection/selection.svelte.js +391 -0
  59. package/dist/selection/selection.utils.d.ts +14 -0
  60. package/dist/selection/selection.utils.js +153 -0
  61. package/dist/text/deltas.d.ts +11 -0
  62. package/dist/text/deltas.js +109 -0
  63. package/dist/text/text.svelte.d.ts +70 -0
  64. package/dist/text/text.svelte.js +119 -0
  65. package/dist/text/text.utils.d.ts +40 -0
  66. package/dist/text/text.utils.js +174 -0
  67. package/dist/utils/json.d.ts +32 -0
  68. package/dist/utils/json.js +2 -0
  69. package/dist/utils/jsx.d.ts +25 -0
  70. package/dist/utils/jsx.js +66 -0
  71. package/dist/utils/serialize.d.ts +1 -0
  72. package/dist/utils/serialize.js +1 -0
  73. package/dist/utils.d.ts +6 -0
  74. package/dist/utils.js +19 -0
  75. package/package.json +81 -33
  76. package/dist/edytor.cjs.development.js +0 -1763
  77. package/dist/edytor.cjs.development.js.map +0 -1
  78. package/dist/edytor.cjs.production.min.js +0 -2
  79. package/dist/edytor.cjs.production.min.js.map +0 -1
  80. package/dist/edytor.esm.js +0 -1692
  81. package/dist/edytor.esm.js.map +0 -1
  82. package/dist/events/index.d.ts +0 -3
  83. package/dist/events/onDrop.d.ts +0 -3
  84. package/dist/operations/deleteText.d.ts +0 -7
  85. package/dist/operations/formatText.d.ts +0 -20
  86. package/dist/operations/index.d.ts +0 -9
  87. package/dist/operations/insertText.d.ts +0 -5
  88. package/dist/operations/merge.d.ts +0 -3
  89. package/dist/operations/moveNode.d.ts +0 -12
  90. package/dist/operations/nestNode.d.ts +0 -2
  91. package/dist/operations/removeEmptyText.d.ts +0 -2
  92. package/dist/operations/splitLeaf.d.ts +0 -2
  93. package/dist/operations/splitNode.d.ts +0 -9
  94. package/dist/types.d.ts +0 -140
  95. package/dist/utils/common.d.ts +0 -17
  96. package/dist/utils/dropper.d.ts +0 -26
  97. package/dist/utils/index.d.ts +0 -6
  98. package/dist/utils/leaves.d.ts +0 -34
  99. package/dist/utils/nodes.d.ts +0 -14
  100. package/dist/utils/selection.d.ts +0 -51
  101. package/dist/utils/yClasses/EdytorDoc.d.ts +0 -16
  102. package/dist/utils/yClasses/index.d.ts +0 -3
  103. package/dist/utils/yClasses/yLeaf.d.ts +0 -7
  104. package/dist/utils/yClasses/yNode.d.ts +0 -12
  105. package/dist/yjs/index.d.ts +0 -1
  106. package/dist/yjs/wsProvider.d.ts +0 -1
  107. package/index.ts +0 -1
@@ -1,1763 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
-
7
- var yjs = require('yjs');
8
- var nanoid$1 = require('nanoid');
9
- var isHotkey = _interopDefault(require('is-hotkey'));
10
- var yWebsocket = require('y-websocket');
11
-
12
- function _extends() {
13
- _extends = Object.assign || function (target) {
14
- for (var i = 1; i < arguments.length; i++) {
15
- var source = arguments[i];
16
-
17
- for (var key in source) {
18
- if (Object.prototype.hasOwnProperty.call(source, key)) {
19
- target[key] = source[key];
20
- }
21
- }
22
- }
23
-
24
- return target;
25
- };
26
-
27
- return _extends.apply(this, arguments);
28
- }
29
-
30
- function _inheritsLoose(subClass, superClass) {
31
- subClass.prototype = Object.create(superClass.prototype);
32
- subClass.prototype.constructor = subClass;
33
-
34
- _setPrototypeOf(subClass, superClass);
35
- }
36
-
37
- function _setPrototypeOf(o, p) {
38
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
39
- o.__proto__ = p;
40
- return o;
41
- };
42
-
43
- return _setPrototypeOf(o, p);
44
- }
45
-
46
- function _objectWithoutPropertiesLoose(source, excluded) {
47
- if (source == null) return {};
48
- var target = {};
49
- var sourceKeys = Object.keys(source);
50
- var key, i;
51
-
52
- for (i = 0; i < sourceKeys.length; i++) {
53
- key = sourceKeys[i];
54
- if (excluded.indexOf(key) >= 0) continue;
55
- target[key] = source[key];
56
- }
57
-
58
- return target;
59
- }
60
-
61
- var _excluded = ["id", "text", "data"];
62
- var createLeaf$1 = function createLeaf(props) {
63
- var leaf = new yjs.Map();
64
- leaf.set("id", (props == null ? void 0 : props.id) || nanoid());
65
- leaf.set("text", new yjs.Text((props == null ? void 0 : props.text) || ""));
66
-
67
- if (props) {
68
- var text = props.text,
69
- data = props.data,
70
- marks = _objectWithoutPropertiesLoose(props, _excluded);
71
-
72
- leaf.set("text", new yjs.Text(text || ""));
73
- data && leaf.set("data", new yjs.Map(Object.entries(data)));
74
- marks && Object.keys(marks).forEach(function (mark) {
75
- leaf.set(mark, marks[mark]);
76
- });
77
- }
78
-
79
- return leaf;
80
- };
81
-
82
- var createNode = function createNode(type, props) {
83
- var node = new yjs.Map();
84
- node.set("id", (props == null ? void 0 : props.id) || nanoid());
85
- node.set("type", type);
86
-
87
- if (props != null && props.data) {
88
- node.set("data", new yjs.Map(Object.entries(props.data)));
89
- }
90
-
91
- node.set("content", (props == null ? void 0 : props.content) instanceof yjs.Array ? props.content : yjs.Array.from((props == null ? void 0 : props.content) || [createLeaf$1()]));
92
- node.set("children", (props == null ? void 0 : props.children) instanceof yjs.Array ? props.children : yjs.Array.from((props == null ? void 0 : props.children) || []));
93
- return node;
94
- };
95
- var YNode = /*#__PURE__*/function (_Map) {
96
- _inheritsLoose(YNode, _Map);
97
-
98
- function YNode() {
99
- return _Map.apply(this, arguments) || this;
100
- }
101
-
102
- return YNode;
103
- }(yjs.Map);
104
-
105
- var _excluded$1 = ["type", "content", "children"];
106
- var getChildren = function getChildren(_ref) {
107
- var type = _ref.type,
108
- _ref$content = _ref.content,
109
- content = _ref$content === void 0 ? [] : _ref$content,
110
- _ref$children = _ref.children,
111
- children = _ref$children === void 0 ? [] : _ref$children,
112
- props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
113
-
114
- return createNode(type, _extends({}, props, {
115
- children: children.map(getChildren),
116
- content: content.map(createLeaf$1)
117
- }));
118
- };
119
- var EdytorDoc = /*#__PURE__*/function (_Doc) {
120
- _inheritsLoose(EdytorDoc, _Doc);
121
-
122
- function EdytorDoc() {
123
- return _Doc.apply(this, arguments) || this;
124
- }
125
-
126
- return EdytorDoc;
127
- }(yjs.Doc);
128
- var DocFromJson = function DocFromJson(value, initialDoc) {
129
- var array = (initialDoc || new yjs.Doc()).getArray("children");
130
- array.insert(0, value.map(getChildren));
131
- return array.doc;
132
- };
133
-
134
- var deleteText = function deleteText(editor, _ref) {
135
- var mode = _ref.mode,
136
- selection = _ref.selection;
137
-
138
- var _ref2 = selection || editor.selection,
139
- start = _ref2.start,
140
- end = _ref2.end,
141
- type = _ref2.type,
142
- length = _ref2.length,
143
- edges = _ref2.edges,
144
- setPosition = _ref2.setPosition;
145
-
146
- switch (type) {
147
- case "collapsed":
148
- {
149
- if (mode === "backward" && edges.startNode) {
150
- if (edges.startDocument) return; // unnest node if its the last of its parent and if he is nested or it's the first its the only child of its parent
151
-
152
- if (start.nodeIndex === start.node.parent.length - 1 && start.path.length > 2 && (start.nodeIndex !== 0 || start.node.parent.length === 1)) {
153
- var node = copyNode(start.node);
154
- var nodeGrandParent = start.node.parent.parent;
155
- var index = getIndex(nodeGrandParent);
156
- start.node.parent["delete"](start.nodeIndex);
157
- nodeGrandParent.parent.insert(index + 1, [node]);
158
- return setPosition(start.leafId, {
159
- offset: 0
160
- });
161
- } else {
162
- return editor.doc.transact(function () {
163
- var _mergeContentWithPrev = mergeContentWithPrevLeaf(editor),
164
- prevLeaf = _mergeContentWithPrev[0],
165
- offset = _mergeContentWithPrev[1];
166
-
167
- setTimeout(function () {
168
- setPosition(prevLeaf.get("id"), {
169
- offset: offset
170
- });
171
- });
172
- });
173
- }
174
- }
175
-
176
- if (mode === "backward" && edges.startLeaf) {
177
- // delete content in the prev leaf because we are at its edge start, and escape current leaf
178
- var prevLeaf = leafNodeContent(start.leaf).get(start.leafIndex - 1);
179
- deleteLeafText(prevLeaf, leafLength(prevLeaf) - 1, length || 1);
180
- return setPosition(prevLeaf.get("id"), {
181
- offset: leafLength(prevLeaf)
182
- });
183
- }
184
-
185
- if (mode === "forward" && edges.endNode) {
186
- // merge node with the next node because we are at edge end of it
187
- return editor.doc.transact(function () {
188
- mergeContentWithNextLeaf(editor);
189
- setTimeout(function () {
190
- setPosition(start.leafId, {
191
- offset: start.offset
192
- });
193
- });
194
- });
195
- }
196
-
197
- if (mode === "forward" && edges.endLeaf) {
198
- // delete content in the next leaf because we are at its edge end
199
- var nextLeaf = leafNodeContent(start.leaf).get(start.leafIndex + 1);
200
- return deleteLeafText(nextLeaf, 0, length || 1);
201
- } // just delete text
202
-
203
-
204
- deleteLeafText(start.leaf, start.offset + (mode === "backward" ? -length || -1 : length), length || 1);
205
- setPosition(start.leaf.get("id"), {
206
- offset: start.offset + (mode === "backward" ? -length || -1 : length)
207
- });
208
- break;
209
- }
210
-
211
- case "singlenode":
212
- {
213
- deleteLeafText(start.leaf, start.offset, length, true);
214
-
215
- if (isNodeContentEmpty(start.node)) {
216
- leafNodeContent(start.leaf).insert(0, [createLeaf$1()]);
217
- }
218
-
219
- setPosition(start.leafId, {
220
- offset: start.offset
221
- });
222
- break;
223
- }
224
-
225
- case "multileaves":
226
- case "multinodes":
227
- {
228
- var startPathString = start.path.join(",");
229
- var endPathString = end.path.join(",");
230
- editor.doc.transact(function () {
231
- var _LeavesHarvest = new LeavesHarvest(),
232
- reap = _LeavesHarvest.reap,
233
- burn = _LeavesHarvest.burn;
234
-
235
- traverse(editor, function (leaf, isText) {
236
- if (isText) {
237
- var path = getPath(leaf);
238
- var l = leafLength(leaf);
239
-
240
- if (path.join(",") === startPathString) {
241
- deleteLeafText(leaf, start.offset, l);
242
- reap(leaf, false);
243
- } else if (path > start.path && path < end.path) {
244
- deleteLeafText(leaf, 0, l);
245
- reap(leaf, true);
246
- } else if (path.join(",") === endPathString) {
247
- deleteLeafText(leaf, 0, end.offset);
248
- reap(leaf, end.offset === l);
249
- }
250
- }
251
- }, {
252
- start: start.path[0],
253
- end: end.path[0] + 1
254
- });
255
- return burn(editor);
256
- });
257
- }
258
- setPosition(start.leaf.get("id"), {
259
- offset: start.offset
260
- });
261
- break;
262
- }
263
- };
264
-
265
- var applyMarksFromParent = function applyMarksFromParent(parent, leafs) {
266
- Array.from(parent.keys(), function (key) {
267
- if (key !== "text" && key !== "id" && key !== "data") {
268
- leafs.forEach(function (leaf) {
269
- leaf.set(key, parent.get(key));
270
- });
271
- }
272
- });
273
- };
274
- var formatAtEqualPath = function formatAtEqualPath(_ref) {
275
- var format = _ref.format,
276
- value = _ref.value,
277
- start = _ref.start,
278
- end = _ref.end;
279
- var length = end.offset - start.offset;
280
- var leaf = start.leaf;
281
- var text = leafText(leaf);
282
- var content = text.toString();
283
- var index = getIndex(leaf);
284
- var isMarkActive = leaf.has(format);
285
-
286
- if (isMarkActive && leafLength(leaf) === length) {
287
- leaf["delete"](format);
288
- return leaf;
289
- } else {
290
- var remainingText = content.substring(end.offset, leafLength(leaf));
291
-
292
- if (remainingText.length == 0 && leafLength(leaf) === end.offset - start.offset) {
293
- leaf.set(format, value);
294
- return leaf;
295
- } else {
296
- var _extends2;
297
-
298
- deleteLeafText(leaf, start.offset, leafLength(leaf));
299
- var formatedLeaf = createLeaf$1(_extends({}, leaf.toJSON(), (_extends2 = {
300
- id: undefined
301
- }, _extends2[format] = value, _extends2.text = content.substring(start.offset, end.offset), _extends2)));
302
- var newLeaves = [formatedLeaf];
303
-
304
- if (remainingText.length > 0) {
305
- newLeaves.push(createLeaf$1(_extends({}, leaf.toJSON(), {
306
- id: undefined,
307
- text: remainingText
308
- })));
309
- }
310
-
311
- if (isMarkActive) {
312
- formatedLeaf["delete"](format);
313
- }
314
-
315
- newLeaves.length && leafNodeContent(leaf).insert(index + 1, newLeaves);
316
- return formatedLeaf;
317
- }
318
- }
319
- };
320
- var formatText = function formatText(editor, mark) {
321
- var _Object$entries = Object.entries(mark),
322
- _Object$entries$ = _Object$entries[0],
323
- format = _Object$entries$[0],
324
- value = _Object$entries$[1];
325
-
326
- console.log(format);
327
- var newPath = 0;
328
- var _editor$selection = editor.selection,
329
- start = _editor$selection.start,
330
- end = _editor$selection.end,
331
- type = _editor$selection.type,
332
- length = _editor$selection.length,
333
- setPosition = _editor$selection.setPosition,
334
- selectedText = _editor$selection.selectedText;
335
- editor.doc.transact(function () {
336
- switch (type) {
337
- case "collapsed":
338
- {
339
- var isMarkActive = start.leaf.has(format) && start.leaf.get(format) === value;
340
-
341
- if (isLeafEmpty(start.leaf)) {
342
- // if the leaf is empty we only toggle the mark
343
- isMarkActive ? start.leaf["delete"](format) : start.leaf.set(format, value);
344
- } else {
345
- var _createLeaf;
346
-
347
- // if leaf is not empty we split the current leaf in half to insert an empty fragment with the desired mark
348
- splitLeaf(editor);
349
- var fragment = createLeaf$1((_createLeaf = {
350
- text: ""
351
- }, _createLeaf[format] = value, _createLeaf)); // we are applying the current marks on the fragment
352
-
353
- applyMarksFromParent(start.leaf, [fragment]); // we remove the mark if its here
354
-
355
- if (isMarkActive) fragment["delete"](format); // we insert the fragment after the spitted leaf
356
-
357
- leafNodeContent(start.leaf).insert(start.leafIndex + 1, [fragment]); // we remove the spitted leaf if empty
358
-
359
- if (isLeafEmpty(start.leaf)) {
360
- leafNodeContent(start.leaf)["delete"](start.leafIndex);
361
- }
362
-
363
- setTimeout(function () {
364
- setPosition(fragment.get("id"), {
365
- offset: 0
366
- });
367
- console.log(leafNodeContent(start.leaf).toJSON());
368
- });
369
- } // we merge leaves to avoid two subsequent leaves with the same marks
370
-
371
-
372
- mergeLeafs(leafNodeContent(start.leaf));
373
- break;
374
- }
375
-
376
- case "singlenode":
377
- {
378
- var formatedLeaf = formatAtEqualPath({
379
- format: format,
380
- value: value,
381
- start: start,
382
- end: end,
383
- length: length
384
- });
385
- mergeLeafs(leafNodeContent(start.leaf));
386
- var isRemoved = formatedLeaf._item.deleted;
387
-
388
- if (!isRemoved) {
389
- setPosition(start.leaf.get("id"), {
390
- offset: start.offset
391
- });
392
- setTimeout(function () {
393
- setPosition(formatedLeaf.get("id"), {
394
- offset: 0,
395
- end: leafLength(formatedLeaf)
396
- });
397
- });
398
- } else {
399
- var remainingLeaf = formatedLeaf.parent.get(start.leafIndex - 1);
400
- var offset = leafText(remainingLeaf).toJSON().indexOf(selectedText);
401
- setTimeout(function () {
402
- setPosition(remainingLeaf.get("id"), {
403
- offset: offset,
404
- end: offset + selectedText.length
405
- });
406
- });
407
- }
408
-
409
- break;
410
- }
411
-
412
- case "multileaves":
413
- case "multinodes":
414
- {
415
- var startPathString = start.path.join(",");
416
- var endPathString = end.path.join(",");
417
- var started = false;
418
- var ended = false;
419
- traverse(editor, function (leaf, isText) {
420
- if (isText) {
421
- var path = getPath(leaf);
422
- var isStart = path.join(",") === startPathString;
423
- var isEnd = path.join(",") === getPath(end.leaf).join(",");
424
- console.log({
425
- isEnd: isEnd
426
- }, endPathString, getPath(end.leaf).join(","), path.join(","));
427
-
428
- if (isStart) {
429
- started = true;
430
- }
431
-
432
- var startOffset = isStart ? start.offset : 0;
433
- var endOffset = isEnd ? end.offset : leafLength(leaf);
434
- started && !ended && formatAtEqualPath({
435
- format: format,
436
- start: {
437
- leaf: leaf,
438
- offset: startOffset
439
- },
440
- end: {
441
- offset: endOffset
442
- },
443
- value: value
444
- });
445
- console.log({
446
- ended: ended
447
- });
448
-
449
- if (isEnd) {
450
- ended = true;
451
- }
452
-
453
- mergeLeafs(leafNodeContent(leaf));
454
- }
455
- }, {
456
- start: start.path[0],
457
- end: end.path[0] + 1
458
- });
459
- break;
460
- }
461
- }
462
- });
463
- return newPath;
464
- };
465
-
466
- var insertText = function insertText(editor, _ref) {
467
- var text = _ref.text;
468
- if (!text || text === null || !text.length) return;
469
- var _editor$selection = editor.selection,
470
- start = _editor$selection.start,
471
- end = _editor$selection.end,
472
- type = _editor$selection.type,
473
- length = _editor$selection.length,
474
- setPosition = _editor$selection.setPosition;
475
- if (type === "notInDoc") return console.error("Path is not in document space");
476
-
477
- switch (type) {
478
- case "collapsed":
479
- {
480
- insertTextInLeaf(start.leaf, start.offset, text);
481
- setPosition(start.leaf.get("id"), {
482
- offset: start.offset + text.length
483
- });
484
- break;
485
- }
486
-
487
- case "singlenode":
488
- {
489
- replaceLeafText(start.leaf, start.offset, length, text);
490
- setPosition(start.leaf.get("id"), {
491
- offset: start.offset + text.length
492
- });
493
- break;
494
- }
495
-
496
- case "multileaves":
497
- case "multinodes":
498
- {
499
- var startPathString = start.path.join(",");
500
- var endPathString = end.path.join(",");
501
- editor.doc.transact(function () {
502
- var _LeavesHarvest = new LeavesHarvest(),
503
- reap = _LeavesHarvest.reap,
504
- burn = _LeavesHarvest.burn;
505
-
506
- traverse(editor, function (leaf, isText) {
507
- if (isText) {
508
- var path = getPath(leaf);
509
-
510
- if (path.join(",") === startPathString) {
511
- replaceLeafText(leaf, start.offset, leafLength(leaf), text);
512
- reap(leaf);
513
- } else if (path > start.path && path < end.path) {
514
- deleteLeafText(leaf, 0, leafLength(leaf));
515
- reap(leaf);
516
- } else if (path.join(",") === endPathString) {
517
- deleteLeafText(leaf, 0, end.offset);
518
- reap(leaf);
519
- }
520
- }
521
- }, {
522
- start: start.path[0],
523
- end: end.path[0] + 1
524
- });
525
- burn(editor);
526
- });
527
- setPosition(start.leaf.get("id"), {
528
- offset: start.offset + text.length
529
- });
530
- }
531
- }
532
- };
533
-
534
- var areLeafsMergeable = function areLeafsMergeable(nodes) {
535
- var keys = nodes.map(function (node) {
536
- return Array.from(node.keys());
537
- }).flat();
538
- return nodes.every(function (node) {
539
- return keys.every(function (key) {
540
- return node.has(key);
541
- });
542
- });
543
- };
544
- var mergeLeafs = function mergeLeafs(leafs) {
545
- var currentLeaf = leafs.get(0);
546
- var leafsToDelete = [];
547
- leafs.forEach(function (_, i) {
548
- var leaf = leafs.get(i + 1);
549
- if (!leaf) return;
550
-
551
- if (areLeafsMergeable([currentLeaf, leaf])) {
552
- var firstText = currentLeaf.get("text");
553
- currentLeaf.get("text").insert(firstText.length, leaf.get("text").toString());
554
- leafsToDelete.push(leaf);
555
- } else {
556
- currentLeaf = leaf;
557
- }
558
- });
559
- leafsToDelete.forEach(function (leaf) {
560
- leafs["delete"](getIndex(leaf));
561
- });
562
- };
563
-
564
- var removeEmptyText = function removeEmptyText(yText) {
565
- var _yText$parent, _array;
566
-
567
- var array = yText == null ? void 0 : (_yText$parent = yText.parent) == null ? void 0 : _yText$parent.parent;
568
-
569
- var index = function index(array, node) {
570
- return array == null ? void 0 : array.toArray().indexOf(node);
571
- };
572
-
573
- (_array = array) == null ? void 0 : _array["delete"](index(array, yText.parent));
574
-
575
- while (array && array.length === 0) {
576
- var pop = array.parent;
577
- var pop_pop = pop.parent;
578
-
579
- if (pop_pop) {
580
- var i = index(pop_pop, pop);
581
- i !== -1 && pop_pop["delete"](i);
582
- array = pop_pop;
583
- } else {
584
- array = undefined;
585
- }
586
- }
587
- };
588
-
589
- var splitLeaf = function splitLeaf(editor) {
590
- var _editor$selection$sta = editor.selection.start,
591
- leaf = _editor$selection$sta.leaf,
592
- leafIndex = _editor$selection$sta.leafIndex,
593
- offset = _editor$selection$sta.offset;
594
- var content = leafString(leaf);
595
- var rightText = content.substring(offset, content.length);
596
- if (offset === content.length) return;
597
- deleteLeafText(leaf, offset, rightText.length);
598
- leafNodeContent(leaf).insert(leafIndex + 1, [createLeaf$1(_extends({}, leaf.toJSON(), {
599
- text: rightText,
600
- id: undefined
601
- }))]);
602
- };
603
-
604
- var splitNode = function splitNode(editor) {
605
- var _editor$selection = editor.selection,
606
- start = _editor$selection.start,
607
- type = _editor$selection.type,
608
- setPosition = _editor$selection.setPosition,
609
- edges = _editor$selection.edges;
610
- var leaf = start.leaf;
611
- var leafContent = leafNodeContent(start.leaf);
612
- var node = leafNode(start.leaf);
613
- var indexOfLeaf = getIndex(start.leaf);
614
- var indexOfNode = getIndex(node);
615
-
616
- var split = function split() {
617
- var nextLeaves = leafContent.toArray().filter(function (_, i) {
618
- return i > indexOfLeaf;
619
- });
620
- var rightText = leafString(start.leaf).substring(start == null ? void 0 : start.offset, leafLength(start.leaf));
621
- deleteLeafText(start.leaf, start == null ? void 0 : start.offset, rightText.length, false);
622
- var newParent = hasChildren(node) ? getNodeChildren(node) : node.parent;
623
- var newLeaf = createLeaf$1(_extends({}, leaf.toJSON(), {
624
- id: undefined,
625
- text: rightText
626
- }));
627
- newParent.insert(hasChildren(node) ? 0 : indexOfNode + 1, [createNode(editor.defaultBlock, {
628
- children: [],
629
- content: [newLeaf].concat(nextLeaves.map(function (leaf) {
630
- return createLeaf$1(leaf.toJSON());
631
- }))
632
- })]);
633
- setPosition(newLeaf.get("id"), {
634
- offset: 0
635
- });
636
- leafContent["delete"](indexOfLeaf + 1, leafNodeContentLength(start.leaf) - indexOfLeaf - 1);
637
- };
638
-
639
- var doSplit = (!edges.startNode || !edges.endNode) && type !== "multinodes";
640
-
641
- if ((edges.endNode || edges.startNode) && type === "collapsed") {
642
- // if cursor is at edge node with insert a default block before of after the current node
643
- var newNode = createNode(editor.defaultBlock);
644
- node.parent.insert(indexOfNode + (edges.endNode ? 1 : 0), [newNode]);
645
- return setTimeout(function () {
646
- setPosition(newNode.get("content").get(0).get("id"), {
647
- offset: 0
648
- });
649
- });
650
- }
651
-
652
- switch (type) {
653
- case "collapsed":
654
- {
655
- doSplit && split();
656
- break;
657
- }
658
-
659
- case "singlenode":
660
- {
661
- deleteText(editor, {
662
- mode: "backward"
663
- });
664
- doSplit && split();
665
- !doSplit && setPosition(start.leaf.get("id"), {
666
- offset: start.offset
667
- });
668
- break;
669
- }
670
-
671
- case "multileaves":
672
- case "multinodes":
673
- {
674
- deleteText(editor, {
675
- mode: "backward"
676
- });
677
- doSplit && split();
678
- !doSplit && setPosition(start.leaf.get("id"), {
679
- offset: start.offset
680
- });
681
- }
682
- }
683
- };
684
-
685
- var nestNode = function nestNode(editor) {
686
- var _editor$selection = editor.selection,
687
- start = _editor$selection.start,
688
- type = _editor$selection.type,
689
- end = _editor$selection.end,
690
- setPosition = _editor$selection.setPosition;
691
- var startNode = getNode(start.leaf);
692
- var nodeCopy = copyNode(startNode);
693
- var startPath = getPath(startNode);
694
-
695
- var _startPath$slice$reve = startPath.slice().reverse(),
696
- index = _startPath$slice$reve[0],
697
- newPath = _startPath$slice$reve.slice(1);
698
-
699
- var prevNode = getNodeAtPath(editor, [].concat(newPath, [index - 1]));
700
- var startContainer = getNodeContainer(startNode);
701
-
702
- switch (type) {
703
- case "singlenode":
704
- case "collapsed":
705
- {
706
- if (!prevNode) return;
707
- var id = start.leaf.get("id");
708
- var prevChildren = prevNode.get("children");
709
- startContainer["delete"](index);
710
- prevChildren.insert(prevChildren.length, [nodeCopy]);
711
- setPosition(id, {
712
- offset: start.offset
713
- });
714
- break;
715
- }
716
-
717
- case "multileaves":
718
- case "multinodes":
719
- {
720
- var length = 0;
721
- var newNodes = [];
722
-
723
- var _id = start.leaf.get("id");
724
-
725
- var startPathString = start.path.slice(0, start.path.length - 1).join("");
726
- var endPathString = end.path.slice(0, start.path.length - 1).join("");
727
- traverse(editor, function (node, isText) {
728
- if (!isText) {
729
- var path = getPath(node).join("");
730
-
731
- if (path.length === startPath.length) {
732
- if (path <= endPathString && path >= startPathString) {
733
- length++;
734
- newNodes.push(copyNode(node));
735
- }
736
- }
737
- }
738
- }, {
739
- start: start.path[0],
740
- end: end.path[0] + 1
741
- });
742
- if (!prevNode) return;
743
-
744
- var _prevChildren = prevNode.get("children");
745
-
746
- startContainer["delete"](index, length);
747
-
748
- _prevChildren.insert(_prevChildren.length, newNodes);
749
-
750
- setPosition(_id, {
751
- offset: start.offset
752
- });
753
- break;
754
- }
755
- }
756
- };
757
-
758
- var moveNode = function moveNode(_ref) {
759
- var from = _ref.from,
760
- to = _ref.to;
761
- var indexes = Array.isArray(from.at) ? from.at : [from.at];
762
- var firstIndex = indexes[0];
763
- var firstNode = from.container.get(firstIndex);
764
- var nodesCopies = indexes.map(function (index) {
765
- var node = from.container.get(index);
766
- return copyNode(node);
767
- });
768
- to.container.insert(to.at, nodesCopies);
769
- from.container["delete"](getIndex(firstNode), indexes.length);
770
- return nodesCopies[0].get("content").get(0).get("id");
771
- };
772
-
773
- var _excluded$2 = ["type"];
774
- var mergeContentWithPrevLeaf = function mergeContentWithPrevLeaf(editor) {
775
- var start = editor.selection.start;
776
- var prevLeaf;
777
- var stop = false;
778
- traverse(editor, function (node, isText) {
779
- if (isText) {
780
- if (node === start.leaf) {
781
- stop = true;
782
- } else if (!stop) {
783
- prevLeaf = node;
784
- }
785
- }
786
- });
787
- if (!prevLeaf) return;
788
- var prevLeafLength = leafLength(prevLeaf);
789
- leafNodeContent(prevLeaf).insert(leafNodeContentLength(prevLeaf), leafNodeContent(start.leaf).toArray().map(function (leaf) {
790
- return createLeaf$1(leaf.toJSON());
791
- }));
792
- mergeLeafs(leafNodeContent(prevLeaf));
793
- var children = start.node.get("children").toArray().map(copyNode);
794
-
795
- if (children.length) {
796
- start.node.parent.insert(start.nodeIndex, children);
797
- }
798
-
799
- start.node.parent["delete"](start.nodeIndex + children.length);
800
- return [prevLeaf, prevLeafLength]; // (start.leaf.parent.parent as YArray<YNode>).delete(index);
801
- };
802
- var mergeContentWithNextLeaf = function mergeContentWithNextLeaf(editor) {
803
- var start = editor.selection.start; // 1 .get the next leaf
804
-
805
- var nextLeaf;
806
- var stop = false;
807
- traverse(editor, function (node, isText) {
808
- if (isText) {
809
- if (node === start.leaf) {
810
- stop = true;
811
- } else if (stop) {
812
- nextLeaf = node;
813
- stop = false;
814
- }
815
- }
816
- }); // end of document do nothing
817
-
818
- if (!nextLeaf) return; // 2 .merge the next leaf with the start leaf
819
-
820
- leafNodeContent(start.leaf).insert(leafNodeContentLength(start.leaf), leafNodeContent(nextLeaf).toArray().map(function (leaf) {
821
- return createLeaf$1(leaf.toJSON());
822
- }));
823
- mergeLeafs(leafNodeContent(start.leaf)); // 3 get the merged node children if any and place it where the merged node was
824
-
825
- var node = getNode(nextLeaf);
826
- var index = getIndex(node);
827
- var parent = node.parent;
828
- var children = node.get("children").toArray();
829
- children.length > 0 && parent.insert(index, children.map(copyNode));
830
- parent["delete"](index + children.length);
831
- return nextLeaf;
832
- };
833
- var deleteNode = function deleteNode(node, defaultBlock) {
834
- if (isNodeEmpty(node)) {
835
- node.parent["delete"](getIndex(node));
836
- } else if (isNodeContentEmpty(node)) {
837
- var children = getNodeChildren(node).toJSON();
838
- var index = getIndex(node);
839
- node.parent["delete"](index);
840
- node.parent.insert(index, children.map(function (_ref) {
841
- var type = _ref.type,
842
- props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
843
-
844
- return createNode(type, props);
845
- }));
846
- }
847
-
848
- if (node.parent === (node.doc.getArray("children") && node.doc.getArray("children").length === 0)) {
849
- node.parent.insert(0, [createNode(defaultBlock, {
850
- content: [createLeaf$1()]
851
- })]);
852
- }
853
- };
854
- var getNodeContainer = function getNodeContainer(node) {
855
- return node.parent;
856
- };
857
- var getNodeChildren = function getNodeChildren(node) {
858
- return node.get("children");
859
- };
860
- var getNodeContent = function getNodeContent(node) {
861
- return node.get("content");
862
- };
863
- var hasChildren = function hasChildren(node) {
864
- return getNodeChildren(node).length > 0;
865
- };
866
- var isNodeEmpty = function isNodeEmpty(node) {
867
- return isNodeContentEmpty(node) && !hasChildren(node);
868
- };
869
- var isNodeContentEmpty = function isNodeContentEmpty(node) {
870
- return getNodeContent(node).length === 0 || getNodeContent(node).toArray().map(leafString).join("").length === 0;
871
- };
872
- var copyNode = function copyNode(node) {
873
- var jsonNode = node.toJSON();
874
- return createNode(jsonNode.type, _extends({}, jsonNode, {
875
- children: jsonNode.children.map(getChildren),
876
- content: jsonNode.content.map(createLeaf$1)
877
- }));
878
- };
879
- var nodeString = function nodeString(node) {
880
- var text = "";
881
- getNodeContent(node).forEach(function (leaf) {
882
- text += leafString(leaf);
883
- });
884
- getNodeChildren(node).forEach(function (node) {
885
- text += nodeString(node);
886
- });
887
- return text;
888
- };
889
-
890
- var nanoid = function nanoid() {
891
- return "y-" + nanoid$1.customAlphabet("346789ABCDEFGHJKLMNPQRTUV-WXYabcdefghijkmnpqrtwxyz", 20)();
892
- };
893
- var getNode = function getNode(node) {
894
- var _node$parent;
895
-
896
- return node == null ? void 0 : (_node$parent = node.parent) == null ? void 0 : _node$parent.parent;
897
- };
898
- var getIndex = function getIndex(node) {
899
- var index = 0;
900
- var stop = false;
901
- var n = node.parent._start;
902
-
903
- while (n !== null && !stop) {
904
- if (n.countable && !n.deleted) {
905
- var c = n.content.getContent();
906
-
907
- for (var i = 0; i < c.length; i++) {
908
- if (c[i] === node) {
909
- stop = true;
910
- break;
911
- }
912
-
913
- index++;
914
- }
915
- }
916
-
917
- n = n.right;
918
- }
919
-
920
- return index;
921
- };
922
- var getPath = function getPath(node) {
923
- var p = [];
924
- var n = node;
925
-
926
- while (!!n) {
927
- p.push(getIndex(n));
928
- n = getNode(n);
929
- }
930
-
931
- return p.reverse();
932
- };
933
- var getId = function getId(node) {
934
- return node.get("id");
935
- };
936
- var getLeafAtPath = function getLeafAtPath(editor, _ref) {
937
- var start = _ref[0],
938
- path = _ref.slice(1);
939
-
940
- var node = editor.children.get(start);
941
- var i = 0;
942
-
943
- while (i < path.length - 1) {
944
- var index = path[i];
945
- i++;
946
- node = node.get("children").get(index);
947
- }
948
-
949
- return node && node.get("content").get(path.slice().reverse()[0]);
950
- };
951
- var getNodeAtPath = function getNodeAtPath(editor, _ref2) {
952
- var start = _ref2[0],
953
- path = _ref2.slice(1);
954
-
955
- var node = editor.children.get(start);
956
-
957
- for (var i = 0; i < path.length; i++) {
958
- var index = path[i];
959
-
960
- if (node.get) {
961
- node = node.get("children").get(index);
962
- } else {
963
- node = undefined;
964
- }
965
- }
966
-
967
- return node;
968
- };
969
- var getContainerAtPath = function getContainerAtPath(editor, path) {
970
- if (path.length === 1) {
971
- return editor.children;
972
- } else {
973
- return getNodeAtPath(editor, path.slice(1, path.length)).get("children");
974
- }
975
- };
976
- var traverse = function traverse(editor, cb, opts) {
977
- var t = function t(node, path) {
978
- if (node.has("text")) {
979
- cb(node, true, path);
980
- } else {
981
- var _array = getNodeContent(node).toArray() //@ts-ignore
982
- .concat(getNodeChildren(node).toArray());
983
-
984
- cb(node, false, path);
985
-
986
- for (var i = 0; i < _array.length; i++) {
987
- t(_array[i], [].concat(path.slice(0, path.length - 1), [0, i]));
988
- }
989
- }
990
- };
991
-
992
- var array = editor.children.toArray().slice((opts == null ? void 0 : opts.start) || 0, (opts == null ? void 0 : opts.end) || editor.children.length);
993
-
994
- for (var i = 0; i < array.length; i++) {
995
- t(array[i], [i + ((opts == null ? void 0 : opts.start) || 0)]);
996
- }
997
- };
998
- var toString = function toString(editor) {
999
- var t = "";
1000
- var array = editor.children.toArray();
1001
-
1002
- for (var i = 0; i < array.length; i++) {
1003
- t += nodeString(array[i]);
1004
- }
1005
-
1006
- return t;
1007
- };
1008
-
1009
- var LeavesHarvest = function LeavesHarvest() {
1010
- var _this = this;
1011
-
1012
- this.reap = function (leaf, shouldDeleteNode) {
1013
- if (shouldDeleteNode === void 0) {
1014
- shouldDeleteNode = false;
1015
- }
1016
-
1017
- if (!isLeafEmpty(leaf)) return;
1018
- var id = leafNodeId(leaf);
1019
-
1020
- if (!_this.leaves[id]) {
1021
- _this.leaves[id] = {
1022
- shouldDeleteNode: shouldDeleteNode,
1023
- content: leafNodeContent(leaf),
1024
- node: leafNode(leaf),
1025
- indexes: []
1026
- };
1027
- }
1028
-
1029
- _this.leaves[id].indexes.push(getIndex(leaf));
1030
- };
1031
-
1032
- this.burn = function (editor) {
1033
- Object.values(_this.leaves).forEach(function (_ref, i) {
1034
- var shouldDeleteNode = _ref.shouldDeleteNode,
1035
- content = _ref.content,
1036
- node = _ref.node,
1037
- indexes = _ref.indexes;
1038
- content["delete"](indexes[0], indexes.length);
1039
-
1040
- if (content.length === 0 && !shouldDeleteNode) {
1041
- content.insert(0, [createLeaf()]);
1042
- } else if (shouldDeleteNode) return deleteNode(node, editor == null ? void 0 : editor.defaultBlock);
1043
- });
1044
- };
1045
-
1046
- this.leaves = {};
1047
- };
1048
- var leafData = function leafData(leaf) {
1049
- return leaf.get("data");
1050
- };
1051
- var leafText = function leafText(leaf) {
1052
- return leaf.get("text");
1053
- };
1054
- var leafLength = function leafLength(leaf) {
1055
- return leafText(leaf).length;
1056
- };
1057
- var leafString = function leafString(leaf) {
1058
- return leafText(leaf).toString();
1059
- };
1060
- var isLeafEmpty = function isLeafEmpty(leaf) {
1061
- return leafText(leaf) === undefined || leafLength(leaf) === 0;
1062
- };
1063
- var deleteLeafText = function deleteLeafText(leaf, index, length, shouldRemoveIfEmpty) {
1064
- leafText(leaf)["delete"](index, length);
1065
- shouldRemoveIfEmpty && removeIfEmpty(leaf);
1066
- };
1067
- var insertTextInLeaf = function insertTextInLeaf(leaf, index, text) {
1068
- leafText(leaf).insert(index, text);
1069
- };
1070
- var replaceLeafText = function replaceLeafText(leaf, start, length, text) {
1071
- var currentText = leafString(leaf).split("");
1072
- currentText.splice.apply(currentText, [start, length].concat(text.split("")));
1073
- return setLeafText(leaf, currentText.join(""));
1074
- };
1075
- var setLeafText = function setLeafText(leaf, text) {
1076
- var t = leafText(leaf);
1077
- t["delete"](0, t.length);
1078
- t.insert(0, text);
1079
- };
1080
- var setLeafData = function setLeafData(leaf, data) {
1081
- if (leaf.has("data")) {
1082
- Object.keys(data).forEach(function (key) {
1083
- leafData(leaf).set(key, data[key]);
1084
- });
1085
- } else {
1086
- leaf.set("data", new Map(Object.entries(data)));
1087
- }
1088
- };
1089
- var removeIfEmpty = function removeIfEmpty(leaf) {
1090
- if (isLeafEmpty(leaf)) {
1091
- console.log("isEmpty", leafNodeContent(leaf).toJSON());
1092
- leafNodeContent(leaf)["delete"](getIndex(leaf)); // if (leafNodeContentLength(leaf) === 0) {
1093
- // deleteNode(leafNode(leaf));
1094
- // }
1095
- }
1096
- };
1097
- var leafNode = function leafNode(leaf) {
1098
- return leaf.parent.parent;
1099
- };
1100
- var leafNodeId = function leafNodeId(leaf) {
1101
- return leafNode(leaf).get("id");
1102
- };
1103
- var leafNodeContent = function leafNodeContent(leaf) {
1104
- return leaf.parent;
1105
- };
1106
- var leafNodeContentLength = function leafNodeContentLength(leaf) {
1107
- return leafNodeContent(leaf).length;
1108
- };
1109
- var leafNodeContentStringLength = function leafNodeContentStringLength(leaf) {
1110
- return leafNodeContent(leaf).toArray().reduce(function (acc, leaf) {
1111
- return acc + leafLength(leaf);
1112
- }, 0);
1113
- };
1114
- var leafNodeChildren = function leafNodeChildren(leaf) {
1115
- return leafNode(leaf).get("children");
1116
- };
1117
- var leafNodeChildrenLength = function leafNodeChildrenLength(leaf) {
1118
- return leafNodeChildren(leaf).length;
1119
- };
1120
-
1121
- var Dropper = function Dropper() {
1122
- var _this = this;
1123
-
1124
- this.init = function (editor, container) {
1125
- _this.editor = editor;
1126
- _this.doc = editor.doc;
1127
- _this.container = container;
1128
- _this.editorId = editor.editorId;
1129
- _this.selection = editor.selection;
1130
- _this.ID_TO_NODE = editor.ID_TO_NODE;
1131
- _this.allowNesting = editor.allowNesting;
1132
- };
1133
-
1134
- this.startDrag = function (node, e) {
1135
- var _e$dataTransfer;
1136
-
1137
- if (!_this.editor.dnd.active) return;
1138
- _this.node = node;
1139
- var dndIndicator = document.getElementById("dndIndicator");
1140
- dndIndicator.style.opacity = "1";
1141
- var element = document.getElementById(node.get("id"));
1142
- element.style.opacity = "0.4";
1143
- document.body.style.cursor = "grabbing";
1144
- _this.from = {
1145
- container: node.parent,
1146
- at: getIndex(node)
1147
- };
1148
- _this.startPath = getPath(node);
1149
- (_e$dataTransfer = e.dataTransfer) == null ? void 0 : _e$dataTransfer.setDragImage(element, e.offsetX, e.offsetY);
1150
- document.addEventListener("mousemove", _this.onDrag);
1151
- document.addEventListener("mouseup", _this.dragEnd);
1152
- };
1153
-
1154
- this.dragEnd = function () {
1155
- var element = document.getElementById(_this.node.get("id"));
1156
- if (element) element.style.opacity = "1";
1157
- document.body.style.cursor = "auto";
1158
- document.removeEventListener("mousemove", _this.onDrag);
1159
- document.removeEventListener("mouseup", _this.dragEnd);
1160
- var id = moveNode({
1161
- from: _this.from,
1162
- to: _this.to
1163
- });
1164
- var dndIndicator = document.getElementById("dndIndicator");
1165
- dndIndicator.style.opacity = "0";
1166
- setTimeout(function () {
1167
- console.log(id);
1168
-
1169
- _this.selection.setPosition(id, {
1170
- offset: 0
1171
- });
1172
- });
1173
- };
1174
-
1175
- this.getHoveredNode = function (target) {
1176
- var hoveredNode;
1177
- var element = target;
1178
- var i = 0;
1179
-
1180
- while (!hoveredNode && ((_element = element) == null ? void 0 : _element.id) !== _this.editorId && element && i < 100) {
1181
- var _element;
1182
-
1183
- if (element.hasAttribute("data-edytor-block")) {
1184
- hoveredNode = _this.ID_TO_NODE.get(element.id);
1185
- break;
1186
- }
1187
-
1188
- element = element.parentElement;
1189
- i++;
1190
- }
1191
-
1192
- if (!hoveredNode) return {};
1193
- return {
1194
- hoveredElement: element,
1195
- hoveredNode: hoveredNode
1196
- };
1197
- };
1198
-
1199
- this.onDrag = function (e) {
1200
- if (!_this.editor.dnd.active) return;
1201
-
1202
- var _this$getHoveredNode = _this.getHoveredNode(e.target),
1203
- hoveredElement = _this$getHoveredNode.hoveredElement,
1204
- hoveredNode = _this$getHoveredNode.hoveredNode;
1205
-
1206
- var dndIndicator = document.getElementById("dndIndicator");
1207
- if (!hoveredNode || !hoveredElement || !dndIndicator || hoveredNode === _this.node) return;
1208
- var rectHovered = hoveredElement.getBoundingClientRect();
1209
- var isOnTop = e.y < rectHovered.top + rectHovered.height / 2;
1210
- var rect = rectHovered;
1211
- var isNested = _this.allowNesting && !isOnTop && e.x > rect.left + rect.width / 5;
1212
- var top = isOnTop ? rect.top : rect.top + rect.height;
1213
- var deltaX = isNested ? 30 : 0;
1214
- var path = getPath(hoveredNode);
1215
-
1216
- var _path$slice$reverse = path.slice().reverse(),
1217
- index = _path$slice$reverse[0],
1218
- startOfPath = _path$slice$reverse.slice(1);
1219
-
1220
- if (_this.startPath.join("") === startOfPath.join("")) {
1221
- return; // this.to= undefined
1222
- }
1223
-
1224
- dndIndicator.style.width = rect.width - deltaX + "px";
1225
- dndIndicator.style.top = top + window.pageYOffset + "px";
1226
- dndIndicator.style.left = rect.left + deltaX + "px";
1227
- index = index + (isOnTop ? 0 : 1);
1228
- if (index === -1) index = 0;
1229
- _this.to = {
1230
- container: isNested ? hoveredNode.get("children") : path.length === 1 ? _this.editor.children : hoveredNode.parent,
1231
- at: isNested ? 0 : index
1232
- };
1233
- };
1234
- };
1235
-
1236
- var EdytorSelection = function EdytorSelection() {
1237
- var _this = this;
1238
-
1239
- this.init = function (editor, container) {
1240
- _this.container = container;
1241
- _this.editor = editor;
1242
- document.addEventListener("selectionchange", _this.onSelection);
1243
-
1244
- _this.container.addEventListener("focus", _this.onFocus);
1245
-
1246
- _this.container.addEventListener("blur", _this.onBlur);
1247
- };
1248
-
1249
- this.onFocus = function () {
1250
- _this.focused = true;
1251
-
1252
- _this.onChange();
1253
- };
1254
-
1255
- this.onBlur = function () {
1256
- _this.focused = false;
1257
-
1258
- _this.onChange();
1259
- };
1260
-
1261
- this.destroy = function () {
1262
- document.removeEventListener("selectionchange", _this.onSelection);
1263
- };
1264
-
1265
- this.onSelection = function (e) {
1266
- var _e$target;
1267
-
1268
- if (((_e$target = e.target) == null ? void 0 : _e$target.activeElement) === _this.container) _this.getRange();
1269
- };
1270
-
1271
- this.observe = function (observer) {
1272
- _this.observers = _this.observers ? _this.observers.concat(observer) : [observer];
1273
- };
1274
-
1275
- this.unobserve = function (observer) {
1276
- _this.observers = _this.observers ? _this.observers.filter(function (o) {
1277
- return o !== observer;
1278
- }) : [];
1279
- };
1280
-
1281
- this.getLeaf = function (anchorNode, current) {
1282
- if (_this[current] && _this[current].node === anchorNode) {
1283
- // serve cached result to avoid loops to getPath and node
1284
- return _this[current].value;
1285
- }
1286
-
1287
- var leaf;
1288
- var node = anchorNode;
1289
-
1290
- while (!leaf && node !== _this.container && node) {
1291
- leaf = _this.editor.ID_TO_NODE.get(node.id);
1292
-
1293
- if (!leaf) {
1294
- node = node.parentElement;
1295
- }
1296
- }
1297
-
1298
- if (!leaf) return [undefined, undefined, undefined, undefined];
1299
- var value = [leaf, leafNode(leaf), getPath(leaf), node];
1300
- _this[current] = {
1301
- value: value,
1302
- node: anchorNode
1303
- };
1304
- return value;
1305
- };
1306
-
1307
- this.getNodeBoundingRect = function (node) {
1308
- var nodeHtml = _this.container.querySelector("#" + node.get("id"));
1309
-
1310
- return {
1311
- nodeHtml: nodeHtml
1312
- };
1313
- };
1314
-
1315
- this.getRange = function () {
1316
- var selection = window.getSelection();
1317
- var anchorNode = selection.anchorNode,
1318
- focusNode = selection.focusNode,
1319
- anchorOffset = selection.anchorOffset,
1320
- focusOffset = selection.focusOffset,
1321
- isCollapsed = selection.isCollapsed,
1322
- rangeCount = selection.rangeCount;
1323
- if (focusNode === null) return;
1324
-
1325
- var _this$getLeaf = _this.getLeaf(anchorNode, "anchorNode"),
1326
- leaf1 = _this$getLeaf[0],
1327
- node1 = _this$getLeaf[1],
1328
- path1 = _this$getLeaf[2],
1329
- leafHtml1 = _this$getLeaf[3];
1330
-
1331
- var _this$getLeaf2 = _this.getLeaf(focusNode, "focusNode"),
1332
- leaf2 = _this$getLeaf2[0],
1333
- node2 = _this$getLeaf2[1],
1334
- path2 = _this$getLeaf2[2],
1335
- leafHtml2 = _this$getLeaf2[3];
1336
-
1337
- if (!leaf1) return;
1338
- var equalPaths = path1.join("") === path2.join("");
1339
- var isFollowing = equalPaths ? anchorOffset < focusOffset : path1.join() < path2.join();
1340
- var range = rangeCount >= 1 ? selection == null ? void 0 : selection.getRangeAt(0) : undefined;
1341
- _this.start = _extends({}, _this.getNodeBoundingRect(isFollowing ? node1 : node2), {
1342
- node: isFollowing ? node1 : node2,
1343
- leafId: (isFollowing ? leaf1 : leaf2).get("id"),
1344
- leafIndex: isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],
1345
- nodeIndex: isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],
1346
- path: isFollowing ? path1 : path2,
1347
- leafHtml: isFollowing ? leafHtml1 : leafHtml2,
1348
- offset: isFollowing ? anchorOffset : focusOffset,
1349
- leaf: isFollowing ? leaf1 : leaf2
1350
- });
1351
- _this.end = isCollapsed || node2 === null ? _this.start : _extends({}, _this.getNodeBoundingRect(!isFollowing ? node1 : node2), {
1352
- node: !isFollowing ? node1 : node2,
1353
- leafId: (!isFollowing ? leaf1 : leaf2).get("id"),
1354
- leafIndex: !isFollowing ? path1[path1.length - 1] : path2[path2.length - 1],
1355
- nodeIndex: !isFollowing ? path1[path1.length - 2] : path2[path2.length - 2],
1356
- path: !isFollowing ? path1 : path2,
1357
- leafHtml: !isFollowing ? leafHtml1 : leafHtml2,
1358
- offset: !isFollowing ? anchorOffset : focusOffset,
1359
- leaf: !isFollowing ? leaf1 : leaf2
1360
- });
1361
- _this.selectedText = range ? range.toString() : "";
1362
- _this.arePathsEquals = equalPaths;
1363
- _this.length = _this.selectedText.length;
1364
- _this.range = range;
1365
- _this.selection = selection;
1366
- var startNode = _this.start.offset === 0 && getIndex(_this.start.leaf) === 0;
1367
- var endNode = _this.end.offset === leafLength(_this.end.leaf) && getIndex(_this.start.leaf) === leafNodeContentLength(_this.end.leaf) - 1;
1368
- _this.edges = {
1369
- startLeaf: _this.start.offset === 0,
1370
- endLeaf: _this.end.offset === leafLength(_this.end.leaf),
1371
- startNode: startNode,
1372
- endNode: endNode,
1373
- startDocument: startNode && _this.start.path.join("") === "00",
1374
- endDocument: false
1375
- };
1376
- _this.type = isCollapsed ? "collapsed" : equalPaths ? "singlenode" : _this.start.node === _this.end.node ? "multileaves" : "multinodes";
1377
-
1378
- _this.onChange();
1379
- };
1380
-
1381
- this.onChange = function () {
1382
- _this.observers.forEach(function (o) {
1383
- return o(_this);
1384
- }); // console.log(this.editor.awareness);
1385
- // if (this.collaborationPosition?.node !== this.start.node.get("id")) {
1386
- // this.collaborationPosition = {
1387
- // node: this.start.node.get("id"),
1388
- // leaf: this.start.leaf.get("id"),
1389
- // offset: this.start.offset
1390
- // };
1391
- // this.editor.awareness.setLocalStateField("position", this.collaborationPosition);
1392
- // }
1393
-
1394
- };
1395
-
1396
- this.setPosition = function (id, _ref) {
1397
- var _this$start, _this$selection, _this$selection2, _this$start2;
1398
-
1399
- var offset = _ref.offset,
1400
- delta = _ref.delta,
1401
- end = _ref.end;
1402
-
1403
- var node = _this.container.querySelector("#" + id);
1404
-
1405
- console.log({
1406
- node: node
1407
- });
1408
-
1409
- while (node && node.nodeType !== 3 && (_node = node) != null && _node.firstChild) {
1410
- var _node;
1411
-
1412
- node = node.firstChild;
1413
- }
1414
-
1415
- var pos = offset || ((_this$start = _this.start) == null ? void 0 : _this$start.offset) + delta;
1416
- var hasRange = _this.range || _this.selection;
1417
-
1418
- if (!hasRange) {
1419
- _this.range = document.createRange();
1420
- _this.selection = window.getSelection();
1421
- }
1422
-
1423
- _this.range.setStart(node, pos);
1424
-
1425
- if (end) {
1426
- _this.range.setEnd(node, end);
1427
- } else {
1428
- _this.range.collapse(true);
1429
- }
1430
-
1431
- (_this$selection = _this.selection) == null ? void 0 : _this$selection.removeAllRanges();
1432
- (_this$selection2 = _this.selection) == null ? void 0 : _this$selection2.addRange(_this.range);
1433
- _this.start = _extends({}, _this.start, {
1434
- leafHtml: _this.container.querySelector("#" + id),
1435
- offset: offset || ((_this$start2 = _this.start) == null ? void 0 : _this$start2.offset) + delta
1436
- });
1437
- };
1438
-
1439
- this.observers = [];
1440
- };
1441
-
1442
- var prevent = function prevent(e) {
1443
- e.preventDefault();
1444
- e.stopPropagation();
1445
- };
1446
-
1447
- var getDataTransfer = function getDataTransfer(e) {
1448
- return e.dataTransfer.getData("text/plain");
1449
- };
1450
-
1451
- var onBeforeInput = function onBeforeInput(_ref, e) {
1452
- var _e$target;
1453
-
1454
- var onChange = _ref[1],
1455
- editor = _ref[2];
1456
- // console.log(e);
1457
- var _editor$selection = editor.selection,
1458
- start = _editor$selection.start,
1459
- length = _editor$selection.length,
1460
- setPosition = _editor$selection.setPosition; // if (e.composedPath().some((el) => el.getAttribute && el.getAttribute("data-edytor-void") === "true")) {
1461
- // return;
1462
- // }
1463
-
1464
- var tag = (_e$target = e.target) == null ? void 0 : _e$target.tagName;
1465
- if (tag === "TEXTAREA" || tag === "INPUT") return;
1466
- prevent(e);
1467
-
1468
- switch (e.inputType) {
1469
- case "insertFromPaste":
1470
- case "insertLineBreak": // case "insertCompositionText":
1471
- // case "insertFromDrop":
1472
-
1473
- case "insertText":
1474
- {
1475
- var text = e.inputType === "insertLineBreak" ? "\n" : e.inputType === "insertFromPaste" ? getDataTransfer(e) : e.data;
1476
- insertText(editor, {
1477
- text: text
1478
- });
1479
- break;
1480
- }
1481
-
1482
- case "deleteContentBackward":
1483
- {
1484
- deleteText(editor, {
1485
- mode: "backward"
1486
- });
1487
- break;
1488
- }
1489
-
1490
- case "deleteByDrag":
1491
- case "deleteByCut":
1492
- case "deleteContentForward":
1493
- {
1494
- deleteText(editor, {
1495
- mode: "forward"
1496
- });
1497
- break;
1498
- }
1499
-
1500
- case "insertParagraph":
1501
- {
1502
- splitNode(editor);
1503
- break;
1504
- }
1505
-
1506
- case "insertFromDrop":
1507
- {
1508
- setTimeout(function () {
1509
- var text = getDataTransfer(e);
1510
-
1511
- if (text) {
1512
- insertText(editor, {
1513
- text: text
1514
- });
1515
- }
1516
- }, 50);
1517
- break;
1518
- }
1519
-
1520
- case "deleteSoftLineBackward":
1521
- {
1522
- break;
1523
- }
1524
-
1525
- case "deleteWordForward":
1526
- {
1527
- break;
1528
- }
1529
-
1530
- case "insertFromYank":
1531
- {
1532
- break;
1533
- }
1534
-
1535
- case "formatSetBlockTextDirection":
1536
- {
1537
- break;
1538
- }
1539
-
1540
- case "formatSetInlineTextDirection":
1541
- {
1542
- break;
1543
- }
1544
-
1545
- case "deleteWordBackward":
1546
- {
1547
- break;
1548
- }
1549
-
1550
- case "insertCompositionText":
1551
- {
1552
- break;
1553
- }
1554
-
1555
- case "formatItalic":
1556
- case "formatBold":
1557
- {
1558
- break;
1559
- }
1560
-
1561
- case "insertReplacementText":
1562
- {
1563
- replaceLeafText(start.leaf, start.offset, length, getDataTransfer(e));
1564
- setPosition(start.leafId, {
1565
- offset: start.offset
1566
- });
1567
- }
1568
- }
1569
-
1570
- onChange && onChange(editor);
1571
- };
1572
-
1573
- var onKeyDown = function onKeyDown(editor, e) {
1574
- if (e.key === "Tab") {
1575
- e.preventDefault();
1576
- editor.allowNesting && nestNode(editor);
1577
- }
1578
-
1579
- if (e.metaKey) {
1580
- if (e.key === "z" && e.metaKey) {
1581
- e.preventDefault();
1582
- return editor.undoManager.undo();
1583
- }
1584
-
1585
- if (e.key === "Z" && e.metaKey && e.shiftKey) {
1586
- e.preventDefault();
1587
- return editor.undoManager.redo();
1588
- }
1589
-
1590
- if (editor.hotkeys) {
1591
- for (var i = 0; i < editor.hotkeys.length; i++) {
1592
- var _editor$hotkeys$i = editor.hotkeys[i],
1593
- keys = _editor$hotkeys$i.keys,
1594
- operation = _editor$hotkeys$i.operation,
1595
- mark = _editor$hotkeys$i.mark;
1596
-
1597
- if (isHotkey(keys, e)) {
1598
- e.preventDefault();
1599
- e.stopPropagation();
1600
-
1601
- if (typeof operation === "function") {
1602
- return operation(editor);
1603
- }
1604
-
1605
- switch (operation) {
1606
- case "formatText":
1607
- {
1608
- return formatText(editor, mark);
1609
- }
1610
- }
1611
-
1612
- break;
1613
- }
1614
- }
1615
- }
1616
- }
1617
- };
1618
- var defaultHotkeys = [{
1619
- operation: "formatText",
1620
- keys: "mod+b",
1621
- mark: {
1622
- bold: true
1623
- }
1624
- }, {
1625
- operation: "formatText",
1626
- keys: "mod+i",
1627
- mark: {
1628
- italic: true
1629
- }
1630
- }, {
1631
- operation: "formatText",
1632
- keys: "mod+u",
1633
- mark: {
1634
- underline: true
1635
- }
1636
- }, {
1637
- operation: "formatText",
1638
- keys: "mod+shift+c",
1639
- mark: {
1640
- code: true
1641
- }
1642
- }, {
1643
- operation: "formatText",
1644
- keys: "mod+shift+x",
1645
- mark: {
1646
- strikethrough: true
1647
- }
1648
- }, {
1649
- operation: "formatText",
1650
- keys: "mod+shift+h",
1651
- mark: {
1652
- highlight: true
1653
- }
1654
- }];
1655
-
1656
- var onDrop = function onDrop(editor, e) {
1657
- var _e$dataTransfer;
1658
-
1659
- if (((_e$dataTransfer = e.dataTransfer) == null ? void 0 : _e$dataTransfer.files.length) > 0) {
1660
- var _e$dataTransfer2;
1661
-
1662
- e.preventDefault();
1663
- console.log((_e$dataTransfer2 = e.dataTransfer) == null ? void 0 : _e$dataTransfer2.files);
1664
- }
1665
- };
1666
- var onDragOver = function onDragOver(editor, e) {
1667
- var _e$dataTransfer3;
1668
-
1669
- e.preventDefault();
1670
-
1671
- if (((_e$dataTransfer3 = e.dataTransfer) == null ? void 0 : _e$dataTransfer3.files.length) > 0) {
1672
- var _e$dataTransfer4;
1673
-
1674
- e.preventDefault();
1675
- console.log((_e$dataTransfer4 = e.dataTransfer) == null ? void 0 : _e$dataTransfer4.files);
1676
- }
1677
- };
1678
-
1679
- var createWSProvider = function createWSProvider(room) {
1680
- return new Promise(function (res) {
1681
- var doc = new yjs.Doc();
1682
- var prod = "wss://edytor-production.up.railway.app";
1683
- console.log("development");
1684
- var provider = new yWebsocket.WebsocketProvider( prod, room || "edytor", doc, {
1685
- connect: true
1686
- });
1687
- provider.on("status", function (_ref) {
1688
- var status = _ref.status;
1689
-
1690
- if (status === "connected") {
1691
- return res(provider);
1692
- }
1693
- });
1694
- });
1695
- };
1696
-
1697
- exports.DocFromJson = DocFromJson;
1698
- exports.Dropper = Dropper;
1699
- exports.EdytorDoc = EdytorDoc;
1700
- exports.EdytorSelection = EdytorSelection;
1701
- exports.LeavesHarvest = LeavesHarvest;
1702
- exports.YNode = YNode;
1703
- exports.applyMarksFromParent = applyMarksFromParent;
1704
- exports.areLeafsMergeable = areLeafsMergeable;
1705
- exports.copyNode = copyNode;
1706
- exports.createLeaf = createLeaf$1;
1707
- exports.createNode = createNode;
1708
- exports.createWSProvider = createWSProvider;
1709
- exports.defaultHotkeys = defaultHotkeys;
1710
- exports.deleteLeafText = deleteLeafText;
1711
- exports.deleteNode = deleteNode;
1712
- exports.deleteText = deleteText;
1713
- exports.formatAtEqualPath = formatAtEqualPath;
1714
- exports.formatText = formatText;
1715
- exports.getChildren = getChildren;
1716
- exports.getContainerAtPath = getContainerAtPath;
1717
- exports.getId = getId;
1718
- exports.getIndex = getIndex;
1719
- exports.getLeafAtPath = getLeafAtPath;
1720
- exports.getNode = getNode;
1721
- exports.getNodeAtPath = getNodeAtPath;
1722
- exports.getNodeChildren = getNodeChildren;
1723
- exports.getNodeContainer = getNodeContainer;
1724
- exports.getNodeContent = getNodeContent;
1725
- exports.getPath = getPath;
1726
- exports.hasChildren = hasChildren;
1727
- exports.insertText = insertText;
1728
- exports.insertTextInLeaf = insertTextInLeaf;
1729
- exports.isLeafEmpty = isLeafEmpty;
1730
- exports.isNodeContentEmpty = isNodeContentEmpty;
1731
- exports.isNodeEmpty = isNodeEmpty;
1732
- exports.leafData = leafData;
1733
- exports.leafLength = leafLength;
1734
- exports.leafNode = leafNode;
1735
- exports.leafNodeChildren = leafNodeChildren;
1736
- exports.leafNodeChildrenLength = leafNodeChildrenLength;
1737
- exports.leafNodeContent = leafNodeContent;
1738
- exports.leafNodeContentLength = leafNodeContentLength;
1739
- exports.leafNodeContentStringLength = leafNodeContentStringLength;
1740
- exports.leafNodeId = leafNodeId;
1741
- exports.leafString = leafString;
1742
- exports.leafText = leafText;
1743
- exports.mergeContentWithNextLeaf = mergeContentWithNextLeaf;
1744
- exports.mergeContentWithPrevLeaf = mergeContentWithPrevLeaf;
1745
- exports.mergeLeafs = mergeLeafs;
1746
- exports.moveNode = moveNode;
1747
- exports.nanoid = nanoid;
1748
- exports.nestNode = nestNode;
1749
- exports.nodeString = nodeString;
1750
- exports.onBeforeInput = onBeforeInput;
1751
- exports.onDragOver = onDragOver;
1752
- exports.onDrop = onDrop;
1753
- exports.onKeyDown = onKeyDown;
1754
- exports.removeEmptyText = removeEmptyText;
1755
- exports.removeIfEmpty = removeIfEmpty;
1756
- exports.replaceLeafText = replaceLeafText;
1757
- exports.setLeafData = setLeafData;
1758
- exports.setLeafText = setLeafText;
1759
- exports.splitLeaf = splitLeaf;
1760
- exports.splitNode = splitNode;
1761
- exports.toString = toString;
1762
- exports.traverse = traverse;
1763
- //# sourceMappingURL=edytor.cjs.development.js.map