slate-react 0.133.0 → 0.133.2-20261010231908

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
@@ -2837,6 +2837,93 @@ function useTrackUserInput() {
2837
2837
  };
2838
2838
  }
2839
2839
 
2840
+ var createRestoreDomManager = function createRestoreDomManager(editor, receivedUserInput) {
2841
+ var bufferedMutations = [];
2842
+ var clear = function clear() {
2843
+ bufferedMutations = [];
2844
+ };
2845
+ var registerMutations = function registerMutations(mutations) {
2846
+ var _bufferedMutations;
2847
+ if (!receivedUserInput.current) {
2848
+ return;
2849
+ }
2850
+ var trackedMutations = mutations.filter(function (mutation) {
2851
+ return slateDom.isTrackedMutation(editor, mutation, mutations);
2852
+ });
2853
+ (_bufferedMutations = bufferedMutations).push.apply(_bufferedMutations, _toConsumableArray(trackedMutations));
2854
+ };
2855
+ function restoreDOM() {
2856
+ if (bufferedMutations.length > 0) {
2857
+ bufferedMutations.reverse().forEach(function (mutation) {
2858
+ if (mutation.type === 'characterData') {
2859
+ // We don't want to restore the DOM for characterData mutations
2860
+ // because this interrupts the composition.
2861
+ return;
2862
+ }
2863
+ mutation.removedNodes.forEach(function (node) {
2864
+ mutation.target.insertBefore(node, mutation.nextSibling);
2865
+ });
2866
+ mutation.addedNodes.forEach(function (node) {
2867
+ mutation.target.removeChild(node);
2868
+ });
2869
+ });
2870
+ // Clear buffered mutations to ensure we don't undo them twice
2871
+ clear();
2872
+ }
2873
+ }
2874
+ return {
2875
+ registerMutations: registerMutations,
2876
+ restoreDOM: restoreDOM,
2877
+ clear: clear
2878
+ };
2879
+ };
2880
+
2881
+ var useCompositionDOM = function useCompositionDOM(editor) {
2882
+ var compositionDOM = React.useMemo(function () {
2883
+ var manager = createRestoreDomManager(editor, {
2884
+ current: true
2885
+ });
2886
+ var observer = null;
2887
+ var clear = function clear() {
2888
+ var _observer;
2889
+ (_observer = observer) === null || _observer === void 0 || _observer.disconnect();
2890
+ observer = null;
2891
+ manager.clear();
2892
+ };
2893
+ var track = function track(text) {
2894
+ if (!observer) {
2895
+ if (!(text !== null && text !== void 0 && text.includes('\n'))) return;
2896
+ observer = new MutationObserver(manager.registerMutations);
2897
+ }
2898
+ observer.observe(ReactEditor.toDOMNode(editor, editor), {
2899
+ childList: true,
2900
+ subtree: true
2901
+ });
2902
+ };
2903
+ var pause = function pause() {
2904
+ if (!observer) return;
2905
+ manager.registerMutations(observer.takeRecords());
2906
+ observer.disconnect();
2907
+ };
2908
+ var restore = function restore() {
2909
+ pause();
2910
+ manager.restoreDOM();
2911
+ };
2912
+ return {
2913
+ track: track,
2914
+ pause: pause,
2915
+ restore: restore,
2916
+ clear: clear
2917
+ };
2918
+ }, [editor]);
2919
+ React.useEffect(function () {
2920
+ return function () {
2921
+ return compositionDOM.clear();
2922
+ };
2923
+ }, [compositionDOM]);
2924
+ return compositionDOM;
2925
+ };
2926
+
2840
2927
  function _createForOfIteratorHelper$1(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray$1(r)) || e) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: true } : { done: false, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = true, u = false; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = true, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
2841
2928
  function _unsupportedIterableToArray$1(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray$1(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray$1(r, a) : void 0; } }
2842
2929
  function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
@@ -2964,47 +3051,6 @@ module.exports = _inherits, module.exports.__esModule = true, module.exports["de
2964
3051
 
2965
3052
  var _inherits = unwrapExports(inherits);
2966
3053
 
2967
- var createRestoreDomManager = function createRestoreDomManager(editor, receivedUserInput) {
2968
- var bufferedMutations = [];
2969
- var clear = function clear() {
2970
- bufferedMutations = [];
2971
- };
2972
- var registerMutations = function registerMutations(mutations) {
2973
- var _bufferedMutations;
2974
- if (!receivedUserInput.current) {
2975
- return;
2976
- }
2977
- var trackedMutations = mutations.filter(function (mutation) {
2978
- return slateDom.isTrackedMutation(editor, mutation, mutations);
2979
- });
2980
- (_bufferedMutations = bufferedMutations).push.apply(_bufferedMutations, _toConsumableArray(trackedMutations));
2981
- };
2982
- function restoreDOM() {
2983
- if (bufferedMutations.length > 0) {
2984
- bufferedMutations.reverse().forEach(function (mutation) {
2985
- if (mutation.type === 'characterData') {
2986
- // We don't want to restore the DOM for characterData mutations
2987
- // because this interrupts the composition.
2988
- return;
2989
- }
2990
- mutation.removedNodes.forEach(function (node) {
2991
- mutation.target.insertBefore(node, mutation.nextSibling);
2992
- });
2993
- mutation.addedNodes.forEach(function (node) {
2994
- mutation.target.removeChild(node);
2995
- });
2996
- });
2997
- // Clear buffered mutations to ensure we don't undo them twice
2998
- clear();
2999
- }
3000
- }
3001
- return {
3002
- registerMutations: registerMutations,
3003
- restoreDOM: restoreDOM,
3004
- clear: clear
3005
- };
3006
- };
3007
-
3008
3054
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
3009
3055
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
3010
3056
  var MUTATION_OBSERVER_CONFIG = {
@@ -3164,6 +3210,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3164
3210
  placeholderHeight = _useState4[0],
3165
3211
  setPlaceholderHeight = _useState4[1];
3166
3212
  var processing = React.useRef(false);
3213
+ var compositionDOM = useCompositionDOM(editor);
3167
3214
  var _useTrackUserInput = useTrackUserInput(),
3168
3215
  onUserInput = _useTrackUserInput.onUserInput,
3169
3216
  receivedUserInput = _useTrackUserInput.receivedUserInput;
@@ -3485,6 +3532,9 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3485
3532
  // COMPAT: use composition change events as a hint to where we should insert
3486
3533
  // composition text if we aren't composing to work around https://github.com/ianstormtaylor/slate/issues/5038
3487
3534
  if (isCompositionChange && ReactEditor.isComposing(editor)) {
3535
+ if (slateDom.IS_CHROME) {
3536
+ compositionDOM.track(event.data);
3537
+ }
3488
3538
  return;
3489
3539
  }
3490
3540
  var _native = false;
@@ -3709,7 +3759,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3709
3759
  slate.Transforms.select(editor, toRestore);
3710
3760
  }
3711
3761
  }
3712
- }, [editor, onDOMSelectionChange, onUserInput, propsOnDOMBeforeInput, readOnly, scheduleOnDOMSelectionChange]);
3762
+ }, [editor, onDOMSelectionChange, onUserInput, propsOnDOMBeforeInput, compositionDOM, readOnly, scheduleOnDOMSelectionChange]);
3713
3763
  var callbackRef = React.useCallback(function (node) {
3714
3764
  if (node == null) {
3715
3765
  onDOMSelectionChange.cancel();
@@ -3904,6 +3954,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3904
3954
  }
3905
3955
  }, [attributes.onBeforeInput, editor, readOnly]),
