UNPKG

theme-lib

Version:

This is a simple example Angular Library published to npm.

542 lines 34.9 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 } 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=