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>

497 lines 30.8 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 { Radio } from './radio.component'; var RadioGroup = /** @class */ (function () { function RadioGroup() { this.orientation = 'horizontal'; this.radioLabelPlacement = 'right'; /** * Emits event notifying other classes of a change using a `RadioChange` class. */ // tslint:disable-next-line: no-output-native this.change = new EventEmitter(); /** * Set to true to disable the whole radio group */ this.disabled = false; /** * Binds 'form-item' value to the class for `RadioGroup`. */ this.radioButtonGroupClass = true; /** * To track whether the `RadioGroup` 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 `RadioGroup`. */ this._value = null; /** * The `Radio` within the `RadioGroup` that is selected. */ this._selected = null; /** * The name attribute associated with the `RadioGroup`. */ this._name = "radio-group-" + RadioGroup.radioGroupCount++; /** * 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(RadioGroup.prototype, "selected", { /** * Returns the `Radio` that is selected within the `RadioGroup`. */ get: /** * Returns the `Radio` that is selected within the `RadioGroup`. * @return {?} */ function () { return this._selected; }, /** * Sets the passed in `Radio` item as the selected input within the `RadioGroup`. */ set: /** * Sets the passed in `Radio` item as the selected input within the `RadioGroup`. * @param {?} selected * @return {?} */ function (selected) { this._selected = selected; this.value = selected ? selected.value : null; this.checkSelectedRadio(); }, enumerable: true, configurable: true }); Object.defineProperty(RadioGroup.prototype, "value", { /** * Returns the value/state of the selected `Radio` within the `RadioGroup`. */ get: /** * Returns the value/state of the selected `Radio` within the `RadioGroup`. * @return {?} */ function () { return this._value; }, /** * Sets the value/state of the selected `Radio` within the `RadioGroup` to the passed in value. */ set: /** * Sets the value/state of the selected `Radio` within the `RadioGroup` to the passed in value. * @param {?} newValue * @return {?} */ function (newValue) { if (this._value !== newValue) { this._value = newValue; this.updateSelectedRadioFromValue(); this.checkSelectedRadio(); } }, enumerable: true, configurable: true }); Object.defineProperty(RadioGroup.prototype, "name", { /** * Returns the associated name of the `RadioGroup`. */ get: /** * Returns the associated name of the `RadioGroup`. * @return {?} */ function () { return this._name; }, /** * Replaces the name associated with the `RadioGroup` with the provided parameter. */ set: /** * Replaces the name associated with the `RadioGroup` with the provided parameter. * @param {?} name * @return {?} */ function (name) { this._name = name; this.updateRadios(); }, enumerable: true, configurable: true }); Object.defineProperty(RadioGroup.prototype, "skeleton", { /** * Returns the skeleton value in the `RadioGroup` if there is one. */ get: /** * Returns the skeleton value in the `RadioGroup` if there is one. * @return {?} */ function () { return this._skeleton; }, /** * Sets the skeleton value for all `Radio` to the skeleton value of `RadioGroup`. */ set: /** * Sets the skeleton value for all `Radio` to the skeleton value of `RadioGroup`. * @param {?} value * @return {?} */ function (value) { this._skeleton = value; this.updateChildren(); }, enumerable: true, configurable: true }); /** * Updates the selected `Radio` to be checked (selected). */ /** * Updates the selected `Radio` to be checked (selected). * @return {?} */ RadioGroup.prototype.checkSelectedRadio = /** * Updates the selected `Radio` to be checked (selected). * @return {?} */ function () { if (this.selected && !this._selected.checked) { this.selected.checked = true; } }; /** * Use the value of the `RadioGroup` to update the selected radio to the right state (selected state). */ /** * Use the value of the `RadioGroup` to update the selected radio to the right state (selected state). * @return {?} */ RadioGroup.prototype.updateSelectedRadioFromValue = /** * Use the value of the `RadioGroup` to update the selected radio to the right state (selected state). * @return {?} */ function () { var _this = this; /** @type {?} */ var alreadySelected = this._selected != null && this._selected.value === this._value; if (this.radios && !alreadySelected) { this._selected = null; this.radios.forEach((/** * @param {?} radio * @return {?} */ function (radio) { if (radio.checked) { _this._selected = radio; } })); } }; /** * Creates a class of `RadioChange` to emit the change in the `RadioGroup`. */ /** * Creates a class of `RadioChange` to emit the change in the `RadioGroup`. * @param {?} event * @return {?} */ RadioGroup.prototype.emitChangeEvent = /** * Creates a class of `RadioChange` to emit the change in the `RadioGroup`. * @param {?} event * @return {?} */ function (event) { this.change.emit(event); this.propagateChange(event.value); this.onTouched(); }; /** * Synchronizes radio properties. */ /** * Synchronizes radio properties. * @return {?} */ RadioGroup.prototype.updateRadios = /** * Synchronizes radio properties. * @return {?} */ function () { var _this = this; if (this.radios) { setTimeout((/** * @return {?} */ function () { _this.radios.forEach((/** * @param {?} radio * @return {?} */ function (radio) { return radio.name = _this.name; })); if (_this.radioLabelPlacement === 'left') { _this.radios.forEach((/** * @param {?} radio * @return {?} */ function (radio) { return radio.labelPlacement = 'left'; })); } })); } }; /** * Updates the value of the `RadioGroup` using the provided parameter. */ /** * Updates the value of the `RadioGroup` using the provided parameter. * @param {?} value * @return {?} */ RadioGroup.prototype.writeValue = /** * Updates the value of the `RadioGroup` using the provided parameter. * @param {?} value * @return {?} */ function (value) { this.value = value; }; /** * @return {?} */ RadioGroup.prototype.ngAfterContentInit = /** * @return {?} */ function () { var _this = this; this.radios.changes.subscribe((/** * @return {?} */ function () { _this.updateRadios(); _this.updateRadioChangeHandler(); })); this.updateChildren(); this.updateRadioChangeHandler(); }; /** * @return {?} */ RadioGroup.prototype.ngAfterViewInit = /** * @return {?} */ function () { this.updateRadios(); }; /** * 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 {?} */ RadioGroup.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 {?} */ RadioGroup.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 {?} */ RadioGroup.prototype.updateChildren = /** * @protected * @return {?} */ function () { var _this = this; if (this.radios) { this.radios.forEach((/** * @param {?} child * @return {?} */ function (child) { return child.skeleton = _this.skeleton; })); } }; /** * @protected * @return {?} */ RadioGroup.prototype.updateRadioChangeHandler = /** * @protected * @return {?} */ function () { var _this = this; this.radios.forEach((/** * @param {?} radio * @return {?} */ function (radio) { radio.registerRadioChangeHandler((/** * @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); })); })); }; RadioGroup.radioGroupCount = 0; RadioGroup.decorators = [ { type: Component, args: [{ selector: 'suka-radio-group', template: "\n <div\n class=\"radio-button-group\"\n [ngClass]=\"{\n 'radio-button-group--vertical': orientation === 'vertical',\n 'radio-button-group--label-left': orientation === 'vertical' && radioLabelPlacement === 'left'\n }\"\n role=\"radiogroup\">\n <ng-content></ng-content>\n </div>\n ", providers: [ { provide: NG_VALUE_ACCESSOR, useExisting: RadioGroup, multi: true } ] }] } ]; RadioGroup.propDecorators = { orientation: [{ type: Input }], radioLabelPlacement: [{ type: Input }], change: [{ type: Output }], radios: [{ type: ContentChildren, args: [forwardRef((/** * @return {?} */ function () { return Radio; })),] }], selected: [{ type: Input }], value: [{ type: Input }], name: [{ type: Input }], disabled: [{ type: Input }], skeleton: [{ type: Input }], radioButtonGroupClass: [{ type: HostBinding, args: ['class.form-item',] }] }; return RadioGroup; }()); export { RadioGroup }; if (false) { /** @type {?} */ RadioGroup.radioGroupCount; /** @type {?} */ RadioGroup.prototype.orientation; /** @type {?} */ RadioGroup.prototype.radioLabelPlacement; /** * Emits event notifying other classes of a change using a `RadioChange` class. * @type {?} */ RadioGroup.prototype.change; /** * The `Radio` input items in the `RadioGroup`. * @type {?} */ RadioGroup.prototype.radios; /** * Set to true to disable the whole radio group * @type {?} */ RadioGroup.prototype.disabled; /** * Binds 'form-item' value to the class for `RadioGroup`. * @type {?} */ RadioGroup.prototype.radioButtonGroupClass; /** * To track whether the `RadioGroup` has been initialized. * @type {?} * @protected */ RadioGroup.prototype.isInitialized; /** * Reflects whether or not the input is disabled and cannot be selected. * @type {?} * @protected */ RadioGroup.prototype._disabled; /** * Reflects whether or not the dropdown is loading. * @type {?} * @protected */ RadioGroup.prototype._skeleton; /** * The value of the selected option within the `RadioGroup`. * @type {?} * @protected */ RadioGroup.prototype._value; /** * The `Radio` within the `RadioGroup` that is selected. * @type {?} * @protected */ RadioGroup.prototype._selected; /** * The name attribute associated with the `RadioGroup`. * @type {?} * @protected */ RadioGroup.prototype._name; /** * Needed to properly implement ControlValueAccessor. * @type {?} */ RadioGroup.prototype.onTouched; /** * Method set in registerOnChange to propagate changes back to the form. * @type {?} */ RadioGroup.prototype.propagateChange; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGt1c2hraS9uZy1zdWthLyIsInNvdXJjZXMiOlsibGliL3JhZGlvL3JhZGlvLWdyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLE9BQU8sRUFFTCxlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHMUM7SUFBQTtRQXlCVyxnQkFBVyxHQUE4QixZQUFZLENBQUM7UUFFdEQsd0JBQW1CLEdBQXFCLE9BQU8sQ0FBQzs7Ozs7UUFNL0MsV0FBTSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDOzs7O1FBOERyRSxhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBcUJNLDBCQUFxQixHQUFHLElBQUksQ0FBQzs7OztRQUtuRCxrQkFBYSxHQUFHLEtBQUssQ0FBQzs7OztRQUl0QixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWxCLGNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7UUFJbEIsV0FBTSxHQUFRLElBQUksQ0FBQzs7OztRQUluQixjQUFTLEdBQVUsSUFBSSxDQUFDOzs7O1FBSXhCLFVBQUssR0FBRyxpQkFBZSxVQUFVLENBQUMsZUFBZSxFQUFJLENBQUM7Ozs7UUF5RmhFLGNBQVM7OztRQUFjLGNBQVEsQ0FBQyxFQUFDOzs7O1FBS2pDLG9CQUFlOzs7O1FBQUcsVUFBQyxDQUFNLElBQU8sQ0FBQyxFQUFDO0lBbUJwQyxDQUFDO0lBbk5DLHNCQUNJLGdDQUFRO1FBTVo7O1dBRUc7Ozs7O1FBQ0g7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDeEIsQ0FB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Ozs7SUFNekQsNEJBQThFOzs7OztJQUs5RSw0QkFBbUU7Ozs7O0lBeURuRSw4QkFBMEI7Ozs7O0lBcUIxQiwyQ0FBNkQ7Ozs7OztJQUs3RCxtQ0FBZ0M7Ozs7OztJQUloQywrQkFBNEI7Ozs7OztJQUk1QiwrQkFBNEI7Ozs7OztJQUk1Qiw0QkFBNkI7Ozs7OztJQUk3QiwrQkFBa0M7Ozs7OztJQUlsQywyQkFBZ0U7Ozs7O0lBeUZoRSwrQkFBaUM7Ozs7O0lBS2pDLHFDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiB2YXJpYWJsZS1uYW1lXG5cbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgSG9zdEJpbmRpbmcsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiwgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSYWRpbyB9IGZyb20gJy4vcmFkaW8uY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvQ2hhbmdlIH0gZnJvbSAnLi9yYWRpby1jaGFuZ2UuY2xhc3MnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLXJhZGlvLWdyb3VwJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJhZGlvLWJ1dHRvbi1ncm91cFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdyYWRpby1idXR0b24tZ3JvdXAtLXZlcnRpY2FsJzogb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcsXG4gICAgICAgICdyYWRpby1idXR0b24tZ3JvdXAtLWxhYmVsLWxlZnQnOiBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiByYWRpb0xhYmVsUGxhY2VtZW50ID09PSAnbGVmdCdcbiAgICAgIH1cIlxuICAgICAgcm9sZT1cInJhZGlvZ3JvdXBcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogUmFkaW9Hcm91cCxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgUmFkaW9Hcm91cCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgc3RhdGljIHJhZGlvR3JvdXBDb3VudCA9IDA7XG5cbiAgQElucHV0KCkgb3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cbiAgQElucHV0KCkgcmFkaW9MYWJlbFBsYWNlbWVudDogJ3JpZ2h0JyB8ICdsZWZ0JyA9ICdyaWdodCc7XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyBvdGhlciBjbGFzc2VzIG9mIGEgY2hhbmdlIHVzaW5nIGEgYFJhZGlvQ2hhbmdlYCBjbGFzcy5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8UmFkaW9DaGFuZ2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxSYWRpb0NoYW5nZT4oKTtcblxuICAvKipcbiAgICogVGhlIGBSYWRpb2AgaW5wdXQgaXRlbXMgaW4gdGhlIGBSYWRpb0dyb3VwYC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBSYWRpbykpIHJhZGlvczogUXVlcnlMaXN0PFJhZGlvPjtcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFzc2VkIGluIGBSYWRpb2AgaXRlbSBhcyB0aGUgc2VsZWN0ZWQgaW5wdXQgd2l0aGluIHRoZSBgUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQ6IFJhZGlvIHwgbnVsbCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZSA9IHNlbGVjdGVkID8gc2VsZWN0ZWQudmFsdWUgOiBudWxsO1xuICAgIHRoaXMuY2hlY2tTZWxlY3RlZFJhZGlvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYFJhZGlvYCB0aGF0IGlzIHNlbGVjdGVkIHdpdGhpbiB0aGUgYFJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZS9zdGF0ZSBvZiB0aGUgc2VsZWN0ZWQgYFJhZGlvYCB3aXRoaW4gdGhlIGBSYWRpb0dyb3VwYCB0byB0aGUgcGFzc2VkIGluIHZhbHVlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkUmFkaW9Gcm9tVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZFJhZGlvKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlL3N0YXRlIG9mIHRoZSBzZWxlY3RlZCBgUmFkaW9gIHdpdGhpbiB0aGUgYFJhZGlvR3JvdXBgLlxuICAgKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBSYWRpb0dyb3VwYCB3aXRoIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgbmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICB0aGlzLnVwZGF0ZVJhZGlvcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhc3NvY2lhdGVkIG5hbWUgb2YgdGhlIGBSYWRpb0dyb3VwYC5cbiAgICovXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgdGhlIHdob2xlIHJhZGlvIGdyb3VwXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBza2VsZXRvbiB2YWx1ZSBpbiB0aGUgYFJhZGlvR3JvdXBgIGlmIHRoZXJlIGlzIG9uZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBza2VsZXRvbigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9za2VsZXRvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBza2VsZXRvbiB2YWx1ZSBmb3IgYWxsIGBSYWRpb2AgdG8gdGhlIHNrZWxldG9uIHZhbHVlIG9mIGBSYWRpb0dyb3VwYC5cbiAgICovXG4gIHNldCBza2VsZXRvbih2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fc2tlbGV0b24gPSB2YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgJ2Zvcm0taXRlbScgdmFsdWUgdG8gdGhlIGNsYXNzIGZvciBgUmFkaW9Hcm91cGAuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZvcm0taXRlbScpIHJhZGlvQnV0dG9uR3JvdXBDbGFzcyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFRvIHRyYWNrIHdoZXRoZXIgdGhlIGBSYWRpb0dyb3VwYCBoYXMgYmVlbiBpbml0aWFsaXplZC5cbiAgICovXG4gIHByb3RlY3RlZCBpc0luaXRpYWxpemVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgaW5wdXQgaXMgZGlzYWJsZWQgYW5kIGNhbm5vdCBiZSBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHdoZXRoZXIgb3Igbm90IHRoZSBkcm9wZG93biBpcyBsb2FkaW5nLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9za2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBzZWxlY3RlZCBvcHRpb24gd2l0aGluIHRoZSBgUmFkaW9Hcm91cGAuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ZhbHVlOiBhbnkgPSBudWxsO1xuICAvKipcbiAgICogVGhlIGBSYWRpb2Agd2l0aGluIHRoZSBgUmFkaW9Hcm91cGAgdGhhdCBpcyBzZWxlY3RlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfc2VsZWN0ZWQ6IFJhZGlvID0gbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIGF0dHJpYnV0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGBSYWRpb0dyb3VwYC5cbiAgICovXG4gIHByb3RlY3RlZCBfbmFtZSA9IGByYWRpby1ncm91cC0ke1JhZGlvR3JvdXAucmFkaW9Hcm91cENvdW50Kyt9YDtcblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc2VsZWN0ZWQgYFJhZGlvYCB0byBiZSBjaGVja2VkIChzZWxlY3RlZCkuXG4gICAqL1xuICBjaGVja1NlbGVjdGVkUmFkaW8oKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQgJiYgIXRoaXMuX3NlbGVjdGVkLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuY2hlY2tlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0aGUgdmFsdWUgb2YgdGhlIGBSYWRpb0dyb3VwYCB0byB1cGRhdGUgdGhlIHNlbGVjdGVkIHJhZGlvIHRvIHRoZSByaWdodCBzdGF0ZSAoc2VsZWN0ZWQgc3RhdGUpLlxuICAgKi9cbiAgdXBkYXRlU2VsZWN0ZWRSYWRpb0Zyb21WYWx1ZSgpIHtcbiAgICBjb25zdCBhbHJlYWR5U2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZCAhPSBudWxsICYmIHRoaXMuX3NlbGVjdGVkLnZhbHVlID09PSB0aGlzLl92YWx1ZTtcblxuICAgIGlmICh0aGlzLnJhZGlvcyAmJiAhYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9IG51bGw7XG4gICAgICB0aGlzLnJhZGlvcy5mb3JFYWNoKHJhZGlvID0+IHtcbiAgICAgICAgaWYgKHJhZGlvLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHJhZGlvO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNsYXNzIG9mIGBSYWRpb0NoYW5nZWAgdG8gZW1pdCB0aGUgY2hhbmdlIGluIHRoZSBgUmFkaW9Hcm91cGAuXG4gICAqL1xuICBlbWl0Q2hhbmdlRXZlbnQoZXZlbnQ6IFJhZGlvQ2hhbmdlKSB7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UoZXZlbnQudmFsdWUpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemVzIHJhZGlvIHByb3BlcnRpZXMuXG4gICAqL1xuICB1cGRhdGVSYWRpb3MoKSB7XG4gICAgaWYgKHRoaXMucmFkaW9zKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaChyYWRpbyA9PiByYWRpby5uYW1lID0gdGhpcy5uYW1lKTtcbiAgICAgICAgaWYgKHRoaXMucmFkaW9MYWJlbFBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaChyYWRpbyA9PiByYWRpby5sYWJlbFBsYWNlbWVudCA9ICdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB2YWx1ZSBvZiB0aGUgYFJhZGlvR3JvdXBgIHVzaW5nIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXIuXG4gICAqL1xuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5yYWRpb3MuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVSYWRpb3MoKTtcbiAgICAgIHRoaXMudXBkYXRlUmFkaW9DaGFuZ2VIYW5kbGVyKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gICAgdGhpcy51cGRhdGVSYWRpb0NoYW5nZUhhbmRsZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVJhZGlvcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IG1ldGhvZCB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjaGVja2JveCBpcyB0b3VjaGVkLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZWRlZCB0byBwcm9wZXJseSBpbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAqL1xuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuICAvKipcbiAgICogTWV0aG9kIHNldCBpbiByZWdpc3Rlck9uQ2hhbmdlIHRvIHByb3BhZ2F0ZSBjaGFuZ2VzIGJhY2sgdG8gdGhlIGZvcm0uXG4gICAqL1xuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUNoaWxkcmVuKCkge1xuICAgIGlmICh0aGlzLnJhZGlvcykge1xuICAgICAgdGhpcy5yYWRpb3MuZm9yRWFjaChjaGlsZCA9PiBjaGlsZC5za2VsZXRvbiA9IHRoaXMuc2tlbGV0b24pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVSYWRpb0NoYW5nZUhhbmRsZXIoKSB7XG4gICAgdGhpcy5yYWRpb3MuZm9yRWFjaChyYWRpbyA9PiB7XG4gICAgICByYWRpby5yZWdpc3RlclJhZGlvQ2hhbmdlSGFuZGxlcigoZXZlbnQ6IFJhZGlvQ2hhbmdlKSA9PiB7XG4gICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZCBhbmQgdmFsdWUgZnJvbSB0aGUgZXZlbnRcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBldmVudC5zb3VyY2U7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQudmFsdWU7XG4gICAgICAgIC8vIGJ1YmJsZSB0aGUgZXZlbnRcbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQoZXZlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==