@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
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, } 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==