slate-react 0.58.0 → 0.58.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/editable.d.ts.map +1 -1
- package/dist/components/leaf.d.ts.map +1 -1
- package/dist/index.es.js +23 -10
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +512 -319
- package/dist/index.js.map +1 -1
- package/dist/slate-react.js +23 -10
- package/dist/slate-react.min.js +1 -1
- package/dist/utils/environment.d.ts +1 -0
- package/dist/utils/environment.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -28,6 +28,58 @@ function _defineProperty(obj, key, value) {
|
|
|
28
28
|
return obj;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
var defineProperty = _defineProperty;
|
|
32
|
+
|
|
33
|
+
function _arrayWithHoles(arr) {
|
|
34
|
+
if (Array.isArray(arr)) return arr;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var arrayWithHoles = _arrayWithHoles;
|
|
38
|
+
|
|
39
|
+
function _iterableToArrayLimit(arr, i) {
|
|
40
|
+
if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var _arr = [];
|
|
45
|
+
var _n = true;
|
|
46
|
+
var _d = false;
|
|
47
|
+
var _e = undefined;
|
|
48
|
+
|
|
49
|
+
try {
|
|
50
|
+
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
|
51
|
+
_arr.push(_s.value);
|
|
52
|
+
|
|
53
|
+
if (i && _arr.length === i) break;
|
|
54
|
+
}
|
|
55
|
+
} catch (err) {
|
|
56
|
+
_d = true;
|
|
57
|
+
_e = err;
|
|
58
|
+
} finally {
|
|
59
|
+
try {
|
|
60
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
61
|
+
} finally {
|
|
62
|
+
if (_d) throw _e;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return _arr;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
var iterableToArrayLimit = _iterableToArrayLimit;
|
|
70
|
+
|
|
71
|
+
function _nonIterableRest() {
|
|
72
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
var nonIterableRest = _nonIterableRest;
|
|
76
|
+
|
|
77
|
+
function _slicedToArray(arr, i) {
|
|
78
|
+
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
var slicedToArray = _slicedToArray;
|
|
82
|
+
|
|
31
83
|
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
32
84
|
if (source == null) return {};
|
|
33
85
|
var target = {};
|
|
@@ -43,9 +95,11 @@ function _objectWithoutPropertiesLoose(source, excluded) {
|
|
|
43
95
|
return target;
|
|
44
96
|
}
|
|
45
97
|
|
|
98
|
+
var objectWithoutPropertiesLoose = _objectWithoutPropertiesLoose;
|
|
99
|
+
|
|
46
100
|
function _objectWithoutProperties(source, excluded) {
|
|
47
101
|
if (source == null) return {};
|
|
48
|
-
var target =
|
|
102
|
+
var target = objectWithoutPropertiesLoose(source, excluded);
|
|
49
103
|
var key, i;
|
|
50
104
|
|
|
51
105
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -62,6 +116,46 @@ function _objectWithoutProperties(source, excluded) {
|
|
|
62
116
|
return target;
|
|
63
117
|
}
|
|
64
118
|
|
|
119
|
+
var objectWithoutProperties = _objectWithoutProperties;
|
|
120
|
+
|
|
121
|
+
function _arrayWithoutHoles(arr) {
|
|
122
|
+
if (Array.isArray(arr)) {
|
|
123
|
+
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
|
|
124
|
+
arr2[i] = arr[i];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return arr2;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var arrayWithoutHoles = _arrayWithoutHoles;
|
|
132
|
+
|
|
133
|
+
function _iterableToArray(iter) {
|
|
134
|
+
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
var iterableToArray = _iterableToArray;
|
|
138
|
+
|
|
139
|
+
function _nonIterableSpread() {
|
|
140
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
var nonIterableSpread = _nonIterableSpread;
|
|
144
|
+
|
|
145
|
+
function _toConsumableArray(arr) {
|
|
146
|
+
return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var toConsumableArray = _toConsumableArray;
|
|
150
|
+
|
|
151
|
+
function _classCallCheck(instance, Constructor) {
|
|
152
|
+
if (!(instance instanceof Constructor)) {
|
|
153
|
+
throw new TypeError("Cannot call a class as a function");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
var classCallCheck = _classCallCheck;
|
|
158
|
+
|
|
65
159
|
/**
|
|
66
160
|
* An auto-incrementing identifier for keys.
|
|
67
161
|
*/
|
|
@@ -71,12 +165,11 @@ var n = 0;
|
|
|
71
165
|
* want to be able to use them as keys in `WeakMap` objects.
|
|
72
166
|
*/
|
|
73
167
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.id = "".concat(n++);
|
|
77
|
-
}
|
|
168
|
+
var Key = function Key() {
|
|
169
|
+
classCallCheck(this, Key);
|
|
78
170
|
|
|
79
|
-
|
|
171
|
+
this.id = "".concat(n++);
|
|
172
|
+
};
|
|
80
173
|
|
|
81
174
|
/**
|
|
82
175
|
* Two weak maps that allow us rebuild a path given a node. They are populated
|
|
@@ -111,52 +204,52 @@ var EDITOR_TO_ON_CHANGE = new WeakMap();
|
|
|
111
204
|
|
|
112
205
|
var PLACEHOLDER_SYMBOL = Symbol('placeholder');
|
|
113
206
|
|
|
114
|
-
/**
|
|
115
|
-
* Types.
|
|
116
|
-
*/
|
|
117
207
|
/**
|
|
118
208
|
* Check if a DOM node is a comment node.
|
|
119
209
|
*/
|
|
120
210
|
|
|
121
|
-
var isDOMComment = value
|
|
211
|
+
var isDOMComment = function isDOMComment(value) {
|
|
122
212
|
return isDOMNode(value) && value.nodeType === 8;
|
|
123
213
|
};
|
|
124
214
|
/**
|
|
125
215
|
* Check if a DOM node is an element node.
|
|
126
216
|
*/
|
|
127
217
|
|
|
128
|
-
var isDOMElement = value
|
|
218
|
+
var isDOMElement = function isDOMElement(value) {
|
|
129
219
|
return isDOMNode(value) && value.nodeType === 1;
|
|
130
220
|
};
|
|
131
221
|
/**
|
|
132
222
|
* Check if a value is a DOM node.
|
|
133
223
|
*/
|
|
134
224
|
|
|
135
|
-
var isDOMNode = value
|
|
225
|
+
var isDOMNode = function isDOMNode(value) {
|
|
136
226
|
return value instanceof Node;
|
|
137
227
|
};
|
|
138
228
|
/**
|
|
139
229
|
* Check if a DOM node is an element node.
|
|
140
230
|
*/
|
|
141
231
|
|
|
142
|
-
var isDOMText = value
|
|
232
|
+
var isDOMText = function isDOMText(value) {
|
|
143
233
|
return isDOMNode(value) && value.nodeType === 3;
|
|
144
234
|
};
|
|
145
235
|
/**
|
|
146
236
|
* Checks whether a paste event is a plaintext-only event.
|
|
147
237
|
*/
|
|
148
238
|
|
|
149
|
-
var isPlainTextOnlyPaste = event
|
|
239
|
+
var isPlainTextOnlyPaste = function isPlainTextOnlyPaste(event) {
|
|
150
240
|
return event.clipboardData && event.clipboardData.getData('text/plain') !== '' && event.clipboardData.types.length === 1;
|
|
151
241
|
};
|
|
152
242
|
/**
|
|
153
243
|
* Normalize a DOM point so that it always refers to a text node.
|
|
154
244
|
*/
|
|
155
245
|
|
|
156
|
-
var normalizeDOMPoint = domPoint
|
|
157
|
-
var
|
|
246
|
+
var normalizeDOMPoint = function normalizeDOMPoint(domPoint) {
|
|
247
|
+
var _domPoint = slicedToArray(domPoint, 2),
|
|
248
|
+
node = _domPoint[0],
|
|
249
|
+
offset = _domPoint[1]; // If it's an element node, its offset refers to the index of its children
|
|
158
250
|
// including comment nodes, so try to find the right text child node.
|
|
159
251
|
|
|
252
|
+
|
|
160
253
|
if (isDOMElement(node) && node.childNodes.length) {
|
|
161
254
|
var isLast = offset === node.childNodes.length;
|
|
162
255
|
var direction = isLast ? 'backward' : 'forward';
|
|
@@ -181,10 +274,8 @@ var normalizeDOMPoint = domPoint => {
|
|
|
181
274
|
* `direction`.
|
|
182
275
|
*/
|
|
183
276
|
|
|
184
|
-
var getEditableChild = (parent, index, direction)
|
|
185
|
-
var
|
|
186
|
-
childNodes
|
|
187
|
-
} = parent;
|
|
277
|
+
var getEditableChild = function getEditableChild(parent, index, direction) {
|
|
278
|
+
var childNodes = parent.childNodes;
|
|
188
279
|
var child = childNodes[index];
|
|
189
280
|
var i = index;
|
|
190
281
|
var triedForward = false;
|
|
@@ -223,7 +314,7 @@ var getEditableChild = (parent, index, direction) => {
|
|
|
223
314
|
* The domNode must be attached to the DOM.
|
|
224
315
|
*/
|
|
225
316
|
|
|
226
|
-
var getPlainText = domNode
|
|
317
|
+
var getPlainText = function getPlainText(domNode) {
|
|
227
318
|
var text = '';
|
|
228
319
|
|
|
229
320
|
if (isDOMText(domNode) && domNode.nodeValue) {
|
|
@@ -231,7 +322,8 @@ var getPlainText = domNode => {
|
|
|
231
322
|
}
|
|
232
323
|
|
|
233
324
|
if (isDOMElement(domNode)) {
|
|
234
|
-
for (var
|
|
325
|
+
for (var _i = 0, _Array$from = Array.from(domNode.childNodes); _i < _Array$from.length; _i++) {
|
|
326
|
+
var childNode = _Array$from[_i];
|
|
235
327
|
text += getPlainText(childNode);
|
|
236
328
|
}
|
|
237
329
|
|
|
@@ -249,7 +341,7 @@ var ReactEditor = {
|
|
|
249
341
|
/**
|
|
250
342
|
* Find a key for a Slate node.
|
|
251
343
|
*/
|
|
252
|
-
findKey(editor, node) {
|
|
344
|
+
findKey: function findKey(editor, node) {
|
|
253
345
|
var key = NODE_TO_KEY.get(node);
|
|
254
346
|
|
|
255
347
|
if (!key) {
|
|
@@ -263,7 +355,7 @@ var ReactEditor = {
|
|
|
263
355
|
/**
|
|
264
356
|
* Find the path of Slate node.
|
|
265
357
|
*/
|
|
266
|
-
findPath(editor, node) {
|
|
358
|
+
findPath: function findPath(editor, node) {
|
|
267
359
|
var path = [];
|
|
268
360
|
var child = node;
|
|
269
361
|
|
|
@@ -294,21 +386,21 @@ var ReactEditor = {
|
|
|
294
386
|
/**
|
|
295
387
|
* Check if the editor is focused.
|
|
296
388
|
*/
|
|
297
|
-
isFocused(editor) {
|
|
389
|
+
isFocused: function isFocused(editor) {
|
|
298
390
|
return !!IS_FOCUSED.get(editor);
|
|
299
391
|
},
|
|
300
392
|
|
|
301
393
|
/**
|
|
302
394
|
* Check if the editor is in read-only mode.
|
|
303
395
|
*/
|
|
304
|
-
isReadOnly(editor) {
|
|
396
|
+
isReadOnly: function isReadOnly(editor) {
|
|
305
397
|
return !!IS_READ_ONLY.get(editor);
|
|
306
398
|
},
|
|
307
399
|
|
|
308
400
|
/**
|
|
309
401
|
* Blur the editor.
|
|
310
402
|
*/
|
|
311
|
-
blur(editor) {
|
|
403
|
+
blur: function blur(editor) {
|
|
312
404
|
var el = ReactEditor.toDOMNode(editor, editor);
|
|
313
405
|
IS_FOCUSED.set(editor, false);
|
|
314
406
|
|
|
@@ -320,7 +412,7 @@ var ReactEditor = {
|
|
|
320
412
|
/**
|
|
321
413
|
* Focus the editor.
|
|
322
414
|
*/
|
|
323
|
-
focus(editor) {
|
|
415
|
+
focus: function focus(editor) {
|
|
324
416
|
var el = ReactEditor.toDOMNode(editor, editor);
|
|
325
417
|
IS_FOCUSED.set(editor, true);
|
|
326
418
|
|
|
@@ -334,10 +426,8 @@ var ReactEditor = {
|
|
|
334
426
|
/**
|
|
335
427
|
* Deselect the editor.
|
|
336
428
|
*/
|
|
337
|
-
deselect(editor) {
|
|
338
|
-
var
|
|
339
|
-
selection
|
|
340
|
-
} = editor;
|
|
429
|
+
deselect: function deselect(editor) {
|
|
430
|
+
var selection = editor.selection;
|
|
341
431
|
var domSelection = window.getSelection();
|
|
342
432
|
|
|
343
433
|
if (domSelection && domSelection.rangeCount > 0) {
|
|
@@ -352,11 +442,10 @@ var ReactEditor = {
|
|
|
352
442
|
/**
|
|
353
443
|
* Check if a DOM node is within the editor.
|
|
354
444
|
*/
|
|
355
|
-
hasDOMNode(editor, target) {
|
|
445
|
+
hasDOMNode: function hasDOMNode(editor, target) {
|
|
356
446
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
357
|
-
var
|
|
358
|
-
|
|
359
|
-
} = options;
|
|
447
|
+
var _options$editable = options.editable,
|
|
448
|
+
editable = _options$editable === void 0 ? false : _options$editable;
|
|
360
449
|
var editorEl = ReactEditor.toDOMNode(editor, editor);
|
|
361
450
|
var targetEl; // COMPAT: In Firefox, reading `target.nodeType` will throw an error if
|
|
362
451
|
// target is originating from an internal "restricted" element (e.g. a
|
|
@@ -381,21 +470,21 @@ var ReactEditor = {
|
|
|
381
470
|
/**
|
|
382
471
|
* Insert data from a `DataTransfer` into the editor.
|
|
383
472
|
*/
|
|
384
|
-
insertData(editor, data) {
|
|
473
|
+
insertData: function insertData(editor, data) {
|
|
385
474
|
editor.insertData(data);
|
|
386
475
|
},
|
|
387
476
|
|
|
388
477
|
/**
|
|
389
478
|
* Sets data from the currently selected fragment on a `DataTransfer`.
|
|
390
479
|
*/
|
|
391
|
-
setFragmentData(editor, data) {
|
|
480
|
+
setFragmentData: function setFragmentData(editor, data) {
|
|
392
481
|
editor.setFragmentData(data);
|
|
393
482
|
},
|
|
394
483
|
|
|
395
484
|
/**
|
|
396
485
|
* Find the native DOM element from a Slate node.
|
|
397
486
|
*/
|
|
398
|
-
toDOMNode(editor, node) {
|
|
487
|
+
toDOMNode: function toDOMNode(editor, node) {
|
|
399
488
|
var domNode = slate.Editor.isEditor(node) ? EDITOR_TO_ELEMENT.get(editor) : KEY_TO_ELEMENT.get(ReactEditor.findKey(editor, node));
|
|
400
489
|
|
|
401
490
|
if (!domNode) {
|
|
@@ -408,13 +497,16 @@ var ReactEditor = {
|
|
|
408
497
|
/**
|
|
409
498
|
* Find a native DOM selection point from a Slate point.
|
|
410
499
|
*/
|
|
411
|
-
toDOMPoint(editor, point) {
|
|
412
|
-
var
|
|
500
|
+
toDOMPoint: function toDOMPoint(editor, point) {
|
|
501
|
+
var _Editor$node = slate.Editor.node(editor, point.path),
|
|
502
|
+
_Editor$node2 = slicedToArray(_Editor$node, 1),
|
|
503
|
+
node = _Editor$node2[0];
|
|
504
|
+
|
|
413
505
|
var el = ReactEditor.toDOMNode(editor, node);
|
|
414
506
|
var domPoint; // If we're inside a void node, force the offset to 0, otherwise the zero
|
|
415
507
|
// width spacing character will result in an incorrect offset of 1
|
|
416
508
|
|
|
417
|
-
if (slate.Editor
|
|
509
|
+
if (slate.Editor["void"](editor, {
|
|
418
510
|
at: point
|
|
419
511
|
})) {
|
|
420
512
|
point = {
|
|
@@ -430,16 +522,15 @@ var ReactEditor = {
|
|
|
430
522
|
var texts = Array.from(el.querySelectorAll(selector));
|
|
431
523
|
var start = 0;
|
|
432
524
|
|
|
433
|
-
for (var
|
|
525
|
+
for (var _i = 0, _texts = texts; _i < _texts.length; _i++) {
|
|
526
|
+
var text = _texts[_i];
|
|
434
527
|
var domNode = text.childNodes[0];
|
|
435
528
|
|
|
436
529
|
if (domNode == null || domNode.textContent == null) {
|
|
437
530
|
continue;
|
|
438
531
|
}
|
|
439
532
|
|
|
440
|
-
var
|
|
441
|
-
length
|
|
442
|
-
} = domNode.textContent;
|
|
533
|
+
var length = domNode.textContent.length;
|
|
443
534
|
var attr = text.getAttribute('data-slate-length');
|
|
444
535
|
var trueLength = attr == null ? length : parseInt(attr, 10);
|
|
445
536
|
var end = start + trueLength;
|
|
@@ -463,20 +554,27 @@ var ReactEditor = {
|
|
|
463
554
|
/**
|
|
464
555
|
* Find a native DOM range from a Slate `range`.
|
|
465
556
|
*/
|
|
466
|
-
toDOMRange(editor, range) {
|
|
467
|
-
var
|
|
468
|
-
|
|
469
|
-
focus
|
|
470
|
-
} = range;
|
|
557
|
+
toDOMRange: function toDOMRange(editor, range) {
|
|
558
|
+
var anchor = range.anchor,
|
|
559
|
+
focus = range.focus;
|
|
471
560
|
var isBackward = slate.Range.isBackward(range);
|
|
472
561
|
var domAnchor = ReactEditor.toDOMPoint(editor, anchor);
|
|
473
562
|
var domFocus = slate.Range.isCollapsed(range) ? domAnchor : ReactEditor.toDOMPoint(editor, focus);
|
|
474
563
|
var domRange = window.document.createRange();
|
|
475
|
-
|
|
476
|
-
var
|
|
564
|
+
|
|
565
|
+
var _ref = isBackward ? domFocus : domAnchor,
|
|
566
|
+
_ref2 = slicedToArray(_ref, 2),
|
|
567
|
+
startNode = _ref2[0],
|
|
568
|
+
startOffset = _ref2[1];
|
|
569
|
+
|
|
570
|
+
var _ref3 = isBackward ? domAnchor : domFocus,
|
|
571
|
+
_ref4 = slicedToArray(_ref3, 2),
|
|
572
|
+
endNode = _ref4[0],
|
|
573
|
+
endOffset = _ref4[1]; // A slate Point at zero-width Leaf always has an offset of 0 but a native DOM selection at
|
|
477
574
|
// zero-width node has an offset of 1 so we have to check if we are in a zero-width node and
|
|
478
575
|
// adjust the offset accordingly.
|
|
479
576
|
|
|
577
|
+
|
|
480
578
|
var startEl = isDOMElement(startNode) ? startNode : startNode.parentElement;
|
|
481
579
|
var isStartAtZeroWidth = !!startEl.getAttribute('data-slate-zero-width');
|
|
482
580
|
var endEl = isDOMElement(endNode) ? endNode : endNode.parentElement;
|
|
@@ -489,7 +587,7 @@ var ReactEditor = {
|
|
|
489
587
|
/**
|
|
490
588
|
* Find a Slate node from a native DOM `element`.
|
|
491
589
|
*/
|
|
492
|
-
toSlateNode(editor, domNode) {
|
|
590
|
+
toSlateNode: function toSlateNode(editor, domNode) {
|
|
493
591
|
var domEl = isDOMElement(domNode) ? domNode : domNode.parentElement;
|
|
494
592
|
|
|
495
593
|
if (domEl && !domEl.hasAttribute('data-slate-node')) {
|
|
@@ -508,16 +606,15 @@ var ReactEditor = {
|
|
|
508
606
|
/**
|
|
509
607
|
* Get the target range from a DOM `event`.
|
|
510
608
|
*/
|
|
511
|
-
findEventRange(editor, event) {
|
|
609
|
+
findEventRange: function findEventRange(editor, event) {
|
|
512
610
|
if ('nativeEvent' in event) {
|
|
513
611
|
event = event.nativeEvent;
|
|
514
612
|
}
|
|
515
613
|
|
|
516
|
-
var
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
} = event;
|
|
614
|
+
var _event = event,
|
|
615
|
+
x = _event.clientX,
|
|
616
|
+
y = _event.clientY,
|
|
617
|
+
target = _event.target;
|
|
521
618
|
|
|
522
619
|
if (x == null || y == null) {
|
|
523
620
|
throw new Error("Cannot resolve a Slate range from a DOM event: ".concat(event));
|
|
@@ -545,9 +642,8 @@ var ReactEditor = {
|
|
|
545
642
|
|
|
546
643
|
|
|
547
644
|
var domRange;
|
|
548
|
-
var
|
|
549
|
-
|
|
550
|
-
} = window; // COMPAT: In Firefox, `caretRangeFromPoint` doesn't exist. (2016/07/25)
|
|
645
|
+
var _window = window,
|
|
646
|
+
document = _window.document; // COMPAT: In Firefox, `caretRangeFromPoint` doesn't exist. (2016/07/25)
|
|
551
647
|
|
|
552
648
|
if (document.caretRangeFromPoint) {
|
|
553
649
|
domRange = document.caretRangeFromPoint(x, y);
|
|
@@ -573,8 +669,12 @@ var ReactEditor = {
|
|
|
573
669
|
/**
|
|
574
670
|
* Find a Slate point from a DOM selection's `domNode` and `domOffset`.
|
|
575
671
|
*/
|
|
576
|
-
toSlatePoint(editor, domPoint) {
|
|
577
|
-
var
|
|
672
|
+
toSlatePoint: function toSlatePoint(editor, domPoint) {
|
|
673
|
+
var _normalizeDOMPoint = normalizeDOMPoint(domPoint),
|
|
674
|
+
_normalizeDOMPoint2 = slicedToArray(_normalizeDOMPoint, 2),
|
|
675
|
+
nearestNode = _normalizeDOMPoint2[0],
|
|
676
|
+
nearestOffset = _normalizeDOMPoint2[1];
|
|
677
|
+
|
|
578
678
|
var parentNode = nearestNode.parentNode;
|
|
579
679
|
var textNode = null;
|
|
580
680
|
var offset = 0;
|
|
@@ -591,8 +691,8 @@ var ReactEditor = {
|
|
|
591
691
|
range.setStart(textNode, 0);
|
|
592
692
|
range.setEnd(nearestNode, nearestOffset);
|
|
593
693
|
var contents = range.cloneContents();
|
|
594
|
-
var removals = [
|
|
595
|
-
removals.forEach(el
|
|
694
|
+
var removals = [].concat(toConsumableArray(contents.querySelectorAll('[data-slate-zero-width]')), toConsumableArray(contents.querySelectorAll('[contenteditable=false]')));
|
|
695
|
+
removals.forEach(function (el) {
|
|
596
696
|
el.parentNode.removeChild(el);
|
|
597
697
|
}); // COMPAT: Edge has a bug where Range.prototype.toString() will
|
|
598
698
|
// convert \n into \r\n. The bug causes a loop when slate-react
|
|
@@ -631,15 +731,15 @@ var ReactEditor = {
|
|
|
631
731
|
var slateNode = ReactEditor.toSlateNode(editor, textNode);
|
|
632
732
|
var path = ReactEditor.findPath(editor, slateNode);
|
|
633
733
|
return {
|
|
634
|
-
path,
|
|
635
|
-
offset
|
|
734
|
+
path: path,
|
|
735
|
+
offset: offset
|
|
636
736
|
};
|
|
637
737
|
},
|
|
638
738
|
|
|
639
739
|
/**
|
|
640
740
|
* Find a Slate range from a DOM range or selection.
|
|
641
741
|
*/
|
|
642
|
-
toSlateRange(editor, domRange) {
|
|
742
|
+
toSlateRange: function toSlateRange(editor, domRange) {
|
|
643
743
|
var el = domRange instanceof Selection ? domRange.anchorNode : domRange.startContainer;
|
|
644
744
|
var anchorNode;
|
|
645
745
|
var anchorOffset;
|
|
@@ -670,11 +770,10 @@ var ReactEditor = {
|
|
|
670
770
|
var anchor = ReactEditor.toSlatePoint(editor, [anchorNode, anchorOffset]);
|
|
671
771
|
var focus = isCollapsed ? anchor : ReactEditor.toSlatePoint(editor, [focusNode, focusOffset]);
|
|
672
772
|
return {
|
|
673
|
-
anchor,
|
|
674
|
-
focus
|
|
773
|
+
anchor: anchor,
|
|
774
|
+
focus: focus
|
|
675
775
|
};
|
|
676
776
|
}
|
|
677
|
-
|
|
678
777
|
};
|
|
679
778
|
|
|
680
779
|
/**
|
|
@@ -686,7 +785,7 @@ var FocusedContext = React.createContext(false);
|
|
|
686
785
|
* Get the current `focused` state of the editor.
|
|
687
786
|
*/
|
|
688
787
|
|
|
689
|
-
var useFocused = ()
|
|
788
|
+
var useFocused = function useFocused() {
|
|
690
789
|
return React.useContext(FocusedContext);
|
|
691
790
|
};
|
|
692
791
|
|
|
@@ -699,7 +798,7 @@ var EditorContext = React.createContext(null);
|
|
|
699
798
|
* Get the current editor object from the React context.
|
|
700
799
|
*/
|
|
701
800
|
|
|
702
|
-
var useEditor = ()
|
|
801
|
+
var useEditor = function useEditor() {
|
|
703
802
|
var editor = React.useContext(EditorContext);
|
|
704
803
|
|
|
705
804
|
if (!editor) {
|
|
@@ -719,14 +818,16 @@ var SlateContext = React.createContext(null);
|
|
|
719
818
|
* Get the current editor object from the React context.
|
|
720
819
|
*/
|
|
721
820
|
|
|
722
|
-
var useSlate = ()
|
|
821
|
+
var useSlate = function useSlate() {
|
|
723
822
|
var context = React.useContext(SlateContext);
|
|
724
823
|
|
|
725
824
|
if (!context) {
|
|
726
825
|
throw new Error("The `useSlate` hook must be used inside the <SlateProvider> component's context.");
|
|
727
826
|
}
|
|
728
827
|
|
|
729
|
-
var
|
|
828
|
+
var _context = slicedToArray(context, 1),
|
|
829
|
+
editor = _context[0];
|
|
830
|
+
|
|
730
831
|
return editor;
|
|
731
832
|
};
|
|
732
833
|
|
|
@@ -735,29 +836,31 @@ var useSlate = () => {
|
|
|
735
836
|
* is a mutable singleton so it won't ever register as "changed" otherwise.
|
|
736
837
|
*/
|
|
737
838
|
|
|
738
|
-
var Slate = props
|
|
739
|
-
var
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
839
|
+
var Slate = function Slate(props) {
|
|
840
|
+
var editor = props.editor,
|
|
841
|
+
children = props.children,
|
|
842
|
+
onChange = props.onChange,
|
|
843
|
+
value = props.value,
|
|
844
|
+
rest = objectWithoutProperties(props, ["editor", "children", "onChange", "value"]);
|
|
845
|
+
|
|
846
|
+
var _useState = React.useState(0),
|
|
847
|
+
_useState2 = slicedToArray(_useState, 2),
|
|
848
|
+
key = _useState2[0],
|
|
849
|
+
setKey = _useState2[1];
|
|
850
|
+
|
|
851
|
+
var context = React.useMemo(function () {
|
|
749
852
|
editor.children = value;
|
|
750
853
|
Object.assign(editor, rest);
|
|
751
854
|
return [editor];
|
|
752
|
-
}, [key, value
|
|
753
|
-
var onContextChange = React.useCallback(()
|
|
855
|
+
}, [key, value].concat(toConsumableArray(Object.values(rest))));
|
|
856
|
+
var onContextChange = React.useCallback(function () {
|
|
754
857
|
onChange(editor.children);
|
|
755
858
|
setKey(key + 1);
|
|
756
859
|
}, [key, onChange]);
|
|
757
860
|
EDITOR_TO_ON_CHANGE.set(editor, onContextChange);
|
|
758
|
-
React.useEffect(()
|
|
759
|
-
return ()
|
|
760
|
-
EDITOR_TO_ON_CHANGE.set(editor, ()
|
|
861
|
+
React.useEffect(function () {
|
|
862
|
+
return function () {
|
|
863
|
+
EDITOR_TO_ON_CHANGE.set(editor, function () {});
|
|
761
864
|
};
|
|
762
865
|
}, []);
|
|
763
866
|
return React__default.createElement(SlateContext.Provider, {
|
|
@@ -778,7 +881,7 @@ var ReadOnlyContext = React.createContext(false);
|
|
|
778
881
|
* Get the current `readOnly` state of the editor.
|
|
779
882
|
*/
|
|
780
883
|
|
|
781
|
-
var useReadOnly = ()
|
|
884
|
+
var useReadOnly = function useReadOnly() {
|
|
782
885
|
return React.useContext(ReadOnlyContext);
|
|
783
886
|
};
|
|
784
887
|
|
|
@@ -791,7 +894,7 @@ var SelectedContext = React.createContext(false);
|
|
|
791
894
|
* Get the current `selected` state of an element.
|
|
792
895
|
*/
|
|
793
896
|
|
|
794
|
-
var useSelected = ()
|
|
897
|
+
var useSelected = function useSelected() {
|
|
795
898
|
return React.useContext(SelectedContext);
|
|
796
899
|
};
|
|
797
900
|
|
|
@@ -799,14 +902,12 @@ var useSelected = () => {
|
|
|
799
902
|
* `withReact` adds React and DOM specific behaviors to the editor.
|
|
800
903
|
*/
|
|
801
904
|
|
|
802
|
-
var withReact = editor
|
|
905
|
+
var withReact = function withReact(editor) {
|
|
803
906
|
var e = editor;
|
|
804
|
-
var
|
|
805
|
-
|
|
806
|
-
onChange
|
|
807
|
-
} = e;
|
|
907
|
+
var apply = e.apply,
|
|
908
|
+
onChange = e.onChange;
|
|
808
909
|
|
|
809
|
-
e.apply = op
|
|
910
|
+
e.apply = function (op) {
|
|
810
911
|
var matches = [];
|
|
811
912
|
|
|
812
913
|
switch (op.type) {
|
|
@@ -814,11 +915,34 @@ var withReact = editor => {
|
|
|
814
915
|
case 'remove_text':
|
|
815
916
|
case 'set_node':
|
|
816
917
|
{
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
918
|
+
var _iteratorNormalCompletion = true;
|
|
919
|
+
var _didIteratorError = false;
|
|
920
|
+
var _iteratorError = undefined;
|
|
921
|
+
|
|
922
|
+
try {
|
|
923
|
+
for (var _iterator = slate.Editor.levels(e, {
|
|
924
|
+
at: op.path
|
|
925
|
+
})[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
926
|
+
var _step$value = slicedToArray(_step.value, 2),
|
|
927
|
+
node = _step$value[0],
|
|
928
|
+
path = _step$value[1];
|
|
929
|
+
|
|
930
|
+
var key = ReactEditor.findKey(e, node);
|
|
931
|
+
matches.push([path, key]);
|
|
932
|
+
}
|
|
933
|
+
} catch (err) {
|
|
934
|
+
_didIteratorError = true;
|
|
935
|
+
_iteratorError = err;
|
|
936
|
+
} finally {
|
|
937
|
+
try {
|
|
938
|
+
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
939
|
+
_iterator["return"]();
|
|
940
|
+
}
|
|
941
|
+
} finally {
|
|
942
|
+
if (_didIteratorError) {
|
|
943
|
+
throw _iteratorError;
|
|
944
|
+
}
|
|
945
|
+
}
|
|
822
946
|
}
|
|
823
947
|
|
|
824
948
|
break;
|
|
@@ -829,12 +953,35 @@ var withReact = editor => {
|
|
|
829
953
|
case 'merge_node':
|
|
830
954
|
case 'split_node':
|
|
831
955
|
{
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
var _key = ReactEditor.findKey(e, _node);
|
|
956
|
+
var _iteratorNormalCompletion2 = true;
|
|
957
|
+
var _didIteratorError2 = false;
|
|
958
|
+
var _iteratorError2 = undefined;
|
|
836
959
|
|
|
837
|
-
|
|
960
|
+
try {
|
|
961
|
+
for (var _iterator2 = slate.Editor.levels(e, {
|
|
962
|
+
at: slate.Path.parent(op.path)
|
|
963
|
+
})[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
964
|
+
var _step2$value = slicedToArray(_step2.value, 2),
|
|
965
|
+
_node = _step2$value[0],
|
|
966
|
+
_path = _step2$value[1];
|
|
967
|
+
|
|
968
|
+
var _key = ReactEditor.findKey(e, _node);
|
|
969
|
+
|
|
970
|
+
matches.push([_path, _key]);
|
|
971
|
+
}
|
|
972
|
+
} catch (err) {
|
|
973
|
+
_didIteratorError2 = true;
|
|
974
|
+
_iteratorError2 = err;
|
|
975
|
+
} finally {
|
|
976
|
+
try {
|
|
977
|
+
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
|
|
978
|
+
_iterator2["return"]();
|
|
979
|
+
}
|
|
980
|
+
} finally {
|
|
981
|
+
if (_didIteratorError2) {
|
|
982
|
+
throw _iteratorError2;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
838
985
|
}
|
|
839
986
|
|
|
840
987
|
break;
|
|
@@ -843,26 +990,35 @@ var withReact = editor => {
|
|
|
843
990
|
|
|
844
991
|
apply(op);
|
|
845
992
|
|
|
846
|
-
for (var
|
|
847
|
-
var
|
|
993
|
+
for (var _i = 0, _matches = matches; _i < _matches.length; _i++) {
|
|
994
|
+
var _matches$_i = slicedToArray(_matches[_i], 2),
|
|
995
|
+
_path2 = _matches$_i[0],
|
|
996
|
+
_key2 = _matches$_i[1];
|
|
997
|
+
|
|
998
|
+
var _Editor$node = slate.Editor.node(e, _path2),
|
|
999
|
+
_Editor$node2 = slicedToArray(_Editor$node, 1),
|
|
1000
|
+
_node2 = _Editor$node2[0];
|
|
1001
|
+
|
|
848
1002
|
NODE_TO_KEY.set(_node2, _key2);
|
|
849
1003
|
}
|
|
850
1004
|
};
|
|
851
1005
|
|
|
852
|
-
e.setFragmentData = data
|
|
853
|
-
var
|
|
854
|
-
selection
|
|
855
|
-
} = e;
|
|
1006
|
+
e.setFragmentData = function (data) {
|
|
1007
|
+
var selection = e.selection;
|
|
856
1008
|
|
|
857
1009
|
if (!selection) {
|
|
858
1010
|
return;
|
|
859
1011
|
}
|
|
860
1012
|
|
|
861
|
-
var
|
|
862
|
-
|
|
1013
|
+
var _Range$edges = slate.Range.edges(selection),
|
|
1014
|
+
_Range$edges2 = slicedToArray(_Range$edges, 2),
|
|
1015
|
+
start = _Range$edges2[0],
|
|
1016
|
+
end = _Range$edges2[1];
|
|
1017
|
+
|
|
1018
|
+
var startVoid = slate.Editor["void"](e, {
|
|
863
1019
|
at: start.path
|
|
864
1020
|
});
|
|
865
|
-
var endVoid = slate.Editor
|
|
1021
|
+
var endVoid = slate.Editor["void"](e, {
|
|
866
1022
|
at: end.path
|
|
867
1023
|
});
|
|
868
1024
|
|
|
@@ -876,7 +1032,7 @@ var withReact = editor => {
|
|
|
876
1032
|
var contents = domRange.cloneContents();
|
|
877
1033
|
var attach = contents.childNodes[0]; // Make sure attach is non-empty, since empty nodes will not get copied.
|
|
878
1034
|
|
|
879
|
-
contents.childNodes.forEach(node
|
|
1035
|
+
contents.childNodes.forEach(function (node) {
|
|
880
1036
|
if (node.textContent && node.textContent.trim() !== '') {
|
|
881
1037
|
attach = node;
|
|
882
1038
|
}
|
|
@@ -885,7 +1041,9 @@ var withReact = editor => {
|
|
|
885
1041
|
// content, since the spacer is before void's content in the DOM.
|
|
886
1042
|
|
|
887
1043
|
if (endVoid) {
|
|
888
|
-
var
|
|
1044
|
+
var _endVoid = slicedToArray(endVoid, 1),
|
|
1045
|
+
voidNode = _endVoid[0];
|
|
1046
|
+
|
|
889
1047
|
var r = domRange.cloneRange();
|
|
890
1048
|
var domNode = ReactEditor.toDOMNode(e, voidNode);
|
|
891
1049
|
r.setEndAfter(domNode);
|
|
@@ -902,7 +1060,7 @@ var withReact = editor => {
|
|
|
902
1060
|
// show up elsewhere when pasted.
|
|
903
1061
|
|
|
904
1062
|
|
|
905
|
-
Array.from(contents.querySelectorAll('[data-slate-zero-width]')).forEach(zw
|
|
1063
|
+
Array.from(contents.querySelectorAll('[data-slate-zero-width]')).forEach(function (zw) {
|
|
906
1064
|
var isNewline = zw.getAttribute('data-slate-zero-width') === 'n';
|
|
907
1065
|
zw.textContent = isNewline ? '\n' : '';
|
|
908
1066
|
}); // Set a `data-slate-fragment` attribute on a non-empty node, so it shows up
|
|
@@ -934,7 +1092,7 @@ var withReact = editor => {
|
|
|
934
1092
|
document.body.removeChild(div);
|
|
935
1093
|
};
|
|
936
1094
|
|
|
937
|
-
e.insertData = data
|
|
1095
|
+
e.insertData = function (data) {
|
|
938
1096
|
var fragment = data.getData('application/x-slate-fragment');
|
|
939
1097
|
|
|
940
1098
|
if (fragment) {
|
|
@@ -949,26 +1107,46 @@ var withReact = editor => {
|
|
|
949
1107
|
if (text) {
|
|
950
1108
|
var lines = text.split(/\r\n|\r|\n/);
|
|
951
1109
|
var split = false;
|
|
1110
|
+
var _iteratorNormalCompletion3 = true;
|
|
1111
|
+
var _didIteratorError3 = false;
|
|
1112
|
+
var _iteratorError3 = undefined;
|
|
952
1113
|
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1114
|
+
try {
|
|
1115
|
+
for (var _iterator3 = lines[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
1116
|
+
var line = _step3.value;
|
|
1117
|
+
|
|
1118
|
+
if (split) {
|
|
1119
|
+
slate.Transforms.splitNodes(e, {
|
|
1120
|
+
always: true
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
959
1123
|
|
|
960
|
-
|
|
961
|
-
|
|
1124
|
+
slate.Transforms.insertText(e, line);
|
|
1125
|
+
split = true;
|
|
1126
|
+
}
|
|
1127
|
+
} catch (err) {
|
|
1128
|
+
_didIteratorError3 = true;
|
|
1129
|
+
_iteratorError3 = err;
|
|
1130
|
+
} finally {
|
|
1131
|
+
try {
|
|
1132
|
+
if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
|
|
1133
|
+
_iterator3["return"]();
|
|
1134
|
+
}
|
|
1135
|
+
} finally {
|
|
1136
|
+
if (_didIteratorError3) {
|
|
1137
|
+
throw _iteratorError3;
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
962
1140
|
}
|
|
963
1141
|
}
|
|
964
1142
|
};
|
|
965
1143
|
|
|
966
|
-
e.onChange = ()
|
|
1144
|
+
e.onChange = function () {
|
|
967
1145
|
// COMPAT: React doesn't batch `setState` hook calls, which means that the
|
|
968
1146
|
// children and selection can get out of sync for one render pass. So we
|
|
969
1147
|
// have to use this unstable API to ensure it batches them. (2019/12/03)
|
|
970
1148
|
// https://github.com/facebook/react/issues/14259#issuecomment-439702367
|
|
971
|
-
ReactDOM.unstable_batchedUpdates(()
|
|
1149
|
+
ReactDOM.unstable_batchedUpdates(function () {
|
|
972
1150
|
var onContextChange = EDITOR_TO_ON_CHANGE.get(e);
|
|
973
1151
|
|
|
974
1152
|
if (onContextChange) {
|
|
@@ -986,13 +1164,11 @@ var withReact = editor => {
|
|
|
986
1164
|
* Leaf content strings.
|
|
987
1165
|
*/
|
|
988
1166
|
|
|
989
|
-
var String = props
|
|
990
|
-
var
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
text
|
|
995
|
-
} = props;
|
|
1167
|
+
var String = function String(props) {
|
|
1168
|
+
var isLast = props.isLast,
|
|
1169
|
+
leaf = props.leaf,
|
|
1170
|
+
parent = props.parent,
|
|
1171
|
+
text = props.text;
|
|
996
1172
|
var editor = useEditor();
|
|
997
1173
|
var path = ReactEditor.findPath(editor, text);
|
|
998
1174
|
var parentPath = slate.Path.parent(path); // COMPAT: Render text inside void nodes with a zero-width space.
|
|
@@ -1038,11 +1214,10 @@ var String = props => {
|
|
|
1038
1214
|
*/
|
|
1039
1215
|
|
|
1040
1216
|
|
|
1041
|
-
var TextString = props
|
|
1042
|
-
var
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
} = props;
|
|
1217
|
+
var TextString = function TextString(props) {
|
|
1218
|
+
var text = props.text,
|
|
1219
|
+
_props$isTrailing = props.isTrailing,
|
|
1220
|
+
isTrailing = _props$isTrailing === void 0 ? false : _props$isTrailing;
|
|
1046
1221
|
return React__default.createElement("span", {
|
|
1047
1222
|
"data-slate-string": true
|
|
1048
1223
|
}, text, isTrailing ? '\n' : null);
|
|
@@ -1052,29 +1227,30 @@ var TextString = props => {
|
|
|
1052
1227
|
*/
|
|
1053
1228
|
|
|
1054
1229
|
|
|
1055
|
-
var ZeroWidthString = props
|
|
1056
|
-
var
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1230
|
+
var ZeroWidthString = function ZeroWidthString(props) {
|
|
1231
|
+
var _props$length = props.length,
|
|
1232
|
+
length = _props$length === void 0 ? 0 : _props$length,
|
|
1233
|
+
_props$isLineBreak = props.isLineBreak,
|
|
1234
|
+
isLineBreak = _props$isLineBreak === void 0 ? false : _props$isLineBreak;
|
|
1060
1235
|
return React__default.createElement("span", {
|
|
1061
1236
|
"data-slate-zero-width": isLineBreak ? 'n' : 'z',
|
|
1062
1237
|
"data-slate-length": length
|
|
1063
|
-
},
|
|
1238
|
+
}, "\uFEFF", isLineBreak ? React__default.createElement("br", null) : null);
|
|
1064
1239
|
};
|
|
1065
1240
|
|
|
1066
1241
|
/**
|
|
1067
1242
|
* Individual leaves in a text node with unique formatting.
|
|
1068
1243
|
*/
|
|
1069
1244
|
|
|
1070
|
-
var Leaf = props
|
|
1071
|
-
var
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1245
|
+
var Leaf = function Leaf(props) {
|
|
1246
|
+
var leaf = props.leaf,
|
|
1247
|
+
isLast = props.isLast,
|
|
1248
|
+
text = props.text,
|
|
1249
|
+
parent = props.parent,
|
|
1250
|
+
_props$renderLeaf = props.renderLeaf,
|
|
1251
|
+
renderLeaf = _props$renderLeaf === void 0 ? function (props) {
|
|
1252
|
+
return React__default.createElement(DefaultLeaf, Object.assign({}, props));
|
|
1253
|
+
} : _props$renderLeaf;
|
|
1078
1254
|
var children = React__default.createElement(String, {
|
|
1079
1255
|
isLast: isLast,
|
|
1080
1256
|
leaf: leaf,
|
|
@@ -1088,11 +1264,14 @@ var Leaf = props => {
|
|
|
1088
1264
|
style: {
|
|
1089
1265
|
pointerEvents: 'none',
|
|
1090
1266
|
display: 'inline-block',
|
|
1091
|
-
verticalAlign: 'text-top',
|
|
1092
1267
|
width: '0',
|
|
1093
1268
|
maxWidth: '100%',
|
|
1094
1269
|
whiteSpace: 'nowrap',
|
|
1095
|
-
opacity: '0.333'
|
|
1270
|
+
opacity: '0.333',
|
|
1271
|
+
userSelect: 'none',
|
|
1272
|
+
fontStyle: 'normal',
|
|
1273
|
+
fontWeight: 'normal',
|
|
1274
|
+
textDecoration: 'none'
|
|
1096
1275
|
}
|
|
1097
1276
|
}, leaf.placeholder), children);
|
|
1098
1277
|
} // COMPAT: Having the `data-` attributes on these leaf elements ensures that
|
|
@@ -1104,25 +1283,23 @@ var Leaf = props => {
|
|
|
1104
1283
|
'data-slate-leaf': true
|
|
1105
1284
|
};
|
|
1106
1285
|
return renderLeaf({
|
|
1107
|
-
attributes,
|
|
1108
|
-
children,
|
|
1109
|
-
leaf,
|
|
1110
|
-
text
|
|
1286
|
+
attributes: attributes,
|
|
1287
|
+
children: children,
|
|
1288
|
+
leaf: leaf,
|
|
1289
|
+
text: text
|
|
1111
1290
|
});
|
|
1112
1291
|
};
|
|
1113
1292
|
|
|
1114
|
-
var MemoizedLeaf = React__default.memo(Leaf, (prev, next)
|
|
1293
|
+
var MemoizedLeaf = React__default.memo(Leaf, function (prev, next) {
|
|
1115
1294
|
return next.parent === prev.parent && next.isLast === prev.isLast && next.renderLeaf === prev.renderLeaf && next.text === prev.text && slate.Text.matches(next.leaf, prev.leaf);
|
|
1116
1295
|
});
|
|
1117
1296
|
/**
|
|
1118
1297
|
* The default custom leaf renderer.
|
|
1119
1298
|
*/
|
|
1120
1299
|
|
|
1121
|
-
var DefaultLeaf = props
|
|
1122
|
-
var
|
|
1123
|
-
|
|
1124
|
-
children
|
|
1125
|
-
} = props;
|
|
1300
|
+
var DefaultLeaf = function DefaultLeaf(props) {
|
|
1301
|
+
var attributes = props.attributes,
|
|
1302
|
+
children = props.children;
|
|
1126
1303
|
return React__default.createElement("span", Object.assign({}, attributes), children);
|
|
1127
1304
|
};
|
|
1128
1305
|
|
|
@@ -1136,14 +1313,12 @@ var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutE
|
|
|
1136
1313
|
* Text.
|
|
1137
1314
|
*/
|
|
1138
1315
|
|
|
1139
|
-
var Text = props
|
|
1140
|
-
var
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
text
|
|
1146
|
-
} = props;
|
|
1316
|
+
var Text = function Text(props) {
|
|
1317
|
+
var decorations = props.decorations,
|
|
1318
|
+
isLast = props.isLast,
|
|
1319
|
+
parent = props.parent,
|
|
1320
|
+
renderLeaf = props.renderLeaf,
|
|
1321
|
+
text = props.text;
|
|
1147
1322
|
var editor = useEditor();
|
|
1148
1323
|
var ref = React.useRef(null);
|
|
1149
1324
|
var leaves = slate.Text.decorations(text, decorations);
|
|
@@ -1163,14 +1338,14 @@ var Text = props => {
|
|
|
1163
1338
|
} // Update element-related weak maps with the DOM element ref.
|
|
1164
1339
|
|
|
1165
1340
|
|
|
1166
|
-
useIsomorphicLayoutEffect(()
|
|
1341
|
+
useIsomorphicLayoutEffect(function () {
|
|
1167
1342
|
if (ref.current) {
|
|
1168
1343
|
KEY_TO_ELEMENT.set(key, ref.current);
|
|
1169
1344
|
NODE_TO_ELEMENT.set(text, ref.current);
|
|
1170
1345
|
ELEMENT_TO_NODE.set(ref.current, text);
|
|
1171
1346
|
} else {
|
|
1172
|
-
KEY_TO_ELEMENT
|
|
1173
|
-
NODE_TO_ELEMENT
|
|
1347
|
+
KEY_TO_ELEMENT["delete"](key);
|
|
1348
|
+
NODE_TO_ELEMENT["delete"](text);
|
|
1174
1349
|
}
|
|
1175
1350
|
});
|
|
1176
1351
|
return React__default.createElement("span", {
|
|
@@ -1179,7 +1354,7 @@ var Text = props => {
|
|
|
1179
1354
|
}, children);
|
|
1180
1355
|
};
|
|
1181
1356
|
|
|
1182
|
-
var MemoizedText = React__default.memo(Text, (prev, next)
|
|
1357
|
+
var MemoizedText = React__default.memo(Text, function (prev, next) {
|
|
1183
1358
|
return next.parent === prev.parent && next.isLast === prev.isLast && next.renderLeaf === prev.renderLeaf && next.text === prev.text;
|
|
1184
1359
|
});
|
|
1185
1360
|
|
|
@@ -1187,15 +1362,16 @@ var MemoizedText = React__default.memo(Text, (prev, next) => {
|
|
|
1187
1362
|
* Element.
|
|
1188
1363
|
*/
|
|
1189
1364
|
|
|
1190
|
-
var Element = props
|
|
1191
|
-
var
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1365
|
+
var Element = function Element(props) {
|
|
1366
|
+
var decorate = props.decorate,
|
|
1367
|
+
decorations = props.decorations,
|
|
1368
|
+
element = props.element,
|
|
1369
|
+
_props$renderElement = props.renderElement,
|
|
1370
|
+
renderElement = _props$renderElement === void 0 ? function (p) {
|
|
1371
|
+
return React__default.createElement(DefaultElement, Object.assign({}, p));
|
|
1372
|
+
} : _props$renderElement,
|
|
1373
|
+
renderLeaf = props.renderLeaf,
|
|
1374
|
+
selection = props.selection;
|
|
1199
1375
|
var ref = React.useRef(null);
|
|
1200
1376
|
var editor = useEditor();
|
|
1201
1377
|
var readOnly = useReadOnly();
|
|
@@ -1213,7 +1389,7 @@ var Element = props => {
|
|
|
1213
1389
|
|
|
1214
1390
|
var attributes = {
|
|
1215
1391
|
'data-slate-node': 'element',
|
|
1216
|
-
ref
|
|
1392
|
+
ref: ref
|
|
1217
1393
|
};
|
|
1218
1394
|
|
|
1219
1395
|
if (isInline) {
|
|
@@ -1240,7 +1416,12 @@ var Element = props => {
|
|
|
1240
1416
|
}
|
|
1241
1417
|
|
|
1242
1418
|
var Tag = isInline ? 'span' : 'div';
|
|
1243
|
-
|
|
1419
|
+
|
|
1420
|
+
var _Node$texts = slate.Node.texts(element),
|
|
1421
|
+
_Node$texts2 = slicedToArray(_Node$texts, 1),
|
|
1422
|
+
_Node$texts2$ = slicedToArray(_Node$texts2[0], 1),
|
|
1423
|
+
_text = _Node$texts2$[0];
|
|
1424
|
+
|
|
1244
1425
|
children = readOnly ? null : React__default.createElement(Tag, {
|
|
1245
1426
|
"data-slate-spacer": true,
|
|
1246
1427
|
style: {
|
|
@@ -1260,38 +1441,36 @@ var Element = props => {
|
|
|
1260
1441
|
} // Update element-related weak maps with the DOM element ref.
|
|
1261
1442
|
|
|
1262
1443
|
|
|
1263
|
-
useIsomorphicLayoutEffect(()
|
|
1444
|
+
useIsomorphicLayoutEffect(function () {
|
|
1264
1445
|
if (ref.current) {
|
|
1265
1446
|
KEY_TO_ELEMENT.set(key, ref.current);
|
|
1266
1447
|
NODE_TO_ELEMENT.set(element, ref.current);
|
|
1267
1448
|
ELEMENT_TO_NODE.set(ref.current, element);
|
|
1268
1449
|
} else {
|
|
1269
|
-
KEY_TO_ELEMENT
|
|
1270
|
-
NODE_TO_ELEMENT
|
|
1450
|
+
KEY_TO_ELEMENT["delete"](key);
|
|
1451
|
+
NODE_TO_ELEMENT["delete"](element);
|
|
1271
1452
|
}
|
|
1272
1453
|
});
|
|
1273
1454
|
return React__default.createElement(SelectedContext.Provider, {
|
|
1274
1455
|
value: !!selection
|
|
1275
1456
|
}, renderElement({
|
|
1276
|
-
attributes,
|
|
1277
|
-
children,
|
|
1278
|
-
element
|
|
1457
|
+
attributes: attributes,
|
|
1458
|
+
children: children,
|
|
1459
|
+
element: element
|
|
1279
1460
|
}));
|
|
1280
1461
|
};
|
|
1281
1462
|
|
|
1282
|
-
var MemoizedElement = React__default.memo(Element, (prev, next)
|
|
1463
|
+
var MemoizedElement = React__default.memo(Element, function (prev, next) {
|
|
1283
1464
|
return prev.decorate === next.decorate && prev.element === next.element && prev.renderElement === next.renderElement && prev.renderLeaf === next.renderLeaf && isRangeListEqual(prev.decorations, next.decorations) && (prev.selection === next.selection || !!prev.selection && !!next.selection && slate.Range.equals(prev.selection, next.selection));
|
|
1284
1465
|
});
|
|
1285
1466
|
/**
|
|
1286
1467
|
* The default element renderer.
|
|
1287
1468
|
*/
|
|
1288
1469
|
|
|
1289
|
-
var DefaultElement = props
|
|
1290
|
-
var
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
element
|
|
1294
|
-
} = props;
|
|
1470
|
+
var DefaultElement = function DefaultElement(props) {
|
|
1471
|
+
var attributes = props.attributes,
|
|
1472
|
+
children = props.children,
|
|
1473
|
+
element = props.element;
|
|
1295
1474
|
var editor = useEditor();
|
|
1296
1475
|
var Tag = editor.isInline(element) ? 'span' : 'div';
|
|
1297
1476
|
return React__default.createElement(Tag, Object.assign({}, attributes, {
|
|
@@ -1308,7 +1487,7 @@ var DefaultElement = props => {
|
|
|
1308
1487
|
* kept in order, and the odd case where they aren't is okay to re-render for.
|
|
1309
1488
|
*/
|
|
1310
1489
|
|
|
1311
|
-
var isRangeListEqual = (list, another)
|
|
1490
|
+
var isRangeListEqual = function isRangeListEqual(list, another) {
|
|
1312
1491
|
if (list.length !== another.length) {
|
|
1313
1492
|
return false;
|
|
1314
1493
|
}
|
|
@@ -1329,15 +1508,13 @@ var isRangeListEqual = (list, another) => {
|
|
|
1329
1508
|
* Children.
|
|
1330
1509
|
*/
|
|
1331
1510
|
|
|
1332
|
-
var Children = props
|
|
1333
|
-
var
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
selection
|
|
1340
|
-
} = props;
|
|
1511
|
+
var Children = function Children(props) {
|
|
1512
|
+
var decorate = props.decorate,
|
|
1513
|
+
decorations = props.decorations,
|
|
1514
|
+
node = props.node,
|
|
1515
|
+
renderElement = props.renderElement,
|
|
1516
|
+
renderLeaf = props.renderLeaf,
|
|
1517
|
+
selection = props.selection;
|
|
1341
1518
|
var editor = useEditor();
|
|
1342
1519
|
var path = ReactEditor.findPath(editor, node);
|
|
1343
1520
|
var children = [];
|
|
@@ -1350,12 +1527,31 @@ var Children = props => {
|
|
|
1350
1527
|
var range = slate.Editor.range(editor, p);
|
|
1351
1528
|
var sel = selection && slate.Range.intersection(range, selection);
|
|
1352
1529
|
var ds = decorate([n, p]);
|
|
1530
|
+
var _iteratorNormalCompletion = true;
|
|
1531
|
+
var _didIteratorError = false;
|
|
1532
|
+
var _iteratorError = undefined;
|
|
1353
1533
|
|
|
1354
|
-
|
|
1355
|
-
var
|
|
1534
|
+
try {
|
|
1535
|
+
for (var _iterator = decorations[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
1536
|
+
var dec = _step.value;
|
|
1537
|
+
var d = slate.Range.intersection(dec, range);
|
|
1356
1538
|
|
|
1357
|
-
|
|
1358
|
-
|
|
1539
|
+
if (d) {
|
|
1540
|
+
ds.push(d);
|
|
1541
|
+
}
|
|
1542
|
+
}
|
|
1543
|
+
} catch (err) {
|
|
1544
|
+
_didIteratorError = true;
|
|
1545
|
+
_iteratorError = err;
|
|
1546
|
+
} finally {
|
|
1547
|
+
try {
|
|
1548
|
+
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
1549
|
+
_iterator["return"]();
|
|
1550
|
+
}
|
|
1551
|
+
} finally {
|
|
1552
|
+
if (_didIteratorError) {
|
|
1553
|
+
throw _iteratorError;
|
|
1554
|
+
}
|
|
1359
1555
|
}
|
|
1360
1556
|
}
|
|
1361
1557
|
|
|
@@ -1392,7 +1588,9 @@ var IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.use
|
|
|
1392
1588
|
var IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);
|
|
1393
1589
|
var IS_SAFARI = typeof navigator !== 'undefined' && /Version\/[\d\.]+.*Safari/.test(navigator.userAgent); // "modern" Edge was released at 79.x
|
|
1394
1590
|
|
|
1395
|
-
var IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);
|
|
1591
|
+
var IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent); // Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput
|
|
1592
|
+
|
|
1593
|
+
var IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);
|
|
1396
1594
|
|
|
1397
1595
|
/**
|
|
1398
1596
|
* Hotkey mappings for each platform.
|
|
@@ -1438,14 +1636,14 @@ var WINDOWS_HOTKEYS = {
|
|
|
1438
1636
|
* Create a platform-aware hotkey checker.
|
|
1439
1637
|
*/
|
|
1440
1638
|
|
|
1441
|
-
var create = key
|
|
1639
|
+
var create = function create(key) {
|
|
1442
1640
|
var generic = HOTKEYS[key];
|
|
1443
1641
|
var apple = APPLE_HOTKEYS[key];
|
|
1444
1642
|
var windows = WINDOWS_HOTKEYS[key];
|
|
1445
1643
|
var isGeneric = generic && isHotkey.isKeyHotkey(generic);
|
|
1446
1644
|
var isApple = apple && isHotkey.isKeyHotkey(apple);
|
|
1447
1645
|
var isWindows = windows && isHotkey.isKeyHotkey(windows);
|
|
1448
|
-
return event
|
|
1646
|
+
return function (event) {
|
|
1449
1647
|
if (isGeneric && isGeneric(event)) return true;
|
|
1450
1648
|
if (IS_APPLE && isApple && isApple(event)) return true;
|
|
1451
1649
|
if (!IS_APPLE && isWindows && isWindows(event)) return true;
|
|
@@ -1485,52 +1683,55 @@ var Hotkeys = {
|
|
|
1485
1683
|
|
|
1486
1684
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
1487
1685
|
|
|
1488
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) {
|
|
1686
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
1687
|
+
// Chrome Legacy doesn't support `beforeinput` correctly
|
|
1489
1688
|
|
|
1490
|
-
var HAS_BEFORE_INPUT_SUPPORT = !(IS_FIREFOX || IS_EDGE_LEGACY);
|
|
1689
|
+
var HAS_BEFORE_INPUT_SUPPORT = !(IS_FIREFOX || IS_EDGE_LEGACY || IS_CHROME_LEGACY);
|
|
1491
1690
|
/**
|
|
1492
1691
|
* Editable.
|
|
1493
1692
|
*/
|
|
1494
1693
|
|
|
1495
|
-
var Editable = props
|
|
1496
|
-
var
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1694
|
+
var Editable = function Editable(props) {
|
|
1695
|
+
var autoFocus = props.autoFocus,
|
|
1696
|
+
_props$decorate = props.decorate,
|
|
1697
|
+
decorate = _props$decorate === void 0 ? defaultDecorate : _props$decorate,
|
|
1698
|
+
propsOnDOMBeforeInput = props.onDOMBeforeInput,
|
|
1699
|
+
placeholder = props.placeholder,
|
|
1700
|
+
_props$readOnly = props.readOnly,
|
|
1701
|
+
readOnly = _props$readOnly === void 0 ? false : _props$readOnly,
|
|
1702
|
+
renderElement = props.renderElement,
|
|
1703
|
+
renderLeaf = props.renderLeaf,
|
|
1704
|
+
_props$style = props.style,
|
|
1705
|
+
style = _props$style === void 0 ? {} : _props$style,
|
|
1706
|
+
_props$as = props.as,
|
|
1707
|
+
Component = _props$as === void 0 ? 'div' : _props$as,
|
|
1708
|
+
attributes = objectWithoutProperties(props, ["autoFocus", "decorate", "onDOMBeforeInput", "placeholder", "readOnly", "renderElement", "renderLeaf", "style", "as"]);
|
|
1508
1709
|
|
|
1509
1710
|
var editor = useSlate();
|
|
1510
1711
|
var ref = React.useRef(null); // Update internal state on each render.
|
|
1511
1712
|
|
|
1512
1713
|
IS_READ_ONLY.set(editor, readOnly); // Keep track of some state for the event handler logic.
|
|
1513
1714
|
|
|
1514
|
-
var state = React.useMemo(()
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1715
|
+
var state = React.useMemo(function () {
|
|
1716
|
+
return {
|
|
1717
|
+
isComposing: false,
|
|
1718
|
+
isUpdatingSelection: false,
|
|
1719
|
+
latestElement: null
|
|
1720
|
+
};
|
|
1721
|
+
}, []); // Update element-related weak maps with the DOM element ref.
|
|
1519
1722
|
|
|
1520
|
-
useIsomorphicLayoutEffect(()
|
|
1723
|
+
useIsomorphicLayoutEffect(function () {
|
|
1521
1724
|
if (ref.current) {
|
|
1522
1725
|
EDITOR_TO_ELEMENT.set(editor, ref.current);
|
|
1523
1726
|
NODE_TO_ELEMENT.set(editor, ref.current);
|
|
1524
1727
|
ELEMENT_TO_NODE.set(ref.current, editor);
|
|
1525
1728
|
} else {
|
|
1526
|
-
NODE_TO_ELEMENT
|
|
1729
|
+
NODE_TO_ELEMENT["delete"](editor);
|
|
1527
1730
|
}
|
|
1528
1731
|
}); // Whenever the editor updates, make sure the DOM selection state is in sync.
|
|
1529
1732
|
|
|
1530
|
-
useIsomorphicLayoutEffect(()
|
|
1531
|
-
var
|
|
1532
|
-
selection
|
|
1533
|
-
} = editor;
|
|
1733
|
+
useIsomorphicLayoutEffect(function () {
|
|
1734
|
+
var selection = editor.selection;
|
|
1534
1735
|
var domSelection = window.getSelection();
|
|
1535
1736
|
|
|
1536
1737
|
if (state.isComposing || !domSelection || !ReactEditor.isFocused(editor)) {
|
|
@@ -1566,11 +1767,12 @@ var Editable = props => {
|
|
|
1566
1767
|
domSelection.addRange(newDomRange);
|
|
1567
1768
|
var leafEl = newDomRange.startContainer.parentElement;
|
|
1568
1769
|
scrollIntoView(leafEl, {
|
|
1569
|
-
scrollMode: 'if-needed'
|
|
1770
|
+
scrollMode: 'if-needed',
|
|
1771
|
+
boundary: el
|
|
1570
1772
|
});
|
|
1571
1773
|
}
|
|
1572
1774
|
|
|
1573
|
-
setTimeout(()
|
|
1775
|
+
setTimeout(function () {
|
|
1574
1776
|
// COMPAT: In Firefox, it's not enough to create a range, you also need
|
|
1575
1777
|
// to focus the contenteditable element too. (2016/11/16)
|
|
1576
1778
|
if (newDomRange && IS_FIREFOX) {
|
|
@@ -1582,7 +1784,7 @@ var Editable = props => {
|
|
|
1582
1784
|
}); // The autoFocus TextareaHTMLAttribute doesn't do anything on a div, so it
|
|
1583
1785
|
// needs to be manually focused.
|
|
1584
1786
|
|
|
1585
|
-
React.useEffect(()
|
|
1787
|
+
React.useEffect(function () {
|
|
1586
1788
|
if (ref.current && autoFocus) {
|
|
1587
1789
|
ref.current.focus();
|
|
1588
1790
|
}
|
|
@@ -1591,14 +1793,10 @@ var Editable = props => {
|
|
|
1591
1793
|
// to the real event sadly. (2019/11/01)
|
|
1592
1794
|
// https://github.com/facebook/react/issues/11211
|
|
1593
1795
|
|
|
1594
|
-
var onDOMBeforeInput = React.useCallback(event
|
|
1796
|
+
var onDOMBeforeInput = React.useCallback(function (event) {
|
|
1595
1797
|
if (!readOnly && hasEditableTarget(editor, event.target) && !isDOMEventHandled(event, propsOnDOMBeforeInput)) {
|
|
1596
|
-
var
|
|
1597
|
-
|
|
1598
|
-
} = editor;
|
|
1599
|
-
var {
|
|
1600
|
-
inputType: type
|
|
1601
|
-
} = event;
|
|
1798
|
+
var selection = editor.selection;
|
|
1799
|
+
var type = event.inputType;
|
|
1602
1800
|
var data = event.dataTransfer || event.data || undefined; // These two types occur while a user is composing text and can't be
|
|
1603
1801
|
// cancelled. Let them through and wait for the composition to end.
|
|
1604
1802
|
|
|
@@ -1611,7 +1809,9 @@ var Editable = props => {
|
|
|
1611
1809
|
// and those commands determine that for themselves.
|
|
1612
1810
|
|
|
1613
1811
|
if (!type.startsWith('delete') || type.startsWith('deleteBy')) {
|
|
1614
|
-
var
|
|
1812
|
+
var _event$getTargetRange = event.getTargetRanges(),
|
|
1813
|
+
_event$getTargetRange2 = slicedToArray(_event$getTargetRange, 1),
|
|
1814
|
+
targetRange = _event$getTargetRange2[0];
|
|
1615
1815
|
|
|
1616
1816
|
if (targetRange) {
|
|
1617
1817
|
var range = ReactEditor.toSlateRange(editor, targetRange);
|
|
@@ -1739,14 +1939,14 @@ var Editable = props => {
|
|
|
1739
1939
|
// real `beforeinput` events sadly... (2019/11/04)
|
|
1740
1940
|
// https://github.com/facebook/react/issues/11211
|
|
1741
1941
|
|
|
1742
|
-
useIsomorphicLayoutEffect(()
|
|
1743
|
-
if (ref.current) {
|
|
1942
|
+
useIsomorphicLayoutEffect(function () {
|
|
1943
|
+
if (ref.current && HAS_BEFORE_INPUT_SUPPORT) {
|
|
1744
1944
|
// @ts-ignore The `beforeinput` event isn't recognized.
|
|
1745
1945
|
ref.current.addEventListener('beforeinput', onDOMBeforeInput);
|
|
1746
1946
|
}
|
|
1747
1947
|
|
|
1748
|
-
return ()
|
|
1749
|
-
if (ref.current) {
|
|
1948
|
+
return function () {
|
|
1949
|
+
if (ref.current && HAS_BEFORE_INPUT_SUPPORT) {
|
|
1750
1950
|
// @ts-ignore The `beforeinput` event isn't recognized.
|
|
1751
1951
|
ref.current.removeEventListener('beforeinput', onDOMBeforeInput);
|
|
1752
1952
|
}
|
|
@@ -1757,11 +1957,9 @@ var Editable = props => {
|
|
|
1757
1957
|
// released. This causes issues in situations where another change happens
|
|
1758
1958
|
// while a selection is being dragged.
|
|
1759
1959
|
|
|
1760
|
-
var onDOMSelectionChange = React.useCallback(throttle(()
|
|
1960
|
+
var onDOMSelectionChange = React.useCallback(throttle(function () {
|
|
1761
1961
|
if (!readOnly && !state.isComposing && !state.isUpdatingSelection) {
|
|
1762
|
-
var
|
|
1763
|
-
activeElement
|
|
1764
|
-
} = window.document;
|
|
1962
|
+
var activeElement = window.document.activeElement;
|
|
1765
1963
|
var el = ReactEditor.toDOMNode(editor, editor);
|
|
1766
1964
|
var domSelection = window.getSelection();
|
|
1767
1965
|
|
|
@@ -1769,17 +1967,15 @@ var Editable = props => {
|
|
|
1769
1967
|
state.latestElement = activeElement;
|
|
1770
1968
|
IS_FOCUSED.set(editor, true);
|
|
1771
1969
|
} else {
|
|
1772
|
-
IS_FOCUSED
|
|
1970
|
+
IS_FOCUSED["delete"](editor);
|
|
1773
1971
|
}
|
|
1774
1972
|
|
|
1775
1973
|
if (!domSelection) {
|
|
1776
1974
|
return slate.Transforms.deselect(editor);
|
|
1777
1975
|
}
|
|
1778
1976
|
|
|
1779
|
-
var
|
|
1780
|
-
|
|
1781
|
-
focusNode
|
|
1782
|
-
} = domSelection;
|
|
1977
|
+
var anchorNode = domSelection.anchorNode,
|
|
1978
|
+
focusNode = domSelection.focusNode;
|
|
1783
1979
|
var anchorNodeSelectable = hasEditableTarget(editor, anchorNode) || isTargetInsideVoid(editor, anchorNode);
|
|
1784
1980
|
var focusNodeSelectable = hasEditableTarget(editor, focusNode) || isTargetInsideVoid(editor, focusNode);
|
|
1785
1981
|
|
|
@@ -1796,22 +1992,19 @@ var Editable = props => {
|
|
|
1796
1992
|
// fire for any change to the selection inside the editor. (2019/11/04)
|
|
1797
1993
|
// https://github.com/facebook/react/issues/5785
|
|
1798
1994
|
|
|
1799
|
-
useIsomorphicLayoutEffect(()
|
|
1995
|
+
useIsomorphicLayoutEffect(function () {
|
|
1800
1996
|
window.document.addEventListener('selectionchange', onDOMSelectionChange);
|
|
1801
|
-
return ()
|
|
1997
|
+
return function () {
|
|
1802
1998
|
window.document.removeEventListener('selectionchange', onDOMSelectionChange);
|
|
1803
1999
|
};
|
|
1804
2000
|
}, [onDOMSelectionChange]);
|
|
1805
2001
|
var decorations = decorate([editor, []]);
|
|
1806
2002
|
|
|
1807
2003
|
if (placeholder && editor.children.length === 1 && Array.from(slate.Node.texts(editor)).length === 1 && slate.Node.string(editor) === '') {
|
|
2004
|
+
var _decorations$push;
|
|
2005
|
+
|
|
1808
2006
|
var start = slate.Editor.start(editor, []);
|
|
1809
|
-
decorations.push({
|
|
1810
|
-
[PLACEHOLDER_SYMBOL]: true,
|
|
1811
|
-
placeholder,
|
|
1812
|
-
anchor: start,
|
|
1813
|
-
focus: start
|
|
1814
|
-
});
|
|
2007
|
+
decorations.push((_decorations$push = {}, defineProperty(_decorations$push, PLACEHOLDER_SYMBOL, true), defineProperty(_decorations$push, "placeholder", placeholder), defineProperty(_decorations$push, "anchor", start), defineProperty(_decorations$push, "focus", start), _decorations$push));
|
|
1815
2008
|
}
|
|
1816
2009
|
|
|
1817
2010
|
return React__default.createElement(ReadOnlyContext.Provider, {
|
|
@@ -1841,7 +2034,7 @@ var Editable = props => {
|
|
|
1841
2034
|
// Allow words to break if they are too long.
|
|
1842
2035
|
wordWrap: 'break-word'
|
|
1843
2036
|
}, style),
|
|
1844
|
-
onBeforeInput: React.useCallback(event
|
|
2037
|
+
onBeforeInput: React.useCallback(function (event) {
|
|
1845
2038
|
// COMPAT: Certain browsers don't support the `beforeinput` event, so we
|
|
1846
2039
|
// fall back to React's leaky polyfill instead just for it. It
|
|
1847
2040
|
// only works for the `insertText` input type.
|
|
@@ -1851,7 +2044,7 @@ var Editable = props => {
|
|
|
1851
2044
|
slate.Editor.insertText(editor, text);
|
|
1852
2045
|
}
|
|
1853
2046
|
}, [readOnly]),
|
|
1854
|
-
onBlur: React.useCallback(event
|
|
2047
|
+
onBlur: React.useCallback(function (event) {
|
|
1855
2048
|
if (readOnly || state.isUpdatingSelection || !hasEditableTarget(editor, event.target) || isEventHandled(event, attributes.onBlur)) {
|
|
1856
2049
|
return;
|
|
1857
2050
|
} // COMPAT: If the current `activeElement` is still the previous
|
|
@@ -1864,9 +2057,7 @@ var Editable = props => {
|
|
|
1864
2057
|
return;
|
|
1865
2058
|
}
|
|
1866
2059
|
|
|
1867
|
-
var
|
|
1868
|
-
relatedTarget
|
|
1869
|
-
} = event;
|
|
2060
|
+
var relatedTarget = event.relatedTarget;
|
|
1870
2061
|
var el = ReactEditor.toDOMNode(editor, editor); // COMPAT: The event should be ignored if the focus is returning
|
|
1871
2062
|
// to the editor from an embedded editable element (eg. an <input>
|
|
1872
2063
|
// element inside a void node).
|
|
@@ -1892,24 +2083,30 @@ var Editable = props => {
|
|
|
1892
2083
|
}
|
|
1893
2084
|
}
|
|
1894
2085
|
|
|
1895
|
-
IS_FOCUSED
|
|
2086
|
+
IS_FOCUSED["delete"](editor);
|
|
1896
2087
|
}, [readOnly, attributes.onBlur]),
|
|
1897
|
-
onClick: React.useCallback(event
|
|
2088
|
+
onClick: React.useCallback(function (event) {
|
|
1898
2089
|
if (!readOnly && hasTarget(editor, event.target) && !isEventHandled(event, attributes.onClick) && isDOMNode(event.target)) {
|
|
1899
2090
|
var node = ReactEditor.toSlateNode(editor, event.target);
|
|
1900
2091
|
var path = ReactEditor.findPath(editor, node);
|
|
1901
2092
|
|
|
1902
2093
|
var _start = slate.Editor.start(editor, path);
|
|
1903
2094
|
|
|
1904
|
-
|
|
2095
|
+
var end = slate.Editor.end(editor, path);
|
|
2096
|
+
var startVoid = slate.Editor["void"](editor, {
|
|
1905
2097
|
at: _start
|
|
1906
|
-
})
|
|
2098
|
+
});
|
|
2099
|
+
var endVoid = slate.Editor["void"](editor, {
|
|
2100
|
+
at: end
|
|
2101
|
+
});
|
|
2102
|
+
|
|
2103
|
+
if (startVoid && endVoid && slate.Path.equals(startVoid[1], endVoid[1])) {
|
|
1907
2104
|
var range = slate.Editor.range(editor, _start);
|
|
1908
2105
|
slate.Transforms.select(editor, range);
|
|
1909
2106
|
}
|
|
1910
2107
|
}
|
|
1911
2108
|
}, [readOnly, attributes.onClick]),
|
|
1912
|
-
onCompositionEnd: React.useCallback(event
|
|
2109
|
+
onCompositionEnd: React.useCallback(function (event) {
|
|
1913
2110
|
if (hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onCompositionEnd)) {
|
|
1914
2111
|
state.isComposing = false; // COMPAT: In Chrome, `beforeinput` events for compositions
|
|
1915
2112
|
// aren't correct and never fire the "insertFromComposition"
|
|
@@ -1921,31 +2118,29 @@ var Editable = props => {
|
|
|
1921
2118
|
}
|
|
1922
2119
|
}
|
|
1923
2120
|
}, [attributes.onCompositionEnd]),
|
|
1924
|
-
onCompositionStart: React.useCallback(event
|
|
2121
|
+
onCompositionStart: React.useCallback(function (event) {
|
|
1925
2122
|
if (hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onCompositionStart)) {
|
|
1926
2123
|
state.isComposing = true;
|
|
1927
2124
|
}
|
|
1928
2125
|
}, [attributes.onCompositionStart]),
|
|
1929
|
-
onCopy: React.useCallback(event
|
|
2126
|
+
onCopy: React.useCallback(function (event) {
|
|
1930
2127
|
if (hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onCopy)) {
|
|
1931
2128
|
event.preventDefault();
|
|
1932
2129
|
ReactEditor.setFragmentData(editor, event.clipboardData);
|
|
1933
2130
|
}
|
|
1934
2131
|
}, [attributes.onCopy]),
|
|
1935
|
-
onCut: React.useCallback(event
|
|
2132
|
+
onCut: React.useCallback(function (event) {
|
|
1936
2133
|
if (!readOnly && hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onCut)) {
|
|
1937
2134
|
event.preventDefault();
|
|
1938
2135
|
ReactEditor.setFragmentData(editor, event.clipboardData);
|
|
1939
|
-
var
|
|
1940
|
-
selection
|
|
1941
|
-
} = editor;
|
|
2136
|
+
var selection = editor.selection;
|
|
1942
2137
|
|
|
1943
2138
|
if (selection && slate.Range.isExpanded(selection)) {
|
|
1944
2139
|
slate.Editor.deleteFragment(editor);
|
|
1945
2140
|
}
|
|
1946
2141
|
}
|
|
1947
2142
|
}, [readOnly, attributes.onCut]),
|
|
1948
|
-
onDragOver: React.useCallback(event
|
|
2143
|
+
onDragOver: React.useCallback(function (event) {
|
|
1949
2144
|
if (hasTarget(editor, event.target) && !isEventHandled(event, attributes.onDragOver)) {
|
|
1950
2145
|
// Only when the target is void, call `preventDefault` to signal
|
|
1951
2146
|
// that drops are allowed. Editable content is droppable by
|
|
@@ -1957,11 +2152,11 @@ var Editable = props => {
|
|
|
1957
2152
|
}
|
|
1958
2153
|
}
|
|
1959
2154
|
}, [attributes.onDragOver]),
|
|
1960
|
-
onDragStart: React.useCallback(event
|
|
2155
|
+
onDragStart: React.useCallback(function (event) {
|
|
1961
2156
|
if (hasTarget(editor, event.target) && !isEventHandled(event, attributes.onDragStart)) {
|
|
1962
2157
|
var node = ReactEditor.toSlateNode(editor, event.target);
|
|
1963
2158
|
var path = ReactEditor.findPath(editor, node);
|
|
1964
|
-
var voidMatch = slate.Editor
|
|
2159
|
+
var voidMatch = slate.Editor["void"](editor, {
|
|
1965
2160
|
at: path
|
|
1966
2161
|
}); // If starting a drag on a void node, make sure it is selected
|
|
1967
2162
|
// so that it shows up in the selection's fragment.
|
|
@@ -1974,7 +2169,7 @@ var Editable = props => {
|
|
|
1974
2169
|
ReactEditor.setFragmentData(editor, event.dataTransfer);
|
|
1975
2170
|
}
|
|
1976
2171
|
}, [attributes.onDragStart]),
|
|
1977
|
-
onDrop: React.useCallback(event
|
|
2172
|
+
onDrop: React.useCallback(function (event) {
|
|
1978
2173
|
if (hasTarget(editor, event.target) && !readOnly && !isEventHandled(event, attributes.onDrop)) {
|
|
1979
2174
|
// COMPAT: Certain browsers don't fire `beforeinput` events at all, and
|
|
1980
2175
|
// Chromium browsers don't properly fire them for files being
|
|
@@ -1989,7 +2184,7 @@ var Editable = props => {
|
|
|
1989
2184
|
}
|
|
1990
2185
|
}
|
|
1991
2186
|
}, [readOnly, attributes.onDrop]),
|
|
1992
|
-
onFocus: React.useCallback(event
|
|
2187
|
+
onFocus: React.useCallback(function (event) {
|
|
1993
2188
|
if (!readOnly && !state.isUpdatingSelection && hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onFocus)) {
|
|
1994
2189
|
var el = ReactEditor.toDOMNode(editor, editor);
|
|
1995
2190
|
state.latestElement = window.document.activeElement; // COMPAT: If the editor has nested editable elements, the focus
|
|
@@ -2004,14 +2199,10 @@ var Editable = props => {
|
|
|
2004
2199
|
IS_FOCUSED.set(editor, true);
|
|
2005
2200
|
}
|
|
2006
2201
|
}, [readOnly, attributes.onFocus]),
|
|
2007
|
-
onKeyDown: React.useCallback(event
|
|
2202
|
+
onKeyDown: React.useCallback(function (event) {
|
|
2008
2203
|
if (!readOnly && hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onKeyDown)) {
|
|
2009
|
-
var
|
|
2010
|
-
|
|
2011
|
-
} = event;
|
|
2012
|
-
var {
|
|
2013
|
-
selection
|
|
2014
|
-
} = editor; // COMPAT: Since we prevent the default behavior on
|
|
2204
|
+
var nativeEvent = event.nativeEvent;
|
|
2205
|
+
var selection = editor.selection; // COMPAT: Since we prevent the default behavior on
|
|
2015
2206
|
// `beforeinput` events, the browser doesn't think there's ever
|
|
2016
2207
|
// any history stack to undo or redo, so we have to manage these
|
|
2017
2208
|
// hotkeys ourselves. (2019/11/06)
|
|
@@ -2227,13 +2418,13 @@ var Editable = props => {
|
|
|
2227
2418
|
}
|
|
2228
2419
|
}
|
|
2229
2420
|
}, [readOnly, attributes.onKeyDown]),
|
|
2230
|
-
onPaste: React.useCallback(event
|
|
2421
|
+
onPaste: React.useCallback(function (event) {
|
|
2231
2422
|
// COMPAT: Certain browsers don't support the `beforeinput` event, so we
|
|
2232
2423
|
// fall back to React's `onPaste` here instead.
|
|
2233
2424
|
// COMPAT: Firefox, Chrome and Safari are not emitting `beforeinput` events
|
|
2234
2425
|
// when "paste without formatting" option is used.
|
|
2235
2426
|
// This unfortunately needs to be handled with paste events instead.
|
|
2236
|
-
if ((!HAS_BEFORE_INPUT_SUPPORT || isPlainTextOnlyPaste(event.nativeEvent)) && !readOnly && hasEditableTarget(editor, event.target)
|
|
2427
|
+
if (!isEventHandled(event, attributes.onPaste) && (!HAS_BEFORE_INPUT_SUPPORT || isPlainTextOnlyPaste(event.nativeEvent)) && !readOnly && hasEditableTarget(editor, event.target)) {
|
|
2237
2428
|
event.preventDefault();
|
|
2238
2429
|
ReactEditor.insertData(editor, event.clipboardData);
|
|
2239
2430
|
}
|
|
@@ -2251,13 +2442,15 @@ var Editable = props => {
|
|
|
2251
2442
|
* A default memoized decorate function.
|
|
2252
2443
|
*/
|
|
2253
2444
|
|
|
2254
|
-
var defaultDecorate = ()
|
|
2445
|
+
var defaultDecorate = function defaultDecorate() {
|
|
2446
|
+
return [];
|
|
2447
|
+
};
|
|
2255
2448
|
/**
|
|
2256
2449
|
* Check if the target is in the editor.
|
|
2257
2450
|
*/
|
|
2258
2451
|
|
|
2259
2452
|
|
|
2260
|
-
var hasTarget = (editor, target)
|
|
2453
|
+
var hasTarget = function hasTarget(editor, target) {
|
|
2261
2454
|
return isDOMNode(target) && ReactEditor.hasDOMNode(editor, target);
|
|
2262
2455
|
};
|
|
2263
2456
|
/**
|
|
@@ -2265,7 +2458,7 @@ var hasTarget = (editor, target) => {
|
|
|
2265
2458
|
*/
|
|
2266
2459
|
|
|
2267
2460
|
|
|
2268
|
-
var hasEditableTarget = (editor, target)
|
|
2461
|
+
var hasEditableTarget = function hasEditableTarget(editor, target) {
|
|
2269
2462
|
return isDOMNode(target) && ReactEditor.hasDOMNode(editor, target, {
|
|
2270
2463
|
editable: true
|
|
2271
2464
|
});
|
|
@@ -2275,7 +2468,7 @@ var hasEditableTarget = (editor, target) => {
|
|
|
2275
2468
|
*/
|
|
2276
2469
|
|
|
2277
2470
|
|
|
2278
|
-
var isTargetInsideVoid = (editor, target)
|
|
2471
|
+
var isTargetInsideVoid = function isTargetInsideVoid(editor, target) {
|
|
2279
2472
|
var slateNode = hasTarget(editor, target) && ReactEditor.toSlateNode(editor, target);
|
|
2280
2473
|
return slate.Editor.isVoid(editor, slateNode);
|
|
2281
2474
|
};
|
|
@@ -2284,7 +2477,7 @@ var isTargetInsideVoid = (editor, target) => {
|
|
|
2284
2477
|
*/
|
|
2285
2478
|
|
|
2286
2479
|
|
|
2287
|
-
var isEventHandled = (event, handler)
|
|
2480
|
+
var isEventHandled = function isEventHandled(event, handler) {
|
|
2288
2481
|
if (!handler) {
|
|
2289
2482
|
return false;
|
|
2290
2483
|
}
|
|
@@ -2297,7 +2490,7 @@ var isEventHandled = (event, handler) => {
|
|
|
2297
2490
|
*/
|
|
2298
2491
|
|
|
2299
2492
|
|
|
2300
|
-
var isDOMEventHandled = (event, handler)
|
|
2493
|
+
var isDOMEventHandled = function isDOMEventHandled(event, handler) {
|
|
2301
2494
|
if (!handler) {
|
|
2302
2495
|
return false;
|
|
2303
2496
|
}
|