UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

505 lines 35.2 kB
/** * @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">&times;</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==