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>

492 lines 31.2 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'; 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(); }; /** * @return {?} */ ButtonRadioGroup.prototype.updateButtonRadioNames = /** * @return {?} */ function () { console.warn('updateButtonRadioNames had been deprecated. Use updateButtonRadios instead'); this.updateButtonRadios(); }; /** * 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9idXR0b24tcmFkaW8vYnV0dG9uLXJhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQ7SUFBQTs7Ozs7UUF5QlksV0FBTSxHQUFvQyxJQUFJLFlBQVksRUFBcUIsQ0FBQzs7OztRQThEakYsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQXFCTSxnQ0FBMkIsR0FBRyxJQUFJLENBQUM7Ozs7UUFLekQsa0JBQWEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJdEIsY0FBUyxHQUFHLEtBQUssQ0FBQzs7OztRQUlsQixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWxCLFdBQU0sR0FBUSxJQUFJLENBQUM7Ozs7UUFJbkIsY0FBUyxHQUFnQixJQUFJLENBQUM7Ozs7UUFJOUIsVUFBSyxHQUFHLHdCQUFzQixnQkFBZ0IsQ0FBQyxxQkFBcUIsRUFBSSxDQUFDOzs7O1FBMkZuRixjQUFTOzs7UUFBYyxjQUFRLENBQUMsRUFBQzs7OztRQUtqQyxvQkFBZTs7OztRQUFHLFVBQUMsQ0FBTSxJQUFPLENBQUMsRUFBQztJQW1CcEMsQ0FBQztJQXJOQyxzQkFDSSxzQ0FBUTtRQU1aOztXQUVHOzs7OztRQUNIO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3hCLENBQUM7UUFmRDs7V0FFRzs7Ozs7O1FBQ0gsVUFDYSxR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NUIscUNBQTRCOzs7Ozs7SUFJNUIsa0NBQTZCOzs7Ozs7SUFJN0IscUNBQXdDOzs7Ozs7SUFJeEMsaUNBQW1GOzs7OztJQTJGbkYscUNBQWlDOzs7OztJQUtqQywyQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyB0c2xpbnQ6ZGlzYWJsZTogdmFyaWFibGUtbmFtZVxuXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIEhvc3RCaW5kaW5nLFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQnV0dG9uUmFkaW8gfSBmcm9tICcuL2J1dHRvbi1yYWRpby5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUmFkaW9DaGFuZ2UgfSBmcm9tICcuL2J1dHRvbi1yYWRpby1jaGFuZ2UuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLWJ1dHRvbi1yYWRpby1ncm91cCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJidXR0b24tcmFkaW8tZ3JvdXBcIlxuICAgICAgcm9sZT1cImJ1dHRvblJhZGlvZ3JvdXBcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQnV0dG9uUmFkaW9Hcm91cCxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgQnV0dG9uUmFkaW9Hcm91cCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgc3RhdGljIGJ1dHRvblJhZGlvR3JvdXBDb3VudCA9IDA7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyBvdGhlciBjbGFzc2VzIG9mIGEgY2hhbmdlIHVzaW5nIGEgYEJ1dHRvblJhZGlvQ2hhbmdlYCBjbGFzcy5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8QnV0dG9uUmFkaW9DaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25SYWRpb0NoYW5nZT4oKTtcblxuICAvKipcbiAgICogVGhlIGBCdXR0b25SYWRpb2AgaW5wdXQgaXRlbXMgaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCdXR0b25SYWRpbykpIGJ1dHRvblJhZGlvczogUXVlcnlMaXN0PEJ1dHRvblJhZGlvPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFzc2VkIGluIGBCdXR0b25SYWRpb2AgaXRlbSBhcyB0aGUgc2VsZWN0ZWQgaW5wdXQgd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IEJ1dHRvblJhZGlvIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkID8gc2VsZWN0ZWQudmFsdWUgOiBudWxsO1xuICAgIHRoaXMuY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYEJ1dHRvblJhZGlvYCB0aGF0IGlzIHNlbGVjdGVkIHdpdGhpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZS9zdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgYEJ1dHRvblJhZGlvYCB3aXRoaW4gdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB0byB0aGUgcGFzc2VkIGluIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkQnV0dG9uUmFkaW9Gcm9tVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlL3N0YXRlIG9mIHRoZSBzZWxlY3RlZCBgQnV0dG9uUmFkaW9gIHdpdGhpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBCdXR0b25SYWRpb0dyb3VwYCB3aXRoIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIG5hbWUgb2YgdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgdGhlIHdob2xlIGJ1dHRvblJhZGlvIGdyb3VwXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBza2VsZXRvbiB2YWx1ZSBpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgIGlmIHRoZXJlIGlzIG9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBza2VsZXRvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9za2VsZXRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBza2VsZXRvbiB2YWx1ZSBmb3IgYWxsIGBCdXR0b25SYWRpb2AgdG8gdGhlIHNrZWxldG9uIHZhbHVlIG9mIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIHNldCBza2VsZXRvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc2tlbGV0b24gPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgJ2Zvcm0taXRlbScgdmFsdWUgdG8gdGhlIGNsYXNzIGZvciBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0taXRlbScpIGJ1dHRvblJhZGlvQnV0dG9uR3JvdXBDbGFzcyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvIHRyYWNrIHdoZXRoZXIgdGhlIGBCdXR0b25SYWRpb0dyb3VwYCBoYXMgYmVlbiBpbml0aWFsaXplZC5cbiAgICovXG4gIHByb3RlY3RlZCBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgYW5kIGNhbm5vdCBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBkcm9wZG93biBpcyBsb2FkaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9za2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvcHRpb24gd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZhbHVlOiBhbnkgPSBudWxsO1xuICAvKipcbiAgICogVGhlIGBCdXR0b25SYWRpb2Agd2l0aGluIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdGhhdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWQ6IEJ1dHRvblJhZGlvID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBCdXR0b25SYWRpb0dyb3VwYC5cbiAgICovXG4gIHByb3RlY3RlZCBfbmFtZSA9IGBidXR0b24tcmFkaW8tZ3JvdXAtJHtCdXR0b25SYWRpb0dyb3VwLmJ1dHRvblJhZGlvR3JvdXBDb3VudCsrfWA7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGVkIGBCdXR0b25SYWRpb2AgdG8gYmUgY2hlY2tlZCAoc2VsZWN0ZWQpLlxuICAgKi9cbiAgY2hlY2tTZWxlY3RlZEJ1dHRvblJhZGlvKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkICYmICF0aGlzLl9zZWxlY3RlZC5jaGVja2VkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVc2UgdGhlIHZhbHVlIG9mIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdG8gdXBkYXRlIHRoZSBzZWxlY3RlZCBidXR0b25SYWRpbyB0byB0aGUgcmlnaHQgc3RhdGUgKHNlbGVjdGVkIHN0YXRlKS5cbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkQnV0dG9uUmFkaW9Gcm9tVmFsdWUoKSB7XG4gICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgIT0gbnVsbCAmJiB0aGlzLl9zZWxlY3RlZC52YWx1ZSA9PT0gdGhpcy5fdmFsdWU7XG5cbiAgICBpZiAodGhpcy5idXR0b25SYWRpb3MgJiYgIWFscmVhZHlTZWxlY3RlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBudWxsO1xuICAgICAgdGhpcy5idXR0b25SYWRpb3MuZm9yRWFjaChidXR0b25SYWRpbyA9PiB7XG4gICAgICAgIGlmIChidXR0b25SYWRpby5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBidXR0b25SYWRpbztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjbGFzcyBvZiBgQnV0dG9uUmFkaW9DaGFuZ2VgIHRvIGVtaXQgdGhlIGNoYW5nZSBpbiB0aGUgYEJ1dHRvblJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZW1pdENoYW5nZUV2ZW50KGV2ZW50OiBCdXR0b25SYWRpb0NoYW5nZSkge1xuICAgIHRoaXMuY2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgdXBkYXRlQnV0dG9uUmFkaW9OYW1lcygpIHtcbiAgICBjb25zb2xlLndhcm4oJ3VwZGF0ZUJ1dHRvblJhZGlvTmFtZXMgaGFkIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHVwZGF0ZUJ1dHRvblJhZGlvcyBpbnN0ZWFkJyk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgYnV0dG9uUmFkaW8gcHJvcGVydGllcy5cbiAgICovXG4gIHVwZGF0ZUJ1dHRvblJhZGlvcygpIHtcbiAgICBpZiAodGhpcy5idXR0b25SYWRpb3MpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGJ1dHRvblJhZGlvID0+IGJ1dHRvblJhZGlvLm5hbWUgPSB0aGlzLm5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHZhbHVlIG9mIHRoZSBgQnV0dG9uUmFkaW9Hcm91cGAgdXNpbmcgdGhlIHByb3ZpZGVkIHBhcmFtZXRlci5cbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLmJ1dHRvblJhZGlvcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvcygpO1xuICAgICAgdGhpcy51cGRhdGVCdXR0b25SYWRpb0NoYW5nZUhhbmRsZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLnVwZGF0ZUJ1dHRvblJhZGlvQ2hhbmdlSGFuZGxlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlQnV0dG9uUmFkaW9zKCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzZXQgbWV0aG9kIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm0uXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgY29udHJvbCBoYXMgYmVlbiB0b3VjaGVkLlxuICAgKiBAcGFyYW0gZm4gQ2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNoZWNrYm94IGlzIHRvdWNoZWQuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogTmVlZGVkIHRvIHByb3Blcmx5IGltcGxlbWVudCBDb250cm9sVmFsdWVBY2Nlc3Nvci5cbiAgICovXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG4gIC8qKlxuICAgKiBNZXRob2Qgc2V0IGluIHJlZ2lzdGVyT25DaGFuZ2UgdG8gcHJvcGFnYXRlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybS5cbiAgICovXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcblxuICBwcm90ZWN0ZWQgdXBkYXRlQ2hpbGRyZW4oKSB7XG4gICAgaWYgKHRoaXMuYnV0dG9uUmFkaW9zKSB7XG4gICAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGNoaWxkID0+IGNoaWxkLnNrZWxldG9uID0gdGhpcy5za2VsZXRvbik7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUJ1dHRvblJhZGlvQ2hhbmdlSGFuZGxlcigpIHtcbiAgICB0aGlzLmJ1dHRvblJhZGlvcy5mb3JFYWNoKGJ1dHRvblJhZGlvID0+IHtcbiAgICAgIGJ1dHRvblJhZGlvLnJlZ2lzdGVyQnV0dG9uUmFkaW9DaGFuZ2VIYW5kbGVyKChldmVudDogQnV0dG9uUmFkaW9DaGFuZ2UpID0+IHtcbiAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGVkIGFuZCB2YWx1ZSBmcm9tIHRoZSBldmVudFxuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGV2ZW50LnNvdXJjZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICAgICAgLy8gYnViYmxlIHRoZSBldmVudFxuICAgICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudChldmVudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19