slate-react 0.140.0 → 0.140.1

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
@@ -3356,6 +3356,9 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
3356
3356
  function _arrayLikeToArray(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; }
3357
3357
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3358
3358
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3359
+ var isTextDOMNode = function isTextDOMNode(node) {
3360
+ return slateDom.isDOMNode(node) && node.nodeType === 3;
3361
+ };
3359
3362
  var isSameCaretPosition = function isSameCaretPosition(editor, a, b) {
3360
3363
  if (!slate.Range.isCollapsed(a) || !slate.Range.isCollapsed(b)) {
3361
3364
  return false;
@@ -3414,6 +3417,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3414
3417
  var pendingInputScroll = React.useRef(false);
3415
3418
  var pendingNavigationScroll = React.useRef(false);
3416
3419
  var deferredOperations = React.useRef([]);
3420
+ var lastNativeInsertion = React.useRef(null);
3417
3421
  var _useState3 = React.useState(),
3418
3422
  _useState4 = _slicedToArray(_useState3, 2),
3419
3423
  placeholderHeight = _useState4[0],
@@ -3768,6 +3772,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3768
3772
  return;
3769
3773
  }
3770
3774
  var _native = false;
3775
+ var nativePoint = null;
3771
3776
  if (type === 'insertText' && selection && slate.Range.isCollapsed(selection) &&
3772
3777
  // Only use native character insertion for single characters a-z or space for now.
3773
3778
  // Long-press events (hold a + press 4 = ä) to choose a special character otherwise
@@ -3777,14 +3782,14 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3777
3782
  // When there is an inline element, e.g. a link, and you select
3778
3783
  // right after it (the start of the next node).
3779
3784
  selection.anchor.offset !== 0) {
3780
- var _getSelection;
3781
3785
  _native = true;
3782
3786
  // Skip native if there are marks, as
3783
3787
  // `insertText` will insert a node, not just text.
3784
3788
  if (editor.marks) {
3785
3789
  _native = false;
3786
3790
  }
3787
- var domAnchor = (_getSelection = slateDom.getSelection(ReactEditor.findDocumentOrShadowRoot(editor))) === null || _getSelection === void 0 ? void 0 : _getSelection.anchorNode;
3791
+ var domSelection = slateDom.getSelection(ReactEditor.findDocumentOrShadowRoot(editor));
3792
+ var domAnchor = domSelection === null || domSelection === void 0 ? void 0 : domSelection.anchorNode;
3788
3793
  if (!isInSlateText(domAnchor)) {
3789
3794
  _native = false;
3790
3795
  }
@@ -3821,6 +3826,9 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3821
3826
  _native = false;
3822
3827
  }
3823
3828
  }
3829
+ if (_native && isTextDOMNode(node)) {
3830
+ nativePoint = domSelection !== null && domSelection !== void 0 && domSelection.isCollapsed && isTextDOMNode(domAnchor) ? [domAnchor, domSelection.anchorOffset] : [node, offset];
3831
+ }
3824
3832
  }
3825
3833
  }
3826
3834
  // COMPAT: For the deleting forward/backward input types we don't want
@@ -3847,6 +3855,9 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3847
3855
  slateDom.EDITOR_TO_USER_SELECTION.set(editor, selectionRef);
3848
3856
  }
3849
3857
  }
3858
+ if (_native && isTextDOMNode(targetRange.startContainer)) {
3859
+ nativePoint = [targetRange.startContainer, targetRange.startOffset];
3860
+ }
3850
3861
  }
3851
3862
  }
3852
3863
  // Composition change types occur while a user is composing text and can't be
@@ -3855,6 +3866,7 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3855
3866
  return;
3856
3867
  }
3857
3868
  if (!_native) {
3869
+ lastNativeInsertion.current = null;
3858
3870
  event.preventDefault();
3859
3871
  }
3860
3872
  // COMPAT: If the selection is expanded, even if the command seems like
@@ -3972,6 +3984,24 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
3972
3984
  // Only insertText operations use the native functionality, for now.
3973
3985
  // Potentially expand to single character deletes, as well.
3974
3986
  if (_native) {
3987
+ lastNativeInsertion.current = null;
3988
+ if (nativePoint && selection) {
3989
+ var _Editor$leaf = slate.Editor.leaf(editor, selection.anchor),
3990
+ _Editor$leaf2 = _slicedToArray(_Editor$leaf, 1),
3991
+ _node = _Editor$leaf2[0];
3992
+ var _nativePoint = nativePoint,
3993
+ _nativePoint2 = _slicedToArray(_nativePoint, 2),
3994
+ domNode = _nativePoint2[0],
3995
+ domOffset = _nativePoint2[1];
3996
+ lastNativeInsertion.current = {
3997
+ point: selection.anchor,
3998
+ text: _node.text,
3999
+ domNode: domNode,
4000
+ domOffset: domOffset,
4001
+ domText: domNode.data,
4002
+ "char": data
4003
+ };
4004
+ }
3975
4005
  deferredOperations.current.push(function () {
3976
4006
  return slate.Editor.insertText(editor, data);
3977
4007
  });
@@ -4233,6 +4263,24 @@ var Editable = /*#__PURE__*/React.forwardRef(function (props, forwardedRef) {
4233
4263
  _iterator.f();
4234
4264
  }
4235
4265
  deferredOperations.current = [];
4266
+ var nativeInsertion = lastNativeInsertion.current;
4267
+ lastNativeInsertion.current = null;
4268
+ if (nativeInsertion) {
4269
+ var point = nativeInsertion.point,
4270
+ _text3 = nativeInsertion.text,
4271
+ domNode = nativeInsertion.domNode,
4272
+ domOffset = nativeInsertion.domOffset,
4273
+ domText = nativeInsertion.domText,
4274
+ _char = nativeInsertion["char"];
4275
+ var node = slate.Node.getIf(editor, point.path);
4276
+ if (slate.Text.isText(node) && node.text === _text3 && domNode.isConnected && domNode.data === domText.slice(0, domOffset) + _char + domText.slice(domOffset)) {
4277
+ domNode.deleteData(domOffset, _char.length);
4278
+ if (editor.selection && slate.Range.isCollapsed(editor.selection) && slate.Point.equals(editor.selection.anchor, point)) {
4279
+ var _getSelection;
4280
+ (_getSelection = slateDom.getSelection(ReactEditor.findDocumentOrShadowRoot(editor))) === null || _getSelection === void 0 || _getSelection.collapse(domNode, domOffset);
4281
+ }
4282
+ }
4283
+ }
4236
4284
  // COMPAT: Since `beforeinput` doesn't fully `preventDefault`,
4237
4285
  // there's a chance that content might be placed in the browser's undo stack.
4238
4286
  // This means undo can be triggered even when the div is not focused,