@visactor/vtable 1.8.2 → 1.8.3

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 (127) hide show
  1. package/cjs/ListTable.js +7 -4
  2. package/cjs/ListTable.js.map +1 -1
  3. package/cjs/components/legend/discrete-legend/discrete-legend.js +7 -4
  4. package/cjs/components/legend/discrete-legend/discrete-legend.js.map +1 -1
  5. package/cjs/components/react/react-custom-layout.js +1 -0
  6. package/cjs/components/react/react-custom-layout.js.map +1 -1
  7. package/cjs/core/BaseTable.js +1 -1
  8. package/cjs/core/BaseTable.js.map +1 -1
  9. package/cjs/core/TABLE_EVENT_TYPE.d.ts +2 -0
  10. package/cjs/core/TABLE_EVENT_TYPE.js +2 -0
  11. package/cjs/core/TABLE_EVENT_TYPE.js.map +1 -1
  12. package/cjs/core/tableHelper.d.ts +2 -1
  13. package/cjs/core/tableHelper.js +9 -2
  14. package/cjs/core/tableHelper.js.map +1 -1
  15. package/cjs/data/DataSource.d.ts +1 -0
  16. package/cjs/data/DataSource.js +4 -0
  17. package/cjs/data/DataSource.js.map +1 -1
  18. package/cjs/event/event.js +2 -2
  19. package/cjs/event/event.js.map +1 -1
  20. package/cjs/event/listener/container-dom.js +1 -1
  21. package/cjs/event/listener/container-dom.js.map +1 -1
  22. package/cjs/event/listener/table-group.js +43 -19
  23. package/cjs/event/listener/table-group.js.map +1 -1
  24. package/cjs/event/scroll.js +1 -1
  25. package/cjs/event/scroll.js.map +1 -1
  26. package/cjs/index.d.ts +1 -1
  27. package/cjs/index.js +1 -1
  28. package/cjs/index.js.map +1 -1
  29. package/cjs/layout/pivot-header-layout.js +10 -3
  30. package/cjs/layout/pivot-header-layout.js.map +1 -1
  31. package/cjs/layout/simple-header-layout.js +5 -1
  32. package/cjs/layout/simple-header-layout.js.map +1 -1
  33. package/cjs/scenegraph/component/custom.js +6 -4
  34. package/cjs/scenegraph/component/custom.js.map +1 -1
  35. package/cjs/scenegraph/group-creater/cell-helper.js +32 -9
  36. package/cjs/scenegraph/group-creater/cell-helper.js.map +1 -1
  37. package/cjs/scenegraph/group-creater/column-helper.js +37 -9
  38. package/cjs/scenegraph/group-creater/column-helper.js.map +1 -1
  39. package/cjs/scenegraph/layout/compute-col-width.js +9 -7
  40. package/cjs/scenegraph/layout/compute-col-width.js.map +1 -1
  41. package/cjs/scenegraph/layout/compute-row-height.js +9 -7
  42. package/cjs/scenegraph/layout/compute-row-height.js.map +1 -1
  43. package/cjs/scenegraph/layout/frozen-react.js +7 -7
  44. package/cjs/scenegraph/layout/frozen-react.js.map +1 -1
  45. package/cjs/scenegraph/layout/update-height.js +1 -2
  46. package/cjs/scenegraph/layout/update-height.js.map +1 -1
  47. package/cjs/scenegraph/layout/update-width.js +3 -4
  48. package/cjs/scenegraph/layout/update-width.js.map +1 -1
  49. package/cjs/state/cell-move/index.js +3 -2
  50. package/cjs/state/cell-move/index.js.map +1 -1
  51. package/cjs/state/select/update-position.js +19 -4
  52. package/cjs/state/select/update-position.js.map +1 -1
  53. package/cjs/state/state.d.ts +2 -1
  54. package/cjs/state/state.js +11 -4
  55. package/cjs/state/state.js.map +1 -1
  56. package/cjs/ts-types/base-table.d.ts +2 -0
  57. package/cjs/ts-types/base-table.js.map +1 -1
  58. package/cjs/ts-types/events.d.ts +11 -0
  59. package/cjs/ts-types/events.js.map +1 -1
  60. package/cjs/ts-types/pivot-table/corner.d.ts +3 -0
  61. package/cjs/ts-types/pivot-table/corner.js.map +1 -1
  62. package/cjs/vrender.js.map +1 -1
  63. package/dist/vtable.js +245 -82
  64. package/dist/vtable.min.js +2 -2
  65. package/es/ListTable.js +8 -5
  66. package/es/ListTable.js.map +1 -1
  67. package/es/components/legend/discrete-legend/discrete-legend.js +5 -4
  68. package/es/components/legend/discrete-legend/discrete-legend.js.map +1 -1
  69. package/es/components/react/react-custom-layout.js +1 -0
  70. package/es/components/react/react-custom-layout.js.map +1 -1
  71. package/es/core/BaseTable.js +1 -1
  72. package/es/core/BaseTable.js.map +1 -1
  73. package/es/core/TABLE_EVENT_TYPE.d.ts +2 -0
  74. package/es/core/TABLE_EVENT_TYPE.js +2 -0
  75. package/es/core/TABLE_EVENT_TYPE.js.map +1 -1
  76. package/es/core/tableHelper.d.ts +2 -1
  77. package/es/core/tableHelper.js +7 -0
  78. package/es/core/tableHelper.js.map +1 -1
  79. package/es/data/DataSource.d.ts +1 -0
  80. package/es/data/DataSource.js +4 -0
  81. package/es/data/DataSource.js.map +1 -1
  82. package/es/event/event.js +2 -2
  83. package/es/event/event.js.map +1 -1
  84. package/es/event/listener/container-dom.js +1 -1
  85. package/es/event/listener/container-dom.js.map +1 -1
  86. package/es/event/listener/table-group.js +43 -19
  87. package/es/event/listener/table-group.js.map +1 -1
  88. package/es/event/scroll.js +1 -1
  89. package/es/event/scroll.js.map +1 -1
  90. package/es/index.d.ts +1 -1
  91. package/es/index.js +1 -1
  92. package/es/index.js.map +1 -1
  93. package/es/layout/pivot-header-layout.js +10 -3
  94. package/es/layout/pivot-header-layout.js.map +1 -1
  95. package/es/layout/simple-header-layout.js +5 -1
  96. package/es/layout/simple-header-layout.js.map +1 -1
  97. package/es/scenegraph/component/custom.js +6 -4
  98. package/es/scenegraph/component/custom.js.map +1 -1
  99. package/es/scenegraph/group-creater/cell-helper.js +28 -7
  100. package/es/scenegraph/group-creater/cell-helper.js.map +1 -1
  101. package/es/scenegraph/group-creater/column-helper.js +35 -8
  102. package/es/scenegraph/group-creater/column-helper.js.map +1 -1
  103. package/es/scenegraph/layout/compute-col-width.js +10 -6
  104. package/es/scenegraph/layout/compute-col-width.js.map +1 -1
  105. package/es/scenegraph/layout/compute-row-height.js +10 -6
  106. package/es/scenegraph/layout/compute-row-height.js.map +1 -1
  107. package/es/scenegraph/layout/frozen-react.js +7 -7
  108. package/es/scenegraph/layout/frozen-react.js.map +1 -1
  109. package/es/scenegraph/layout/update-height.js +1 -2
  110. package/es/scenegraph/layout/update-height.js.map +1 -1
  111. package/es/scenegraph/layout/update-width.js +3 -4
  112. package/es/scenegraph/layout/update-width.js.map +1 -1
  113. package/es/state/cell-move/index.js +3 -2
  114. package/es/state/cell-move/index.js.map +1 -1
  115. package/es/state/select/update-position.js +19 -4
  116. package/es/state/select/update-position.js.map +1 -1
  117. package/es/state/state.d.ts +2 -1
  118. package/es/state/state.js +11 -4
  119. package/es/state/state.js.map +1 -1
  120. package/es/ts-types/base-table.d.ts +2 -0
  121. package/es/ts-types/base-table.js.map +1 -1
  122. package/es/ts-types/events.d.ts +11 -0
  123. package/es/ts-types/events.js.map +1 -1
  124. package/es/ts-types/pivot-table/corner.d.ts +3 -0
  125. package/es/ts-types/pivot-table/corner.js.map +1 -1
  126. package/es/vrender.js.map +1 -1
  127. package/package.json +4 -4
