com.phloxui
Version:
PhloxUI Ng2+ Framework
474 lines (473 loc) • 33 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter } from '@angular/core';
import { AbstractSimpleDropdown } from './AbstractSimpleDropdown';
import { NeedFocusService } from '../../../service/NeedFocusService.service';
import { I18N } from '../../../decorator/I18N.decorator';
import { Option } from '../../../decorator/Option.decorator';
import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service';
var /** @type {?} */ TYPE_NAME = "phx-color-swatch";
var ColorSwatch = /** @class */ (function (_super) {
tslib_1.__extends(ColorSwatch, _super);
function ColorSwatch(needFocusService, elementRef, phloxAppInfoService) {
return _super.call(this, needFocusService, elementRef, phloxAppInfoService) || this;
}
/**
* @return {?}
*/
ColorSwatch.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @param {?} changes
* @return {?}
*/
ColorSwatch.prototype.ngOnChanges = /**
* @param {?} changes
* @return {?}
*/
function (changes) {
_super.prototype.ngOnChanges.call(this, changes);
};
/**
* @return {?}
*/
ColorSwatch.prototype.getSelectedItemHexColor = /**
* @return {?}
*/
function () {
return this.getSelectedItem().getValue();
};
/**
* @return {?}
*/
ColorSwatch.prototype.isGridMode = /**
* @return {?}
*/
function () {
if (this.gridColumnNumber !== null && typeof this.gridColumnNumber === 'number') {
return true;
}
return false;
};
/**
* @param {?} index
* @return {?}
*/
ColorSwatch.prototype._showNewLine = /**
* @param {?} index
* @return {?}
*/
function (index) {
if (this.gridColumnNumber !== null && typeof this.gridColumnNumber === 'number' && index >= 0) {
var /** @type {?} */ count = index + 1;
if (count % this.gridColumnNumber === 0) {
return true;
}
}
return false;
};
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
ColorSwatch.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
//! do sthing
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
ColorSwatch.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
};
/**
* @param {?} $event
* @return {?}
*/
ColorSwatch.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
$(this.elementRef.nativeElement).find(".swatch > button").focus();
};
// Override
/**
* @param {?} $event
* @return {?}
*/
ColorSwatch.prototype.doBlur = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
$(this.elementRef.nativeElement).find(".swatch > button").blur();
};
// Override
/**
* @return {?}
*/
ColorSwatch.prototype.getDropdownPopupSelector = /**
* @return {?}
*/
function () {
return '.menu';
};
/**
* @return {?}
*/
ColorSwatch.prototype.getItems = /**
* @return {?}
*/
function () {
return this.items;
};
/**
* @return {?}
*/
ColorSwatch.prototype.getSelectedItem = /**
* @return {?}
*/
function () {
var /** @type {?} */ sItem = _super.prototype.getSelectedItem.call(this);
if (sItem != null) {
return /** @type {?} */ (sItem);
}
return null;
};
ColorSwatch.TYPE_NAME = TYPE_NAME;
ColorSwatch.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div class=\"phx-color-swatch\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n\t<div class=\"swatch-container fluid\">\n\t\t<div class=\"swatch\">\n\t\t\t<button type=\"button\" (click)=\"click($event)\" (focusin)=\"onFocusing($event)\" (blur)=\"onLostFocusing($event)\">\n\t\t\t\t<div class=\"label-side\" *ngIf=\"getSelectedItem() !== null\" [style.text-align]=\"getAlign()\">\n\t\t\t\t\t<div class=\"box\" [style.background-color]=\"getSelectedItemHexColor()\"></div> <div class=\"label\">{{getSelectedItem().label}}</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"arrow-side\">\n\t\t\t\t\t<div class=\"flex-center\">\n\t\t\t\t\t\t<div class=\"down-triangle\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</button>\n\t\t</div>\n <div class=\"menu-container\" [class.show]=\"isShow()\" [style.width]=\"getDropdownWidth()\" [style.max-height]=\"getDropdownHeight()\">\n <ul class=\"menu\">\n\t\t\t\t\t<ng-template ngFor let-item [ngForOf]=\"getItems()\" let-i=\"index\">\n\t\t\t\t\t\t<li (click)=\"onSelectItemClicked($event, i)\" [style.text-align]=\"getAlign()\">\n\t\t\t\t\t\t\t<div class=\"box\" [style.background-color]=\"item.value\"></div>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t\t<br *ngIf=\"_showNewLine(i)\"/>\n\t\t\t\t\t</ng-template>\n \t\t</ul>\n </div>\n\t</div>\n</div>\n"
},] },
];
/** @nocollapse */
ColorSwatch.ctorParameters = function () { return [
{ type: NeedFocusService, },
{ type: ElementRef, },
{ type: PhloxAppInfoService, },
]; };
ColorSwatch.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"dataComparator": [{ type: Input },],
"items": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"dropdownWidth": [{ type: Input },],
"dropdownHeight": [{ type: Input },],
"gridColumnNumber": [{ type: Input, args: ['cols',] },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },],
"selectEvent": [{ type: Output, args: ['phxSelect',] },],
"beforeClickEvent": [{ type: Output, args: ['phxBeforeClick',] },],
"clickEvent": [{ type: Output, args: ['phxClick',] },],
"beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },],
"showEvent": [{ type: Output, args: ['phxShow',] },],
"beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },],
"hideEvent": [{ type: Output, args: ['phxHide',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ColorSwatch.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], ColorSwatch.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ColorSwatch.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], ColorSwatch.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], ColorSwatch.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], ColorSwatch.prototype, "help", void 0);
tslib_1.__decorate([
Option('comparator'),
tslib_1.__metadata("design:type", Object)
], ColorSwatch.prototype, "dataComparator", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Array)
], ColorSwatch.prototype, "items", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "height", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "dropdownWidth", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], ColorSwatch.prototype, "dropdownHeight", void 0);
tslib_1.__decorate([
Option('cols'),
tslib_1.__metadata("design:type", Number)
], ColorSwatch.prototype, "gridColumnNumber", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option('beforeSelect'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option('select'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "selectEvent", void 0);
tslib_1.__decorate([
Option('beforeClick'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeClickEvent", void 0);
tslib_1.__decorate([
Option('click'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "clickEvent", void 0);
tslib_1.__decorate([
Option('beforeShow'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeShowEvent", void 0);
tslib_1.__decorate([
Option('show'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "showEvent", void 0);
tslib_1.__decorate([
Option('beforeHide'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "beforeHideEvent", void 0);
tslib_1.__decorate([
Option('hide'),
tslib_1.__metadata("design:type", EventEmitter)
], ColorSwatch.prototype, "hideEvent", void 0);
return ColorSwatch;
}(AbstractSimpleDropdown));
export { ColorSwatch };
function ColorSwatch_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
ColorSwatch.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
ColorSwatch.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
ColorSwatch.propDecorators;
/** @type {?} */
ColorSwatch.TYPE_NAME;
/** @type {?} */
ColorSwatch.prototype.dataParent;
/** @type {?} */
ColorSwatch.prototype.ignoreParentData;
/** @type {?} */
ColorSwatch.prototype.data;
/** @type {?} */
ColorSwatch.prototype.ignoreParentDisabled;
/** @type {?} */
ColorSwatch.prototype.delegateHistory;
/** @type {?} */
ColorSwatch.prototype.onDisabled;
/** @type {?} */
ColorSwatch.prototype.onEnabled;
/** @type {?} */
ColorSwatch.prototype.loadingEnabled;
/** @type {?} */
ColorSwatch.prototype.i18nKey;
/** @type {?} */
ColorSwatch.prototype.bypass;
/** @type {?} */
ColorSwatch.prototype.options;
/** @type {?} */
ColorSwatch.prototype.disabled;
/** @type {?} */
ColorSwatch.prototype.field;
/** @type {?} */
ColorSwatch.prototype.name;
/** @type {?} */
ColorSwatch.prototype.typeOfData;
/** @type {?} */
ColorSwatch.prototype.readOnly;
/** @type {?} */
ColorSwatch.prototype.help;
/** @type {?} */
ColorSwatch.prototype.dataComparator;
/** @type {?} */
ColorSwatch.prototype.items;
/** @type {?} */
ColorSwatch.prototype.width;
/** @type {?} */
ColorSwatch.prototype.height;
/** @type {?} */
ColorSwatch.prototype.dropdownWidth;
/** @type {?} */
ColorSwatch.prototype.dropdownHeight;
/** @type {?} */
ColorSwatch.prototype.gridColumnNumber;
/** @type {?} */
ColorSwatch.prototype.loadEvent;
/** @type {?} */
ColorSwatch.prototype.startValidateEvent;
/** @type {?} */
ColorSwatch.prototype.endValidateEvent;
/** @type {?} */
ColorSwatch.prototype.beforeFocusEvent;
/** @type {?} */
ColorSwatch.prototype.focusEvent;
/** @type {?} */
ColorSwatch.prototype.beforeLostFocusEvent;
/** @type {?} */
ColorSwatch.prototype.lostFocusEvent;
/** @type {?} */
ColorSwatch.prototype.beforeChangeEvent;
/** @type {?} */
ColorSwatch.prototype.changeEvent;
/** @type {?} */
ColorSwatch.prototype.beforeSelectEvent;
/** @type {?} */
ColorSwatch.prototype.selectEvent;
/** @type {?} */
ColorSwatch.prototype.beforeClickEvent;
/** @type {?} */
ColorSwatch.prototype.clickEvent;
/** @type {?} */
ColorSwatch.prototype.beforeShowEvent;
/** @type {?} */
ColorSwatch.prototype.showEvent;
/** @type {?} */
ColorSwatch.prototype.beforeHideEvent;
/** @type {?} */
ColorSwatch.prototype.hideEvent;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sb3JTd2F0Y2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0NvbG9yU3dhdGNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRzdFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFJbkYscUJBQU0sU0FBUyxHQUFXLGtCQUFrQixDQUFDOztJQWlDWix1Q0FBc0I7SUFpSnJELHFCQUFZLGdCQUFrQyxFQUFFLFVBQXNCLEVBQUUsbUJBQXdDO2VBQzlHLGtCQUFNLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztLQUN6RDs7OztJQUVNLDhCQUFROzs7O1FBQ2IsaUJBQU0sUUFBUSxXQUFFLENBQUM7Ozs7OztJQUdaLGlDQUFXOzs7O2NBQUMsT0FBWTtRQUM3QixpQkFBTSxXQUFXLFlBQUMsT0FBTyxDQUFDLENBQUM7Ozs7O0lBRXRCLDZDQUF1Qjs7OztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDOzs7OztJQUduQyxnQ0FBVTs7OztRQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixL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TSxDQUFDLGNBQWMsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFHbEMsTUFBTSxDQUFDLGNBQWMsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFeEMsTUFBTSxDQUFDLFFBQVEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFJbEMsTUFBTSxDQUFDLGFBQWEsQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQzswQ0FDTSxZQUFZOzs7UUFFakMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOzs7UUFFaEMsTUFBTSxDQUFDLFlBQVksQ0FBQzswQ0FDTSxZQUFZOzs7UUFFdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQzswQ0FDTSxZQUFZOztzQkE3TG5DO0VBOENpQyxzQkFBc0I7U0FBMUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RTaW1wbGVEcm9wZG93biB9IGZyb20gJy4vQWJzdHJhY3RTaW1wbGVEcm9wZG93bic7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uLy4uL0lIYXNEYXRhJztcbmltcG9ydCB7IElEYXRhQ29tcGFyYXRvciB9IGZyb20gJy4uLy4uL0lEYXRhQ29tcGFyYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29sb3JTZWxlY3RJdGVtTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9Db2xvclNlbGVjdEl0ZW1Nb2RlbCc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWwvVmFsaWRhdGlvblJlc3VsdCc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb2xvci1zd2F0Y2hcIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb2xvci1zd2F0Y2hcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIj5cblx0PGRpdiBjbGFzcz1cInN3YXRjaC1jb250YWluZXIgZmx1aWRcIj5cblx0XHQ8ZGl2IGNsYXNzPVwic3dhdGNoXCI+XG5cdFx0XHQ8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xpY2soJGV2ZW50KVwiIChmb2N1c2luKT1cIm9uRm9jdXNpbmcoJGV2ZW50KVwiIChibHVyKT1cIm9uTG9zdEZvY3VzaW5nKCRldmVudClcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImxhYmVsLXNpZGVcIiAqbmdJZj1cImdldFNlbGVjdGVkSXRlbSgpICE9PSBudWxsXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiZ2V0QWxpZ24oKVwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJib3hcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnZXRTZWxlY3RlZEl0ZW1IZXhDb2xvcigpXCI+PC9kaXY+IDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7Z2V0U2VsZWN0ZWRJdGVtKCkubGFiZWx9fTwvZGl2PlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cImFycm93LXNpZGVcIj5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleC1jZW50ZXJcIj5cblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkb3duLXRyaWFuZ2xlXCI+PC9kaXY+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1lbnUtY29udGFpbmVyXCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbc3R5bGUud2lkdGhdPVwiZ2V0RHJvcGRvd25XaWR0aCgpXCIgW3N0eWxlLm1heC1oZWlnaHRdPVwiZ2V0RHJvcGRvd25IZWlnaHQoKVwiPlxuICAgICAgICA8dWwgY2xhc3M9XCJtZW51XCI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlIG5nRm9yIGxldC1pdGVtIFtuZ0Zvck9mXT1cImdldEl0ZW1zKClcIiBsZXQtaT1cImluZGV4XCI+XG5cdFx0XHRcdFx0XHQ8bGkgKGNsaWNrKT1cIm9uU2VsZWN0SXRlbUNsaWNrZWQoJGV2ZW50LCBpKVwiIFtzdHlsZS50ZXh0LWFsaWduXT1cImdldEFsaWduKClcIj5cblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImJveFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIj48L2Rpdj5cblx0XHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdFx0XHQ8YnIgKm5nSWY9XCJfc2hvd05ld0xpbmUoaSlcIi8+XG5cdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cbiAgICBcdFx0PC91bD5cbiAgICA8L2Rpdj5cblx0PC9kaXY+XG48L2Rpdj5cbmBcbn0pXG5leHBvcnQgY2xhc3MgQ29sb3JTd2F0Y2ggZXh0ZW5kcyBBYnN0cmFjdFNpbXBsZURyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC4gXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNlbGVjdEl0ZW1zXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oJ2NvbXBhcmF0b3InKVxuICBwcm90ZWN0ZWQgZGF0YUNvbXBhcmF0b3I6IElEYXRhQ29tcGFyYXRvcjxhbnk+O1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaXRlbXM6IENvbG9yU2VsZWN0SXRlbU1vZGVsW107XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0T25lSXRlbVxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNpbXBsZURyb3Bkb3duXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkcm9wZG93bldpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZHJvcGRvd25IZWlnaHQ6IHN0cmluZztcbiAgLy8gLS0tIHNlbGZcbiAgQElucHV0KCdjb2xzJylcbiAgQE9wdGlvbignY29scycpXG4gIHByb3RlY3RlZCBncmlkQ29sdW1uTnVtYmVyOiBudW1iZXI7XG5cbiAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBAT3V0cHV0KCdwaHhMb2FkJylcbiAgQE9wdGlvbignbG9hZCcpXG4gIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICBAT3V0cHV0KCdwaHhTdGFydFZhbGlkYXRlJylcbiAgQE9wdGlvbignc3RhcnRWYWxpZGF0ZScpXG4gIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhFbmRWYWxpZGF0ZScpXG4gIEBPcHRpb24oJ2VuZFZhbGlkYXRlJylcbiAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVGb2N1cycpXG4gIEBPcHRpb24oJ2JlZm9yZUZvY3VzJylcbiAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhGb2N1cycpXG4gIEBPcHRpb24oJ2ZvY3VzJylcbiAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdiZWZvcmVMb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhMb3N0Rm9jdXMnKVxuICBAT3B0aW9uKCdsb3N0Rm9jdXMnKVxuICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVDaGFuZ2UnKVxuICBAT3B0aW9uKCdiZWZvcmVDaGFuZ2UnKVxuICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICBAT3B0aW9uKCdjaGFuZ2UnKVxuICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNlbGVjdEl0ZW1zXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZVNlbGVjdCcpXG4gIEBPcHRpb24oJ2JlZm9yZVNlbGVjdCcpXG4gIHByb3RlY3RlZCBiZWZvcmVTZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeFNlbGVjdCcpXG4gIEBPcHRpb24oJ3NlbGVjdCcpXG4gIHByb3RlY3RlZCBzZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2VsZWN0T25lSXRlbVxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNpbXBsZURyb3Bkb3duXG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUNsaWNrJylcbiAgQE9wdGlvbignYmVmb3JlQ2xpY2snKVxuICBwcm90ZWN0ZWQgYmVmb3JlQ2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeENsaWNrJylcbiAgQE9wdGlvbignY2xpY2snKVxuICBwcm90ZWN0ZWQgY2xpY2tFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZVNob3cnKVxuICBAT3B0aW9uKCdiZWZvcmVTaG93JylcbiAgcHJvdGVjdGVkIGJlZm9yZVNob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeFNob3cnKVxuICBAT3B0aW9uKCdzaG93JylcbiAgcHJvdGVjdGVkIHNob3dFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEJlZm9yZUhpZGUnKVxuICBAT3B0aW9uKCdiZWZvcmVIaWRlJylcbiAgcHJvdGVjdGVkIGJlZm9yZUhpZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBPdXRwdXQoJ3BoeEhpZGUnKVxuICBAT3B0aW9uKCdoaWRlJylcbiAgcHJvdGVjdGVkIGhpZGVFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgY29uc3RydWN0b3IobmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKG5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogYW55KSB7XG4gICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG4gIH0gXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEl0ZW1IZXhDb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkSXRlbSgpLmdldFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGlzR3JpZE1vZGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZ3JpZENvbHVtbk51bWJlciAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5ncmlkQ29sdW1uTnVtYmVyID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBfc2hvd05ld0xpbmUoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmdyaWRDb2x1bW5OdW1iZXIgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuZ3JpZENvbHVtbk51bWJlciA9PT0gJ251bWJlcicgJiYgaW5kZXggPj0gMCkge1xuICAgICAgbGV0IGNvdW50ID0gaW5kZXggKyAxO1xuICAgICAgaWYgKGNvdW50ICUgdGhpcy5ncmlkQ29sdW1uTnVtYmVyID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IGFueSwgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogdm9pZCB7XG4gICAgLy8hIGRvIHN0aGluZ1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLnN3YXRjaCA+IGJ1dHRvblwiKS5mb2N1cygpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVcbiAgcHJvdGVjdGVkIGRvQmx1cigkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5zd2F0Y2ggPiBidXR0b25cIikuYmx1cigpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGVcbiAgcHJvdGVjdGVkIGdldERyb3Bkb3duUG9wdXBTZWxlY3RvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLm1lbnUnO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1zKCk6IENvbG9yU2VsZWN0SXRlbU1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkSXRlbSgpOiBDb2xvclNlbGVjdEl0ZW1Nb2RlbCB7XG4gICAgbGV0IHNJdGVtID0gc3VwZXIuZ2V0U2VsZWN0ZWRJdGVtKCk7XG5cbiAgICBpZiAoc0l0ZW0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNJdGVtIGFzIENvbG9yU2VsZWN0SXRlbU1vZGVsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=