@ai-table/grid 0.1.40 → 0.1.41

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 (44) hide show
  1. package/constants/colors.d.ts +4 -1
  2. package/constants/colors.d.ts.map +1 -1
  3. package/constants/icon.d.ts +1 -0
  4. package/constants/icon.d.ts.map +1 -1
  5. package/constants/table.d.ts +3 -0
  6. package/constants/table.d.ts.map +1 -1
  7. package/core/types/ai-table.d.ts +4 -1
  8. package/core/types/ai-table.d.ts.map +1 -1
  9. package/fesm2022/ai-table-grid.mjs +327 -24
  10. package/fesm2022/ai-table-grid.mjs.map +1 -1
  11. package/grid-base.component.d.ts +4 -2
  12. package/grid-base.component.d.ts.map +1 -1
  13. package/grid.component.d.ts +2 -1
  14. package/grid.component.d.ts.map +1 -1
  15. package/package.json +1 -1
  16. package/renderer/components/group/frozen-groups.component.d.ts +10 -0
  17. package/renderer/components/group/frozen-groups.component.d.ts.map +1 -0
  18. package/renderer/components/other-rows.component.d.ts +2 -2
  19. package/renderer/creations/create-cells.d.ts.map +1 -1
  20. package/renderer/creations/create-groups.d.ts +3 -0
  21. package/renderer/creations/create-groups.d.ts.map +1 -0
  22. package/renderer/drawers/cell-drawer.d.ts +1 -1
  23. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  24. package/renderer/drawers/drawer.d.ts +4 -1
  25. package/renderer/drawers/drawer.d.ts.map +1 -1
  26. package/renderer/drawers/group-layout.d.ts +11 -0
  27. package/renderer/drawers/group-layout.d.ts.map +1 -0
  28. package/renderer/drawers/layout-drawer.d.ts +3 -1
  29. package/renderer/drawers/layout-drawer.d.ts.map +1 -1
  30. package/renderer/drawers/record-row-layout-drawer.d.ts.map +1 -1
  31. package/renderer/renderer.component.d.ts.map +1 -1
  32. package/types/cell.d.ts +9 -3
  33. package/types/cell.d.ts.map +1 -1
  34. package/types/component-config.d.ts +12 -0
  35. package/types/component-config.d.ts.map +1 -1
  36. package/types/layout.d.ts +1 -0
  37. package/types/layout.d.ts.map +1 -1
  38. package/types/row.d.ts +23 -7
  39. package/types/row.d.ts.map +1 -1
  40. package/utils/build.d.ts +1 -1
  41. package/utils/build.d.ts.map +1 -1
  42. package/utils/cell.d.ts +1 -0
  43. package/utils/cell.d.ts.map +1 -1
  44. package/utils/get-placeholder-cells.d.ts.map +1 -1
@@ -49,7 +49,7 @@ import { ThyInputNumber } from 'ngx-tethys/input-number';
49
49
  import { isKeyHotkey } from 'is-hotkey';
50
50
  import { LRUCache } from 'lru-cache';
51
51
  import { fromUnixTime, subDays, differenceInDays, differenceInMonths } from 'date-fns';
52
- import { isArray, TinyDate, helpers } from 'ngx-tethys/util';
52
+ import { isArray, TinyDate, helpers, hexToRgb } from 'ngx-tethys/util';
53
53
  import { DEFAULT_COLORS } from 'ngx-tethys/color-picker';
54
54
  import GraphemeSplitter from 'grapheme-splitter';
55
55
  import * as i1$2 from '@angular/common';
