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.
package/dist/index.js CHANGED
@@ -3078,6 +3078,75 @@ var useCompositionDOM = function useCompositionDOM(editor) {
3078
3078
  return compositionDOM;
3079
3079
  };
3080
3080
 
3081
+ var revertMutation = function revertMutation(mutation) {
3082
+ var target = mutation.target;
3083
+ if (mutation.type === 'characterData') {
3084
+ target.nodeValue = mutation.oldValue;
3085
+ } else if (mutation.type === 'attributes' && slateDom.isDOMElement(target)) {
3086
+ var name = mutation.attributeName;
3087
+ if (mutation.oldValue === null) {
3088
+ target.removeAttribute(name);
3089
+ } else {
3090
+ target.setAttribute(name, mutation.oldValue);
3091
+ }
3092
+ } else {
3093
+ mutation.addedNodes.forEach(function (node) {
3094
+ var _node$parentNode;
3095
+ return (_node$parentNode = node.parentNode) === null || _node$parentNode === void 0 ? void 0 : _node$parentNode.removeChild(node);
3096
+ });
3097
+ mutation.removedNodes.forEach(function (node) {
3098
+ return target.insertBefore(node, mutation.nextSibling);
3099
+ });
3100
+ }
3101
+ };
3102
+ var useNativeFormatDOM = function useNativeFormatDOM(editor) {
3103
+ var nativeFormatDOM = React.useMemo(function () {
3104
+ var delivered = [];
3105
+ var observer = null;
3106
+ var deliver = function deliver(mutations) {
3107
+ var _delivered;
3108
+ if (delivered.length === 0) {
3109
+ setTimeout(function () {
3110
+ delivered = [];
3111
+ });
3112
+ }
3113
+ (_delivered = delivered).push.apply(_delivered, _toConsumableArray(mutations));
3114
+ };
3115
+ var observe = function observe() {
3116
+ observer !== null && observer !== void 0 ? observer : observer = new MutationObserver(deliver);
3117
+ observer.observe(ReactEditor.toDOMNode(editor, editor), {
3118
+ attributes: true,
3119
+ attributeOldValue: true,
3120
+ characterData: true,
3121
+ characterDataOldValue: true,
3122
+ childList: true,
3123
+ subtree: true
3124
+ });
3125
+ };
3126
+ var disconnect = function disconnect() {
3127
+ var _observer;
3128
+ (_observer = observer) === null || _observer === void 0 || _observer.disconnect();
3129
+ delivered = [];
3130
+ };
3131
+ var revert = function revert() {
3132
+ var _observer$takeRecords, _observer2;
3133
+ 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 : []));
3134
+ delivered = [];
3135
+ mutations.reverse().forEach(revertMutation);
3136
+ };
3137
+ return {
3138
+ observe: observe,
3139
+ disconnect: disconnect,
3140
+ revert: revert
3141
+ };
3142
+ }, [editor]);
3143
+ React.useEffect(function () {
3144
+ nativeFormatDOM.observe();
3145
+ return nativeFormatDOM.disconnect;
3146
+ }, [nativeFormatDOM]);
3147
+ return nativeFormatDOM;
3148
+ };
3149
+
3081
3150
  var caretTop = function caretTop(editor, point) {
3082
3151
  var range = ReactEditor.resolveDOMRange(editor, {
3083
3152
  anchor: point,
@@ -3472,6 +3541,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3472
3541
  setPlaceholderHeight = _useState4[1];
3473
3542
  var processing = React.useRef(false);
3474
3543
  var compositionDOM = useCompositionDOM(editor);
3544
+ var nativeFormatDOM = useNativeFormatDOM(editor);
3475
3545
  var deleteOnCompositionEndRef = React.useRef(false);
3476
3546
  var _useTrackUserInput = useTrackUserInput(),
3477
3547
  onUserInput = _useTrackUserInput.onUserInput,
@@ -4278,6 +4348,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4278
4348
  }
4279
4349
  }, [attributes.onBeforeInput, editor, readOnly]),
4280
4350
  onInput: React.useCallback(function (event) {
4351
+ var _event$nativeEvent$in;
4281
4352
  if (readOnly) {
4282
4353
  isEventHandled(event, attributes.onInput);
4283
4354
  return;
@@ -4293,6 +4364,16 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4293
4364
  androidInputManagerRef.current.handleInput();
4294
4365
  return;
4295
4366
  }
4367
+ if ((_event$nativeEvent$in = event.nativeEvent.inputType) !== null && _event$nativeEvent$in !== void 0 && _event$nativeEvent$in.startsWith('format')) {
4368
+ var domSelection = slateDom.getSelection(ReactEditor.findDocumentOrShadowRoot(editor));
4369
+ var range = domSelection && ReactEditor.resolveSlateRange(editor, domSelection);
4370
+ nativeFormatDOM.revert();
4371
+ if (domSelection && range) {
4372
+ slate.Transforms.select(editor, range);
4373
+ restoreDomSelection(editor, domSelection, state);
4374
+ }
4375
+ return;
4376
+ }
4296
4377
  // Flush native operations, as native events will have propogated
4297
4378
  // and we can correctly compare DOM text values in components
4298
4379
  // to stop rendering, so that browser functions like autocorrect
@@ -4335,7 +4416,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4335
4416
  if (!ReactEditor.isFocused(editor)) {
4336
4417
  handleNativeHistoryEvents(editor, event.nativeEvent);
4337
4418
  }
4338
- }, [readOnly, attributes.onInput, editor, compositionDOM]),
4419
+ }, [readOnly, attributes.onInput, editor, compositionDOM, nativeFormatDOM]),
4339
4420
  onBlur: React.useCallback(function (event) {
4340
4421
  if (readOnly) {
4341
4422
  isEventHandled(event, attributes.onBlur);