UNPKG

@kushki/ng-suka

Version:

<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>

305 lines 21.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // tslint:disable: max-line-length import { Component, Input, Output, ViewChild, ElementRef, HostListener, EventEmitter, TemplateRef, forwardRef, } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; var Select = /** @class */ (function () { function Select() { this._value = ''; /** * `inline` or `default` select displays */ this.display = 'default'; /** * Sets the unique ID. Defaults to `select-${total count of selects instantiated}` */ this.id = "select-" + Select.selectCount++; /** * Set to true to disable component. */ this.disabled = false; /** * Set to true for a loading select. */ this.skeleton = false; /** * Set to `true` for an invalid select component. */ this.invalid = false; /** * Set to `true` for an valid select component. */ this.valid = false; /** * emits the selected options `value` */ this.valueChange = new EventEmitter(); /** * placeholder declarations. Replaced by the functions provided to `registerOnChange` and `registerOnTouched` */ this.onChangeHandler = (/** * @param {?} _ * @return {?} */ function (_) { }); this.onTouchedHandler = (/** * @return {?} */ function () { }); } Object.defineProperty(Select.prototype, "value", { get: /** * @return {?} */ function () { // return this._value; return this.select.nativeElement.value || this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { this._value = v; this.select.nativeElement.value = v; }, enumerable: true, configurable: true }); /** * Receives a value from the model. */ /** * Receives a value from the model. * @param {?} obj * @return {?} */ Select.prototype.writeValue = /** * Receives a value from the model. * @param {?} obj * @return {?} */ function (obj) { this.value = obj; }; /** * Registers a listener that notifies the model when the control updates */ /** * Registers a listener that notifies the model when the control updates * @param {?} fn * @return {?} */ Select.prototype.registerOnChange = /** * Registers a listener that notifies the model when the control updates * @param {?} fn * @return {?} */ function (fn) { this.onChangeHandler = fn; }; /** * Registers a listener that notifies the model when the control is blurred */ /** * Registers a listener that notifies the model when the control is blurred * @param {?} fn * @return {?} */ Select.prototype.registerOnTouched = /** * Registers a listener that notifies the model when the control is blurred * @param {?} fn * @return {?} */ function (fn) { this.onTouchedHandler = fn; }; /** * Sets the disabled state through the model */ /** * Sets the disabled state through the model * @param {?} isDisabled * @return {?} */ Select.prototype.setDisabledState = /** * Sets the disabled state through the model * @param {?} isDisabled * @return {?} */ function (isDisabled) { this.disabled = isDisabled; }; /** * Handles the change event from the `select`. * Sends events to the change handler and emits a `selected` event. */ /** * Handles the change event from the `select`. * Sends events to the change handler and emits a `selected` event. * @param {?} event * @return {?} */ Select.prototype.onChange = /** * Handles the change event from the `select`. * Sends events to the change handler and emits a `selected` event. * @param {?} event * @return {?} */ function (event) { this.onChangeHandler(event.target.value); this.valueChange.emit(event.target.value); }; /** * Listens for the host blurring, and notifies the model */ /** * Listens for the host blurring, and notifies the model * @param {?} target * @return {?} */ Select.prototype.onBlur = /** * Listens for the host blurring, and notifies the model * @param {?} target * @return {?} */ function (target) { this.onTouchedHandler(); }; /** * @param {?} value * @return {?} */ Select.prototype.isTemplate = /** * @param {?} value * @return {?} */ function (value) { return value instanceof TemplateRef; }; /** * @return {?} */ Select.prototype.ngOnInit = /** * @return {?} */ function () { // console.log(this.select.nativeElement); this.value = this.select.nativeElement.value; }; /** * Tracks the total number of selects instantiated. Used to generate unique IDs */ Select.selectCount = 0; Select.decorators = [ { type: Component, args: [{ selector: 'suka-select', template: "\n <div class=\"form-item\">\n <div\n [ngClass]=\"{\n 'select--inline': display === 'inline',\n 'skeleton': skeleton\n }\"\n class=\"select\"\n >\n <label *ngIf=\"skeleton && label\" [for]=\"id\" class=\"label skeleton\"></label>\n <label *ngIf=\"!skeleton && label\" [for]=\"id\" class=\"label\">\n <ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n <ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n </label>\n <div *ngIf=\"helperText\" class=\"form__helper-text\">\n <ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n </div>\n <div class=\"select-input__wrapper\" [attr.data-invalid]=\"(invalid ? true : null)\" [attr.data-valid]=\"(valid ? true : null)\">\n <select\n #selectInput\n [attr.id]=\"id\"\n [disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n [value]=\"value\"\n (blur)=\"onBlur($event)\"\n class=\"select-input\">\n <ng-content></ng-content>\n </select>\n <suka-icon *ngIf=\"invalid\" icon=\"alert-circle\" class=\"select__invalid-icon\"></suka-icon>\n <suka-icon *ngIf=\"valid\" icon=\"check\" class=\"select__valid-icon\"></suka-icon>\n <suka-icon *ngIf=\"!skeleton\" class=\"select__arrow\" icon=\"chevron-down\"></suka-icon>\n </div>\n <div *ngIf=\"invalid\" class=\"form-requirement\">\n <ng-container *ngIf=\"!isTemplate(invalidText)\">{{invalidText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n </div>\n </div>\n </div>\n ", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((/** * @return {?} */ function () { return Select; })), multi: true } ], styles: ["\n [data-invalid] ~ .select__arrow {\n bottom: 2.25rem;\n }\n "] }] } ]; Select.propDecorators = { display: [{ type: Input }], label: [{ type: Input }], helperText: [{ type: Input }], invalidText: [{ type: Input }], id: [{ type: Input }], disabled: [{ type: Input }], skeleton: [{ type: Input }], invalid: [{ type: Input }], valid: [{ type: Input }], valueChange: [{ type: Output }], select: [{ type: ViewChild, args: ['selectInput', { static: true },] }], onBlur: [{ type: HostListener, args: ['blur', ['$event.target'],] }] }; return Select; }()); export { Select }; if (false) { /** * Tracks the total number of selects instantiated. Used to generate unique IDs * @type {?} */ Select.selectCount; /** * @type {?} * @private */ Select.prototype._value; /** * `inline` or `default` select displays * @type {?} */ Select.prototype.display; /** * Label for the select. Appears above the input. * @type {?} */ Select.prototype.label; /** * Optional helper text that appears under the label. * @type {?} */ Select.prototype.helperText; /** * Sets the invalid text. * @type {?} */ Select.prototype.invalidText; /** * Sets the unique ID. Defaults to `select-${total count of selects instantiated}` * @type {?} */ Select.prototype.id; /** * Set to true to disable component. * @type {?} */ Select.prototype.disabled; /** * Set to true for a loading select. * @type {?} */ Select.prototype.skeleton; /** * Set to `true` for an invalid select component. * @type {?} */ Select.prototype.invalid; /** * Set to `true` for an valid select component. * @type {?} */ Select.prototype.valid; /** * emits the selected options `value` * @type {?} */ Select.prototype.valueChange; /** @type {?} */ Select.prototype.select; /** * placeholder declarations. Replaced by the functions provided to `registerOnChange` and `registerOnTouched` * @type {?} * @protected */ Select.prototype.onChangeHandler; /** * @type {?} * @protected */ Select.prototype.onTouchedHandler; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxFQUNYLFVBQVUsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekU7SUFBQTtRQTZEVSxXQUFNLEdBQUcsRUFBRSxDQUFDOzs7O1FBS1gsWUFBTyxHQUF5QixTQUFTLENBQUM7Ozs7UUFnQjFDLE9BQUUsR0FBRyxZQUFVLE1BQU0sQ0FBQyxXQUFXLEVBQUksQ0FBQzs7OztRQUl0QyxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWpCLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsWUFBTyxHQUFHLEtBQUssQ0FBQzs7OztRQUtoQixVQUFLLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7O1FBa0VqQyxvQkFBZTs7OztRQUFHLFVBQUMsQ0FBTSxJQUFPLENBQUMsRUFBQztRQUNsQyxxQkFBZ0I7OztRQUFHLGNBQVEsQ0FBQyxFQUFDO0lBTXpDLENBQUM7SUFyRUMsc0JBQUkseUJBQUs7Ozs7UUFBVDtZQUNFLHNCQUFzQjtZQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3hELENBQUM7Ozs7O1FBRUQsVUFBVSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDOzs7T0FMQTtJQU9EOztPQUVHOzs7Ozs7SUFDSCwyQkFBVTs7Ozs7SUFBVixVQUFXLEdBQVE7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCxpQ0FBZ0I7Ozs7O0lBQWhCLFVBQWlCLEVBQU87UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCxrQ0FBaUI7Ozs7O0lBQWpCLFVBQWtCLEVBQU87UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7Ozs7OztJQUNILGlDQUFnQjs7Ozs7SUFBaEIsVUFBaUIsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7OztJQUNILHlCQUFROzs7Ozs7SUFBUixVQUFTLEtBQUs7UUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7Ozs7OztJQUVILHVCQUFNOzs7OztJQUROLFVBQ08sTUFBTTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU0sMkJBQVU7Ozs7SUFBakIsVUFBa0IsS0FBSztRQUNyQixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDdEMsQ0FBQzs7OztJQVFELHlCQUFROzs7SUFBUjtRQUNFLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUMvQyxDQUFDOzs7O0lBckhNLGtCQUFXLEdBQUcsQ0FBQyxDQUFDOztnQkEzRHhCLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsUUFBUSxFQUFFLDYzREF1Q1Q7b0JBTUQsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVOzs7NEJBQUMsY0FBTSxPQUFBLE1BQU0sRUFBTixDQUFNLEVBQUM7NEJBQ3JDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzZCQVhRLDRFQUlSO2lCQVFGOzs7MEJBWUUsS0FBSzt3QkFJTCxLQUFLOzZCQUlMLEtBQUs7OEJBSUwsS0FBSztxQkFJTCxLQUFLOzJCQUlMLEtBQUs7MkJBSUwsS0FBSzswQkFJTCxLQUFLO3dCQUtMLEtBQUs7OEJBS0wsTUFBTTt5QkFFTixTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt5QkFvRHpDLFlBQVksU0FBQyxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7O0lBbUJ6QyxhQUFDO0NBQUEsQUFqTEQsSUFpTEM7U0ExSFksTUFBTTs7Ozs7O0lBSWpCLG1CQUF1Qjs7Ozs7SUFFdkIsd0JBQW9COzs7OztJQUtwQix5QkFBbUQ7Ozs7O0lBSW5ELHVCQUEwQzs7Ozs7SUFJMUMsNEJBQStDOzs7OztJQUkvQyw2QkFBZ0Q7Ozs7O0lBSWhELG9CQUErQzs7Ozs7SUFJL0MsMEJBQTBCOzs7OztJQUkxQiwwQkFBMEI7Ozs7O0lBSTFCLHlCQUF5Qjs7Ozs7SUFLekIsdUJBQXVCOzs7OztJQUt2Qiw2QkFBMkM7O0lBRTNDLHdCQUErRDs7Ozs7O0lBZ0UvRCxpQ0FBNEM7Ozs7O0lBQzVDLGtDQUF1QyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRXZlbnRFbWl0dGVyLFxuICBUZW1wbGF0ZVJlZixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VrYS1zZWxlY3QnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdzZWxlY3QtLWlubGluZSc6IGRpc3BsYXkgPT09ICdpbmxpbmUnLFxuICAgICAgICAgICdza2VsZXRvbic6IHNrZWxldG9uXG4gICAgICAgIH1cIlxuICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cInNrZWxldG9uICYmIGxhYmVsXCIgW2Zvcl09XCJpZFwiIGNsYXNzPVwibGFiZWwgc2tlbGV0b25cIj48L2xhYmVsPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCIhc2tlbGV0b24gJiYgbGFiZWxcIiBbZm9yXT1cImlkXCIgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShsYWJlbClcIj57e2xhYmVsfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhlbHBlclRleHRcIiBjbGFzcz1cImZvcm1fX2hlbHBlci10ZXh0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGhlbHBlclRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVscGVyVGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWlucHV0X193cmFwcGVyXCIgW2F0dHIuZGF0YS1pbnZhbGlkXT1cIihpbnZhbGlkID8gdHJ1ZSA6IG51bGwpXCIgW2F0dHIuZGF0YS12YWxpZF09XCIodmFsaWQgPyB0cnVlIDogbnVsbClcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAjc2VsZWN0SW5wdXRcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWlucHV0XCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHN1a2EtaWNvbiAqbmdJZj1cImludmFsaWRcIiBpY29uPVwiYWxlcnQtY2lyY2xlXCIgY2xhc3M9XCJzZWxlY3RfX2ludmFsaWQtaWNvblwiPjwvc3VrYS1pY29uPlxuICAgICAgICAgIDxzdWthLWljb24gKm5nSWY9XCJ2YWxpZFwiIGljb249XCJjaGVja1wiIGNsYXNzPVwic2VsZWN0X192YWxpZC1pY29uXCI+PC9zdWthLWljb24+XG4gICAgICAgICAgPHN1a2EtaWNvbiAqbmdJZj1cIiFza2VsZXRvblwiIGNsYXNzPVwic2VsZWN0X19hcnJvd1wiIGljb249XCJjaGV2cm9uLWRvd25cIj48L3N1a2EtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJmb3JtLXJlcXVpcmVtZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiPnt7aW52YWxpZFRleHR9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgW2RhdGEtaW52YWxpZF0gfiAuc2VsZWN0X19hcnJvdyB7XG4gICAgICBib3R0b206IDIuMjVyZW07XG4gICAgfVxuICBgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3QpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIHRvdGFsIG51bWJlciBvZiBzZWxlY3RzIGluc3RhbnRpYXRlZC4gVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzXG4gICAqL1xuICBzdGF0aWMgc2VsZWN0Q291bnQgPSAwO1xuXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgLyoqXG4gICAqIGBpbmxpbmVgIG9yIGBkZWZhdWx0YCBzZWxlY3QgZGlzcGxheXNcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdpbmxpbmUnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuICAvKipcbiAgICogTGFiZWwgZm9yIHRoZSBzZWxlY3QuIEFwcGVhcnMgYWJvdmUgdGhlIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBoZWxwZXIgdGV4dCB0aGF0IGFwcGVhcnMgdW5kZXIgdGhlIGxhYmVsLlxuICAgKi9cbiAgQElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGludmFsaWQgdGV4dC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogU2V0cyB0aGUgdW5pcXVlIElELiBEZWZhdWx0cyB0byBgc2VsZWN0LSR7dG90YWwgY291bnQgb2Ygc2VsZWN0cyBpbnN0YW50aWF0ZWR9YFxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgc2VsZWN0LSR7U2VsZWN0LnNlbGVjdENvdW50Kyt9YDtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGZvciBhIGxvYWRpbmcgc2VsZWN0LlxuICAgKi9cbiAgQElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGludmFsaWQgc2VsZWN0IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgYW4gdmFsaWQgc2VsZWN0IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGVtaXRzIHRoZSBzZWxlY3RlZCBvcHRpb25zIGB2YWx1ZWBcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3RJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0pIHNlbGVjdDogRWxlbWVudFJlZjtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgLy8gcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdC5uYXRpdmVFbGVtZW50LnZhbHVlIHx8IHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHYpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgdGhpcy5zZWxlY3QubmF0aXZlRWxlbWVudC52YWx1ZSA9IHY7XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgbm90aWZpZXMgdGhlIG1vZGVsIHdoZW4gdGhlIGNvbnRyb2wgdXBkYXRlc1xuICAgKi9cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUhhbmRsZXIgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0aGF0IG5vdGlmaWVzIHRoZSBtb2RlbCB3aGVuIHRoZSBjb250cm9sIGlzIGJsdXJyZWRcbiAgICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZEhhbmRsZXIgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSB0aHJvdWdoIHRoZSBtb2RlbFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2hhbmdlIGV2ZW50IGZyb20gdGhlIGBzZWxlY3RgLlxuICAgKiBTZW5kcyBldmVudHMgdG8gdGhlIGNoYW5nZSBoYW5kbGVyIGFuZCBlbWl0cyBhIGBzZWxlY3RlZGAgZXZlbnQuXG4gICAqL1xuICBvbkNoYW5nZShldmVudCkge1xuICAgIHRoaXMub25DaGFuZ2VIYW5kbGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyBmb3IgdGhlIGhvc3QgYmx1cnJpbmcsIGFuZCBub3RpZmllcyB0aGUgbW9kZWxcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25CbHVyKHRhcmdldCkge1xuICAgIHRoaXMub25Ub3VjaGVkSGFuZGxlcigpO1xuICB9XG5cbiAgcHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlciBkZWNsYXJhdGlvbnMuIFJlcGxhY2VkIGJ5IHRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgdG8gYHJlZ2lzdGVyT25DaGFuZ2VgIGFuZCBgcmVnaXN0ZXJPblRvdWNoZWRgXG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2VIYW5kbGVyID0gKF86IGFueSkgPT4geyB9O1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkSGFuZGxlciA9ICgpID0+IHsgfTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3QubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgfVxufVxuIl19