@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
JavaScript
/**
* @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