@ai-table/grid 0.1.27 → 0.1.29

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/core/utils/common.d.ts.map +1 -1
  2. package/fesm2022/ai-table-grid.mjs +636 -85
  3. package/fesm2022/ai-table-grid.mjs.map +1 -1
  4. package/grid.component.d.ts +1 -1
  5. package/grid.component.d.ts.map +1 -1
  6. package/package.json +1 -1
  7. package/renderer/components/cells/attachment.component.d.ts +2 -2
  8. package/renderer/components/cells/attachment.component.d.ts.map +1 -1
  9. package/renderer/components/cells/cells.d.ts +2 -2
  10. package/renderer/components/cells/cells.d.ts.map +1 -1
  11. package/renderer/components/cells/cover-cell-base.d.ts +11 -0
  12. package/renderer/components/cells/cover-cell-base.d.ts.map +1 -0
  13. package/renderer/components/cells/link.component.d.ts +2 -2
  14. package/renderer/components/cells/link.component.d.ts.map +1 -1
  15. package/renderer/components/cells/progress.component.d.ts +2 -2
  16. package/renderer/components/cells/progress.component.d.ts.map +1 -1
  17. package/renderer/components/cells/rate.component.d.ts +2 -2
  18. package/renderer/components/cells/rate.component.d.ts.map +1 -1
  19. package/renderer/components/cells/rich-text.component.d.ts +2 -2
  20. package/renderer/components/cells/rich-text.component.d.ts.map +1 -1
  21. package/renderer/components/cover-cell.component.d.ts +6 -6
  22. package/renderer/components/cover-cell.component.d.ts.map +1 -1
  23. package/renderer/components/field-stat/stat.component.d.ts +10 -9
  24. package/renderer/components/field-stat/stat.component.d.ts.map +1 -1
  25. package/renderer/components/fill-handle.component.d.ts +1 -2
  26. package/renderer/components/fill-handle.component.d.ts.map +1 -1
  27. package/renderer/components/index.d.ts +2 -1
  28. package/renderer/components/index.d.ts.map +1 -1
  29. package/renderer/components/scrollable-group/index.d.ts +2 -0
  30. package/renderer/components/scrollable-group/index.d.ts.map +1 -0
  31. package/renderer/components/scrollable-group/scrollable-group.component.d.ts +123 -0
  32. package/renderer/components/scrollable-group/scrollable-group.component.d.ts.map +1 -0
  33. package/renderer/renderer.component.d.ts +8 -1
  34. package/renderer/renderer.component.d.ts.map +1 -1
  35. package/services/event.service.d.ts +1 -0
  36. package/services/event.service.d.ts.map +1 -1
  37. package/services/selection.service.d.ts +1 -0
  38. package/services/selection.service.d.ts.map +1 -1
  39. package/types/grid.d.ts +3 -2
  40. package/types/grid.d.ts.map +1 -1
  41. package/utils/cover-cell.d.ts +1 -1
  42. package/utils/drag-fill/drag-fill.d.ts.map +1 -1
  43. package/renderer/components/cells/cover-cell.d.ts +0 -12
  44. package/renderer/components/cells/cover-cell.d.ts.map +0 -1
@@ -29,7 +29,7 @@ import { AITableFieldGroup, AITableFieldType, AITableRowColumnType, DragType, is
29
29
  import ObjectID from 'bson-objectid';
30
30
  import { customAlphabet } from 'nanoid';
31
31
  import * as _ from 'lodash';
32
- import ___default, { isNumber, includes, values, isString, isObject } from 'lodash';
32
+ import ___default, { isNumber, includes, values, isString, isNil, isObject } from 'lodash';
33
33
  import * as i1 from '@angular/forms';
34
34
  import { FormsModule } from '@angular/forms';
35
35
  import { ThyDatePicker, ThyDatePickerFormatPipe } from 'ngx-tethys/date-picker';
@@ -1354,6 +1354,7 @@ function createAITable(records, fields, gridData) {
1354
1354
  selectedCells: new Set(),
1355
1355
  activeCell: null,
1356
1356
  expandCell: null,
1357
+ editingCell: null,
1357
1358
  selectAllState: AITableSelectAllState.none
1358
1359
  }),
1359
1360
  keywordsMatchedCells: signal(new Set()),
@@ -5019,25 +5020,24 @@ class Drawer {
5019
5020
  }
5020
5021
  const drawer = new Drawer();
5021
5022
 
5022
- class CoverCellComponent extends Component {
5023
+ class CoverCellBase {
5023
5024
  constructor() {
5024
- super(...arguments);
5025
5025
  this.config = input();
5026
5026
  this.onlyDisplayBorder = input(false);
5027
5027
  }
5028
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CoverCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
5029
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: CoverCellComponent, isStandalone: true, selector: "ai-table-cover-cell", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, onlyDisplayBorder: { classPropertyName: "onlyDisplayBorder", publicName: "onlyDisplayBorder", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5028
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CoverCellBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5029
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: CoverCellBase, isStandalone: true, selector: "ai-table-cover-cell-base", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, onlyDisplayBorder: { classPropertyName: "onlyDisplayBorder", publicName: "onlyDisplayBorder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
5030
5030
  }
5031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CoverCellComponent, decorators: [{
5031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: CoverCellBase, decorators: [{
5032
5032
  type: Component,
5033
5033
  args: [{
5034
- selector: 'ai-table-cover-cell',
5034
+ selector: 'ai-table-cover-cell-base',
5035
5035
  template: '',
5036
5036
  changeDetection: ChangeDetectionStrategy.OnPush
5037
5037
  }]
5038
5038
  }] });
5039
5039
 
5040
- class AITableCellLink extends CoverCellComponent {
5040
+ class AITableCellLink extends CoverCellBase {
5041
5041
  constructor() {
5042
5042
  super(...arguments);
5043
5043
  this.textOffset = AI_TABLE_CELL_PADDING + AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE;
@@ -5241,7 +5241,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
5241
5241
  }]
5242
5242
  }] });
5243
5243
 
5244
- class AITableCellAttachment extends CoverCellComponent {
5244
+ class AITableCellAttachment extends CoverCellBase {
5245
5245
  constructor() {
5246
5246
  super(...arguments);
5247
5247
  this.attachments = computed(() => {
@@ -5340,7 +5340,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
5340
5340
  }]
5341
5341
  }] });
5342
5342
 
5343
- class AITableCellRichText extends CoverCellComponent {
5343
+ class AITableCellRichText extends CoverCellBase {
5344
5344
  constructor() {
5345
5345
  super(...arguments);
5346
5346
  this.textConfig = computed(() => {
@@ -8315,14 +8315,488 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
8315
8315
  }]
8316
8316
  }] });
8317
8317
 
