theme-lib
Version:
This is a simple example Angular Library published to npm.
505 lines • 35.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* @license
* Copyright Akveo. All Rights Reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*/
import { Component, Input, HostBinding, Output, EventEmitter } from '@angular/core';
import { convertToBoolProperty } from '../helpers';
/*
* Alert component.
*
* Basic alert example:
* @stacked-example(Showcase, alert/alert-showcase.component)
*
* Alert configuration:
*
* ```html
* <nb-alert status="success">
* You have been successfully authenticated!
* </nb-alert>
* ```
* ### Installation
*
* Import `NbButtonModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbAlertModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* Alert could additionally have a `close` button when `closable` property is set:
* ```html
* <nb-alert status="success" closable (close)="onClose()">
* You have been successfully authenticated!
* </nb-alert>
* ```
*
* Colored alerts could be simply configured by providing a `status` property:
* @stacked-example(Colored Alert, alert/alert-colors.component)
*
* It is also possible to assign an `accent` property for a slight alert highlight
* as well as combine it with `status`:
* @stacked-example(Accent Alert, alert/alert-accents.component)
*
* And `outline` property:
* @stacked-example(Outline Alert, alert/alert-outline.component)
*
* @additional-example(Multiple Sizes, alert/alert-sizes.component)
*
* @styles
*
* alert-font-size:
* alert-line-height:
* alert-font-weight:
* alert-fg:
* alert-outline-fg:
* alert-bg:
* alert-active-bg:
* alert-disabled-bg:
* alert-disabled-fg:
* alert-primary-bg:
* alert-info-bg:
* alert-success-bg:
* alert-warning-bg:
* alert-danger-bg:
* alert-height-xxsmall:
* alert-height-xsmall:
* alert-height-small:
* alert-height-medium:
* alert-height-large:
* alert-height-xlarge:
* alert-height-xxlarge:
* alert-shadow:
* alert-border-radius:
* alert-padding:
* alert-closable-padding:
* alert-button-padding:
* alert-margin:
*/
export class NbAlertComponent {
constructor() {
this.closableValue = false;
/*
* Emits when chip is removed
* @type EventEmitter<any>
*/
this.close = new EventEmitter();
}
/*
* Shows `close` icon
*/
/**
* @param {?} val
* @return {?}
*/
set closable(val) {
this.closableValue = convertToBoolProperty(val);
}
/**
* @return {?}
*/
get xxsmall() {
return this.size === NbAlertComponent.SIZE_XXSMALL;
}
/**
* @return {?}
*/
get xsmall() {
return this.size === NbAlertComponent.SIZE_XSMALL;
}
/**
* @return {?}
*/
get small() {
return this.size === NbAlertComponent.SIZE_SMALL;
}
/**
* @return {?}
*/
get medium() {
return this.size === NbAlertComponent.SIZE_MEDIUM;
}
/**
* @return {?}
*/
get large() {
return this.size === NbAlertComponent.SIZE_LARGE;
}
/**
* @return {?}
*/
get xlarge() {
return this.size === NbAlertComponent.SIZE_XLARGE;
}
/**
* @return {?}
*/
get xxlarge() {
return this.size === NbAlertComponent.SIZE_XXLARGE;
}
/**
* @return {?}
*/
get active() {
return this.status === NbAlertComponent.STATUS_ACTIVE;
}
/**
* @return {?}
*/
get disabled() {
return this.status === NbAlertComponent.STATUS_DISABLED;
}
/**
* @return {?}
*/
get primary() {
return this.status === NbAlertComponent.STATUS_PRIMARY;
}
/**
* @return {?}
*/
get info() {
return this.status === NbAlertComponent.STATUS_INFO;
}
/**
* @return {?}
*/
get success() {
return this.status === NbAlertComponent.STATUS_SUCCESS;
}
/**
* @return {?}
*/
get warning() {
return this.status === NbAlertComponent.STATUS_WARNING;
}
/**
* @return {?}
*/
get danger() {
return this.status === NbAlertComponent.STATUS_DANGER;
}
/**
* @return {?}
*/
get hasAccent() {
return this.accent;
}
/**
* @return {?}
*/
get hasStatus() {
return this.status;
}
/**
* @return {?}
*/
get primaryAccent() {
return this.accent === NbAlertComponent.ACCENT_PRIMARY;
}
/**
* @return {?}
*/
get infoAccent() {
return this.accent === NbAlertComponent.ACCENT_INFO;
}
/**
* @return {?}
*/
get successAccent() {
return this.accent === NbAlertComponent.ACCENT_SUCCESS;
}
/**
* @return {?}
*/
get warningAccent() {
return this.accent === NbAlertComponent.ACCENT_WARNING;
}
/**
* @return {?}
*/
get dangerAccent() {
return this.accent === NbAlertComponent.ACCENT_DANGER;
}
/**
* @return {?}
*/
get activeAccent() {
return this.accent === NbAlertComponent.ACCENT_ACTIVE;
}
/**
* @return {?}
*/
get disabledAccent() {
return this.accent === NbAlertComponent.ACCENT_DISABLED;
}
/**
* @return {?}
*/
get hasOutline() {
return this.outline;
}
/**
* @return {?}
*/
get primaryOutline() {
return this.outline === NbAlertComponent.OUTLINE_PRIMARY;
}
/**
* @return {?}
*/
get infoOutline() {
return this.outline === NbAlertComponent.OUTLINE_INFO;
}
/**
* @return {?}
*/
get successOutline() {
return this.outline === NbAlertComponent.OUTLINE_SUCCESS;
}
/**
* @return {?}
*/
get warningOutline() {
return this.outline === NbAlertComponent.OUTLINE_WARNING;
}
/**
* @return {?}
*/
get dangerOutline() {
return this.outline === NbAlertComponent.OUTLINE_DANGER;
}
/**
* @return {?}
*/
get activeOutline() {
return this.outline === NbAlertComponent.OUTLINE_ACTIVE;
}
/**
* @return {?}
*/
get disabledOutline() {
return this.outline === NbAlertComponent.OUTLINE_DISABLED;
}
/*
* Alert size, available sizes:
* xxsmall, xsmall, small, medium, large, xlarge, xxlarge
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setSize(val) {
this.size = val;
}
/*
* Alert status (adds specific styles):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setStatus(val) {
this.status = val;
}
/*
* Alert accent (color of the top border):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setAccent(val) {
this.accent = val;
}
/*
* Alert outline (color of the border):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setOutline(val) {
this.outline = val;
}
/*
* Emits the removed chip event
*/
/**
* @return {?}
*/
onClose() {
this.close.emit();
}
}
NbAlertComponent.SIZE_XXSMALL = 'xxsmall';
NbAlertComponent.SIZE_XSMALL = 'xsmall';
NbAlertComponent.SIZE_SMALL = 'small';
NbAlertComponent.SIZE_MEDIUM = 'medium';
NbAlertComponent.SIZE_LARGE = 'large';
NbAlertComponent.SIZE_XLARGE = 'xlarge';
NbAlertComponent.SIZE_XXLARGE = 'xxlarge';
NbAlertComponent.STATUS_ACTIVE = 'active';
NbAlertComponent.STATUS_DISABLED = 'disabled';
NbAlertComponent.STATUS_PRIMARY = 'primary';
NbAlertComponent.STATUS_INFO = 'info';
NbAlertComponent.STATUS_SUCCESS = 'success';
NbAlertComponent.STATUS_WARNING = 'warning';
NbAlertComponent.STATUS_DANGER = 'danger';
NbAlertComponent.ACCENT_ACTIVE = 'active';
NbAlertComponent.ACCENT_DISABLED = 'disabled';
NbAlertComponent.ACCENT_PRIMARY = 'primary';
NbAlertComponent.ACCENT_INFO = 'info';
NbAlertComponent.ACCENT_SUCCESS = 'success';
NbAlertComponent.ACCENT_WARNING = 'warning';
NbAlertComponent.ACCENT_DANGER = 'danger';
NbAlertComponent.OUTLINE_ACTIVE = 'active';
NbAlertComponent.OUTLINE_DISABLED = 'disabled';
NbAlertComponent.OUTLINE_PRIMARY = 'primary';
NbAlertComponent.OUTLINE_INFO = 'info';
NbAlertComponent.OUTLINE_SUCCESS = 'success';
NbAlertComponent.OUTLINE_WARNING = 'warning';
NbAlertComponent.OUTLINE_DANGER = 'danger';
NbAlertComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-alert',
template: `
<button *ngIf="closableValue" type="button" class="close" aria-label="Close" (click)="onClose()">
<span aria-hidden="true">×</span>
</button>
<ng-content></ng-content>
`,
styles: [":host{display:flex;flex-direction:column;position:relative}.close{position:absolute;top:0;right:0;color:inherit;background-color:transparent;border:0;-webkit-appearance:none}"]
}] }
];
NbAlertComponent.propDecorators = {
closableValue: [{ type: HostBinding, args: ['class.closable',] }],
closable: [{ type: Input }],
xxsmall: [{ type: HostBinding, args: ['class.xxsmall-alert',] }],
xsmall: [{ type: HostBinding, args: ['class.xsmall-alert',] }],
small: [{ type: HostBinding, args: ['class.small-alert',] }],
medium: [{ type: HostBinding, args: ['class.medium-alert',] }],
large: [{ type: HostBinding, args: ['class.large-alert',] }],
xlarge: [{ type: HostBinding, args: ['class.xlarge-alert',] }],
xxlarge: [{ type: HostBinding, args: ['class.xxlarge-alert',] }],
active: [{ type: HostBinding, args: ['class.active-alert',] }],
disabled: [{ type: HostBinding, args: ['class.disabled-alert',] }],
primary: [{ type: HostBinding, args: ['class.primary-alert',] }],
info: [{ type: HostBinding, args: ['class.info-alert',] }],
success: [{ type: HostBinding, args: ['class.success-alert',] }],
warning: [{ type: HostBinding, args: ['class.warning-alert',] }],
danger: [{ type: HostBinding, args: ['class.danger-alert',] }],
hasAccent: [{ type: HostBinding, args: ['class.accent',] }],
hasStatus: [{ type: HostBinding, args: ['class.status',] }],
primaryAccent: [{ type: HostBinding, args: ['class.accent-primary',] }],
infoAccent: [{ type: HostBinding, args: ['class.accent-info',] }],
successAccent: [{ type: HostBinding, args: ['class.accent-success',] }],
warningAccent: [{ type: HostBinding, args: ['class.accent-warning',] }],
dangerAccent: [{ type: HostBinding, args: ['class.accent-danger',] }],
activeAccent: [{ type: HostBinding, args: ['class.accent-active',] }],
disabledAccent: [{ type: HostBinding, args: ['class.accent-disabled',] }],
hasOutline: [{ type: HostBinding, args: ['class.outline',] }],
primaryOutline: [{ type: HostBinding, args: ['class.outline-primary',] }],
infoOutline: [{ type: HostBinding, args: ['class.outline-info',] }],
successOutline: [{ type: HostBinding, args: ['class.outline-success',] }],
warningOutline: [{ type: HostBinding, args: ['class.outline-warning',] }],
dangerOutline: [{ type: HostBinding, args: ['class.outline-danger',] }],
activeOutline: [{ type: HostBinding, args: ['class.outline-active',] }],
disabledOutline: [{ type: HostBinding, args: ['class.outline-disabled',] }],
setSize: [{ type: Input, args: ['size',] }],
setStatus: [{ type: Input, args: ['status',] }],
setAccent: [{ type: Input, args: ['accent',] }],
setOutline: [{ type: Input, args: ['outline',] }],
close: [{ type: Output }]
};
if (false) {
/** @type {?} */
NbAlertComponent.SIZE_XXSMALL;
/** @type {?} */
NbAlertComponent.SIZE_XSMALL;
/** @type {?} */
NbAlertComponent.SIZE_SMALL;
/** @type {?} */
NbAlertComponent.SIZE_MEDIUM;
/** @type {?} */
NbAlertComponent.SIZE_LARGE;
/** @type {?} */
NbAlertComponent.SIZE_XLARGE;
/** @type {?} */
NbAlertComponent.SIZE_XXLARGE;
/** @type {?} */
NbAlertComponent.STATUS_ACTIVE;
/** @type {?} */
NbAlertComponent.STATUS_DISABLED;
/** @type {?} */
NbAlertComponent.STATUS_PRIMARY;
/** @type {?} */
NbAlertComponent.STATUS_INFO;
/** @type {?} */
NbAlertComponent.STATUS_SUCCESS;
/** @type {?} */
NbAlertComponent.STATUS_WARNING;
/** @type {?} */
NbAlertComponent.STATUS_DANGER;
/** @type {?} */
NbAlertComponent.ACCENT_ACTIVE;
/** @type {?} */
NbAlertComponent.ACCENT_DISABLED;
/** @type {?} */
NbAlertComponent.ACCENT_PRIMARY;
/** @type {?} */
NbAlertComponent.ACCENT_INFO;
/** @type {?} */
NbAlertComponent.ACCENT_SUCCESS;
/** @type {?} */
NbAlertComponent.ACCENT_WARNING;
/** @type {?} */
NbAlertComponent.ACCENT_DANGER;
/** @type {?} */
NbAlertComponent.OUTLINE_ACTIVE;
/** @type {?} */
NbAlertComponent.OUTLINE_DISABLED;
/** @type {?} */
NbAlertComponent.OUTLINE_PRIMARY;
/** @type {?} */
NbAlertComponent.OUTLINE_INFO;
/** @type {?} */
NbAlertComponent.OUTLINE_SUCCESS;
/** @type {?} */
NbAlertComponent.OUTLINE_WARNING;
/** @type {?} */
NbAlertComponent.OUTLINE_DANGER;
/** @type {?} */
NbAlertComponent.prototype.size;
/** @type {?} */
NbAlertComponent.prototype.status;
/** @type {?} */
NbAlertComponent.prototype.accent;
/** @type {?} */
NbAlertComponent.prototype.outline;
/** @type {?} */
NbAlertComponent.prototype.closableValue;
/** @type {?} */
NbAlertComponent.prototype.close;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vdGhlbWUtbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWxlcnQvYWxlcnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5Rm5ELE1BQU0sT0FBTyxnQkFBZ0I7SUFWN0I7UUFrREUsa0JBQWEsR0FBWSxLQUFLLENBQUM7Ozs7O1FBaU5yQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVF2QyxDQUFDOzs7Ozs7OztJQXBOQyxJQUNJLFFBQVEsQ0FBQyxHQUFZO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs7OztJQUVELElBQ0ksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7SUFDckQsQ0FBQzs7OztJQUVELElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7SUFDcEQsQ0FBQzs7OztJQUVELElBQ0ksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7SUFDbkQsQ0FBQzs7OztJQUVELElBQ0ksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7SUFDcEQsQ0FBQzs7OztJQUVELElBQ0ks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QkFBeUM7O0lBRXpDLGdDQUEwQzs7SUFDMUMsa0NBQThDOztJQUM5QyxpQ0FBNEM7O0lBQzVDLDhCQUFzQzs7SUFDdEMsaUNBQTRDOztJQUM1QyxpQ0FBNEM7O0lBQzVDLGdDQUEwQzs7SUFFMUMsZ0NBQWE7O0lBQ2Isa0NBQWU7O0lBQ2Ysa0NBQWU7O0lBQ2YsbUNBQWdCOztJQUVoQix5Q0FDK0I7O0lBaU4vQixpQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgQWt2ZW8uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgSG9zdEJpbmRpbmcsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSB9IGZyb20gJy4uL2hlbHBlcnMnO1xyXG5cclxuXHJcbi8qXHJcbiAqIEFsZXJ0IGNvbXBvbmVudC5cclxuICpcclxuICogQmFzaWMgYWxlcnQgZXhhbXBsZTpcclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgYWxlcnQvYWxlcnQtc2hvd2Nhc2UuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBBbGVydCBjb25maWd1cmF0aW9uOlxyXG4gKlxyXG4gKiBgYGBodG1sXHJcbiAqIDxuYi1hbGVydCBzdGF0dXM9XCJzdWNjZXNzXCI+XHJcbiAqICAgWW91IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXV0aGVudGljYXRlZCFcclxuICogPC9uYi1hbGVydD5cclxuICogYGBgXHJcbiAqICMjIyBJbnN0YWxsYXRpb25cclxuICpcclxuICogSW1wb3J0IGBOYkJ1dHRvbk1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iQWxlcnRNb2R1bGUsXHJcbiAqICAgXSxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFBhZ2VNb2R1bGUgeyB9XHJcbiAqIGBgYFxyXG4gKiAjIyMgVXNhZ2VcclxuICpcclxuICogQWxlcnQgY291bGQgYWRkaXRpb25hbGx5IGhhdmUgYSBgY2xvc2VgIGJ1dHRvbiB3aGVuIGBjbG9zYWJsZWAgcHJvcGVydHkgaXMgc2V0OlxyXG4gKiBgYGBodG1sXHJcbiAqIDxuYi1hbGVydCBzdGF0dXM9XCJzdWNjZXNzXCIgY2xvc2FibGUgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiPlxyXG4gKiAgIFlvdSBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZWQhXHJcbiAqIDwvbmItYWxlcnQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBDb2xvcmVkIGFsZXJ0cyBjb3VsZCBiZSBzaW1wbHkgY29uZmlndXJlZCBieSBwcm92aWRpbmcgYSBgc3RhdHVzYCBwcm9wZXJ0eTpcclxuICogQHN0YWNrZWQtZXhhbXBsZShDb2xvcmVkIEFsZXJ0LCBhbGVydC9hbGVydC1jb2xvcnMuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFzc2lnbiBhbiBgYWNjZW50YCBwcm9wZXJ0eSBmb3IgYSBzbGlnaHQgYWxlcnQgaGlnaGxpZ2h0XHJcbiAqIGFzIHdlbGwgYXMgY29tYmluZSBpdCB3aXRoIGBzdGF0dXNgOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEFjY2VudCBBbGVydCwgYWxlcnQvYWxlcnQtYWNjZW50cy5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEFuZCBgb3V0bGluZWAgcHJvcGVydHk6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoT3V0bGluZSBBbGVydCwgYWxlcnQvYWxlcnQtb3V0bGluZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBhZGRpdGlvbmFsLWV4YW1wbGUoTXVsdGlwbGUgU2l6ZXMsIGFsZXJ0L2FsZXJ0LXNpemVzLmNvbXBvbmVudClcclxuICpcclxuICogQHN0eWxlc1xyXG4gKlxyXG4gKiBhbGVydC1mb250LXNpemU6XHJcbiAqIGFsZXJ0LWxpbmUtaGVpZ2h0OlxyXG4gKiBhbGVydC1mb250LXdlaWdodDpcclxuICogYWxlcnQtZmc6XHJcbiAqIGFsZXJ0LW91dGxpbmUtZmc6XHJcbiAqIGFsZXJ0LWJnOlxyXG4gKiBhbGVydC1hY3RpdmUtYmc6XHJcbiAqIGFsZXJ0LWRpc2FibGVkLWJnOlxyXG4gKiBhbGVydC1kaXNhYmxlZC1mZzpcclxuICogYWxlcnQtcHJpbWFyeS1iZzpcclxuICogYWxlcnQtaW5mby1iZzpcclxuICogYWxlcnQtc3VjY2Vzcy1iZzpcclxuICogYWxlcnQtd2FybmluZy1iZzpcclxuICogYWxlcnQtZGFuZ2VyLWJnOlxyXG4gKiBhbGVydC1oZWlnaHQteHhzbWFsbDpcclxuICogYWxlcnQtaGVpZ2h0LXhzbWFsbDpcclxuICogYWxlcnQtaGVpZ2h0LXNtYWxsOlxyXG4gKiBhbGVydC1oZWlnaHQtbWVkaXVtOlxyXG4gKiBhbGVydC1oZWlnaHQtbGFyZ2U6XHJcbiAqIGFsZXJ0LWhlaWdodC14bGFyZ2U6XHJcbiAqIGFsZXJ0LWhlaWdodC14eGxhcmdlOlxyXG4gKiBhbGVydC1zaGFkb3c6XHJcbiAqIGFsZXJ0LWJvcmRlci1yYWRpdXM6XHJcbiAqIGFsZXJ0LXBhZGRpbmc6XHJcbiAqIGFsZXJ0LWNsb3NhYmxlLXBhZGRpbmc6XHJcbiAqIGFsZXJ0LWJ1dHRvbi1wYWRkaW5nOlxyXG4gKiBhbGVydC1tYXJnaW46XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLWFsZXJ0JyxcclxuICBzdHlsZVVybHM6IFsnLi9hbGVydC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiY2xvc2FibGVWYWx1ZVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPlxyXG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQWxlcnRDb21wb25lbnQge1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YWFNNQUxMID0gJ3h4c21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX1hTTUFMTCA9ICd4c21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX1NNQUxMID0gJ3NtYWxsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9NRURJVU0gPSAnbWVkaXVtJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9MQVJHRSA9ICdsYXJnZSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfWExBUkdFID0gJ3hsYXJnZSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfWFhMQVJHRSA9ICd4eGxhcmdlJztcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19BQ1RJVkUgPSAnYWN0aXZlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX0RJU0FCTEVEID0gJ2Rpc2FibGVkJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX1BSSU1BUlkgPSAncHJpbWFyeSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19JTkZPID0gJ2luZm8nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfU1VDQ0VTUyA9ICdzdWNjZXNzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX1dBUk5JTkcgPSAnd2FybmluZyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19EQU5HRVIgPSAnZGFuZ2VyJztcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IEFDQ0VOVF9BQ1RJVkUgPSAnYWN0aXZlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX0RJU0FCTEVEID0gJ2Rpc2FibGVkJztcclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX1BSSU1BUlkgPSAncHJpbWFyeSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEFDQ0VOVF9JTkZPID0gJ2luZm8nO1xyXG4gIHN0YXRpYyByZWFkb25seSBBQ0NFTlRfU1VDQ0VTUyA9ICdzdWNjZXNzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX1dBUk5JTkcgPSAnd2FybmluZyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEFDQ0VOVF9EQU5HRVIgPSAnZGFuZ2VyJztcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IE9VVExJTkVfQUNUSVZFID0gJ2FjdGl2ZSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE9VVExJTkVfRElTQUJMRUQgPSAnZGlzYWJsZWQnO1xyXG4gIHN0YXRpYyByZWFkb25seSBPVVRMSU5FX1BSSU1BUlkgPSAncHJpbWFyeSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE9VVExJTkVfSU5GTyA9ICdpbmZvJztcclxuICBzdGF0aWMgcmVhZG9ubHkgT1VUTElORV9TVUNDRVNTID0gJ3N1Y2Nlc3MnO1xyXG4gIHN0YXRpYyByZWFkb25seSBPVVRMSU5FX1dBUk5JTkcgPSAnd2FybmluZyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IE9VVExJTkVfREFOR0VSID0gJ2Rhbmdlcic7XHJcblxyXG4gIHNpemU6IHN0cmluZztcclxuICBzdGF0dXM6IHN0cmluZztcclxuICBhY2NlbnQ6IHN0cmluZztcclxuICBvdXRsaW5lOiBzdHJpbmc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2xvc2FibGUnKVxyXG4gIGNsb3NhYmxlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLypcclxuICAgKiBTaG93cyBgY2xvc2VgIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBjbG9zYWJsZSh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuY2xvc2FibGVWYWx1ZSA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54eHNtYWxsLWFsZXJ0JylcclxuICBnZXQgeHhzbWFsbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQWxlcnRDb21wb25lbnQuU0laRV9YWFNNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54c21hbGwtYWxlcnQnKVxyXG4gIGdldCB4c21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkFsZXJ0Q29tcG9uZW50LlNJWkVfWFNNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbC1hbGVydCcpXHJcbiAgZ2V0IHNtYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJBbGVydENvbXBvbmVudC5TSVpFX1NNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tZWRpdW0tYWxlcnQnKVxyXG4gIGdldCBtZWRpdW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkFsZXJ0Q29tcG9uZW50LlNJWkVfTUVESVVNO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYXJnZS1hbGVydCcpXHJcbiAgZ2V0IGxhcmdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJBbGVydENvbXBvbmVudC5TSVpFX0xBUkdFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54bGFyZ2UtYWxlcnQnKVxyXG4gIGdldCB4bGFyZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkFsZXJ0Q29tcG9uZW50LlNJWkVfWExBUkdFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54eGxhcmdlLWFsZXJ0JylcclxuICBnZXQgeHhsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQWxlcnRDb21wb25lbnQuU0laRV9YWExBUkdFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUtYWxlcnQnKVxyXG4gIGdldCBhY3RpdmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IE5iQWxlcnRDb21wb25lbnQuU1RBVFVTX0FDVElWRTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQtYWxlcnQnKVxyXG4gIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJBbGVydENvbXBvbmVudC5TVEFUVVNfRElTQUJMRUQ7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnByaW1hcnktYWxlcnQnKVxyXG4gIGdldCBwcmltYXJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkFsZXJ0Q29tcG9uZW50LlNUQVRVU19QUklNQVJZO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pbmZvLWFsZXJ0JylcclxuICBnZXQgaW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJBbGVydENvbXBvbmVudC5TVEFUVVNfSU5GTztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc3VjY2Vzcy1hbGVydCcpXHJcbiAgZ2V0IHN1Y2Nlc3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IE5iQWxlcnRDb21wb25lbnQuU1RBVFVTX1NVQ0NFU1M7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndhcm5pbmctYWxlcnQnKVxyXG4gIGdldCB3YXJuaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkFsZXJ0Q29tcG9uZW50LlNUQVRVU19XQVJOSU5HO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5kYW5nZXItYWxlcnQnKVxyXG4gIGdldCBkYW5nZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IE5iQWxlcnRDb21wb25lbnQuU1RBVFVTX0RBTkdFUjtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50JylcclxuICBnZXQgaGFzQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zdGF0dXMnKVxyXG4gIGdldCBoYXNTdGF0dXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXM7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjY2VudC1wcmltYXJ5JylcclxuICBnZXQgcHJpbWFyeUFjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJBbGVydENvbXBvbmVudC5BQ0NFTlRfUFJJTUFSWTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50LWluZm8nKVxyXG4gIGdldCBpbmZvQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50ID09PSBOYkFsZXJ0Q29tcG9uZW50LkFDQ0VOVF9JTkZPO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NlbnQtc3VjY2VzcycpXHJcbiAgZ2V0IHN1Y2Nlc3NBY2NlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2NlbnQgPT09IE5iQWxlcnRDb21wb25lbnQuQUNDRU5UX1NVQ0NFU1M7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjY2VudC13YXJuaW5nJylcclxuICBnZXQgd2FybmluZ0FjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJBbGVydENvbXBvbmVudC5BQ0NFTlRfV0FSTklORztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50LWRhbmdlcicpXHJcbiAgZ2V0IGRhbmdlckFjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJBbGVydENvbXBvbmVudC5BQ0NFTlRfREFOR0VSO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NlbnQtYWN0aXZlJylcclxuICBnZXQgYWN0aXZlQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50ID09PSBOYkFsZXJ0Q29tcG9uZW50LkFDQ0VOVF9BQ1RJVkU7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjY2VudC1kaXNhYmxlZCcpXHJcbiAgZ2V0IGRpc2FibGVkQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50ID09PSBOYkFsZXJ0Q29tcG9uZW50LkFDQ0VOVF9ESVNBQkxFRDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3Mub3V0bGluZScpXHJcbiAgZ2V0IGhhc091dGxpbmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRsaW5lO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLXByaW1hcnknKVxyXG4gIGdldCBwcmltYXJ5T3V0bGluZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm91dGxpbmUgPT09IE5iQWxlcnRDb21wb25lbnQuT1VUTElORV9QUklNQVJZO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLWluZm8nKVxyXG4gIGdldCBpbmZvT3V0bGluZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm91dGxpbmUgPT09IE5iQWxlcnRDb21wb25lbnQuT1VUTElORV9JTkZPO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLXN1Y2Nlc3MnKVxyXG4gIGdldCBzdWNjZXNzT3V0bGluZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm91dGxpbmUgPT09IE5iQWxlcnRDb21wb25lbnQuT1VUTElORV9TVUNDRVNTO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLXdhcm5pbmcnKVxyXG4gIGdldCB3YXJuaW5nT3V0bGluZSgpIHtcclxuICAgIHJldHVybiB0aGlzLm91dGxpbmUgPT09IE5iQWxlcnRDb21wb25lbnQuT1VUTElORV9XQVJOSU5HO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLWRhbmdlcicpXHJcbiAgZ2V0IGRhbmdlck91dGxpbmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRsaW5lID09PSBOYkFsZXJ0Q29tcG9uZW50Lk9VVExJTkVfREFOR0VSO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLWFjdGl2ZScpXHJcbiAgZ2V0IGFjdGl2ZU91dGxpbmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vdXRsaW5lID09PSBOYkFsZXJ0Q29tcG9uZW50Lk9VVExJTkVfQUNUSVZFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5vdXRsaW5lLWRpc2FibGVkJylcclxuICBnZXQgZGlzYWJsZWRPdXRsaW5lKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3V0bGluZSA9PT0gTmJBbGVydENvbXBvbmVudC5PVVRMSU5FX0RJU0FCTEVEO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBBbGVydCBzaXplLCBhdmFpbGFibGUgc2l6ZXM6XHJcbiAgICogeHhzbWFsbCwgeHNtYWxsLCBzbWFsbCwgbWVkaXVtLCBsYXJnZSwgeGxhcmdlLCB4eGxhcmdlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnc2l6ZScpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0U2l6ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaXplID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBBbGVydCBzdGF0dXMgKGFkZHMgc3BlY2lmaWMgc3R5bGVzKTpcclxuICAgKiBhY3RpdmUsIGRpc2FibGVkLCBwcmltYXJ5LCBpbmZvLCBzdWNjZXNzLCB3YXJuaW5nLCBkYW5nZXJcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgQElucHV0KCdzdGF0dXMnKVxyXG4gIHByaXZhdGUgc2V0IHNldFN0YXR1cyh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdGF0dXMgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEFsZXJ0IGFjY2VudCAoY29sb3Igb2YgdGhlIHRvcCBib3JkZXIpOlxyXG4gICAqIGFjdGl2ZSwgZGlzYWJsZWQsIHByaW1hcnksIGluZm8sIHN1Y2Nlc3MsIHdhcm5pbmcsIGRhbmdlclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ2FjY2VudCcpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0QWNjZW50KHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFjY2VudCA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQWxlcnQgb3V0bGluZSAoY29sb3Igb2YgdGhlIGJvcmRlcik6XHJcbiAgICogYWN0aXZlLCBkaXNhYmxlZCwgcHJpbWFyeSwgaW5mbywgc3VjY2Vzcywgd2FybmluZywgZGFuZ2VyXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnb3V0bGluZScpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0T3V0bGluZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5vdXRsaW5lID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBFbWl0cyB3aGVuIGNoaXAgaXMgcmVtb3ZlZFxyXG4gICAqIEB0eXBlIEV2ZW50RW1pdHRlcjxhbnk+XHJcbiAgICovXHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKlxyXG4gICAqIEVtaXRzIHRoZSByZW1vdmVkIGNoaXAgZXZlbnRcclxuICAgKi9cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==