@hailin-zheng/editor-core 2.2.14 → 2.2.15

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/index.js CHANGED
@@ -24,8 +24,6 @@ class ElementEvent {
24
24
  * 当前所在的对象
25
25
  */
26
26
  currentElement;
27
- currentRenderObjectX;
28
- currentRenderObjectY;
29
27
  //是否取消向上冒泡
30
28
  isCancel;
31
29
  globalX;
@@ -741,8 +739,11 @@ class CommonUtil {
741
739
  const shouldCallNow = elapsed >= wait;
742
740
  clearTimeout(timeout);
743
741
  if (shouldCallNow) {
744
- fn.apply(context, args);
745
- lastExecTime = Date.now();
742
+ //延迟执行,微任务
743
+ Promise.resolve().then(() => {
744
+ fn.apply(context, args);
745
+ lastExecTime = Date.now();
746
+ });
746
747
  }
747
748
  else {
748
749
  timeout = setTimeout(() => {
@@ -971,6 +972,8 @@ function generatePatch(doc, clear = true) {
971
972
  }
972
973
  if ('insert' in op.ops) {
973
974
  insertOpsMap.set(ele, op);
975
+ //对象复制出来,避免paintRenders等内存占用
976
+ op.ops.insert = op.ops.insert.clone(true);
974
977
  }
975
978
  //当前为新插入的元素
976
979
  if ('insText' in op.ops) {
@@ -1225,7 +1228,7 @@ class Element {
1225
1228
  modifyFlag = ModifyFlag.Modify;
1226
1229
  isMouseenter;
1227
1230
  _eventMap;
1228
- _refreshEvent = new Subject();
1231
+ //private _refreshEvent: Subject<void> = new Subject();
1229
1232
  _onChangeEvent = new Subject();
1230
1233
  observers = new WeakMap();
1231
1234
  paintRenders = [];
@@ -1330,14 +1333,15 @@ class Element {
1330
1333
  return 0;
1331
1334
  }
1332
1335
  }
1333
- get refreshSubject() {
1334
- return this._refreshEvent;
1335
- }
1336
+ // get refreshSubject(): Subject<void> {
1337
+ // return this._refreshEvent;
1338
+ // }
1336
1339
  get onChangeSubject() {
1337
1340
  return this._onChangeEvent;
1338
1341
  }
1339
1342
  refreshView() {
1340
- this._refreshEvent.next();
1343
+ //this._refreshEvent.next();
1344
+ //refreshEditor(this);
1341
1345
  }
1342
1346
  unsubscribe(element) {
1343
1347
  const subs = this.observers.get(element);
@@ -1419,13 +1423,13 @@ class BranchElement extends Element {
1419
1423
  child.parent = this;
1420
1424
  this.chilren.splice(index, 0, child);
1421
1425
  insertEle(child);
1422
- const refSub = child.refreshSubject.subscribe((data) => {
1423
- this.refreshSubject.next(data);
1424
- });
1426
+ //const refSub = child.refreshSubject.subscribe((data) => {
1427
+ //this.refreshSubject.next(data);
1428
+ // });
1425
1429
  const onChangeSub = child.onChangeSubject.subscribe((data) => {
1426
1430
  this.pubOnChange('tracker');
1427
1431
  });
1428
- this.addsubscribe(child, refSub, onChangeSub);
1432
+ this.addsubscribe(child, onChangeSub);
1429
1433
  this.pubOnChange('self');
1430
1434
  }
1431
1435
  removeChild(child) {
@@ -1705,9 +1709,9 @@ class ViewOptions {
1705
1709
  currentFontName = '宋体';
1706
1710
  //选区颜色
1707
1711
  selectionColor = 'rgb(131,175,155,0.5)';
1708
- dataDecoratorNormalColor = '#0050b3';
1709
- dataDecoratorMouseEnterColor = '#0050b3';
1710
- dataDecoratorFocusedColor = '#0050b3';
1712
+ dataEleDecoratorNormalColor = '#0050b3';
1713
+ dataEleDecoratorMouseEnterColor = '#0050b3';
1714
+ dataEleDecoratorFocusedColor = '#0050b3';
1711
1715
  //数据元修饰符宽度
1712
1716
  dataDecoratorWidth = 1;
1713
1717
  //是否显示数据元修饰符
@@ -1724,12 +1728,18 @@ class ViewOptions {
1724
1728
  dataEleNormalBgColor = '#fafafa';
1725
1729
  //数据元错误背景颜色
1726
1730
  dataEleErrorBgColor = '#ff4d4f';
1727
- //数据元正常背景颜色
1728
- dataGroupEleNormalBgColor = '';
1731
+ //数据组修饰符号颜色
1732
+ dataGroupDecoratorNormalColor = '#0050b3';
1733
+ dataGroupDecoratorMouseEnterColor = '#0050b3';
1734
+ dataGroupDecoratorFocusedColor = '#0050b3';
1735
+ //数据组正常背景颜色
1736
+ dataGroupNormalBgColor = '#fafafa';
1737
+ //数据元没有输入值时背景颜色
1738
+ dataGroupEmptyBgColor = '';
1729
1739
  //数据元鼠标悬浮颜色
1730
- dataGroupMouseEnterBgColor = '';
1731
- //数据元只读背景颜色
1732
- dataGroupFocusedBgColor = '';
1740
+ dataGroupMouseEnterBgColor = '#f5f5f5';
1741
+ //数据元焦点背景颜色
1742
+ dataGroupFocusedBgColor = '#f0f0f0';
1733
1743
  viewBackcolor = 'rgb(230,230,230)';
1734
1744
  paraSymbolColor = 'rgb(128,128,128)';
1735
1745
  dataGroupColor = 'rgb(0,80,179)';
@@ -1774,6 +1784,8 @@ class ViewOptions {
1774
1784
  showEnterSymbol = false;
1775
1785
  enableVisibleExpression = false;
1776
1786
  shapeRendering = 'auto';
1787
+ //是否开启快速测量
1788
+ enableFastMeasure = false;
1777
1789
  get fullPageView() {
1778
1790
  return this._fullPageView;
1779
1791
  }
@@ -2941,16 +2953,22 @@ class DataDecorateRenderObject extends LeafRenderObject {
2941
2953
  if (event.mode === 'print') {
2942
2954
  return null;
2943
2955
  }
2956
+ if (this.element.dataEle.type === 'data-group') {
2957
+ return this.exportDataGroupSVG(event);
2958
+ }
2944
2959
  // if(this.element.parent.parent.type==='data-group'){
2945
2960
  // return null;
2946
2961
  // }
2947
2962
  const options = event.options;
2948
- let color = options.dataDecoratorNormalColor;
2949
- if (this.element.dataEle.isMouseenter && options.dataDecoratorMouseEnterColor) {
2950
- color = options.dataDecoratorMouseEnterColor;
2963
+ let color = options.dataEleDecoratorNormalColor;
2964
+ if (this.element.dataEle.isMouseenter && options.dataEleDecoratorMouseEnterColor) {
2965
+ color = options.dataEleDecoratorMouseEnterColor;
2966
+ }
2967
+ if (this.element.dataEle.isFocused && options.dataEleDecoratorFocusedColor) {
2968
+ color = options.dataEleDecoratorFocusedColor;
2951
2969
  }
2952
- if (this.element.dataEle.isFocused && options.dataDecoratorFocusedColor) {
2953
- color = options.dataDecoratorFocusedColor;
2970
+ if (!color) {
2971
+ return null;
2954
2972
  }
2955
2973
  const element = this.element;
2956
2974
  const lineWidth = 3;
@@ -2971,6 +2989,37 @@ class DataDecorateRenderObject extends LeafRenderObject {
2971
2989
  d: path
2972
2990
  });
2973
2991
  }
2992
+ exportDataGroupSVG(event) {
2993
+ const options = event.options;
2994
+ let color = options.dataGroupDecoratorNormalColor;
2995
+ if (this.element.dataEle.isMouseenter && options.dataGroupDecoratorMouseEnterColor) {
2996
+ color = options.dataGroupDecoratorMouseEnterColor;
2997
+ }
2998
+ if (this.element.dataEle.isFocused && options.dataGroupDecoratorFocusedColor) {
2999
+ color = options.dataGroupDecoratorFocusedColor;
3000
+ }
3001
+ if (!color) {
3002
+ return null;
3003
+ }
3004
+ const element = this.element;
3005
+ const lineWidth = 4;
3006
+ let path = '';
3007
+ const height = this.parent.rect.height - 4;
3008
+ if (element.isPrefix) {
3009
+ const x = this.rect.x + this.rect.width / 2;
3010
+ path = `M ${x + lineWidth} 2 L ${x} 2 L ${x} ${height} L ${x + lineWidth} ${height}`;
3011
+ }
3012
+ else {
3013
+ const x = this.rect.x + this.rect.width / 2;
3014
+ path = `M ${x - lineWidth} 2 L ${x} 2 L ${x} ${height} L ${x - lineWidth} ${height}`;
3015
+ }
3016
+ return ElementUtil.createSvgPath({
3017
+ stroke: color,
3018
+ fill: "none",
3019
+ 'stroke-width': 2,
3020
+ d: path
3021
+ });
3022
+ }
2974
3023
  }
2975
3024
 
2976
3025
  function parser(code, objects) {
@@ -3452,6 +3501,7 @@ class DocumentElement extends BlockContainerElement {
3452
3501
  footerElement;
3453
3502
  //commentsContainerElement!: CommsContainerElement;
3454
3503
  headerEditState = false;
3504
+ editorContext = null;
3455
3505
  constructor() {
3456
3506
  super('doc');
3457
3507
  this.props = new DocumentProps();
@@ -3485,11 +3535,11 @@ class DocumentElement extends BlockContainerElement {
3485
3535
  }
3486
3536
  };
3487
3537
  }
3488
- clone() {
3538
+ clone(data) {
3489
3539
  const clone = new DocumentElement();
3490
3540
  this.props.clone(clone.props);
3491
3541
  cloneElementBase(this, clone);
3492
- cloneChildren(this, clone, true);
3542
+ cloneChildren(this, clone, data);
3493
3543
  return clone;
3494
3544
  }
3495
3545
  /**
@@ -3525,7 +3575,7 @@ class DocumentElement extends BlockContainerElement {
3525
3575
  this.headerEditState = false;
3526
3576
  }
3527
3577
  ss.clear();
3528
- this.refreshView();
3578
+ //this.refreshView();
3529
3579
  }
3530
3580
  markPairs = [];
3531
3581
  /**
@@ -3800,7 +3850,7 @@ class InlineGroupInputElement extends InlineGroupElement {
3800
3850
  this.addEvent('ElementKeyDown', (evt) => {
3801
3851
  const { selectionState, sourceEvent, source } = evt;
3802
3852
  const { startControl, startOffset } = selectionState;
3803
- if (IsInSideDataElement(startControl, startOffset)) {
3853
+ if (IsInSideInlineGroupInputElement(startControl, startOffset)) {
3804
3854
  if (sourceEvent.shiftKey && sourceEvent.keyCode === 13) ;
3805
3855
  else if (!sourceEvent.shiftKey && sourceEvent.keyCode === 13) {
3806
3856
  evt.isCancel = true;
@@ -3809,7 +3859,7 @@ class InlineGroupInputElement extends InlineGroupElement {
3809
3859
  }, true);
3810
3860
  this.addEvent('GotCursor', (evt) => {
3811
3861
  const { startControl, startOffset } = evt.selectionState;
3812
- if (IsInSideDataElement(startControl, startOffset)) {
3862
+ if (IsInSideInlineGroupInputElement(startControl, startOffset)) {
3813
3863
  this.isFocused = true;
3814
3864
  }
3815
3865
  });
@@ -3906,11 +3956,13 @@ class DataElementInlineGroup extends InlineGroupInputElement {
3906
3956
  });
3907
3957
  this.addEvent('ElementMousemove', (evt) => {
3908
3958
  this.isMouseenter = true;
3909
- this.refreshView();
3959
+ evt.ctx.refreshView();
3960
+ //this.refreshView();
3910
3961
  });
3911
3962
  this.addEvent('ElementMouseLeave', (evt) => {
3912
3963
  this.isMouseenter = false;
3913
- this.refreshView();
3964
+ evt.ctx.refreshView();
3965
+ //this.refreshView()
3914
3966
  });
3915
3967
  this.addEvent('GotCursor', (evt) => {
3916
3968
  this.onGotCursorEvent(evt);
@@ -4050,21 +4102,10 @@ function getCurrOptions(ele) {
4050
4102
  class DataElementRenderObject extends InlineGroupRenderObject {
4051
4103
  exportSVG(event) {
4052
4104
  const node = super.exportSVG(event);
4053
- exportDecoratorHTML(event, this);
4105
+ exportDataEleDecoratorSVG$1(event, this);
4106
+ //绘制下划线
4054
4107
  if (this.element.props.underline) {
4055
- const { x, y } = event.relativePagePos;
4056
- event.highlights.push({
4057
- sel: 'path',
4058
- data: {
4059
- ns: 'http://www.w3.org/2000/svg',
4060
- attrs: {
4061
- d: `M${x} ${y + this.rect.height} L${x + this.rect.width} ${y + this.rect.height}`,
4062
- stroke: '#000',
4063
- fill: 'none',
4064
- 'stroke-width': 1
4065
- }
4066
- }
4067
- });
4108
+ renderUnderline(event, this);
4068
4109
  }
4069
4110
  renderErrorTip(event, this);
4070
4111
  return node;
@@ -4127,7 +4168,7 @@ class DataElementBaseFactory extends ElementFactory {
4127
4168
  * @param event
4128
4169
  * @param r
4129
4170
  */
4130
- function exportDecoratorHTML(event, r) {
4171
+ function exportDataEleDecoratorSVG$1(event, r) {
4131
4172
  if (event.mode === 'print') {
4132
4173
  return;
4133
4174
  }
@@ -4143,6 +4184,9 @@ function exportDecoratorHTML(event, r) {
4143
4184
  if (r.element.isFocused && options.dataEleFocusedBgColor) {
4144
4185
  color = options.dataEleFocusedBgColor;
4145
4186
  }
4187
+ if (!color) {
4188
+ return;
4189
+ }
4146
4190
  //绘制背景
4147
4191
  const bgX = event.relativePagePos.x;
4148
4192
  const bgY = event.relativePagePos.y;
@@ -4311,6 +4355,21 @@ function renderUnderWavyLine(event, r, color) {
4311
4355
  d += Array(Math.ceil(width / 3)).fill("3,0").join(' t ');
4312
4356
  const path = ElementUtil.createSvgPath({ d, fill: 'none', stroke: color });
4313
4357
  event.highlights.push(path);
4358
+ }
4359
+ function renderUnderline(event, render) {
4360
+ const { x, y } = event.relativePagePos;
4361
+ event.highlights.push({
4362
+ sel: 'path',
4363
+ data: {
4364
+ ns: 'http://www.w3.org/2000/svg',
4365
+ attrs: {
4366
+ d: `M${x} ${y + render.rect.height} L${x + render.rect.width} ${y + render.rect.height}`,
4367
+ stroke: '#000',
4368
+ fill: 'none',
4369
+ 'stroke-width': 1
4370
+ }
4371
+ }
4372
+ });
4314
4373
  }
4315
4374
 
4316
4375
  class DocumentBodyElement extends BlockContainerElement {
@@ -5588,7 +5647,7 @@ class TableUtil {
5588
5647
  if (startCell) {
5589
5648
  this.restoreCellMerge(startCell);
5590
5649
  ss.resetRange(startCell, 0);
5591
- startCell.refreshView();
5650
+ //startCell.refreshView();
5592
5651
  }
5593
5652
  }
5594
5653
  static restoreCellMerge(cell) {
@@ -5686,7 +5745,7 @@ class TableUtil {
5686
5745
  tb.setCellWidth(insertColIndex === colsCount ? insertColIndex - 1 : insertColIndex, insertColWidth - newColWidth);
5687
5746
  tb.insertCol(insertColIndex, newColWidth);
5688
5747
  tb.pubOnChange('self');
5689
- tb.refreshView();
5748
+ //tb.refreshView();
5690
5749
  }
5691
5750
  /**
5692
5751
  * 在指定位置插入行
@@ -5715,7 +5774,7 @@ class TableUtil {
5715
5774
  //新行插在第一行或者最后一行
5716
5775
  if (insertRowIndex === 0 || insertRowIndex === tb.length) {
5717
5776
  tb.addChild(newRow, insertRowIndex);
5718
- tb.refreshView();
5777
+ //tb.refreshView();
5719
5778
  return newRow;
5720
5779
  }
5721
5780
  const destRow = tb.getChild(insertRowIndex);
@@ -5734,7 +5793,7 @@ class TableUtil {
5734
5793
  newCell.props.hMerge = destCell.props.hMerge;
5735
5794
  }
5736
5795
  tb.addChild(newRow, insertRowIndex);
5737
- tb.refreshView();
5796
+ //tb.refreshView();
5738
5797
  return newRow;
5739
5798
  }
5740
5799
  /**
@@ -5796,14 +5855,14 @@ class TableUtil {
5796
5855
  const nextCell = this.getNextCell(ss);
5797
5856
  if (nextCell) {
5798
5857
  ss.resetRange(nextCell, 0);
5799
- nextCell.refreshView();
5858
+ //nextCell.refreshView();
5800
5859
  return;
5801
5860
  }
5802
5861
  //新增行,并定位
5803
5862
  const tb = ElementUtil.getParentByType(startCell, TableElement);
5804
5863
  const newRow = this.insertNewRow(tb, rowIndex + 1);
5805
5864
  ss.resetRange(newRow, 0);
5806
- newRow.refreshView();
5865
+ //newRow.refreshView();
5807
5866
  }
5808
5867
  /**
5809
5868
  * 获取下一个可定位的单元格
@@ -5845,7 +5904,7 @@ class TableUtil {
5845
5904
  console.warn('当前位置不存在表格');
5846
5905
  return;
5847
5906
  }
5848
- tb.parent.refreshView();
5907
+ //tb.parent.refreshView();
5849
5908
  tb.remove();
5850
5909
  }
5851
5910
  /**
@@ -5866,7 +5925,7 @@ class TableUtil {
5866
5925
  else if (tc.props.diagonal === diagonal) {
5867
5926
  tc.props.diagonal = null;
5868
5927
  }
5869
- tc.refreshView();
5928
+ //tc.refreshView();
5870
5929
  }
5871
5930
  /**
5872
5931
  * 将当前表格截断成两个相邻的表格
@@ -6476,11 +6535,11 @@ class CommContentBaseElement extends BlockContainerElement {
6476
6535
  super(type);
6477
6536
  this.addEvent('GotCursor', () => {
6478
6537
  this.focus = true;
6479
- this.refreshView();
6538
+ //this.refreshView()
6480
6539
  });
6481
6540
  this.addEvent('LostCursor', () => {
6482
6541
  this.focus = false;
6483
- this.refreshView();
6542
+ //this.refreshView()
6484
6543
  });
6485
6544
  }
6486
6545
  }
@@ -8689,11 +8748,13 @@ class DataElementGroupElement extends InlineGroupInputElement {
8689
8748
  this.props = new DataElementGroupProps();
8690
8749
  this.addEvent('ElementMousemove', (evt) => {
8691
8750
  this.isMouseenter = true;
8692
- this.refreshView();
8751
+ //this.refreshView();
8752
+ evt.ctx.refreshView();
8693
8753
  });
8694
8754
  this.addEvent('ElementMouseLeave', (evt) => {
8695
8755
  this.isMouseenter = false;
8696
- this.refreshView();
8756
+ evt.ctx.refreshView();
8757
+ //this.refreshView();
8697
8758
  });
8698
8759
  }
8699
8760
  setValue(val) {
@@ -8754,6 +8815,15 @@ class DataElementGroupRenderObject extends InlineGroupRenderObject {
8754
8815
  }
8755
8816
  return cloneRender;
8756
8817
  }
8818
+ exportSVG(event) {
8819
+ const node = super.exportSVG(event);
8820
+ exportDataEleDecoratorSVG(event, this);
8821
+ //绘制下划线
8822
+ if (this.element.props.underline) {
8823
+ renderUnderline(event, this);
8824
+ }
8825
+ return node;
8826
+ }
8757
8827
  }
8758
8828
  class DataElementGroupFactory extends DataElementBaseFactory {
8759
8829
  match(type) {
@@ -8792,6 +8862,35 @@ function IsInSideDataGroup(control, offset) {
8792
8862
  }
8793
8863
  function validateDataGroup(control) {
8794
8864
  return control instanceof DataElementGroupElement;
8865
+ }
8866
+ /**
8867
+ * 渲染数据元背景修饰
8868
+ * @param event
8869
+ * @param r
8870
+ */
8871
+ function exportDataEleDecoratorSVG(event, r) {
8872
+ if (event.mode === 'print') {
8873
+ return;
8874
+ }
8875
+ const options = event.options;
8876
+ let color = options.dataGroupNormalBgColor;
8877
+ //空数据元填充颜色
8878
+ if (r.element.length === 2 && options.dataGroupEmptyBgColor) {
8879
+ color = options.dataGroupEmptyBgColor;
8880
+ }
8881
+ if (r.element.isMouseenter && options.dataGroupMouseEnterBgColor) {
8882
+ color = options.dataGroupMouseEnterBgColor;
8883
+ }
8884
+ if (r.element.isFocused && options.dataGroupFocusedBgColor) {
8885
+ color = options.dataGroupFocusedBgColor;
8886
+ }
8887
+ if (!color) {
8888
+ return;
8889
+ }
8890
+ //绘制背景
8891
+ const bgX = event.relativePagePos.x;
8892
+ const bgY = event.relativePagePos.y;
8893
+ event.highlights.push(ElementUtil.getFillSvgRect(bgX, bgY, r.rect.width, r.rect.height, color));
8795
8894
  }
8796
8895
 
8797
8896
  class DataElementImage extends DataElementLeaf {
@@ -9147,11 +9246,13 @@ class DataContainerElement extends BlockContainerElement {
9147
9246
  this.props = new DataContainerProps();
9148
9247
  this.addEvent('GotCursor', (evt) => {
9149
9248
  this.isFocused = true;
9150
- this.refreshView();
9249
+ evt.ctx.refreshView();
9250
+ //this.refreshView();
9151
9251
  });
9152
9252
  this.addEvent('LostCursor', (evt) => {
9153
9253
  this.isFocused = false;
9154
- this.refreshView();
9254
+ evt.ctx.refreshView();
9255
+ //this.refreshView();
9155
9256
  });
9156
9257
  }
9157
9258
  createRenderObject() {
@@ -9266,19 +9367,23 @@ class DocumentBodyPartElement extends BlockContainerElement {
9266
9367
  super('body-part');
9267
9368
  this.addEvent('ElementMousemove', (evt) => {
9268
9369
  this.isMouseenter = true;
9269
- this.refreshView();
9370
+ evt.ctx.refreshView();
9371
+ //this.refreshView();
9270
9372
  });
9271
9373
  this.addEvent('ElementMouseLeave', (evt) => {
9272
9374
  this.isMouseenter = false;
9273
- this.refreshView();
9375
+ evt.ctx.refreshView();
9376
+ //this.refreshView();
9274
9377
  });
9275
9378
  this.addEvent('GotCursor', (evt) => {
9276
9379
  this.isFocused = true;
9277
- this.refreshView();
9380
+ evt.ctx.refreshView();
9381
+ //this.refreshView();
9278
9382
  });
9279
9383
  this.addEvent('LostCursor', (evt) => {
9280
9384
  this.isFocused = false;
9281
- this.refreshView();
9385
+ evt.ctx.refreshView();
9386
+ //this.refreshView();
9282
9387
  });
9283
9388
  this.props = new BodyPartProps();
9284
9389
  }
@@ -10192,7 +10297,7 @@ class TableSplitCell {
10192
10297
  }
10193
10298
  }
10194
10299
  tb.pubOnChange('self');
10195
- tb.refreshView();
10300
+ //tb.refreshView();
10196
10301
  }
10197
10302
  /**
10198
10303
  * 拆分合并的单元格
@@ -10299,7 +10404,7 @@ class TableSplitCell {
10299
10404
  }
10300
10405
  }
10301
10406
  tb.pubOnChange('to-child');
10302
- tb.refreshView();
10407
+ //tb.refreshView();
10303
10408
  return {
10304
10409
  startColIndex: focusCellIndex,
10305
10410
  endColIndex: focusCellIndex + cols - 1
@@ -10329,7 +10434,7 @@ class TableSplitCell {
10329
10434
  TableUtil.restoreCell(ss);
10330
10435
  this.applyHorSplitColumnCurrPatchPacks(tb, focusRowIndex, focusCellIndex, rows, currPacks);
10331
10436
  tb.pubOnChange('to-child');
10332
- tb.refreshView();
10437
+ //tb.refreshView();
10333
10438
  return {
10334
10439
  startColIndex: focusCellIndex,
10335
10440
  endColIndex: this.getPrepareNewColCounts(otherPacks, hMergeCols)
@@ -10697,6 +10802,9 @@ class ElementSerialize {
10697
10802
  if (element instanceof PSymbolElement) {
10698
10803
  return '\n';
10699
10804
  }
10805
+ if (element instanceof BreakElement) {
10806
+ return '\n';
10807
+ }
10700
10808
  if (element instanceof BranchElement) {
10701
10809
  const items = [];
10702
10810
  for (let i = 0; i < element.length; i++) {
@@ -13245,6 +13353,7 @@ class EditorContext {
13245
13353
  //suggestionsList: Array<ISuggestionData> = [];
13246
13354
  //currentSuggestionsList: Array<ISuggestionData> = [];
13247
13355
  suggestions = new DocInputSuggestions();
13356
+ //editor->this->others
13248
13357
  onKeyDownEvent = new Subject();
13249
13358
  constructor(selectionState, viewOptions) {
13250
13359
  this.selectionState = selectionState;
@@ -13254,6 +13363,16 @@ class EditorContext {
13254
13363
  this.syncRefresh?.();
13255
13364
  });
13256
13365
  }
13366
+ /**
13367
+ * 刷新视图
13368
+ */
13369
+ refreshView() {
13370
+ this.syncRefresh?.();
13371
+ }
13372
+ /**
13373
+ * 编辑器文档刷新后回调(DOM渲染完成后回调)
13374
+ * @param cb
13375
+ */
13257
13376
  onNextView(cb) {
13258
13377
  if (!cb) {
13259
13378
  this.nextViewFns.length = 0;
@@ -13268,25 +13387,27 @@ class EditorContext {
13268
13387
  set document(value) {
13269
13388
  this.clearPrevDocCb?.();
13270
13389
  this._document = value;
13390
+ this._document['editorContext'] = this;
13271
13391
  // this.refSub = this._document.refreshSubject.subscribe((data) => {
13272
13392
  // data = data ?? 'content';
13273
13393
  // this.isDirty = this.isDirty || data === 'content';
13274
13394
  // this.syncRefresh?.(data);
13275
13395
  // });
13276
- const docRefreshSub = this._document.refreshSubject.subscribe(() => {
13277
- this.syncRefresh?.();
13278
- });
13396
+ // const docRefreshSub = this._document.refreshSubject.subscribe(() => {
13397
+ // this.syncRefresh?.();
13398
+ // });
13279
13399
  const docChangedSub = this._document.onChangeSubject.subscribe(() => {
13280
13400
  this.syncRefresh?.();
13281
13401
  });
13282
13402
  this.syncRefresh();
13283
13403
  this.clearPrevDocCb = () => {
13284
- docRefreshSub.unsubscribe();
13404
+ //docRefreshSub.unsubscribe();
13285
13405
  docChangedSub.unsubscribe();
13286
13406
  if (this._document) {
13287
13407
  this.selectionState?.renderContainer?.destroy();
13288
13408
  this.clear();
13289
13409
  this._document.destroy();
13410
+ this._document.editorContext = null;
13290
13411
  clearTraces(this._document);
13291
13412
  }
13292
13413
  this.clearPrevDocCb = null;
@@ -13297,6 +13418,7 @@ class EditorContext {
13297
13418
  this.selectionState.clear();
13298
13419
  this.isDirty = false;
13299
13420
  this.suggestions.clear();
13421
+ this.currentOpsLog.length = 0;
13300
13422
  //this.clearEleDepMaps();
13301
13423
  }
13302
13424
  get defaultCtx() {
@@ -13339,6 +13461,7 @@ class EditorContext {
13339
13461
  //this.ele_types_handlers.length = 0;
13340
13462
  //this.imageLoader.clear();
13341
13463
  this._document = null;
13464
+ this.currentOpsLog.length = 0;
13342
13465
  this.suggestions.destroy();
13343
13466
  }
13344
13467
  /**
@@ -13361,11 +13484,13 @@ class EditorContext {
13361
13484
  oldDataElement.remove();
13362
13485
  }
13363
13486
  currentRefreshType = null;
13487
+ //当前操作日志
13488
+ currentOpsLog = [];
13364
13489
  get refreshType() {
13365
- if (!this._document) {
13490
+ if (!this._document || this._document.modifyFlag === ModifyFlag.None) {
13366
13491
  return null;
13367
13492
  }
13368
- return this._document.modifyFlag === ModifyFlag.None ? 'appearance' : 'content';
13493
+ return this._document.modifyFlag === ModifyFlag.Track ? 'appearance' : 'content';
13369
13494
  }
13370
13495
  adaptiveScale() {
13371
13496
  if (this.viewOptions.pageLayoutMode !== 'fit-page') {
@@ -13641,6 +13766,18 @@ class DocumentContext {
13641
13766
  }
13642
13767
  return arr;
13643
13768
  }
13769
+ }
13770
+ function refreshEditor(ele) {
13771
+ const doc = ElementUtil.getParent(ele, e => e.type === 'doc');
13772
+ if (doc) {
13773
+ const editorCtx = doc['editorContext'];
13774
+ if (editorCtx) {
13775
+ editorCtx.refreshView();
13776
+ }
13777
+ else {
13778
+ console.warn("doc.editorContext is null,不能刷新!");
13779
+ }
13780
+ }
13644
13781
  }
13645
13782
 
13646
13783
  class DynamicExecute {
@@ -15171,6 +15308,83 @@ class DocumentArrange {
15171
15308
  tmp.props.lineHeight = this.options.defaultLineHeight;
15172
15309
  return tmp;
15173
15310
  }
15311
+ patchParagraph() {
15312
+ if (!this.options.enableFastMeasure) {
15313
+ return false;
15314
+ }
15315
+ this.pMeasure = new ParagraphMeasure(this.options, this.renderCtx, this.execute);
15316
+ const ops = this.docCtx.currentOpsLog;
15317
+ if (!ops.length) {
15318
+ return false;
15319
+ }
15320
+ if (ops.every(op => 'delText' in op.ops || 'insText' in op.ops || ('insert' in op.ops && op.ops.insert.type === 'text'))) {
15321
+ const parentIndex = ops[0].parentIndex;
15322
+ //查找父容器
15323
+ const parentEle = ElementUtil.getControlByIndex(this.docCtx.document, { currIndex: -1, index: parentIndex }, true);
15324
+ const paraEle = ElementUtil.getParent(parentEle, item => item instanceof ParagraphElement);
15325
+ if (!paraEle) {
15326
+ return false;
15327
+ }
15328
+ const cacheRender = paraEle.cacheRender;
15329
+ if (!cacheRender) {
15330
+ return false;
15331
+ }
15332
+ //已经绘制的渲染对象
15333
+ const paintRenders = paraEle.paintRenders;
15334
+ const measureParaRenders = this.pMeasure.measureParagraph(paraEle, cacheRender.rect.width);
15335
+ if (measureParaRenders.length !== 1) {
15336
+ return false;
15337
+ }
15338
+ const measureParaRender = measureParaRenders[0];
15339
+ if (cacheRender.rect.width !== measureParaRender.rect.width || cacheRender.rect.height !== measureParaRender.rect.height) {
15340
+ return false;
15341
+ }
15342
+ //第一种情况,出现在页面或者页尾上
15343
+ const measureParaRenderLines = measureParaRender.length;
15344
+ const paintRendersLines = paintRenders.reduce((prev, curr) => {
15345
+ prev.push(...curr.getItems());
15346
+ return prev;
15347
+ }, []);
15348
+ if (paintRendersLines.length % measureParaRenderLines !== 0) {
15349
+ return false;
15350
+ }
15351
+ //完全一致,逐个替换
15352
+ if (paintRendersLines.length === measureParaRenderLines) {
15353
+ for (let i = 0; i < paintRendersLines.length; i++) {
15354
+ const line = paintRendersLines[i];
15355
+ const index = line.getIndex();
15356
+ const tempLine = measureParaRender.getChild(i).clone();
15357
+ tempLine.rect.width = line.rect.width;
15358
+ tempLine.rect.height = line.rect.height;
15359
+ tempLine.rect.x = line.rect.x;
15360
+ tempLine.rect.y = line.rect.y;
15361
+ line.parent.insertChild(tempLine, index);
15362
+ line.parent.removeChild(line);
15363
+ }
15364
+ return true;
15365
+ }
15366
+ }
15367
+ return false;
15368
+ }
15369
+ fastPatchReset(docRenders) {
15370
+ //测量阶段,对于空段落会插入段落符号,新表格会插入空段落,此时不需要记录节点的更改,以最大的节点进行记录
15371
+ return suppressTracking(() => {
15372
+ const doc = this.docCtx.document;
15373
+ this.execute = new DynamicExecute(doc, this.docCtx.selectionState);
15374
+ this.pMeasure = new ParagraphMeasure(this.options, this.renderCtx, this.execute);
15375
+ const data = {
15376
+ doc,
15377
+ options: this.options,
15378
+ execute: this.execute,
15379
+ renderCtx: this.renderCtx,
15380
+ createParaFn: () => this.createDefaultPara()
15381
+ };
15382
+ this.reset(data);
15383
+ this.setMeasureCompletedModifyFlag(doc);
15384
+ this.cacheDocRenders(docRenders);
15385
+ this.generateCommRange();
15386
+ });
15387
+ }
15174
15388
  }
15175
15389
 
15176
15390
  /**
@@ -15198,7 +15412,12 @@ class DocumentPaginator {
15198
15412
  this.docCtx.selectionState.renderContainer = this.docContainer;
15199
15413
  this.docContainer.rect.width = this.viewOptions.docPageSettings.width;
15200
15414
  const newMeasure = new DocumentArrange(this.docCtx, this.renderContext, this.seo);
15201
- this.docPages = newMeasure.measureDoc();
15415
+ if (newMeasure.patchParagraph()) {
15416
+ newMeasure.fastPatchReset(this.docPages);
15417
+ }
15418
+ else {
15419
+ this.docPages = newMeasure.measureDoc();
15420
+ }
15202
15421
  this.adjustTipLayoutWidth();
15203
15422
  this.layoutPages();
15204
15423
  }
@@ -20668,7 +20887,7 @@ class DocEditor {
20668
20887
  },
20669
20888
  on: {
20670
20889
  resize: () => {
20671
- console.log('resize');
20890
+ //console.log('resize')
20672
20891
  }
20673
20892
  }
20674
20893
  },
@@ -20686,10 +20905,13 @@ class DocEditor {
20686
20905
  const target = evt.target;
20687
20906
  this.viewOptions.pageOffset.x = target.scrollLeft;
20688
20907
  this.viewOptions.pageOffset.y = target.scrollTop;
20689
- this.onChange();
20908
+ //this.onChange();
20909
+ //滚动的时候,不需要重新计算元素
20910
+ //只需要重新渲染vnode即可
20911
+ this.onPatchVNodeSubject.next();
20690
20912
  },
20691
20913
  resize: () => {
20692
- console.log('resize');
20914
+ //console.log('resize')
20693
20915
  }
20694
20916
  },
20695
20917
  hook: {
@@ -20752,12 +20974,12 @@ class DocEditor {
20752
20974
  this.refreshDocument();
20753
20975
  this.flushTask = null;
20754
20976
  //回调
20755
- let cbs = [...this.docCtx.nextViewFns];
20756
- if (cbs.length) {
20757
- this.docCtx.onNextView(null);
20758
- cbs.forEach(cb => cb());
20759
- return;
20760
- }
20977
+ // let cbs = [...this.docCtx.nextViewFns];
20978
+ // if (cbs.length) {
20979
+ // this.docCtx.onNextView(null);
20980
+ // cbs.forEach(cb => cb());
20981
+ // return;
20982
+ // }
20761
20983
  this.historyMange.generateTrack();
20762
20984
  this.historyMange.generateSelectionLog();
20763
20985
  };
@@ -20807,9 +21029,9 @@ class DocEditor {
20807
21029
  * @returns
20808
21030
  */
20809
21031
  refreshDocument() {
20810
- if (this.docCtx.refreshType === null) {
20811
- return;
20812
- }
21032
+ // if (this.docCtx.refreshType === null) {
21033
+ // return;
21034
+ // }
20813
21035
  this.docCtx.currentRefreshType = this.docCtx.refreshType;
20814
21036
  if (this.docCtx.currentRefreshType) {
20815
21037
  this.onBeforeRefreshDocument.next();
@@ -21690,6 +21912,7 @@ class DocEditor {
21690
21912
  this.vNodeDocContent = this.nodePatch(this.svgContainer, vNode);
21691
21913
  }
21692
21914
  this.afterNodePatch.next();
21915
+ this.onNextView();
21693
21916
  //console.timeEnd('patch');
21694
21917
  };
21695
21918
  render();
@@ -21700,6 +21923,13 @@ class DocEditor {
21700
21923
  render();
21701
21924
  }, 32));
21702
21925
  }
21926
+ onNextView() {
21927
+ let cbs = [...this.docCtx.nextViewFns];
21928
+ if (cbs.length) {
21929
+ this.docCtx.onNextView();
21930
+ cbs.forEach(cb => cb());
21931
+ }
21932
+ }
21703
21933
  /**
21704
21934
  * 留痕提示的容器框,用于渲染后重新计算纵向位置
21705
21935
  * @private
@@ -22055,7 +22285,7 @@ class DocEditor {
22055
22285
  rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
22056
22286
  }
22057
22287
  version() {
22058
- return "2.2.14";
22288
+ return "2.2.15";
22059
22289
  }
22060
22290
  switchPageHeaderEditor() {
22061
22291
  this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
@@ -22138,6 +22368,7 @@ class DocEditor {
22138
22368
  readDocChangeLog() {
22139
22369
  //获取文档的变更日志
22140
22370
  const ops = generatePatch(this.docCtx.document, false);
22371
+ this.docCtx.currentOpsLog = [...ops];
22141
22372
  //1.处理批注删除不对称的问题
22142
22373
  for (let i = 0; i < ops.length; i++) {
22143
22374
  const op = ops[i];
@@ -22393,7 +22624,7 @@ class DocumentCombine {
22393
22624
  * 用于合并文档计算
22394
22625
  */
22395
22626
  load() {
22396
- const template = this.mainTemplate.clone();
22627
+ const template = this.mainTemplate.clone(true);
22397
22628
  const body = template.find((item) => item instanceof DocumentBodyElement);
22398
22629
  body.clearItems();
22399
22630
  for (let i = 0; i < this.docParts.length; i++) {
@@ -27755,13 +27986,13 @@ const onTableContextmenu = (evt) => {
27755
27986
  evt.menus.push({
27756
27987
  caption: '上方插入段落', click: () => {
27757
27988
  currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex());
27758
- currentElement.refreshView();
27989
+ //currentElement.refreshView()
27759
27990
  }
27760
27991
  });
27761
27992
  evt.menus.push({
27762
27993
  caption: '下方插入段落', click: () => {
27763
27994
  currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex() + 1);
27764
- currentElement.refreshView();
27995
+ //currentElement.refreshView()
27765
27996
  }
27766
27997
  });
27767
27998
  evt.menus = removeDuplicatesEvent(evt.menus);
@@ -27777,5 +28008,5 @@ function removeDuplicatesEvent(events) {
27777
28008
  return arr;
27778
28009
  }
27779
28010
 
27780
- export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, CopyElementEvent, DOMEventSource, DOMSubscription, DataContainerElement, DataContainerFactory, DataContainerProps, DataContainerRenderObject, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocInputSuggestions, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentInput, DocumentPaginator, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementReader, ElementSerialize, ElementUtil, EventBus, EventMap, EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideDataGroup, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MultiBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageBreakElement, PageBreakFactory, PageBreakRenderObject, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PasteElementEvent, PermanentTeethElement, PermanentTeethFactory, PermanentTeethProps, PermanentTeethRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RowMinHeight, RunElementFactory, SVGElement, SVGFactory, SVGProps, SVGRenderObject, SelectionOverlays, SelectionRange, SelectionState, Subject, SubjectSubscription, Subscription, TEXT_HEIGHT_FACTOR, TabElement, TabFactory, TabRenderObject, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TextUnitsHolder, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, addReturn, clearChildrenRenderCache, clearTraces, cloneChildren, cloneElementBase, defaultParaHanging, deleteCurrentParagraph, docOpsMap, elementTypeEventHandler, exportDecoratorHTML, falseChar, fontMapFunc, formatEle, fromEvent, generatePatch, getCalleeName, getFocusTextSegment, inputText, insertEle, invokeTypeHandler, isDate, logUpdateEleProps, objectToString$4 as objectToString, onTableContextmenu, onceTask, parser, reactiveMap, removeEle, removeText, renderErrorTip, renderUnderWavyLine, runTextLineRender, setChildrenModifyFlag, setNotifyChangedCallback, setTraceTrackingFlag, suppressTracking, targetMaps, textLineRenderMode, toRawType, toTypeString, trueChar, validateDataEle, validateDataEleRenderObj, validateDataGroup, validateInlineInputRenderObj, watchChanged };
28011
+ export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, CopyElementEvent, DOMEventSource, DOMSubscription, DataContainerElement, DataContainerFactory, DataContainerProps, DataContainerRenderObject, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocInputSuggestions, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentInput, DocumentPaginator, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementReader, ElementSerialize, ElementUtil, EventBus, EventMap, EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideDataGroup, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag, MouseElementEvent, MousedownElementEvent, MultiBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageBreakElement, PageBreakFactory, PageBreakRenderObject, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PasteElementEvent, PermanentTeethElement, PermanentTeethFactory, PermanentTeethProps, PermanentTeethRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RowMinHeight, RunElementFactory, SVGElement, SVGFactory, SVGProps, SVGRenderObject, SelectionOverlays, SelectionRange, SelectionState, Subject, SubjectSubscription, Subscription, TEXT_HEIGHT_FACTOR, TabElement, TabFactory, TabRenderObject, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TextUnitsHolder, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, addReturn, clearChildrenRenderCache, clearTraces, cloneChildren, cloneElementBase, defaultParaHanging, deleteCurrentParagraph, docOpsMap, elementTypeEventHandler, exportDataEleDecoratorSVG$1 as exportDataEleDecoratorSVG, falseChar, fontMapFunc, formatEle, fromEvent, generatePatch, getCalleeName, getFocusTextSegment, inputText, insertEle, invokeTypeHandler, isDate, logUpdateEleProps, objectToString$4 as objectToString, onTableContextmenu, onceTask, parser, reactiveMap, refreshEditor, removeEle, removeText, renderErrorTip, renderUnderWavyLine, renderUnderline, runTextLineRender, setChildrenModifyFlag, setNotifyChangedCallback, setTraceTrackingFlag, suppressTracking, targetMaps, textLineRenderMode, toRawType, toTypeString, trueChar, validateDataEle, validateDataEleRenderObj, validateDataGroup, validateInlineInputRenderObj, watchChanged };
27781
28012
  //# sourceMappingURL=index.js.map