@nakedobjects/gemini
Version:
Single Page Application client for a Naked Objects application.
150 lines • 48.8 kB
JavaScript
import { Component, HostListener, Input, ViewChildren } from '@angular/core';
import * as Ro from '@nakedobjects/restful-objects';
import { FieldComponent } from '../field/field.component';
import * as i0 from "@angular/core";
import * as i1 from "@nakedobjects/services";
import * as i2 from "@nakedobjects/view-models";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
import * as i5 from "@angular/cdk/drag-drop";
import * as i6 from "../clear.directive";
import * as i7 from "../date-picker-facade/date-picker-facade.component";
import * as i8 from "../auto-complete/auto-complete.component";
import * as i9 from "../time-picker-facade/time-picker-facade.component";
export class EditParameterComponent extends FieldComponent {
constructor(loggerService, renderer, dragAndDrop) {
super(loggerService, renderer, dragAndDrop);
}
parm;
focusList;
checkboxList;
parent;
set parameter(value) {
this.parm = value;
if (this.parameterEntryType === Ro.EntryType.FreeForm) {
this.dragAndDrop.setDropZoneId(this.parameterPaneId);
}
}
get parameter() {
return this.parm;
}
get parameterPaneId() {
return this.parameter.paneArgId;
}
get title() {
return this.parameter.title;
}
get parameterType() {
return this.parameter.type;
}
get parameterEntryType() {
return this.parameter.entryType;
}
get parameterReturnType() {
return this.parameter.returnType;
}
get format() {
return this.parameter.format;
}
get description() {
return this.parameter.description;
}
get parameterId() {
return this.parameter.id;
}
get choices() {
return this.parameter.choices;
}
get isMultiline() {
return !(this.parameter.multipleLines === 1);
}
get isPassword() {
return this.parameter.password;
}
get multilineHeight() {
return `${this.parameter.multipleLines * 20}px`;
}
get rows() {
return this.parameter.multipleLines;
}
get isEditable() {
return this.parameter.isEditable;
}
get formattedValue() {
return this.parameter.formattedValue;
}
choiceName = (choice) => choice.name;
classes() {
return {
[this.parm.color]: true,
'candrop': this.canDrop,
'dnd-drag-over': this.dragOver,
};
}
set form(fm) {
this.formGroup = fm;
}
get form() {
return this.formGroup;
}
ngOnInit() {
super.init(this.parent, this.parameter, this.form.controls[this.parm.id]);
}
isChoices() {
return this.parm.entryType === Ro.EntryType.Choices ||
this.parm.entryType === Ro.EntryType.ConditionalChoices ||
this.parm.entryType === Ro.EntryType.MultipleChoices ||
this.parm.entryType === Ro.EntryType.MultipleConditionalChoices;
}
isMultiple() {
return this.parm.entryType === Ro.EntryType.MultipleChoices ||
this.parm.entryType === Ro.EntryType.MultipleConditionalChoices;
}
onKeydown(event) {
this.handleKeyEvents(event, this.isMultiline);
}
onKeypress(event) {
this.handleKeyEvents(event, this.isMultiline);
}
onClick(event) {
this.handleClick(event);
}
ngAfterViewInit() {
this.populateBoolean();
}
ngOnDestroy() {
this.dragAndDrop.clearDropZoneId(this.parameterPaneId);
super.ngOnDestroy();
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EditParameterComponent, deps: [{ token: i1.LoggerService }, { token: i0.Renderer2 }, { token: i2.DragAndDropService }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: EditParameterComponent, selector: "nof-edit-parameter", inputs: { parent: "parent", parameter: "parameter", form: "form" }, host: { listeners: { "keydown": "onKeydown($event)", "keypress": "onKeypress($event)", "click": "onClick($event)" } }, viewQueries: [{ propertyName: "focusList", predicate: ["focus"], descendants: true }, { propertyName: "checkboxList", predicate: ["checkbox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"name\">\n <label attr.for=\"{{parameterPaneId}}\">{{title}}</label>\n</div>\n<div [formGroup]=\"form\">\n <ng-container *ngIf=\"parameterType === 'ref'\">\n\n <div *ngIf=\"!isEditable\" class=\"value\" [ngClass]=\"classes()\">\n {{formattedValue}}\n </div>\n\n <div *ngIf=\"isEditable\" class=\"value input-control text\">\n <!--\"EntryType.AutoComplete\"-->\n <ng-container *ngIf=\"parameterEntryType === 5\">\n <nof-auto-complete #focus [form]=\"form\" [model]=\"parameter\"></nof-auto-complete>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && !isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" multiple [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <!--\"EntryType.FreeForm\"-->\n <ng-container *ngIf=\"parameterEntryType === 0\">\n <input\n #focus\n [id]=\"parameterPaneId\"\n class=\"value droppable\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n (cdkDropListExited)=\"exit()\"\n (cdkDropListEntered)=\"enter()\"\n [cdkDropListEnterPredicate]=\"accept\"\n [ngClass]=\"classes()\"\n placeholder=\"{{description}}\"\n type=\"text\"\n [formControlName]=\"parameterId\"\n [nofClear]=\"subject\"\n (clear)=\"clear()\"/>\n </ng-container>\n\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"parameterType === 'scalar'\">\n\n <ng-container *ngIf=\"!isEditable\"> \n <ng-container [ngSwitch]=\"parameterReturnType\">\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container>\n <div *ngIf=\"!isMultiline\" class=\"value\">\n {{formattedValue}}\n </div>\n <div *ngIf=\"isMultiline\" class=\"value multiline\" [ngStyle]=\"{height : multilineHeight}\">\n <pre>{{formattedValue}}</pre>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"formattedValue\" disabled=\"disabled\" />\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <div class=\"value\">\n {{formattedValue}}\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"isEditable\" class=\"value input-control text\">\n\n <!--\"EntryType.File\"-->\n <ng-container *ngIf=\"parameterEntryType === 6\">\n <input #focus [id]=\"parameterPaneId\" type=\"file\" placeholder=\"{{description}}\" (change)=\"fileUpload($event)\" />\n </ng-container>\n\n <!--\"EntryType.AutoComplete\"-->\n <ng-container *ngIf=\"parameterEntryType === 5\">\n <nof-auto-complete #focus [form]=\"form\" [model]=\"parameter\"></nof-auto-complete>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && !isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" multiple [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <!--\"EntryType.FreeForm\"-->\n <ng-container *ngIf=\"parameterEntryType === 0\">\n <ng-container [ngSwitch]=\"parameterReturnType\">\n <ng-container *ngSwitchCase=\"'string'\" [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"'date'\">\n <nof-date-picker-facade #focus [control]=\"control\" [form]=\"form\" [model]=\"parameter\"></nof-date-picker-facade>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nof-time-picker-facade #focus [control]=\"control\" [form]=\"form\" [model]=\"parameter\"></nof-time-picker-facade>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input #focus *ngIf=\"!isMultiline\" [id]=\"parameterPaneId\" placeholder=\"{{description}}\"\n type=\"{{isPassword ? 'password' : 'text'}}\" [formControlName]=\"parameterId\" [nofClear]=\"subject\" (clear)=\"clear()\" />\n <textarea #focus *ngIf=\"isMultiline\" rows=\"{{rows}}\" [id]=\"parameterPaneId\" [formControlName]=\"parameterId\"\n placeholder=\"{{description}}\"></textarea>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input #focus #checkbox [id]=\"parameterPaneId\" type=\"checkbox\" [formControlName]=\"parameterId\" />{{description}}\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input #focus [id]=\"parameterPaneId\" type=\"text\" placeholder=\"{{description}}\" [formControlName]=\"parameterId\" [nofClear]=\"subject\" (clear)=\"clear()\" />\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</div>\n<div class=\"validation\">{{message}}</div>", styles: [":host{overflow:hidden;display:block;width:var(--field-width)}:host:not(:last-child){margin-bottom:var(--space-3)}input[type=text],select{border-style:solid;border-color:gray;border-width:1px}input[type=text]{padding-left:var(--space-3);padding-right:var(--space-4)}input:hover,input:focus{outline-color:#000;outline-width:1px}.name{float:left;width:var(--field-name-width);padding-right:var(--space-3)}.reference,.value,collectionDetails{width:var(--field-value-width);margin:var(--space-1);float:left}input:not([type=checkbox]),textarea{width:var(--field-value-width);padding-right:var(--space-4)}input:not([type=checkbox]){height:var(--field-value-height)}input[type=text]{padding-left:var(--space-3)}.validation{display:block;color:var(--dialog-text-color)}:host.multilinedialog,:host.multilinedialog .co-validation,.multilinedialog .buttons{display:inline-block;vertical-align:top}:host.multilinedialog .name{display:none}:host.multilinedialog .parameter{width:var(--field-value-width)}:host.multilinedialog input:focus,:host.multilinedialog input:hover{outline-width:1px;outline-color:#00f}:host.multilinedialog .input-control input:not([type=checkbox]),:host.multilinedialog select{height:var(--field-value-height);padding-top:var(--space-1)}:host.multilinedialog .validation{color:var(--default-text-color);margin-left:var(--space-3)}.value.droppable{border:solid;border-width:1px;width:var(--field-value-width);height:var(--field-value-height)}.value.droppable{border-color:#000}.value.droppable.dnd-drag-over.candrop{border-color:var(--approval-color);background-color:#fff;cursor:pointer}.value.droppable.dnd-drag-over{border-color:var(--warning-color)}textarea{color:#000}.multiline{overflow:auto}.ng-clearable{background-image:var(--clearable-image);background-repeat:no-repeat;background-position:right -10px;background-size:8px}.ng-clearable[class*=link-color]{background-image:var(--clearable-link-image)}.ng-clearable.ng-x{background-position:right 2px center}.ng-clearable.ng-onX{cursor:pointer}input::-ms-clear{display:none}.input-control input.hasDatepicker,.input-control input.ui-timepicker-input{width:217px}.input-control input.hasDatepicker,.input-control input.ui-timepicker-input{width:207px;float:left}img.ui-datepicker-trigger{margin-left:var(--space-3);margin-top:var(--space-1);width:20px}img.ui-datepicker-trigger{background-color:var(--default-background-color)}select{width:var(--field-value-width);height:var(--field-value-height)}select[multiple]{height:68px}.validation{margin-left:15var(--space-3);font-size:var(--font-size-2)}.suggestions{display:block;color:#000;background-color:#fff;font-size:var(--font-size-1);width:var(--field-value-width);border-style:solid;border-width:1px;border-color:#000}.suggestions ul{display:block;margin:0;padding:var(--space-3)}.suggestions ul:hover{color:#fff;background-color:#000}.suggestions li{list-style-type:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.SelectMultipleControlValueAccessor, selector: "select[multiple][formControlName],select[multiple][formControl],select[multiple][ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.ClearDirective, selector: "[nofClear]", inputs: ["nofClear"], outputs: ["clear"] }, { kind: "component", type: i7.DatePickerFacadeComponent, selector: "nof-date-picker-facade", inputs: ["control", "form", "model"] }, { kind: "component", type: i8.AutoCompleteComponent, selector: "nof-auto-complete", inputs: ["model", "form"] }, { kind: "component", type: i9.TimePickerFacadeComponent, selector: "nof-time-picker-facade", inputs: ["control", "form", "model"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: EditParameterComponent, decorators: [{
type: Component,
args: [{ selector: 'nof-edit-parameter', template: "<div class=\"name\">\n <label attr.for=\"{{parameterPaneId}}\">{{title}}</label>\n</div>\n<div [formGroup]=\"form\">\n <ng-container *ngIf=\"parameterType === 'ref'\">\n\n <div *ngIf=\"!isEditable\" class=\"value\" [ngClass]=\"classes()\">\n {{formattedValue}}\n </div>\n\n <div *ngIf=\"isEditable\" class=\"value input-control text\">\n <!--\"EntryType.AutoComplete\"-->\n <ng-container *ngIf=\"parameterEntryType === 5\">\n <nof-auto-complete #focus [form]=\"form\" [model]=\"parameter\"></nof-auto-complete>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && !isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" multiple [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <!--\"EntryType.FreeForm\"-->\n <ng-container *ngIf=\"parameterEntryType === 0\">\n <input\n #focus\n [id]=\"parameterPaneId\"\n class=\"value droppable\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n (cdkDropListExited)=\"exit()\"\n (cdkDropListEntered)=\"enter()\"\n [cdkDropListEnterPredicate]=\"accept\"\n [ngClass]=\"classes()\"\n placeholder=\"{{description}}\"\n type=\"text\"\n [formControlName]=\"parameterId\"\n [nofClear]=\"subject\"\n (clear)=\"clear()\"/>\n </ng-container>\n\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"parameterType === 'scalar'\">\n\n <ng-container *ngIf=\"!isEditable\"> \n <ng-container [ngSwitch]=\"parameterReturnType\">\n <ng-container *ngSwitchCase=\"'string'\">\n <ng-container>\n <div *ngIf=\"!isMultiline\" class=\"value\">\n {{formattedValue}}\n </div>\n <div *ngIf=\"isMultiline\" class=\"value multiline\" [ngStyle]=\"{height : multilineHeight}\">\n <pre>{{formattedValue}}</pre>\n </div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"formattedValue\" disabled=\"disabled\" />\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <div class=\"value\">\n {{formattedValue}}\n </div>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"isEditable\" class=\"value input-control text\">\n\n <!--\"EntryType.File\"-->\n <ng-container *ngIf=\"parameterEntryType === 6\">\n <input #focus [id]=\"parameterPaneId\" type=\"file\" placeholder=\"{{description}}\" (change)=\"fileUpload($event)\" />\n </ng-container>\n\n <!--\"EntryType.AutoComplete\"-->\n <ng-container *ngIf=\"parameterEntryType === 5\">\n <nof-auto-complete #focus [form]=\"form\" [model]=\"parameter\"></nof-auto-complete>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && !isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <ng-container *ngIf=\"isChoices() && isMultiple()\">\n <select #focus [id]=\"parameterPaneId\" multiple [formControlName]=\"parameterId\">\n <option *ngFor=\"let choice of choices\" [label]=\"choiceName(choice)\" [ngValue]=\"choice\">{{choiceName(choice)}}</option>\n </select>\n </ng-container>\n\n <!--\"EntryType.FreeForm\"-->\n <ng-container *ngIf=\"parameterEntryType === 0\">\n <ng-container [ngSwitch]=\"parameterReturnType\">\n <ng-container *ngSwitchCase=\"'string'\" [ngSwitch]=\"format\">\n <ng-container *ngSwitchCase=\"'date'\">\n <nof-date-picker-facade #focus [control]=\"control\" [form]=\"form\" [model]=\"parameter\"></nof-date-picker-facade>\n </ng-container>\n <ng-container *ngSwitchCase=\"'time'\">\n <nof-time-picker-facade #focus [control]=\"control\" [form]=\"form\" [model]=\"parameter\"></nof-time-picker-facade>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input #focus *ngIf=\"!isMultiline\" [id]=\"parameterPaneId\" placeholder=\"{{description}}\"\n type=\"{{isPassword ? 'password' : 'text'}}\" [formControlName]=\"parameterId\" [nofClear]=\"subject\" (clear)=\"clear()\" />\n <textarea #focus *ngIf=\"isMultiline\" rows=\"{{rows}}\" [id]=\"parameterPaneId\" [formControlName]=\"parameterId\"\n placeholder=\"{{description}}\"></textarea>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input #focus #checkbox [id]=\"parameterPaneId\" type=\"checkbox\" [formControlName]=\"parameterId\" />{{description}}\n </ng-container>\n <ng-container *ngSwitchDefault>\n <input #focus [id]=\"parameterPaneId\" type=\"text\" placeholder=\"{{description}}\" [formControlName]=\"parameterId\" [nofClear]=\"subject\" (clear)=\"clear()\" />\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</div>\n<div class=\"validation\">{{message}}</div>", styles: [":host{overflow:hidden;display:block;width:var(--field-width)}:host:not(:last-child){margin-bottom:var(--space-3)}input[type=text],select{border-style:solid;border-color:gray;border-width:1px}input[type=text]{padding-left:var(--space-3);padding-right:var(--space-4)}input:hover,input:focus{outline-color:#000;outline-width:1px}.name{float:left;width:var(--field-name-width);padding-right:var(--space-3)}.reference,.value,collectionDetails{width:var(--field-value-width);margin:var(--space-1);float:left}input:not([type=checkbox]),textarea{width:var(--field-value-width);padding-right:var(--space-4)}input:not([type=checkbox]){height:var(--field-value-height)}input[type=text]{padding-left:var(--space-3)}.validation{display:block;color:var(--dialog-text-color)}:host.multilinedialog,:host.multilinedialog .co-validation,.multilinedialog .buttons{display:inline-block;vertical-align:top}:host.multilinedialog .name{display:none}:host.multilinedialog .parameter{width:var(--field-value-width)}:host.multilinedialog input:focus,:host.multilinedialog input:hover{outline-width:1px;outline-color:#00f}:host.multilinedialog .input-control input:not([type=checkbox]),:host.multilinedialog select{height:var(--field-value-height);padding-top:var(--space-1)}:host.multilinedialog .validation{color:var(--default-text-color);margin-left:var(--space-3)}.value.droppable{border:solid;border-width:1px;width:var(--field-value-width);height:var(--field-value-height)}.value.droppable{border-color:#000}.value.droppable.dnd-drag-over.candrop{border-color:var(--approval-color);background-color:#fff;cursor:pointer}.value.droppable.dnd-drag-over{border-color:var(--warning-color)}textarea{color:#000}.multiline{overflow:auto}.ng-clearable{background-image:var(--clearable-image);background-repeat:no-repeat;background-position:right -10px;background-size:8px}.ng-clearable[class*=link-color]{background-image:var(--clearable-link-image)}.ng-clearable.ng-x{background-position:right 2px center}.ng-clearable.ng-onX{cursor:pointer}input::-ms-clear{display:none}.input-control input.hasDatepicker,.input-control input.ui-timepicker-input{width:217px}.input-control input.hasDatepicker,.input-control input.ui-timepicker-input{width:207px;float:left}img.ui-datepicker-trigger{margin-left:var(--space-3);margin-top:var(--space-1);width:20px}img.ui-datepicker-trigger{background-color:var(--default-background-color)}select{width:var(--field-value-width);height:var(--field-value-height)}select[multiple]{height:68px}.validation{margin-left:15var(--space-3);font-size:var(--font-size-2)}.suggestions{display:block;color:#000;background-color:#fff;font-size:var(--font-size-1);width:var(--field-value-width);border-style:solid;border-width:1px;border-color:#000}.suggestions ul{display:block;margin:0;padding:var(--space-3)}.suggestions ul:hover{color:#fff;background-color:#000}.suggestions li{list-style-type:none}\n"] }]
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: i0.Renderer2 }, { type: i2.DragAndDropService }], propDecorators: { focusList: [{
type: ViewChildren,
args: ['focus']
}], checkboxList: [{
type: ViewChildren,
args: ['checkbox']
}], parent: [{
type: Input,
args: [{ required: true }]
}], parameter: [{
type: Input,
args: [{ required: true }]
}], form: [{
type: Input,
args: [{ required: true }]
}], onKeydown: [{
type: HostListener,
args: ['keydown', ['$event']]
}], onKeypress: [{
type: HostListener,
args: ['keypress', ['$event']]
}], onClick: [{
type: HostListener,
args: ['click', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC1wYXJhbWV0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZ2VtaW5pL3NyYy9lZGl0LXBhcmFtZXRlci9lZGl0LXBhcmFtZXRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9nZW1pbmkvc3JjL2VkaXQtcGFyYW1ldGVyL2VkaXQtcGFyYW1ldGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFJTCxZQUFZLEVBRWYsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU1wRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7O0FBUTFELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxjQUFjO0lBRXRELFlBQ0ksYUFBNEIsRUFDNUIsUUFBbUIsRUFDbkIsV0FBK0I7UUFFL0IsS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksQ0FBc0I7SUFHMUIsU0FBUyxDQUF5RztJQUdsSCxZQUFZLENBQXlCO0lBR3JDLE1BQU0sQ0FBMkQ7SUFFakUsSUFDSSxTQUFTLENBQUMsS0FBeUI7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFB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QURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1uQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1wQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgT25EZXN0cm95XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0ICogYXMgUm8gZnJvbSAnQG5ha2Vkb2JqZWN0cy9yZXN0ZnVsLW9iamVjdHMnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJ0BuYWtlZG9iamVjdHMvc2VydmljZXMnO1xuaW1wb3J0IHsgQ2hvaWNlVmlld01vZGVsLCBEaWFsb2dWaWV3TW9kZWwsIERvbWFpbk9iamVjdFZpZXdNb2RlbCwgRHJhZ0FuZERyb3BTZXJ2aWNlLCBNZW51Vmlld01vZGVsLCBQYXJhbWV0ZXJWaWV3TW9kZWwgfSBmcm9tICdAbmFrZWRvYmplY3RzL3ZpZXctbW9kZWxzJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vYXV0by1jb21wbGV0ZS9hdXRvLWNvbXBsZXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyRmFjYWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXItZmFjYWRlL2RhdGUtcGlja2VyLWZhY2FkZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9maWVsZC9maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGltZVBpY2tlckZhY2FkZUNvbXBvbmVudCB9IGZyb20gJy4uL3RpbWUtcGlja2VyLWZhY2FkZS90aW1lLXBpY2tlci1mYWNhZGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdub2YtZWRpdC1wYXJhbWV0ZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnZWRpdC1wYXJhbWV0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydlZGl0LXBhcmFtZXRlci5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRWRpdFBhcmFtZXRlckNvbXBvbmVudCBleHRlbmRzIEZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIGRyYWdBbmREcm9wOiBEcmFnQW5kRHJvcFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIobG9nZ2VyU2VydmljZSwgcmVuZGVyZXIsIGRyYWdBbmREcm9wKTtcbiAgICB9XG5cbiAgICBwYXJtITogUGFyYW1ldGVyVmlld01vZGVsO1xuXG4gICAgQFZpZXdDaGlsZHJlbignZm9jdXMnKVxuICAgIGZvY3VzTGlzdD86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmIHwgRGF0ZVBpY2tlckZhY2FkZUNvbXBvbmVudCB8IFRpbWVQaWNrZXJGYWNhZGVDb21wb25lbnQgfCBBdXRvQ29tcGxldGVDb21wb25lbnQ+O1xuXG4gICAgQFZpZXdDaGlsZHJlbignY2hlY2tib3gnKVxuICAgIGNoZWNrYm94TGlzdD86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQgOiB0cnVlfSlcbiAgICBwYXJlbnQhOiBEaWFsb2dWaWV3TW9kZWwgfCBNZW51Vmlld01vZGVsIHwgRG9tYWluT2JqZWN0Vmlld01vZGVsO1xuXG4gICAgQElucHV0KHtyZXF1aXJlZCA6IHRydWV9KVxuICAgIHNldCBwYXJhbWV0ZXIodmFsdWU6IFBhcmFtZXRlclZpZXdNb2RlbCkge1xuICAgICAgICB0aGlzLnBhcm0gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVyRW50cnlUeXBlID09PSBSby5FbnRyeVR5cGUuRnJlZUZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ0FuZERyb3Auc2V0RHJvcFpvbmVJZCh0aGlzLnBhcmFtZXRlclBhbmVJZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJtO1xuICAgIH1cblxuICAgIGdldCBwYXJhbWV0ZXJQYW5lSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5wYW5lQXJnSWQ7XG4gICAgfVxuXG4gICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXIudGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHBhcmFtZXRlclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci50eXBlO1xuICAgIH1cblxuICAgIGdldCBwYXJhbWV0ZXJFbnRyeVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5lbnRyeVR5cGU7XG4gICAgfVxuXG4gICAgZ2V0IHBhcmFtZXRlclJldHVyblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5yZXR1cm5UeXBlO1xuICAgIH1cblxuICAgIGdldCBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5mb3JtYXQ7XG4gICAgfVxuXG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXIuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgZ2V0IHBhcmFtZXRlcklkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXIuaWQ7XG4gICAgfVxuXG4gICAgZ2V0IGNob2ljZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5jaG9pY2VzO1xuICAgIH1cblxuICAgIGdldCBpc011bHRpbGluZSgpIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5wYXJhbWV0ZXIubXVsdGlwbGVMaW5lcyA9PT0gMSk7XG4gICAgfVxuXG4gICAgZ2V0IGlzUGFzc3dvcmQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5wYXNzd29yZDtcbiAgICB9XG5cbiAgICBnZXQgbXVsdGlsaW5lSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wYXJhbWV0ZXIubXVsdGlwbGVMaW5lcyAqIDIwfXB4YDtcbiAgICB9XG5cbiAgICBnZXQgcm93cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldGVyLm11bHRpcGxlTGluZXM7XG4gICAgfVxuXG4gICAgZ2V0IGlzRWRpdGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRlci5pc0VkaXRhYmxlO1xuICAgIH1cblxuICAgIGdldCBmb3JtYXR0ZWRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldGVyLmZvcm1hdHRlZFZhbHVlO1xuICAgIH1cblxuICAgIGNob2ljZU5hbWUgPSAoY2hvaWNlOiBDaG9pY2VWaWV3TW9kZWwpID0+IGNob2ljZS5uYW1lO1xuXG4gICAgY2xhc3NlcygpOiBEaWN0aW9uYXJ5PGJvb2xlYW4gfCBudWxsPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbdGhpcy5wYXJtLmNvbG9yXTogdHJ1ZSxcbiAgICAgICAgICAgICdjYW5kcm9wJzogdGhpcy5jYW5Ecm9wLFxuICAgICAgICAgICAgJ2RuZC1kcmFnLW92ZXInOiB0aGlzLmRyYWdPdmVyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KVxuICAgIHNldCBmb3JtKGZtOiBGb3JtR3JvdXApIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSBmbTtcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5pbml0KHRoaXMucGFyZW50LCB0aGlzLnBhcmFtZXRlciwgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMucGFybS5pZF0pO1xuICAgIH1cblxuICAgIGlzQ2hvaWNlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFybS5lbnRyeVR5cGUgPT09IFJvLkVudHJ5VHlwZS5DaG9pY2VzIHx8XG4gICAgICAgICAgICB0aGlzLnBhcm0uZW50cnlUeXBlID09PSBSby5FbnRyeVR5cGUuQ29uZGl0aW9uYWxDaG9pY2VzIHx8XG4gICAgICAgICAgICB0aGlzLnBhcm0uZW50cnlUeXBlID09PSBSby5FbnRyeVR5cGUuTXVsdGlwbGVDaG9pY2VzIHx8XG4gICAgICAgICAgICB0aGlzLnBhcm0uZW50cnlUeXBlID09PSBSby5FbnRyeVR5cGUuTXVsdGlwbGVDb25kaXRpb25hbENob2ljZXM7XG4gICAgfVxuXG4gICAgaXNNdWx0aXBsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFybS5lbnRyeVR5cGUgPT09IFJvLkVudHJ5VHlwZS5NdWx0aXBsZUNob2ljZXMgfHxcbiAgICAgICAgICAgIHRoaXMucGFybS5lbnRyeVR5cGUgPT09IFJvLkVudHJ5VHlwZS5NdWx0aXBsZUNvbmRpdGlvbmFsQ2hvaWNlcztcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVLZXlFdmVudHMoZXZlbnQsIHRoaXMuaXNNdWx0aWxpbmUpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleXByZXNzJywgWyckZXZlbnQnXSlcbiAgICBvbktleXByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RXZlbnRzKGV2ZW50LCB0aGlzLmlzTXVsdGlsaW5lKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgb25DbGljayhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMucG9wdWxhdGVCb29sZWFuKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJhZ0FuZERyb3AuY2xlYXJEcm9wWm9uZUlkKHRoaXMucGFyYW1ldGVyUGFuZUlkKTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmFtZVwiPlxuICAgIDxsYWJlbCBhdHRyLmZvcj1cInt7cGFyYW1ldGVyUGFuZUlkfX1cIj57e3RpdGxlfX08L2xhYmVsPlxuPC9kaXY+XG48ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJUeXBlID09PSAncmVmJ1wiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNFZGl0YWJsZVwiIGNsYXNzPVwidmFsdWVcIiBbbmdDbGFzc109XCJjbGFzc2VzKClcIj5cbiAgICAgICAgICAgIHt7Zm9ybWF0dGVkVmFsdWV9fVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZVwiIGNsYXNzPVwidmFsdWUgaW5wdXQtY29udHJvbCB0ZXh0XCI+XG4gICAgICAgICAgICA8IS0tXCJFbnRyeVR5cGUuQXV0b0NvbXBsZXRlXCItLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJFbnRyeVR5cGUgPT09IDVcIj5cbiAgICAgICAgICAgICAgICA8bm9mLWF1dG8tY29tcGxldGUgI2ZvY3VzIFtmb3JtXT1cImZvcm1cIiBbbW9kZWxdPVwicGFyYW1ldGVyXCI+PC9ub2YtYXV0by1jb21wbGV0ZT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaG9pY2VzKCkgJiYgIWlzTXVsdGlwbGUoKVwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgI2ZvY3VzIFtpZF09XCJwYXJhbWV0ZXJQYW5lSWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInBhcmFtZXRlcklkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGNob2ljZSBvZiBjaG9pY2VzXCIgW2xhYmVsXT1cImNob2ljZU5hbWUoY2hvaWNlKVwiIFtuZ1ZhbHVlXT1cImNob2ljZVwiPnt7Y2hvaWNlTmFtZShjaG9pY2UpfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDaG9pY2VzKCkgJiYgaXNNdWx0aXBsZSgpXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCAjZm9jdXMgW2lkXT1cInBhcmFtZXRlclBhbmVJZFwiIG11bHRpcGxlIFtmb3JtQ29udHJvbE5hbWVdPVwicGFyYW1ldGVySWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGNob2ljZXNcIiBbbGFiZWxdPVwiY2hvaWNlTmFtZShjaG9pY2UpXCIgW25nVmFsdWVdPVwiY2hvaWNlXCI+e3tjaG9pY2VOYW1lKGNob2ljZSl9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1cIkVudHJ5VHlwZS5GcmVlRm9ybVwiLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyYW1ldGVyRW50cnlUeXBlID09PSAwXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICNmb2N1c1xuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicGFyYW1ldGVyUGFuZUlkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZSBkcm9wcGFibGVcIlxuICAgICAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdEV4aXRlZCk9XCJleGl0KClcIlxuICAgICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3RFbnRlcmVkKT1cImVudGVyKClcIlxuICAgICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjbGFzc2VzKClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ZGVzY3JpcHRpb259fVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJwYXJhbWV0ZXJJZFwiXG4gICAgICAgICAgICAgICAgICAgIFtub2ZDbGVhcl09XCJzdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsZWFyKT1cImNsZWFyKClcIi8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJUeXBlID09PSAnc2NhbGFyJ1wiPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0YWJsZVwiPiBcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInBhcmFtZXRlclJldHVyblR5cGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3RyaW5nJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc011bHRpbGluZVwiIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Zvcm1hdHRlZFZhbHVlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTXVsdGlsaW5lXCIgY2xhc3M9XCJ2YWx1ZSBtdWx0aWxpbmVcIiBbbmdTdHlsZV09XCJ7aGVpZ2h0IDogbXVsdGlsaW5lSGVpZ2h0fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcmU+e3tmb3JtYXR0ZWRWYWx1ZX19PC9wcmU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiICBbY2hlY2tlZF09XCJmb3JtYXR0ZWRWYWx1ZVwiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7Zm9ybWF0dGVkVmFsdWV9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFZGl0YWJsZVwiIGNsYXNzPVwidmFsdWUgaW5wdXQtY29udHJvbCB0ZXh0XCI+XG5cbiAgICAgICAgICAgIDwhLS1cIkVudHJ5VHlwZS5GaWxlXCItLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJFbnRyeVR5cGUgPT09IDZcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgI2ZvY3VzIFtpZF09XCJwYXJhbWV0ZXJQYW5lSWRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3tkZXNjcmlwdGlvbn19XCIgKGNoYW5nZSk9XCJmaWxlVXBsb2FkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS1cIkVudHJ5VHlwZS5BdXRvQ29tcGxldGVcIi0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmFtZXRlckVudHJ5VHlwZSA9PT0gNVwiPlxuICAgICAgICAgICAgICAgIDxub2YtYXV0by1jb21wbGV0ZSAjZm9jdXMgW2Zvcm1dPVwiZm9ybVwiIFttb2RlbF09XCJwYXJhbWV0ZXJcIj48L25vZi1hdXRvLWNvbXBsZXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Nob2ljZXMoKSAmJiAhaXNNdWx0aXBsZSgpXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCAjZm9jdXMgW2lkXT1cInBhcmFtZXRlclBhbmVJZFwiIFtmb3JtQ29udHJvbE5hbWVdPVwicGFyYW1ldGVySWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY2hvaWNlIG9mIGNob2ljZXNcIiBbbGFiZWxdPVwiY2hvaWNlTmFtZShjaG9pY2UpXCIgW25nVmFsdWVdPVwiY2hvaWNlXCI+e3tjaG9pY2VOYW1lKGNob2ljZSl9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0Nob2ljZXMoKSAmJiBpc011bHRpcGxlKClcIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0ICNmb2N1cyBbaWRdPVwicGFyYW1ldGVyUGFuZUlkXCIgbXVsdGlwbGUgW2Zvcm1Db250cm9sTmFtZV09XCJwYXJhbWV0ZXJJZFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjaG9pY2Ugb2YgY2hvaWNlc1wiIFtsYWJlbF09XCJjaG9pY2VOYW1lKGNob2ljZSlcIiBbbmdWYWx1ZV09XCJjaG9pY2VcIj57e2Nob2ljZU5hbWUoY2hvaWNlKX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLVwiRW50cnlUeXBlLkZyZWVGb3JtXCItLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJhbWV0ZXJFbnRyeVR5cGUgPT09IDBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwYXJhbWV0ZXJSZXR1cm5UeXBlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdHJpbmcnXCIgW25nU3dpdGNoXT1cImZvcm1hdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vZi1kYXRlLXBpY2tlci1mYWNhZGUgI2ZvY3VzIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVsXT1cInBhcmFtZXRlclwiPjwvbm9mLWRhdGUtcGlja2VyLWZhY2FkZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vZi10aW1lLXBpY2tlci1mYWNhZGUgI2ZvY3VzIFtjb250cm9sXT1cImNvbnRyb2xcIiBbZm9ybV09XCJmb3JtXCIgW21vZGVsXT1cInBhcmFtZXRlclwiPjwvbm9mLXRpbWUtcGlja2VyLWZhY2FkZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZm9jdXMgKm5nSWY9XCIhaXNNdWx0aWxpbmVcIiBbaWRdPVwicGFyYW1ldGVyUGFuZUlkXCIgcGxhY2Vob2xkZXI9XCJ7e2Rlc2NyaXB0aW9ufX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwie3tpc1Bhc3N3b3JkID8gJ3Bhc3N3b3JkJyA6ICd0ZXh0J319XCIgW2Zvcm1Db250cm9sTmFtZV09XCJwYXJhbWV0ZXJJZFwiIFtub2ZDbGVhcl09XCJzdWJqZWN0XCIgKGNsZWFyKT1cImNsZWFyKClcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAjZm9jdXMgKm5nSWY9XCJpc011bHRpbGluZVwiIHJvd3M9XCJ7e3Jvd3N9fVwiIFtpZF09XCJwYXJhbWV0ZXJQYW5lSWRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInBhcmFtZXRlcklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e2Rlc2NyaXB0aW9ufX1cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZm9jdXMgI2NoZWNrYm94IFtpZF09XCJwYXJhbWV0ZXJQYW5lSWRcIiB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cInBhcmFtZXRlcklkXCIgLz57e2Rlc2NyaXB0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjZm9jdXMgW2lkXT1cInBhcmFtZXRlclBhbmVJZFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7e2Rlc2NyaXB0aW9ufX1cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInBhcmFtZXRlcklkXCIgW25vZkNsZWFyXT1cInN1YmplY3RcIiAoY2xlYXIpPVwiY2xlYXIoKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwidmFsaWRhdGlvblwiPnt7bWVzc2FnZX19PC9kaXY+Il19