@ai-table/grid 0.0.17 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/constants/icon.d.ts +1 -1
  2. package/constants/icon.d.ts.map +1 -1
  3. package/core/types/core.d.ts +1 -0
  4. package/core/types/core.d.ts.map +1 -1
  5. package/core/utils/id-creator.d.ts +3 -0
  6. package/core/utils/id-creator.d.ts.map +1 -1
  7. package/core/utils/shoft-id.d.ts +28 -0
  8. package/core/utils/shoft-id.d.ts.map +1 -0
  9. package/esm2022/components/field-menu/field-menu.component.mjs +3 -3
  10. package/esm2022/constants/icon.mjs +2 -2
  11. package/esm2022/core/coordinate.mjs +2 -2
  12. package/esm2022/core/types/core.mjs +1 -1
  13. package/esm2022/core/utils/id-creator.mjs +17 -1
  14. package/esm2022/core/utils/shoft-id.mjs +53 -0
  15. package/esm2022/dom-grid.component.mjs +2 -2
  16. package/esm2022/grid-base.component.mjs +4 -5
  17. package/esm2022/grid.component.mjs +10 -6
  18. package/esm2022/renderer/components/add-field-column.component.mjs +14 -7
  19. package/esm2022/renderer/renderer.component.mjs +9 -5
  20. package/esm2022/services/field.service.mjs +2 -1
  21. package/esm2022/types/component-config.mjs +1 -1
  22. package/esm2022/types/grid.mjs +1 -1
  23. package/esm2022/utils/build.mjs +3 -3
  24. package/fesm2022/ai-table-grid.mjs +110 -29
  25. package/fesm2022/ai-table-grid.mjs.map +1 -1
  26. package/grid-base.component.d.ts +4 -5
  27. package/grid-base.component.d.ts.map +1 -1
  28. package/grid.component.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/renderer/components/add-field-column.component.d.ts.map +1 -1
  31. package/renderer/renderer.component.d.ts +2 -0
  32. package/renderer/renderer.component.d.ts.map +1 -1
  33. package/services/field.service.d.ts.map +1 -1
  34. package/types/component-config.d.ts +1 -0
  35. package/types/component-config.d.ts.map +1 -1
  36. package/types/grid.d.ts +1 -0
  37. package/types/grid.d.ts.map +1 -1
  38. package/utils/build.d.ts +1 -1
  39. package/utils/build.d.ts.map +1 -1
