slate-react 0.76.0 → 0.76.1-2022311131726

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.
@@ -68,10 +68,6 @@ export declare const DefaultPlaceholder: ({ attributes, children, }: RenderPlace
68
68
  * A default memoized decorate function.
69
69
  */
70
70
  export declare const defaultDecorate: (entry: NodeEntry) => Range[];
71
- /**
72
- * Check if two DOM range objects are equal.
73
- */
74
- export declare const isRangeEqual: (a: DOMRange, b: DOMRange) => boolean;
75
71
  /**
76
72
  * Check if the target is in the editor.
77
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/editable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"editable.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/editable.tsx"],"names":[],"mappings":"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"}
@@ -9,6 +9,6 @@ export declare const Slate: (props: {
9
9
  editor: ReactEditor;
10
10
  value: Descendant[];
11
11
  children: React.ReactNode;
12
- onChange: (value: Descendant[]) => void;
12
+ onChange?: ((value: Descendant[]) => void) | undefined;
13
13
  }) => JSX.Element;
14
14
  //# sourceMappingURL=slate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slate.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/slate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,EAAyB,UAAU,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAWpD;;;GAGG;AAEH,eAAO,MAAM,KAAK;YACR,WAAW;WACZ,UAAU,EAAE;cACT,KAAK,CAAC,SAAS;sBACP,UAAU,EAAE,KAAK,IAAI;iBA0ExC,CAAA"}
1
+ {"version":3,"file":"slate.d.ts","sourceRoot":"","sources":["../packages/slate-react/src/components/slate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAA;AAChF,OAAO,EAAyB,UAAU,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAYpD;;;GAGG;AAEH,eAAO,MAAM,KAAK;YACR,WAAW;WACZ,UAAU,EAAE;cACT,KAAK,CAAC,SAAS;wBACN,UAAU,EAAE,KAAK,IAAI;iBAoFzC,CAAA"}
package/dist/index.es.js CHANGED
@@ -56,6 +56,7 @@ function _objectWithoutProperties(source, excluded) {
56
56
  return target;
57
57
  }
58
58
 
59
+ var IS_REACT_VERSION_17_OR_ABOVE = parseInt(React.version.split('.')[0], 10) >= 17;
59
60
  var IS_IOS = typeof navigator !== 'undefined' && typeof window !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
60
61
  var IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);
61
62
  var IS_ANDROID = typeof navigator !== 'undefined' && /Android/.test(navigator.userAgent);
@@ -231,6 +232,7 @@ var IS_READ_ONLY = new WeakMap();
231
232
  var IS_FOCUSED = new WeakMap();
232
233
  var IS_COMPOSING = new WeakMap();
233
234
  var IS_ON_COMPOSITION_END = new WeakMap();
235
+ var EDITOR_TO_USER_SELECTION = new WeakMap();
234
236
  /**
235
237
  * Weak maps for saving text on composition stage.
236
238
  */
@@ -1004,6 +1006,8 @@ var getClipboardData = dataTransfer => {
1004
1006
  return dataTransfer;
1005
1007
  };
1006
1008
 
1009
+ var TRIPLE_CLICK = 3;
1010
+
1007
1011
  var _excluded$2 = ["autoFocus", "decorate", "onDOMBeforeInput", "placeholder", "readOnly", "renderElement", "renderLeaf", "renderPlaceholder", "scrollSelectionIntoView", "style", "as"];
1008
1012
 
1009
1013
  function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -1194,6 +1198,8 @@ var Editable$1 = props => {
1194
1198
 
1195
1199
  var onDOMBeforeInput = useCallback(event => {
1196
1200
  if (!readOnly && hasEditableTarget(editor, event.target) && !isDOMEventHandled(event, propsOnDOMBeforeInput)) {
1201
+ var _EDITOR_TO_USER_SELEC;
1202
+
1197
1203
  // Some IMEs/Chrome extensions like e.g. Grammarly set the selection immediately before
1198
1204
  // triggering a `beforeinput` expecting the change to be applied to the immediately before
1199
1205
  // set selection.
@@ -1265,7 +1271,12 @@ var Editable$1 = props => {
1265
1271
  });
1266
1272
 
1267
1273
  if (!selection || !Range.equals(selection, range)) {
1274
+ var selectionRef = editor.selection && Editor.rangeRef(editor, editor.selection);
1268
1275
  Transforms.select(editor, range);
1276
+
1277
+ if (selectionRef) {
1278
+ EDITOR_TO_USER_SELECTION.set(editor, selectionRef);
1279
+ }
1269
1280
  }
1270
1281
  }
1271
1282
  } // COMPAT: If the selection is expanded, even if the command seems like
@@ -1415,6 +1426,14 @@ var Editable$1 = props => {
1415
1426
 
1416
1427
  break;
1417
1428
  }
1429
+ } // Restore the actual user section if nothing manually set it.
1430
+
1431
+
1432
+ var toRestore = (_EDITOR_TO_USER_SELEC = EDITOR_TO_USER_SELECTION.get(editor)) === null || _EDITOR_TO_USER_SELEC === void 0 ? void 0 : _EDITOR_TO_USER_SELEC.unref();
1433
+ EDITOR_TO_USER_SELECTION.delete(editor);
1434
+
1435
+ if (toRestore && (!editor.selection || !Range.equals(editor.selection, toRestore))) {
1436
+ Transforms.select(editor, toRestore);
1418
1437
  }
1419
1438
  }