package/dist/vtable.js CHANGED
@@ -27878,6 +27878,7 @@
27878
27878
  MOUSEENTER_TABLE: 'mouseenter_table',
27879
27879
  MOUSELEAVE_TABLE: 'mouseleave_table',
27880
27880
  MOUSEDOWN_TABLE: 'mousedown_table',
27881
+ MOUSEMOVE_TABLE: 'mousemove_table',
27881
27882
  MOUSEMOVE_CELL: 'mousemove_cell',
27882
27883
  MOUSEENTER_CELL: 'mouseenter_cell',
27883
27884
  MOUSELEAVE_CELL: 'mouseleave_cell',
@@ -27886,6 +27887,7 @@
27886
27887
  RESIZE_COLUMN_END: 'resize_column_end',
27887
27888
  RESIZE_ROW: 'resize_row',
27888
27889
  RESIZE_ROW_END: 'resize_row_end',
27890
+ CHANGE_HEADER_POSITION_START: 'change_header_position_start',
27889
27891
  CHANGE_HEADER_POSITION: 'change_header_position',
27890
27892
  SORT_CLICK: 'sort_click',
27891
27893
  FREEZE_CLICK: 'freeze_click',
@@ -30908,8 +30910,12 @@
30908
30910
  this.registerAggregator(AggregationType.NONE, NoneAggregator);
30909
30911
  this.registerAggregator(AggregationType.CUSTOM, CustomAggregator);
30910
30912
  }
30913
+ updateColumns(columns) {
30914
+ this.columns = columns;
30915
+ }
30911
30916
  _generateFieldAggragations() {
30912
30917
  const columnObjs = this.columns;
30918
+ this.fieldAggregators = [];
30913
30919
  for (let i = 0; i < columnObjs?.length; i++) {
30914
30920
  delete columnObjs[i].vtable_aggregator;
30915
30921
  const field = columnObjs[i].field;
@@ -32873,6 +32879,15 @@
32873
32879
  }
32874
32880
  }
32875
32881
  }
32882
+ function checkHasAggregationOnColumnDefine(colDefs) {
32883
+ for (let i = 0; i < colDefs.length; i++) {
32884
+ const colDef = colDefs[i];
32885
+ if (colDef.aggregation) {
32886
+ return true;
32887
+ }
32888
+ }
32889
+ return false;
32890
+ }
32876
32891
 
32877
32892
  let Icon$1 = class Icon extends Image$2 {
32878
32893
  role;
@@ -32959,6 +32974,12 @@
32959
32974
  }
32960
32975
  }
32961
32976
  }
32977
+ if (table.widthMode === 'autoWidth') {
32978
+ table.scenegraph.recalculateColWidths();
32979
+ }
32980
+ if (table.heightMode === 'autoHeight') {
32981
+ table.scenegraph.recalculateRowHeights();
32982
+ }
32962
32983
  table.scenegraph.renderSceneGraph();
32963
32984
  }
32964
32985
  getCustomLayoutFunc(col, row) {
@@ -33162,8 +33183,8 @@
33162
33183
  }
