@visactor/vtable 0.13.4-alpha.2 → 0.13.4-alpha.4

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.
Files changed (139) hide show
  1. package/cjs/PivotChart.d.ts +3 -0
  2. package/cjs/PivotChart.js +44 -40
  3. package/cjs/PivotChart.js.map +1 -1
  4. package/cjs/components/legend/continue-legend/continue-legend.js +1 -0
  5. package/cjs/components/legend/continue-legend/continue-legend.js.map +1 -1
  6. package/cjs/components/legend/discrete-legend/discrete-legend.js +1 -0
  7. package/cjs/components/legend/discrete-legend/discrete-legend.js.map +1 -1
  8. package/cjs/components/menu/dom/logic/MenuElementStyle.js +1 -1
  9. package/cjs/components/menu/dom/logic/MenuElementStyle.js.map +1 -1
  10. package/cjs/components/title/title.js +7 -6
  11. package/cjs/components/title/title.js.map +1 -1
  12. package/cjs/components/tooltip/logic/BubbleTooltipElementStyle.js +1 -1
  13. package/cjs/components/tooltip/logic/BubbleTooltipElementStyle.js.map +1 -1
  14. package/cjs/core/BaseTable.d.ts +14 -0
  15. package/cjs/core/BaseTable.js +29 -3
  16. package/cjs/core/BaseTable.js.map +1 -1
  17. package/cjs/core/style.js +1 -1
  18. package/cjs/core/style.js.map +1 -1
  19. package/cjs/dataset/dataset.d.ts +0 -1
  20. package/cjs/dataset/dataset.js +3 -43
  21. package/cjs/dataset/dataset.js.map +1 -1
  22. package/cjs/event/event.d.ts +1 -1
  23. package/cjs/event/event.js +5 -4
  24. package/cjs/event/event.js.map +1 -1
  25. package/cjs/event/listener/table-group.js +9 -6
  26. package/cjs/event/listener/table-group.js.map +1 -1
  27. package/cjs/event/listener/touch.js +1 -1
  28. package/cjs/event/listener/touch.js.map +1 -1
  29. package/cjs/event/media-click.js +2 -1
  30. package/cjs/event/scroll.js +1 -1
  31. package/cjs/event/scroll.js.map +1 -1
  32. package/cjs/event/sparkline-event.js +1 -2
  33. package/cjs/index.d.ts +1 -1
  34. package/cjs/index.js +1 -1
  35. package/cjs/index.js.map +1 -1
  36. package/cjs/layout/chart-helper/get-axis-config.js +72 -38
  37. package/cjs/layout/chart-helper/get-axis-config.js.map +1 -1
  38. package/cjs/layout/chart-helper/get-axis-domain.js +1 -1
  39. package/cjs/layout/chart-helper/get-axis-domain.js.map +1 -1
  40. package/cjs/layout/chart-helper/get-chart-spec.js +34 -18
  41. package/cjs/layout/chart-helper/get-chart-spec.js.map +1 -1
  42. package/cjs/layout/chart-helper/zero-align.js.map +1 -0
  43. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js +2 -2
  44. package/cjs/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  45. package/cjs/scenegraph/group-creater/init-scenegraph.js +3 -3
  46. package/cjs/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  47. package/cjs/scenegraph/scenegraph.d.ts +5 -4
  48. package/cjs/scenegraph/scenegraph.js +4 -2
  49. package/cjs/scenegraph/scenegraph.js.map +1 -1
  50. package/cjs/scenegraph/select/create-select-border.d.ts +2 -2
  51. package/cjs/scenegraph/select/create-select-border.js +6 -15
  52. package/cjs/scenegraph/select/create-select-border.js.map +1 -1
  53. package/cjs/scenegraph/select/delete-select-border.js.map +1 -1
  54. package/cjs/scenegraph/select/update-select-border.js +84 -31
  55. package/cjs/scenegraph/select/update-select-border.js.map +1 -1
  56. package/cjs/tools/LimitPromiseQueue.js +1 -1
  57. package/cjs/tools/NumberMap.js +1 -1
  58. package/cjs/tools/Rect.js +1 -1
  59. package/cjs/ts-types/base-table.d.ts +16 -0
  60. package/cjs/ts-types/base-table.js +1 -1
  61. package/cjs/ts-types/base-table.js.map +1 -1
  62. package/cjs/ts-types/common.js +1 -1
  63. package/cjs/ts-types/customElement.js +1 -1
  64. package/cjs/ts-types/table-engine.d.ts +2 -1
  65. package/cjs/ts-types/table-engine.js.map +1 -1
  66. package/dist/vtable.js +725 -485
  67. package/dist/vtable.min.js +2 -2
  68. package/es/PivotChart.d.ts +3 -0
  69. package/es/PivotChart.js +44 -40
  70. package/es/PivotChart.js.map +1 -1
  71. package/es/components/legend/continue-legend/continue-legend.js +1 -0
  72. package/es/components/legend/continue-legend/continue-legend.js.map +1 -1
  73. package/es/components/legend/discrete-legend/discrete-legend.js +1 -0
  74. package/es/components/legend/discrete-legend/discrete-legend.js.map +1 -1
  75. package/es/components/menu/dom/logic/MenuElementStyle.js +1 -1
  76. package/es/components/menu/dom/logic/MenuElementStyle.js.map +1 -1
  77. package/es/components/title/title.js +6 -6
  78. package/es/components/title/title.js.map +1 -1
  79. package/es/components/tooltip/logic/BubbleTooltipElementStyle.js +1 -1
  80. package/es/components/tooltip/logic/BubbleTooltipElementStyle.js.map +1 -1
  81. package/es/core/BaseTable.d.ts +14 -0
  82. package/es/core/BaseTable.js +37 -12
  83. package/es/core/BaseTable.js.map +1 -1
  84. package/es/core/style.js +1 -1
  85. package/es/core/style.js.map +1 -1
  86. package/es/dataset/dataset.d.ts +0 -1
  87. package/es/dataset/dataset.js +2 -46
  88. package/es/dataset/dataset.js.map +1 -1
  89. package/es/event/event.d.ts +1 -1
  90. package/es/event/event.js +5 -4
  91. package/es/event/event.js.map +1 -1
  92. package/es/event/listener/table-group.js +9 -6
  93. package/es/event/listener/table-group.js.map +1 -1
  94. package/es/event/listener/touch.js +1 -1
  95. package/es/event/listener/touch.js.map +1 -1
  96. package/es/event/media-click.js +2 -1
  97. package/es/event/scroll.js +1 -1
  98. package/es/event/scroll.js.map +1 -1
  99. package/es/event/sparkline-event.js +1 -2
  100. package/es/index.d.ts +1 -1
  101. package/es/index.js +1 -1
  102. package/es/index.js.map +1 -1
  103. package/es/layout/chart-helper/get-axis-config.js +73 -36
  104. package/es/layout/chart-helper/get-axis-config.js.map +1 -1
  105. package/es/layout/chart-helper/get-axis-domain.js +1 -1
  106. package/es/layout/chart-helper/get-axis-domain.js.map +1 -1
  107. package/es/layout/chart-helper/get-chart-spec.js +34 -13
  108. package/es/layout/chart-helper/get-chart-spec.js.map +1 -1
  109. package/es/layout/chart-helper/zero-align.js.map +1 -0
  110. package/es/scenegraph/group-creater/cell-type/chart-cell.js +2 -2
  111. package/es/scenegraph/group-creater/cell-type/chart-cell.js.map +1 -1
  112. package/es/scenegraph/group-creater/init-scenegraph.js +3 -3
  113. package/es/scenegraph/group-creater/init-scenegraph.js.map +1 -1
  114. package/es/scenegraph/scenegraph.d.ts +5 -4
  115. package/es/scenegraph/scenegraph.js +3 -2
  116. package/es/scenegraph/scenegraph.js.map +1 -1
  117. package/es/scenegraph/select/create-select-border.d.ts +2 -2
  118. package/es/scenegraph/select/create-select-border.js +6 -15
  119. package/es/scenegraph/select/create-select-border.js.map +1 -1
  120. package/es/scenegraph/select/delete-select-border.js.map +1 -1
  121. package/es/scenegraph/select/update-select-border.js +84 -31
  122. package/es/scenegraph/select/update-select-border.js.map +1 -1
  123. package/es/tools/LimitPromiseQueue.js +1 -1
  124. package/es/tools/NumberMap.js +1 -1
  125. package/es/tools/Rect.js +1 -1
  126. package/es/ts-types/base-table.d.ts +16 -0
  127. package/es/ts-types/base-table.js +1 -1
  128. package/es/ts-types/base-table.js.map +1 -1
  129. package/es/ts-types/common.js +1 -1
  130. package/es/ts-types/customElement.js +1 -1
  131. package/es/ts-types/table-engine.d.ts +2 -1
  132. package/es/ts-types/table-engine.js.map +1 -1
  133. package/package.json +4 -4
  134. package/cjs/dataset/util/zero-align.js.map +0 -1
  135. package/es/dataset/util/zero-align.js.map +0 -1
  136. /package/cjs/{dataset/util → layout/chart-helper}/zero-align.d.ts +0 -0
  137. /package/cjs/{dataset/util → layout/chart-helper}/zero-align.js +0 -0
  138. /package/es/{dataset/util → layout/chart-helper}/zero-align.d.ts +0 -0
  139. /package/es/{dataset/util → layout/chart-helper}/zero-align.js +0 -0
package/dist/vtable.js CHANGED
@@ -2747,7 +2747,7 @@
2747
2747
  max-height: none;
2748
2748
  }
