slate-angular 20.2.0-next.24 → 20.2.0-next.25

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.
@@ -3634,12 +3634,18 @@ class SlateEditable {
3634
3634
  VirtualScrollDebugOverlay.log(doc, type, ...args);
3635
3635
  }
3636
3636
  handlePreRendering() {
3637
- let preRenderingCount = 0;
3637
+ let preRenderingCount = 1;
3638
3638
  const childrenWithPreRendering = [...this.inViewportChildren];
3639
3639
  if (this.inViewportIndics[0] !== 0) {
3640
- preRenderingCount = 1;
3641
3640
  childrenWithPreRendering.unshift(this.editor.children[this.inViewportIndics[0] - 1]);
3642
3641
  }
3642
+ else {
3643
+ preRenderingCount = 0;
3644
+ }
3645
+ const lastIndex = this.inViewportIndics[this.inViewportIndics.length - 1];
3646
+ if (lastIndex !== this.editor.children.length - 1) {
3647
+ childrenWithPreRendering.push(this.editor.children[lastIndex + 1]);
3648
+ }
3643
3649
  return { preRenderingCount, childrenWithPreRendering };
3644
3650
  }
3645
3651
  tryUpdateVirtualViewport() {
@@ -3653,7 +3659,7 @@ class SlateEditable {
3653
3659
  }
3654
3660
  let virtualView = this.calculateVirtualViewport();
3655
3661
  let diff = this.diffVirtualViewport(virtualView);
3656
- if (diff.isDiff) {
3662
+ if (diff.isDifferent) {
3657
3663
  this.applyVirtualView(virtualView);
3658
3664
  if (this.listRender.initialized) {
3659
3665
  const { preRenderingCount, childrenWithPreRendering } = this.handlePreRendering();
@@ -3662,12 +3668,12 @@ class SlateEditable {
3662
3668
  this.toNativeSelection();
3663
3669
  }
3664
3670
  }
3665
- if (diff.isAddedTop) {
3666
- const remeasureAddedIndics = diff.diffTopRenderedIndexes;
3671
+ if (diff.needAddOnTop) {
3672
+ const remeasureAddedIndics = diff.changedIndexesOfTop;
3667
3673
  if (isDebug) {
3668
- this.debugLog('log', 'isAddedTop to remeasure heights: ', remeasureAddedIndics);
3674
+ this.debugLog('log', 'needAddOnTop to remeasure heights: ', remeasureAddedIndics);
3669
3675
  }
3670
- const startIndexBeforeAdd = diff.diffTopRenderedIndexes[diff.diffTopRenderedIndexes.length - 1] + 1;
3676
+ const startIndexBeforeAdd = diff.changedIndexesOfTop[diff.changedIndexesOfTop.length - 1] + 1;
3671
3677
  const topHeightBeforeAdd = virtualView.accumulatedHeights[startIndexBeforeAdd];
3672
3678
  const result = this.remeasureHeightByIndics(remeasureAddedIndics);
3673
3679
  if (result) {
@@ -3779,60 +3785,60 @@ class SlateEditable {
3779
3785
  diffVirtualViewport(virtualView, stage = 'first') {
3780
3786
  if (!this.inViewportChildren.length) {
3781
3787
  return {
3782
- isDiff: true,
3783
- diffTopRenderedIndexes: [],
3784
- diffBottomRenderedIndexes: []
3788
+ isDifferent: true,
3789
+ changedIndexesOfTop: [],
3790
+ changedIndexesOfBottom: []
3785
3791
  };
3786
3792
  }
3787
- const oldVisibleIndexes = [...this.inViewportIndics];
3788
- const newVisibleIndexes = [...virtualView.visibleIndexes];
3789
- const firstNewIndex = newVisibleIndexes[0];
3790
- const lastNewIndex = newVisibleIndexes[newVisibleIndexes.length - 1];
3791
- const firstOldIndex = oldVisibleIndexes[0];
3792
- const lastOldIndex = oldVisibleIndexes[oldVisibleIndexes.length - 1];
3793
+ const oldIndexesInViewport = [...this.inViewportIndics];
3794
+ const newIndexesInViewport = [...virtualView.visibleIndexes];
3795
+ const firstNewIndex = newIndexesInViewport[0];
3796
+ const lastNewIndex = newIndexesInViewport[newIndexesInViewport.length - 1];
3797
+ const firstOldIndex = oldIndexesInViewport[0];
3798
+ const lastOldIndex = oldIndexesInViewport[oldIndexesInViewport.length - 1];
3793
3799
  if (firstNewIndex !== firstOldIndex || lastNewIndex !== lastOldIndex) {
3794
- const diffTopRenderedIndexes = [];
3795
- const diffBottomRenderedIndexes = [];
3796
- const isMissingTop = firstNewIndex !== firstOldIndex && firstNewIndex > firstOldIndex;
3797
- const isAddedTop = firstNewIndex !== firstOldIndex && firstNewIndex < firstOldIndex;
3798
- const isMissingBottom = lastNewIndex !== lastOldIndex && lastOldIndex > lastNewIndex;
3799
- const isAddedBottom = lastNewIndex !== lastOldIndex && lastOldIndex < lastNewIndex;
3800
- if (isMissingTop || isAddedBottom) {
3800
+ const changedIndexesOfTop = [];
3801
+ const changedIndexesOfBottom = [];
3802
+ const needRemoveOnTop = firstNewIndex !== firstOldIndex && firstNewIndex > firstOldIndex;
3803
+ const needAddOnTop = firstNewIndex !== firstOldIndex && firstNewIndex < firstOldIndex;
3804
+ const needRemoveOnBottom = lastNewIndex !== lastOldIndex && lastOldIndex > lastNewIndex;
3805
+ const needAddOnBottom = lastNewIndex !== lastOldIndex && lastOldIndex < lastNewIndex;
3806
+ if (needRemoveOnTop || needAddOnBottom) {
3801
3807
  // 向下
3802
- for (let index = 0; index < oldVisibleIndexes.length; index++) {
3803
- const element = oldVisibleIndexes[index];
3804
- if (!newVisibleIndexes.includes(element)) {
3805
- diffTopRenderedIndexes.push(element);
3808
+ for (let index = 0; index < oldIndexesInViewport.length; index++) {
3809
+ const element = oldIndexesInViewport[index];
3810
+ if (!newIndexesInViewport.includes(element)) {
3811
+ changedIndexesOfTop.push(element);
3806
3812
  }
3807
3813
  else {
3808
3814
  break;
3809
3815
  }
3810
3816
  }
3811
- for (let index = newVisibleIndexes.length - 1; index >= 0; index--) {
3812
- const element = newVisibleIndexes[index];
3813
- if (!oldVisibleIndexes.includes(element)) {
3814
- diffBottomRenderedIndexes.push(element);
3817
+ for (let index = newIndexesInViewport.length - 1; index >= 0; index--) {
3818
+ const element = newIndexesInViewport[index];
3819
+ if (!oldIndexesInViewport.includes(element)) {
3820
+ changedIndexesOfBottom.push(element);
3815
3821
  }
3816
3822
  else {
3817
3823
  break;
3818
3824
  }
3819
3825
  }
3820
3826
  }
3821
- else if (isAddedTop || isMissingBottom) {
3827
+ else if (needAddOnTop || needRemoveOnBottom) {
3822
3828
  // 向上
3823
- for (let index = 0; index < newVisibleIndexes.length; index++) {
3824
- const element = newVisibleIndexes[index];
3825
- if (!oldVisibleIndexes.includes(element)) {
3826
- diffTopRenderedIndexes.push(element);
3829
+ for (let index = 0; index < newIndexesInViewport.length; index++) {
3830
+ const element = newIndexesInViewport[index];
3831
+ if (!oldIndexesInViewport.includes(element)) {
3832
+ changedIndexesOfTop.push(element);
3827
3833
  }
3828
3834
  else {
3829
3835
  break;
3830
3836
  }
3831
3837
  }
3832
- for (let index = oldVisibleIndexes.length - 1; index >= 0; index--) {
3833
- const element = oldVisibleIndexes[index];
3834
- if (!newVisibleIndexes.includes(element)) {
3835
- diffBottomRenderedIndexes.push(element);
3838
+ for (let index = oldIndexesInViewport.length - 1; index >= 0; index--) {
3839
+ const element = oldIndexesInViewport[index];
3840
+ if (!newIndexesInViewport.includes(element)) {
3841
+ changedIndexesOfBottom.push(element);
3836
3842
  }
3837
3843
  else {
3838
3844
  break;
@@ -3841,32 +3847,32 @@ class SlateEditable {
3841
3847
  }
3842
3848
  if (isDebug) {
3843
3849
  this.debugLog('log', `====== diffVirtualViewport stage: ${stage} ======`);
3844
- this.debugLog('log', 'oldVisibleIndexes:', oldVisibleIndexes);
3845
- this.debugLog('log', 'newVisibleIndexes:', newVisibleIndexes);
3846
- this.debugLog('log', 'diffTopRenderedIndexes:', isMissingTop ? '-' : isAddedTop ? '+' : '-', diffTopRenderedIndexes, diffTopRenderedIndexes.map(index => getRealHeightByElement(this.editor, this.editor.children[index], 0)));
3847
- this.debugLog('log', 'diffBottomRenderedIndexes:', isAddedBottom ? '+' : isMissingBottom ? '-' : '+', diffBottomRenderedIndexes, diffBottomRenderedIndexes.map(index => getRealHeightByElement(this.editor, this.editor.children[index], 0)));
3848
- const needTop = virtualView.heights.slice(0, newVisibleIndexes[0]).reduce((acc, height) => acc + height, 0);
3850
+ this.debugLog('log', 'oldIndexesInViewport:', oldIndexesInViewport);
3851
+ this.debugLog('log', 'newIndexesInViewport:', newIndexesInViewport);
3852
+ this.debugLog('log', 'changedIndexesOfTop:', needRemoveOnTop ? '-' : needAddOnTop ? '+' : '-', changedIndexesOfTop, changedIndexesOfTop.map(index => getRealHeightByElement(this.editor, this.editor.children[index], 0)));
3853
+ this.debugLog('log', 'changedIndexesOfBottom:', needAddOnBottom ? '+' : needRemoveOnBottom ? '-' : '+', changedIndexesOfBottom, changedIndexesOfBottom.map(index => getRealHeightByElement(this.editor, this.editor.children[index], 0)));
3854
+ const needTop = virtualView.heights.slice(0, newIndexesInViewport[0]).reduce((acc, height) => acc + height, 0);
3849
3855
  const needBottom = virtualView.heights
3850
- .slice(newVisibleIndexes[newVisibleIndexes.length - 1] + 1)
3856
+ .slice(newIndexesInViewport[newIndexesInViewport.length - 1] + 1)
3851
3857
  .reduce((acc, height) => acc + height, 0);
3852
3858
  this.debugLog('log', needTop - parseFloat(this.virtualTopHeightElement.style.height), 'newTopHeight:', needTop, 'prevTopHeight:', parseFloat(this.virtualTopHeightElement.style.height));
3853
3859
  this.debugLog('log', 'newBottomHeight:', needBottom, 'prevBottomHeight:', parseFloat(this.virtualBottomHeightElement.style.height));
3854
3860
  this.debugLog('warn', '=========== Dividing line ===========');
3855
3861
  }
3856
3862
  return {
3857
- isDiff: true,
3858
- isMissingTop,
3859
- isAddedTop,
3860
- isMissingBottom,
3861
- isAddedBottom,
3862
- diffTopRenderedIndexes,
3863
- diffBottomRenderedIndexes
3863
+ isDifferent: true,
3864
+ needRemoveOnTop,
3865
+ needAddOnTop,
3866
+ needRemoveOnBottom,
3867
+ needAddOnBottom,
3868
+ changedIndexesOfTop,
3869
+ changedIndexesOfBottom
3864
3870
  };
3865
3871
  }
3866
3872
  return {
3867
- isDiff: false,
3868
- diffTopRenderedIndexes: [],
3869
- diffBottomRenderedIndexes: []
3873
+ isDifferent: false,
3874
+ changedIndexesOfTop: [],
3875
+ changedIndexesOfBottom: []
3870
3876
  };
3871
3877
  }
3872
3878
  tryMeasureInViewportChildrenHeights() {