@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>
418 lines • 26.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, HostBinding } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
/** @enum {number} */
var ToggleState = {
Init: 0,
Checked: 1,
Unchecked: 2,
};
export { ToggleState };
ToggleState[ToggleState.Init] = 'Init';
ToggleState[ToggleState.Checked] = 'Checked';
ToggleState[ToggleState.Unchecked] = 'Unchecked';
var ToggleChange = /** @class */ (function () {
function ToggleChange() {
}
return ToggleChange;
}());
export { ToggleChange };
if (false) {
/** @type {?} */
ToggleChange.prototype.source;
/** @type {?} */
ToggleChange.prototype.checked;
}
var Toggle = /** @class */ (function () {
/**
* Creates an instance of `Toggle`.
*/
function Toggle(changeDetectorRef) {
this.changeDetectorRef = changeDetectorRef;
/**
* Set to `true` for toggle to be rendered without any classes on the host element.
*/
this.inline = false;
/**
* Set to `true` for a disabled toggle.
*/
this.disabled = false;
/**
* Set to `true` for a loading toggle.
*/
this.skeleton = false;
/**
* Set to `true` to hide the toggle labels.
*/
this.hideLabel = false;
/**
* The unique id for the toggle component.
*/
this.id = "toggle-" + Toggle.toggleCount;
/**
* Used to set the `aria-label` attribute on the input element.
*/
// tslint:disable-next-line:no-input-rename
this.ariaLabel = '';
/**
* Horizontal distribution of elements
*/
this.distribution = 'equalSpacing';
/**
* Emits event notifying other classes when a change in state occurs on a toggle after a
* click.
*/
// tslint:disable-next-line: no-output-native
this.change = new EventEmitter();
/**
* Set to `true` if the input toggle is selected (or checked).
*/
// tslint:disable-next-line: variable-name
this._checked = false;
this.currentToggleState = ToggleState.Init;
/**
* Called when toggle is blurred. 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 (_) { });
Toggle.toggleCount++;
}
Object.defineProperty(Toggle.prototype, "checked", {
/**
* Returns value `true` if state is selected for the toggle.
*/
get: /**
* Returns value `true` if state is selected for the toggle.
* @return {?}
*/
function () {
return this._checked;
},
/**
* Updating the state of a toggle to match the state of the parameter passed in.
*/
set: /**
* Updating the state of a toggle to match the state of the parameter passed in.
* @param {?} checked
* @return {?}
*/
function (checked) {
if (checked !== this.checked) {
this._checked = checked;
this.changeDetectorRef.markForCheck();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(Toggle.prototype, "toggleWrapperClass", {
get: /**
* @return {?}
*/
function () {
return !this.inline;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Toggle.prototype, "formItemClass", {
get: /**
* @return {?}
*/
function () {
return !this.inline;
},
enumerable: true,
configurable: true
});
/**
* Toggle the selected state of the toggle.
*/
/**
* Toggle the selected state of the toggle.
* @return {?}
*/
Toggle.prototype.toggle = /**
* Toggle the selected state of the toggle.
* @return {?}
*/
function () {
this.checked = !this.checked;
};
// this is the initial value set to the component
// this is the initial value set to the component
/**
* @param {?} value
* @return {?}
*/
Toggle.prototype.writeValue =
// this is the initial value set to the component
/**
* @param {?} value
* @return {?}
*/
function (value) {
this.checked = !!value;
};
/**
* Sets a method in order to propagate changes back to the form.
*/
/**
* Sets a method in order to propagate changes back to the form.
* @param {?} fn
* @return {?}
*/
Toggle.prototype.registerOnChange = /**
* Sets a method in order 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 toggle is touched.
*/
/**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the toggle is touched.
* @return {?}
*/
Toggle.prototype.registerOnTouched = /**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the toggle is touched.
* @return {?}
*/
function (fn) {
this.onTouched = fn;
};
/**
* Executes on the event of a change within `Toggle` to block propagation.
*/
/**
* Executes on the event of a change within `Toggle` to block propagation.
* @param {?} event
* @return {?}
*/
Toggle.prototype.onChange = /**
* Executes on the event of a change within `Toggle` to block propagation.
* @param {?} event
* @return {?}
*/
function (event) {
event.stopPropagation();
};
/**
* Handles click events on the `Toggle` and emits changes to other classes.
*/
/**
* Handles click events on the `Toggle` and emits changes to other classes.
* @param {?} event
* @return {?}
*/
Toggle.prototype.onClick = /**
* Handles click events on the `Toggle` and emits changes to other classes.
* @param {?} event
* @return {?}
*/
function (event) {
if (!this.disabled) {
this.toggle();
this.transitionToggleState(this._checked ? ToggleState.Checked : ToggleState.Unchecked);
this.emitChangeEvent();
}
};
/**
* Handles changes between toggle states.
*/
/**
* Handles changes between toggle states.
* @param {?} newState
* @return {?}
*/
Toggle.prototype.transitionToggleState = /**
* Handles changes between toggle states.
* @param {?} newState
* @return {?}
*/
function (newState) {
this.currentToggleState = newState;
};
/**
* Creates instance of `ToggleChange` used to propagate the change event.
*/
/**
* Creates instance of `ToggleChange` used to propagate the change event.
* @return {?}
*/
Toggle.prototype.emitChangeEvent = /**
* Creates instance of `ToggleChange` used to propagate the change event.
* @return {?}
*/
function () {
/** @type {?} */
var event = new ToggleChange();
event.source = this;
event.checked = this.checked;
this.propagateChange(this.checked);
this.change.emit(event);
};
/**
* Variable used for creating unique ids for toggle components.
*/
Toggle.toggleCount = 0;
Toggle.decorators = [
{ type: Component, args: [{
selector: 'suka-toggle',
template: "\n <label\n class=\"\n toggle\n toggle--distribution-{{distribution}}\n \"\n [ngClass]=\"{\n 'skeleton' : skeleton,\n 'disabled': disabled\n }\"\n >\n <ng-content></ng-content>\n <input\n type=\"checkbox\"\n [id]=\"id\"\n [value]=\"value\"\n [name]=\"name\"\n [required]=\"required\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"checked\"\n (change)=\"onChange($event)\"\n (click)=\"onClick($event)\"\n />\n <span class=\"toggle-body\">\n <span class=\"toggle-switch\"></span>\n <span class=\"toggle-track\">\n <span class=\"toggle-bg\"></span>\n <span class=\"toggle-bg toggle-bg_negative\"></span>\n </span>\n </span>\n </label>\n ",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: Toggle,
multi: true
}
],
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
Toggle.ctorParameters = function () { return [
{ type: ChangeDetectorRef }
]; };
Toggle.propDecorators = {
nested: [{ type: Input }],
inline: [{ type: Input }],
disabled: [{ type: Input }],
skeleton: [{ type: Input }],
hideLabel: [{ type: Input }],
name: [{ type: Input }],
id: [{ type: Input }],
required: [{ type: Input }],
value: [{ type: Input }],
ariaLabel: [{ type: Input, args: ['aria-label',] }],
ariaLabelledby: [{ type: Input, args: ['aria-labelledby',] }],
distribution: [{ type: Input }],
checked: [{ type: Input }],
toggleWrapperClass: [{ type: HostBinding, args: ['class.toggle-wrapper',] }],
formItemClass: [{ type: HostBinding, args: ['class.form-item',] }],
change: [{ type: Output }],
inputToggle: [{ type: ViewChild, args: ['inputToggle', { static: true },] }]
};
return Toggle;
}());
export { Toggle };
if (false) {
/**
* Variable used for creating unique ids for toggle components.
* @type {?}
*/
Toggle.toggleCount;
/**
* Set to `true` for toggle to be rendered with nested styles.
* @type {?}
*/
Toggle.prototype.nested;
/**
* Set to `true` for toggle to be rendered without any classes on the host element.
* @type {?}
*/
Toggle.prototype.inline;
/**
* Set to `true` for a disabled toggle.
* @type {?}
*/
Toggle.prototype.disabled;
/**
* Set to `true` for a loading toggle.
* @type {?}
*/
Toggle.prototype.skeleton;
/**
* Set to `true` to hide the toggle labels.
* @type {?}
*/
Toggle.prototype.hideLabel;
/**
* Sets the name attribute on the `input` element.
* @type {?}
*/
Toggle.prototype.name;
/**
* The unique id for the toggle component.
* @type {?}
*/
Toggle.prototype.id;
/**
* Reflects the required attribute of the `input` element.
* @type {?}
*/
Toggle.prototype.required;
/**
* Sets the value attribute on the `input` element.
* @type {?}
*/
Toggle.prototype.value;
/**
* Used to set the `aria-label` attribute on the input element.
* @type {?}
*/
Toggle.prototype.ariaLabel;
/**
* Used to set the `aria-labelledby` attribute on the input element.
* @type {?}
*/
Toggle.prototype.ariaLabelledby;
/**
* Horizontal distribution of elements
* @type {?}
*/
Toggle.prototype.distribution;
/**
* Emits event notifying other classes when a change in state occurs on a toggle after a
* click.
* @type {?}
*/
Toggle.prototype.change;
/**
* Set to `true` if the input toggle is selected (or checked).
* @type {?}
*/
Toggle.prototype._checked;
/** @type {?} */
Toggle.prototype.currentToggleState;
/**
* Maintains a reference to the view DOM element of the `Toggle`.
* @type {?}
*/
Toggle.prototype.inputToggle;
/**
* Called when toggle is blurred. Needed to properly implement `ControlValueAccessor`.
* @type {?}
*/
Toggle.prototype.onTouched;
/**
* Method set in `registerOnChange` to propagate changes back to the form.
* @type {?}
*/
Toggle.prototype.propagateChange;
/**
* @type {?}
* @protected
*/
Toggle.prototype.changeDetectorRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0lBSXZFLE9BQUk7SUFDSixVQUFPO0lBQ1AsWUFBUzs7Ozs7O0FBR1g7SUFBQTtJQUdBLENBQUM7SUFBRCxtQkFBQztBQUFELENBQUMsQUFIRCxJQUdDOzs7O0lBRkMsOEJBQWU7O0lBQ2YsK0JBQWlCOztBQUluQjtJQXNKRTs7T0FFRztJQUNILGdCQUFzQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjs7OztRQTdGakQsV0FBTSxHQUFHLEtBQUssQ0FBQzs7OztRQUlmLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBUWxCLE9BQUUsR0FBRyxZQUFVLE1BQU0sQ0FBQyxXQUFhLENBQUM7Ozs7O1FBYXhCLGNBQVMsR0FBRyxFQUFFLENBQUM7Ozs7UUFXM0IsaUJBQVksR0FBdUQsY0FBYyxDQUFDOzs7Ozs7UUErQmpGLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQzs7Ozs7UUFNcEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix1QkFBa0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQzs7OztRQThEbkQsY0FBUzs7O1FBQWMsY0FBUSxDQUFDLEVBQUM7Ozs7UUF3QmpDLG9CQUFlOzs7O1FB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QkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7Ozs7Z0JBckVDLGlCQUFpQjs7O3lCQWdGaEIsS0FBSzt5QkFJTCxLQUFLOzJCQUlMLEtBQUs7MkJBSUwsS0FBSzs0QkFJTCxLQUFLO3VCQUlMLEtBQUs7cUJBSUwsS0FBSzsyQkFJTCxLQUFLO3dCQUlMLEtBQUs7NEJBS0wsS0FBSyxTQUFDLFlBQVk7aUNBS2xCLEtBQUssU0FBQyxpQkFBaUI7K0JBTXZCLEtBQUs7MEJBWUwsS0FBSztxQ0FPTCxXQUFXLFNBQUMsc0JBQXNCO2dDQUdsQyxXQUFXLFNBQUMsaUJBQWlCO3lCQVM3QixNQUFNOzhCQWFOLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOztJQWtGNUMsYUFBQztDQUFBLEFBdE9ELElBc09DO1NBdkxZLE1BQU07Ozs7OztJQUlqQixtQkFBdUI7Ozs7O0lBS3ZCLHdCQUF5Qjs7Ozs7SUFJekIsd0JBQXdCOzs7OztJQUl4QiwwQkFBMEI7Ozs7O0lBSTFCLDBCQUEwQjs7Ozs7SUFJMUIsMkJBQTJCOzs7OztJQUkzQixzQkFBc0I7Ozs7O0lBSXRCLG9CQUE2Qzs7Ozs7SUFJN0MsMEJBQTJCOzs7OztJQUkzQix1QkFBdUI7Ozs7O0lBS3ZCLDJCQUFvQzs7Ozs7SUFLcEMsZ0NBQWlEOzs7OztJQU1qRCw4QkFBMkY7Ozs7OztJQStCM0Ysd0JBQW9EOzs7OztJQU1wRCwwQkFBaUI7O0lBRWpCLG9DQUFtRDs7Ozs7SUFLbkQsNkJBQW9FOzs7OztJQXlEcEUsMkJBQWlDOzs7OztJQXdCakMsaUNBQWtDOzs7OztJQTVFdEIsbUNBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBIb3N0QmluZGluZ1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuXG5leHBvcnQgZW51bSBUb2dnbGVTdGF0ZSB7XG4gIEluaXQsXG4gIENoZWNrZWQsXG4gIFVuY2hlY2tlZFxufVxuXG5leHBvcnQgY2xhc3MgVG9nZ2xlQ2hhbmdlIHtcbiAgc291cmNlOiBUb2dnbGU7XG4gIGNoZWNrZWQ6IGJvb2xlYW47XG59XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VrYS10b2dnbGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgdG9nZ2xlXG4gICAgICAgIHRvZ2dsZS0tZGlzdHJpYnV0aW9uLXt7ZGlzdHJpYnV0aW9ufX1cbiAgICAgIFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdza2VsZXRvbicgOiBza2VsZXRvbixcbiAgICAgICAgJ2Rpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxpbnB1dFxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW2NoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZGJ5XCJcbiAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1ib2R5XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLXN3aXRjaFwiPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtdHJhY2tcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1iZ1wiPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1iZyB0b2dnbGUtYmdfbmVnYXRpdmVcIj48L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2xhYmVsPlxuICBgLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBUb2dnbGUsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBUb2dnbGUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZSB1c2VkIGZvciBjcmVhdGluZyB1bmlxdWUgaWRzIGZvciB0b2dnbGUgY29tcG9uZW50cy5cbiAgICovXG4gIHN0YXRpYyB0b2dnbGVDb3VudCA9IDA7XG5cbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIHRvZ2dsZSB0byBiZSByZW5kZXJlZCB3aXRoIG5lc3RlZCBzdHlsZXMuXG4gICAqL1xuICBASW5wdXQoKSBuZXN0ZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciB0b2dnbGUgdG8gYmUgcmVuZGVyZWQgd2l0aG91dCBhbnkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgaW5saW5lID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGRpc2FibGVkIHRvZ2dsZS5cbiAgICovXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGxvYWRpbmcgdG9nZ2xlLlxuICAgKi9cbiAgQElucHV0KCkgc2tlbGV0b24gPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgdG8gaGlkZSB0aGUgdG9nZ2xlIGxhYmVscy5cbiAgICovXG4gIEBJbnB1dCgpIGhpZGVMYWJlbCA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0cyB0aGUgbmFtZSBhdHRyaWJ1dGUgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWQgZm9yIHRoZSB0b2dnbGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgdG9nZ2xlLSR7VG9nZ2xlLnRvZ2dsZUNvdW50fWA7XG4gIC8qKlxuICAgKiBSZWZsZWN0cyB0aGUgcmVxdWlyZWQgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHRoZSBgYXJpYS1sYWJlbGAgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2FyaWEtbGFiZWwnKSBhcmlhTGFiZWwgPSAnJztcbiAgLyoqXG4gICAqIFVzZWQgdG8gc2V0IHRoZSBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkYnk6IHN0cmluZztcblxuXG4gIC8qKlxuICAgKiAgSG9yaXpvbnRhbCBkaXN0cmlidXRpb24gb2YgZWxlbWVudHNcbiAgICovXG4gIEBJbnB1dCgpIGRpc3RyaWJ1dGlvbjogJ2xlYWRpbmcnIHwgJ3RyYWlsaW5nJyB8ICdlcXVhbFNwYWNpbmcnIHwgJ2NlbnRlcicgPSAnZXF1YWxTcGFjaW5nJztcblxuICAvKipcbiAgICogUmV0dXJucyB2YWx1ZSBgdHJ1ZWAgaWYgc3RhdGUgaXMgc2VsZWN0ZWQgZm9yIHRoZSB0b2dnbGUuXG4gICAqL1xuICBnZXQgY2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGluZyB0aGUgc3RhdGUgb2YgYSB0b2dnbGUgdG8gbWF0Y2ggdGhlIHN0YXRlIG9mIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIGluLlxuICAgKi9cbiAgQElucHV0KCkgc2V0IGNoZWNrZWQoY2hlY2tlZDogYm9vbGVhbikge1xuICAgIGlmIChjaGVja2VkICE9PSB0aGlzLmNoZWNrZWQpIHtcbiAgICAgIHRoaXMuX2NoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRvZ2dsZS13cmFwcGVyJykgZ2V0IHRvZ2dsZVdyYXBwZXJDbGFzcygpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5saW5lO1xuICB9XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZm9ybS1pdGVtJykgZ2V0IGZvcm1JdGVtQ2xhc3MoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlubGluZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCBub3RpZnlpbmcgb3RoZXIgY2xhc3NlcyB3aGVuIGEgY2hhbmdlIGluIHN0YXRlIG9jY3VycyBvbiBhIHRvZ2dsZSBhZnRlciBhXG4gICAqIGNsaWNrLlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRvZ2dsZUNoYW5nZT4oKTtcblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBpZiB0aGUgaW5wdXQgdG9nZ2xlIGlzIHNlbGVjdGVkIChvciBjaGVja2VkKS5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdmFyaWFibGUtbmFtZVxuICBfY2hlY2tlZCA9IGZhbHNlO1xuXG4gIGN1cnJlbnRUb2dnbGVTdGF0ZTogVG9nZ2xlU3RhdGUgPSBUb2dnbGVTdGF0ZS5Jbml0O1xuXG4gIC8qKlxuICAgKiBNYWludGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZpZXcgRE9NIGVsZW1lbnQgb2YgdGhlIGBUb2dnbGVgLlxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaW5wdXRUb2dnbGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpbnB1dFRvZ2dsZTogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgVG9nZ2xlYC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBUb2dnbGUudG9nZ2xlQ291bnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSB0b2dnbGUuXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgIHRoaXMuY2hlY2tlZCA9ICF0aGlzLmNoZWNrZWQ7XG4gIH1cblxuICAvLyB0aGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlIHNldCB0byB0aGUgY29tcG9uZW50XG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmNoZWNrZWQgPSAhIXZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBtZXRob2QgaW4gb3JkZXIgdG8gcHJvcGFnYXRlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBjb250cm9sIGhhcyBiZWVuIHRvdWNoZWQuXG4gICAqIEBwYXJhbSBmbiBDYWxsYmFjayB0byBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgdG9nZ2xlIGlzIHRvdWNoZWQuXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgb24gdGhlIGV2ZW50IG9mIGEgY2hhbmdlIHdpdGhpbiBgVG9nZ2xlYCB0byBibG9jayBwcm9wYWdhdGlvbi5cbiAgICovXG4gIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBjbGljayBldmVudHMgb24gdGhlIGBUb2dnbGVgIGFuZCBlbWl0cyBjaGFuZ2VzIHRvIG90aGVyIGNsYXNzZXMuXG4gICAqL1xuICBvbkNsaWNrKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG9nZ2xlU3RhdGUodGhpcy5fY2hlY2tlZCA/IFRvZ2dsZVN0YXRlLkNoZWNrZWQgOiBUb2dnbGVTdGF0ZS5VbmNoZWNrZWQpO1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdG9nZ2xlIGlzIGJsdXJyZWQuIE5lZWRlZCB0byBwcm9wZXJseSBpbXBsZW1lbnQgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYC5cbiAgICovXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNoYW5nZXMgYmV0d2VlbiB0b2dnbGUgc3RhdGVzLlxuICAgKi9cbiAgdHJhbnNpdGlvblRvZ2dsZVN0YXRlKG5ld1N0YXRlOiBUb2dnbGVTdGF0ZSkge1xuICAgIHRoaXMuY3VycmVudFRvZ2dsZVN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBpbnN0YW5jZSBvZiBgVG9nZ2xlQ2hhbmdlYCB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgZW1pdENoYW5nZUV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFRvZ2dsZUNoYW5nZSgpO1xuICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgZXZlbnQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcblxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHNldCBpbiBgcmVnaXN0ZXJPbkNoYW5nZWAgdG8gcHJvcGFnYXRlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybS5cbiAgICovXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcbn1cbiJdfQ==