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.
@@ -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;AAuBvD,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,CAmpBxD"}
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); // Firefox did not support `beforeInput` until `v87`.
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 = !!((_EDITOR_TO_PENDING_DI = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI !== void 0 && _EDITOR_TO_PENDING_DI.length);
2504
+ var scheduleSelectionChange = hasPendingDiffs();
2507
2505
  var diff;
2508
2506
 
2509
- while (diff = (_EDITOR_TO_PENDING_DI2 = EDITOR_TO_PENDING_DIFFS.get(editor)) === null || _EDITOR_TO_PENDING_DI2 === void 0 ? void 0 : _EDITOR_TO_PENDING_DI2[0]) {
2510
- var _EDITOR_TO_PENDING_DI2, _EDITOR_TO_PENDING_DI3;
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, (_EDITOR_TO_PENDING_DI3 = EDITOR_TO_PENDING_DIFFS.get(editor)) === null || _EDITOR_TO_PENDING_DI3 === void 0 ? void 0 : _EDITOR_TO_PENDING_DI3.filter(_ref2 => {
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 _EDITOR_TO_PENDING_DI4;
2626
- var pendingDiffs = (_EDITOR_TO_PENDING_DI4 = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI4 !== void 0 ? _EDITOR_TO_PENDING_DI4 : [];
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
- if (leaf.text.length === start.offset && end.offset === 0) {
2733
- var next = Editor.next(editor, {
2734
- at: start.path,
2735
- match: Text$1.isText
2736
- });
2731
+ var canStoreDiff = true;
2737
2732
 
2738
- if (next && Path.equals(next[1], end.path)) {
2739
- targetRange = {
2740
- anchor: end,
2741
- focus: end
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
- if (Range.isExpanded(targetRange) && type.startsWith('delete')) {
2748
- if (Path.equals(targetRange.anchor.path, targetRange.focus.path)) {
2749
- var [_start, _end] = Range.edges(targetRange);
2750
- var point = {
2751
- path: targetRange.anchor.path,
2752
- offset: _start.offset
2753
- };
2754
- var range = Editor.range(editor, point, point);
2755
- handleUserSelect(range);
2756
- return storeDiff(targetRange.anchor.path, {
2757
- text: '',
2758
- end: _end.offset,
2759
- start: _start.offset
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
- var direction = type.endsWith('Backward') ? 'backward' : 'forward';
2764
- return scheduleAction(() => Editor.deleteFragment(editor, {
2765
- direction
2766
- }), {
2767
- at: targetRange
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 text = data !== null && data !== void 0 ? data : ''; // COMPAT: If we are writing inside a placeholder, the ime inserts the text inside
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
- text = text.replace('\uFEFF', '');
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 diff = {
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 (text && insertPositionHint && type === 'insertCompositionText') {
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
- if (diffPosition === hintPosition + 1 && diff.end === insertPositionHint.start + insertPositionHint.text.length) {
2958
- diff.start -= 1;
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 = diff;
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 + 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
- storeDiff(_start2.path, diff);
2979
- return;
3006
+ if (canStoreDiff) {
3007
+ storeDiff(_start2.path, _diff);
3008
+ return;
3009
+ }
2980
3010
  }
2981
3011
 
2982
- return scheduleAction(() => Editor.insertText(editor, text), {
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 _EDITOR_TO_PENDING_DI5;
3024
+ var _EDITOR_TO_PENDING_DI4;
2995
3025
 
2996
- return !!((_EDITOR_TO_PENDING_DI5 = EDITOR_TO_PENDING_DIFFS.get(editor)) !== null && _EDITOR_TO_PENDING_DI5 !== void 0 && _EDITOR_TO_PENDING_DI5.length);
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 = () => {