1420
1439
  }, [readOnly, propsOnDOMBeforeInput]); // Attach a native DOM event handler for `beforeinput` events, because React's
@@ -1575,30 +1594,46 @@ var Editable$1 = props => {
1575
1594
  IS_FOCUSED.delete(editor);
1576
1595
  }, [readOnly, attributes.onBlur]),
1577
1596
  onClick: useCallback(event => {
1578
- if (!readOnly && hasTarget(editor, event.target) && !isEventHandled(event, attributes.onClick) && isDOMNode(event.target)) {
1597
+ if (hasTarget(editor, event.target) && !isEventHandled(event, attributes.onClick) && isDOMNode(event.target)) {
1579
1598
  var node = ReactEditor.toSlateNode(editor, event.target);
1580
- var path = ReactEditor.findPath(editor, node); // At this time, the Slate document may be arbitrarily different,
1599
+ var path = ReactEditor.findPath(editor, node);
1600
+
1601
+ if (event.detail === TRIPLE_CLICK) {
1602
+ var _start = Editor.start(editor, [path[0]]);
1603
+
1604
+ var end = Editor.end(editor, [path[0]]);
1605
+ var range = Editor.range(editor, _start, end);
1606
+ Transforms.select(editor, range);
1607
+ return;
1608
+ }
1609
+
1610
+ if (readOnly) {
1611
+ return;
1612
+ } // At this time, the Slate document may be arbitrarily different,
1581
1613
  // because onClick handlers can change the document before we get here.
1582
1614
  // Therefore we must check that this path actually exists,
1583
1615
  // and that it still refers to the same node.
1584
1616
 
1617
+
1585
1618
  if (Editor.hasPath(editor, path)) {
1586
1619
  var lookupNode = Node.get(editor, path);
1587
1620
 
1588
1621
  if (lookupNode === node) {
1589
- var _start = Editor.start(editor, path);
1622
+ var _start2 = Editor.start(editor, path);
1623
+
1624
+ var _end = Editor.end(editor, path);
1590
1625
 
1591
- var end = Editor.end(editor, path);
1592
1626
  var startVoid = Editor.void(editor, {
1593
- at: _start
1627
+ at: _start2
1594
1628
  });
1595
1629
  var endVoid = Editor.void(editor, {
1596
- at: end
1630
+ at: _end
1597
1631
  });
1598
1632
 
1599
1633
  if (startVoid && endVoid && Path.equals(startVoid[1], endVoid[1])) {
1600
- var range = Editor.range(editor, _start);
1601
- Transforms.select(editor, range);
1634
+ var _range = Editor.range(editor, _start2);
1635
+
1636
+ Transforms.select(editor, _range);
1602
1637
  }
1603
1638
  }
1604
1639
  }
@@ -1801,7 +1836,7 @@ var Editable$1 = props => {
1801
1836
  }
1802
1837
  }, [readOnly, attributes.onFocus]),
1803
1838
  onKeyDown: useCallback(event => {
1804
- if (!readOnly && !state.isComposing && hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onKeyDown)) {
1839
+ if (!readOnly && hasEditableTarget(editor, event.target) && !isEventHandled(event, attributes.onKeyDown) && !state.isComposing) {
1805
1840
  var {
1806
1841
  nativeEvent
1807
1842
  } = event;
@@ -2135,6 +2170,7 @@ var defaultScrollSelectionIntoView = (editor, domRange) => {
2135
2170
  * Check if the target is in the editor.
2136
2171
  */
2137
2172
 
2173
+
2138
2174
  var hasTarget = (editor, target) => {
2139
2175
  return isDOMNode(target) && ReactEditor.hasDOMNode(editor, target);
2140
2176
  };
@@ -4057,7 +4093,10 @@ var Slate = props => {
4057
4093
  onChange: handleSelectorChange
4058
4094
  } = getSelectorContext(editor);
4059
4095
  var onContextChange = useCallback(() => {
4060
- onChange(editor.children);
4096
+ if (onChange) {
4097
+ onChange(editor.children);
4098
+ }
4099
+
4061
4100
  setContext([editor]);
4062
4101
  handleSelectorChange(editor);
4063
4102
  }, [onChange]);
@@ -4075,17 +4114,24 @@ var Slate = props => {
4075
4114
  useIsomorphicLayoutEffect(() => {
4076
4115
  var fn = () => setIsFocused(ReactEditor.isFocused(editor));
4077
4116
 
4078
- document.addEventListener('focus', fn, true);
4079
- return () => document.removeEventListener('focus', fn, true);
4080
- }, []);
4081
- useIsomorphicLayoutEffect(() => {
4082
- var fn = () => setIsFocused(ReactEditor.isFocused(editor));
4083
-
4084
- document.addEventListener('blur', fn, true);
4085
- return () => {
4086
- document.removeEventListener('focus', fn, true);
4087
- document.removeEventListener('blur', fn, true);
4088
- };
4117
+ if (IS_REACT_VERSION_17_OR_ABOVE) {
4118
+ // In React >= 17 onFocus and onBlur listen to the focusin and focusout events during the bubbling phase.
4119
+ // Therefore in order for <Editable />'s handlers to run first, which is necessary for ReactEditor.isFocused(editor)
4120
+ // to return the correct value, we have to listen to the focusin and focusout events without useCapture here.
4121
+ document.addEventListener('focusin', fn);
4122
+ document.addEventListener('focusout', fn);
4123
+ return () => {
4124
+ document.removeEventListener('focusin', fn);
4125
+ document.removeEventListener('focusout', fn);
4126
+ };
4127
+ } else {
4128
+ document.addEventListener('focus', fn, true);
4129
+ document.addEventListener('blur', fn, true);
4130
+ return () => {
4131
+ document.removeEventListener('focus', fn, true);
4132
+ document.removeEventListener('blur', fn, true);
4133
+ };
4134
+ }
4089
4135
  }, []);
4090
4136
  return /*#__PURE__*/React.createElement(SlateSelectorContext.Provider, {
4091
4137
  value: selectorContext
@@ -4227,6 +4273,16 @@ var withReact = editor => {
4227
4273
  break;
4228
4274
  }
4229
4275
 
4276
+ case 'set_selection':
4277
+ {
4278
+ var _EDITOR_TO_USER_SELEC;
4279
+
4280
+ // Selection was manually set, don't restore the user selection after the change.
4281
+ (_EDITOR_TO_USER_SELEC = EDITOR_TO_USER_SELECTION.get(editor)) === null || _EDITOR_TO_USER_SELEC === void 0 ? void 0 : _EDITOR_TO_USER_SELEC.unref();
4282
+ EDITOR_TO_USER_SELECTION.delete(editor);
4283
+ break;
4284
+ }
4285
+
4230
4286
  case 'insert_node':
4231
4287
  case 'remove_node':
4232
4288
  {