@windoc/core 0.3.20 → 0.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var version = "0.3.20";
2
+ var version = "0.3.21";
3
3
 
4
4
  // src/dataset/enum/Common.ts
5
5
  var MaxHeightRatio = /* @__PURE__ */ ((MaxHeightRatio2) => {
@@ -7324,6 +7324,71 @@ function mousemove(evt, host) {
7324
7324
  });
7325
7325
  }
7326
7326
 
7327
+ // src/core/event/handlers/keydown/tableSplit.ts
7328
+ function moveEmptySplitTdCursorToParent(host) {
7329
+ const draw = host.getDraw();
7330
+ const position = draw.getPosition();
7331
+ const positionContext = position.getPositionContext();
7332
+ const cursorPosition = position.getCursorPosition();
7333
+ if (!positionContext.isTable || !cursorPosition || cursorPosition.index !== 0) {
7334
+ return null;
7335
+ }
7336
+ const elementList = draw.getOriginalElementList();
7337
+ const resolved = draw.resolveTableCellContext(elementList, positionContext);
7338
+ if (!resolved) return null;
7339
+ const currentTr = resolved.element.trList?.[resolved.trIndex];
7340
+ const currentTd = resolved.td;
7341
+ if (!currentTr?.splitParentId || currentTd.value.length !== 1 || currentTd.value[0]?.value !== ZERO) {
7342
+ return null;
7343
+ }
7344
+ const pagingId = resolved.element.pagingId;
7345
+ if (!pagingId) return null;
7346
+ let parentTarget;
7347
+ for (let i = resolved.index; i >= 0; i--) {
7348
+ const tableElement = elementList[i];
7349
+ if (tableElement.type !== "table" /* TABLE */) continue;
7350
+ if (tableElement.pagingId !== pagingId) {
7351
+ if (i < resolved.index) break;
7352
+ continue;
7353
+ }
7354
+ const parentTrIndex = tableElement.trList?.findIndex((tr) => tr.id === currentTr.splitParentId) ?? -1;
7355
+ if (parentTrIndex < 0) continue;
7356
+ const parentTr2 = tableElement.trList[parentTrIndex];
7357
+ const parentTdIndex = parentTr2.tdList.findIndex(
7358
+ (td) => td.colIndex === currentTd.colIndex
7359
+ );
7360
+ if (parentTdIndex < 0) return null;
7361
+ parentTarget = {
7362
+ tableId: tableElement.id,
7363
+ tableIndex: i,
7364
+ trIndex: parentTrIndex,
7365
+ tdIndex: parentTdIndex
7366
+ };
7367
+ break;
7368
+ }
7369
+ if (!parentTarget) return null;
7370
+ const parentElement = elementList[parentTarget.tableIndex];
7371
+ const parentTr = parentElement.trList[parentTarget.trIndex];
7372
+ const parentTd = parentTr.tdList[parentTarget.tdIndex];
7373
+ if (!currentTd.splitSyntheticLeadingZero) {
7374
+ currentTd.value.splice(0, 1);
7375
+ currentTd.rowList = void 0;
7376
+ currentTd.positionList = void 0;
7377
+ }
7378
+ const curIndex = Math.max(parentTd.value.length - 1, 0);
7379
+ position.setPositionContext({
7380
+ isTable: true,
7381
+ index: parentTarget.tableIndex,
7382
+ trIndex: parentTarget.trIndex,
7383
+ tdIndex: parentTarget.tdIndex,
7384
+ tdId: parentTd.id,
7385
+ trId: parentTr.id,
7386
+ tableId: parentTarget.tableId
7387
+ });
7388
+ draw.getRange().setRange(curIndex, curIndex);
7389
+ return curIndex;
7390
+ }
7391
+
7327
7392
  // src/core/event/handlers/keydown/backspace.ts
