igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
403 lines • 27.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { transition, trigger, useAnimation } from '@angular/animations';
import { CommonModule } from '@angular/common';
import { Component, EventEmitter, HostBinding, Input, NgModule, NgZone, Output } from '@angular/core';
import { fadeIn, fadeOut, slideInBottom, slideOutBottom } from '../animations/main';
/** @type {?} */
var NEXT_ID = 0;
/**
* **Ignite UI for Angular Snackbar** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/snackbar.html)
*
* The Ignite UI Snack Bar provides feedback about an operation with a single-line message, which can
* include a link to an action such as Undo.
*
* Example:
* ```html
* <button (click)="snackbar.show()">Send message</button>
* <div>
* <igx-snackbar #snackbar message="Message sent">
* </igx-snackbar>
* </div>
* ```
*/
var IgxSnackbarComponent = /** @class */ (function () {
function IgxSnackbarComponent(zone) {
this.zone = zone;
/**
* Sets/gets the `id` of the snackbar.
* If not set, the `id` of the first snackbar component will be `"igx-snackbar-0"`;
* ```html
* <igx-snackbar id = "Snackbar1"></igx-snackbar>
* ```
* ```typescript
* let snackbarId = this.snackbar.id;
* ```
* \@memberof IgxSnackbarComponent
*/
this.id = "igx-snackbar-" + NEXT_ID++;
/**
* Enables/Disables the visibility of the snackbar.
* If not set, the `isVisible` attribute will have value `false`.
* ```html
* <igx-snackbar [isVisible] = "true"></igx-snackbar>
* ```
* ```typescript
* let isVisible = this.snackbar.isVisible;
* ```
*/
this.isVisible = false;
/**
* Sets/gets if the snackbar will be automatically hidden after the `displayTime` is over.
* Default value is `true`.
* ```html
* <igx-snackbar [autoHide] = "false"></igx-snackbar>
* ```
* ```typescript
* let autoHide = this.snackbar.autoHide;
* ```
*/
this.autoHide = true;
/**
* Sets/gets the duration of time(in milliseconds) in which the snackbar will be visible after it is being shown.
* Default value is 4000.
* ```html
* <igx-snackbar [displayTime] = "2000"></igx-snackbar>
* ```
* ```typescript
* let displayTime = this.snackbar.displayTime;
* ```
*/
this.displayTime = 4000;
/**
* An event that will be emitted when the action is executed.
* Provides reference to the `IgxSnackbarComponent` as an argument.
* ```html
* <igx-snackbar (onAction) = "onAction($event)"></igx-snackbar>
* ```
*/
this.onAction = new EventEmitter();
/**
* An event that will be emitted when the snackbar animation starts.
* Provides reference to the `AnimationEvent` interface as an argument.
* ```html
* <igx-snackbar (animationStarted) = "animationStarted($event)"></igx-snackbar>
* ```
*/
this.animationStarted = new EventEmitter();
/**
* An event that will be emitted when the snackbar animation ends.
* Provides reference to the `AnimationEvent` interface as an argument.
* ```html
* <igx-snackbar (animationDone) = "animationDone($event)"></igx-snackbar>
* ```
*/
this.animationDone = new EventEmitter();
}
/**
* Shows the snackbar and hides it after the `displayTime` is over if `autoHide` is set to `true`.
* ```typescript
* this.snackbar.show();
* ```
*/
/**
* Shows the snackbar and hides it after the `displayTime` is over if `autoHide` is set to `true`.
* ```typescript
* this.snackbar.show();
* ```
* @return {?}
*/
IgxSnackbarComponent.prototype.show = /**
* Shows the snackbar and hides it after the `displayTime` is over if `autoHide` is set to `true`.
* ```typescript
* this.snackbar.show();
* ```
* @return {?}
*/
function () {
var _this = this;
clearTimeout(this.timeoutId);
setTimeout(this.timeoutId);
this.isVisible = true;
if (this.autoHide) {
this.timeoutId = setTimeout(function () {
_this.hide();
}, this.displayTime);
}
};
/**
* Hides the snackbar.
* ```typescript
* this.snackbar.hide();
* ```
*/
/**
* Hides the snackbar.
* ```typescript
* this.snackbar.hide();
* ```
* @return {?}
*/
IgxSnackbarComponent.prototype.hide = /**
* Hides the snackbar.
* ```typescript
* this.snackbar.hide();
* ```
* @return {?}
*/
function () {
this.isVisible = false;
clearTimeout(this.timeoutId);
};
/**
*@hidden
*/
/**
* @hidden
* @return {?}
*/
IgxSnackbarComponent.prototype.triggerAction = /**
* @hidden
* @return {?}
*/
function () {
this.onAction.emit(this);
};
/**
*@hidden
* @memberof IgxSnackbarComponent
*/
/**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
IgxSnackbarComponent.prototype.snackbarAnimationStarted = /**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
function (evt) {
if (evt.fromState === 'void') {
this.animationStarted.emit(evt);
}
};
/**
*@hidden
* @memberof IgxSnackbarComponent
*/
/**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
IgxSnackbarComponent.prototype.snackbarAnimationDone = /**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
function (evt) {
if (evt.fromState === 'show') {
this.animationDone.emit(evt);
}
};
IgxSnackbarComponent.decorators = [
{ type: Component, args: [{
animations: [
trigger('slideInOut', [
transition('void => *', [
useAnimation(slideInBottom, {
params: {
duration: '.35s',
easing: 'cubic-bezier(0.0, 0.0, 0.2, 1)',
fromPosition: 'translateY(100%)',
toPosition: 'translateY(0)'
}
})
]),
transition('* => void', [
useAnimation(slideOutBottom, {
params: {
duration: '.2s',
easing: 'cubic-bezier(0.4, 0.0, 1, 1)',
fromPosition: 'translateY(0)',
toOpacity: 1,
toPosition: 'translateY(100%)'
}
})
])
]),
trigger('fadeInOut', [
transition('void => *', [
useAnimation(fadeIn, {
params: {
duration: '.35s',
easing: 'ease-out'
}
})
]),
transition('* => void', [
useAnimation(fadeOut, {
params: {
duration: '.2s',
easing: 'ease-out'
}
})
])
])
],
selector: 'igx-snackbar',
template: "<div class=\"igx-snackbar\" *ngIf=\"isVisible\" (@slideInOut.start)=\"snackbarAnimationStarted($event)\" (@slideInOut.done)=\"snackbarAnimationDone($event)\"\n [@slideInOut]=\"isVisible\">\n <div class=\"igx-snackbar__message\" [@fadeInOut]=\"isVisible\">\n {{ message }}\n <ng-content></ng-content>\n </div>\n <button class=\"igx-snackbar__button\" igxRipple=\"white\" *ngIf=\"actionText\" [@fadeInOut] (click)=\"triggerAction()\">\n {{ actionText }}\n </button>\n</div>\n",
styles: ["\n :host {\n display: block;\n }\n "]
}] }
];
/** @nocollapse */
IgxSnackbarComponent.ctorParameters = function () { return [
{ type: NgZone }
]; };
IgxSnackbarComponent.propDecorators = {
id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
message: [{ type: Input }],
isVisible: [{ type: Input }],
autoHide: [{ type: Input }],
displayTime: [{ type: Input }],
actionText: [{ type: Input }],
onAction: [{ type: Output }],
animationStarted: [{ type: Output }],
animationDone: [{ type: Output }]
};
return IgxSnackbarComponent;
}());
export { IgxSnackbarComponent };
if (false) {
/**
* Sets/gets the `id` of the snackbar.
* If not set, the `id` of the first snackbar component will be `"igx-snackbar-0"`;
* ```html
* <igx-snackbar id = "Snackbar1"></igx-snackbar>
* ```
* ```typescript
* let snackbarId = this.snackbar.id;
* ```
* \@memberof IgxSnackbarComponent
* @type {?}
*/
IgxSnackbarComponent.prototype.id;
/**
* Sets/gets the `message` attribute.
* ```html
* <igx-snackbar [message] = "'Snackbar Component'"></igx-snackbar>
* ```
* ```typescript
* let message = this.snackbar.message;
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.message;
/**
* Enables/Disables the visibility of the snackbar.
* If not set, the `isVisible` attribute will have value `false`.
* ```html
* <igx-snackbar [isVisible] = "true"></igx-snackbar>
* ```
* ```typescript
* let isVisible = this.snackbar.isVisible;
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.isVisible;
/**
* Sets/gets if the snackbar will be automatically hidden after the `displayTime` is over.
* Default value is `true`.
* ```html
* <igx-snackbar [autoHide] = "false"></igx-snackbar>
* ```
* ```typescript
* let autoHide = this.snackbar.autoHide;
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.autoHide;
/**
* Sets/gets the duration of time(in milliseconds) in which the snackbar will be visible after it is being shown.
* Default value is 4000.
* ```html
* <igx-snackbar [displayTime] = "2000"></igx-snackbar>
* ```
* ```typescript
* let displayTime = this.snackbar.displayTime;
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.displayTime;
/**
* Sets/gets the `actionText` attribute.
* ```html
* <igx-snackbar [actionText] = "'Action Text'"></igx-snackbar>
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.actionText;
/**
* An event that will be emitted when the action is executed.
* Provides reference to the `IgxSnackbarComponent` as an argument.
* ```html
* <igx-snackbar (onAction) = "onAction($event)"></igx-snackbar>
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.onAction;
/**
* An event that will be emitted when the snackbar animation starts.
* Provides reference to the `AnimationEvent` interface as an argument.
* ```html
* <igx-snackbar (animationStarted) = "animationStarted($event)"></igx-snackbar>
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.animationStarted;
/**
* An event that will be emitted when the snackbar animation ends.
* Provides reference to the `AnimationEvent` interface as an argument.
* ```html
* <igx-snackbar (animationDone) = "animationDone($event)"></igx-snackbar>
* ```
* @type {?}
*/
IgxSnackbarComponent.prototype.animationDone;
/**
* @hidden
* @type {?}
* @private
*/
IgxSnackbarComponent.prototype.timeoutId;
/**
* @type {?}
* @private
*/
IgxSnackbarComponent.prototype.zone;
}
/**
* @hidden
*/
var IgxSnackbarModule = /** @class */ (function () {
function IgxSnackbarModule() {
}
IgxSnackbarModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxSnackbarComponent],
exports: [IgxSnackbarComponent],
imports: [CommonModule]
},] }
];
return IgxSnackbarModule;
}());
export { IgxSnackbarModule };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFLSCxVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVksRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7SUFFaEYsT0FBTyxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJmO0lBMEpJLDhCQUFvQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTs7Ozs7Ozs7Ozs7O1FBdkZ6QixPQUFFLEdBQUcsa0JBQWdCLE9BQU8sRUFBSSxDQUFDOzs7Ozs7Ozs7OztRQXNCeEIsY0FBUyxHQUFHLEtBQUssQ0FBQzs7Ozs7Ozs7Ozs7UUFZbEIsYUFBUSxHQUFHLElBQUksQ0FBQzs7Ozs7Ozs7Ozs7UUFZaEIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7Ozs7Ozs7O1FBaUJsQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7Ozs7Ozs7O1FBU3BELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDOzs7Ozs7OztRQVN0RCxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO0lBTWhDLENBQUM7SUFFckM7Ozs7O09BS0c7Ozs7Ozs7O0lBQ0ksbUNBQUk7Ozs7Ozs7SUFBWDtRQUFBLGlCQVVDO1FBVEcsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO2dCQUN4QixLQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRzs7Ozs7Ozs7SUFDSSxtQ0FBSTs7Ozs7OztJQUFYO1FBQ0ksSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7O09BRUc7Ozs7O0lBQ0ksNENBQWE7Ozs7SUFBcEI7UUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0Q7OztPQUdHOzs7Ozs7O0lBQ0ksdURBQXdCOzs7Ozs7SUFBL0IsVUFBZ0MsR0FBbUI7UUFDL0MsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRzs7Ozs7OztJQUNJLG9EQUFxQjs7Ozs7O0lBQTVCLFVBQTZCLEdBQW1CO1FBQzVDLElBQUksR0FBRyxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7SUFDTCxDQUFDOztnQkEvTUosU0FBUyxTQUFDO29CQUNQLFVBQVUsRUFBRTt3QkFDUixPQUFPLENBQUMsWUFBWSxFQUFFOzRCQUNsQixVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUNwQixZQUFZLENBQUMsYUFBYSxFQUFFO29DQUN4QixNQUFNLEVBQUU7d0NBQ0osUUFBUSxFQUFFLE1BQU07d0NBQ2hCLE1BQU0sRUFBRSxnQ0FBZ0M7d0NBQ3hDLFlBQVksRUFBRSxrQkFBa0I7d0NBQ2hDLFVBQVUsRUFBRSxlQUFlO3FDQUM5QjtpQ0FDSixDQUFDOzZCQUNMLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDcEIsWUFBWSxDQUFDLGNBQWMsRUFBRTtvQ0FDekIsTUFBTSxFQUFFO3dDQUNKLFFBQVEsRUFBRSxLQUFLO3dDQUNmLE1BQU0sRUFBRSw4QkFBOEI7d0NBQ3RDLFlBQVksRUFBRSxlQUFlO3dDQUM3QixTQUFTLEVBQUUsQ0FBQzt3Q0FDWixVQUFVLEVBQUUsa0JBQWtCO3FDQUNqQztpQ0FDSixDQUFDOzZCQUNMLENBQUM7eUJBQ0wsQ0FBQzt3QkFDRixPQUFPLENBQUMsV0FBVyxFQUFFOzRCQUNqQixVQUFVLENBQUMsV0FBVyxFQUFFO2dDQUNwQixZQUFZLENBQUMsTUFBTSxFQUFFO29DQUNqQixNQUFNLEVBQUU7d0NBQ0osUUFBUSxFQUFFLE1BQU07d0NBQ2hCLE1BQU0sRUFBRSxVQUFVO3FDQUNyQjtpQ0FDSixDQUFDOzZCQUNMLENBQUM7NEJBQ0YsVUFBVSxDQUFDLFdBQVcsRUFBRTtnQ0FDcEIsWUFBWSxDQUFDLE9BQU8sRUFBRTtvQ0FDbEIsTUFBTSxFQUFFO3dDQUNKLFFBQVEsRUFBRSxLQUFLO3dDQUNmLE1BQU0sRUFBRSxVQUFVO3FDQUNyQjtpQ0FDSixDQUFDOzZCQUNMLENBQUM7eUJBQ0wsQ0FBQztxQkFDTDtvQkFDRCxRQUFRLEVBQUUsY0FBYztvQkFDeEIseWdCQUFzQzs2QkFDN0IsaUVBSVI7aUJBQ0o7Ozs7Z0JBekVHLE1BQU07OztxQkF1RkwsV0FBVyxTQUFDLFNBQVMsY0FDckIsS0FBSzswQkFXTCxLQUFLOzRCQVlMLEtBQUs7MkJBWUwsS0FBSzs4QkFZTCxLQUFLOzZCQVFMLEtBQUs7MkJBU0wsTUFBTTttQ0FTTixNQUFNO2dDQVNOLE1BQU07O0lBNERYLDJCQUFDO0NBQUEsQUFoTkQsSUFnTkM7U0E1Slksb0JBQW9COzs7Ozs7Ozs7Ozs7OztJQWE3QixrQ0FFd0M7Ozs7Ozs7Ozs7O0lBVXhDLHVDQUFnQzs7Ozs7Ozs7Ozs7O0lBWWhDLHlDQUFrQzs7Ozs7Ozs7Ozs7O0lBWWxDLHdDQUFnQzs7Ozs7Ozs7Ozs7O0lBWWhDLDJDQUFtQzs7Ozs7Ozs7SUFRbkMsMENBQW9DOzs7Ozs7Ozs7SUFTcEMsd0NBQXFFOzs7Ozs7Ozs7SUFTckUsZ0RBQXVFOzs7Ozs7Ozs7SUFTdkUsNkNBQW9FOzs7Ozs7SUFJcEUseUNBQWtCOzs7OztJQUVOLG9DQUFvQjs7Ozs7QUEyRHBDO0lBQUE7SUFLaUMsQ0FBQzs7Z0JBTGpDLFFBQVEsU0FBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7b0JBQy9CLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztpQkFDMUI7O0lBQ2dDLHdCQUFDO0NBQUEsQUFMbEMsSUFLa0M7U0FBckIsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBhbmltYXRlLFxuICAgIEFuaW1hdGlvbkV2ZW50LFxuICAgIHN0YXRlLFxuICAgIHN0eWxlLFxuICAgIHRyYW5zaXRpb24sXG4gICAgdHJpZ2dlcixcbiAgICB1c2VBbmltYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE5nWm9uZSxcbiAgICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmYWRlSW4sIGZhZGVPdXQsIHNsaWRlSW5Cb3R0b20sIHNsaWRlT3V0Qm90dG9tIH0gZnJvbSAnLi4vYW5pbWF0aW9ucy9tYWluJztcblxubGV0IE5FWFRfSUQgPSAwO1xuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBTbmFja2JhcioqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9zbmFja2Jhci5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgU25hY2sgQmFyIHByb3ZpZGVzIGZlZWRiYWNrIGFib3V0IGFuIG9wZXJhdGlvbiB3aXRoIGEgc2luZ2xlLWxpbmUgbWVzc2FnZSwgd2hpY2ggY2FuXG4gKiBpbmNsdWRlIGEgbGluayB0byBhbiBhY3Rpb24gc3VjaCBhcyBVbmRvLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8YnV0dG9uIChjbGljayk9XCJzbmFja2Jhci5zaG93KClcIj5TZW5kIG1lc3NhZ2U8L2J1dHRvbj5cbiAqIDxkaXY+XG4gKiAgIDxpZ3gtc25hY2tiYXIgI3NuYWNrYmFyIG1lc3NhZ2U9XCJNZXNzYWdlIHNlbnRcIj5cbiAqICAgPC9pZ3gtc25hY2tiYXI+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ3NsaWRlSW5PdXQnLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgICAgICAgICAgdXNlQW5pbWF0aW9uKHNsaWRlSW5Cb3R0b20sIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogJy4zNXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiAnY3ViaWMtYmV6aWVyKDAuMCwgMC4wLCAwLjIsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMTAwJSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMCknXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCcqID0+IHZvaWQnLCBbXG4gICAgICAgICAgICAgICAgdXNlQW5pbWF0aW9uKHNsaWRlT3V0Qm90dG9tLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiAnY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAxLCAxKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tUG9zaXRpb246ICd0cmFuc2xhdGVZKDApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvT3BhY2l0eTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUG9zaXRpb246ICd0cmFuc2xhdGVZKDEwMCUpJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pLFxuICAgICAgICB0cmlnZ2VyKCdmYWRlSW5PdXQnLCBbXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgICAgICAgICAgdXNlQW5pbWF0aW9uKGZhZGVJbiwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAnLjM1cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmc6ICdlYXNlLW91dCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcbiAgICAgICAgICAgICAgICB1c2VBbmltYXRpb24oZmFkZU91dCwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAnLjJzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBzZWxlY3RvcjogJ2lneC1zbmFja2JhcicsXG4gICAgdGVtcGxhdGVVcmw6ICdzbmFja2Jhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgfVxuICAgIGBdXG59KVxuZXhwb3J0IGNsYXNzIElneFNuYWNrYmFyQ29tcG9uZW50IHtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgc25hY2tiYXIuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpZGAgb2YgdGhlIGZpcnN0IHNuYWNrYmFyIGNvbXBvbmVudCAgd2lsbCBiZSBgXCJpZ3gtc25hY2tiYXItMFwiYDtcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBpZCA9IFwiU25hY2tiYXIxXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBzbmFja2JhcklkID0gdGhpcy5zbmFja2Jhci5pZDtcbiAgICAgKiBgYGBcbiAgICAgKiBAbWVtYmVyb2YgSWd4U25hY2tiYXJDb21wb25lbnRcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1zbmFja2Jhci0ke05FWFRfSUQrK31gO1xuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYG1lc3NhZ2VgIGF0dHJpYnV0ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBbbWVzc2FnZV0gPSBcIidTbmFja2JhciBDb21wb25lbnQnXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBtZXNzYWdlID0gIHRoaXMuc25hY2tiYXIubWVzc2FnZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcy9EaXNhYmxlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc25hY2tiYXIuXG4gICAgICogSWYgbm90IHNldCwgdGhlIGBpc1Zpc2libGVgIGF0dHJpYnV0ZSB3aWxsIGhhdmUgdmFsdWUgYGZhbHNlYC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBbaXNWaXNpYmxlXSA9IFwidHJ1ZVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBsZXQgaXNWaXNpYmxlID0gIHRoaXMuc25hY2tiYXIuaXNWaXNpYmxlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1Zpc2libGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyBpZiB0aGUgc25hY2tiYXIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGhpZGRlbiBhZnRlciB0aGUgYGRpc3BsYXlUaW1lYCBpcyBvdmVyLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFthdXRvSGlkZV0gPSBcImZhbHNlXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBhdXRvSGlkZSA9ICB0aGlzLnNuYWNrYmFyLmF1dG9IaWRlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhdXRvSGlkZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgdGhlIGR1cmF0aW9uIG9mIHRpbWUoaW4gbWlsbGlzZWNvbmRzKSBpbiB3aGljaCB0aGUgc25hY2tiYXIgd2lsbCBiZSB2aXNpYmxlIGFmdGVyIGl0IGlzIGJlaW5nIHNob3duLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgNDAwMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBbZGlzcGxheVRpbWVdID0gXCIyMDAwXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBkaXNwbGF5VGltZSA9IHRoaXMuc25hY2tiYXIuZGlzcGxheVRpbWU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRpc3BsYXlUaW1lID0gNDAwMDtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgYGFjdGlvblRleHRgIGF0dHJpYnV0ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciBbYWN0aW9uVGV4dF0gPSBcIidBY3Rpb24gVGV4dCdcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWN0aW9uVGV4dD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIGFjdGlvbiBpcyBleGVjdXRlZC5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBJZ3hTbmFja2JhckNvbXBvbmVudGAgYXMgYW4gYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgKG9uQWN0aW9uKSA9IFwib25BY3Rpb24oJGV2ZW50KVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25BY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPElneFNuYWNrYmFyQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgc25hY2tiYXIgYW5pbWF0aW9uIHN0YXJ0cy5cbiAgICAgKiBQcm92aWRlcyByZWZlcmVuY2UgdG8gdGhlIGBBbmltYXRpb25FdmVudGAgaW50ZXJmYWNlIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIChhbmltYXRpb25TdGFydGVkKSA9IFwiYW5pbWF0aW9uU3RhcnRlZCgkZXZlbnQpXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBhbmltYXRpb25TdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEFuIGV2ZW50IHRoYXQgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIHNuYWNrYmFyIGFuaW1hdGlvbiBlbmRzLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYEFuaW1hdGlvbkV2ZW50YCBpbnRlcmZhY2UgYXMgYW4gYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgKGFuaW1hdGlvbkRvbmUpID0gXCJhbmltYXRpb25Eb25lKCRldmVudClcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGFuaW1hdGlvbkRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZW91dElkO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd3MgdGhlIHNuYWNrYmFyIGFuZCBoaWRlcyBpdCBhZnRlciB0aGUgYGRpc3BsYXlUaW1lYCBpcyBvdmVyIGlmIGBhdXRvSGlkZWAgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbmFja2Jhci5zaG93KCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgICAgIHNldFRpbWVvdXQodGhpcy50aW1lb3V0SWQpO1xuICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHRoaXMuYXV0b0hpZGUpIHtcbiAgICAgICAgICAgIHRoaXMudGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9LCB0aGlzLmRpc3BsYXlUaW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBzbmFja2Jhci5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbmFja2Jhci5oaWRlKCk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQWN0aW9uLmVtaXQodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqIEBtZW1iZXJvZiBJZ3hTbmFja2JhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzbmFja2JhckFuaW1hdGlvblN0YXJ0ZWQoZXZ0OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZ0LmZyb21TdGF0ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblN0YXJ0ZWQuZW1pdChldnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqQGhpZGRlblxuICAgICAqIEBtZW1iZXJvZiBJZ3hTbmFja2JhckNvbXBvbmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBzbmFja2JhckFuaW1hdGlvbkRvbmUoZXZ0OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZ0LmZyb21TdGF0ZSA9PT0gJ3Nob3cnKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkRvbmUuZW1pdChldnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hTbmFja2JhckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0lneFNuYWNrYmFyQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTbmFja2Jhck1vZHVsZSB7IH1cbiJdfQ==