@ai-table/grid 0.4.1 → 0.4.2
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.
- package/components/cell-editors/abstract-cell-editor.component.d.ts +2 -1
- package/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.d.ts.map +1 -1
- package/components/record-detail/dynamic-cell-editor.component.d.ts +24 -0
- package/components/record-detail/dynamic-cell-editor.component.d.ts.map +1 -0
- package/components/record-detail/index.d.ts +3 -0
- package/components/record-detail/index.d.ts.map +1 -0
- package/components/record-detail/record-detail.component.d.ts +52 -0
- package/components/record-detail/record-detail.component.d.ts.map +1 -0
- package/components/record-detail/record-detail.component.scss +70 -0
- package/constants/icon.d.ts +1 -0
- package/constants/icon.d.ts.map +1 -1
- package/constants/table.d.ts +1 -0
- package/constants/table.d.ts.map +1 -1
- package/fesm2022/ai-table-grid.mjs +600 -105
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/grid-base.component.d.ts +5 -2
- package/grid-base.component.d.ts.map +1 -1
- package/grid.component.d.ts +1 -0
- package/grid.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/renderer/components/expand-record.component.d.ts +10 -0
- package/renderer/components/expand-record.component.d.ts.map +1 -0
- package/renderer/components/field-icon.component.d.ts.map +1 -1
- package/renderer/components/index.d.ts +1 -0
- package/renderer/components/index.d.ts.map +1 -1
- package/renderer/renderer.component.d.ts +6 -0
- package/renderer/renderer.component.d.ts.map +1 -1
- package/services/index.d.ts +1 -0
- package/services/index.d.ts.map +1 -1
- package/services/record-detail.service.d.ts +28 -0
- package/services/record-detail.service.d.ts.map +1 -0
- package/styles/styles.scss +1 -0
- package/types/component-config.d.ts +6 -0
- package/types/component-config.d.ts.map +1 -1
- package/types/grid.d.ts +7 -3
- package/types/grid.d.ts.map +1 -1
- package/utils/clipboard/paste.d.ts +3 -1
- package/utils/clipboard/paste.d.ts.map +1 -1
- package/utils/field/field.d.ts +2 -1
- package/utils/field/field.d.ts.map +1 -1
- package/utils/record.d.ts +10 -0
- package/utils/record.d.ts.map +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, input, EventEmitter, inject, ElementRef, effect, Output, ChangeDetectionStrategy, Component, signal, computed, output, Renderer2, Input, ChangeDetectorRef, ViewChild, model, untracked, Pipe, booleanAttribute,
|
|
2
|
+
import { InjectionToken, input, EventEmitter, inject, ElementRef, effect, Output, ChangeDetectionStrategy, Component, signal, computed, output, Renderer2, Input, ChangeDetectorRef, ViewChild, model, untracked, Pipe, booleanAttribute, viewChild, ViewContainerRef, DestroyRef, Injectable, NgZone, afterNextRender } from '@angular/core';
|
|
3
3
|
import Konva from 'konva';
|
|
4
4
|
import { Shape } from 'konva/lib/Shape';
|
|
5
5
|
import { Sprite } from 'konva/lib/shapes/Sprite';
|
|
@@ -24,12 +24,13 @@ import { TextPath } from 'konva/lib/shapes/TextPath';
|
|
|
24
24
|
import { Transformer } from 'konva/lib/shapes/Transformer';
|
|
25
25
|
import { Wedge } from 'konva/lib/shapes/Wedge';
|
|
26
26
|
import * as i1$1 from 'ngx-tethys/popover';
|
|
27
|
-
import { ThyPopoverRef, ThyPopover, ThyPopoverModule } from 'ngx-tethys/popover';
|
|
27
|
+
import { ThyPopoverRef, ThyPopover, ThyPopoverDirective, ThyPopoverModule } from 'ngx-tethys/popover';
|
|
28
28
|
import { AITableFieldGroup, AITableFieldType, AITableRecordHeightType, DragType, AITableRowColumnType, isUndefinedOrNull, idCreator as idCreator$1, isUrl, isEmpty, AITableFilterOperation, AttachmentFieldBase, AITableStatType, DateFieldBase, DEFAULT_FIELD_STAT_TYPE_ITEMS, isDateValid, isDateAndReturnDate, LinkFieldBase, MemberFieldBase, NumberFieldBase, ProgressFieldBase, isProgressAndReturnValue, RateFieldBase, RichTextFieldBase, SelectFieldBase, AITableSelectOptionStyle, generateOptionsByTexts, TextFieldBase, CheckboxFieldBase, FieldModelBaseMap, numberFormat, DragDirection, AI_TABLE_MIN_FROZEN_COLUMN_COUNT } from '@ai-table/utils';
|
|
29
29
|
import ObjectID from 'bson-objectid';
|
|
30
30
|
import { customAlphabet } from 'nanoid';
|
|
31
31
|
import * as _ from 'lodash';
|
|
32
32
|
import ___default, { isNumber, includes, values, isString, isArray as isArray$1, isObject } from 'lodash';
|
|
33
|
+
import { coerceBooleanProperty, helpers, isArray, TinyDate, hexToRgb } from 'ngx-tethys/util';
|
|
33
34
|
import * as i1 from '@angular/forms';
|
|
34
35
|
import { FormsModule } from '@angular/forms';
|
|
35
36
|
import { ThyDatePicker, ThyDatePickerFormatPipe } from 'ngx-tethys/date-picker';
|
|
@@ -46,7 +47,6 @@ import * as i2 from 'ngx-tethys/form';
|
|
|
46
47
|
import { ThyFormSubmitDirective, ThyFormModule, ThyUniqueCheckValidator } from 'ngx-tethys/form';
|
|
47
48
|
import { ThyNotifyService } from 'ngx-tethys/notify';
|
|
48
49
|
import { ThyInputNumber } from 'ngx-tethys/input-number';
|
|
49
|
-
import { helpers, isArray, TinyDate, hexToRgb } from 'ngx-tethys/util';
|
|
50
50
|
import { isKeyHotkey } from 'is-hotkey';
|
|
51
51
|
import { LRUCache } from 'lru-cache';
|
|
52
52
|
import { differenceInDays, fromUnixTime, differenceInMonths, subDays } from 'date-fns';
|
|
@@ -65,6 +65,7 @@ import { of, Subject, fromEvent, debounceTime, animationFrames, filter } from 'r
|
|
|
65
65
|
import { ThyDivider } from 'ngx-tethys/divider';
|
|
66
66
|
import * as i2$2 from 'ngx-tethys/checkbox';
|
|
67
67
|
import { ThyCheckbox, ThyCheckboxModule } from 'ngx-tethys/checkbox';
|
|
68
|
+
import { ThySlideRef, ThySlideService } from 'ngx-tethys/slide';
|
|
68
69
|
import * as i3$1 from 'ngx-tethys/avatar';
|
|
69
70
|
import { ThyAvatarModule } from 'ngx-tethys/avatar';
|
|
70
71
|
import { ThyProgress } from 'ngx-tethys/progress';
|
|
@@ -942,6 +943,7 @@ const AI_TABLE_FIELD_STAT_CONTAINER_HEIGHT = AI_TABLE_FIELD_STAT_INNER_HEIGHT +
|
|
|
942
943
|
const AI_TABLE_GROUP_MAX_LEVEL = 3;
|
|
943
944
|
const AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON = 'AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON';
|
|
944
945
|
const AI_TABLE_ROW_GROUP_OFFSET = 16;
|
|
946
|
+
const AI_TABLE_EXPAND_RECORD_ICON = 'AI_TABLE_EXPAND_RECORD_ICON';
|
|
945
947
|
const AI_TABLE_SHADOW_DEFAULT_WIDTH = 8;
|
|
946
948
|
const AI_TABLE_CELL_MULTI_ITEM_DEFAULT_MIN_WIDTH = 60;
|
|
947
949
|
const AI_TABLE_CELL_MULTI_SELECT_ITEM_TAG_MIN_WIDTH = 40;
|
|
@@ -1014,6 +1016,7 @@ const RowDragPath = `M6,3 C6.55228475,3 7,2.55228475 7,2 C7,1.44771525 6.5522847
|
|
|
1014
1016
|
const AngleDownPath = `M7.97815,11.99732 L7.9728,12.00267 L2.2998,6.33067 L3.1298,5.49967 L7.97807731,10.3479473 L12.8255,5.49967 L13.6565,6.33067 L7.9835,12.00267 L7.97815,11.99732 Z`;
|
|
1015
1017
|
const AngleRightPath = `M4.72665,3.40415 L5.55765,2.57315 L11.22965,8.24615 L5.55765,13.92985 L4.72665,13.09985 L9.57465,8.25285`;
|
|
1016
1018
|
const IconPathMap = {};
|
|
1019
|
+
const ExpandRecordPath = `M14.0865,2.5978 L14.0865,7.1238 C14.0865,7.4548 14.3545,7.7238 14.6855,7.7238 C15.0175,7.7238 15.2865,7.4548 15.2865,7.1238 L15.2865,1.2008 C15.2865,0.8698 15.0175,0.6018 14.6855,0.6018 L8.7615,0.6028 C8.4305,0.6028 8.1625,0.8718 8.1625,1.2028 C8.1625,1.5338 8.4305,1.8028 8.7615,1.8028 L13.1805,1.8028 L9.8265,5.0068 C9.5865,5.2358 9.5775,5.6158 9.8065,5.8548 C10.0355,6.0948 10.4155,6.1038 10.6555,5.8748 L14.0865,2.5978 Z M1.8031,13.2924 L1.8031,8.7664 C1.8031,8.4354 1.5341,8.1664 1.2031,8.1664 C0.8721,8.1664 0.6031,8.4354 0.6031,8.7664 L0.6031,14.6894 C0.6031,15.0204 0.8721,15.2884 1.2031,15.2884 C1.2061,15.2884 1.2081,15.2874 1.2101,15.2874 L7.1271,15.2874 C7.4581,15.2874 7.7271,15.0194 7.7271,14.6874 C7.7271,14.3564 7.4581,14.0874 7.1271,14.0874 L2.7081,14.0874 L6.0631,10.8834 C6.3021,10.6554 6.3111,10.2754 6.0821,10.0354 C5.8541,9.7954 5.4741,9.7864 5.2341,10.0154 L1.8031,13.2924 Z`;
|
|
1017
1020
|
|
|
1018
1021
|
const DEFAULT_FONT_SIZE = 14;
|
|
1019
1022
|
const GROUP_STAT_DEFAULT_FONT_SIZE = 12;
|
|
@@ -1667,6 +1670,7 @@ class RendererContext {
|
|
|
1667
1670
|
class AbstractEditCellEditor {
|
|
1668
1671
|
constructor() {
|
|
1669
1672
|
this.recordHeight = input(AI_TABLE_RECORD_HEIGHT_LEVELS.low);
|
|
1673
|
+
this.autoFocus = input(true, { transform: coerceBooleanProperty });
|
|
1670
1674
|
this.updateFieldValues = output();
|
|
1671
1675
|
this.field = computed(() => {
|
|
1672
1676
|
return this.aiTable.fieldsMap()[this.fieldId];
|
|
@@ -1725,7 +1729,7 @@ class AbstractEditCellEditor {
|
|
|
1725
1729
|
}
|
|
1726
1730
|
}
|
|
1727
1731
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AbstractEditCellEditor, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1728
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AbstractEditCellEditor, isStandalone: true, selector: "abstract-edit-cell", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: false, isRequired: true, transformFunction: null }, fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: false, isRequired: true, transformFunction: null }, recordId: { classPropertyName: "recordId", publicName: "recordId", isSignal: false, isRequired: true, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: false, isRequired: true, transformFunction: null }, recordHeight: { classPropertyName: "recordHeight", publicName: "recordHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { updateFieldValues: "updateFieldValues" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1732
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AbstractEditCellEditor, isStandalone: true, selector: "abstract-edit-cell", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: false, isRequired: true, transformFunction: null }, fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: false, isRequired: true, transformFunction: null }, recordId: { classPropertyName: "recordId", publicName: "recordId", isSignal: false, isRequired: true, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: false, isRequired: true, transformFunction: null }, recordHeight: { classPropertyName: "recordHeight", publicName: "recordHeight", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { updateFieldValues: "updateFieldValues" }, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1729
1733
|
}
|
|
1730
1734
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AbstractEditCellEditor, decorators: [{
|
|
1731
1735
|
type: Component,
|
|
@@ -1793,7 +1797,7 @@ class DateCellEditorComponent extends AbstractEditCellEditor {
|
|
|
1793
1797
|
[thyShowShortcut]="true"
|
|
1794
1798
|
[thyHasBackdrop]="false"
|
|
1795
1799
|
[thyShowTime]="false"
|
|
1796
|
-
[thyOpen]="
|
|
1800
|
+
[thyOpen]="autoFocus()"
|
|
1797
1801
|
thyFormat="yyyy-MM-dd"
|
|
1798
1802
|
>
|
|
1799
1803
|
</thy-date-picker>
|
|
@@ -1815,7 +1819,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
1815
1819
|
[thyShowShortcut]="true"
|
|
1816
1820
|
[thyHasBackdrop]="false"
|
|
1817
1821
|
[thyShowTime]="false"
|
|
1818
|
-
[thyOpen]="
|
|
1822
|
+
[thyOpen]="autoFocus()"
|
|
1819
1823
|
thyFormat="yyyy-MM-dd"
|
|
1820
1824
|
>
|
|
1821
1825
|
</thy-date-picker>
|
|
@@ -1973,7 +1977,7 @@ class LinkCellEditorComponent extends AbstractEditCellEditor {
|
|
|
1973
1977
|
}
|
|
1974
1978
|
}
|
|
1975
1979
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: LinkCellEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
1976
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.10", type: LinkCellEditorComponent, isStandalone: true, selector: "link-cell-editor", host: { classAttribute: "ai-table-link-editor" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"
|
|
1980
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.10", type: LinkCellEditorComponent, isStandalone: true, selector: "link-cell-editor", host: { classAttribute: "ai-table-link-editor" }, viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"autoFocus()\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n [thyTooltip]=\"linkTooltip()\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: ThyAutofocusDirective, selector: "input[thyAutofocus],textarea[thyAutofocus]", inputs: ["thyAutofocus", "thyAutoSelect"] }, { kind: "directive", type: ThyEnterDirective, selector: "[thyEnter]", outputs: ["thyEnter"] }, { kind: "component", type: ThyInputGroup, selector: "thy-input-group", inputs: ["thyAppendText", "thyAppendTextTranslateKey", "thyPrependText", "thyPrependTextTranslateKey", "thySize"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "directive", type: i2$1.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "ngmodule", type: ThyInputModule }, { kind: "directive", type: i3.ThyInputDirective, selector: "input[thyInput], select[thyInput], textarea[thyInput]", inputs: ["thySize"], exportAs: ["thyInput"] }, { kind: "ngmodule", type: ThyFlexibleTextModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
1977
1981
|
}
|
|
1978
1982
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: LinkCellEditorComponent, decorators: [{
|
|
1979
1983
|
type: Component,
|
|
@@ -1988,7 +1992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
1988
1992
|
ThyFlexibleTextModule
|
|
1989
1993
|
], host: {
|
|
1990
1994
|
class: 'ai-table-link-editor'
|
|
1991
|
-
}, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"
|
|
1995
|
+
}, template: "<thy-input-group class=\"link-input-group h-100\" thySize=\"lg\">\n <input\n #inputElement\n class=\"h-100\"\n class=\"link-input\"\n thyInput\n thySize=\"md\"\n [thyAutofocus]=\"autoFocus()\"\n [(ngModel)]=\"text\"\n (blur)=\"blur($event)\"\n (thyEnter)=\"updateValue()\"\n />\n <ng-template #suffix>\n <a\n thyAction\n thyIcon=\"link-insert\"\n [thyTooltip]=\"linkTooltip()\"\n class=\"font-size-base edit-icon\"\n [class.active]=\"isOpened\"\n href=\"javascript:;\"\n (click)=\"openEdit()\"\n ></a>\n </ng-template>\n</thy-input-group>\n" }]
|
|
1992
1996
|
}], propDecorators: { inputElement: [{
|
|
1993
1997
|
type: ViewChild,
|
|
1994
1998
|
args: ['inputElement', { static: false }]
|
|
@@ -3533,6 +3537,49 @@ function selectField(aiTable, fieldId) {
|
|
|
3533
3537
|
selectedEndCell: null
|
|
3534
3538
|
});
|
|
3535
3539
|
}
|
|
3540
|
+
function getFieldIconPath(field) {
|
|
3541
|
+
let data = null;
|
|
3542
|
+
switch (field.type) {
|
|
3543
|
+
case AITableFieldType.text:
|
|
3544
|
+
data = ColumnTextFilledPath;
|
|
3545
|
+
break;
|
|
3546
|
+
case AITableFieldType.richText:
|
|
3547
|
+
data = ColumnRichTextFilledPath;
|
|
3548
|
+
break;
|
|
3549
|
+
case AITableFieldType.select:
|
|
3550
|
+
data = field.settings?.is_multiple ? ColumnMultipleFillPath : ColumnSelectFilledPath;
|
|
3551
|
+
break;
|
|
3552
|
+
case AITableFieldType.date:
|
|
3553
|
+
case AITableFieldType.createdAt:
|
|
3554
|
+
case AITableFieldType.updatedAt:
|
|
3555
|
+
data = ColumnCalendarFilledPath;
|
|
3556
|
+
break;
|
|
3557
|
+
case AITableFieldType.number:
|
|
3558
|
+
data = ColumnNumberFilledPath;
|
|
3559
|
+
break;
|
|
3560
|
+
case AITableFieldType.link:
|
|
3561
|
+
data = ColumnLinkOutlinedPath;
|
|
3562
|
+
break;
|
|
3563
|
+
case AITableFieldType.rate:
|
|
3564
|
+
data = ColumnRatingFilledPath;
|
|
3565
|
+
break;
|
|
3566
|
+
case AITableFieldType.member:
|
|
3567
|
+
case AITableFieldType.createdBy:
|
|
3568
|
+
case AITableFieldType.updatedBy:
|
|
3569
|
+
data = ColumnMemberFilledPath;
|
|
3570
|
+
break;
|
|
3571
|
+
case AITableFieldType.progress:
|
|
3572
|
+
data = ColumnProgressFilledPath;
|
|
3573
|
+
break;
|
|
3574
|
+
case AITableFieldType.attachment:
|
|
3575
|
+
data = AttachmentPath;
|
|
3576
|
+
break;
|
|
3577
|
+
case AITableFieldType.checkbox:
|
|
3578
|
+
data = ColumnCheckboxFilledPath;
|
|
3579
|
+
break;
|
|
3580
|
+
}
|
|
3581
|
+
return data;
|
|
3582
|
+
}
|
|
3536
3583
|
|
|
3537
3584
|
const aiTableFragmentAttribute = 'ai-table-fragment';
|
|
3538
3585
|
const buildClipboardData = (aiTable) => {
|
|
@@ -7733,46 +7780,7 @@ class AITableFieldIcon {
|
|
|
7733
7780
|
this.config = input.required();
|
|
7734
7781
|
this.iconConfig = computed(() => {
|
|
7735
7782
|
const { field, x, y, width, height, fill, path } = this.config();
|
|
7736
|
-
|
|
7737
|
-
switch (field.type) {
|
|
7738
|
-
case AITableFieldType.text:
|
|
7739
|
-
data = ColumnTextFilledPath;
|
|
7740
|
-
break;
|
|
7741
|
-
case AITableFieldType.richText:
|
|
7742
|
-
data = ColumnRichTextFilledPath;
|
|
7743
|
-
break;
|
|
7744
|
-
case AITableFieldType.select:
|
|
7745
|
-
data = field.settings?.is_multiple ? ColumnMultipleFillPath : ColumnSelectFilledPath;
|
|
7746
|
-
break;
|
|
7747
|
-
case AITableFieldType.date:
|
|
7748
|
-
case AITableFieldType.createdAt:
|
|
7749
|
-
case AITableFieldType.updatedAt:
|
|
7750
|
-
data = ColumnCalendarFilledPath;
|
|
7751
|
-
break;
|
|
7752
|
-
case AITableFieldType.number:
|
|
7753
|
-
data = ColumnNumberFilledPath;
|
|
7754
|
-
break;
|
|
7755
|
-
case AITableFieldType.link:
|
|
7756
|
-
data = ColumnLinkOutlinedPath;
|
|
7757
|
-
break;
|
|
7758
|
-
case AITableFieldType.rate:
|
|
7759
|
-
data = ColumnRatingFilledPath;
|
|
7760
|
-
break;
|
|
7761
|
-
case AITableFieldType.member:
|
|
7762
|
-
case AITableFieldType.createdBy:
|
|
7763
|
-
case AITableFieldType.updatedBy:
|
|
7764
|
-
data = ColumnMemberFilledPath;
|
|
7765
|
-
break;
|
|
7766
|
-
case AITableFieldType.progress:
|
|
7767
|
-
data = ColumnProgressFilledPath;
|
|
7768
|
-
break;
|
|
7769
|
-
case AITableFieldType.attachment:
|
|
7770
|
-
data = AttachmentPath;
|
|
7771
|
-
break;
|
|
7772
|
-
case AITableFieldType.checkbox:
|
|
7773
|
-
data = ColumnCheckboxFilledPath;
|
|
7774
|
-
break;
|
|
7775
|
-
}
|
|
7783
|
+
const data = getFieldIconPath(field) || path;
|
|
7776
7784
|
return {
|
|
7777
7785
|
x,
|
|
7778
7786
|
y,
|
|
@@ -8539,6 +8547,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
8539
8547
|
}]
|
|
8540
8548
|
}] });
|
|
8541
8549
|
|
|
8550
|
+
class AITableExpandRecord {
|
|
8551
|
+
constructor() {
|
|
8552
|
+
this.config = input.required();
|
|
8553
|
+
this.shouldShowIcon = computed(() => {
|
|
8554
|
+
const { aiTable, rowStartIndex, rowStopIndex } = this.config();
|
|
8555
|
+
const context = aiTable.context;
|
|
8556
|
+
if (!context)
|
|
8557
|
+
return false;
|
|
8558
|
+
const { rowIndex: pointRowIndex } = context.pointPosition();
|
|
8559
|
+
const row = context.linearRows()[pointRowIndex];
|
|
8560
|
+
return pointRowIndex >= rowStartIndex && pointRowIndex <= rowStopIndex && row && row.type === AITableRowType.record;
|
|
8561
|
+
});
|
|
8562
|
+
this.expandIconConfig = computed(() => {
|
|
8563
|
+
const { aiTable, coordinate } = this.config();
|
|
8564
|
+
const context = aiTable.context;
|
|
8565
|
+
const { rowIndex: pointRowIndex } = context.pointPosition();
|
|
8566
|
+
const rowHeight = coordinate.rowHeight;
|
|
8567
|
+
const firstColumnWidth = coordinate.getColumnWidth(0);
|
|
8568
|
+
const firstColumnOffset = coordinate.getColumnOffset(0);
|
|
8569
|
+
const y = coordinate.getRowOffset(pointRowIndex) + AI_TABLE_OFFSET;
|
|
8570
|
+
const iconSize = AI_TABLE_ICON_COMMON_SIZE;
|
|
8571
|
+
const padding = 8;
|
|
8572
|
+
const x = firstColumnOffset + firstColumnWidth - iconSize - padding;
|
|
8573
|
+
const row = context.linearRows()[pointRowIndex];
|
|
8574
|
+
const recordId = row?._id;
|
|
8575
|
+
return {
|
|
8576
|
+
x,
|
|
8577
|
+
y: y + (rowHeight - iconSize) / 2,
|
|
8578
|
+
data: ExpandRecordPath,
|
|
8579
|
+
fill: Colors.gray600,
|
|
8580
|
+
name: recordId
|
|
8581
|
+
? generateTargetName({
|
|
8582
|
+
targetName: AI_TABLE_EXPAND_RECORD_ICON,
|
|
8583
|
+
recordId: recordId,
|
|
8584
|
+
mouseStyle: 'pointer'
|
|
8585
|
+
})
|
|
8586
|
+
: undefined
|
|
8587
|
+
};
|
|
8588
|
+
});
|
|
8589
|
+
}
|
|
8590
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableExpandRecord, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
8591
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableExpandRecord, isStandalone: true, selector: "ai-table-expand-record", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
8592
|
+
<ko-group>
|
|
8593
|
+
@if (shouldShowIcon()) {
|
|
8594
|
+
<ai-table-icon [config]="expandIconConfig()"></ai-table-icon>
|
|
8595
|
+
}
|
|
8596
|
+
</ko-group>
|
|
8597
|
+
`, isInline: true, dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: AITableIcon, selector: "ai-table-icon", inputs: ["config"], outputs: ["koClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8598
|
+
}
|
|
8599
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableExpandRecord, decorators: [{
|
|
8600
|
+
type: Component,
|
|
8601
|
+
args: [{
|
|
8602
|
+
selector: 'ai-table-expand-record',
|
|
8603
|
+
template: `
|
|
8604
|
+
<ko-group>
|
|
8605
|
+
@if (shouldShowIcon()) {
|
|
8606
|
+
<ai-table-icon [config]="expandIconConfig()"></ai-table-icon>
|
|
8607
|
+
}
|
|
8608
|
+
</ko-group>
|
|
8609
|
+
`,
|
|
8610
|
+
imports: [KoContainer, AITableIcon],
|
|
8611
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
8612
|
+
}]
|
|
8613
|
+
}] });
|
|
8614
|
+
|
|
8542
8615
|
class AITableBackground {
|
|
8543
8616
|
constructor() {
|
|
8544
8617
|
this.config = input.required();
|
|
@@ -10406,6 +10479,16 @@ class AITableRenderer {
|
|
|
10406
10479
|
keywordsMatchedCells
|
|
10407
10480
|
};
|
|
10408
10481
|
});
|
|
10482
|
+
this.expandRecordConfig = computed(() => {
|
|
10483
|
+
const { aiTable, coordinate } = this.config();
|
|
10484
|
+
const { rowStartIndex, rowStopIndex } = this.visibleRangeInfo();
|
|
10485
|
+
return {
|
|
10486
|
+
aiTable,
|
|
10487
|
+
coordinate,
|
|
10488
|
+
rowStartIndex,
|
|
10489
|
+
rowStopIndex
|
|
10490
|
+
};
|
|
10491
|
+
});
|
|
10409
10492
|
this.fillHandleConfig = computed(() => {
|
|
10410
10493
|
return {
|
|
10411
10494
|
aiTable: this.config().aiTable,
|
|
@@ -10478,7 +10561,7 @@ class AITableRenderer {
|
|
|
10478
10561
|
this.isHoverStatContainer.set(isHover);
|
|
10479
10562
|
}
|
|
10480
10563
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10481
|
-
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 <!-- \u53F3\u4FA7\u975E\u56FA\u5B9A\u5217\u7684\u533A\u57DF -->\n <ko-group [config]=\"commonGroupConfig()\">\n <!-- \u53F3\u4FA7x,y\u6EDA\u52A8\u533A\u57DF\u7684 cell -->\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 <ai-table-groups [config]=\"cellsConfig()\"></ai-table-groups>\n </ko-group>\n\n <!-- \u53F3\u4FA7\u8868\u5934head \u548C \u65B0\u589E\u5217 + \u533A\u57DF -->\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 <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 y\u6EDA\u52A8\u533A\u57DF\u7684cell -->\n <ko-group [config]=\"frozenCommonGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-groups [config]=\"cellsConfig()\"></ai-table-frozen-groups>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n </ko-group>\n </ko-group>\n\n <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 \u8868\u5934 + \u8868\u5934\u53F3\u4FA7\u5206\u5272\u9634\u5F71 -->\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n <ai-table-shadow [config]=\"fieldHeadShadowConfig()\"></ai-table-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-shadow [config]=\"statShadowConfig()\"></ai-table-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: AITableFrozenGroups, selector: "ai-table-frozen-groups", inputs: ["config"] }, { kind: "component", type: AITableGroups, selector: "ai-table-groups", inputs: ["config"] }, { kind: "component", type: AITableShadow, selector: "ai-table-shadow", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10564
|
+
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 <!-- \u53F3\u4FA7\u975E\u56FA\u5B9A\u5217\u7684\u533A\u57DF -->\n <ko-group [config]=\"commonGroupConfig()\">\n <!-- \u53F3\u4FA7x,y\u6EDA\u52A8\u533A\u57DF\u7684 cell -->\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 <ai-table-groups [config]=\"cellsConfig()\"></ai-table-groups>\n </ko-group>\n\n <!-- \u53F3\u4FA7\u8868\u5934head \u548C \u65B0\u589E\u5217 + \u533A\u57DF -->\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 <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 y\u6EDA\u52A8\u533A\u57DF\u7684cell -->\n <ko-group [config]=\"frozenCommonGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-groups [config]=\"cellsConfig()\"></ai-table-frozen-groups>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n <ai-table-expand-record [config]=\"expandRecordConfig()\"></ai-table-expand-record>\n </ko-group>\n </ko-group>\n\n <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 \u8868\u5934 + \u8868\u5934\u53F3\u4FA7\u5206\u5272\u9634\u5F71 -->\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n <ai-table-shadow [config]=\"fieldHeadShadowConfig()\"></ai-table-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-shadow [config]=\"statShadowConfig()\"></ai-table-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: AITableFrozenGroups, selector: "ai-table-frozen-groups", inputs: ["config"] }, { kind: "component", type: AITableGroups, selector: "ai-table-groups", inputs: ["config"] }, { kind: "component", type: AITableShadow, selector: "ai-table-shadow", inputs: ["config"] }, { kind: "component", type: AITableExpandRecord, selector: "ai-table-expand-record", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
10482
10565
|
}
|
|
10483
10566
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableRenderer, decorators: [{
|
|
10484
10567
|
type: Component,
|
|
@@ -10502,8 +10585,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
10502
10585
|
AITableFrozenGroups,
|
|
10503
10586
|
AITableGroups,
|
|
10504
10587
|
AITableShadow,
|
|
10505
|
-
AITableFrozenGroups
|
|
10506
|
-
|
|
10588
|
+
AITableFrozenGroups,
|
|
10589
|
+
AITableExpandRecord
|
|
10590
|
+
], 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 <!-- \u53F3\u4FA7\u975E\u56FA\u5B9A\u5217\u7684\u533A\u57DF -->\n <ko-group [config]=\"commonGroupConfig()\">\n <!-- \u53F3\u4FA7x,y\u6EDA\u52A8\u533A\u57DF\u7684 cell -->\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 <ai-table-groups [config]=\"cellsConfig()\"></ai-table-groups>\n </ko-group>\n\n <!-- \u53F3\u4FA7\u8868\u5934head \u548C \u65B0\u589E\u5217 + \u533A\u57DF -->\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 <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 y\u6EDA\u52A8\u533A\u57DF\u7684cell -->\n <ko-group [config]=\"frozenCommonGroupConfig()\">\n <ko-group [config]=\"offsetYConfig()\">\n <ai-table-frozen-cells [config]=\"cellsConfig()\"></ai-table-frozen-cells>\n <ai-table-other-rows [config]=\"cellsConfig()\"></ai-table-other-rows>\n @if (!hiddenIndexColumn()) {\n <ai-table-hover-row-heads [config]=\"cellsConfig()\"></ai-table-hover-row-heads>\n }\n <ai-table-frozen-groups [config]=\"cellsConfig()\"></ai-table-frozen-groups>\n <ai-table-frozen-placeholder-cells [config]=\"cellsConfig()\"></ai-table-frozen-placeholder-cells>\n <ai-table-expand-record [config]=\"expandRecordConfig()\"></ai-table-expand-record>\n </ko-group>\n </ko-group>\n\n <!-- \u5DE6\u4FA7\u56FA\u5B9A\u5217 \u8868\u5934 + \u8868\u5934\u53F3\u4FA7\u5206\u5272\u9634\u5F71 -->\n <ko-group>\n <ai-table-frozen-column-heads [config]=\"columnFrozenHeadFieldConfig()\"></ai-table-frozen-column-heads>\n <ai-table-shadow [config]=\"fieldHeadShadowConfig()\"></ai-table-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-shadow [config]=\"statShadowConfig()\"></ai-table-shadow>\n </ko-group>\n </ko-group>\n </ko-layer>\n</ko-stage>\n\n<ng-content></ng-content>\n" }]
|
|
10507
10591
|
}] });
|
|
10508
10592
|
|
|
10509
10593
|
class AITableCellRate extends CoverCellBase {
|
|
@@ -11941,6 +12025,47 @@ function toggleSelectAllRecords(aiTable, checked) {
|
|
|
11941
12025
|
clearSelection(aiTable);
|
|
11942
12026
|
}
|
|
11943
12027
|
}
|
|
12028
|
+
function getNextRecordByActiveCell(aiTable) {
|
|
12029
|
+
const records = aiTable.gridData().records;
|
|
12030
|
+
const visibleRowsIndexMap = aiTable.context.visibleRowsIndexMap();
|
|
12031
|
+
const currentId = aiTable.selection().activeCell?.[0];
|
|
12032
|
+
if (!currentId)
|
|
12033
|
+
return null;
|
|
12034
|
+
const currentIndex = visibleRowsIndexMap.get(currentId) || 0;
|
|
12035
|
+
if (currentIndex === -1 || currentIndex === records.length - 1) {
|
|
12036
|
+
return null;
|
|
12037
|
+
}
|
|
12038
|
+
const nextId = records[currentIndex + 1]._id;
|
|
12039
|
+
return nextId;
|
|
12040
|
+
}
|
|
12041
|
+
function getPreviousRecordByActiveCell(aiTable) {
|
|
12042
|
+
const records = aiTable.gridData().records;
|
|
12043
|
+
const visibleRowsIndexMap = aiTable.context.visibleRowsIndexMap();
|
|
12044
|
+
const currentId = aiTable.selection().activeCell?.[0];
|
|
12045
|
+
if (!currentId)
|
|
12046
|
+
return null;
|
|
12047
|
+
const currentIndex = visibleRowsIndexMap.get(currentId) || 0;
|
|
12048
|
+
if (currentIndex <= 0) {
|
|
12049
|
+
return null;
|
|
12050
|
+
}
|
|
12051
|
+
const prevId = records[currentIndex - 1]._id;
|
|
12052
|
+
return prevId;
|
|
12053
|
+
}
|
|
12054
|
+
function getRecordNavigationInfo(aiTable, recordId) {
|
|
12055
|
+
const records = aiTable.gridData().records;
|
|
12056
|
+
const visibleRowsIndexMap = aiTable.context.visibleRowsIndexMap();
|
|
12057
|
+
const index = visibleRowsIndexMap.get(recordId) || 0;
|
|
12058
|
+
if (index === -1)
|
|
12059
|
+
return null;
|
|
12060
|
+
return {
|
|
12061
|
+
index,
|
|
12062
|
+
total: records.length,
|
|
12063
|
+
hasPrevious: index > 0,
|
|
12064
|
+
hasNext: index < records.length - 1,
|
|
12065
|
+
previousId: index > 0 ? records[index - 1]._id : null,
|
|
12066
|
+
nextId: index < records.length - 1 ? records[index + 1]._id : null
|
|
12067
|
+
};
|
|
12068
|
+
}
|
|
11944
12069
|
|
|
11945
12070
|
class NumberCellEditorComponent extends AbstractEditCellEditor {
|
|
11946
12071
|
updateValue() {
|
|
@@ -11954,7 +12079,7 @@ class NumberCellEditorComponent extends AbstractEditCellEditor {
|
|
|
11954
12079
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: NumberCellEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
11955
12080
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.10", type: NumberCellEditorComponent, isStandalone: true, selector: "number-cell-editor", host: { classAttribute: "number-cell-editor" }, usesInheritance: true, ngImport: i0, template: `<thy-input-number
|
|
11956
12081
|
class="h-100"
|
|
11957
|
-
[thyAutoFocus]="
|
|
12082
|
+
[thyAutoFocus]="autoFocus()"
|
|
11958
12083
|
[thyShowStepControls]="false"
|
|
11959
12084
|
[(ngModel)]="modelValue"
|
|
11960
12085
|
(thyEnter)="updateValue()"
|
|
@@ -11967,7 +12092,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
11967
12092
|
selector: 'number-cell-editor',
|
|
11968
12093
|
template: `<thy-input-number
|
|
11969
12094
|
class="h-100"
|
|
11970
|
-
[thyAutoFocus]="
|
|
12095
|
+
[thyAutoFocus]="autoFocus()"
|
|
11971
12096
|
[thyShowStepControls]="false"
|
|
11972
12097
|
[(ngModel)]="modelValue"
|
|
11973
12098
|
(thyEnter)="updateValue()"
|
|
@@ -12059,7 +12184,7 @@ class SelectCellEditorComponent extends AbstractEditCellEditor {
|
|
|
12059
12184
|
});
|
|
12060
12185
|
}
|
|
12061
12186
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: SelectCellEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12062
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"
|
|
12187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"autoFocus()\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option\n [thyValue]=\"option._id\"\n [hidden]=\"!!option.is_disabled\"\n [thyRawValue]=\"option\"\n [thyShowOptionCustom]=\"true\"\n [thyLabelText]=\"option.text\"\n >\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n", dependencies: [{ kind: "component", type: ThySelect, selector: "thy-select,thy-custom-select", inputs: ["thyDropdownWidthMode", "thyShowSearch", "thyPlaceHolder", "thyServerSearch", "thyLoadState", "thyAutoActiveFirstItem", "thyMode", "thySize", "thyEmptyStateText", "thyEmptySearchMessageText", "thyEnableScrollLoad", "thyAllowClear", "thyDisabled", "thySortComparator", "thyFooterTemplate", "thyPlacement", "thyOrigin", "thyFooterClass", "thyAutoExpand", "thyHasBackdrop", "thyMaxTagCount", "thyBorderless", "thyOptions", "thyPreset"], outputs: ["thyOnSearch", "thyOnScrollToBottom", "thyOnExpandStatusChange"], exportAs: ["thySelect"] }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ThyEmptyModule }, { kind: "ngmodule", type: ThyFormModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ThySelectModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12063
12188
|
}
|
|
12064
12189
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: SelectCellEditorComponent, decorators: [{
|
|
12065
12190
|
type: Component,
|
|
@@ -12075,7 +12200,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
12075
12200
|
ThyFormModule,
|
|
12076
12201
|
FormsModule,
|
|
12077
12202
|
ThySelectModule
|
|
12078
|
-
], template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"
|
|
12203
|
+
], template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"autoFocus()\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option\n [thyValue]=\"option._id\"\n [hidden]=\"!!option.is_disabled\"\n [thyRawValue]=\"option\"\n [thyShowOptionCustom]=\"true\"\n [thyLabelText]=\"option.text\"\n >\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n" }]
|
|
12079
12204
|
}], ctorParameters: () => [] });
|
|
12080
12205
|
|
|
12081
12206
|
class TextCellEditorComponent extends AbstractEditCellEditor {
|
|
@@ -12117,7 +12242,7 @@ class TextCellEditorComponent extends AbstractEditCellEditor {
|
|
|
12117
12242
|
placeholder=""
|
|
12118
12243
|
rows="1"
|
|
12119
12244
|
thyInput
|
|
12120
|
-
[thyAutofocus]="
|
|
12245
|
+
[thyAutofocus]="autoFocus()"
|
|
12121
12246
|
[(ngModel)]="modelValue"
|
|
12122
12247
|
(ngModelChange)="valueChange()"
|
|
12123
12248
|
(thyEnter)="updateValue()"
|
|
@@ -12135,7 +12260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
12135
12260
|
placeholder=""
|
|
12136
12261
|
rows="1"
|
|
12137
12262
|
thyInput
|
|
12138
|
-
[thyAutofocus]="
|
|
12263
|
+
[thyAutofocus]="autoFocus()"
|
|
12139
12264
|
[(ngModel)]="modelValue"
|
|
12140
12265
|
(ngModelChange)="valueChange()"
|
|
12141
12266
|
(thyEnter)="updateValue()"
|
|
@@ -12500,6 +12625,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
12500
12625
|
}]
|
|
12501
12626
|
}] });
|
|
12502
12627
|
|
|
12628
|
+
class AITableFieldMenu extends ThyDropdownAbstractMenu {
|
|
12629
|
+
constructor() {
|
|
12630
|
+
super(...arguments);
|
|
12631
|
+
this.field = computed(() => {
|
|
12632
|
+
return this.aiTable.fields().find((item) => item._id === this.fieldId);
|
|
12633
|
+
});
|
|
12634
|
+
}
|
|
12635
|
+
getCustomComponent(menu) {
|
|
12636
|
+
return menu.customComponent?.(this.aiTable, this.field());
|
|
12637
|
+
}
|
|
12638
|
+
execute(menu) {
|
|
12639
|
+
if ((menu.disabled && !menu.disabled(this.aiTable, this.field)) || !menu.disabled) {
|
|
12640
|
+
menu.exec && menu.exec(this.aiTable, this.field, this.origin, this.position);
|
|
12641
|
+
}
|
|
12642
|
+
}
|
|
12643
|
+
getMenuName(menu, field) {
|
|
12644
|
+
if (typeof menu.name === 'function') {
|
|
12645
|
+
return menu.name(field);
|
|
12646
|
+
}
|
|
12647
|
+
return menu.name || '';
|
|
12648
|
+
}
|
|
12649
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFieldMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
12650
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableFieldMenu, isStandalone: true, selector: "ai-table-field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, host: { classAttribute: "field-menu" }, usesInheritance: true, ngImport: i0, template: "@if (field()) {\n @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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n @let customComponent = getCustomComponent(menu);\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n @if (customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: { field: field(), menu: menu }\"> </ng-container>\n } @else {\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ getMenuName(menu, field()) }}</span>\n }\n </a>\n }\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"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12651
|
+
}
|
|
12652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFieldMenu, decorators: [{
|
|
12653
|
+
type: Component,
|
|
12654
|
+
args: [{ selector: 'ai-table-field-menu', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
12655
|
+
class: 'field-menu'
|
|
12656
|
+
}, imports: [ThyIcon, ThyDivider, ThyDropdownMenuItemDirective, NgClass, NgComponentOutlet], template: "@if (field()) {\n @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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n @let customComponent = getCustomComponent(menu);\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n @if (customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: { field: field(), menu: menu }\"> </ng-container>\n } @else {\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ getMenuName(menu, field()) }}</span>\n }\n </a>\n }\n }\n }\n}\n" }]
|
|
12657
|
+
}], propDecorators: { fieldId: [{
|
|
12658
|
+
type: Input,
|
|
12659
|
+
args: [{ required: true }]
|
|
12660
|
+
}], aiTable: [{
|
|
12661
|
+
type: Input,
|
|
12662
|
+
args: [{ required: true }]
|
|
12663
|
+
}], fieldMenus: [{
|
|
12664
|
+
type: Input,
|
|
12665
|
+
args: [{ required: true }]
|
|
12666
|
+
}], origin: [{
|
|
12667
|
+
type: Input
|
|
12668
|
+
}], position: [{
|
|
12669
|
+
type: Input
|
|
12670
|
+
}] } });
|
|
12671
|
+
|
|
12503
12672
|
const GRID_CELL_EDITOR_MAP = {
|
|
12504
12673
|
[AITableFieldType.text]: TextCellEditorComponent,
|
|
12505
12674
|
[AITableFieldType.richText]: TextCellEditorComponent,
|
|
@@ -12509,6 +12678,268 @@ const GRID_CELL_EDITOR_MAP = {
|
|
|
12509
12678
|
[AITableFieldType.link]: LinkCellEditorComponent
|
|
12510
12679
|
};
|
|
12511
12680
|
|
|
12681
|
+
class DynamicCellEditorComponent {
|
|
12682
|
+
constructor() {
|
|
12683
|
+
this.aiTable = input.required();
|
|
12684
|
+
this.fieldId = input.required();
|
|
12685
|
+
this.recordId = input.required();
|
|
12686
|
+
this.references = input.required();
|
|
12687
|
+
this.updateFieldValues = output();
|
|
12688
|
+
this.editorHost = viewChild('editorHost', { read: ViewContainerRef });
|
|
12689
|
+
this.field = computed(() => {
|
|
12690
|
+
return this.aiTable().fieldsMap()[this.fieldId()];
|
|
12691
|
+
});
|
|
12692
|
+
this.cellValue = computed(() => {
|
|
12693
|
+
return AITableQueries.getFieldValue(this.aiTable(), [this.recordId(), this.fieldId()]);
|
|
12694
|
+
});
|
|
12695
|
+
effect(() => {
|
|
12696
|
+
this.recordId();
|
|
12697
|
+
this.fieldId();
|
|
12698
|
+
this.createEditorComponent();
|
|
12699
|
+
});
|
|
12700
|
+
}
|
|
12701
|
+
ngOnInit() { }
|
|
12702
|
+
ngOnDestroy() {
|
|
12703
|
+
this.destroyEditorComponent();
|
|
12704
|
+
}
|
|
12705
|
+
createEditorComponent() {
|
|
12706
|
+
const field = this.field();
|
|
12707
|
+
if (!field)
|
|
12708
|
+
return;
|
|
12709
|
+
const editorComponent = this.getEditorComponent(field.type);
|
|
12710
|
+
if (!editorComponent)
|
|
12711
|
+
return;
|
|
12712
|
+
const editorHost = this.editorHost();
|
|
12713
|
+
try {
|
|
12714
|
+
editorHost?.clear();
|
|
12715
|
+
}
|
|
12716
|
+
catch (error) { }
|
|
12717
|
+
const fieldRenderers = this.aiTable().context?.aiFieldConfig()?.fieldRenderers;
|
|
12718
|
+
this.editorComponentRef = editorHost?.createComponent(editorComponent, {
|
|
12719
|
+
injector: fieldRenderers?.[field.type]?.recordCellEditorInjector
|
|
12720
|
+
});
|
|
12721
|
+
const instance = this.editorComponentRef.instance;
|
|
12722
|
+
if (instance instanceof AbstractEditCellEditor) {
|
|
12723
|
+
this.editorComponentRef.setInput('aiTable', this.aiTable());
|
|
12724
|
+
this.editorComponentRef.setInput('fieldId', this.fieldId());
|
|
12725
|
+
this.editorComponentRef.setInput('recordId', this.recordId());
|
|
12726
|
+
this.editorComponentRef.setInput('references', this.references());
|
|
12727
|
+
this.editorComponentRef.setInput('autoFocus', false);
|
|
12728
|
+
instance.updateFieldValues.subscribe((options) => {
|
|
12729
|
+
this.updateFieldValues.emit(options);
|
|
12730
|
+
});
|
|
12731
|
+
}
|
|
12732
|
+
}
|
|
12733
|
+
destroyEditorComponent() {
|
|
12734
|
+
if (this.editorComponentRef) {
|
|
12735
|
+
this.editorComponentRef.destroy();
|
|
12736
|
+
this.editorComponentRef = undefined;
|
|
12737
|
+
}
|
|
12738
|
+
}
|
|
12739
|
+
getEditorComponent(fieldType) {
|
|
12740
|
+
const customEditors = this.aiTable().context?.aiFieldConfig()?.fieldRenderers;
|
|
12741
|
+
if (customEditors && customEditors[fieldType]?.recordCellEditor) {
|
|
12742
|
+
return customEditors[fieldType].recordCellEditor;
|
|
12743
|
+
}
|
|
12744
|
+
return GRID_CELL_EDITOR_MAP[fieldType];
|
|
12745
|
+
}
|
|
12746
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: DynamicCellEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12747
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.10", type: DynamicCellEditorComponent, isStandalone: true, selector: "ai-dynamic-cell-editor", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: true, isRequired: true, transformFunction: null }, recordId: { classPropertyName: "recordId", publicName: "recordId", isSignal: true, isRequired: true, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { updateFieldValues: "updateFieldValues" }, viewQueries: [{ propertyName: "editorHost", first: true, predicate: ["editorHost"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
|
|
12748
|
+
<div class="ai-dynamic-cell-editor-wrapper">
|
|
12749
|
+
<ng-container #editorHost></ng-container>
|
|
12750
|
+
</div>
|
|
12751
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12752
|
+
}
|
|
12753
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: DynamicCellEditorComponent, decorators: [{
|
|
12754
|
+
type: Component,
|
|
12755
|
+
args: [{
|
|
12756
|
+
selector: 'ai-dynamic-cell-editor',
|
|
12757
|
+
template: `
|
|
12758
|
+
<div class="ai-dynamic-cell-editor-wrapper">
|
|
12759
|
+
<ng-container #editorHost></ng-container>
|
|
12760
|
+
</div>
|
|
12761
|
+
`,
|
|
12762
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
12763
|
+
}]
|
|
12764
|
+
}], ctorParameters: () => [] });
|
|
12765
|
+
|
|
12766
|
+
class RecordDetailComponent {
|
|
12767
|
+
fieldIconPath(field) {
|
|
12768
|
+
return getFieldIconPath(field);
|
|
12769
|
+
}
|
|
12770
|
+
constructor() {
|
|
12771
|
+
this.aiTable = input.required();
|
|
12772
|
+
this.recordId = input.required();
|
|
12773
|
+
this.references = input.required();
|
|
12774
|
+
this.actions = input();
|
|
12775
|
+
this.recordIdChange = output();
|
|
12776
|
+
this.internalRecordId = signal('');
|
|
12777
|
+
this.currentRecordId = computed(() => {
|
|
12778
|
+
const inputId = this.recordId();
|
|
12779
|
+
const internalId = this.internalRecordId();
|
|
12780
|
+
return internalId || inputId;
|
|
12781
|
+
});
|
|
12782
|
+
this.fieldOperationsMenuTemplate = viewChild('fieldOperationsMenuTemplate');
|
|
12783
|
+
this.slideRef = inject(ThySlideRef);
|
|
12784
|
+
this.thyPopover = inject(ThyPopover);
|
|
12785
|
+
this.record = computed(() => {
|
|
12786
|
+
return this.aiTable().recordsMap()[this.currentRecordId()];
|
|
12787
|
+
});
|
|
12788
|
+
this.fields = computed(() => {
|
|
12789
|
+
return this.aiTable().gridData().fields;
|
|
12790
|
+
});
|
|
12791
|
+
this.firstField = computed(() => {
|
|
12792
|
+
return this.aiTable().gridData().fields[0];
|
|
12793
|
+
});
|
|
12794
|
+
this.lastField = computed(() => {
|
|
12795
|
+
const fields = this.aiTable().gridData().fields;
|
|
12796
|
+
return fields[fields.length - 1];
|
|
12797
|
+
});
|
|
12798
|
+
this.recordTitle = computed(() => {
|
|
12799
|
+
const firstField = this.firstField();
|
|
12800
|
+
if (!firstField)
|
|
12801
|
+
return '未命名记录';
|
|
12802
|
+
const cellValue = AITableQueries.getFieldValue(this.aiTable(), [this.currentRecordId(), firstField._id]);
|
|
12803
|
+
return this.formatCellValue(cellValue, firstField) || '未命名记录';
|
|
12804
|
+
});
|
|
12805
|
+
this.recordNavigation = computed(() => {
|
|
12806
|
+
return getRecordNavigationInfo(this.aiTable(), this.currentRecordId());
|
|
12807
|
+
});
|
|
12808
|
+
this.fieldMenus = computed(() => {
|
|
12809
|
+
const fieldMenusFn = this.aiTable()?.context?.aiFieldConfig()?.recordDetailFieldMenus;
|
|
12810
|
+
if (fieldMenusFn && this.aiTable()) {
|
|
12811
|
+
return fieldMenusFn(this.aiTable());
|
|
12812
|
+
}
|
|
12813
|
+
return [];
|
|
12814
|
+
});
|
|
12815
|
+
this.activeFieldId = null;
|
|
12816
|
+
this.fieldMenuVisible = {};
|
|
12817
|
+
effect(() => {
|
|
12818
|
+
const activeCell = this.aiTable().selection().activeCell;
|
|
12819
|
+
if (activeCell) {
|
|
12820
|
+
this.internalRecordId.set(activeCell[0]);
|
|
12821
|
+
}
|
|
12822
|
+
});
|
|
12823
|
+
}
|
|
12824
|
+
ngOnInit() {
|
|
12825
|
+
this.setSelection(this.recordId());
|
|
12826
|
+
this.internalRecordId.set(this.recordId());
|
|
12827
|
+
}
|
|
12828
|
+
close() {
|
|
12829
|
+
this.slideRef?.close();
|
|
12830
|
+
}
|
|
12831
|
+
previousRecord() {
|
|
12832
|
+
const prevId = getPreviousRecordByActiveCell(this.aiTable());
|
|
12833
|
+
if (prevId) {
|
|
12834
|
+
this.internalRecordId.set(prevId);
|
|
12835
|
+
this.setSelection(prevId);
|
|
12836
|
+
}
|
|
12837
|
+
}
|
|
12838
|
+
nextRecord() {
|
|
12839
|
+
const nextId = getNextRecordByActiveCell(this.aiTable());
|
|
12840
|
+
if (nextId) {
|
|
12841
|
+
this.internalRecordId.set(nextId);
|
|
12842
|
+
this.setSelection(nextId);
|
|
12843
|
+
}
|
|
12844
|
+
}
|
|
12845
|
+
deleteRecord() {
|
|
12846
|
+
this.actions()?.removeRecord?.([this.currentRecordId()]);
|
|
12847
|
+
this.close();
|
|
12848
|
+
}
|
|
12849
|
+
fieldClick(fieldId) {
|
|
12850
|
+
this.activateField(fieldId);
|
|
12851
|
+
setActiveCell(this.aiTable(), [this.currentRecordId(), fieldId]);
|
|
12852
|
+
}
|
|
12853
|
+
showFieldMenu(fieldId) {
|
|
12854
|
+
this.fieldMenuVisible[fieldId] = true;
|
|
12855
|
+
}
|
|
12856
|
+
hideFieldMenu(fieldId) {
|
|
12857
|
+
this.fieldMenuVisible[fieldId] = false;
|
|
12858
|
+
}
|
|
12859
|
+
fieldMenuMoreClick(e, fieldId) {
|
|
12860
|
+
const origin = e.target;
|
|
12861
|
+
const position = origin.getBoundingClientRect();
|
|
12862
|
+
this.thyPopover.open(AITableFieldMenu, {
|
|
12863
|
+
origin,
|
|
12864
|
+
placement: 'bottomRight',
|
|
12865
|
+
manualClosure: true,
|
|
12866
|
+
initialState: {
|
|
12867
|
+
aiTable: this.aiTable(),
|
|
12868
|
+
fieldId,
|
|
12869
|
+
fieldMenus: this.fieldMenus(),
|
|
12870
|
+
origin,
|
|
12871
|
+
position
|
|
12872
|
+
}
|
|
12873
|
+
});
|
|
12874
|
+
}
|
|
12875
|
+
addNewField(e) {
|
|
12876
|
+
const origin = e.target;
|
|
12877
|
+
const newField = createDefaultField(this.aiTable(), AITableFieldType.text);
|
|
12878
|
+
const popoverRef = this.thyPopover.open(AITableFieldSetting, {
|
|
12879
|
+
origin,
|
|
12880
|
+
placement: 'topLeft',
|
|
12881
|
+
manualClosure: true,
|
|
12882
|
+
originActiveClass: undefined,
|
|
12883
|
+
height: 'auto',
|
|
12884
|
+
panelClass: 'ai-table-field-setting-panel',
|
|
12885
|
+
initialState: {
|
|
12886
|
+
aiTable: this.aiTable(),
|
|
12887
|
+
aiReferences: this.references(),
|
|
12888
|
+
aiEditField: newField,
|
|
12889
|
+
isUpdate: false
|
|
12890
|
+
}
|
|
12891
|
+
});
|
|
12892
|
+
if (popoverRef) {
|
|
12893
|
+
popoverRef.componentInstance.addField.subscribe((defaultValue) => {
|
|
12894
|
+
const fields = this.aiTable().gridData().fields;
|
|
12895
|
+
const fieldCount = fields.length;
|
|
12896
|
+
this.actions()?.addField?.({
|
|
12897
|
+
originId: fieldCount > 0 ? fields[fields.length - 1]._id : '',
|
|
12898
|
+
defaultValue
|
|
12899
|
+
});
|
|
12900
|
+
});
|
|
12901
|
+
}
|
|
12902
|
+
}
|
|
12903
|
+
fieldValueChange(options) {
|
|
12904
|
+
this.actions()?.updateFieldValues?.(options);
|
|
12905
|
+
}
|
|
12906
|
+
setSelection(recordId) {
|
|
12907
|
+
clearSelection(this.aiTable());
|
|
12908
|
+
closeExpendCell(this.aiTable());
|
|
12909
|
+
const idPath = [recordId, this.firstField()?._id];
|
|
12910
|
+
selectCells(this.aiTable(), idPath);
|
|
12911
|
+
setActiveCell(this.aiTable(), idPath);
|
|
12912
|
+
}
|
|
12913
|
+
activateField(fieldId) {
|
|
12914
|
+
setActiveCell(this.aiTable(), [this.recordId(), fieldId]);
|
|
12915
|
+
}
|
|
12916
|
+
formatCellValue(value, field) {
|
|
12917
|
+
if (value === null || value === undefined)
|
|
12918
|
+
return '';
|
|
12919
|
+
const transformValue = transformToCellText(value, { aiTable: this.aiTable(), field });
|
|
12920
|
+
switch (field.type) {
|
|
12921
|
+
case AITableFieldType.text:
|
|
12922
|
+
case AITableFieldType.richText:
|
|
12923
|
+
case AITableFieldType.number:
|
|
12924
|
+
return transformValue;
|
|
12925
|
+
case AITableFieldType.select:
|
|
12926
|
+
return Array.isArray(transformValue)
|
|
12927
|
+
? transformValue.map((v) => field.settings?.options?.find((o) => o._id === v)?.text || v).join(', ')
|
|
12928
|
+
: transformValue?.text || transformValue;
|
|
12929
|
+
case AITableFieldType.date:
|
|
12930
|
+
return transformValue ? new Date(transformValue).toLocaleString() : '';
|
|
12931
|
+
default:
|
|
12932
|
+
return transformValue;
|
|
12933
|
+
}
|
|
12934
|
+
}
|
|
12935
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: RecordDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12936
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: RecordDetailComponent, isStandalone: true, selector: "ai-record-detail", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, recordId: { classPropertyName: "recordId", publicName: "recordId", isSignal: true, isRequired: true, transformFunction: null }, references: { classPropertyName: "references", publicName: "references", isSignal: true, isRequired: true, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { recordIdChange: "recordIdChange" }, viewQueries: [{ propertyName: "fieldOperationsMenuTemplate", first: true, predicate: ["fieldOperationsMenuTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"d-flex flex-column ai-record-detail\">\n <div class=\"d-flex align-items-center justify-content-between px-5 record-detail-header\">\n <span class=\"record-title\" [title]=\"recordTitle()\">\n {{ recordTitle() }}\n </span>\n\n <div class=\"record-navigation\">\n <button\n thyButton=\"link-secondary\"\n thySize=\"md\"\n [disabled]=\"!recordNavigation()?.hasPrevious\"\n (click)=\"previousRecord()\"\n title=\"\u4E0A\u4E00\u6761\"\n >\n <thy-icon thyIconName=\"angle-up\"></thy-icon>\n </button>\n <button thyButton=\"link-secondary\" thySize=\"md\" [disabled]=\"!recordNavigation()?.hasNext\" (click)=\"nextRecord()\" title=\"\u4E0B\u4E00\u6761\">\n <thy-icon thyIconName=\"angle-down\"></thy-icon>\n </button>\n </div>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <div class=\"header-operations\">\n <button thyButton=\"link-secondary\" thySize=\"md\" [thyPopover]=\"headerMoreMenu\" thyTrigger=\"click\" thyPlacement=\"bottomRight\">\n <thy-icon thyIconName=\"list\"></thy-icon>\n </button>\n\n <ng-template #headerMoreMenu>\n <div class=\"thy-dropdown-menu\">\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"deleteRecord()\">\n <thy-icon thyIconName=\"trash\"></thy-icon>\n <span>\u5220\u9664</span>\n </a>\n </div>\n </ng-template>\n\n <button thyButton=\"link-secondary\" thySize=\"md\" (click)=\"close()\" title=\"\u5173\u95ED\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </button>\n </div>\n </div>\n\n <div class=\"record-detail-body\">\n <div class=\"cell-list-viewport\">\n @for (field of fields(); track field._id) {\n <div\n class=\"px-5 pt-4 cell-item\"\n [class.active]=\"activeFieldId === field._id\"\n (mouseenter)=\"showFieldMenu(field._id)\"\n (mouseleave)=\"hideFieldMenu(field._id)\"\n >\n <div class=\"d-flex align-items-center justify-content-between mb-2 cell-header\">\n <div class=\"d-flex align-items-center cell-label\">\n <span class=\"d-flex align-items-center mr-2 text-muted font-size-md\">\n @if (fieldIconPath(field)) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n <path [attr.d]=\"fieldIconPath(field)\" fill=\"currentColor\"></path>\n </svg>\n }\n </span>\n <span class=\"d-flex align-items-center font-size-base text-secondary\">\n {{ field.name }}\n </span>\n </div>\n <div class=\"cell-operations\" [class.visible]=\"fieldMenuVisible[field._id]\">\n <button thyButton=\"link-secondary\" thySize=\"xs\" (click)=\"fieldMenuMoreClick($event, field._id)\">\n <thy-icon thyIconName=\"more-vertical\"></thy-icon>\n </button>\n </div>\n </div>\n\n <div class=\"dynamic-cell-editor\" (click)=\"fieldClick(field._id)\">\n <ai-dynamic-cell-editor\n [aiTable]=\"aiTable()\"\n [fieldId]=\"field._id\"\n [recordId]=\"currentRecordId()\"\n [references]=\"references()\"\n (updateFieldValues)=\"fieldValueChange($event)\"\n >\n </ai-dynamic-cell-editor>\n </div>\n </div>\n }\n </div>\n <div class=\"py-4 px-5\">\n <button class=\"p-0\" thyButton=\"link-secondary\" thySize=\"md\" (click)=\"addNewField($event)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n <span>\u65B0\u589E\u5B57\u6BB5</span>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: ThyButton, selector: "thy-button,[thy-button],[thyButton]", inputs: ["thyButton", "thyType", "thyLoading", "thyLoadingText", "thySize", "thyIcon", "thyBlock"] }, { 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: ThyPopoverDirective, selector: "[thyPopover]", inputs: ["thyPopover", "thyTrigger", "thyPlacement", "thyOffset", "thyConfig", "thyShowDelay", "thyHideDelay", "thyAutoAdaptive", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "component", type: DynamicCellEditorComponent, selector: "ai-dynamic-cell-editor", inputs: ["aiTable", "fieldId", "recordId", "references"], outputs: ["updateFieldValues"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12937
|
+
}
|
|
12938
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: RecordDetailComponent, decorators: [{
|
|
12939
|
+
type: Component,
|
|
12940
|
+
args: [{ selector: 'ai-record-detail', imports: [ThyButton, ThyIcon, ThyDivider, ThyPopoverDirective, ThyDropdownMenuItemDirective, DynamicCellEditorComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"d-flex flex-column ai-record-detail\">\n <div class=\"d-flex align-items-center justify-content-between px-5 record-detail-header\">\n <span class=\"record-title\" [title]=\"recordTitle()\">\n {{ recordTitle() }}\n </span>\n\n <div class=\"record-navigation\">\n <button\n thyButton=\"link-secondary\"\n thySize=\"md\"\n [disabled]=\"!recordNavigation()?.hasPrevious\"\n (click)=\"previousRecord()\"\n title=\"\u4E0A\u4E00\u6761\"\n >\n <thy-icon thyIconName=\"angle-up\"></thy-icon>\n </button>\n <button thyButton=\"link-secondary\" thySize=\"md\" [disabled]=\"!recordNavigation()?.hasNext\" (click)=\"nextRecord()\" title=\"\u4E0B\u4E00\u6761\">\n <thy-icon thyIconName=\"angle-down\"></thy-icon>\n </button>\n </div>\n <thy-divider [thyVertical]=\"true\"></thy-divider>\n <div class=\"header-operations\">\n <button thyButton=\"link-secondary\" thySize=\"md\" [thyPopover]=\"headerMoreMenu\" thyTrigger=\"click\" thyPlacement=\"bottomRight\">\n <thy-icon thyIconName=\"list\"></thy-icon>\n </button>\n\n <ng-template #headerMoreMenu>\n <div class=\"thy-dropdown-menu\">\n <a thyDropdownMenuItem href=\"javascript:;\" (click)=\"deleteRecord()\">\n <thy-icon thyIconName=\"trash\"></thy-icon>\n <span>\u5220\u9664</span>\n </a>\n </div>\n </ng-template>\n\n <button thyButton=\"link-secondary\" thySize=\"md\" (click)=\"close()\" title=\"\u5173\u95ED\">\n <thy-icon thyIconName=\"close\"></thy-icon>\n </button>\n </div>\n </div>\n\n <div class=\"record-detail-body\">\n <div class=\"cell-list-viewport\">\n @for (field of fields(); track field._id) {\n <div\n class=\"px-5 pt-4 cell-item\"\n [class.active]=\"activeFieldId === field._id\"\n (mouseenter)=\"showFieldMenu(field._id)\"\n (mouseleave)=\"hideFieldMenu(field._id)\"\n >\n <div class=\"d-flex align-items-center justify-content-between mb-2 cell-header\">\n <div class=\"d-flex align-items-center cell-label\">\n <span class=\"d-flex align-items-center mr-2 text-muted font-size-md\">\n @if (fieldIconPath(field)) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16px\" height=\"16px\" viewBox=\"0 0 16 16\">\n <path [attr.d]=\"fieldIconPath(field)\" fill=\"currentColor\"></path>\n </svg>\n }\n </span>\n <span class=\"d-flex align-items-center font-size-base text-secondary\">\n {{ field.name }}\n </span>\n </div>\n <div class=\"cell-operations\" [class.visible]=\"fieldMenuVisible[field._id]\">\n <button thyButton=\"link-secondary\" thySize=\"xs\" (click)=\"fieldMenuMoreClick($event, field._id)\">\n <thy-icon thyIconName=\"more-vertical\"></thy-icon>\n </button>\n </div>\n </div>\n\n <div class=\"dynamic-cell-editor\" (click)=\"fieldClick(field._id)\">\n <ai-dynamic-cell-editor\n [aiTable]=\"aiTable()\"\n [fieldId]=\"field._id\"\n [recordId]=\"currentRecordId()\"\n [references]=\"references()\"\n (updateFieldValues)=\"fieldValueChange($event)\"\n >\n </ai-dynamic-cell-editor>\n </div>\n </div>\n }\n </div>\n <div class=\"py-4 px-5\">\n <button class=\"p-0\" thyButton=\"link-secondary\" thySize=\"md\" (click)=\"addNewField($event)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n <span>\u65B0\u589E\u5B57\u6BB5</span>\n </button>\n </div>\n </div>\n</div>\n" }]
|
|
12941
|
+
}], ctorParameters: () => [] });
|
|
12942
|
+
|
|
12512
12943
|
class AITableGridEventService {
|
|
12513
12944
|
constructor() {
|
|
12514
12945
|
this.dblClickEvent$ = new Subject();
|
|
@@ -12746,50 +13177,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
12746
13177
|
type: Injectable
|
|
12747
13178
|
}] });
|
|
12748
13179
|
|
|
12749
|
-
class AITableFieldMenu extends ThyDropdownAbstractMenu {
|
|
12750
|
-
constructor() {
|
|
12751
|
-
super(...arguments);
|
|
12752
|
-
this.field = computed(() => {
|
|
12753
|
-
return this.aiTable.fields().find((item) => item._id === this.fieldId);
|
|
12754
|
-
});
|
|
12755
|
-
}
|
|
12756
|
-
getCustomComponent(menu) {
|
|
12757
|
-
return menu.customComponent?.(this.aiTable, this.field());
|
|
12758
|
-
}
|
|
12759
|
-
execute(menu) {
|
|
12760
|
-
if ((menu.disabled && !menu.disabled(this.aiTable, this.field)) || !menu.disabled) {
|
|
12761
|
-
menu.exec && menu.exec(this.aiTable, this.field, this.origin, this.position);
|
|
12762
|
-
}
|
|
12763
|
-
}
|
|
12764
|
-
getMenuName(menu, field) {
|
|
12765
|
-
if (typeof menu.name === 'function') {
|
|
12766
|
-
return menu.name(field);
|
|
12767
|
-
}
|
|
12768
|
-
return menu.name || '';
|
|
12769
|
-
}
|
|
12770
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFieldMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
12771
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.10", type: AITableFieldMenu, isStandalone: true, selector: "ai-table-field-menu", inputs: { fieldId: "fieldId", aiTable: "aiTable", fieldMenus: "fieldMenus", origin: "origin", position: "position" }, host: { classAttribute: "field-menu" }, usesInheritance: true, ngImport: i0, template: "@if (field()) {\n @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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n @let customComponent = getCustomComponent(menu);\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n @if (customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: { field: field(), menu: menu }\"> </ng-container>\n } @else {\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ getMenuName(menu, field()) }}</span>\n }\n </a>\n }\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"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12772
|
-
}
|
|
12773
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableFieldMenu, decorators: [{
|
|
12774
|
-
type: Component,
|
|
12775
|
-
args: [{ selector: 'ai-table-field-menu', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
12776
|
-
class: 'field-menu'
|
|
12777
|
-
}, imports: [ThyIcon, ThyDivider, ThyDropdownMenuItemDirective, NgClass, NgComponentOutlet], template: "@if (field()) {\n @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 @let disabled = !!(menu.disabled && menu.disabled(aiTable, field));\n @let isRemoveField = menu.type === 'removeField';\n @let customComponent = getCustomComponent(menu);\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'remove-field': isRemoveField && !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n @if (customComponent) {\n <ng-container *ngComponentOutlet=\"customComponent; inputs: { field: field(), menu: menu }\"> </ng-container>\n } @else {\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ getMenuName(menu, field()) }}</span>\n }\n </a>\n }\n }\n }\n}\n" }]
|
|
12778
|
-
}], propDecorators: { fieldId: [{
|
|
12779
|
-
type: Input,
|
|
12780
|
-
args: [{ required: true }]
|
|
12781
|
-
}], aiTable: [{
|
|
12782
|
-
type: Input,
|
|
12783
|
-
args: [{ required: true }]
|
|
12784
|
-
}], fieldMenus: [{
|
|
12785
|
-
type: Input,
|
|
12786
|
-
args: [{ required: true }]
|
|
12787
|
-
}], origin: [{
|
|
12788
|
-
type: Input
|
|
12789
|
-
}], position: [{
|
|
12790
|
-
type: Input
|
|
12791
|
-
}] } });
|
|
12792
|
-
|
|
12793
13180
|
const AI_TABLE_GRID_FIELD_SERVICE_MAP = new WeakMap();
|
|
12794
13181
|
class AITableGridFieldService {
|
|
12795
13182
|
constructor(thyPopover) {
|
|
@@ -12868,7 +13255,9 @@ class AITableGridBase {
|
|
|
12868
13255
|
});
|
|
12869
13256
|
this.aiTableInitialized = output();
|
|
12870
13257
|
this.aiAddRecord = output();
|
|
13258
|
+
this.aiRemoveRecord = output();
|
|
12871
13259
|
this.aiAddField = output();
|
|
13260
|
+
this.aiCopyRecords = output();
|
|
12872
13261
|
this.aiMoveField = output();
|
|
12873
13262
|
this.aiUpdateFieldValues = output();
|
|
12874
13263
|
this.aiSetField = output();
|
|
@@ -12932,6 +13321,14 @@ class AITableGridBase {
|
|
|
12932
13321
|
}
|
|
12933
13322
|
this.aiAddRecord.emit(options || {});
|
|
12934
13323
|
}
|
|
13324
|
+
copyRecords(options) {
|
|
13325
|
+
const records = this.aiTable.records();
|
|
13326
|
+
const recordCount = records.length;
|
|
13327
|
+
if (this.aiMaxRecords() && recordCount >= this.aiMaxRecords()) {
|
|
13328
|
+
return;
|
|
13329
|
+
}
|
|
13330
|
+
this.aiCopyRecords.emit(options);
|
|
13331
|
+
}
|
|
12935
13332
|
toggleSelectRecord(recordId) {
|
|
12936
13333
|
toggleSelectRecord(this.aiTable, recordId);
|
|
12937
13334
|
}
|
|
@@ -12976,7 +13373,7 @@ class AITableGridBase {
|
|
|
12976
13373
|
}
|
|
12977
13374
|
}
|
|
12978
13375
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridBase, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12979
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AITableGridBase, isStandalone: true, selector: "ai-table-grid-base", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, transformFunction: null }, aiContextMenuItems: { classPropertyName: "aiContextMenuItems", publicName: "aiContextMenuItems", isSignal: true, isRequired: false, transformFunction: null }, aiFieldConfig: { classPropertyName: "aiFieldConfig", publicName: "aiFieldConfig", isSignal: true, isRequired: false, transformFunction: null }, aiReadonly: { classPropertyName: "aiReadonly", publicName: "aiReadonly", isSignal: true, isRequired: false, transformFunction: null }, aiPlugins: { classPropertyName: "aiPlugins", publicName: "aiPlugins", isSignal: true, isRequired: false, transformFunction: null }, aiMaxFields: { classPropertyName: "aiMaxFields", publicName: "aiMaxFields", isSignal: true, isRequired: false, transformFunction: null }, aiMaxRecords: { classPropertyName: "aiMaxRecords", publicName: "aiMaxRecords", isSignal: true, isRequired: false, transformFunction: null }, aiMaxSelectOptions: { classPropertyName: "aiMaxSelectOptions", publicName: "aiMaxSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: true, transformFunction: null }, aiBuildRenderDataFn: { classPropertyName: "aiBuildRenderDataFn", publicName: "aiBuildRenderDataFn", isSignal: true, isRequired: false, transformFunction: null }, aiBuildGroupLinearRowsFn: { classPropertyName: "aiBuildGroupLinearRowsFn", publicName: "aiBuildGroupLinearRowsFn", isSignal: true, isRequired: false, transformFunction: null }, aiSortKeysMap: { classPropertyName: "aiSortKeysMap", publicName: "aiSortKeysMap", isSignal: true, isRequired: false, transformFunction: null }, aiGetI18nTextByKey: { classPropertyName: "aiGetI18nTextByKey", publicName: "aiGetI18nTextByKey", isSignal: true, isRequired: false, transformFunction: null }, aiKeywords: { classPropertyName: "aiKeywords", publicName: "aiKeywords", isSignal: true, isRequired: false, transformFunction: null }, aiFrozenColumnCountFn: { classPropertyName: "aiFrozenColumnCountFn", publicName: "aiFrozenColumnCountFn", isSignal: true, isRequired: false, transformFunction: null }, aiRecordHeight: { classPropertyName: "aiRecordHeight", publicName: "aiRecordHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", aiTableInitialized: "aiTableInitialized", aiAddRecord: "aiAddRecord", aiAddField: "aiAddField", aiMoveField: "aiMoveField", aiUpdateFieldValues: "aiUpdateFieldValues", aiSetField: "aiSetField", aiSetFieldWidth: "aiSetFieldWidth", aiSetFieldStatType: "aiSetFieldStatType", aiMoveRecords: "aiMoveRecords", aiClick: "aiClick", aiDbClick: "aiDbClick", aiRowGroupCollapseClick: "aiRowGroupCollapseClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13376
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.10", type: AITableGridBase, isStandalone: true, selector: "ai-table-grid-base", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, transformFunction: null }, aiContextMenuItems: { classPropertyName: "aiContextMenuItems", publicName: "aiContextMenuItems", isSignal: true, isRequired: false, transformFunction: null }, aiFieldConfig: { classPropertyName: "aiFieldConfig", publicName: "aiFieldConfig", isSignal: true, isRequired: false, transformFunction: null }, aiReadonly: { classPropertyName: "aiReadonly", publicName: "aiReadonly", isSignal: true, isRequired: false, transformFunction: null }, aiPlugins: { classPropertyName: "aiPlugins", publicName: "aiPlugins", isSignal: true, isRequired: false, transformFunction: null }, aiMaxFields: { classPropertyName: "aiMaxFields", publicName: "aiMaxFields", isSignal: true, isRequired: false, transformFunction: null }, aiMaxRecords: { classPropertyName: "aiMaxRecords", publicName: "aiMaxRecords", isSignal: true, isRequired: false, transformFunction: null }, aiMaxSelectOptions: { classPropertyName: "aiMaxSelectOptions", publicName: "aiMaxSelectOptions", isSignal: true, isRequired: false, transformFunction: null }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: true, transformFunction: null }, aiBuildRenderDataFn: { classPropertyName: "aiBuildRenderDataFn", publicName: "aiBuildRenderDataFn", isSignal: true, isRequired: false, transformFunction: null }, aiBuildGroupLinearRowsFn: { classPropertyName: "aiBuildGroupLinearRowsFn", publicName: "aiBuildGroupLinearRowsFn", isSignal: true, isRequired: false, transformFunction: null }, aiSortKeysMap: { classPropertyName: "aiSortKeysMap", publicName: "aiSortKeysMap", isSignal: true, isRequired: false, transformFunction: null }, aiGetI18nTextByKey: { classPropertyName: "aiGetI18nTextByKey", publicName: "aiGetI18nTextByKey", isSignal: true, isRequired: false, transformFunction: null }, aiKeywords: { classPropertyName: "aiKeywords", publicName: "aiKeywords", isSignal: true, isRequired: false, transformFunction: null }, aiFrozenColumnCountFn: { classPropertyName: "aiFrozenColumnCountFn", publicName: "aiFrozenColumnCountFn", isSignal: true, isRequired: false, transformFunction: null }, aiRecordHeight: { classPropertyName: "aiRecordHeight", publicName: "aiRecordHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", aiTableInitialized: "aiTableInitialized", aiAddRecord: "aiAddRecord", aiRemoveRecord: "aiRemoveRecord", aiAddField: "aiAddField", aiCopyRecords: "aiCopyRecords", aiMoveField: "aiMoveField", aiUpdateFieldValues: "aiUpdateFieldValues", aiSetField: "aiSetField", aiSetFieldWidth: "aiSetFieldWidth", aiSetFieldStatType: "aiSetFieldStatType", aiMoveRecords: "aiMoveRecords", aiClick: "aiClick", aiDbClick: "aiDbClick", aiRowGroupCollapseClick: "aiRowGroupCollapseClick" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
12980
13377
|
}
|
|
12981
13378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGridBase, decorators: [{
|
|
12982
13379
|
type: Component,
|
|
@@ -13231,6 +13628,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImpo
|
|
|
13231
13628
|
type: Injectable
|
|
13232
13629
|
}], ctorParameters: () => [{ type: i0.NgZone }] });
|
|
13233
13630
|
|
|
13631
|
+
class RecordDetailService {
|
|
13632
|
+
constructor() {
|
|
13633
|
+
this.thySlide = inject(ThySlideService);
|
|
13634
|
+
this.currentSlideRef = null;
|
|
13635
|
+
this.clickSubscription = null;
|
|
13636
|
+
this.config = null;
|
|
13637
|
+
}
|
|
13638
|
+
open(config) {
|
|
13639
|
+
if (this.isOpen()) {
|
|
13640
|
+
this.currentSlideRef?.componentInstance.setSelection(config.recordId);
|
|
13641
|
+
return this.currentSlideRef;
|
|
13642
|
+
}
|
|
13643
|
+
this.config = config;
|
|
13644
|
+
this.currentSlideRef = this.thySlide.open(RecordDetailComponent, {
|
|
13645
|
+
from: 'right',
|
|
13646
|
+
width: '480px',
|
|
13647
|
+
hasBackdrop: false,
|
|
13648
|
+
panelClass: 'ai-expand-record-slide',
|
|
13649
|
+
initialState: {
|
|
13650
|
+
aiTable: config.aiTable,
|
|
13651
|
+
recordId: config.recordId,
|
|
13652
|
+
references: config.references,
|
|
13653
|
+
actions: config.actions
|
|
13654
|
+
}
|
|
13655
|
+
});
|
|
13656
|
+
if (this.currentSlideRef) {
|
|
13657
|
+
this.currentSlideRef.afterOpened().subscribe(() => {
|
|
13658
|
+
this.setupDocumentClickListener(config);
|
|
13659
|
+
});
|
|
13660
|
+
this.currentSlideRef.afterClosed().subscribe(() => {
|
|
13661
|
+
this.close();
|
|
13662
|
+
});
|
|
13663
|
+
}
|
|
13664
|
+
return this.currentSlideRef;
|
|
13665
|
+
}
|
|
13666
|
+
close() {
|
|
13667
|
+
this.currentSlideRef?.close();
|
|
13668
|
+
if (this.clickSubscription) {
|
|
13669
|
+
this.clickSubscription.unsubscribe();
|
|
13670
|
+
this.clickSubscription = null;
|
|
13671
|
+
}
|
|
13672
|
+
this.currentSlideRef = null;
|
|
13673
|
+
if (this.config) {
|
|
13674
|
+
clearSelection(this.config.aiTable);
|
|
13675
|
+
this.config = null;
|
|
13676
|
+
}
|
|
13677
|
+
}
|
|
13678
|
+
isOpen() {
|
|
13679
|
+
return this.currentSlideRef !== null;
|
|
13680
|
+
}
|
|
13681
|
+
isClickInsideTableOrPanel(event, viewContainerRef) {
|
|
13682
|
+
const target = event.target;
|
|
13683
|
+
const tableElement = viewContainerRef.element.nativeElement;
|
|
13684
|
+
if (tableElement && tableElement.contains(target)) {
|
|
13685
|
+
return true;
|
|
13686
|
+
}
|
|
13687
|
+
const overlayContainers = document.querySelectorAll('.cdk-overlay-container');
|
|
13688
|
+
for (let i = 0; i < overlayContainers.length; i++) {
|
|
13689
|
+
if (overlayContainers[i].contains(target)) {
|
|
13690
|
+
return true;
|
|
13691
|
+
}
|
|
13692
|
+
}
|
|
13693
|
+
return false;
|
|
13694
|
+
}
|
|
13695
|
+
setupDocumentClickListener(config) {
|
|
13696
|
+
if (this.clickSubscription) {
|
|
13697
|
+
this.clickSubscription.unsubscribe();
|
|
13698
|
+
this.clickSubscription = null;
|
|
13699
|
+
}
|
|
13700
|
+
this.clickSubscription = fromEvent(document, 'click').subscribe((event) => {
|
|
13701
|
+
if (!this.isClickInsideTableOrPanel(event, config.viewContainerRef)) {
|
|
13702
|
+
this.close();
|
|
13703
|
+
}
|
|
13704
|
+
});
|
|
13705
|
+
}
|
|
13706
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: RecordDetailService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
13707
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: RecordDetailService }); }
|
|
13708
|
+
}
|
|
13709
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: RecordDetailService, decorators: [{
|
|
13710
|
+
type: Injectable
|
|
13711
|
+
}] });
|
|
13712
|
+
|
|
13234
13713
|
class AITableDragComponent {
|
|
13235
13714
|
constructor() {
|
|
13236
13715
|
this.horizontalBar = input();
|
|
@@ -13699,6 +14178,7 @@ class AITableGrid extends AITableGridBase {
|
|
|
13699
14178
|
};
|
|
13700
14179
|
this.notifyService = inject(ThyNotifyService);
|
|
13701
14180
|
this.scrollControllerService = inject(AITableScrollControllerService);
|
|
14181
|
+
this.recordDetailService = inject(RecordDetailService);
|
|
13702
14182
|
this.isPopoverOpen = false;
|
|
13703
14183
|
this.fieldHeadHeight = AI_TABLE_FIELD_HEAD_HEIGHT;
|
|
13704
14184
|
this.containerRect = signal({ width: 0, height: 0 });
|
|
@@ -13856,6 +14336,12 @@ class AITableGrid extends AITableGridBase {
|
|
|
13856
14336
|
},
|
|
13857
14337
|
addRecord: (data) => {
|
|
13858
14338
|
this.addRecord(data);
|
|
14339
|
+
},
|
|
14340
|
+
copyRecords: (data) => {
|
|
14341
|
+
this.copyRecords(data);
|
|
14342
|
+
},
|
|
14343
|
+
removeRecord: (data) => {
|
|
14344
|
+
this.aiRemoveRecord.emit([data]);
|
|
13859
14345
|
}
|
|
13860
14346
|
};
|
|
13861
14347
|
this.scrollAction = (options) => {
|
|
@@ -14319,6 +14805,15 @@ class AITableGrid extends AITableGridBase {
|
|
|
14319
14805
|
}
|
|
14320
14806
|
break;
|
|
14321
14807
|
}
|
|
14808
|
+
case AI_TABLE_EXPAND_RECORD_ICON: {
|
|
14809
|
+
this.recordDetailService.open({
|
|
14810
|
+
viewContainerRef: this.viewContainerRef,
|
|
14811
|
+
aiTable: this.aiTable,
|
|
14812
|
+
recordId: targetNameDetail.recordId,
|
|
14813
|
+
references: this.aiReferences(),
|
|
14814
|
+
actions: this.actions
|
|
14815
|
+
});
|
|
14816
|
+
}
|
|
14322
14817
|
}
|
|
14323
14818
|
return;
|
|
14324
14819
|
}
|
|
@@ -14764,18 +15259,18 @@ class AITableGrid extends AITableGridBase {
|
|
|
14764
15259
|
});
|
|
14765
15260
|
}
|
|
14766
15261
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14767
|
-
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, 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]=\"domToolTip.tooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n [style.height.px]=\"domToolTip.height\"\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 }); }
|
|
15262
|
+
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, AITableScrollControllerService, RecordDetailService], 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]=\"domToolTip.tooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n [style.height.px]=\"domToolTip.height\"\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 }); }
|
|
14768
15263
|
}
|
|
14769
15264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.10", ngImport: i0, type: AITableGrid, decorators: [{
|
|
14770
15265
|
type: Component,
|
|
14771
15266
|
args: [{ selector: 'ai-table-grid', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
14772
15267
|
class: 'ai-table-grid'
|
|
14773
|
-
}, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService, 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]=\"domToolTip.tooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n [style.height.px]=\"domToolTip.height\"\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" }]
|
|
15268
|
+
}, imports: [AITableRenderer, AITableDragComponent, ThyTooltipDirective, ThyIcon], providers: [AITableGridEventService, AITableGridFieldService, AITableScrollControllerService, RecordDetailService], 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]=\"domToolTip.tooltip\"\n [style.--scroll-top.px]=\"domToolTip.top\"\n [style.height.px]=\"domToolTip.height\"\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" }]
|
|
14774
15269
|
}], ctorParameters: () => [] });
|
|
14775
15270
|
|
|
14776
15271
|
/**
|
|
14777
15272
|
* Generated bundle index. Do not edit.
|
|
14778
15273
|
*/
|
|
14779
15274
|
|
|
14780
|
-
export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenGroups, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableGroups, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderAtomType, AITableRenderer, AITableRowType, AITableScrollableGroup, AITableSelectAllState, AITableShadow, 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_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_DEFAULT_LINE_SPACING, AI_TABLE_CELL_MULTI_ITEM_DEFAULT_MIN_WIDTH, 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_MULTI_SELECT_ITEM_DOT_MIN_WIDTH, AI_TABLE_CELL_MULTI_SELECT_ITEM_PIECE_MIN_WIDTH, AI_TABLE_CELL_MULTI_SELECT_ITEM_TAG_MIN_WIDTH, 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_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_FILE_ITEM_MARGIN_RIGHT, AI_TABLE_FILL_HANDLE, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_GROUP_MAX_LEVEL, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_INDEX_FIELD_TEXT, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MEMBER_ITEM_PADDING_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_OPTION_MULTI_ITEM_FONT_SIZE, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_RATE_MAX, AI_TABLE_RECORD_HEIGHT_LEVELS, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_DRAG, AI_TABLE_ROW_DRAG_ICON_WIDTH, AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON, AI_TABLE_ROW_GROUP_OFFSET, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_SCROLL_BAR_SIZE, AI_TABLE_SHADOW_DEFAULT_WIDTH, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AI_TABLE_TEXT_LINE_HEIGHT, AbstractEditCellEditor, AddOutlinedPath, AngleDownPath, AngleRightPath, AttachmentField, AttachmentPath, CellBaseLayout, CellDrawer, Check, CheckboxMenuSort, Colors, ColumnCalendarFilledPath, ColumnCheckboxFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellBase, DBL_CLICK_EDIT_TYPE, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_ICON_SHAPE, DEFAULT_ICON_SIZE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_ELLIPSIS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_LISTENING, DEFAULT_TEXT_MAX_CACHE, DEFAULT_TEXT_MAX_HEIGHT, DEFAULT_TEXT_SCALE, DEFAULT_TEXT_TRANSFORMS_ENABLED, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, DEFAULT_TEXT_VERTICAL_ALIGN_TOP, DEFAULT_TEXT_WRAP, DEFAULT_WRAP_TEXT_MAX_ROW, DateCellEditorComponent, DateField, DepartmentOutlinedPath, Drawer, EditPath, FONT_SIZE_SM, FieldModelMap, GROUP_STAT_DEFAULT_FONT_SIZE, 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, buildGridLinearRows, buildNormalLinearRows, castToString, cellDrawer, clearCells, clearCoverCell, clearSelectedCells, clearSelection, clearSelectionFields, clearSelectionRecords, closeEditingCell, closeExpendCell, compareNumber, compareOption, compareString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, createListener, dragFillHighlightArea, drawer, expandCell, extractLinkUrl, extractText, generateNewFieldName, generateNewName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesSizeMap, getCoverCell, getDateFieldValues, getDefaultFieldOptions, getDefaultI18nTextByKey, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldOptionByField, getFieldOptionMap, getFieldOptions, getFieldValue, getFileThumbnailSvgString, getFillDirection, getGroupLastRecordIndex, getHoverEditorBoxOffset, getHoverEditorSpace, getI18nTextByKey, getMousePosition, getName, getOptionsByFieldAndRecords, getPlaceHolderCellsConfigs, getStartAndEndCell, getSystemFieldValue, getTargetName, getTextWidth, getVisibleRangeInfo, graphemeSplitter, handleMouseStyle, hasIntersect, idCreator, idsCreator, imageCache, isActiveCell, isCellMatchKeywords, isClipboardReadSupported, isClipboardReadTextSupported, isClipboardWriteSupported, isClipboardWriteTextSupported, isEmptyOrNot, isMac, isMeetFilter, isSameFieldOption, isSelectedField, isSystemField, isVirtualKey, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, performFill, processPastedValueForSelect, readFromClipboard, scrollMax, scrollToMatchedCell, selectCells, selectField, setActiveCell, setCollapseDisabled, setEditingCell, setExpandCellInfo, setMouseStyle, setSelection, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, toggleSelectAllRecords, toggleSelectRecord, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
|
|
15275
|
+
export { AITable, AITableActionIcon, AITableAddField, AITableAreaType, AITableAvatarSize, AITableAvatarType, AITableBackground, AITableCellAttachment, AITableCellCheckbox, AITableCellLink, AITableCellProgress, AITableCellRate, AITableCellRichText, AITableCellText, AITableCells, AITableCheckType, AITableColumnHeads, AITableContextMenu, AITableDomGrid, AITableExpandRecord, AITableFieldHead, AITableFieldIcon, AITableFieldIsSameOptionPipe, AITableFieldSetting, AITableFrozenCells, AITableFrozenColumnHeads, AITableFrozenGroups, AITableFrozenPlaceholderCells, AITableGrid, AITableGridEventService, AITableGridFieldService, AITableGridI18nKey, AITableGridI18nText, AITableGroups, AITableHoverRowHeads, AITableIcon, AITableMemberType, AITableMouseDownType, AITableOtherRows, AITablePlaceholderCells, AITableQueries, AITableRenderAtomType, AITableRenderer, AITableRowType, AITableScrollableGroup, AITableSelectAllState, AITableShadow, 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_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_DEFAULT_LINE_SPACING, AI_TABLE_CELL_MULTI_ITEM_DEFAULT_MIN_WIDTH, 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_MULTI_SELECT_ITEM_DOT_MIN_WIDTH, AI_TABLE_CELL_MULTI_SELECT_ITEM_PIECE_MIN_WIDTH, AI_TABLE_CELL_MULTI_SELECT_ITEM_TAG_MIN_WIDTH, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DEFAULT_COLUMN_WIDTH, AI_TABLE_DOT_RADIUS, AI_TABLE_EXPAND_RECORD_ICON, 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_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_FILE_ITEM_MARGIN_RIGHT, AI_TABLE_FILL_HANDLE, AI_TABLE_GRID_FIELD_SERVICE_MAP, AI_TABLE_GROUP_MAX_LEVEL, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_INDEX_FIELD_TEXT, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MEMBER_ITEM_PADDING_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_OPTION_MULTI_ITEM_FONT_SIZE, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_POPOVER_LEFT_OFFSET, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_HEIGHT, AI_TABLE_PROGRESS_BAR_POINTER_WIDTH, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_RATE_MAX, AI_TABLE_RECORD_HEIGHT_LEVELS, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_ROW_DRAG, AI_TABLE_ROW_DRAG_ICON_WIDTH, AI_TABLE_ROW_GROUP_COLLAPSE_BUTTON, AI_TABLE_ROW_GROUP_OFFSET, AI_TABLE_ROW_HEAD, AI_TABLE_ROW_HEAD_SIZE, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_HEAD_WIDTH_AND_DRAG_ICON_WIDTH, AI_TABLE_ROW_HEIGHT, AI_TABLE_ROW_SELECT_CHECKBOX, AI_TABLE_SCROLL_BAR_PADDING, AI_TABLE_SCROLL_BAR_SIZE, AI_TABLE_SHADOW_DEFAULT_WIDTH, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, AI_TABLE_TEXT_LINE_HEIGHT, AbstractEditCellEditor, AddOutlinedPath, AngleDownPath, AngleRightPath, AttachmentField, AttachmentPath, CellBaseLayout, CellDrawer, Check, CheckboxMenuSort, Colors, ColumnCalendarFilledPath, ColumnCheckboxFilledPath, ColumnLinkOutlinedPath, ColumnMemberFilledPath, ColumnMultipleFillPath, ColumnNumberFilledPath, ColumnProgressFilledPath, ColumnRatingFilledPath, ColumnRichTextFilledPath, ColumnSelectFilledPath, ColumnTextFilledPath, Coordinate, CoverCellBase, DBL_CLICK_EDIT_TYPE, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_STYLE, DEFAULT_FONT_WEIGHT, DEFAULT_ICON_SHAPE, DEFAULT_ICON_SIZE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_ELLIPSIS, DEFAULT_TEXT_FILL, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_LISTENING, DEFAULT_TEXT_MAX_CACHE, DEFAULT_TEXT_MAX_HEIGHT, DEFAULT_TEXT_SCALE, DEFAULT_TEXT_TRANSFORMS_ENABLED, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, DEFAULT_TEXT_VERTICAL_ALIGN_TOP, DEFAULT_TEXT_WRAP, DEFAULT_WRAP_TEXT_MAX_ROW, DateCellEditorComponent, DateField, DepartmentOutlinedPath, Drawer, DynamicCellEditorComponent, EditPath, ExpandRecordPath, FONT_SIZE_SM, FieldModelMap, GROUP_STAT_DEFAULT_FONT_SIZE, IconPathMap, IsSelectRecordPipe, KO_CONTAINER_TOKEN, KoComponent, KoContainer, KoShape, KoShapeTypes, KoStage, LinkCellEditorComponent, LinkField, MIN_COLUMN_WIDTH, MemberField, MemberSettingPipe, MoreStandOutlinedPath, NumberCellEditorComponent, NumberField, ProgressField, RateField, RecordDetailComponent, RecordDetailService, RendererContext, RichTextField, RowDragPath, RowHeight, SelectCellEditorComponent, SelectField, SelectOptionComponent, SelectOptionPipe, SelectOptionsPipe, SelectSettingPipe, StarFill, TextCellEditorComponent, TextField, TextMeasure, Unchecked, UserPipe, WebOutlinedPath, aiTableFragmentAttribute, aiTableImageConfigToKonvaConfig, aiTableRectConfigToKonvaConfig, aiTableTextConfigToKonvaConfig, applyNodeProps, buildClipboardData, buildGridLinearRows, buildNormalLinearRows, castToString, cellDrawer, clearCells, clearCoverCell, clearSelectedCells, clearSelection, clearSelectionFields, clearSelectionRecords, closeEditingCell, closeExpendCell, compareNumber, compareOption, compareString, createAITable, createActiveCellBorder, createCells, createDefaultField, createDefaultFieldName, createListener, dragFillHighlightArea, drawer, expandCell, extractLinkUrl, extractText, generateNewFieldName, generateNewName, generateTargetName, getAvatarBgColor, getAvatarShortName, getCellEditorBorderSpace, getCellHorizontalPosition, getColumnIndicesSizeMap, getCoverCell, getDateFieldValues, getDefaultFieldOptions, getDefaultI18nTextByKey, getDetailByTargetName, getEditorBoxOffset, getEditorSpace, getFieldIconPath, getFieldOptionByField, getFieldOptionMap, getFieldOptions, getFieldValue, getFileThumbnailSvgString, getFillDirection, getGroupLastRecordIndex, getHoverEditorBoxOffset, getHoverEditorSpace, getI18nTextByKey, getMousePosition, getName, getNextRecordByActiveCell, getOptionsByFieldAndRecords, getPlaceHolderCellsConfigs, getPreviousRecordByActiveCell, getRecordNavigationInfo, getStartAndEndCell, getSystemFieldValue, getTargetName, getTextWidth, getVisibleRangeInfo, graphemeSplitter, handleMouseStyle, hasIntersect, idCreator, idsCreator, imageCache, isActiveCell, isCellMatchKeywords, isClipboardReadSupported, isClipboardReadTextSupported, isClipboardWriteSupported, isClipboardWriteTextSupported, isEmptyOrNot, isMac, isMeetFilter, isSameFieldOption, isSelectedField, isSystemField, isVirtualKey, isWindows, isWindowsOS, isWithinFrozenColumnBoundary, performFill, processPastedValueForSelect, readFromClipboard, scrollMax, scrollToMatchedCell, selectCells, selectField, setActiveCell, setCollapseDisabled, setEditingCell, setExpandCellInfo, setMouseStyle, setSelection, shortIdCreator, shortIdsCreator, statDateRangeOfDays, statDateRangeOfMonths, statEarliestTime, statLatestTime, stringInclude, textDataCache, toAttachmentFieldValue, toDateFieldValue, toLinkFieldValue, toMemberFieldValue, toNumberFieldValue, toProgressFieldValue, toRateFieldValue, toRichTextFieldValue, toSelectFieldValue, toTextFieldValue, toggleSelectAllRecords, toggleSelectRecord, transformToCellText, updatePicture, writeToAITable, writeToClipboard, zhIntlCollator };
|
|
14781
15276
|
//# sourceMappingURL=ai-table-grid.mjs.map
|