@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>
368 lines • 23 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} */
const ToggleState = {
Init: 0,
Checked: 1,
Unchecked: 2,
};
export { ToggleState };
ToggleState[ToggleState.Init] = 'Init';
ToggleState[ToggleState.Checked] = 'Checked';
ToggleState[ToggleState.Unchecked] = 'Unchecked';
export class ToggleChange {
}
if (false) {
/** @type {?} */
ToggleChange.prototype.source;
/** @type {?} */
ToggleChange.prototype.checked;
}
// tslint:disable-next-line: component-class-suffix
export class Toggle {
/**
* Creates an instance of `Toggle`.
* @param {?} changeDetectorRef
*/
constructor(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 {?}
*/
() => { });
/**
* Method set in `registerOnChange` to propagate changes back to the form.
*/
this.propagateChange = (/**
* @param {?} _
* @return {?}
*/
(_) => { });
Toggle.toggleCount++;
}
/**
* Returns value `true` if state is selected for the toggle.
* @return {?}
*/
get checked() {
return this._checked;
}
/**
* Updating the state of a toggle to match the state of the parameter passed in.
* @param {?} checked
* @return {?}
*/
set checked(checked) {
if (checked !== this.checked) {
this._checked = checked;
this.changeDetectorRef.markForCheck();
}
}
/**
* @return {?}
*/
get toggleWrapperClass() {
return !this.inline;
}
/**
* @return {?}
*/
get formItemClass() {
return !this.inline;
}
/**
* Toggle the selected state of the toggle.
* @return {?}
*/
toggle() {
this.checked = !this.checked;
}
// this is the initial value set to the component
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
this.checked = !!value;
}
/**
* Sets a method in order to propagate changes back to the form.
* @param {?} fn
* @return {?}
*/
registerOnChange(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.
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* Executes on the event of a change within `Toggle` to block propagation.
* @param {?} event
* @return {?}
*/
onChange(event) {
event.stopPropagation();
}
/**
* Handles click events on the `Toggle` and emits changes to other classes.
* @param {?} event
* @return {?}
*/
onClick(event) {
if (!this.disabled) {
this.toggle();
this.transitionToggleState(this._checked ? ToggleState.Checked : ToggleState.Unchecked);
this.emitChangeEvent();
}
}
/**
* Handles changes between toggle states.
* @param {?} newState
* @return {?}
*/
transitionToggleState(newState) {
this.currentToggleState = newState;
}
/**
* Creates instance of `ToggleChange` used to propagate the change event.
* @return {?}
*/
emitChangeEvent() {
/** @type {?} */
const 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: `
<label
class="
toggle
toggle--distribution-{{distribution}}
"
[ngClass]="{
'skeleton' : skeleton,
'disabled': disabled
}"
>
<ng-content></ng-content>
<input
type="checkbox"
[id]="id"
[value]="value"
[name]="name"
[required]="required"
[checked]="checked"
[disabled]="disabled"
[attr.aria-label]="ariaLabel"
[attr.aria-labelledby]="ariaLabelledby"
[attr.aria-checked]="checked"
(change)="onChange($event)"
(click)="onClick($event)"
/>
<span class="toggle-body">
<span class="toggle-switch"></span>
<span class="toggle-track">
<span class="toggle-bg"></span>
<span class="toggle-bg toggle-bg_negative"></span>
</span>
</span>
</label>
`,
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: Toggle,
multi: true
}
],
changeDetection: ChangeDetectionStrategy.OnPush
}] }
];
/** @nocollapse */
Toggle.ctorParameters = () => [
{ 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 },] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi90b2dnbGUvdG9nZ2xlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7O0lBSXZFLE9BQUk7SUFDSixVQUFPO0lBQ1AsWUFBUzs7Ozs7O0FBR1gsTUFBTSxPQUFPLFlBQVk7Q0FHeEI7OztJQUZDLDhCQUFlOztJQUNmLCtCQUFpQjs7QUFrRG5CLG1EQUFtRDtBQUNuRCxNQUFNLE9BQU8sTUFBTTs7Ozs7SUEwR2pCLFlBQXNCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1COzs7O1FBN0ZqRCxXQUFNLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWYsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixhQUFRLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWpCLGNBQVMsR0FBRyxLQUFLLENBQUM7Ozs7UUFRbEIsT0FBRSxHQUFHLFVBQVUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDOzs7OztRQWF4QixjQUFTLEdBQUcsRUFBRSxDQUFDOzs7O1FBVzNCLGlCQUFZLEdBQXVELGNBQWMsQ0FBQzs7Ozs7O1FBK0JqRixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7Ozs7O1FBTXBELGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsdUJBQWtCLEdBQWdCLFdBQVcsQ0FBQyxJQUFJLENBQUM7Ozs7UUE4RG5ELGNBQVM7OztRQUFjLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQzs7OztRQXdCakMs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QkFLbEIsS0FBSyxTQUFDLGlCQUFpQjsyQkFNdkIsS0FBSztzQkFZTCxLQUFLO2lDQU9MLFdBQVcsU0FBQyxzQkFBc0I7NEJBR2xDLFdBQVcsU0FBQyxpQkFBaUI7cUJBUzdCLE1BQU07MEJBYU4sU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Ozs7Ozs7SUFqRzFDLG1CQUF1Qjs7Ozs7SUFLdkIsd0JBQXlCOzs7OztJQUl6Qix3QkFBd0I7Ozs7O0lBSXhCLDBCQUEwQjs7Ozs7SUFJMUIsMEJBQTBCOzs7OztJQUkxQiwyQkFBMkI7Ozs7O0lBSTNCLHNCQUFzQjs7Ozs7SUFJdEIsb0JBQTZDOzs7OztJQUk3QywwQkFBMkI7Ozs7O0lBSTNCLHVCQUF1Qjs7Ozs7SUFLdkIsMkJBQW9DOzs7OztJQUtwQyxnQ0FBaUQ7Ozs7O0lBTWpELDhCQUEyRjs7Ozs7O0lBK0IzRix3QkFBb0Q7Ozs7O0lBTXBELDBCQUFpQjs7SUFFakIsb0NBQW1EOzs7OztJQUtuRCw2QkFBb0U7Ozs7O0lBeURwRSwyQkFBaUM7Ozs7O0lBd0JqQyxpQ0FBa0M7Ozs7O0lBNUV0QixtQ0FBOEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5cbmV4cG9ydCBlbnVtIFRvZ2dsZVN0YXRlIHtcbiAgSW5pdCxcbiAgQ2hlY2tlZCxcbiAgVW5jaGVja2VkXG59XG5cbmV4cG9ydCBjbGFzcyBUb2dnbGVDaGFuZ2Uge1xuICBzb3VyY2U6IFRvZ2dsZTtcbiAgY2hlY2tlZDogYm9vbGVhbjtcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLXRvZ2dsZScsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGxhYmVsXG4gICAgICBjbGFzcz1cIlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgdG9nZ2xlLS1kaXN0cmlidXRpb24te3tkaXN0cmlidXRpb259fVxuICAgICAgXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3NrZWxldG9uJyA6IHNrZWxldG9uLFxuICAgICAgICAnZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICBbY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkYnlcIlxuICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiY2hlY2tlZFwiXG4gICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJvZHlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2dnbGUtc3dpdGNoXCI+PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS10cmFja1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJnXCI+PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9nZ2xlLWJnIHRvZ2dsZS1iZ19uZWdhdGl2ZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPlxuICAgIDwvbGFiZWw+XG4gIGAsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IFRvZ2dsZSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIFRvZ2dsZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHVzZWQgZm9yIGNyZWF0aW5nIHVuaXF1ZSBpZHMgZm9yIHRvZ2dsZSBjb21wb25lbnRzLlxuICAgKi9cbiAgc3RhdGljIHRvZ2dsZUNvdW50ID0gMDtcblxuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgdG9nZ2xlIHRvIGJlIHJlbmRlcmVkIHdpdGggbmVzdGVkIHN0eWxlcy5cbiAgICovXG4gIEBJbnB1dCgpIG5lc3RlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIHRvZ2dsZSB0byBiZSByZW5kZXJlZCB3aXRob3V0IGFueSBjbGFzc2VzIG9uIHRoZSBob3N0IGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpbmxpbmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgZGlzYWJsZWQgdG9nZ2xlLlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyB0b2dnbGUuXG4gICAqL1xuICBASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCB0byBoaWRlIHRoZSB0b2dnbGUgbGFiZWxzLlxuICAgKi9cbiAgQElucHV0KCkgaGlkZUxhYmVsID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuYW1lIGF0dHJpYnV0ZSBvbiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZCBmb3IgdGhlIHRvZ2dsZSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpZCA9IGB0b2dnbGUtJHtUb2dnbGUudG9nZ2xlQ291bnR9YDtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuICAvKipcbiAgICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpIGFyaWFMYWJlbCA9ICcnO1xuICAvKipcbiAgICogVXNlZCB0byBzZXQgdGhlIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZSBvbiB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdhcmlhLWxhYmVsbGVkYnknKSBhcmlhTGFiZWxsZWRieTogc3RyaW5nO1xuXG5cbiAgLyoqXG4gICAqICBIb3Jpem9udGFsIGRpc3RyaWJ1dGlvbiBvZiBlbGVtZW50c1xuICAgKi9cbiAgQElucHV0KCkgZGlzdHJpYnV0aW9uOiAnbGVhZGluZycgfCAndHJhaWxpbmcnIHwgJ2VxdWFsU3BhY2luZycgfCAnY2VudGVyJyA9ICdlcXVhbFNwYWNpbmcnO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHZhbHVlIGB0cnVlYCBpZiBzdGF0ZSBpcyBzZWxlY3RlZCBmb3IgdGhlIHRvZ2dsZS5cbiAgICovXG4gIGdldCBjaGVja2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGVja2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0aW5nIHRoZSBzdGF0ZSBvZiBhIHRvZ2dsZSB0byBtYXRjaCB0aGUgc3RhdGUgb2YgdGhlIHBhcmFtZXRlciBwYXNzZWQgaW4uXG4gICAqL1xuICBASW5wdXQoKSBzZXQgY2hlY2tlZChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgaWYgKGNoZWNrZWQgIT09IHRoaXMuY2hlY2tlZCkge1xuICAgICAgdGhpcy5fY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MudG9nZ2xlLXdyYXBwZXInKSBnZXQgdG9nZ2xlV3JhcHBlckNsYXNzKCkge1xuICAgIHJldHVybiAhdGhpcy5pbmxpbmU7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtLWl0ZW0nKSBnZXQgZm9ybUl0ZW1DbGFzcygpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5saW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IG5vdGlmeWluZyBvdGhlciBjbGFzc2VzIHdoZW4gYSBjaGFuZ2UgaW4gc3RhdGUgb2NjdXJzIG9uIGEgdG9nZ2xlIGFmdGVyIGFcbiAgICogY2xpY2suXG4gICAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGlmIHRoZSBpbnB1dCB0b2dnbGUgaXMgc2VsZWN0ZWQgKG9yIGNoZWNrZWQpLlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB2YXJpYWJsZS1uYW1lXG4gIF9jaGVja2VkID0gZmFsc2U7XG5cbiAgY3VycmVudFRvZ2dsZVN0YXRlOiBUb2dnbGVTdGF0ZSA9IFRvZ2dsZVN0YXRlLkluaXQ7XG5cbiAgLyoqXG4gICAqIE1haW50YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmlldyBET00gZWxlbWVudCBvZiB0aGUgYFRvZ2dsZWAuXG4gICAqL1xuICBAVmlld0NoaWxkKCdpbnB1dFRvZ2dsZScsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0VG9nZ2xlOiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGBUb2dnbGVgLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIFRvZ2dsZS50b2dnbGVDb3VudCsrO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIHRvZ2dsZS5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGUoKSB7XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgfVxuXG4gIC8vIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUgc2V0IHRvIHRoZSBjb21wb25lbnRcbiAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuY2hlY2tlZCA9ICEhdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIG1ldGhvZCBpbiBvcmRlciB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSB0b2dnbGUgaXMgdG91Y2hlZC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBvbiB0aGUgZXZlbnQgb2YgYSBjaGFuZ2Ugd2l0aGluIGBUb2dnbGVgIHRvIGJsb2NrIHByb3BhZ2F0aW9uLlxuICAgKi9cbiAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgYFRvZ2dsZWAgYW5kIGVtaXRzIGNoYW5nZXMgdG8gb3RoZXIgY2xhc3Nlcy5cbiAgICovXG4gIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLnRyYW5zaXRpb25Ub2dnbGVTdGF0ZSh0aGlzLl9jaGVja2VkID8gVG9nZ2xlU3RhdGUuQ2hlY2tlZCA6IFRvZ2dsZVN0YXRlLlVuY2hlY2tlZCk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0b2dnbGUgaXMgYmx1cnJlZC4gTmVlZGVkIHRvIHByb3Blcmx5IGltcGxlbWVudCBgQ29udHJvbFZhbHVlQWNjZXNzb3JgLlxuICAgKi9cbiAgb25Ub3VjaGVkOiAoKSA9PiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2hhbmdlcyBiZXR3ZWVuIHRvZ2dsZSBzdGF0ZXMuXG4gICAqL1xuICB0cmFuc2l0aW9uVG9nZ2xlU3RhdGUobmV3U3RhdGU6IFRvZ2dsZVN0YXRlKSB7XG4gICAgdGhpcy5jdXJyZW50VG9nZ2xlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGluc3RhbmNlIG9mIGBUb2dnbGVDaGFuZ2VgIHVzZWQgdG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2UgZXZlbnQuXG4gICAqL1xuICBlbWl0Q2hhbmdlRXZlbnQoKSB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgVG9nZ2xlQ2hhbmdlKCk7XG4gICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICBldmVudC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5jaGVja2VkKTtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2Qgc2V0IGluIGByZWdpc3Rlck9uQ2hhbmdlYCB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xufVxuIl19