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>

291 lines 20.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, } 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.selected = 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.select.nativeElement.value; return this._value; }, set: /** * @param {?} v * @return {?} */ function (v) { this._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.selected.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; }; /** * 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 #select\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: 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 }], selected: [{ type: Output }], select: [{ type: ViewChild, args: ['select', { static: false },] }], 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.selected; /** @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RTtJQUFBO1FBOERVLFdBQU0sR0FBRyxFQUFFLENBQUM7Ozs7UUFLWCxZQUFPLEdBQXlCLFNBQVMsQ0FBQzs7OztRQWdCMUMsT0FBRSxHQUFHLFlBQVUsTUFBTSxDQUFDLFdBQVcsRUFBSSxDQUFDOzs7O1FBSXRDLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixZQUFPLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2hCLFVBQUssR0FBRyxLQUFLLENBQUM7Ozs7UUFLYixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7OztRQWlFOUIsb0JBQWU7Ozs7UUFBRyxVQUFDLENBQU0sSUFBTyxDQUFDLEVBQUM7UUFDbEMscUJBQWdCOzs7UUFBRyxjQUFRLENBQUMsRUFBQztJQUN6QyxDQUFDO0lBL0RDLHNCQUFJLHlCQUFLOzs7O1FBQVQ7WUFDRSwwQ0FBMEM7WUFDMUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JCLENBQUM7Ozs7O1FBRUQsVUFBVSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDbEIsQ0FBQzs7O09BSkE7SUFNRDs7T0FFRzs7Ozs7O0lBQ0gsMkJBQVU7Ozs7O0lBQVYsVUFBVyxHQUFRO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ0gsaUNBQWdCOzs7OztJQUFoQixVQUFpQixFQUFPO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRzs7Ozs7O0lBQ0gsa0NBQWlCOzs7OztJQUFqQixVQUFrQixFQUFPO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFDSCxpQ0FBZ0I7Ozs7O0lBQWhCLFVBQWlCLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7O09BR0c7Ozs7Ozs7SUFDSCx5QkFBUTs7Ozs7O0lBQVIsVUFBUyxLQUFLO1FBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHOzs7Ozs7SUFFSCx1QkFBTTs7Ozs7SUFETixVQUNPLE1BQU07UUFDWCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDOzs7OztJQUVNLDJCQUFVOzs7O0lBQWpCLFVBQWtCLEtBQUs7UUFDckIsT0FBTyxLQUFLLFlBQVksV0FBVyxDQUFDO0lBQ3RDLENBQUM7Ozs7SUF6R00sa0JBQVcsR0FBRyxDQUFDLENBQUM7O2dCQTVEeEIsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixRQUFRLEVBQUUsdzNEQXVDVDtvQkFNRCxTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLE1BQU07NEJBQ25CLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzZCQVhRLDRFQUlSO2lCQVFGOzs7MEJBYUUsS0FBSzt3QkFJTCxLQUFLOzZCQUlMLEtBQUs7OEJBSUwsS0FBSztxQkFJTCxLQUFLOzJCQUlMLEtBQUs7MkJBSUwsS0FBSzswQkFJTCxLQUFLO3dCQUtMLEtBQUs7MkJBS0wsTUFBTTt5QkFFTixTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzt5QkFtRG5DLFlBQVksU0FBQyxNQUFNLEVBQUUsQ0FBQyxlQUFlLENBQUM7O0lBY3pDLGFBQUM7Q0FBQSxBQTVLRCxJQTRLQztTQXBIWSxNQUFNOzs7Ozs7SUFJakIsbUJBQXVCOzs7OztJQUV2Qix3QkFBb0I7Ozs7O0lBS3BCLHlCQUFtRDs7Ozs7SUFJbkQsdUJBQTBDOzs7OztJQUkxQyw0QkFBK0M7Ozs7O0lBSS9DLDZCQUFnRDs7Ozs7SUFJaEQsb0JBQStDOzs7OztJQUkvQywwQkFBMEI7Ozs7O0lBSTFCLDBCQUEwQjs7Ozs7SUFJMUIseUJBQXlCOzs7OztJQUt6Qix1QkFBdUI7Ozs7O0lBS3ZCLDBCQUF3Qzs7SUFFeEMsd0JBQXlEOzs7Ozs7SUErRHpELGlDQUE0Qzs7Ozs7SUFDNUMsa0NBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBFdmVudEVtaXR0ZXIsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VrYS1zZWxlY3QnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdzZWxlY3QtLWlubGluZSc6IGRpc3BsYXkgPT09ICdpbmxpbmUnLFxuICAgICAgICAgICdza2VsZXRvbic6IHNrZWxldG9uXG4gICAgICAgIH1cIlxuICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICA+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cInNrZWxldG9uICYmIGxhYmVsXCIgW2Zvcl09XCJpZFwiIGNsYXNzPVwibGFiZWwgc2tlbGV0b25cIj48L2xhYmVsPlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCIhc2tlbGV0b24gJiYgbGFiZWxcIiBbZm9yXT1cImlkXCIgY2xhc3M9XCJsYWJlbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShsYWJlbClcIj57e2xhYmVsfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGxhYmVsKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImxhYmVsXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cImhlbHBlclRleHRcIiBjbGFzcz1cImZvcm1fX2hlbHBlci10ZXh0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGhlbHBlclRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVscGVyVGV4dFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWlucHV0X193cmFwcGVyXCIgW2F0dHIuZGF0YS1pbnZhbGlkXT1cIihpbnZhbGlkID8gdHJ1ZSA6IG51bGwpXCIgW2F0dHIuZGF0YS12YWxpZF09XCIodmFsaWQgPyB0cnVlIDogbnVsbClcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAjc2VsZWN0XG4gICAgICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdC1pbnB1dFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzdWthLWljb24gKm5nSWY9XCJpbnZhbGlkXCIgaWNvbj1cImFsZXJ0LWNpcmNsZVwiIGNsYXNzPVwic2VsZWN0X19pbnZhbGlkLWljb25cIj48L3N1a2EtaWNvbj5cbiAgICAgICAgICA8c3VrYS1pY29uICpuZ0lmPVwidmFsaWRcIiBpY29uPVwiY2hlY2tcIiBjbGFzcz1cInNlbGVjdF9fdmFsaWQtaWNvblwiPjwvc3VrYS1pY29uPlxuICAgICAgICAgIDxzdWthLWljb24gKm5nSWY9XCIhc2tlbGV0b25cIiBjbGFzcz1cInNlbGVjdF9fYXJyb3dcIiBpY29uPVwiY2hldnJvbi1kb3duXCI+PC9zdWthLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiZm9ybS1yZXF1aXJlbWVudFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShpbnZhbGlkVGV4dClcIj57e2ludmFsaWRUZXh0fX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImludmFsaWRUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIFtkYXRhLWludmFsaWRdIH4gLnNlbGVjdF9fYXJyb3cge1xuICAgICAgYm90dG9tOiAyLjI1cmVtO1xuICAgIH1cbiAgYF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFNlbGVjdCxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgU2VsZWN0IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAvKipcbiAgICogVHJhY2tzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2VsZWN0cyBpbnN0YW50aWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEc1xuICAgKi9cbiAgc3RhdGljIHNlbGVjdENvdW50ID0gMDtcblxuICBwcml2YXRlIF92YWx1ZSA9ICcnO1xuXG4gIC8qKlxuICAgKiBgaW5saW5lYCBvciBgZGVmYXVsdGAgc2VsZWN0IGRpc3BsYXlzXG4gICAqL1xuICBASW5wdXQoKSBkaXNwbGF5OiAnaW5saW5lJyB8ICdkZWZhdWx0JyA9ICdkZWZhdWx0JztcbiAgLyoqXG4gICAqIExhYmVsIGZvciB0aGUgc2VsZWN0LiBBcHBlYXJzIGFib3ZlIHRoZSBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogT3B0aW9uYWwgaGVscGVyIHRleHQgdGhhdCBhcHBlYXJzIHVuZGVyIHRoZSBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpIGhlbHBlclRleHQ6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBpbnZhbGlkIHRleHQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIHVuaXF1ZSBJRC4gRGVmYXVsdHMgdG8gYHNlbGVjdC0ke3RvdGFsIGNvdW50IG9mIHNlbGVjdHMgaW5zdGFudGlhdGVkfWBcbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYHNlbGVjdC0ke1NlbGVjdC5zZWxlY3RDb3VudCsrfWA7XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBkaXNhYmxlIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBmb3IgYSBsb2FkaW5nIHNlbGVjdC5cbiAgICovXG4gIEBJbnB1dCgpIHNrZWxldG9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhbiBpbnZhbGlkIHNlbGVjdCBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIHZhbGlkIHNlbGVjdCBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBlbWl0cyB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBgdmFsdWVgXG4gICAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnc2VsZWN0Jywge3N0YXRpYzogZmFsc2V9KSBzZWxlY3Q6IEVsZW1lbnRSZWY7XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIC8vIHJldHVybiB0aGlzLnNlbGVjdC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIGEgdmFsdWUgZnJvbSB0aGUgbW9kZWwuXG4gICAqL1xuICB3cml0ZVZhbHVlKG9iajogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0aGF0IG5vdGlmaWVzIHRoZSBtb2RlbCB3aGVuIHRoZSBjb250cm9sIHVwZGF0ZXNcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2VIYW5kbGVyID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgdGhhdCBub3RpZmllcyB0aGUgbW9kZWwgd2hlbiB0aGUgY29udHJvbCBpcyBibHVycmVkXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRIYW5kbGVyID0gZm47XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgdGhyb3VnaCB0aGUgbW9kZWxcbiAgICovXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGNoYW5nZSBldmVudCBmcm9tIHRoZSBgc2VsZWN0YC5cbiAgICogU2VuZHMgZXZlbnRzIHRvIHRoZSBjaGFuZ2UgaGFuZGxlciBhbmQgZW1pdHMgYSBgc2VsZWN0ZWRgIGV2ZW50LlxuICAgKi9cbiAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLm9uQ2hhbmdlSGFuZGxlcihldmVudC50YXJnZXQudmFsdWUpO1xuICAgIHRoaXMuc2VsZWN0ZWQuZW1pdChldmVudC50YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RlbnMgZm9yIHRoZSBob3N0IGJsdXJyaW5nLCBhbmQgbm90aWZpZXMgdGhlIG1vZGVsXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdibHVyJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIG9uQmx1cih0YXJnZXQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZEhhbmRsZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICAvKipcbiAgICogcGxhY2Vob2xkZXIgZGVjbGFyYXRpb25zLiBSZXBsYWNlZCBieSB0aGUgZnVuY3Rpb25zIHByb3ZpZGVkIHRvIGByZWdpc3Rlck9uQ2hhbmdlYCBhbmQgYHJlZ2lzdGVyT25Ub3VjaGVkYFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlSGFuZGxlciA9IChfOiBhbnkpID0+IHsgfTtcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZEhhbmRsZXIgPSAoKSA9PiB7IH07XG59XG4iXX0=