@@ -3,6 +3,9 @@ import { signal, computed, output, inject, ElementRef, Component, ChangeDetectio
3
3
  import * as i1$1 from 'ngx-tethys/popover';
4
4
  import { ThyPopoverRef, ThyPopover, ThyPopoverModule } from 'ngx-tethys/popover';
5
5
  import ObjectID from 'bson-objectid';
6
+ import { customAlphabet } from 'nanoid';
7
+ import * as _ from 'lodash';
8
+ import ___default, { isNumber, includes, values, isString, isNil } from 'lodash';
6
9
  import { isUndefinedOrNull } from 'ngx-tethys/util';
7
10
  import * as i1 from '@angular/forms';
8
11
  import { FormsModule } from '@angular/forms';
@@ -18,8 +21,6 @@ import { ThyFlexibleTextModule, ThyFlexibleText } from 'ngx-tethys/flexible-text
18
21
  import { ThyButton } from 'ngx-tethys/button';
19
22
  import * as i2 from 'ngx-tethys/form';
20
23
  import { ThyFormSubmitDirective, ThyFormModule, ThyUniqueCheckValidator, ThyConfirmValidatorDirective } from 'ngx-tethys/form';
21
- import * as _ from 'lodash';
22
- import ___default from 'lodash';
23
24
  import { ThyNotifyService } from 'ngx-tethys/notify';
24
25
  import { ThyInputNumber } from 'ngx-tethys/input-number';
25
26
  import { ThySlider } from 'ngx-tethys/slider';
@@ -406,7 +407,7 @@ class Coordinate {
406
407
  offset = itemMetadata.offset + itemMetadata.size;
407
408
  }
408
409
  for (let i = lastMeasuredIndex + 1; i <= index; i++) {
409
- const size = isColumnType ? this.columnIndicesMap[i] : this.rowIndicesMap[i] ?? this.rowHeight;
410
+ const size = isColumnType ? this.columnIndicesMap[i] : (this.rowIndicesMap[i] ?? this.rowHeight);
410
411
  cellMetadataMap[i] = {
411
412
  offset,
412
413
  size
@@ -546,9 +547,75 @@ class Coordinate {
546
547
  }
547
548
  }
548
549
 
550
+ var AlphabetType;
551
+ (function (AlphabetType) {
552
+ AlphabetType[AlphabetType["url"] = 1] = "url";
553
+ AlphabetType[AlphabetType["numbers"] = 2] = "numbers";
554
+ AlphabetType[AlphabetType["lowercase"] = 3] = "lowercase";
555
+ AlphabetType[AlphabetType["uppercase"] = 4] = "uppercase";
556
+ AlphabetType[AlphabetType["alphanumeric"] = 5] = "alphanumeric";
557
+ })(AlphabetType || (AlphabetType = {}));
558
+ var AlphabetDictionary;
559
+ (function (AlphabetDictionary) {
560
+ AlphabetDictionary["url"] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-";
561
+ AlphabetDictionary["numbers"] = "0123456789";
562
+ AlphabetDictionary["lowercase"] = "abcdefghijklmnopqrstuvwxyz";
563
+ AlphabetDictionary["uppercase"] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
564
+ AlphabetDictionary["alphanumeric"] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
565
+ })(AlphabetDictionary || (AlphabetDictionary = {}));
566
+ const buildInAlphabets = {
567
+ [AlphabetType.url]: customAlphabet(AlphabetDictionary.url),
568
+ [AlphabetType.numbers]: customAlphabet(AlphabetDictionary.numbers),
569
+ [AlphabetType.lowercase]: customAlphabet(AlphabetDictionary.lowercase),
570
+ [AlphabetType.uppercase]: customAlphabet(AlphabetDictionary.uppercase),
571
+ [AlphabetType.alphanumeric]: customAlphabet(AlphabetDictionary.alphanumeric)
572
+ };
573
+ function shortId(alphabet = AlphabetType.url, size = 6, quantity) {
574
+ if (size < 6 || size > 32) {
575
+ throw new Error(`Invalid size "${size}", size must in 6-32`);
576
+ }
577
+ let idGenerator;
578
+ if (isNumber(alphabet)) {
579
+ if (!includes(values(AlphabetType), alphabet)) {
580
+ throw new Error(`Invalid alphabet "${alphabet}", alphabet must one of ${Object.values(AlphabetType).join(' ')}`);
581
+ }
582
+ idGenerator = buildInAlphabets[alphabet];
583
+ }
584
+ else if (isString(alphabet)) {
585
+ idGenerator = customAlphabet(alphabet);
586
+ }
587
+ else {
588
+ throw new Error(`Invalid alphabet "${alphabet}", alphabet type must be AlphabetType or string`);
589
+ }
590
+ if (!isNil(quantity)) {
591
+ if (!isNumber(quantity)) {
592
+ throw new Error(`Invalid quantity "${quantity}", quantity type must be number`);
593
+ }
594
+ const idTasks = Array.from({ length: quantity }, () => idGenerator(size));
595
+ const ids = idTasks;
596
+ return ids;
597
+ }
598
+ return idGenerator(size);
599
+ }
600
+
549
601
  function idCreator() {
550
602
  return ObjectID().toHexString();
551
603
  }
604
+ function idsCreator(count) {
605
+ if (count <= 0)
606
+ return [];
607
+ const newIds = [];
608
+ for (let i = 0; i < count; i++) {
609
+ newIds.push(idCreator());
610
+ }
611
+ return newIds;
612
+ }
613
+ function shortIdCreator() {
614
+ return shortId(undefined, 8);
615
+ }
616
+ function shortIdsCreator(count) {
617
+ return shortId(undefined, 8, count);
618
+ }
552
619
 
553
620
  const isArrayField = (field) => {
554
621
  return ([AITableFieldType.member, AITableFieldType.createdBy, AITableFieldType.updatedBy].includes(field.type) ||
@@ -1563,7 +1630,7 @@ const ColumnRatingFilledPath = `M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zm0 1.2a6.8 6.8
1563
1630
  const ColumnMemberFilledPath = `M10.212 8.416A6.603 6.603 0 0 1 14.5 14.6a.6.6 0 0 1-1.2 0 5.4 5.4 0 0 0-10.8 0 .6.6 0 0 1-1.2 0 6.602 6.602 0 0 1 4.159-6.134 4.1 4.1 0 1 1 4.753-.05zM7.8 8a2.9 2.9 0 1 0 0-5.8 2.9 2.9 0 0 0 0 5.8z`;
1564
1631
  const ColumnProgressFilledPath = `M11.5 3.5a4.5 4.5 0 1 1 0 9h-7a4.5 4.5 0 1 1 0-9h7zm0 1.2h-7a3.3 3.3 0 0 0 0 6.6h7a3.3 3.3 0 1 0 0-6.6zM8 7.2v1.5H3.75a.75.75 0 0 1 0-1.5H8z`;
1565
1632
  const AddOutlinedPath = `M8.578 7.383V1.602a.601.601 0 1 0-1.2 0v5.781H1.6a.601.601 0 0 0 0 1.203h5.777v5.812a.601.601 0 1 0 1.2 0V8.586H14.4a.601.601 0 0 0 0-1.203H8.578z`;
1566
- const MoreStandOutlinedPath = `M6.5 2.5C6.5 3.32843 7.17157 4 8 4C8.82843 4 9.5 3.32843 9.5 2.5C9.5 1.67157 8.82843 1 8 1C7.17157 1 6.5 1.67157 6.5 2.5ZM6.5 8C6.5 8.82843 7.17157 9.5 8 9.5C8.82843 9.5 9.5 8.82843 9.5 8C9.5 7.17157 8.82843 6.5 8 6.5C7.17157 6.5 6.5 7.17157 6.5 8ZM6.5 13.5C6.5 14.3284 7.17157 15 8 15C8.82843 15 9.5 14.3284 9.5 13.5C9.5 12.6716 8.82843 12 8 12C7.17157 12 6.5 12.6716 6.5 13.5Z`;
1633
+ const MoreStandOutlinedPath = `M8 4.25a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5zm0 5a1.25 1.25 0 1 0 0-2.5 1.25 1.25 0 0 0 0 2.5z`;
1567
1634
  const StarFill = `M9.186 2.12l1.02 2.769c.073.292.365.437.656.437l2.915.146c1.166.073 1.676 1.53.73 2.26l-2.26 1.821c-.219.146-.291.51-.219.729l.73 2.842c.29 1.093-.948 2.04-1.896 1.384l-2.477-1.603a.79.79 0 0 0-.802 0l-2.478 1.676c-.947.583-2.186-.291-1.894-1.457l.728-2.842c.073-.292 0-.583-.218-.729L1.46 7.731c-.874-.729-.437-2.186.73-2.259l2.914-.146c.292 0 .51-.218.656-.437l1.093-2.77c.365-1.092 1.895-1.092 2.332 0z`;
1568
1635
  const WebOutlinedPath = `M1 8C1 4.13401 4.13401 1 8 1C11.866 1 15 4.13401 15 8C15 11.866 11.866 15 8 15C4.13401 15 1 11.866 1 8ZM6.04798 2.85646C4.19852 3.55874 2.82616 5.22986 2.55071 7.25H5.26373C5.31861 5.76009 5.53564 4.40148 5.87147 3.352C5.92605 3.18143 5.98481 3.0157 6.04798 2.85646ZM5.87147 12.648C5.53564 11.5985 5.31861 10.2399 5.26373 8.75H2.55071C2.82616 10.7701 4.19852 12.4413 6.04798 13.1435C5.98481 12.9843 5.92605 12.8186 5.87147 12.648ZM10.1285 12.648C10.0739 12.8186 10.0152 12.9843 9.95202 13.1435C11.8015 12.4413 13.1738 10.7701 13.4493 8.75H10.7363C10.6814 10.2399 10.4644 11.5985 10.1285 12.648ZM8.6999 12.1908C8.98163 11.3104 9.18095 10.1118 9.23518 8.75H6.76482C6.81905 10.1118 7.01837 11.3104 7.3001 12.1908C7.46768 12.7145 7.65131 13.0839 7.81962 13.3063C7.90746 13.4224 7.9686 13.4711 8 13.4906C8.0314 13.4711 8.09254 13.4224 8.18038 13.3063C8.34869 13.0839 8.53232 12.7145 8.6999 12.1908ZM7.3001 3.80916C7.01837 4.68959 6.81905 5.88818 6.76482 7.25H9.23518C9.18095 5.88818 8.98163 4.68959 8.6999 3.80916C8.53232 3.28548 8.34869 2.91612 8.18038 2.69367C8.09254 2.57756 8.0314 2.52893 8 2.50944C7.9686 2.52893 7.90746 2.57756 7.81962 2.69367C7.65131 2.91612 7.46768 3.28548 7.3001 3.80916ZM10.1285 3.352C10.4644 4.40148 10.6814 5.76009 10.7363 7.25H13.4493C13.1738 5.22986 11.8015 3.55874 9.95203 2.85646C10.0152 3.0157 10.0739 3.18143 10.1285 3.352Z`;
1569
1636
  const DepartmentOutlinedPath = `M3 5.5C3 3.567 4.567 2 6.5 2C8.433 2 10 3.567 10 5.5C10 6.49548 9.5844 7.3939 8.91724 8.0312C10.7204 8.86779 12.017 10.6115 12.2217 12.6767C12.2976 13.4424 11.6682 14 11 14H2C1.33185 14 0.702358 13.4424 0.778277 12.6767C0.983033 10.6115 2.27961 8.86779 4.08276 8.0312C3.4156 7.3939 3 6.49548 3 5.5ZM8.5 5.5C8.5 4.39543 7.60457 3.5 6.5 3.5C5.39543 3.5 4.5 4.39543 4.5 5.5C4.5 6.60457 5.39543 7.5 6.5 7.5C7.60457 7.5 8.5 6.60457 8.5 5.5ZM2.31585 12.5H10.6841C10.3303 10.5108 8.59114 9 6.5 9C4.40886 9 2.66975 10.5108 2.31585 12.5Z', 'M11 3C10.5858 3 10.25 3.33579 10.25 3.75C10.25 4.16421 10.5858 4.5 11 4.5C11.6904 4.5 12.25 5.05964 12.25 5.75C12.25 6.44036 11.6904 7 11 7C10.5858 7 10.25 7.33579 10.25 7.75C10.25 8.16421 10.5858 8.5 11 8.5C12.6569 8.5 14 9.84315 14 11.5C14 11.9142 14.3358 12.25 14.75 12.25C15.1642 12.25 15.5 11.9142 15.5 11.5C15.5 9.77473 14.5291 8.27622 13.1038 7.52106C13.507 7.0426 13.75 6.42467 13.75 5.75C13.75 4.23122 12.5188 3 11 3Z`;
@@ -1603,7 +1670,7 @@ class FieldMenu extends ThyDropdownAbstractMenu {
1603
1670
  }
1604
1671
  }
1605
1672
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FieldMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: FieldMenu, isStandalone: true, selector: "field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, usesInheritance: true, ngImport: i0, template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"execute(menu)\">\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1673
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: FieldMenu, isStandalone: true, selector: "field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, usesInheritance: true, ngImport: i0, template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"!!(menu.disabled && menu.disabled(aiTable, field))\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1607
1674
  }
1608
1675
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FieldMenu, decorators: [{
1609
1676
  type: Component,
@@ -1614,7 +1681,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1614
1681
  ThyDropdownMenuItemDirective,
1615
1682
  ThyDropdownMenuItemNameDirective,
1616
1683
  ThyDropdownMenuItemIconDirective
1617
- ], template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"execute(menu)\">\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n" }]
1684
+ ], template: "@for (menu of fieldMenus; track index; let index = $index) {\n @if ((menu.hidden && !menu.hidden(aiTable, field)) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider [thyStyle]=\"'solid'\"></thy-divider>\n } @else {\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"!!(menu.disabled && menu.disabled(aiTable, field))\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name! }}</span>\n </a>\n }\n }\n}\n" }]
1618
1685
  }], propDecorators: { fieldId: [{
1619
1686
  type: Input,
1620
1687
  args: [{ required: true }]
@@ -1630,7 +1697,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1630
1697
  type: Input
1631
1698
  }] } });
1632
1699
 
1633
- const buildGridLinearRows = (visibleRecords) => {
1700
+ const buildGridLinearRows = (visibleRecords, isAddingVisible = true) => {
1634
1701
  const linearRows = [];
1635
1702
  let displayRowIndex = 0;
1636
1703
  [...visibleRecords, { _id: '' }].forEach((row) => {
@@ -1642,7 +1709,7 @@ const buildGridLinearRows = (visibleRecords) => {
1642
1709
  displayIndex: displayRowIndex
1643
1710
  });
1644
1711
  }
1645
- if (!row._id) {
1712
+ if (isAddingVisible && !row._id) {
1646
1713
  linearRows.push({
1647
1714
  type: AITableRowType.add,
1648
1715
  _id: ''
@@ -1682,6 +1749,7 @@ class AITableGridFieldService {
1682
1749
  origin,
1683
1750
  originPosition: position,
1684
1751
  placement: 'bottomLeft',
1752
+ manualClosure: true,
1685
1753
  originActiveClass: undefined,
1686
1754
  initialState: {
1687
1755
  aiTable,
@@ -2506,6 +2574,9 @@ class AITableGridBase {
2506
2574
  this.aiAddRecord = output();
2507
2575
  this.aiAddField = output();
2508
2576
  this.aiUpdateFieldValue = output();
2577
+ this.fieldMenus = computed(() => {
2578
+ return this.aiFieldConfig()?.fieldMenus || [];
2579
+ });
2509
2580
  this.gridData = computed(() => {
2510
2581
  if (this.aiBuildRenderDataFn && this.aiBuildRenderDataFn() && this.aiTable) {
2511
2582
  return this.aiBuildRenderDataFn()(this.aiTable);
@@ -2525,7 +2596,6 @@ class AITableGridBase {
2525
2596
  ngOnInit() {
2526
2597
  this.initAITable();
2527
2598
  this.initService();
2528
- this.buildFieldMenus();
2529
2599
  }
2530
2600
  initAITable() {
2531
2601
  this.aiTable = createAITable(this.aiRecords, this.aiFields);
@@ -2541,9 +2611,6 @@ class AITableGridBase {
2541
2611
  this.aiTableGridFieldService.initAIFieldConfig(this.aiFieldConfig());
2542
2612
  AI_TABLE_GRID_FIELD_SERVICE_MAP.set(this.aiTable, this.aiTableGridFieldService);
2543
2613
  }
2544
- buildFieldMenus() {
2545
- this.fieldMenus = this.aiFieldConfig()?.fieldMenus || [];
2546
- }
2547
2614
  addRecord() {
2548
2615
  const records = this.gridData().records;
2549
2616
  const recordCount = records.length;
@@ -2644,7 +2711,7 @@ class AITableDomGrid extends AITableGridBase {
2644
2711
  origin: moreBtn,
2645
2712
  editOrigin: fieldAction,
2646
2713
  fieldId: field._id,
2647
- fieldMenus: this.fieldMenus
2714
+ fieldMenus: this.fieldMenus()
2648
2715
  });
2649
2716
  }
2650
2717
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableDomGrid, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
@@ -3195,13 +3262,13 @@ class AITableAddField {
3195
3262
  return lastColumnWidth + lastColumnOffset;
3196
3263
  });
3197
3264
  this.rectConfig = computed(() => {
3198
- const { targetName } = this.config().pointPosition;
3265
+ const { pointPosition: { targetName }, readonly } = this.config();
3199
3266
  const fill = targetName === AI_TABLE_FIELD_ADD_BUTTON ? Colors.gray80 : Colors.white;
3200
3267
  return {
3201
3268
  name: generateTargetName({
3202
3269
  targetName: AI_TABLE_FIELD_ADD_BUTTON,
3203
3270
  fieldId: this.config().fields[this.config().columnStopIndex]._id,
3204
- mouseStyle: 'pointer'
3271
+ mouseStyle: readonly ? 'default' : 'pointer'
3205
3272
  }),
3206
3273
  x: AI_TABLE_OFFSET,
3207
3274
  y: AI_TABLE_OFFSET,
@@ -3216,24 +3283,28 @@ class AITableAddField {
3216
3283
  };
3217
3284
  });
3218
3285
  this.addIconConfig = computed(() => {
3286
+ const { readonly } = this.config();
3219
3287
  const offsetY = (this.config().coordinate.rowInitSize - AI_TABLE_ICON_COMMON_SIZE) / 2;
3220
3288
  return {
3221
3289
  x: AI_TABLE_CELL_PADDING,
3222
3290
  y: offsetY,
3223
3291
  data: AddOutlinedPath,
3224
3292
  fill: Colors.gray600,
3225
- listening: false
3293
+ listening: false,
3294
+ visible: isNil(readonly) ? true : !readonly
3226
3295
  };
3227
3296
  });
3228
3297
  }
3229
3298
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableAddField, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: AITableAddField, isStandalone: true, selector: "ai-table-add-field", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
3299
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AITableAddField, isStandalone: true, selector: "ai-table-add-field", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
3231
3300
  <ko-group [config]="{ x: x() }">
3232
3301
  <ko-group>
3233
3302
  <ko-rect [config]="rectConfig()"></ko-rect>
3234
3303
  </ko-group>
3235
3304
  <ko-group>
3236
- <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3305
+ @if (addIconConfig().visible) {
3306
+ <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3307
+ }
3237
3308
  </ko-group>
3238
3309
  </ko-group>
3239
3310
  `, 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"] }, { kind: "component", type: AITableIcon, selector: "ai-table-icon", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -3248,7 +3319,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
3248
3319
  <ko-rect [config]="rectConfig()"></ko-rect>
3249
3320
  </ko-group>
3250
3321
  <ko-group>
3251
- <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3322
+ @if (addIconConfig().visible) {
3323
+ <ai-table-icon [config]="addIconConfig()"></ai-table-icon>
3324
+ }
3252
3325
  </ko-group>
3253
3326
  </ko-group>
3254
3327
  `,
@@ -5936,6 +6009,9 @@ class AITableRenderer {
5936
6009
  this.fields = computed(() => {
5937
6010
  return AITable.getVisibleFields(this.config().aiTable);
5938
6011
  });
6012
+ this.readonly = computed(() => {
6013
+ return this.config()?.readonly;
6014
+ });
5939
6015
  this.coordinate = computed(() => {
5940
6016
  return this.config()?.coordinate;
5941
6017
  });
@@ -6024,7 +6100,7 @@ class AITableRenderer {
6024
6100
  });
6025
6101
  this.columnHeadOrAddFieldConfig = computed(() => {
6026
6102
  const { columnStartIndex, columnStopIndex } = this.visibleRangeInfo();
6027
- const { aiTable, coordinate } = this.config();
6103
+ const { aiTable, coordinate, readonly } = this.config();
6028
6104
  const { pointPosition } = aiTable.context;
6029
6105
  const fields = this.fields();
6030
6106
  return {
@@ -6033,7 +6109,8 @@ class AITableRenderer {
6033
6109
  fields,
6034
6110
  columnStartIndex,
6035
6111
  columnStopIndex,
6036
- pointPosition: pointPosition()
6112
+ pointPosition: pointPosition(),
6113
+ readonly
6037
6114
  };
6038
6115
  });
6039
6116
  this.cellsConfig = computed(() => {
@@ -6066,7 +6143,7 @@ class AITableRenderer {
6066
6143
  this.koDblclick.emit(e);
6067
6144
  }
6068
6145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6069
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", 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", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($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 <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\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]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [config]=\"columnHeadOrAddFieldConfig()\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\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 </ko-group>\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: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", 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", koWheel: "koWheel", koClick: "koClick", koDblclick: "koDblclick" }, ngImport: i0, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($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 <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\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]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\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 </ko-group>\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: 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6070
6147
  }
6071
6148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AITableRenderer, decorators: [{
6072
6149
  type: Component,
@@ -6083,7 +6160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
6083
6160
  AITableAddField,
6084
6161
  AITableHoverRowHeads,
6085
6162
  AITableOtherRows
6086
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($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 <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\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]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field\n [config]=\"columnHeadOrAddFieldConfig()\"\n ></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\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 </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
6163
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ko-stage\n [config]=\"stageConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($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 <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\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]=\"columnHeadOrAddFieldConfig()\"></ai-table-frozen-column-heads>\n </ko-group>\n\n <ko-group [config]=\"commonGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-cells [config]=\"cellsConfig()\"></ai-table-cells>\n </ko-group>\n\n <ko-group [config]=\"offsetXConfig()\">\n <ai-table-column-heads [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-column-heads>\n <ai-table-add-field [config]=\"columnHeadOrAddFieldConfig()\"></ai-table-add-field>\n </ko-group>\n </ko-group>\n\n <ko-group [config]=\"attachGroupConfig()\">\n <ko-group [config]=\"offsetConfig()\">\n <ai-table-placeholder-cells [config]=\"cellsConfig()\"></ai-table-placeholder-cells>\n @if (activeCellBorderConfig().activeCellBorder) {\n <ko-rect [config]=\"activeCellBorderConfig().activeCellBorder!\"></ko-rect>\n }\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 </ko-group>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
6087
6164
  }] });
6088
6165
 
6089
6166
  class AITableGrid extends AITableGridBase {
@@ -6098,7 +6175,7 @@ class AITableGrid extends AITableGridBase {
6098
6175
  this.verticalBarRef = viewChild('verticalBar');
6099
6176
  this.horizontalBarRef = viewChild('horizontalBar');
6100
6177
  this.linearRows = computed(() => {
6101
- return buildGridLinearRows(this.gridData().records);
6178
+ return buildGridLinearRows(this.gridData().records, !this.aiReadonly());
6102
6179
  });
6103
6180
  this.visibleColumnsMap = computed(() => {
6104
6181
  const columns = AITable.getVisibleFields(this.aiTable);
@@ -6129,7 +6206,8 @@ class AITableGrid extends AITableGridBase {
6129
6206
  coordinate: coordinate,
6130
6207
  containerWidth: this.containerRect().width,
6131
6208
  containerHeight: this.containerRect().height,
6132
- references: this.aiReferences()
6209
+ references: this.aiReferences(),
6210
+ readonly: this.aiReadonly()
6133
6211
  };
6134
6212
  });
6135
6213
  this.coordinate = computed(() => {
@@ -6186,7 +6264,7 @@ class AITableGrid extends AITableGridBase {
6186
6264
  }
6187
6265
  });
6188
6266
  effect(() => {
6189
- if (this.aiTable.context?.pointPosition()) {
6267
+ if (!this.aiReadonly() && this.aiTable.context?.pointPosition()) {
6190
6268
  this.toggleHoverCellEditor();
6191
6269
  }
6192
6270
  });
@@ -6257,7 +6335,7 @@ class AITableGrid extends AITableGridBase {
6257
6335
  mouseEvent.preventDefault();
6258
6336
  const { context } = this.aiTable;
6259
6337
  const { targetName, rowIndex: pointRowIndex } = context.pointPosition();
6260
- if (mouseEvent.button !== AITableMouseDownType.Left)
6338
+ if (mouseEvent.button !== AITableMouseDownType.Left || (targetName !== AI_TABLE_FIELD_HEAD_MORE && this.aiReadonly()))
6261
6339
  return;
6262
6340
  switch (targetName) {
6263
6341
  case AI_TABLE_ROW_ADD_BUTTON: {
@@ -6304,7 +6382,7 @@ class AITableGrid extends AITableGridBase {
6304
6382
  const editOrigin = this.containerElement().querySelector('.konvajs-content');
6305
6383
  this.aiTableGridFieldService.openFieldMenu(this.aiTable, {
6306
6384
  fieldId: fieldId,
6307
- fieldMenus: this.fieldMenus,
6385
+ fieldMenus: this.fieldMenus(),
6308
6386
  origin: this.containerElement(),
6309
6387
  position,
6310
6388
  editOrigin: editOrigin,
@@ -6315,6 +6393,9 @@ class AITableGrid extends AITableGridBase {
6315
6393
  }
6316
6394
  }
6317
6395
  stageDblclick(e) {
6396
+ if (this.aiReadonly()) {
6397
+ return;
6398
+ }
6318
6399
  const _targetName = e.event.target.name();
6319
6400
  const { fieldId, recordId } = getDetailByTargetName(_targetName);
6320
6401
  if (!recordId || !fieldId) {
@@ -6448,5 +6529,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
6448
6529
  * Generated bundle index. Do not edit.
6449
6530
  */
6450
6531
 
6451
- export { AITable, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableCheckType, AITableDomGrid, AITableFieldPropertyEditor, AITableFieldType, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableMemberType, AITableMouseDownType, AITableQueries, AITableRenderer, AITableRowColumnType, AITableRowType, AITableSelectOptionStyle, AITableStatType, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_BLANK, AI_TABLE_CELL, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_BORDER, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, 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_SELECT_CHECKBOX, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_ICON_COMMON_SIZE, 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_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_Width, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AbstractEditCellEditor, AddOutlinedPath, Check, Colors, ColumnCalendarFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, 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, DepartmentOutlinedPath, Direction, FONT_SIZE_SM, FieldOptions, GRID_CELL_EDITOR_MAP, IsSelectRecordPipe, LinkCellEditorComponent, MIN_COLUMN_WIDTH, MOUSEOVER_EDIT_TYPE, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, ProgressEditorComponent, RatingCellEditorComponent, RendererContext, RowHeight, SelectCellEditorComponent, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, buildGridData, buildGridLinearRows, castToString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesMap, getDefaultFieldValue, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getHoverEditorBoxOffset, getHoverEditorSpace, getMousePosition, getPlaceHolderCellsConfigs, getTargetName, getTextWidth, getVisibleRangeInfo, handleMouseStyle, idCreator, imageCache, isArrayField, isMac, isNumberFiled, isSameFieldOption, isSystemField, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, scrollMax, setMouseStyle, textDataCache, transformCellValue };
6532
+ export { AITable, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableCheckType, AITableDomGrid, AITableFieldPropertyEditor, AITableFieldType, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridSelectionService, AITableMemberType, AITableMouseDownType, AITableQueries, AITableRenderer, AITableRowColumnType, AITableRowType, AITableSelectOptionStyle, AITableStatType, AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_BLANK, AI_TABLE_CELL, AI_TABLE_CELL_ACTIVE_BORDER_WIDTH, AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_BORDER, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, 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_SELECT_CHECKBOX, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_ICON_COMMON_SIZE, 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_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_Width, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AbstractEditCellEditor, AddOutlinedPath, Check, Colors, ColumnCalendarFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, 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, DepartmentOutlinedPath, Direction, FONT_SIZE_SM, FieldOptions, GRID_CELL_EDITOR_MAP, IsSelectRecordPipe, LinkCellEditorComponent, MIN_COLUMN_WIDTH, MOUSEOVER_EDIT_TYPE, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, ProgressEditorComponent, RatingCellEditorComponent, RendererContext, RowHeight, SelectCellEditorComponent, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, buildGridData, buildGridLinearRows, castToString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesMap, getDefaultFieldValue, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getHoverEditorBoxOffset, getHoverEditorSpace, getMousePosition, getPlaceHolderCellsConfigs, getTargetName, getTextWidth, getVisibleRangeInfo, handleMouseStyle, idCreator, idsCreator, imageCache, isArrayField, isMac, isNumberFiled, isSameFieldOption, isSystemField, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, scrollMax, setMouseStyle, shortIdCreator, shortIdsCreator, textDataCache, transformCellValue };
6452
6533
  //# sourceMappingURL=ai-table-grid.mjs.map