slate-react 0.147.1 → 0.147.2

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.
@@ -7207,6 +7207,75 @@
7207
7207
  return compositionDOM;
7208
7208
  };
7209
7209
 
7210
+ var revertMutation = function revertMutation(mutation) {
7211
+ var target = mutation.target;
7212
+ if (mutation.type === 'characterData') {
7213
+ target.nodeValue = mutation.oldValue;
7214
+ } else if (mutation.type === 'attributes' && isDOMElement(target)) {
7215
+ var name = mutation.attributeName;
7216
+ if (mutation.oldValue === null) {
7217
+ target.removeAttribute(name);
7218
+ } else {
7219
+ target.setAttribute(name, mutation.oldValue);
7220
+ }
7221
+ } else {
7222
+ mutation.addedNodes.forEach(function (node) {
7223
+ var _node$parentNode;
7224
+ return (_node$parentNode = node.parentNode) === null || _node$parentNode === void 0 ? void 0 : _node$parentNode.removeChild(node);
7225
+ });
7226
+ mutation.removedNodes.forEach(function (node) {
7227
+ return target.insertBefore(node, mutation.nextSibling);
7228
+ });
7229
+ }
7230
+ };
7231
+ var useNativeFormatDOM = function useNativeFormatDOM(editor) {
7232
+ var nativeFormatDOM = React.useMemo(function () {
7233
+ var delivered = [];
7234
+ var observer = null;
7235
+ var deliver = function deliver(mutations) {
7236
+ var _delivered;
7237
+ if (delivered.length === 0) {
7238
+ setTimeout(function () {
7239
+ delivered = [];
7240
+ });
7241
+ }
7242
+ (_delivered = delivered).push.apply(_delivered, _toConsumableArray(mutations));
7243
+ };
7244
+ var observe = function observe() {
7245
+ observer !== null && observer !== void 0 ? observer : observer = new MutationObserver(deliver);
7246
+ observer.observe(ReactEditor.toDOMNode(editor, editor), {
7247
+ attributes: true,
7248
+ attributeOldValue: true,
7249
+ characterData: true,
7250
+ characterDataOldValue: true,
7251
+ childList: true,
7252
+ subtree: true
7253
+ });
7254
+ };
7255
+ var disconnect = function disconnect() {
7256
+ var _observer;
7257
+ (_observer = observer) === null || _observer === void 0 || _observer.disconnect();
7258
+ delivered = [];
7259
+ };
7260
+ var revert = function revert() {
7261
+ var _observer$takeRecords, _observer2;
7262
+ var mutations = [].concat(_toConsumableArray(delivered), _toConsumableArray((_observer$takeRecords = (_observer2 = observer) === null || _observer2 === void 0 ? void 0 : _observer2.takeRecords()) !== null && _observer$takeRecords !== void 0 ? _observer$takeRecords : []));
7263
+ delivered = [];
7264
+ mutations.reverse().forEach(revertMutation);
7265
+ };
7266
+ return {
7267
+ observe: observe,
7268
+ disconnect: disconnect,
7269
+ revert: revert
7270
+ };
7271
+ }, [editor]);
7272
+ React.useEffect(function () {
7273
+ nativeFormatDOM.observe();
7274
+ return nativeFormatDOM.disconnect;
7275
+ }, [nativeFormatDOM]);
7276
+ return nativeFormatDOM;
7277
+ };
7278
+
7210
7279
  var caretTop = function caretTop(editor, point) {
7211
7280
  var range = ReactEditor.resolveDOMRange(editor, {
7212
7281
  anchor: point,
@@ -7601,6 +7670,7 @@
7601
7670
  setPlaceholderHeight = _useState4[1];
7602
7671
  var processing = React.useRef(false);
7603
7672
  var compositionDOM = useCompositionDOM(editor);
7673
+ var nativeFormatDOM = useNativeFormatDOM(editor);
7604
7674
  var deleteOnCompositionEndRef = React.useRef(false);
7605
7675
  var _useTrackUserInput = useTrackUserInput(),
7606
7676
  onUserInput = _useTrackUserInput.onUserInput,
@@ -8407,6 +8477,7 @@
8407
8477
  }
8408
8478
  }, [attributes.onBeforeInput, editor, readOnly]),
8409
8479
  onInput: React.useCallback(function (event) {
8480
+ var _event$nativeEvent$in;
8410
8481
  if (readOnly) {
8411
8482
  isEventHandled(event, attributes.onInput);
8412
8483
  return;
@@ -8422,6 +8493,16 @@
8422
8493
  androidInputManagerRef.current.handleInput();
8423
8494
  return;
8424
8495
  }
8496
+ if ((_event$nativeEvent$in = event.nativeEvent.inputType) !== null && _event$nativeEvent$in !== void 0 && _event$nativeEvent$in.startsWith('format')) {
8497
+ var domSelection = getSelection(ReactEditor.findDocumentOrShadowRoot(editor));
8498
+ var range = domSelection && ReactEditor.resolveSlateRange(editor, domSelection);
8499
+ nativeFormatDOM.revert();
8500
+ if (domSelection && range) {
8501
+ slate.Transforms.select(editor, range);
8502
+ restoreDomSelection(editor, domSelection, state);
8503
+ }
8504
+ return;
8505
+ }
8425
8506
  // Flush native operations, as native events will have propogated
8426
8507
  // and we can correctly compare DOM text values in components
8427
8508
  // to stop rendering, so that browser functions like autocorrect
@@ -8464,7 +8545,7 @@
8464
8545
  if (!ReactEditor.isFocused(editor)) {
8465
8546
  handleNativeHistoryEvents(editor, event.nativeEvent);
8466
8547
  }
8467
- }, [readOnly, attributes.onInput, editor, compositionDOM]),
8548
+ }, [readOnly, attributes.onInput, editor, compositionDOM, nativeFormatDOM]),
8468
8549
  onBlur: React.useCallback(function (event) {
8469
8550
  if (readOnly) {
8470
8551
  isEventHandled(event, attributes.onBlur);