33163
33184
  if (typeof customLayout === 'function') {
33164
33185
  const arg = {
33165
- col,
33166
- row,
33186
+ col: range?.start.col ?? col,
33187
+ row: range?.start.row ?? row,
33167
33188
  dataValue: table.getCellOriginValue(col, row),
33168
33189
  value: table.getCellValue(col, row) || '',
33169
33190
  rect: {
@@ -33174,7 +33195,9 @@
33174
33195
  width,
33175
33196
  height
33176
33197
  },
33177
- table
33198
+ table,
33199
+ originCol: col,
33200
+ originRow: row
33178
33201
  };
33179
33202
  const customRenderObj = customLayout(arg);
33180
33203
  if (customRenderObj.rootContainer) {
@@ -35617,7 +35640,6 @@
35617
35640
  let value = table.getCellValue(col, row);
35618
35641
  let isMerge;
35619
35642
  let range;
35620
- let cellTheme;
35621
35643
  let customStyle;
35622
35644
  let customResult;
35623
35645
  let isCustomMerge = false;
@@ -35629,10 +35651,6 @@
35629
35651
  isMerge = range.start.col !== range.end.col || range.start.row !== range.end.row;
35630
35652
  value = customMergeText;
35631
35653
  customStyle = customMergeStyle;
35632
- if (customStyle) {
35633
- cellTheme = getStyleTheme(customStyle, table, range.start.col, range.start.row, getProp).theme;
35634
- cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
35635
- }
35636
35654
  if (customLayout || customRender) {
35637
35655
  customResult = dealWithCustom(customLayout, customRender, customMergeRange.start.col, customMergeRange.start.row, table.getColsWidth(customMergeRange.start.col, customMergeRange.end.col), table.getRowsHeight(customMergeRange.start.row, customMergeRange.end.row), false, table.isAutoRowHeight(row), [0, 0, 0, 0], range, table);
35638
35656
  }
@@ -35671,11 +35689,9 @@
35671
35689
  value = vtableMergeName;
35672
35690
  }
35673
35691
  }
35674
- const cellStyle = table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
35692
+ const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
35675
35693
  const autoWrapText = cellStyle.autoWrapText ?? table.internalProps.autoWrapText;
35676
- if (!cellTheme) {
35677
- cellTheme = getStyleTheme(cellStyle, table, isMerge ? range.start.col : col, isMerge ? range.start.row : row, getProp).theme;
35678
- }
35694
+ const cellTheme = getStyleTheme(cellStyle, table, isMerge ? range.start.col : col, isMerge ? range.start.row : row, getProp).theme;
35679
35695
  cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
35680
35696
  if (!addNew &&
35681
35697
  !isMerge &&
@@ -35777,7 +35793,25 @@
35777
35793
  }
35778
35794
  if (isPromise(value)) {
35779
35795
  oldCellGroup.removeAllChild();
35780
- dealPromiseData(value, table, updateCellContent.bind(null, type, value, define, table, col, row, cellWidth, cellHeight, oldCellGroup, padding, textAlign, textBaseline, mayHaveIcon, addNew, cellTheme, range, customResult));
35796
+ dealPromiseData(value, table, callUpdateCellContentForPromiseValue.bind(null, {
35797
+ type,
35798
+ value,
35799
+ define,
35800
+ table,
35801
+ col,
35802
+ row,
35803
+ cellWidth,
35804
+ cellHeight,
35805
+ oldCellGroup,
35806
+ padding,
35807
+ textAlign,
35808
+ textBaseline,
35809
+ mayHaveIcon,
35810
+ addNew,
35811
+ range,
35812
+ customResult,
35813
+ customStyle
35814
+ }));
35781
35815
  }
35782
35816
  else {
35783
35817
  newCellGroup = updateCellContent(type, value, define, table, col, row, cellWidth, cellHeight, oldCellGroup, padding, textAlign, textBaseline, mayHaveIcon, addNew, cellTheme, range, customResult);
@@ -35838,6 +35872,13 @@
35838
35872
  }
35839
35873
  return false;
35840
35874
  }
