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>

275 lines 17.9 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'; // tslint:disable-next-line: component-class-suffix export class Select { constructor() { 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 {?} */ (_) => { }); this.onTouchedHandler = (/** * @return {?} */ () => { }); } /** * @return {?} */ get value() { // return this.select.nativeElement.value; return this._value; } /** * @param {?} v * @return {?} */ set value(v) { this._value = v; } /** * Receives a value from the model. * @param {?} obj * @return {?} */ writeValue(obj) { this.value = obj; } /** * Registers a listener that notifies the model when the control updates * @param {?} fn * @return {?} */ registerOnChange(fn) { this.onChangeHandler = fn; } /** * Registers a listener that notifies the model when the control is blurred * @param {?} fn * @return {?} */ registerOnTouched(fn) { this.onTouchedHandler = fn; } /** * Sets the disabled state through the model * @param {?} isDisabled * @return {?} */ setDisabledState(isDisabled) { this.disabled = isDisabled; } /** * Handles the change event from the `select`. * Sends events to the change handler and emits a `selected` event. * @param {?} event * @return {?} */ onChange(event) { this.onChangeHandler(event.target.value); this.selected.emit(event.target.value); } /** * Listens for the host blurring, and notifies the model * @param {?} target * @return {?} */ onBlur(target) { this.onTouchedHandler(); } /** * @param {?} value * @return {?} */ isTemplate(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: ` <div class="form-item"> <div [ngClass]="{ 'select--inline': display === 'inline', 'skeleton': skeleton }" class="select" > <label *ngIf="skeleton && label" [for]="id" class="label skeleton"></label> <label *ngIf="!skeleton && label" [for]="id" class="label"> <ng-container *ngIf="!isTemplate(label)">{{label}}</ng-container> <ng-template *ngIf="isTemplate(label)" [ngTemplateOutlet]="label"></ng-template> </label> <div *ngIf="helperText" class="form__helper-text"> <ng-container *ngIf="!isTemplate(helperText)">{{helperText}}</ng-container> <ng-template *ngIf="isTemplate(helperText)" [ngTemplateOutlet]="helperText"></ng-template> </div> <div class="select-input__wrapper" [attr.data-invalid]="(invalid ? true : null)" [attr.data-valid]="(valid ? true : null)"> <select #select [attr.id]="id" [disabled]="disabled" (change)="onChange($event)" [value]="value" (blur)="onBlur($event)" class="select-input"> <ng-content></ng-content> </select> <suka-icon *ngIf="invalid" icon="alert-circle" class="select__invalid-icon"></suka-icon> <suka-icon *ngIf="valid" icon="check" class="select__valid-icon"></suka-icon> <suka-icon *ngIf="!skeleton" class="select__arrow" icon="chevron-down"></suka-icon> </div> <div *ngIf="invalid" class="form-requirement"> <ng-container *ngIf="!isTemplate(invalidText)">{{invalidText}}</ng-container> <ng-template *ngIf="isTemplate(invalidText)" [ngTemplateOutlet]="invalidText"></ng-template> </div> </div> </div> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: Select, multi: true } ], styles: [` [data-invalid] ~ .select__arrow { bottom: 2.25rem; } `] }] } ]; 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'],] }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQXlEekUsbURBQW1EO0FBQ25ELE1BQU0sT0FBTyxNQUFNO0lBeERuQjtRQThEVSxXQUFNLEdBQUcsRUFBRSxDQUFDOzs7O1FBS1gsWUFBTyxHQUF5QixTQUFTLENBQUM7Ozs7UUFnQjFDLE9BQUUsR0FBRyxVQUFVLE1BQU0sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDOzs7O1FBSXRDLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixZQUFPLEdBQUcsS0FBSyxDQUFDOzs7O1FBS2hCLFVBQUssR0FBRyxLQUFLLENBQUM7Ozs7UUFLYixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQzs7OztRQWlFOUIsb0JBQWU7Ozs7UUFBRyxDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFDO1FBQ2xDLHFCQUFnQjs7O1FBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFDO0lBQ3pDLENBQUM7Ozs7SUEvREMsSUFBSSxLQUFLO1FBQ1AsMENBQTBDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDOzs7OztJQUVELElBQUksS0FBSyxDQUFDLENBQUM7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQixDQUFDOzs7Ozs7SUFLRCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDOzs7Ozs7SUFLRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7Ozs7OztJQUtELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDOzs7Ozs7SUFLRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDOzs7Ozs7O0lBTUQsUUFBUSxDQUFDLEtBQUs7UUFDWixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDOzs7Ozs7SUFNRCxNQUFNLENBQUMsTUFBTTtRQUNYLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7Ozs7O0lBRU0sVUFBVSxDQUFDLEtBQUs7UUFDckIsT0FBTyxLQUFLLFlBQVksV0FBVyxDQUFDO0lBQ3RDLENBQUM7Ozs7O0FBekdNLGtCQUFXLEdBQUcsQ0FBQyxDQUFDOztZQTVEeEIsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxhQUFhO2dCQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDVDtnQkFNRCxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLE1BQU07d0JBQ25CLEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGO3lCQVhROzs7O0dBSVI7YUFRRjs7O3NCQWFFLEtBQUs7b0JBSUwsS0FBSzt5QkFJTCxLQUFLOzBCQUlMLEtBQUs7aUJBSUwsS0FBSzt1QkFJTCxLQUFLO3VCQUlMLEtBQUs7c0JBSUwsS0FBSztvQkFLTCxLQUFLO3VCQUtMLE1BQU07cUJBRU4sU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7cUJBbURuQyxZQUFZLFNBQUMsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDOzs7Ozs7O0lBbEd2QyxtQkFBdUI7Ozs7O0lBRXZCLHdCQUFvQjs7Ozs7SUFLcEIseUJBQW1EOzs7OztJQUluRCx1QkFBMEM7Ozs7O0lBSTFDLDRCQUErQzs7Ozs7SUFJL0MsNkJBQWdEOzs7OztJQUloRCxvQkFBK0M7Ozs7O0lBSS9DLDBCQUEwQjs7Ozs7SUFJMUIsMEJBQTBCOzs7OztJQUkxQix5QkFBeUI7Ozs7O0lBS3pCLHVCQUF1Qjs7Ozs7SUFLdkIsMEJBQXdDOztJQUV4Qyx3QkFBeUQ7Ozs7OztJQStEekQsaUNBQTRDOzs7OztJQUM1QyxrQ0FBdUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTogbWF4LWxpbmUtbGVuZ3RoXG5cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLXNlbGVjdCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImZvcm0taXRlbVwiPlxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NlbGVjdC0taW5saW5lJzogZGlzcGxheSA9PT0gJ2lubGluZScsXG4gICAgICAgICAgJ3NrZWxldG9uJzogc2tlbGV0b25cbiAgICAgICAgfVwiXG4gICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwic2tlbGV0b24gJiYgbGFiZWxcIiBbZm9yXT1cImlkXCIgY2xhc3M9XCJsYWJlbCBza2VsZXRvblwiPjwvbGFiZWw+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cIiFza2VsZXRvbiAmJiBsYWJlbFwiIFtmb3JdPVwiaWRcIiBjbGFzcz1cImxhYmVsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGxhYmVsKVwiPnt7bGFiZWx9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaGVscGVyVGV4dFwiIGNsYXNzPVwiZm9ybV9faGVscGVyLXRleHRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaGVscGVyVGV4dClcIj57e2hlbHBlclRleHR9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtaW5wdXRfX3dyYXBwZXJcIiBbYXR0ci5kYXRhLWludmFsaWRdPVwiKGludmFsaWQgPyB0cnVlIDogbnVsbClcIiBbYXR0ci5kYXRhLXZhbGlkXT1cIih2YWxpZCA/IHRydWUgOiBudWxsKVwiPlxuICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICNzZWxlY3RcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0LWlucHV0XCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHN1a2EtaWNvbiAqbmdJZj1cImludmFsaWRcIiBpY29uPVwiYWxlcnQtY2lyY2xlXCIgY2xhc3M9XCJzZWxlY3RfX2ludmFsaWQtaWNvblwiPjwvc3VrYS1pY29uPlxuICAgICAgICAgIDxzdWthLWljb24gKm5nSWY9XCJ2YWxpZFwiIGljb249XCJjaGVja1wiIGNsYXNzPVwic2VsZWN0X192YWxpZC1pY29uXCI+PC9zdWthLWljb24+XG4gICAgICAgICAgPHN1a2EtaWNvbiAqbmdJZj1cIiFza2VsZXRvblwiIGNsYXNzPVwic2VsZWN0X19hcnJvd1wiIGljb249XCJjaGV2cm9uLWRvd25cIj48L3N1a2EtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpbnZhbGlkXCIgY2xhc3M9XCJmb3JtLXJlcXVpcmVtZW50XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGludmFsaWRUZXh0KVwiPnt7aW52YWxpZFRleHR9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgW2RhdGEtaW52YWxpZF0gfiAuc2VsZWN0X19hcnJvdyB7XG4gICAgICBib3R0b206IDIuMjVyZW07XG4gICAgfVxuICBgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogU2VsZWN0LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBTZWxlY3QgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIHRvdGFsIG51bWJlciBvZiBzZWxlY3RzIGluc3RhbnRpYXRlZC4gVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSURzXG4gICAqL1xuICBzdGF0aWMgc2VsZWN0Q291bnQgPSAwO1xuXG4gIHByaXZhdGUgX3ZhbHVlID0gJyc7XG5cbiAgLyoqXG4gICAqIGBpbmxpbmVgIG9yIGBkZWZhdWx0YCBzZWxlY3QgZGlzcGxheXNcbiAgICovXG4gIEBJbnB1dCgpIGRpc3BsYXk6ICdpbmxpbmUnIHwgJ2RlZmF1bHQnID0gJ2RlZmF1bHQnO1xuICAvKipcbiAgICogTGFiZWwgZm9yIHRoZSBzZWxlY3QuIEFwcGVhcnMgYWJvdmUgdGhlIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT47XG4gIC8qKlxuICAgKiBPcHRpb25hbCBoZWxwZXIgdGV4dCB0aGF0IGFwcGVhcnMgdW5kZXIgdGhlIGxhYmVsLlxuICAgKi9cbiAgQElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGludmFsaWQgdGV4dC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogU2V0cyB0aGUgdW5pcXVlIElELiBEZWZhdWx0cyB0byBgc2VsZWN0LSR7dG90YWwgY291bnQgb2Ygc2VsZWN0cyBpbnN0YW50aWF0ZWR9YFxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgc2VsZWN0LSR7U2VsZWN0LnNlbGVjdENvdW50Kyt9YDtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIGZvciBhIGxvYWRpbmcgc2VsZWN0LlxuICAgKi9cbiAgQElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGFuIGludmFsaWQgc2VsZWN0IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgYW4gdmFsaWQgc2VsZWN0IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIGVtaXRzIHRoZSBzZWxlY3RlZCBvcHRpb25zIGB2YWx1ZWBcbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzZWxlY3QnLCB7c3RhdGljOiBmYWxzZX0pIHNlbGVjdDogRWxlbWVudFJlZjtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgLy8gcmV0dXJuIHRoaXMuc2VsZWN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgc2V0IHZhbHVlKHYpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHY7XG4gIH1cblxuICAvKipcbiAgICogUmVjZWl2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBtb2RlbC5cbiAgICovXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGxpc3RlbmVyIHRoYXQgbm90aWZpZXMgdGhlIG1vZGVsIHdoZW4gdGhlIGNvbnRyb2wgdXBkYXRlc1xuICAgKi9cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5vbkNoYW5nZUhhbmRsZXIgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBsaXN0ZW5lciB0aGF0IG5vdGlmaWVzIHRoZSBtb2RlbCB3aGVuIHRoZSBjb250cm9sIGlzIGJsdXJyZWRcbiAgICovXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZEhhbmRsZXIgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSB0aHJvdWdoIHRoZSBtb2RlbFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgY2hhbmdlIGV2ZW50IGZyb20gdGhlIGBzZWxlY3RgLlxuICAgKiBTZW5kcyBldmVudHMgdG8gdGhlIGNoYW5nZSBoYW5kbGVyIGFuZCBlbWl0cyBhIGBzZWxlY3RlZGAgZXZlbnQuXG4gICAqL1xuICBvbkNoYW5nZShldmVudCkge1xuICAgIHRoaXMub25DaGFuZ2VIYW5kbGVyKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVucyBmb3IgdGhlIGhvc3QgYmx1cnJpbmcsIGFuZCBub3RpZmllcyB0aGUgbW9kZWxcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInLCBbJyRldmVudC50YXJnZXQnXSlcbiAgb25CbHVyKHRhcmdldCkge1xuICAgIHRoaXMub25Ub3VjaGVkSGFuZGxlcigpO1xuICB9XG5cbiAgcHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBwbGFjZWhvbGRlciBkZWNsYXJhdGlvbnMuIFJlcGxhY2VkIGJ5IHRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgdG8gYHJlZ2lzdGVyT25DaGFuZ2VgIGFuZCBgcmVnaXN0ZXJPblRvdWNoZWRgXG4gICAqL1xuICBwcm90ZWN0ZWQgb25DaGFuZ2VIYW5kbGVyID0gKF86IGFueSkgPT4geyB9O1xuICBwcm90ZWN0ZWQgb25Ub3VjaGVkSGFuZGxlciA9ICgpID0+IHsgfTtcbn1cbiJdfQ==