2749
2749
  `;
2750
- document.body.appendChild(styleElement);
2750
+ document.head.appendChild(styleElement);
2751
2751
  }
2752
2752
 
2753
2753
  function getScrollBarSize(scrollStyle) {
@@ -22428,7 +22428,7 @@
22428
22428
  return 0;
22429
22429
  }
22430
22430
  getStaticCanvasCount() {
22431
- return 1;
22431
+ return 999;
22432
22432
  }
22433
22433
  loadJson(url) {
22434
22434
  const jsonPromise = fetch(url).then(data => data.json());
@@ -30587,7 +30587,7 @@
30587
30587
  subtextWidth = this._subTitle ? null === (_1 = this._subTitle) || void 0 === _1 ? void 0 : _1.AABBBounds.width() : 0;
30588
30588
  let titleWidth = Math.max(maintextWidth, subtextWidth),
30589
30589
  titleHeight = maintextHeight + (null !== (_2 = null == subtextStyle ? void 0 : subtextStyle.height) && void 0 !== _2 ? _2 : subtextHeight);
30590
- if (isValid$6(width) && (titleWidth = width, null === (_3 = this._mainTitle) || void 0 === _3 || _3.setAttribute("maxLineWidth", width), null === (_4 = this._subTitle) || void 0 === _4 || _4.setAttribute("maxLineWidth", width)), isValid$6(height) && (titleHeight = height), isValid$6(minWidth) && titleWidth < minWidth && (titleWidth = minWidth), isValid$6(maxWidth) && (null === (_5 = this._mainTitle) || void 0 === _5 || _5.setAttribute("maxLineWidth", maxWidth), null === (_6 = this._subTitle) || void 0 === _6 || _6.setAttribute("maxLineWidth", maxWidth), null === (_7 = this._mainTitle) || void 0 === _7 || _7.setAttribute("maxWidth", maxWidth), null === (_8 = this._subTitle) || void 0 === _8 || _8.setAttribute("maxWidth", maxWidth), titleWidth > maxWidth && (titleWidth = maxWidth)), isValid$6(minHeight) && titleHeight < minHeight && (titleHeight = minHeight), isValid$6(maxHeight) && (null === (_9 = this._mainTitle) || void 0 === _9 || _9.setAttribute("maxHeight", maxHeight), null === (_10 = this._subTitle) || void 0 === _10 || _10.setAttribute("maxHeight", maxHeight - maintextHeight), titleHeight > maxHeight && (titleHeight = maxHeight)), group.attribute.width = titleWidth + parsedPadding[1] + parsedPadding[3], group.attribute.height = titleHeight + parsedPadding[0] + parsedPadding[2], isValid$6(align) || isValid$6(null == textStyle ? void 0 : textStyle.align)) {
30590
+ if (isValid$6(width) && (titleWidth = width, null === (_3 = this._mainTitle) || void 0 === _3 || _3.setAttribute("maxLineWidth", width), null === (_4 = this._subTitle) || void 0 === _4 || _4.setAttribute("maxLineWidth", width)), isValid$6(height) && (titleHeight = height), isValid$6(minWidth) && titleWidth < minWidth && (titleWidth = minWidth), isValid$6(maxWidth) && (null === (_5 = this._mainTitle) || void 0 === _5 || _5.setAttribute("maxLineWidth", maxWidth), null === (_6 = this._subTitle) || void 0 === _6 || _6.setAttribute("maxLineWidth", maxWidth), null === (_7 = this._mainTitle) || void 0 === _7 || _7.setAttribute("maxWidth", maxWidth), null === (_8 = this._subTitle) || void 0 === _8 || _8.setAttribute("maxWidth", maxWidth), titleWidth > maxWidth && (titleWidth = maxWidth)), isValid$6(minHeight) && titleHeight < minHeight && (titleHeight = minHeight), isValid$6(maxHeight) && (null === (_9 = this._mainTitle) || void 0 === _9 || _9.setAttribute("maxHeight", maxHeight), null === (_10 = this._subTitle) || void 0 === _10 || _10.setAttribute("maxHeight", maxHeight - maintextHeight), titleHeight > maxHeight && (titleHeight = maxHeight)), group.attribute.width = titleWidth, group.attribute.height = titleHeight, group.attribute.boundsPadding = parsedPadding, isValid$6(align) || isValid$6(null == textStyle ? void 0 : textStyle.align)) {
30591
30591
  const mainTitleAlign = (null == textStyle ? void 0 : textStyle.align) ? null == textStyle ? void 0 : textStyle.align : align,
30592
30592
  mainTitleWidth = null !== (_11 = null == textStyle ? void 0 : textStyle.width) && void 0 !== _11 ? _11 : maintextWidth;
30593
30593
  "left" === mainTitleAlign ? (null === (_12 = this._mainTitle) || void 0 === _12 || _12.setAttribute("x", 0), null === (_13 = this._mainTitle) || void 0 === _13 || _13.setAttribute("textAlign", "left")) : "center" === mainTitleAlign ? (null === (_14 = this._mainTitle) || void 0 === _14 || _14.setAttribute("x", mainTitleWidth / 2), null === (_15 = this._mainTitle) || void 0 === _15 || _15.setAttribute("textAlign", "center")) : "right" === mainTitleAlign && (null === (_16 = this._mainTitle) || void 0 === _16 || _16.setAttribute("x", mainTitleWidth), null === (_17 = this._mainTitle) || void 0 === _17 || _17.setAttribute("textAlign", "right"));
@@ -40419,7 +40419,7 @@
40419
40419
  scale = new LinearScale();
40420
40420
  }
40421
40421
  scale.domain([min, max], !!axisOption?.nice);
40422
- if (axisOption?.nice && !isZeroAlign) {
40422
+ if (axisOption?.nice) {
40423
40423
  let tickCount = axisOption.tick?.forceTickCount ?? axisOption.tick?.tickCount ?? 10;
40424
40424
  if (isFunction$1(tickCount)) {
40425
40425
  tickCount = tickCount({
@@ -40455,33 +40455,231 @@
40455
40455
  };
40456
40456
  }
40457
40457
 
40458
+ function isValidAlignDomain(domain) {
40459
+ return domain.length === 2 && isValidNumber$1(domain[0]) && isValidNumber$1(domain[1]) && domain[1] >= domain[0];
40460
+ }
40461
+ function getScaleInfo(domain) {
40462
+ const total = domain[1] - domain[0];
40463
+ const includeZero = domain[1] * domain[0] < 0;
40464
+ let negative = domain[0] <= 0 ? 0 - domain[0] : 0;
40465
+ let positive = domain[1] > 0 ? domain[1] - 0 : 0;
40466
+ if (total === 0) {
40467
+ if (domain[0] < 0) {
40468
+ negative = 1;
40469
+ positive = 0;
40470
+ }
40471
+ else if (domain[0] > 0) {
40472
+ negative = 0;
40473
+ positive = 1;
40474
+ }
40475
+ }
40476
+ else {
40477
+ negative = negative / total;
40478
+ positive = positive / total;
40479
+ }
40480
+ return {
40481
+ total,
40482
+ negative,
40483
+ positive,
40484
+ includeZero,
40485
+ domain,
40486
+ extendable_min: true,
40487
+ extendable_max: true
40488
+ };
40489
+ }
40490
+ function inDifferentCrossZero(info1, info2) {
40491
+ const { positive: positive1, negative: negative1, extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;
40492
+ const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, extendable_max: s2Extendable_max, domain: domain2 } = info2;
40493
+ if (positive2 > 0) {
40494
+ if (!s2Extendable_min) {
40495
+ return false;
40496
+ }
40497
+ let comp = negative1 / positive1;
40498
+ if (s1Extendable_max) {
40499
+ comp = negative1 / Math.max(positive1, positive2);
40500
+ domain1[1] = -domain1[0] / comp;
40501
+ }
40502
+ domain2[0] = -domain2[1] * comp;
40503
+ }
40504
+ else if (negative2 > 0) {
40505
+ if (!s2Extendable_max) {
40506
+ return false;
40507
+ }
40508
+ let comp = positive1 / negative1;
40509
+ if (s1Extendable_min) {
40510
+ comp = positive1 / Math.max(negative1, negative1);
40511
+ domain1[0] = -domain1[1] / comp;
40512
+ }
40513
+ domain2[1] = -domain2[0] * comp;
40514
+ }
40515
+ return true;
40516
+ }
40517
+ function inOnlyZeroDomain(info1, info2) {
40518
+ const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;
40519
+ const { positive: positive2, negative: negative2, domain: domain2 } = info2;
40520
+ if (positive2 === 0 && negative2 === 0) {
40521
+ return false;
40522
+ }
40523
+ if (positive2 > 0 && !s1Extendable_max) {
40524
+ return false;
40525
+ }
40526
+ if (negative2 > 0 && !s1Extendable_min) {
40527
+ return false;
40528
+ }
40529
+ domain1[0] = domain2[0];
40530
+ domain1[1] = domain2[1];
40531
+ return true;
40532
+ }
40533
+ function inAllCrossZero(info1, info2) {
40534
+ const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;
40535
+ const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;
40536
+ if (s1Extendable_max && s2Extendable_min) {
40537
+ const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);
40538
+ domain1[1] = -domain1[0] / comp;
40539
+ domain2[0] = -domain2[1] * comp;
40540
+ }
40541
+ else if (s2Extendable_min) {
40542
+ const comp = negative1 / positive1;
40543
+ domain2[0] = -domain2[1] * comp;
40544
+ }
40545
+ else if (s1Extendable_max) {
40546
+ const comp = negative2 / positive2;
40547
+ domain1[1] = -domain1[0] / comp;
40548
+ }
40549
+ else {
40550
+ return false;
40551
+ }
40552
+ return true;
40553
+ }
40554
+ function inNoCrossDifferentSide(info1, info2) {
40555
+ const { extendable_min: s1Extendable_min, domain: domain1 } = info1;
40556
+ const { extendable_max: s2Extendable_max, domain: domain2 } = info2;
40557
+ if (!s1Extendable_min || !s2Extendable_max) {
40558
+ return false;
40559
+ }
40560
+ domain1[0] = -domain1[1];
40561
+ domain2[1] = -domain2[0];
40562
+ return true;
40563
+ }
40564
+ function getNewRangeToAlign(range1, range2) {
40565
+ const domain1 = [range1.min, range1.max];
40566
+ const domain2 = [range2.min, range2.max];
40567
+ if (!isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {
40568
+ return undefined;
40569
+ }
40570
+ const info1 = getScaleInfo(domain1);
40571
+ const info2 = getScaleInfo(domain2);
40572
+ const { positive: positive1, negative: negative1, extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, includeZero: includeZero1 } = info1;
40573
+ const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, extendable_max: s2Extendable_max, includeZero: includeZero2 } = info2;
40574
+ if (positive1 === 0 && negative1 === 0) {
40575
+ if (!inOnlyZeroDomain(info1, info2)) {
40576
+ return undefined;
40577
+ }
40578
+ }
40579
+ else if (positive2 === 0 && negative2 === 0) {
40580
+ if (!inOnlyZeroDomain(info2, info1)) {
40581
+ return undefined;
40582
+ }
40583
+ }
40584
+ else if (!includeZero1 && !includeZero2) {
40585
+ if (negative1 === 0 && positive2 === 0) {
40586
+ if (!inNoCrossDifferentSide(info1, info2)) {
40587
+ return undefined;
40588
+ }
40589
+ }
40590
+ else if (negative2 === 0 && positive1 === 0) {
40591
+ if (!inNoCrossDifferentSide(info2, info1)) {
40592
+ return undefined;
40593
+ }
40594
+ }
40595
+ if (negative1 === 0 && negative2 === 0) {
40596
+ if (domain1[0] === 0 && domain2[0] > 0) {
40597
+ if (!s2Extendable_min) {
40598
+ return undefined;
40599
+ }
40600
+ domain2[0] = 0;
40601
+ }
40602
+ else if (domain2[0] === 0 && domain1[0] > 0) {
40603
+ if (!s1Extendable_min) {
40604
+ return undefined;
40605
+ }
40606
+ domain1[0] = 0;
40607
+ }
40608
+ else {
40609
+ return undefined;
40610
+ }
40611
+ }
40612
+ if (positive1 === 0 && positive2 === 0) {
40613
+ if (domain1[1] === 0 && domain2[1] > 0) {
40614
+ if (!s2Extendable_max) {
40615
+ return undefined;
40616
+ }
40617
+ domain2[1] = 0;
40618
+ }
40619
+ else if (domain2[1] === 0 && domain1[1] > 0) {
40620
+ if (!s1Extendable_max) {
40621
+ return undefined;
40622
+ }
40623
+ domain1[1] = 0;
40624
+ }
40625
+ else {
40626
+ return undefined;
40627
+ }
40628
+ }
40629
+ }
40630
+ else if (includeZero1 && !includeZero2) {
40631
+ if (!inDifferentCrossZero(info1, info2)) {
40632
+ return undefined;
40633
+ }
40634
+ }
40635
+ else if (includeZero2 && !includeZero1) {
40636
+ if (!inDifferentCrossZero(info2, info1)) {
40637
+ return undefined;
40638
+ }
40639
+ }
40640
+ else {
40641
+ if (negative1 === negative2) {
40642
+ return undefined;
40643
+ }
40644
+ else if (negative1 > negative2) {
40645
+ if (!inAllCrossZero(info1, info2)) {
40646
+ return undefined;
40647
+ }
40648
+ }
40649
+ else {
40650
+ if (!inAllCrossZero(info2, info1)) {
40651
+ return undefined;
40652
+ }
40653
+ }
40654
+ }
40655
+ return { range1: domain1, range2: domain2 };
40656
+ }
40657
+
40458
40658
  function getAxisConfigInPivotChart(col, row, layout) {
40459
40659
  if (!layout._table.isPivotChart()) {
40460
40660
  return undefined;
40461
40661
  }
40462
- const table = layout._table;
40463
40662
  if (layout.indicatorsAsCol) {
40464
40663
  if (layout.hasTwoIndicatorAxes &&
40465
40664
  row === layout.columnHeaderLevelCount - 1 &&
40466
40665
  col >= layout.rowHeaderLevelCount &&
40467
40666
  col < layout.colCount - layout.rightFrozenColCount) {
40468
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col, row + 1, 'top', layout);
40469
- if (axisOption?.visible === false) {
40470
- return;
40471
- }
40472
- const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, layout.columnHeaderLevelCount - 1);
40473
- const colPath = layout.getColKeysPath(col, row);
40474
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, colPath, seriesIndice ?? 1);
40475
- if (!range) {
40667
+ const axisRange = getRange$1('top', col, row + 1, col, layout.columnHeaderLevelCount - 1, col, row, 1, layout);
40668
+ if (!axisRange) {
40476
40669
  return;
40477
40670
  }
40478
- if (isPercent) {
40479
- range.min = range.min < 0 ? -1 : 0;
40480
- range.max = range.max > 0 ? 1 : 0;
40671
+ const { range, ticks, axisOption, isZeroAlign } = axisRange;
40672
+ if (isZeroAlign) {
40673
+ const subAxisRange = getRange$1('bottom', col, row + 1, col, layout.columnHeaderLevelCount - 1, col, row, 0, layout);
40674
+ if (subAxisRange) {
40675
+ const { range: subRange } = subAxisRange;
40676
+ const align = getNewRangeToAlign(range, subRange);
40677
+ if (align) {
40678
+ range.min = align.range1[0];
40679
+ range.max = align.range1[1];
40680
+ }
40681
+ }
40481
40682
  }
40482
- const { range: niceRange, ticks } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getColWidth(col));
40483
- range.min = !isNaN(niceRange[0]) ? niceRange[0] : 0;
40484
- range.max = !isNaN(niceRange[1]) ? niceRange[1] : 1;
40485
40683
  if (isNumber$6(axisOption?.min)) {
40486
40684
  range.min = axisOption.min;
40487
40685
  if (range.min > 0) {
@@ -40508,16 +40706,7 @@
40508
40706
  else if (row === layout.rowCount - layout.bottomFrozenRowCount &&
40509
40707
  col >= layout.rowHeaderLevelCount &&
40510
40708
  col < layout.colCount - layout.rightFrozenColCount) {
40511
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col, row - 1, 'bottom', layout);
40512
- if (axisOption?.visible === false) {
40513
- return;
40514
- }
40515
40709
  const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);
40516
- const colPath = layout.getColKeysPath(col, row);
40517
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, colPath, seriesIndice ?? 0);
40518
- if (!range) {
40519
- return;
40520
- }
40521
40710
  let indicatorInfo = null;
40522
40711
  indicatorKeys?.forEach(key => {
40523
40712
  const info = layout.getIndicatorInfo(key);
@@ -40525,13 +40714,22 @@
40525
40714
  indicatorInfo = info;
40526
40715
  }
40527
40716
  });
40528
- if (isPercent) {
40529
- range.min = range.min < 0 ? -1 : 0;
40530
- range.max = range.max > 0 ? 1 : 0;
40717
+ const axisRange = getRange$1('bottom', col, row - 1, col, row, col, row, 0, layout);
40718
+ if (!axisRange) {
40719
+ return;
40720
+ }
40721
+ const { range, ticks, axisOption, isZeroAlign } = axisRange;
40722
+ if (isZeroAlign) {
40723
+ const subAxisRange = getRange$1('top', col, row - 1, col, row, col, row, 1, layout);
40724
+ if (subAxisRange) {
40725
+ const { range: subRange } = subAxisRange;
40726
+ const align = getNewRangeToAlign(range, subRange);
40727
+ if (align) {
40728
+ range.min = align.range1[0];
40729
+ range.max = align.range1[1];
40730
+ }
40731
+ }
40531
40732
  }
40532
- const { range: niceRange, ticks } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getColWidth(col));
40533
- range.min = !isNaN(niceRange[0]) ? niceRange[0] : 0;
40534
- range.max = !isNaN(niceRange[1]) ? niceRange[1] : 1;
40535
40733
  if (isNumber$6(axisOption?.min)) {
40536
40734
  range.min = axisOption.min;
40537
40735
  if (range.min > 0) {
@@ -40588,16 +40786,7 @@
40588
40786
  if (col === layout.rowHeaderLevelCount - 1 &&
40589
40787
  row >= layout.columnHeaderLevelCount &&
40590
40788
  row < layout.rowCount - layout.bottomFrozenRowCount) {
40591
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col + 1, row, 'left', layout);
40592
- if (axisOption?.visible === false) {
40593
- return;
40594
- }
40595
40789
  const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);
40596
- const rowPath = layout.getRowKeysPath(col, row);
40597
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, rowPath, seriesIndice ?? 0);
40598
- if (!range) {
40599
- return;
40600
- }
40601
40790
  let indicatorInfo = null;
40602
40791
  indicatorKeys?.forEach(key => {
40603
40792
  const info = layout.getIndicatorInfo(key);
@@ -40605,13 +40794,22 @@
40605
40794
  indicatorInfo = info;
40606
40795
  }
40607
40796
  });
40608
- if (isPercent) {
40609
- range.min = range.min < 0 ? -1 : 0;
40610
- range.max = range.max > 0 ? 1 : 0;
40797
+ const axisRange = getRange$1('left', col + 1, row, col, row, col, row, 0, layout);
40798
+ if (!axisRange) {
40799
+ return;
40800
+ }
40801
+ const { range, ticks, axisOption, isZeroAlign } = axisRange;
40802
+ if (isZeroAlign) {
40803
+ const subAxisRange = getRange$1('right', col + 1, row, col, row, col, row, 1, layout);
40804
+ if (subAxisRange) {
40805
+ const { range: subRange } = subAxisRange;
40806
+ const align = getNewRangeToAlign(range, subRange);
40807
+ if (align) {
40808
+ range.min = align.range1[0];
40809
+ range.max = align.range1[1];
40810
+ }
40811
+ }
40611
40812
  }
40612
- const { range: niceRange, ticks } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getRowHeight(row));
40613
- range.min = !isNaN(niceRange[0]) ? niceRange[0] : 0;
40614
- range.max = !isNaN(niceRange[1]) ? niceRange[1] : 1;
40615
40813
  if (isNumber$6(axisOption?.min)) {
40616
40814
  range.min = axisOption.min;
40617
40815
  if (range.min > 0) {
@@ -40643,23 +40841,22 @@
40643
40841
  else if (col === layout.colCount - layout.rightFrozenColCount &&
40644
40842
  row >= layout.columnHeaderLevelCount &&
40645
40843
  row < layout.rowCount - layout.bottomFrozenRowCount) {
40646
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col - 1, row, 'right', layout);
40647
- if (axisOption?.visible === false) {
40648
- return;
40649
- }
40650
- const indicatorKeys = layout.getIndicatorKeyInChartSpec(layout.rowHeaderLevelCount - 1, row);
40651
- const rowPath = layout.getRowKeysPath(col, row);
40652
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, rowPath, seriesIndice ?? 1);
40653
- if (!range) {
40844
+ const axisRange = getRange$1('right', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 1, layout);
40845
+ if (!axisRange) {
40654
40846
  return;
40655
40847
  }
40656
- if (isPercent) {
40657
- range.min = range.min < 0 ? -1 : 0;
40658
- range.max = range.max > 0 ? 1 : 0;
40848
+ const { range, ticks, axisOption, isZeroAlign } = axisRange;
40849
+ if (isZeroAlign) {
40850
+ const subAxisRange = getRange$1('left', col - 1, row, layout.rowHeaderLevelCount - 1, row, col, row, 0, layout);
40851
+ if (subAxisRange) {
40852
+ const { range: subRange } = subAxisRange;
40853
+ const align = getNewRangeToAlign(range, subRange);
40854
+ if (align) {
40855
+ range.min = align.range1[0];
40856
+ range.max = align.range1[1];
40857
+ }
40858
+ }
40659
40859
  }
40660
- const { range: niceRange, ticks } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getRowHeight(row));
40661
- range.min = !isNaN(niceRange[0]) ? niceRange[0] : 0;
40662
- range.max = !isNaN(niceRange[1]) ? niceRange[1] : 1;
40663
40860
  if (isNumber$6(axisOption?.min)) {
40664
40861
  range.min = axisOption.min;
40665
40862
  if (range.min > 0) {
@@ -40800,9 +40997,7 @@
40800
40997
  if (!defaultKey) {
40801
40998
  return null;
40802
40999
  }
40803
- const data = collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]
40804
- ? collectedValues[defaultKey + (isZeroAlign ? '_align' : '')]
40805
- : collectedValues[defaultKey];
41000
+ const data = collectedValues[defaultKey];
40806
41001
  const range = merge$1({}, data?.[colPath ?? ''] ?? { min: 0, max: 1 });
40807
41002
  if (range.positiveMax && range.positiveMax > range.max) {
40808
41003
  range.max = range.positiveMax;
@@ -40820,6 +41015,49 @@
40820
41015
  }
40821
41016
  return range;
40822
41017
  }
41018
+ function getRange$1(position, colForAxisOption, rowForAxisOption, colForIndicatorKey, rowForIndicatorKey, col, row, defaultSeriesIndice, layout) {
41019
+ const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(colForAxisOption, rowForAxisOption, position, layout);
41020
+ if (axisOption?.visible === false) {
41021
+ return undefined;
41022
+ }
41023
+ const indicatorKeys = layout.getIndicatorKeyInChartSpec(colForIndicatorKey, rowForIndicatorKey);
41024
+ let path;
41025
+ if (position === 'top' || position === 'bottom') {
41026
+ path = layout.getColKeysPath(col, row);
41027
+ }
41028
+ else {
41029
+ path = layout.getRowKeysPath(col, row);
41030
+ }
41031
+ const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, path, seriesIndice ?? defaultSeriesIndice);
41032
+ if (!range) {
41033
+ return undefined;
41034
+ }
41035
+ if (isPercent) {
41036
+ range.min = range.min < 0 ? -1 : 0;
41037
+ range.max = range.max > 0 ? 1 : 0;
41038
+ }
41039
+ const { range: niceRange, ticks } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, layout._table.getColWidth(col));
41040
+ range.min = !isNaN(niceRange[0]) ? niceRange[0] : 0;
41041
+ range.max = !isNaN(niceRange[1]) ? niceRange[1] : 1;
41042
+ if (isNumber$6(axisOption?.min)) {
41043
+ range.min = axisOption.min;
41044
+ if (range.min > 0) {
41045
+ axisOption.zero = false;
41046
+ }
41047
+ }
41048
+ if (isNumber$6(axisOption?.max)) {
41049
+ range.max = axisOption.max;
41050
+ if (range.max < 0) {
41051
+ axisOption.zero = false;
41052
+ }
41053
+ }
41054
+ return {
41055
+ axisOption,
41056
+ isZeroAlign,
41057
+ range,
41058
+ ticks
41059
+ };
41060
+ }
40823
41061
 
40824
41062
  function computeAxisComponentWidth(config, table) {
40825
41063
  const attribute = merge$1({}, commonAxis, config);
@@ -44045,7 +44283,7 @@
44045
44283
  stroke: false,
44046
44284
  x: padding[3],
44047
44285
  y: padding[0],
44048
- canvas: table.canvas,
44286
+ canvas: table.canvas ?? table.scenegraph.stage.window.getContext().canvas,
44049
44287
  mode: table.options.mode,
44050
44288
  modeParams: table.options.modeParams,
44051
44289
  spec: chartSpec,
@@ -45925,67 +46163,139 @@
45925
46163
  }
45926
46164
  function updateComponent(selectComp, key, scene) {
45927
46165
  const [startColStr, startRowStr, endColStr, endRowStr] = key.split('-');
45928
- const startCol = parseInt(startColStr, 10);
45929
- const startRow = parseInt(startRowStr, 10);
45930
- const endCol = parseInt(endColStr, 10);
45931
- const endRow = parseInt(endRowStr, 10);
45932
- let cellsBounds;
45933
- for (let i = startCol; i <= endCol; i++) {
45934
- for (let j = startRow; j <= endRow; j++) {
45935
- const cellGroup = scene.highPerformanceGetCell(i, j);
45936
- if (cellGroup.role !== 'cell') {
45937
- continue;
46166
+ let startCol = parseInt(startColStr, 10);
46167
+ let startRow = parseInt(startRowStr, 10);
46168
+ let endCol = parseInt(endColStr, 10);
46169
+ let endRow = parseInt(endRowStr, 10);
46170
+ let visibleCellRange;
46171
+ switch (selectComp.role) {
46172
+ case 'rowHeader':
46173
+ visibleCellRange = scene.table.getBodyVisibleRowRange();
46174
+ if (visibleCellRange) {
46175
+ startRow = Math.max(startRow, visibleCellRange.rowStart);
46176
+ endRow = Math.min(endRow, visibleCellRange.rowEnd);
45938
46177
  }
45939
- cellGroup.AABBBounds.width();
45940
- const bounds = cellGroup.globalAABBBounds;
45941
- if (!cellsBounds) {
45942
- cellsBounds = bounds;
46178
+ break;
46179
+ case 'columnHeader':
46180
+ visibleCellRange = scene.table.getBodyVisibleCellRange();
46181
+ if (visibleCellRange) {
46182
+ startCol = Math.max(startCol, visibleCellRange.colStart);
46183
+ endCol = Math.min(endCol, visibleCellRange.colEnd);
45943
46184
  }
45944
- else {
45945
- cellsBounds.union(bounds);
46185
+ break;
46186
+ case 'cornerHeader':
46187
+ break;
46188
+ case 'bottomFrozen':
46189
+ visibleCellRange = scene.table.getBodyVisibleCellRange();
46190
+ if (visibleCellRange) {
46191
+ startCol = Math.max(startCol, visibleCellRange.colStart);
46192
+ endCol = Math.min(endCol, visibleCellRange.colEnd);
45946
46193
  }
45947
- }
45948
- }
45949
- if (!cellsBounds) {
45950
- selectComp.rect.setAttributes({
45951
- visible: false
45952
- });
45953
- }
45954
- else {
45955
- selectComp.rect.setAttributes({
45956
- x: cellsBounds.x1 - scene.tableGroup.attribute.x,
45957
- y: cellsBounds.y1 - scene.tableGroup.attribute.y,
45958
- width: cellsBounds.width(),
45959
- height: cellsBounds.height(),
45960
- visible: true
45961
- });
46194
+ break;
46195
+ case 'rightFrozen':
46196
+ visibleCellRange = scene.table.getBodyVisibleCellRange();
46197
+ if (visibleCellRange) {
46198
+ startRow = Math.max(startRow, visibleCellRange.rowStart);
46199
+ endRow = Math.min(endRow, visibleCellRange.rowEnd);
46200
+ }
46201
+ break;
46202
+ case 'rightTopCorner':
46203
+ break;
46204
+ case 'leftBottomCorner':
46205
+ break;
46206
+ case 'rightBottomCorner':
46207
+ break;
46208
+ default:
46209
+ visibleCellRange = scene.table.getBodyVisibleCellRange();
46210
+ if (visibleCellRange) {
46211
+ startRow = Math.max(startRow, visibleCellRange.rowStart);
46212
+ endRow = Math.min(endRow, visibleCellRange.rowEnd);
46213
+ startCol = Math.max(startCol, visibleCellRange.colStart);
46214
+ endCol = Math.min(endCol, visibleCellRange.colEnd);
46215
+ }
46216
+ break;
45962
46217
  }
46218
+ const cellRange = scene.table.getCellRange(startCol, startRow);
46219
+ const colsWidth = scene.table.getColsWidth(cellRange.start.col, endCol);
46220
+ const rowsHeight = scene.table.getRowsHeight(cellRange.start.row, endRow);
46221
+ const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;
46222
+ selectComp.rect.setAttributes({
46223
+ x: firstCellBound.x1 - scene.tableGroup.attribute.x,
46224
+ y: firstCellBound.y1 - scene.tableGroup.attribute.y,
46225
+ width: colsWidth,
46226
+ height: rowsHeight,
46227
+ visible: true
46228
+ });
45963
46229
  const isNearRowHeader = startCol === scene.table.frozenColCount;
46230
+ const isNearRightRowHeader = endCol === scene.table.colCount - scene.table.rightFrozenColCount - 1;
45964
46231
  const isNearColHeader = startRow === scene.table.frozenRowCount;
46232
+ const isNearBottomColHeader = endRow === scene.table.rowCount - scene.table.bottomFrozenRowCount - 1;
45965
46233
  if ((isNearRowHeader && selectComp.rect.attribute.stroke[3]) ||
45966
- (isNearColHeader && selectComp.rect.attribute.stroke[0])) {
45967
- if (isNearRowHeader) {
45968
- scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'columnHeader' ? scene.cornerHeaderGroup : scene.rowHeaderGroup);
45969
- }
45970
- if (isNearColHeader) {
45971
- scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'rowHeader' ? scene.cornerHeaderGroup : scene.colHeaderGroup);
46234
+ (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) ||
46235
+ (isNearColHeader && selectComp.rect.attribute.stroke[0]) ||
46236
+ (isNearBottomColHeader && selectComp.rect.attribute.stroke[2])) {
46237
+ if (isNearRowHeader && selectComp.rect.attribute.stroke[3]) {
46238
+ scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'columnHeader'
46239
+ ? scene.cornerHeaderGroup
46240
+ : selectComp.role === 'bottomFrozen'
46241
+ ? scene.leftBottomCornerGroup
46242
+ : scene.rowHeaderGroup);
46243
+ }
46244
+ if (isNearBottomColHeader && selectComp.rect.attribute.stroke[2]) {
46245
+ scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'rowHeader'
46246
+ ? scene.leftBottomCornerGroup
46247
+ : selectComp.role === 'rightFrozen'
46248
+ ? scene.rightBottomCornerGroup
46249
+ : scene.bottomFrozenGroup);
46250
+ }
46251
+ if (isNearColHeader && selectComp.rect.attribute.stroke[0]) {
46252
+ scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'rowHeader'
46253
+ ? scene.cornerHeaderGroup
46254
+ : selectComp.role === 'rightFrozen'
46255
+ ? scene.rightTopCornerGroup
46256
+ : scene.colHeaderGroup);
46257
+ }
46258
+ if (isNearRightRowHeader && selectComp.rect.attribute.stroke[1]) {
46259
+ scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'columnHeader'
46260
+ ? scene.rightTopCornerGroup
46261
+ : selectComp.role === 'bottomFrozen'
46262
+ ? scene.rightBottomCornerGroup
46263
+ : scene.rightFrozenGroup);
45972
46264
  }
45973
46265
  if (selectComp.rect.attribute.x < scene.rowHeaderGroup.attribute.width &&
45974
46266
  scene.table.scrollLeft > 0 &&
45975
- (selectComp.role === 'body' || selectComp.role === 'columnHeader')) {
46267
+ (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')) {
45976
46268
  selectComp.rect.setAttributes({
45977
46269
  x: selectComp.rect.attribute.x + (scene.rowHeaderGroup.attribute.width - selectComp.rect.attribute.x),
45978
46270
  width: selectComp.rect.attribute.width - (scene.rowHeaderGroup.attribute.width - selectComp.rect.attribute.x)
45979
46271
  });
45980
46272
  }
46273
+ if (scene.rightFrozenGroup.attribute.width > 0 &&
46274
+ scene.rightFrozenGroup.attribute.height > 0 &&
46275
+ selectComp.rect.attribute.x + selectComp.rect.attribute.width > scene.rightFrozenGroup.attribute.x &&
46276
+ (selectComp.role === 'body' || selectComp.role === 'columnHeader' || selectComp.role === 'bottomFrozen')) {
46277
+ selectComp.rect.setAttributes({
46278
+ x: selectComp.rect.attribute.x,
46279
+ width: scene.rightFrozenGroup.attribute.x - selectComp.rect.attribute.x
46280
+ });
46281
+ }
45981
46282
  if (selectComp.rect.attribute.y < scene.colHeaderGroup.attribute.height &&
45982
46283
  scene.table.scrollTop > 0 &&
45983
- (selectComp.role === 'body' || selectComp.role === 'rowHeader')) {
46284
+ (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')) {
45984
46285
  selectComp.rect.setAttributes({
45985
46286
  y: selectComp.rect.attribute.y + (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y),
45986
46287
  height: selectComp.rect.attribute.height - (scene.colHeaderGroup.attribute.height - selectComp.rect.attribute.y)
45987
46288
  });
45988
46289
  }
46290
+ if (scene.bottomFrozenGroup.attribute.width > 0 &&
46291
+ scene.bottomFrozenGroup.attribute.height > 0 &&
46292
+ selectComp.rect.attribute.y + selectComp.rect.attribute.height > scene.bottomFrozenGroup.attribute.y &&
46293
+ (selectComp.role === 'body' || selectComp.role === 'rowHeader' || selectComp.role === 'rightFrozen')) {
46294
+ selectComp.rect.setAttributes({
46295
+ y: selectComp.rect.attribute.y,
46296
+ height: scene.bottomFrozenGroup.attribute.y - selectComp.rect.attribute.y
46297
+ });
46298
+ }
45989
46299
  }
45990
46300
  else {
45991
46301
  scene.tableGroup.insertAfter(selectComp.rect, selectComp.role === 'body'
@@ -45994,7 +46304,17 @@
45994
46304
  ? scene.colHeaderGroup
45995
46305
  : selectComp.role === 'rowHeader'
45996
46306
  ? scene.rowHeaderGroup
45997
- : scene.cornerHeaderGroup);
46307
+ : selectComp.role === 'cornerHeader'
46308
+ ? scene.cornerHeaderGroup
46309
+ : selectComp.role === 'rightTopCorner'
46310
+ ? scene.rightTopCornerGroup
46311
+ : selectComp.role === 'rightFrozen'
46312
+ ? scene.rightFrozenGroup
46313
+ : selectComp.role === 'leftBottomCorner'
46314
+ ? scene.leftBottomCornerGroup
46315
+ : selectComp.role === 'bottomFrozen'
46316
+ ? scene.bottomFrozenGroup
46317
+ : scene.rightBottomCornerGroup);
45998
46318
  }
45999
46319
  }
46000
46320
  function updateCellSelectBorder(scene, newStartCol, newStartRow, newEndCol, newEndRow) {
@@ -46066,19 +46386,51 @@
46066
46386
  });
46067
46387
  scene.selectingRangeComponents = new Map();
46068
46388
  let needRowHeader = false;
46389
+ let needRightRowHeader = false;
46069
46390
  let needColumnHeader = false;
46391
+ let needBottomColumnHeader = false;
46070
46392
  let needBody = false;
46071
46393
  let needCornerHeader = false;
46394
+ let needRightTopCornerHeader = false;
46395
+ let needRightBottomCornerHeader = false;
46396
+ let needLeftBottomCornerHeader = false;
46072
46397
  if (startCol <= scene.table.frozenColCount - 1 && startRow <= scene.table.frozenRowCount - 1) {
46073
46398
  needCornerHeader = true;
46074
46399
  }
46075
- if (startCol <= scene.table.frozenColCount - 1 && endRow >= scene.table.frozenRowCount) {
46400
+ if (endCol >= scene.table.colCount - scene.table.rightFrozenColCount && startRow <= scene.table.frozenRowCount - 1) {
46401
+ needRightTopCornerHeader = true;
46402
+ }
46403
+ if (startCol <= scene.table.frozenColCount - 1 && endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {
46404
+ needLeftBottomCornerHeader = true;
46405
+ }
46406
+ if (endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&
46407
+ endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount) {
46408
+ needRightBottomCornerHeader = true;
46409
+ }
46410
+ if (startCol <= scene.table.frozenColCount - 1 &&
46411
+ endRow >= scene.table.frozenRowCount &&
46412
+ startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1) {
46076
46413
  needRowHeader = true;
46077
46414
  }
46078
- if (startRow <= scene.table.frozenRowCount - 1 && endCol >= scene.table.frozenColCount) {
46415
+ if (endCol >= scene.table.colCount - scene.table.rightFrozenColCount &&
46416
+ endRow >= scene.table.frozenRowCount &&
46417
+ startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1) {
46418
+ needRightRowHeader = true;
46419
+ }
46420
+ if (startRow <= scene.table.frozenRowCount - 1 &&
46421
+ endCol >= scene.table.frozenColCount &&
46422
+ startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1) {
46079
46423
  needColumnHeader = true;
46080
46424
  }
46081
- if (endCol >= scene.table.frozenColCount && endRow >= scene.table.frozenRowCount) {
46425
+ if (endRow >= scene.table.rowCount - scene.table.bottomFrozenRowCount &&
46426
+ endCol >= scene.table.frozenColCount &&
46427
+ startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1) {
46428
+ needBottomColumnHeader = true;
46429
+ }
46430
+ if (startCol <= scene.table.colCount - scene.table.rightFrozenColCount - 1 &&
46431
+ endCol >= scene.table.frozenColCount &&
46432
+ startRow <= scene.table.rowCount - scene.table.bottomFrozenRowCount - 1 &&
46433
+ endRow >= scene.table.frozenRowCount) {
46082
46434
  needBody = true;
46083
46435
  }
46084
46436
  if (needCornerHeader) {
@@ -46087,23 +46439,59 @@
46087
46439
  const strokeArray = [true, !needColumnHeader, !needRowHeader, true];
46088
46440
  scene.createCellSelectBorder(startCol, startRow, cornerEndCol, cornerEndRow, 'cornerHeader', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46089
46441
  }
46442
+ if (needRightTopCornerHeader) {
46443
+ const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);
46444
+ const cornerEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);
46445
+ const strokeArray = [true, true, !needRightRowHeader, !needColumnHeader];
46446
+ scene.createCellSelectBorder(cornerStartCol, startRow, endCol, cornerEndRow, 'rightTopCorner', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46447
+ }
46448
+ if (needLeftBottomCornerHeader) {
46449
+ const cornerEndCol = Math.min(endCol, scene.table.frozenColCount - 1);
46450
+ const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);
46451
+ const strokeArray = [!needRowHeader, !needBottomColumnHeader, true, true];
46452
+ scene.createCellSelectBorder(startCol, cornerStartRow, cornerEndCol, endRow, 'leftBottomCorner', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46453
+ }
46454
+ if (needRightBottomCornerHeader) {
46455
+ const cornerStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);
46456
+ const cornerStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);
46457
+ const strokeArray = [!needRightRowHeader, true, true, !needBottomColumnHeader];
46458
+ scene.createCellSelectBorder(cornerStartCol, cornerStartRow, endCol, endRow, 'rightBottomCorner', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46459
+ }
46090
46460
  if (needColumnHeader) {
46091
46461
  const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);
46462
+ const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);
46092
46463
  const columnHeaderEndRow = Math.min(endRow, scene.table.frozenRowCount - 1);
46093
- const strokeArray = [true, true, !needBody, !needCornerHeader];
46094
- scene.createCellSelectBorder(columnHeaderStartCol, startRow, endCol, columnHeaderEndRow, 'columnHeader', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46464
+ const strokeArray = [true, !needRightTopCornerHeader, !needBody, !needCornerHeader];
46465
+ scene.createCellSelectBorder(columnHeaderStartCol, startRow, columnHeaderEndCol, columnHeaderEndRow, 'columnHeader', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46466
+ }
46467
+ if (needBottomColumnHeader) {
46468
+ const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);
46469
+ const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);
46470
+ const columnHeaderStartRow = Math.max(startRow, scene.table.rowCount - scene.table.bottomFrozenRowCount);
46471
+ const strokeArray = [!needBody, !needRightBottomCornerHeader, true, !needLeftBottomCornerHeader];
46472
+ scene.createCellSelectBorder(columnHeaderStartCol, columnHeaderStartRow, columnHeaderEndCol, endRow, 'bottomFrozen', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46095
46473
  }
46096
46474
  if (needRowHeader) {
46097
46475
  const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);
46476
+ const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);
46098
46477
  const columnHeaderEndCol = Math.min(endCol, scene.table.frozenColCount - 1);
46099
- const strokeArray = [!needCornerHeader, !needBody, true, true];
46100
- scene.createCellSelectBorder(startCol, columnHeaderStartRow, columnHeaderEndCol, endRow, 'rowHeader', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46478
+ const strokeArray = [!needCornerHeader, !needBody, !needLeftBottomCornerHeader, true];
46479
+ scene.createCellSelectBorder(startCol, columnHeaderStartRow, columnHeaderEndCol, columnHeaderEndRow, 'rowHeader', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46480
+ }
46481
+ if (needRightRowHeader) {
46482
+ const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);
46483
+ const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);
46484
+ const columnHeaderStartCol = Math.max(startCol, scene.table.colCount - scene.table.rightFrozenColCount);
46485
+ const strokeArray = [!needRightTopCornerHeader, true, !needRightBottomCornerHeader, !needBody];
46486
+ scene.createCellSelectBorder(columnHeaderStartCol, columnHeaderStartRow, endCol, columnHeaderEndRow, 'rightFrozen', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46101
46487
  }
46102
46488
  if (needBody) {
46103
46489
  const columnHeaderStartCol = Math.max(startCol, scene.table.frozenColCount);
46104
46490
  const columnHeaderStartRow = Math.max(startRow, scene.table.frozenRowCount);
46105
- const strokeArray = [!needColumnHeader, true, true, !needRowHeader];
46106
- scene.createCellSelectBorder(columnHeaderStartCol, columnHeaderStartRow, endCol, endRow, 'body', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46491
+ const columnHeaderEndCol = Math.min(endCol, scene.table.colCount - scene.table.rightFrozenColCount - 1);
46492
+ const columnHeaderEndRow = Math.min(endRow, scene.table.rowCount - scene.table.bottomFrozenRowCount - 1);
46493
+ const strokeArray = [!needColumnHeader, !needRightRowHeader, !needBottomColumnHeader, !needRowHeader];
46494
+ scene.createCellSelectBorder(columnHeaderStartCol, columnHeaderStartRow, columnHeaderEndCol, columnHeaderEndRow, 'body', `${startCol}${startRow}${endCol}${endRow}`, strokeArray);
46107
46495
  }
46108
46496
  }
46109
46497
 
@@ -46112,23 +46500,7 @@
46112
46500
  const startRow = Math.min(start_Row, end_Row);
46113
46501
  const endCol = Math.max(start_Col, end_Col);
46114
46502
  const endRow = Math.max(start_Row, end_Row);
46115
- let cellsBounds;
46116
- for (let i = startCol; i <= endCol; i++) {
46117
- for (let j = startRow; j <= endRow; j++) {
46118
- const cellGroup = scene.highPerformanceGetCell(i, j);
46119
- if (cellGroup.role === 'shadow-cell') {
46120
- continue;
46121
- }
46122
- cellGroup.AABBBounds.width();
46123
- const bounds = cellGroup.globalAABBBounds;
46124
- if (!cellsBounds) {
46125
- cellsBounds = bounds;
46126
- }
46127
- else {
46128
- cellsBounds.union(bounds);
46129
- }
46130
- }
46131
- }
46503
+ const firstCellBound = scene.highPerformanceGetCell(startCol, startRow).globalAABBBounds;
46132
46504
  const theme = scene.table.theme;
46133
46505
  const bodyClickBorderColor = theme.selectionStyle?.cellBorderColor;
46134
46506
  const bodyClickLineWidth = theme.selectionStyle?.cellBorderLineWidth;
@@ -46142,10 +46514,10 @@
46142
46514
  }
46143
46515
  return false;
46144
46516
  }),
46145
- x: cellsBounds.x1 - scene.tableGroup.attribute.x,
46146
- y: cellsBounds.y1 - scene.tableGroup.attribute.y,
46147
- width: cellsBounds.width(),
46148
- height: cellsBounds.height(),
46517
+ x: firstCellBound.x1 - scene.tableGroup.attribute.x,
46518
+ y: firstCellBound.y1 - scene.tableGroup.attribute.y,
46519
+ width: 0,
46520
+ height: 0,
46149
46521
  visible: true
46150
46522
  });
46151
46523
  scene.lastSelectId = selectId;
@@ -46159,7 +46531,17 @@
46159
46531
  ? scene.colHeaderGroup
46160
46532
  : selectRangeType === 'rowHeader'
46161
46533
  ? scene.rowHeaderGroup
46162
- : scene.cornerHeaderGroup);
46534
+ : selectRangeType === 'cornerHeader'
46535
+ ? scene.cornerHeaderGroup
46536
+ : selectRangeType === 'rightTopCorner'
46537
+ ? scene.rightTopCornerGroup
46538
+ : selectRangeType === 'rightFrozen'
46539
+ ? scene.rightFrozenGroup
46540
+ : selectRangeType === 'leftBottomCorner'
46541
+ ? scene.leftBottomCornerGroup
46542
+ : selectRangeType === 'bottomFrozen'
46543
+ ? scene.bottomFrozenGroup
46544
+ : scene.rightBottomCornerGroup);
46163
46545
  }
46164
46546
 
46165
46547
  function moveSelectingRangeComponentsToSelectedRangeComponents(scene) {
@@ -46931,10 +47313,10 @@
46931
47313
  createCornerCell(rightBottomCornerGroup, scene.table.theme.cornerRightBottomCellStyle || scene.table.theme.cornerHeaderStyle);
46932
47314
  }
46933
47315
  scene.tableGroup.addChild(bodyGroup);
46934
- scene.tableGroup.addChild(rightFrozenGroup);
46935
- scene.tableGroup.addChild(bottomFrozenGroup);
46936
47316
  scene.tableGroup.addChild(rowHeaderGroup);
47317
+ scene.tableGroup.addChild(bottomFrozenGroup);
46937
47318
  scene.tableGroup.addChild(colHeaderGroup);
47319
+ scene.tableGroup.addChild(rightFrozenGroup);
46938
47320
  scene.tableGroup.addChild(rightBottomCornerGroup);
46939
47321
  scene.tableGroup.addChild(rightTopCornerGroup);
46940
47322
  scene.tableGroup.addChild(leftBottomCornerGroup);
@@ -47361,7 +47743,7 @@
47361
47743
  if (this.table.rightFrozenColCount > 0 &&
47362
47744
  col >= this.table.colCount - this.table.rightFrozenColCount &&
47363
47745
  row < this.table.frozenRowCount) {
47364
- cell = this.rightBottomCornerGroup.getColGroup(col)?.getRowGroup(row);
47746
+ cell = this.rightTopCornerGroup.getColGroup(col)?.getRowGroup(row);
47365
47747
  }
47366
47748
  else if (this.table.bottomFrozenRowCount > 0 &&
47367
47749
  row >= this.table.rowCount - this.table.bottomFrozenRowCount &&
@@ -47456,7 +47838,9 @@
47456
47838
  this.stage.renderNextFrame();
47457
47839
  }
47458
47840
  resetAllSelectComponent() {
47459
- updateAllSelectComponent(this);
47841
+ if (this.table.stateManeger.select?.ranges?.length > 0) {
47842
+ updateAllSelectComponent(this);
47843
+ }
47460
47844
  }
47461
47845
  hideHoverIcon(col, row) {
47462
47846
  if (col === -1 || row === -1) {
@@ -50175,7 +50559,7 @@
50175
50559
  eventManeger.dealColumnMover(eventArgsSet);
50176
50560
  }
50177
50561
  else {
50178
- eventManeger.dealTableSelect(eventArgsSet);
50562
+ eventManeger.dealTableSelect(eventArgsSet, true);
50179
50563
  }
50180
50564
  return;
50181
50565
  }
@@ -50288,7 +50672,7 @@
50288
50672
  }
50289
50673
  });
50290
50674
  table.scenegraph.tableGroup.addEventListener('pointerleave', (e) => {
50291
- if (!stateManeger.isResizeCol()) {
50675
+ if (!stateManeger.isResizeCol() && !stateManeger.isMoveCol() && !stateManeger.isSelecting()) {
50292
50676
  stateManeger.updateInteractionState(InteractionState.default);
50293
50677
  stateManeger.updateCursor();
50294
50678
  }
@@ -50325,10 +50709,15 @@
50325
50709
  }
50326
50710
  }
50327
50711
  else if (stateManeger.isSelecting()) {
50328
- table.stateManeger.endSelectCells();
50329
50712
  if (table.stateManeger.select?.ranges?.length) {
50330
50713
  const lastCol = table.stateManeger.select.ranges[table.stateManeger.select.ranges.length - 1].end.col;
50331
50714
  const lastRow = table.stateManeger.select.ranges[table.stateManeger.select.ranges.length - 1].end.row;
50715
+ table.stateManeger.select.selecting = false;
50716
+ table.fireListeners(TABLE_EVENT_TYPE.SELECTED_CELL, {
50717
+ ranges: table.stateManeger.select.ranges,
50718
+ col: lastCol,
50719
+ row: lastRow
50720
+ });
50332
50721
  if (table.hasListeners(TABLE_EVENT_TYPE.DRAG_SELECT_END)) {
50333
50722
  const cellsEvent = {
50334
50723
  event: e.nativeEvent,
@@ -50558,7 +50947,8 @@
50558
50947
  const target = e.target;
50559
50948
  if (target &&
50560
50949
  !target.isDescendantsOf(table.scenegraph.tableGroup) &&
50561
- target !== table.scenegraph.tableGroup) {
50950
+ target !== table.scenegraph.tableGroup &&
50951
+ target !== table.scenegraph.stage) {
50562
50952
  stateManeger.updateInteractionState(InteractionState.default);
50563
50953
  eventManeger.dealTableHover();
50564
50954
  eventManeger.dealTableSelect();
@@ -50743,7 +51133,8 @@
50743
51133
  }
50744
51134
  state.resetInteractionState();
50745
51135
  if (event.cancelable &&
50746
- ((Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||
51136
+ (state.table.internalProps.overscrollBehavior === 'none' ||
51137
+ (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||
50747
51138
  (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, state)))) {
50748
51139
  event.preventDefault();
50749
51140
  }
@@ -50873,7 +51264,8 @@
50873
51264
  eventManeger.touchMovePoints[eventManeger.touchMovePoints.length - 2].y;
50874
51265
  handleWhell({ deltaX, deltaY }, stateManeger);
50875
51266
  if (e.cancelable &&
50876
- ((Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, stateManeger)) ||
51267
+ (table.internalProps.overscrollBehavior === 'none' ||
51268
+ (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, stateManeger)) ||
50877
51269
  (Math.abs(deltaY) <= Math.abs(deltaX) && deltaX !== 0 && isHorizontalScrollable(deltaX, stateManeger)))) {
50878
51270
  e.preventDefault();
50879
51271
  }
@@ -51168,7 +51560,7 @@
51168
51560
  }
51169
51561
  dealMenuHover(eventArgsSet) {
51170
51562
  }
51171
- dealTableSelect(eventArgsSet) {
51563
+ dealTableSelect(eventArgsSet, isSelectMoving) {
51172
51564
  if (!eventArgsSet) {
51173
51565
  this.table.stateManeger.updateSelectPos(-1, -1);
51174
51566
  return false;
@@ -51179,10 +51571,17 @@
51179
51571
  return false;
51180
51572
  }
51181
51573
  const define = this.table.getBodyColumnDefine(eventArgs.col, eventArgs.row);
51182
- if (this.table.isHeader(eventArgs.col, eventArgs.row) && define?.disableHeaderSelect) {
51574
+ if (this.table.isHeader(eventArgs.col, eventArgs.row) &&
51575
+ (define?.disableHeaderSelect || this.table.stateManeger.select?.disableHeader)) {
51576
+ if (!isSelectMoving) {
51577
+ this.table.stateManeger.updateSelectPos(-1, -1);
51578
+ }
51183
51579
  return false;
51184
51580
  }
51185
51581
  else if (!this.table.isHeader(eventArgs.col, eventArgs.row) && define?.disableSelect) {
51582
+ if (!isSelectMoving) {
51583
+ this.table.stateManeger.updateSelectPos(-1, -1);
51584
+ }
51186
51585
  return false;
51187
51586
  }
51188
51587
  if (this.table.isPivotChart() &&
@@ -51673,7 +52072,7 @@
51673
52072
  margin-right: 15px;
51674
52073
  }
51675
52074
  `;
