slate-react 0.91.7 → 0.91.8-202322171954
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/hooks/android-input-manager/android-input-manager.d.ts.map +1 -1
- package/dist/index.es.js +93 -63
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +106 -70
- package/dist/index.js.map +1 -1
- package/dist/slate-react.js +106 -70
- package/dist/slate-react.min.js +1 -1
- package/dist/utils/diff-text.d.ts +1 -0
- package/dist/utils/diff-text.d.ts.map +1 -1
- package/dist/utils/environment.d.ts +1 -0
- package/dist/utils/environment.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android-input-manager.d.ts","sourceRoot":"","sources":["../../packages/slate-react/src/hooks/android-input-manager/android-input-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAsB,KAAK,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"android-input-manager.d.ts","sourceRoot":"","sources":["../../packages/slate-react/src/hooks/android-input-manager/android-input-manager.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AACtC,OAAO,EAAsB,KAAK,EAAE,KAAK,EAAoB,MAAM,OAAO,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAwBvD,oBAAY,MAAM,GAAG;IAAE,EAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,IAAI,CAAA;CAAE,CAAA;AAY5D,oBAAY,gCAAgC,GAAG;IAC7C,MAAM,EAAE,WAAW,CAAA;IAEnB,4BAA4B,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;IACvD,oBAAoB,EAAE,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;CAChD,CAAA;AAED,oBAAY,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,aAAa,EAAE,MAAM,IAAI,CAAA;IAEzB,eAAe,EAAE,MAAM,OAAO,CAAA;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAA;IAC/B,iBAAiB,EAAE,MAAM,OAAO,CAAA;IAChC,UAAU,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAA;IAEpC,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAC/C,oBAAoB,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAC7E,sBAAsB,EAAE,CACtB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAC1C,IAAI,CAAA;IACT,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACjD,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAA;IAEnE,kBAAkB,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,IAAI,CAAA;IACzD,WAAW,EAAE,MAAM,IAAI,CAAA;CACxB,CAAA;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,4BAA4B,EAC5B,oBAAoB,GACrB,EAAE,gCAAgC,GAAG,mBAAmB,CA2rBxD"}
|
package/dist/index.es.js
CHANGED
|
@@ -375,7 +375,8 @@ var IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\/(?:[0-6][0-9]|[
|
|
|
375
375
|
var IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent); // Native `beforeInput` events don't work well with react on Chrome 75
|
|
376
376
|
// and older, Chrome 76+ can use `beforeInput` though.
|
|
377
377
|
|
|
378
|
-
var IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\/(?:[0-7][0-5]|[0-6][0-9])(?:\.)/i.test(navigator.userAgent);
|
|
378
|
+
var IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\/(?:[0-7][0-5]|[0-6][0-9])(?:\.)/i.test(navigator.userAgent);
|
|
379
|
+
var IS_ANDROID_CHROME_LEGACY = IS_ANDROID && typeof navigator !== 'undefined' && /Chrome?\/(?:[0-5]?\d)(?:\.)/i.test(navigator.userAgent); // Firefox did not support `beforeInput` until `v87`.
|
|
379
380
|
|
|
380
381
|
var IS_FIREFOX_LEGACY = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox\/(?:[0-7][0-9]|[0-8][0-6])(?:\.)).*/i.test(navigator.userAgent); // UC mobile browser
|
|
381
382
|
|
|
@@ -387,7 +388,7 @@ var IS_WECHATBROWSER = typeof navigator !== 'undefined' && /.*Wechat/.test(navig
|
|
|
387
388
|
var CAN_USE_DOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined'); // COMPAT: Firefox/Edge Legacy don't support the `beforeinput` event
|
|
388
389
|
// Chrome Legacy doesn't support `beforeinput` correctly
|
|
389
390
|
|
|
390
|
-
var HAS_BEFORE_INPUT_SUPPORT = !IS_CHROME_LEGACY && !IS_EDGE_LEGACY && // globalThis is undefined in older browsers
|
|
391
|
+
var HAS_BEFORE_INPUT_SUPPORT = (!IS_CHROME_LEGACY || !IS_ANDROID_CHROME_LEGACY) && !IS_EDGE_LEGACY && // globalThis is undefined in older browsers
|
|
391
392
|
typeof globalThis !== 'undefined' && globalThis.InputEvent && // @ts-ignore The `getTargetRanges` property isn't recognized.
|
|
392
393
|
typeof globalThis.InputEvent.prototype.getTargetRanges === 'function';
|
|
393
394
|
|
|
@@ -2003,7 +2004,6 @@ function verifyDiffState(editor, textDiff) {
|
|
|
2003
2004
|
var nextNode = Node.get(editor, nextPath);
|
|
2004
2005
|
return Text$1.isText(nextNode) && nextNode.text.startsWith(diff.text);
|
|
2005
2006
|
}
|
|
2006
|
-
|
|
2007
2007
|
function applyStringDiff(text) {
|
|
2008
2008
|
for (var _len = arguments.length, diffs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
2009
2009
|
diffs[_key - 1] = arguments[_key];
|
|
@@ -2472,8 +2472,6 @@ function createAndroidInputManager(_ref) {
|
|
|
2472
2472
|
};
|
|
2473
2473
|
|
|
2474
2474
|
var flush = () => {
|
|
2475
|
-
var _EDITOR_TO_PENDING_DI;
|
|
2476
|
-
|
|
2477
2475
|
if (flushTimeoutId) {
|
|
2478
2476
|
clearTimeout(flushTimeoutId);
|
|
2479
2477
|
flushTimeoutId = null;
|
|
@@ -2503,11 +2501,11 @@ function createAndroidInputManager(_ref) {
|
|
|
2503
2501
|
});
|
|
2504
2502
|
EDITOR_TO_USER_MARKS.set(editor, editor.marks);
|
|
2505
2503
|
debug('flush', EDITOR_TO_PENDING_ACTION.get(editor), EDITOR_TO_PENDING_DIFFS.get(editor));
|
|
2506
|
-
var scheduleSelectionChange =
|
|
2504
|
+
var scheduleSelectionChange = hasPendingDiffs();
|
|
2507
2505
|
var diff;
|
|
2508
2506
|
|
|
2509
|
-
while (diff = (
|
|
2510
|
-
var
|
|
2507
|
+
while (diff = (_EDITOR_TO_PENDING_DI = EDITOR_TO_PENDING_DIFFS.get(editor)) === null || _EDITOR_TO_PENDING_DI === void 0 ? void 0 : _EDITOR_TO_PENDING_DI[0]) {
|
|
2508
|
+
var _EDITOR_TO_PENDING_DI, _EDITOR_TO_PENDING_DI2;
|
|
2511
2509
|
|
|
2512
2510
|
var pendingMarks = EDITOR_TO_PENDING_INSERTION_MARKS.get(editor);
|
|
2513
2511
|
|
|
@@ -2534,7 +2532,7 @@ function createAndroidInputManager(_ref) {
|
|
|
2534
2532
|
// pending ranges.
|
|
2535
2533
|
|
|
2536
2534
|
|
|
2537
|
-
EDITOR_TO_PENDING_DIFFS.set(editor, (
|
|
2535
|
+
EDITOR_TO_PENDING_DIFFS.set(editor, (_EDITOR_TO_PENDING_DI2 = EDITOR_TO_PENDING_DIFFS.get(editor)) === null || _EDITOR_TO_PENDING_DI2 === void 0 ? void 0 : _EDITOR_TO_PENDING_DI2.filter(_ref2 => {
|
|
2538
2536
|
var {
|
|
2539
2537
|
id
|
|
2540
2538
|
} = _ref2;
|
|
@@ -2622,8 +2620,8 @@ function createAndroidInputManager(_ref) {
|
|
|
2622
2620
|
};
|
|
2623
2621
|
|
|
2624
2622
|
var storeDiff = (path, diff) => {
|
|
2625
|
-
var
|
|
2626
|
-
var pendingDiffs = (
|
|
2623
|
+
var _EDITOR_TO_PENDING_DI3;
|
|
2624
|
+
var pendingDiffs = (_EDITOR_TO_PENDING_DI3 = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI3 !== void 0 ? _EDITOR_TO_PENDING_DI3 : [];
|
|
2627
2625
|
EDITOR_TO_PENDING_DIFFS.set(editor, pendingDiffs);
|
|
2628
2626
|
var target = Node.leaf(editor, path);
|
|
2629
2627
|
var idx = pendingDiffs.findIndex(change => Path.equals(change.path, path));
|
|
@@ -2723,49 +2721,77 @@ function createAndroidInputManager(_ref) {
|
|
|
2723
2721
|
|
|
2724
2722
|
if (!targetRange) {
|
|
2725
2723
|
return;
|
|
2726
|
-
}
|
|
2724
|
+
} // By default, the input manager tries to store text diffs so that we can
|
|
2725
|
+
// defer flushing them at a later point in time. We don't want to flush
|
|
2726
|
+
// for every input event as this can be expensive. However, there are some
|
|
2727
|
+
// scenarios where we cannot safely store the text diff and must instead
|
|
2728
|
+
// schedule an action to let Slate normalize the editor state.
|
|
2727
2729
|
|
|
2728
|
-
if (Range.isExpanded(targetRange) && type.startsWith('delete')) {
|
|
2729
|
-
var [start, end] = Range.edges(targetRange);
|
|
2730
|
-
var leaf = Node.leaf(editor, start.path);
|
|
2731
2730
|
|
|
2732
|
-
|
|
2733
|
-
var next = Editor.next(editor, {
|
|
2734
|
-
at: start.path,
|
|
2735
|
-
match: Text$1.isText
|
|
2736
|
-
});
|
|
2731
|
+
var canStoreDiff = true;
|
|
2737
2732
|
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2733
|
+
if (type.startsWith('delete')) {
|
|
2734
|
+
if (Range.isExpanded(targetRange)) {
|
|
2735
|
+
var [_start, _end] = Range.edges(targetRange);
|
|
2736
|
+
|
|
2737
|
+
var _leaf = Node.leaf(editor, _start.path);
|
|
2738
|
+
|
|
2739
|
+
if (_leaf.text.length === _start.offset && _end.offset === 0) {
|
|
2740
|
+
var next = Editor.next(editor, {
|
|
2741
|
+
at: _start.path,
|
|
2742
|
+
match: Text$1.isText
|
|
2743
|
+
});
|
|
2744
|
+
|
|
2745
|
+
if (next && Path.equals(next[1], _end.path)) {
|
|
2746
|
+
targetRange = {
|
|
2747
|
+
anchor: _end,
|
|
2748
|
+
focus: _end
|
|
2749
|
+
};
|
|
2750
|
+
}
|
|
2743
2751
|
}
|
|
2744
2752
|
}
|
|
2745
|
-
}
|
|
2746
2753
|
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2754
|
+
var direction = type.endsWith('Backward') ? 'backward' : 'forward';
|
|
2755
|
+
var [start, end] = Range.edges(targetRange);
|
|
2756
|
+
var [leaf, path] = Editor.leaf(editor, start.path);
|
|
2757
|
+
var diff = {
|
|
2758
|
+
text: '',
|
|
2759
|
+
start: start.offset,
|
|
2760
|
+
end: end.offset
|
|
2761
|
+
};
|
|
2762
|
+
var pendingDiffs = EDITOR_TO_PENDING_DIFFS.get(editor);
|
|
2763
|
+
var relevantPendingDiffs = pendingDiffs === null || pendingDiffs === void 0 ? void 0 : pendingDiffs.find(change => Path.equals(change.path, path));
|
|
2764
|
+
var diffs = relevantPendingDiffs ? [relevantPendingDiffs.diff, diff] : [diff];
|
|
2765
|
+
var text = applyStringDiff(leaf.text, ...diffs);
|
|
2766
|
+
|
|
2767
|
+
if (text.length === 0) {
|
|
2768
|
+
// Text leaf will be removed, so we need to schedule an
|
|
2769
|
+
// action to remove it so that Slate can normalize instead
|
|
2770
|
+
// of storing as a diff
|
|
2771
|
+
canStoreDiff = false;
|
|
2761
2772
|
}
|
|
2762
2773
|
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2774
|
+
if (Range.isExpanded(targetRange)) {
|
|
2775
|
+
if (canStoreDiff && Path.equals(targetRange.anchor.path, targetRange.focus.path)) {
|
|
2776
|
+
var point = {
|
|
2777
|
+
path: targetRange.anchor.path,
|
|
2778
|
+
offset: start.offset
|
|
2779
|
+
};
|
|
2780
|
+
var range = Editor.range(editor, point, point);
|
|
2781
|
+
handleUserSelect(range);
|
|
2782
|
+
return storeDiff(targetRange.anchor.path, {
|
|
2783
|
+
text: '',
|
|
2784
|
+
end: end.offset,
|
|
2785
|
+
start: start.offset
|
|
2786
|
+
});
|
|
2787
|
+
}
|
|
2788
|
+
|
|
2789
|
+
return scheduleAction(() => Editor.deleteFragment(editor, {
|
|
2790
|
+
direction
|
|
2791
|
+
}), {
|
|
2792
|
+
at: targetRange
|
|
2793
|
+
});
|
|
2794
|
+
}
|
|
2769
2795
|
}
|
|
2770
2796
|
|
|
2771
2797
|
switch (type) {
|
|
@@ -2785,7 +2811,7 @@ function createAndroidInputManager(_ref) {
|
|
|
2785
2811
|
anchor
|
|
2786
2812
|
} = targetRange;
|
|
2787
2813
|
|
|
2788
|
-
if (Range.isCollapsed(targetRange)) {
|
|
2814
|
+
if (canStoreDiff && Range.isCollapsed(targetRange)) {
|
|
2789
2815
|
var targetNode = Node.leaf(editor, anchor.path);
|
|
2790
2816
|
|
|
2791
2817
|
if (anchor.offset < targetNode.text.length) {
|
|
@@ -2814,7 +2840,7 @@ function createAndroidInputManager(_ref) {
|
|
|
2814
2840
|
|
|
2815
2841
|
var nativeCollapsed = isDOMSelection(nativeTargetRange) ? nativeTargetRange.isCollapsed : !!((_nativeTargetRange = nativeTargetRange) !== null && _nativeTargetRange !== void 0 && _nativeTargetRange.collapsed);
|
|
2816
2842
|
|
|
2817
|
-
if (nativeCollapsed && Range.isCollapsed(targetRange) && _anchor.offset > 0) {
|
|
2843
|
+
if (canStoreDiff && nativeCollapsed && Range.isCollapsed(targetRange) && _anchor.offset > 0) {
|
|
2818
2844
|
return storeDiff(_anchor.path, {
|
|
2819
2845
|
text: '',
|
|
2820
2846
|
start: _anchor.offset - 1,
|
|
@@ -2930,19 +2956,20 @@ function createAndroidInputManager(_ref) {
|
|
|
2930
2956
|
});
|
|
2931
2957
|
}
|
|
2932
2958
|
|
|
2933
|
-
var
|
|
2959
|
+
var _text = data !== null && data !== void 0 ? data : ''; // COMPAT: If we are writing inside a placeholder, the ime inserts the text inside
|
|
2934
2960
|
// the placeholder itself and thus includes the zero-width space inside edit events.
|
|
2935
2961
|
|
|
2962
|
+
|
|
2936
2963
|
if (EDITOR_TO_PENDING_INSERTION_MARKS.get(editor)) {
|
|
2937
|
-
|
|
2964
|
+
_text = _text.replace('\uFEFF', '');
|
|
2938
2965
|
}
|
|
2939
2966
|
|
|
2940
2967
|
if (Path.equals(targetRange.anchor.path, targetRange.focus.path)) {
|
|
2941
2968
|
var [_start2, _end2] = Range.edges(targetRange);
|
|
2942
|
-
var
|
|
2969
|
+
var _diff = {
|
|
2943
2970
|
start: _start2.offset,
|
|
2944
2971
|
end: _end2.offset,
|
|
2945
|
-
text
|
|
2972
|
+
text: _text
|
|
2946
2973
|
}; // COMPAT: Swiftkey has a weird bug where the target range of the 2nd word
|
|
2947
2974
|
// inserted after a mark placeholder is inserted with an anchor offset off by 1.
|
|
2948
2975
|
// So writing 'some text' will result in 'some ttext'. Luckily all 'normal' insert
|
|
@@ -2950,12 +2977,13 @@ function createAndroidInputManager(_ref) {
|
|
|
2950
2977
|
// isn't, so we can adjust the target range start offset if we are confident this is the
|
|
2951
2978
|
// swiftkey insert causing the issue.
|
|
2952
2979
|
|
|
2953
|
-
if (
|
|
2980
|
+
if (_text && insertPositionHint && type === 'insertCompositionText') {
|
|
2954
2981
|
var hintPosition = insertPositionHint.start + insertPositionHint.text.search(/\S|$/);
|
|
2955
|
-
var diffPosition = diff.start + diff.text.search(/\S|$/);
|
|
2956
2982
|
|
|
2957
|
-
|
|
2958
|
-
|
|
2983
|
+
var diffPosition = _diff.start + _diff.text.search(/\S|$/);
|
|
2984
|
+
|
|
2985
|
+
if (diffPosition === hintPosition + 1 && _diff.end === insertPositionHint.start + insertPositionHint.text.length) {
|
|
2986
|
+
_diff.start -= 1;
|
|
2959
2987
|
insertPositionHint = null;
|
|
2960
2988
|
scheduleFlush();
|
|
2961
2989
|
} else {
|
|
@@ -2963,10 +2991,10 @@ function createAndroidInputManager(_ref) {
|
|
|
2963
2991
|
}
|
|
2964
2992
|
} else if (type === 'insertText') {
|
|
2965
2993
|
if (insertPositionHint === null) {
|
|
2966
|
-
insertPositionHint =
|
|
2994
|
+
insertPositionHint = _diff;
|
|
2967
2995
|
} else if (insertPositionHint && Range.isCollapsed(targetRange) && insertPositionHint.end + insertPositionHint.text.length === _start2.offset) {
|
|
2968
2996
|
insertPositionHint = _objectSpread$3(_objectSpread$3({}, insertPositionHint), {}, {
|
|
2969
|
-
text: insertPositionHint.text +
|
|
2997
|
+
text: insertPositionHint.text + _text
|
|
2970
2998
|
});
|
|
2971
2999
|
} else {
|
|
2972
3000
|
insertPositionHint = false;
|
|
@@ -2975,11 +3003,13 @@ function createAndroidInputManager(_ref) {
|
|
|
2975
3003
|
insertPositionHint = false;
|
|
2976
3004
|
}
|
|
2977
3005
|
|
|
2978
|
-
|
|
2979
|
-
|
|
3006
|
+
if (canStoreDiff) {
|
|
3007
|
+
storeDiff(_start2.path, _diff);
|
|
3008
|
+
return;
|
|
3009
|
+
}
|
|
2980
3010
|
}
|
|
2981
3011
|
|
|
2982
|
-
return scheduleAction(() => Editor.insertText(editor,
|
|
3012
|
+
return scheduleAction(() => Editor.insertText(editor, _text), {
|
|
2983
3013
|
at: targetRange
|
|
2984
3014
|
});
|
|
2985
3015
|
}
|
|
@@ -2991,9 +3021,9 @@ function createAndroidInputManager(_ref) {
|
|
|
2991
3021
|
};
|
|
2992
3022
|
|
|
2993
3023
|
var hasPendingDiffs = () => {
|
|
2994
|
-
var
|
|
3024
|
+
var _EDITOR_TO_PENDING_DI4;
|
|
2995
3025
|
|
|
2996
|
-
return !!((
|
|
3026
|
+
return !!((_EDITOR_TO_PENDING_DI4 = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI4 !== void 0 && _EDITOR_TO_PENDING_DI4.length);
|
|
2997
3027
|
};
|
|
2998
3028
|
|
|
2999
3029
|
var hasPendingChanges = () => {
|