8318
- class AITableFillHandle {
8318
+ class AITableScrollableGroup {
8319
8319
  constructor() {
8320
8320
  this.config = input.required();
8321
- this.hasSelectedCells = computed(() => {
8322
- return this.config().aiTable.selection().selectedCells.size > 0;
8321
+ this.contentTemplate = input.required();
8322
+ this.parentContainer = input();
8323
+ this.scrollPosition = output();
8324
+ this.displayScrollbarTime = signal(null);
8325
+ this.hiddenScrollbar = signal(true);
8326
+ this.isHoverScrollbar = signal(false);
8327
+ // 滚动位置信号
8328
+ this.scrollX = signal(0);
8329
+ this.scrollY = signal(0);
8330
+ // 滚动条拖拽状态
8331
+ this.isDraggingVertical = signal(false);
8332
+ this.isDraggingHorizontal = signal(false);
8333
+ // 容器配置
8334
+ this.containerConfig = computed(() => {
8335
+ const { x = 0, y = 0, width, height } = this.config();
8336
+ return {
8337
+ x,
8338
+ y,
8339
+ width,
8340
+ height,
8341
+ fill: Colors.black,
8342
+ listening: true,
8343
+ clipX: 0,
8344
+ clipY: 0,
8345
+ clipWidth: width,
8346
+ clipHeight: height,
8347
+ name: 'scrollable-group'
8348
+ };
8323
8349
  });
8324
- this.readonly = computed(() => {
8325
- return this.config().readonly;
8350
+ this.bgConfig = computed(() => {
8351
+ const { x = 0, y = 0, width, height } = this.config();
8352
+ return {
8353
+ x: 0,
8354
+ y: 0,
8355
+ width,
8356
+ height,
8357
+ listening: true
8358
+ };
8359
+ });
8360
+ // 内容区域配置
8361
+ this.contentConfig = computed(() => {
8362
+ if (this.config().contentNotScrollbar) {
8363
+ return {
8364
+ offsetX: 0,
8365
+ offsetY: 0
8366
+ };
8367
+ }
8368
+ return {
8369
+ offsetX: this.scrollX(),
8370
+ offsetY: this.scrollY()
8371
+ };
8372
+ });
8373
+ // 是否显示竖向滚动条
8374
+ this.showVerticalScrollbar = computed(() => {
8375
+ const { height, contentHeight, verticalScrollbar } = this.config();
8376
+ return verticalScrollbar && contentHeight > height;
8377
+ });
8378
+ // 是否显示横向滚动条
8379
+ this.showHorizontalScrollbar = computed(() => {
8380
+ const { width, contentWidth, horizontalScrollbar } = this.config();
8381
+ return horizontalScrollbar && contentWidth > width;
8382
+ });
8383
+ // 竖向滚动条配置
8384
+ this.verticalScrollbarConfig = computed(() => {
8385
+ const { width, scrollbarSize = 12 } = this.config();
8386
+ return {
8387
+ x: width - scrollbarSize,
8388
+ y: 0,
8389
+ width: scrollbarSize,
8390
+ height: this.verticalScrollbarHeight()
8391
+ };
8392
+ });
8393
+ // 横向滚动条配置
8394
+ this.horizontalScrollbarConfig = computed(() => {
8395
+ const { height, scrollbarSize = 12 } = this.config();
8396
+ return {
8397
+ x: 0,
8398
+ y: height - scrollbarSize,
8399
+ width: this.horizontalScrollbarHeight(),
8400
+ height: scrollbarSize
8401
+ };
8402
+ });
8403
+ // 竖向滚动条轨道配置
8404
+ this.verticalTrackConfig = computed(() => {
8405
+ const { scrollbarSize = 12, scrollbarTrackColor, height } = this.config();
8406
+ return {
8407
+ x: 0,
8408
+ y: 0,
8409
+ width: scrollbarSize,
8410
+ height: height,
8411
+ fill: scrollbarTrackColor,
8412
+ cornerRadius: 2
8413
+ };
8414
+ });
8415
+ // 横向滚动条轨道配置
8416
+ this.horizontalTrackConfig = computed(() => {
8417
+ const { scrollbarSize = 12, scrollbarTrackColor } = this.config();
8418
+ return {
8419
+ x: 0,
8420
+ y: 0,
8421
+ width: this.horizontalScrollbarHeight(),
8422
+ height: scrollbarSize,
8423
+ fill: scrollbarTrackColor,
8424
+ cornerRadius: 2
8425
+ };
8426
+ });
8427
+ this.verticalThumbMinY = computed(() => {
8428
+ const getAbsolutePositionY = this.verticalTrack.getNode().getAbsolutePosition().y;
8429
+ return getAbsolutePositionY;
8430
+ });
8431
+ // 垂直滚动条滑块的最大Y坐标
8432
+ this.verticalThumbMaxY = computed(() => {
8433
+ const { height, contentHeight } = this.config();
8434
+ const getAbsolutePositionY = this.verticalTrack.getNode().getAbsolutePosition().y;
8435
+ return getAbsolutePositionY + height - this.verticalThumbHeight();
8436
+ });
8437
+ // 横向滚动条滑块的最小X坐标
8438
+ this.horizontalThumbMinX = computed(() => {
8439
+ const getAbsolutePositionX = this.horizontalTrack.getNode().getAbsolutePosition().x;
8440
+ return getAbsolutePositionX;
8441
+ });
8442
+ // 横向滚动条滑块的最大X坐标
8443
+ this.horizontalThumbMaxX = computed(() => {
8444
+ const { width } = this.config();
8445
+ const getAbsolutePositionX = this.horizontalTrack.getNode().getAbsolutePosition().x;
8446
+ return getAbsolutePositionX + width - this.horizontalThumbWidth();
8447
+ });
8448
+ // 竖向滚动条滑块高度
8449
+ this.verticalThumbHeight = computed(() => {
8450
+ const { height, contentHeight } = this.config();
8451
+ const thumbHeight = Math.max(20, (height / contentHeight) * this.verticalScrollbarHeight());
8452
+ return thumbHeight;
8453
+ });
8454
+ // 横向滚动条滑块宽度
8455
+ this.horizontalThumbWidth = computed(() => {
8456
+ const { width, contentWidth } = this.config();
8457
+ const thumbWidth = Math.max(20, (width / contentWidth) * this.horizontalScrollbarHeight());
8458
+ return thumbWidth;
8459
+ });
8460
+ // 竖向滚动条滑块配置
8461
+ this.verticalConfig = computed(() => {
8462
+ if (this.isDraggingVertical()) {
8463
+ return null;
8464
+ }
8465
+ const { scrollbarSize = 12, scrollbarColor = '#c0c0c0' } = this.config();
8466
+ const { height, contentHeight } = this.config();
8467
+ const thumbHeight = this.verticalThumbHeight();
8468
+ const thumbY = (this.scrollY() / (contentHeight - height)) * (this.verticalScrollbarHeight() - thumbHeight);
8469
+ return {
8470
+ x: 1,
8471
+ y: thumbY,
8472
+ width: scrollbarSize - 2,
8473
+ height: thumbHeight,
8474
+ fill: scrollbarColor,
8475
+ cornerRadius: 6,
8476
+ draggable: true,
8477
+ dragBoundFunc: (pos) => {
8478
+ this.isDraggingVertical.set(true);
8479
+ this.displayScrollbarTime.set(new Date());
8480
+ // 限定垂直滚动条的拖拽范围,并更新newScrollY
8481
+ const maxThumbY = this.verticalThumbMaxY();
8482
+ const minThumbY = this.verticalThumbMinY();
8483
+ const newThumbY = Math.max(Math.min(pos.y, maxThumbY), minThumbY);
8484
+ const deltaY = newThumbY - this.verticalTrack.getNode().getAbsolutePosition().y;
8485
+ const newScrollY = (deltaY / (this.verticalScrollbarHeight() - this.verticalThumbHeight())) * (contentHeight - height);
8486
+ this.scrollY.set(newScrollY);
8487
+ const x = this.verticalTrack.getNode().getAbsolutePosition().x + 1;
8488
+ setTimeout(() => {
8489
+ this.isDraggingVertical.set(false);
8490
+ }, 100);
8491
+ return {
8492
+ x: x,
8493
+ y: newThumbY
8494
+ };
8495
+ }
8496
+ };
8497
+ });
8498
+ // 横向滚动条滑块配置
8499
+ this.horizontalThumbConfig = computed(() => {
8500
+ if (this.isDraggingHorizontal()) {
8501
+ return null;
8502
+ }
8503
+ const { scrollbarSize = 12, scrollbarColor = '#c0c0c0' } = this.config();
8504
+ const { width, contentWidth } = this.config();
8505
+ const thumbWidth = this.horizontalThumbWidth();
8506
+ const thumbX = (this.scrollX() / (contentWidth - width)) * (this.horizontalScrollbarHeight() - thumbWidth);
8507
+ return {
8508
+ x: thumbX,
8509
+ y: 1,
8510
+ width: thumbWidth,
8511
+ height: scrollbarSize - 2,
8512
+ fill: scrollbarColor,
8513
+ cornerRadius: 6,
8514
+ draggable: true,
8515
+ dragBoundFunc: (pos) => {
8516
+ this.isDraggingHorizontal.set(true);
8517
+ this.displayScrollbarTime.set(new Date());
8518
+ // 限定横向滚动条的拖拽范围,并更新scrollX
8519
+ const maxThumbX = this.horizontalThumbMaxX();
8520
+ const minThumbX = this.horizontalThumbMinX();
8521
+ const newThumbX = Math.max(Math.min(pos.x, maxThumbX), minThumbX);
8522
+ const deltaX = newThumbX - this.horizontalTrack.getNode().getAbsolutePosition().x;
8523
+ const newScrollX = (deltaX / (this.horizontalScrollbarHeight() - this.horizontalThumbWidth())) * (contentWidth - width);
8524
+ this.scrollX.set(newScrollX);
8525
+ const y = this.horizontalTrack.getNode().getAbsolutePosition().y + 1;
8526
+ setTimeout(() => {
8527
+ this.isDraggingHorizontal.set(false);
8528
+ }, 100);
8529
+ return {
8530
+ x: newThumbX,
8531
+ y: y
8532
+ };
8533
+ }
8534
+ };
8535
+ });
8536
+ // 横向滚动条滑块配置
8537
+ this.verticalScrollbarHeight = computed(() => {
8538
+ const { height } = this.config();
8539
+ return height;
8540
+ });
8541
+ // 获取横向滚动条宽度
8542
+ this.horizontalScrollbarHeight = computed(() => {
8543
+ const { width } = this.config();
8544
+ return width;
8545
+ });
8546
+ // 滚动条延迟隐藏
8547
+ effect(() => {
8548
+ const displayScrollbarTime = this.displayScrollbarTime();
8549
+ if (displayScrollbarTime) {
8550
+ this.hiddenScrollbar.set(false);
8551
+ clearTimeout(this.hiddenScrollbarTimer);
8552
+ this.hiddenScrollbarTimer = setTimeout(() => {
8553
+ this.hiddenScrollbar.set(true);
8554
+ }, 1000);
8555
+ }
8556
+ });
8557
+ effect(() => {
8558
+ const scrollX = this.scrollX();
8559
+ const scrollY = this.scrollY();
8560
+ this.scrollPosition.emit({ scrollX, scrollY });
8561
+ });
8562
+ }
8563
+ ngAfterViewInit() {
8564
+ this.contentTemplate().getNode().moveTo(this.contentGroup.getNode());
8565
+ if (this.parentContainer() && this.rootGroup) {
8566
+ this.rootGroup.getNode().moveTo(this.parentContainer().getNode());
8567
+ }
8568
+ }
8569
+ stopBubble(e) {
8570
+ e.event.cancelBubble = true;
8571
+ }
8572
+ verticalScrollbarClick(e) {
8573
+ e.event.cancelBubble = true;
8574
+ const { contentHeight, height } = this.config();
8575
+ const y = e.event.evt.offsetY - this.verticalThumbHeight() / 2;
8576
+ const maxThumbY = this.verticalThumbMaxY();
8577
+ const minThumbY = this.verticalThumbMinY();
8578
+ const newThumbY = Math.max(Math.min(y, maxThumbY), minThumbY);
8579
+ const deltaY = newThumbY - this.verticalTrack.getNode().getAbsolutePosition().y;
8580
+ const newScrollY = (deltaY / (this.verticalScrollbarHeight() - this.verticalThumbHeight())) * (contentHeight - height);
8581
+ this.scrollY.set(newScrollY);
8582
+ }
8583
+ horizontalScrollbarClick(e) {
8584
+ e.event.cancelBubble = true;
8585
+ const { contentWidth, width } = this.config();
8586
+ const x = e.event.evt.offsetX - this.horizontalThumbWidth() / 2;
8587
+ const maxThumbX = this.horizontalThumbMaxX();
8588
+ const minThumbX = this.horizontalThumbMinX();
8589
+ const newThumbX = Math.max(Math.min(x, maxThumbX), minThumbX);
8590
+ const deltaX = newThumbX - this.horizontalTrack.getNode().getAbsolutePosition().x;
8591
+ const newScrollX = (deltaX / (this.horizontalScrollbarHeight() - this.horizontalThumbWidth())) * (contentWidth - width);
8592
+ this.scrollX.set(newScrollX);
8593
+ }
8594
+ setHoverScrollbarStatus(isHover) {
8595
+ this.isHoverScrollbar.set(isHover);
8596
+ this.displayScrollbarTime.set(new Date());
8597
+ }
8598
+ stageWheel(e) {
8599
+ if (!this.showVerticalScrollbar() && !this.showHorizontalScrollbar()) {
8600
+ return;
8601
+ }
8602
+ this.displayScrollbarTime.set(new Date());
8603
+ e.event.cancelBubble = true;
8604
+ this.scrollByDelta({ deltaX: e.event.evt.deltaX, deltaY: e.event.evt.deltaY });
8605
+ }
8606
+ scrollByDelta(delta) {
8607
+ const { deltaX = 0, deltaY = 0 } = delta;
8608
+ const { contentWidth, contentHeight, width, height, horizontalScrollbar, verticalScrollbar } = this.config();
8609
+ if (horizontalScrollbar && deltaX > 0 && contentWidth - width > this.scrollX()) {
8610
+ const newScrollX = Math.min(this.scrollX() + deltaX, contentWidth - width);
8611
+ if (newScrollX !== this.scrollX()) {
8612
+ this.scrollX.set(newScrollX);
8613
+ }
8614
+ }
8615
+ if (horizontalScrollbar && deltaX < 0 && this.scrollX() > 0) {
8616
+ const newScrollX = Math.max(0, this.scrollX() + deltaX);
8617
+ if (newScrollX !== this.scrollX()) {
8618
+ this.scrollX.set(newScrollX);
8619
+ }
8620
+ }
8621
+ if (verticalScrollbar && deltaY > 0 && contentHeight - height > this.scrollY()) {
8622
+ const newScrollY = Math.min(this.scrollY() + deltaY, contentHeight - height);
8623
+ if (newScrollY !== this.scrollY()) {
8624
+ this.scrollY.set(newScrollY);
8625
+ }
8626
+ }
8627
+ if (verticalScrollbar && deltaY < 0 && this.scrollY() > 0) {
8628
+ const newScrollY = Math.max(0, this.scrollY() + deltaY);
8629
+ if (newScrollY !== this.scrollY()) {
8630
+ this.scrollY.set(newScrollY);
8631
+ }
8632
+ }
8633
+ }
8634
+ // 滚动到指定位置
8635
+ scrollTo(x, y) {
8636
+ const { width, height, contentWidth, contentHeight } = this.config();
8637
+ this.scrollX.set(Math.max(0, Math.min(contentWidth - width, x)));
8638
+ this.scrollY.set(Math.max(0, Math.min(contentHeight - height, y)));
8639
+ }
8640
+ // 滚动到顶部
8641
+ scrollToTop() {
8642
+ this.scrollY.set(0);
8643
+ }
8644
+ // 滚动到底部
8645
+ scrollToBottom() {
8646
+ const { height, contentHeight } = this.config();
8647
+ this.scrollY.set(Math.max(0, contentHeight - height));
8648
+ }
8649
+ // 滚动到左侧
8650
+ scrollToLeft() {
8651
+ this.scrollX.set(0);
8652
+ }
8653
+ // 滚动到右侧
8654
+ scrollToRight() {
8655
+ const { width, contentWidth } = this.config();
8656
+ this.scrollX.set(Math.max(0, contentWidth - width));
8657
+ }
8658
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableScrollableGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8659
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableScrollableGroup, isStandalone: true, selector: "ai-table-scrollable-group", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, contentTemplate: { classPropertyName: "contentTemplate", publicName: "contentTemplate", isSignal: true, isRequired: true, transformFunction: null }, parentContainer: { classPropertyName: "parentContainer", publicName: "parentContainer", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrollPosition: "scrollPosition" }, viewQueries: [{ propertyName: "verticalTrack", first: true, predicate: ["verticalTrack"], descendants: true }, { propertyName: "verticalThumb", first: true, predicate: ["verticalThumb"], descendants: true }, { propertyName: "horizontalTrack", first: true, predicate: ["horizontalTrack"], descendants: true }, { propertyName: "contentGroup", first: true, predicate: ["contentGroup"], descendants: true }, { propertyName: "rootGroup", first: true, predicate: ["rootGroup"], descendants: true }], ngImport: i0, template: `
8660
+ <ko-group
8661
+ #rootGroup
8662
+ [config]="containerConfig()"
8663
+ (koWheel)="stageWheel($event)"
8664
+ (koMousedown)="stopBubble($event)"
8665
+ (koMouseup)="stopBubble($event)"
8666
+ >
8667
+ <ko-group>
8668
+ <ko-rect [config]="bgConfig()"></ko-rect>
8669
+ </ko-group>
8670
+
8671
+ <!-- 内容区域 -->
8672
+ <ko-group #contentGroup [config]="contentConfig()">
8673
+ <ng-content></ng-content>
8674
+ </ko-group>
8675
+
8676
+ <ko-group>
8677
+ @if (showVerticalScrollbar()) {
8678
+ <ko-group
8679
+ [config]="verticalScrollbarConfig()"
8680
+ (koMouseenter)="setHoverScrollbarStatus(true)"
8681
+ (koMouseleave)="setHoverScrollbarStatus(false)"
8682
+ (koClick)="verticalScrollbarClick($event)"
8683
+ >
8684
+ <!-- 滚动条轨道 -->
8685
+ <ko-rect #verticalTrack [config]="verticalTrackConfig()"></ko-rect>
8686
+ <!-- 滚动条滑块 -->
8687
+ @if (!hiddenScrollbar() || isHoverScrollbar()) {
8688
+ <ko-rect #verticalThumb [config]="verticalConfig()"></ko-rect>
8689
+ }
8690
+ </ko-group>
8691
+ }
8692
+
8693
+ <!-- 横向滚动条 -->
8694
+ @if (showHorizontalScrollbar()) {
8695
+ <ko-group
8696
+ [config]="horizontalScrollbarConfig()"
8697
+ (koMouseenter)="setHoverScrollbarStatus(true)"
8698
+ (koMouseleave)="setHoverScrollbarStatus(false)"
8699
+ (koClick)="horizontalScrollbarClick($event)"
8700
+ >
8701
+ <!-- 滚动条轨道 -->
8702
+ <ko-rect #horizontalTrack [config]="horizontalTrackConfig()"></ko-rect>
8703
+ <!-- 滚动条滑块 -->
8704
+ @if (!hiddenScrollbar() || isHoverScrollbar()) {
8705
+ <ko-rect [config]="horizontalThumbConfig()"></ko-rect>
8706
+ }
8707
+ </ko-group>
8708
+ }
8709
+ </ko-group>
8710
+ </ko-group>
8711
+ `, isInline: true, dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8712
+ }
8713
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableScrollableGroup, decorators: [{
8714
+ type: Component,
8715
+ args: [{
8716
+ selector: 'ai-table-scrollable-group',
8717
+ template: `
8718
+ <ko-group
8719
+ #rootGroup
8720
+ [config]="containerConfig()"
8721
+ (koWheel)="stageWheel($event)"
8722
+ (koMousedown)="stopBubble($event)"
8723
+ (koMouseup)="stopBubble($event)"
8724
+ >
8725
+ <ko-group>
8726
+ <ko-rect [config]="bgConfig()"></ko-rect>
8727
+ </ko-group>
8728
+
8729
+ <!-- 内容区域 -->
8730
+ <ko-group #contentGroup [config]="contentConfig()">
8731
+ <ng-content></ng-content>
8732
+ </ko-group>
8733
+
8734
+ <ko-group>
8735
+ @if (showVerticalScrollbar()) {
8736
+ <ko-group
8737
+ [config]="verticalScrollbarConfig()"
8738
+ (koMouseenter)="setHoverScrollbarStatus(true)"
8739
+ (koMouseleave)="setHoverScrollbarStatus(false)"
8740
+ (koClick)="verticalScrollbarClick($event)"
8741
+ >
8742
+ <!-- 滚动条轨道 -->
8743
+ <ko-rect #verticalTrack [config]="verticalTrackConfig()"></ko-rect>
8744
+ <!-- 滚动条滑块 -->
8745
+ @if (!hiddenScrollbar() || isHoverScrollbar()) {
8746
+ <ko-rect #verticalThumb [config]="verticalConfig()"></ko-rect>
8747
+ }
8748
+ </ko-group>
8749
+ }
8750
+
8751
+ <!-- 横向滚动条 -->
8752
+ @if (showHorizontalScrollbar()) {
8753
+ <ko-group
8754
+ [config]="horizontalScrollbarConfig()"
8755
+ (koMouseenter)="setHoverScrollbarStatus(true)"
8756
+ (koMouseleave)="setHoverScrollbarStatus(false)"
8757
+ (koClick)="horizontalScrollbarClick($event)"
8758
+ >
8759
+ <!-- 滚动条轨道 -->
8760
+ <ko-rect #horizontalTrack [config]="horizontalTrackConfig()"></ko-rect>
8761
+ <!-- 滚动条滑块 -->
8762
+ @if (!hiddenScrollbar() || isHoverScrollbar()) {
8763
+ <ko-rect [config]="horizontalThumbConfig()"></ko-rect>
8764
+ }
8765
+ </ko-group>
8766
+ }
8767
+ </ko-group>
8768
+ </ko-group>
8769
+ `,
8770
+ imports: [KoContainer, KoShape],
8771
+ changeDetection: ChangeDetectionStrategy.OnPush
8772
+ }]
8773
+ }], ctorParameters: () => [], propDecorators: { verticalTrack: [{
8774
+ type: ViewChild,
8775
+ args: ['verticalTrack']
8776
+ }], verticalThumb: [{
8777
+ type: ViewChild,
8778
+ args: ['verticalThumb']
8779
+ }], horizontalTrack: [{
8780
+ type: ViewChild,
8781
+ args: ['horizontalTrack']
8782
+ }], contentGroup: [{
8783
+ type: ViewChild,
8784
+ args: ['contentGroup']
8785
+ }], rootGroup: [{
8786
+ type: ViewChild,
8787
+ args: ['rootGroup']
8788
+ }] } });
8789
+
8790
+ class AITableFillHandle {
8791
+ constructor() {
8792
+ this.config = input.required();
8793
+ this.showFillHandle = computed(() => {
8794
+ const { aiTable, readonly } = this.config();
8795
+ const selection = aiTable.selection();
8796
+ const hasSelectedCells = selection.selectedCells.size > 0;
8797
+ const isExpandCell = selection.expandCell;
8798
+ const isEditingCell = selection.editingCell;
8799
+ return hasSelectedCells && !readonly && !isEditingCell && !isExpandCell;
8326
8800
  });
8327
8801
  this.handleConfig = computed(() => {
8328
8802
  const { aiTable, coordinate } = this.config();
@@ -8355,7 +8829,7 @@ class AITableFillHandle {
8355
8829
  }
8356
8830
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFillHandle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8357
8831
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableFillHandle, isStandalone: true, selector: "ai-table-fill-handle", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
8358
- @if (hasSelectedCells() && !readonly()) {
8832
+ @if (showFillHandle()) {
8359
8833
  <ko-rect [config]="handleConfig()"></ko-rect>
8360
8834
  }
8361
8835
  `, isInline: true, dependencies: [{ 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"] }] }); }
@@ -8365,7 +8839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
8365
8839
  args: [{
8366
8840
  selector: 'ai-table-fill-handle',
8367
8841
  template: `
8368
- @if (hasSelectedCells() && !readonly()) {
8842
+ @if (showFillHandle()) {
8369
8843
  <ko-rect [config]="handleConfig()"></ko-rect>
8370
8844
  }
8371
8845
  `,
@@ -8373,7 +8847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
8373
8847
  }]
8374
8848
  }] });
8375
8849
 
8376
- class AITableCoverCells {
8850
+ class AITableCoverCellEntry {
8377
8851
  constructor() {
8378
8852
  this.config = input.required();
8379
8853
  this.onlyDisplayBorder = input(false);
@@ -8443,10 +8917,10 @@ class AITableCoverCells {
8443
8917
  });
8444
8918
  this.coverCell = computed(() => getCoverCell(this.config().aiTable));
8445
8919
  }
8446
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableCoverCells, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8447
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableCoverCells, isStandalone: true, selector: "ai-table-cover-cell", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, onlyDisplayBorder: { classPropertyName: "onlyDisplayBorder", publicName: "onlyDisplayBorder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
8920
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableCoverCellEntry, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8921
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableCoverCellEntry, isStandalone: true, selector: "ai-table-cover-cell-entry", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, onlyDisplayBorder: { classPropertyName: "onlyDisplayBorder", publicName: "onlyDisplayBorder", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
8448
8922
  @if (coverCell()) {
8449
- <ko-group [config]="groupConfig()">
8923
+ <ko-group #rootGroup [config]="groupConfig()">
8450
8924
  <ng-container
8451
8925
  *ngComponentOutlet="
8452
8926
  coverCell()!.renderComponentDefinition;
@@ -8458,13 +8932,13 @@ class AITableCoverCells {
8458
8932
  }
8459
8933
  `, isInline: true, dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8460
8934
  }
8461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableCoverCells, decorators: [{
8935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableCoverCellEntry, decorators: [{
8462
8936
  type: Component,
8463
8937
  args: [{
8464
- selector: 'ai-table-cover-cell',
8938
+ selector: 'ai-table-cover-cell-entry',
8465
8939
  template: `
8466
8940
  @if (coverCell()) {
8467
- <ko-group [config]="groupConfig()">
8941
+ <ko-group #rootGroup [config]="groupConfig()">
8468
8942
  <ng-container
8469
8943
  *ngComponentOutlet="
8470
8944
  coverCell()!.renderComponentDefinition;
@@ -8551,20 +9025,6 @@ class AITableFieldStat {
8551
9025
  const { width } = this.config();
8552
9026
  return width - AI_TABLE_ACTION_COMMON_SIZE - AI_TABLE_CELL_PADDING;
8553
9027
  });
8554
- this.textData = computed(() => {
8555
- const textString = this.renderText() || '';
8556
- const availableTextWidth = this.availableTextWidth();
8557
- const { text, textWidth } = drawer.textEllipsis({
8558
- text: textString,
8559
- maxWidth: availableTextWidth,
8560
- fontSize: DEFAULT_FONT_SIZE,
8561
- fontWeight: DEFAULT_FONT_WEIGHT
8562
- });
8563
- return {
8564
- width: textWidth,
8565
- text
8566
- };
8567
- });
8568
9028
  this.groupConfig = computed(() => {
8569
9029
  return {
8570
9030
  x: this.config().x,
@@ -8590,7 +9050,7 @@ class AITableFieldStat {
8590
9050
  opacity: 1,
8591
9051
  listening: !readonly
8592
9052
  };
8593
- if (this.renderText()) {
9053
+ if (this.renderTexts()) {
8594
9054
  config.borders = [false, true, false, true];
8595
9055
  config.stroke = Colors.gray200;
8596
9056
  config.strokeWidth = AI_TABLE_CELL_LINE_BORDER;
@@ -8627,53 +9087,119 @@ class AITableFieldStat {
8627
9087
  const aiTable = this.aiTable();
8628
9088
  return {
8629
9089
  field: this.field(),
8630
- aiTable
9090
+ aiTable,
9091
+ getFieldValue: (record, options) => {
9092
+ const { aiTable, field } = options;
9093
+ const cellValue = AITableQueries.getFieldValue(aiTable, [record._id, field._id]);
9094
+ return transformToCellText(cellValue, options);
9095
+ }
8631
9096
  };
8632
9097
  });
8633
9098
  this.isActiveOrHover = computed(() => {
8634
9099
  return this.isActive() || this.isHover();
8635
9100
  });
8636
- this.renderText = computed(() => {
9101
+ this.renderTexts = computed(() => {
9102
+ const { height, width } = this.containerBox();
8637
9103
  const field = this.field();
8638
9104
  const records = this.records();
8639
9105
  const fieldModel = FieldModelMap[field.type];
8640
9106
  const selectedInfo = this.selectedInfo();
9107
+ let resultString = null;
9108
+ let formatString = null;
9109
+ let statValue = '';
8641
9110
  if (this.isFirstColumn() && selectedInfo.isSelected) {
8642
9111
  if (selectedInfo.selectedType === 'records') {
8643
- const result = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.selectedRecordsCount);
8644
- return result.replace('{count}', selectedInfo.selectedCount.toString());
9112
+ formatString = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.selectedRecordsCount);
8645
9113
  }
8646
9114
  else {
8647
- const result = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.selectedCellsCount);
8648
- return result.replace('{count}', selectedInfo.selectedCount.toString());
9115
+ formatString = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.selectedCellsCount);
8649
9116
  }
9117
+ resultString = formatString.replace('{count}', `${selectedInfo.selectedCount.toString()}`);
9118
+ statValue = selectedInfo.selectedCount.toString();
8650
9119
  }
8651
9120
  else {
8652
- let result = fieldModel.getStatFormatValue(records, this.options());
8653
- if (!result && this.isActiveOrHover()) {
8654
- result = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.stat);
9121
+ statValue = fieldModel.stat(records, this.options());
9122
+ if (!isNil(statValue)) {
9123
+ formatString = fieldModel.getFormat(this.field(), this.aiTable());
9124
+ if (formatString) {
9125
+ resultString = formatString.replace('{{statValue}}', `${statValue.toString()}`);
9126
+ statValue = statValue.toString();
9127
+ }
8655
9128
  }
8656
- return result;
9129
+ else if (this.isActiveOrHover()) {
9130
+ formatString = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.stat);
9131
+ resultString = getI18nTextByKey(this.aiTable(), AITableGridI18nKey.stat);
9132
+ }
9133
+ }
9134
+ if (!resultString) {
9135
+ return null;
8657
9136
  }
9137
+ const { text, textWidth } = drawer.textEllipsis({
9138
+ text: resultString,
9139
+ maxWidth: width - AI_TABLE_ACTION_COMMON_SIZE - AI_TABLE_CELL_PADDING,
9140
+ fontSize: DEFAULT_FONT_SIZE,
9141
+ fontWeight: DEFAULT_FONT_WEIGHT
9142
+ });
9143
+ return {
9144
+ texts: text.split(' '),
9145
+ totalWidth: textWidth,
9146
+ statValue: statValue || ''
9147
+ };
8658
9148
  });
8659
9149
  this.containerBox = computed(() => {
8660
9150
  const { height, width } = this.config();
8661
9151
  return { height, width };
8662
9152
  });
8663
- this.textConfig = computed(() => {
9153
+ this.textsConfig = computed(() => {
8664
9154
  const { height, width } = this.containerBox();
8665
- const text = this.renderText();
8666
- if (text) {
8667
- const renderWidth = this.textData().width;
8668
- return {
8669
- x: width - AI_TABLE_ACTION_COMMON_SIZE - renderWidth,
8670
- y: 0,
8671
- width: renderWidth,
8672
- height: height,
8673
- text: this.textData().text,
8674
- lineHeight: AI_TABLE_TEXT_LINE_HEIGHT,
8675
- listening: false
8676
- };
9155
+ const renderTexts = this.renderTexts();
9156
+ const result = [];
9157
+ let previousColor = Colors.gray700;
9158
+ if (renderTexts) {
9159
+ const { texts, totalWidth, statValue } = renderTexts;
9160
+ let remainingWidth = width - AI_TABLE_ACTION_COMMON_SIZE;
9161
+ for (const [index, text] of texts.entries()) {
9162
+ if (remainingWidth <= 0) {
9163
+ break;
9164
+ }
9165
+ let isLast = index === texts.length - 1;
9166
+ let isStatValue = statValue.includes(text.replace('%', '').replace('…', ''));
9167
+ let isEllipsis = text === '…';
9168
+ const { text: renderText, textWidth } = drawer.textEllipsis({
9169
+ text: isLast ? text : `${text} `,
9170
+ maxWidth: remainingWidth,
9171
+ fontSize: DEFAULT_FONT_SIZE,
9172
+ fontWeight: DEFAULT_FONT_WEIGHT
9173
+ });
9174
+ remainingWidth -= textWidth;
9175
+ let fill;
9176
+ if (isStatValue) {
9177
+ fill = Colors.gray700;
9178
+ }
9179
+ else if (isEllipsis) {
9180
+ fill = previousColor;
9181
+ }
9182
+ else {
9183
+ fill = Colors.gray600;
9184
+ }
9185
+ result.push({
9186
+ x: 0,
9187
+ y: 0,
9188
+ width: textWidth,
9189
+ height: height,
9190
+ fill,
9191
+ text: renderText,
9192
+ lineHeight: AI_TABLE_TEXT_LINE_HEIGHT,
9193
+ listening: false
9194
+ });
9195
+ previousColor = fill;
9196
+ }
9197
+ let startX = width - AI_TABLE_ACTION_COMMON_SIZE - totalWidth;
9198
+ result.forEach((item) => {
9199
+ item.x = startX;
9200
+ startX += item.width;
9201
+ });
9202
+ return result;
8677
9203
  }
8678
9204
  return null;
8679
9205
  });
@@ -8778,8 +9304,10 @@ class AITableFieldStat {
8778
9304
  ></ai-table-background>
8779
9305
 
8780
9306
  <ko-group>
8781
- @if (textConfig()) {
8782
- <ai-table-text [config]="textConfig()!"></ai-table-text>
9307
+ @if (textsConfig()) {
9308
+ @for (textConfig of textsConfig(); track $index) {
9309
+ <ai-table-text [config]="textConfig"></ai-table-text>
9310
+ }
8783
9311
  <ai-table-icon [config]="iconConfig()"></ai-table-icon>
8784
9312
  }
8785
9313
  </ko-group>
@@ -8800,8 +9328,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
8800
9328
  ></ai-table-background>
8801
9329
 
8802
9330
  <ko-group>
8803
- @if (textConfig()) {
8804
- <ai-table-text [config]="textConfig()!"></ai-table-text>
9331
+ @if (textsConfig()) {
9332
+ @for (textConfig of textsConfig(); track $index) {
9333
+ <ai-table-text [config]="textConfig"></ai-table-text>
9334
+ }
8805
9335
  <ai-table-icon [config]="iconConfig()"></ai-table-icon>
8806
9336
  }
8807
9337
  </ko-group>
@@ -8862,6 +9392,7 @@ class AITableRenderer {
8862
9392
  this.koClick = output();
8863
9393
  this.koDblclick = output();
8864
9394
  this.koMouseleave = output();
9395
+ this.onScrollPosition = output();
8865
9396
  this.isHoverStatContainer = signal(false);
8866
9397
  this.fields = computed(() => {
8867
9398
  return AITable.getVisibleFields(this.config().aiTable);
@@ -8926,6 +9457,12 @@ class AITableRenderer {
8926
9457
  height: AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT
8927
9458
  };
8928
9459
  });
9460
+ this.scrollTotalHeight = computed(() => {
9461
+ return Math.max(this.coordinate().totalHeight, this.containerHeight() - AI_TABLE_FIELD_HEAD_HEIGHT);
9462
+ });
9463
+ this.scrollTotalWidth = computed(() => {
9464
+ return this.coordinate().totalWidth + AI_TABLE_FIELD_ADD_BUTTON_WIDTH;
9465
+ });
8929
9466
  this.commonGroupConfig = computed(() => {
8930
9467
  return {
8931
9468
  clipX: this.frozenAreaWidth() + 1,
@@ -9135,11 +9672,14 @@ class AITableRenderer {
9135
9672
  stageMouseleave(e) {
9136
9673
  this.koMouseleave.emit(e);
9137
9674
  }
9675
+ stageWheel(e) {
9676
+ this.koWheel.emit(e);
9677
+ }
9138
9678
  onStatContainerHover(isHover) {
9139
9679
  this.isHoverStatContainer.set(isHover);
9140
9680
  }
9141
9681
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9142
- 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" }, 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>\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 [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 [config]=\"cellsConfig()\"></ai-table-cover-cell>\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 [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell>\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 [config]=\"offsetYConfig()\">\n <ai-table-cover-cell [config]=\"cellsConfig()\"></ai-table-cover-cell>\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 [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell>\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: AITableCoverCells, selector: "ai-table-cover-cell", 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 }); }
9682
+ 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 }); }
9143
9683
  }
9144
9684
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, decorators: [{
9145
9685
  type: Component,
@@ -9152,7 +9692,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
9152
9692
  AITableCells,
9153
9693
  AITableFrozenCells,
9154
9694
  AITableFrozenPlaceholderCells,
9155
- AITableCoverCells,
9695
+ AITableCoverCellEntry,
9156
9696
  AITablePlaceholderCells,
9157
9697
  AITableAddField,
9158
9698
  AITableHoverRowHeads,
@@ -9161,10 +9701,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
9161
9701
  AITableFieldStats,
9162
9702
  AITableBackground,
9163
9703
  AITableFrozenFieldShadow
9164
- ], 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>\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 [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 [config]=\"cellsConfig()\"></ai-table-cover-cell>\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 [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell>\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 [config]=\"offsetYConfig()\">\n <ai-table-cover-cell [config]=\"cellsConfig()\"></ai-table-cover-cell>\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 [config]=\"cellsConfig()\" [onlyDisplayBorder]=\"true\"></ai-table-cover-cell>\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" }]
9704
+ ], 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" }]
9165
9705
  }] });
9166
9706
 
9167
- class AITableCellRate extends CoverCellComponent {
9707
+ class AITableCellRate extends CoverCellBase {
9168
9708
  constructor() {
9169
9709
  super(...arguments);
9170
9710
  this.pointerX = signal(0);
@@ -9313,7 +9853,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
9313
9853
  }]
9314
9854
  }] });
9315
9855
 
9316
- class AITableCellProgress extends CoverCellComponent {
9856
+ class AITableCellProgress extends CoverCellBase {
9317
9857
  constructor() {
9318
9858
  super(...arguments);
9319
9859
  this.readonly = computed(() => {
@@ -9823,7 +10363,11 @@ function performFill(aiTable, sourceCells, mouseUpRecordId, actions) {
9823
10363
  const startFieldIndex = visibleColumnsIndexMap.get(sourceStartCell[1]);
9824
10364
  const endFieldIndex = visibleColumnsIndexMap.get(sourceEndCell[1]);
9825
10365
  for (let index = startFieldIndex; index <= endFieldIndex; index++) {
9826
- const fieldId = fields[index]._id;
10366
+ const field = fields[index];
10367
+ const fieldId = field._id;
10368
+ if (isSystemField(field)) {
10369
+ continue;
10370
+ }
9827
10371
  for (let rowIndex = targetStartRowIndex; rowIndex <= targetEndRowIndex; rowIndex++) {
9828
10372
  const targetRecordId = linearRows[rowIndex]._id;
9829
10373
  const relativeRowIndex = direction === 'downward' ? rowIndex - targetStartRowIndex : targetEndRowIndex - rowIndex;
@@ -10017,6 +10561,7 @@ class AITableGridSelectionService {
10017
10561
  selectedCells: new Set(),
10018
10562
  activeCell: null,
10019
10563
  expandCell: null,
10564
+ editingCell: null,
10020
10565
  selectAllState: AITableSelectAllState.none
10021
10566
  });
10022
10567
  }
@@ -10029,6 +10574,12 @@ class AITableGridSelectionService {
10029
10574
  expandCell: expandCell
10030
10575
  });
10031
10576
  }
10577
+ setEditingCell(editingCell) {
10578
+ this.aiTable.selection.set({
10579
+ ...this.aiTable.selection(),
10580
+ editingCell: editingCell
10581
+ });
10582
+ }
10032
10583
  selectField(fieldId) {
10033
10584
  if (this.aiTable.selection().selectedFields.has(fieldId)) {
10034
10585
  return;
@@ -10056,6 +10607,7 @@ class AITableGridSelectionService {
10056
10607
  selectedCells: new Set(),
10057
10608
  activeCell: null,
10058
10609
  expandCell: null,
10610
+ editingCell: null,
10059
10611
  selectAllState: this.selectAllState()
10060
10612
  });
10061
10613
  }
@@ -10199,6 +10751,7 @@ class AITableGridEventService {
10199
10751
  this.globalMousedownEvent$ = new Subject();
10200
10752
  this.destroyRef = inject(DestroyRef);
10201
10753
  this.thyPopover = inject(ThyPopover);
10754
+ this.selectionService = inject(AITableGridSelectionService);
10202
10755
  }
10203
10756
  initialize(aiTable, aiFieldRenderers) {
10204
10757
  this.aiTable = aiTable;
@@ -10317,6 +10870,7 @@ class AITableGridEventService {
10317
10870
  const fieldType = this.aiTable.fieldsMap()[fieldId].type;
10318
10871
  const { component, isInternalComponent } = this.getEditorComponent(fieldType);
10319
10872
  const offsetOriginPosition = this.getOriginPosition(aiTable, options);
10873
+ this.selectionService.setEditingCell([recordId, fieldId]);
10320
10874
  this.cellEditorPopoverRef = this.thyPopover.open(component, {
10321
10875
  viewContainerRef: isInternalComponent ? undefined : options?.viewContainerRef,
10322
10876
  origin: container,
@@ -10364,6 +10918,7 @@ class AITableGridEventService {
10364
10918
  this.cellEditorPopoverRef.afterClosed().subscribe(() => {
10365
10919
  wheelEvent.unsubscribe();
10366
10920
  this.cellEditorPopoverRef = null;
10921
+ this.selectionService.setEditingCell(null);
10367
10922
  });
10368
10923
  this.cellEditorPopoverRef.componentInstance.updateFieldValues.subscribe((value) => {
10369
10924
  options.updateFieldValues(value);
@@ -10375,6 +10930,7 @@ class AITableGridEventService {
10375
10930
  if (this.cellEditorPopoverRef) {
10376
10931
  this.cellEditorPopoverRef.close();
10377
10932
  this.cellEditorPopoverRef = null;
10933
+ this.selectionService.setEditingCell(null);
10378
10934
  }
10379
10935
  }
10380
10936
  getCurrentEditCell() {
@@ -11473,7 +12029,6 @@ class AITableGrid extends AITableGridBase {
11473
12029
  this.setContainerRect();
11474
12030
  this.bindGlobalMousedown();
11475
12031
  this.containerResizeListener();
11476
- this.bindWheel();
11477
12032
  this.bindShortcuts();
11478
12033
  });
11479
12034
  effect(() => {
@@ -11731,6 +12286,11 @@ class AITableGrid extends AITableGridBase {
11731
12286
  this.setDefaultPointPosition();
11732
12287
  });
11733
12288
  }
12289
+ stageWheel(e) {
12290
+ e.event.evt.preventDefault();
12291
+ this.aiTableGridEventService.closeCellEditor();
12292
+ this.scrollAction({ deltaX: e.event.evt.deltaX, deltaY: e.event.evt.deltaY, shiftKey: e.event.evt.shiftKey });
12293
+ }
11734
12294
  stageContextmenu(e) {
11735
12295
  const mouseEvent = e.event.evt;
11736
12296
  mouseEvent.preventDefault();
@@ -11870,15 +12430,6 @@ class AITableGrid extends AITableGridBase {
11870
12430
  }, 0);
11871
12431
  }
11872
12432
  }
11873
- bindWheel() {
11874
- fromEvent(this.containerElement(), 'wheel', { passive: false })
11875
- .pipe(takeUntilDestroyed(this.destroyRef))
11876
- .subscribe((e) => {
11877
- e.preventDefault();
11878
- this.aiTableGridEventService.closeCellEditor();
11879
- this.scrollAction({ deltaX: e.deltaX, deltaY: e.deltaY, shiftKey: e.shiftKey });
11880
- });
11881
- }
11882
12433
  setDefaultPointPosition() {
11883
12434
  const { context } = this.aiTable;
11884
12435
  context.setPointPosition(DEFAULT_POINT_POSITION);
@@ -12155,18 +12706,18 @@ class AITableGrid extends AITableGridBase {
12155
12706
  });
12156
12707
  }
12157
12708
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableScrollControllerService], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "verticalBarRef", first: true, predicate: ["verticalBar"], descendants: true, isSignal: true }, { propertyName: "horizontalBarRef", first: true, predicate: ["horizontalBar"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\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 >\n @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n", dependencies: [{ kind: "component", type: AITableRenderer, selector: "ai-table-renderer", inputs: ["config"], outputs: ["koMousemove", "koMousedown", "koMouseup", "koContextmenu", "koWheel", "koClick", "koDblclick", "koMouseleave"] }, { kind: "component", type: AITableDragComponent, selector: "ai-table-drag", inputs: ["horizontalBar", "verticalBar"], outputs: ["dragEnd"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12709
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableScrollControllerService], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, isSignal: true }, { propertyName: "verticalBarRef", first: true, predicate: ["verticalBar"], descendants: true, isSignal: true }, { propertyName: "horizontalBarRef", first: true, predicate: ["horizontalBar"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\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 @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n", dependencies: [{ kind: "component", type: AITableRenderer, selector: "ai-table-renderer", inputs: ["config"], outputs: ["koMousemove", "koMousedown", "koMouseup", "koContextmenu", "koWheel", "koClick", "koDblclick", "koMouseleave", "onScrollPosition"] }, { kind: "component", type: AITableDragComponent, selector: "ai-table-drag", inputs: ["horizontalBar", "verticalBar"], outputs: ["dragEnd"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12159
12710
  }
12160
12711
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, decorators: [{
12161
12712
  type: Component,
12162
12713
  args: [{ selector: 'ai-table-grid', changeDetection: ChangeDetectionStrategy.OnPush, host: {
12163
12714
  class: 'ai-table-grid'
12164
- }, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableScrollControllerService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\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 >\n @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
12715
+ }, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableScrollControllerService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\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 @if (domToolTips().length > 0) {\n <div\n class=\"ai-table-left-background-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n @for (domToolTip of domToolTips(); track trackBy(idx, domToolTip); let idx = $index) {\n <div\n class=\"ai-table-left-background\"\n [thyTooltip]=\"i18nTexts().rowAddFilterTooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n >\n <thy-icon class=\"text-white\" thyIconName=\"filter-line\"></thy-icon>\n </div>\n }\n </div>\n }\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag [horizontalBar]=\"horizontalBarRef()\" [verticalBar]=\"verticalBarRef()\" (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
12165
12716
  }], ctorParameters: () => [] });
12166
12717
 
12167
12718
  /**
12168
12719
  * Generated bundle index. Do not edit.
12169
12720
  */
12170
12721
 
12171
- export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableGridSelectionService, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderer, AITableRowType, 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, Colors, ColumnCalendarFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellComponent, 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, 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, setMouseStyle, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
12722
+ export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenFieldShadow, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableGridSelectionService, 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, Colors, ColumnCalendarFilledPath, 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, 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, setMouseStyle, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
12172
12723
  //# sourceMappingURL=ai-table-grid.mjs.map