@pie-lib/editable-html 7.22.5 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/lib/editor.js +214 -102
- package/lib/editor.js.map +1 -1
- package/lib/plugins/characters/custom-popover.js +73 -0
- package/lib/plugins/characters/custom-popover.js.map +1 -0
- package/lib/plugins/characters/index.js +271 -0
- package/lib/plugins/characters/index.js.map +1 -0
- package/lib/plugins/characters/utils.js +362 -0
- package/lib/plugins/characters/utils.js.map +1 -0
- package/lib/plugins/image/component.js +190 -29
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +4 -58
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +3 -1
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/index.js +19 -4
- package/lib/plugins/index.js.map +1 -1
- package/lib/serialization.js +18 -1
- package/lib/serialization.js.map +1 -1
- package/package.json +5 -5
- package/src/editor.jsx +93 -17
- package/src/plugins/characters/custom-popover.js +45 -0
- package/src/plugins/characters/index.jsx +237 -0
- package/src/plugins/characters/utils.js +444 -0
- package/src/plugins/image/component.jsx +171 -19
- package/src/plugins/image/image-toolbar.jsx +2 -32
- package/src/plugins/image/index.jsx +3 -1
- package/src/plugins/index.jsx +3 -0
- package/src/serialization.jsx +9 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,43 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [8.1.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@8.0.0...@pie-lib/editable-html@8.1.0) (2022-06-27)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **editable-html:** allow drop & paste images PD-581 ([f7ec0d4](https://github.com/pie-framework/pie-lib/commit/f7ec0d4578ededc095422356471fb5e9f2b29af9))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [8.0.0](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.22.6...@pie-lib/editable-html@8.0.0) (2022-06-27)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* **editable-html:** Added characters limit support PD-1681 ([9e7f6ad](https://github.com/pie-framework/pie-lib/commit/9e7f6add3f846d32265990aca98dfb5b4847bb95))
|
|
23
|
+
* **editable-html:** image resize functionality PD-1801 ([6f46903](https://github.com/pie-framework/pie-lib/commit/6f46903acdf791716263be33abe49235572421ad))
|
|
24
|
+
* **plugins:** added special characters adding capabilities [PD-1462] ([b9f41e1](https://github.com/pie-framework/pie-lib/commit/b9f41e11f44df140a66145d0b04558ca2b0ea48e))
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### BREAKING CHANGES
|
|
28
|
+
|
|
29
|
+
* **editable-html:** Removed the percent buttons from editable-html image button. Added resize functionality.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## [7.22.6](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.22.5...@pie-lib/editable-html@7.22.6) (2022-06-13)
|
|
36
|
+
|
|
37
|
+
**Note:** Version bump only for package @pie-lib/editable-html
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
6
43
|
## [7.22.5](https://github.com/pie-framework/pie-lib/compare/@pie-lib/editable-html@7.22.4...@pie-lib/editable-html@7.22.5) (2022-05-30)
|
|
7
44
|
|
|
8
45
|
**Note:** Version bump only for package @pie-lib/editable-html
|
package/lib/editor.js
CHANGED
|
@@ -51,6 +51,10 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
51
51
|
|
|
52
52
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
53
53
|
|
|
54
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
55
|
+
|
|
56
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
57
|
+
|
|
54
58
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
55
59
|
|
|
56
60
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
@@ -90,6 +94,7 @@ var defaultResponseAreaProps = {
|
|
|
90
94
|
respAreaToolbar: function respAreaToolbar() {},
|
|
91
95
|
onHandleAreaChange: function onHandleAreaChange() {}
|
|
92
96
|
};
|
|
97
|
+
var defaultLanguageCharactersProps = [];
|
|
93
98
|
|
|
94
99
|
var createToolbarOpts = function createToolbarOpts(toolbarOpts) {
|
|
95
100
|
return _objectSpread(_objectSpread({}, defaultToolbarOpts), toolbarOpts);
|
|
@@ -100,12 +105,110 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
100
105
|
|
|
101
106
|
var _super = _createSuper(Editor);
|
|
102
107
|
|
|
103
|
-
function Editor(
|
|
108
|
+
function Editor(_props) {
|
|
104
109
|
var _this;
|
|
105
110
|
|
|
106
111
|
_classCallCheck(this, Editor);
|
|
107
112
|
|
|
108
|
-
_this = _super.call(this,
|
|
113
|
+
_this = _super.call(this, _props);
|
|
114
|
+
|
|
115
|
+
_defineProperty(_assertThisInitialized(_this), "handlePlugins", function (props) {
|
|
116
|
+
var normalizedResponseAreaProps = _objectSpread(_objectSpread({}, defaultResponseAreaProps), props.responseAreaProps);
|
|
117
|
+
|
|
118
|
+
_this.plugins = (0, _plugins.buildPlugins)(props.activePlugins, {
|
|
119
|
+
math: {
|
|
120
|
+
onClick: _this.onMathClick,
|
|
121
|
+
onFocus: _this.onPluginFocus,
|
|
122
|
+
onBlur: _this.onPluginBlur
|
|
123
|
+
},
|
|
124
|
+
image: {
|
|
125
|
+
onDelete: props.imageSupport && props.imageSupport["delete"] && function (src, done) {
|
|
126
|
+
props.imageSupport["delete"](src, function (e) {
|
|
127
|
+
done(e, _this.state.value);
|
|
128
|
+
});
|
|
129
|
+
},
|
|
130
|
+
insertImageRequested: props.imageSupport && function (getHandler) {
|
|
131
|
+
/**
|
|
132
|
+
* The handler is the object through which the outer context
|
|
133
|
+
* communicates file upload events like: fileChosen, cancel, progress
|
|
134
|
+
*/
|
|
135
|
+
var handler = getHandler(function () {
|
|
136
|
+
return _this.state.value;
|
|
137
|
+
});
|
|
138
|
+
props.imageSupport.add(handler);
|
|
139
|
+
},
|
|
140
|
+
onFocus: _this.onPluginFocus,
|
|
141
|
+
onBlur: _this.onPluginBlur,
|
|
142
|
+
maxImageWidth: _this.props.maxImageWidth,
|
|
143
|
+
maxImageHeight: _this.props.maxImageHeight
|
|
144
|
+
},
|
|
145
|
+
toolbar: {
|
|
146
|
+
/**
|
|
147
|
+
* To minimize converting html -> state -> html
|
|
148
|
+
* We only emit markup once 'done' is clicked.
|
|
149
|
+
*/
|
|
150
|
+
disableUnderline: props.disableUnderline,
|
|
151
|
+
autoWidth: props.autoWidthToolbar,
|
|
152
|
+
onDone: function onDone() {
|
|
153
|
+
var nonEmpty = props.nonEmpty;
|
|
154
|
+
log('[onDone]');
|
|
155
|
+
|
|
156
|
+
_this.setState({
|
|
157
|
+
toolbarInFocus: false,
|
|
158
|
+
focusedNode: null
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
_this.editor.blur();
|
|
162
|
+
|
|
163
|
+
if (nonEmpty && _this.state.value.startText.text.length === 0) {
|
|
164
|
+
_this.resetValue(true).then(function () {
|
|
165
|
+
_this.onEditingDone();
|
|
166
|
+
});
|
|
167
|
+
} else {
|
|
168
|
+
_this.onEditingDone();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
table: {
|
|
173
|
+
onFocus: function onFocus() {
|
|
174
|
+
log('[table:onFocus]...');
|
|
175
|
+
|
|
176
|
+
_this.onPluginFocus();
|
|
177
|
+
},
|
|
178
|
+
onBlur: function onBlur() {
|
|
179
|
+
log('[table:onBlur]...');
|
|
180
|
+
|
|
181
|
+
_this.onPluginBlur();
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
responseArea: {
|
|
185
|
+
type: normalizedResponseAreaProps.type,
|
|
186
|
+
options: normalizedResponseAreaProps.options,
|
|
187
|
+
maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,
|
|
188
|
+
respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
|
|
189
|
+
onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
|
|
190
|
+
error: normalizedResponseAreaProps.error,
|
|
191
|
+
onFocus: function onFocus() {
|
|
192
|
+
log('[table:onFocus]...');
|
|
193
|
+
|
|
194
|
+
_this.onPluginFocus();
|
|
195
|
+
},
|
|
196
|
+
onBlur: function onBlur() {
|
|
197
|
+
log('[table:onBlur]...');
|
|
198
|
+
|
|
199
|
+
_this.onPluginBlur();
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
languageCharacters: props.languageCharactersProps,
|
|
203
|
+
media: {
|
|
204
|
+
focus: _this.focus,
|
|
205
|
+
createChange: function createChange() {
|
|
206
|
+
return _this.state.value.change();
|
|
207
|
+
},
|
|
208
|
+
onChange: _this.onChange
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
109
212
|
|
|
110
213
|
_defineProperty(_assertThisInitialized(_this), "onPluginBlur", function (e) {
|
|
111
214
|
log('[onPluginBlur]', e && e.relatedTarget);
|
|
@@ -321,9 +424,15 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
321
424
|
|
|
322
425
|
_defineProperty(_assertThisInitialized(_this), "onChange", function (change, done) {
|
|
323
426
|
log('[onChange]');
|
|
427
|
+
var value = change.value;
|
|
428
|
+
var charactersLimit = _this.props.charactersLimit;
|
|
429
|
+
|
|
430
|
+
if (value && value.document && value.document.text && value.document.text.length > charactersLimit) {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
324
433
|
|
|
325
434
|
_this.setState({
|
|
326
|
-
value:
|
|
435
|
+
value: value
|
|
327
436
|
}, function () {
|
|
328
437
|
log('[onChange], call done()');
|
|
329
438
|
|
|
@@ -396,108 +505,92 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
396
505
|
_this.props.focus(position, node);
|
|
397
506
|
});
|
|
398
507
|
|
|
508
|
+
_defineProperty(_assertThisInitialized(_this), "onDropPaste", /*#__PURE__*/function () {
|
|
509
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(event, change, dropContext) {
|
|
510
|
+
var editor, transfer, file, src, inline, range, ch;
|
|
511
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
512
|
+
while (1) {
|
|
513
|
+
switch (_context.prev = _context.next) {
|
|
514
|
+
case 0:
|
|
515
|
+
if (_this.props.imageSupport) {
|
|
516
|
+
_context.next = 2;
|
|
517
|
+
break;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
return _context.abrupt("return");
|
|
521
|
+
|
|
522
|
+
case 2:
|
|
523
|
+
editor = change.editor;
|
|
524
|
+
transfer = (0, _slateReact.getEventTransfer)(event);
|
|
525
|
+
file = transfer.files[0];
|
|
526
|
+
|
|
527
|
+
if (!(file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')) {
|
|
528
|
+
_context.next = 20;
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
_context.prev = 6;
|
|
533
|
+
log('[onDropPaste]');
|
|
534
|
+
_context.next = 10;
|
|
535
|
+
return (0, serialization.getBase64)(file);
|
|
536
|
+
|
|
537
|
+
case 10:
|
|
538
|
+
src = _context.sent;
|
|
539
|
+
inline = _slate.Inline.create({
|
|
540
|
+
type: 'image',
|
|
541
|
+
isVoid: true,
|
|
542
|
+
data: {
|
|
543
|
+
loading: false,
|
|
544
|
+
src: src
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
if (dropContext) {
|
|
549
|
+
_this.focus();
|
|
550
|
+
} else {
|
|
551
|
+
range = (0, _slateReact.getEventRange)(event, editor);
|
|
552
|
+
|
|
553
|
+
if (range) {
|
|
554
|
+
change.select(range);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
ch = change.insertInline(inline);
|
|
559
|
+
|
|
560
|
+
_this.onChange(ch);
|
|
561
|
+
|
|
562
|
+
_context.next = 20;
|
|
563
|
+
break;
|
|
564
|
+
|
|
565
|
+
case 17:
|
|
566
|
+
_context.prev = 17;
|
|
567
|
+
_context.t0 = _context["catch"](6);
|
|
568
|
+
log('[onDropPaste] error: ', _context.t0);
|
|
569
|
+
|
|
570
|
+
case 20:
|
|
571
|
+
case "end":
|
|
572
|
+
return _context.stop();
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}, _callee, null, [[6, 17]]);
|
|
576
|
+
}));
|
|
577
|
+
|
|
578
|
+
return function (_x, _x2, _x3) {
|
|
579
|
+
return _ref.apply(this, arguments);
|
|
580
|
+
};
|
|
581
|
+
}());
|
|
582
|
+
|
|
399
583
|
_this.state = {
|
|
400
|
-
value:
|
|
401
|
-
toolbarOpts: createToolbarOpts(
|
|
584
|
+
value: _props.value,
|
|
585
|
+
toolbarOpts: createToolbarOpts(_props.toolbarOpts)
|
|
402
586
|
};
|
|
403
587
|
|
|
404
|
-
var normalizedResponseAreaProps = _objectSpread(_objectSpread({}, defaultResponseAreaProps), props.responseAreaProps);
|
|
405
|
-
|
|
406
588
|
_this.onResize = function () {
|
|
407
|
-
|
|
589
|
+
_props.onChange(_this.state.value, true);
|
|
408
590
|
};
|
|
409
591
|
|
|
410
|
-
_this.
|
|
411
|
-
math: {
|
|
412
|
-
onClick: _this.onMathClick,
|
|
413
|
-
onFocus: _this.onPluginFocus,
|
|
414
|
-
onBlur: _this.onPluginBlur
|
|
415
|
-
},
|
|
416
|
-
image: {
|
|
417
|
-
onDelete: _this.props.imageSupport && _this.props.imageSupport["delete"] && function (src, done) {
|
|
418
|
-
_this.props.imageSupport["delete"](src, function (e) {
|
|
419
|
-
done(e, _this.state.value);
|
|
420
|
-
});
|
|
421
|
-
},
|
|
422
|
-
insertImageRequested: _this.props.imageSupport && function (getHandler) {
|
|
423
|
-
/**
|
|
424
|
-
* The handler is the object through which the outer context
|
|
425
|
-
* communicates file upload events like: fileChosen, cancel, progress
|
|
426
|
-
*/
|
|
427
|
-
var handler = getHandler(function () {
|
|
428
|
-
return _this.state.value;
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
_this.props.imageSupport.add(handler);
|
|
432
|
-
},
|
|
433
|
-
onFocus: _this.onPluginFocus,
|
|
434
|
-
onBlur: _this.onPluginBlur
|
|
435
|
-
},
|
|
436
|
-
toolbar: {
|
|
437
|
-
/**
|
|
438
|
-
* To minimize converting html -> state -> html
|
|
439
|
-
* We only emit markup once 'done' is clicked.
|
|
440
|
-
*/
|
|
441
|
-
disableUnderline: props.disableUnderline,
|
|
442
|
-
autoWidth: props.autoWidthToolbar,
|
|
443
|
-
onDone: function onDone() {
|
|
444
|
-
var nonEmpty = _this.props.nonEmpty;
|
|
445
|
-
log('[onDone]');
|
|
446
|
-
|
|
447
|
-
_this.setState({
|
|
448
|
-
toolbarInFocus: false,
|
|
449
|
-
focusedNode: null
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
_this.editor.blur();
|
|
453
|
-
|
|
454
|
-
if (nonEmpty && _this.state.value.startText.text.length === 0) {
|
|
455
|
-
_this.resetValue(true).then(function () {
|
|
456
|
-
_this.onEditingDone();
|
|
457
|
-
});
|
|
458
|
-
} else {
|
|
459
|
-
_this.onEditingDone();
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
},
|
|
463
|
-
table: {
|
|
464
|
-
onFocus: function onFocus() {
|
|
465
|
-
log('[table:onFocus]...');
|
|
466
|
-
|
|
467
|
-
_this.onPluginFocus();
|
|
468
|
-
},
|
|
469
|
-
onBlur: function onBlur() {
|
|
470
|
-
log('[table:onBlur]...');
|
|
471
|
-
|
|
472
|
-
_this.onPluginBlur();
|
|
473
|
-
}
|
|
474
|
-
},
|
|
475
|
-
responseArea: {
|
|
476
|
-
type: normalizedResponseAreaProps.type,
|
|
477
|
-
options: normalizedResponseAreaProps.options,
|
|
478
|
-
maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,
|
|
479
|
-
respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,
|
|
480
|
-
onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,
|
|
481
|
-
error: normalizedResponseAreaProps.error,
|
|
482
|
-
onFocus: function onFocus() {
|
|
483
|
-
log('[table:onFocus]...');
|
|
484
|
-
|
|
485
|
-
_this.onPluginFocus();
|
|
486
|
-
},
|
|
487
|
-
onBlur: function onBlur() {
|
|
488
|
-
log('[table:onBlur]...');
|
|
592
|
+
_this.handlePlugins(_this.props);
|
|
489
593
|
|
|
490
|
-
_this.onPluginBlur();
|
|
491
|
-
}
|
|
492
|
-
},
|
|
493
|
-
media: {
|
|
494
|
-
focus: _this.focus,
|
|
495
|
-
createChange: function createChange() {
|
|
496
|
-
return _this.state.value.change();
|
|
497
|
-
},
|
|
498
|
-
onChange: _this.onChange
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
594
|
return _this;
|
|
502
595
|
}
|
|
503
596
|
|
|
@@ -535,6 +628,10 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
535
628
|
toolbarOpts: newToolbarOpts
|
|
536
629
|
});
|
|
537
630
|
}
|
|
631
|
+
|
|
632
|
+
if (!(0, _isEqual["default"])(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {
|
|
633
|
+
this.handlePlugins(nextProps);
|
|
634
|
+
}
|
|
538
635
|
}
|
|
539
636
|
}, {
|
|
540
637
|
key: "componentDidUpdate",
|
|
@@ -605,8 +702,8 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
605
702
|
var sizeStyle = this.buildSizeStyle();
|
|
606
703
|
var names = (0, _classnames["default"])((_classNames = {}, _defineProperty(_classNames, classes.withBg, highlightShape), _defineProperty(_classNames, classes.toolbarOnTop, toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'), _classNames), className);
|
|
607
704
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
608
|
-
ref: function ref(
|
|
609
|
-
return _this3.wrapperRef =
|
|
705
|
+
ref: function ref(_ref2) {
|
|
706
|
+
return _this3.wrapperRef = _ref2;
|
|
610
707
|
},
|
|
611
708
|
style: {
|
|
612
709
|
width: sizeStyle.width
|
|
@@ -632,6 +729,12 @@ var Editor = /*#__PURE__*/function (_React$Component) {
|
|
|
632
729
|
onKeyDown: onKeyDown,
|
|
633
730
|
onChange: this.onChange,
|
|
634
731
|
onBlur: this.onBlur,
|
|
732
|
+
onDrop: function onDrop(event, editor) {
|
|
733
|
+
return _this3.onDropPaste(event, editor, true);
|
|
734
|
+
},
|
|
735
|
+
onPaste: function onPaste(event, editor) {
|
|
736
|
+
return _this3.onDropPaste(event, editor);
|
|
737
|
+
},
|
|
635
738
|
onFocus: this.onFocus,
|
|
636
739
|
onEditingDone: this.onEditingDone,
|
|
637
740
|
focusedNode: focusedNode,
|
|
@@ -669,6 +772,7 @@ _defineProperty(Editor, "propTypes", {
|
|
|
669
772
|
focus: _propTypes["default"].func.isRequired,
|
|
670
773
|
value: _slatePropTypes["default"].value.isRequired,
|
|
671
774
|
imageSupport: _propTypes["default"].object,
|
|
775
|
+
charactersLimit: _propTypes["default"].number,
|
|
672
776
|
width: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
673
777
|
height: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
674
778
|
minHeight: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
@@ -688,6 +792,11 @@ _defineProperty(Editor, "propTypes", {
|
|
|
688
792
|
respAreaToolbar: _propTypes["default"].func,
|
|
689
793
|
onHandleAreaChange: _propTypes["default"].func
|
|
690
794
|
}),
|
|
795
|
+
languageCharactersProps: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
796
|
+
language: _propTypes["default"].string,
|
|
797
|
+
characterIcon: _propTypes["default"].string,
|
|
798
|
+
characters: _propTypes["default"].arrayOf(_propTypes["default"].arrayOf(_propTypes["default"].string))
|
|
799
|
+
})),
|
|
691
800
|
toolbarOpts: _propTypes["default"].shape({
|
|
692
801
|
position: _propTypes["default"].oneOf(['bottom', 'top']),
|
|
693
802
|
alignment: _propTypes["default"].oneOf(['left', 'right']),
|
|
@@ -701,7 +810,9 @@ _defineProperty(Editor, "propTypes", {
|
|
|
701
810
|
});
|
|
702
811
|
return !allValid && new Error("Invalid values: ".concat(values, ", values must be one of [").concat(_plugins.ALL_PLUGINS.join(','), "]"));
|
|
703
812
|
}),
|
|
704
|
-
className: _propTypes["default"].string
|
|
813
|
+
className: _propTypes["default"].string,
|
|
814
|
+
maxImageWidth: _propTypes["default"].number,
|
|
815
|
+
maxImageHeight: _propTypes["default"].number
|
|
705
816
|
});
|
|
706
817
|
|
|
707
818
|
_defineProperty(Editor, "defaultProps", {
|
|
@@ -710,7 +821,8 @@ _defineProperty(Editor, "defaultProps", {
|
|
|
710
821
|
onBlur: function onBlur() {},
|
|
711
822
|
onKeyDown: function onKeyDown() {},
|
|
712
823
|
toolbarOpts: defaultToolbarOpts,
|
|
713
|
-
responseAreaProps: defaultResponseAreaProps
|
|
824
|
+
responseAreaProps: defaultResponseAreaProps,
|
|
825
|
+
languageCharactersProps: defaultLanguageCharactersProps
|
|
714
826
|
});
|
|
715
827
|
|
|
716
828
|
var styles = {
|
package/lib/editor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","createToolbarOpts","toolbarOpts","Editor","props","e","relatedTarget","target","node","state","value","setState","focusedNode","resetValue","stashedValue","stashValue","editor","change","c","collapseToStartOf","selectedNode","onChange","resolve","nonEmpty","toolbarInFocus","blur","startText","text","length","then","onEditingDone","event","Promise","handleBlur","bind","onBlur","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","onFocus","force","stopReset","plugins","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","done","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","type","parent","getParent","Block","pos","focus","normalizedResponseAreaProps","responseAreaProps","onResize","activePlugins","math","onClick","onMathClick","onPluginFocus","onPluginBlur","image","onDelete","imageSupport","src","insertImageRequested","getHandler","handler","add","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","table","responseArea","maxResponseAreas","error","media","createChange","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","oneOfType","string","number","any","shape","oneOf","arrayOf","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":"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","sourcesContent":["import { Editor as SlateEditor, findNode } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n this.props.imageSupport &&\n this.props.imageSupport.delete &&\n ((src, done) => {\n this.props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n this.props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n this.props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = this.props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n }\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n this.setState({ value: change.value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|
|
1
|
+
{"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","Editor","props","normalizedResponseAreaProps","responseAreaProps","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","image","onDelete","imageSupport","src","done","e","state","value","insertImageRequested","getHandler","handler","add","maxImageWidth","maxImageHeight","toolbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","setState","toolbarInFocus","focusedNode","editor","blur","startText","text","length","resetValue","then","onEditingDone","table","responseArea","type","maxResponseAreas","error","languageCharacters","languageCharactersProps","media","focus","createChange","change","onChange","relatedTarget","target","node","stashedValue","stashValue","c","collapseToStartOf","selectedNode","resolve","event","Promise","handleBlur","bind","editorDOM","document","querySelector","key","setTimeout","wrapperRef","editorElement","activeElement","closest","className","toolbarElement","toolbarRef","isInCurrentComponent","contains","removeEventListener","handleDomBlur","__TEMPORARY_CHANGE_DATA","data","domEl","setNodeByKey","addEventListener","force","stopReset","reduce","s","p","isFocused","toObject","newValue","Value","fromJSON","toJSON","charactersLimit","v","endsWith","undefined","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","onResize","handlePlugins","onRef","window","autoFocus","nextProps","newToolbarOpts","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","display","equals","width","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","classes","placeholder","pluginProps","onKeyDown","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","ref","r","slateEditor","editorRef","onDropPaste","normalize","changeData","React","Component","PropTypes","bool","func","isRequired","SlateTypes","number","oneOfType","string","any","shape","oneOf","arrayOf","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","includes","Error","join","styles","backgroundColor","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","textAlign","border","marginTop"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAMA,GAAG,GAAG,uBAAM,sBAAN,CAAZ;AAEA,IAAMC,kBAAkB,GAAG;AACzBC,EAAAA,QAAQ,EAAE,QADe;AAEzBC,EAAAA,SAAS,EAAE,MAFc;AAGzBC,EAAAA,aAAa,EAAE,KAHU;AAIzBC,EAAAA,QAAQ,EAAE,IAJe;AAKzBC,EAAAA,MAAM,EAAE;AALiB,CAA3B;AAQA,IAAMC,wBAAwB,GAAG;AAC/BC,EAAAA,OAAO,EAAE,EADsB;AAE/BC,EAAAA,eAAe,EAAE,2BAAM,CAAE,CAFM;AAG/BC,EAAAA,kBAAkB,EAAE,8BAAM,CAAE;AAHG,CAAjC;AAMA,IAAMC,8BAA8B,GAAG,EAAvC;;AAEA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAAAC,WAAW,EAAI;AACvC,yCACKZ,kBADL,GAEKY,WAFL;AAID,CALD;;IAOaC,M;;;;;AAyEX,kBAAYC,MAAZ,EAAmB;AAAA;;AAAA;;AACjB,8BAAMA,MAAN;;AADiB,oEAcH,UAAAA,KAAK,EAAI;AACvB,UAAMC,2BAA2B,mCAC5BT,wBAD4B,GAE5BQ,KAAK,CAACE,iBAFsB,CAAjC;;AAKA,YAAKC,OAAL,GAAe,2BAAaH,KAAK,CAACI,aAAnB,EAAkC;AAC/CC,QAAAA,IAAI,EAAE;AACJC,UAAAA,OAAO,EAAE,MAAKC,WADV;AAEJC,UAAAA,OAAO,EAAE,MAAKC,aAFV;AAGJC,UAAAA,MAAM,EAAE,MAAKC;AAHT,SADyC;AAM/CC,QAAAA,KAAK,EAAE;AACLC,UAAAA,QAAQ,EACNb,KAAK,CAACc,YAAN,IACAd,KAAK,CAACc,YAAN,UADA,IAEC,UAACC,GAAD,EAAMC,IAAN,EAAe;AACdhB,YAAAA,KAAK,CAACc,YAAN,WAA0BC,GAA1B,EAA+B,UAAAE,CAAC,EAAI;AAClCD,cAAAA,IAAI,CAACC,CAAD,EAAI,MAAKC,KAAL,CAAWC,KAAf,CAAJ;AACD,aAFD;AAGD,WARE;AASLC,UAAAA,oBAAoB,EAClBpB,KAAK,CAACc,YAAN,IACC,UAAAO,UAAU,EAAI;AACb;AACZ;AACA;AACA;AACY,gBAAMC,OAAO,GAAGD,UAAU,CAAC;AAAA,qBAAM,MAAKH,KAAL,CAAWC,KAAjB;AAAA,aAAD,CAA1B;AACAnB,YAAAA,KAAK,CAACc,YAAN,CAAmBS,GAAnB,CAAuBD,OAAvB;AACD,WAlBE;AAmBLd,UAAAA,OAAO,EAAE,MAAKC,aAnBT;AAoBLC,UAAAA,MAAM,EAAE,MAAKC,YApBR;AAqBLa,UAAAA,aAAa,EAAE,MAAKxB,KAAL,CAAWwB,aArBrB;AAsBLC,UAAAA,cAAc,EAAE,MAAKzB,KAAL,CAAWyB;AAtBtB,SANwC;AA8B/CC,QAAAA,OAAO,EAAE;AACP;AACR;AACA;AACA;AACQC,UAAAA,gBAAgB,EAAE3B,KAAK,CAAC2B,gBALjB;AAMPC,UAAAA,SAAS,EAAE5B,KAAK,CAAC6B,gBANV;AAOPC,UAAAA,MAAM,EAAE,kBAAM;AACZ,gBAAQC,QAAR,GAAqB/B,KAArB,CAAQ+B,QAAR;AAEA9C,YAAAA,GAAG,CAAC,UAAD,CAAH;;AACA,kBAAK+C,QAAL,CAAc;AAAEC,cAAAA,cAAc,EAAE,KAAlB;AAAyBC,cAAAA,WAAW,EAAE;AAAtC,aAAd;;AACA,kBAAKC,MAAL,CAAYC,IAAZ;;AAEA,gBAAIL,QAAQ,IAAI,MAAKb,KAAL,CAAWC,KAAX,CAAiBkB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;AAC5D,oBAAKC,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;AAC/B,sBAAKC,aAAL;AACD,eAFD;AAGD,aAJD,MAIO;AACL,oBAAKA,aAAL;AACD;AACF;AArBM,SA9BsC;AAqD/CC,QAAAA,KAAK,EAAE;AACLnC,UAAAA,OAAO,EAAE,mBAAM;AACbvB,YAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,kBAAKwB,aAAL;AACD,WAJI;AAKLC,UAAAA,MAAM,EAAE,kBAAM;AACZzB,YAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,kBAAK0B,YAAL;AACD;AARI,SArDwC;AA+D/CiC,QAAAA,YAAY,EAAE;AACZC,UAAAA,IAAI,EAAE5C,2BAA2B,CAAC4C,IADtB;AAEZpD,UAAAA,OAAO,EAAEQ,2BAA2B,CAACR,OAFzB;AAGZqD,UAAAA,gBAAgB,EAAE7C,2BAA2B,CAAC6C,gBAHlC;AAIZpD,UAAAA,eAAe,EAAEO,2BAA2B,CAACP,eAJjC;AAKZC,UAAAA,kBAAkB,EAAEM,2BAA2B,CAACN,kBALpC;AAMZoD,UAAAA,KAAK,EAAE9C,2BAA2B,CAAC8C,KANvB;AAOZvC,UAAAA,OAAO,EAAE,mBAAM;AACbvB,YAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,kBAAKwB,aAAL;AACD,WAVW;AAWZC,UAAAA,MAAM,EAAE,kBAAM;AACZzB,YAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,kBAAK0B,YAAL;AACD;AAdW,SA/DiC;AA+E/CqC,QAAAA,kBAAkB,EAAEhD,KAAK,CAACiD,uBA/EqB;AAgF/CC,QAAAA,KAAK,EAAE;AACLC,UAAAA,KAAK,EAAE,MAAKA,KADP;AAELC,UAAAA,YAAY,EAAE;AAAA,mBAAM,MAAKlC,KAAL,CAAWC,KAAX,CAAiBkC,MAAjB,EAAN;AAAA,WAFT;AAGLC,UAAAA,QAAQ,EAAE,MAAKA;AAHV;AAhFwC,OAAlC,CAAf;AAsFD,KA1GkB;;AAAA,mEA6JJ,UAAArC,CAAC,EAAI;AAClBhC,MAAAA,GAAG,CAAC,gBAAD,EAAmBgC,CAAC,IAAIA,CAAC,CAACsC,aAA1B,CAAH;AACA,UAAMC,MAAM,GAAGvC,CAAC,IAAIA,CAAC,CAACsC,aAAtB;AAEA,UAAME,IAAI,GAAGD,MAAM,GAAG,0BAASA,MAAT,EAAiB,MAAKtC,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;AACAlC,MAAAA,GAAG,CAAC,uBAAD,EAA0BwE,IAA1B,CAAH;;AACA,YAAKzB,QAAL,CAAc;AAAEE,QAAAA,WAAW,EAAEuB;AAAf,OAAd,EAAqC,YAAM;AACzC,cAAKjB,UAAL;AACD,OAFD;AAGD,KAtKkB;;AAAA,oEAwKH,UAAAvB,CAAC,EAAI;AACnBhC,MAAAA,GAAG,CAAC,iBAAD,EAAoBgC,CAAC,IAAIA,CAAC,CAACuC,MAA3B,CAAH;AACA,UAAMA,MAAM,GAAGvC,CAAC,IAAIA,CAAC,CAACuC,MAAtB;;AACA,UAAIA,MAAJ,EAAY;AACV,YAAMC,IAAI,GAAG,0BAASD,MAAT,EAAiB,MAAKtC,KAAL,CAAWC,KAA5B,CAAb;AACAlC,QAAAA,GAAG,CAAC,wBAAD,EAA2BwE,IAA3B,CAAH;AAEA,YAAMC,YAAY,GAAG,MAAKxC,KAAL,CAAWwC,YAAX,IAA2B,MAAKxC,KAAL,CAAWC,KAA3D;;AACA,cAAKa,QAAL,CAAc;AAAEE,UAAAA,WAAW,EAAEuB,IAAf;AAAqBC,UAAAA,YAAY,EAAZA;AAArB,SAAd;AACD,OAND,MAMO;AACL,cAAK1B,QAAL,CAAc;AAAEE,UAAAA,WAAW,EAAE;AAAf,SAAd;AACD;;AACD,YAAKyB,UAAL;AACD,KArLkB;;AAAA,kEAuLL,UAAAF,IAAI,EAAI;AACpB,YAAKtB,MAAL,CAAYkB,MAAZ,CAAmB,UAAAO,CAAC;AAAA,eAAIA,CAAC,CAACC,iBAAF,CAAoBJ,IAApB,CAAJ;AAAA,OAApB;;AACA,YAAKzB,QAAL,CAAc;AAAE8B,QAAAA,YAAY,EAAEL;AAAhB,OAAd;AACD,KA1LkB;;AAAA,oEA4LH,YAAM;AACpBxE,MAAAA,GAAG,CAAC,iBAAD,CAAH;;AACA,YAAK+C,QAAL,CAAc;AAAE0B,QAAAA,YAAY,EAAE,IAAhB;AAAsBxB,QAAAA,WAAW,EAAE;AAAnC,OAAd;;AACAjD,MAAAA,GAAG,CAAC,yBAAD,EAA4B,MAAKiC,KAAL,CAAWC,KAAvC,CAAH;;AACA,YAAKnB,KAAL,CAAWsD,QAAX,CAAoB,MAAKpC,KAAL,CAAWC,KAA/B,EAAsC,IAAtC;AACD,KAjMkB;;AAAA,iEA2MN,UAAA4C,OAAO,EAAI;AACtB,UAAQhC,QAAR,GAAqB,MAAK/B,KAA1B,CAAQ+B,QAAR;AACA,UACiBxC,MADjB,GAEI,MAAK2B,KAFT,CACEpB,WADF,CACiBP,MADjB;;AAIA,YAAKyC,QAAL,CAAc;AAAEC,QAAAA,cAAc,EAAE,KAAlB;AAAyBC,QAAAA,WAAW,EAAE;AAAtC,OAAd;;AAEA,UAAI,MAAKC,MAAT,EAAiB;AACf,cAAKA,MAAL,CAAYC,IAAZ;AACD;;AAED,UAAI7C,MAAM,KAAK,MAAf,EAAuB;AACrB,YAAIwC,QAAQ,IAAI,MAAKb,KAAL,CAAWC,KAAX,CAAiBkB,SAAjB,CAA2BC,IAA3B,CAAgCC,MAAhC,KAA2C,CAA3D,EAA8D;AAC5D,gBAAKC,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;AAC/B,kBAAKC,aAAL;;AACAqB,YAAAA,OAAO;AACR,WAHD;AAID,SALD,MAKO;AACL,gBAAKrB,aAAL;;AACAqB,UAAAA,OAAO;AACR;AACF;AACF,KAlOkB;;AAAA,6DAoOV,UAAAC,KAAK,EAAI;AAChB/E,MAAAA,GAAG,CAAC,UAAD,CAAH;AACA,UAAMuE,MAAM,GAAGQ,KAAK,CAACT,aAArB;AAEA,UAAME,IAAI,GAAGD,MAAM,GAAG,0BAASA,MAAT,EAAiB,MAAKtC,KAAL,CAAWC,KAA5B,CAAH,GAAwC,IAA3D;AAEAlC,MAAAA,GAAG,CAAC,iBAAD,EAAoBwE,IAApB,CAAH;AAEA,aAAO,IAAIQ,OAAJ,CAAY,UAAAF,OAAO,EAAI;AAC5B,cAAK/B,QAAL,CAAc;AAAEE,UAAAA,WAAW,EAAEuB;AAAf,SAAd,EAAqC,MAAKS,UAAL,CAAgBC,IAAhB,gCAA2BJ,OAA3B,CAArC;;AACA,cAAK/D,KAAL,CAAWU,MAAX,CAAkBsD,KAAlB;AACD,OAHM,CAAP;AAID,KAhPkB;;AAAA,oEAkPH,UAAA/C,CAAC,EAAI;AACnB,UAAMmD,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAKpD,KAAL,CAAWC,KAAX,CAAiBkD,QAAjB,CAA0BE,GAA/D,SAAlB;AAEAC,MAAAA,UAAU,CAAC,YAAM;AACf,YAAI,CAAC,MAAKC,UAAV,EAAsB;AACpB;AACD;;AAED,YAAMC,aAAa,GACjB,CAACN,SAAD,IAAcC,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2CR,SAAS,CAACS,SAArD,SADhB;AAEA,YAAMC,cAAc,GAClB,CAAC,MAAKC,UAAN,IACAV,QAAQ,CAACM,aAAT,CAAuBC,OAAvB,qBAA2C,MAAKG,UAAL,CAAgBF,SAA3D,SAFF;;AAGA,YAAMG,oBAAoB,GACxB,MAAKP,UAAL,CAAgBQ,QAAhB,CAAyBP,aAAzB,KAA2C,MAAKD,UAAL,CAAgBQ,QAAhB,CAAyBH,cAAzB,CAD7C;;AAGA,YAAI,CAACE,oBAAL,EAA2B;AACzBZ,UAAAA,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;;AACA,gBAAKzE,MAAL,CAAYO,CAAZ;AACD;AACF,OAjBS,EAiBP,EAjBO,CAAV;AAkBD,KAvQkB;;AAAA,8DAgRT;AAAA,aACR,IAAIgD,OAAJ,CAAY,UAAAF,OAAO,EAAI;AACrB,YAAMK,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBAAqC,MAAKpD,KAAL,CAAWC,KAAX,CAAiBkD,QAAjB,CAA0BE,GAA/D,SAAlB;AAEAtF,QAAAA,GAAG,CAAC,WAAD,EAAcoF,QAAQ,CAACM,aAAvB,CAAH;AAEA;AACN;AACA;;AACM,YAAI,MAAKS,uBAAT,EAAkC;AAChC,sCAAsB,MAAKA,uBAA3B;AAAA,cAAQb,GAAR,yBAAQA,GAAR;AAAA,cAAac,IAAb,yBAAaA,IAAb;AACA,cAAMC,KAAK,GAAGjB,QAAQ,CAACC,aAAT,uBAAqCC,GAArC,SAAd;;AAEA,cAAIe,KAAJ,EAAW;AACT,gBAAIjC,MAAM,GAAG,MAAKnC,KAAL,CAAWC,KAAX,CAAiBkC,MAAjB,GAA0BkC,YAA1B,CAAuChB,GAAvC,EAA4C;AAAEc,cAAAA,IAAI,EAAJA;AAAF,aAA5C,CAAb;;AAEA,kBAAKrD,QAAL,CAAc;AAAEb,cAAAA,KAAK,EAAEkC,MAAM,CAAClC;AAAhB,aAAd,EAAuC,YAAM;AAC3C,oBAAKiE,uBAAL,GAA+B,IAA/B;AACD,aAFD;AAGD;AACF;AAED;AACN;AACA;AACA;AACA;AACA;;;AACM,YAAIhB,SAAS,KAAKC,QAAQ,CAACM,aAA3B,EAA0C;AACxCP,UAAAA,SAAS,CAACc,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;AACAf,UAAAA,SAAS,CAACoB,gBAAV,CAA2B,MAA3B,EAAmC,MAAKL,aAAxC;AACD;;AAED,cAAKxB,UAAL;;AACA,cAAK3D,KAAL,CAAWQ,OAAX;;AAEAuD,QAAAA,OAAO;AACR,OApCD,CADQ;AAAA,KAhRS;;AAAA,iEAuTN,YAAM;AACjB9E,MAAAA,GAAG,CAAC,cAAD,CAAH;;AACA,UAAI,CAAC,MAAKiC,KAAL,CAAWwC,YAAhB,EAA8B;AAC5B,cAAK1B,QAAL,CAAc;AAAE0B,UAAAA,YAAY,EAAE,MAAKxC,KAAL,CAAWC;AAA3B,SAAd;AACD;AACF,KA5TkB;;AAAA,iEAiUN,UAAAsE,KAAK,EAAI;AACpB,wBAA+B,MAAKvE,KAApC;AAAA,UAAQC,KAAR,eAAQA,KAAR;AAAA,UAAee,WAAf,eAAeA,WAAf;;AAEA,UAAMwD,SAAS,GAAG,MAAKvF,OAAL,CAAawF,MAAb,CAAoB,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAC9C,eAAOD,CAAC,IAAKC,CAAC,CAACH,SAAF,IAAeG,CAAC,CAACH,SAAF,CAAY,MAAKxE,KAAL,CAAWC,KAAvB,CAA5B;AACD,OAFiB,EAEf,KAFe,CAAlB;;AAIAlC,MAAAA,GAAG,CAAC,cAAD,EAAiBkC,KAAK,CAAC2E,SAAvB,EAAkC5D,WAAlC,EAA+C,aAA/C,EAA8DwD,SAA9D,CAAH;;AACA,UAAK,MAAKxE,KAAL,CAAWwC,YAAX,IAA2B,CAACvC,KAAK,CAAC2E,SAAlC,IAA+C,CAAC5D,WAAhD,IAA+D,CAACwD,SAAjE,IAA+ED,KAAnF,EAA0F;AACxFxG,QAAAA,GAAG,CAAC,2BAAD,CAAH;AACAA,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAKiC,KAAL,CAAWwC,YAAX,CAAwBW,QAAxB,CAAiC0B,QAAjC,EAAZ,CAAH;AACA9G,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAKiC,KAAL,CAAWC,KAAX,CAAiBkD,QAAjB,CAA0B0B,QAA1B,EAAZ,CAAH;;AAEA,YAAMC,QAAQ,GAAGC,aAAMC,QAAN,CAAe,MAAKhF,KAAL,CAAWwC,YAAX,CAAwByC,MAAxB,EAAf,CAAjB;;AAEAlH,QAAAA,GAAG,CAAC,YAAD,EAAe+G,QAAQ,CAAC3B,QAAxB,CAAH;AACA,eAAO,IAAIJ,OAAJ,CAAY,UAAAF,OAAO,EAAI;AAC5BS,UAAAA,UAAU,CAAC,YAAM;AACf,kBAAKxC,QAAL,CAAc;AAAEb,cAAAA,KAAK,EAAE6E,QAAT;AAAmBtC,cAAAA,YAAY,EAAE;AAAjC,aAAd,EAAuD,YAAM;AAC3DzE,cAAAA,GAAG,CAAC,aAAD,EAAgB,MAAKiC,KAAL,CAAWC,KAAX,CAAiBkD,QAAjB,CAA0B8B,MAA1B,EAAhB,CAAH;AACApC,cAAAA,OAAO;AACR,aAHD;AAID,WALS,EAKP,EALO,CAAV;AAMD,SAPM,CAAP;AAQD,OAhBD,MAgBO;AACL,eAAOE,OAAO,CAACF,OAAR,CAAgB,EAAhB,CAAP;AACD;AACF,KA5VkB;;AAAA,+DA8VR,UAACV,MAAD,EAASrC,IAAT,EAAkB;AAC3B/B,MAAAA,GAAG,CAAC,YAAD,CAAH;AAEA,UAAQkC,KAAR,GAAkBkC,MAAlB,CAAQlC,KAAR;AACA,UAAQiF,eAAR,GAA4B,MAAKpG,KAAjC,CAAQoG,eAAR;;AAEA,UACEjF,KAAK,IACLA,KAAK,CAACkD,QADN,IAEAlD,KAAK,CAACkD,QAAN,CAAe/B,IAFf,IAGAnB,KAAK,CAACkD,QAAN,CAAe/B,IAAf,CAAoBC,MAApB,GAA6B6D,eAJ/B,EAKE;AACA;AACD;;AAED,YAAKpE,QAAL,CAAc;AAAEb,QAAAA,KAAK,EAALA;AAAF,OAAd,EAAyB,YAAM;AAC7BlC,QAAAA,GAAG,CAAC,yBAAD,CAAH;;AAEA,YAAI+B,IAAJ,EAAU;AACRA,UAAAA,IAAI;AACL;AACF,OAND;AAOD,KApXkB;;AAAA,kEA+XL,UAAAqF,CAAC,EAAI;AACjB,UAAI,CAACA,CAAL,EAAQ;AACN;AACD;;AAED,UAAI,OAAOA,CAAP,KAAa,QAAjB,EAA2B;AACzB,YAAIA,CAAC,CAACC,QAAF,CAAW,GAAX,CAAJ,EAAqB;AACnB,iBAAOC,SAAP;AACD,SAFD,MAEO,IAAIF,CAAC,CAACC,QAAF,CAAW,IAAX,KAAoBD,CAAC,CAACC,QAAF,CAAW,IAAX,CAApB,IAAwCD,CAAC,CAACC,QAAF,CAAW,IAAX,CAA5C,EAA8D;AACnE,iBAAOD,CAAP;AACD,SAFM,MAEA;AACL,cAAMlF,KAAK,GAAGqF,QAAQ,CAACH,CAAD,EAAI,EAAJ,CAAtB;AACA,iBAAOI,KAAK,CAACtF,KAAD,CAAL,GAAeA,KAAf,aAA0BA,KAA1B,OAAP;AACD;AACF;;AACD,UAAI,OAAOkF,CAAP,KAAa,QAAjB,EAA2B;AACzB,yBAAUA,CAAV;AACD;;AAED;AACD,KAnZkB;;AAAA,mEAgaJ,UAAA5C,IAAI,EAAI;AACrB,UAAIA,IAAI,CAACiD,MAAL,KAAgB,OAApB,EAA6B;AAE7B,UAAMC,IAAI,GAAGlD,IAAI,CAACmD,KAAL,CAAWD,IAAX,EAAb;AACA,UAAI,CAACA,IAAL,EAAW;AAEX,UAAIA,IAAI,CAAC9D,IAAL,KAAc,OAAlB,EAA2B;AAE3B5D,MAAAA,GAAG,CAAC,gCAAD,CAAH;AAEA,UAAM4H,MAAM,GAAGF,IAAI,CAACG,SAAL,CAAeH,IAAI,CAACpC,GAApB,CAAf;;AACA,UAAMsB,CAAC,GAAGkB,aAAMD,SAAN,CAAgBH,IAAI,CAACpC,GAArB,CAAV;;AACAtF,MAAAA,GAAG,CAAC,wBAAD,EAA2B4H,MAA3B,EAAmChB,CAAnC,CAAH;AAEA,aAAOU,SAAP;AACD,KA/akB;;AAAA,iEAibN,UAAChC,GAAD,EAAMc,IAAN,EAAe;AAC1BpG,MAAAA,GAAG,CAAC,mBAAD,EAAsBsF,GAAtB,EAA2Bc,IAA3B,CAAH;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEI;AACA;;AAEA,YAAKD,uBAAL,GAA+B;AAAEb,QAAAA,GAAG,EAAHA,GAAF;AAAOc,QAAAA,IAAI,EAAJA;AAAP,OAA/B;AACD,KAlckB;;AAAA,4DAocX,UAAC2B,GAAD,EAAMvD,IAAN,EAAe;AACrB,UAAMtE,QAAQ,GAAG6H,GAAG,IAAI,KAAxB;;AAEA,YAAKhH,KAAL,CAAWmD,KAAX,CAAiBhE,QAAjB,EAA2BsE,IAA3B;AACD,KAxckB;;AAAA;AAAA,yEA0cL,iBAAOO,KAAP,EAAcX,MAAd,EAAsB4D,WAAtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBACP,MAAKjH,KAAL,CAAWc,YADJ;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAINqB,gBAAAA,MAJM,GAIGkB,MAAM,CAAClB,MAJV;AAKN+E,gBAAAA,QALM,GAKK,kCAAiBlD,KAAjB,CALL;AAMNmD,gBAAAA,IANM,GAMCD,QAAQ,CAACE,KAAT,CAAe,CAAf,CAND;;AAAA,sBAQRD,IAAI,CAACtE,IAAL,KAAc,YAAd,IAA8BsE,IAAI,CAACtE,IAAL,KAAc,WAA5C,IAA2DsE,IAAI,CAACtE,IAAL,KAAc,WARjE;AAAA;AAAA;AAAA;;AAAA;AAUR5D,gBAAAA,GAAG,CAAC,eAAD,CAAH;AAVQ;AAAA,uBAWU,6BAAUkI,IAAV,CAXV;;AAAA;AAWFpG,gBAAAA,GAXE;AAYFsG,gBAAAA,MAZE,GAYOC,cAAOC,MAAP,CAAc;AAC3B1E,kBAAAA,IAAI,EAAE,OADqB;AAE3B2E,kBAAAA,MAAM,EAAE,IAFmB;AAG3BnC,kBAAAA,IAAI,EAAE;AACJoC,oBAAAA,OAAO,EAAE,KADL;AAEJ1G,oBAAAA,GAAG,EAAHA;AAFI;AAHqB,iBAAd,CAZP;;AAoBR,oBAAIkG,WAAJ,EAAiB;AACf,wBAAK9D,KAAL;AACD,iBAFD,MAEO;AACCuE,kBAAAA,KADD,GACS,+BAAc1D,KAAd,EAAqB7B,MAArB,CADT;;AAEL,sBAAIuF,KAAJ,EAAW;AACTrE,oBAAAA,MAAM,CAACsE,MAAP,CAAcD,KAAd;AACD;AACF;;AACKE,gBAAAA,EA5BE,GA4BGvE,MAAM,CAACwE,YAAP,CAAoBR,MAApB,CA5BH;;AA6BR,sBAAK/D,QAAL,CAAcsE,EAAd;;AA7BQ;AAAA;;AAAA;AAAA;AAAA;AA+BR3I,gBAAAA,GAAG,CAAC,uBAAD,cAAH;;AA/BQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OA1cK;;AAAA;AAAA;AAAA;AAAA;;AAEjB,UAAKiC,KAAL,GAAa;AACXC,MAAAA,KAAK,EAAEnB,MAAK,CAACmB,KADF;AAEXrB,MAAAA,WAAW,EAAED,iBAAiB,CAACG,MAAK,CAACF,WAAP;AAFnB,KAAb;;AAKA,UAAKgI,QAAL,GAAgB,YAAM;AACpB9H,MAAAA,MAAK,CAACsD,QAAN,CAAe,MAAKpC,KAAL,CAAWC,KAA1B,EAAiC,IAAjC;AACD,KAFD;;AAIA,UAAK4G,aAAL,CAAmB,MAAK/H,KAAxB;;AAXiB;AAYlB;;;;WAgGD,6BAAoB;AAAA;;AAClB;AACA,WAAKA,KAAL,CAAWgI,KAAX,CAAiB,IAAjB;AAEAC,MAAAA,MAAM,CAACzC,gBAAP,CAAwB,QAAxB,EAAkC,KAAKsC,QAAvC;;AAEA,UAAI,KAAK3F,MAAL,IAAe,KAAKnC,KAAL,CAAWkI,SAA9B,EAAyC;AACvCjE,QAAAA,OAAO,CAACF,OAAR,GAAkBtB,IAAlB,CAAuB,YAAM;AAC3B,cAAI,MAAI,CAACN,MAAT,EAAiB;AACf,gBAAMiC,SAAS,GAAGC,QAAQ,CAACC,aAAT,uBACF,MAAI,CAACnC,MAAL,CAAYhB,KAAZ,CAAkBkD,QAAlB,CAA2BE,GADzB,SAAlB;;AAIA,YAAA,MAAI,CAACpC,MAAL,CAAYgB,KAAZ;;AAEA,gBAAIiB,SAAJ,EAAe;AACbA,cAAAA,SAAS,CAACjB,KAAV;AACD;AACF;AACF,SAZD;AAaD;AACF;;;WAED,mCAA0BgF,SAA1B,EAAqC;AACnC,UAAQrI,WAAR,GAAwB,KAAKoB,KAA7B,CAAQpB,WAAR;AACA,UAAMsI,cAAc,GAAGvI,iBAAiB,CAACsI,SAAS,CAACrI,WAAX,CAAxC;;AAEA,UAAI,CAAC,yBAAQsI,cAAR,EAAwBtI,WAAxB,CAAL,EAA2C;AACzC,aAAKkC,QAAL,CAAc;AACZlC,UAAAA,WAAW,EAAEsI;AADD,SAAd;AAGD;;AAED,UAAI,CAAC,yBAAQD,SAAS,CAAClF,uBAAlB,EAA2C,KAAKjD,KAAL,CAAWiD,uBAAtD,CAAL,EAAqF;AACnF,aAAK8E,aAAL,CAAmBI,SAAnB;AACD;AACF;;;WAED,8BAAqB;AACnB;AACA;AACA,UAAME,YAAY,GAAGhE,QAAQ,CAACiE,gBAAT,CAA0B,6BAA1B,CAArB;AAEAC,MAAAA,KAAK,CAACC,IAAN,CAAWH,YAAX,EAAyBI,OAAzB,CAAiC,UAAAC,EAAE,EAAI;AACrCA,QAAAA,EAAE,CAACC,KAAH,CAASC,QAAT,GAAoB,KAApB;AACAF,QAAAA,EAAE,CAACC,KAAH,CAASE,OAAT,GAAmB,cAAnB;AACD,OAHD;AAID;;;;AAwCD;AACF;AACA;AACE,oCAAuB;AACrBZ,MAAAA,MAAM,CAAC/C,mBAAP,CAA2B,QAA3B,EAAqC,KAAK4C,QAA1C;AACD,K,CAED;;;;WA4KA,0CAAiC9H,KAAjC,EAAwC;AACtC,UAAI,CAACA,KAAK,CAACmB,KAAN,CAAYkD,QAAZ,CAAqByE,MAArB,CAA4B,KAAK9I,KAAL,CAAWmB,KAAX,CAAiBkD,QAA7C,CAAL,EAA6D;AAC3D,aAAKrC,QAAL,CAAc;AACZmB,UAAAA,KAAK,EAAE,KADK;AAEZhC,UAAAA,KAAK,EAAEnB,KAAK,CAACmB;AAFD,SAAd;AAID;AACF;;;WAwBD,0BAAiB;AACf,wBAAgD,KAAKnB,KAArD;AAAA,UAAQ+I,KAAR,eAAQA,KAAR;AAAA,UAAeC,SAAf,eAAeA,SAAf;AAAA,UAA0BC,MAA1B,eAA0BA,MAA1B;AAAA,UAAkCC,SAAlC,eAAkCA,SAAlC;AAEA,aAAO;AACLH,QAAAA,KAAK,EAAE,KAAKI,WAAL,CAAiBJ,KAAjB,CADF;AAELE,QAAAA,MAAM,EAAE,KAAKE,WAAL,CAAiBF,MAAjB,CAFH;AAGLD,QAAAA,SAAS,EAAE,KAAKG,WAAL,CAAiBH,SAAjB,CAHN;AAILE,QAAAA,SAAS,EAAE,KAAKC,WAAL,CAAiBD,SAAjB;AAJN,OAAP;AAMD;;;WAgFD,kBAAS;AAAA;AAAA;;AACP,yBASI,KAAKlJ,KATT;AAAA,UACEoJ,QADF,gBACEA,QADF;AAAA,UAEEC,UAFF,gBAEEA,UAFF;AAAA,UAGEC,cAHF,gBAGEA,cAHF;AAAA,UAIEC,OAJF,gBAIEA,OAJF;AAAA,UAKE1E,SALF,gBAKEA,SALF;AAAA,UAME2E,WANF,gBAMEA,WANF;AAAA,UAOEC,WAPF,gBAOEA,WAPF;AAAA,UAQEC,SARF,gBAQEA,SARF;AAWA,yBAA4C,KAAKxI,KAAjD;AAAA,UAAQC,KAAR,gBAAQA,KAAR;AAAA,UAAee,WAAf,gBAAeA,WAAf;AAAA,UAA4BpC,WAA5B,gBAA4BA,WAA5B;AAEAb,MAAAA,GAAG,CAAC,kBAAD,EAAqBkC,KAArB,CAAH;AACA,UAAMwI,SAAS,GAAG,KAAKC,cAAL,EAAlB;AACA,UAAMC,KAAK,GAAG,4EAETN,OAAO,CAACO,MAFC,EAEQR,cAFR,gCAGTC,OAAO,CAACQ,YAHC,EAGcjK,WAAW,CAACT,aAAZ,IAA6BS,WAAW,CAACX,QAAZ,KAAyB,KAHpE,iBAKZ0F,SALY,CAAd;AAQA,0BACE;AACE,QAAA,GAAG,EAAE,aAAAmF,KAAG;AAAA,iBAAK,MAAI,CAACvF,UAAL,GAAkBuF,KAAvB;AAAA,SADV;AAEE,QAAA,KAAK,EAAE;AAAEjB,UAAAA,KAAK,EAAEY,SAAS,CAACZ;AAAnB,SAFT;AAGE,QAAA,SAAS,EAAEc;AAHb,sBAKE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAE,KAAK1J,OADhB;AAEE,QAAA,QAAQ,EAAE,kBAAA8J,CAAC,EAAI;AACb,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAACC,WAAL,GAAmBD,CAAnB;AACD;AACF,SANH;AAOE,QAAA,GAAG,EAAE,aAAAA,CAAC;AAAA,iBAAK,MAAI,CAAC9H,MAAL,GAAc8H,CAAC,IAAI,MAAI,CAACjK,KAAL,CAAWmK,SAAX,CAAqBF,CAArB,CAAxB;AAAA,SAPR;AAQE,QAAA,UAAU,EAAE,oBAAAA,CAAC,EAAI;AACf,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAAClF,UAAL,GAAkBkF,CAAlB;AACD;AACF,SAZH;AAaE,QAAA,KAAK,EAAE9I,KAbT;AAcE,QAAA,KAAK,EAAE,KAAKgC,KAdd;AAeE,QAAA,SAAS,EAAEuG,SAfb;AAgBE,QAAA,QAAQ,EAAE,KAAKpG,QAhBjB;AAiBE,QAAA,MAAM,EAAE,KAAK5C,MAjBf;AAkBE,QAAA,MAAM,EAAE,gBAACsD,KAAD,EAAQ7B,MAAR;AAAA,iBAAmB,MAAI,CAACiI,WAAL,CAAiBpG,KAAjB,EAAwB7B,MAAxB,EAAgC,IAAhC,CAAnB;AAAA,SAlBV;AAmBE,QAAA,OAAO,EAAE,iBAAC6B,KAAD,EAAQ7B,MAAR;AAAA,iBAAmB,MAAI,CAACiI,WAAL,CAAiBpG,KAAjB,EAAwB7B,MAAxB,CAAnB;AAAA,SAnBX;AAoBE,QAAA,OAAO,EAAE,KAAK3B,OApBhB;AAqBE,QAAA,aAAa,EAAE,KAAKkC,aArBtB;AAsBE,QAAA,WAAW,EAAER,WAtBf;AAuBE,QAAA,SAAS,EAAE,KAAKmI,SAvBlB;AAwBE,QAAA,QAAQ,EAAEjB,QAxBZ;AAyBE,QAAA,UAAU,EAAEC,UAzBd;AA0BE,QAAA,SAAS,EAAEE,OAAO,CAACW,WA1BrB;AA2BE,QAAA,KAAK,EAAE;AACLlB,UAAAA,SAAS,EAAEW,SAAS,CAACX,SADhB;AAELC,UAAAA,MAAM,EAAEU,SAAS,CAACV,MAFb;AAGLC,UAAAA,SAAS,EAAES,SAAS,CAACT;AAHhB,SA3BT;AAgCE,QAAA,WAAW,EAAEO,WAhCf;AAiCE,QAAA,WAAW,EAAE3J,WAjCf;AAkCE,QAAA,WAAW,EAAE0J,WAlCf;AAmCE,QAAA,YAAY,EAAE,KAAKc;AAnCrB,QALF,CADF;AA6CD;;;;EA5nByBC,kBAAMC,S,GA+nBlC;;;;;gBA/nBazK,M,eACQ;AACjBmI,EAAAA,SAAS,EAAEuC,sBAAUC,IADJ;AAEjBP,EAAAA,SAAS,EAAEM,sBAAUE,IAAV,CAAeC,UAFT;AAGjB5C,EAAAA,KAAK,EAAEyC,sBAAUE,IAAV,CAAeC,UAHL;AAIjBtH,EAAAA,QAAQ,EAAEmH,sBAAUE,IAAV,CAAeC,UAJR;AAKjBpK,EAAAA,OAAO,EAAEiK,sBAAUE,IALF;AAMjBjK,EAAAA,MAAM,EAAE+J,sBAAUE,IAND;AAOjBjB,EAAAA,SAAS,EAAEe,sBAAUE,IAPJ;AAQjBxH,EAAAA,KAAK,EAAEsH,sBAAUE,IAAV,CAAeC,UARL;AASjBzJ,EAAAA,KAAK,EAAE0J,2BAAW1J,KAAX,CAAiByJ,UATP;AAUjB9J,EAAAA,YAAY,EAAE2J,sBAAU/D,MAVP;AAWjBN,EAAAA,eAAe,EAAEqE,sBAAUK,MAXV;AAYjB/B,EAAAA,KAAK,EAAE0B,sBAAUM,SAAV,CAAoB,CAACN,sBAAUO,MAAX,EAAmBP,sBAAUK,MAA7B,CAApB,CAZU;AAajB7B,EAAAA,MAAM,EAAEwB,sBAAUM,SAAV,CAAoB,CAACN,sBAAUO,MAAX,EAAmBP,sBAAUK,MAA7B,CAApB,CAbS;AAcjB9B,EAAAA,SAAS,EAAEyB,sBAAUM,SAAV,CAAoB,CAACN,sBAAUO,MAAX,EAAmBP,sBAAUK,MAA7B,CAApB,CAdM;AAejB5B,EAAAA,SAAS,EAAEuB,sBAAUM,SAAV,CAAoB,CAACN,sBAAUO,MAAX,EAAmBP,sBAAUK,MAA7B,CAApB,CAfM;AAgBjBvB,EAAAA,OAAO,EAAEkB,sBAAU/D,MAAV,CAAiBkE,UAhBT;AAiBjBtB,EAAAA,cAAc,EAAEmB,sBAAUC,IAjBT;AAkBjBtB,EAAAA,QAAQ,EAAEqB,sBAAUC,IAlBH;AAmBjBrB,EAAAA,UAAU,EAAEoB,sBAAUC,IAnBL;AAoBjB3I,EAAAA,QAAQ,EAAE0I,sBAAUC,IApBH;AAqBjB/I,EAAAA,gBAAgB,EAAE8I,sBAAUC,IArBX;AAsBjB7I,EAAAA,gBAAgB,EAAE4I,sBAAUC,IAtBX;AAuBjBjB,EAAAA,WAAW,EAAEgB,sBAAUQ,GAvBN;AAwBjBzB,EAAAA,WAAW,EAAEiB,sBAAUO,MAxBN;AAyBjB9K,EAAAA,iBAAiB,EAAEuK,sBAAUS,KAAV,CAAgB;AACjCrI,IAAAA,IAAI,EAAE4H,sBAAUU,KAAV,CAAgB,CACpB,+BADoB,EAEpB,iBAFoB,EAGpB,mBAHoB,CAAhB,CAD2B;AAMjC1L,IAAAA,OAAO,EAAEgL,sBAAU/D,MANc;AAOjChH,IAAAA,eAAe,EAAE+K,sBAAUE,IAPM;AAQjChL,IAAAA,kBAAkB,EAAE8K,sBAAUE;AARG,GAAhB,CAzBF;AAmCjB1H,EAAAA,uBAAuB,EAAEwH,sBAAUW,OAAV,CACvBX,sBAAUS,KAAV,CAAgB;AACdG,IAAAA,QAAQ,EAAEZ,sBAAUO,MADN;AAEdM,IAAAA,aAAa,EAAEb,sBAAUO,MAFX;AAGdO,IAAAA,UAAU,EAAEd,sBAAUW,OAAV,CAAkBX,sBAAUW,OAAV,CAAkBX,sBAAUO,MAA5B,CAAlB;AAHE,GAAhB,CADuB,CAnCR;AA0CjBlL,EAAAA,WAAW,EAAE2K,sBAAUS,KAAV,CAAgB;AAC3B/L,IAAAA,QAAQ,EAAEsL,sBAAUU,KAAV,CAAgB,CAAC,QAAD,EAAW,KAAX,CAAhB,CADiB;AAE3B/L,IAAAA,SAAS,EAAEqL,sBAAUU,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAFgB;AAG3B9L,IAAAA,aAAa,EAAEoL,sBAAUC,IAHE;AAI3BpL,IAAAA,QAAQ,EAAEmL,sBAAUC,IAJO;AAK3BnL,IAAAA,MAAM,EAAEkL,sBAAUO;AALS,GAAhB,CA1CI;AAiDjB5K,EAAAA,aAAa,EAAEqK,sBAAUW,OAAV,CAAkB,UAAAI,MAAM,EAAI;AACzC,QAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAP,CAAa,UAAArF,CAAC;AAAA,aAAIsF,qBAAYC,QAAZ,CAAqBvF,CAArB,CAAJ;AAAA,KAAd,CAAjB;AAEA,WACE,CAACoF,QAAD,IACA,IAAII,KAAJ,2BAA6BL,MAA7B,sCAA+DG,qBAAYG,IAAZ,CAAiB,GAAjB,CAA/D,OAFF;AAID,GAPc,CAjDE;AAyDjBjH,EAAAA,SAAS,EAAE4F,sBAAUO,MAzDJ;AA0DjBxJ,EAAAA,aAAa,EAAEiJ,sBAAUK,MA1DR;AA2DjBrJ,EAAAA,cAAc,EAAEgJ,sBAAUK;AA3DT,C;;gBADR/K,M,kBA+DW;AACpB4B,EAAAA,gBAAgB,EAAE,IADE;AAEpBnB,EAAAA,OAAO,EAAE,mBAAM,CAAE,CAFG;AAGpBE,EAAAA,MAAM,EAAE,kBAAM,CAAE,CAHI;AAIpBgJ,EAAAA,SAAS,EAAE,qBAAM,CAAE,CAJC;AAKpB5J,EAAAA,WAAW,EAAEZ,kBALO;AAMpBgB,EAAAA,iBAAiB,EAAEV,wBANC;AAOpByD,EAAAA,uBAAuB,EAAErD;AAPL,C;;AAikBxB,IAAMmM,MAAM,GAAG;AACbjC,EAAAA,MAAM,EAAE;AACNkC,IAAAA,eAAe,EAAE;AADX,GADK;AAIb9B,EAAAA,WAAW,EAAE;AACX+B,IAAAA,UAAU,EAAE,oBADD;AAGX,eAAW;AACTC,MAAAA,WAAW,EAAE,OADJ;AAETnD,MAAAA,KAAK,EAAE,MAFE;AAGToD,MAAAA,cAAc,EAAE,UAHP;AAITC,MAAAA,KAAK,EAAEA,gBAAM9J,IAAN,EAJE;AAKT0J,MAAAA,eAAe,EAAEI,gBAAMC,UAAN;AALR,KAHA;AAUX,oCAAgC;AAC9BC,MAAAA,SAAS,EAAE,mBADmB,CAE9B;AACA;AACA;AACA;;AAL8B,KAVrB;AAiBX,gBAAY;AACVC,MAAAA,OAAO,EAAE,UADC;AAEVC,MAAAA,SAAS,EAAE;AAFD,KAjBD;AAqBX,wCAAoC;AAClCC,MAAAA,MAAM,EAAE;AAD0B;AArBzB,GAJA;AA6Bb1C,EAAAA,YAAY,EAAE;AACZ2C,IAAAA,SAAS,EAAE;AADC;AA7BD,CAAf;;eAkCe,wBAAWX,MAAX,EAAmBhM,MAAnB,C","sourcesContent":["import { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\n\nimport isEqual from 'lodash/isEqual';\nimport * as serialization from './serialization';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Value, Block, Inline } from 'slate';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport { getBase64 } from './serialization';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur'\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {}\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = toolbarOpts => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts\n };\n};\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n placeholder: PropTypes.string,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank'\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string))\n })\n ),\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string\n }),\n activePlugins: PropTypes.arrayOf(values => {\n const allValid = values.every(v => ALL_PLUGINS.includes(v));\n\n return (\n !allValid &&\n new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`)\n );\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts)\n };\n\n this.onResize = () => {\n props.onChange(this.state.value, true);\n };\n\n this.handlePlugins(this.props);\n }\n\n handlePlugins = props => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps\n };\n\n this.plugins = buildPlugins(props.activePlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur\n },\n image: {\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((src, done) => {\n props.imageSupport.delete(src, e => {\n done(e, this.state.value);\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n (getHandler => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(() => this.state.value);\n props.imageSupport.add(handler);\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: this.props.maxImageWidth,\n maxImageHeight: this.props.maxImageHeight\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n }\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n }\n },\n languageCharacters: props.languageCharactersProps,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange\n }\n });\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(\n `[data-key=\"${this.editor.value.document.key}\"]`\n );\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n componentWillReceiveProps(nextProps) {\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts\n });\n }\n\n if (!isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps)) {\n this.handlePlugins(nextProps);\n }\n }\n\n componentDidUpdate() {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach(el => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = e => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = e => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = node => {\n this.editor.change(c => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n log('[onEditingDone]');\n this.setState({ stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = resolve => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn }\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText.text.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = event => {\n log('[onBlur]');\n const target = event.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise(resolve => {\n this.setState({ focusedNode: node }, this.handleBlur.bind(this, resolve));\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = e => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement =\n !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef ||\n document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent =\n this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n this.onBlur(e);\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = () =>\n new Promise(resolve => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n log('[onFocus]', document.activeElement);\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = force => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise(resolve => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n\n const { value } = change;\n const { charactersLimit } = this.props;\n\n if (\n value &&\n value.document &&\n value.document.text &&\n value.document.text.length > charactersLimit\n ) {\n return;\n }\n\n this.setState({ value }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n UNSAFE_componentWillReceiveProps(props) {\n if (!props.value.document.equals(this.props.value.document)) {\n this.setState({\n focus: false,\n value: props.value\n });\n }\n }\n\n valueToSize = v => {\n if (!v) {\n return;\n }\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (v.endsWith('px') || v.endsWith('vh') || v.endsWith('vw')) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n\n return;\n };\n\n buildSizeStyle() {\n const { width, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight)\n };\n }\n\n validateNode = node => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n if (!this.props.imageSupport) {\n return;\n }\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files[0];\n\n if (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png') {\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src\n }\n });\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n const ch = change.insertInline(inline);\n this.onChange(ch);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n }\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n placeholder,\n pluginProps,\n onKeyDown\n } = this.props;\n\n const { value, focusedNode, toolbarOpts } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top'\n },\n className\n );\n\n return (\n <div\n ref={ref => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width }}\n className={names}\n >\n <SlateEditor\n plugins={this.plugins}\n innerRef={r => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={r => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={r => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n value={value}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n className={classes.slateEditor}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight\n }}\n pluginProps={pluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n onDataChange={this.changeData}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)'\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background()\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5'\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center'\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5'\n }\n },\n toolbarOnTop: {\n marginTop: '45px'\n }\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
|