35875
+ function callUpdateCellContentForPromiseValue(updateCellArgs) {
35876
+ const { type, value, define, table, col, row, cellWidth, cellHeight, oldCellGroup, padding, textAlign, textBaseline, mayHaveIcon, addNew, range, customResult, customStyle } = updateCellArgs;
35877
+ const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
35878
+ const cellTheme = getStyleTheme(cellStyle, table, range ? range.start.col : col, range ? range.start.row : row, getProp).theme;
35879
+ cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
35880
+ updateCellContent(type, value, define, table, col, row, cellWidth, cellHeight, oldCellGroup, padding, textAlign, textBaseline, mayHaveIcon, addNew, cellTheme, range, customResult);
35881
+ }
35841
35882
  function dealWithMergeCellSize(range, cellWidth, cellHeight, padding, textAlign, textBaseline, table) {
35842
35883
  for (let col = range.start.col; col <= range.end.col; col++) {
35843
35884
  for (let row = range.start.row; row <= range.end.row; row++) {
@@ -36629,7 +36670,7 @@
36629
36670
  }
36630
36671
  function computeCustomRenderHeight(col, row, table) {
36631
36672
  const customRender = table.getCustomRender(col, row);
36632
- const customLayout = table.getCustomLayout(col, row);
36673
+ let customLayout = table.getCustomLayout(col, row);
36633
36674
  if (customRender || customLayout) {
36634
36675
  let spanRow = 1;
36635
36676
  let height = 0;
@@ -36649,6 +36690,9 @@
36649
36690
  rect: getCellRect$1(col, row, table),
36650
36691
  table
36651
36692
  };
36693
+ if (customLayout === 'react-custom-layout') {
36694
+ customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;
36695
+ }
36652
36696
  if (isFunction$1(customLayout)) {
36653
36697
  const customLayoutObj = customLayout(arg);
36654
36698
  if (customLayoutObj.rootContainer) {
@@ -36968,11 +37012,7 @@
36968
37012
  const customContainer = cell.getChildByName(CUSTOM_CONTAINER_NAME) ||
36969
37013
  cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME);
36970
37014
  if (customContainer) {
36971
- if (scene.table.reactCustomLayout) {
36972
- scene.table.reactCustomLayout.removeCustomCell(col, row);
36973
- }
36974
37015
  let customElementsGroup;
36975
- customContainer.removeAllChild();
36976
37016
  cell.removeChild(customContainer);
36977
37017
  const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);
36978
37018
  if (customMergeRange) {
@@ -37324,11 +37364,7 @@
37324
37364
  const customContainer = cell.getChildByName(CUSTOM_CONTAINER_NAME) ||
37325
37365
  cell.getChildByName(CUSTOM_MERGE_CONTAINER_NAME);
37326
37366
  if (customContainer) {
37327
- if (scene.table.reactCustomLayout) {
37328
- scene.table.reactCustomLayout.removeCustomCell(col, row);
37329
- }
37330
37367
  let customElementsGroup;
37331
- customContainer.removeAllChild();
37332
37368
  cell.removeChild(customContainer);
37333
37369
  const customMergeRange = getCustomCellMergeCustom(col, row, cell, scene.table);
37334
37370
  if (customMergeRange) {
@@ -37380,7 +37416,7 @@
37380
37416
  width = scene.table.getColsWidth(cellGroup.mergeStartCol, cellGroup.mergeEndCol);
37381
37417
  height = scene.table.getRowsHeight(cellGroup.mergeStartRow, cellGroup.mergeEndRow);
37382
37418
  }
37383
- const customResult = dealWithCustom(customLayout, customRender, cellGroup.mergeStartCol ?? col, cellGroup.mergeStartRow ?? row, width, height, false, scene.table.isAutoRowHeight(row), padding, isMergeCellGroup(cellGroup)
37419
+ const customResult = dealWithCustom(customLayout, customRender, col, row, width, height, false, scene.table.isAutoRowHeight(row), padding, isMergeCellGroup(cellGroup)
37384
37420
  ? {
37385
37421
  start: { col: cellGroup.mergeStartCol, row: cellGroup.mergeStartRow },
37386
37422
  end: { col: cellGroup.mergeEndCol, row: cellGroup.mergeEndRow }
@@ -41016,7 +41052,7 @@
41016
41052
  }
41017
41053
  function computeCustomRenderWidth(col, row, table) {
41018
41054
  const customRender = table.getCustomRender(col, row);
41019
- const customLayout = table.getCustomLayout(col, row);
41055
+ let customLayout = table.getCustomLayout(col, row);
41020
41056
  if (customRender || customLayout) {
41021
41057
  let spanCol = 1;
41022
41058
  let width = 0;
@@ -41036,6 +41072,9 @@
41036
41072
  rect: getCellRect(col, row, table),
41037
41073
  table
41038
41074
  };
41075
+ if (customLayout === 'react-custom-layout') {
41076
+ customLayout = table.reactCustomLayout?.getCustomLayoutFunc(col, row) || emptyCustomLayout;
41077
+ }
41039
41078
  if (isFunction$1(customLayout)) {
41040
41079
  const customLayoutObj = customLayout(arg);
41041
41080
  if (customLayoutObj.rootContainer) {
@@ -41326,7 +41365,9 @@
41326
41365
  colForDefine = range.start.col;
41327
41366
  rowForDefine = range.start.row;
41328
41367
  }
41329
- if ((cellLocation === 'columnHeader' || cellLocation === 'cornerHeader') && row >= table.columnHeaderLevelCount) {
41368
+ if (!table.isPivotTable() &&
41369
+ (cellLocation === 'columnHeader' || cellLocation === 'cornerHeader') &&
41370
+ row >= table.columnHeaderLevelCount) {
41330
41371
  cellLocation = 'body';
41331
41372
  }
41332
41373
  const define = cellLocation !== 'body'
@@ -41361,23 +41402,6 @@
41361
41402
  value = vtableMergeName;
41362
41403
  }
41363
41404
  }
41364
- const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
41365
- const cellTheme = getStyleTheme(cellStyle, table, range ? range.start.col : col, range ? range.start.row : row, getProp).theme;
41366
- cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
41367
- cellTheme.group.width = colWidth;
41368
- cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;
41369
- if (cellTheme._vtable.padding) {
41370
- padding = cellTheme._vtable.padding;
41371
- }
41372
- if (cellTheme.text.textAlign) {
41373
- textAlign = cellTheme.text.textAlign;
41374
- }
41375
- if (cellTheme.text.textBaseline) {
41376
- textBaseline = cellTheme.text.textBaseline;
41377
- }
41378
- if (cellLocation !== 'body' && !cellTheme.group.fill) {
41379
- cellTheme.group.fill = '#fff';
41380
- }
41381
41405
  const type = isVtableMerge || isCustomMerge
41382
41406
  ? 'text'
41383
41407
  : (table.isHeader(col, row)
@@ -41385,13 +41409,48 @@
41385
41409
  : table.getBodyColumnType(col, row)) || 'text';
41386
41410
  if (isPromise(value)) {
41387
41411
  createEmptyCellGroup(col, row, 0, y, cellWidth, cellHeight, columnGroup);
41388
- dealPromiseData(value, table, createCell.bind(null, type, value, define, table, col, row, colWidth, cellWidth, cellHeight, columnGroup, y, padding, textAlign, textBaseline, mayHaveIcon, cellTheme, range, customResult));
41412
+ dealPromiseData(value, table, callCreateCellForPromiseValue.bind(null, {
41413
+ type,
41414
+ value,
41415
+ define,
41416
+ table,
41417
+ col,
41418
+ row,
41419
+ colWidth,
41420
+ cellWidth,
41421
+ cellHeight,
41422
+ columnGroup,
41423
+ y,
41424
+ customStyle,
41425
+ mayHaveIcon,
41426
+ cellLocation,
41427
+ range,
41428
+ customResult,
41429
+ defaultRowHeight
41430
+ }));
41389
41431
  columnGroup.updateColumnRowNumber(row);
41390
41432
  const height = table.getRowHeight(row);
41391
41433
  columnGroup.updateColumnHeight(height);
41392
41434
  y += height;
41393
41435
  }
41394
41436
  else {
41437
+ const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
41438
+ const cellTheme = getStyleTheme(cellStyle, table, range ? range.start.col : col, range ? range.start.row : row, getProp).theme;
41439
+ cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
41440
+ cellTheme.group.width = colWidth;
41441
+ cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;
41442
+ if (cellTheme._vtable.padding) {
41443
+ padding = cellTheme._vtable.padding;
41444
+ }
41445
+ if (cellTheme.text.textAlign) {
41446
+ textAlign = cellTheme.text.textAlign;
41447
+ }
41448
+ if (cellTheme.text.textBaseline) {
41449
+ textBaseline = cellTheme.text.textBaseline;
41450
+ }
41451
+ if (cellLocation !== 'body' && !cellTheme.group.fill) {
41452
+ cellTheme.group.fill = '#fff';
41453
+ }
41395
41454
  const cellGroup = createCell(type, value, define, table, col, row, colWidth, cellWidth, cellHeight, columnGroup, y, padding, textAlign, textBaseline, mayHaveIcon, cellTheme, range, customResult);
41396
41455
  columnGroup.updateColumnRowNumber(row);
41397
41456
  if (isMerge) {
@@ -41420,6 +41479,30 @@
41420
41479
  height: y
41421
41480
  };
41422
41481
  }
41482
+ function callCreateCellForPromiseValue(createCellArgs) {
41483
+ let padding;
41484
+ let textAlign;
41485
+ let textBaseline;
41486
+ const { type, value, define, table, col, row, colWidth, cellWidth, cellHeight, columnGroup, y, cellLocation, mayHaveIcon, customStyle, range, customResult, defaultRowHeight } = createCellArgs;
41487
+ const cellStyle = customStyle || table._getCellStyle(range ? range.start.col : col, range ? range.start.row : row);
41488
+ const cellTheme = getStyleTheme(cellStyle, table, range ? range.start.col : col, range ? range.start.row : row, getProp).theme;
41489
+ cellTheme.group.cornerRadius = getCellCornerRadius(col, row, table);
41490
+ cellTheme.group.width = colWidth;
41491
+ cellTheme.group.height = Array.isArray(defaultRowHeight) ? defaultRowHeight[row] : defaultRowHeight;
41492
+ if (cellTheme._vtable.padding) {
41493
+ padding = cellTheme._vtable.padding;
41494
+ }
41495
+ if (cellTheme.text.textAlign) {
41496
+ textAlign = cellTheme.text.textAlign;
41497
+ }
41498
+ if (cellTheme.text.textBaseline) {
41499
+ textBaseline = cellTheme.text.textBaseline;
41500
+ }
41501
+ if (cellLocation !== 'body' && !cellTheme.group.fill) {
41502
+ cellTheme.group.fill = '#fff';
41503
+ }
41504
+ createCell(type, value, define, table, col, row, colWidth, cellWidth, cellHeight, columnGroup, y, padding, textAlign, textBaseline, mayHaveIcon, cellTheme, range, customResult);
41505
+ }
41423
41506
  function dealMerge(range, mergeMap, table, forceUpdate) {
41424
41507
  let cellWidth = 0;
41425
41508
  let cellHeight = 0;
@@ -44225,15 +44308,17 @@
44225
44308
  return;
44226
44309
  }
44227
44310
  const allColsWidth = table.getAllColsWidth();
44311
+ const tableNoFrameWidth = Math.min(allColsWidth, table.tableNoFrameWidth);
44228
44312
  const frozenColsWidth = table.getFrozenColsWidth();
44229
44313
  const rightFrozenColsWidth = table.getRightFrozenColsWidth();
44230
44314
  const totalFrozenColsWidth = frozenColsWidth + rightFrozenColsWidth;
44231
- const bodyWidth = Math.min(allColsWidth - totalFrozenColsWidth, table.tableNoFrameWidth - totalFrozenColsWidth);
44315
+ const bodyWidth = Math.min(allColsWidth - totalFrozenColsWidth, tableNoFrameWidth - totalFrozenColsWidth);
44232
44316
  const allRowsHeight = table.getAllRowsHeight();
44317
+ const tableNoFrameHeight = Math.min(allRowsHeight, table.tableNoFrameHeight);
44233
44318
  const frozenRowsHeight = table.getFrozenRowsHeight();
44234
44319
  const bottomFrozenRowsHeight = table.getBottomFrozenRowsHeight();
44235
44320
  const totalFrozenRowsHeight = frozenRowsHeight + bottomFrozenRowsHeight;
44236
- const bodyHeight = Math.min(allRowsHeight - totalFrozenRowsHeight, table.tableNoFrameHeight - totalFrozenRowsHeight);
44321
+ const bodyHeight = Math.min(allRowsHeight - totalFrozenRowsHeight, tableNoFrameHeight - totalFrozenRowsHeight);
44237
44322
  if (table.frozenColCount > 0) {
44238
44323
  headerDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;
44239
44324
  bodyDomContainer.style.left = `${table.tableX + frozenColsWidth}px`;
@@ -44261,21 +44346,21 @@
44261
44346
  rightFrozenBodyDomContainer.style.width = `${rightFrozenColsWidth}px`;
44262
44347
  rightFrozenBodyDomContainer.style.height = `${bodyHeight}px`;
44263
44348
  rightFrozenBodyDomContainer.style.top = `${table.tableY + frozenRowsHeight}px`;
44264
- rightFrozenBodyDomContainer.style.left = `${table.tableX + table.tableNoFrameWidth - rightFrozenColsWidth}px`;
44349
+ rightFrozenBodyDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;
44265
44350
  rightFrozenHeaderDomContainer.style.width = `${rightFrozenColsWidth}px`;
44266
44351
  rightFrozenHeaderDomContainer.style.height = `${frozenRowsHeight}px`;
44267
44352
  rightFrozenHeaderDomContainer.style.top = `${table.tableY}px`;
44268
- rightFrozenHeaderDomContainer.style.left = `${table.tableX + table.tableNoFrameWidth - rightFrozenColsWidth}px`;
44353
+ rightFrozenHeaderDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;
44269
44354
  bottomDomContainer.style.width = `${bodyWidth}px`;
44270
44355
  bottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;
44271
- bottomDomContainer.style.top = `${table.tableY + table.tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44356
+ bottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44272
44357
  frozenBottomDomContainer.style.width = `${frozenColsWidth}px`;
44273
44358
  frozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;
44274
- frozenBottomDomContainer.style.top = `${table.tableY + table.tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44359
+ frozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44275
44360
  rightFrozenBottomDomContainer.style.width = `${rightFrozenColsWidth}px`;
44276
44361
  rightFrozenBottomDomContainer.style.height = `${bottomFrozenRowsHeight}px`;
44277
- rightFrozenBottomDomContainer.style.top = `${table.tableY + table.tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44278
- rightFrozenBottomDomContainer.style.left = `${table.tableX + table.tableNoFrameWidth - rightFrozenColsWidth}px`;
44362
+ rightFrozenBottomDomContainer.style.top = `${table.tableY + tableNoFrameHeight - bottomFrozenRowsHeight}px`;
44363
+ rightFrozenBottomDomContainer.style.left = `${table.tableX + tableNoFrameWidth - rightFrozenColsWidth}px`;
44279
44364
  }
44280
44365
  function updateReactComponentContainer(scene) {
44281
44366
  if (!scene.table.reactCustomLayout) {
@@ -47580,6 +47665,19 @@
47580
47665
  col,
47581
47666
  row
47582
47667
  };
47668
+ const cellRange = skipBodyMerge ? { start: { col, row }, end: { col, row } } : table.getCellRange(col, row);
47669
+ if (currentRange.start.col < cellRange.end.col) {
47670
+ currentRange.end.col = cellRange.end.col;
47671
+ }
47672
+ else if (currentRange.start.col > cellRange.start.col) {
47673
+ currentRange.end.col = cellRange.start.col;
47674
+ }
47675
+ if (currentRange.start.row < cellRange.end.row) {
47676
+ currentRange.end.row = cellRange.end.row;
47677
+ }
47678
+ else if (currentRange.start.row > cellRange.start.row) {
47679
+ currentRange.end.row = cellRange.start.row;
47680
+ }
47583
47681
  if (skipBodyMerge) {
47584
47682
  currentRange.skipBodyMerge = true;
47585
47683
  }
@@ -47876,7 +47974,8 @@
47876
47974
  state.columnMove.colSource >= 0 &&
47877
47975
  state.columnMove.rowSource >= 0 &&
47878
47976
  state.columnMove.colTarget >= 0 &&
47879
- state.columnMove.rowTarget >= 0) {
47977
+ state.columnMove.rowTarget >= 0 &&
47978
+ state.table.options.customConfig?.notUpdateInColumnRowMove !== true) {
47880
47979
  const oldSourceMergeInfo = state.table.getCellRange(state.columnMove.colSource, state.columnMove.rowSource);
47881
47980
  const oldTargetMergeInfo = state.table.getCellRange(state.columnMove.colTarget, state.columnMove.rowTarget);
47882
47981
  const moveContext = state.table._moveHeaderPosition({ col: state.columnMove.colSource, row: state.columnMove.rowSource }, { col: state.columnMove.colTarget, row: state.columnMove.rowTarget });
@@ -47981,6 +48080,9 @@
47981
48080
  state.table.scenegraph.component.setRightFrozenColumnShadow(state.table.colCount - state.table.rightFrozenColCount);
47982
48081
  }
47983
48082
  state.table.scenegraph.updateNextFrame();
48083
+ if (state.table.options.customConfig?.notUpdateInColumnRowMove === true) {
48084
+ return true;
48085
+ }
47984
48086
  return moveColResult;
47985
48087
  }
47986
48088
  function clearWidthsAndHeightsCache(colMin, colMax, rowMin, rowMax, table) {
@@ -48685,6 +48787,7 @@
48685
48787
  class StateManager {
48686
48788
  table;
48687
48789
  interactionState;
48790
+ interactionStateBeforeScroll;
48688
48791
  select;
48689
48792
  fillHandle;
48690
48793
  hover;
@@ -48708,8 +48811,8 @@
48708
48811
  _checkboxCellTypeFields = [];
48709
48812
  _headerCheckFuncs = {};
48710
48813
  radioState = {};
48711
- resetInteractionState = debounce(() => {
48712
- this.updateInteractionState(InteractionState.default);
48814
+ resetInteractionState = debounce((state) => {
48815
+ this.updateInteractionState(state ?? InteractionState.default);
48713
48816
  }, 100);
48714
48817
  constructor(table) {
48715
48818
  this.table = table;
@@ -48978,6 +49081,9 @@
48978
49081
  if (this.interactionState === mode) {
48979
49082
  return;
48980
49083
  }
49084
+ if (mode === InteractionState.scrolling) {
49085
+ this.interactionStateBeforeScroll = this.interactionState;
49086
+ }
48981
49087
  const oldState = this.interactionState;
48982
49088
  this.interactionState = mode;
48983
49089
  if (oldState === InteractionState.scrolling && mode === InteractionState.default) ;
@@ -49184,8 +49290,9 @@
49184
49290
  this.fillHandle.beforeFillMinCol = undefined;
49185
49291
  this.fillHandle.beforeFillMinRow = undefined;
49186
49292
  }
49187
- startMoveCol(col, row, x, y) {
49293
+ startMoveCol(col, row, x, y, event) {
49188
49294
  startMoveCol(col, row, x, y, this);
49295
+ this.table.fireListeners(TABLE_EVENT_TYPE.CHANGE_HEADER_POSITION_START, { col, row, x, y, event });
49189
49296
  }
49190
49297
  updateMoveCol(col, row, x, y) {
49191
49298
  updateMoveCol(col, row, x, y, this);
@@ -49926,7 +50033,7 @@
49926
50033
  state.setScrollTop(state.scroll.verticalBarPos + optimizedDeltaY, event);
49927
50034
  state.showVerticalScrollBar(true);
49928
50035
  }
49929
- isWheelEvent && state.resetInteractionState();
50036
+ isWheelEvent && state.resetInteractionState(state.interactionStateBeforeScroll);
49930
50037
  if (event.nativeEvent?.cancelable &&
49931
50038
  (state.table.internalProps.overscrollBehavior === 'none' ||
49932
50039
  (Math.abs(deltaY) >= Math.abs(deltaX) && deltaY !== 0 && isVerticalScrollable(deltaY, state)) ||
@@ -50044,6 +50151,17 @@
50044
50151
  eventManager.touchSetTimeout = undefined;
50045
50152
  }
50046
50153
  const eventArgsSet = getCellEventArgsSet(e);
50154
+ if (eventArgsSet.eventArgs && table.hasListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE)) {
50155
+ table.fireListeners(TABLE_EVENT_TYPE.MOUSEMOVE_TABLE, {
50156
+ col: eventArgsSet.eventArgs.col,
50157
+ row: eventArgsSet.eventArgs.row,
50158
+ x: eventArgsSet.abstractPos.x,
50159
+ y: eventArgsSet.abstractPos.y,
50160
+ event: e.nativeEvent,
50161
+ target: eventArgsSet?.eventArgs?.target,
50162
+ mergeCellInfo: eventArgsSet.eventArgs?.mergeInfo
50163
+ });
50164
+ }
50047
50165
  if (stateManager.interactionState === InteractionState.grabing &&
50048
50166
  !table.editorManager?.editingEditor) {
50049
50167
  if (Math.abs(lastX - e.x) + Math.abs(lastY - e.y) >= 1) {
@@ -50252,7 +50370,8 @@
50252
50370
  source: {
50253
50371
  col: table.stateManager.columnMove.colSource,
50254
50372
  row: table.stateManager.columnMove.rowSource
50255
- }
50373
+ },
50374
+ event: e.nativeEvent
50256
50375
  });
50257
50376
  }
50258
50377
  }
@@ -50287,6 +50406,17 @@
50287
50406
  }
50288
50407
  stateManager.updateInteractionState(InteractionState.default);
50289
50408
  eventManager.dealTableHover();
50409
+ });
50410
+ }
50411
+ };
50412
+ const globalPointerdownCallback = (e) => {
50413
+ const target = e.target;
50414
+ if (!table.getElement().contains(target)) {
50415
+ const isCompleteEdit = table.editorManager?.completeEdit(e);
50416
+ getPromiseValue(isCompleteEdit, isCompleteEdit => {
50417
+ if (isCompleteEdit === false) {
50418
+ return;
50419
+ }
50290
50420
  if (table.options.select?.outsideClickDeselect) {
50291
50421
  const isHasSelected = !!stateManager.select.ranges?.length;
50292
50422
  eventManager.dealTableSelect();
@@ -50300,7 +50430,13 @@
50300
50430
  env: 'document',
50301
50431
  callback: globalPointerupCallback
50302
50432
  });
50433
+ eventManager.globalEventListeners.push({
50434
+ name: 'pointerdown',
50435
+ env: 'document',
50436
+ callback: globalPointerdownCallback
50437
+ });
50303
50438
  vglobal.addEventListener('pointerup', globalPointerupCallback);
50439
+ vglobal.addEventListener('pointerdown', globalPointerdownCallback);
50304
50440
  table.scenegraph.tableGroup.addEventListener('pointerdown', (e) => {
50305
50441
  if (table.hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE)) {
50306
50442
  table.fireListeners(TABLE_EVENT_TYPE.MOUSEDOWN_TABLE, {
@@ -50380,7 +50516,7 @@
50380
50516
  }
50381
50517
  }
50382
50518
  else if (hitIcon.attribute.funcType === IconFuncTypeEnum.dragReorder) {
50383
- stateManager.startMoveCol(eventArgsSet.eventArgs.col, eventArgsSet.eventArgs.row, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);
50519
+ stateManager.startMoveCol(eventArgsSet.eventArgs.col, eventArgsSet.eventArgs.row, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y, eventArgsSet.eventArgs?.event?.nativeEvent);
50384
50520
  stateManager.updateInteractionState(InteractionState.grabing);
50385
50521
  }
50386
50522
  if (table.hasListeners(TABLE_EVENT_TYPE.MOUSEDOWN_CELL)) {
@@ -50420,7 +50556,8 @@
50420
50556
  source: {
50421
50557
  col: table.stateManager.columnMove.colSource,
50422
50558
  row: table.stateManager.columnMove.rowSource
50423
- }
50559
+ },
50560
+ event: e.nativeEvent
50424
50561
  });
50425
50562
  }
50426
50563
  }
@@ -51523,7 +51660,7 @@
51523
51660
  let left = false;
51524
51661
  if (y > drawRange.bottom - bottomFrozenRowHeight &&
51525
51662
  canScrollY &&
51526
- table.scrollTop + table.tableNoFrameWidth < table.getAllRowsHeight()) {
51663
+ table.scrollTop + table.tableNoFrameHeight < table.getAllRowsHeight()) {
51527
51664
  bottom = true;
51528
51665
  table.eventManager.scrollYSpeed = -(y - drawRange.bottom + bottomFrozenRowHeight) / 50;
51529
51666
  }
@@ -52154,7 +52291,7 @@
52154
52291
  this.table.options.select?.disableHeaderSelect ||
52155
52292
  this.table.options.select?.disableSelect) &&
52156
52293
  this.table._canDragHeaderPosition(eventArgs.col, eventArgs.row)) {
52157
- this.table.stateManager.startMoveCol(eventArgs.col, eventArgs.row, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y);
52294
+ this.table.stateManager.startMoveCol(eventArgs.col, eventArgs.row, eventArgsSet.abstractPos.x, eventArgsSet.abstractPos.y, eventArgs?.event?.nativeEvent);
52158
52295
  return true;
52159
52296
  }
52160
52297
  return false;
@@ -56315,7 +56452,7 @@
56315
56452
  return TABLE_EVENT_TYPE;
56316
56453
  }
56317
56454
  options;
56318
- version = "1.8.2";
56455
+ version = "1.8.3";
56319
56456
  pagination;
56320
56457
  id = `VTable${Date.now()}`;
56321
56458
  headerStyleCache;
@@ -60299,13 +60436,18 @@
60299
60436
  return false;
60300
60437
  }
60301
60438
  isSeriesNumber(col, row) {
60302
- if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {
60303
- return true;
60304
- }
60305
- if (this.rightRowSeriesNumberColumnCount > 0 &&
60306
- row >= 0 &&
60307
- col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
60308
- return true;
60439
+ if (isValid$1(col) && isValid$1(row)) {
60440
+ if (this.leftRowSeriesNumberColumnCount > 0 &&
60441
+ col >= 0 &&
60442
+ row >= 0 &&
60443
+ col < this.leftRowSeriesNumberColumnCount) {
60444
+ return true;
60445
+ }
60446
+ if (this.rightRowSeriesNumberColumnCount > 0 &&
60447
+ row >= 0 &&
60448
+ col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
60449
+ return true;
60450
+ }
60309
60451
  }
60310
60452
  return false;
60311
60453
  }
@@ -62202,6 +62344,10 @@
62202
62344
  this.internalProps.headerHelper.setTableColumnsEditor();
62203
62345
  this._hasAutoImageColumn = undefined;
62204
62346
  this.refreshHeader();
62347
+ this.dataSource.updateColumns?.(this.internalProps.columns);
62348
+ if (this.records && checkHasAggregationOnColumnDefine(columns)) {
62349
+ this.dataSource.processRecords(this.dataSource.dataSourceObj?.records ?? this.dataSource.dataSourceObj);
62350
+ }
62205
62351
  this.internalProps.useOneRowHeightFillAll = false;
62206
62352
  this.scenegraph.clearCells();
62207
62353
  this.headerStyleCache = new Map();
@@ -65197,12 +65343,14 @@
65197
65343
  }
65198
65344
  getLegendAttributes(rect) {
65199
65345
  const layout = this.orient === 'bottom' || this.orient === 'top' ? 'horizontal' : 'vertical';
65346
+ const legendAttrs = getLegendAttributes(this.option, rect);
65347
+ const padding = getQuadProps(legendAttrs.padding ?? this.option.padding ?? 10);
65200
65348
  const attrs = {
65201
65349
  layout,
65202
65350
  items: this.getLegendItems(),
65203
- maxWidth: rect.width,
65204
- maxHeight: rect.height,
65205
- ...getLegendAttributes(this.option, rect)
65351
+ maxWidth: rect.width - padding[1] - padding[3],
65352
+ maxHeight: rect.height - padding[0] - padding[2],
65353
+ ...legendAttrs
65206
65354
  };
65207
65355
  return attrs;
65208
65356
  }
@@ -69297,6 +69445,8 @@
69297
69445
  dimensionKey: dimensionKey,
69298
69446
  id,
69299
69447
  value: dimensionKey,
69448
+ headerCustomRender: this.cornerSetting.customRender,
69449
+ headerCustomLayout: this.cornerSetting.customLayout,
69300
69450
  headerEditor: this.cornerSetting.headerEditor,
69301
69451
  disableHeaderHover: !!this.cornerSetting.disableHeaderHover,
69302
69452
  disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect
@@ -69342,7 +69492,8 @@
69342
69492
  define: {
69343
69493
  dimensionKey: '维度名称',
69344
69494
  id,
69345
- value: '',
69495
+ headerCustomRender: this.cornerSetting.customRender,
69496
+ headerCustomLayout: this.cornerSetting.customLayout,
69346
69497
  disableHeaderHover: !!this.cornerSetting.disableHeaderHover,
69347
69498
  disableHeaderSelect: !!this.cornerSetting.disableHeaderSelect
69348
69499
  }
@@ -69428,7 +69579,14 @@
69428
69579
  });
69429
69580
  }
69430
69581
  else {
69431
- const rowDimensionKeys = this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr();
69582
+ const rowDimensionKeys = this.rowDimensionTree.totalLevel > 0
69583
+ ? this.rowDimensionTree.dimensionKeysIncludeVirtual.valueArr()
69584
+ : this.rowsDefine.map(dimension => {
69585
+ if (typeof dimension === 'string') {
69586
+ return dimension;
69587
+ }
69588
+ return dimension.dimensionKey;
69589
+ });
69432
69590
  rowDimensionKeys.forEach((objKey, index) => {
69433
69591
  const dimension = this.rowsDefine?.find(dimension => typeof dimension === 'string' ? false : dimension.dimensionKey === objKey);
69434
69592
  dimension &&
@@ -71391,13 +71549,18 @@
71391
71549
  return false;
71392
71550
  }
71393
71551
  isSeriesNumber(col, row) {
71394
- if (this.leftRowSeriesNumberColumnCount > 0 && col >= 0 && row >= 0 && col < this.leftRowSeriesNumberColumnCount) {
71395
- return true;
71396
- }
71397
- if (this.rightRowSeriesNumberColumnCount > 0 &&
71398
- row >= 0 &&
71399
- col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
71400
- return true;
71552
+ if (isValid$1(col) && isValid$1(row)) {
71553
+ if (this.leftRowSeriesNumberColumnCount > 0 &&
71554
+ col >= 0 &&
71555
+ row >= 0 &&
71556
+ col < this.leftRowSeriesNumberColumnCount) {
71557
+ return true;
71558
+ }
71559
+ if (this.rightRowSeriesNumberColumnCount > 0 &&
71560
+ row >= 0 &&
71561
+ col >= this.colCount - this.rightRowSeriesNumberColumnCount) {
71562
+ return true;
71563
+ }
71401
71564
  }
71402
71565
  return false;
71403
71566
  }
@@ -76460,7 +76623,7 @@
76460
76623
  }
76461
76624
 
76462
76625
  registerForVrender();
76463
- const version = "1.8.2";
76626
+ const version = "1.8.3";
76464
76627
  function getIcons() {
76465
76628
  return get$2();
76466
76629
  }