@ai-table/grid 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- package/core/utils/field.d.ts +2 -2
- package/core/utils/field.d.ts.map +1 -1
- package/esm2022/core/utils/field.mjs +5 -2
- package/esm2022/core/utils/record.mjs +2 -2
- package/esm2022/grid.component.mjs +3 -3
- package/esm2022/utils/build.mjs +2 -7
- package/fesm2022/ai-table-grid.mjs +8 -10
- package/fesm2022/ai-table-grid.mjs.map +1 -1
- package/package.json +1 -1
- package/utils/build.d.ts.map +1 -1
package/core/utils/field.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import { AITable, AITableFieldType } from '../types';
|
2
|
-
export declare function getDefaultFieldValue(
|
1
|
+
import { AITable, AITableField, AITableFieldType } from '../types';
|
2
|
+
export declare function getDefaultFieldValue(field: AITableField): "" | never[];
|
3
3
|
export declare function createDefaultFieldName(aiTable: AITable, type?: AITableFieldType): string;
|
4
4
|
export declare function createDefaultField(aiTable: AITable, type?: AITableFieldType): {
|
5
5
|
_id: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../../packages/grid/src/core/utils/field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../../packages/grid/src/core/utils/field.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGnE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,gBAKvD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAwC,UAItG;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,gBAAwC;;;;EAElG"}
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { FieldsMap } from '../constants/field';
|
2
2
|
import { AITableFieldType } from '../types';
|
3
3
|
import { idCreator } from './id-creator';
|
4
|
-
export function getDefaultFieldValue(
|
4
|
+
export function getDefaultFieldValue(field) {
|
5
|
+
if ([AITableFieldType.member, AITableFieldType.createdBy, AITableFieldType.updatedBy].includes(field.type)) {
|
6
|
+
return [];
|
7
|
+
}
|
5
8
|
return '';
|
6
9
|
}
|
7
10
|
export function createDefaultFieldName(aiTable, type = AITableFieldType.text) {
|
@@ -12,4 +15,4 @@ export function createDefaultFieldName(aiTable, type = AITableFieldType.text) {
|
|
12
15
|
export function createDefaultField(aiTable, type = AITableFieldType.text) {
|
13
16
|
return { _id: idCreator(), type, name: createDefaultFieldName(aiTable, type) };
|
14
17
|
}
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb3JlL3V0aWxzL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQXlCLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQW1CO0lBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6RyxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBZ0IsRUFBRSxPQUF5QixnQkFBZ0IsQ0FBQyxJQUFJO0lBQ25HLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRSxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBZ0IsRUFBRSxPQUF5QixnQkFBZ0IsQ0FBQyxJQUFJO0lBQy9GLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNuRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmllbGRzTWFwIH0gZnJvbSAnLi4vY29uc3RhbnRzL2ZpZWxkJztcbmltcG9ydCB7IEFJVGFibGUsIEFJVGFibGVGaWVsZCwgQUlUYWJsZUZpZWxkVHlwZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGlkQ3JlYXRvciB9IGZyb20gJy4vaWQtY3JlYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmllbGRWYWx1ZShmaWVsZDogQUlUYWJsZUZpZWxkKSB7XG4gICAgaWYgKFtBSVRhYmxlRmllbGRUeXBlLm1lbWJlciwgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnksIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5XS5pbmNsdWRlcyhmaWVsZC50eXBlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRGaWVsZE5hbWUoYWlUYWJsZTogQUlUYWJsZSwgdHlwZTogQUlUYWJsZUZpZWxkVHlwZSA9IEFJVGFibGVGaWVsZFR5cGUudGV4dCkge1xuICAgIGNvbnN0IGZpZWxkcyA9IGFpVGFibGUuZmllbGRzKCk7XG4gICAgY29uc3QgY291bnQgPSBmaWVsZHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgPT09IHR5cGUpLmxlbmd0aDtcbiAgICByZXR1cm4gY291bnQgPT09IDAgPyBGaWVsZHNNYXBbdHlwZV0ubmFtZSA6IEZpZWxkc01hcFt0eXBlXS5uYW1lICsgY291bnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0RmllbGQoYWlUYWJsZTogQUlUYWJsZSwgdHlwZTogQUlUYWJsZUZpZWxkVHlwZSA9IEFJVGFibGVGaWVsZFR5cGUudGV4dCkge1xuICAgIHJldHVybiB7IF9pZDogaWRDcmVhdG9yKCksIHR5cGUsIG5hbWU6IGNyZWF0ZURlZmF1bHRGaWVsZE5hbWUoYWlUYWJsZSwgdHlwZSkgfTtcbn1cbiJdfQ==
|
@@ -6,8 +6,8 @@ export function getDefaultRecord(fields) {
|
|
6
6
|
values: {}
|
7
7
|
};
|
8
8
|
fields.map((item) => {
|
9
|
-
newRow.values[item._id] = getDefaultFieldValue(item
|
9
|
+
newRow.values[item._id] = getDefaultFieldValue(item);
|
10
10
|
});
|
11
11
|
return newRow;
|
12
12
|
}
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvY29yZS91dGlscy9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQXFCO0lBQ2xELE1BQU0sTUFBTSxHQUFrQjtRQUMxQixHQUFHLEVBQUUsU0FBUyxFQUFFO1FBQ2hCLE1BQU0sRUFBRSxFQUFFO0tBQ2IsQ0FBQztJQUNGLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNoQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBSVRhYmxlRmllbGRzLCBBSVRhYmxlUmVjb3JkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEZpZWxkVmFsdWUgfSBmcm9tICcuL2ZpZWxkJztcbmltcG9ydCB7IGlkQ3JlYXRvciB9IGZyb20gJy4vaWQtY3JlYXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0UmVjb3JkKGZpZWxkczogQUlUYWJsZUZpZWxkcykge1xuICAgIGNvbnN0IG5ld1JvdzogQUlUYWJsZVJlY29yZCA9IHtcbiAgICAgICAgX2lkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdmFsdWVzOiB7fVxuICAgIH07XG4gICAgZmllbGRzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBuZXdSb3cudmFsdWVzW2l0ZW0uX2lkXSA9IGdldERlZmF1bHRGaWVsZFZhbHVlKGl0ZW0pO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdSb3c7XG59XG4iXX0=
|
@@ -143,7 +143,7 @@ export class AITableGrid {
|
|
143
143
|
}
|
144
144
|
}
|
145
145
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AITableGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
146
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, 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 }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", onChange: "onChange", aiTableInitialized: "aiTableInitialized" }, host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color!\">{{ selectedOption.text }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n @case (AITableFieldType.updatedBy) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: FieldMenu, selector: "field-menu", inputs: ["fieldId", "aiTable", "fieldMenus", "origin"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: ThyDropdownDirective, selector: "[thyDropdown]", inputs: ["thyDropdownMenu", "thyDropdown", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyActiveClass", "thyPopoverOptions", "thyPlacement", "thyMenuInsideClosable", "thyPanelClass"], outputs: ["thyActiveChange"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
146
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, 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 }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", onChange: "onChange", aiTableInitialized: "aiTableInitialized" }, host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color! || selectedOption!.bg_color! || 'default'\">{{\n selectedOption.text\n }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: FieldMenu, selector: "field-menu", inputs: ["fieldId", "aiTable", "fieldMenus", "origin"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: ThyDropdownDirective, selector: "[thyDropdown]", inputs: ["thyDropdownMenu", "thyDropdown", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyActiveClass", "thyPopoverOptions", "thyPlacement", "thyMenuInsideClosable", "thyPanelClass"], outputs: ["thyActiveChange"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
147
147
|
}
|
148
148
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AITableGrid, decorators: [{
|
149
149
|
type: Component,
|
@@ -174,6 +174,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
174
174
|
ThyAvatarModule,
|
175
175
|
NgTemplateOutlet,
|
176
176
|
IsSelectRecordPipe
|
177
|
-
], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color
|
177
|
+
], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color! || selectedOption!.bg_color! || 'default'\">{{\n selectedOption.text\n }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n" }]
|
178
178
|
}] });
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUYsT0FBTyxFQUNILE9BQU8sRUFLUCxnQkFBZ0IsRUFFaEIsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDbkIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQXNDcEQsTUFBTSxPQUFPLFdBQVc7SUFwQ3hCO1FBcUNJLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFrQixDQUFDO1FBRTdDLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFpQixDQUFDO1FBRTNDLGtCQUFhLEdBQUcsS0FBSyxFQUFpQixDQUFDO1FBRXZDLGVBQVUsR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUU5QixjQUFTLEdBQUcsS0FBSyxFQUFjLENBQUM7UUFFaEMsaUJBQVksR0FBRyxLQUFLLEVBQXFCLENBQUM7UUFFMUMscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFJcEMsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7UUFFSCxhQUFRLEdBQUcsTUFBTSxFQUF3QixDQUFDO1FBRTFDLHVCQUFrQixHQUFHLE1BQU0sRUFBVyxDQUFDO1FBTXZDLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7UUFFSyxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyw0QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMxRCw0QkFBdUIsR0FBRyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRCxnQ0FBMkIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQXNHNUU7SUFwR0csUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN2QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2FBQ2hDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDckUsK0JBQStCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxVQUFVLElBQUksaUJBQWlCLENBQUM7SUFDNUUsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsWUFBWSxDQUFDLFFBQWdCO1FBQ3pCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFnQjtRQUM1QixJQUFJLENBQUMsMkJBQTJCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxRQUFRLENBQUMsZUFBNEI7UUFDakMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN0RyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLGVBQWU7aUJBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN4RyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUMsQ0FBQztZQUVQLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN2RyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0csSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sUUFBUSxDQUFDLEtBQWlCO1FBQzlCLE1BQU0sT0FBTyxHQUFJLEtBQUssQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQWdCLENBQUM7UUFDbkYsTUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFLLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUF1QixDQUFDO1FBQzVFLE1BQU0sUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBQzlELElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBaUI7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMvQixDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBZ0IsQ0FBQztRQUNuRixNQUFNLElBQUksR0FBRyxPQUFPLElBQUssT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQXVCLENBQUM7UUFDNUUsSUFBSSxJQUFJLElBQUksbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsQ0FBYTtRQUN0QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFLLENBQUMsQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hGLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUssQ0FBQyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQzs4R0EzSVEsV0FBVztrR0FBWCxXQUFXLHFpQ0FGVCxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDLDBCQ3ZGOUYsZzJRQStKK0MsNENEaEd2QyxPQUFPLG1GQUVQLFlBQVksbUhBQ1osV0FBVywwVkFDWCxnQkFBZ0IscURBQ2hCLE1BQU0sK0lBQ04sZ0JBQWdCLCtCQUNoQixPQUFPLHNNQUNQLE9BQU8sOExBQ1AsV0FBVyxxTEFFWCx1QkFBdUIsNERBQ3ZCLGVBQWUsbU9BQ2YsMkJBQTJCLGlHQUMzQixTQUFTLCtHQUNULFNBQVMsZ01BQ1Qsb0JBQW9CLG1SQUNwQix3QkFBd0IseUdBQ3hCLGlCQUFpQixnS0FFakIsZUFBZSw0WkFFZixrQkFBa0I7OzJGQUliLFdBQVc7a0JBcEN2QixTQUFTOytCQUNJLGVBQWUsY0FFYixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsS0FBSyxFQUFFLGVBQWU7cUJBQ3pCLFdBQ1E7d0JBQ0wsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLGlCQUFpQjt3QkFDakIsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsTUFBTTt3QkFDTixnQkFBZ0I7d0JBQ2hCLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxXQUFXO3dCQUNYLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2QixlQUFlO3dCQUNmLDJCQUEyQjt3QkFDM0IsU0FBUzt3QkFDVCxTQUFTO3dCQUNULG9CQUFvQjt3QkFDcEIsd0JBQXdCO3dCQUN4QixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGtCQUFrQjtxQkFDckIsYUFDVSxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBOZ0NsYXNzLCBOZ0NvbXBvbmVudE91dGxldCwgTmdGb3JPZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG1vZGVsLFxuICAgIE5nWm9uZSxcbiAgICBPbkluaXQsXG4gICAgb3V0cHV0LFxuICAgIHNpZ25hbFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5QWN0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9hY3Rpb24nO1xuaW1wb3J0IHsgVGh5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2NoZWNrYm94JztcbmltcG9ydCB7IFRoeURhdGVQaWNrZXJGb3JtYXRQaXBlIH0gZnJvbSAnbmd4LXRldGh5cy9kYXRlLXBpY2tlcic7XG5pbXBvcnQgeyBUaHlEcm9wZG93bkRpcmVjdGl2ZSwgVGh5RHJvcGRvd25NZW51Q29tcG9uZW50IH0gZnJvbSAnbmd4LXRldGh5cy9kcm9wZG93bic7XG5pbXBvcnQgeyBUaHlGbGV4aWJsZVRleHQgfSBmcm9tICduZ3gtdGV0aHlzL2ZsZXhpYmxlLXRleHQnO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBUaHlQb3BvdmVyTW9kdWxlLCBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IFRoeVByb2dyZXNzIH0gZnJvbSAnbmd4LXRldGh5cy9wcm9ncmVzcyc7XG5pbXBvcnQgeyBUaHlSYXRlIH0gZnJvbSAnbmd4LXRldGh5cy9yYXRlJztcbmltcG9ydCB7IFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeVRhZyB9IGZyb20gJ25neC10ZXRoeXMvdGFnJztcbmltcG9ydCB7IG1lcmdlV2l0aCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByb2dyZXNzRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEZpZWxkTWVudSB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZC1tZW51L2ZpZWxkLW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEFJVGFibGVGaWVsZFByb3BlcnR5RWRpdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2ZpZWxkLXByb3BlcnR5LWVkaXRvci9maWVsZC1wcm9wZXJ0eS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IERCTF9DTElDS19FRElUX1RZUEUsIERlZmF1bHRGaWVsZE1lbnVzLCBNT1VTRU9WRVJfRURJVF9UWVBFIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb25zLFxuICAgIEFJUGx1Z2luLFxuICAgIEFJVGFibGUsXG4gICAgQUlUYWJsZUNoYW5nZU9wdGlvbnMsXG4gICAgQUlUYWJsZUZpZWxkcyxcbiAgICBBSVRhYmxlRmllbGRUeXBlLFxuICAgIEFJVGFibGVSZWNvcmRzLFxuICAgIGNyZWF0ZUFJVGFibGUsXG4gICAgY3JlYXRlRGVmYXVsdEZpZWxkLFxuICAgIGdldERlZmF1bHRSZWNvcmRcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IElzU2VsZWN0UmVjb3JkUGlwZSwgU2VsZWN0T3B0aW9uUGlwZSB9IGZyb20gJy4vcGlwZXMvZ3JpZC5waXBlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJX1RBQkxFX0dSSURfRklFTERfU0VSVklDRV9NQVAsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9maWVsZC5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlGaWVsZENvbmZpZywgQUlUYWJsZUZpZWxkTWVudUl0ZW0sIEFJVGFibGVSZWZlcmVuY2VzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEdyaWREYXRhIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUaHlBdmF0YXJNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2F2YXRhcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWdyaWQnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nRm9yT2YsXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE5nQ29tcG9uZW50T3V0bGV0LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBTZWxlY3RPcHRpb25QaXBlLFxuICAgICAgICBUaHlUYWcsXG4gICAgICAgIFRoeVBvcG92ZXJNb2R1bGUsXG4gICAgICAgIFRoeUljb24sXG4gICAgICAgIFRoeVJhdGUsXG4gICAgICAgIFRoeVByb2dyZXNzLFxuICAgICAgICBBSVRhYmxlRmllbGRQcm9wZXJ0eUVkaXRvcixcbiAgICAgICAgVGh5RGF0ZVBpY2tlckZvcm1hdFBpcGUsXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dCxcbiAgICAgICAgVGh5U3RvcFByb3BhZ2F0aW9uRGlyZWN0aXZlLFxuICAgICAgICBGaWVsZE1lbnUsXG4gICAgICAgIFRoeUFjdGlvbixcbiAgICAgICAgVGh5RHJvcGRvd25EaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCxcbiAgICAgICAgVGh5Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIFByb2dyZXNzRWRpdG9yQ29tcG9uZW50LFxuICAgICAgICBUaHlBdmF0YXJNb2R1bGUsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIElzU2VsZWN0UmVjb3JkUGlwZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlLCBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVHcmlkIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBhaVJlY29yZHMgPSBtb2RlbC5yZXF1aXJlZDxBSVRhYmxlUmVjb3Jkcz4oKTtcblxuICAgIGFpRmllbGRzID0gbW9kZWwucmVxdWlyZWQ8QUlUYWJsZUZpZWxkcz4oKTtcblxuICAgIGFpRmllbGRDb25maWcgPSBpbnB1dDxBSUZpZWxkQ29uZmlnPigpO1xuXG4gICAgYWlSZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KCk7XG5cbiAgICBhaVBsdWdpbnMgPSBpbnB1dDxBSVBsdWdpbltdPigpO1xuXG4gICAgYWlSZWZlcmVuY2VzID0gaW5wdXQ8QUlUYWJsZVJlZmVyZW5jZXM+KCk7XG5cbiAgICBBSVRhYmxlRmllbGRUeXBlID0gQUlUYWJsZUZpZWxkVHlwZTtcblxuICAgIGFpVGFibGUhOiBBSVRhYmxlO1xuXG4gICAgaXNTZWxlY3RlZEFsbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuc2l6ZSA9PT0gdGhpcy5haVJlY29yZHMoKS5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBvbkNoYW5nZSA9IG91dHB1dDxBSVRhYmxlQ2hhbmdlT3B0aW9ucz4oKTtcblxuICAgIGFpVGFibGVJbml0aWFsaXplZCA9IG91dHB1dDxBSVRhYmxlPigpO1xuXG4gICAgZmllbGRNZW51cyE6IEFJVGFibGVGaWVsZE1lbnVJdGVtW107XG5cbiAgICBtb3VzZW92ZXJSZWYhOiBUaHlQb3BvdmVyUmVmPGFueT47XG5cbiAgICBncmlkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkR3JpZERhdGEodGhpcy5haVJlY29yZHMoKSwgdGhpcy5haUZpZWxkcygpLCB0aGlzLmFpUmVmZXJlbmNlcygpKTtcbiAgICB9KTtcblxuICAgIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIGFpVGFibGVHcmlkRmllbGRTZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIGFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkRXZlbnRTZXJ2aWNlKTtcbiAgICBwdWJsaWMgYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0QUlUYWJsZSgpO1xuICAgICAgICB0aGlzLmluaXRTZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMuYnVpbGRGaWVsZE1lbnVzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuXG4gICAgaW5pdEFJVGFibGUoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZSA9IGNyZWF0ZUFJVGFibGUodGhpcy5haVJlY29yZHMsIHRoaXMuYWlGaWVsZHMpO1xuICAgICAgICB0aGlzLmFpUGx1Z2lucygpPy5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZSA9IHBsdWdpbih0aGlzLmFpVGFibGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5haVRhYmxlSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLmFpVGFibGUpO1xuICAgICAgICB0aGlzLmFpVGFibGUub25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHJlY29yZHM6IHRoaXMuYWlSZWNvcmRzKCksXG4gICAgICAgICAgICAgICAgZmllbGRzOiB0aGlzLmFpRmllbGRzKCksXG4gICAgICAgICAgICAgICAgYWN0aW9uczogdGhpcy5haVRhYmxlLmFjdGlvbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGluaXRTZXJ2aWNlKCkge1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmluaXRpYWxpemUodGhpcy5haVRhYmxlLCB0aGlzLmFpRmllbGRDb25maWcoKT8uZmllbGRQcm9wZXJ0eUVkaXRvcik7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmluaXRpYWxpemUodGhpcy5haVRhYmxlKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5yZWdpc3RlckV2ZW50cyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UuaW5pdEFJRmllbGRDb25maWcodGhpcy5haUZpZWxkQ29uZmlnKCkpO1xuICAgICAgICBBSV9UQUJMRV9HUklEX0ZJRUxEX1NFUlZJQ0VfTUFQLnNldCh0aGlzLmFpVGFibGUsIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UpO1xuICAgIH1cblxuICAgIGJ1aWxkRmllbGRNZW51cygpIHtcbiAgICAgICAgdGhpcy5maWVsZE1lbnVzID0gdGhpcy5haUZpZWxkQ29uZmlnKCk/LmZpZWxkTWVudXMgPz8gRGVmYXVsdEZpZWxkTWVudXM7XG4gICAgfVxuXG4gICAgYWRkUmVjb3JkKCkge1xuICAgICAgICBBY3Rpb25zLmFkZFJlY29yZCh0aGlzLmFpVGFibGUsIGdldERlZmF1bHRSZWNvcmQodGhpcy5haUZpZWxkcygpKSwgW3RoaXMuYWlSZWNvcmRzKCkubGVuZ3RoXSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UmVjb3JkKHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0UmVjb3JkKHJlY29yZElkKTtcbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS50b2dnbGVTZWxlY3RBbGwoY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgYWRkRmllbGQoZ3JpZENvbHVtbkJsYW5rOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHNpZ25hbChjcmVhdGVEZWZhdWx0RmllbGQodGhpcy5haVRhYmxlLCBBSVRhYmxlRmllbGRUeXBlLnRleHQpKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEZpZWxkU2VydmljZS5lZGl0RmllbGRQcm9wZXJ0eShncmlkQ29sdW1uQmxhbmssIHRoaXMuYWlUYWJsZSwgZmllbGQsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZUV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5kYmxDbGlja0V2ZW50JC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYmxDbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UubW91c2Vkb3duRXZlbnQkXG4gICAgICAgICAgICAgICAgLnBpcGUobWVyZ2VXaXRoKHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2xvYmFsTW91c2Vkb3duRXZlbnQkKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UudXBkYXRlU2VsZWN0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5tb3VzZW92ZXJFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2VvdmVySGFuZGxlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5nbG9iYWxNb3VzZW92ZXJFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VIb3ZlckNlbGxFZGl0b3IoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGJsQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgY29uc3QgY2VsbERvbSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5ncmlkLWNlbGwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNlbGxEb20gJiYgKGNlbGxEb20uZ2V0QXR0cmlidXRlKCd0eXBlJykhIGFzIEFJVGFibGVGaWVsZFR5cGUpO1xuICAgICAgICBjb25zdCByZWFkb25seSA9IGNlbGxEb20gJiYgY2VsbERvbS5nZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JykhO1xuICAgICAgICBpZiAodHlwZSAmJiAhcmVhZG9ubHkgJiYgREJMX0NMSUNLX0VESVRfVFlQRS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuRWRpdChjZWxsRG9tKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbW91c2VvdmVySGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlb3ZlclJlZikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJSZWY/LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbERvbSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5ncmlkLWNlbGwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNlbGxEb20gJiYgKGNlbGxEb20uZ2V0QXR0cmlidXRlKCd0eXBlJykhIGFzIEFJVGFibGVGaWVsZFR5cGUpO1xuICAgICAgICBpZiAodHlwZSAmJiBNT1VTRU9WRVJfRURJVF9UWVBFLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlb3ZlclJlZiA9IHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkVkaXQoY2VsbERvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3NlSG92ZXJDZWxsRWRpdG9yKGU6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMubW91c2VvdmVyUmVmKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNHcmlkID0gZS50YXJnZXQgJiYgKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuYWktdGFibGUtZ3JpZCcpO1xuICAgICAgICAgICAgY29uc3QgaGFzQ2VsbEVkaXRvciA9IGUudGFyZ2V0ICYmIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLmdyaWQtY2VsbC1lZGl0b3InKTtcbiAgICAgICAgICAgIGlmICghaGFzR3JpZCAmJiAhaGFzQ2VsbEVkaXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2VvdmVyUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1oZWFkZXIgZC1mbGV4XCI+XG4gICAgPGRpdiBjbGFzcz1cImdyaWQtY29sdW1uLWNoZWNrYm94IGdyaWQtY2VsbCBncmlkLWNoZWNrYm94XCI+XG4gICAgICAgIDxsYWJlbCB0aHlDaGVja2JveCB0aHlMYWJlbFRleHQ9XCJcIiBbbmdNb2RlbF09XCJpc1NlbGVjdGVkQWxsKClcIiAobmdNb2RlbENoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGV2ZW50KVwiPjwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgQGZvciAoZmllbGQgb2YgZ3JpZERhdGEoKS5maWVsZHM7IHRyYWNrIGZpZWxkLl9pZCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImdyaWQtY2VsbCBncmlkLWZpZWxkXCJcbiAgICAgICAgICAgICNmaWVsZEFjdGlvblxuICAgICAgICAgICAgW2F0dHIuZmllbGRJZF09XCJmaWVsZC5faWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBoaWdobGlnaHQ6IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkLl9pZCkgfVwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBmaWVsZC53aWR0aCArICdweCcgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgIDx0aHktaWNvbiBbdGh5SWNvbk5hbWVdPVwiZmllbGQuaWNvbiFcIiBjbGFzcz1cIm1yLTIgdGV4dC1tdXRlZFwiPjwvdGh5LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgZmllbGQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWZpZWxkLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgdGh5QWN0aW9uXG4gICAgICAgICAgICAgICAgdGh5QWN0aXZlQ2xhc3M9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgIHRoeUljb249XCJtb3JlLXZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICBbdGh5RHJvcGRvd25dPVwiZmllbGRNZW51XCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGh5LWRyb3Bkb3duLW1lbnUgI2ZpZWxkTWVudT5cbiAgICAgICAgICAgICAgICAgICAgPGZpZWxkLW1lbnUgW29yaWdpbl09XCJmaWVsZEFjdGlvblwiIFtmaWVsZElkXT1cImZpZWxkLl9pZFwiIFthaVRhYmxlXT1cImFpVGFibGVcIiBbZmllbGRNZW51c109XCJmaWVsZE1lbnVzXCI+PC9maWVsZC1tZW51PlxuICAgICAgICAgICAgICAgIDwvdGh5LWRyb3Bkb3duLW1lbnU+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb2x1bW4tYmxhbmsgY3Vyc29yLXBvaW50ZXJcIiAjZ3JpZENvbHVtbkJsYW5rIChjbGljayk9XCJhZGRGaWVsZChncmlkQ29sdW1uQmxhbmspXCI+XG4gICAgICAgIDx0aHktaWNvbiB0aHlJY29uTmFtZT1cInBsdXNcIj48L3RoeS1pY29uPlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiZ3JpZC1ib2R5IGQtZmxleFwiPlxuICAgIEBmb3IgKHJlY29yZCBvZiBncmlkRGF0YSgpLnJlY29yZHM7IHRyYWNrIHJlY29yZC5faWQ7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1yb3cgZC1mbGV4XCIgW25nQ2xhc3NdPVwieyBoaWdobGlnaHQ6IChyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKCkpIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLXJvdy1pbmRleCBncmlkLWNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKCkpID8gJ2NoZWNrZWQtYm94JyA6ICd1bmNoZWNrZWQtYm94J1wiXG4gICAgICAgICAgICAgICAgICAgIHRoeUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIHRoeUxhYmVsVGV4dD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJlY29yZC5faWQgfCBpc1NlbGVjdFJlY29yZDogYWlUYWJsZS5zZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdFJlY29yZChyZWNvcmQuX2lkKVwiXG4gICAgICAgICAgICAgICAgPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwiKHJlY29yZC5faWQgfCBpc1NlbGVjdFJlY29yZDogYWlUYWJsZS5zZWxlY3Rpb24oKSkgPyAnZ3JpZC1yb3ctbm8tbnVtYmVyJyA6ICdncmlkLXJvdy1udW1iZXInXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGluZGV4ICsgMSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgZ3JpZERhdGEoKS5maWVsZHM7IHRyYWNrIGZpZWxkLl9pZCkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgI2NlbGxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNlbGxcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHQ6IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMocmVjb3JkLl9pZCkgfHwgYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGQuX2lkKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuZ2V0KHJlY29yZC5faWQpPy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5faWQpXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50eXBlXT1cIltmaWVsZC50eXBlXVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmZpZWxkSWRdPVwiW2ZpZWxkLl9pZF1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWFkb25seV09XCJbZmllbGQ/LnJlYWRvbmx5XVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJlY29yZElkXT1cIltyZWNvcmQuX2lkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGZpZWxkLndpZHRoICsgJ3B4JyB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLnNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWZpZWxkLmlzTXVsdGlwbGUgJiYgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgc2VsZWN0T3B0aW9uOiBmaWVsZFsnb3B0aW9ucyddOyBhcyBzZWxlY3RlZE9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LXRhZyBbdGh5Q29sb3JdPVwic2VsZWN0ZWRPcHRpb24hLmNvbG9yIVwiPnt7IHNlbGVjdGVkT3B0aW9uLnRleHQgfX08L3RoeS10YWc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUuZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHRoeURhdGVQaWNrZXJGb3JtYXQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWJsb2NrIHVzZXItc2VsZWN0LW5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfCB0aHlEYXRlUGlja2VyRm9ybWF0OiAneXl5eS1NTS1kZCBISDptbScgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtYmxvY2sgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHRoeURhdGVQaWNrZXJGb3JtYXQ6ICd5eXl5LU1NLWRkIEhIOm1tJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5yYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1yYXRlIFtuZ01vZGVsXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXVwiPjwvdGh5LXJhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5saW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5RmxleGlibGVUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlUb29sdGlwQ29udGVudF09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LnRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy50ZXh0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LXByb2dyZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5VmFsdWVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNpemVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/LnNpemUgfHwgJ21kJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlNYXhdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/Lm1heCB8fCAxMDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5VHlwZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8ucHJvZ3Jlc3NUeXBlIHx8ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIH19e3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdPy5jb25maWc/LnN1ZmZpeCB8fCAnJScgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGh5LXByb2dyZXNzPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUubWVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZmllbGQuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeU5hbWVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdLmRpc3BsYXlfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U3JjXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXS5hdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RoeS1hdmF0YXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktYXZhdGFyLWxpc3QgdGh5QXZhdGFyU2l6ZT1cInhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXIgW3RoeU5hbWVdPVwiaXRlbS5kaXNwbGF5X25hbWVcIiBbdGh5U3JjXT1cIml0ZW0uYXZhdGFyXCI+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoeS1hdmF0YXItbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LWF2YXRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5TmFtZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0uZGlzcGxheV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVNyY109XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0uYXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2hvd05hbWU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeU5hbWVdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdLmRpc3BsYXlfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlTcmNdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdLmF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNpemU9XCJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj4ge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvZmlsbC1jb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtbi1ibGFua1wiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImdyaWQtcm93LWluc2VydCBncmlkLXJvdyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJhZGRSZWNvcmQoKVwiPlxuICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJwbHVzXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICNhY3RpdmVCb3JkZXIgY2xhc3M9XCJhY3RpdmUtYm9yZGVyXCI+PC9kaXY+Il19
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEcsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBaUIsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFN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LHFpQ0FGVCxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDLDBCQ3ZGOUYsb3lSQXdLQSw0Q0R6R1EsT0FBTyxtRkFFUCxZQUFZLG1IQUNaLFdBQVcsMFZBQ1gsZ0JBQWdCLHFEQUNoQixNQUFNLCtJQUNOLGdCQUFnQiwrQkFDaEIsT0FBTyxzTUFDUCxPQUFPLDhMQUNQLFdBQVcscUxBRVgsdUJBQXVCLDREQUN2QixlQUFlLG1PQUNmLDJCQUEyQixpR0FDM0IsU0FBUywrR0FDVCxTQUFTLGdNQUNULG9CQUFvQixtUkFDcEIsd0JBQXdCLHlHQUN4QixpQkFBaUIsZ0tBRWpCLGVBQWUsNFpBRWYsa0JBQWtCOzsyRkFJYixXQUFXO2tCQXBDdkIsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxlQUFlO3FCQUN6QixXQUNRO3dCQUNMLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxpQkFBaUI7d0JBQ2pCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLE1BQU07d0JBQ04sZ0JBQWdCO3dCQUNoQixPQUFPO3dCQUNQLE9BQU87d0JBQ1AsV0FBVzt3QkFDWCwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIsZUFBZTt3QkFDZiwyQkFBMkI7d0JBQzNCLFNBQVM7d0JBQ1QsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixrQkFBa0I7cUJBQ3JCLGFBQ1UsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdDbGFzcywgTmdDb21wb25lbnRPdXRsZXQsIE5nRm9yT2YsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBOZ1pvbmUsXG4gICAgT25Jbml0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRoeUFjdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvYWN0aW9uJztcbmltcG9ydCB7IFRoeUNoZWNrYm94TW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9jaGVja2JveCc7XG5pbXBvcnQgeyBUaHlEYXRlUGlja2VyRm9ybWF0UGlwZSB9IGZyb20gJ25neC10ZXRoeXMvZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgVGh5RHJvcGRvd25EaXJlY3RpdmUsIFRoeURyb3Bkb3duTWVudUNvbXBvbmVudCB9IGZyb20gJ25neC10ZXRoeXMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVGh5RmxleGlibGVUZXh0IH0gZnJvbSAnbmd4LXRldGh5cy9mbGV4aWJsZS10ZXh0JztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5UG9wb3Zlck1vZHVsZSwgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBUaHlQcm9ncmVzcyB9IGZyb20gJ25neC10ZXRoeXMvcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgVGh5UmF0ZSB9IGZyb20gJ25neC10ZXRoeXMvcmF0ZSc7XG5pbXBvcnQgeyBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmUgfSBmcm9tICduZ3gtdGV0aHlzL3NoYXJlZCc7XG5pbXBvcnQgeyBUaHlUYWcgfSBmcm9tICduZ3gtdGV0aHlzL3RhZyc7XG5pbXBvcnQgeyBtZXJnZVdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcm9ncmVzc0VkaXRvckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQgeyBGaWVsZE1lbnUgfSBmcm9tICcuL2NvbXBvbmVudHMvZmllbGQtbWVudS9maWVsZC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRQcm9wZXJ0eUVkaXRvciB9IGZyb20gJy4vY29tcG9uZW50cy9maWVsZC1wcm9wZXJ0eS1lZGl0b3IvZmllbGQtcHJvcGVydHktZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEQkxfQ0xJQ0tfRURJVF9UWVBFLCBEZWZhdWx0RmllbGRNZW51cywgTU9VU0VPVkVSX0VESVRfVFlQRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQWN0aW9ucyxcbiAgICBBSVBsdWdpbixcbiAgICBBSVRhYmxlLFxuICAgIEFJVGFibGVDaGFuZ2VPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZHMsXG4gICAgQUlUYWJsZUZpZWxkVHlwZSxcbiAgICBBSVRhYmxlUmVjb3JkcyxcbiAgICBjcmVhdGVBSVRhYmxlLFxuICAgIGNyZWF0ZURlZmF1bHRGaWVsZCxcbiAgICBnZXREZWZhdWx0UmVjb3JkXG59IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBJc1NlbGVjdFJlY29yZFBpcGUsIFNlbGVjdE9wdGlvblBpcGUgfSBmcm9tICcuL3BpcGVzL2dyaWQucGlwZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBSV9UQUJMRV9HUklEX0ZJRUxEX1NFUlZJQ0VfTUFQLCBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFJRmllbGRDb25maWcsIEFJVGFibGVGaWVsZE1lbnVJdGVtLCBBSVRhYmxlUmVmZXJlbmNlcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRHcmlkRGF0YSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVGh5QXZhdGFyTW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9hdmF0YXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdhaS10YWJsZS1ncmlkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0Zvck9mLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ0NvbXBvbmVudE91dGxldCxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uUGlwZSxcbiAgICAgICAgVGh5VGFnLFxuICAgICAgICBUaHlQb3BvdmVyTW9kdWxlLFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlSYXRlLFxuICAgICAgICBUaHlQcm9ncmVzcyxcbiAgICAgICAgQUlUYWJsZUZpZWxkUHJvcGVydHlFZGl0b3IsXG4gICAgICAgIFRoeURhdGVQaWNrZXJGb3JtYXRQaXBlLFxuICAgICAgICBUaHlGbGV4aWJsZVRleHQsXG4gICAgICAgIFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgRmllbGRNZW51LFxuICAgICAgICBUaHlBY3Rpb24sXG4gICAgICAgIFRoeURyb3Bkb3duRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVDb21wb25lbnQsXG4gICAgICAgIFRoeUNoZWNrYm94TW9kdWxlLFxuICAgICAgICBQcm9ncmVzc0VkaXRvckNvbXBvbmVudCxcbiAgICAgICAgVGh5QXZhdGFyTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBJc1NlbGVjdFJlY29yZFBpcGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0FJVGFibGVHcmlkRXZlbnRTZXJ2aWNlLCBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSwgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgYWlSZWNvcmRzID0gbW9kZWwucmVxdWlyZWQ8QUlUYWJsZVJlY29yZHM+KCk7XG5cbiAgICBhaUZpZWxkcyA9IG1vZGVsLnJlcXVpcmVkPEFJVGFibGVGaWVsZHM+KCk7XG5cbiAgICBhaUZpZWxkQ29uZmlnID0gaW5wdXQ8QUlGaWVsZENvbmZpZz4oKTtcblxuICAgIGFpUmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPigpO1xuXG4gICAgYWlQbHVnaW5zID0gaW5wdXQ8QUlQbHVnaW5bXT4oKTtcblxuICAgIGFpUmVmZXJlbmNlcyA9IGlucHV0PEFJVGFibGVSZWZlcmVuY2VzPigpO1xuXG4gICAgQUlUYWJsZUZpZWxkVHlwZSA9IEFJVGFibGVGaWVsZFR5cGU7XG5cbiAgICBhaVRhYmxlITogQUlUYWJsZTtcblxuICAgIGlzU2VsZWN0ZWRBbGwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLnNpemUgPT09IHRoaXMuYWlSZWNvcmRzKCkubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgb25DaGFuZ2UgPSBvdXRwdXQ8QUlUYWJsZUNoYW5nZU9wdGlvbnM+KCk7XG5cbiAgICBhaVRhYmxlSW5pdGlhbGl6ZWQgPSBvdXRwdXQ8QUlUYWJsZT4oKTtcblxuICAgIGZpZWxkTWVudXMhOiBBSVRhYmxlRmllbGRNZW51SXRlbVtdO1xuXG4gICAgbW91c2VvdmVyUmVmITogVGh5UG9wb3ZlclJlZjxhbnk+O1xuXG4gICAgZ3JpZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBidWlsZEdyaWREYXRhKHRoaXMuYWlSZWNvcmRzKCksIHRoaXMuYWlGaWVsZHMoKSwgdGhpcy5haVJlZmVyZW5jZXMoKSk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSBhaVRhYmxlR3JpZEZpZWxkU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZEZpZWxkU2VydmljZSk7XG4gICAgcHJpdmF0ZSBhaVRhYmxlR3JpZEV2ZW50U2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZEV2ZW50U2VydmljZSk7XG4gICAgcHVibGljIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdEFJVGFibGUoKTtcbiAgICAgICAgdGhpcy5pbml0U2VydmljZSgpO1xuICAgICAgICB0aGlzLmJ1aWxkRmllbGRNZW51cygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cblxuICAgIGluaXRBSVRhYmxlKCkge1xuICAgICAgICB0aGlzLmFpVGFibGUgPSBjcmVhdGVBSVRhYmxlKHRoaXMuYWlSZWNvcmRzLCB0aGlzLmFpRmllbGRzKTtcbiAgICAgICAgdGhpcy5haVBsdWdpbnMoKT8uZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUgPSBwbHVnaW4odGhpcy5haVRhYmxlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUluaXRpYWxpemVkLmVtaXQodGhpcy5haVRhYmxlKTtcbiAgICAgICAgdGhpcy5haVRhYmxlLm9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgICAgICByZWNvcmRzOiB0aGlzLmFpUmVjb3JkcygpLFxuICAgICAgICAgICAgICAgIGZpZWxkczogdGhpcy5haUZpZWxkcygpLFxuICAgICAgICAgICAgICAgIGFjdGlvbnM6IHRoaXMuYWlUYWJsZS5hY3Rpb25zXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0U2VydmljZSgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5pbml0aWFsaXplKHRoaXMuYWlUYWJsZSwgdGhpcy5haUZpZWxkQ29uZmlnKCk/LmZpZWxkUHJvcGVydHlFZGl0b3IpO1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5pbml0aWFsaXplKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UucmVnaXN0ZXJFdmVudHModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLmluaXRBSUZpZWxkQ29uZmlnKHRoaXMuYWlGaWVsZENvbmZpZygpKTtcbiAgICAgICAgQUlfVEFCTEVfR1JJRF9GSUVMRF9TRVJWSUNFX01BUC5zZXQodGhpcy5haVRhYmxlLCB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBidWlsZEZpZWxkTWVudXMoKSB7XG4gICAgICAgIHRoaXMuZmllbGRNZW51cyA9IHRoaXMuYWlGaWVsZENvbmZpZygpPy5maWVsZE1lbnVzID8/IERlZmF1bHRGaWVsZE1lbnVzO1xuICAgIH1cblxuICAgIGFkZFJlY29yZCgpIHtcbiAgICAgICAgQWN0aW9ucy5hZGRSZWNvcmQodGhpcy5haVRhYmxlLCBnZXREZWZhdWx0UmVjb3JkKHRoaXMuYWlGaWVsZHMoKSksIFt0aGlzLmFpUmVjb3JkcygpLmxlbmd0aF0pO1xuICAgIH1cblxuICAgIHNlbGVjdFJlY29yZChyZWNvcmRJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJlY29yZChyZWNvcmRJZCk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsKGNoZWNrZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UudG9nZ2xlU2VsZWN0QWxsKGNoZWNrZWQpO1xuICAgIH1cblxuICAgIGFkZEZpZWxkKGdyaWRDb2x1bW5CbGFuazogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzaWduYWwoY3JlYXRlRGVmYXVsdEZpZWxkKHRoaXMuYWlUYWJsZSwgQUlUYWJsZUZpZWxkVHlwZS50ZXh0KSk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2UuZWRpdEZpZWxkUHJvcGVydHkoZ3JpZENvbHVtbkJsYW5rLCB0aGlzLmFpVGFibGUsIGZpZWxkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZGJsQ2xpY2tFdmVudCQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGJsQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm1vdXNlZG93bkV2ZW50JFxuICAgICAgICAgICAgICAgIC5waXBlKG1lcmdlV2l0aCh0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmdsb2JhbE1vdXNlZG93bkV2ZW50JCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnVwZGF0ZVNlbGVjdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UubW91c2VvdmVyRXZlbnQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlb3ZlckhhbmRsZShldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2xvYmFsTW91c2VvdmVyRXZlbnQkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlSG92ZXJDZWxsRWRpdG9yKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRibENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNlbGxEb20gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZ3JpZC1jZWxsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjZWxsRG9tICYmIChjZWxsRG9tLmdldEF0dHJpYnV0ZSgndHlwZScpISBhcyBBSVRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgY29uc3QgcmVhZG9ubHkgPSBjZWxsRG9tICYmIGNlbGxEb20uZ2V0QXR0cmlidXRlKCdyZWFkb25seScpITtcbiAgICAgICAgaWYgKHR5cGUgJiYgIXJlYWRvbmx5ICYmIERCTF9DTElDS19FRElUX1RZUEUuaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkVkaXQoY2VsbERvbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1vdXNlb3ZlckhhbmRsZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5tb3VzZW92ZXJSZWYpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxEb20gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCcuZ3JpZC1jZWxsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBjZWxsRG9tICYmIChjZWxsRG9tLmdldEF0dHJpYnV0ZSgndHlwZScpISBhcyBBSVRhYmxlRmllbGRUeXBlKTtcbiAgICAgICAgaWYgKHR5cGUgJiYgTU9VU0VPVkVSX0VESVRfVFlQRS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZW92ZXJSZWYgPSB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5FZGl0KGNlbGxEb20pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbG9zZUhvdmVyQ2VsbEVkaXRvcihlOiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm1vdXNlb3ZlclJlZikge1xuICAgICAgICAgICAgY29uc3QgaGFzR3JpZCA9IGUudGFyZ2V0ICYmIChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdCgnLmFpLXRhYmxlLWdyaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0NlbGxFZGl0b3IgPSBlLnRhcmdldCAmJiAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJy5ncmlkLWNlbGwtZWRpdG9yJyk7XG4gICAgICAgICAgICBpZiAoIWhhc0dyaWQgJiYgIWhhc0NlbGxFZGl0b3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdyaWQtaGVhZGVyIGQtZmxleFwiPlxuICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbHVtbi1jaGVja2JveCBncmlkLWNlbGwgZ3JpZC1jaGVja2JveFwiPlxuICAgICAgICA8bGFiZWwgdGh5Q2hlY2tib3ggdGh5TGFiZWxUZXh0PVwiXCIgW25nTW9kZWxdPVwiaXNTZWxlY3RlZEFsbCgpXCIgKG5nTW9kZWxDaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIj48L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIEBmb3IgKGZpZWxkIG9mIGdyaWREYXRhKCkuZmllbGRzOyB0cmFjayBmaWVsZC5faWQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJncmlkLWNlbGwgZ3JpZC1maWVsZFwiXG4gICAgICAgICAgICAjZmllbGRBY3Rpb25cbiAgICAgICAgICAgIFthdHRyLmZpZWxkSWRdPVwiZmllbGQuX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgaGlnaGxpZ2h0OiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkRmllbGRzLmhhcyhmaWVsZC5faWQpIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogZmllbGQud2lkdGggKyAncHgnIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cImZpZWxkLmljb24hXCIgY2xhc3M9XCJtci0yIHRleHQtbXV0ZWRcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGZpZWxkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1maWVsZC1hY3Rpb25cIlxuICAgICAgICAgICAgICAgIHRoeUFjdGlvblxuICAgICAgICAgICAgICAgIHRoeUFjdGl2ZUNsYXNzPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0aHlJY29uPVwibW9yZS12ZXJ0aWNhbFwiXG4gICAgICAgICAgICAgICAgW3RoeURyb3Bkb3duXT1cImZpZWxkTWVudVwiXG4gICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHRoeS1kcm9wZG93bi1tZW51ICNmaWVsZE1lbnU+XG4gICAgICAgICAgICAgICAgICAgIDxmaWVsZC1tZW51IFtvcmlnaW5dPVwiZmllbGRBY3Rpb25cIiBbZmllbGRJZF09XCJmaWVsZC5faWRcIiBbYWlUYWJsZV09XCJhaVRhYmxlXCIgW2ZpZWxkTWVudXNdPVwiZmllbGRNZW51c1wiPjwvZmllbGQtbWVudT5cbiAgICAgICAgICAgICAgICA8L3RoeS1kcm9wZG93bi1tZW51PlxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImdyaWQtY29sdW1uLWJsYW5rIGN1cnNvci1wb2ludGVyXCIgI2dyaWRDb2x1bW5CbGFuayAoY2xpY2spPVwiYWRkRmllbGQoZ3JpZENvbHVtbkJsYW5rKVwiPlxuICAgICAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJwbHVzXCI+PC90aHktaWNvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImdyaWQtYm9keSBkLWZsZXhcIj5cbiAgICBAZm9yIChyZWNvcmQgb2YgZ3JpZERhdGEoKS5yZWNvcmRzOyB0cmFjayByZWNvcmQuX2lkOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtcm93IGQtZmxleFwiIFtuZ0NsYXNzXT1cInsgaGlnaGxpZ2h0OiAocmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpKSB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1yb3ctaW5kZXggZ3JpZC1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIocmVjb3JkLl9pZCB8IGlzU2VsZWN0UmVjb3JkOiBhaVRhYmxlLnNlbGVjdGlvbigpKSA/ICdjaGVja2VkLWJveCcgOiAndW5jaGVja2VkLWJveCdcIlxuICAgICAgICAgICAgICAgICAgICB0aHlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICB0aHlMYWJlbFRleHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RSZWNvcmQocmVjb3JkLl9pZClcIlxuICAgICAgICAgICAgICAgID48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cIihyZWNvcmQuX2lkIHwgaXNTZWxlY3RSZWNvcmQ6IGFpVGFibGUuc2VsZWN0aW9uKCkpID8gJ2dyaWQtcm93LW5vLW51bWJlcicgOiAnZ3JpZC1yb3ctbnVtYmVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyBpbmRleCArIDEgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIGdyaWREYXRhKCkuZmllbGRzOyB0cmFjayBmaWVsZC5faWQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNjZWxsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuaGFzKHJlY29yZC5faWQpIHx8IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkLl9pZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLmdldChyZWNvcmQuX2lkKT8uaGFzT3duUHJvcGVydHkoZmllbGQuX2lkKVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudHlwZV09XCJbZmllbGQudHlwZV1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5maWVsZElkXT1cIltmaWVsZC5faWRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucmVhZG9ubHldPVwiW2ZpZWxkPy5yZWFkb25seV1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yZWNvcmRJZF09XCJbcmVjb3JkLl9pZF1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHdpZHRoOiBmaWVsZC53aWR0aCArICdweCcgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5pc011bHRpcGxlICYmIHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHNlbGVjdE9wdGlvbjogZmllbGRbJ29wdGlvbnMnXTsgYXMgc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS10YWcgW3RoeUNvbG9yXT1cInNlbGVjdGVkT3B0aW9uIS5jb2xvciEgfHwgc2VsZWN0ZWRPcHRpb24hLmJnX2NvbG9yISB8fCAnZGVmYXVsdCdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvdGh5LXRhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5kYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdGh5RGF0ZVBpY2tlckZvcm1hdCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtYmxvY2sgdXNlci1zZWxlY3Qtbm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB8IHRoeURhdGVQaWNrZXJGb3JtYXQ6ICd5eXl5LU1NLWRkIEhIOm1tJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1ibG9jayB1c2VyLXNlbGVjdC1ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdIHwgdGh5RGF0ZVBpY2tlckZvcm1hdDogJ3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLnJhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGh5LXJhdGUgW25nTW9kZWxdPVwicmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdXCI+PC90aHktcmF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlIChBSVRhYmxlRmllbGRUeXBlLmxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlGbGV4aWJsZVRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeVRvb2x0aXBDb250ZW50XT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlWYWx1ZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U2l6ZV09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8uc2l6ZSB8fCAnbWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoeU1heF09XCJyZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8ubWF4IHx8IDEwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlUeXBlXT1cInJlY29yZC52YWx1ZXNbZmllbGQuX2lkXT8uY29uZmlnPy5wcm9ncmVzc1R5cGUgfHwgJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gfX17eyByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0/LmNvbmZpZz8uc3VmZml4IHx8ICclJyB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aHktcHJvZ3Jlc3M+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFmaWVsZC5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocmVjb3JkLnZhbHVlc1tmaWVsZC5faWRdWzBdOyBhcyByZWNvcmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5TmFtZV09XCJyZWNvcmRWYWx1ZS5kaXNwbGF5X25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlTcmNdPVwicmVjb3JkVmFsdWUuYXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoeVNob3dOYW1lPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aHktYXZhdGFyLWxpc3QgdGh5QXZhdGFyU2l6ZT1cInhzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXIgW3RoeU5hbWVdPVwiaXRlbS5kaXNwbGF5X25hbWVcIiBbdGh5U3JjXT1cIml0ZW0uYXZhdGFyXCI+PC90aHktYXZhdGFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoeS1hdmF0YXItbGlzdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXVswXTsgYXMgcmVjb3JkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlOYW1lXT1cInJlY29yZFZhbHVlLmRpc3BsYXlfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U3JjXT1cInJlY29yZFZhbHVlLmF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2hvd05hbWU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXVswXTsgYXMgcmVjb3JkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoeS1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aHlOYW1lXT1cInJlY29yZFZhbHVlLmRpc3BsYXlfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGh5U3JjXT1cInJlY29yZFZhbHVlLmF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHlTaXplPVwieHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh5U2hvd05hbWU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGh5LWF2YXRhcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+IHt7IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b2ZpbGwtY29udGFpbmVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb2x1bW4tYmxhbmtcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJncmlkLXJvdy1pbnNlcnQgZ3JpZC1yb3cgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiYWRkUmVjb3JkKClcIj5cbiAgICAgICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwicGx1c1wiPjwvdGh5LWljb24+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiAjYWN0aXZlQm9yZGVyIGNsYXNzPVwiYWN0aXZlLWJvcmRlclwiPjwvZGl2PlxuIl19
|
package/esm2022/utils/build.mjs
CHANGED
@@ -29,16 +29,11 @@ export function buildRecordsByReferences(records, fields, references) {
|
|
29
29
|
draftRecords.forEach((record) => {
|
30
30
|
memberFields.forEach((field) => {
|
31
31
|
const value = record.values[field._id];
|
32
|
-
|
33
|
-
record.values[field._id] = value.map((uid) => uidToMember[uid]).filter(Boolean);
|
34
|
-
}
|
35
|
-
else {
|
36
|
-
record.values[field._id] = uidToMember[value] || {};
|
37
|
-
}
|
32
|
+
record.values[field._id] = value.map((uid) => uidToMember[uid]).filter(Boolean);
|
38
33
|
});
|
39
34
|
});
|
40
35
|
records = finishDraft(draftRecords);
|
41
36
|
}
|
42
37
|
return records;
|
43
38
|
}
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy91dGlscy9idWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqRCxPQUFPLEVBQWlCLGdCQUFnQixFQUFrQixTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHckYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsV0FBMkIsRUFBRSxXQUEwQixFQUFFLFVBQThCLEVBQW1CLEVBQUU7SUFDdEksTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3BDLE9BQU87WUFDSCxHQUFHLElBQUk7WUFDUCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUk7WUFDNUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLO1NBQ2xELENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUNILElBQUksT0FBTyxHQUFHLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0UsT0FBTztRQUNILElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTTtRQUNOLE9BQU87S0FDVixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQXVCLEVBQUUsTUFBcUIsRUFBRSxVQUE4QjtJQUNuSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDZCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUN6RyxDQUFDO0lBQ0YsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3pDLENBQUMsR0FBMkIsRUFBRSxNQUF1QixFQUFFLEVBQUU7WUFDckQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDMUIsT0FBTyxHQUFHLENBQUM7UUFDZixDQUFDLEVBQ0QsRUFBcUMsQ0FDeEMsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVGLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRHJhZnQsIGZpbmlzaERyYWZ0IH0gZnJvbSAnaW1tZXInO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkcywgQUlUYWJsZUZpZWxkVHlwZSwgQUlUYWJsZVJlY29yZHMsIEZpZWxkc01hcCB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWREYXRhLCBBSVRhYmxlUmVmZXJlbmNlcywgQUlUYWJsZVNlbGVjdGlvbiwgQUlUYWJsZVVzZXJJbmZvIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRHcmlkRGF0YSA9IChyZWNvcmRWYWx1ZTogQUlUYWJsZVJlY29yZHMsIGZpZWxkc1ZhbHVlOiBBSVRhYmxlRmllbGRzLCByZWZlcmVuY2VzPzogQUlUYWJsZVJlZmVyZW5jZXMpOiBBSVRhYmxlR3JpZERhdGEgPT4ge1xuICAgIGNvbnN0IGZpZWxkcyA9IGZpZWxkc1ZhbHVlLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIGljb246IGl0ZW0uaWNvbiB8fCBGaWVsZHNNYXBbaXRlbS50eXBlXS5pY29uLFxuICAgICAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGggfHwgRmllbGRzTWFwW2l0ZW0udHlwZV0ud2lkdGhcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBsZXQgcmVjb3JkcyA9IGJ1aWxkUmVjb3Jkc0J5UmVmZXJlbmNlcyhyZWNvcmRWYWx1ZSwgZmllbGRzVmFsdWUsIHJlZmVyZW5jZXMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdncmlkJyxcbiAgICAgICAgZmllbGRzLFxuICAgICAgICByZWNvcmRzXG4gICAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJlY29yZHNCeVJlZmVyZW5jZXMocmVjb3JkczogQUlUYWJsZVJlY29yZHMsIGZpZWxkczogQUlUYWJsZUZpZWxkcywgcmVmZXJlbmNlcz86IEFJVGFibGVSZWZlcmVuY2VzKSB7XG4gICAgaWYgKCFyZWZlcmVuY2VzKSB7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgIH1cbiAgICBjb25zdCBtZW1iZXJGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKChmaWVsZCkgPT5cbiAgICAgICAgW0FJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5LCBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeSwgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXJdLmluY2x1ZGVzKGZpZWxkLnR5cGUpXG4gICAgKTtcbiAgICBpZiAobWVtYmVyRmllbGRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB1aWRUb01lbWJlciA9IHJlZmVyZW5jZXMubWVtYmVycy5yZWR1Y2UoXG4gICAgICAgICAgICAobWFwOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBtZW1iZXI6IEFJVGFibGVVc2VySW5mbykgPT4ge1xuICAgICAgICAgICAgICAgIG1hcFttZW1iZXIudWlkIV0gPSBtZW1iZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBBSVRhYmxlVXNlckluZm8+XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRyYWZ0UmVjb3JkcyA9IGNyZWF0ZURyYWZ0KHJlY29yZHMpO1xuICAgICAgICBkcmFmdFJlY29yZHMuZm9yRWFjaCgocmVjb3JkKSA9PiB7XG4gICAgICAgICAgICBtZW1iZXJGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZC52YWx1ZXNbZmllbGQuX2lkXTtcbiAgICAgICAgICAgICAgICByZWNvcmQudmFsdWVzW2ZpZWxkLl9pZF0gPSB2YWx1ZS5tYXAoKHVpZDogc3RyaW5nKSA9PiB1aWRUb01lbWJlclt1aWRdKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlY29yZHMgPSBmaW5pc2hEcmFmdChkcmFmdFJlY29yZHMpO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb3Jkcztcbn1cbiJdfQ==
|
@@ -184,7 +184,10 @@ const BasicFields = [
|
|
184
184
|
const Fields = [...BasicFields];
|
185
185
|
const FieldsMap = helpers.keyBy([...BasicFields], 'type');
|
186
186
|
|
187
|
-
function getDefaultFieldValue(
|
187
|
+
function getDefaultFieldValue(field) {
|
188
|
+
if ([AITableFieldType.member, AITableFieldType.createdBy, AITableFieldType.updatedBy].includes(field.type)) {
|
189
|
+
return [];
|
190
|
+
}
|
188
191
|
return '';
|
189
192
|
}
|
190
193
|
function createDefaultFieldName(aiTable, type = AITableFieldType.text) {
|
@@ -234,7 +237,7 @@ function getDefaultRecord(fields) {
|
|
234
237
|
values: {}
|
235
238
|
};
|
236
239
|
fields.map((item) => {
|
237
|
-
newRow.values[item._id] = getDefaultFieldValue(item
|
240
|
+
newRow.values[item._id] = getDefaultFieldValue(item);
|
238
241
|
});
|
239
242
|
return newRow;
|
240
243
|
}
|
@@ -919,12 +922,7 @@ function buildRecordsByReferences(records, fields, references) {
|
|
919
922
|
draftRecords.forEach((record) => {
|
920
923
|
memberFields.forEach((field) => {
|
921
924
|
const value = record.values[field._id];
|
922
|
-
|
923
|
-
record.values[field._id] = value.map((uid) => uidToMember[uid]).filter(Boolean);
|
924
|
-
}
|
925
|
-
else {
|
926
|
-
record.values[field._id] = uidToMember[value] || {};
|
927
|
-
}
|
925
|
+
record.values[field._id] = value.map((uid) => uidToMember[uid]).filter(Boolean);
|
928
926
|
});
|
929
927
|
});
|
930
928
|
records = finishDraft(draftRecords);
|
@@ -1385,7 +1383,7 @@ class AITableGrid {
|
|
1385
1383
|
}
|
1386
1384
|
}
|
1387
1385
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AITableGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
1388
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, 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 }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", onChange: "onChange", aiTableInitialized: "aiTableInitialized" }, host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color!\">{{ selectedOption.text }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n @case (AITableFieldType.updatedBy) {\n <thy-avatar\n [thyName]=\"record.values[field._id].display_name\"\n [thySrc]=\"record.values[field._id].avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: FieldMenu, selector: "field-menu", inputs: ["fieldId", "aiTable", "fieldMenus", "origin"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: ThyDropdownDirective, selector: "[thyDropdown]", inputs: ["thyDropdownMenu", "thyDropdown", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyActiveClass", "thyPopoverOptions", "thyPlacement", "thyMenuInsideClosable", "thyPanelClass"], outputs: ["thyActiveChange"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
1386
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.2", type: AITableGrid, isStandalone: true, selector: "ai-table-grid", inputs: { aiRecords: { classPropertyName: "aiRecords", publicName: "aiRecords", isSignal: true, isRequired: true, transformFunction: null }, aiFields: { classPropertyName: "aiFields", publicName: "aiFields", isSignal: true, isRequired: true, 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 }, aiReferences: { classPropertyName: "aiReferences", publicName: "aiReferences", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aiRecords: "aiRecordsChange", aiFields: "aiFieldsChange", onChange: "onChange", aiTableInitialized: "aiTableInitialized" }, host: { classAttribute: "ai-table-grid" }, providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], ngImport: i0, template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color! || selectedOption!.bg_color! || 'default'\">{{\n selectedOption.text\n }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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: "pipe", type: SelectOptionPipe, name: "selectOption" }, { kind: "component", type: ThyTag, selector: "thy-tag,[thyTag]", inputs: ["thyTag", "thyShape", "thyColor", "thyTheme", "thySize", "thyHoverable"] }, { kind: "ngmodule", type: ThyPopoverModule }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "component", type: ThyRate, selector: "thy-rate", inputs: ["thyCount", "thyDisabled", "thyAllowHalf", "thyAllowClear", "thyTooltips", "thyIconTemplate"], outputs: ["thyItemHoverChange"] }, { kind: "component", type: ThyProgress, selector: "thy-progress", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }, { kind: "pipe", type: ThyDatePickerFormatPipe, name: "thyDatePickerFormat" }, { kind: "component", type: ThyFlexibleText, selector: "thy-flexible-text,[thyFlexibleText]", inputs: ["thyTooltipTrigger", "thyContainerClass", "thyTooltipContent", "thyTooltipPlacement", "thyTooltipOffset"], exportAs: ["thyFlexibleText"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "component", type: FieldMenu, selector: "field-menu", inputs: ["fieldId", "aiTable", "fieldMenus", "origin"] }, { kind: "component", type: ThyAction, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "directive", type: ThyDropdownDirective, selector: "[thyDropdown]", inputs: ["thyDropdownMenu", "thyDropdown", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyActiveClass", "thyPopoverOptions", "thyPlacement", "thyMenuInsideClosable", "thyPanelClass"], outputs: ["thyActiveChange"] }, { kind: "component", type: ThyDropdownMenuComponent, selector: "thy-dropdown-menu", inputs: ["thyWidth", "thyImmediateRender"] }, { kind: "ngmodule", type: ThyCheckboxModule }, { kind: "component", type: i3.ThyCheckbox, selector: "thy-checkbox,[thy-checkbox],[thyCheckbox]", inputs: ["thyIndeterminate"] }, { kind: "ngmodule", type: ThyAvatarModule }, { kind: "component", type: i4.ThyAvatar, selector: "thy-avatar", inputs: ["thyShowName", "thySrc", "thyName", "thySize", "thyShowRemove", "thyRemovable", "thyImgClass", "thyDisabled", "thyLoading", "thyFetchPriority"], outputs: ["thyOnRemove", "thyRemove", "thyError"] }, { kind: "component", type: i4.ThyAvatarList, selector: "thy-avatar-list", inputs: ["thyMode", "thyAvatarSize"] }, { kind: "pipe", type: IsSelectRecordPipe, name: "isSelectRecord" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
1389
1387
|
}
|
1390
1388
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: AITableGrid, decorators: [{
|
1391
1389
|
type: Component,
|
@@ -1416,7 +1414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
|
|
1416
1414
|
ThyAvatarModule,
|
1417
1415
|
NgTemplateOutlet,
|
1418
1416
|
IsSelectRecordPipe
|
1419
|
-
], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color
|
1417
|
+
], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div class=\"grid-header d-flex\">\n <div class=\"grid-column-checkbox grid-cell grid-checkbox\">\n <label thyCheckbox thyLabelText=\"\" [ngModel]=\"isSelectedAll()\" (ngModelChange)=\"toggleSelectAll($event)\"></label>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n class=\"grid-cell grid-field\"\n #fieldAction\n [attr.fieldId]=\"field._id\"\n [ngClass]=\"{ highlight: aiTable.selection().selectedFields.has(field._id) }\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n <span class=\"text-truncate\">\n <thy-icon [thyIconName]=\"field.icon!\" class=\"mr-2 text-muted\"></thy-icon>\n <span>{{ field.name }}</span>\n </span>\n <a\n class=\"grid-field-action\"\n thyAction\n thyActiveClass=\"active\"\n thyIcon=\"more-vertical\"\n [thyDropdown]=\"fieldMenu\"\n href=\"javascript:;\"\n >\n <thy-dropdown-menu #fieldMenu>\n <field-menu [origin]=\"fieldAction\" [fieldId]=\"field._id\" [aiTable]=\"aiTable\" [fieldMenus]=\"fieldMenus\"></field-menu>\n </thy-dropdown-menu>\n </a>\n </div>\n }\n <div class=\"grid-column-blank cursor-pointer\" #gridColumnBlank (click)=\"addField(gridColumnBlank)\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n<div class=\"grid-body d-flex\">\n @for (record of gridData().records; track record._id; let index = $index) {\n <div class=\"grid-row d-flex\" [ngClass]=\"{ highlight: (record._id | isSelectRecord: aiTable.selection()) }\">\n <div class=\"grid-row-index grid-checkbox\">\n <label\n [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'checked-box' : 'unchecked-box'\"\n thyCheckbox\n thyLabelText=\"\"\n [ngModel]=\"record._id | isSelectRecord: aiTable.selection()\"\n (ngModelChange)=\"selectRecord(record._id)\"\n ></label>\n <span [ngClass]=\"(record._id | isSelectRecord: aiTable.selection()) ? 'grid-row-no-number' : 'grid-row-number'\">\n {{ index + 1 }}\n </span>\n </div>\n @for (field of gridData().fields; track field._id) {\n <div\n #cell\n class=\"grid-cell\"\n [ngClass]=\"{\n highlight: aiTable.selection().selectedCells.has(record._id) || aiTable.selection().selectedFields.has(field._id),\n selected: aiTable.selection().selectedCells.get(record._id)?.hasOwnProperty(field._id)\n }\"\n [attr.type]=\"[field.type]\"\n [attr.fieldId]=\"[field._id]\"\n [attr.readonly]=\"[field?.readonly]\"\n [attr.recordId]=\"[record._id]\"\n [ngStyle]=\"{ width: field.width + 'px' }\"\n >\n @switch (field.type) {\n @case (AITableFieldType.select) {\n @if (!field.isMultiple && record.values[field._id] | selectOption: field['options']; as selectedOption) {\n <thy-tag [thyColor]=\"selectedOption!.color! || selectedOption!.bg_color! || 'default'\">{{\n selectedOption.text\n }}</thy-tag>\n }\n }\n @case (AITableFieldType.date) {\n {{ record.values[field._id] | thyDatePickerFormat }}\n }\n @case (AITableFieldType.updatedAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.createdAt) {\n <div class=\"d-block user-select-none\">\n <span class=\"text-truncate\">\n {{ record.values[field._id] | thyDatePickerFormat: 'yyyy-MM-dd HH:mm' }}\n </span>\n </div>\n }\n @case (AITableFieldType.rate) {\n <thy-rate [ngModel]=\"record.values[field._id]\"></thy-rate>\n }\n @case (AITableFieldType.link) {\n <a\n class=\"d-block\"\n target=\"_blank\"\n [href]=\"record.values[field._id]?.url\"\n thyStopPropagation\n thyFlexibleText\n [thyTooltipContent]=\"record.values[field._id]?.text\"\n >\n {{ record.values[field._id]?.text }}\n </a>\n }\n @case (AITableFieldType.progress) {\n <thy-progress\n class=\"w-100\"\n [thyValue]=\"record.values[field._id]\"\n [thySize]=\"record.values[field._id]?.config?.size || 'md'\"\n [thyMax]=\"record.values[field._id]?.config?.max || 100\"\n [thyType]=\"record.values[field._id]?.config?.progressType || 'success'\"\n >\n <span> {{ record.values[field._id] }}{{ record.values[field._id]?.config?.suffix || '%' }} </span>\n </thy-progress>\n }\n @case (AITableFieldType.member) {\n @if (!field.isMultiple) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n } @else {\n <thy-avatar-list thyAvatarSize=\"xs\">\n @for (item of record.values[field._id]; track $index) {\n <thy-avatar [thyName]=\"item.display_name\" [thySrc]=\"item.avatar\"></thy-avatar>\n }\n </thy-avatar-list>\n }\n }\n @case (AITableFieldType.createdBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @case (AITableFieldType.updatedBy) {\n @if (record.values[field._id][0]; as recordValue) {\n <thy-avatar\n [thyName]=\"recordValue.display_name\"\n [thySrc]=\"recordValue.avatar\"\n thySize=\"xs\"\n thyShowName=\"true\"\n ></thy-avatar>\n }\n }\n @default {\n <span class=\"text-truncate\"> {{ record.values[field._id] }}</span>\n }\n }\n <div class=\"autofill-container\"></div>\n </div>\n }\n <div class=\"grid-column-blank\"></div>\n </div>\n }\n <div class=\"grid-row-insert grid-row cursor-pointer\" (click)=\"addRecord()\">\n <thy-icon thyIconName=\"plus\"></thy-icon>\n </div>\n</div>\n\n<div #activeBorder class=\"active-border\"></div>\n" }]
|
1420
1418
|
}] });
|
1421
1419
|
|
1422
1420
|
/**
|