theme-lib
Version:
This is a simple example Angular Library published to npm.
543 lines • 35.1 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, HostListener, Renderer2, ElementRef } from '@angular/core';
import { convertToBoolProperty } from '../helpers';
/*
* Basic button component.
*
* Default button size is `medium` and status color is `primary`:
* @stacked-example(Button Showcase, button/button-showcase.component)
*
* ```html
* <button nbButton></button>
* ```
* ### Installation
*
* Import `NbButtonModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbButtonModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* Buttons are available in multiple colors using `status` property:
* @stacked-example(Button Colors, button/button-colors.component.html)
*
* There are three button sizes:
*
* @stacked-example(Button Sizes, button/button-sizes.component.html)
*
* And two additional style types - `outline`:
*
* @stacked-example(Outline Buttons, button/button-outline.component.html)
*
* and `hero`:
*
* @stacked-example(Button Colors, button/button-hero.component.html)
*
* Buttons available in different shapes, which could be combined with the other properties:
* @stacked-example(Button Shapes, button/button-shapes.component)
*
* `nbButton` could be applied to the following selectors - `button`, `input[type="button"]`, `input[type="submit"]`
* and `a`:
* @stacked-example(Button Elements, button/button-types.component.html)
*
* Button can be made `fullWidth`:
* @stacked-example(Full Width Button, button/button-full-width.component.html)
*
* @styles
*
* btn-fg:
* btn-font-family:
* btn-line-height:
* btn-disabled-opacity:
* btn-cursor:
* btn-primary-bg:
* btn-secondary-bg:
* btn-info-bg:
* btn-success-bg:
* btn-warning-bg:
* btn-danger-bg:
* btn-secondary-border:
* btn-secondary-border-width:
* btn-padding-y-lg:
* btn-padding-x-lg:
* btn-font-size-lg:
* btn-padding-y-md:
* btn-padding-x-md:
* btn-font-size-md:
* btn-padding-y-sm:
* btn-padding-x-sm:
* btn-font-size-sm:
* btn-padding-y-xs:
* btn-padding-x-xs:
* btn-font-size-xs:
* btn-border-radius:
* btn-rectangle-border-radius:
* btn-semi-round-border-radius:
* btn-round-border-radius:
* btn-hero-shadow:
* btn-hero-text-shadow:
* btn-hero-bevel-size:
* btn-hero-glow-size:
* btn-hero-primary-glow-size:
* btn-hero-success-glow-size:
* btn-hero-warning-glow-size:
* btn-hero-info-glow-size:
* btn-hero-danger-glow-size:
* btn-hero-secondary-glow-size:
* btn-hero-degree:
* btn-hero-primary-degree:
* btn-hero-success-degree:
* btn-hero-warning-degree:
* btn-hero-info-degree:
* btn-hero-danger-degree:
* btn-hero-secondary-degree:
* btn-hero-border-radius:
* btn-outline-fg:
* btn-outline-hover-fg:
* btn-outline-focus-fg:
*/
var NbButtonComponent = /** @class */ (function () {
function NbButtonComponent(renderer, hostElement) {
this.renderer = renderer;
this.hostElement = hostElement;
this.fullWidth = false;
}
Object.defineProperty(NbButtonComponent.prototype, "xsmall", {
get: /**
* @return {?}
*/
function () {
return this.size === NbButtonComponent.SIZE_XSMALL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "small", {
get: /**
* @return {?}
*/
function () {
return this.size === NbButtonComponent.SIZE_SMALL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "medium", {
get: /**
* @return {?}
*/
function () {
return this.size === NbButtonComponent.SIZE_MEDIUM;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "large", {
get: /**
* @return {?}
*/
function () {
return this.size === NbButtonComponent.SIZE_LARGE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "primary", {
get: /**
* @return {?}
*/
function () {
return this.status === NbButtonComponent.STATUS_PRIMARY;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "info", {
get: /**
* @return {?}
*/
function () {
return this.status === NbButtonComponent.STATUS_INFO;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "success", {
get: /**
* @return {?}
*/
function () {
return this.status === NbButtonComponent.STATUS_SUCCESS;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "warning", {
get: /**
* @return {?}
*/
function () {
return this.status === NbButtonComponent.STATUS_WARNING;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "danger", {
get: /**
* @return {?}
*/
function () {
return this.status === NbButtonComponent.STATUS_DANGER;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "rectangle", {
get: /**
* @return {?}
*/
function () {
return this.shape === NbButtonComponent.SHAPE_RECTANGLE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "round", {
get: /**
* @return {?}
*/
function () {
return this.shape === NbButtonComponent.SHAPE_ROUND;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "semiRound", {
get: /**
* @return {?}
*/
function () {
return this.shape === NbButtonComponent.SHAPE_SEMI_ROUND;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "tabbable", {
// issue #794
get:
// issue #794
/**
* @return {?}
*/
function () {
return this.disabled ? '-1' : '0';
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setSize", {
/*
* Button size, available sizes:
* `xxsmall`, `xsmall`, `small`, `medium`, `large`
* @param {string} val
*/
set: /*
* Button size, available sizes:
* `xxsmall`, `xsmall`, `small`, `medium`, `large`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.size = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setStatus", {
/*
* Button status (adds specific styles):
* `primary`, `info`, `success`, `warning`, `danger`
* @param {string} val
*/
set: /*
* Button status (adds specific styles):
* `primary`, `info`, `success`, `warning`, `danger`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.status = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setShape", {
/*
* Button shapes: `rectangle`, `round`, `semi-round`
* @param {string} val
*/
set: /*
* Button shapes: `rectangle`, `round`, `semi-round`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.shape = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setHero", {
/*
* Adds `hero` styles
* @param {boolean} val
*/
set: /*
* Adds `hero` styles
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
function (val) {
this.hero = convertToBoolProperty(val);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setDisabled", {
/*
* Disables the button
* @param {boolean} val
*/
set: /*
* Disables the button
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
function (val) {
this.disabled = convertToBoolProperty(val);
this.renderer.setProperty(this.hostElement.nativeElement, 'disabled', this.disabled);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setFullWidth", {
/*
* If set element will fill its container
* @param {boolean}
*/
set: /*
* If set element will fill its container
* @param {boolean}
*/
/**
* @param {?} value
* @return {?}
*/
function (value) {
this.fullWidth = convertToBoolProperty(value);
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbButtonComponent.prototype, "setOutline", {
/*
* Adds `outline` styles
* @param {boolean} val
*/
set: /*
* Adds `outline` styles
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
function (val) {
this.outline = convertToBoolProperty(val);
},
enumerable: true,
configurable: true
});
/*
* @private
* Keep this handler to partially support anchor disabling.
* Unlike button, anchor doesn't have 'disabled' DOM property,
* so handler will be called anyway. We preventing navigation and bubbling.
* Disabling is partial due to click handlers precedence. Consider example:
* <a nbButton [disabled]="true" (click)="clickHandler()">...</a>
* 'clickHandler' will be called before our host listener below. We can't prevent
* such handlers call.
*/
/*
* @private
* Keep this handler to partially support anchor disabling.
* Unlike button, anchor doesn't have 'disabled' DOM property,
* so handler will be called anyway. We preventing navigation and bubbling.
* Disabling is partial due to click handlers precedence. Consider example:
* <a nbButton [disabled]="true" (click)="clickHandler()">...</a>
* 'clickHandler' will be called before our host listener below. We can't prevent
* such handlers call.
*/
/**
* @param {?} event
* @return {?}
*/
NbButtonComponent.prototype.onClick = /*
* @private
* Keep this handler to partially support anchor disabling.
* Unlike button, anchor doesn't have 'disabled' DOM property,
* so handler will be called anyway. We preventing navigation and bubbling.
* Disabling is partial due to click handlers precedence. Consider example:
* <a nbButton [disabled]="true" (click)="clickHandler()">...</a>
* 'clickHandler' will be called before our host listener below. We can't prevent
* such handlers call.
*/
/**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.disabled) {
event.preventDefault();
event.stopImmediatePropagation();
}
};
NbButtonComponent.SIZE_XSMALL = 'xsmall';
NbButtonComponent.SIZE_SMALL = 'small';
NbButtonComponent.SIZE_MEDIUM = 'medium';
NbButtonComponent.SIZE_LARGE = 'large';
NbButtonComponent.STATUS_PRIMARY = 'primary';
NbButtonComponent.STATUS_INFO = 'info';
NbButtonComponent.STATUS_SUCCESS = 'success';
NbButtonComponent.STATUS_WARNING = 'warning';
NbButtonComponent.STATUS_DANGER = 'danger';
NbButtonComponent.SHAPE_RECTANGLE = 'rectangle';
NbButtonComponent.SHAPE_ROUND = 'round';
NbButtonComponent.SHAPE_SEMI_ROUND = 'semi-round';
NbButtonComponent.decorators = [
{ type: Component, args: [{
selector: 'button[nbButton],a[nbButton],input[type="button"][nbButton],input[type="submit"][nbButton]',
template: "\n <ng-content></ng-content>\n ",
styles: [":host{text-transform:uppercase;letter-spacing:.4px;border:2px solid transparent;transition:none;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;text-align:center;text-decoration:none;display:inline-block;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host:focus,:host:hover{text-decoration:none}:host.btn-full-width{width:100%}"]
}] }
];
/** @nocollapse */
NbButtonComponent.ctorParameters = function () { return [
{ type: Renderer2 },
{ type: ElementRef }
]; };
NbButtonComponent.propDecorators = {
xsmall: [{ type: HostBinding, args: ['class.btn-xsmall',] }],
small: [{ type: HostBinding, args: ['class.btn-small',] }],
medium: [{ type: HostBinding, args: ['class.btn-medium',] }],
large: [{ type: HostBinding, args: ['class.btn-large',] }],
primary: [{ type: HostBinding, args: ['class.btn-primary',] }],
info: [{ type: HostBinding, args: ['class.btn-info',] }],
success: [{ type: HostBinding, args: ['class.btn-success',] }],
warning: [{ type: HostBinding, args: ['class.btn-warning',] }],
danger: [{ type: HostBinding, args: ['class.btn-danger',] }],
rectangle: [{ type: HostBinding, args: ['class.btn-rectangle',] }],
round: [{ type: HostBinding, args: ['class.btn-round',] }],
semiRound: [{ type: HostBinding, args: ['class.btn-semi-round',] }],
hero: [{ type: HostBinding, args: ['class.btn-hero',] }],
outline: [{ type: HostBinding, args: ['class.btn-outline',] }],
disabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.btn-disabled',] }],
tabbable: [{ type: HostBinding, args: ['attr.tabindex',] }],
fullWidth: [{ type: HostBinding, args: ['class.btn-full-width',] }],
setSize: [{ type: Input, args: ['size',] }],
setStatus: [{ type: Input, args: ['status',] }],
setShape: [{ type: Input, args: ['shape',] }],
setHero: [{ type: Input, args: ['hero',] }],
setDisabled: [{ type: Input, args: ['disabled',] }],
setFullWidth: [{ type: Input, args: ['fullWidth',] }],
setOutline: [{ type: Input, args: ['outline',] }],
onClick: [{ type: HostListener, args: ['click', ['$event'],] }]
};
return NbButtonComponent;
}());
export { NbButtonComponent };
if (false) {
/** @type {?} */
NbButtonComponent.SIZE_XSMALL;
/** @type {?} */
NbButtonComponent.SIZE_SMALL;
/** @type {?} */
NbButtonComponent.SIZE_MEDIUM;
/** @type {?} */
NbButtonComponent.SIZE_LARGE;
/** @type {?} */
NbButtonComponent.STATUS_PRIMARY;
/** @type {?} */
NbButtonComponent.STATUS_INFO;
/** @type {?} */
NbButtonComponent.STATUS_SUCCESS;
/** @type {?} */
NbButtonComponent.STATUS_WARNING;
/** @type {?} */
NbButtonComponent.STATUS_DANGER;
/** @type {?} */
NbButtonComponent.SHAPE_RECTANGLE;
/** @type {?} */
NbButtonComponent.SHAPE_ROUND;
/** @type {?} */
NbButtonComponent.SHAPE_SEMI_ROUND;
/** @type {?} */
NbButtonComponent.prototype.size;
/** @type {?} */
NbButtonComponent.prototype.status;
/** @type {?} */
NbButtonComponent.prototype.accent;
/** @type {?} */
NbButtonComponent.prototype.shape;
/** @type {?} */
NbButtonComponent.prototype.hero;
/** @type {?} */
NbButtonComponent.prototype.outline;
/** @type {?} */
NbButtonComponent.prototype.disabled;
/** @type {?} */
NbButtonComponent.prototype.fullWidth;
/**
* @type {?}
* @protected
*/
NbButtonComponent.prototype.renderer;
/**
* @type {?}
* @protected
*/
NbButtonComponent.prototype.hostElement;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVHbkQ7SUE0TEUsMkJBQ1ksUUFBbUIsRUFDbkIsV0FBb0M7UUFEcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUF4RmhELGNBQVMsR0FBRyxLQUFLLENBQUM7SUF5RmYsQ0FBQztJQWxLSixzQkFDSSxxQ0FBTTs7OztRQURWO1lBRUUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztRQUNyRCxDQUFDOzs7T0FBQTtJQUVELHNCQUNJLG9DQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsVUFBVSxDQUFDO1FBQ3BELENBQUM7OztPQUFBO0lBRUQsc0JBQ0kscUNBQU07Ozs7UUFEVjtZQUVFLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDckQsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxvQ0FBSzs7OztRQURUO1lBRUUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztRQUNwRCxDQUFDOzs7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QUFXLFNBQUMsc0JBQXNCO3VCQUtsQyxXQUFXLFNBQUMsZ0JBQWdCOzBCQUM1QixXQUFXLFNBQUMsbUJBQW1COzJCQUUvQixXQUFXLFNBQUMsb0JBQW9CLGNBQ2hDLFdBQVcsU0FBQyxvQkFBb0I7MkJBR2hDLFdBQVcsU0FBQyxlQUFlOzRCQUszQixXQUFXLFNBQUMsc0JBQXNCOzBCQVFsQyxLQUFLLFNBQUMsTUFBTTs0QkFVWixLQUFLLFNBQUMsUUFBUTsyQkFTZCxLQUFLLFNBQUMsT0FBTzswQkFTYixLQUFLLFNBQUMsTUFBTTs4QkFTWixLQUFLLFNBQUMsVUFBVTsrQkFVaEIsS0FBSyxTQUFDLFdBQVc7NkJBU2pCLEtBQUssU0FBQyxTQUFTOzBCQWVmLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBWW5DLHdCQUFDO0NBQUEsQUFoTUQsSUFnTUM7U0F6TFksaUJBQWlCOzs7SUFFNUIsOEJBQXVDOztJQUN2Qyw2QkFBcUM7O0lBQ3JDLDhCQUF1Qzs7SUFDdkMsNkJBQXFDOztJQUVyQyxpQ0FBMkM7O0lBQzNDLDhCQUFxQzs7SUFDckMsaUNBQTJDOztJQUMzQyxpQ0FBMkM7O0lBQzNDLGdDQUF5Qzs7SUFFekMsa0NBQThDOztJQUM5Qyw4QkFBc0M7O0lBQ3RDLG1DQUFnRDs7SUFFaEQsaUNBQWE7O0lBQ2IsbUNBQWU7O0lBQ2YsbUNBQWU7O0lBQ2Ysa0NBQWM7O0lBOERkLGlDQUE2Qzs7SUFDN0Msb0NBQW1EOztJQUVuRCxxQ0FDcUQ7O0lBUXJELHNDQUNrQjs7Ozs7SUF1RmhCLHFDQUE2Qjs7Ozs7SUFDN0Isd0NBQThDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIFJlbmRlcmVyMiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sUHJvcGVydHkgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuXHJcbi8qXHJcbiAqIEJhc2ljIGJ1dHRvbiBjb21wb25lbnQuXHJcbiAqXHJcbiAqIERlZmF1bHQgYnV0dG9uIHNpemUgaXMgYG1lZGl1bWAgYW5kIHN0YXR1cyBjb2xvciBpcyBgcHJpbWFyeWA6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIFNob3djYXNlLCBidXR0b24vYnV0dG9uLXNob3djYXNlLmNvbXBvbmVudClcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8YnV0dG9uIG5iQnV0dG9uPjwvYnV0dG9uPlxyXG4gKiBgYGBcclxuICogIyMjIEluc3RhbGxhdGlvblxyXG4gKlxyXG4gKiBJbXBvcnQgYE5iQnV0dG9uTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJCdXR0b25Nb2R1bGUsXHJcbiAqICAgXSxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFBhZ2VNb2R1bGUgeyB9XHJcbiAqIGBgYFxyXG4gKiAjIyMgVXNhZ2VcclxuICpcclxuICogQnV0dG9ucyBhcmUgYXZhaWxhYmxlIGluIG11bHRpcGxlIGNvbG9ycyB1c2luZyBgc3RhdHVzYCBwcm9wZXJ0eTpcclxuICogQHN0YWNrZWQtZXhhbXBsZShCdXR0b24gQ29sb3JzLCBidXR0b24vYnV0dG9uLWNvbG9ycy5jb21wb25lbnQuaHRtbClcclxuICpcclxuICogVGhlcmUgYXJlIHRocmVlIGJ1dHRvbiBzaXplczpcclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShCdXR0b24gU2l6ZXMsIGJ1dHRvbi9idXR0b24tc2l6ZXMuY29tcG9uZW50Lmh0bWwpXHJcbiAqXHJcbiAqIEFuZCB0d28gYWRkaXRpb25hbCBzdHlsZSB0eXBlcyAtIGBvdXRsaW5lYDpcclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShPdXRsaW5lIEJ1dHRvbnMsIGJ1dHRvbi9idXR0b24tb3V0bGluZS5jb21wb25lbnQuaHRtbClcclxuICpcclxuICogYW5kIGBoZXJvYDpcclxuICpcclxuICogQHN0YWNrZWQtZXhhbXBsZShCdXR0b24gQ29sb3JzLCBidXR0b24vYnV0dG9uLWhlcm8uY29tcG9uZW50Lmh0bWwpXHJcbiAqXHJcbiAqIEJ1dHRvbnMgYXZhaWxhYmxlIGluIGRpZmZlcmVudCBzaGFwZXMsIHdoaWNoIGNvdWxkIGJlIGNvbWJpbmVkIHdpdGggdGhlIG90aGVyIHByb3BlcnRpZXM6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIFNoYXBlcywgYnV0dG9uL2J1dHRvbi1zaGFwZXMuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBgbmJCdXR0b25gIGNvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIGZvbGxvd2luZyBzZWxlY3RvcnMgLSBgYnV0dG9uYCwgYGlucHV0W3R5cGU9XCJidXR0b25cIl1gLCBgaW5wdXRbdHlwZT1cInN1Ym1pdFwiXWBcclxuICogYW5kIGBhYDpcclxuICogQHN0YWNrZWQtZXhhbXBsZShCdXR0b24gRWxlbWVudHMsIGJ1dHRvbi9idXR0b24tdHlwZXMuY29tcG9uZW50Lmh0bWwpXHJcbiAqXHJcbiAqIEJ1dHRvbiBjYW4gYmUgbWFkZSBgZnVsbFdpZHRoYDpcclxuICogQHN0YWNrZWQtZXhhbXBsZShGdWxsIFdpZHRoIEJ1dHRvbiwgYnV0dG9uL2J1dHRvbi1mdWxsLXdpZHRoLmNvbXBvbmVudC5odG1sKVxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIGJ0bi1mZzpcclxuICogYnRuLWZvbnQtZmFtaWx5OlxyXG4gKiBidG4tbGluZS1oZWlnaHQ6XHJcbiAqIGJ0bi1kaXNhYmxlZC1vcGFjaXR5OlxyXG4gKiBidG4tY3Vyc29yOlxyXG4gKiBidG4tcHJpbWFyeS1iZzpcclxuICogYnRuLXNlY29uZGFyeS1iZzpcclxuICogYnRuLWluZm8tYmc6XHJcbiAqIGJ0bi1zdWNjZXNzLWJnOlxyXG4gKiBidG4td2FybmluZy1iZzpcclxuICogYnRuLWRhbmdlci1iZzpcclxuICogYnRuLXNlY29uZGFyeS1ib3JkZXI6XHJcbiAqIGJ0bi1zZWNvbmRhcnktYm9yZGVyLXdpZHRoOlxyXG4gKiBidG4tcGFkZGluZy15LWxnOlxyXG4gKiBidG4tcGFkZGluZy14LWxnOlxyXG4gKiBidG4tZm9udC1zaXplLWxnOlxyXG4gKiBidG4tcGFkZGluZy15LW1kOlxyXG4gKiBidG4tcGFkZGluZy14LW1kOlxyXG4gKiBidG4tZm9udC1zaXplLW1kOlxyXG4gKiBidG4tcGFkZGluZy15LXNtOlxyXG4gKiBidG4tcGFkZGluZy14LXNtOlxyXG4gKiBidG4tZm9udC1zaXplLXNtOlxyXG4gKiBidG4tcGFkZGluZy15LXhzOlxyXG4gKiBidG4tcGFkZGluZy14LXhzOlxyXG4gKiBidG4tZm9udC1zaXplLXhzOlxyXG4gKiBidG4tYm9yZGVyLXJhZGl1czpcclxuICogYnRuLXJlY3RhbmdsZS1ib3JkZXItcmFkaXVzOlxyXG4gKiBidG4tc2VtaS1yb3VuZC1ib3JkZXItcmFkaXVzOlxyXG4gKiBidG4tcm91bmQtYm9yZGVyLXJhZGl1czpcclxuICogYnRuLWhlcm8tc2hhZG93OlxyXG4gKiBidG4taGVyby10ZXh0LXNoYWRvdzpcclxuICogYnRuLWhlcm8tYmV2ZWwtc2l6ZTpcclxuICogYnRuLWhlcm8tZ2xvdy1zaXplOlxyXG4gKiBidG4taGVyby1wcmltYXJ5LWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8tc3VjY2Vzcy1nbG93LXNpemU6XHJcbiAqIGJ0bi1oZXJvLXdhcm5pbmctZ2xvdy1zaXplOlxyXG4gKiBidG4taGVyby1pbmZvLWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8tZGFuZ2VyLWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8tc2Vjb25kYXJ5LWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8tZGVncmVlOlxyXG4gKiBidG4taGVyby1wcmltYXJ5LWRlZ3JlZTpcclxuICogYnRuLWhlcm8tc3VjY2Vzcy1kZWdyZWU6XHJcbiAqIGJ0bi1oZXJvLXdhcm5pbmctZGVncmVlOlxyXG4gKiBidG4taGVyby1pbmZvLWRlZ3JlZTpcclxuICogYnRuLWhlcm8tZGFuZ2VyLWRlZ3JlZTpcclxuICogYnRuLWhlcm8tc2Vjb25kYXJ5LWRlZ3JlZTpcclxuICogYnRuLWhlcm8tYm9yZGVyLXJhZGl1czpcclxuICogYnRuLW91dGxpbmUtZmc6XHJcbiAqIGJ0bi1vdXRsaW5lLWhvdmVyLWZnOlxyXG4gKiBidG4tb3V0bGluZS1mb2N1cy1mZzpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYnV0dG9uW25iQnV0dG9uXSxhW25iQnV0dG9uXSxpbnB1dFt0eXBlPVwiYnV0dG9uXCJdW25iQnV0dG9uXSxpbnB1dFt0eXBlPVwic3VibWl0XCJdW25iQnV0dG9uXScsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJCdXR0b25Db21wb25lbnQge1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YU01BTEwgPSAneHNtYWxsJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9TTUFMTCA9ICdzbWFsbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfTUVESVVNID0gJ21lZGl1bSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfTEFSR0UgPSAnbGFyZ2UnO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX1BSSU1BUlkgPSAncHJpbWFyeSc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19JTkZPID0gJ2luZm8nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfU1VDQ0VTUyA9ICdzdWNjZXNzJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX1dBUk5JTkcgPSAnd2FybmluZyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19EQU5HRVIgPSAnZGFuZ2VyJztcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNIQVBFX1JFQ1RBTkdMRSA9ICdyZWN0YW5nbGUnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSEFQRV9ST1VORCA9ICdyb3VuZCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNIQVBFX1NFTUlfUk9VTkQgPSAnc2VtaS1yb3VuZCc7XHJcblxyXG4gIHNpemU6IHN0cmluZztcclxuICBzdGF0dXM6IHN0cmluZztcclxuICBhY2NlbnQ6IHN0cmluZztcclxuICBzaGFwZTogc3RyaW5nO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi14c21hbGwnKVxyXG4gIGdldCB4c21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TSVpFX1hTTUFMTDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXNtYWxsJylcclxuICBnZXQgc21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TSVpFX1NNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbWVkaXVtJylcclxuICBnZXQgbWVkaXVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0laRV9NRURJVU07XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1sYXJnZScpXHJcbiAgZ2V0IGxhcmdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0laRV9MQVJHRTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXByaW1hcnknKVxyXG4gIGdldCBwcmltYXJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TVEFUVVNfUFJJTUFSWTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWluZm8nKVxyXG4gIGdldCBpbmZvKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TVEFUVVNfSU5GTztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXN1Y2Nlc3MnKVxyXG4gIGdldCBzdWNjZXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TVEFUVVNfU1VDQ0VTUztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXdhcm5pbmcnKVxyXG4gIGdldCB3YXJuaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TVEFUVVNfV0FSTklORztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWRhbmdlcicpXHJcbiAgZ2V0IGRhbmdlcigpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJCdXR0b25Db21wb25lbnQuU1RBVFVTX0RBTkdFUjtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXJlY3RhbmdsZScpXHJcbiAgZ2V0IHJlY3RhbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNoYXBlID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TSEFQRV9SRUNUQU5HTEU7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1yb3VuZCcpXHJcbiAgZ2V0IHJvdW5kKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hhcGUgPT09IE5iQnV0dG9uQ29tcG9uZW50LlNIQVBFX1JPVU5EO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tc2VtaS1yb3VuZCcpXHJcbiAgZ2V0IHNlbWlSb3VuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNoYXBlID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TSEFQRV9TRU1JX1JPVU5EO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4taGVybycpIGhlcm86IGJvb2xlYW47XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tb3V0bGluZScpIG91dGxpbmU6IGJvb2xlYW47XHJcblxyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJylcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1kaXNhYmxlZCcpIGRpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAvLyBpc3N1ZSAjNzk0XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcclxuICBnZXQgdGFiYmFibGUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gJy0xJyA6ICcwJztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWZ1bGwtd2lkdGgnKVxyXG4gIGZ1bGxXaWR0aCA9IGZhbHNlO1xyXG5cclxuICAvKlxyXG4gICAqIEJ1dHRvbiBzaXplLCBhdmFpbGFibGUgc2l6ZXM6XHJcbiAgICogYHh4c21hbGxgLCBgeHNtYWxsYCwgYHNtYWxsYCwgYG1lZGl1bWAsIGBsYXJnZWBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgQElucHV0KCdzaXplJylcclxuICBwcml2YXRlIHNldCBzZXRTaXplKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNpemUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEJ1dHRvbiBzdGF0dXMgKGFkZHMgc3BlY2lmaWMgc3R5bGVzKTpcclxuICAgKiBgcHJpbWFyeWAsIGBpbmZvYCwgYHN1Y2Nlc3NgLCBgd2FybmluZ2AsIGBkYW5nZXJgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnc3RhdHVzJylcclxuICBwcml2YXRlIHNldCBzZXRTdGF0dXModmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RhdHVzID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBCdXR0b24gc2hhcGVzOiBgcmVjdGFuZ2xlYCwgYHJvdW5kYCwgYHNlbWktcm91bmRgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnc2hhcGUnKVxyXG4gIHByaXZhdGUgc2V0IHNldFNoYXBlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNoYXBlID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBBZGRzIGBoZXJvYCBzdHlsZXNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnaGVybycpXHJcbiAgc2V0IHNldEhlcm8odmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmhlcm8gPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRGlzYWJsZXMgdGhlIGJ1dHRvblxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsXHJcbiAgICovXHJcbiAgQElucHV0KCdkaXNhYmxlZCcpXHJcbiAgc2V0IHNldERpc2FibGVkKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGNvbnZlcnRUb0Jvb2xQcm9wZXJ0eSh2YWwpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdkaXNhYmxlZCcsIHRoaXMuZGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBJZiBzZXQgZWxlbWVudCB3aWxsIGZpbGwgaXRzIGNvbnRhaW5lclxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBASW5wdXQoJ2Z1bGxXaWR0aCcpXHJcbiAgc2V0IHNldEZ1bGxXaWR0aCh2YWx1ZSkge1xyXG4gICAgdGhpcy5mdWxsV2lkdGggPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBBZGRzIGBvdXRsaW5lYCBzdHlsZXNcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnb3V0bGluZScpXHJcbiAgc2V0IHNldE91dGxpbmUodmFsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm91dGxpbmUgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQHByaXZhdGVcclxuICAgKiBLZWVwIHRoaXMgaGFuZGxlciB0byBwYXJ0aWFsbHkgc3VwcG9ydCBhbmNob3IgZGlzYWJsaW5nLlxyXG4gICAqIFVubGlrZSBidXR0b24sIGFuY2hvciBkb2Vzbid0IGhhdmUgJ2Rpc2FibGVkJyBET00gcHJvcGVydHksXHJcbiAgICogc28gaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBhbnl3YXkuIFdlIHByZXZlbnRpbmcgbmF2aWdhdGlvbiBhbmQgYnViYmxpbmcuXHJcbiAgICogRGlzYWJsaW5nIGlzIHBhcnRpYWwgZHVlIHRvIGNsaWNrIGhhbmRsZXJzIHByZWNlZGVuY2UuIENvbnNpZGVyIGV4YW1wbGU6XHJcbiAgICogPGEgbmJCdXR0b24gW2Rpc2FibGVkXT1cInRydWVcIiAoY2xpY2spPVwiY2xpY2tIYW5kbGVyKClcIj4uLi48L2E+XHJcbiAgICogJ2NsaWNrSGFuZGxlcicgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIG91ciBob3N0IGxpc3RlbmVyIGJlbG93LiBXZSBjYW4ndCBwcmV2ZW50XHJcbiAgICogc3VjaCBoYW5kbGVycyBjYWxsLlxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcclxuICBvbkNsaWNrKGV2ZW50OiBFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJvdGVjdGVkIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICApIHt9XHJcbn1cclxuIl19