slate-react 0.92.0 → 0.92.1-2023220163057

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
@@ -1578,10 +1578,27 @@ var useSlateStatic = function useSlateStatic() {
1578
1578
  return editor;
1579
1579
  };
1580
1580
 
1581
+ function disconnectPlaceholderResizeObserver(placeholderResizeObserver, releaseObserver) {
1582
+ if (placeholderResizeObserver.current) {
1583
+ placeholderResizeObserver.current.disconnect();
1584
+
1585
+ if (releaseObserver) {
1586
+ placeholderResizeObserver.current = null;
1587
+ }
1588
+ }
1589
+ }
1590
+
1591
+ function clearTimeoutRef(timeoutRef) {
1592
+ if (timeoutRef.current) {
1593
+ clearTimeout(timeoutRef.current);
1594
+ timeoutRef.current = null;
1595
+ }
1596
+ }
1581
1597
  /**
1582
1598
  * Individual leaves in a text node with unique formatting.
1583
1599
  */
1584
1600
 
1601
+
1585
1602
  var Leaf = function Leaf(props) {
1586
1603
  var leaf = props.leaf,
1587
1604
  isLast = props.isLast,
@@ -1592,53 +1609,40 @@ var Leaf = function Leaf(props) {
1592
1609
  renderLeaf = _props$renderLeaf === void 0 ? function (props) {
1593
1610
  return /*#__PURE__*/React__default['default'].createElement(DefaultLeaf, Object.assign({}, props));
1594
1611
  } : _props$renderLeaf;
1595
- var lastPlaceholderRef = React.useRef(null);
1596
- var placeholderRef = React.useRef(null);
1597
1612
  var editor = useSlateStatic();
1598
1613
  var placeholderResizeObserver = React.useRef(null);
1599
- React.useEffect(function () {
1600
- return function () {
1601
- if (placeholderResizeObserver.current) {
1602
- placeholderResizeObserver.current.disconnect();
1603
- }
1604
- };
1605
- }, []);
1606
- React.useEffect(function () {
1607
- var placeholderEl = placeholderRef === null || placeholderRef === void 0 ? void 0 : placeholderRef.current;
1614
+ var placeholderRef = React.useRef(null);
1608
1615
 
1609
- if (placeholderEl) {
1610
- EDITOR_TO_PLACEHOLDER_ELEMENT.set(editor, placeholderEl);
1611
- } else {
1612
- EDITOR_TO_PLACEHOLDER_ELEMENT["delete"](editor);
1613
- }
1616
+ var _useState = React.useState(false),
1617
+ _useState2 = _slicedToArray(_useState, 2),
1618
+ showPlaceholder = _useState2[0],
1619
+ setShowPlaceholder = _useState2[1];
1614
1620
 
1615
- if (placeholderResizeObserver.current) {
1616
- // Update existing observer.
1617
- placeholderResizeObserver.current.disconnect();
1618
- if (placeholderEl) placeholderResizeObserver.current.observe(placeholderEl);
1619
- } else if (placeholderEl) {
1620
- // Create a new observer and observe the placeholder element.
1621
- var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
1622
- placeholderResizeObserver.current = new ResizeObserver(function () {
1623
- // Force a re-render of the editor so its min-height can be updated
1624
- // to the new height of the placeholder.
1625
- var forceRender = EDITOR_TO_FORCE_RENDER.get(editor);
1626
- forceRender === null || forceRender === void 0 ? void 0 : forceRender();
1627
- });
1628
- placeholderResizeObserver.current.observe(placeholderEl);
1629
- }
1621
+ var showPlaceholderTimeoutRef = React.useRef(null);
1622
+ var callbackPlaceholderRef = React.useCallback(function (placeholderEl) {
1623
+ disconnectPlaceholderResizeObserver(placeholderResizeObserver, placeholderEl == null);
1630
1624
 
1631
- if (!placeholderEl && lastPlaceholderRef.current) {
1632
- // No placeholder element, so no need for a resize observer.
1633
- // Force a re-render of the editor so its min-height can be reset.
1634
- var forceRender = EDITOR_TO_FORCE_RENDER.get(editor);
1635
- forceRender === null || forceRender === void 0 ? void 0 : forceRender();
1636
- }
1625
+ if (placeholderEl == null) {
1626
+ var _leaf$onPlaceholderRe;
1637
1627
 
1638
- lastPlaceholderRef.current = placeholderRef.current;
1639
- return function () {
1640
1628
  EDITOR_TO_PLACEHOLDER_ELEMENT["delete"](editor);
1641
- };
1629
+ (_leaf$onPlaceholderRe = leaf.onPlaceholderResize) === null || _leaf$onPlaceholderRe === void 0 ? void 0 : _leaf$onPlaceholderRe.call(leaf, null);
1630
+ } else {
1631
+ EDITOR_TO_PLACEHOLDER_ELEMENT.set(editor, placeholderEl);
1632
+
1633
+ if (!placeholderResizeObserver.current) {
1634
+ // Create a new observer and observe the placeholder element.
1635
+ var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
1636
+ placeholderResizeObserver.current = new ResizeObserver(function () {
1637
+ var _leaf$onPlaceholderRe2;
1638
+
1639
+ (_leaf$onPlaceholderRe2 = leaf.onPlaceholderResize) === null || _leaf$onPlaceholderRe2 === void 0 ? void 0 : _leaf$onPlaceholderRe2.call(leaf, placeholderEl);
1640
+ });
1641
+ }
1642
+
1643
+ placeholderResizeObserver.current.observe(placeholderEl);
1644
+ placeholderRef.current = placeholderEl;
1645
+ }
1642
1646
  }, [placeholderRef, leaf, editor]);
1643
1647
  var children = /*#__PURE__*/React__default['default'].createElement(String, {
1644
1648
  isLast: isLast,
@@ -1646,8 +1650,27 @@ var Leaf = function Leaf(props) {
1646
1650
  parent: parent,
1647
1651
  text: text
1648
1652
  });
1653
+ var leafIsPlaceholder = leaf[PLACEHOLDER_SYMBOL];
1654
+ React.useEffect(function () {
1655
+ if (leafIsPlaceholder) {
1656
+ if (!showPlaceholderTimeoutRef.current) {
1657
+ // Delay the placeholder so it will not render in a selection
1658
+ showPlaceholderTimeoutRef.current = setTimeout(function () {
1659
+ setShowPlaceholder(true);
1660
+ showPlaceholderTimeoutRef.current = null;
1661
+ }, 300);
1662
+ }
1663
+ } else {
1664
+ clearTimeoutRef(showPlaceholderTimeoutRef);
1665
+ setShowPlaceholder(false);
1666
+ }
1667
+
1668
+ return function () {
1669
+ return clearTimeoutRef(showPlaceholderTimeoutRef);
1670
+ };
1671
+ }, [leafIsPlaceholder, setShowPlaceholder]);
1649
1672
 
1650
- if (leaf[PLACEHOLDER_SYMBOL]) {
1673
+ if (leafIsPlaceholder && showPlaceholder) {
1651
1674
  var placeholderProps = {
1652
1675
  children: leaf.placeholder,
1653
1676
  attributes: {
@@ -1663,7 +1686,7 @@ var Leaf = function Leaf(props) {
1663
1686
  textDecoration: 'none'
1664
1687
  },
1665
1688
  contentEditable: false,
1666
- ref: placeholderRef
1689
+ ref: callbackPlaceholderRef
1667
1690
  }
1668
1691
  };
1669
1692
  children = /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, renderPlaceholder(placeholderProps), children);
@@ -3729,8 +3752,6 @@ var Children = function Children(props) {
3729
3752
 
3730
3753
 
3731
3754
  var Editable = function Editable(props) {
3732
- var _EDITOR_TO_PLACEHOLDE, _EDITOR_TO_PLACEHOLDE2;
3733
-
3734
3755
  var defaultRenderPlaceholder = React.useCallback(function (props) {
3735
3756
  return /*#__PURE__*/React__default['default'].createElement(DefaultPlaceholder, Object.assign({}, props));
3736
3757
  }, []);
@@ -3766,6 +3787,11 @@ var Editable = function Editable(props) {
3766
3787
  var ref = React.useRef(null);
3767
3788
  var deferredOperations = React.useRef([]);
3768
3789
 
3790
+ var _useState3 = React.useState(),
3791
+ _useState4 = _slicedToArray(_useState3, 2),
3792
+ placeholderHeight = _useState4[0],
3793
+ setPlaceholderHeight = _useState4[1];
3794
+
3769
3795
  var _useTrackUserInput = useTrackUserInput(),
3770
3796
  onUserInput = _useTrackUserInput.onUserInput,
3771
3797
  receivedUserInput = _useTrackUserInput.receivedUserInput;
@@ -4320,12 +4346,22 @@ var Editable = function Editable(props) {
4320
4346
  };
4321
4347
  }, [scheduleOnDOMSelectionChange]);
4322
4348
  var decorations = decorate([editor, []]);
4349
+ var showPlaceholder = placeholder && editor.children.length === 1 && Array.from(slate.Node.texts(editor)).length === 1 && slate.Node.string(editor) === '' && !isComposing;
4350
+ var placeHolderResizeHandler = React.useCallback(function (placeholderEl) {
4351
+ if (placeholderEl && showPlaceholder) {
4352
+ var _placeholderEl$getBou;
4353
+
4354
+ setPlaceholderHeight((_placeholderEl$getBou = placeholderEl.getBoundingClientRect()) === null || _placeholderEl$getBou === void 0 ? void 0 : _placeholderEl$getBou.height);
4355
+ } else {
4356
+ setPlaceholderHeight(undefined);
4357
+ }
4358
+ }, [showPlaceholder]);
4323
4359
 
4324
- if (placeholder && editor.children.length === 1 && Array.from(slate.Node.texts(editor)).length === 1 && slate.Node.string(editor) === '' && !isComposing) {
4360
+ if (showPlaceholder) {
4325
4361
  var _decorations$push;
4326
4362
 
4327
4363
  var start = slate.Editor.start(editor, []);
4328
- decorations.push((_decorations$push = {}, _defineProperty(_decorations$push, PLACEHOLDER_SYMBOL, true), _defineProperty(_decorations$push, "placeholder", placeholder), _defineProperty(_decorations$push, "anchor", start), _defineProperty(_decorations$push, "focus", start), _decorations$push));
4364
+ decorations.push((_decorations$push = {}, _defineProperty(_decorations$push, PLACEHOLDER_SYMBOL, true), _defineProperty(_decorations$push, "placeholder", placeholder), _defineProperty(_decorations$push, "onPlaceholderResize", placeHolderResizeHandler), _defineProperty(_decorations$push, "anchor", start), _defineProperty(_decorations$push, "focus", start), _decorations$push));
4329
4365
  }
4330
4366
 
4331
4367
  var marks = editor.marks;
@@ -4378,7 +4414,6 @@ var Editable = function Editable(props) {
4378
4414
  EDITOR_TO_PENDING_INSERTION_MARKS["delete"](editor);
4379
4415
  });
4380
4416
  });
4381
- var placeholderHeight = (_EDITOR_TO_PLACEHOLDE = EDITOR_TO_PLACEHOLDER_ELEMENT.get(editor)) === null || _EDITOR_TO_PLACEHOLDE === void 0 ? void 0 : (_EDITOR_TO_PLACEHOLDE2 = _EDITOR_TO_PLACEHOLDE.getBoundingClientRect()) === null || _EDITOR_TO_PLACEHOLDE2 === void 0 ? void 0 : _EDITOR_TO_PLACEHOLDE2.height;
4382
4417
  return /*#__PURE__*/React__default['default'].createElement(ReadOnlyContext.Provider, {
4383
4418
  value: readOnly
4384
4419
  }, /*#__PURE__*/React__default['default'].createElement(DecorateContext.Provider, {