@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>
396 lines • 29 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, HostBinding, Input, Output, EventEmitter, TemplateRef, ViewChild, ElementRef, ViewContainerRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { Overlay } from '@angular/cdk/overlay';
import { TemplatePortal } from '@angular/cdk/portal';
var CalendarDayPicker = /** @class */ (function () {
/**
* Creates an instance of `CalendarDayPicker`.
*/
function CalendarDayPicker(_overlay, _viewContainerRef) {
this._overlay = _overlay;
this._viewContainerRef = _viewContainerRef;
this._selectedDays = [];
this.baseClass = true;
this.containerClass = true;
/**
* Set to `true` for a disabled color input.
*/
this.disabled = false;
/**
* Set to `true` for a loading color input component.
*/
this.skeleton = false;
/**
* Set to `true` for an invalid color input component.
*/
this.invalid = false;
/**
* Set to `true` for a valid color input component.
*/
this.valid = false;
/**
* The unique id for the color input component.
*/
this.id = "calendar-day-picker-" + CalendarDayPicker.calendarDayPickerCount;
/**
* Sets the value attribute on the `input` element.
*/
this.value = '';
/**
* Sets the placeholder on the `input` element.
*/
this.placeholder = '';
/**
* Emits event notifying other classes when a change in state occurs in the input.
*/
// tslint:disable-next-line: no-output-native
this.change = new EventEmitter();
/**
* Called when number input 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 (_) { });
CalendarDayPicker.calendarDayPickerCount++;
}
/**
* This is the initial value set to the component
* @param value The input value.
*/
/**
* This is the initial value set to the component
* @param {?} value The input value.
* @return {?}
*/
CalendarDayPicker.prototype.writeValue = /**
* This is the initial value set to the component
* @param {?} value The input value.
* @return {?}
*/
function (value) {
this.value = value || '';
if (value) {
this._selectedDays = JSON.parse('[' + 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 {?}
*/
CalendarDayPicker.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 number input is touched.
*/
/**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the number input is touched.
* @return {?}
*/
CalendarDayPicker.prototype.registerOnTouched = /**
* Registers a callback to be triggered when the control has been touched.
* @param {?} fn Callback to be triggered when the number input is touched.
* @return {?}
*/
function (fn) {
this.onTouched = fn;
};
/**
* Sets the disabled state through the model
*/
/**
* Sets the disabled state through the model
* @param {?} isDisabled
* @return {?}
*/
CalendarDayPicker.prototype.setDisabledState = /**
* Sets the disabled state through the model
* @param {?} isDisabled
* @return {?}
*/
function (isDisabled) {
this.disabled = isDisabled;
};
/**
* Creates a class of `NumberChange` to emit the change in the `Number`.
*/
/**
* Creates a class of `NumberChange` to emit the change in the `Number`.
* @return {?}
*/
CalendarDayPicker.prototype.emitChangeEvent = /**
* Creates a class of `NumberChange` to emit the change in the `Number`.
* @return {?}
*/
function () {
this.change.emit(this.value);
this.propagateChange(this.value);
};
/**
* @param {?} days
* @return {?}
*/
CalendarDayPicker.prototype.onInputChange = /**
* @param {?} days
* @return {?}
*/
function (days) {
this.value = JSON.parse('[' + days + ']');
this.emitChangeEvent();
};
/**
* @param {?} days
* @return {?}
*/
CalendarDayPicker.prototype.onDaysChange = /**
* @param {?} days
* @return {?}
*/
function (days) {
this.value = days.toString();
this._selectedDays = days;
this.emitChangeEvent();
};
/**
* Opens the color picker dialog
*/
/**
* Opens the color picker dialog
* @return {?}
*/
CalendarDayPicker.prototype.openCalendarDayOverlay = /**
* Opens the color picker dialog
* @return {?}
*/
function () {
var _this = this;
if (!this._overlayRef) {
/** @type {?} */
var positionStrategy = this._overlay
.position()
.flexibleConnectedTo(this.origin)
.withPositions([{
originX: 'start',
originY: 'bottom',
overlayX: 'start',
overlayY: 'top',
offsetY: 8,
}]);
this._overlayRef = this._overlay.create({
hasBackdrop: true,
backdropClass: 'cdk-overlay-transparent-backdrop',
positionStrategy: positionStrategy,
});
this._overlayRef.backdropClick().subscribe((/**
* @return {?}
*/
function () { return _this._overlayRef.detach(); }));
this._portal = new TemplatePortal(this.dialog, this._viewContainerRef);
}
this._overlayRef.attach(this._portal);
};
/**
* Closes the calendar day dialog
*/
/**
* Closes the calendar day dialog
* @return {?}
*/
CalendarDayPicker.prototype.closeCalendarDayOverlay = /**
* Closes the calendar day dialog
* @return {?}
*/
function () {
this._overlayRef.detach();
};
/**
* Checks if it is a template
*/
/**
* Checks if it is a template
* @param {?} value
* @return {?}
*/
CalendarDayPicker.prototype.isTemplate = /**
* Checks if it is a template
* @param {?} value
* @return {?}
*/
function (value) {
return value instanceof TemplateRef;
};
/**
* Variable used for creating unique ids for color input components.
*/
CalendarDayPicker.calendarDayPickerCount = 0;
CalendarDayPicker.decorators = [
{ type: Component, args: [{
selector: 'suka-calendar-day-picker',
template: "\n <label *ngIf=\"skeleton && label\" class=\"label skeleton\"></label>\n <label *ngIf=\"!skeleton && label\" [for]=\"id\" class=\"label\">\n <ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n <ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n </label>\n <div *ngIf=\"!skeleton && helperText\" class=\"form__helper-text\">\n <ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n </div>\n <div\n [attr.data-invalid]=\"(invalid ? true : null)\"\n [attr.data-valid]=\"(valid ? true : null)\"\n class=\"calendar-day-picker\"\n [ngClass]=\"{\n 'calendar-day-picker--nolabel': !label,\n 'calendar-day-picker--helpertext': helperText,\n 'skeleton' : skeleton,\n 'calendar-day-picker--disabled': disabled\n }\">\n <div class=\"calendar-day-picker__input-wrapper\">\n <input\n #origin\n type=\"text\"\n [id]=\"id\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n [disabled]=\"disabled\"\n [required]=\"required\"\n (focus)=\"openCalendarDayOverlay()\"\n (change)=\"onInputChange($event)\"/>\n\n <suka-icon *ngIf=\"!skeleton && invalid\" icon=\"alert-circle\" class=\"calendar-day-picker__invalid\"></suka-icon>\n <suka-icon *ngIf=\"!skeleton && valid\" icon=\"check\" class=\"calendar-day-picker__valid\"></suka-icon>\n </div>\n <div *ngIf=\"invalid\" class=\"form-requirement\">\n <ng-container *ngIf=\"!isTemplate(invalidText)\">{{invalidText}}</ng-container>\n <ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n </div>\n </div>\n\n <ng-template #calendarDayOverlay>\n <suka-calendar-day-overlay\n [days]=\"_selectedDays\"\n (daysChange)=\"onDaysChange($event)\"\n >\n </suka-calendar-day-overlay>\n </ng-template>\n ",
providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: CalendarDayPicker,
multi: true
}
]
}] }
];
/** @nocollapse */
CalendarDayPicker.ctorParameters = function () { return [
{ type: Overlay },
{ type: ViewContainerRef }
]; };
CalendarDayPicker.propDecorators = {
baseClass: [{ type: HostBinding, args: ['class.calendar-day-picker',] }],
containerClass: [{ type: HostBinding, args: ['class.form-item',] }],
disabled: [{ type: Input }],
skeleton: [{ type: Input }],
invalid: [{ type: Input }],
valid: [{ type: Input }],
id: [{ type: Input }],
required: [{ type: Input }],
value: [{ type: Input }],
placeholder: [{ type: Input }],
label: [{ type: Input }],
helperText: [{ type: Input }],
invalidText: [{ type: Input }],
change: [{ type: Output }],
origin: [{ type: ViewChild, args: ['origin', { static: false },] }],
dialog: [{ type: ViewChild, args: ['calendarDayOverlay', { static: false },] }]
};
return CalendarDayPicker;
}());
export { CalendarDayPicker };
if (false) {
/**
* Variable used for creating unique ids for color input components.
* @type {?}
*/
CalendarDayPicker.calendarDayPickerCount;
/**
* @type {?}
* @private
*/
CalendarDayPicker.prototype._overlayRef;
/**
* @type {?}
* @private
*/
CalendarDayPicker.prototype._portal;
/** @type {?} */
CalendarDayPicker.prototype._selectedDays;
/** @type {?} */
CalendarDayPicker.prototype.baseClass;
/** @type {?} */
CalendarDayPicker.prototype.containerClass;
/**
* Set to `true` for a disabled color input.
* @type {?}
*/
CalendarDayPicker.prototype.disabled;
/**
* Set to `true` for a loading color input component.
* @type {?}
*/
CalendarDayPicker.prototype.skeleton;
/**
* Set to `true` for an invalid color input component.
* @type {?}
*/
CalendarDayPicker.prototype.invalid;
/**
* Set to `true` for a valid color input component.
* @type {?}
*/
CalendarDayPicker.prototype.valid;
/**
* The unique id for the color input component.
* @type {?}
*/
CalendarDayPicker.prototype.id;
/**
* Reflects the required attribute of the `input` element.
* @type {?}
*/
CalendarDayPicker.prototype.required;
/**
* Sets the value attribute on the `input` element.
* @type {?}
*/
CalendarDayPicker.prototype.value;
/**
* Sets the placeholder on the `input` element.
* @type {?}
*/
CalendarDayPicker.prototype.placeholder;
/**
* Sets the text inside the `label` tag.
* @type {?}
*/
CalendarDayPicker.prototype.label;
/**
* Sets the optional helper text.
* @type {?}
*/
CalendarDayPicker.prototype.helperText;
/**
* Sets the invalid text.
* @type {?}
*/
CalendarDayPicker.prototype.invalidText;
/**
* Emits event notifying other classes when a change in state occurs in the input.
* @type {?}
*/
CalendarDayPicker.prototype.change;
/** @type {?} */
CalendarDayPicker.prototype.origin;
/** @type {?} */
CalendarDayPicker.prototype.dialog;
/**
* Called when number input is blurred. Needed to properly implement `ControlValueAccessor`.
* @type {?}
*/
CalendarDayPicker.prototype.onTouched;
/**
* Method set in `registerOnChange` to propagate changes back to the form.
* @type {?}
*/
CalendarDayPicker.prototype.propagateChange;
/**
* @type {?}
* @private
*/
CalendarDayPicker.prototype._overlay;
/**
* @type {?}
* @private
*/
CalendarDayPicker.prototype._viewContainerRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZGF5LXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3VzaGtpL25nLXN1a2EvIiwic291cmNlcyI6WyJsaWIvY2FsZW5kYXItZGF5LXBpY2tlci9jYWxlbmRhci1kYXktcGlja2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVLLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJEO0lBNkhFOztPQUVHO0lBQ0gsMkJBQ1UsUUFBaUIsRUFDakIsaUJBQW1DO1FBRG5DLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQS9EN0Msa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFFYSxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBRTNCLG1CQUFjLEdBQUcsSUFBSSxDQUFDOzs7O1FBSTdDLGFBQVEsR0FBRyxLQUFLLENBQUM7Ozs7UUFJakIsYUFBUSxHQUFHLEtBQUssQ0FBQzs7OztRQUlqQixZQUFPLEdBQUcsS0FBSyxDQUFDOzs7O1FBSWhCLFVBQUssR0FBRyxLQUFLLENBQUM7Ozs7UUFJZCxPQUFFLEdBQUcseUJBQXVCLGlCQUFpQixDQUFDLHNCQUF3QixDQUFDOzs7O1FBUXZFLFVBQUssR0FBRyxFQUFFLENBQUM7Ozs7UUFJWCxnQkFBVyxHQUFHLEVBQUUsQ0FBQzs7Ozs7UUFpQmhCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDOzs7O1FB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SUFJMUIscUNBQTBCOzs7OztJQUkxQixvQ0FBeUI7Ozs7O0lBSXpCLGtDQUF1Qjs7Ozs7SUFJdkIsK0JBQWdGOzs7OztJQUloRixxQ0FBMkI7Ozs7O0lBSTNCLGtDQUFvQjs7Ozs7SUFJcEIsd0NBQTBCOzs7OztJQUkxQixrQ0FBMEM7Ozs7O0lBSTFDLHVDQUErQzs7Ozs7SUFJL0Msd0NBQWdEOzs7OztJQUtoRCxtQ0FBc0M7O0lBRXRDLG1DQUEyRDs7SUFDM0QsbUNBQTZFOzs7OztJQWlEN0Usc0NBQWlDOzs7OztJQUtqQyw0Q0FBa0M7Ozs7O0lBaERoQyxxQ0FBeUI7Ozs7O0lBQ3pCLDhDQUEyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE92ZXJsYXlSZWYsIE92ZXJsYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLWNhbGVuZGFyLWRheS1waWNrZXInLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxsYWJlbCAqbmdJZj1cInNrZWxldG9uICYmIGxhYmVsXCIgY2xhc3M9XCJsYWJlbCBza2VsZXRvblwiPjwvbGFiZWw+XG4gICAgPGxhYmVsICpuZ0lmPVwiIXNrZWxldG9uICYmIGxhYmVsXCIgW2Zvcl09XCJpZFwiIGNsYXNzPVwibGFiZWxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShsYWJlbClcIj57e2xhYmVsfX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUobGFiZWwpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbGFiZWw+XG4gICAgPGRpdiAqbmdJZj1cIiFza2VsZXRvbiAmJiBoZWxwZXJUZXh0XCIgY2xhc3M9XCJmb3JtX19oZWxwZXItdGV4dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc1RlbXBsYXRlKGhlbHBlclRleHQpXCI+e3toZWxwZXJUZXh0fX08L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaGVscGVyVGV4dClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWxwZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBbYXR0ci5kYXRhLWludmFsaWRdPVwiKGludmFsaWQgPyB0cnVlIDogbnVsbClcIlxuICAgICAgW2F0dHIuZGF0YS12YWxpZF09XCIodmFsaWQgPyB0cnVlIDogbnVsbClcIlxuICAgICAgY2xhc3M9XCJjYWxlbmRhci1kYXktcGlja2VyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2NhbGVuZGFyLWRheS1waWNrZXItLW5vbGFiZWwnOiAhbGFiZWwsXG4gICAgICAgICdjYWxlbmRhci1kYXktcGlja2VyLS1oZWxwZXJ0ZXh0JzogaGVscGVyVGV4dCxcbiAgICAgICAgJ3NrZWxldG9uJyA6IHNrZWxldG9uLFxuICAgICAgICAnY2FsZW5kYXItZGF5LXBpY2tlci0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWRheS1waWNrZXJfX2lucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgI29yaWdpblxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgKGZvY3VzKT1cIm9wZW5DYWxlbmRhckRheU92ZXJsYXkoKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudClcIi8+XG5cbiAgICAgICAgPHN1a2EtaWNvbiAqbmdJZj1cIiFza2VsZXRvbiAmJiBpbnZhbGlkXCIgaWNvbj1cImFsZXJ0LWNpcmNsZVwiIGNsYXNzPVwiY2FsZW5kYXItZGF5LXBpY2tlcl9faW52YWxpZFwiPjwvc3VrYS1pY29uPlxuICAgICAgICA8c3VrYS1pY29uICpuZ0lmPVwiIXNrZWxldG9uICYmIHZhbGlkXCIgaWNvbj1cImNoZWNrXCIgY2xhc3M9XCJjYWxlbmRhci1kYXktcGlja2VyX192YWxpZFwiPjwvc3VrYS1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaW52YWxpZFwiIGNsYXNzPVwiZm9ybS1yZXF1aXJlbWVudFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCI+e3tpbnZhbGlkVGV4dH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzVGVtcGxhdGUoaW52YWxpZFRleHQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW52YWxpZFRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2NhbGVuZGFyRGF5T3ZlcmxheT5cbiAgICAgIDxzdWthLWNhbGVuZGFyLWRheS1vdmVybGF5XG4gICAgICAgIFtkYXlzXT1cIl9zZWxlY3RlZERheXNcIlxuICAgICAgICAoZGF5c0NoYW5nZSk9XCJvbkRheXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICA8L3N1a2EtY2FsZW5kYXItZGF5LW92ZXJsYXk+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogQ2FsZW5kYXJEYXlQaWNrZXIsXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckRheVBpY2tlciBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlIHVzZWQgZm9yIGNyZWF0aW5nIHVuaXF1ZSBpZHMgZm9yIGNvbG9yIGlucHV0IGNvbXBvbmVudHMuXG4gICAqL1xuICBzdGF0aWMgY2FsZW5kYXJEYXlQaWNrZXJDb3VudCA9IDA7XG4gIHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XG4gIHByaXZhdGUgX3BvcnRhbDogVGVtcGxhdGVQb3J0YWw8YW55PjtcblxuICBfc2VsZWN0ZWREYXlzOiBudW1iZXJbXSA9IFtdO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY2FsZW5kYXItZGF5LXBpY2tlcicpIGJhc2VDbGFzcyA9IHRydWU7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mb3JtLWl0ZW0nKSBjb250YWluZXJDbGFzcyA9IHRydWU7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIGRpc2FibGVkIGNvbG9yIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFNldCB0byBgdHJ1ZWAgZm9yIGEgbG9hZGluZyBjb2xvciBpbnB1dCBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBza2VsZXRvbiA9IGZhbHNlO1xuICAvKipcbiAgICogU2V0IHRvIGB0cnVlYCBmb3IgYW4gaW52YWxpZCBjb2xvciBpbnB1dCBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIGZvciBhIHZhbGlkIGNvbG9yIGlucHV0IGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkIGZvciB0aGUgY29sb3IgaW5wdXQgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgaWQgPSBgY2FsZW5kYXItZGF5LXBpY2tlci0ke0NhbGVuZGFyRGF5UGlja2VyLmNhbGVuZGFyRGF5UGlja2VyQ291bnR9YDtcbiAgLyoqXG4gICAqIFJlZmxlY3RzIHRoZSByZXF1aXJlZCBhdHRyaWJ1dGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgYXR0cmlidXRlIG9uIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBASW5wdXQoKSB2YWx1ZSA9ICcnO1xuICAvKipcbiAgICogU2V0cyB0aGUgcGxhY2Vob2xkZXIgb24gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZXh0IGluc2lkZSB0aGUgYGxhYmVsYCB0YWcuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIG9wdGlvbmFsIGhlbHBlciB0ZXh0LlxuICAgKi9cbiAgQElucHV0KCkgaGVscGVyVGV4dDogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIGludmFsaWQgdGV4dC5cbiAgICovXG4gIEBJbnB1dCgpIGludmFsaWRUZXh0OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAvKipcbiAgICogRW1pdHMgZXZlbnQgbm90aWZ5aW5nIG90aGVyIGNsYXNzZXMgd2hlbiBhIGNoYW5nZSBpbiBzdGF0ZSBvY2N1cnMgaW4gdGhlIGlucHV0LlxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnb3JpZ2luJywgeyBzdGF0aWM6IGZhbHNlIH0pIG9yaWdpbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY2FsZW5kYXJEYXlPdmVybGF5JywgeyBzdGF0aWM6IGZhbHNlIH0pIGRpYWxvZzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBgQ2FsZW5kYXJEYXlQaWNrZXJgLlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICAgIENhbGVuZGFyRGF5UGlja2VyLmNhbGVuZGFyRGF5UGlja2VyQ291bnQrKztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBpbml0aWFsIHZhbHVlIHNldCB0byB0aGUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgaW5wdXQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZERheXMgPSBKU09OLnBhcnNlKCdbJyArIHZhbHVlICsgJ10nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIG1ldGhvZCBpbiBvcmRlciB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgY2FsbGJhY2sgdG8gYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGNvbnRyb2wgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIENhbGxiYWNrIHRvIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBudW1iZXIgaW5wdXQgaXMgdG91Y2hlZC5cbiAgICovXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZSB0aHJvdWdoIHRoZSBtb2RlbFxuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gbnVtYmVyIGlucHV0IGlzIGJsdXJyZWQuIE5lZWRlZCB0byBwcm9wZXJseSBpbXBsZW1lbnQgYENvbnRyb2xWYWx1ZUFjY2Vzc29yYC5cbiAgICovXG4gIG9uVG91Y2hlZDogKCkgPT4gYW55ID0gKCkgPT4geyB9O1xuXG4gIC8qKlxuICAgKiBNZXRob2Qgc2V0IGluIGByZWdpc3Rlck9uQ2hhbmdlYCB0byBwcm9wYWdhdGUgY2hhbmdlcyBiYWNrIHRvIHRoZSBmb3JtLlxuICAgKi9cbiAgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY2xhc3Mgb2YgYE51bWJlckNoYW5nZWAgdG8gZW1pdCB0aGUgY2hhbmdlIGluIHRoZSBgTnVtYmVyYC5cbiAgICovXG4gIGVtaXRDaGFuZ2VFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgb25JbnB1dENoYW5nZShkYXlzOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gSlNPTi5wYXJzZSgnWycgKyBkYXlzICsgJ10nKTtcbiAgICB0aGlzLmVtaXRDaGFuZ2VFdmVudCgpO1xuICB9XG5cbiAgb25EYXlzQ2hhbmdlKGRheXM6IG51bWJlcltdKSB7XG4gICAgdGhpcy52YWx1ZSA9IGRheXMudG9TdHJpbmcoKTtcbiAgICB0aGlzLl9zZWxlY3RlZERheXMgPSBkYXlzO1xuICAgIHRoaXMuZW1pdENoYW5nZUV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGNvbG9yIHBpY2tlciBkaWFsb2dcbiAgICovXG4gIG9wZW5DYWxlbmRhckRheU92ZXJsYXkoKSB7XG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5fb3ZlcmxheVxuICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLm9yaWdpbilcbiAgICAgICAgLndpdGhQb3NpdGlvbnMoW3tcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAndG9wJyxcbiAgICAgICAgICBvZmZzZXRZOiA4LFxuICAgICAgICB9XSk7XG5cbiAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpKTtcbiAgICAgIHRoaXMuX3BvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLmRpYWxvZywgdGhpcy5fdmlld0NvbnRhaW5lclJlZik7XG5cbiAgICB9XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmLmF0dGFjaCh0aGlzLl9wb3J0YWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgY2FsZW5kYXIgZGF5IGRpYWxvZ1xuICAgKi9cbiAgY2xvc2VDYWxlbmRhckRheU92ZXJsYXkoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQgaXMgYSB0ZW1wbGF0ZVxuICAgKi9cbiAgcHVibGljIGlzVGVtcGxhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxufVxuIl19