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