igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
350 lines • 25.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 {?} */
let 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>
* ```
*/
export class IgxSnackbarComponent {
/**
* @param {?} zone
*/
constructor(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();
* ```
* @return {?}
*/
show() {
clearTimeout(this.timeoutId);
setTimeout(this.timeoutId);
this.isVisible = true;
if (this.autoHide) {
this.timeoutId = setTimeout(() => {
this.hide();
}, this.displayTime);
}
}
/**
* Hides the snackbar.
* ```typescript
* this.snackbar.hide();
* ```
* @return {?}
*/
hide() {
this.isVisible = false;
clearTimeout(this.timeoutId);
}
/**
* @hidden
* @return {?}
*/
triggerAction() {
this.onAction.emit(this);
}
/**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
snackbarAnimationStarted(evt) {
if (evt.fromState === 'void') {
this.animationStarted.emit(evt);
}
}
/**
* @hidden
* \@memberof IgxSnackbarComponent
* @param {?} evt
* @return {?}
*/
snackbarAnimationDone(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: [`
:host {
display: block;
}
`]
}] }
];
/** @nocollapse */
IgxSnackbarComponent.ctorParameters = () => [
{ 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 }]
};
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
*/
export class IgxSnackbarModule {
}
IgxSnackbarModule.decorators = [
{ type: NgModule, args: [{
declarations: [IgxSnackbarComponent],
exports: [IgxSnackbarComponent],
imports: [CommonModule]
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFLSCxVQUFVLEVBQ1YsT0FBTyxFQUNQLFlBQVksRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7SUFFaEYsT0FBTyxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUVmLE1BQU0sT0FBTyxvQkFBb0I7Ozs7SUFzRzdCLFlBQW9CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFROzs7Ozs7Ozs7Ozs7UUF2RnpCLE9BQUUsR0FBRyxnQkFBZ0IsT0FBTyxFQUFFLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7UUFzQnhCLGNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7Ozs7Ozs7O1FBWWxCLGFBQVEsR0FBRyxJQUFJLENBQUM7Ozs7Ozs7Ozs7O1FBWWhCLGdCQUFXLEdBQUcsSUFBSSxDQUFDOzs7Ozs7OztRQWlCbEIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDOzs7Ozs7OztRQVNwRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQzs7Ozs7Ozs7UUFTdEQsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztJQU1oQyxDQUFDOzs7Ozs7OztJQVE5QixJQUFJO1FBQ1AsWUFBWSxDQUFDLElBQUksQ0FBQyxT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Qzs7Ozs7Ozs7Ozs7O0lBWWhDLDJDQUFtQzs7Ozs7Ozs7SUFRbkMsMENBQW9DOzs7Ozs7Ozs7SUFTcEMsd0NBQXFFOzs7Ozs7Ozs7SUFTckUsZ0RBQXVFOzs7Ozs7Ozs7SUFTdkUsNkNBQW9FOzs7Ozs7SUFJcEUseUNBQWtCOzs7OztJQUVOLG9DQUFvQjs7Ozs7QUFnRXBDLE1BQU0sT0FBTyxpQkFBaUI7OztZQUw3QixRQUFRLFNBQUM7Z0JBQ04sWUFBWSxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3BDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7YUFDMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFuaW1hdGUsXG4gICAgQW5pbWF0aW9uRXZlbnQsXG4gICAgc3RhdGUsXG4gICAgc3R5bGUsXG4gICAgdHJhbnNpdGlvbixcbiAgICB0cmlnZ2VyLFxuICAgIHVzZUFuaW1hdGlvblxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdNb2R1bGUsXG4gICAgTmdab25lLFxuICAgIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZhZGVJbiwgZmFkZU91dCwgc2xpZGVJbkJvdHRvbSwgc2xpZGVPdXRCb3R0b20gfSBmcm9tICcuLi9hbmltYXRpb25zL21haW4nO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIFNuYWNrYmFyKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL3NuYWNrYmFyLmh0bWwpXG4gKlxuICogVGhlIElnbml0ZSBVSSBTbmFjayBCYXIgcHJvdmlkZXMgZmVlZGJhY2sgYWJvdXQgYW4gb3BlcmF0aW9uIHdpdGggYSBzaW5nbGUtbGluZSBtZXNzYWdlLCB3aGljaCBjYW5cbiAqIGluY2x1ZGUgYSBsaW5rIHRvIGFuIGFjdGlvbiBzdWNoIGFzIFVuZG8uXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxidXR0b24gKGNsaWNrKT1cInNuYWNrYmFyLnNob3coKVwiPlNlbmQgbWVzc2FnZTwvYnV0dG9uPlxuICogPGRpdj5cbiAqICAgPGlneC1zbmFja2JhciAjc25hY2tiYXIgbWVzc2FnZT1cIk1lc3NhZ2Ugc2VudFwiPlxuICogICA8L2lneC1zbmFja2Jhcj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignc2xpZGVJbk91dCcsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgICAgICAgICB1c2VBbmltYXRpb24oc2xpZGVJbkJvdHRvbSwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAnLjM1cycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC4wLCAwLjAsIDAuMiwgMSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVBvc2l0aW9uOiAndHJhbnNsYXRlWSgxMDAlKScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1Bvc2l0aW9uOiAndHJhbnNsYXRlWSgwKSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcbiAgICAgICAgICAgICAgICB1c2VBbmltYXRpb24oc2xpZGVPdXRCb3R0b20sIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogJy4ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICBlYXNpbmc6ICdjdWJpYy1iZXppZXIoMC40LCAwLjAsIDEsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9PcGFjaXR5OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9Qb3NpdGlvbjogJ3RyYW5zbGF0ZVkoMTAwJSknXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSksXG4gICAgICAgIHRyaWdnZXIoJ2ZhZGVJbk91dCcsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtcbiAgICAgICAgICAgICAgICB1c2VBbmltYXRpb24oZmFkZUluLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMzVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2Utb3V0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiB2b2lkJywgW1xuICAgICAgICAgICAgICAgIHVzZUFuaW1hdGlvbihmYWRlT3V0LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246ICcuMnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzaW5nOiAnZWFzZS1vdXQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICBdLFxuICAgIHNlbGVjdG9yOiAnaWd4LXNuYWNrYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3NuYWNrYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB9XG4gICAgYF1cbn0pXG5leHBvcnQgY2xhc3MgSWd4U25hY2tiYXJDb21wb25lbnQge1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgaWRgIG9mIHRoZSBzbmFja2Jhci5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlkYCBvZiB0aGUgZmlyc3Qgc25hY2tiYXIgY29tcG9uZW50ICB3aWxsIGJlIGBcImlneC1zbmFja2Jhci0wXCJgO1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIGlkID0gXCJTbmFja2JhcjFcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IHNuYWNrYmFySWQgPSB0aGlzLnNuYWNrYmFyLmlkO1xuICAgICAqIGBgYFxuICAgICAqIEBtZW1iZXJvZiBJZ3hTbmFja2JhckNvbXBvbmVudFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWQgPSBgaWd4LXNuYWNrYmFyLSR7TkVYVF9JRCsrfWA7XG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgbWVzc2FnZWAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFttZXNzYWdlXSA9IFwiJ1NuYWNrYmFyIENvbXBvbmVudCdcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IG1lc3NhZ2UgPSAgdGhpcy5zbmFja2Jhci5tZXNzYWdlO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzL0Rpc2FibGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzbmFja2Jhci5cbiAgICAgKiBJZiBub3Qgc2V0LCB0aGUgYGlzVmlzaWJsZWAgYXR0cmlidXRlIHdpbGwgaGF2ZSB2YWx1ZSBgZmFsc2VgLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFtpc1Zpc2libGVdID0gXCJ0cnVlXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGxldCBpc1Zpc2libGUgPSAgdGhpcy5zbmFja2Jhci5pc1Zpc2libGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGlzVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIGlmIHRoZSBzbmFja2JhciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaGlkZGVuIGFmdGVyIHRoZSBgZGlzcGxheVRpbWVgIGlzIG92ZXIuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgW2F1dG9IaWRlXSA9IFwiZmFsc2VcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGF1dG9IaWRlID0gIHRoaXMuc25hY2tiYXIuYXV0b0hpZGU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGF1dG9IaWRlID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMvZ2V0cyB0aGUgZHVyYXRpb24gb2YgdGltZShpbiBtaWxsaXNlY29uZHMpIGluIHdoaWNoIHRoZSBzbmFja2JhciB3aWxsIGJlIHZpc2libGUgYWZ0ZXIgaXQgaXMgYmVpbmcgc2hvd24uXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyA0MDAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFtkaXNwbGF5VGltZV0gPSBcIjIwMDBcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGRpc3BsYXlUaW1lID0gdGhpcy5zbmFja2Jhci5kaXNwbGF5VGltZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVRpbWUgPSA0MDAwO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHRoZSBgYWN0aW9uVGV4dGAgYXR0cmlidXRlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNuYWNrYmFyIFthY3Rpb25UZXh0XSA9IFwiJ0FjdGlvbiBUZXh0J1wiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25UZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgYWN0aW9uIGlzIGV4ZWN1dGVkLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYElneFNuYWNrYmFyQ29tcG9uZW50YCBhcyBhbiBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciAob25BY3Rpb24pID0gXCJvbkFjdGlvbigkZXZlbnQpXCI+PC9pZ3gtc25hY2tiYXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8SWd4U25hY2tiYXJDb21wb25lbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbiBldmVudCB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBzbmFja2JhciBhbmltYXRpb24gc3RhcnRzLlxuICAgICAqIFByb3ZpZGVzIHJlZmVyZW5jZSB0byB0aGUgYEFuaW1hdGlvbkV2ZW50YCBpbnRlcmZhY2UgYXMgYW4gYXJndW1lbnQuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc25hY2tiYXIgKGFuaW1hdGlvblN0YXJ0ZWQpID0gXCJhbmltYXRpb25TdGFydGVkKCRldmVudClcIj48L2lneC1zbmFja2Jhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIGFuaW1hdGlvblN0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQW4gZXZlbnQgdGhhdCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgc25hY2tiYXIgYW5pbWF0aW9uIGVuZHMuXG4gICAgICogUHJvdmlkZXMgcmVmZXJlbmNlIHRvIHRoZSBgQW5pbWF0aW9uRXZlbnRgIGludGVyZmFjZSBhcyBhbiBhcmd1bWVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbmFja2JhciAoYW5pbWF0aW9uRG9uZSkgPSBcImFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiPjwvaWd4LXNuYWNrYmFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgYW5pbWF0aW9uRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8QW5pbWF0aW9uRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSB0aW1lb3V0SWQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSkgeyB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgc25hY2tiYXIgYW5kIGhpZGVzIGl0IGFmdGVyIHRoZSBgZGlzcGxheVRpbWVgIGlzIG92ZXIgaWYgYGF1dG9IaWRlYCBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNuYWNrYmFyLnNob3coKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2hvdygpOiB2b2lkIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICAgICAgc2V0VGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5hdXRvSGlkZSkge1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0sIHRoaXMuZGlzcGxheVRpbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZXMgdGhlIHNuYWNrYmFyLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNuYWNrYmFyLmhpZGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25BY3Rpb24uZW1pdCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICogQG1lbWJlcm9mIElneFNuYWNrYmFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNuYWNrYmFyQW5pbWF0aW9uU3RhcnRlZChldnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldnQuZnJvbVN0YXRlID09PSAndm9pZCcpIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhcnRlZC5lbWl0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICpAaGlkZGVuXG4gICAgICogQG1lbWJlcm9mIElneFNuYWNrYmFyQ29tcG9uZW50XG4gICAgICovXG4gICAgcHVibGljIHNuYWNrYmFyQW5pbWF0aW9uRG9uZShldnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldnQuZnJvbVN0YXRlID09PSAnc2hvdycpIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KGV2dCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0lneFNuYWNrYmFyQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbSWd4U25hY2tiYXJDb21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNuYWNrYmFyTW9kdWxlIHsgfVxuIl19