@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>
482 lines • 30.5 kB
JavaScript
/**
* @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';
var ButtonRadioGroup = /** @class */ (function () {
function ButtonRadioGroup() {
/**
* 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 {?}
*/
function () { });
/**
* Method set in registerOnChange to propagate changes back to the form.
*/
this.propagateChange = (/**
* @param {?} _
* @return {?}
*/
function (_) { });
}
Object.defineProperty(ButtonRadioGroup.prototype, "selected", {
/**
* Returns the `ButtonRadio` that is selected within the `ButtonRadioGroup`.
*/
get: /**
* Returns the `ButtonRadio` that is selected within the `ButtonRadioGroup`.
* @return {?}
*/
function () {
return this._selected;
},
/**
* Sets the passed in `ButtonRadio` item as the selected input within the `ButtonRadioGroup`.
*/
set: /**
* Sets the passed in `ButtonRadio` item as the selected input within the `ButtonRadioGroup`.
* @param {?} selected
* @return {?}
*/
function (selected) {
this._selected = selected;
this.value = selected ? selected.value : null;
this.checkSelectedButtonRadio();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonRadioGroup.prototype, "value", {
/**
* Returns the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup`.
*/
get: /**
* Returns the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup`.
* @return {?}
*/
function () {
return this._value;
},
/**
* Sets the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup` to the passed in value.
*/
set: /**
* Sets the value/state of the selected `ButtonRadio` within the `ButtonRadioGroup` to the passed in value.
* @param {?} newValue
* @return {?}
*/
function (newValue) {
if (this._value !== newValue) {
this._value = newValue;
this.updateSelectedButtonRadioFromValue();
this.checkSelectedButtonRadio();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonRadioGroup.prototype, "name", {
/**
* Returns the associated name of the `ButtonRadioGroup`.
*/
get: /**
* Returns the associated name of the `ButtonRadioGroup`.
* @return {?}
*/
function () {
return this._name;
},
/**
* Replaces the name associated with the `ButtonRadioGroup` with the provided parameter.
*/
set: /**
* Replaces the name associated with the `ButtonRadioGroup` with the provided parameter.
* @param {?} name
* @return {?}
*/
function (name) {
this._name = name;
this.updateButtonRadios();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ButtonRadioGroup.prototype, "skeleton", {
/**
* Returns the skeleton value in the `ButtonRadioGroup` if there is one.
*/
get: /**
* Returns the skeleton value in the `ButtonRadioGroup` if there is one.
* @return {?}
*/
function () {
return this._skeleton;
},
/**
* Sets the skeleton value for all `ButtonRadio` to the skeleton value of `ButtonRadioGroup`.
*/
set: /**
* Sets the skeleton value for all `ButtonRadio` to the skeleton value of `ButtonRadioGroup`.
* @param {?} value
* @return {?}
*/
function (value) {
this._skeleton = value;
this.updateChildren();
},
enumerable: true,
configurable: true
});
/**
* Updates the selected `ButtonRadio` to be checked (selected).
*/
/**
* Updates the selected `ButtonRadio` to be checked (selected).
* @return {?}
*/
ButtonRadioGroup.prototype.checkSelectedButtonRadio = /**
* Updates the selected `ButtonRadio` to be checked (selected).
* @return {?}
*/
function () {
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).
*/
/**
* Use the value of the `ButtonRadioGroup` to update the selected buttonRadio to the right state (selected state).
* @return {?}
*/
ButtonRadioGroup.prototype.updateSelectedButtonRadioFromValue = /**
* Use the value of the `ButtonRadioGroup` to update the selected buttonRadio to the right state (selected state).
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var alreadySelected = this._selected != null && this._selected.value === this._value;
if (this.buttonRadios && !alreadySelected) {
this._selected = null;
this.buttonRadios.forEach((/**
* @param {?} buttonRadio
* @return {?}
*/
function (buttonRadio) {
if (buttonRadio.checked) {
_this._selected = buttonRadio;
}
}));
}
};
/**
* Creates a class of `ButtonRadioChange` to emit the change in the `ButtonRadioGroup`.
*/
/**
* Creates a class of `ButtonRadioChange` to emit the change in the `ButtonRadioGroup`.
* @param {?} event
* @return {?}
*/
ButtonRadioGroup.prototype.emitChangeEvent = /**
* Creates a class of `ButtonRadioChange` to emit the change in the `ButtonRadioGroup`.
* @param {?} event
* @return {?}
*/
function (event) {
this.change.emit(event);
this.propagateChange(event.value);
this.onTouched();
};
/**
* Synchronizes buttonRadio properties.
*/
/**
* Synchronizes buttonRadio properties.
* @return {?}
*/
ButtonRadioGroup.prototype.updateButtonRadios = /**
* Synchronizes buttonRadio properties.
* @return {?}
*/
function () {
var _this = this;
if (this.buttonRadios) {
setTimeout((/**
* @return {?}
*/
function () {
_this.buttonRadios.forEach((/**
* @param {?} buttonRadio
* @return {?}
*/
function (buttonRadio) { return buttonRadio.name = _this.name; }));
}));
}
};
/**
* Updates the value of the `ButtonRadioGroup` using the provided parameter.
*/
/**
* Updates the value of the `ButtonRadioGroup` using the provided parameter.
* @param {?} value
* @return {?}
*/
ButtonRadioGroup.prototype.writeValue = /**
* Updates the value of the `ButtonRadioGroup` using the provided parameter.
* @param {?} value
* @return {?}
*/
function (value) {
this.value = value;
};
/**
* @return {?}
*/
ButtonRadioGroup.prototype.ngAfterContentInit = /**
* @return {?}
*/
function () {
var _this = this;
this.buttonRadios.changes.subscribe((/**
* @return {?}
*/
function () {
_this.updateButtonRadios();
_this.updateButtonRadioChangeHandler();
}));
this.updateChildren();
this.updateButtonRadioChangeHandler();
};
/**
* @return {?}
*/
ButtonRadioGroup.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.updateButtonRadios();
};
/**
* Used to set method to propagate changes back to the form.
*/
/**
* Used to set method to propagate changes back to the form.
* @param {?} fn
* @return {?}
*/
ButtonRadioGroup.prototype.registerOnChange = /**
* Used to set method to propagate changes back to the form.
* @param {?} fn
* @return {?}
*/
function (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.
*/
/**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the checkbox is touched.
* @return {?}
*/
ButtonRadioGroup.prototype.registerOnTouched = /**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the checkbox is touched.
* @return {?}
*/
function (fn) {
this.onTouched = fn;
};
/**
* @protected
* @return {?}
*/
ButtonRadioGroup.prototype.updateChildren = /**
* @protected
* @return {?}
*/
function () {
var _this = this;
if (this.buttonRadios) {
this.buttonRadios.forEach((/**
* @param {?} child
* @return {?}
*/
function (child) { return child.skeleton = _this.skeleton; }));
}
};
/**
* @protected
* @return {?}
*/
ButtonRadioGroup.prototype.updateButtonRadioChangeHandler = /**
* @protected
* @return {?}
*/
function () {
var _this = this;
this.buttonRadios.forEach((/**
* @param {?} buttonRadio
* @return {?}
*/
function (buttonRadio) {
buttonRadio.registerButtonRadioChangeHandler((/**
* @param {?} event
* @return {?}
*/
function (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: "\n <div\n class=\"button-radio-group\"\n role=\"buttonRadiogroup\">\n <ng-content></ng-content>\n </div>\n ",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: ButtonRadioGroup,
multi: true
}
]
}] }
];
ButtonRadioGroup.propDecorators = {
change: [{ type: Output }],
buttonRadios: [{ type: ContentChildren, args: [forwardRef((/**
* @return {?}
*/
function () { return ButtonRadio; })),] }],
selected: [{ type: Input }],
value: [{ type: Input }],
name: [{ type: Input }],
disabled: [{ type: Input }],
skeleton: [{ type: Input }],
buttonRadioButtonGroupClass: [{ type: HostBinding, args: ['class.form-item',] }]
};
return ButtonRadioGroup;
}());
export { ButtonRadioGroup };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9idXR0b24tcmFkaW8vYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQ7SUFBQTs7Ozs7UUF5QlksV0FBTSxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQzs7OztRQThEakYsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQXFCTSxnQ0FBMkIsR0FBRyxJQUFJLENBQUM7Ozs7UUFLekQsa0JBQWEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJdEIsY0FBUyxHQUFHLEtBQUssQ0FBQzs7OztRQUlsQixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWxCLFdBQU0sR0FBUSxJQUFJLENBQUM7Ozs7UUFJbkIsY0FBUyxHQUFnQixJQUFJLENBQUM7Ozs7UUFJOUIsVUFBSyxHQUFHLHdCQUFzQixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBSSxDQUFDOzs7O1FBc0ZuRixjQUFTOzs7UUFBYyxjQUFRLENBQUMsRUFBQzs7OztRQUtqQyxvQkFBZTs7OztRQUFHLFVBQUMsQ0FBTSxJQUFPLENBQUMsRUFBQztJQW1CcEMsQ0FBQztJQWhOQyxzQkFDSSxzQ0FBUTtRQU1aOztXQUVHOzs7OztRQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7UUFmRDs7V0FFRzs7Ozs7O1FBQ0gsVUFDYSxR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b250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiB2YXJpYWJsZS1uYW1lXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgSG9zdEJpbmRpbmcsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCdXR0b25SYWRpbyB9IGZyb20gJy4vYnV0dG9uLXJhZGlvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25SYWRpb0NoYW5nZSB9IGZyb20gJy4vYnV0dG9uLXJhZGlvLWNoYW5nZS5jbGFzcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N1a2EtYnV0dG9uLXJhZGlvLWdyb3VwJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJ1dHRvbi1yYWRpby1ncm91cFwiXG4gICAgICByb2xlPVwiYnV0dG9uUmFkaW9ncm91cFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBCdXR0b25SYWRpb0dyb3VwLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBCdXR0b25SYWRpb0dyb3VwIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBzdGF0aWMgYnV0dG9uUmFkaW9Hcm91cENvdW50ID0gMDtcblxuICAvKipcbiAgICogRW1pdHMgZXZlbnQgbm90aWZ5aW5nIG90aGVyIGNsYXNzZXMgb2YgYSBjaGFuZ2UgdXNpbmcgYSBgQnV0dG9uUmFkaW9DaGFuZ2VgIGNsYXNzLlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxCdXR0b25SYWRpb0NoYW5nZT4gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvblJhZGlvQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBUaGUgYEJ1dHRvblJhZGlvYCBpbnB1dCBpdGVtcyBpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEJ1dHRvblJhZGlvKSkgYnV0dG9uUmFkaW9zOiBRdWVyeUxpc3Q8QnV0dG9uUmFkaW8+O1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYXNzZWQgaW4gYEJ1dHRvblJhZGlvYCBpdGVtIGFzIHRoZSBzZWxlY3RlZCBpbnB1dCB3aXRoaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBzZWxlY3RlZChzZWxlY3RlZDogQnV0dG9uUmFkaW8gfCBudWxsKSB7XG4gICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlID0gc2VsZWN0ZWQgPyBzZWxlY3RlZC52YWx1ZSA6IG51bGw7XG4gICAgdGhpcy5jaGVja1NlbGVjdGVkQnV0dG9uUmFkaW8oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgQnV0dG9uUmFkaW9gIHRoYXQgaXMgc2VsZWN0ZWQgd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlL3N0YXRlIG9mIHRoZSBzZWxlY3RlZCBgQnV0dG9uUmFkaW9gIHdpdGhpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIHRvIHRoZSBwYXNzZWQgaW4gdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgdmFsdWUobmV3VmFsdWU6IGFueSkge1xuICAgIGlmICh0aGlzLl92YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbmV3VmFsdWU7XG5cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRCdXR0b25SYWRpb0Zyb21WYWx1ZSgpO1xuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkQnV0dG9uUmFkaW8oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdmFsdWUvc3RhdGUgb2YgdGhlIHNlbGVjdGVkIGBCdXR0b25SYWRpb2Agd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIHdpdGggdGhlIHByb3ZpZGVkIHBhcmFtZXRlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBuYW1lKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgIHRoaXMudXBkYXRlQnV0dG9uUmFkaW9zKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFzc29jaWF0ZWQgbmFtZSBvZiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZGlzYWJsZSB0aGUgd2hvbGUgYnV0dG9uUmFkaW8gZ3JvdXBcbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNrZWxldG9uIHZhbHVlIGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgaWYgdGhlcmUgaXMgb25lLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHNrZWxldG9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3NrZWxldG9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNrZWxldG9uIHZhbHVlIGZvciBhbGwgYEJ1dHRvblJhZGlvYCB0byB0aGUgc2tlbGV0b24gdmFsdWUgb2YgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgc2V0IHNrZWxldG9uKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9za2VsZXRvbiA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyAnZm9ybS1pdGVtJyB2YWx1ZSB0byB0aGUgY2xhc3MgZm9yIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZm9ybS1pdGVtJykgYnV0dG9uUmFkaW9CdXR0b25Hcm91cENsYXNzID0gdHJ1ZTtcblxuICAvKipcbiAgICogVG8gdHJhY2sgd2hldGhlciB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIGhhcyBiZWVuIGluaXRpYWxpemVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBpbnB1dCBpcyBkaXNhYmxlZCBhbmQgY2Fubm90IGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAvKipcbiAgICogUmVmbGVjdHMgd2hldGhlciBvciBub3QgdGhlIGRyb3Bkb3duIGlzIGxvYWRpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3NrZWxldG9uID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIG9wdGlvbiB3aXRoaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIHByb3RlY3RlZCBfdmFsdWU6IGFueSA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgYEJ1dHRvblJhZGlvYCB3aXRoaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB0aGF0IGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9zZWxlY3RlZDogQnV0dG9uUmFkaW8gPSBudWxsO1xuICAvKipcbiAgICogVGhlIG5hbWUgYXR0cmlidXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9uYW1lID0gYGJ1dHRvbi1yYWRpby1ncm91cC0ke0J1dHRvblJhZGlvR3JvdXAuYnV0dG9uUmFkaW9Hcm91cENvdW50Kyt9YDtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgYEJ1dHRvblJhZGlvYCB0byBiZSBjaGVja2VkIChzZWxlY3RlZCkuXG4gICAqL1xuICBjaGVja1NlbGVjdGVkQnV0dG9uUmFkaW8oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgIXRoaXMuX3NlbGVjdGVkLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgdmFsdWUgb2YgdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB0byB1cGRhdGUgdGhlIHNlbGVjdGVkIGJ1dHRvblJhZGlvIHRvIHRoZSByaWdodCBzdGF0ZSAoc2VsZWN0ZWQgc3RhdGUpLlxuICAgKi9cbiAgdXBkYXRlU2VsZWN0ZWRCdXR0b25SYWRpb0Zyb21WYWx1ZSgpIHtcbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZCAhPSBudWxsICYmIHRoaXMuX3NlbGVjdGVkLnZhbHVlID09PSB0aGlzLl92YWx1ZTtcblxuICAgIGlmICh0aGlzLmJ1dHRvblJhZGlvcyAmJiAhYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IG51bGw7XG4gICAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGJ1dHRvblJhZGlvID0+IHtcbiAgICAgICAgaWYgKGJ1dHRvblJhZGlvLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGJ1dHRvblJhZGlvO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIG9mIGBCdXR0b25SYWRpb0NoYW5nZWAgdG8gZW1pdCB0aGUgY2hhbmdlIGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBlbWl0Q2hhbmdlRXZlbnQoZXZlbnQ6IEJ1dHRvblJhZGlvQ2hhbmdlKSB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemVzIGJ1dHRvblJhZGlvIHByb3BlcnRpZXMuXG4gICAqL1xuICB1cGRhdGVCdXR0b25SYWRpb3MoKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uUmFkaW9zKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5idXR0b25SYWRpb3MuZm9yRWFjaChidXR0b25SYWRpbyA9PiBidXR0b25SYWRpby5uYW1lID0gdGhpcy5uYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIHVzaW5nIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5idXR0b25SYWRpb3MuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlQnV0dG9uUmFkaW9DaGFuZ2VIYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb0NoYW5nZUhhbmRsZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IG1ldGhvZCB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjaGVja2JveCBpcyB0b3VjaGVkLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZWRlZCB0byBwcm9wZXJseSBpbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuICAvKipcbiAgICogTWV0aG9kIHNldCBpbiByZWdpc3Rlck9uQ2hhbmdlIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm0uXG4gICAqL1xuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUNoaWxkcmVuKCkge1xuICAgIGlmICh0aGlzLmJ1dHRvblJhZGlvcykge1xuICAgICAgdGhpcy5idXR0b25SYWRpb3MuZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5za2VsZXRvbiA9IHRoaXMuc2tlbGV0b24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVCdXR0b25SYWRpb0NoYW5nZUhhbmRsZXIoKSB7XG4gICAgdGhpcy5idXR0b25SYWRpb3MuZm9yRWFjaChidXR0b25SYWRpbyA9PiB7XG4gICAgICBidXR0b25SYWRpby5yZWdpc3RlckJ1dHRvblJhZGlvQ2hhbmdlSGFuZGxlcigoZXZlbnQ6IEJ1dHRvblJhZGlvQ2hhbmdlKSA9PiB7XG4gICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBhbmQgdmFsdWUgZnJvbSB0aGUgZXZlbnRcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBldmVudC5zb3VyY2U7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIC8vIGJ1YmJsZSB0aGUgZXZlbnRcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==