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/components/editable.d.ts.map +1 -1
- package/dist/hooks/use-composition-dom.d.ts +8 -0
- package/dist/hooks/use-composition-dom.d.ts.map +1 -0
- package/dist/index.es.js +94 -43
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +100 -45
- package/dist/index.js.map +1 -1
- package/dist/slate-react.js +102 -45
- package/dist/slate-react.min.js +1 -1
- package/package.json +3 -3
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();
|