@sumaris-net/ngx-components 18.7.4-rc3 → 18.7.4-rc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -67,11 +67,11 @@ export class ActionsColumnComponent {
|
|
|
67
67
|
this.forward.unsubscribe();
|
|
68
68
|
}
|
|
69
69
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsColumnComponent, deps: [{ token: i1.MatTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplateAfter: "cellTemplateAfter", cellTemplateBefore: "cellTemplateBefore" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
70
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplateAfter: "cellTemplateAfter", cellTemplateBefore: "cellTemplateBefore" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
|
|
71
71
|
}
|
|
72
72
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsColumnComponent, decorators: [{
|
|
73
73
|
type: Component,
|
|
74
|
-
args: [{ selector: 'app-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n
|
|
74
|
+
args: [{ selector: 'app-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"] }]
|
|
75
75
|
}], ctorParameters: () => [{ type: i1.MatTable }, { type: i0.ChangeDetectorRef }], propDecorators: { columnDef: [{
|
|
76
76
|
type: ViewChild,
|
|
77
77
|
args: [MatColumnDef]
|
|
@@ -127,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
127
127
|
}], forward: [{
|
|
128
128
|
type: Output
|
|
129
129
|
}] } });
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sc0JBQXNCO0lBNEJ2QjtJQUNBO0lBNUJlLFNBQVMsQ0FBZTtJQUN0QixjQUFjLENBQWlCO0lBRWpELFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsS0FBSyxHQUEwQixPQUFPLENBQUM7SUFDUixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsU0FBUyxDQUFVO0lBQ25CLFdBQVcsQ0FBVTtJQUNyQixVQUFVLENBQVU7SUFDcEIsZ0JBQWdCLENBQVU7SUFDekQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixpQkFBaUIsQ0FBZ0M7SUFDakQsa0JBQWtCLENBQWdDO0lBRWpELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQ3pDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ25FLHNCQUFzQixHQUFHLElBQUksWUFB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QUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ksY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDa0MsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNMLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jVGFibGVFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hY3Rpb25zLWNvbHVtbicsXG4gIHN0eWxlVXJsczogWycuL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbnNDb2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIFRhYmxlRWxlbWVudDxhbnk+IHwgQXN5bmNUYWJsZUVsZW1lbnQ8YW55PiA9IFRhYmxlRWxlbWVudDxhbnk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZjogTWF0Q29sdW1uRGVmO1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSBtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgQElucHV0KCkgbWF0Q29sdW1uRGVmID0gJ2FjdGlvbnMnO1xuICBASW5wdXQoKSBzdHlsZTogJ3RhYmxlJyB8ICdtYXQtdGFibGUnID0gJ3RhYmxlJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreUVuZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ2FuY2VsOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ29uZmlybTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkJhY2t3YXJkOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRm9yd2FyZDogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkNvbmZpcm1BbmRBZGQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpcnR5SWNvbjogYm9vbGVhbiB8IHN0cmluZztcbiAgQElucHV0KCkgb3B0aW9uc1RpdGxlID0gJ0NPTU1PTi5CVE5fT1BUSU9OUyc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgY2VsbFRlbXBsYXRlQWZ0ZXI6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuICBASW5wdXQoKSBjZWxsVGVtcGxhdGVCZWZvcmU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuXG4gIEBPdXRwdXQoKSBvcHRpb25zQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsT3JEZWxldGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUVkaXRDcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUFuZEFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBiYWNrd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgZm9yd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFibGU6IE1hdFRhYmxlPGFueT4sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETyBhdXRvIGNvbmZpZ3VyZSB1c2luZyBBcHBUYWJsZSA/IChuZWVkIGEgZm9yd2FyZFJlZigpIGluIHRoZSB0YWJsZSBjb21wb25lbnRcbiAgICAvL0BPcHRpb25hbCgpIHByaXZhdGUgYXBwVGFibGU6IEFwcFRhYmxlPGFueT5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFthY3Rpb25zLWNvbHVtbl0gdGhpcyBjb2x1bW4gY29tcG9uZW50IG11c3QgYmUgaW5zaWRlIGEgTWF0VGFibGUgY29tcG9uZW50YCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5jYW5DYW5jZWwgPSB0aGlzLmNhbkNhbmNlbCA/PyB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5Db25maXJtID0gdGhpcy5jYW5Db25maXJtID8/IHRoaXMuY29uZmlybUVkaXRDcmVhdGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IHRoaXMuY2FuRGVsZXRlID8/IHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPSB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPz8gdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5CYWNrd2FyZCA9IHRoaXMuY2FuQmFja3dhcmQgPz8gdGhpcy5iYWNrd2FyZC5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkZvcndhcmQgPSB0aGlzLmNhbkZvcndhcmQgPz8gdGhpcy5mb3J3YXJkLm9ic2VydmVkO1xuICAgIHRoaXMuZGlydHlJY29uID0gdGhpcy5kaXJ0eUljb24gPT09IHRydWUgPyAnc3RhcicgOiB0aGlzLmRpcnR5SWNvbiA9PT0gZmFsc2UgPyBudWxsIDogKHRoaXMuZGlydHlJY29uID8/ICdzdGFyJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRhYmxlLnJlbW92ZUNvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9wdGlvbnNDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29uZmlybUFuZEFkZENsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJhY2t3YXJkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5iYWNrd2FyZC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9yd2FyZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm9yd2FyZC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwibWF0Q29sdW1uRGVmXCIgW3N0aWNreUVuZF09XCJzdGlja3lFbmRcIj5cbiAgQHN3aXRjaCAoc3R5bGUpIHtcbiAgICA8IS0tIG1hdC10YWJsZSBzdHlsZSAoZS5nLiB1c2VkIGluIHN1bWFyaXMgYWN0aXZpdHkgY2FsZW5kYXIpIC0tPlxuICAgIEBjYXNlICgndGFibGUnKSB7XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbnNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wdGlvbnNDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlQmVmb3JlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwhLS0gQ29uZmlybSBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29uZmlybSAmJiByb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQVBQTFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtRWRpdENyZWF0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrbWFyazwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgICAgQGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY2FuRm9yd2FyZCAmJiBjYW5Db25maXJtQW5kQWRkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIGV4aXN0aW5nIHJvdyAtLT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkNhbmNlbCAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIG5leHQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgICBAaWYgKGNhbkZvcndhcmQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZGlydHkgaWNvbiAtLT5cbiAgICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkJhY2t3YXJkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImJhY2t3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZUFmdGVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICB9XG5cbiAgICA8IS0tIG1hdC10YWJsZSBzdHlsZSAoZS5nLiB1c2VkIGluIHN1bWFyaXMgYWN0aXZpdHkgY2FsZW5kYXIpIC0tPlxuICAgIEBjYXNlICgnbWF0LXRhYmxlJykge1xuICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3NdPVwiY2xhc3NMaXN0XCIgW2NsYXNzLm1hdC1jb2x1bW4tc3RpY2t5XT1cInN0aWNreUVuZFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ2xpY2sub2JzZXJ2ZWRcIlxuICAgICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIChjbGljayk9XCJvcHRpb25zQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICAgIEBpZiAocm93LmVkaXRpbmcpIHtcbiAgICAgICAgICA8IS0tIHBlbmRpbmcgLS0+XG4gICAgICAgICAgQGlmIChyb3cudmFsaWRhdG9yPy5wZW5kaW5nKSB7XG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImRvdHNcIiBjbGFzcz1cImNlbnRlclwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGVCZWZvcmU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPCEtLSBDb25maXJtIGJ1dHRvbiAtLT5cbiAgICAgICAgICBAaWYgKGNhbkNvbmZpcm0gJiYgcm93LnZhbGlkYXRvcj8uZGlydHkgJiYgcm93LnZhbGlkYXRvci52YWxpZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BUFBMWScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUVkaXRDcmVhdGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2hlY2ttYXJrPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gbmV3IHJvdyAtLT5cbiAgICAgICAgICBAaWYgKHJvdy5pZCA9PT0gLTEpIHtcbiAgICAgICAgICAgIDwhLS0gZGVsZXRlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkRlbGV0ZSAmJiByb3cudmFsaWRhdG9yPy5pbnZhbGlkXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsT3JEZWxldGVDbGljay5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gYWRkIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoIWNhbkZvcndhcmQgJiYgY2FuQ29uZmlybUFuZEFkZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtQW5kQWRkQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBuZXh0IGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgICAgQGlmIChjYW5Gb3J3YXJkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwiZm9yd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gZXhpc3Rpbmcgcm93IC0tPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPCEtLSBjYW5jZWwgYnV0dG9uIC0tPlxuICAgICAgICAgICAgQGlmIChjYW5DYW5jZWwgJiYgcm93LnZhbGlkYXRvcj8uZGlydHkpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPCEtLSBkaXJ0eSBpY29uIC0tPlxuICAgICAgICAgIEBpZiAoZGlydHlJY29uICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwiZGlydHlJY29uXCIgY29sb3I9XCJhY2NlbnRcIiBjbGFzcz1cImRpcnR5LWljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gYmFja3dhcmQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgQGlmIChjYW5CYWNrd2FyZCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJiYWNrd2FyZC5lbWl0KHsgZXZlbnQ6ICRldmVudCwgcm93OiByb3cgfSlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGVBZnRlcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdyB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L21hdC1jZWxsPlxuXG4gICAgICA8bWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbWF0LWZvb3Rlci1jZWxsPlxuICAgIH1cbiAgfVxuPC9uZy1jb250YWluZXI+XG4iXX0=
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3RhYmxlL2NvbHVtbi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvdGFibGUvY29sdW1uL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU94RCxNQUFNLE9BQU8sc0JBQXNCO0lBNEJ2QjtJQUNBO0lBNUJlLFNBQVMsQ0FBZTtJQUN0QixjQUFjLENBQWlCO0lBRWpELFlBQVksR0FBRyxTQUFTLENBQUM7SUFDekIsS0FBSyxHQUEwQixPQUFPLENBQUM7SUFDUixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFNBQVMsQ0FBVTtJQUNuQixVQUFVLENBQVU7SUFDcEIsU0FBUyxDQUFVO0lBQ25CLFdBQVcsQ0FBVTtJQUNyQixVQUFVLENBQVU7SUFDcEIsZ0JBQWdCLENBQVU7SUFDekQsU0FBUyxDQUFtQjtJQUM1QixZQUFZLEdBQUcsb0JBQW9CLENBQUM7SUFDN0MsMkRBQTJEO0lBQzNDLFNBQVMsQ0FBUztJQUN6QixpQkFBaUIsQ0FBZ0M7SUFDakQsa0JBQWtCLENBQWdDO0lBRWpELFlBQVksR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBQ3pDLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0lBQ25FLHNCQUFzQixHQUFHLElBQUksWUFB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QUFqQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ0ksY0FBYztzQkFBeEMsU0FBUzt1QkFBQyxjQUFjO2dCQUVoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDa0MsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsU0FBUztzQkFBaEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRVUsU0FBUztzQkFBeEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNMLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jVGFibGVFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICdAZS1pcy9uZ3gtbWF0ZXJpYWwtdGFibGUnO1xuaW1wb3J0IHsgTWF0Q29sdW1uRGVmLCBNYXRUYWJsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1hY3Rpb25zLWNvbHVtbicsXG4gIHN0eWxlVXJsczogWycuL2FjdGlvbnMtY29sdW1uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9hY3Rpb25zLWNvbHVtbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbnNDb2x1bW5Db21wb25lbnQ8VCBleHRlbmRzIFRhYmxlRWxlbWVudDxhbnk+IHwgQXN5bmNUYWJsZUVsZW1lbnQ8YW55PiA9IFRhYmxlRWxlbWVudDxhbnk+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZChNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZjogTWF0Q29sdW1uRGVmO1xuICBAVmlld0NoaWxkKE1hdE1lbnVUcmlnZ2VyKSBtYXRNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XG5cbiAgQElucHV0KCkgbWF0Q29sdW1uRGVmID0gJ2FjdGlvbnMnO1xuICBASW5wdXQoKSBzdHlsZTogJ3RhYmxlJyB8ICdtYXQtdGFibGUnID0gJ3RhYmxlJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreUVuZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ2FuY2VsOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuQ29uZmlybTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkJhY2t3YXJkOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2FuRm9yd2FyZDogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkNvbmZpcm1BbmRBZGQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRpcnR5SWNvbjogYm9vbGVhbiB8IHN0cmluZztcbiAgQElucHV0KCkgb3B0aW9uc1RpdGxlID0gJ0NPTU1PTi5CVE5fT1BUSU9OUyc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgY2VsbFRlbXBsYXRlQWZ0ZXI6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuICBASW5wdXQoKSBjZWxsVGVtcGxhdGVCZWZvcmU6IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBUIH0+O1xuXG4gIEBPdXRwdXQoKSBvcHRpb25zQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsT3JEZWxldGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUVkaXRDcmVhdGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgY29uZmlybUFuZEFkZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBFdmVudDsgcm93OiBUIH0+KCk7XG4gIEBPdXRwdXQoKSBiYWNrd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuICBAT3V0cHV0KCkgZm9yd2FyZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IHJvdzogVCB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdGFibGU6IE1hdFRhYmxlPGFueT4sXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgLy8gVE9ETyBhdXRvIGNvbmZpZ3VyZSB1c2luZyBBcHBUYWJsZSA/IChuZWVkIGEgZm9yd2FyZFJlZigpIGluIHRoZSB0YWJsZSBjb21wb25lbnRcbiAgICAvL0BPcHRpb25hbCgpIHByaXZhdGUgYXBwVGFibGU6IEFwcFRhYmxlPGFueT5cbiAgICBpZiAoIXRhYmxlKSB0aHJvdyBuZXcgRXJyb3IoYFthY3Rpb25zLWNvbHVtbl0gdGhpcyBjb2x1bW4gY29tcG9uZW50IG11c3QgYmUgaW5zaWRlIGEgTWF0VGFibGUgY29tcG9uZW50YCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5jYW5DYW5jZWwgPSB0aGlzLmNhbkNhbmNlbCA/PyB0aGlzLmNhbmNlbE9yRGVsZXRlQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5Db25maXJtID0gdGhpcy5jYW5Db25maXJtID8/IHRoaXMuY29uZmlybUVkaXRDcmVhdGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkRlbGV0ZSA9IHRoaXMuY2FuRGVsZXRlID8/IHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPSB0aGlzLmNhbkNvbmZpcm1BbmRBZGQgPz8gdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sub2JzZXJ2ZWQ7XG4gICAgdGhpcy5jYW5CYWNrd2FyZCA9IHRoaXMuY2FuQmFja3dhcmQgPz8gdGhpcy5iYWNrd2FyZC5vYnNlcnZlZDtcbiAgICB0aGlzLmNhbkZvcndhcmQgPSB0aGlzLmNhbkZvcndhcmQgPz8gdGhpcy5mb3J3YXJkLm9ic2VydmVkO1xuICAgIHRoaXMuZGlydHlJY29uID0gdGhpcy5kaXJ0eUljb24gPT09IHRydWUgPyAnc3RhcicgOiB0aGlzLmRpcnR5SWNvbiA9PT0gZmFsc2UgPyBudWxsIDogKHRoaXMuZGlydHlJY29uID8/ICdzdGFyJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRhYmxlLnJlbW92ZUNvbHVtbkRlZih0aGlzLmNvbHVtbkRlZik7XG4gICAgdGhpcy5vcHRpb25zQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLm9wdGlvbnNDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2FuY2VsT3JEZWxldGVDbGljay51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY29uZmlybUFuZEFkZENsaWNrLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5jb25maXJtQW5kQWRkQ2xpY2sudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmJhY2t3YXJkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5iYWNrd2FyZC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZm9yd2FyZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm9yd2FyZC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwibWF0Q29sdW1uRGVmXCIgW3N0aWNreUVuZF09XCJzdGlja3lFbmRcIj5cbiAgQHN3aXRjaCAoc3R5bGUpIHtcbiAgICA8IS0tIG1hdC10YWJsZSBzdHlsZSAoZS5nLiB1c2VkIGluIHN1bWFyaXMgYWN0aXZpdHkgY2FsZW5kYXIpIC0tPlxuICAgIEBjYXNlICgndGFibGUnKSB7XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtjbGFzc109XCJjbGFzc0xpc3RcIiBbY2xhc3MubWF0LWNvbHVtbi1zdGlja3ldPVwic3RpY2t5RW5kXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAqbmdJZj1cIm9wdGlvbnNDbGljay5vYnNlcnZlZFwiXG4gICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbnNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9wdGlvbnNDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW2NsYXNzXT1cImNsYXNzTGlzdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlQmVmb3JlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gQ29uZmlybSBidXR0b24gLS0+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuQ29uZmlybSAmJiByb3cuZWRpdGluZyAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSAmJiByb3cudmFsaWRhdG9yPy52YWxpZFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQVBQTFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtRWRpdENyZWF0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrbWFyazwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgICAgQGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY2FuRm9yd2FyZCAmJiBjYW5Db25maXJtQW5kQWRkICYmIHJvdy52YWxpZGF0b3I/LnZhbGlkXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0FERCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIGV4aXN0aW5nIHJvdyAtLT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhbkNhbmNlbCAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9VTkRPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIG5leHQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgICBAaWYgKGNhbkZvcndhcmQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZGlydHkgaWNvbiAtLT5cbiAgICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCIgdGFiaW5kZXg9XCItMVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBiYWNrd2FyZCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICBAaWYgKGNhbkJhY2t3YXJkKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1yb3ctYWN0aW9uLWJ1dHRvbi1uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImJhY2t3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxUZW1wbGF0ZUFmdGVyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICB9XG5cbiAgICA8IS0tIG1hdC10YWJsZSBzdHlsZSAoZS5nLiB1c2VkIGluIHN1bWFyaXMgYWN0aXZpdHkgY2FsZW5kYXIpIC0tPlxuICAgIEBjYXNlICgnbWF0LXRhYmxlJykge1xuICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3NdPVwiY2xhc3NMaXN0XCIgW2NsYXNzLm1hdC1jb2x1bW4tc3RpY2t5XT1cInN0aWNreUVuZFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zQ2xpY2sub2JzZXJ2ZWRcIlxuICAgICAgICAgIFt0aXRsZV09XCJvcHRpb25zVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIChjbGljayk9XCJvcHRpb25zQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBbY2xhc3NdPVwiY2xhc3NMaXN0XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsVGVtcGxhdGVCZWZvcmU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICBAaWYgKHJvdy5lZGl0aW5nKSB7XG4gICAgICAgICAgPCEtLSBwZW5kaW5nIC0tPlxuICAgICAgICAgIEBpZiAocm93LnZhbGlkYXRvcj8ucGVuZGluZykge1xuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJkb3RzXCIgY2xhc3M9XCJjZW50ZXJcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gQ29uZmlybSBidXR0b24gLS0+XG4gICAgICAgICAgQGlmIChjYW5Db25maXJtICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5ICYmIHJvdy52YWxpZGF0b3IudmFsaWQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fQVBQTFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbmZpcm1FZGl0Q3JlYXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNoZWNrbWFyazwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIG5ldyByb3cgLS0+XG4gICAgICAgICAgQGlmIChyb3cuaWQgPT09IC0xKSB7XG4gICAgICAgICAgICA8IS0tIGRlbGV0ZSBidXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYW5EZWxldGUgJiYgcm93LnZhbGlkYXRvcj8uaW52YWxpZFwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbE9yRGVsZXRlQ2xpY2suZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZV9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIGFkZCBidXR0b24gLS0+XG4gICAgICAgICAgICBAaWYgKCFjYW5Gb3J3YXJkICYmIGNhbkNvbmZpcm1BbmRBZGQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9BREQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUFuZEFkZENsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gbmV4dCBidXR0b24gKGludmlzaWJsZSAtIGZvY3VzYWJsZSBvbmx5KSAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRm9yd2FyZCAmJiByb3cudmFsaWRhdG9yPy52YWxpZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtcm93LWFjdGlvbi1idXR0b24tbmF2aWdhdGlvblwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cImZvcndhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIGV4aXN0aW5nIHJvdyAtLT5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDwhLS0gY2FuY2VsIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuQ2FuY2VsICYmIHJvdy52YWxpZGF0b3I/LmRpcnR5KSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fVU5ETycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxPckRlbGV0ZUNsaWNrLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+dW5kbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tIG5leHQgYnV0dG9uIChpbnZpc2libGUgLSBmb2N1c2FibGUgb25seSkgLS0+XG4gICAgICAgICAgICBAaWYgKGNhbkZvcndhcmQgJiYgcm93LnZhbGlkYXRvcj8udmFsaWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgIChmb2N1cyk9XCJmb3J3YXJkLmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHJvdyB9KVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDwhLS0gZGlydHkgaWNvbiAtLT5cbiAgICAgICAgICBAaWYgKGRpcnR5SWNvbiAmJiByb3cudmFsaWRhdG9yPy5kaXJ0eSkge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cImRpcnR5SWNvblwiIGNvbG9yPVwiYWNjZW50XCIgY2xhc3M9XCJkaXJ0eS1pY29uXCI+PC9pb24taWNvbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIGJhY2t3YXJkIGJ1dHRvbiAoaW52aXNpYmxlIC0gZm9jdXNhYmxlIG9ubHkpIC0tPlxuICAgICAgICAgIEBpZiAoY2FuQmFja3dhcmQpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwibWF0LXJvdy1hY3Rpb24tYnV0dG9uLW5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiYmFja3dhcmQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIHJvdzogcm93IH0pXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFRlbXBsYXRlQWZ0ZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtY2VsbD5cblxuICAgICAgPG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdEZvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L21hdC1mb290ZXItY2VsbD5cbiAgICB9XG4gIH1cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -35317,11 +35317,11 @@ class ActionsColumnComponent {
|
|
|
35317
35317
|
this.forward.unsubscribe();
|
|
35318
35318
|
}
|
|
35319
35319
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsColumnComponent, deps: [{ token: i1$7.MatTable }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
35320
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplateAfter: "cellTemplateAfter", cellTemplateBefore: "cellTemplateBefore" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1$7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$7.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$7.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
|
|
35320
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ActionsColumnComponent, selector: "app-actions-column", inputs: { matColumnDef: "matColumnDef", style: "style", stickyEnd: ["stickyEnd", "stickyEnd", booleanAttribute], canCancel: ["canCancel", "canCancel", booleanAttribute], canConfirm: ["canConfirm", "canConfirm", booleanAttribute], canDelete: ["canDelete", "canDelete", booleanAttribute], canBackward: ["canBackward", "canBackward", booleanAttribute], canForward: ["canForward", "canForward", booleanAttribute], canConfirmAndAdd: ["canConfirmAndAdd", "canConfirmAndAdd", booleanAttribute], dirtyIcon: "dirtyIcon", optionsTitle: "optionsTitle", classList: ["class", "classList"], cellTemplateAfter: "cellTemplateAfter", cellTemplateBefore: "cellTemplateBefore" }, outputs: { optionsClick: "optionsClick", cancelOrDeleteClick: "cancelOrDeleteClick", confirmEditCreateClick: "confirmEditCreateClick", confirmAndAddClick: "confirmAndAddClick", backward: "backward", forward: "forward" }, viewQueries: [{ propertyName: "columnDef", first: true, predicate: MatColumnDef, descendants: true }, { propertyName: "matMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i1$7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$7.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$7.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] });
|
|
35321
35321
|
}
|
|
35322
35322
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionsColumnComponent, decorators: [{
|
|
35323
35323
|
type: Component,
|
|
35324
|
-
args: [{ selector: 'app-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n
|
|
35324
|
+
args: [{ selector: 'app-actions-column', template: "<ng-container [matColumnDef]=\"matColumnDef\" [stickyEnd]=\"stickyEnd\">\n @switch (style) {\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('table') {\n <th mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </th>\n <td mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canConfirm && row.editing && row.validator?.dirty && row.validator?.valid\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"!canForward && canConfirmAndAdd && row.validator?.valid\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canCancel && row.validator?.dirty\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\" tabindex=\"-1\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </td>\n }\n\n <!-- mat-table style (e.g. used in sumaris activity calendar) -->\n @case ('mat-table') {\n <mat-header-cell *matHeaderCellDef [class]=\"classList\" [class.mat-column-sticky]=\"stickyEnd\">\n <button\n mat-icon-button\n *ngIf=\"optionsClick.observed\"\n [title]=\"optionsTitle | translate\"\n (click)=\"optionsClick.emit($event)\"\n >\n <mat-icon>more_vert</mat-icon>\n </button>\n <ng-content select=\"[matHeader]\"></ng-content>\n </mat-header-cell>\n <mat-cell *matCellDef=\"let row\" [class]=\"classList\">\n <ng-container *ngTemplateOutlet=\"cellTemplateBefore; context: { $implicit: row }\"></ng-container>\n @if (row.editing) {\n <!-- pending -->\n @if (row.validator?.pending) {\n <ion-spinner name=\"dots\" class=\"center\"></ion-spinner>\n }\n\n <!-- Confirm button -->\n @if (canConfirm && row.validator?.dirty && row.validator.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_APPLY' | translate\"\n (click)=\"confirmEditCreateClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>checkmark</mat-icon>\n </button>\n }\n\n <!-- new row -->\n @if (row.id === -1) {\n <!-- delete button -->\n <button\n mat-icon-button\n color=\"light\"\n *ngIf=\"canDelete && row.validator?.invalid\"\n [title]=\"'COMMON.BTN_DELETE' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>delete_outline</mat-icon>\n </button>\n\n <!-- add button -->\n @if (!canForward && canConfirmAndAdd && row.validator?.valid) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_ADD' | translate\"\n (click)=\"confirmAndAddClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>add</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n\n <!-- existing row -->\n } @else {\n <!-- cancel button -->\n @if (canCancel && row.validator?.dirty) {\n <button\n mat-icon-button\n color=\"light\"\n [title]=\"'COMMON.BTN_UNDO' | translate\"\n (click)=\"cancelOrDeleteClick.emit({ event: $event, row: row })\"\n >\n <mat-icon>undo</mat-icon>\n </button>\n }\n\n <!-- next button (invisible - focusable only) -->\n @if (canForward && row.validator?.valid) {\n <button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"forward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n } @else {\n <!-- dirty icon -->\n @if (dirtyIcon && row.validator?.dirty) {\n <ion-icon [name]=\"dirtyIcon\" color=\"accent\" class=\"dirty-icon\"></ion-icon>\n }\n\n <!-- backward button (invisible - focusable only) -->\n @if (canBackward) {\n <button\n mat-icon-button\n class=\"mat-row-action-button-navigation\"\n (focus)=\"backward.emit({ event: $event, row: row })\"\n ></button>\n }\n }\n\n <ng-container *ngTemplateOutlet=\"cellTemplateAfter; context: { $implicit: row }\"></ng-container>\n </mat-cell>\n\n <mat-footer-cell *matFooterCellDef>\n <ng-content select=\"[matFooter]\"></ng-content>\n </mat-footer-cell>\n }\n }\n</ng-container>\n", styles: [".mat-column-actions .mat-row-action-button-navigation{color:transparent;position:relative;top:0;margin:0!important;padding:0!important;width:0!important;height:1px}\n"] }]
|
|
35325
35325
|
}], ctorParameters: () => [{ type: i1$7.MatTable }, { type: i0.ChangeDetectorRef }], propDecorators: { columnDef: [{
|
|
35326
35326
|
type: ViewChild,
|
|
35327
35327
|
args: [MatColumnDef]
|