@elderbyte/ngx-starter 15.12.0 → 15.13.1

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.
@@ -80,7 +80,7 @@ export class ElderCardOrganizerComponent {
80
80
  }
81
81
  }
82
82
  ElderCardOrganizerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardOrganizerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
83
- ElderCardOrganizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardOrganizerComponent, selector: "elder-card-organizer", inputs: { canRemove: "canRemove", removeConfirmation: "removeConfirmation", copyOnDrag: "copyOnDrag", autoMoveCards: "autoMoveCards", headerEnabled: "headerEnabled", canEnterPredicate: "canEnterPredicate", organizerModel: "organizerModel" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, host: { listeners: { "document:keydown.shift": "onKeydownHandler($event)", "document:keyup.shift": "onKeyupHandler($event)" } }, queries: [{ propertyName: "stackCardTemplate", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.ElderCardStackComponent, selector: "elder-card-stack", inputs: ["stackId", "headerEnabled", "headerTitle", "canRemove", "removeConfirmation", "canEnterPredicate", "connectedTo", "autoMoveCards", "canCollapse", "copyOnDrag", "cardTemplate", "stack"], outputs: ["requestNewCard", "requestRemoveCard", "cardClick", "cardDropped"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
83
+ ElderCardOrganizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardOrganizerComponent, selector: "elder-card-organizer", inputs: { canRemove: "canRemove", removeConfirmation: "removeConfirmation", copyOnDrag: "copyOnDrag", autoMoveCards: "autoMoveCards", headerEnabled: "headerEnabled", canEnterPredicate: "canEnterPredicate", organizerModel: "organizerModel" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, host: { listeners: { "document:keydown.shift": "onKeydownHandler($event)", "document:keyup.shift": "onKeyupHandler($event)" } }, queries: [{ propertyName: "stackCardTemplate", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.ElderCardStackComponent, selector: "elder-card-stack", inputs: ["stackId", "headerEnabled", "headerTitle", "canRemove", "canAdd", "canDrag", "removeConfirmation", "canEnterPredicate", "connectedTo", "autoMoveCards", "canCollapse", "copyOnDrag", "cardTemplate", "stack"], outputs: ["requestNewCard", "requestRemoveCard", "cardClick", "cardDropped"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardOrganizerComponent, decorators: [{
85
85
  type: Component,
86
86
  args: [{ selector: 'elder-card-organizer', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n" }]
@@ -25,6 +25,8 @@ export class ElderCardStackComponent {
25
25
  **************************************************************************/
26
26
  this.logger = LoggerFactory.getLogger('ElderCardStackComponent');
27
27
  this.headerEnabled = true;
28
+ this.canAdd = true;
29
+ this.canDrag = true;
28
30
  this.requestNewCard = new EventEmitter();
29
31
  this.requestRemoveCard = new EventEmitter();
30
32
  this.cardClick = new EventEmitter();
@@ -158,10 +160,10 @@ export class ElderCardStackComponent {
158
160
  }
159
161
  }
160
162
  ElderCardStackComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
161
- ElderCardStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: { stackId: "stackId", headerEnabled: "headerEnabled", headerTitle: "headerTitle", canRemove: "canRemove", removeConfirmation: "removeConfirmation", canEnterPredicate: "canEnterPredicate", connectedTo: "connectedTo", autoMoveCards: "autoMoveCards", canCollapse: "canCollapse", copyOnDrag: "copyOnDrag", cardTemplate: "cardTemplate", stack: "stack" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, queries: [{ propertyName: "cardTemplateQuery", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i6.ElderCardComponent, selector: "elder-card", inputs: ["appearance", "float", "flat"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
163
+ ElderCardStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: { stackId: "stackId", headerEnabled: "headerEnabled", headerTitle: "headerTitle", canRemove: "canRemove", canAdd: "canAdd", canDrag: "canDrag", removeConfirmation: "removeConfirmation", canEnterPredicate: "canEnterPredicate", connectedTo: "connectedTo", autoMoveCards: "autoMoveCards", canCollapse: "canCollapse", copyOnDrag: "copyOnDrag", cardTemplate: "cardTemplate", stack: "stack" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, queries: [{ propertyName: "cardTemplateQuery", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button *ngIf=\"canAdd\" mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListDisabled]=\"!canDrag\"\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.card.cdk-drag-disabled{cursor:default}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i6.ElderCardComponent, selector: "elder-card", inputs: ["appearance", "float", "flat"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
162
164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardStackComponent, decorators: [{
163
165
  type: Component,
164
- args: [{ selector: 'elder-card-stack', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
166
+ args: [{ selector: 'elder-card-stack', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button *ngIf=\"canAdd\" mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListDisabled]=\"!canDrag\"\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.card.cdk-drag-disabled{cursor:default}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
165
167
  }], ctorParameters: function () { return []; }, propDecorators: { stackId: [{
166
168
  type: Input
167
169
  }], headerEnabled: [{
@@ -170,6 +172,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
170
172
  type: Input
171
173
  }], canRemove: [{
172
174
  type: Input
175
+ }], canAdd: [{
176
+ type: Input
177
+ }], canDrag: [{
178
+ type: Input
173
179
  }], removeConfirmation: [{
174
180
  type: Input
175
181
  }], requestNewCard: [{
@@ -202,4 +208,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
202
208
  }], stack: [{
203
209
  type: Input
204
210
  }] } });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtb3JnYW5pemVyL2NhcmQtc3RhY2svZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtb3JnYW5pemVyL2NhcmQtc3RhY2svZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFDLGFBQWEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLHVCQUF1QjtJQXFFbEM7Ozs7Z0ZBSTRFO0lBRTVFO1FBekVBOzs7O29GQUk0RTtRQUUzRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBV3RFLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBWVosbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUd6RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRzVDLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBTyxD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QUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQzs7b0hBek9VLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHdsQkEyRHBCLHVCQUF1QiwyQkFBVSxXQUFXLDJDQ3pFNUQsNjhEQXNFQTsyRkR4RGEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzBFQWtCeEMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlVLGNBQWM7c0JBRDdCLE1BQU07dUJBQUMsZ0JBQWdCO2dCQUlSLGlCQUFpQjtzQkFEaEMsTUFBTTt1QkFBQyxtQkFBbUI7Z0JBSVgsU0FBUztzQkFEeEIsTUFBTTt1QkFBQyxXQUFXO2dCQUlILFdBQVc7c0JBRDFCLE1BQU07dUJBQUMsYUFBYTtnQkFJZCxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFVQyxhQUFhO3NCQURuQixLQUFLO2dCQU1DLGlCQUFpQjtzQkFEdkIsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFLbkUsV0FBVztzQkFEakIsS0FBSztnQkFJQyxVQUFVO3NCQURoQixLQUFLO2dCQThCSyxZQUFZO3NCQUR0QixLQUFLO2dCQWNLLEtBQUs7c0JBRGYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDYXJkRHJvcEV2ZW50LCBDYXJkU3RhY2t9IGZyb20gJy4uL2NhcmQtc3RhY2snO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHtmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ0VudGVyLCBDZGtEcmFnRXhpdCwgQ2RrRHJvcExpc3R9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0VsZGVyU3RhY2tDYXJkRGlyZWN0aXZlfSBmcm9tICcuLi9jYXJkLW9yZ2FuaXplci9lbGRlci1zdGFjay1jYXJkLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLWNhcmQtc3RhY2snLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VsZGVyLWNhcmQtc3RhY2suY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJDYXJkU3RhY2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VsZGVyQ2FyZFN0YWNrQ29tcG9uZW50Jyk7XG5cblxuICBwcml2YXRlIF9zdGFjazogQ2FyZFN0YWNrPGFueSwgYW55PjtcblxuICBwdWJsaWMgY2FyZHMkOiBPYnNlcnZhYmxlPGFueVtdPjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhY2tJZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkZXJFbmFibGVkID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgaGVhZGVyVGl0bGU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY2FuUmVtb3ZlOiBib29sZWFuO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW1vdmVDb25maXJtYXRpb246IChjYXJkOiBhbnkpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQE91dHB1dCgncmVxdWVzdE5ld0NhcmQnKVxuICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdE5ld0NhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRTdGFjazxhbnksIGFueT4+KCk7XG5cbiAgQE91dHB1dCgncmVxdWVzdFJlbW92ZUNhcmQnKVxuICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdFJlbW92ZUNhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCdjYXJkQ2xpY2snKVxuICBwdWJsaWMgcmVhZG9ubHkgY2FyZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgnY2FyZERyb3BwZWQnKVxuICBwdWJsaWMgcmVhZG9ubHkgY2FyZERyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmREcm9wRXZlbnQ8YW55LCBhbnk+PigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYW5FbnRlclByZWRpY2F0ZTogKGNhcmQ6IGFueSwgc3RhY2s6IENhcmRTdGFjazxhbnksIGFueT4pID0+IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbm5lY3RlZFRvOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCB0aGUgY2FyZCBzdGFjayB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlIGNhcmQgZHJhZyAmIGRyb3BzXG4gICAqIGFuZCBtb3ZlIGNhcmQgZnJvbSBvbmUgc3RhY2sgdG8gYW5vdGhlciBhbmQgbW92ZVxuICAgKiB0aGVtIGluc2lkZSBhIHN0YWNrLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9Nb3ZlQ2FyZHMgPSBmYWxzZTtcblxuICAvLyBUZW1wbGF0ZXNcblxuICBAQ29udGVudENoaWxkKEVsZGVyU3RhY2tDYXJkRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIGNhcmRUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9jYXJkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhbkNvbGxhcHNlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvcHlPbkRyYWcgPSBmYWxzZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN0YWNrSWQgPSAnaWQtJyArIE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiA2KSArIDEpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQgIHtcblxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjYXJkVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9jYXJkVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FyZFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jYXJkVGVtcGxhdGUgfHwgdGhpcy5jYXJkVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2soKTogQ2FyZFN0YWNrPGFueSwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFjayh2YWx1ZTogQ2FyZFN0YWNrPGFueSwgYW55Pikge1xuICAgIHRoaXMuX3N0YWNrID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5fc3RhY2spIHtcbiAgICAgIHRoaXMuY2FyZHMkID0gdGhpcy5fc3RhY2suY2FyZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FyZHMkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSBEcmFnICYgRHJvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgY2FyZEVudGVyZWQoZXZlbnQ6IENka0RyYWdFbnRlcjxhbnk+KTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ0RyYWcgZW50ZXI6JywgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNhcmRFeGl0ZWQoZXZlbnQ6IENka0RyYWdFeGl0PGFueT4pOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnRHJhZyBleGl0JywgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNhcmREcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxDYXJkU3RhY2s8YW55LCBhbnk+Pik6IHZvaWQge1xuXG4gICAgY29uc3QgY2FyZERyb3AgPSBuZXcgQ2FyZERyb3BFdmVudChcbiAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgIGV2ZW50Lml0ZW0uZGF0YSxcbiAgICAgIHRoaXMuY29weU9uRHJhZyxcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICBldmVudC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmF1dG9Nb3ZlQ2FyZHMpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FyZERyb3AoY2FyZERyb3ApOyAvLyBUT0RPIE1ha2UgY29uZmlndXJhYmxlIG9yIGRpc2FibGUgd2hlbiBjdXN0b20gc29ydCBpcyBlbmFibGVkP1xuICAgIH1cblxuICAgIHRoaXMuY2FyZERyb3BwZWQubmV4dChjYXJkRHJvcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGVyUHJlZGljYXRlKCk6IChkcmFnOiBDZGtEcmFnPGFueT4sIGRyb3A6IENka0Ryb3BMaXN0PGFueT4pID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZHJhZzogQ2RrRHJhZzxhbnk+LCBkcm9wOiBDZGtEcm9wTGlzdDxhbnk+KSAgPT4ge1xuICAgICAgaWYgKHRoaXMuY2FuRW50ZXJQcmVkaWNhdGUpIHtcbiAgICAgICByZXR1cm4gdGhpcy5jYW5FbnRlclByZWRpY2F0ZShkcmFnLmRhdGEsIGRyb3AuZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBwdWJsaWMgb25SZXF1ZXN0TmV3Q2FyZChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdE5ld0NhcmQubmV4dCh0aGlzLl9zdGFjayk7XG4gIH1cblxuICBwdWJsaWMgb25SZXF1ZXN0UmVtb3ZlQ2FyZChldmVudDogTW91c2VFdmVudCwgY2FyZDogYW55KTogdm9pZCB7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQ29uZmlybWF0aW9uICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgdGhpcy5yZW1vdmVDb25maXJtYXRpb24oY2FyZCkucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7IHRoaXMucmVtb3ZlQ2FyZChjYXJkKTsgfVxuICAgICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2FyZChjYXJkKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBvbkNhcmRTZWxlY3RlZChldmVudDogTW91c2VFdmVudCwgY2FyZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jYXJkQ2xpY2submV4dChjYXJkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVtb3ZlQ2FyZChjYXJkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFjay5yZW1vdmVDYXJkKGNhcmQpO1xuICAgIHRoaXMucmVxdWVzdFJlbW92ZUNhcmQubmV4dChjYXJkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdCB0byBkcmFnIGFuZCBkcm9wIGV2ZW50cyAtXG4gICAqIHdpbGwgbW92ZSBjYXJkcyBiZXR3ZWVuIHN0YWNrcyBhbmQgc29ydCB0aGVtIGlmIHBvc3NpYmxlLlxuICAgKiBAcGFyYW0gY2FyZERyb3BcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQ2FyZERyb3AoY2FyZERyb3A6IENhcmREcm9wRXZlbnQ8YW55LCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKGNhcmREcm9wLmZyb21TdGFjayA9PT0gY2FyZERyb3AudG9TdGFja1xuICAgICAgJiYgY2FyZERyb3AudG9TdGFjayA9PT0gdGhpcy5fc3RhY2spIHtcblxuICAgICAgLy8gRHJhZyAmIERyb3AgaW5zaWRlIHRoZSBzYW1lIHN0YWNrIC0+IHNvcnRcblxuICAgICAgaWYgKCF0aGlzLl9zdGFjay5zb3J0KSB7XG4gICAgICAgIC8vIE9ubHkgYWxsb3cgbWFudWFsIHNvcnQgd2hlbiB0aGUgdXNlciBkaWQgbm90IHByb3ZpZGVcbiAgICAgICAgLy8gYSBnZW5lcmFsIHNvcnQgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5fc3RhY2subW92ZUNhcmQoY2FyZERyb3AuZnJvbUluZGV4LCBjYXJkRHJvcC50b0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyBEcm9wcGVkIENhcmQgZnJvbSBhbm90aGVyIHN0YWNrXG5cbiAgICAgIGlmICghY2FyZERyb3AuY29weSkge1xuICAgICAgICBjYXJkRHJvcC5mcm9tU3RhY2sucmVtb3ZlQ2FyZChjYXJkRHJvcC5jYXJkKTtcbiAgICAgIH1cbiAgICAgIGNhcmREcm9wLnRvU3RhY2suYWRkQ2FyZChjYXJkRHJvcC5jYXJkLCBjYXJkRHJvcC50b0luZGV4KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbCBjYXJkLXN0YWNrIGhvdmVybWVcIj5cblxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGhlYWRlciAqbmdJZj1cImhlYWRlckVuYWJsZWRcIlxuICAgICAgICAgIGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1zdGFydC1jZW50ZXIgZmxleC1ub25lIGdhcC1tZCBzdGFjay1oZWFkZXIgcC1tZFwiPlxuXG4gICAgPGgzIGNsYXNzPVwibWF0LXN1YnRpdGxlLTIgbm9zZWxlY3RcIj57e2hlYWRlclRpdGxlIHwgdHJhbnNsYXRlfX08L2gzPlxuICAgIDxzbWFsbCBjbGFzcz1cIm1hdC1jYXB0aW9uIG5vc2VsZWN0XCI+KHt7KGNhcmRzJCB8IGFzeW5jKT8ubGVuZ3RofX0pPC9zbWFsbD5cblxuICAgIDxzcGFuIGNsYXNzPVwiZmxleFwiPjwvc3Bhbj5cblxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25SZXF1ZXN0TmV3Q2FyZCgkZXZlbnQpXCI+XG4gICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICA8L2hlYWRlcj5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiaGVhZGVyRW5hYmxlZFwiPjwvbWF0LWRpdmlkZXI+XG5cblxuICA8IS0tIGNhcmQgbGlzdCAtLT5cbiAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZmxleCBjYXJkLWNvbnRhaW5lclwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZ2FwLXNtIHNjcm9sbGFibGUgcC1zbSBjYXJkLWxpc3RcIlxuICAgICAgICAgW2lkXT1cInN0YWNrSWRcIlxuICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwic3RhY2tcIlxuICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiY29ubmVjdGVkVG9cIlxuXG4gICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJlbnRlclByZWRpY2F0ZVwiXG4gICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cImNhcmRFbnRlcmVkKCRldmVudClcIlxuICAgICAgICAgKGNka0Ryb3BMaXN0RXhpdGVkKT1cImNhcmRFeGl0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImNhcmREcm9wKCRldmVudClcIlxuICAgID5cblxuICAgICAgPCEtLSBjYXJkIC0tPlxuICAgICAgPGVsZGVyLWNhcmRcbiAgICAgICAgKm5nRm9yPVwibGV0IGNhcmQgb2YgY2FyZHMkIHwgYXN5bmM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjbGFzcz1cImNhcmQgZmxleC1ub25lXCJcbiAgICAgICAgY2RrRHJhZyBbY2RrRHJhZ0RhdGFdPVwiY2FyZFwiXG4gICAgICAgIChjbGljayk9XCJvbkNhcmRTZWxlY3RlZCgkZXZlbnQsIGNhcmQpXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxheW91dC1yb3cgcGxhY2UtYmV0d2Vlbi1jZW50ZXIgZmxleFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZFRlbXBsYXRlIHx8IHNpbXBsZUNhcmRUZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogY2FyZCwgaW5kZXg6IGl9XCI+PC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiY2FuUmVtb3ZlXCIgIGNsYXNzPVwiaGlkZVwiIChjbGljayk9XCJvblJlcXVlc3RSZW1vdmVDYXJkKCRldmVudCwgY2FyZClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZWxkZXItY2FyZD5cblxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuXG5cbiAgPG5nLXRlbXBsYXRlICNzaW1wbGVDYXJkVGVtcGxhdGUgbGV0LWNhcmQ+XG4gICAgPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZmxleFwiPlxuICAgICAgPHAgY2xhc3M9XCJub3NlbGVjdFwiPnt7Y2FyZH19PC9wPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG48L2Rpdj5cblxuXG5cblxuIl19
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtb3JnYW5pemVyL2NhcmQtc3RhY2svZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lbGRlcmJ5dGUvbmd4LXN0YXJ0ZXIvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtb3JnYW5pemVyL2NhcmQtc3RhY2svZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFDLGFBQWEsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7QUFRckYsTUFBTSxPQUFPLHVCQUF1QjtJQTJFbEM7Ozs7Z0ZBSTRFO0lBRTVFO1FBL0VBOzs7O29GQUk0RTtRQUUzRCxXQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBV3RFLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBU3JCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFHZCxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBTU4sbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUd6RCxzQkFBaUIsR0FBRyxJ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QUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQzs7b0hBL09VLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDhuQkFpRXBCLHVCQUF1QiwyQkFBVSxXQUFXLDJDQy9FNUQsMmdFQXVFQTsyRkR6RGEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNOzBFQWtCeEMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsTUFBTTtzQkFEWixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFJQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBSVUsY0FBYztzQkFEN0IsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBSVIsaUJBQWlCO3NCQURoQyxNQUFNO3VCQUFDLG1CQUFtQjtnQkFJWCxTQUFTO3NCQUR4QixNQUFNO3VCQUFDLFdBQVc7Z0JBSUgsV0FBVztzQkFEMUIsTUFBTTt1QkFBQyxhQUFhO2dCQUlkLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJQyxXQUFXO3NCQURqQixLQUFLO2dCQVVDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBTUMsaUJBQWlCO3NCQUR2QixZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUtuRSxXQUFXO3NCQURqQixLQUFLO2dCQUlDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBOEJLLFlBQVk7c0JBRHRCLEtBQUs7Z0JBY0ssS0FBSztzQkFEZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NhcmREcm9wRXZlbnQsIENhcmRTdGFja30gZnJvbSAnLi4vY2FyZC1zdGFjayc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge2ZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0Nka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW50ZXIsIENka0RyYWdFeGl0LCBDZGtEcm9wTGlzdH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7RWxkZXJTdGFja0NhcmREaXJlY3RpdmV9IGZyb20gJy4uL2NhcmQtb3JnYW5pemVyL2VsZGVyLXN0YWNrLWNhcmQuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWxkZXItY2FyZC1zdGFjaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGRlci1jYXJkLXN0YWNrLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItY2FyZC1zdGFjay5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBFbGRlckNhcmRTdGFja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWxkZXJDYXJkU3RhY2tDb21wb25lbnQnKTtcblxuXG4gIHByaXZhdGUgX3N0YWNrOiBDYXJkU3RhY2s8YW55LCBhbnk+O1xuXG4gIHB1YmxpYyBjYXJkcyQ6IE9ic2VydmFibGU8YW55W10+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGFja0lkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRlckVuYWJsZWQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoZWFkZXJUaXRsZTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYW5SZW1vdmU6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhbkFkZCA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhbkRyYWcgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByZW1vdmVDb25maXJtYXRpb246IChjYXJkOiBhbnkpID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgQE91dHB1dCgncmVxdWVzdE5ld0NhcmQnKVxuICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdE5ld0NhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmRTdGFjazxhbnksIGFueT4+KCk7XG5cbiAgQE91dHB1dCgncmVxdWVzdFJlbW92ZUNhcmQnKVxuICBwdWJsaWMgcmVhZG9ubHkgcmVxdWVzdFJlbW92ZUNhcmQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCdjYXJkQ2xpY2snKVxuICBwdWJsaWMgcmVhZG9ubHkgY2FyZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgnY2FyZERyb3BwZWQnKVxuICBwdWJsaWMgcmVhZG9ubHkgY2FyZERyb3BwZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENhcmREcm9wRXZlbnQ8YW55LCBhbnk+PigpO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYW5FbnRlclByZWRpY2F0ZTogKGNhcmQ6IGFueSwgc3RhY2s6IENhcmRTdGFjazxhbnksIGFueT4pID0+IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbm5lY3RlZFRvOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCB0aGUgY2FyZCBzdGFjayB3aWxsXG4gICAqIGF1dG9tYXRpY2FsbHkgaGFuZGxlIGNhcmQgZHJhZyAmIGRyb3BzXG4gICAqIGFuZCBtb3ZlIGNhcmQgZnJvbSBvbmUgc3RhY2sgdG8gYW5vdGhlciBhbmQgbW92ZVxuICAgKiB0aGVtIGluc2lkZSBhIHN0YWNrLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9Nb3ZlQ2FyZHMgPSBmYWxzZTtcblxuICAvLyBUZW1wbGF0ZXNcblxuICBAQ29udGVudENoaWxkKEVsZGVyU3RhY2tDYXJkRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgcHVibGljIGNhcmRUZW1wbGF0ZVF1ZXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9jYXJkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhbkNvbGxhcHNlID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvcHlPbkRyYWcgPSBmYWxzZTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN0YWNrSWQgPSAnaWQtJyArIE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiA2KSArIDEpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQgIHtcblxuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjYXJkVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICB0aGlzLl9jYXJkVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FyZFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9jYXJkVGVtcGxhdGUgfHwgdGhpcy5jYXJkVGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhY2soKTogQ2FyZFN0YWNrPGFueSwgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWNrO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzdGFjayh2YWx1ZTogQ2FyZFN0YWNrPGFueSwgYW55Pikge1xuICAgIHRoaXMuX3N0YWNrID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy5fc3RhY2spIHtcbiAgICAgIHRoaXMuY2FyZHMkID0gdGhpcy5fc3RhY2suY2FyZHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FyZHMkID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSBEcmFnICYgRHJvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgY2FyZEVudGVyZWQoZXZlbnQ6IENka0RyYWdFbnRlcjxhbnk+KTogdm9pZCB7XG4gICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ0RyYWcgZW50ZXI6JywgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNhcmRFeGl0ZWQoZXZlbnQ6IENka0RyYWdFeGl0PGFueT4pOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnRHJhZyBleGl0JywgZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNhcmREcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxDYXJkU3RhY2s8YW55LCBhbnk+Pik6IHZvaWQge1xuXG4gICAgY29uc3QgY2FyZERyb3AgPSBuZXcgQ2FyZERyb3BFdmVudChcbiAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICBldmVudC5jb250YWluZXIuZGF0YSxcbiAgICAgIGV2ZW50Lml0ZW0uZGF0YSxcbiAgICAgIHRoaXMuY29weU9uRHJhZyxcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICBldmVudC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyXG4gICAgKTtcblxuICAgIGlmICh0aGlzLmF1dG9Nb3ZlQ2FyZHMpIHtcbiAgICAgIHRoaXMuaGFuZGxlQ2FyZERyb3AoY2FyZERyb3ApOyAvLyBUT0RPIE1ha2UgY29uZmlndXJhYmxlIG9yIGRpc2FibGUgd2hlbiBjdXN0b20gc29ydCBpcyBlbmFibGVkP1xuICAgIH1cblxuICAgIHRoaXMuY2FyZERyb3BwZWQubmV4dChjYXJkRHJvcCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGVudGVyUHJlZGljYXRlKCk6IChkcmFnOiBDZGtEcmFnPGFueT4sIGRyb3A6IENka0Ryb3BMaXN0PGFueT4pID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiAoZHJhZzogQ2RrRHJhZzxhbnk+LCBkcm9wOiBDZGtEcm9wTGlzdDxhbnk+KSAgPT4ge1xuICAgICAgaWYgKHRoaXMuY2FuRW50ZXJQcmVkaWNhdGUpIHtcbiAgICAgICByZXR1cm4gdGhpcy5jYW5FbnRlclByZWRpY2F0ZShkcmFnLmRhdGEsIGRyb3AuZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBwdWJsaWMgb25SZXF1ZXN0TmV3Q2FyZChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdE5ld0NhcmQubmV4dCh0aGlzLl9zdGFjayk7XG4gIH1cblxuICBwdWJsaWMgb25SZXF1ZXN0UmVtb3ZlQ2FyZChldmVudDogTW91c2VFdmVudCwgY2FyZDogYW55KTogdm9pZCB7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuXG4gICAgaWYgKHRoaXMucmVtb3ZlQ29uZmlybWF0aW9uICE9PSB1bmRlZmluZWQpIHtcblxuICAgICAgdGhpcy5yZW1vdmVDb25maXJtYXRpb24oY2FyZCkucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmlybWVkKSB7IHRoaXMucmVtb3ZlQ2FyZChjYXJkKTsgfVxuICAgICAgICAgIH0pO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2FyZChjYXJkKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBvbkNhcmRTZWxlY3RlZChldmVudDogTW91c2VFdmVudCwgY2FyZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jYXJkQ2xpY2submV4dChjYXJkKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVtb3ZlQ2FyZChjYXJkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGFjay5yZW1vdmVDYXJkKGNhcmQpO1xuICAgIHRoaXMucmVxdWVzdFJlbW92ZUNhcmQubmV4dChjYXJkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdCB0byBkcmFnIGFuZCBkcm9wIGV2ZW50cyAtXG4gICAqIHdpbGwgbW92ZSBjYXJkcyBiZXR3ZWVuIHN0YWNrcyBhbmQgc29ydCB0aGVtIGlmIHBvc3NpYmxlLlxuICAgKiBAcGFyYW0gY2FyZERyb3BcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQ2FyZERyb3AoY2FyZERyb3A6IENhcmREcm9wRXZlbnQ8YW55LCBhbnk+KTogdm9pZCB7XG4gICAgaWYgKGNhcmREcm9wLmZyb21TdGFjayA9PT0gY2FyZERyb3AudG9TdGFja1xuICAgICAgJiYgY2FyZERyb3AudG9TdGFjayA9PT0gdGhpcy5fc3RhY2spIHtcblxuICAgICAgLy8gRHJhZyAmIERyb3AgaW5zaWRlIHRoZSBzYW1lIHN0YWNrIC0+IHNvcnRcblxuICAgICAgaWYgKCF0aGlzLl9zdGFjay5zb3J0KSB7XG4gICAgICAgIC8vIE9ubHkgYWxsb3cgbWFudWFsIHNvcnQgd2hlbiB0aGUgdXNlciBkaWQgbm90IHByb3ZpZGVcbiAgICAgICAgLy8gYSBnZW5lcmFsIHNvcnQgZnVuY3Rpb25cbiAgICAgICAgdGhpcy5fc3RhY2subW92ZUNhcmQoY2FyZERyb3AuZnJvbUluZGV4LCBjYXJkRHJvcC50b0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyBEcm9wcGVkIENhcmQgZnJvbSBhbm90aGVyIHN0YWNrXG5cbiAgICAgIGlmICghY2FyZERyb3AuY29weSkge1xuICAgICAgICBjYXJkRHJvcC5mcm9tU3RhY2sucmVtb3ZlQ2FyZChjYXJkRHJvcC5jYXJkKTtcbiAgICAgIH1cbiAgICAgIGNhcmREcm9wLnRvU3RhY2suYWRkQ2FyZChjYXJkRHJvcC5jYXJkLCBjYXJkRHJvcC50b0luZGV4KTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImxheW91dC1jb2wgZnVsbCBjYXJkLXN0YWNrIGhvdmVybWVcIj5cblxuICA8IS0tIEhlYWRlciAtLT5cbiAgPGhlYWRlciAqbmdJZj1cImhlYWRlckVuYWJsZWRcIlxuICAgICAgICAgIGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1zdGFydC1jZW50ZXIgZmxleC1ub25lIGdhcC1tZCBzdGFjay1oZWFkZXIgcC1tZFwiPlxuXG4gICAgPGgzIGNsYXNzPVwibWF0LXN1YnRpdGxlLTIgbm9zZWxlY3RcIj57e2hlYWRlclRpdGxlIHwgdHJhbnNsYXRlfX08L2gzPlxuICAgIDxzbWFsbCBjbGFzcz1cIm1hdC1jYXB0aW9uIG5vc2VsZWN0XCI+KHt7KGNhcmRzJCB8IGFzeW5jKT8ubGVuZ3RofX0pPC9zbWFsbD5cblxuICAgIDxzcGFuIGNsYXNzPVwiZmxleFwiPjwvc3Bhbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJjYW5BZGRcIiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblJlcXVlc3ROZXdDYXJkKCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuXG4gIDwvaGVhZGVyPlxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJoZWFkZXJFbmFibGVkXCI+PC9tYXQtZGl2aWRlcj5cblxuXG4gIDwhLS0gY2FyZCBsaXN0IC0tPlxuICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmbGV4IGNhcmQtY29udGFpbmVyXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBnYXAtc20gc2Nyb2xsYWJsZSBwLXNtIGNhcmQtbGlzdFwiXG4gICAgICAgICBbaWRdPVwic3RhY2tJZFwiXG4gICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgW2Nka0Ryb3BMaXN0RGlzYWJsZWRdPVwiIWNhbkRyYWdcIlxuICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJzdGFja1wiXG4gICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJjb25uZWN0ZWRUb1wiXG5cbiAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImVudGVyUHJlZGljYXRlXCJcbiAgICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwiY2FyZEVudGVyZWQoJGV2ZW50KVwiXG4gICAgICAgICAoY2RrRHJvcExpc3RFeGl0ZWQpPVwiY2FyZEV4aXRlZCgkZXZlbnQpXCJcbiAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiY2FyZERyb3AoJGV2ZW50KVwiXG4gICAgPlxuXG4gICAgICA8IS0tIGNhcmQgLS0+XG4gICAgICA8ZWxkZXItY2FyZFxuICAgICAgICAqbmdGb3I9XCJsZXQgY2FyZCBvZiBjYXJkcyQgfCBhc3luYzsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIGNsYXNzPVwiY2FyZCBmbGV4LW5vbmVcIlxuICAgICAgICBjZGtEcmFnIFtjZGtEcmFnRGF0YV09XCJjYXJkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2FyZFNlbGVjdGVkKCRldmVudCwgY2FyZClcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBwbGFjZS1iZXR3ZWVuLWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkVGVtcGxhdGUgfHwgc2ltcGxlQ2FyZFRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBjYXJkLCBpbmRleDogaX1cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJjYW5SZW1vdmVcIiAgY2xhc3M9XCJoaWRlXCIgKGNsaWNrKT1cIm9uUmVxdWVzdFJlbW92ZUNhcmQoJGV2ZW50LCBjYXJkKVwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9lbGRlci1jYXJkPlxuXG4gICAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cblxuICA8bmctdGVtcGxhdGUgI3NpbXBsZUNhcmRUZW1wbGF0ZSBsZXQtY2FyZD5cbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LWNvbCBmbGV4XCI+XG4gICAgICA8cCBjbGFzcz1cIm5vc2VsZWN0XCI+e3tjYXJkfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG5cbjwvZGl2PlxuXG5cblxuXG4iXX0=
@@ -11308,6 +11308,8 @@ class ElderCardStackComponent {
11308
11308
  **************************************************************************/
11309
11309
  this.logger = LoggerFactory.getLogger('ElderCardStackComponent');
11310
11310
  this.headerEnabled = true;
11311
+ this.canAdd = true;
11312
+ this.canDrag = true;
11311
11313
  this.requestNewCard = new EventEmitter();
11312
11314
  this.requestRemoveCard = new EventEmitter();
11313
11315
  this.cardClick = new EventEmitter();
@@ -11441,10 +11443,10 @@ class ElderCardStackComponent {
11441
11443
  }
11442
11444
  }
11443
11445
  ElderCardStackComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11444
- ElderCardStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: { stackId: "stackId", headerEnabled: "headerEnabled", headerTitle: "headerTitle", canRemove: "canRemove", removeConfirmation: "removeConfirmation", canEnterPredicate: "canEnterPredicate", connectedTo: "connectedTo", autoMoveCards: "autoMoveCards", canCollapse: "canCollapse", copyOnDrag: "copyOnDrag", cardTemplate: "cardTemplate", stack: "stack" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, queries: [{ propertyName: "cardTemplateQuery", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5$4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ElderCardComponent, selector: "elder-card", inputs: ["appearance", "float", "flat"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11446
+ ElderCardStackComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: { stackId: "stackId", headerEnabled: "headerEnabled", headerTitle: "headerTitle", canRemove: "canRemove", canAdd: "canAdd", canDrag: "canDrag", removeConfirmation: "removeConfirmation", canEnterPredicate: "canEnterPredicate", connectedTo: "connectedTo", autoMoveCards: "autoMoveCards", canCollapse: "canCollapse", copyOnDrag: "copyOnDrag", cardTemplate: "cardTemplate", stack: "stack" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, queries: [{ propertyName: "cardTemplateQuery", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button *ngIf=\"canAdd\" mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListDisabled]=\"!canDrag\"\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.card.cdk-drag-disabled{cursor:default}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5$2.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i5$4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i5$4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ElderCardComponent, selector: "elder-card", inputs: ["appearance", "float", "flat"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11445
11447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardStackComponent, decorators: [{
11446
11448
  type: Component,
11447
- args: [{ selector: 'elder-card-stack', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
11449
+ args: [{ selector: 'elder-card-stack', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"layout-col full card-stack hoverme\">\n\n <!-- Header -->\n <header *ngIf=\"headerEnabled\"\n class=\"layout-row place-start-center flex-none gap-md stack-header p-md\">\n\n <h3 class=\"mat-subtitle-2 noselect\">{{headerTitle | translate}}</h3>\n <small class=\"mat-caption noselect\">({{(cards$ | async)?.length}})</small>\n\n <span class=\"flex\"></span>\n\n <button *ngIf=\"canAdd\" mat-icon-button type=\"button\" (click)=\"onRequestNewCard($event)\">\n <mat-icon>add</mat-icon>\n </button>\n\n </header>\n <mat-divider *ngIf=\"headerEnabled\"></mat-divider>\n\n\n <!-- card list -->\n <div class=\"layout-col flex card-container\">\n\n <div class=\"layout-col gap-sm scrollable p-sm card-list\"\n [id]=\"stackId\"\n cdkDropList\n [cdkDropListDisabled]=\"!canDrag\"\n [cdkDropListData]=\"stack\"\n [cdkDropListConnectedTo]=\"connectedTo\"\n\n [cdkDropListEnterPredicate]=\"enterPredicate\"\n (cdkDropListEntered)=\"cardEntered($event)\"\n (cdkDropListExited)=\"cardExited($event)\"\n (cdkDropListDropped)=\"cardDrop($event)\"\n >\n\n <!-- card -->\n <elder-card\n *ngFor=\"let card of cards$ | async; let i = index\"\n class=\"card flex-none\"\n cdkDrag [cdkDragData]=\"card\"\n (click)=\"onCardSelected($event, card)\">\n\n <div class=\"layout-row place-between-center flex\">\n <ng-container\n *ngTemplateOutlet=\"cardTemplate || simpleCardTemplate; context: {$implicit: card, index: i}\"></ng-container>\n\n <button mat-icon-button type=\"button\"\n *ngIf=\"canRemove\" class=\"hide\" (click)=\"onRequestRemoveCard($event, card)\">\n <mat-icon>close</mat-icon>\n </button>\n\n </div>\n\n </elder-card>\n\n </div>\n\n </div>\n\n\n <ng-template #simpleCardTemplate let-card>\n <div class=\"layout-col flex\">\n <p class=\"noselect\">{{card}}</p>\n </div>\n </ng-template>\n\n</div>\n\n\n\n\n", styles: [".stack-header{height:62px}.card-container{min-width:120px;min-height:0}.card-list{min-height:100%}.card{cursor:move}.card.cdk-drag-disabled{cursor:default}.hoverme .hide{visibility:hidden}.hoverme:hover .hide{visibility:visible}.rotate{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.scrollable{overflow-y:auto;-webkit-overflow-scrolling:touch}.noselect{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.card-list.cdk-drop-list-dragging .card:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}\n"] }]
11448
11450
  }], ctorParameters: function () { return []; }, propDecorators: { stackId: [{
11449
11451
  type: Input
11450
11452
  }], headerEnabled: [{
@@ -11453,6 +11455,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
11453
11455
  type: Input
11454
11456
  }], canRemove: [{
11455
11457
  type: Input
11458
+ }], canAdd: [{
11459
+ type: Input
11460
+ }], canDrag: [{
11461
+ type: Input
11456
11462
  }], removeConfirmation: [{
11457
11463
  type: Input
11458
11464
  }], requestNewCard: [{
@@ -11562,7 +11568,7 @@ class ElderCardOrganizerComponent {
11562
11568
  }
11563
11569
  }
11564
11570
  ElderCardOrganizerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardOrganizerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11565
- ElderCardOrganizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardOrganizerComponent, selector: "elder-card-organizer", inputs: { canRemove: "canRemove", removeConfirmation: "removeConfirmation", copyOnDrag: "copyOnDrag", autoMoveCards: "autoMoveCards", headerEnabled: "headerEnabled", canEnterPredicate: "canEnterPredicate", organizerModel: "organizerModel" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, host: { listeners: { "document:keydown.shift": "onKeydownHandler($event)", "document:keyup.shift": "onKeyupHandler($event)" } }, queries: [{ propertyName: "stackCardTemplate", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: ["stackId", "headerEnabled", "headerTitle", "canRemove", "removeConfirmation", "canEnterPredicate", "connectedTo", "autoMoveCards", "canCollapse", "copyOnDrag", "cardTemplate", "stack"], outputs: ["requestNewCard", "requestRemoveCard", "cardClick", "cardDropped"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11571
+ ElderCardOrganizerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ElderCardOrganizerComponent, selector: "elder-card-organizer", inputs: { canRemove: "canRemove", removeConfirmation: "removeConfirmation", copyOnDrag: "copyOnDrag", autoMoveCards: "autoMoveCards", headerEnabled: "headerEnabled", canEnterPredicate: "canEnterPredicate", organizerModel: "organizerModel" }, outputs: { requestNewCard: "requestNewCard", requestRemoveCard: "requestRemoveCard", cardClick: "cardClick", cardDropped: "cardDropped" }, host: { listeners: { "document:keydown.shift": "onKeydownHandler($event)", "document:keyup.shift": "onKeyupHandler($event)" } }, queries: [{ propertyName: "stackCardTemplate", first: true, predicate: ElderStackCardDirective, descendants: true, read: TemplateRef }], ngImport: i0, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ElderCardStackComponent, selector: "elder-card-stack", inputs: ["stackId", "headerEnabled", "headerTitle", "canRemove", "canAdd", "canDrag", "removeConfirmation", "canEnterPredicate", "connectedTo", "autoMoveCards", "canCollapse", "copyOnDrag", "cardTemplate", "stack"], outputs: ["requestNewCard", "requestRemoveCard", "cardClick", "cardDropped"] }, { kind: "pipe", type: i1$4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
11566
11572
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ElderCardOrganizerComponent, decorators: [{
11567
11573
  type: Component,
11568
11574
  args: [{ selector: 'elder-card-organizer', changeDetection: ChangeDetectionStrategy.OnPush, template: "\n<div class=\"layout-row place-start-stretch gap-lg full p-md card-organizer\">\n <elder-card-stack class=\"flex\"\n *ngFor=\"let stack of stacks$ | async\"\n\n [stack]=\"stack\"\n\n [stackId]=\"stack.id\"\n [headerEnabled]=\"headerEnabled\"\n [headerTitle]=\"stack.title\"\n [canRemove]=\"canRemove\"\n\n [cardTemplate]=\"stackCardTemplate\"\n [removeConfirmation]=\"removeConfirmation\"\n [autoMoveCards]=\"autoMoveCards\"\n (requestNewCard)=\"onRequestNewCard($event)\"\n (requestRemoveCard)=\"onRequestRemoveCard($event)\"\n (cardClick)=\"onCardClicked($event)\"\n\n [connectedTo]=\"organizerModel.stackIds | async\"\n (cardDropped)=\"onCardDropped($event)\"\n [canEnterPredicate]=\"canEnterPredicate\"\n [copyOnDrag]=\"copyOnDrag\"\n >\n </elder-card-stack>\n</div>\n" }]