@@ -752,9 +752,12 @@ const Colors = {
752
752
  gray100: '#f5f5f5',
753
753
  gray200: '#eee',
754
754
  gray300: '#ddd',
755
- gray800: '#333',
755
+ gray400: '#cacaca',
756
+ gray500: '#aaa',
756
757
  gray600: '#999',
757
758
  gray700: '#666',
759
+ gray800: '#333',
760
+ gray900: '#212529',
758
761
  white: '#fff',
759
762
  black: '#000',
760
763
  transparent: 'transparent',
@@ -822,6 +825,8 @@ var AITableRowType;
822
825
  (function (AITableRowType) {
823
826
  AITableRowType["add"] = "add";
824
827
  AITableRowType["record"] = "record";
828
+ AITableRowType["group"] = "group";
829
+ AITableRowType["blank"] = "blank";
825
830
  })(AITableRowType || (AITableRowType = {}));
826
831
 
827
832
  const AI_TABLE_ACTION_COMMON_SIZE = 32; // 表格图标action背景的通用尺寸
@@ -915,6 +920,9 @@ const AI_TABLE_AUTO_SCROLL_BOTTOM_THRESHOLD = AI_TABLE_FIELD_HEAD_HEIGHT / 2;
915
920
  const AI_TABLE_FIELD_STAT_INNER_HEIGHT = 47; // 字段统计内部高度
916
921
  const AI_TABLE_TEXT_LINE_HEIGHT = 1.84; // 默认文本行高
917
922
  const AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT = AI_TABLE_FIELD_STAT_INNER_HEIGHT + AI_TABLE_OFFSET * 2; // 统计容器高度
923
+ const AI_TABLE_GROUP_MAX_LEVEL = 3;
924
+ const AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON = 'AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON';
925
+ const AI_TABLE_ROW_GROUP_OFFSET = 16;
918
926
 
919
927
  const MIN_COLUMN_WIDTH = 80;
920
928
  const DBL_CLICK_EDIT_TYPE = [
@@ -979,6 +987,7 @@ const AttachmentPath = `M9.1773124,11.8057395 C7.96668709,13.0163648 6.00387566,
979
987
  const EditPath = `M2,8.33918294 L10.7095952,0 L15,4.17020474 L6.53816398,13 L2,13 L2,8.33918294 Z M3.2,8.85157902 L3.2,11.8 L6.02608482,11.8 L13.3091776,4.20020516 L10.7033283,1.66736141 L3.2,8.85157902 Z M0,16 L0,14.8 L16,14.8 L16,16 L0,16 Z`;
980
988
  const RowDragPath = `M6,3 C6.55228475,3 7,2.55228475 7,2 C7,1.44771525 6.55228475,1 6,1 C5.44771525,1 5,1.44771525 5,2 C5,2.55228475 5.44771525,3 6,3 Z M10,3 C10.5522847,3 11,2.55228475 11,2 C11,1.44771525 10.5522847,1 10,1 C9.44771525,1 9,1.44771525 9,2 C9,2.55228475 9.44771525,3 10,3 Z M6,7 C6.55228475,7 7,6.55228475 7,6 C7,5.44771525 6.55228475,5 6,5 C5.44771525,5 5,5.44771525 5,6 C5,6.55228475 5.44771525,7 6,7 Z M10,7 C10.5522847,7 11,6.55228475 11,6 C11,5.44771525 10.5522847,5 10,5 C9.44771525,5 9,5.44771525 9,6 C9,6.55228475 9.44771525,7 10,7 Z M6,11 C6.55228475,11 7,10.5522847 7,10 C7,9.44771525 6.55228475,9 6,9 C5.44771525,9 5,9.44771525 5,10 C5,10.5522847 5.44771525,11 6,11 Z M10,11 C10.5522847,11 11,10.5522847 11,10 C11,9.44771525 10.5522847,9 10,9 C9.44771525,9 9,9.44771525 9,10 C9,10.5522847 9.44771525,11 10,11 Z M6,15 C6.55228475,15 7,14.5522847 7,14 C7,13.4477153 6.55228475,13 6,13 C5.44771525,13 5,13.4477153 5,14 C5,14.5522847 5.44771525,15 6,15 Z M10,15 C10.5522847,15 11,14.5522847 11,14 C11,13.4477153 10.5522847,13 10,13 C9.44771525,13 9,13.4477153 9,14 C9,14.5522847 9.44771525,15 10,15 Z`;
981
989
  const AngleDownPath = `M7.97815,11.99732 L7.9728,12.00267 L2.2998,6.33067 L3.1298,5.49967 L7.97807731,10.3479473 L12.8255,5.49967 L13.6565,6.33067 L7.9835,12.00267 L7.97815,11.99732 Z`;
990
+ const AngleRightPath = `M4.72665,3.40415 L5.55765,2.57315 L11.22965,8.24615 L5.55765,13.92985 L4.72665,13.09985 L9.57465,8.25285`;
982
991
  const IconPathMap = {};
983
992
 
984
993
  const DEFAULT_FONT_SIZE = 14;
@@ -1947,8 +1956,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
1947
1956
  args: ['inputElement', { static: false }]
1948
1957
  }] } });
1949
1958
 
1950
- const buildGridLinearRows = (visibleRecords, isAddingVisible = true) => {
1951
- const linearRows = [];
1959
+ const buildGridLinearRows = (visibleRecords, isAddingVisible = true, aiTable, aiBuildGroupLinearRowsFn) => {
1960
+ let linearRows = [];
1961
+ if (aiBuildGroupLinearRowsFn) {
1962
+ const groupLinearRows = aiBuildGroupLinearRowsFn(aiTable);
1963
+ if (groupLinearRows) {
1964
+ return groupLinearRows;
1965
+ }
1966
+ }
1952
1967
  let displayRowIndex = 0;
1953
1968
  [...visibleRecords, { _id: '' }].forEach((row) => {
1954
1969
  if (row._id) {
@@ -1997,8 +2012,18 @@ function getColumnIndicesSizeMap(aiTable, fields) {
1997
2012
  * 根据单元格是否是第一列/最后一列确定单元格所在的位置
1998
2013
  */
1999
2014
  function getCellHorizontalPosition(options) {
2000
- const { columnWidth } = options;
2001
- return { width: columnWidth, offset: 0 };
2015
+ let { columnWidth, columnIndex, columnCount, depth = 0 } = options;
2016
+ depth += 1;
2017
+ if (!depth)
2018
+ return { width: columnWidth, offset: 0 };
2019
+ const firstIndent = columnIndex === 0 && depth;
2020
+ const lastIndent = columnIndex === columnCount - 1 && depth === 3;
2021
+ const offset = firstIndent ? (depth - 1) * AI_TABLE_ROW_GROUP_OFFSET + 0.5 : 0;
2022
+ const width = lastIndent && !firstIndent ? columnWidth - AI_TABLE_ROW_GROUP_OFFSET : columnWidth - offset;
2023
+ return {
2024
+ width,
2025
+ offset
2026
+ };
2002
2027
  }
2003
2028
  function transformToCellText(cellValue, options) {
2004
2029
  const { aiTable, field } = options;
@@ -2237,7 +2262,7 @@ function getPlaceHolderCellsConfigs(options) {
2237
2262
  break;
2238
2263
  }
2239
2264
  const row = linearRows()[rowIndex];
2240
- const { _id: recordId, type } = row;
2265
+ const { _id: recordId, type, depth = 0 } = row;
2241
2266
  if (type !== AITableRowType.record) {
2242
2267
  continue;
2243
2268
  }
@@ -2246,7 +2271,8 @@ function getPlaceHolderCellsConfigs(options) {
2246
2271
  const { width, offset } = getCellHorizontalPosition({
2247
2272
  columnWidth,
2248
2273
  columnIndex,
2249
- columnCount
2274
+ columnCount,
2275
+ depth
2250
2276
  });
2251
2277
  const height = rowHeight - AI_TABLE_OFFSET * 4;
2252
2278
  configs.unshift({
@@ -5449,13 +5475,14 @@ class Layout extends Drawer {
5449
5475
  // 列数
5450
5476
  this.columnCount = 0;
5451
5477
  this.containerWidth = 0;
5478
+ this.frozenColumnCount = 0;
5452
5479
  this.rowHeadWidth = AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH;
5453
5480
  this.hiddenIndexColumn = false;
5454
5481
  this.hiddenRowDrag = false;
5455
5482
  this.readonly = false;
5456
5483
  }
5457
5484
  // 用于初始化或重置布局的基本属性。这个方法通常在每次渲染新的一行或单元格时调用,确保布局信息是最新的
5458
- init({ x, y, rowIndex, columnIndex, rowHeight, columnWidth, columnCount, containerWidth, rowHeadWidth, hiddenIndexColumn, hiddenRowDrag, readonly }) {
5485
+ init({ x, y, rowIndex, columnIndex, rowHeight, columnWidth, columnCount, containerWidth, rowHeadWidth, hiddenIndexColumn, hiddenRowDrag, readonly, frozenColumnCount }) {
5459
5486
  this.x = x;
5460
5487
  this.y = y;
5461
5488
  this.rowIndex = rowIndex;
@@ -5468,11 +5495,16 @@ class Layout extends Drawer {
5468
5495
  this.hiddenIndexColumn = hiddenIndexColumn;
5469
5496
  this.hiddenRowDrag = hiddenRowDrag;
5470
5497
  this.readonly = readonly;
5498
+ this.frozenColumnCount = frozenColumnCount;
5471
5499
  }
5472
5500
  // 当前单元格是否是行的第一列
5473
5501
  get isFirst() {
5474
5502
  return this.columnIndex === 0;
5475
5503
  }
5504
+ // 当前单元格是否是锁定列的最后一列
5505
+ get isLastFrozenColumn() {
5506
+ return this.columnIndex === this.frozenColumnCount - 1;
5507
+ }
5476
5508
  // 当前单元格是否是行的最后一列
5477
5509
  get isLast() {
5478
5510
  return this.columnIndex === this.columnCount - 1;
@@ -6862,6 +6894,94 @@ class RecordRowLayout extends Layout {
6862
6894
  }
6863
6895
  const recordRowLayout = new RecordRowLayout();
6864
6896
 
6897
+ class GroupLayout extends Layout {
6898
+ renderAddFieldBlank({ isHoverRow, isCheckedRow }) {
6899
+ super.renderAddFieldBlank({ isHoverRow, isCheckedRow });
6900
+ const rowHeight = this.rowHeight;
6901
+ const startX = this.x + this.columnWidth;
6902
+ const lineWidth = this.containerWidth - startX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH : this.containerWidth - startX;
6903
+ this.line({
6904
+ x: startX,
6905
+ y: this.y,
6906
+ points: [0, rowHeight, lineWidth, rowHeight],
6907
+ stroke: this.colors.gray200
6908
+ });
6909
+ }
6910
+ renderFirstCell(render, config) {
6911
+ if (!this.isFirst)
6912
+ return;
6913
+ const { row, indexStyle } = config;
6914
+ const { _id: recordId, type, depth = 0, groupValue, fieldId, isCollapsed } = row;
6915
+ const { field, style, aiTable } = render;
6916
+ const y = this.y;
6917
+ const rowHeight = this.rowHeight;
6918
+ const columnWidth = this.columnWidth;
6919
+ const { fill: indexFill } = indexStyle || {};
6920
+ const dragOccupyWidth = this.hiddenRowDrag || this.readonly ? 0 : AI_TABLE_ROW_DRAG_ICON_WIDTH;
6921
+ if (!this.hiddenIndexColumn) {
6922
+ this.customRect({
6923
+ x: AI_TABLE_OFFSET + dragOccupyWidth,
6924
+ y,
6925
+ width: this.rowHeadWidth - AI_TABLE_OFFSET - dragOccupyWidth,
6926
+ height: rowHeight,
6927
+ fill: indexFill,
6928
+ strokes: {
6929
+ top: this.colors.gray200,
6930
+ bottom: this.colors.gray200
6931
+ }
6932
+ });
6933
+ // 第一列单元格
6934
+ this.rect({
6935
+ x: AI_TABLE_CELL_PADDING + dragOccupyWidth + 2,
6936
+ y: this.y + (this.rowHeight - AI_TABLE_ICON_COMMON_SIZE) / 2,
6937
+ width: AI_TABLE_ICON_COMMON_SIZE,
6938
+ height: AI_TABLE_ICON_COMMON_SIZE,
6939
+ fill: hexToRgb(this.colors.gray400, 0.2),
6940
+ stroke: this.colors.gray300,
6941
+ radius: 2
6942
+ });
6943
+ }
6944
+ const iconContainerWidth = AI_TABLE_ICON_COMMON_SIZE + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;
6945
+ if (!isEmpty(groupValue)) {
6946
+ cellDrawer.initStyle(field, style);
6947
+ cellDrawer.renderCell({
6948
+ ...render,
6949
+ x: render.x + iconContainerWidth,
6950
+ columnWidth: render.columnWidth - iconContainerWidth
6951
+ }, this.ctx, columnWidth);
6952
+ }
6953
+ }
6954
+ renderCommonCellBorder({ style }) {
6955
+ const { fill, stroke } = style || {};
6956
+ const colors = AITable.getColors();
6957
+ // 背景、边框
6958
+ this.customRect({
6959
+ x: this.x,
6960
+ y: this.y,
6961
+ width: this.columnWidth,
6962
+ height: this.rowHeight,
6963
+ fill: fill || colors.white,
6964
+ strokes: {
6965
+ top: stroke || colors.gray200,
6966
+ bottom: stroke || colors.gray200,
6967
+ right: this.isLastFrozenColumn ? this.colors.gray200 : undefined
6968
+ }
6969
+ });
6970
+ }
6971
+ renderLastCell({ style, isHoverRow, isCheckedRow }) {
6972
+ if (this.isLast) {
6973
+ this.renderAddFieldBlank({ isHoverRow: false, isCheckedRow: false });
6974
+ }
6975
+ }
6976
+ render(render, config) {
6977
+ const { style, isHoverRow, isCheckedRow } = config;
6978
+ this.renderFirstCell(render, config);
6979
+ this.renderCommonCellBorder({ style });
6980
+ this.renderLastCell({ style, isHoverRow, isCheckedRow });
6981
+ }
6982
+ }
6983
+ const groupLayout = new GroupLayout();
6984
+
6865
6985
  /**
6866
6986
  * 绘制单元格内容的函数
6867
6987
  * 利用 Canvas API 绘制每个单元格的背景颜色、文本以及其他可能的样式。这个函数通常用于自定义表格渲染,尤其是在处理大量数据时,通过直接操作 Canvas 来提高渲染性能
@@ -6873,11 +6993,14 @@ const createCells = (config) => {
6873
6993
  const { rowHeight, columnCount, rowCount } = coordinate;
6874
6994
  const colors = AITable.getColors();
6875
6995
  const visibleColumns = AITable.getVisibleFields(aiTable);
6996
+ const linearRows = aiTable.context?.linearRows();
6876
6997
  // 初始化绘图上下文, 为后续的绘制操作做准备
6877
6998
  cellDrawer.initCtx(ctx);
6878
6999
  addRowLayout.initCtx(ctx);
6879
7000
  recordRowLayout.initCtx(ctx);
7001
+ groupLayout.initCtx(ctx);
6880
7002
  const coverCell = getCoverCell(aiTable);
7003
+ const frozenColumnCount = aiTable.context?.frozenColumnCount() || 1;
6881
7004
  // 遍历列, 确定在哪些列上绘制单元格
6882
7005
  for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {
6883
7006
  if (columnIndex > columnCount - 1)
@@ -6898,7 +7021,7 @@ const createCells = (config) => {
6898
7021
  if (rowIndex > rowCount - 1)
6899
7022
  break;
6900
7023
  const row = context.linearRows()[rowIndex];
6901
- const { _id: recordId, type } = row;
7024
+ const { _id: recordId, type, depth = 0 } = row;
6902
7025
  const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;
6903
7026
  const { rowIndex: pointRowIndex, targetName } = context.pointPosition();
6904
7027
  const isHover = pointRowIndex === rowIndex;
@@ -6918,7 +7041,8 @@ const createCells = (config) => {
6918
7041
  rowHeadWidth: context.rowHeadWidth(),
6919
7042
  hiddenIndexColumn: !!context.aiFieldConfig()?.hiddenIndexColumn,
6920
7043
  hiddenRowDrag: !!context.aiFieldConfig()?.hiddenRowDrag,
6921
- readonly: aiTable.context?.readonly?.()
7044
+ readonly: aiTable.context?.readonly?.(),
7045
+ frozenColumnCount
6922
7046
  });
6923
7047
  addRowLayout.render({
6924
7048
  isHoverRow,
@@ -6944,7 +7068,8 @@ const createCells = (config) => {
6944
7068
  rowHeadWidth: context.rowHeadWidth(),
6945
7069
  hiddenIndexColumn: !!context.aiFieldConfig()?.hiddenIndexColumn,
6946
7070
  hiddenRowDrag: !!context.aiFieldConfig()?.hiddenRowDrag,
6947
- readonly: aiTable.context?.readonly?.()
7071
+ readonly: aiTable.context?.readonly?.(),
7072
+ frozenColumnCount
6948
7073
  });
6949
7074
  recordRowLayout.render({
6950
7075
  row,
@@ -6953,12 +7078,18 @@ const createCells = (config) => {
6953
7078
  isHoverRow: isHoverRecord(isHover, targetName),
6954
7079
  isCheckedRow: isSelectedRecord(recordId, aiTable)
6955
7080
  });
7081
+ const isGroupAndFirstColumn = depth > 0 && columnIndex === 0;
6956
7082
  const { width, offset } = getCellHorizontalPosition({
6957
7083
  columnIndex,
6958
- columnWidth,
6959
- columnCount
7084
+ columnWidth: isGroupAndFirstColumn ? columnWidth - AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE : columnWidth,
7085
+ // columnWidth,
7086
+ columnCount,
7087
+ depth
6960
7088
  });
6961
- const realX = x + offset + AI_TABLE_OFFSET;
7089
+ let realX = x + offset + AI_TABLE_OFFSET;
7090
+ if (isGroupAndFirstColumn) {
7091
+ realX += AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;
7092
+ }
6962
7093
  const realY = y + AI_TABLE_OFFSET;
6963
7094
  const style = { fontWeight: DEFAULT_FONT_STYLE };
6964
7095
  const cellValue = AITableQueries.getFieldValue(aiTable, [recordId, fieldId]);
@@ -6999,6 +7130,59 @@ const createCells = (config) => {
6999
7130
  else {
7000
7131
  cellDrawer.renderCell(render, ctx, columnWidth);
7001
7132
  }
7133
+ break;
7134
+ }
7135
+ case AITableRowType.group: {
7136
+ const fieldId = row.fieldId;
7137
+ const field = aiTable.fieldsMap()[fieldId];
7138
+ groupLayout.init({
7139
+ x,
7140
+ y,
7141
+ rowIndex,
7142
+ columnIndex,
7143
+ columnWidth,
7144
+ rowHeight,
7145
+ columnCount,
7146
+ containerWidth: coordinate.containerWidth,
7147
+ rowHeadWidth: context.rowHeadWidth(),
7148
+ hiddenIndexColumn: !!context.aiFieldConfig()?.hiddenIndexColumn,
7149
+ hiddenRowDrag: !!context.aiFieldConfig()?.hiddenRowDrag,
7150
+ readonly: aiTable.context?.readonly?.(),
7151
+ frozenColumnCount
7152
+ });
7153
+ const { width, offset } = getCellHorizontalPosition({
7154
+ columnIndex,
7155
+ columnWidth,
7156
+ columnCount,
7157
+ depth
7158
+ });
7159
+ const realX = x + offset + AI_TABLE_OFFSET;
7160
+ const realY = y + AI_TABLE_OFFSET;
7161
+ const style = { fontWeight: DEFAULT_FONT_STYLE };
7162
+ const cellValue = row.groupValue;
7163
+ const fieldModel = FieldModelMap[field.type];
7164
+ const transformValue = fieldModel.transformCellValue(cellValue, { aiTable, field });
7165
+ const render = {
7166
+ aiTable,
7167
+ x: realX,
7168
+ y: realY,
7169
+ columnWidth: width,
7170
+ rowHeight,
7171
+ recordId: recordId,
7172
+ field,
7173
+ cellValue,
7174
+ transformValue,
7175
+ references,
7176
+ isActive: isSelectedField(fieldId, aiTable),
7177
+ style,
7178
+ colors,
7179
+ isCoverCell: false
7180
+ };
7181
+ groupLayout.render(render, {
7182
+ row: row,
7183
+ isHoverRow: isHoverRecord(isHover, targetName),
7184
+ isCheckedRow: isSelectedRecord(recordId, aiTable)
7185
+ });
7002
7186
  }
7003
7187
  }
7004
7188
  }
@@ -9343,6 +9527,106 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
9343
9527
  }]
9344
9528
  }] });
9345
9529
 
9530
+ const createGroupCells = (config) => {
9531
+ const { coordinate, rowStartIndex, rowStopIndex, columnStartIndex, columnStopIndex, aiTable, actions, readonly } = config;
9532
+ const linearRows = aiTable.context?.linearRows();
9533
+ const { columnCount } = coordinate;
9534
+ const groups = [];
9535
+ for (let rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {
9536
+ if (rowIndex > columnCount - 1)
9537
+ break;
9538
+ if (rowIndex < 0)
9539
+ continue;
9540
+ const row = linearRows[rowIndex];
9541
+ const { depth } = row;
9542
+ if (row == null)
9543
+ continue;
9544
+ if (row.type !== AITableRowType.group)
9545
+ continue;
9546
+ const y = coordinate.getRowOffset(rowIndex) + AI_TABLE_OFFSET;
9547
+ const rowHeight = coordinate.getRowHeight(rowIndex);
9548
+ for (let columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {
9549
+ const columnWidth = coordinate.getColumnWidth(columnIndex);
9550
+ const { width, offset } = getCellHorizontalPosition({
9551
+ columnIndex,
9552
+ columnWidth,
9553
+ columnCount,
9554
+ depth
9555
+ });
9556
+ const x = coordinate.getColumnOffset(columnIndex);
9557
+ const group = {
9558
+ aiTable,
9559
+ coordinate,
9560
+ columnIndex,
9561
+ x: x + offset + AI_TABLE_CELL_PADDING,
9562
+ y,
9563
+ width,
9564
+ height: rowHeight,
9565
+ row,
9566
+ readonly
9567
+ };
9568
+ groups.push(group);
9569
+ }
9570
+ }
9571
+ return groups;
9572
+ };
9573
+
9574
+ class AITableFrozenGroups {
9575
+ constructor() {
9576
+ this.config = input.required();
9577
+ this.groupOptions = computed(() => {
9578
+ const { coordinate } = this.config();
9579
+ const { frozenColumnCount } = coordinate;
9580
+ return createGroupCells({
9581
+ ...this.config(),
9582
+ columnStartIndex: 0,
9583
+ columnStopIndex: frozenColumnCount - 1
9584
+ });
9585
+ });
9586
+ this.groupFirstColumnCollapsedIcons = computed(() => {
9587
+ const groupOptions = this.groupOptions();
9588
+ const collapsedIcons = [];
9589
+ groupOptions.forEach((groupOption) => {
9590
+ const { row, x, y, height, columnIndex, readonly } = groupOption;
9591
+ if (columnIndex === 0) {
9592
+ const { isCollapsed, fieldId, groupId } = row;
9593
+ collapsedIcons.push({
9594
+ name: generateTargetName({
9595
+ targetName: AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON,
9596
+ fieldId: fieldId,
9597
+ source: groupId,
9598
+ mouseStyle: readonly ? 'default' : 'pointer'
9599
+ }),
9600
+ x,
9601
+ y: y + (height - AI_TABLE_ICON_COMMON_SIZE) / 2,
9602
+ data: isCollapsed ? AngleRightPath : AngleDownPath
9603
+ });
9604
+ }
9605
+ });
9606
+ return collapsedIcons;
9607
+ });
9608
+ }
9609
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFrozenGroups, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9610
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableFrozenGroups, isStandalone: true, selector: "ai-table-frozen-groups", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
9611
+ @for (collapsedIcon of groupFirstColumnCollapsedIcons(); track $index) {
9612
+ <ai-table-icon [config]="collapsedIcon"></ai-table-icon>
9613
+ }
9614
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AITableIcon, selector: "ai-table-icon", inputs: ["config"], outputs: ["koClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9615
+ }
9616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFrozenGroups, decorators: [{
9617
+ type: Component,
9618
+ args: [{
9619
+ selector: 'ai-table-frozen-groups',
9620
+ template: `
9621
+ @for (collapsedIcon of groupFirstColumnCollapsedIcons(); track $index) {
9622
+ <ai-table-icon [config]="collapsedIcon"></ai-table-icon>
9623
+ }
9624
+ `,
9625
+ imports: [CommonModule, AITableIcon],
9626
+ changeDetection: ChangeDetectionStrategy.OnPush
9627
+ }]
9628
+ }] });
9629
+
9346
9630
  Konva.pixelRatio = 2;
9347
9631
  class AITableRenderer {
9348
9632
  constructor() {
@@ -9642,7 +9926,7 @@ class AITableRenderer {
9642
9926
  this.isHoverStatContainer.set(isHover);
9643
9927
  }
9644
9928
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9645
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableRenderer, isStandalone: true, selector: "ai-table-renderer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { koMousemove: "koMousemove", koMousedown: "koMousedown", koMouseup: "koMouseup", koContextmenu: "koContextmenu", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick", koMouseleave: "koMouseleave", onScrollPosition: "onScrollPosition" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group #commonOffsetGroup [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-field-shadow [config]=\"config()\"></ai-table-frozen-field-shadow>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().expandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (!isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n <ko-group [config]=\"frozenCoverAttachGroupConfig()\">\n <ko-group #frozenCoverAttachOffsetGroup [config]=\"offsetYConfig()\">\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().frozenExpandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"statGroupConfig()\">\n <ai-table-background [config]=\"columnFieldStatsBgConfig()\"></ai-table-background>\n <ko-group>\n <ai-table-column-stats\n [config]=\"columnFrozenFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n <ko-group [config]=\"statCommonGroupConfig()\">\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-stats\n [config]=\"columnFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n </ko-group>\n <ko-group>\n <ai-table-frozen-field-shadow [config]=\"columnFieldStatsConfig()\" position=\"fieldStats\"></ai-table-frozen-field-shadow>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoStage, selector: "ko-stage", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableColumnHeads, selector: "ai-table-column-heads", inputs: ["config"] }, { kind: "component", type: AITableFrozenColumnHeads, selector: "ai-table-frozen-column-heads", inputs: ["config"] }, { kind: "component", type: AITableCells, selector: "ai-table-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenCells, selector: "ai-table-frozen-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenPlaceholderCells, selector: "ai-table-frozen-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableCoverCellEntry, selector: "ai-table-cover-cell-entry", inputs: ["config", "onlyDisplayBorder"] }, { kind: "component", type: AITablePlaceholderCells, selector: "ai-table-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableAddField, selector: "ai-table-add-field", inputs: ["config"] }, { kind: "component", type: AITableHoverRowHeads, selector: "ai-table-hover-row-heads", inputs: ["config"] }, { kind: "component", type: AITableOtherRows, selector: "ai-table-other-rows", inputs: ["config"] }, { kind: "component", type: AITableFillHandle, selector: "ai-table-fill-handle", inputs: ["config"] }, { kind: "component", type: AITableFieldStats, selector: "ai-table-column-stats", inputs: ["config"], outputs: ["hover"] }, { kind: "component", type: AITableBackground, selector: "ai-table-background", inputs: ["config", "isActive", "isHover"], outputs: ["koClick", "hover", "koMouseenter", "koMouseleave", "isHoverChange"] }, { kind: "component", type: AITableFrozenFieldShadow, selector: "ai-table-frozen-field-shadow", inputs: ["config", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9929
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableRenderer, isStandalone: true, selector: "ai-table-renderer", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { koMousemove: "koMousemove", koMousedown: "koMousedown", koMouseup: "koMouseup", koContextmenu: "koContextmenu", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick", koMouseleave: "koMouseleave", onScrollPosition: "onScrollPosition" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-groups [config]=\"cellsConfig()\"></ai-table-frozen-groups>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group #commonOffsetGroup [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-field-shadow [config]=\"config()\"></ai-table-frozen-field-shadow>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().expandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (!isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n <ko-group [config]=\"frozenCoverAttachGroupConfig()\">\n <ko-group #frozenCoverAttachOffsetGroup [config]=\"offsetYConfig()\">\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().frozenExpandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"statGroupConfig()\">\n <ai-table-background [config]=\"columnFieldStatsBgConfig()\"></ai-table-background>\n <ko-group>\n <ai-table-column-stats\n [config]=\"columnFrozenFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n <ko-group [config]=\"statCommonGroupConfig()\">\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-stats\n [config]=\"columnFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n </ko-group>\n <ko-group>\n <ai-table-frozen-field-shadow [config]=\"columnFieldStatsConfig()\" position=\"fieldStats\"></ai-table-frozen-field-shadow>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n", dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoStage, selector: "ko-stage", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableColumnHeads, selector: "ai-table-column-heads", inputs: ["config"] }, { kind: "component", type: AITableFrozenColumnHeads, selector: "ai-table-frozen-column-heads", inputs: ["config"] }, { kind: "component", type: AITableCells, selector: "ai-table-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenCells, selector: "ai-table-frozen-cells", inputs: ["config"] }, { kind: "component", type: AITableFrozenPlaceholderCells, selector: "ai-table-frozen-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableCoverCellEntry, selector: "ai-table-cover-cell-entry", inputs: ["config", "onlyDisplayBorder"] }, { kind: "component", type: AITablePlaceholderCells, selector: "ai-table-placeholder-cells", inputs: ["config"] }, { kind: "component", type: AITableAddField, selector: "ai-table-add-field", inputs: ["config"] }, { kind: "component", type: AITableHoverRowHeads, selector: "ai-table-hover-row-heads", inputs: ["config"] }, { kind: "component", type: AITableOtherRows, selector: "ai-table-other-rows", inputs: ["config"] }, { kind: "component", type: AITableFillHandle, selector: "ai-table-fill-handle", inputs: ["config"] }, { kind: "component", type: AITableFieldStats, selector: "ai-table-column-stats", inputs: ["config"], outputs: ["hover"] }, { kind: "component", type: AITableBackground, selector: "ai-table-background", inputs: ["config", "isActive", "isHover"], outputs: ["koClick", "hover", "koMouseenter", "koMouseleave", "isHoverChange"] }, { kind: "component", type: AITableFrozenFieldShadow, selector: "ai-table-frozen-field-shadow", inputs: ["config", "position"] }, { kind: "component", type: AITableFrozenGroups, selector: "ai-table-frozen-groups", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9646
9930
  }
9647
9931
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, decorators: [{
9648
9932
  type: Component,
@@ -9663,8 +9947,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
9663
9947
  AITableFillHandle,
9664
9948
  AITableFieldStats,
9665
9949
  AITableBackground,
9666
- AITableFrozenFieldShadow
9667
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group #commonOffsetGroup [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-field-shadow [config]=\"config()\"></ai-table-frozen-field-shadow>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().expandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (!isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n <ko-group [config]=\"frozenCoverAttachGroupConfig()\">\n <ko-group #frozenCoverAttachOffsetGroup [config]=\"offsetYConfig()\">\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().frozenExpandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"statGroupConfig()\">\n <ai-table-background [config]=\"columnFieldStatsBgConfig()\"></ai-table-background>\n <ko-group>\n <ai-table-column-stats\n [config]=\"columnFrozenFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n <ko-group [config]=\"statCommonGroupConfig()\">\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-stats\n [config]=\"columnFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n </ko-group>\n <ko-group>\n <ai-table-frozen-field-shadow [config]=\"columnFieldStatsConfig()\" position=\"fieldStats\"></ai-table-frozen-field-shadow>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
9950
+ AITableFrozenFieldShadow,
9951
+ AITableFrozenGroups
9952
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n (koWheel)=\"stageWheel($event)\"\n>\n <ko-layer>\n <ko-group [config]=\"gridGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-groups [config]=\"cellsConfig()\"></ai-table-frozen-groups>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group #commonOffsetGroup [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-field-shadow [config]=\"config()\"></ai-table-frozen-field-shadow>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().expandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (!isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n <ko-group [config]=\"frozenCoverAttachGroupConfig()\">\n <ko-group #frozenCoverAttachOffsetGroup [config]=\"offsetYConfig()\">\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\"></ai-table-cover-cell-entry>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"frozenAttachGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n @if (activeCellBorderConfig().frozenActiveCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().frozenActiveCellBorder!\"></ko-rect>\n }\n @if (showExpandCellBorder().frozenExpandCellBorder) {\n <ai-table-cover-cell-entry [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell-entry>\n }\n @if (isLastSelectedCellInFrozenColumn()) {\n <ai-table-fill-handle [config]=\"fillHandleConfig()\"></ai-table-fill-handle>\n }\n </ko-group>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"statGroupConfig()\">\n <ai-table-background [config]=\"columnFieldStatsBgConfig()\"></ai-table-background>\n <ko-group>\n <ai-table-column-stats\n [config]=\"columnFrozenFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n <ko-group [config]=\"statCommonGroupConfig()\">\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-stats\n [config]=\"columnFieldStatsConfig()\"\n (hover)=\"onStatContainerHover($event)\"\n ></ai-table-column-stats>\n </ko-group>\n </ko-group>\n <ko-group>\n <ai-table-frozen-field-shadow [config]=\"columnFieldStatsConfig()\" position=\"fieldStats\"></ai-table-frozen-field-shadow>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
9668
9953
  }] });
9669
9954
 
9670
9955
  class AITableCellRate extends CoverCellBase {
@@ -11543,6 +11828,7 @@ class AITableGridBase {
11543
11828
  this.aiMaxSelectOptions = input();
11544
11829
  this.aiReferences = input.required();
11545
11830
  this.aiBuildRenderDataFn = input();
11831
+ this.aiBuildGroupLinearRowsFn = input();
11546
11832
  this.aiGetI18nTextByKey = input();
11547
11833
  this.aiKeywords = input();
11548
11834
  this.aiFrozenColumnCountFn = input();
@@ -11562,6 +11848,7 @@ class AITableGridBase {
11562
11848
  this.aiMoveRecords = output();
11563
11849
  this.aiClick = output();
11564
11850
  this.aiDbClick = output();
11851
+ this.aiRowGroupCollapseClick = output();
11565
11852
  this.fieldMenus = computed(() => {
11566
11853
  const fieldMenusFn = this.aiFieldConfig()?.fieldMenus;
11567
11854
  if (fieldMenusFn && this.aiTable) {
@@ -11658,7 +11945,7 @@ class AITableGridBase {
11658
11945
  }
11659
11946
  }
11660
11947
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11661
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AITableGridBase, isStandalone: true, selector: "ai-table-grid-base", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, transformFunction: null }, aiFieldsSizeMap: { classPropertyName: "aiFieldsSizeMap", publicName: "aiFieldsSizeMap", isSignal: true, isRequired: true, transformFunction: null }, aiContextMenuItems: { classPropertyName: "aiContextMenuItems", publicName: "aiContextMenuItems", isSignal: true, isRequired: false, transformFunction: null }, aiFieldConfig: { classPropertyName: "aiFieldConfig", publicName: "aiFieldConfig", isSignal: true, isRequired: false, transformFunction: null }, aiReadonly: { classPropertyName: "aiReadonly", publicName: "aiReadonly", isSignal: true, isRequired: false, transformFunction: null }, aiPlugins: { classPropertyName: "aiPlugins", publicName: "aiPlugins", isSignal: true, isRequired: false, transformFunction: null }, aiMaxFields: { classPropertyName: "aiMaxFields", publicName: "aiMaxFields", isSignal: true, isRequired: false, transformFunction: null }, aiMaxRecords: { classPropertyName: "aiMaxRecords", publicName: "aiMaxRecords", isSignal: true, isRequired: false, transformFunction: null }, aiMaxSelectOptions: { classPropertyName: "aiMaxSelectOptions", publicName: "aiMaxSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: true, transformFunction: null }, aiBuildRenderDataFn: { classPropertyName: "aiBuildRenderDataFn", publicName: "aiBuildRenderDataFn", isSignal: true, isRequired: false, transformFunction: null }, aiGetI18nTextByKey: { classPropertyName: "aiGetI18nTextByKey", publicName: "aiGetI18nTextByKey", isSignal: true, isRequired: false, transformFunction: null }, aiKeywords: { classPropertyName: "aiKeywords", publicName: "aiKeywords", isSignal: true, isRequired: false, transformFunction: null }, aiFrozenColumnCountFn: { classPropertyName: "aiFrozenColumnCountFn", publicName: "aiFrozenColumnCountFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", aiFieldsSizeMap: "aiFieldsSizeMapChange", aiTableInitialized: "aiTableInitialized", aiAddRecord: "aiAddRecord", aiAddField: "aiAddField", aiMoveField: "aiMoveField", aiUpdateFieldValues: "aiUpdateFieldValues", aiSetField: "aiSetField", aiSetFieldWidth: "aiSetFieldWidth", aiSetFieldStatType: "aiSetFieldStatType", aiMoveRecords: "aiMoveRecords", aiClick: "aiClick", aiDbClick: "aiDbClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11948
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AITableGridBase, isStandalone: true, selector: "ai-table-grid-base", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, transformFunction: null }, aiFieldsSizeMap: { classPropertyName: "aiFieldsSizeMap", publicName: "aiFieldsSizeMap", isSignal: true, isRequired: true, transformFunction: null }, aiContextMenuItems: { classPropertyName: "aiContextMenuItems", publicName: "aiContextMenuItems", isSignal: true, isRequired: false, transformFunction: null }, aiFieldConfig: { classPropertyName: "aiFieldConfig", publicName: "aiFieldConfig", isSignal: true, isRequired: false, transformFunction: null }, aiReadonly: { classPropertyName: "aiReadonly", publicName: "aiReadonly", isSignal: true, isRequired: false, transformFunction: null }, aiPlugins: { classPropertyName: "aiPlugins", publicName: "aiPlugins", isSignal: true, isRequired: false, transformFunction: null }, aiMaxFields: { classPropertyName: "aiMaxFields", publicName: "aiMaxFields", isSignal: true, isRequired: false, transformFunction: null }, aiMaxRecords: { classPropertyName: "aiMaxRecords", publicName: "aiMaxRecords", isSignal: true, isRequired: false, transformFunction: null }, aiMaxSelectOptions: { classPropertyName: "aiMaxSelectOptions", publicName: "aiMaxSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: true, transformFunction: null }, aiBuildRenderDataFn: { classPropertyName: "aiBuildRenderDataFn", publicName: "aiBuildRenderDataFn", isSignal: true, isRequired: false, transformFunction: null }, aiBuildGroupLinearRowsFn: { classPropertyName: "aiBuildGroupLinearRowsFn", publicName: "aiBuildGroupLinearRowsFn", isSignal: true, isRequired: false, transformFunction: null }, aiGetI18nTextByKey: { classPropertyName: "aiGetI18nTextByKey", publicName: "aiGetI18nTextByKey", isSignal: true, isRequired: false, transformFunction: null }, aiKeywords: { classPropertyName: "aiKeywords", publicName: "aiKeywords", isSignal: true, isRequired: false, transformFunction: null }, aiFrozenColumnCountFn: { classPropertyName: "aiFrozenColumnCountFn", publicName: "aiFrozenColumnCountFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", aiFieldsSizeMap: "aiFieldsSizeMapChange", aiTableInitialized: "aiTableInitialized", aiAddRecord: "aiAddRecord", aiAddField: "aiAddField", aiMoveField: "aiMoveField", aiUpdateFieldValues: "aiUpdateFieldValues", aiSetField: "aiSetField", aiSetFieldWidth: "aiSetFieldWidth", aiSetFieldStatType: "aiSetFieldStatType", aiMoveRecords: "aiMoveRecords", aiClick: "aiClick", aiDbClick: "aiDbClick", aiRowGroupCollapseClick: "aiRowGroupCollapseClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11662
11949
  }
11663
11950
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridBase, decorators: [{
11664
11951
  type: Component,
@@ -12380,7 +12667,7 @@ class AITableGrid extends AITableGridBase {
12380
12667
  this.verticalBarRef = viewChild('verticalBar');
12381
12668
  this.horizontalBarRef = viewChild('horizontalBar');
12382
12669
  this.linearRows = computed(() => {
12383
- return buildGridLinearRows(this.gridData().records, !this.aiReadonly());
12670
+ return buildGridLinearRows(this.gridData().records, !this.aiReadonly(), this.aiTable, this.aiBuildGroupLinearRowsFn?.());
12384
12671
  });
12385
12672
  this.domToolTips = computed(() => {
12386
12673
  const scrollTop = this.aiTable.context.scrollState().scrollTop;
@@ -12440,7 +12727,7 @@ class AITableGrid extends AITableGridBase {
12440
12727
  columnCount: fields.length,
12441
12728
  rowInitSize: AI_TABLE_FIELD_HEAD_HEIGHT,
12442
12729
  columnInitSize: this.aiTable.context.rowHeadWidth(),
12443
- rowIndicesSizeMap: {},
12730
+ rowIndicesSizeMap: this.rowIndicesMap(),
12444
12731
  columnIndicesSizeMap: getColumnIndicesSizeMap(this.aiTable, fields),
12445
12732
  frozenColumnCount: this.frozenColumnCount()
12446
12733
  });
@@ -12478,6 +12765,15 @@ class AITableGrid extends AITableGridBase {
12478
12765
  };
12479
12766
  });
12480
12767
  // rowAddFilterTooltip = getI18nTextByKey(this.aiTable, AITableGridI18nKey.rowAddFilterTooltip);
12768
+ this.rowIndicesMap = computed(() => {
12769
+ const rowIndicesMap = {};
12770
+ this.linearRows().forEach((row, index) => {
12771
+ if (row.type === AITableRowType.blank) {
12772
+ rowIndicesMap[index] = 0;
12773
+ }
12774
+ });
12775
+ return rowIndicesMap;
12776
+ });
12481
12777
  this.actions = {
12482
12778
  updateFieldValues: (data) => {
12483
12779
  this.aiUpdateFieldValues.emit(data);
@@ -12939,6 +13235,13 @@ class AITableGrid extends AITableGridBase {
12939
13235
  }
12940
13236
  }
12941
13237
  break;
13238
+ case AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON: {
13239
+ const groupId = targetNameDetail.source;
13240
+ if (groupId) {
13241
+ this.aiRowGroupCollapseClick.emit(groupId);
13242
+ }
13243
+ break;
13244
+ }
12942
13245
  }
12943
13246
  return;
12944
13247
  }
@@ -13069,8 +13372,8 @@ class AITableGrid extends AITableGridBase {
13069
13372
  if (!hasSelectedCells) {
13070
13373
  return;
13071
13374
  }
13072
- const hasEditingCell = !!this.aiTableGridEventService.getCurrentEditCell();
13073
- if (hasEditingCell) {
13375
+ const editingCell = this.aiTable.editingCell();
13376
+ if (editingCell && editingCell.path) {
13074
13377
  return;
13075
13378
  }
13076
13379
  // 检查事件目标是否是输入框或文本区域
@@ -13326,5 +13629,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
13326
13629
  * Generated bundle index. Do not edit.
13327
13630
  */
13328
13631
 
13329
- export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderer, AITableRowType, AITableScrollableGroup, AITableSelectAllState, AITableTextComponent, AI_TABLE_ACTION_COMMON_RADIUS, AI_TABLE_ACTION_COMMON_RIGHT_PADDING, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_AUTO_SCROLL_BOTTOM_THRESHOLD, AI_TABLE_AUTO_SCROLL_LEFT_THRESHOLD, AI_TABLE_AUTO_SCROLL_RIGHT_THRESHOLD, AI_TABLE_AUTO_SCROLL_TOP_THRESHOLD, AI_TABLE_BLANK, AI_TABLE_CELL, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_ATTACHMENT_ADD, AI_TABLE_CELL_ATTACHMENT_FILE, AI_TABLE_CELL_BORDER, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EDIT, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_FIELD_ITEM_HEIGHT, AI_TABLE_CELL_LINE_BORDER, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MEMBER_MAX_HEIGHT, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_LEFT, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DEFAULT_COLUMN_WIDTH, AI_TABLE_DOT_RADIUS, AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_OPACITY_LINE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_FIELD_ITEM_MARGIN_RIGHT, AI_TABLE_FIELD_MAX_WIDTH, AI_TABLE_FIELD_MIDDLE_WIDTH, AI_TABLE_FIELD_MINI_WIDTH, AI_TABLE_FIELD_MIN_WIDTH, AI_TABLE_FIELD_STAT_BG, AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT, AI_TABLE_FIELD_STAT_INNER_HEIGHT, AI_TABLE_FILE_ICON_ITEM_HEIGHT, AI_TABLE_FILE_ICON_SIZE, AI_TABLE_FILL_HANDLE, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_INDEX_FIELD_TEXT, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MEMBER_ITEM_PADDING_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_OPTION_MULTI_ITEM_FONT_SIZE, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_RATE_MAX, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_DRAG, AI_TABLE_ROW_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_SCROLL_BAR_SIZE, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AI_TABLE_TEXT_LINE_HEIGHT, AbstractEditCellEditor, AddOutlinedPath, AngleDownPath, AttachmentField, AttachmentPath, CellDrawer, Check, CheckboxMenuSort, Colors, ColumnCalendarFilledPath, ColumnCheckboxFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellBase, DBL_CLICK_EDIT_TYPE, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_ICON_SHAPE, DEFAULT_ICON_SIZE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_ELLIPSIS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_LISTENING, DEFAULT_TEXT_MAX_CACHE, DEFAULT_TEXT_MAX_HEIGHT, DEFAULT_TEXT_SCALE, DEFAULT_TEXT_TRANSFORMS_ENABLED, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, DEFAULT_TEXT_VERTICAL_ALIGN_TOP, DEFAULT_TEXT_WRAP, DEFAULT_WRAP_TEXT_MAX_ROW, DateCellEditorComponent, DateField, DepartmentOutlinedPath, Drawer, EditPath, FONT_SIZE_SM, FieldModelMap, IconPathMap, IsSelectRecordPipe, KO_CONTAINER_TOKEN, KoComponent, KoContainer, KoShape, KoShapeTypes, KoStage, LinkCellEditorComponent, LinkField, MIN_COLUMN_WIDTH, MemberField, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, NumberField, ProgressField, RateField, RendererContext, RichTextField, RowDragPath, RowHeight, SelectCellEditorComponent, SelectField, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextField, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, aiTableFragmentAttribute, aiTableImageConfigToKonvaConfig, aiTableRectConfigToKonvaConfig, aiTableTextConfigToKonvaConfig, applyNodeProps, buildClipboardData, buildGridData, buildGridLinearRows, castToString, cellDrawer, clearCells, clearCoverCell, clearSelectedCells, clearSelection, clearSelectionFields, clearSelectionRecords, closeEditingCell, closeExpendCell, compareNumber, compareOption, compareString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, createListener, dragFillHighlightArea, drawer, expandCell, extractLinkUrl, extractText, generateNewName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesSizeMap, getCoverCell, getDateFieldValues, getDefaultFieldOptions, getDefaultFieldValue, getDefaultI18nTextByKey, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getFieldOptionMap, getFieldOptions, getFieldValue, getFileThumbnailSvgString, getFillDirection, getHoverEditorBoxOffset, getHoverEditorSpace, getI18nTextByKey, getMousePosition, getName, getOptionsByFieldAndRecords, getPlaceHolderCellsConfigs, getStartAndEndCell, getSystemFieldValue, getTargetName, getTextWidth, getVisibleRangeInfo, graphemeSplitter, handleMouseStyle, hasIntersect, idCreator, idsCreator, imageCache, isActiveCell, isArrayField, isCellMatchKeywords, isClipboardReadSupported, isClipboardReadTextSupported, isClipboardWriteSupported, isClipboardWriteTextSupported, isDateFiled, isEmptyOrNot, isMac, isMeetFilter, isNumberFiled, isSameFieldOption, isSelectedField, isSystemField, isVirtualKey, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, performFill, processPastedValueForSelect, readFromClipboard, scrollMax, scrollToMatchedCell, selectCells, selectField, setActiveCell, setEditingCell, setExpandCellInfo, setMouseStyle, setSelection, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, toggleSelectAllRecords, toggleSelectRecord, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
13632
+ export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderer, AITableRowType, AITableScrollableGroup, AITableSelectAllState, AITableTextComponent, AI_TABLE_ACTION_COMMON_RADIUS, AI_TABLE_ACTION_COMMON_RIGHT_PADDING, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_AUTO_SCROLL_BOTTOM_THRESHOLD, AI_TABLE_AUTO_SCROLL_LEFT_THRESHOLD, AI_TABLE_AUTO_SCROLL_RIGHT_THRESHOLD, AI_TABLE_AUTO_SCROLL_TOP_THRESHOLD, AI_TABLE_BLANK, AI_TABLE_CELL, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_ATTACHMENT_ADD, AI_TABLE_CELL_ATTACHMENT_FILE, AI_TABLE_CELL_BORDER, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EDIT, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_FIELD_ITEM_HEIGHT, AI_TABLE_CELL_LINE_BORDER, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MEMBER_MAX_HEIGHT, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_LEFT, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DEFAULT_COLUMN_WIDTH, AI_TABLE_DOT_RADIUS, AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_OPACITY_LINE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_FIELD_ITEM_MARGIN_RIGHT, AI_TABLE_FIELD_MAX_WIDTH, AI_TABLE_FIELD_MIDDLE_WIDTH, AI_TABLE_FIELD_MINI_WIDTH, AI_TABLE_FIELD_MIN_WIDTH, AI_TABLE_FIELD_STAT_BG, AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT, AI_TABLE_FIELD_STAT_INNER_HEIGHT, AI_TABLE_FILE_ICON_ITEM_HEIGHT, AI_TABLE_FILE_ICON_SIZE, AI_TABLE_FILL_HANDLE, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_GROUP_MAX_LEVEL, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_INDEX_FIELD_TEXT, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MEMBER_ITEM_PADDING_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_OPTION_MULTI_ITEM_FONT_SIZE, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_RATE_MAX, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_DRAG, AI_TABLE_ROW_DRAG_ICON_WIDTH, AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON, AI_TABLE_ROW_GROUP_OFFSET, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_SCROLL_BAR_SIZE, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AI_TABLE_TEXT_LINE_HEIGHT, AbstractEditCellEditor, AddOutlinedPath, AngleDownPath, AngleRightPath, AttachmentField, AttachmentPath, CellDrawer, Check, CheckboxMenuSort, Colors, ColumnCalendarFilledPath, ColumnCheckboxFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellBase, DBL_CLICK_EDIT_TYPE, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_ICON_SHAPE, DEFAULT_ICON_SIZE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_ELLIPSIS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_LISTENING, DEFAULT_TEXT_MAX_CACHE, DEFAULT_TEXT_MAX_HEIGHT, DEFAULT_TEXT_SCALE, DEFAULT_TEXT_TRANSFORMS_ENABLED, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, DEFAULT_TEXT_VERTICAL_ALIGN_TOP, DEFAULT_TEXT_WRAP, DEFAULT_WRAP_TEXT_MAX_ROW, DateCellEditorComponent, DateField, DepartmentOutlinedPath, Drawer, EditPath, FONT_SIZE_SM, FieldModelMap, IconPathMap, IsSelectRecordPipe, KO_CONTAINER_TOKEN, KoComponent, KoContainer, KoShape, KoShapeTypes, KoStage, LinkCellEditorComponent, LinkField, MIN_COLUMN_WIDTH, MemberField, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, NumberField, ProgressField, RateField, RendererContext, RichTextField, RowDragPath, RowHeight, SelectCellEditorComponent, SelectField, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextField, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, aiTableFragmentAttribute, aiTableImageConfigToKonvaConfig, aiTableRectConfigToKonvaConfig, aiTableTextConfigToKonvaConfig, applyNodeProps, buildClipboardData, buildGridData, buildGridLinearRows, castToString, cellDrawer, clearCells, clearCoverCell, clearSelectedCells, clearSelection, clearSelectionFields, clearSelectionRecords, closeEditingCell, closeExpendCell, compareNumber, compareOption, compareString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, createListener, dragFillHighlightArea, drawer, expandCell, extractLinkUrl, extractText, generateNewName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesSizeMap, getCoverCell, getDateFieldValues, getDefaultFieldOptions, getDefaultFieldValue, getDefaultI18nTextByKey, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getFieldOptionMap, getFieldOptions, getFieldValue, getFileThumbnailSvgString, getFillDirection, getHoverEditorBoxOffset, getHoverEditorSpace, getI18nTextByKey, getMousePosition, getName, getOptionsByFieldAndRecords, getPlaceHolderCellsConfigs, getStartAndEndCell, getSystemFieldValue, getTargetName, getTextWidth, getVisibleRangeInfo, graphemeSplitter, handleMouseStyle, hasIntersect, idCreator, idsCreator, imageCache, isActiveCell, isArrayField, isCellMatchKeywords, isClipboardReadSupported, isClipboardReadTextSupported, isClipboardWriteSupported, isClipboardWriteTextSupported, isDateFiled, isEmptyOrNot, isMac, isMeetFilter, isNumberFiled, isSameFieldOption, isSelectedField, isSystemField, isVirtualKey, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, performFill, processPastedValueForSelect, readFromClipboard, scrollMax, scrollToMatchedCell, selectCells, selectField, setActiveCell, setEditingCell, setExpandCellInfo, setMouseStyle, setSelection, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, toggleSelectAllRecords, toggleSelectRecord, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
13330
13633
  //# sourceMappingURL=ai-table-grid.mjs.map