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>

423 lines 26.7 kB
/** * @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) { /** @type {?} */ var oldState = this.currentToggleState; if (oldState === newState) { return; } 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0lBSXZFLE9BQUk7SUFDSixVQUFPO0lBQ1AsWUFBUzs7Ozs7O0FBR1g7SUFBQTtJQUdBLENBQUM7SUFBRCxtQkFBQztBQUFELENBQUMsQUFIRCxJQUdDOzs7O0lBRkMsOEJBQWU7O0lBQ2YsK0JBQWlCOztBQUluQjtJQXNKRTs7T0FFRztJQUNILGdCQUFzQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjs7OztRQTdGakQsV0FBTSxHQUFHLEtBQUssQ0FBQzs7OztRQUlmLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixjQUFTLEdBQUcsS0FBSyxDQUFDOzs7O1FBUWxCLE9BQUUsR0FBRyxZQUFVLE1BQU0sQ0FBQyxXQUFhLENBQUM7Ozs7O1FBYXhCLGNBQVMsR0FBRyxFQUFFLENBQUM7Ozs7UUFXM0IsaUJBQVksR0FBdUQsY0FBYyxDQUFDOzs7Ozs7UUErQmpGLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQzs7Ozs7UUFNcEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQix1QkFBa0IsR0FBZ0IsV0FBVyxDQUFDLElBQUksQ0FBQzs7OztRQStEbkQsY0FBUzs7O1FBQWMsY0FBUSxDQUFDLEVBQUM7Ozs7UUE4QmpDLG9CQUFlOzs7O1FB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NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLE1BQU07NEJBQ25CLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs7OztnQkFyRUMsaUJBQWlCOzs7eUJBZ0ZoQixLQUFLO3lCQUlMLEtBQUs7MkJBSUwsS0FBSzsyQkFJTCxLQUFLOzRCQUlMLEtBQUs7dUJBSUwsS0FBSztxQkFJTCxLQUFLOzJCQUlMLEtBQUs7d0JBSUwsS0FBSzs0QkFLTCxLQUFLLFNBQUMsWUFBWTtpQ0FLbEIsS0FBSyxTQUFDLGlCQUFpQjsrQkFNdkIsS0FBSzswQkFZTCxLQUFLO3FDQU9MLFdBQVcsU0FBQyxzQkFBc0I7Z0NBR2xDLFdBQVcsU0FBQyxpQkFBaUI7eUJBUzdCLE1BQU07OEJBYU4sU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7O0lBeUY1QyxhQUFDO0NBQUEsQUE3T0QsSUE2T0M7U0E5TFksTUFBTTs7Ozs7O0lBSWpCLG1CQUF1Qjs7Ozs7SUFLdkIsd0JBQXlCOzs7OztJQUl6Qix3QkFBd0I7Ozs7O0lBSXhCLDBCQUEwQjs7Ozs7SUFJMUIsMEJBQTBCOzs7OztJQUkxQiwyQkFBMkI7Ozs7O0lBSTNCLHNCQUFzQjs7Ozs7SUFJdEIsb0JBQTZDOzs7OztJQUk3QywwQkFBMkI7Ozs7O0lBSTNCLHVCQUF1Qjs7Ozs7SUFLdkIsMkJBQW9DOzs7OztJQUtwQyxnQ0FBaUQ7Ozs7O0lBTWpELDhCQUEyRjs7Ozs7O0lBK0IzRix3QkFBb0Q7Ozs7O0lBTXBELDBCQUFpQjs7SUFFakIsb0NBQW1EOzs7OztJQUtuRCw2QkFBb0U7Ozs7O0lBMERwRSwyQkFBaUM7Ozs7O0lBOEJqQyxpQ0FBa0M7Ozs7O0lBbkZ0QixtQ0FBOEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5cbmV4cG9ydCBlbnVtIFRvZ2dsZVN0YXRlIHtcbiAgSW5pdCxcbiAgQ2hlY2tlZCxcbiAgVW5jaGVja2VkXG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGVDaGFuZ2Uge1xuICBzb3VyY2U6IFRvZ2dsZTtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLXRvZ2dsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cIlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgdG9nZ2xlLS1kaXN0cmlidXRpb24te3tkaXN0cmlidXRpb259fVxuICAgICAgXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NrZWxldG9uJyA6IHNrZWxldG9uLFxuICAgICAgICAnZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJvZHlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtc3dpdGNoXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS10cmFja1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJnXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJnIHRvZ2dsZS1iZ19uZWdhdGl2ZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFRvZ2dsZSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIFRvZ2dsZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHVzZWQgZm9yIGNyZWF0aW5nIHVuaXF1ZSBpZHMgZm9yIHRvZ2dsZSBjb21wb25lbnRzLlxuICAgKi9cbiAgc3RhdGljIHRvZ2dsZUNvdW50ID0gMDtcblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgdG9nZ2xlIHRvIGJlIHJlbmRlcmVkIHdpdGggbmVzdGVkIHN0eWxlcy5cbiAgICovXG4gIEBJbnB1dCgpIG5lc3RlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIHRvZ2dsZSB0byBiZSByZW5kZXJlZCB3aXRob3V0IGFueSBjbGFzc2VzIG9uIHRoZSBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpbmxpbmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgZGlzYWJsZWQgdG9nZ2xlLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyB0b2dnbGUuXG4gICAqL1xuICBASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSB0b2dnbGUgbGFiZWxzLlxuICAgKi9cbiAgQElucHV0KCkgaGlkZUxhYmVsID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuYW1lIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZCBmb3IgdGhlIHRvZ2dsZSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpZCA9IGB0b2dnbGUtJHtUb2dnbGUudG9nZ2xlQ291bnR9YDtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpIGFyaWFMYWJlbCA9ICcnO1xuICAvKipcbiAgICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdhcmlhLWxhYmVsbGVkYnknKSBhcmlhTGFiZWxsZWRieTogc3RyaW5nO1xuXG5cbiAgLyoqXG4gICAqICBIb3Jpem9udGFsIGRpc3RyaWJ1dGlvbiBvZiBlbGVtZW50c1xuICAgKi9cbiAgQElucHV0KCkgZGlzdHJpYnV0aW9uOiAnbGVhZGluZycgfCAndHJhaWxpbmcnIHwgJ2VxdWFsU3BhY2luZycgfCAnY2VudGVyJyA9ICdlcXVhbFNwYWNpbmcnO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHZhbHVlIGB0cnVlYCBpZiBzdGF0ZSBpcyBzZWxlY3RlZCBmb3IgdGhlIHRvZ2dsZS5cbiAgICovXG4gIGdldCBjaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0aW5nIHRoZSBzdGF0ZSBvZiBhIHRvZ2dsZSB0byBtYXRjaCB0aGUgc3RhdGUgb2YgdGhlIHBhcmFtZXRlciBwYXNzZWQgaW4uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgY2hlY2tlZChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNoZWNrZWQgIT09IHRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5fY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudG9nZ2xlLXdyYXBwZXInKSBnZXQgdG9nZ2xlV3JhcHBlckNsYXNzKCkge1xuICAgIHJldHVybiAhdGhpcy5pbmxpbmU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtLWl0ZW0nKSBnZXQgZm9ybUl0ZW1DbGFzcygpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5saW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyBvdGhlciBjbGFzc2VzIHdoZW4gYSBjaGFuZ2UgaW4gc3RhdGUgb2NjdXJzIG9uIGEgdG9nZ2xlIGFmdGVyIGFcbiAgICogY2xpY2suXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBpbnB1dCB0b2dnbGUgaXMgc2VsZWN0ZWQgKG9yIGNoZWNrZWQpLlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXG4gIF9jaGVja2VkID0gZmFsc2U7XG5cbiAgY3VycmVudFRvZ2dsZVN0YXRlOiBUb2dnbGVTdGF0ZSA9IFRvZ2dsZVN0YXRlLkluaXQ7XG5cbiAgLyoqXG4gICAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmlldyBET00gZWxlbWVudCBvZiB0aGUgYFRvZ2dsZWAuXG4gICAqL1xuICBAVmlld0NoaWxkKCdpbnB1dFRvZ2dsZScsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0VG9nZ2xlOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBUb2dnbGVgLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIFRvZ2dsZS50b2dnbGVDb3VudCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIHRvZ2dsZS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgfVxuXG4gIC8vIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHRvIHRoZSBjb21wb25lbnRcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIG1ldGhvZCBpbiBvcmRlciB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB0b2dnbGUgaXMgdG91Y2hlZC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBvbiB0aGUgZXZlbnQgb2YgYSBjaGFuZ2Ugd2l0aGluIGBUb2dnbGVgIHRvIGJsb2NrIHByb3BhZ2F0aW9uLlxuICAgKi9cbiAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYFRvZ2dsZWAgYW5kIGVtaXRzIGNoYW5nZXMgdG8gb3RoZXIgY2xhc3Nlcy5cbiAgICovXG4gIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ub2dnbGVTdGF0ZSh0aGlzLl9jaGVja2VkID8gVG9nZ2xlU3RhdGUuQ2hlY2tlZCA6IFRvZ2dsZVN0YXRlLlVuY2hlY2tlZCk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudCgpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRvZ2dsZSBpcyBibHVycmVkLiBOZWVkZWQgdG8gcHJvcGVybHkgaW1wbGVtZW50IGBDb250cm9sVmFsdWVBY2Nlc3NvcmAuXG4gICAqL1xuICBvblRvdWNoZWQ6ICgpID0+IGFueSA9ICgpID0+IHsgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBjaGFuZ2VzIGJldHdlZW4gdG9nZ2xlIHN0YXRlcy5cbiAgICovXG4gIHRyYW5zaXRpb25Ub2dnbGVTdGF0ZShuZXdTdGF0ZTogVG9nZ2xlU3RhdGUpIHtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IHRoaXMuY3VycmVudFRvZ2dsZVN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBuZXdTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudFRvZ2dsZVN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBpbnN0YW5jZSBvZiBgVG9nZ2xlQ2hhbmdlYCB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIGV2ZW50LlxuICAgKi9cbiAgZW1pdENoYW5nZUV2ZW50KCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IFRvZ2dsZUNoYW5nZSgpO1xuICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgZXZlbnQuY2hlY2tlZCA9IHRoaXMuY2hlY2tlZDtcblxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHNldCBpbiBgcmVnaXN0ZXJPbkNoYW5nZWAgdG8gcHJvcGFnYXRlIGNoYW5nZXMgYmFjayB0byB0aGUgZm9ybS5cbiAgICovXG4gIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcbn1cbiJdfQ==