edytor 0.0.7 → 0.0.9

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