@hailin-zheng/editor-core 2.2.13 → 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,11 @@ 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';
1715
+ //数据元修饰符宽度
1716
+ dataDecoratorWidth = 1;
1711
1717
  //是否显示数据元修饰符
1712
1718
  showDataEleDecorator = true;
1713
1719
  //数据元没有输入值时背景颜色
@@ -1722,12 +1728,18 @@ class ViewOptions {
1722
1728
  dataEleNormalBgColor = '#fafafa';
1723
1729
  //数据元错误背景颜色
1724
1730
  dataEleErrorBgColor = '#ff4d4f';
1725
- //数据元正常背景颜色
1726
- dataGroupEleNormalBgColor = '';
1731
+ //数据组修饰符号颜色
1732
+ dataGroupDecoratorNormalColor = '#0050b3';
1733
+ dataGroupDecoratorMouseEnterColor = '#0050b3';
1734
+ dataGroupDecoratorFocusedColor = '#0050b3';
1735
+ //数据组正常背景颜色
1736
+ dataGroupNormalBgColor = '#fafafa';
1737
+ //数据元没有输入值时背景颜色
1738
+ dataGroupEmptyBgColor = '';
1727
1739
  //数据元鼠标悬浮颜色
1728
- dataGroupMouseEnterBgColor = '';
1729
- //数据元只读背景颜色
1730
- dataGroupFocusedBgColor = '';
1740
+ dataGroupMouseEnterBgColor = '#f5f5f5';
1741
+ //数据元焦点背景颜色
1742
+ dataGroupFocusedBgColor = '#f0f0f0';
1731
1743
  viewBackcolor = 'rgb(230,230,230)';
1732
1744
  paraSymbolColor = 'rgb(128,128,128)';
1733
1745
  dataGroupColor = 'rgb(0,80,179)';
@@ -1772,6 +1784,8 @@ class ViewOptions {
1772
1784
  showEnterSymbol = false;
1773
1785
  enableVisibleExpression = false;
1774
1786
  shapeRendering = 'auto';
1787
+ //是否开启快速测量
1788
+ enableFastMeasure = false;
1775
1789
  get fullPageView() {
1776
1790
  return this._fullPageView;
1777
1791
  }
@@ -2912,10 +2926,10 @@ class DataDecorateElement extends LeafElement {
2912
2926
  this.disableClick = !isPrefix;
2913
2927
  this.isDecorate = true;
2914
2928
  }
2915
- createRenderObject() {
2929
+ createRenderObject(data) {
2916
2930
  const render = new DataDecorateRenderObject(this);
2917
2931
  //render.rect.width = this.dProps.size / 2;
2918
- render.rect.width = 1;
2932
+ render.rect.width = data.options.dataDecoratorWidth;
2919
2933
  render.rect.height = Math.ceil(14 * TEXT_HEIGHT_FACTOR);
2920
2934
  return render;
2921
2935
  }
@@ -2939,16 +2953,22 @@ class DataDecorateRenderObject extends LeafRenderObject {
2939
2953
  if (event.mode === 'print') {
2940
2954
  return null;
2941
2955
  }
2956
+ if (this.element.dataEle.type === 'data-group') {
2957
+ return this.exportDataGroupSVG(event);
2958
+ }
2942
2959
  // if(this.element.parent.parent.type==='data-group'){
2943
2960
  // return null;
2944
2961
  // }
2945
2962
  const options = event.options;
2946
- let color = options.dataDecoratorNormalColor;
2947
- if (this.element.dataEle.isMouseenter && options.dataDecoratorMouseEnterColor) {
2948
- color = options.dataDecoratorMouseEnterColor;
2963
+ let color = options.dataEleDecoratorNormalColor;
2964
+ if (this.element.dataEle.isMouseenter && options.dataEleDecoratorMouseEnterColor) {
2965
+ color = options.dataEleDecoratorMouseEnterColor;
2949
2966
  }
2950
- if (this.element.dataEle.isFocused && options.dataDecoratorFocusedColor) {
2951
- color = options.dataDecoratorFocusedColor;
2967
+ if (this.element.dataEle.isFocused && options.dataEleDecoratorFocusedColor) {
2968
+ color = options.dataEleDecoratorFocusedColor;
2969
+ }
2970
+ if (!color) {
2971
+ return null;
2952
2972
  }
2953
2973
  const element = this.element;
2954
2974
  const lineWidth = 3;
@@ -2969,6 +2989,37 @@ class DataDecorateRenderObject extends LeafRenderObject {
2969
2989
  d: path
2970
2990
  });
2971
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
+ }
2972
3023
  }
2973
3024
 
2974
3025
  function parser(code, objects) {
@@ -3450,6 +3501,7 @@ class DocumentElement extends BlockContainerElement {
3450
3501
  footerElement;
3451
3502
  //commentsContainerElement!: CommsContainerElement;
3452
3503
  headerEditState = false;
3504
+ editorContext = null;
3453
3505
  constructor() {
3454
3506
  super('doc');
3455
3507
  this.props = new DocumentProps();
@@ -3483,11 +3535,11 @@ class DocumentElement extends BlockContainerElement {
3483
3535
  }
3484
3536
  };
3485
3537
  }
3486
- clone() {
3538
+ clone(data) {
3487
3539
  const clone = new DocumentElement();
3488
3540
  this.props.clone(clone.props);
3489
3541
  cloneElementBase(this, clone);
3490
- cloneChildren(this, clone, true);
3542
+ cloneChildren(this, clone, data);
3491
3543
  return clone;
3492
3544
  }
3493
3545
  /**
@@ -3523,7 +3575,7 @@ class DocumentElement extends BlockContainerElement {
3523
3575
  this.headerEditState = false;
3524
3576
  }
3525
3577
  ss.clear();
3526
- this.refreshView();
3578
+ //this.refreshView();
3527
3579
  }
3528
3580
  markPairs = [];
3529
3581
  /**
@@ -3798,7 +3850,7 @@ class InlineGroupInputElement extends InlineGroupElement {
3798
3850
  this.addEvent('ElementKeyDown', (evt) => {
3799
3851
  const { selectionState, sourceEvent, source } = evt;
3800
3852
  const { startControl, startOffset } = selectionState;
3801
- if (IsInSideDataElement(startControl, startOffset)) {
3853
+ if (IsInSideInlineGroupInputElement(startControl, startOffset)) {
3802
3854
  if (sourceEvent.shiftKey && sourceEvent.keyCode === 13) ;
3803
3855
  else if (!sourceEvent.shiftKey && sourceEvent.keyCode === 13) {
3804
3856
  evt.isCancel = true;
@@ -3807,7 +3859,7 @@ class InlineGroupInputElement extends InlineGroupElement {
3807
3859
  }, true);
3808
3860
  this.addEvent('GotCursor', (evt) => {
3809
3861
  const { startControl, startOffset } = evt.selectionState;
3810
- if (IsInSideDataElement(startControl, startOffset)) {
3862
+ if (IsInSideInlineGroupInputElement(startControl, startOffset)) {
3811
3863
  this.isFocused = true;
3812
3864
  }
3813
3865
  });
@@ -3904,11 +3956,13 @@ class DataElementInlineGroup extends InlineGroupInputElement {
3904
3956
  });
3905
3957
  this.addEvent('ElementMousemove', (evt) => {
3906
3958
  this.isMouseenter = true;
3907
- this.refreshView();
3959
+ evt.ctx.refreshView();
3960
+ //this.refreshView();
3908
3961
  });
3909
3962
  this.addEvent('ElementMouseLeave', (evt) => {
3910
3963
  this.isMouseenter = false;
3911
- this.refreshView();
3964
+ evt.ctx.refreshView();
3965
+ //this.refreshView()
3912
3966
  });
3913
3967
  this.addEvent('GotCursor', (evt) => {
3914
3968
  this.onGotCursorEvent(evt);
@@ -4048,21 +4102,10 @@ function getCurrOptions(ele) {
4048
4102
  class DataElementRenderObject extends InlineGroupRenderObject {
4049
4103
  exportSVG(event) {
4050
4104
  const node = super.exportSVG(event);
4051
- exportDecoratorHTML(event, this);
4105
+ exportDataEleDecoratorSVG$1(event, this);
4106
+ //绘制下划线
4052
4107
  if (this.element.props.underline) {
4053
- const { x, y } = event.relativePagePos;
4054
- event.highlights.push({
4055
- sel: 'path',
4056
- data: {
4057
- ns: 'http://www.w3.org/2000/svg',
4058
- attrs: {
4059
- d: `M${x} ${y + this.rect.height} L${x + this.rect.width} ${y + this.rect.height}`,
4060
- stroke: '#000',
4061
- fill: 'none',
4062
- 'stroke-width': 1
4063
- }
4064
- }
4065
- });
4108
+ renderUnderline(event, this);
4066
4109
  }
4067
4110
  renderErrorTip(event, this);
4068
4111
  return node;
@@ -4125,7 +4168,7 @@ class DataElementBaseFactory extends ElementFactory {
4125
4168
  * @param event
4126
4169
  * @param r
4127
4170
  */
4128
- function exportDecoratorHTML(event, r) {
4171
+ function exportDataEleDecoratorSVG$1(event, r) {
4129
4172
  if (event.mode === 'print') {
4130
4173
  return;
4131
4174
  }
@@ -4141,6 +4184,9 @@ function exportDecoratorHTML(event, r) {
4141
4184
  if (r.element.isFocused && options.dataEleFocusedBgColor) {
4142
4185
  color = options.dataEleFocusedBgColor;
4143
4186
  }
4187
+ if (!color) {
4188
+ return;
4189
+ }
4144
4190
  //绘制背景
4145
4191
  const bgX = event.relativePagePos.x;
4146
4192
  const bgY = event.relativePagePos.y;
@@ -4309,6 +4355,21 @@ function renderUnderWavyLine(event, r, color) {
4309
4355
  d += Array(Math.ceil(width / 3)).fill("3,0").join(' t ');
4310
4356
  const path = ElementUtil.createSvgPath({ d, fill: 'none', stroke: color });
4311
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
+ });
4312
4373
  }
4313
4374
 
4314
4375
  class DocumentBodyElement extends BlockContainerElement {
@@ -5586,7 +5647,7 @@ class TableUtil {
5586
5647
  if (startCell) {
5587
5648
  this.restoreCellMerge(startCell);
5588
5649
  ss.resetRange(startCell, 0);
5589
- startCell.refreshView();
5650
+ //startCell.refreshView();
5590
5651
  }
5591
5652
  }
5592
5653
  static restoreCellMerge(cell) {
@@ -5684,7 +5745,7 @@ class TableUtil {
5684
5745
  tb.setCellWidth(insertColIndex === colsCount ? insertColIndex - 1 : insertColIndex, insertColWidth - newColWidth);
5685
5746
  tb.insertCol(insertColIndex, newColWidth);
5686
5747
  tb.pubOnChange('self');
5687
- tb.refreshView();
5748
+ //tb.refreshView();
5688
5749
  }
5689
5750
  /**
5690
5751
  * 在指定位置插入行
@@ -5713,7 +5774,7 @@ class TableUtil {
5713
5774
  //新行插在第一行或者最后一行
5714
5775
  if (insertRowIndex === 0 || insertRowIndex === tb.length) {
5715
5776
  tb.addChild(newRow, insertRowIndex);
5716
- tb.refreshView();
5777
+ //tb.refreshView();
5717
5778
  return newRow;
5718
5779
  }
5719
5780
  const destRow = tb.getChild(insertRowIndex);
@@ -5732,7 +5793,7 @@ class TableUtil {
5732
5793
  newCell.props.hMerge = destCell.props.hMerge;
5733
5794
  }
5734
5795
  tb.addChild(newRow, insertRowIndex);
5735
- tb.refreshView();
5796
+ //tb.refreshView();
5736
5797
  return newRow;
5737
5798
  }
5738
5799
  /**
@@ -5794,14 +5855,14 @@ class TableUtil {
5794
5855
  const nextCell = this.getNextCell(ss);
5795
5856
  if (nextCell) {
5796
5857
  ss.resetRange(nextCell, 0);
5797
- nextCell.refreshView();
5858
+ //nextCell.refreshView();
5798
5859
  return;
5799
5860
  }
5800
5861
  //新增行,并定位
5801
5862
  const tb = ElementUtil.getParentByType(startCell, TableElement);
5802
5863
  const newRow = this.insertNewRow(tb, rowIndex + 1);
5803
5864
  ss.resetRange(newRow, 0);
5804
- newRow.refreshView();
5865
+ //newRow.refreshView();
5805
5866
  }
5806
5867
  /**
5807
5868
  * 获取下一个可定位的单元格
@@ -5843,7 +5904,7 @@ class TableUtil {
5843
5904
  console.warn('当前位置不存在表格');
5844
5905
  return;
5845
5906
  }
5846
- tb.parent.refreshView();
5907
+ //tb.parent.refreshView();
5847
5908
  tb.remove();
5848
5909
  }
5849
5910
  /**
@@ -5864,7 +5925,7 @@ class TableUtil {
5864
5925
  else if (tc.props.diagonal === diagonal) {
5865
5926
  tc.props.diagonal = null;
5866
5927
  }
5867
- tc.refreshView();
5928
+ //tc.refreshView();
5868
5929
  }
5869
5930
  /**
5870
5931
  * 将当前表格截断成两个相邻的表格
@@ -6474,11 +6535,11 @@ class CommContentBaseElement extends BlockContainerElement {
6474
6535
  super(type);
6475
6536
  this.addEvent('GotCursor', () => {
6476
6537
  this.focus = true;
6477
- this.refreshView();
6538
+ //this.refreshView()
6478
6539
  });
6479
6540
  this.addEvent('LostCursor', () => {
6480
6541
  this.focus = false;
6481
- this.refreshView();
6542
+ //this.refreshView()
6482
6543
  });
6483
6544
  }
6484
6545
  }
@@ -8687,11 +8748,13 @@ class DataElementGroupElement extends InlineGroupInputElement {
8687
8748
  this.props = new DataElementGroupProps();
8688
8749
  this.addEvent('ElementMousemove', (evt) => {
8689
8750
  this.isMouseenter = true;
8690
- this.refreshView();
8751
+ //this.refreshView();
8752
+ evt.ctx.refreshView();
8691
8753
  });
8692
8754
  this.addEvent('ElementMouseLeave', (evt) => {
8693
8755
  this.isMouseenter = false;
8694
- this.refreshView();
8756
+ evt.ctx.refreshView();
8757
+ //this.refreshView();
8695
8758
  });
8696
8759
  }
8697
8760
  setValue(val) {
@@ -8752,6 +8815,15 @@ class DataElementGroupRenderObject extends InlineGroupRenderObject {
8752
8815
  }
8753
8816
  return cloneRender;
8754
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
+ }
8755
8827
  }
8756
8828
  class DataElementGroupFactory extends DataElementBaseFactory {
8757
8829
  match(type) {
@@ -8790,6 +8862,35 @@ function IsInSideDataGroup(control, offset) {
8790
8862
  }
8791
8863
  function validateDataGroup(control) {
8792
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));
8793
8894
  }
8794
8895
 
8795
8896
  class DataElementImage extends DataElementLeaf {
@@ -9145,11 +9246,13 @@ class DataContainerElement extends BlockContainerElement {
9145
9246
  this.props = new DataContainerProps();
9146
9247
  this.addEvent('GotCursor', (evt) => {
9147
9248
  this.isFocused = true;
9148
- this.refreshView();
9249
+ evt.ctx.refreshView();
9250
+ //this.refreshView();
9149
9251
  });
9150
9252
  this.addEvent('LostCursor', (evt) => {
9151
9253
  this.isFocused = false;
9152
- this.refreshView();
9254
+ evt.ctx.refreshView();
9255
+ //this.refreshView();
9153
9256
  });
9154
9257
  }
9155
9258
  createRenderObject() {
@@ -9264,19 +9367,23 @@ class DocumentBodyPartElement extends BlockContainerElement {
9264
9367
  super('body-part');
9265
9368
  this.addEvent('ElementMousemove', (evt) => {
9266
9369
  this.isMouseenter = true;
9267
- this.refreshView();
9370
+ evt.ctx.refreshView();
9371
+ //this.refreshView();
9268
9372
  });
9269
9373
  this.addEvent('ElementMouseLeave', (evt) => {
9270
9374
  this.isMouseenter = false;
9271
- this.refreshView();
9375
+ evt.ctx.refreshView();
9376
+ //this.refreshView();
9272
9377
  });
9273
9378
  this.addEvent('GotCursor', (evt) => {
9274
9379
  this.isFocused = true;
9275
- this.refreshView();
9380
+ evt.ctx.refreshView();
9381
+ //this.refreshView();
9276
9382
  });
9277
9383
  this.addEvent('LostCursor', (evt) => {
9278
9384
  this.isFocused = false;
9279
- this.refreshView();
9385
+ evt.ctx.refreshView();
9386
+ //this.refreshView();
9280
9387
  });
9281
9388
  this.props = new BodyPartProps();
9282
9389
  }
@@ -10190,7 +10297,7 @@ class TableSplitCell {
10190
10297
  }
10191
10298
  }
10192
10299
  tb.pubOnChange('self');
10193
- tb.refreshView();
10300
+ //tb.refreshView();
10194
10301
  }
10195
10302
  /**
10196
10303
  * 拆分合并的单元格
@@ -10297,7 +10404,7 @@ class TableSplitCell {
10297
10404
  }
10298
10405
  }
10299
10406
  tb.pubOnChange('to-child');
10300
- tb.refreshView();
10407
+ //tb.refreshView();
10301
10408
  return {
10302
10409
  startColIndex: focusCellIndex,
10303
10410
  endColIndex: focusCellIndex + cols - 1
@@ -10327,7 +10434,7 @@ class TableSplitCell {
10327
10434
  TableUtil.restoreCell(ss);
10328
10435
  this.applyHorSplitColumnCurrPatchPacks(tb, focusRowIndex, focusCellIndex, rows, currPacks);
10329
10436
  tb.pubOnChange('to-child');
10330
- tb.refreshView();
10437
+ //tb.refreshView();
10331
10438
  return {
10332
10439
  startColIndex: focusCellIndex,
10333
10440
  endColIndex: this.getPrepareNewColCounts(otherPacks, hMergeCols)
@@ -10695,6 +10802,9 @@ class ElementSerialize {
10695
10802
  if (element instanceof PSymbolElement) {
10696
10803
  return '\n';
10697
10804
  }
10805
+ if (element instanceof BreakElement) {
10806
+ return '\n';
10807
+ }
10698
10808
  if (element instanceof BranchElement) {
10699
10809
  const items = [];
10700
10810
  for (let i = 0; i < element.length; i++) {
@@ -13243,6 +13353,7 @@ class EditorContext {
13243
13353
  //suggestionsList: Array<ISuggestionData> = [];
13244
13354
  //currentSuggestionsList: Array<ISuggestionData> = [];
13245
13355
  suggestions = new DocInputSuggestions();
13356
+ //editor->this->others
13246
13357
  onKeyDownEvent = new Subject();
13247
13358
  constructor(selectionState, viewOptions) {
13248
13359
  this.selectionState = selectionState;
@@ -13252,6 +13363,16 @@ class EditorContext {
13252
13363
  this.syncRefresh?.();
13253
13364
  });
13254
13365
  }
13366
+ /**
13367
+ * 刷新视图
13368
+ */
13369
+ refreshView() {
13370
+ this.syncRefresh?.();
13371
+ }
13372
+ /**
13373
+ * 编辑器文档刷新后回调(DOM渲染完成后回调)
13374
+ * @param cb
13375
+ */
13255
13376
  onNextView(cb) {
13256
13377
  if (!cb) {
13257
13378
  this.nextViewFns.length = 0;
@@ -13266,25 +13387,27 @@ class EditorContext {
13266
13387
  set document(value) {
13267
13388
  this.clearPrevDocCb?.();
13268
13389
  this._document = value;
13390
+ this._document['editorContext'] = this;
13269
13391
  // this.refSub = this._document.refreshSubject.subscribe((data) => {
13270
13392
  // data = data ?? 'content';
13271
13393
  // this.isDirty = this.isDirty || data === 'content';
13272
13394
  // this.syncRefresh?.(data);
13273
13395
  // });
13274
- const docRefreshSub = this._document.refreshSubject.subscribe(() => {
13275
- this.syncRefresh?.();
13276
- });
13396
+ // const docRefreshSub = this._document.refreshSubject.subscribe(() => {
13397
+ // this.syncRefresh?.();
13398
+ // });
13277
13399
  const docChangedSub = this._document.onChangeSubject.subscribe(() => {
13278
13400
  this.syncRefresh?.();
13279
13401
  });
13280
13402
  this.syncRefresh();
13281
13403
  this.clearPrevDocCb = () => {
13282
- docRefreshSub.unsubscribe();
13404
+ //docRefreshSub.unsubscribe();
13283
13405
  docChangedSub.unsubscribe();
13284
13406
  if (this._document) {
13285
13407
  this.selectionState?.renderContainer?.destroy();
13286
13408
  this.clear();
13287
13409
  this._document.destroy();
13410
+ this._document.editorContext = null;
13288
13411
  clearTraces(this._document);
13289
13412
  }
13290
13413
  this.clearPrevDocCb = null;
@@ -13295,6 +13418,7 @@ class EditorContext {
13295
13418
  this.selectionState.clear();
13296
13419
  this.isDirty = false;
13297
13420
  this.suggestions.clear();
13421
+ this.currentOpsLog.length = 0;
13298
13422
  //this.clearEleDepMaps();
13299
13423
  }
13300
13424
  get defaultCtx() {
@@ -13337,6 +13461,7 @@ class EditorContext {
13337
13461
  //this.ele_types_handlers.length = 0;
13338
13462
  //this.imageLoader.clear();
13339
13463
  this._document = null;
13464
+ this.currentOpsLog.length = 0;
13340
13465
  this.suggestions.destroy();
13341
13466
  }
13342
13467
  /**
@@ -13359,11 +13484,13 @@ class EditorContext {
13359
13484
  oldDataElement.remove();
13360
13485
  }
13361
13486
  currentRefreshType = null;
13487
+ //当前操作日志
13488
+ currentOpsLog = [];
13362
13489
  get refreshType() {
13363
- if (!this._document) {
13490
+ if (!this._document || this._document.modifyFlag === ModifyFlag.None) {
13364
13491
  return null;
13365
13492
  }
13366
- return this._document.modifyFlag === ModifyFlag.None ? 'appearance' : 'content';
13493
+ return this._document.modifyFlag === ModifyFlag.Track ? 'appearance' : 'content';
13367
13494
  }
13368
13495
  adaptiveScale() {
13369
13496
  if (this.viewOptions.pageLayoutMode !== 'fit-page') {
@@ -13639,6 +13766,18 @@ class DocumentContext {
13639
13766
  }
13640
13767
  return arr;
13641
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
+ }
13642
13781
  }
13643
13782
 
13644
13783
  class DynamicExecute {
@@ -15169,6 +15308,83 @@ class DocumentArrange {
15169
15308
  tmp.props.lineHeight = this.options.defaultLineHeight;
15170
15309
  return tmp;
15171
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
+ }
15172
15388
  }
15173
15389
 
15174
15390
  /**
@@ -15196,7 +15412,12 @@ class DocumentPaginator {
15196
15412
  this.docCtx.selectionState.renderContainer = this.docContainer;
15197
15413
  this.docContainer.rect.width = this.viewOptions.docPageSettings.width;
15198
15414
  const newMeasure = new DocumentArrange(this.docCtx, this.renderContext, this.seo);
15199
- this.docPages = newMeasure.measureDoc();
15415
+ if (newMeasure.patchParagraph()) {
15416
+ newMeasure.fastPatchReset(this.docPages);
15417
+ }
15418
+ else {
15419
+ this.docPages = newMeasure.measureDoc();
15420
+ }
15200
15421
  this.adjustTipLayoutWidth();
15201
15422
  this.layoutPages();
15202
15423
  }
@@ -20666,7 +20887,7 @@ class DocEditor {
20666
20887
  },
20667
20888
  on: {
20668
20889
  resize: () => {
20669
- console.log('resize');
20890
+ //console.log('resize')
20670
20891
  }
20671
20892
  }
20672
20893
  },
@@ -20684,10 +20905,13 @@ class DocEditor {
20684
20905
  const target = evt.target;
20685
20906
  this.viewOptions.pageOffset.x = target.scrollLeft;
20686
20907
  this.viewOptions.pageOffset.y = target.scrollTop;
20687
- this.onChange();
20908
+ //this.onChange();
20909
+ //滚动的时候,不需要重新计算元素
20910
+ //只需要重新渲染vnode即可
20911
+ this.onPatchVNodeSubject.next();
20688
20912
  },
20689
20913
  resize: () => {
20690
- console.log('resize');
20914
+ //console.log('resize')
20691
20915
  }
20692
20916
  },
20693
20917
  hook: {
@@ -20750,12 +20974,12 @@ class DocEditor {
20750
20974
  this.refreshDocument();
20751
20975
  this.flushTask = null;
20752
20976
  //回调
20753
- let cbs = [...this.docCtx.nextViewFns];
20754
- if (cbs.length) {
20755
- this.docCtx.onNextView(null);
20756
- cbs.forEach(cb => cb());
20757
- return;
20758
- }
20977
+ // let cbs = [...this.docCtx.nextViewFns];
20978
+ // if (cbs.length) {
20979
+ // this.docCtx.onNextView(null);
20980
+ // cbs.forEach(cb => cb());
20981
+ // return;
20982
+ // }
20759
20983
  this.historyMange.generateTrack();
20760
20984
  this.historyMange.generateSelectionLog();
20761
20985
  };
@@ -20805,9 +21029,9 @@ class DocEditor {
20805
21029
  * @returns
20806
21030
  */
20807
21031
  refreshDocument() {
20808
- if (this.docCtx.refreshType === null) {
20809
- return;
20810
- }
21032
+ // if (this.docCtx.refreshType === null) {
21033
+ // return;
21034
+ // }
20811
21035
  this.docCtx.currentRefreshType = this.docCtx.refreshType;
20812
21036
  if (this.docCtx.currentRefreshType) {
20813
21037
  this.onBeforeRefreshDocument.next();
@@ -21688,6 +21912,7 @@ class DocEditor {
21688
21912
  this.vNodeDocContent = this.nodePatch(this.svgContainer, vNode);
21689
21913
  }
21690
21914
  this.afterNodePatch.next();
21915
+ this.onNextView();
21691
21916
  //console.timeEnd('patch');
21692
21917
  };
21693
21918
  render();
@@ -21698,6 +21923,13 @@ class DocEditor {
21698
21923
  render();
21699
21924
  }, 32));
21700
21925
  }
21926
+ onNextView() {
21927
+ let cbs = [...this.docCtx.nextViewFns];
21928
+ if (cbs.length) {
21929
+ this.docCtx.onNextView();
21930
+ cbs.forEach(cb => cb());
21931
+ }
21932
+ }
21701
21933
  /**
21702
21934
  * 留痕提示的容器框,用于渲染后重新计算纵向位置
21703
21935
  * @private
@@ -22053,7 +22285,7 @@ class DocEditor {
22053
22285
  rule.setRuleOptions({ width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft });
22054
22286
  }
22055
22287
  version() {
22056
- return "2.2.13";
22288
+ return "2.2.15";
22057
22289
  }
22058
22290
  switchPageHeaderEditor() {
22059
22291
  this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);
@@ -22136,6 +22368,7 @@ class DocEditor {
22136
22368
  readDocChangeLog() {
22137
22369
  //获取文档的变更日志
22138
22370
  const ops = generatePatch(this.docCtx.document, false);
22371
+ this.docCtx.currentOpsLog = [...ops];
22139
22372
  //1.处理批注删除不对称的问题
22140
22373
  for (let i = 0; i < ops.length; i++) {
22141
22374
  const op = ops[i];
@@ -22391,7 +22624,7 @@ class DocumentCombine {
22391
22624
  * 用于合并文档计算
22392
22625
  */
22393
22626
  load() {
22394
- const template = this.mainTemplate.clone();
22627
+ const template = this.mainTemplate.clone(true);
22395
22628
  const body = template.find((item) => item instanceof DocumentBodyElement);
22396
22629
  body.clearItems();
22397
22630
  for (let i = 0; i < this.docParts.length; i++) {
@@ -27753,13 +27986,13 @@ const onTableContextmenu = (evt) => {
27753
27986
  evt.menus.push({
27754
27987
  caption: '上方插入段落', click: () => {
27755
27988
  currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex());
27756
- currentElement.refreshView();
27989
+ //currentElement.refreshView()
27757
27990
  }
27758
27991
  });
27759
27992
  evt.menus.push({
27760
27993
  caption: '下方插入段落', click: () => {
27761
27994
  currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex() + 1);
27762
- currentElement.refreshView();
27995
+ //currentElement.refreshView()
27763
27996
  }
27764
27997
  });
27765
27998
  evt.menus = removeDuplicatesEvent(evt.menus);
@@ -27775,5 +28008,5 @@ function removeDuplicatesEvent(events) {
27775
28008
  return arr;
27776
28009
  }
27777
28010
 
27778
- 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 };
27779
28012
  //# sourceMappingURL=index.js.map