51676
- document.body.appendChild(styleElement);
52075
+ document.head.appendChild(styleElement);
51677
52076
  }
51678
52077
 
51679
52078
  importStyle$1();
@@ -52603,7 +53002,7 @@
52603
53002
  border: 1px solid #E6E8ED;
52604
53003
  }
52605
53004
  `;
52606
- document.body.appendChild(styleElement);
53005
+ document.head.appendChild(styleElement);
52607
53006
  }
52608
53007
 
52609
53008
  importStyle();
@@ -53640,6 +54039,9 @@
53640
54039
  adjustTableSize(attrs) {
53641
54040
  let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;
53642
54041
  let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;
54042
+ if (width <= 0 || height <= 0) {
54043
+ return;
54044
+ }
53643
54045
  const rectWidth = this.table.tableNoFrameWidth;
53644
54046
  const rectHeight = this.table.tableNoFrameHeight;
53645
54047
  const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);
@@ -53947,6 +54349,9 @@
53947
54349
  adjustTableSize(attrs) {
53948
54350
  let width = isFinite(this.legendComponent.AABBBounds.width()) ? this.legendComponent.AABBBounds.width() : 0;
53949
54351
  let height = isFinite(this.legendComponent.AABBBounds.height()) ? this.legendComponent.AABBBounds.height() : 0;
54352
+ if (width <= 0 || height <= 0) {
54353
+ return;
54354
+ }
53950
54355
  const rectWidth = this.table.tableNoFrameWidth;
53951
54356
  const rectHeight = this.table.tableNoFrameHeight;
53952
54357
  const padding = getQuadProps(attrs.padding ?? this.option.padding ?? 10);
@@ -54096,7 +54501,7 @@
54096
54501
  return TABLE_EVENT_TYPE;
54097
54502
  }
54098
54503
  options;
54099
- version = "0.13.4-alpha.2";
54504
+ version = "0.13.4-alpha.4";
54100
54505
  pagination;
54101
54506
  id = `VTable${Date.now()}`;
54102
54507
  headerStyleCache;
@@ -54108,7 +54513,7 @@
54108
54513
  if (!container && options.mode !== 'node') {
54109
54514
  throw new Error("vtable's container is undefined");
54110
54515
  }
54111
- const { frozenColCount = 0, defaultRowHeight = 40, defaultHeaderRowHeight, defaultColWidth = 80, defaultHeaderColWidth, widthMode = 'standard', heightMode = 'standard', autoFillWidth = false, autoFillHeight = false, keyboardOptions, columnResizeMode, dragHeaderMode, showFrozenIcon, allowFrozenColCount, padding, hover, menu, select: click, customRender, pixelRatio = defaultPixelRatio, renderChartAsync, renderChartAsyncBatchCount, mode, modeParams, canvasWidth, canvasHeight } = options;
54516
+ const { frozenColCount = 0, defaultRowHeight = 40, defaultHeaderRowHeight, defaultColWidth = 80, defaultHeaderColWidth, widthMode = 'standard', heightMode = 'standard', autoFillWidth = false, autoFillHeight = false, keyboardOptions, columnResizeMode, dragHeaderMode, showFrozenIcon, allowFrozenColCount, padding, hover, menu, select: click, customRender, pixelRatio = defaultPixelRatio, renderChartAsync, renderChartAsyncBatchCount, mode, modeParams, canvasWidth, canvasHeight, overscrollBehavior } = options;
54112
54517
  this.container = container;
54113
54518
  this.options = options;
54114
54519
  this.options.container = container;
@@ -54160,6 +54565,7 @@
54160
54565
  internalProps.dragHeaderMode = dragHeaderMode;
54161
54566
  internalProps.renderChartAsync = renderChartAsync;
54162
54567
  setBatchRenderChartCount(renderChartAsyncBatchCount);
54568
+ internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';
54163
54569
  internalProps._rowHeightsMap = new NumberMap();
54164
54570
  internalProps._rowRangeHeightsMap = new Map();
54165
54571
  internalProps._colRangeWidthsMap = new Map();
@@ -54974,6 +55380,51 @@
54974
55380
  }
54975
55381
  return count;
54976
55382
  }
55383
+ getBodyVisibleCellRange() {
55384
+ const { scrollTop, scrollLeft } = this;
55385
+ const frozenRowsHeight = this.getFrozenRowsHeight();
55386
+ const frozenColsWidth = this.getFrozenColsWidth();
55387
+ const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();
55388
+ const rightFrozenColsWidth = this.getRightFrozenColsWidth();
55389
+ const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);
55390
+ const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);
55391
+ const rowEnd = this.getAllRowsHeight() > this.tableNoFrameHeight
55392
+ ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row
55393
+ : this.rowCount - 1;
55394
+ const colEnd = this.getAllColsWidth() > this.tableNoFrameWidth
55395
+ ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col
55396
+ : this.colCount - 1;
55397
+ if (colEnd < 0 || rowEnd < 0) {
55398
+ return null;
55399
+ }
55400
+ return { rowStart, colStart, rowEnd, colEnd };
55401
+ }
55402
+ getBodyVisibleRowRange() {
55403
+ const { scrollTop } = this;
55404
+ const frozenRowsHeight = this.getFrozenRowsHeight();
55405
+ const bottomFrozenRowsHeight = this.getBottomFrozenRowsHeight();
55406
+ const { row: rowStart } = this.getRowAt(scrollTop + frozenRowsHeight + 1);
55407
+ const rowEnd = this.getAllRowsHeight() > this.tableNoFrameHeight
55408
+ ? this.getRowAt(scrollTop + this.tableNoFrameHeight - 1 - bottomFrozenRowsHeight).row
55409
+ : this.rowCount - 1;
55410
+ if (rowEnd < 0) {
55411
+ return null;
55412
+ }
55413
+ return { rowStart, rowEnd };
55414
+ }
55415
+ getBodyVisibleColRange() {
55416
+ const { scrollLeft } = this;
55417
+ const frozenColsWidth = this.getFrozenColsWidth();
55418
+ const rightFrozenColsWidth = this.getRightFrozenColsWidth();
55419
+ const { col: colStart } = this.getColAt(scrollLeft + frozenColsWidth + 1);
55420
+ const colEnd = this.getAllColsWidth() > this.tableNoFrameWidth
55421
+ ? this.getColAt(scrollLeft + this.tableNoFrameWidth - 1 - rightFrozenColsWidth).col
55422
+ : this.colCount - 1;
55423
+ if (colEnd < 0) {
55424
+ return null;
55425
+ }
55426
+ return { colStart, colEnd };
55427
+ }
54977
55428
  get visibleColCount() {
54978
55429
  const { frozenColCount } = this;
54979
55430
  const visibleRect = this.getVisibleRect();
@@ -55058,7 +55509,7 @@
55058
55509
  }
55059
55510
  updateOption(options) {
55060
55511
  this.options = options;
55061
- const { frozenColCount = 0, defaultRowHeight = 40, defaultHeaderRowHeight, defaultColWidth = 80, defaultHeaderColWidth = 80, keyboardOptions, columnResizeMode, dragHeaderMode, showFrozenIcon, allowFrozenColCount, padding, hover, menu, select: click, pixelRatio, widthMode, heightMode, autoFillWidth, autoFillHeight, customRender, renderChartAsync, renderChartAsyncBatchCount } = options;
55512
+ const { frozenColCount = 0, defaultRowHeight = 40, defaultHeaderRowHeight, defaultColWidth = 80, defaultHeaderColWidth = 80, keyboardOptions, columnResizeMode, dragHeaderMode, showFrozenIcon, allowFrozenColCount, padding, hover, menu, select: click, pixelRatio, widthMode, heightMode, autoFillWidth, autoFillHeight, customRender, renderChartAsync, renderChartAsyncBatchCount, overscrollBehavior } = options;
55062
55513
  if (pixelRatio && pixelRatio !== this.internalProps.pixelRatio) {
55063
55514
  this.internalProps.pixelRatio = pixelRatio;
55064
55515
  }
@@ -55099,6 +55550,7 @@
55099
55550
  internalProps.dragHeaderMode = dragHeaderMode;
55100
55551
  internalProps.renderChartAsync = renderChartAsync;
55101
55552
  setBatchRenderChartCount(renderChartAsyncBatchCount);
55553
+ internalProps.overscrollBehavior = overscrollBehavior ?? 'auto';
55102
55554
  internalProps.cellTextOverflows = {};
55103
55555
  internalProps._rowHeightsMap = new NumberMap();
55104
55556
  internalProps._rowRangeHeightsMap = new Map();
@@ -56184,6 +56636,7 @@
56184
56636
  if (this.options.mode !== 'node') {
56185
56637
  return;
56186
56638
  }
56639
+ this.render();
56187
56640
  const stage = this.scenegraph.stage;
56188
56641
  if (stage) {
56189
56642
  const contentWidth = this.tableX + this.getAllColsWidth();
@@ -56367,25 +56820,21 @@
56367
56820
  }
56368
56821
  function getChartAxes(col, row, layout) {
56369
56822
  const axes = [];
56370
- const table = layout._table;
56371
56823
  if (layout.indicatorsAsCol) {
56372
56824
  const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);
56373
56825
  const colPath = layout.getColKeysPath(col, row);
56374
56826
  indicatorKeys.forEach((key, index) => {
56375
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col, row, index === 0 ? 'bottom' : 'top', layout);
56376
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, colPath, seriesIndice ?? index);
56377
- if (isPercent) {
56378
- range.min = range.min < 0 ? -1 : 0;
56379
- range.max = range.max > 0 ? 1 : 0;
56380
- }
56381
- if (axisOption?.zero || range.min === range.max) {
56382
- range.min = Math.min(range.min, 0);
56383
- range.max = Math.max(range.max, 0);
56384
- }
56385
- if (axisOption?.nice) {
56386
- const { range: axisRange } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getColWidth(col));
56387
- range.min = axisRange[0];
56388
- range.max = axisRange[1];
56827
+ const { range, isZeroAlign, axisOption } = getRange(col, row, index, index === 0 ? 'bottom' : 'top', indicatorKeys, colPath, layout);
56828
+ if (isZeroAlign) {
56829
+ const subAxisRange = getRange(col, row, indicatorKeys.length - 1 - index, index === 0 ? 'top' : 'bottom', indicatorKeys, colPath, layout);
56830
+ if (subAxisRange) {
56831
+ const { range: subRange } = subAxisRange;
56832
+ const align = getNewRangeToAlign(range, subRange);
56833
+ if (align) {
56834
+ range.min = align.range1[0];
56835
+ range.max = align.range1[1];
56836
+ }
56837
+ }
56389
56838
  }
56390
56839
  if (isNumber$6(axisOption?.min)) {
56391
56840
  range.min = axisOption.min;
@@ -56433,20 +56882,17 @@
56433
56882
  const indicatorKeys = layout.getIndicatorKeyInChartSpec(col, row);
56434
56883
  const rowPath = layout.getRowKeysPath(col, row);
56435
56884
  indicatorKeys.forEach((key, index) => {
56436
- const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col, row, index === 0 ? 'left' : 'right', layout);
56437
- const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, rowPath, seriesIndice ?? index);
56438
- if (isPercent) {
56439
- range.min = range.min < 0 ? -1 : 0;
56440
- range.max = range.max > 0 ? 1 : 0;
56441
- }
56442
- if (axisOption?.zero || range.min === range.max) {
56443
- range.min = Math.min(range.min, 0);
56444
- range.max = Math.max(range.max, 0);
56445
- }
56446
- if (axisOption?.nice) {
56447
- const { range: axisRange } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, table.getRowHeight(row));
56448
- range.min = axisRange[0];
56449
- range.max = axisRange[1];
56885
+ const { range, isZeroAlign, axisOption } = getRange(col, row, index, index === 0 ? 'left' : 'right', indicatorKeys, rowPath, layout);
56886
+ if (isZeroAlign) {
56887
+ const subAxisRange = getRange(col, row, indicatorKeys.length - 1 - index, index === 0 ? 'right' : 'left', indicatorKeys, rowPath, layout);
56888
+ if (subAxisRange) {
56889
+ const { range: subRange } = subAxisRange;
56890
+ const align = getNewRangeToAlign(range, subRange);
56891
+ if (align) {
56892
+ range.min = align.range1[0];
56893
+ range.max = align.range1[1];
56894
+ }
56895
+ }
56450
56896
  }
56451
56897
  if (isNumber$6(axisOption?.min)) {
56452
56898
  range.min = axisOption.min;
@@ -56517,6 +56963,34 @@
56517
56963
  }
56518
56964
  return chartSpec.data.id;
56519
56965
  }
56966
+ function getRange(col, row, index, position, indicatorKeys, path, layout) {
56967
+ const { axisOption, isPercent, isZeroAlign, seriesIndice } = getAxisOption(col, row, position, layout);
56968
+ const range = getAxisRange(layout.dataset.collectedValues, indicatorKeys, isZeroAlign, path, seriesIndice ?? index);
56969
+ if (isPercent) {
56970
+ range.min = range.min < 0 ? -1 : 0;
56971
+ range.max = range.max > 0 ? 1 : 0;
56972
+ }
56973
+ if (axisOption?.zero || range.min === range.max) {
56974
+ range.min = Math.min(range.min, 0);
56975
+ range.max = Math.max(range.max, 0);
56976
+ }
56977
+ if (axisOption?.nice) {
56978
+ const { range: axisRange } = getAxisDomainRangeAndLabels(range.min, range.max, axisOption, isZeroAlign, layout._table.getColWidth(col));
56979
+ range.min = axisRange[0];
56980
+ range.max = axisRange[1];
56981
+ }
56982
+ if (isNumber$6(axisOption?.min)) {
56983
+ range.min = axisOption.min;
56984
+ }
56985
+ if (isNumber$6(axisOption?.max)) {
56986
+ range.max = axisOption.max;
56987
+ }
56988
+ return {
56989
+ range,
56990
+ isZeroAlign,
56991
+ axisOption
56992
+ };
56993
+ }
56520
56994
 
56521
56995
  let seqId = 0;
56522
56996
  class SimpleHeaderLayoutMap {
@@ -57246,7 +57720,9 @@
57246
57720
  constructor(titleOption, table) {
57247
57721
  this.table = table;
57248
57722
  this._titleOption = titleOption;
57249
- this._titleComponent = this._createOrUpdateTitleComponent(this._getTitleAttrs());
57723
+ if (titleOption.visible !== false) {
57724
+ this._titleComponent = this._createOrUpdateTitleComponent(this._getTitleAttrs());
57725
+ }
57250
57726
  }
57251
57727
  _createOrUpdateTitleComponent(attrs) {
57252
57728
  if (this._titleComponent) {
@@ -57297,8 +57773,8 @@
57297
57773
  this._adjustTableSize(this._titleComponent.attribute);
57298
57774
  }
57299
57775
  _adjustTableSize(attrs) {
57300
- const width = isFinite(this._titleComponent.AABBBounds.width()) ? this._titleComponent.AABBBounds.width() : 0;
57301
- const height = isFinite(this._titleComponent.AABBBounds.height()) ? this._titleComponent.AABBBounds.height() : 0;
57776
+ const width = isFinite(this._titleComponent?.AABBBounds.width()) ? this._titleComponent.AABBBounds.width() : 0;
57777
+ const height = isFinite(this._titleComponent?.AABBBounds.height()) ? this._titleComponent.AABBBounds.height() : 0;
57302
57778
  if (this._titleOption.orient === 'left') {
57303
57779
  this.table.tableNoFrameWidth = this.table.tableNoFrameWidth - Math.ceil(width);
57304
57780
  this.table.tableX += Math.ceil(width);
@@ -57331,7 +57807,8 @@
57331
57807
  this.isReleased = true;
57332
57808
  }
57333
57809
  _getTitleAttrs() {
57334
- const padding = getQuadProps(this._titleOption.padding ?? 10);
57810
+ const defaultPadding = this._titleOption.text || this._titleOption.subtext ? 10 : 0;
57811
+ const padding = getQuadProps(this._titleOption.padding ?? defaultPadding);
57335
57812
  const realWidth = this._titleOption.width ??
57336
57813
  Math.min(this.table.tableNoFrameWidth, this.table.getDrawRange().width) - padding[1] - padding[3];
57337
57814
  const realHeight = this._titleOption.height ??
@@ -60576,206 +61053,6 @@
60576
61053
  };
60577
61054
  }
60578
61055
 
60579
- function isValidAlignDomain(domain) {
60580
- return domain.length === 2 && isValidNumber$1(domain[0]) && isValidNumber$1(domain[1]) && domain[1] >= domain[0];
60581
- }
60582
- function getScaleInfo(domain) {
60583
- const total = domain[1] - domain[0];
60584
- const includeZero = domain[1] * domain[0] < 0;
60585
- let negative = domain[0] <= 0 ? 0 - domain[0] : 0;
60586
- let positive = domain[1] > 0 ? domain[1] - 0 : 0;
60587
- if (total === 0) {
60588
- if (domain[0] < 0) {
60589
- negative = 1;
60590
- positive = 0;
60591
- }
60592
- else if (domain[0] > 0) {
60593
- negative = 0;
60594
- positive = 1;
60595
- }
60596
- }
60597
- else {
60598
- negative = negative / total;
60599
- positive = positive / total;
60600
- }
60601
- return {
60602
- total,
60603
- negative,
60604
- positive,
60605
- includeZero,
60606
- domain,
60607
- extendable_min: true,
60608
- extendable_max: true
60609
- };
60610
- }
60611
- function inDifferentCrossZero(info1, info2) {
60612
- const { positive: positive1, negative: negative1, extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;
60613
- const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, extendable_max: s2Extendable_max, domain: domain2 } = info2;
60614
- if (positive2 > 0) {
60615
- if (!s2Extendable_min) {
60616
- return false;
60617
- }
60618
- let comp = negative1 / positive1;
60619
- if (s1Extendable_max) {
60620
- comp = negative1 / Math.max(positive1, positive2);
60621
- domain1[1] = -domain1[0] / comp;
60622
- }
60623
- domain2[0] = -domain2[1] * comp;
60624
- }
60625
- else if (negative2 > 0) {
60626
- if (!s2Extendable_max) {
60627
- return false;
60628
- }
60629
- let comp = positive1 / negative1;
60630
- if (s1Extendable_min) {
60631
- comp = positive1 / Math.max(negative1, negative1);
60632
- domain1[0] = -domain1[1] / comp;
60633
- }
60634
- domain2[1] = -domain2[0] * comp;
60635
- }
60636
- return true;
60637
- }
60638
- function inOnlyZeroDomain(info1, info2) {
60639
- const { extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, domain: domain1 } = info1;
60640
- const { positive: positive2, negative: negative2, domain: domain2 } = info2;
60641
- if (positive2 === 0 && negative2 === 0) {
60642
- return false;
60643
- }
60644
- if (positive2 > 0 && !s1Extendable_max) {
60645
- return false;
60646
- }
60647
- if (negative2 > 0 && !s1Extendable_min) {
60648
- return false;
60649
- }
60650
- domain1[0] = domain2[0];
60651
- domain1[1] = domain2[1];
60652
- return true;
60653
- }
60654
- function inAllCrossZero(info1, info2) {
60655
- const { positive: positive1, negative: negative1, extendable_max: s1Extendable_max, domain: domain1 } = info1;
60656
- const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, domain: domain2 } = info2;
60657
- if (s1Extendable_max && s2Extendable_min) {
60658
- const comp = Math.max(negative1, negative2) / Math.max(positive1, positive2);
60659
- domain1[1] = -domain1[0] / comp;
60660
- domain2[0] = -domain2[1] * comp;
60661
- }
60662
- else if (s2Extendable_min) {
60663
- const comp = negative1 / positive1;
60664
- domain2[0] = -domain2[1] * comp;
60665
- }
60666
- else if (s1Extendable_max) {
60667
- const comp = negative2 / positive2;
60668
- domain1[1] = -domain1[0] / comp;
60669
- }
60670
- else {
60671
- return false;
60672
- }
60673
- return true;
60674
- }
60675
- function inNoCrossDifferentSide(info1, info2) {
60676
- const { extendable_min: s1Extendable_min, domain: domain1 } = info1;
60677
- const { extendable_max: s2Extendable_max, domain: domain2 } = info2;
60678
- if (!s1Extendable_min || !s2Extendable_max) {
60679
- return false;
60680
- }
60681
- domain1[0] = -domain1[1];
60682
- domain2[1] = -domain2[0];
60683
- return true;
60684
- }
60685
- function getNewRangeToAlign(range1, range2) {
60686
- const domain1 = [range1.min, range1.max];
60687
- const domain2 = [range2.min, range2.max];
60688
- if (!isValidAlignDomain(domain1) || !isValidAlignDomain(domain2)) {
60689
- return undefined;
60690
- }
60691
- const info1 = getScaleInfo(domain1);
60692
- const info2 = getScaleInfo(domain2);
60693
- const { positive: positive1, negative: negative1, extendable_min: s1Extendable_min, extendable_max: s1Extendable_max, includeZero: includeZero1 } = info1;
60694
- const { positive: positive2, negative: negative2, extendable_min: s2Extendable_min, extendable_max: s2Extendable_max, includeZero: includeZero2 } = info2;
60695
- if (positive1 === 0 && negative1 === 0) {
60696
- if (!inOnlyZeroDomain(info1, info2)) {
60697
- return undefined;
60698
- }
60699
- }
60700
- else if (positive2 === 0 && negative2 === 0) {
60701
- if (!inOnlyZeroDomain(info2, info1)) {
60702
- return undefined;
60703
- }
60704
- }
60705
- else if (!includeZero1 && !includeZero2) {
60706
- if (negative1 === 0 && positive2 === 0) {
60707
- if (!inNoCrossDifferentSide(info1, info2)) {
60708
- return undefined;
60709
- }
60710
- }
60711
- else if (negative2 === 0 && positive1 === 0) {
60712
- if (!inNoCrossDifferentSide(info2, info1)) {
60713
- return undefined;
60714
- }
60715
- }
60716
- if (negative1 === 0 && negative2 === 0) {
60717
- if (domain1[0] === 0 && domain2[0] > 0) {
60718
- if (!s2Extendable_min) {
60719
- return undefined;
60720
- }
60721
- domain2[0] = 0;
60722
- }
60723
- else if (domain2[0] === 0 && domain1[0] > 0) {
60724
- if (!s1Extendable_min) {
60725
- return undefined;
60726
- }
60727
- domain1[0] = 0;
60728
- }
60729
- else {
60730
- return undefined;
60731
- }
60732
- }
60733
- if (positive1 === 0 && positive2 === 0) {
60734
- if (domain1[1] === 0 && domain2[1] > 0) {
60735
- if (!s2Extendable_max) {
60736
- return undefined;
60737
- }
60738
- domain2[1] = 0;
60739
- }
60740
- else if (domain2[1] === 0 && domain1[1] > 0) {
60741
- if (!s1Extendable_max) {
60742
- return undefined;
60743
- }
60744
- domain1[1] = 0;
60745
- }
60746
- else {
60747
- return undefined;
60748
- }
60749
- }
60750
- }
60751
- else if (includeZero1 && !includeZero2) {
60752
- if (!inDifferentCrossZero(info1, info2)) {
60753
- return undefined;
60754
- }
60755
- }
60756
- else if (includeZero2 && !includeZero1) {
60757
- if (!inDifferentCrossZero(info2, info1)) {
60758
- return undefined;
60759
- }
60760
- }
60761
- else {
60762
- if (negative1 === negative2) {
60763
- return undefined;
60764
- }
60765
- else if (negative1 > negative2) {
60766
- if (!inAllCrossZero(info1, info2)) {
60767
- return undefined;
60768
- }
60769
- }
60770
- else {
60771
- if (!inAllCrossZero(info2, info1)) {
60772
- return undefined;
60773
- }
60774
- }
60775
- }
60776
- return { range1: domain1, range2: domain2 };
60777
- }
60778
-
60779
61056
  class Dataset {
60780
61057
  dataConfig;
60781
61058
  records;
@@ -60889,7 +61166,6 @@
60889
61166
  }
60890
61167
  typeof window !== 'undefined' ? window.performance.now() : 0;
60891
61168
  if (this.dataConfig?.isPivotChart) {
60892
- this.dealWithZeroAlign();
60893
61169
  this.cacheDeminsionCollectedValues();
60894
61170
  }
60895
61171
  }
@@ -61222,7 +61498,6 @@
61222
61498
  this.processCollectedValuesWithSumBy();
61223
61499
  this.processCollectedValuesWithSortBy();
61224
61500
  if (this.dataConfig?.isPivotChart) {
61225
- this.dealWithZeroAlign();
61226
61501
  this.cacheDeminsionCollectedValues();
61227
61502
  }
61228
61503
  }
@@ -61687,44 +61962,6 @@
61687
61962
  tree.forEach((treeNode) => getPath(treeNode, []));
61688
61963
  return result;
61689
61964
  }
61690
- dealWithZeroAlign() {
61691
- const indicatorsToAlign = [];
61692
- for (let i = 0; i < this.aggregationRules.length; i++) {
61693
- const rule = this.aggregationRules[i];
61694
- if (isArray$5(rule.field) && rule.field.length === 2) {
61695
- indicatorsToAlign.push(rule.field);
61696
- }
61697
- }
61698
- indicatorsToAlign.forEach(indicatorToAlign => {
61699
- const indicator1 = indicatorToAlign[0];
61700
- const indicator2 = indicatorToAlign[1];
61701
- const collectedValue1 = this.collectedValues[indicator1];
61702
- const collectedValue2 = this.collectedValues[indicator2];
61703
- this.collectedValues[indicator1 + '_align'] = {};
61704
- this.collectedValues[indicator2 + '_align'] = {};
61705
- const toAlignCollectedValue = collectedValue1 || collectedValue2;
61706
- for (const key in toAlignCollectedValue) {
61707
- const range1 = collectedValue1?.[key] ?? { min: 0, max: 1 };
61708
- const range2 = collectedValue2?.[key] ?? { min: 0, max: 1 };
61709
- const newRanges = getNewRangeToAlign(range1, range2);
61710
- if (!newRanges) {
61711
- this.collectedValues[indicator1 + '_align'][key] = {
61712
- min: range1.min,
61713
- max: range1.max
61714
- };
61715
- this.collectedValues[indicator2 + '_align'][key] = {
61716
- min: range2.min,
61717
- max: range2.max
61718
- };
61719
- }
61720
- else {
61721
- const { range1: newRange1, range2: newRange2 } = newRanges;
61722
- this.collectedValues[indicator1 + '_align'][key] = { min: newRange1[0], max: newRange1[1] };
61723
- this.collectedValues[indicator2 + '_align'][key] = { min: newRange2[0], max: newRange2[1] };
61724
- }
61725
- }
61726
- });
61727
- }
61728
61965
  cacheDeminsionCollectedValues() {
61729
61966
  for (const key in this.collectValuesBy) {
61730
61967
  if (this.collectValuesBy[key].type === 'xField' || this.collectValuesBy[key].type === 'yField') {
@@ -63042,67 +63279,70 @@
63042
63279
  }
63043
63280
  getChartInstance(cellHeaderPaths) {
63044
63281
  const cellAddr = this.getCellAddressByHeaderPaths(cellHeaderPaths);
63045
- const cellPosition = this.getCellRelativeRect(cellAddr.col, cellAddr.row);
63046
- const cellGroup = this.scenegraph.getCell(cellAddr.col, cellAddr.row);
63047
- let chartInstance;
63048
- const chartNode = cellGroup?.getChildren()?.[0];
63049
- if (chartNode.attribute.chartInstance) {
63050
- chartInstance = chartNode.attribute.chartInstance;
63051
- const { dataId, data, axes, spec } = chartNode.attribute;
63052
- const viewBox = chartNode.getViewBox();
63053
- axes.forEach((axis, index) => {
63054
- if (axis.type === 'linear') {
63055
- const chartAxis = chartInstance._chart._components[index];
63056
- chartAxis._domain = {
63057
- min: axis.range?.min ?? 0,
63058
- max: axis.range?.max ?? 0
63059
- };
63060
- }
63061
- else if (axis.type === 'band') {
63062
- const chartAxis = chartInstance._chart._components[index];
63063
- chartAxis._spec.domain = axis.domain.slice(0);
63064
- chartAxis.updateScaleDomain();
63282
+ if (cellAddr) {
63283
+ const cellPosition = this.getCellRelativeRect(cellAddr.col, cellAddr.row);
63284
+ const cellGroup = this.scenegraph.getCell(cellAddr.col, cellAddr.row);
63285
+ let chartInstance;
63286
+ const chartNode = cellGroup?.getChildren()?.[0];
63287
+ if (chartNode.attribute.chartInstance) {
63288
+ chartInstance = chartNode.attribute.chartInstance;
63289
+ const { dataId, data, axes, spec } = chartNode.attribute;
63290
+ const viewBox = chartNode.getViewBox();
63291
+ axes.forEach((axis, index) => {
63292
+ if (axis.type === 'linear') {
63293
+ const chartAxis = chartInstance._chart._components[index];
63294
+ chartAxis._domain = {
63295
+ min: axis.range?.min ?? 0,
63296
+ max: axis.range?.max ?? 0
63297
+ };
63298
+ }
63299
+ else if (axis.type === 'band') {
63300
+ const chartAxis = chartInstance._chart._components[index];
63301
+ chartAxis._spec.domain = axis.domain.slice(0);
63302
+ chartAxis.updateScaleDomain();
63303
+ }
63304
+ });
63305
+ chartInstance.updateViewBox({
63306
+ x1: viewBox.x1 - chartNode.getRootNode().table.scrollLeft,
63307
+ x2: viewBox.x2 - chartNode.getRootNode().table.scrollLeft,
63308
+ y1: viewBox.y1 - chartNode.getRootNode().table.scrollTop,
63309
+ y2: viewBox.y2 - chartNode.getRootNode().table.scrollTop
63310
+ }, false, false);
63311
+ if (typeof dataId === 'string') {
63312
+ chartInstance.updateDataSync(dataId, data ?? []);
63065
63313
  }
63066
- });
63067
- chartInstance.updateViewBox({
63068
- x1: viewBox.x1 - chartNode.getRootNode().table.scrollLeft,
63069
- x2: viewBox.x2 - chartNode.getRootNode().table.scrollLeft,
63070
- y1: viewBox.y1 - chartNode.getRootNode().table.scrollTop,
63071
- y2: viewBox.y2 - chartNode.getRootNode().table.scrollTop
63072
- }, false, false);
63073
- if (typeof dataId === 'string') {
63074
- chartInstance.updateDataSync(dataId, data ?? []);
63075
- }
63076
- else {
63077
- const dataBatch = [];
63078
- for (const dataIdStr in dataId) {
63079
- const dataIdAndField = dataId[dataIdStr];
63080
- const series = spec.series.find((item) => item?.data?.id === dataIdStr);
63081
- dataBatch.push({
63082
- id: dataIdStr,
63083
- values: dataIdAndField
63084
- ? data?.filter((item) => {
63085
- return item.hasOwnProperty(dataIdAndField);
63086
- }) ?? []
63087
- : data ?? [],
63088
- fields: series?.data?.fields
63089
- });
63090
- if (!chartInstance.updateFullDataSync) {
63091
- chartInstance.updateDataSync(dataIdStr, dataIdAndField
63092
- ? data?.filter((item) => {
63093
- return item.hasOwnProperty(dataIdAndField);
63094
- }) ?? []
63095
- : data ?? []);
63314
+ else {
63315
+ const dataBatch = [];
63316
+ for (const dataIdStr in dataId) {
63317
+ const dataIdAndField = dataId[dataIdStr];
63318
+ const series = spec.series.find((item) => item?.data?.id === dataIdStr);
63319
+ dataBatch.push({
63320
+ id: dataIdStr,
63321
+ values: dataIdAndField
63322
+ ? data?.filter((item) => {
63323
+ return item.hasOwnProperty(dataIdAndField);
63324
+ }) ?? []
63325
+ : data ?? [],
63326
+ fields: series?.data?.fields
63327
+ });
63328
+ if (!chartInstance.updateFullDataSync) {
63329
+ chartInstance.updateDataSync(dataIdStr, dataIdAndField
63330
+ ? data?.filter((item) => {
63331
+ return item.hasOwnProperty(dataIdAndField);
63332
+ }) ?? []
63333
+ : data ?? []);
63334
+ }
63096
63335
  }
63336
+ chartInstance.updateFullDataSync?.(dataBatch);
63097
63337
  }
63098
- chartInstance.updateFullDataSync?.(dataBatch);
63338
+ this.render();
63099
63339
  }
63100
- this.render();
63340
+ return {
63341
+ chartInstance,
63342
+ bounds: cellPosition.bounds
63343
+ };
63101
63344
  }
63102
- return {
63103
- chartInstance,
63104
- bounds: cellPosition.bounds
63105
- };
63345
+ return {};
63106
63346
  }
63107
63347
  _getDimensionSortArray() {
63108
63348
  if (this.options?.axes?.length) {
@@ -63982,7 +64222,7 @@
63982
64222
  return new Tag(params ? params.attribute : {});
63983
64223
  }
63984
64224
 
63985
- const version = "0.13.4-alpha.2";
64225
+ const version = "0.13.4-alpha.4";
63986
64226
  function getIcons() {
63987
64227
  return get$1();
63988
64228
  }