theme-lib
Version:
This is a simple example Angular Library published to npm.
411 lines • 28.9 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:
*/
export class NbButtonComponent {
/**
* @param {?} renderer
* @param {?} hostElement
*/
constructor(renderer, hostElement) {
this.renderer = renderer;
this.hostElement = hostElement;
this.fullWidth = false;
}
/**
* @return {?}
*/
get xsmall() {
return this.size === NbButtonComponent.SIZE_XSMALL;
}
/**
* @return {?}
*/
get small() {
return this.size === NbButtonComponent.SIZE_SMALL;
}
/**
* @return {?}
*/
get medium() {
return this.size === NbButtonComponent.SIZE_MEDIUM;
}
/**
* @return {?}
*/
get large() {
return this.size === NbButtonComponent.SIZE_LARGE;
}
/**
* @return {?}
*/
get primary() {
return this.status === NbButtonComponent.STATUS_PRIMARY;
}
/**
* @return {?}
*/
get info() {
return this.status === NbButtonComponent.STATUS_INFO;
}
/**
* @return {?}
*/
get success() {
return this.status === NbButtonComponent.STATUS_SUCCESS;
}
/**
* @return {?}
*/
get warning() {
return this.status === NbButtonComponent.STATUS_WARNING;
}
/**
* @return {?}
*/
get danger() {
return this.status === NbButtonComponent.STATUS_DANGER;
}
/**
* @return {?}
*/
get rectangle() {
return this.shape === NbButtonComponent.SHAPE_RECTANGLE;
}
/**
* @return {?}
*/
get round() {
return this.shape === NbButtonComponent.SHAPE_ROUND;
}
/**
* @return {?}
*/
get semiRound() {
return this.shape === NbButtonComponent.SHAPE_SEMI_ROUND;
}
// issue #794
/**
* @return {?}
*/
get tabbable() {
return this.disabled ? '-1' : '0';
}
/*
* Button size, available sizes:
* `xxsmall`, `xsmall`, `small`, `medium`, `large`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setSize(val) {
this.size = val;
}
/*
* Button status (adds specific styles):
* `primary`, `info`, `success`, `warning`, `danger`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setStatus(val) {
this.status = val;
}
/*
* Button shapes: `rectangle`, `round`, `semi-round`
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
set setShape(val) {
this.shape = val;
}
/*
* Adds `hero` styles
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
set setHero(val) {
this.hero = convertToBoolProperty(val);
}
/*
* Disables the button
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
set setDisabled(val) {
this.disabled = convertToBoolProperty(val);
this.renderer.setProperty(this.hostElement.nativeElement, 'disabled', this.disabled);
}
/*
* If set element will fill its container
* @param {boolean}
*/
/**
* @param {?} value
* @return {?}
*/
set setFullWidth(value) {
this.fullWidth = convertToBoolProperty(value);
}
/*
* Adds `outline` styles
* @param {boolean} val
*/
/**
* @param {?} val
* @return {?}
*/
set setOutline(val) {
this.outline = convertToBoolProperty(val);
}
/*
* @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 {?}
*/
onClick(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: `
<ng-content></ng-content>
`,
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 = () => [
{ 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'],] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3RoZW1lLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2J1dHRvbi9idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThHbkQsTUFBTSxPQUFPLGlCQUFpQjs7Ozs7SUFxTDVCLFlBQ1ksUUFBbUIsRUFDbkIsV0FBb0M7UUFEcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUF4RmhELGNBQVMsR0FBRyxLQUFLLENBQUM7SUF5RmYsQ0FBQzs7OztJQWxLSixJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsV0FBVyxDQUFDO0lBQ3JELENBQUM7Ozs7SUFFRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsVUFBVSxDQUFDO0lBQ3BELENBQUM7Ozs7SUFFRCxJQUNJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsV0FBVyxDQUFDO0lBQ3JELENBQUM7Ozs7SUFFRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsVUFBVSxDQUFDO0lBQ3BELENBQUM7Ozs7SUFFRCxJQUNJLE9BQU87UUFDVCxPQUFPLElB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Qzs7SUFFckMsaUNBQTJDOztJQUMzQyw4QkFBcUM7O0lBQ3JDLGlDQUEyQzs7SUFDM0MsaUNBQTJDOztJQUMzQyxnQ0FBeUM7O0lBRXpDLGtDQUE4Qzs7SUFDOUMsOEJBQXNDOztJQUN0QyxtQ0FBZ0Q7O0lBRWhELGlDQUFhOztJQUNiLG1DQUFlOztJQUNmLG1DQUFlOztJQUNmLGtDQUFjOztJQThEZCxpQ0FBNkM7O0lBQzdDLG9DQUFtRDs7SUFFbkQscUNBQ3FEOztJQVFyRCxzQ0FDa0I7Ozs7O0lBdUZoQixxQ0FBNkI7Ozs7O0lBQzdCLHdDQUE4QyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBBa3Zlby4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuICovXHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBSZW5kZXJlcjIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbFByb3BlcnR5IH0gZnJvbSAnLi4vaGVscGVycyc7XHJcblxyXG4vKlxyXG4gKiBCYXNpYyBidXR0b24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBEZWZhdWx0IGJ1dHRvbiBzaXplIGlzIGBtZWRpdW1gIGFuZCBzdGF0dXMgY29sb3IgaXMgYHByaW1hcnlgOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEJ1dHRvbiBTaG93Y2FzZSwgYnV0dG9uL2J1dHRvbi1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIGBgYGh0bWxcclxuICogPGJ1dHRvbiBuYkJ1dHRvbj48L2J1dHRvbj5cclxuICogYGBgXHJcbiAqICMjIyBJbnN0YWxsYXRpb25cclxuICpcclxuICogSW1wb3J0IGBOYkJ1dHRvbk1vZHVsZWAgdG8geW91ciBmZWF0dXJlIG1vZHVsZS5cclxuICogYGBgdHNcclxuICogQE5nTW9kdWxlKHtcclxuICogICBpbXBvcnRzOiBbXHJcbiAqICAgXHQvLyAuLi5cclxuICogICAgIE5iQnV0dG9uTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIEJ1dHRvbnMgYXJlIGF2YWlsYWJsZSBpbiBtdWx0aXBsZSBjb2xvcnMgdXNpbmcgYHN0YXR1c2AgcHJvcGVydHk6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIENvbG9ycywgYnV0dG9uL2J1dHRvbi1jb2xvcnMuY29tcG9uZW50Lmh0bWwpXHJcbiAqXHJcbiAqIFRoZXJlIGFyZSB0aHJlZSBidXR0b24gc2l6ZXM6XHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIFNpemVzLCBidXR0b24vYnV0dG9uLXNpemVzLmNvbXBvbmVudC5odG1sKVxyXG4gKlxyXG4gKiBBbmQgdHdvIGFkZGl0aW9uYWwgc3R5bGUgdHlwZXMgLSBgb3V0bGluZWA6XHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoT3V0bGluZSBCdXR0b25zLCBidXR0b24vYnV0dG9uLW91dGxpbmUuY29tcG9uZW50Lmh0bWwpXHJcbiAqXHJcbiAqIGFuZCBgaGVyb2A6XHJcbiAqXHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIENvbG9ycywgYnV0dG9uL2J1dHRvbi1oZXJvLmNvbXBvbmVudC5odG1sKVxyXG4gKlxyXG4gKiBCdXR0b25zIGF2YWlsYWJsZSBpbiBkaWZmZXJlbnQgc2hhcGVzLCB3aGljaCBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIHRoZSBvdGhlciBwcm9wZXJ0aWVzOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEJ1dHRvbiBTaGFwZXMsIGJ1dHRvbi9idXR0b24tc2hhcGVzLmNvbXBvbmVudClcclxuICpcclxuICogYG5iQnV0dG9uYCBjb3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBmb2xsb3dpbmcgc2VsZWN0b3JzIC0gYGJ1dHRvbmAsIGBpbnB1dFt0eXBlPVwiYnV0dG9uXCJdYCwgYGlucHV0W3R5cGU9XCJzdWJtaXRcIl1gXHJcbiAqIGFuZCBgYWA6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQnV0dG9uIEVsZW1lbnRzLCBidXR0b24vYnV0dG9uLXR5cGVzLmNvbXBvbmVudC5odG1sKVxyXG4gKlxyXG4gKiBCdXR0b24gY2FuIGJlIG1hZGUgYGZ1bGxXaWR0aGA6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoRnVsbCBXaWR0aCBCdXR0b24sIGJ1dHRvbi9idXR0b24tZnVsbC13aWR0aC5jb21wb25lbnQuaHRtbClcclxuICpcclxuICogQHN0eWxlc1xyXG4gKlxyXG4gKiBidG4tZmc6XHJcbiAqIGJ0bi1mb250LWZhbWlseTpcclxuICogYnRuLWxpbmUtaGVpZ2h0OlxyXG4gKiBidG4tZGlzYWJsZWQtb3BhY2l0eTpcclxuICogYnRuLWN1cnNvcjpcclxuICogYnRuLXByaW1hcnktYmc6XHJcbiAqIGJ0bi1zZWNvbmRhcnktYmc6XHJcbiAqIGJ0bi1pbmZvLWJnOlxyXG4gKiBidG4tc3VjY2Vzcy1iZzpcclxuICogYnRuLXdhcm5pbmctYmc6XHJcbiAqIGJ0bi1kYW5nZXItYmc6XHJcbiAqIGJ0bi1zZWNvbmRhcnktYm9yZGVyOlxyXG4gKiBidG4tc2Vjb25kYXJ5LWJvcmRlci13aWR0aDpcclxuICogYnRuLXBhZGRpbmcteS1sZzpcclxuICogYnRuLXBhZGRpbmcteC1sZzpcclxuICogYnRuLWZvbnQtc2l6ZS1sZzpcclxuICogYnRuLXBhZGRpbmcteS1tZDpcclxuICogYnRuLXBhZGRpbmcteC1tZDpcclxuICogYnRuLWZvbnQtc2l6ZS1tZDpcclxuICogYnRuLXBhZGRpbmcteS1zbTpcclxuICogYnRuLXBhZGRpbmcteC1zbTpcclxuICogYnRuLWZvbnQtc2l6ZS1zbTpcclxuICogYnRuLXBhZGRpbmcteS14czpcclxuICogYnRuLXBhZGRpbmcteC14czpcclxuICogYnRuLWZvbnQtc2l6ZS14czpcclxuICogYnRuLWJvcmRlci1yYWRpdXM6XHJcbiAqIGJ0bi1yZWN0YW5nbGUtYm9yZGVyLXJhZGl1czpcclxuICogYnRuLXNlbWktcm91bmQtYm9yZGVyLXJhZGl1czpcclxuICogYnRuLXJvdW5kLWJvcmRlci1yYWRpdXM6XHJcbiAqIGJ0bi1oZXJvLXNoYWRvdzpcclxuICogYnRuLWhlcm8tdGV4dC1zaGFkb3c6XHJcbiAqIGJ0bi1oZXJvLWJldmVsLXNpemU6XHJcbiAqIGJ0bi1oZXJvLWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8tcHJpbWFyeS1nbG93LXNpemU6XHJcbiAqIGJ0bi1oZXJvLXN1Y2Nlc3MtZ2xvdy1zaXplOlxyXG4gKiBidG4taGVyby13YXJuaW5nLWdsb3ctc2l6ZTpcclxuICogYnRuLWhlcm8taW5mby1nbG93LXNpemU6XHJcbiAqIGJ0bi1oZXJvLWRhbmdlci1nbG93LXNpemU6XHJcbiAqIGJ0bi1oZXJvLXNlY29uZGFyeS1nbG93LXNpemU6XHJcbiAqIGJ0bi1oZXJvLWRlZ3JlZTpcclxuICogYnRuLWhlcm8tcHJpbWFyeS1kZWdyZWU6XHJcbiAqIGJ0bi1oZXJvLXN1Y2Nlc3MtZGVncmVlOlxyXG4gKiBidG4taGVyby13YXJuaW5nLWRlZ3JlZTpcclxuICogYnRuLWhlcm8taW5mby1kZWdyZWU6XHJcbiAqIGJ0bi1oZXJvLWRhbmdlci1kZWdyZWU6XHJcbiAqIGJ0bi1oZXJvLXNlY29uZGFyeS1kZWdyZWU6XHJcbiAqIGJ0bi1oZXJvLWJvcmRlci1yYWRpdXM6XHJcbiAqIGJ0bi1vdXRsaW5lLWZnOlxyXG4gKiBidG4tb3V0bGluZS1ob3Zlci1mZzpcclxuICogYnRuLW91dGxpbmUtZm9jdXMtZmc6XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2J1dHRvbltuYkJ1dHRvbl0sYVtuYkJ1dHRvbl0saW5wdXRbdHlwZT1cImJ1dHRvblwiXVtuYkJ1dHRvbl0saW5wdXRbdHlwZT1cInN1Ym1pdFwiXVtuYkJ1dHRvbl0nLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQnV0dG9uQ29tcG9uZW50IHtcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfWFNNQUxMID0gJ3hzbWFsbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfU01BTEwgPSAnc21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX01FRElVTSA9ICdtZWRpdW0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX0xBUkdFID0gJ2xhcmdlJztcclxuXHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19QUklNQVJZID0gJ3ByaW1hcnknO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfSU5GTyA9ICdpbmZvJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX1NVQ0NFU1MgPSAnc3VjY2Vzcyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19XQVJOSU5HID0gJ3dhcm5pbmcnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfREFOR0VSID0gJ2Rhbmdlcic7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBTSEFQRV9SRUNUQU5HTEUgPSAncmVjdGFuZ2xlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0hBUEVfUk9VTkQgPSAncm91bmQnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSEFQRV9TRU1JX1JPVU5EID0gJ3NlbWktcm91bmQnO1xyXG5cclxuICBzaXplOiBzdHJpbmc7XHJcbiAgc3RhdHVzOiBzdHJpbmc7XHJcbiAgYWNjZW50OiBzdHJpbmc7XHJcbiAgc2hhcGU6IHN0cmluZztcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4teHNtYWxsJylcclxuICBnZXQgeHNtYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0laRV9YU01BTEw7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1zbWFsbCcpXHJcbiAgZ2V0IHNtYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0laRV9TTUFMTDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLW1lZGl1bScpXHJcbiAgZ2V0IG1lZGl1bSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQnV0dG9uQ29tcG9uZW50LlNJWkVfTUVESVVNO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tbGFyZ2UnKVxyXG4gIGdldCBsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQnV0dG9uQ29tcG9uZW50LlNJWkVfTEFSR0U7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1wcmltYXJ5JylcclxuICBnZXQgcHJpbWFyeSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJCdXR0b25Db21wb25lbnQuU1RBVFVTX1BSSU1BUlk7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1pbmZvJylcclxuICBnZXQgaW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJCdXR0b25Db21wb25lbnQuU1RBVFVTX0lORk87XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1zdWNjZXNzJylcclxuICBnZXQgc3VjY2VzcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJCdXR0b25Db21wb25lbnQuU1RBVFVTX1NVQ0NFU1M7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi13YXJuaW5nJylcclxuICBnZXQgd2FybmluZygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJCdXR0b25Db21wb25lbnQuU1RBVFVTX1dBUk5JTkc7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1kYW5nZXInKVxyXG4gIGdldCBkYW5nZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IE5iQnV0dG9uQ29tcG9uZW50LlNUQVRVU19EQU5HRVI7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1yZWN0YW5nbGUnKVxyXG4gIGdldCByZWN0YW5nbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGFwZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0hBUEVfUkVDVEFOR0xFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tcm91bmQnKVxyXG4gIGdldCByb3VuZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNoYXBlID09PSBOYkJ1dHRvbkNvbXBvbmVudC5TSEFQRV9ST1VORDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLXNlbWktcm91bmQnKVxyXG4gIGdldCBzZW1pUm91bmQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGFwZSA9PT0gTmJCdXR0b25Db21wb25lbnQuU0hBUEVfU0VNSV9ST1VORDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLWhlcm8nKSBoZXJvOiBib29sZWFuO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYnRuLW91dGxpbmUnKSBvdXRsaW5lOiBib29sZWFuO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5idG4tZGlzYWJsZWQnKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuXHJcbiAgLy8gaXNzdWUgIzc5NFxyXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgZ2V0IHRhYmJhYmxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/ICctMScgOiAnMCc7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJ0bi1mdWxsLXdpZHRoJylcclxuICBmdWxsV2lkdGggPSBmYWxzZTtcclxuXHJcbiAgLypcclxuICAgKiBCdXR0b24gc2l6ZSwgYXZhaWxhYmxlIHNpemVzOlxyXG4gICAqIGB4eHNtYWxsYCwgYHhzbWFsbGAsIGBzbWFsbGAsIGBtZWRpdW1gLCBgbGFyZ2VgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnc2l6ZScpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0U2l6ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaXplID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBCdXR0b24gc3RhdHVzIChhZGRzIHNwZWNpZmljIHN0eWxlcyk6XHJcbiAgICogYHByaW1hcnlgLCBgaW5mb2AsIGBzdWNjZXNzYCwgYHdhcm5pbmdgLCBgZGFuZ2VyYFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ3N0YXR1cycpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0U3RhdHVzKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQnV0dG9uIHNoYXBlczogYHJlY3RhbmdsZWAsIGByb3VuZGAsIGBzZW1pLXJvdW5kYFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ3NoYXBlJylcclxuICBwcml2YXRlIHNldCBzZXRTaGFwZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaGFwZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQWRkcyBgaGVyb2Agc3R5bGVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ2hlcm8nKVxyXG4gIHNldCBzZXRIZXJvKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5oZXJvID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIERpc2FibGVzIHRoZSBidXR0b25cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxyXG4gIHNldCBzZXREaXNhYmxlZCh2YWw6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sUHJvcGVydHkodmFsKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCB0aGlzLmRpc2FibGVkKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogSWYgc2V0IGVsZW1lbnQgd2lsbCBmaWxsIGl0cyBjb250YWluZXJcclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgQElucHV0KCdmdWxsV2lkdGgnKVxyXG4gIHNldCBzZXRGdWxsV2lkdGgodmFsdWUpIHtcclxuICAgIHRoaXMuZnVsbFdpZHRoID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQWRkcyBgb3V0bGluZWAgc3R5bGVzXHJcbiAgICogQHBhcmFtIHtib29sZWFufSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ291dGxpbmUnKVxyXG4gIHNldCBzZXRPdXRsaW5lKHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vdXRsaW5lID0gY29udmVydFRvQm9vbFByb3BlcnR5KHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogS2VlcCB0aGlzIGhhbmRsZXIgdG8gcGFydGlhbGx5IHN1cHBvcnQgYW5jaG9yIGRpc2FibGluZy5cclxuICAgKiBVbmxpa2UgYnV0dG9uLCBhbmNob3IgZG9lc24ndCBoYXZlICdkaXNhYmxlZCcgRE9NIHByb3BlcnR5LFxyXG4gICAqIHNvIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYW55d2F5LiBXZSBwcmV2ZW50aW5nIG5hdmlnYXRpb24gYW5kIGJ1YmJsaW5nLlxyXG4gICAqIERpc2FibGluZyBpcyBwYXJ0aWFsIGR1ZSB0byBjbGljayBoYW5kbGVycyBwcmVjZWRlbmNlLiBDb25zaWRlciBleGFtcGxlOlxyXG4gICAqIDxhIG5iQnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgKGNsaWNrKT1cImNsaWNrSGFuZGxlcigpXCI+Li4uPC9hPlxyXG4gICAqICdjbGlja0hhbmRsZXInIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBvdXIgaG9zdCBsaXN0ZW5lciBiZWxvdy4gV2UgY2FuJ3QgcHJldmVudFxyXG4gICAqIHN1Y2ggaGFuZGxlcnMgY2FsbC5cclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGljayhldmVudDogRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByb3RlY3RlZCBob3N0RWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgKSB7fVxyXG59XHJcbiJdfQ==