7328
7393
  function backspaceHideElement(host) {
7329
7394
  const draw = host.getDraw();
@@ -7365,6 +7430,18 @@ function backspace(evt, host) {
7365
7430
  if (draw.isReadonly()) return;
7366
7431
  const rangeManager = draw.getRange();
7367
7432
  if (!rangeManager.getIsCanInput()) return;
7433
+ if (rangeManager.getIsCollapsed()) {
7434
+ const splitParentIndex = moveEmptySplitTdCursorToParent(host);
7435
+ if (splitParentIndex !== null) {
7436
+ draw.getGlobalEvent().setCanvasEventAbility();
7437
+ draw.render({
7438
+ curIndex: splitParentIndex,
7439
+ isSubmitHistory: false
7440
+ });
7441
+ evt.preventDefault();
7442
+ return;
7443
+ }
7444
+ }
7368
7445
  if (rangeManager.getIsCollapsed()) {
7369
7446
  backspaceHideElement(host);
7370
7447
  }
@@ -7510,6 +7587,18 @@ function del(evt, host) {
7510
7587
  if (draw.isReadonly()) return;
7511
7588
  const rangeManager = draw.getRange();
7512
7589
  if (!rangeManager.getIsCanInput()) return;
7590
+ if (rangeManager.getIsCollapsed()) {
7591
+ const splitParentIndex = moveEmptySplitTdCursorToParent(host);
7592
+ if (splitParentIndex !== null) {
7593
+ draw.getGlobalEvent().setCanvasEventAbility();
7594
+ draw.render({
7595
+ curIndex: splitParentIndex,
7596
+ isSubmitHistory: false
7597
+ });
7598
+ evt.preventDefault();
7599
+ return;
7600
+ }
7601
+ }
7513
7602
  const { startIndex, endIndex, isCrossRowCol } = rangeManager.getRange();
7514
7603
  const elementList = draw.getElementList();
7515
7604
  const control = draw.getControl();
@@ -9205,8 +9294,7 @@ var Position = class {
9205
9294
  return this.floatPositionList;
9206
9295
  }
9207
9296
  getTablePositionList(sourceElementList) {
9208
- const { index, trIndex, tdIndex } = this.positionContext;
9209
- return sourceElementList[index].trList[trIndex].tdList[tdIndex].positionList || [];
9297
+ return this.draw.resolveTableCellContext(sourceElementList, this.positionContext)?.td.positionList || [];
9210
9298
  }
9211
9299
  getPositionList() {
9212
9300
  return this.positionContext.isTable ? this.getTablePositionList(this.draw.getOriginalElementList()) : this.getOriginalPositionList();
@@ -9860,6 +9948,46 @@ var Position = class {
9860
9948
  positionResult.index = newIndex;
9861
9949
  }
9862
9950
  }
9951
+ if (positionResult.isTable && positionResult.trId != null) {
9952
+ const elementList = this.draw.getOriginalMainElementList();
9953
+ const tableElement = elementList[positionResult.index];
9954
+ if (tableElement?.trList) {
9955
+ const matchedTr = tableElement.trList.find(
9956
+ (r) => r.id === positionResult.trId
9957
+ );
9958
+ if (matchedTr?.splitRootId) {
9959
+ const matchedTd = matchedTr.tdList[positionResult.tdIndex];
9960
+ if (matchedTd && matchedTd.splitSyntheticLeadingZero && matchedTd.value.length === 1 && matchedTd.value[0].value === ZERO) {
9961
+ const pagingId = tableElement.pagingId;
9962
+ if (pagingId) {
9963
+ for (let i = positionResult.index - 1; i >= 0; i--) {
9964
+ const prevElement = elementList[i];
9965
+ if (prevElement.pagingId !== pagingId) break;
9966
+ const rootTr = prevElement.trList?.find(
9967
+ (r) => r.id === matchedTr.splitRootId
9968
+ );
9969
+ if (rootTr) {
9970
+ const rootTd = rootTr.tdList.find(
9971
+ (t) => t.colIndex === matchedTd.colIndex
9972
+ );
9973
+ const isRootTdEmpty = !!rootTd && rootTd.value.length === 1 && rootTd.value[0].value === ZERO;
9974
+ if (rootTd && isRootTdEmpty) {
9975
+ positionResult.index = i;
9976
+ positionResult.trIndex = prevElement.trList.indexOf(rootTr);
9977
+ positionResult.tdIndex = rootTr.tdList.indexOf(rootTd);
9978
+ positionResult.trId = rootTr.id;
9979
+ positionResult.tdId = rootTd.id;
9980
+ positionResult.tableId = prevElement.id;
9981
+ positionResult.tdValueIndex = 0;
9982
+ }
9983
+ break;
9984
+ }
9985
+ }
9986
+ }
9987
+ }
9988
+ }
9989
+ }
9990
+ }
9863
9991
  const {
9864
9992
  index,
9865
9993
  isCheckbox,
@@ -11576,13 +11704,18 @@ var TableParticle = class {
11576
11704
  ctx.beginPath();
11577
11705
  const x = Math.round(startX);
11578
11706
  const y = Math.round(startY);
11707
+ const rx = Math.round(startX + width);
11708
+ const ry = Math.round(startY + height);
11579
11709
  ctx.translate(0.5, 0.5);
11580
11710
  if (isDrawFullBorder) {
11581
- ctx.rect(x, y, width, height);
11711
+ ctx.rect(x, y, rx - x, ry - y);
11712
+ } else if (borderExternalWidth) {
11713
+ ctx.moveTo(x, ry);
11714
+ ctx.lineTo(x, y);
11715
+ ctx.lineTo(rx, y);
11582
11716
  } else {
11583
- ctx.moveTo(x, y + height);
11717
+ ctx.moveTo(x, ry);
11584
11718
  ctx.lineTo(x, y);
11585
- ctx.lineTo(x + width, y);
11586
11719
  }
11587
11720
  ctx.stroke();
11588
11721
  if (borderExternalWidth) {
@@ -11590,20 +11723,32 @@ var TableParticle = class {
11590
11723
  }
11591
11724
  ctx.translate(-0.5, -0.5);
11592
11725
  }
11726
+ _drawHorizontalBorder(payload) {
11727
+ const { ctx, startX, endX, y } = payload;
11728
+ const x = Math.round(startX);
11729
+ const rx = Math.round(endX);
11730
+ const ty = Math.round(y);
11731
+ ctx.beginPath();
11732
+ ctx.translate(0.5, 0.5);
11733
+ ctx.moveTo(x, ty);
11734
+ ctx.lineTo(rx, ty);
11735
+ ctx.stroke();
11736
+ ctx.translate(-0.5, -0.5);
11737
+ }
11593
11738
  _drawSlash(ctx, td, startX, startY) {
11594
11739
  const { scale } = this.options;
11595
11740
  ctx.save();
11596
- const width = td.width * scale;
11597
- const height = td.height * scale;
11598
- const x = Math.round(td.x * scale + startX);
11599
- const y = Math.round(td.y * scale + startY);
11741
+ const lx = Math.round(td.x * scale + startX);
11742
+ const ty = Math.round(td.y * scale + startY);
11743
+ const rx = Math.round((td.x + td.width) * scale + startX);
11744
+ const by = Math.round((td.y + td.height) * scale + startY);
11600
11745
  if (td.slashTypes?.includes("forward" /* FORWARD */)) {
11601
- ctx.moveTo(x + width, y);
11602
- ctx.lineTo(x, y + height);
11746
+ ctx.moveTo(rx, ty);
11747
+ ctx.lineTo(lx, by);
11603
11748
  }
11604
11749
  if (td.slashTypes?.includes("back" /* BACK */)) {
11605
- ctx.moveTo(x, y);
11606
- ctx.lineTo(x + width, y + height);
11750
+ ctx.moveTo(lx, ty);
11751
+ ctx.lineTo(rx, by);
11607
11752
  }
11608
11753
  ctx.stroke();
11609
11754
  ctx.restore();
@@ -11644,6 +11789,8 @@ var TableParticle = class {
11644
11789
  isDrawFullBorder: isExternalBorderType
11645
11790
  });
11646
11791
  }
11792
+ const firstTr = trList[0];
11793
+ const lastTr = trList[trList.length - 1];
11647
11794
  for (let t = 0; t < trList.length; t++) {
11648
11795
  const tr = trList[t];
11649
11796
  for (let d = 0; d < tr.tdList.length; d++) {
@@ -11654,10 +11801,10 @@ var TableParticle = class {
11654
11801
  if (!td.borderTypes?.length && (isEmptyBorderType || isExternalBorderType)) {
11655
11802
  continue;
11656
11803
  }
11657
- const width = td.width * scale;
11658
- const height = td.height * scale;
11659
- const x = Math.round(td.x * scale + startX + width);
11660
- const y = Math.round(td.y * scale + startY);
11804
+ const lx = Math.round(td.x * scale + startX);
11805
+ const ty = Math.round(td.y * scale + startY);
11806
+ const rx = Math.round((td.x + td.width) * scale + startX);
11807
+ const by = Math.round((td.y + td.height) * scale + startY);
11661
11808
  if (td.borderColor) {
11662
11809
  ctx.save();
11663
11810
  ctx.strokeStyle = td.borderColor;
@@ -11665,29 +11812,33 @@ var TableParticle = class {
11665
11812
  ctx.translate(0.5, 0.5);
11666
11813
  ctx.beginPath();
11667
11814
  if (td.borderTypes?.includes("top" /* TOP */)) {
11668
- ctx.moveTo(x - width, y);
11669
- ctx.lineTo(x, y);
11815
+ ctx.moveTo(lx, ty);
11816
+ ctx.lineTo(rx, ty);
11670
11817
  ctx.stroke();
11671
11818
  }
11672
11819
  if (td.borderTypes?.includes("right" /* RIGHT */)) {
11673
- ctx.moveTo(x, y);
11674
- ctx.lineTo(x, y + height);
11820
+ ctx.moveTo(rx, ty);
11821
+ ctx.lineTo(rx, by);
11675
11822
  ctx.stroke();
11676
11823
  }
11677
11824
  if (td.borderTypes?.includes("bottom" /* BOTTOM */)) {
11678
- ctx.moveTo(x, y + height);
11679
- ctx.lineTo(x - width, y + height);
11825
+ ctx.moveTo(rx, by);
11826
+ ctx.lineTo(lx, by);
11680
11827
  ctx.stroke();
11681
11828
  }
11682
11829
  if (td.borderTypes?.includes("left" /* LEFT */)) {
11683
- ctx.moveTo(x - width, y);
11684
- ctx.lineTo(x - width, y + height);
11830
+ ctx.moveTo(lx, ty);
11831
+ ctx.lineTo(lx, by);
11685
11832
  ctx.stroke();
11686
11833
  }
11687
11834
  if (!isEmptyBorderType && !isExternalBorderType) {
11835
+ if (td.rowIndex === 0 && !borderExternalWidth) {
11836
+ ctx.moveTo(lx, ty);
11837
+ ctx.lineTo(rx, ty);
11838
+ }
11688
11839
  if (!isInternalBorderType || td.colIndex + td.colspan < colgroup.length) {
11689
- ctx.moveTo(x, y);
11690
- ctx.lineTo(x, y + height);
11840
+ ctx.moveTo(rx, ty);
11841
+ ctx.lineTo(rx, by);
11691
11842
  if (borderExternalWidth && borderExternalWidth !== borderWidth && td.colIndex + td.colspan === colgroup.length) {
11692
11843
  const lineWidth = ctx.lineWidth;
11693
11844
  ctx.lineWidth = borderExternalWidth * scale;
@@ -11697,13 +11848,14 @@ var TableParticle = class {
11697
11848
  }
11698
11849
  }
11699
11850
  if (!isInternalBorderType || td.rowIndex + td.rowspan < trList.length) {
11700
- const isSetExternalBottomBorder = borderExternalWidth && borderExternalWidth !== borderWidth && td.rowIndex + td.rowspan === trList.length;
11851
+ const isBottomEdge = td.rowIndex + td.rowspan === trList.length;
11852
+ const isSetExternalBottomBorder = borderExternalWidth && borderExternalWidth !== borderWidth && isBottomEdge;
11701
11853
  if (isSetExternalBottomBorder) {
11702
11854
  ctx.stroke();
11703
11855
  ctx.beginPath();
11704
11856
  }
11705
- ctx.moveTo(x, y + height);
11706
- ctx.lineTo(x - width, y + height);
11857
+ ctx.moveTo(rx, by);
11858
+ ctx.lineTo(lx, by);
11707
11859
  if (isSetExternalBottomBorder) {
11708
11860
  const lineWidth = ctx.lineWidth;
11709
11861
  ctx.lineWidth = borderExternalWidth * scale;
@@ -11719,12 +11871,12 @@ var TableParticle = class {
11719
11871
  ctx.translate(0.5, 0.5);
11720
11872
  ctx.beginPath();
11721
11873
  if (td.rowIndex === 0) {
11722
- ctx.moveTo(x - width, y);
11723
- ctx.lineTo(x, y);
11874
+ ctx.moveTo(lx, ty);
11875
+ ctx.lineTo(rx, ty);
11724
11876
  }
11725
11877
  if (td.colIndex === 0) {
11726
- ctx.moveTo(x - width, y);
11727
- ctx.lineTo(x - width, y + height);
11878
+ ctx.moveTo(lx, ty);
11879
+ ctx.lineTo(lx, by);
11728
11880
  }
11729
11881
  if (td.rowIndex === 0 || td.colIndex === 0) {
11730
11882
  ctx.stroke();
@@ -11736,6 +11888,22 @@ var TableParticle = class {
11736
11888
  }
11737
11889
  }
11738
11890
  }
11891
+ if (!isEmptyBorderType && !isExternalBorderType && !borderExternalWidth && firstTr?.splitBoundaryTop) {
11892
+ this._drawHorizontalBorder({
11893
+ ctx,
11894
+ startX,
11895
+ endX: startX + tableWidth,
11896
+ y: startY
11897
+ });
11898
+ }
11899
+ if (!isEmptyBorderType && !isExternalBorderType && !borderExternalWidth && lastTr?.splitBoundaryBottom) {
11900
+ this._drawHorizontalBorder({
11901
+ ctx,
11902
+ startX,
11903
+ endX: startX + tableWidth,
11904
+ y: startY + tableHeight
11905
+ });
11906
+ }
11739
11907
  ctx.restore();
11740
11908
  }
11741
11909
  _drawBackgroundColor(ctx, element, startX, startY) {
@@ -11748,12 +11916,12 @@ var TableParticle = class {
11748
11916
  const td = tr.tdList[d];
11749
11917
  if (!td.backgroundColor) continue;
11750
11918
  ctx.save();
11751
- const width = td.width * scale;
11752
- const height = td.height * scale;
11753
- const x = Math.round(td.x * scale + startX);
11754
- const y = Math.round(td.y * scale + startY);
11919
+ const lx = Math.round(td.x * scale + startX);
11920
+ const ty = Math.round(td.y * scale + startY);
11921
+ const rx = Math.round((td.x + td.width) * scale + startX);
11922
+ const by = Math.round((td.y + td.height) * scale + startY);
11755
11923
  ctx.fillStyle = td.backgroundColor;
11756
- ctx.fillRect(x, y, width, height);
11924
+ ctx.fillRect(lx, ty, rx - lx, by - ty);
11757
11925
  ctx.restore();
11758
11926
  }
11759
11927
  }
@@ -15163,7 +15331,12 @@ var Control = class {
15163
15331
  let element;
15164
15332
  const newIndex = position.isTable ? tdValueIndex : index;
15165
15333
  if (position.isTable) {
15166
- elementList = elementList[index].trList[trIndex].tdList[tdIndex].value;
15334
+ elementList = this.draw.resolveTableCellContext(elementList, {
15335
+ isTable: true,
15336
+ index,
15337
+ trIndex,
15338
+ tdIndex
15339
+ })?.td.value || [];
15167
15340
  element = elementList[tdValueIndex];
15168
15341
  } else {
15169
15342
  element = elementList[index];
@@ -20416,6 +20589,7 @@ var Draw = class {
20416
20589
  this.intersectionPageNo = 0;
20417
20590
  this.lazyRenderIntersectionObserver = null;
20418
20591
  this.printModeData = null;
20592
+ this.pendingTableCursorIndex = void 0;
20419
20593
  if (this.mode === "print" /* PRINT */) {
20420
20594
  this.setPrintData();
20421
20595
  }
@@ -20577,9 +20751,8 @@ var Draw = class {
20577
20751
  getContextInnerWidth() {
20578
20752
  const positionContext = this.position.getPositionContext();
20579
20753
  if (positionContext.isTable) {
20580
- const { index, trIndex, tdIndex } = positionContext;
20581
- const elementList = this.getOriginalElementList();
20582
- const td = elementList[index].trList[trIndex].tdList[tdIndex];
20754
+ const td = this.resolveTableCellContext(this.getOriginalElementList())?.td;
20755
+ if (!td) return this.getColumnWidth() / this.options.scale;
20583
20756
  const tdPadding = this.getTdPadding();
20584
20757
  return td.width - tdPadding[1] - tdPadding[3];
20585
20758
  }
@@ -20663,6 +20836,56 @@ var Draw = class {
20663
20836
  getPage(pageNo = -1) {
20664
20837
  return this.pageList[~pageNo ? pageNo : this.pageNo];
20665
20838
  }
20839
+ resolveTableCellContext(sourceElementList = this.getOriginalElementList(), context = this.position.getPositionContext()) {
20840
+ if (!context.isTable) return null;
20841
+ const candidateIndexes = [];
20842
+ if (context.index !== void 0 && sourceElementList[context.index]?.type === "table" /* TABLE */) {
20843
+ candidateIndexes.push(context.index);
20844
+ }
20845
+ if (context.tableId) {
20846
+ const tableIndex = sourceElementList.findIndex((el) => el.id === context.tableId);
20847
+ if (~tableIndex && !candidateIndexes.includes(tableIndex)) {
20848
+ candidateIndexes.push(tableIndex);
20849
+ }
20850
+ }
20851
+ for (let i = 0; i < sourceElementList.length; i++) {
20852
+ const element = sourceElementList[i];
20853
+ if (element.type !== "table" /* TABLE */ || candidateIndexes.includes(i)) {
20854
+ continue;
20855
+ }
20856
+ candidateIndexes.push(i);
20857
+ }
20858
+ for (const tableIndex of candidateIndexes) {
20859
+ const element = sourceElementList[tableIndex];
20860
+ const trList = element.trList;
20861
+ if (!trList?.length) continue;
20862
+ let resolvedTrIndex = -1;
20863
+ if (context.trId) {
20864
+ resolvedTrIndex = trList.findIndex((tr) => tr.id === context.trId);
20865
+ }
20866
+ if (resolvedTrIndex < 0 && context.trIndex !== void 0 && trList[context.trIndex]) {
20867
+ resolvedTrIndex = context.trIndex;
20868
+ }
20869
+ if (resolvedTrIndex < 0) continue;
20870
+ const tdList = trList[resolvedTrIndex].tdList;
20871
+ let resolvedTdIndex = -1;
20872
+ if (context.tdId) {
20873
+ resolvedTdIndex = tdList.findIndex((td) => td.id === context.tdId);
20874
+ }
20875
+ if (resolvedTdIndex < 0 && context.tdIndex !== void 0 && tdList[context.tdIndex]) {
20876
+ resolvedTdIndex = context.tdIndex;
20877
+ }
20878
+ if (resolvedTdIndex < 0) continue;
20879
+ return {
20880
+ index: tableIndex,
20881
+ trIndex: resolvedTrIndex,
20882
+ tdIndex: resolvedTdIndex,
20883
+ element,
20884
+ td: tdList[resolvedTdIndex]
20885
+ };
20886
+ }
20887
+ return null;
20888
+ }
20666
20889
  getPageList() {
20667
20890
  return this.pageList;
20668
20891
  }
@@ -20670,9 +20893,7 @@ var Draw = class {
20670
20893
  return this.pageList.length;
20671
20894
  }
20672
20895
  getTableRowList(sourceElementList) {
20673
- const positionContext = this.position.getPositionContext();
20674
- const { index, trIndex, tdIndex } = positionContext;
20675
- return sourceElementList[index].trList[trIndex].tdList[tdIndex].rowList;
20896
+ return this.resolveTableCellContext(sourceElementList)?.td.rowList || [];
20676
20897
  }
20677
20898
  getOriginalRowList() {
20678
20899
  const zoneManager = this.getZone();
@@ -20731,9 +20952,7 @@ var Draw = class {
20731
20952
  return this.header.getElementList();
20732
20953
  }
20733
20954
  getTableElementList(sourceElementList) {
20734
- const positionContext = this.position.getPositionContext();
20735
- const { index, trIndex, tdIndex } = positionContext;
20736
- return sourceElementList[index].trList?.[trIndex].tdList[tdIndex].value || [];
20955
+ return this.resolveTableCellContext(sourceElementList)?.td.value || [];
20737
20956
  }
20738
20957
  getElementList() {
20739
20958
  const positionContext = this.position.getPositionContext();
@@ -20761,13 +20980,7 @@ var Draw = class {
20761
20980
  return this.footer.getElementList();
20762
20981
  }
20763
20982
  getTd() {
20764
- const positionContext = this.position.getPositionContext();
20765
- const { index, trIndex, tdIndex, isTable } = positionContext;
20766
- if (isTable) {
20767
- const elementList = this.getOriginalElementList();
20768
- return elementList[index].trList[trIndex].tdList[tdIndex];
20769
- }
20770
- return null;
20983
+ return this.resolveTableCellContext(this.getOriginalElementList())?.td || null;
20771
20984
  }
20772
20985
  insertElementList(payload, options = {}) {
20773
20986
  if (!payload.length || !this.range.getIsCanInput()) return;
@@ -21283,6 +21496,72 @@ var Draw = class {
21283
21496
  }
21284
21497
  return defaultBasicRowMarginHeight * ratio * (el.rowMargin ?? defaultRowMargin) * scale;
21285
21498
  }
21499
+ createListStateSeed(initialListState) {
21500
+ const listLevelIndex = /* @__PURE__ */ new Map();
21501
+ if (initialListState?.listLevelIndex) {
21502
+ Object.entries(initialListState.listLevelIndex).forEach(
21503
+ ([level, index]) => {
21504
+ listLevelIndex.set(Number(level), index);
21505
+ }
21506
+ );
21507
+ }
21508
+ return {
21509
+ listId: initialListState?.listId,
21510
+ listIndex: initialListState?.listIndex ?? 0,
21511
+ prevListLevel: initialListState?.prevListLevel ?? 0,
21512
+ listLevelIndex
21513
+ };
21514
+ }
21515
+ advanceListState(element, listState) {
21516
+ if (element.listId) {
21517
+ const curLevel = element.listLevel ?? 0;
21518
+ if (element.listId !== listState.listId) {
21519
+ listState.listIndex = 0;
21520
+ listState.listLevelIndex = /* @__PURE__ */ new Map();
21521
+ listState.listLevelIndex.set(curLevel, 0);
21522
+ listState.prevListLevel = curLevel;
21523
+ } else if (element.value === ZERO && !element.listWrap) {
21524
+ if (curLevel !== listState.prevListLevel) {
21525
+ if (curLevel > listState.prevListLevel) {
21526
+ listState.listLevelIndex.set(curLevel, 0);
21527
+ } else {
21528
+ for (const [lvl] of listState.listLevelIndex) {
21529
+ if (lvl > curLevel) {
21530
+ listState.listLevelIndex.delete(lvl);
21531
+ }
21532
+ }
21533
+ listState.listLevelIndex.set(
21534
+ curLevel,
21535
+ (listState.listLevelIndex.get(curLevel) ?? -1) + 1
21536
+ );
21537
+ }
21538
+ } else {
21539
+ listState.listLevelIndex.set(
21540
+ curLevel,
21541
+ (listState.listLevelIndex.get(curLevel) ?? -1) + 1
21542
+ );
21543
+ }
21544
+ listState.listIndex = listState.listLevelIndex.get(curLevel) ?? 0;
21545
+ listState.prevListLevel = curLevel;
21546
+ }
21547
+ }
21548
+ listState.listId = element.listId;
21549
+ }
21550
+ getListStateBeforeIndex(elementList, endExclusive) {
21551
+ const limit = Math.min(endExclusive, elementList.length);
21552
+ if (limit <= 0) return;
21553
+ const listState = this.createListStateSeed();
21554
+ for (let i = 0; i < limit; i++) {
21555
+ this.advanceListState(elementList[i], listState);
21556
+ }
21557
+ if (!listState.listId) return;
21558
+ return {
21559
+ listId: listState.listId,
21560
+ listIndex: listState.listIndex,
21561
+ prevListLevel: listState.prevListLevel,
21562
+ listLevelIndex: Object.fromEntries(listState.listLevelIndex)
21563
+ };
21564
+ }
21286
21565
  computeRowList(payload) {
21287
21566
  const {
21288
21567
  innerWidth,
@@ -21293,7 +21572,8 @@ var Draw = class {
21293
21572
  startY = 0,
21294
21573
  pageHeight = 0,
21295
21574
  mainOuterHeight = 0,
21296
- surroundElementList = []
21575
+ surroundElementList = [],
21576
+ initialListState
21297
21577
  } = payload;
21298
21578
  const {
21299
21579
  defaultSize,
@@ -21320,10 +21600,7 @@ var Draw = class {
21320
21600
  let x = startX;
21321
21601
  let y = startY;
21322
21602
  let pageNo = 0;
21323
- let listId;
21324
- let listIndex = 0;
21325
- let listLevelIndex = /* @__PURE__ */ new Map();
21326
- let prevListLevel = 0;
21603
+ const listState = this.createListStateSeed(initialListState);
21327
21604
  let controlRealWidth = 0;
21328
21605
  for (let i = 0; i < elementList.length; i++) {
21329
21606
  const curRow = rowList[rowList.length - 1];
@@ -21369,6 +21646,8 @@ var Draw = class {
21369
21646
  }
21370
21647
  metrics.boundingBoxAscent = 0;
21371
21648
  } else if (element.type === "table" /* TABLE */) {
21649
+ let activeSplitRange;
21650
+ let mergedSplitFallback;
21372
21651
  if (element.pagingId) {
21373
21652
  let tableIndex = i + 1;
21374
21653
  let combineCount = 0;
@@ -21389,11 +21668,61 @@ var Draw = class {
21389
21668
  if (combineCount) {
21390
21669
  elementList.splice(i + 1, combineCount);
21391
21670
  }
21671
+ const mergedTrList = element.trList;
21672
+ for (let t = mergedTrList.length - 1; t >= 0; t--) {
21673
+ const splitTr = mergedTrList[t];
21674
+ if (!splitTr.splitParentId) continue;
21675
+ const parentTrIdx = mergedTrList.findIndex(
21676
+ (r) => r.id === splitTr.splitParentId
21677
+ );
21678
+ if (!~parentTrIdx) continue;
21679
+ const parentTr = mergedTrList[parentTrIdx];
21680
+ const posCtx = this.position.getPositionContext();
21681
+ const { startIndex, endIndex } = this.range.getRange();
21682
+ if (posCtx.isTable && posCtx.trId === splitTr.id && startIndex === endIndex && posCtx.tdIndex !== void 0) {
21683
+ const splitTd = splitTr.tdList[posCtx.tdIndex];
21684
+ const parentTd = parentTr.tdList[posCtx.tdIndex];
21685
+ if (splitTd && parentTd) {
21686
+ const hasSyntheticLeadingZero = !!splitTd.splitSyntheticLeadingZero && splitTd.value[0]?.value === ZERO;
21687
+ const mergedIndex = parentTd.value.length + startIndex - (hasSyntheticLeadingZero ? 1 : 0);
21688
+ activeSplitRange = {
21689
+ tdIndex: posCtx.tdIndex,
21690
+ mergedIndex,
21691
+ trId: splitTr.id
21692
+ };
21693
+ mergedSplitFallback = {
21694
+ tdIndex: posCtx.tdIndex,
21695
+ mergedIndex,
21696
+ trId: splitTr.id,
21697
+ parentTrId: parentTr.id,
21698
+ parentTdId: parentTd.id,
21699
+ parentTrIndex: parentTrIdx
21700
+ };
21701
+ }
21702
+ }
21703
+ for (let d = 0; d < parentTr.tdList.length; d++) {
21704
+ const parentTd = parentTr.tdList[d];
21705
+ const splitTd = splitTr.tdList[d];
21706
+ if (!splitTd) continue;
21707
+ const hasSyntheticLeadingZero = !!splitTd.splitSyntheticLeadingZero && splitTd.value[0]?.value === ZERO;
21708
+ const splitValue = hasSyntheticLeadingZero ? splitTd.value.slice(1) : splitTd.value;
21709
+ parentTd.value.push(...splitValue);
21710
+ parentTd.rowList = void 0;
21711
+ parentTd.positionList = void 0;
21712
+ }
21713
+ if (posCtx.isTable && posCtx.trId === splitTr.id) {
21714
+ posCtx.index = i;
21715
+ this.position.setPositionContext(posCtx);
21716
+ }
21717
+ mergedTrList.splice(t, 1);
21718
+ }
21392
21719
  }
21393
21720
  element.pagingIndex = element.pagingIndex ?? 0;
21394
21721
  const trList = element.trList;
21395
21722
  for (let t = 0; t < trList.length; t++) {
21396
21723
  const tr = trList[t];
21724
+ delete tr.splitBoundaryTop;
21725
+ delete tr.splitBoundaryBottom;
21397
21726
  tr.height = tr.minHeight || defaultTrMinHeight;
21398
21727
  tr.minHeight = tr.height;
21399
21728
  }
@@ -21408,6 +21737,7 @@ var Draw = class {
21408
21737
  const rowList2 = this.computeRowList({
21409
21738
  innerWidth: (td.width - cellPaddingWidth) * scale,
21410
21739
  elementList: td.value,
21740
+ initialListState: td.splitListState,
21411
21741
  isFromTable: true,
21412
21742
  isPagingMode
21413
21743
  });
@@ -21490,6 +21820,7 @@ var Draw = class {
21490
21820
  const tdRowList = this.computeRowList({
21491
21821
  innerWidth: (td.width - cellPaddingWidth) * scale,
21492
21822
  elementList: td.value,
21823
+ initialListState: td.splitListState,
21493
21824
  isFromTable: true,
21494
21825
  isPagingMode
21495
21826
  });
@@ -21583,6 +21914,178 @@ var Draw = class {
21583
21914
  }
21584
21915
  }
21585
21916
  }
21917
+ if (deleteCount === 0) {
21918
+ let overflowTrIdx = -1;
21919
+ let preHeightScaled = 0;
21920
+ for (let r = 0; r < trList2.length; r++) {
21921
+ const trHeight = trList2[r].height * scale;
21922
+ if (curPagePreHeight + rowMarginHeight + preHeightScaled + trHeight > height2) {
21923
+ overflowTrIdx = r;
21924
+ break;
21925
+ }
21926
+ preHeightScaled += trHeight;
21927
+ }
21928
+ if (overflowTrIdx >= 0) {
21929
+ const availableScaled = height2 - curPagePreHeight - rowMarginHeight - preHeightScaled;
21930
+ const availableUnscaled = availableScaled / scale;
21931
+ if (availableUnscaled >= defaultTrMinHeight) {
21932
+ const overflowTr = trList2[overflowTrIdx];
21933
+ const originalTrHeight = overflowTr.height;
21934
+ const {
21935
+ table: { tdPadding: defaultTdPadding, defaultTrMinHeight: defaultTrMinHeight2 }
21936
+ } = this.options;
21937
+ const splits = [];
21938
+ let anySplit = false;
21939
+ for (let d = 0; d < overflowTr.tdList.length; d++) {
21940
+ const td = overflowTr.tdList[d];
21941
+ const cellPadding = td.padding || defaultTdPadding;
21942
+ const cellPaddingH = cellPadding[0] + cellPadding[2];
21943
+ const contentAvailableScaled = (availableUnscaled - cellPaddingH) * scale;
21944
+ if (!td.rowList || td.rowList.length === 0) {
21945
+ splits.push({
21946
+ elemIdx: td.value.length,
21947
+ rowIdx: 0
21948
+ });
21949
+ continue;
21950
+ }
21951
+ let cumHeight = 0;
21952
+ let elemIdx = td.value.length;
21953
+ let rowIdx = td.rowList.length;
21954
+ for (let ri = 0; ri < td.rowList.length; ri++) {
21955
+ const row = td.rowList[ri];
21956
+ if (cumHeight + row.height > contentAvailableScaled) {
21957
+ elemIdx = row.startIndex;
21958
+ rowIdx = ri;
21959
+ break;
21960
+ }
21961
+ cumHeight += row.height;
21962
+ }
21963
+ if (elemIdx > 0 && elemIdx < td.value.length) {
21964
+ anySplit = true;
21965
+ }
21966
+ splits.push({ elemIdx, rowIdx });
21967
+ }
21968
+ if (anySplit) {
21969
+ if (!activeSplitRange) {
21970
+ const posCtx = this.position.getPositionContext();
21971
+ const { startIndex, endIndex } = this.range.getRange();
21972
+ if (posCtx.isTable && posCtx.trId === overflowTr.id && startIndex === endIndex && posCtx.tdIndex !== void 0) {
21973
+ const splitIdx = splits[posCtx.tdIndex]?.elemIdx;
21974
+ if (splitIdx !== void 0 && startIndex >= splitIdx && splitIdx < overflowTr.tdList[posCtx.tdIndex].value.length) {
21975
+ activeSplitRange = {
21976
+ tdIndex: posCtx.tdIndex,
21977
+ mergedIndex: startIndex,
21978
+ trId: overflowTr.id
21979
+ };
21980
+ }
21981
+ }
21982
+ }
21983
+ const continuationTrHeight = originalTrHeight - availableUnscaled;
21984
+ const splitRootId = overflowTr.splitRootId || overflowTr.id;
21985
+ const splitLevel = (overflowTr.splitLevel || 0) + 1;
21986
+ const newTrId = `${splitRootId}_c${splitLevel}`;
21987
+ const continuationTdList = overflowTr.tdList.map(
21988
+ (td, d) => {
21989
+ const splitIdx = splits[d].elemIdx;
21990
+ const initialListState2 = this.getListStateBeforeIndex(
21991
+ td.value,
21992
+ splitIdx
21993
+ );
21994
+ const overflowElements = deepClone(
21995
+ td.value.slice(splitIdx)
21996
+ );
21997
+ const overflowStartElement = overflowElements[0];
21998
+ let splitSyntheticLeadingZero = false;
21999
+ if (!overflowElements.length || overflowElements[0]?.value !== ZERO) {
22000
+ overflowElements.unshift({
22001
+ value: ZERO,
22002
+ type: "text" /* TEXT */,
22003
+ listId: overflowStartElement?.listId,
22004
+ listType: overflowStartElement?.listType,
22005
+ listStyle: overflowStartElement?.listStyle,
22006
+ listLevel: overflowStartElement?.listLevel,
22007
+ listPreset: overflowStartElement?.listPreset,
22008
+ listWrap: !!overflowStartElement?.listId
22009
+ });
22010
+ splitSyntheticLeadingZero = true;
22011
+ }
22012
+ const {
22013
+ value: _v,
22014
+ rowList: _rl,
22015
+ positionList: _pl,
22016
+ splitSyntheticLeadingZero: _slz,
22017
+ splitListState: _sls,
22018
+ ...tdMeta
22019
+ } = td;
22020
+ return {
22021
+ ...deepClone(tdMeta),
22022
+ value: overflowElements,
22023
+ splitSyntheticLeadingZero,
22024
+ splitListState: initialListState2,
22025
+ height: continuationTrHeight,
22026
+ rowList: void 0,
22027
+ positionList: void 0,
22028
+ mainHeight: void 0,
22029
+ realHeight: void 0,
22030
+ realMinHeight: void 0
22031
+ };
22032
+ }
22033
+ );
22034
+ const continuationTr = {
22035
+ id: newTrId,
22036
+ height: continuationTrHeight,
22037
+ minHeight: defaultTrMinHeight2,
22038
+ tdList: continuationTdList,
22039
+ splitParentId: overflowTr.id,
22040
+ splitRootId,
22041
+ splitLevel
22042
+ };
22043
+ const positionContext = this.position.getPositionContext();
22044
+ if (activeSplitRange && positionContext.isTable && positionContext.trId === activeSplitRange.trId) {
22045
+ const splitIdx = splits[activeSplitRange.tdIndex]?.elemIdx;
22046
+ const continuationTd = continuationTdList[activeSplitRange.tdIndex];
22047
+ if (splitIdx !== void 0 && continuationTd && activeSplitRange.mergedIndex >= splitIdx) {
22048
+ const hasPrependedZero = !!continuationTd.splitSyntheticLeadingZero && continuationTd.value[0]?.value === ZERO;
22049
+ const continuationCursorIndex = activeSplitRange.mergedIndex - splitIdx + (hasPrependedZero ? 1 : 0);
22050
+ positionContext.index = i;
22051
+ positionContext.trIndex = overflowTrIdx + 1;
22052
+ positionContext.tdIndex = activeSplitRange.tdIndex;
22053
+ positionContext.tdId = continuationTd.id;
22054
+ positionContext.trId = continuationTr.id;
22055
+ positionContext.tableId = element.id;
22056
+ this.position.setPositionContext(positionContext);
22057
+ this.range.setRange(
22058
+ continuationCursorIndex,
22059
+ continuationCursorIndex
22060
+ );
22061
+ this.pendingTableCursorIndex = continuationCursorIndex;
22062
+ }
22063
+ }
22064
+ for (let d = 0; d < overflowTr.tdList.length; d++) {
22065
+ const td = overflowTr.tdList[d];
22066
+ const { elemIdx, rowIdx } = splits[d];
22067
+ td.value = td.value.slice(0, elemIdx);
22068
+ td.rowList = td.rowList ? td.rowList.slice(0, rowIdx) : void 0;
22069
+ td.positionList = void 0;
22070
+ td.height = availableUnscaled;
22071
+ td.mainHeight = void 0;
22072
+ td.realHeight = void 0;
22073
+ td.realMinHeight = void 0;
22074
+ }
22075
+ overflowTr.height = availableUnscaled;
22076
+ overflowTr.minHeight = Math.min(
22077
+ overflowTr.minHeight || defaultTrMinHeight2,
22078
+ availableUnscaled
22079
+ );
22080
+ overflowTr.splitBoundaryBottom = true;
22081
+ continuationTr.splitBoundaryTop = true;
22082
+ trList2.splice(overflowTrIdx + 1, 0, continuationTr);
22083
+ deleteStart = overflowTrIdx + 1;
22084
+ deleteCount = trList2.length - deleteStart;
22085
+ }
22086
+ }
22087
+ }
22088
+ }
21586
22089
  if (deleteCount) {
21587
22090
  const cloneTrList = trList2.splice(deleteStart, deleteCount);
21588
22091
  const cloneTrHeight = cloneTrList.reduce(
@@ -21632,6 +22135,21 @@ var Draw = class {
21632
22135
  positionContext.index = newPositionContextIndex;
21633
22136
  positionContext.trIndex = newPositionContextTrIndex;
21634
22137
  this.position.setPositionContext(positionContext);
22138
+ } else if (mergedSplitFallback && positionContext.trId === mergedSplitFallback.trId) {
22139
+ const fallbackTd = element.trList?.[mergedSplitFallback.parentTrIndex]?.tdList[mergedSplitFallback.tdIndex];
22140
+ const fallbackCursorIndex = Math.min(
22141
+ mergedSplitFallback.mergedIndex,
22142
+ Math.max((fallbackTd?.value.length || 1) - 1, 0)
22143
+ );
22144
+ positionContext.index = i;
22145
+ positionContext.trIndex = mergedSplitFallback.parentTrIndex;
22146
+ positionContext.tdIndex = mergedSplitFallback.tdIndex;
22147
+ positionContext.tdId = mergedSplitFallback.parentTdId;
22148
+ positionContext.trId = mergedSplitFallback.parentTrId;
22149
+ positionContext.tableId = element.id;
22150
+ this.position.setPositionContext(positionContext);
22151
+ this.range.setRange(fallbackCursorIndex, fallbackCursorIndex);
22152
+ this.pendingTableCursorIndex = fallbackCursorIndex;
21635
22153
  }
21636
22154
  }
21637
22155
  }
@@ -21764,39 +22282,7 @@ var Draw = class {
21764
22282
  curRowWidth += punctuationWidth * scale;
21765
22283
  }
21766
22284
  }
21767
- if (element.listId) {
21768
- const curLevel = element.listLevel ?? 0;
21769
- if (element.listId !== listId) {
21770
- listIndex = 0;
21771
- listLevelIndex = /* @__PURE__ */ new Map();
21772
- listLevelIndex.set(curLevel, 0);
21773
- prevListLevel = curLevel;
21774
- } else if (element.value === ZERO && !element.listWrap) {
21775
- if (curLevel !== prevListLevel) {
21776
- if (curLevel > prevListLevel) {
21777
- listLevelIndex.set(curLevel, 0);
21778
- } else {
21779
- for (const [lvl] of listLevelIndex) {
21780
- if (lvl > curLevel) {
21781
- listLevelIndex.delete(lvl);
21782
- }
21783
- }
21784
- listLevelIndex.set(
21785
- curLevel,
21786
- (listLevelIndex.get(curLevel) ?? -1) + 1
21787
- );
21788
- }
21789
- } else {
21790
- listLevelIndex.set(
21791
- curLevel,
21792
- (listLevelIndex.get(curLevel) ?? -1) + 1
21793
- );
21794
- }
21795
- listIndex = listLevelIndex.get(curLevel) ?? 0;
21796
- prevListLevel = curLevel;
21797
- }
21798
- }
21799
- listId = element.listId;
22285
+ this.advanceListState(element, listState);
21800
22286
  const surroundPosition = this.position.setSurroundPosition({
21801
22287
  pageNo,
21802
22288
  rowElement,
@@ -21848,7 +22334,7 @@ var Draw = class {
21848
22334
  const baseListOffset = listStyleMap.get(element.listId) || 0;
21849
22335
  const rowListIndent = this.listParticle.getListIndentWidth(element);
21850
22336
  row.offsetX = baseListOffset + rowListIndent;
21851
- row.listIndex = listIndex;
22337
+ row.listIndex = listState.listIndex;
21852
22338
  }
21853
22339
  row.offsetY = !isFromTable && element.area?.top && element.areaId !== elementList[i - 1]?.areaId ? element.area.top * scale : 0;
21854
22340
  rowList.push(row);
@@ -22517,6 +23003,7 @@ var Draw = class {
22517
23003
  isFirstRender = false
22518
23004
  } = payload || {};
22519
23005
  let { curIndex } = payload || {};
23006
+ this.pendingTableCursorIndex = void 0;
22520
23007
  const innerWidth = this.getInnerWidth();
22521
23008
  const columnWidth = this.getColumnWidth();
22522
23009
  const isPagingMode = this.getIsPagingMode();
@@ -22582,6 +23069,10 @@ var Draw = class {
22582
23069
  } else {
22583
23070
  this._immediateRender();
22584
23071
  }
23072
+ if (this.pendingTableCursorIndex !== void 0) {
23073
+ curIndex = this.pendingTableCursorIndex;
23074
+ this.pendingTableCursorIndex = void 0;
23075
+ }
22585
23076
  if (isSetCursor) {
22586
23077
  curIndex = this.setCursor(curIndex);
22587
23078
  } else if (this.range.getIsSelection()) {
@@ -22623,9 +23114,7 @@ var Draw = class {
22623
23114
  const positionContext = this.position.getPositionContext();
22624
23115
  const positionList = this.position.getPositionList();
22625
23116
  if (positionContext.isTable) {
22626
- const { index, trIndex, tdIndex } = positionContext;
22627
- const elementList = this.getOriginalElementList();
22628
- const tablePositionList = elementList[index].trList?.[trIndex].tdList[tdIndex].positionList;
23117
+ const tablePositionList = this.resolveTableCellContext(this.getOriginalElementList())?.td.positionList;
22629
23118
  if (curIndex === void 0 && tablePositionList) {
22630
23119
  curIndex = tablePositionList.length - 1;
22631
23120
  }