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>

381 lines 26.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ // tslint:disable: variable-name import { ContentChildren, Component, EventEmitter, forwardRef, Input, Output, QueryList, HostBinding } from '@angular/core'; import { NG_VALUE_ACCESSOR } from '@angular/forms'; import { ButtonRadio } from './button-radio.component'; // tslint:disable-next-line: component-class-suffix export class ButtonRadioGroup { constructor() { /** * Emits event notifying other classes of a change using a `ButtonRadioChange` class. */ // tslint:disable-next-line: no-output-native this.change = new EventEmitter(); /** * Set to true to disable the whole buttonRadio group */ this.disabled = false; /** * Binds 'form-item' value to the class for `ButtonRadioGroup`. */ this.buttonRadioButtonGroupClass = true; /** * To track whether the `ButtonRadioGroup` has been initialized. */ this.isInitialized = false; /** * Reflects whether or not the input is disabled and cannot be selected. */ this._disabled = false; /** * Reflects whether or not the dropdown is loading. */ this._skeleton = false; /** * The value of the selected option within the `ButtonRadioGroup`. */ this._value = null; /** * The `ButtonRadio` within the `ButtonRadioGroup` that is selected. */ this._selected = null; /** * The name attribute associated with the `ButtonRadioGroup`. */ this._name = `button-radio-group-${ButtonRadioGroup.buttonRadioGroupCount++}`; /** * Needed to properly implement ControlValueAccessor. */ this.onTouched = (/** * @return {?} */ () => { }); /** * Method set in registerOnChange to propagate changes back to the form. */ this.propagateChange = (/** * @param {?} _ * @return {?} */ (_) => { }); } /** * Sets the passed in `ButtonRadio` item as the selected input within the `ButtonRadioGroup`. * @param {?} selected * @return {?} */ set selected(selected) { this._selected = selected; this.value = selected ? selected.value : null; this.checkSelectedButtonRadio(); } /** * Returns the `ButtonRadio` that is selected within the `ButtonRadioGroup`. * @return {?} */ get selected() { return this._selected; } /** * Sets the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup` to the passed in value. * @param {?} newValue * @return {?} */ set value(newValue) { if (this._value !== newValue) { this._value = newValue; this.updateSelectedButtonRadioFromValue(); this.checkSelectedButtonRadio(); } } /** * Returns the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup`. * @return {?} */ get value() { return this._value; } /** * Replaces the name associated with the `ButtonRadioGroup` with the provided parameter. * @param {?} name * @return {?} */ set name(name) { this._name = name; this.updateButtonRadios(); } /** * Returns the associated name of the `ButtonRadioGroup`. * @return {?} */ get name() { return this._name; } /** * Returns the skeleton value in the `ButtonRadioGroup` if there is one. * @return {?} */ get skeleton() { return this._skeleton; } /** * Sets the skeleton value for all `ButtonRadio` to the skeleton value of `ButtonRadioGroup`. * @param {?} value * @return {?} */ set skeleton(value) { this._skeleton = value; this.updateChildren(); } /** * Updates the selected `ButtonRadio` to be checked (selected). * @return {?} */ checkSelectedButtonRadio() { if (this.selected && !this._selected.checked) { this.selected.checked = true; } } /** * Use the value of the `ButtonRadioGroup` to update the selected buttonRadio to the right state (selected state). * @return {?} */ updateSelectedButtonRadioFromValue() { /** @type {?} */ const alreadySelected = this._selected != null && this._selected.value === this._value; if (this.buttonRadios && !alreadySelected) { this._selected = null; this.buttonRadios.forEach((/** * @param {?} buttonRadio * @return {?} */ buttonRadio => { if (buttonRadio.checked) { this._selected = buttonRadio; } })); } } /** * Creates a class of `ButtonRadioChange` to emit the change in the `ButtonRadioGroup`. * @param {?} event * @return {?} */ emitChangeEvent(event) { this.change.emit(event); this.propagateChange(event.value); this.onTouched(); } /** * @return {?} */ updateButtonRadioNames() { console.warn('updateButtonRadioNames had been deprecated. Use updateButtonRadios instead'); this.updateButtonRadios(); } /** * Synchronizes buttonRadio properties. * @return {?} */ updateButtonRadios() { if (this.buttonRadios) { setTimeout((/** * @return {?} */ () => { this.buttonRadios.forEach((/** * @param {?} buttonRadio * @return {?} */ buttonRadio => buttonRadio.name = this.name)); })); } } /** * Updates the value of the `ButtonRadioGroup` using the provided parameter. * @param {?} value * @return {?} */ writeValue(value) { this.value = value; } /** * @return {?} */ ngAfterContentInit() { this.buttonRadios.changes.subscribe((/** * @return {?} */ () => { this.updateButtonRadios(); this.updateButtonRadioChangeHandler(); })); this.updateChildren(); this.updateButtonRadioChangeHandler(); } /** * @return {?} */ ngAfterViewInit() { this.updateButtonRadios(); } /** * Used to set method to propagate changes back to the form. * @param {?} fn * @return {?} */ registerOnChange(fn) { this.propagateChange = fn; } /** * Registers a callback to be triggered when the control has been touched. * @param {?} fn Callback to be triggered when the checkbox is touched. * @return {?} */ registerOnTouched(fn) { this.onTouched = fn; } /** * @protected * @return {?} */ updateChildren() { if (this.buttonRadios) { this.buttonRadios.forEach((/** * @param {?} child * @return {?} */ child => child.skeleton = this.skeleton)); } } /** * @protected * @return {?} */ updateButtonRadioChangeHandler() { this.buttonRadios.forEach((/** * @param {?} buttonRadio * @return {?} */ buttonRadio => { buttonRadio.registerButtonRadioChangeHandler((/** * @param {?} event * @return {?} */ (event) => { // update selected and value from the event this._selected = event.source; this._value = event.value; // bubble the event this.emitChangeEvent(event); })); })); } } ButtonRadioGroup.buttonRadioGroupCount = 0; ButtonRadioGroup.decorators = [ { type: Component, args: [{ selector: 'suka-button-radio-group', template: ` <div class="button-radio-group" role="buttonRadiogroup"> <ng-content></ng-content> </div> `, providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: ButtonRadioGroup, multi: true } ] }] } ]; ButtonRadioGroup.propDecorators = { change: [{ type: Output }], buttonRadios: [{ type: ContentChildren, args: [forwardRef((/** * @return {?} */ () => ButtonRadio)),] }], selected: [{ type: Input }], value: [{ type: Input }], name: [{ type: Input }], disabled: [{ type: Input }], skeleton: [{ type: Input }], buttonRadioButtonGroupClass: [{ type: HostBinding, args: ['class.form-item',] }] }; if (false) { /** @type {?} */ ButtonRadioGroup.buttonRadioGroupCount; /** * Emits event notifying other classes of a change using a `ButtonRadioChange` class. * @type {?} */ ButtonRadioGroup.prototype.change; /** * The `ButtonRadio` input items in the `ButtonRadioGroup`. * @type {?} */ ButtonRadioGroup.prototype.buttonRadios; /** * Set to true to disable the whole buttonRadio group * @type {?} */ ButtonRadioGroup.prototype.disabled; /** * Binds 'form-item' value to the class for `ButtonRadioGroup`. * @type {?} */ ButtonRadioGroup.prototype.buttonRadioButtonGroupClass; /** * To track whether the `ButtonRadioGroup` has been initialized. * @type {?} * @protected */ ButtonRadioGroup.prototype.isInitialized; /** * Reflects whether or not the input is disabled and cannot be selected. * @type {?} * @protected */ ButtonRadioGroup.prototype._disabled; /** * Reflects whether or not the dropdown is loading. * @type {?} * @protected */ ButtonRadioGroup.prototype._skeleton; /** * The value of the selected option within the `ButtonRadioGroup`. * @type {?} * @protected */ ButtonRadioGroup.prototype._value; /** * The `ButtonRadio` within the `ButtonRadioGroup` that is selected. * @type {?} * @protected */ ButtonRadioGroup.prototype._selected; /** * The name attribute associated with the `ButtonRadioGroup`. * @type {?} * @protected */ ButtonRadioGroup.prototype._name; /** * Needed to properly implement ControlValueAccessor. * @type {?} */ ButtonRadioGroup.prototype.onTouched; /** * Method set in registerOnChange to propagate changes back to the form. * @type {?} */ ButtonRadioGroup.prototype.propagateChange; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9idXR0b24tcmFkaW8vYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFvQnZELG1EQUFtRDtBQUNuRCxNQUFNLE9BQU8sZ0JBQWdCO0lBbEI3Qjs7Ozs7UUF5QlksV0FBTSxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQzs7OztRQThEakYsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQXFCTSxnQ0FBMkIsR0FBRyxJQUFJLENBQUM7Ozs7UUFLekQsa0JBQWEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJdEIsY0FBUyxHQUFHLEtBQUssQ0FBQzs7OztRQUlsQixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWxCLFdBQU0sR0FBUSxJQUFJLENBQUM7Ozs7UUFJbkIsY0FBUyxHQUFnQixJQUFJLENBQUM7Ozs7UUFJOUIsVUFBSyxHQUFHLHNCQUFzQixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLENBQUM7Ozs7UUEyRm5GLGNBQVM7OztRQUFjLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQzs7OztRQUtqQyxvQkFBZTs7OztRQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUM7SUFtQnBDLENBQUM7Ozs7OztJQXJOQyxJQUNJLFFBQVEsQ0FBQyxRQUE0QjtRQUN2QyxJQUFJLENBQUMs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QW1CO2dCQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOztBQXBPTSxzQ0FBcUIsR0FBRyxDQUFDLENBQUM7O1lBbkJsQyxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsUUFBUSxFQUFFOzs7Ozs7R0FNVDtnQkFDRCxTQUFTLEVBQUU7b0JBQ1Q7d0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsV0FBVyxFQUFFLGdCQUFnQjt3QkFDN0IsS0FBSyxFQUFFLElBQUk7cUJBQ1o7aUJBQ0Y7YUFDRjs7O3FCQVNFLE1BQU07MkJBS04sZUFBZSxTQUFDLFVBQVU7OztnQkFBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEVBQUM7dUJBSzdDLEtBQUs7b0JBaUJMLEtBQUs7bUJBb0JMLEtBQUs7dUJBZUwsS0FBSzt1QkFLTCxLQUFLOzBDQWdCTCxXQUFXLFNBQUMsaUJBQWlCOzs7O0lBekY5Qix1Q0FBaUM7Ozs7O0lBTWpDLGtDQUEwRjs7Ozs7SUFLMUYsd0NBQXFGOzs7OztJQXlEckYsb0NBQTBCOzs7OztJQXFCMUIsdURBQW1FOzs7Ozs7SUFLbkUseUNBQWdDOzs7Ozs7SUFJaEMscUNBQTRCOzs7Ozs7SUFJNUIscUNBQTRCOzs7Ozs7SUFJNUIsa0NBQTZCOzs7Ozs7SUFJN0IscUNBQXdDOzs7Ozs7SUFJeEMsaUNBQW1GOzs7OztJQTJGbkYscUNBQWlDOzs7OztJQUtqQywyQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTogdmFyaWFibGUtbmFtZVxuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIEhvc3RCaW5kaW5nLFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uUmFkaW8gfSBmcm9tICcuL2J1dHRvbi1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUmFkaW9DaGFuZ2UgfSBmcm9tICcuL2J1dHRvbi1yYWRpby1jaGFuZ2UuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLWJ1dHRvbi1yYWRpby1ncm91cCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJidXR0b24tcmFkaW8tZ3JvdXBcIlxuICAgICAgcm9sZT1cImJ1dHRvblJhZGlvZ3JvdXBcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQnV0dG9uUmFkaW9Hcm91cCxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgQnV0dG9uUmFkaW9Hcm91cCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgc3RhdGljIGJ1dHRvblJhZGlvR3JvdXBDb3VudCA9IDA7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyBvdGhlciBjbGFzc2VzIG9mIGEgY2hhbmdlIHVzaW5nIGEgYEJ1dHRvblJhZGlvQ2hhbmdlYCBjbGFzcy5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8QnV0dG9uUmFkaW9DaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25SYWRpb0NoYW5nZT4oKTtcblxuICAvKipcbiAgICogVGhlIGBCdXR0b25SYWRpb2AgaW5wdXQgaXRlbXMgaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCdXR0b25SYWRpbykpIGJ1dHRvblJhZGlvczogUXVlcnlMaXN0PEJ1dHRvblJhZGlvPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFzc2VkIGluIGBCdXR0b25SYWRpb2AgaXRlbSBhcyB0aGUgc2VsZWN0ZWQgaW5wdXQgd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IEJ1dHRvblJhZGlvIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkID8gc2VsZWN0ZWQudmFsdWUgOiBudWxsO1xuICAgIHRoaXMuY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYEJ1dHRvblJhZGlvYCB0aGF0IGlzIHNlbGVjdGVkIHdpdGhpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZS9zdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgYEJ1dHRvblJhZGlvYCB3aXRoaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB0byB0aGUgcGFzc2VkIGluIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkQnV0dG9uUmFkaW9Gcm9tVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlL3N0YXRlIG9mIHRoZSBzZWxlY3RlZCBgQnV0dG9uUmFkaW9gIHdpdGhpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB3aXRoIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIG5hbWUgb2YgdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgdGhlIHdob2xlIGJ1dHRvblJhZGlvIGdyb3VwXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBza2VsZXRvbiB2YWx1ZSBpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIGlmIHRoZXJlIGlzIG9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBza2VsZXRvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9za2VsZXRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBza2VsZXRvbiB2YWx1ZSBmb3IgYWxsIGBCdXR0b25SYWRpb2AgdG8gdGhlIHNrZWxldG9uIHZhbHVlIG9mIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIHNldCBza2VsZXRvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc2tlbGV0b24gPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgJ2Zvcm0taXRlbScgdmFsdWUgdG8gdGhlIGNsYXNzIGZvciBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0taXRlbScpIGJ1dHRvblJhZGlvQnV0dG9uR3JvdXBDbGFzcyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvIHRyYWNrIHdoZXRoZXIgdGhlIGBCdXR0b25SYWRpb0dyb3VwYCBoYXMgYmVlbiBpbml0aWFsaXplZC5cbiAgICovXG4gIHByb3RlY3RlZCBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgYW5kIGNhbm5vdCBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBkcm9wZG93biBpcyBsb2FkaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9za2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvcHRpb24gd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZhbHVlOiBhbnkgPSBudWxsO1xuICAvKipcbiAgICogVGhlIGBCdXR0b25SYWRpb2Agd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdGhhdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWQ6IEJ1dHRvblJhZGlvID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIHByb3RlY3RlZCBfbmFtZSA9IGBidXR0b24tcmFkaW8tZ3JvdXAtJHtCdXR0b25SYWRpb0dyb3VwLmJ1dHRvblJhZGlvR3JvdXBDb3VudCsrfWA7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkIGBCdXR0b25SYWRpb2AgdG8gYmUgY2hlY2tlZCAoc2VsZWN0ZWQpLlxuICAgKi9cbiAgY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkICYmICF0aGlzLl9zZWxlY3RlZC5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHZhbHVlIG9mIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdG8gdXBkYXRlIHRoZSBzZWxlY3RlZCBidXR0b25SYWRpbyB0byB0aGUgcmlnaHQgc3RhdGUgKHNlbGVjdGVkIHN0YXRlKS5cbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkQnV0dG9uUmFkaW9Gcm9tVmFsdWUoKSB7XG4gICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgIT0gbnVsbCAmJiB0aGlzLl9zZWxlY3RlZC52YWx1ZSA9PT0gdGhpcy5fdmFsdWU7XG5cbiAgICBpZiAodGhpcy5idXR0b25SYWRpb3MgJiYgIWFscmVhZHlTZWxlY3RlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgdGhpcy5idXR0b25SYWRpb3MuZm9yRWFjaChidXR0b25SYWRpbyA9PiB7XG4gICAgICAgIGlmIChidXR0b25SYWRpby5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b25SYWRpbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyBvZiBgQnV0dG9uUmFkaW9DaGFuZ2VgIHRvIGVtaXQgdGhlIGNoYW5nZSBpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZW1pdENoYW5nZUV2ZW50KGV2ZW50OiBCdXR0b25SYWRpb0NoYW5nZSkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgdXBkYXRlQnV0dG9uUmFkaW9OYW1lcygpIHtcbiAgICBjb25zb2xlLndhcm4oJ3VwZGF0ZUJ1dHRvblJhZGlvTmFtZXMgaGFkIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHVwZGF0ZUJ1dHRvblJhZGlvcyBpbnN0ZWFkJyk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgYnV0dG9uUmFkaW8gcHJvcGVydGllcy5cbiAgICovXG4gIHVwZGF0ZUJ1dHRvblJhZGlvcygpIHtcbiAgICBpZiAodGhpcy5idXR0b25SYWRpb3MpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGJ1dHRvblJhZGlvID0+IGJ1dHRvblJhZGlvLm5hbWUgPSB0aGlzLm5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdXNpbmcgdGhlIHByb3ZpZGVkIHBhcmFtZXRlci5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmJ1dHRvblJhZGlvcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvcygpO1xuICAgICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb0NoYW5nZUhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvQ2hhbmdlSGFuZGxlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlQnV0dG9uUmFkaW9zKCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgbWV0aG9kIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm0uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29udHJvbCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNoZWNrYm94IGlzIHRvdWNoZWQuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogTmVlZGVkIHRvIHByb3Blcmx5IGltcGxlbWVudCBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG4gIC8qKlxuICAgKiBNZXRob2Qgc2V0IGluIHJlZ2lzdGVyT25DaGFuZ2UgdG8gcHJvcGFnYXRlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybS5cbiAgICovXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuICBwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uUmFkaW9zKSB7XG4gICAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUJ1dHRvblJhZGlvQ2hhbmdlSGFuZGxlcigpIHtcbiAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGJ1dHRvblJhZGlvID0+IHtcbiAgICAgIGJ1dHRvblJhZGlvLnJlZ2lzdGVyQnV0dG9uUmFkaW9DaGFuZ2VIYW5kbGVyKChldmVudDogQnV0dG9uUmFkaW9DaGFuZ2UpID0+IHtcbiAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkIGFuZCB2YWx1ZSBmcm9tIHRoZSBldmVudFxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgLy8gYnViYmxlIHRoZSBldmVudFxuICAgICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudChldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19