@coreui/angular
Version:
CoreUI for Angular UI components library
181 lines • 22.3 kB
JavaScript
import { Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
import { animate, state, style, transition, trigger } from '@angular/animations';
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { TemplateIdDirective } from '../shared';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "../button/button-close.directive";
export class AlertComponent {
constructor() {
/**
* Sets the color context of the component to one of CoreUI’s themed colors.
*
* @type Colors
* @default 'primary'
*/
this.color = 'primary';
this._dismissible = false;
this._fade = false;
/**
* Default role for alert. [docs]
* @type string
* @default 'alert'
*/
this.role = 'alert';
this._visible = true;
/**
* Event triggered on the alert dismiss.
*/
this.visibleChange = new EventEmitter();
this.templates = {};
}
/**
* Optionally adds a close button to alert and allow it to self dismiss.
* @type boolean
*/
get dismissible() {
return this._dismissible;
}
set dismissible(value) {
this._dismissible = coerceBooleanProperty(value);
}
/**
* Adds animation for dismissible alert.
* @type boolean
*/
get fade() {
return this._fade;
}
set fade(value) {
this._fade = coerceBooleanProperty(value);
}
/**
* Toggle the visibility of alert component.
* @type boolean
*/
set visible(value) {
if (this._visible !== value) {
this._visible = coerceBooleanProperty(value);
this.visibleChange.emit(value);
}
}
;
get visible() {
return this._visible;
}
get animationDisabled() {
return !this.fade;
}
get animateType() {
return this.visible ? 'show' : 'hide';
}
get hostClasses() {
return {
alert: true,
'alert-dismissible': this.dismissible,
fade: this.fade,
show: !this.hide,
[`alert-${this.color}`]: !!this.color && this.variant !== 'solid',
[`bg-${this.color}`]: !!this.color && this.variant === 'solid',
'text-white': !!this.color && this.variant === 'solid'
};
}
onAnimationStart($event) {
this.onAnimationEvent($event);
}
onAnimationDone($event) {
this.onAnimationEvent($event);
}
ngAfterContentInit() {
this.contentTemplates.forEach((child) => {
this.templates[child.id] = child.templateRef;
});
}
onAnimationEvent(event) {
this.hide = event.phaseName === 'start' && event.toState === 'show';
if (event.phaseName === 'done') {
this.hide = (event.toState === 'hide' || event.toState === 'void');
if (event.toState === 'show') {
this.hide = false;
}
}
}
}
AlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
AlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: AlertComponent, selector: "c-alert", inputs: { color: "color", dismissible: "dismissible", fade: "fade", role: "role", variant: "variant", visible: "visible" }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "@fadeInOut.start": "onAnimationStart($event)", "@fadeInOut.done": "onAnimationDone($event)" }, properties: { "attr.role": "this.role", "@.disabled": "this.animationDisabled", "@fadeInOut": "this.animateType", "class": "this.hostClasses" } }, queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], exportAs: ["cAlert"], ngImport: i0, template: "<ng-container *ngIf=\"visible || !hide\">\n <ng-template [ngIf]=\"dismissible\">\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\">\n </ng-container>\n </ng-template>\n <ng-content></ng-content>\n</ng-container>\n\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ButtonCloseDirective, selector: "[cButtonClose]", inputs: ["white"] }], animations: [
trigger('fadeInOut', [
state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })),
state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
transition('show => hide', [
animate('.3s ease-out'),
]),
transition('hide => show', [
animate('.3s ease-in'),
]),
transition('show => void', [
animate('.3s ease-out'),
]),
transition('void => show', [
animate('.3s ease-in'),
]),
])
] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: AlertComponent, decorators: [{
type: Component,
args: [{ selector: 'c-alert', exportAs: 'cAlert', animations: [
trigger('fadeInOut', [
state('show', style({ opacity: 1, height: '*', padding: '*', border: '*', margin: '*' })),
state('hide', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
state('void', style({ opacity: 0, height: 0, padding: 0, border: 0, margin: 0 })),
transition('show => hide', [
animate('.3s ease-out'),
]),
transition('hide => show', [
animate('.3s ease-in'),
]),
transition('show => void', [
animate('.3s ease-out'),
]),
transition('void => show', [
animate('.3s ease-in'),
]),
])
], template: "<ng-container *ngIf=\"visible || !hide\">\n <ng-template [ngIf]=\"dismissible\">\n <ng-container *ngTemplateOutlet=\"templates?.alertButtonCloseTemplate || defaultAlertButtonCloseTemplate\">\n </ng-container>\n </ng-template>\n <ng-content></ng-content>\n</ng-container>\n\n<ng-template #defaultAlertButtonCloseTemplate>\n <button (click)=\"visible=false\" aria-label=\"Close\" cButtonClose></button>\n</ng-template>\n", styles: [":host{display:block;overflow:hidden}\n"] }]
}], propDecorators: { color: [{
type: Input
}], dismissible: [{
type: Input
}], fade: [{
type: Input
}], role: [{
type: HostBinding,
args: ['attr.role']
}, {
type: Input
}], variant: [{
type: Input
}], visible: [{
type: Input
}], visibleChange: [{
type: Output
}], contentTemplates: [{
type: ContentChildren,
args: [TemplateIdDirective, { descendants: true }]
}], animationDisabled: [{
type: HostBinding,
args: ['@.disabled']
}], animateType: [{
type: HostBinding,
args: ['@fadeInOut']
}], hostClasses: [{
type: HostBinding,
args: ['class']
}], onAnimationStart: [{
type: HostListener,
args: ['@fadeInOut.start', ['$event']]
}], onAnimationDone: [{
type: HostListener,
args: ['@fadeInOut.done', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9hbGVydC9hbGVydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBa0IsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakcsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzVFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQTZCaEQsTUFBTSxPQUFPLGNBQWM7SUF6QjNCO1FBZ0NFOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFXLFNBQVMsQ0FBQztRQWEzQixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQWFyQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXRCOzs7O1dBSUc7UUFFTSxTQUFJLEdBQUcsT0FBTyxDQUFDO1FBc0JoQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBRXhCOztXQUVHO1FBQ08sa0JBQWEsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVwRSxjQUFTLEdBQVEsRUFBRSxDQUFDO0tBbURyQjtJQWhIQzs7O09BR0c7SUFDSCxJQUNJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQUksV0FBVyxDQUFDLEtBQWM7UUFDNUIsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFjO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQWlCRDs7O09BR0c7SUFDSCxJQUNJLE9BQU8sQ0FBQyxLQUFjO1FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFBQSxDQUFDO0lBQ0YsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFXRCxJQUNJLGlCQUFpQjtRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFDSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFDSSxXQUFXO1FBQ2IsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJO1lBQ1gsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDckMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDaEIsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTztZQUNqRSxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPO1lBQzlELFlBQVksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU87U0FDdkQsQ0FBQztJQUNKLENBQUM7SUFHRCxnQkFBZ0IsQ0FBQyxNQUFzQjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUdELGVBQWUsQ0FBQyxNQUFzQjtRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBMEIsRUFBRSxFQUFFO1lBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBcUI7UUFDcEMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQztRQUNwRSxJQUFJLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO2FBQ25CO1NBQ0Y7SUFDSCxDQUFDOzsyR0E5SFUsY0FBYzsrRkFBZCxjQUFjLGlnQkE2RVIsbUJBQW1CLHNFQ3pIdEMsOGFBV0Esa2NEYWM7UUFDVixPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25CLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztZQUN2RixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7WUFDL0UsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQy9FLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDeEIsQ0FBQztZQUNGLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdkIsQ0FBQztZQUNGLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxjQUFjLENBQUM7YUFDeEIsQ0FBQztZQUNGLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxhQUFhLENBQUM7YUFDdkIsQ0FBQztTQUNILENBQUM7S0FDSDsyRkFFVSxjQUFjO2tCQXpCMUIsU0FBUzsrQkFDRSxTQUFTLFlBR1QsUUFBUSxjQUNOO3dCQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7NEJBQ25CLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQzs0QkFDdkYsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDOzRCQUMvRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7NEJBQy9FLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0NBQ3pCLE9BQU8sQ0FBQyxjQUFjLENBQUM7NkJBQ3hCLENBQUM7NEJBQ0YsVUFBVSxDQUFDLGNBQWMsRUFBRTtnQ0FDekIsT0FBTyxDQUFDLGFBQWEsQ0FBQzs2QkFDdkIsQ0FBQzs0QkFDRixVQUFVLENBQUMsY0FBYyxFQUFFO2dDQUN6QixPQUFPLENBQUMsY0FBYyxDQUFDOzZCQUN4QixDQUFDOzRCQUNGLFVBQVUsQ0FBQyxjQUFjLEVBQUU7Z0NBQ3pCLE9BQU8sQ0FBQyxhQUFhLENBQUM7NkJBQ3ZCLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDs4QkFlUSxLQUFLO3NCQUFiLEtBQUs7Z0JBT0YsV0FBVztzQkFEZCxLQUFLO2dCQWNGLElBQUk7c0JBRFAsS0FBSztnQkFlRyxJQUFJO3NCQURaLFdBQVc7dUJBQUMsV0FBVzs7c0JBQ3ZCLEtBQUs7Z0JBTUcsT0FBTztzQkFBZixLQUFLO2dCQU9GLE9BQU87c0JBRFYsS0FBSztnQkFlSSxhQUFhO3NCQUF0QixNQUFNO2dCQUdvRCxnQkFBZ0I7c0JBQTFFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUdyRCxpQkFBaUI7c0JBRHBCLFdBQVc7dUJBQUMsWUFBWTtnQkFNckIsV0FBVztzQkFEZCxXQUFXO3VCQUFDLFlBQVk7Z0JBTXJCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPO2dCQWNwQixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNNUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkV2ZW50LCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5cclxuaW1wb3J0IHsgQ29sb3JzIH0gZnJvbSAnLi4vY29yZXVpLnR5cGVzJztcclxuaW1wb3J0IHsgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uL3NoYXJlZCc7XHJcblxyXG50eXBlIEFuaW1hdGVUeXBlID0gKCdoaWRlJyB8ICdzaG93Jyk7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2MtYWxlcnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBleHBvcnRBczogJ2NBbGVydCcsXHJcbiAgYW5pbWF0aW9uczogW1xyXG4gICAgdHJpZ2dlcignZmFkZUluT3V0JywgW1xyXG4gICAgICBzdGF0ZSgnc2hvdycsIHN0eWxlKHtvcGFjaXR5OiAxLCBoZWlnaHQ6ICcqJywgcGFkZGluZzogJyonLCBib3JkZXI6ICcqJywgbWFyZ2luOiAnKid9KSksXHJcbiAgICAgIHN0YXRlKCdoaWRlJywgc3R5bGUoe29wYWNpdHk6IDAsIGhlaWdodDogMCwgcGFkZGluZzogMCwgYm9yZGVyOiAwLCBtYXJnaW46IDB9KSksXHJcbiAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoe29wYWNpdHk6IDAsIGhlaWdodDogMCwgcGFkZGluZzogMCwgYm9yZGVyOiAwLCBtYXJnaW46IDB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ3Nob3cgPT4gaGlkZScsIFtcclxuICAgICAgICBhbmltYXRlKCcuM3MgZWFzZS1vdXQnKSxcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2hpZGUgPT4gc2hvdycsIFtcclxuICAgICAgICBhbmltYXRlKCcuM3MgZWFzZS1pbicpLFxyXG4gICAgICBdKSxcclxuICAgICAgdHJhbnNpdGlvbignc2hvdyA9PiB2b2lkJywgW1xyXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLW91dCcpLFxyXG4gICAgICBdKSxcclxuICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiBzaG93JywgW1xyXG4gICAgICAgIGFuaW1hdGUoJy4zcyBlYXNlLWluJyksXHJcbiAgICAgIF0pLFxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG5cclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzbWlzc2libGU6IEJvb2xlYW5JbnB1dDtcclxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZmFkZTogQm9vbGVhbklucHV0O1xyXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXNpYmxlOiBCb29sZWFuSW5wdXQ7XHJcblxyXG4gIGhpZGUhOiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGNvbG9yIGNvbnRleHQgb2YgdGhlIGNvbXBvbmVudCB0byBvbmUgb2YgQ29yZVVJ4oCZcyB0aGVtZWQgY29sb3JzLlxyXG4gICAqXHJcbiAgICogQHR5cGUgQ29sb3JzXHJcbiAgICogQGRlZmF1bHQgJ3ByaW1hcnknXHJcbiAgICovXHJcbiAgQElucHV0KCkgY29sb3I6IENvbG9ycyA9ICdwcmltYXJ5JztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWxseSBhZGRzIGEgY2xvc2UgYnV0dG9uIHRvIGFsZXJ0IGFuZCBhbGxvdyBpdCB0byBzZWxmIGRpc21pc3MuXHJcbiAgICogQHR5cGUgYm9vbGVhblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGRpc21pc3NpYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc21pc3NpYmxlO1xyXG4gIH1cclxuICBzZXQgZGlzbWlzc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2Rpc21pc3NpYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGlzbWlzc2libGUgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhbmltYXRpb24gZm9yIGRpc21pc3NpYmxlIGFsZXJ0LlxyXG4gICAqIEB0eXBlIGJvb2xlYW5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIGdldCBmYWRlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZhZGU7XHJcbiAgfVxyXG4gIHNldCBmYWRlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mYWRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmFkZSA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBEZWZhdWx0IHJvbGUgZm9yIGFsZXJ0LiBbZG9jc11cclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKiBAZGVmYXVsdCAnYWxlcnQnXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gIEBJbnB1dCgpIHJvbGUgPSAnYWxlcnQnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGFsZXJ0IHZhcmlhbnQgdG8gYSBzb2xpZC5cclxuICAgKiBAdHlwZSBzdHJpbmdcclxuICAgKi9cclxuICBASW5wdXQoKSB2YXJpYW50PzogJ3NvbGlkJyB8IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIGFsZXJ0IGNvbXBvbmVudC5cclxuICAgKiBAdHlwZSBib29sZWFuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3Zpc2libGUgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3Zpc2libGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBnZXQgdmlzaWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92aXNpYmxlO1xyXG4gIH1cclxuICBwcml2YXRlIF92aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIHRoZSBhbGVydCBkaXNtaXNzLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHRlbXBsYXRlczogYW55ID0ge307XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBjb250ZW50VGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlSWREaXJlY3RpdmU+O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ0AuZGlzYWJsZWQnKVxyXG4gIGdldCBhbmltYXRpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5mYWRlO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdAZmFkZUluT3V0JylcclxuICBnZXQgYW5pbWF0ZVR5cGUoKTogQW5pbWF0ZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSA/ICdzaG93JyA6ICdoaWRlJztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKVxyXG4gIGdldCBob3N0Q2xhc3NlcygpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWxlcnQ6IHRydWUsXHJcbiAgICAgICdhbGVydC1kaXNtaXNzaWJsZSc6IHRoaXMuZGlzbWlzc2libGUsXHJcbiAgICAgIGZhZGU6IHRoaXMuZmFkZSxcclxuICAgICAgc2hvdzogIXRoaXMuaGlkZSxcclxuICAgICAgW2BhbGVydC0ke3RoaXMuY29sb3J9YF06ICEhdGhpcy5jb2xvciAmJiB0aGlzLnZhcmlhbnQgIT09ICdzb2xpZCcsXHJcbiAgICAgIFtgYmctJHt0aGlzLmNvbG9yfWBdOiAhIXRoaXMuY29sb3IgJiYgdGhpcy52YXJpYW50ID09PSAnc29saWQnLFxyXG4gICAgICAndGV4dC13aGl0ZSc6ICEhdGhpcy5jb2xvciAmJiB0aGlzLnZhcmlhbnQgPT09ICdzb2xpZCdcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdAZmFkZUluT3V0LnN0YXJ0JywgWyckZXZlbnQnXSlcclxuICBvbkFuaW1hdGlvblN0YXJ0KCRldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMub25BbmltYXRpb25FdmVudCgkZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignQGZhZGVJbk91dC5kb25lJywgWyckZXZlbnQnXSlcclxuICBvbkFuaW1hdGlvbkRvbmUoJGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkFuaW1hdGlvbkV2ZW50KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZXMuZm9yRWFjaCgoY2hpbGQ6IFRlbXBsYXRlSWREaXJlY3RpdmUpID0+IHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQW5pbWF0aW9uRXZlbnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZGUgPSBldmVudC5waGFzZU5hbWUgPT09ICdzdGFydCcgJiYgZXZlbnQudG9TdGF0ZSA9PT0gJ3Nob3cnO1xyXG4gICAgaWYgKGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnKSB7XHJcbiAgICAgIHRoaXMuaGlkZSA9IChldmVudC50b1N0YXRlID09PSAnaGlkZScgfHwgZXZlbnQudG9TdGF0ZSA9PT0gJ3ZvaWQnKTtcclxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICdzaG93Jykge1xyXG4gICAgICAgIHRoaXMuaGlkZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aXNpYmxlIHx8ICFoaWRlXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJkaXNtaXNzaWJsZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZXM/LmFsZXJ0QnV0dG9uQ2xvc2VUZW1wbGF0ZSB8fCBkZWZhdWx0QWxlcnRCdXR0b25DbG9zZVRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBbGVydEJ1dHRvbkNsb3NlVGVtcGxhdGU+XG4gIDxidXR0b24gKGNsaWNrKT1cInZpc2libGU9ZmFsc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjQnV0dG9uQ2xvc2U+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19