3906
3956
  onInput: React.useCallback(function (event) {
3957
+ compositionDOM.pause();
3907
3958
  if (isEventHandled(event, attributes.onInput)) {
3908
3959
  return;
3909
3960
  }
@@ -3935,7 +3986,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3935
3986
  if (!ReactEditor.isFocused(editor)) {
3936
3987
  handleNativeHistoryEvents(editor, event.nativeEvent);
3937
3988
  }
3938
- }, [attributes.onInput, editor]),
3989
+ }, [attributes.onInput, editor, compositionDOM]),
3939
3990
  onBlur: React.useCallback(function (event) {
3940
3991
  if (readOnly || state.isUpdatingSelection || !ReactEditor.hasSelectableTarget(editor, event.target) || isEventHandled(event, attributes.onBlur)) {
3941
3992
  return;
@@ -4046,6 +4097,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4046
4097
  }
4047
4098
  (_androidInputManagerR3 = androidInputManagerRef.current) === null || _androidInputManagerR3 === void 0 || _androidInputManagerR3.handleCompositionEnd(event);
4048
4099
  if (isEventHandled(event, attributes.onCompositionEnd) || slateDom.IS_ANDROID) {
4100
+ compositionDOM.clear();
4049
4101
  return;
4050
4102
  }
4051
4103
  // COMPAT: In Chrome, `beforeinput` events for compositions
@@ -4060,6 +4112,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4060
4112
  slateDom.EDITOR_TO_USER_MARKS.set(editor, editor.marks);
4061
4113
  editor.marks = placeholderMarks;
4062
4114
  }
4115
+ compositionDOM.restore();
4063
4116
  slate.Editor.insertText(editor, event.data);
4064
4117
  var userMarks = slateDom.EDITOR_TO_USER_MARKS.get(editor);
4065
4118
  slateDom.EDITOR_TO_USER_MARKS["delete"](editor);
@@ -4067,8 +4120,9 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4067
4120
  editor.marks = userMarks;
4068
4121
  }
4069
4122
  }
4123
+ compositionDOM.clear();
4070
4124
  }
4071
- }, [attributes.onCompositionEnd, editor]),
4125
+ }, [attributes.onCompositionEnd, editor, compositionDOM]),
4072
4126
  onCompositionUpdate: React.useCallback(function (event) {
4073
4127
  if (ReactEditor.hasSelectableTarget(editor, event.target) && !isEventHandled(event, attributes.onCompositionUpdate) && !isDOMEventTargetInput(event)) {
4074
4128
  if (!ReactEditor.isComposing(editor)) {
@@ -4087,6 +4141,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4087
4141
  if (isEventHandled(event, attributes.onCompositionStart) || slateDom.IS_ANDROID) {
4088
4142
  return;
4089
4143
  }
4144
+ compositionDOM.clear();
4090
4145
  setIsComposing(true);
4091
4146
  var selection = editor.selection;
4092
4147
  if (selection && slate.Range.isExpanded(selection)) {
@@ -4094,7 +4149,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4094
4149
  return;
4095
4150
  }
4096
4151
  }
4097
- }, [attributes.onCompositionStart, editor]),
4152
+ }, [attributes.onCompositionStart, editor, compositionDOM]),
4098
4153
  onCopy: React.useCallback(function (event) {
4099
4154
  if (ReactEditor.hasSelectableTarget(editor, event.target) && !isEventHandled(event, attributes.onCopy) && !isDOMEventTargetInput(event)) {
4100
4155
  event.preventDefault();