theme-lib
Version:
This is a simple example Angular Library published to npm.
542 lines • 34.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 } from '@angular/core';
/*
* Component intended to be used within the `<nb-card>` component.
* It adds styles for a preset header section.
*
* @styles
*
* card-header-font-family:
* card-header-font-size:
* card-header-font-weight:
* card-header-fg:
* card-header-fg-heading:
* card-header-active-bg:
* card-header-active-fg:
* card-header-disabled-bg:
* card-header-primary-bg:
* card-header-info-bg:
* card-header-success-bg:
* card-header-warning-bg:
* card-header-danger-bg:
*/
var NbCardHeaderComponent = /** @class */ (function () {
function NbCardHeaderComponent() {
}
NbCardHeaderComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-card-header',
template: "<ng-content></ng-content>"
}] }
];
return NbCardHeaderComponent;
}());
export { NbCardHeaderComponent };
/*
* Component intended to be used within the `<nb-card>` component.
* Adds styles for a preset body section.
*/
var NbCardBodyComponent = /** @class */ (function () {
function NbCardBodyComponent() {
}
NbCardBodyComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-card-body',
template: "<ng-content></ng-content>"
}] }
];
return NbCardBodyComponent;
}());
export { NbCardBodyComponent };
/*
* Component intended to be used within the `<nb-card>` component.
* Adds styles for a preset footer section.
*/
var NbCardFooterComponent = /** @class */ (function () {
function NbCardFooterComponent() {
}
NbCardFooterComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-card-footer',
template: "<ng-content></ng-content>"
}] }
];
return NbCardFooterComponent;
}());
export { NbCardFooterComponent };
/*
* Basic content container component.
*
* Basic card example:
* @stacked-example(Showcase, card/card-showcase.component)
*
* Basic card configuration:
*
* ```html
* <nb-card>
* <nb-card-body>
* Card
* </nb-card-body>
* </nb-card>
* ```
*
* ### Installation
*
* Import `NbCardModule` to your feature module.
* ```ts
* @NgModule({
* imports: [
* // ...
* NbCardModule,
* ],
* })
* export class PageModule { }
* ```
* ### Usage
*
* Card with header and footer:
* @stacked-example(With Header & Footer, card/card-full.component)
*
* Most of the time main card content goes to `nb-card-body`,
* so it is styled and aligned in accordance with the header and footer.
* In case you need a higher level of control, you can pass contend directly to `nb-card`,
* so `nb-card-body` styling will not be applied.
*
* Consider an example with `nb-list` component:
* @stacked-example(Showcase, card/card-without-body.component)
*
* Colored cards could be simply configured by providing a `status` property:
* @stacked-example(Colored Card, card/card-colors.component)
*
* It is also possible to assign an `accent` property for a slight card highlight
* as well as combine it with `status`:
* @stacked-example(Accent Card, card/card-accents.component)
*
* @additional-example(Multiple Sizes, card/card-sizes.component)
*
* @styles
*
* card-line-height:
* card-font-weight:
* card-fg-text:
* card-bg:
* card-height-xxsmall:
* card-height-xsmall:
* card-height-small:
* card-height-medium:
* card-height-large:
* card-height-xlarge:
* card-height-xxlarge:
* card-shadow:
* card-border-radius:
* card-padding:
* card-margin:
* card-separator:
*
*/
var NbCardComponent = /** @class */ (function () {
function NbCardComponent() {
}
Object.defineProperty(NbCardComponent.prototype, "xxsmall", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_XXSMALL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "xsmall", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_XSMALL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "small", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_SMALL;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "medium", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_MEDIUM;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "large", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_LARGE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "xlarge", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_XLARGE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "xxlarge", {
get: /**
* @return {?}
*/
function () {
return this.size === NbCardComponent.SIZE_XXLARGE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "active", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_ACTIVE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_DISABLED;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "primary", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_PRIMARY;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "info", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_INFO;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "success", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_SUCCESS;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "warning", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_WARNING;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "danger", {
get: /**
* @return {?}
*/
function () {
return this.status === NbCardComponent.STATUS_DANGER;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "hasAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "primaryAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_PRIMARY;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "infoAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_INFO;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "successAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_SUCCESS;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "warningAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_WARNING;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "dangerAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_DANGER;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "activeAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_ACTIVE;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "disabledAccent", {
get: /**
* @return {?}
*/
function () {
return this.accent === NbCardComponent.ACCENT_DISABLED;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "setSize", {
/*
* Card size, available sizes:
* xxsmall, xsmall, small, medium, large, xlarge, xxlarge
* @param {string} val
*/
set: /*
* Card size, available sizes:
* xxsmall, xsmall, small, medium, large, xlarge, xxlarge
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.size = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "setStatus", {
/*
* Card status (adds specific styles):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
set: /*
* Card status (adds specific styles):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.status = val;
},
enumerable: true,
configurable: true
});
Object.defineProperty(NbCardComponent.prototype, "setAccent", {
/*
* Card accent (color of the top border):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
set: /*
* Card accent (color of the top border):
* active, disabled, primary, info, success, warning, danger
* @param {string} val
*/
/**
* @private
* @param {?} val
* @return {?}
*/
function (val) {
this.accent = val;
},
enumerable: true,
configurable: true
});
NbCardComponent.SIZE_XXSMALL = 'xxsmall';
NbCardComponent.SIZE_XSMALL = 'xsmall';
NbCardComponent.SIZE_SMALL = 'small';
NbCardComponent.SIZE_MEDIUM = 'medium';
NbCardComponent.SIZE_LARGE = 'large';
NbCardComponent.SIZE_XLARGE = 'xlarge';
NbCardComponent.SIZE_XXLARGE = 'xxlarge';
NbCardComponent.STATUS_ACTIVE = 'active';
NbCardComponent.STATUS_DISABLED = 'disabled';
NbCardComponent.STATUS_PRIMARY = 'primary';
NbCardComponent.STATUS_INFO = 'info';
NbCardComponent.STATUS_SUCCESS = 'success';
NbCardComponent.STATUS_WARNING = 'warning';
NbCardComponent.STATUS_DANGER = 'danger';
NbCardComponent.ACCENT_ACTIVE = 'active';
NbCardComponent.ACCENT_DISABLED = 'disabled';
NbCardComponent.ACCENT_PRIMARY = 'primary';
NbCardComponent.ACCENT_INFO = 'info';
NbCardComponent.ACCENT_SUCCESS = 'success';
NbCardComponent.ACCENT_WARNING = 'warning';
NbCardComponent.ACCENT_DANGER = 'danger';
NbCardComponent.decorators = [
{ type: Component, args: [{
selector: 'nb-card',
template: "\n <ng-content select=\"nb-card-header\"></ng-content>\n <ng-content select=\"nb-card-body\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"nb-card-footer\"></ng-content>\n ",
styles: [":host{display:flex;flex-direction:column}"]
}] }
];
NbCardComponent.propDecorators = {
xxsmall: [{ type: HostBinding, args: ['class.xxsmall-card',] }],
xsmall: [{ type: HostBinding, args: ['class.xsmall-card',] }],
small: [{ type: HostBinding, args: ['class.small-card',] }],
medium: [{ type: HostBinding, args: ['class.medium-card',] }],
large: [{ type: HostBinding, args: ['class.large-card',] }],
xlarge: [{ type: HostBinding, args: ['class.xlarge-card',] }],
xxlarge: [{ type: HostBinding, args: ['class.xxlarge-card',] }],
active: [{ type: HostBinding, args: ['class.active-card',] }],
disabled: [{ type: HostBinding, args: ['class.disabled-card',] }],
primary: [{ type: HostBinding, args: ['class.primary-card',] }],
info: [{ type: HostBinding, args: ['class.info-card',] }],
success: [{ type: HostBinding, args: ['class.success-card',] }],
warning: [{ type: HostBinding, args: ['class.warning-card',] }],
danger: [{ type: HostBinding, args: ['class.danger-card',] }],
hasAccent: [{ type: HostBinding, args: ['class.accent',] }],
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',] }],
setSize: [{ type: Input, args: ['size',] }],
setStatus: [{ type: Input, args: ['status',] }],
setAccent: [{ type: Input, args: ['accent',] }]
};
return NbCardComponent;
}());
export { NbCardComponent };
if (false) {
/** @type {?} */
NbCardComponent.SIZE_XXSMALL;
/** @type {?} */
NbCardComponent.SIZE_XSMALL;
/** @type {?} */
NbCardComponent.SIZE_SMALL;
/** @type {?} */
NbCardComponent.SIZE_MEDIUM;
/** @type {?} */
NbCardComponent.SIZE_LARGE;
/** @type {?} */
NbCardComponent.SIZE_XLARGE;
/** @type {?} */
NbCardComponent.SIZE_XXLARGE;
/** @type {?} */
NbCardComponent.STATUS_ACTIVE;
/** @type {?} */
NbCardComponent.STATUS_DISABLED;
/** @type {?} */
NbCardComponent.STATUS_PRIMARY;
/** @type {?} */
NbCardComponent.STATUS_INFO;
/** @type {?} */
NbCardComponent.STATUS_SUCCESS;
/** @type {?} */
NbCardComponent.STATUS_WARNING;
/** @type {?} */
NbCardComponent.STATUS_DANGER;
/** @type {?} */
NbCardComponent.ACCENT_ACTIVE;
/** @type {?} */
NbCardComponent.ACCENT_DISABLED;
/** @type {?} */
NbCardComponent.ACCENT_PRIMARY;
/** @type {?} */
NbCardComponent.ACCENT_INFO;
/** @type {?} */
NbCardComponent.ACCENT_SUCCESS;
/** @type {?} */
NbCardComponent.ACCENT_WARNING;
/** @type {?} */
NbCardComponent.ACCENT_DANGER;
/** @type {?} */
NbCardComponent.prototype.size;
/** @type {?} */
NbCardComponent.prototype.status;
/** @type {?} */
NbCardComponent.prototype.accent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly90aGVtZS1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBc0I5RDtJQUFBO0lBS0EsQ0FBQzs7Z0JBTEEsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFFBQVEsRUFBRSwyQkFBMkI7aUJBQ3RDOztJQUVELDRCQUFDO0NBQUEsQUFMRCxJQUtDO1NBRFkscUJBQXFCOzs7OztBQU9sQztJQUFBO0lBS0EsQ0FBQzs7Z0JBTEEsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs7SUFFRCwwQkFBQztDQUFBLEFBTEQsSUFLQztTQURZLG1CQUFtQjs7Ozs7QUFPaEM7SUFBQTtJQUtBLENBQUM7O2dCQUxBLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsMkJBQTJCO2lCQUN0Qzs7SUFFRCw0QkFBQztDQUFBLEFBTEQsSUFLQztTQURZLHFCQUFxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5RWxDO0lBQUE7SUFvTEEsQ0FBQztJQTVJQyxzQkFDSSxvQ0FBTzs7OztRQURYO1lBRUUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDcEQsQ0FBQzs7O09BQUE7SUFFRCxzQkFDSSxtQ0FBTTs7OztRQURWO1lBRUUsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFD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QUEyQzs7SUFDM0MsNEJBQXFDOztJQUNyQywrQkFBMkM7O0lBQzNDLCtCQUEyQzs7SUFDM0MsOEJBQXlDOztJQUV6Qyw4QkFBeUM7O0lBQ3pDLGdDQUE2Qzs7SUFDN0MsK0JBQTJDOztJQUMzQyw0QkFBcUM7O0lBQ3JDLCtCQUEyQzs7SUFDM0MsK0JBQTJDOztJQUMzQyw4QkFBeUM7O0lBRXpDLCtCQUFhOztJQUNiLGlDQUFlOztJQUNmLGlDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEFrdmVvLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG4vKlxyXG4gKiBDb21wb25lbnQgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoaW4gdGhlIGA8bmItY2FyZD5gIGNvbXBvbmVudC5cclxuICogSXQgYWRkcyBzdHlsZXMgZm9yIGEgcHJlc2V0IGhlYWRlciBzZWN0aW9uLlxyXG4gKlxyXG4gKiBAc3R5bGVzXHJcbiAqXHJcbiAqIGNhcmQtaGVhZGVyLWZvbnQtZmFtaWx5OlxyXG4gKiBjYXJkLWhlYWRlci1mb250LXNpemU6XHJcbiAqIGNhcmQtaGVhZGVyLWZvbnQtd2VpZ2h0OlxyXG4gKiBjYXJkLWhlYWRlci1mZzpcclxuICogY2FyZC1oZWFkZXItZmctaGVhZGluZzpcclxuICogY2FyZC1oZWFkZXItYWN0aXZlLWJnOlxyXG4gKiBjYXJkLWhlYWRlci1hY3RpdmUtZmc6XHJcbiAqIGNhcmQtaGVhZGVyLWRpc2FibGVkLWJnOlxyXG4gKiBjYXJkLWhlYWRlci1wcmltYXJ5LWJnOlxyXG4gKiBjYXJkLWhlYWRlci1pbmZvLWJnOlxyXG4gKiBjYXJkLWhlYWRlci1zdWNjZXNzLWJnOlxyXG4gKiBjYXJkLWhlYWRlci13YXJuaW5nLWJnOlxyXG4gKiBjYXJkLWhlYWRlci1kYW5nZXItYmc6XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLWNhcmQtaGVhZGVyJyxcclxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJDYXJkSGVhZGVyQ29tcG9uZW50IHtcclxufVxyXG5cclxuLypcclxuICogQ29tcG9uZW50IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluICB0aGUgYDxuYi1jYXJkPmAgY29tcG9uZW50LlxyXG4gKiBBZGRzIHN0eWxlcyBmb3IgYSBwcmVzZXQgYm9keSBzZWN0aW9uLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYi1jYXJkLWJvZHknLFxyXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOYkNhcmRCb2R5Q29tcG9uZW50IHtcclxufVxyXG5cclxuLypcclxuICogQ29tcG9uZW50IGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aGluICB0aGUgYDxuYi1jYXJkPmAgY29tcG9uZW50LlxyXG4gKiBBZGRzIHN0eWxlcyBmb3IgYSBwcmVzZXQgZm9vdGVyIHNlY3Rpb24uXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25iLWNhcmQtZm9vdGVyJyxcclxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmJDYXJkRm9vdGVyQ29tcG9uZW50IHtcclxufVxyXG5cclxuLypcclxuICogQmFzaWMgY29udGVudCBjb250YWluZXIgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBCYXNpYyBjYXJkIGV4YW1wbGU6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoU2hvd2Nhc2UsIGNhcmQvY2FyZC1zaG93Y2FzZS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEJhc2ljIGNhcmQgY29uZmlndXJhdGlvbjpcclxuICpcclxuICogYGBgaHRtbFxyXG4gKiA8bmItY2FyZD5cclxuICogICA8bmItY2FyZC1ib2R5PlxyXG4gKiAgICAgQ2FyZFxyXG4gKiAgIDwvbmItY2FyZC1ib2R5PlxyXG4gKiA8L25iLWNhcmQ+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiAjIyMgSW5zdGFsbGF0aW9uXHJcbiAqXHJcbiAqIEltcG9ydCBgTmJDYXJkTW9kdWxlYCB0byB5b3VyIGZlYXR1cmUgbW9kdWxlLlxyXG4gKiBgYGB0c1xyXG4gKiBATmdNb2R1bGUoe1xyXG4gKiAgIGltcG9ydHM6IFtcclxuICogICBcdC8vIC4uLlxyXG4gKiAgICAgTmJDYXJkTW9kdWxlLFxyXG4gKiAgIF0sXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBQYWdlTW9kdWxlIHsgfVxyXG4gKiBgYGBcclxuICogIyMjIFVzYWdlXHJcbiAqXHJcbiAqIENhcmQgd2l0aCBoZWFkZXIgYW5kIGZvb3RlcjpcclxuICogQHN0YWNrZWQtZXhhbXBsZShXaXRoIEhlYWRlciAmIEZvb3RlciwgY2FyZC9jYXJkLWZ1bGwuY29tcG9uZW50KVxyXG4gKlxyXG4gKiBNb3N0IG9mIHRoZSB0aW1lIG1haW4gY2FyZCBjb250ZW50IGdvZXMgdG8gYG5iLWNhcmQtYm9keWAsXHJcbiAqIHNvIGl0IGlzIHN0eWxlZCBhbmQgYWxpZ25lZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGhlYWRlciBhbmQgZm9vdGVyLlxyXG4gKiBJbiBjYXNlIHlvdSBuZWVkIGEgaGlnaGVyIGxldmVsIG9mIGNvbnRyb2wsIHlvdSBjYW4gcGFzcyBjb250ZW5kIGRpcmVjdGx5IHRvIGBuYi1jYXJkYCxcclxuICogc28gYG5iLWNhcmQtYm9keWAgc3R5bGluZyB3aWxsIG5vdCBiZSBhcHBsaWVkLlxyXG4gKlxyXG4gKiBDb25zaWRlciBhbiBleGFtcGxlIHdpdGggYG5iLWxpc3RgIGNvbXBvbmVudDpcclxuICogQHN0YWNrZWQtZXhhbXBsZShTaG93Y2FzZSwgY2FyZC9jYXJkLXdpdGhvdXQtYm9keS5jb21wb25lbnQpXHJcbiAqXHJcbiAqIENvbG9yZWQgY2FyZHMgY291bGQgYmUgc2ltcGx5IGNvbmZpZ3VyZWQgYnkgcHJvdmlkaW5nIGEgYHN0YXR1c2AgcHJvcGVydHk6XHJcbiAqIEBzdGFja2VkLWV4YW1wbGUoQ29sb3JlZCBDYXJkLCBjYXJkL2NhcmQtY29sb3JzLmNvbXBvbmVudClcclxuICpcclxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhc3NpZ24gYW4gYGFjY2VudGAgcHJvcGVydHkgZm9yIGEgc2xpZ2h0IGNhcmQgaGlnaGxpZ2h0XHJcbiAqIGFzIHdlbGwgYXMgY29tYmluZSBpdCB3aXRoIGBzdGF0dXNgOlxyXG4gKiBAc3RhY2tlZC1leGFtcGxlKEFjY2VudCBDYXJkLCBjYXJkL2NhcmQtYWNjZW50cy5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBhZGRpdGlvbmFsLWV4YW1wbGUoTXVsdGlwbGUgU2l6ZXMsIGNhcmQvY2FyZC1zaXplcy5jb21wb25lbnQpXHJcbiAqXHJcbiAqIEBzdHlsZXNcclxuICpcclxuICogY2FyZC1saW5lLWhlaWdodDpcclxuICogY2FyZC1mb250LXdlaWdodDpcclxuICogY2FyZC1mZy10ZXh0OlxyXG4gKiBjYXJkLWJnOlxyXG4gKiBjYXJkLWhlaWdodC14eHNtYWxsOlxyXG4gKiBjYXJkLWhlaWdodC14c21hbGw6XHJcbiAqIGNhcmQtaGVpZ2h0LXNtYWxsOlxyXG4gKiBjYXJkLWhlaWdodC1tZWRpdW06XHJcbiAqIGNhcmQtaGVpZ2h0LWxhcmdlOlxyXG4gKiBjYXJkLWhlaWdodC14bGFyZ2U6XHJcbiAqIGNhcmQtaGVpZ2h0LXh4bGFyZ2U6XHJcbiAqIGNhcmQtc2hhZG93OlxyXG4gKiBjYXJkLWJvcmRlci1yYWRpdXM6XHJcbiAqIGNhcmQtcGFkZGluZzpcclxuICogY2FyZC1tYXJnaW46XHJcbiAqIGNhcmQtc2VwYXJhdG9yOlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduYi1jYXJkJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYXJkLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm5iLWNhcmQtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibmItY2FyZC1ib2R5XCI+PC9uZy1jb250ZW50PlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibmItY2FyZC1mb290ZXJcIj48L25nLWNvbnRlbnQ+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5iQ2FyZENvbXBvbmVudCB7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX1hYU01BTEwgPSAneHhzbWFsbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfWFNNQUxMID0gJ3hzbWFsbCc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNJWkVfU01BTEwgPSAnc21hbGwnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX01FRElVTSA9ICdtZWRpdW0nO1xyXG4gIHN0YXRpYyByZWFkb25seSBTSVpFX0xBUkdFID0gJ2xhcmdlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YTEFSR0UgPSAneGxhcmdlJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU0laRV9YWExBUkdFID0gJ3h4bGFyZ2UnO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX0FDVElWRSA9ICdhY3RpdmUnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfRElTQUJMRUQgPSAnZGlzYWJsZWQnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfUFJJTUFSWSA9ICdwcmltYXJ5JztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX0lORk8gPSAnaW5mbyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRVU19TVUNDRVNTID0gJ3N1Y2Nlc3MnO1xyXG4gIHN0YXRpYyByZWFkb25seSBTVEFUVVNfV0FSTklORyA9ICd3YXJuaW5nJztcclxuICBzdGF0aWMgcmVhZG9ubHkgU1RBVFVTX0RBTkdFUiA9ICdkYW5nZXInO1xyXG5cclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX0FDVElWRSA9ICdhY3RpdmUnO1xyXG4gIHN0YXRpYyByZWFkb25seSBBQ0NFTlRfRElTQUJMRUQgPSAnZGlzYWJsZWQnO1xyXG4gIHN0YXRpYyByZWFkb25seSBBQ0NFTlRfUFJJTUFSWSA9ICdwcmltYXJ5JztcclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX0lORk8gPSAnaW5mbyc7XHJcbiAgc3RhdGljIHJlYWRvbmx5IEFDQ0VOVF9TVUNDRVNTID0gJ3N1Y2Nlc3MnO1xyXG4gIHN0YXRpYyByZWFkb25seSBBQ0NFTlRfV0FSTklORyA9ICd3YXJuaW5nJztcclxuICBzdGF0aWMgcmVhZG9ubHkgQUNDRU5UX0RBTkdFUiA9ICdkYW5nZXInO1xyXG5cclxuICBzaXplOiBzdHJpbmc7XHJcbiAgc3RhdHVzOiBzdHJpbmc7XHJcbiAgYWNjZW50OiBzdHJpbmc7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MueHhzbWFsbC1jYXJkJylcclxuICBnZXQgeHhzbWFsbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQ2FyZENvbXBvbmVudC5TSVpFX1hYU01BTEw7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnhzbWFsbC1jYXJkJylcclxuICBnZXQgeHNtYWxsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2l6ZSA9PT0gTmJDYXJkQ29tcG9uZW50LlNJWkVfWFNNQUxMO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zbWFsbC1jYXJkJylcclxuICBnZXQgc21hbGwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkNhcmRDb21wb25lbnQuU0laRV9TTUFMTDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MubWVkaXVtLWNhcmQnKVxyXG4gIGdldCBtZWRpdW0oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSBOYkNhcmRDb21wb25lbnQuU0laRV9NRURJVU07XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmxhcmdlLWNhcmQnKVxyXG4gIGdldCBsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQ2FyZENvbXBvbmVudC5TSVpFX0xBUkdFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy54bGFyZ2UtY2FyZCcpXHJcbiAgZ2V0IHhsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQ2FyZENvbXBvbmVudC5TSVpFX1hMQVJHRTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MueHhsYXJnZS1jYXJkJylcclxuICBnZXQgeHhsYXJnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemUgPT09IE5iQ2FyZENvbXBvbmVudC5TSVpFX1hYTEFSR0U7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZS1jYXJkJylcclxuICBnZXQgYWN0aXZlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkNhcmRDb21wb25lbnQuU1RBVFVTX0FDVElWRTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQtY2FyZCcpXHJcbiAgZ2V0IGRpc2FibGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkNhcmRDb21wb25lbnQuU1RBVFVTX0RJU0FCTEVEO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wcmltYXJ5LWNhcmQnKVxyXG4gIGdldCBwcmltYXJ5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkNhcmRDb21wb25lbnQuU1RBVFVTX1BSSU1BUlk7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmluZm8tY2FyZCcpXHJcbiAgZ2V0IGluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IE5iQ2FyZENvbXBvbmVudC5TVEFUVVNfSU5GTztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3Muc3VjY2Vzcy1jYXJkJylcclxuICBnZXQgc3VjY2VzcygpIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gTmJDYXJkQ29tcG9uZW50LlNUQVRVU19TVUNDRVNTO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy53YXJuaW5nLWNhcmQnKVxyXG4gIGdldCB3YXJuaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkNhcmRDb21wb25lbnQuU1RBVFVTX1dBUk5JTkc7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhbmdlci1jYXJkJylcclxuICBnZXQgZGFuZ2VyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBOYkNhcmRDb21wb25lbnQuU1RBVFVTX0RBTkdFUjtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50JylcclxuICBnZXQgaGFzQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50O1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NlbnQtcHJpbWFyeScpXHJcbiAgZ2V0IHByaW1hcnlBY2NlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2NlbnQgPT09IE5iQ2FyZENvbXBvbmVudC5BQ0NFTlRfUFJJTUFSWTtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50LWluZm8nKVxyXG4gIGdldCBpbmZvQWNjZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWNjZW50ID09PSBOYkNhcmRDb21wb25lbnQuQUNDRU5UX0lORk87XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjY2VudC1zdWNjZXNzJylcclxuICBnZXQgc3VjY2Vzc0FjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJDYXJkQ29tcG9uZW50LkFDQ0VOVF9TVUNDRVNTO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NlbnQtd2FybmluZycpXHJcbiAgZ2V0IHdhcm5pbmdBY2NlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2NlbnQgPT09IE5iQ2FyZENvbXBvbmVudC5BQ0NFTlRfV0FSTklORztcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYWNjZW50LWRhbmdlcicpXHJcbiAgZ2V0IGRhbmdlckFjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJDYXJkQ29tcG9uZW50LkFDQ0VOVF9EQU5HRVI7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFjY2VudC1hY3RpdmUnKVxyXG4gIGdldCBhY3RpdmVBY2NlbnQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hY2NlbnQgPT09IE5iQ2FyZENvbXBvbmVudC5BQ0NFTlRfQUNUSVZFO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY2NlbnQtZGlzYWJsZWQnKVxyXG4gIGdldCBkaXNhYmxlZEFjY2VudCgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjY2VudCA9PT0gTmJDYXJkQ29tcG9uZW50LkFDQ0VOVF9ESVNBQkxFRDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2FyZCBzaXplLCBhdmFpbGFibGUgc2l6ZXM6XHJcbiAgICogeHhzbWFsbCwgeHNtYWxsLCBzbWFsbCwgbWVkaXVtLCBsYXJnZSwgeGxhcmdlLCB4eGxhcmdlXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnc2l6ZScpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0U2l6ZSh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5zaXplID0gdmFsO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBDYXJkIHN0YXR1cyAoYWRkcyBzcGVjaWZpYyBzdHlsZXMpOlxyXG4gICAqIGFjdGl2ZSwgZGlzYWJsZWQsIHByaW1hcnksIGluZm8sIHN1Y2Nlc3MsIHdhcm5pbmcsIGRhbmdlclxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBASW5wdXQoJ3N0YXR1cycpXHJcbiAgcHJpdmF0ZSBzZXQgc2V0U3RhdHVzKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0YXR1cyA9IHZhbDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogQ2FyZCBhY2NlbnQgKGNvbG9yIG9mIHRoZSB0b3AgYm9yZGVyKTpcclxuICAgKiBhY3RpdmUsIGRpc2FibGVkLCBwcmltYXJ5LCBpbmZvLCBzdWNjZXNzLCB3YXJuaW5nLCBkYW5nZXJcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgQElucHV0KCdhY2NlbnQnKVxyXG4gIHByaXZhdGUgc2V0IHNldEFjY2VudCh2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5hY2NlbnQgPSB2YWw7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=