verben-workflow-ui 0.5.65 → 0.5.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -138,11 +138,11 @@ export class FormControlComponent {
|
|
|
138
138
|
return this.selectedFilesMap.get(property);
|
|
139
139
|
}
|
|
140
140
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, deps: [{ token: i1.HttpWebRequestService }, { token: i1.UtilService }, { token: i0.ChangeDetectorRef }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormControlComponent, selector: "form-control", inputs: { dataType: "dataType", value: "value", boolInputType: "boolInputType", formProperties: "formProperties", disabled: "disabled" }, ngImport: i0, template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileUploadComponent, selector: "file-upload", inputs: ["multiple", "label", "accept", "selectedFiles", "disabled"], outputs: ["selectedFilesChange"] }, { kind: "component", type: i4.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
|
|
141
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormControlComponent, selector: "form-control", inputs: { dataType: "dataType", value: "value", boolInputType: "boolInputType", formProperties: "formProperties", disabled: "disabled" }, ngImport: i0, template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [ngModel]=\"property.Value == 'true' || property.Value == 'True'\"\n (ngModelChange)=\"property.Value = $event.toString()\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileUploadComponent, selector: "file-upload", inputs: ["multiple", "label", "accept", "selectedFiles", "disabled"], outputs: ["selectedFilesChange"] }, { kind: "component", type: i4.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
|
|
142
142
|
}
|
|
143
143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, decorators: [{
|
|
144
144
|
type: Component,
|
|
145
|
-
args: [{ selector: 'form-control', template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [
|
|
145
|
+
args: [{ selector: 'form-control', template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [ngModel]=\"property.Value == 'true' || property.Value == 'True'\"\n (ngModelChange)=\"property.Value = $event.toString()\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n" }]
|
|
146
146
|
}], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.UtilService }, { type: i0.ChangeDetectorRef }, { type: i1.EnvironmentService }], propDecorators: { dataType: [{
|
|
147
147
|
type: Input
|
|
148
148
|
}], value: [{
|
|
@@ -154,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
154
154
|
}], disabled: [{
|
|
155
155
|
type: Input
|
|
156
156
|
}] } });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2Zvcm0tY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tY29udHJvbC9mb3JtLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUNMLGFBQWEsRUFFYixXQUFXLEdBQ1osTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBZS9FLE1BQU0sT0FBTyxvQkFBb0I7SUFVckI7SUFDQTtJQUNBO0lBQ0E7SUFaRCxRQUFRLENBQVk7SUFDcEIsS0FBSyxHQUFRLEVBQUUsQ0FBQztJQUNoQixhQUFhLEdBQWtCLFVBQVUsQ0FBQztJQUMxQyxjQUFjLEdBQW1CLEVBQUUsQ0FBQztJQUNwQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRW5DLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixZQUNVLE1BQTZCLEVBQzdCLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLE1BQTBCO1FBSDFCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFX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QyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFzQjtRQUMxQyxJQUFJLFFBQVEsR0FBUTtZQUNsQixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7U0FDckIsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFMUMsUUFBUSxDQUFDLFFBQWE7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDO0lBQzlDLENBQUM7d0dBcEpVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDhMQ3JCakMsazZSQTZQQTs7NEZEeE9hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjO3FMQUtmLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFcnJvclJlc3BvbnNlLFxuICBGb3JtUHJvcGVydHksXG4gIE9iamVjdFN0YXRlLFxufSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVR5cGUsIEZpbGUgYXMgRmlsZURhdGEgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgVXRpbFNlcnZpY2UsXG59IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5leHBvcnQgdHlwZSBCb29sSW5wdXRUeXBlID0gJ3N3aXRjaCcgfCAnY2hlY2tib3gnIHwgJ3JhZGlvJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybS1jb250cm9sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tY29udHJvbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tY29udHJvbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZGF0YVR5cGUhOiBEYXRhVHlwZTtcbiAgQElucHV0KCkgdmFsdWU6IGFueSA9ICcnO1xuICBASW5wdXQoKSBib29sSW5wdXRUeXBlOiBCb29sSW5wdXRUeXBlID0gJ2NoZWNrYm94JztcbiAgQElucHV0KCkgZm9ybVByb3BlcnRpZXM6IEZvcm1Qcm9wZXJ0eVtdID0gW107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZmlsZUJhc2VVcmw6IHN0cmluZyA9ICcnO1xuICBmaWxlVXJsOiBzdHJpbmcgPSAnJztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5maWxlQmFzZVVybCA9IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkZJTEVfQkFTRV9VUkw7XG4gICAgdGhpcy5maWxlVXJsID0gdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuRklMRV9VUkw7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0VmFsdWUoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVEZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLlllc05vICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuICBvbkZpbGVTZWxlY3QoZGF0YTogYW55LCBwcm9wZXJ0eTogRm9ybVByb3BlcnR5KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZXM6IGFueSA9IGRhdGE7XG5cbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZUFycmF5OiBGaWxlRGF0YVtdID0gW107XG4gICAgY29uc3QgcmVhZGVyczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgIGZpbGVBcnJheS5wdXNoKHtcbiAgICAgICAgICAgIEV4dGVuc2lvbjogZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCksXG4gICAgICAgICAgICBOYW1lOiB0aGlzLmdlbmVyYXRlUmFuZG9tQ29kZSgpLFxuICAgICAgICAgICAgRGF0YTogYmFzZTY0LFxuICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZWFkZXJzLnB1c2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwocmVhZGVycykudGhlbigoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnRmlsZXMgcmVhZHkgdG8gdXBsb2FkOicsIGZpbGVBcnJheSk7XG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZUFycmF5LCBwcm9wZXJ0eSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJhbmRvbUNvZGUobGVuZ3RoOiBudW1iZXIgPSAxMCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2hhcnMgPVxuICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBzZXRQcmV2aWV3KHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0ID0gdmFsLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuXG4gICAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBmaXJzdC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX1VSTH0vJHtmaXJzdH1gO1xuICB9XG5cbiAgZ2V0RmlsZUFycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgICAgLmZpbHRlcigodikgPT4gdik7XG4gIH1cblxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlVXJsLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKFxuICAgIGZpbGVzOiBGaWxlRGF0YVtdLFxuICAgIHByb3BlcnR5OiBGb3JtUHJvcGVydHksXG4gICk6IFByb21pc2U8YW55W10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYFNhdmVGaWxlc2AsXG4gICAgICBmaWxlcyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkZJTEVfQkFTRV9VUkwsXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgYW55O1xuICAgICAgY29uc3Qgam9pbmVkUmVzdWx0ID0gcmVzdWx0LmpvaW4oJywnKTtcbiAgICAgIHByb3BlcnR5LlZhbHVlID0gam9pbmVkUmVzdWx0O1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBmb3JtYXRMYWJlbChwcm9wZXJ0eTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJvcGVydHkuSXNSZXF1aXJlZFxuICAgICAgPyBgJHtwcm9wZXJ0eS5OYW1lfSAqYFxuICAgICAgOiBgJHtwcm9wZXJ0eS5OYW1lfSAoT3B0aW9uYWwpYDtcbiAgfVxuICBvcHRpb25zQXJyYXkocHJvcGVydHk6IGFueSkge1xuICAgIHByb3BlcnR5Lk9wdGlvbnM/LnNwbGl0KCcsJykubWFwKChvcHRpb246IGFueSkgPT4gb3B0aW9uLnRyaW0oKSk7XG4gICAgcmV0dXJuIHByb3BlcnR5Lk9wdGlvbnM/LnNwbGl0KCcsJykubWFwKChvcHRpb246IGFueSkgPT4gb3B0aW9uLnRyaW0oKSk7XG4gIH1cbiAgb25TZWxlY3RlZEZpbGVDaGFuZ2UoZmlsZXM6IEZpbGVbXSkge1xuICAgIGNvbnNvbGUubG9nKGZpbGVzKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eTogRm9ybVByb3BlcnR5KTogRmlsZVtdIHtcbiAgICB2YXIgZmlsZU1vY2s6IGFueSA9IHtcbiAgICAgIG5hbWU6IHByb3BlcnR5LlZhbHVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHkuVmFsdWUudHJpbSgpLmxlbmd0aCA+IDAgPyBbZmlsZU1vY2tdIDogW107XG4gIH1cblxuICBzZWxlY3RlZEZpbGVzTWFwID0gbmV3IE1hcDxhbnksIEZpbGVbXT4oKTtcblxuICBnZXRGaWxlcyhwcm9wZXJ0eTogYW55KTogRmlsZVtdIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlc01hcC5oYXMocHJvcGVydHkpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXNNYXAuc2V0KHByb3BlcnR5LCB0aGlzLmdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbGVzTWFwLmdldChwcm9wZXJ0eSkhO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNiB3LWZ1bGxcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgZm9ybVByb3BlcnRpZXNcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS5EYXRhVHlwZVwiPlxuICAgICAgPCEtLSBUZXh0LCBVUkwsIGFuZCBDb2xvciAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInVGV4dCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidFbnRlciB0ZXh0J1wiXG4gICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidNYWlsQWRkcmVzcydcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgZW1haWwnXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1VSTCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ3VybCdcIlxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInQ29sb3VyJ1wiPlxuICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwicHJvcGVydHkuaWRcIj5cbiAgICAgICAgICB7eyBmb3JtYXRMYWJlbChwcm9wZXJ0eSkgfX1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cInByb3BlcnR5LmlkXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayBtdC0yIHctWzEwMHB4XVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidjb2xvcidcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICAgICAgPjp7eyBwcm9wZXJ0eS5WYWx1ZSB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZlcmJlbmEtdGV4dGFyZWFcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidNdWx0aWxpbmVUZXh0J1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgPjwvdmVyYmVuYS10ZXh0YXJlYT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInUGhvbmVOdW1iZXInXCJcbiAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgdGV4dCdcIlxuICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPCEtLSBOdW1lcmljIGlucHV0cyAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInTnVtYmVyJ1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgYW4gaW50ZWdlcidcIlxuICAgICAgICBbbWF4XT1cInByb3BlcnR5Lk1heFZhbHVlXCJcbiAgICAgICAgW21pbl09XCJwcm9wZXJ0eS5NaW5WYWx1ZVwiXG4gICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidEZWNpbWFsJ1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0VudGVyIGRlY2ltYWwgdmFsdWUnXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgIDwhLS0gQm9vbGVhbiBpbnB1dCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidZZXNObydcIj5cbiAgICAgICAgPGxhYmVsIFtodG1sRm9yXT1cInByb3BlcnR5LmlkXCIgY2xhc3M9XCJibG9jayBtYi0yXCI+e3tcbiAgICAgICAgICBmb3JtYXRMYWJlbChwcm9wZXJ0eSlcbiAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICAgW29uVGV4dF09XCInJ1wiXG4gICAgICAgICAgW29mZlRleHRdPVwiJydcIlxuICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgID48L3ZlcmJlbmEtc3dpdGNoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidWaWRlbydcIj5cbiAgICAgICAgPGZpbGUtdXBsb2FkXG4gICAgICAgICAgW3NlbGVjdGVkRmlsZXNdPVwiZ2V0U2VsZWN0ZWRGaWxlc0lmQW55KHByb3BlcnR5KVwiXG4gICAgICAgICAgKHNlbGVjdGVkRmlsZXNDaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudCwgcHJvcGVydHkpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgICAgW2FjY2VwdF09XCIndmlkZW8vKidcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgID48L2ZpbGUtdXBsb2FkPlxuICAgICAgICA8dmlkZW9cbiAgICAgICAgICAqbmdJZj1cInByb3BlcnR5LlZhbHVlICE9PSAnJ1wiXG4gICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBoLVsxMDBweF0gbXQtMyByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInSW1hZ2UnXCI+XG4gICAgICAgIDxmaWxlLXVwbG9hZFxuICAgICAgICAgIFtzZWxlY3RlZEZpbGVzXT1cImdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSlcIlxuICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsIHByb3BlcnR5KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIFthY2NlcHRdPVwiJ2ltYWdlLyonXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICA+PC9maWxlLXVwbG9hZD5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIG14LWF1dG9cIlxuICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcocHJvcGVydHkuVmFsdWUpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0F1ZGlvJ1wiPlxuICAgICAgICA8ZmlsZS11cGxvYWRcbiAgICAgICAgICBbc2VsZWN0ZWRGaWxlc109XCJnZXRTZWxlY3RlZEZpbGVzSWZBbnkocHJvcGVydHkpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50LCBwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICBbYWNjZXB0XT1cIidhdWRpby8qJ1wiXG4gICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgPjwvZmlsZS11cGxvYWQ+XG4gICAgICAgIDxhdWRpb1xuICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcocHJvcGVydHkuVmFsdWUpXCJcbiAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgIGNsYXNzPVwibXQtMyB3LWZ1bGxcIlxuICAgICAgICA+PC9hdWRpbz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU2luZ2xlU2VsZWN0aW9uJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPnt7IGZvcm1hdExhYmVsKHByb3BlcnR5KSB9fTwvZGl2PlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5Lk5hbWVcIlxuICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc0FycmF5KHByb3BlcnR5KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTXVsdGlTZWxlY3Rpb24nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+e3sgZm9ybWF0TGFiZWwocHJvcGVydHkpIH19PC9kaXY+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5Lk5hbWVcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNBcnJheShwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1NpbmdsZUZpbGVTZWxlY3Rpb24nXCI+XG4gICAgICAgIDxmaWxlLXVwbG9hZFxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW3NlbGVjdGVkRmlsZXNdPVwiZ2V0RmlsZXMocHJvcGVydHkpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50LCBwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgPjwvZmlsZS11cGxvYWQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImdldEZpbGVFeHRlbnNpb24ocHJvcGVydHkuVmFsdWUpXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidqcGcnXCJcbiAgICAgICAgICAgIFtzcmNdPVwic2V0UHJldmlldyhwcm9wZXJ0eS5WYWx1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LVsxMDBweF0gaC1bMTAwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3BuZydcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctWzEwMHB4XSBoLVsxMDBweF0gb2JqZWN0LWNvdmVyIHJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ21wNCdcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctWzE1MHB4XSByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgID48L3ZpZGVvPlxuXG4gICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ21wMydcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgY2xhc3M9XCJ3LVsxNTBweF1cIlxuICAgICAgICAgID48L2F1ZGlvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ011bHRpRmlsZVNlbGVjdGlvbidcIj5cbiAgICAgICAgPGZpbGUtdXBsb2FkXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFtzZWxlY3RlZEZpbGVzXT1cImdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSlcIlxuICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsIHByb3BlcnR5KVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICA+XG4gICAgICAgIDwvZmlsZS11cGxvYWQ+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInByb3BlcnR5LlZhbHVlICE9PSAnJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgbXQtM1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZ2V0RmlsZUFycmF5KHByb3BlcnR5LlZhbHVlKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0RmlsZUV4dGVuc2lvbihmaWxlKVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidqcGcnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidwbmcnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbXA0J1wiXG4gICAgICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KGZpbGUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctWzE1MHB4XSByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgPjwvdmlkZW8+XG5cbiAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtcDMnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LVsxNTBweF1cIlxuICAgICAgICAgICAgICA+PC9hdWRpbz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEZhbGxiYWNrIGZvciB1bnN1cHBvcnRlZCB0eXBlcyAtLT5cbiAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5VbnN1cHBvcnRlZCBkYXRhIHR5cGU6IHt7IHByb3BlcnR5LkRhdGFUeXBlIH19PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2Zvcm0tY29udHJvbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0tY29udHJvbC9mb3JtLWNvbnRyb2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUNMLGFBQWEsRUFFYixXQUFXLEdBQ1osTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFvQixNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7O0FBZS9FLE1BQU0sT0FBTyxvQkFBb0I7SUFVckI7SUFDQTtJQUNBO0lBQ0E7SUFaRCxRQUFRLENBQVk7SUFDcEIsS0FBSyxHQUFRLEVBQUUsQ0FBQztJQUNoQixhQUFhLEdBQWtCLFVBQVUsQ0FBQztJQUMxQyxjQUFjLEdBQW1CLEVBQUUsQ0FBQztJQUNwQyxRQUFRLEdBQVksS0FBSyxDQUFDO0lBRW5DLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixZQUNVLE1BQTZCLEVBQzdCLFdBQXdCLEVBQ3hCLEdBQXNCLEVBQ3RCLE1BQTBCO1FBSDFCLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQzdCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBRWxDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFX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QyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFzQjtRQUMxQyxJQUFJLFFBQVEsR0FBUTtZQUNsQixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7U0FDckIsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFMUMsUUFBUSxDQUFDLFFBQWE7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBRSxDQUFDO0lBQzlDLENBQUM7d0dBcEpVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDhMQ3JCakMsd2dTQThQQTs7NEZEek9hLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDRSxjQUFjO3FMQUtmLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFcnJvclJlc3BvbnNlLFxuICBGb3JtUHJvcGVydHksXG4gIE9iamVjdFN0YXRlLFxufSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRGF0YVR5cGUsIEZpbGUgYXMgRmlsZURhdGEgfSBmcm9tICd2ZXJiZW4td29ya2Zsb3ctdWkvc3JjL2xpYi9tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgVXRpbFNlcnZpY2UsXG59IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJ3ZlcmJlbi13b3JrZmxvdy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5leHBvcnQgdHlwZSBCb29sSW5wdXRUeXBlID0gJ3N3aXRjaCcgfCAnY2hlY2tib3gnIHwgJ3JhZGlvJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm9ybS1jb250cm9sJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tY29udHJvbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0tY29udHJvbC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db250cm9sQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZGF0YVR5cGUhOiBEYXRhVHlwZTtcbiAgQElucHV0KCkgdmFsdWU6IGFueSA9ICcnO1xuICBASW5wdXQoKSBib29sSW5wdXRUeXBlOiBCb29sSW5wdXRUeXBlID0gJ2NoZWNrYm94JztcbiAgQElucHV0KCkgZm9ybVByb3BlcnRpZXM6IEZvcm1Qcm9wZXJ0eVtdID0gW107XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZmlsZUJhc2VVcmw6IHN0cmluZyA9ICcnO1xuICBmaWxlVXJsOiBzdHJpbmcgPSAnJztcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZXJ2ZXI6IEh0dHBXZWJSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbnZTdmM6IEVudmlyb25tZW50U2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5maWxlQmFzZVVybCA9IHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkZJTEVfQkFTRV9VUkw7XG4gICAgdGhpcy5maWxlVXJsID0gdGhpcy5lbnZTdmMuZW52aXJvbm1lbnQuRklMRV9VUkw7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVEZWZhdWx0VmFsdWUoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVEZWZhdWx0VmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVR5cGUgPT09IERhdGFUeXBlLlllc05vICYmIHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgIH1cbiAgfVxuICBvbkZpbGVTZWxlY3QoZGF0YTogYW55LCBwcm9wZXJ0eTogRm9ybVByb3BlcnR5KTogdm9pZCB7XG4gICAgY29uc3QgZmlsZXM6IGFueSA9IGRhdGE7XG5cbiAgICBpZiAoIWZpbGVzIHx8IGZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZmlsZUFycmF5OiBGaWxlRGF0YVtdID0gW107XG4gICAgY29uc3QgcmVhZGVyczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gZmlsZXNbaV07XG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgIGZpbGVBcnJheS5wdXNoKHtcbiAgICAgICAgICAgIEV4dGVuc2lvbjogZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCksXG4gICAgICAgICAgICBOYW1lOiB0aGlzLmdlbmVyYXRlUmFuZG9tQ29kZSgpLFxuICAgICAgICAgICAgRGF0YTogYmFzZTY0LFxuICAgICAgICAgICAgRGF0YVN0YXRlOiBPYmplY3RTdGF0ZS5OZXcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gKGVycm9yKSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZWFkZXJzLnB1c2gocHJvbWlzZSk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwocmVhZGVycykudGhlbigoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnRmlsZXMgcmVhZHkgdG8gdXBsb2FkOicsIGZpbGVBcnJheSk7XG4gICAgICB0aGlzLnVwbG9hZEZpbGUoZmlsZUFycmF5LCBwcm9wZXJ0eSk7XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJhbmRvbUNvZGUobGVuZ3RoOiBudW1iZXIgPSAxMCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2hhcnMgPVxuICAgICAgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JztcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFycy5sZW5ndGgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBzZXRQcmV2aWV3KHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbCkgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0ID0gdmFsLnNwbGl0KCcsJylbMF0udHJpbSgpO1xuXG4gICAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJ2h0dHAnKSB8fCBmaXJzdC5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICByZXR1cm4gZmlyc3Q7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmVudlN2Yy5lbnZpcm9ubWVudC5GSUxFX1VSTH0vJHtmaXJzdH1gO1xuICB9XG5cbiAgZ2V0RmlsZUFycmF5KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWx1ZVxuICAgICAgLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoKHYpID0+IHYudHJpbSgpKVxuICAgICAgLmZpbHRlcigodikgPT4gdik7XG4gIH1cblxuICBnZXRGaWxlRXh0ZW5zaW9uKGZpbGVVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBmaWxlVXJsLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKFxuICAgIGZpbGVzOiBGaWxlRGF0YVtdLFxuICAgIHByb3BlcnR5OiBGb3JtUHJvcGVydHksXG4gICk6IFByb21pc2U8YW55W10gfCB1bmRlZmluZWQ+IHtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSSh0cnVlKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNlcnZlci5wb3N0KFxuICAgICAgYFNhdmVGaWxlc2AsXG4gICAgICBmaWxlcyxcbiAgICAgIHRoaXMuZW52U3ZjLmVudmlyb25tZW50LkZJTEVfQkFTRV9VUkwsXG4gICAgKTtcbiAgICB0aGlzLnV0aWxTZXJ2aWNlLnNlbmRCSShmYWxzZSk7XG4gICAgaWYgKHJlcyBpbnN0YW5jZW9mIEVycm9yUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciByZXN1bHQgPSByZXMgYXMgYW55O1xuICAgICAgY29uc3Qgam9pbmVkUmVzdWx0ID0gcmVzdWx0LmpvaW4oJywnKTtcbiAgICAgIHByb3BlcnR5LlZhbHVlID0gam9pbmVkUmVzdWx0O1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICBmb3JtYXRMYWJlbChwcm9wZXJ0eTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcHJvcGVydHkuSXNSZXF1aXJlZFxuICAgICAgPyBgJHtwcm9wZXJ0eS5OYW1lfSAqYFxuICAgICAgOiBgJHtwcm9wZXJ0eS5OYW1lfSAoT3B0aW9uYWwpYDtcbiAgfVxuICBvcHRpb25zQXJyYXkocHJvcGVydHk6IGFueSkge1xuICAgIHByb3BlcnR5Lk9wdGlvbnM/LnNwbGl0KCcsJykubWFwKChvcHRpb246IGFueSkgPT4gb3B0aW9uLnRyaW0oKSk7XG4gICAgcmV0dXJuIHByb3BlcnR5Lk9wdGlvbnM/LnNwbGl0KCcsJykubWFwKChvcHRpb246IGFueSkgPT4gb3B0aW9uLnRyaW0oKSk7XG4gIH1cbiAgb25TZWxlY3RlZEZpbGVDaGFuZ2UoZmlsZXM6IEZpbGVbXSkge1xuICAgIGNvbnNvbGUubG9nKGZpbGVzKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eTogRm9ybVByb3BlcnR5KTogRmlsZVtdIHtcbiAgICB2YXIgZmlsZU1vY2s6IGFueSA9IHtcbiAgICAgIG5hbWU6IHByb3BlcnR5LlZhbHVlLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcGVydHkuVmFsdWUudHJpbSgpLmxlbmd0aCA+IDAgPyBbZmlsZU1vY2tdIDogW107XG4gIH1cblxuICBzZWxlY3RlZEZpbGVzTWFwID0gbmV3IE1hcDxhbnksIEZpbGVbXT4oKTtcblxuICBnZXRGaWxlcyhwcm9wZXJ0eTogYW55KTogRmlsZVtdIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlc01hcC5oYXMocHJvcGVydHkpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRmlsZXNNYXAuc2V0KHByb3BlcnR5LCB0aGlzLmdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbGVzTWFwLmdldChwcm9wZXJ0eSkhO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNiB3LWZ1bGxcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvcGVydHkgb2YgZm9ybVByb3BlcnRpZXNcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJwcm9wZXJ0eS5EYXRhVHlwZVwiPlxuICAgICAgPCEtLSBUZXh0LCBVUkwsIGFuZCBDb2xvciAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInVGV4dCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidFbnRlciB0ZXh0J1wiXG4gICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidNYWlsQWRkcmVzcydcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgZW1haWwnXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8dmVyYmVuYS1pbnB1dFxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ1VSTCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgW3R5cGVdPVwiJ3VybCdcIlxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInQ29sb3VyJ1wiPlxuICAgICAgICA8bGFiZWwgW2h0bWxGb3JdPVwicHJvcGVydHkuaWRcIj5cbiAgICAgICAgICB7eyBmb3JtYXRMYWJlbChwcm9wZXJ0eSkgfX1cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgW2lkXT1cInByb3BlcnR5LmlkXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJibG9jayBtdC0yIHctWzEwMHB4XVwiXG4gICAgICAgICAgICAgIFt0eXBlXT1cIidjb2xvcidcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb250LXNlbWlib2xkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICAgICAgPjp7eyBwcm9wZXJ0eS5WYWx1ZSB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPHZlcmJlbmEtdGV4dGFyZWFcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidNdWx0aWxpbmVUZXh0J1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgPjwvdmVyYmVuYS10ZXh0YXJlYT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInUGhvbmVOdW1iZXInXCJcbiAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgdGV4dCdcIlxuICAgICAgPjwvdmVyYmVuYS1pbnB1dD5cblxuICAgICAgPCEtLSBOdW1lcmljIGlucHV0cyAtLT5cbiAgICAgIDx2ZXJiZW5hLWlucHV0XG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInTnVtYmVyJ1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW50ZXIgYW4gaW50ZWdlcidcIlxuICAgICAgICBbbWF4XT1cInByb3BlcnR5Lk1heFZhbHVlXCJcbiAgICAgICAgW21pbl09XCJwcm9wZXJ0eS5NaW5WYWx1ZVwiXG4gICAgICA+PC92ZXJiZW5hLWlucHV0PlxuICAgICAgPHZlcmJlbmEtaW5wdXRcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidEZWNpbWFsJ1wiXG4gICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0VudGVyIGRlY2ltYWwgdmFsdWUnXCJcbiAgICAgID48L3ZlcmJlbmEtaW5wdXQ+XG5cbiAgICAgIDwhLS0gQm9vbGVhbiBpbnB1dCAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidZZXNObydcIj5cbiAgICAgICAgPGxhYmVsIFtodG1sRm9yXT1cInByb3BlcnR5LmlkXCIgY2xhc3M9XCJibG9jayBtYi0yXCI+e3tcbiAgICAgICAgICBmb3JtYXRMYWJlbChwcm9wZXJ0eSlcbiAgICAgICAgfX08L2xhYmVsPlxuICAgICAgICA8dmVyYmVuYS1zd2l0Y2hcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgICAgW25nTW9kZWxdPVwicHJvcGVydHkuVmFsdWUgPT0gJ3RydWUnIHx8IHByb3BlcnR5LlZhbHVlID09ICdUcnVlJ1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicHJvcGVydHkuVmFsdWUgPSAkZXZlbnQudG9TdHJpbmcoKVwiXG4gICAgICAgICAgW29uVGV4dF09XCInJ1wiXG4gICAgICAgICAgW29mZlRleHRdPVwiJydcIlxuICAgICAgICAgIFtvbkNvbG9yXT1cIicjMUEyMzdFJ1wiXG4gICAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgID48L3ZlcmJlbmEtc3dpdGNoPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidWaWRlbydcIj5cbiAgICAgICAgPGZpbGUtdXBsb2FkXG4gICAgICAgICAgW3NlbGVjdGVkRmlsZXNdPVwiZ2V0U2VsZWN0ZWRGaWxlc0lmQW55KHByb3BlcnR5KVwiXG4gICAgICAgICAgKHNlbGVjdGVkRmlsZXNDaGFuZ2UpPVwib25GaWxlU2VsZWN0KCRldmVudCwgcHJvcGVydHkpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgcHJvcGVydHkuSXNSZWFkT25seVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJwcm9wZXJ0eS5WYWx1ZVwiXG4gICAgICAgICAgW2xhYmVsXT1cImZvcm1hdExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgICAgW2FjY2VwdF09XCIndmlkZW8vKidcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgID48L2ZpbGUtdXBsb2FkPlxuICAgICAgICA8dmlkZW9cbiAgICAgICAgICAqbmdJZj1cInByb3BlcnR5LlZhbHVlICE9PSAnJ1wiXG4gICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICBjbGFzcz1cInctZnVsbCBoLVsxMDBweF0gbXQtMyByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgID48L3ZpZGVvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInSW1hZ2UnXCI+XG4gICAgICAgIDxmaWxlLXVwbG9hZFxuICAgICAgICAgIFtzZWxlY3RlZEZpbGVzXT1cImdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSlcIlxuICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsIHByb3BlcnR5KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIFthY2NlcHRdPVwiJ2ltYWdlLyonXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICA+PC9maWxlLXVwbG9hZD5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIG14LWF1dG9cIlxuICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcocHJvcGVydHkuVmFsdWUpXCJcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ0F1ZGlvJ1wiPlxuICAgICAgICA8ZmlsZS11cGxvYWRcbiAgICAgICAgICBbc2VsZWN0ZWRGaWxlc109XCJnZXRTZWxlY3RlZEZpbGVzSWZBbnkocHJvcGVydHkpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50LCBwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICBbYWNjZXB0XT1cIidhdWRpby8qJ1wiXG4gICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgPjwvZmlsZS11cGxvYWQ+XG4gICAgICAgIDxhdWRpb1xuICAgICAgICAgICpuZ0lmPVwicHJvcGVydHkuVmFsdWUgIT09ICcnXCJcbiAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcocHJvcGVydHkuVmFsdWUpXCJcbiAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgIGNsYXNzPVwibXQtMyB3LWZ1bGxcIlxuICAgICAgICA+PC9hdWRpbz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInU2luZ2xlU2VsZWN0aW9uJ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPnt7IGZvcm1hdExhYmVsKHByb3BlcnR5KSB9fTwvZGl2PlxuICAgICAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5Lk5hbWVcIlxuICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW29wdGlvbnNdPVwib3B0aW9uc0FycmF5KHByb3BlcnR5KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHkuVmFsdWVcIlxuICAgICAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInTXVsdGlTZWxlY3Rpb24nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+e3sgZm9ybWF0TGFiZWwocHJvcGVydHkpIH19PC9kaXY+XG4gICAgICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInByb3BlcnR5Lk5hbWVcIlxuICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvbnNBcnJheShwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb3BlcnR5LlZhbHVlXCJcbiAgICAgICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ1NpbmdsZUZpbGVTZWxlY3Rpb24nXCI+XG4gICAgICAgIDxmaWxlLXVwbG9hZFxuICAgICAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICAgICAgW3NlbGVjdGVkRmlsZXNdPVwiZ2V0RmlsZXMocHJvcGVydHkpXCJcbiAgICAgICAgICAoc2VsZWN0ZWRGaWxlc0NoYW5nZSk9XCJvbkZpbGVTZWxlY3QoJGV2ZW50LCBwcm9wZXJ0eSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBwcm9wZXJ0eS5Jc1JlYWRPbmx5XCJcbiAgICAgICAgICBbbGFiZWxdPVwiZm9ybWF0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgPjwvZmlsZS11cGxvYWQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImdldEZpbGVFeHRlbnNpb24ocHJvcGVydHkuVmFsdWUpXCI+XG4gICAgICAgICAgPGltZ1xuICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidqcGcnXCJcbiAgICAgICAgICAgIFtzcmNdPVwic2V0UHJldmlldyhwcm9wZXJ0eS5WYWx1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJ3LVsxMDBweF0gaC1bMTAwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkLW1kIGJvcmRlclwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ3BuZydcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctWzEwMHB4XSBoLVsxMDBweF0gb2JqZWN0LWNvdmVyIHJvdW5kZWQtbWQgYm9yZGVyXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPHZpZGVvXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ21wNCdcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInctWzE1MHB4XSByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgID48L3ZpZGVvPlxuXG4gICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ21wMydcIlxuICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KHByb3BlcnR5LlZhbHVlKVwiXG4gICAgICAgICAgICBjb250cm9sc1xuICAgICAgICAgICAgY2xhc3M9XCJ3LVsxNTBweF1cIlxuICAgICAgICAgID48L2F1ZGlvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ011bHRpRmlsZVNlbGVjdGlvbidcIj5cbiAgICAgICAgPGZpbGUtdXBsb2FkXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IHByb3BlcnR5LklzUmVhZE9ubHlcIlxuICAgICAgICAgIFtzZWxlY3RlZEZpbGVzXT1cImdldFNlbGVjdGVkRmlsZXNJZkFueShwcm9wZXJ0eSlcIlxuICAgICAgICAgIChzZWxlY3RlZEZpbGVzQ2hhbmdlKT1cIm9uRmlsZVNlbGVjdCgkZXZlbnQsIHByb3BlcnR5KVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgIFtsYWJlbF09XCJmb3JtYXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICA+XG4gICAgICAgIDwvZmlsZS11cGxvYWQ+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInByb3BlcnR5LlZhbHVlICE9PSAnJ1wiIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgbXQtM1wiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbGUgb2YgZ2V0RmlsZUFycmF5KHByb3BlcnR5LlZhbHVlKVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZ2V0RmlsZUV4dGVuc2lvbihmaWxlKVwiPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidqcGcnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidwbmcnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1bMTAwcHhdIGgtWzEwMHB4XSBvYmplY3QtY292ZXIgcm91bmRlZC1tZCBib3JkZXJcIlxuICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgIDx2aWRlb1xuICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbXA0J1wiXG4gICAgICAgICAgICAgICAgW3NyY109XCJzZXRQcmV2aWV3KGZpbGUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctWzE1MHB4XSByb3VuZGVkLW1kIHNoYWRvd1wiXG4gICAgICAgICAgICAgICAgY29udHJvbHNcbiAgICAgICAgICAgICAgPjwvdmlkZW8+XG5cbiAgICAgICAgICAgICAgPGF1ZGlvXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidtcDMnXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cInNldFByZXZpZXcoZmlsZSlcIlxuICAgICAgICAgICAgICAgIGNvbnRyb2xzXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LVsxNTBweF1cIlxuICAgICAgICAgICAgICA+PC9hdWRpbz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEZhbGxiYWNrIGZvciB1bnN1cHBvcnRlZCB0eXBlcyAtLT5cbiAgICAgIDxkaXYgKm5nU3dpdGNoRGVmYXVsdD5VbnN1cHBvcnRlZCBkYXRhIHR5cGU6IHt7IHByb3BlcnR5LkRhdGFUeXBlIH19PC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -142,11 +142,11 @@ class FormControlComponent {
|
|
|
142
142
|
return this.selectedFilesMap.get(property);
|
|
143
143
|
}
|
|
144
144
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, deps: [{ token: i1.HttpWebRequestService }, { token: i1.UtilService }, { token: i0.ChangeDetectorRef }, { token: i1.EnvironmentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormControlComponent, selector: "form-control", inputs: { dataType: "dataType", value: "value", boolInputType: "boolInputType", formProperties: "formProperties", disabled: "disabled" }, ngImport: i0, template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileUploadComponent, selector: "file-upload", inputs: ["multiple", "label", "accept", "selectedFiles", "disabled"], outputs: ["selectedFilesChange"] }, { kind: "component", type: i4.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
|
|
145
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormControlComponent, selector: "form-control", inputs: { dataType: "dataType", value: "value", boolInputType: "boolInputType", formProperties: "formProperties", disabled: "disabled" }, ngImport: i0, template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [ngModel]=\"property.Value == 'true' || property.Value == 'True'\"\n (ngModelChange)=\"property.Value = $event.toString()\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "component", type: i4.VerbenaSwitchComponent, selector: "verbena-switch", inputs: ["label", "checked", "disabled", "offColor", "onColor", "onText", "offText", "width", "height", "customStyles"], outputs: ["change"] }, { kind: "component", type: i4.VerbenaInputComponent, selector: "verbena-input", inputs: ["label", "placeHolder", "required", "svgPosition", "minLength", "maxLength", "type", "bgColor", "border", "borderRadius", "textColor", "value", "labelPosition", "labelColor", "disable", "readOnly", "min", "max", "showBorder", "showErrorMessage", "errorMessageColor", "errorBorderColor", "errorPosition", "svg", "fontSize", "svgWidth", "svgHeight", "svgColor", "capitalization", "inputContainerClass", "inputFieldClass", "passLength", "inputWrapperClass", "passwordToggle", "customErrorMessages", "icon", "textPass"], outputs: ["valueChange"] }, { kind: "component", type: i5.FileUploadComponent, selector: "file-upload", inputs: ["multiple", "label", "accept", "selectedFiles", "disabled"], outputs: ["selectedFilesChange"] }, { kind: "component", type: i4.VerbenaTextareaComponent, selector: "verbena-textarea", inputs: ["label", "required", "rows", "cols", "bgColor", "textColor", "border", "borderRadius", "pd", "width", "height", "value", "errorMessageColor"], outputs: ["valueChange"] }] });
|
|
146
146
|
}
|
|
147
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormControlComponent, decorators: [{
|
|
148
148
|
type: Component,
|
|
149
|
-
args: [{ selector: 'form-control', template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [
|
|
149
|
+
args: [{ selector: 'form-control', template: "<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [ngModel]=\"property.Value == 'true' || property.Value == 'True'\"\n (ngModelChange)=\"property.Value = $event.toString()\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n" }]
|
|
150
150
|
}], ctorParameters: () => [{ type: i1.HttpWebRequestService }, { type: i1.UtilService }, { type: i0.ChangeDetectorRef }, { type: i1.EnvironmentService }], propDecorators: { dataType: [{
|
|
151
151
|
type: Input
|
|
152
152
|
}], value: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verben-workflow-ui-src-lib-components-form-control.mjs","sources":["../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.component.ts","../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.component.html","../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.module.ts","../../../projects/verben-workflow-ui/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport {\n ErrorResponse,\n FormProperty,\n ObjectState,\n} from 'verben-workflow-ui/src/lib/models';\nimport { DataType, File as FileData } from 'verben-workflow-ui/src/lib/models';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n HttpWebRequestService,\n UtilService,\n} from 'verben-workflow-ui/src/lib/services';\nimport { EnvironmentService } from 'verben-workflow-ui/src/lib/services';\nimport { ChangeDetectorRef } from '@angular/core';\nexport type BoolInputType = 'switch' | 'checkbox' | 'radio';\n\n@Component({\n selector: 'form-control',\n templateUrl: './form-control.component.html',\n styleUrls: ['./form-control.component.css'],\n})\nexport class FormControlComponent implements OnInit {\n @Input() dataType!: DataType;\n @Input() value: any = '';\n @Input() boolInputType: BoolInputType = 'checkbox';\n @Input() formProperties: FormProperty[] = [];\n @Input() disabled: boolean = false;\n\n fileBaseUrl: string = '';\n fileUrl: string = '';\n constructor(\n private server: HttpWebRequestService,\n private utilService: UtilService,\n private cdr: ChangeDetectorRef,\n private envSvc: EnvironmentService,\n ) {\n this.fileBaseUrl = this.envSvc.environment.FILE_BASE_URL;\n this.fileUrl = this.envSvc.environment.FILE_URL;\n }\n\n ngOnInit(): void {\n this.initializeDefaultValue();\n }\n\n initializeDefaultValue() {\n if (this.dataType === DataType.YesNo && this.value === '') {\n this.value = false;\n } else if (!this.value) {\n this.value = '';\n }\n }\n onFileSelect(data: any, property: FormProperty): void {\n const files: any = data;\n\n if (!files || files.length === 0) return;\n\n const fileArray: FileData[] = [];\n const readers: Promise<void>[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const reader = new FileReader();\n\n const promise = new Promise<void>((resolve, reject) => {\n reader.onload = () => {\n const base64 = reader.result as string;\n fileArray.push({\n Extension: file.name.split('.').pop(),\n Name: this.generateRandomCode(),\n Data: base64,\n DataState: ObjectState.New,\n });\n resolve();\n };\n\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(file);\n });\n\n readers.push(promise);\n }\n\n Promise.all(readers).then(() => {\n console.log('Files ready to upload:', fileArray);\n this.uploadFile(fileArray, property);\n });\n }\n private generateRandomCode(length: number = 10): string {\n const chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n }\n setPreview(val: string): string {\n if (!val) return '';\n const first = val.split(',')[0].trim();\n\n if (first.startsWith('http') || first.startsWith('data:')) {\n return first;\n }\n return `${this.envSvc.environment.FILE_URL}/${first}`;\n }\n\n getFileArray(value: string): string[] {\n if (!value) return [];\n return value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v);\n }\n\n getFileExtension(fileUrl: string): string {\n const parts = fileUrl.split('.');\n return parts[parts.length - 1].toLowerCase();\n }\n\n async uploadFile(\n files: FileData[],\n property: FormProperty,\n ): Promise<any[] | undefined> {\n this.utilService.sendBI(true);\n const res = await this.server.post(\n `SaveFiles`,\n files,\n this.envSvc.environment.FILE_BASE_URL,\n );\n this.utilService.sendBI(false);\n if (res instanceof ErrorResponse) {\n return undefined;\n } else {\n var result = res as any;\n const joinedResult = result.join(',');\n property.Value = joinedResult;\n\n this.cdr.detectChanges();\n return result;\n }\n }\n formatLabel(property: any): string {\n return property.IsRequired\n ? `${property.Name} *`\n : `${property.Name} (Optional)`;\n }\n optionsArray(property: any) {\n property.Options?.split(',').map((option: any) => option.trim());\n return property.Options?.split(',').map((option: any) => option.trim());\n }\n onSelectedFileChange(files: File[]) {\n console.log(files);\n }\n\n getSelectedFilesIfAny(property: FormProperty): File[] {\n var fileMock: any = {\n name: property.Value,\n };\n\n return property.Value.trim().length > 0 ? [fileMock] : [];\n }\n\n selectedFilesMap = new Map<any, File[]>();\n\n getFiles(property: any): File[] {\n if (!this.selectedFilesMap.has(property)) {\n this.selectedFilesMap.set(property, this.getSelectedFilesIfAny(property));\n }\n return this.selectedFilesMap.get(property)!;\n }\n}\n","<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n CardDataViewModule,\n DataExportModule,\n DataTableModule,\n DataViewModule,\n DropDownModule,\n SortTableModule,\n SvgModule,\n TableFilterModule,\n VerbenaButtonModule,\n VerbenaInputModule,\n VerbenaSwitchModule,\n VerbenaTextareaModule,\n VerbenPopUpModule,\n VisibleColumnModule,\n} from 'verben-ng-ui';\nimport { FormControlComponent } from './form-control.component';\nimport { FileUploadModule } from 'verben-workflow-ui/src/lib/components/file-upload';\n@NgModule({\n declarations: [FormControlComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DataTableModule,\n SvgModule,\n VerbenPopUpModule,\n DataViewModule,\n VerbenaButtonModule,\n CardDataViewModule,\n DropDownModule,\n VerbenaSwitchModule,\n TableFilterModule,\n VisibleColumnModule,\n SortTableModule,\n DataExportModule,\n VerbenaInputModule,\n FileUploadModule,\n VerbenaTextareaModule,\n ],\n exports: [FormControlComponent],\n})\nexport class FormControlerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verben-workflow-ui-src-lib-components-form-control.mjs","sources":["../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.component.ts","../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.component.html","../../../projects/verben-workflow-ui/src/lib/components/form-control/form-control.module.ts","../../../projects/verben-workflow-ui/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.ts"],"sourcesContent":["import { Component, Input, OnInit } from '@angular/core';\nimport {\n ErrorResponse,\n FormProperty,\n ObjectState,\n} from 'verben-workflow-ui/src/lib/models';\nimport { DataType, File as FileData } from 'verben-workflow-ui/src/lib/models';\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\nimport {\n HttpWebRequestService,\n UtilService,\n} from 'verben-workflow-ui/src/lib/services';\nimport { EnvironmentService } from 'verben-workflow-ui/src/lib/services';\nimport { ChangeDetectorRef } from '@angular/core';\nexport type BoolInputType = 'switch' | 'checkbox' | 'radio';\n\n@Component({\n selector: 'form-control',\n templateUrl: './form-control.component.html',\n styleUrls: ['./form-control.component.css'],\n})\nexport class FormControlComponent implements OnInit {\n @Input() dataType!: DataType;\n @Input() value: any = '';\n @Input() boolInputType: BoolInputType = 'checkbox';\n @Input() formProperties: FormProperty[] = [];\n @Input() disabled: boolean = false;\n\n fileBaseUrl: string = '';\n fileUrl: string = '';\n constructor(\n private server: HttpWebRequestService,\n private utilService: UtilService,\n private cdr: ChangeDetectorRef,\n private envSvc: EnvironmentService,\n ) {\n this.fileBaseUrl = this.envSvc.environment.FILE_BASE_URL;\n this.fileUrl = this.envSvc.environment.FILE_URL;\n }\n\n ngOnInit(): void {\n this.initializeDefaultValue();\n }\n\n initializeDefaultValue() {\n if (this.dataType === DataType.YesNo && this.value === '') {\n this.value = false;\n } else if (!this.value) {\n this.value = '';\n }\n }\n onFileSelect(data: any, property: FormProperty): void {\n const files: any = data;\n\n if (!files || files.length === 0) return;\n\n const fileArray: FileData[] = [];\n const readers: Promise<void>[] = [];\n\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const reader = new FileReader();\n\n const promise = new Promise<void>((resolve, reject) => {\n reader.onload = () => {\n const base64 = reader.result as string;\n fileArray.push({\n Extension: file.name.split('.').pop(),\n Name: this.generateRandomCode(),\n Data: base64,\n DataState: ObjectState.New,\n });\n resolve();\n };\n\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(file);\n });\n\n readers.push(promise);\n }\n\n Promise.all(readers).then(() => {\n console.log('Files ready to upload:', fileArray);\n this.uploadFile(fileArray, property);\n });\n }\n private generateRandomCode(length: number = 10): string {\n const chars =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n return result;\n }\n setPreview(val: string): string {\n if (!val) return '';\n const first = val.split(',')[0].trim();\n\n if (first.startsWith('http') || first.startsWith('data:')) {\n return first;\n }\n return `${this.envSvc.environment.FILE_URL}/${first}`;\n }\n\n getFileArray(value: string): string[] {\n if (!value) return [];\n return value\n .split(',')\n .map((v) => v.trim())\n .filter((v) => v);\n }\n\n getFileExtension(fileUrl: string): string {\n const parts = fileUrl.split('.');\n return parts[parts.length - 1].toLowerCase();\n }\n\n async uploadFile(\n files: FileData[],\n property: FormProperty,\n ): Promise<any[] | undefined> {\n this.utilService.sendBI(true);\n const res = await this.server.post(\n `SaveFiles`,\n files,\n this.envSvc.environment.FILE_BASE_URL,\n );\n this.utilService.sendBI(false);\n if (res instanceof ErrorResponse) {\n return undefined;\n } else {\n var result = res as any;\n const joinedResult = result.join(',');\n property.Value = joinedResult;\n\n this.cdr.detectChanges();\n return result;\n }\n }\n formatLabel(property: any): string {\n return property.IsRequired\n ? `${property.Name} *`\n : `${property.Name} (Optional)`;\n }\n optionsArray(property: any) {\n property.Options?.split(',').map((option: any) => option.trim());\n return property.Options?.split(',').map((option: any) => option.trim());\n }\n onSelectedFileChange(files: File[]) {\n console.log(files);\n }\n\n getSelectedFilesIfAny(property: FormProperty): File[] {\n var fileMock: any = {\n name: property.Value,\n };\n\n return property.Value.trim().length > 0 ? [fileMock] : [];\n }\n\n selectedFilesMap = new Map<any, File[]>();\n\n getFiles(property: any): File[] {\n if (!this.selectedFilesMap.has(property)) {\n this.selectedFilesMap.set(property, this.getSelectedFilesIfAny(property));\n }\n return this.selectedFilesMap.get(property)!;\n }\n}\n","<div class=\"flex flex-col gap-6 w-full\">\n <div *ngFor=\"let property of formProperties\">\n <ng-container [ngSwitch]=\"property.DataType\">\n <!-- Text, URL, and Color -->\n <verbena-input\n *ngSwitchCase=\"'Text'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'MailAddress'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'email'\"\n [placeHolder]=\"'Enter email'\"\n ></verbena-input>\n <verbena-input\n *ngSwitchCase=\"'URL'\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [type]=\"'url'\"\n [placeHolder]=\"'https://example.com'\"\n ></verbena-input>\n <div *ngSwitchCase=\"'Colour'\">\n <label [htmlFor]=\"property.id\">\n {{ formatLabel(property) }}\n <span class=\"flex items-center gap-1\">\n <input\n [id]=\"property.id\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n class=\"block mt-2 w-[100px]\"\n [type]=\"'color'\"\n />\n <span\n *ngIf=\"property.Value !== ''\"\n class=\"font-semibold\"\n [style.color]=\"property.Value\"\n >:{{ property.Value }}</span\n >\n </span>\n </label>\n </div>\n <verbena-textarea\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'MultilineText'\"\n [label]=\"formatLabel(property)\"\n ></verbena-textarea>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'PhoneNumber'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter text'\"\n ></verbena-input>\n\n <!-- Numeric inputs -->\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Number'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'number'\"\n [placeHolder]=\"'Enter an integer'\"\n [max]=\"property.MaxValue\"\n [min]=\"property.MinValue\"\n ></verbena-input>\n <verbena-input\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n *ngSwitchCase=\"'Decimal'\"\n [label]=\"formatLabel(property)\"\n [type]=\"'text'\"\n [placeHolder]=\"'Enter decimal value'\"\n ></verbena-input>\n\n <!-- Boolean input -->\n <ng-container *ngSwitchCase=\"'YesNo'\">\n <label [htmlFor]=\"property.id\" class=\"block mb-2\">{{\n formatLabel(property)\n }}</label>\n <verbena-switch\n [disabled]=\"disabled || property.IsReadOnly\"\n [ngModel]=\"property.Value == 'true' || property.Value == 'True'\"\n (ngModelChange)=\"property.Value = $event.toString()\"\n [onText]=\"''\"\n [offText]=\"''\"\n [onColor]=\"'#1A237E'\"\n [label]=\"formatLabel(property)\"\n ></verbena-switch>\n </ng-container>\n\n <div *ngSwitchCase=\"'Video'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'video/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <video\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-full h-[100px] mt-3 rounded-md shadow\"\n ></video>\n </div>\n <div *ngSwitchCase=\"'Image'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'image/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <img\n class=\"w-[100px] mx-auto\"\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n />\n </div>\n <div *ngSwitchCase=\"'Audio'\">\n <file-upload\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n [label]=\"formatLabel(property)\"\n [accept]=\"'audio/*'\"\n [multiple]=\"false\"\n ></file-upload>\n <audio\n *ngIf=\"property.Value !== ''\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"mt-3 w-full\"\n ></audio>\n </div>\n\n <div *ngSwitchCase=\"'SingleSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [placeholder]=\"property.Name\"\n [filter]=\"true\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'MultiSelection'\">\n <div class=\"mb-2\">{{ formatLabel(property) }}</div>\n <verben-drop-down\n width=\"100%\"\n [multiselect]=\"true\"\n [placeholder]=\"property.Name\"\n [options]=\"optionsArray(property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [(ngModel)]=\"property.Value\"\n ></verben-drop-down>\n </div>\n <div *ngSwitchCase=\"'SingleFileSelection'\">\n <file-upload\n [multiple]=\"false\"\n [selectedFiles]=\"getFiles(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [disabled]=\"disabled || property.IsReadOnly\"\n [label]=\"formatLabel(property)\"\n ></file-upload>\n <ng-container [ngSwitch]=\"getFileExtension(property.Value)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(property.Value)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(property.Value)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n <div *ngSwitchCase=\"'MultiFileSelection'\">\n <file-upload\n [disabled]=\"disabled || property.IsReadOnly\"\n [selectedFiles]=\"getSelectedFilesIfAny(property)\"\n (selectedFilesChange)=\"onFileSelect($event, property)\"\n [multiple]=\"true\"\n [label]=\"formatLabel(property)\"\n >\n </file-upload>\n\n <div *ngIf=\"property.Value !== ''\" class=\"flex flex-wrap gap-3 mt-3\">\n <div *ngFor=\"let file of getFileArray(property.Value)\">\n <ng-container [ngSwitch]=\"getFileExtension(file)\">\n <img\n *ngSwitchCase=\"'jpg'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n <img\n *ngSwitchCase=\"'png'\"\n [src]=\"setPreview(file)\"\n class=\"w-[100px] h-[100px] object-cover rounded-md border\"\n />\n\n <video\n *ngSwitchCase=\"'mp4'\"\n [src]=\"setPreview(file)\"\n class=\"w-[150px] rounded-md shadow\"\n controls\n ></video>\n\n <audio\n *ngSwitchCase=\"'mp3'\"\n [src]=\"setPreview(file)\"\n controls\n class=\"w-[150px]\"\n ></audio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Fallback for unsupported types -->\n <div *ngSwitchDefault>Unsupported data type: {{ property.DataType }}</div>\n </ng-container>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport {\n CardDataViewModule,\n DataExportModule,\n DataTableModule,\n DataViewModule,\n DropDownModule,\n SortTableModule,\n SvgModule,\n TableFilterModule,\n VerbenaButtonModule,\n VerbenaInputModule,\n VerbenaSwitchModule,\n VerbenaTextareaModule,\n VerbenPopUpModule,\n VisibleColumnModule,\n} from 'verben-ng-ui';\nimport { FormControlComponent } from './form-control.component';\nimport { FileUploadModule } from 'verben-workflow-ui/src/lib/components/file-upload';\n@NgModule({\n declarations: [FormControlComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DataTableModule,\n SvgModule,\n VerbenPopUpModule,\n DataViewModule,\n VerbenaButtonModule,\n CardDataViewModule,\n DropDownModule,\n VerbenaSwitchModule,\n TableFilterModule,\n VisibleColumnModule,\n SortTableModule,\n DataExportModule,\n VerbenaInputModule,\n FileUploadModule,\n VerbenaTextareaModule,\n ],\n exports: [FormControlComponent],\n})\nexport class FormControlerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;MAqBa,oBAAoB,CAAA;AAUrB,IAAA,MAAA,CAAA;AACA,IAAA,WAAA,CAAA;AACA,IAAA,GAAA,CAAA;AACA,IAAA,MAAA,CAAA;AAZD,IAAA,QAAQ,CAAY;IACpB,KAAK,GAAQ,EAAE,CAAC;IAChB,aAAa,GAAkB,UAAU,CAAC;IAC1C,cAAc,GAAmB,EAAE,CAAC;IACpC,QAAQ,GAAY,KAAK,CAAC;IAEnC,WAAW,GAAW,EAAE,CAAC;IACzB,OAAO,GAAW,EAAE,CAAC;AACrB,IAAA,WAAA,CACU,MAA6B,EAC7B,WAAwB,EACxB,GAAsB,EACtB,MAA0B,EAAA;QAH1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;QAC7B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAoB;QAElC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;KACjD;IAED,QAAQ,GAAA;QACN,IAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;IAED,sBAAsB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE,EAAE;AACzD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;SACpB;AAAM,aAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;SACjB;KACF;IACD,YAAY,CAAC,IAAS,EAAE,QAAsB,EAAA;QAC5C,MAAM,KAAK,GAAQ,IAAI,CAAC;AAExB,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEzC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,OAAO,GAAoB,EAAE,CAAC;AAEpC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAEhC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,KAAI;AACpD,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAK;AACnB,oBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;oBACvC,SAAS,CAAC,IAAI,CAAC;wBACb,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;AACrC,wBAAA,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC/B,wBAAA,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,WAAW,CAAC,GAAG;AAC3B,qBAAA,CAAC,CAAC;AACH,oBAAA,OAAO,EAAE,CAAC;AACZ,iBAAC,CAAC;AAEF,gBAAA,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1C,gBAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACvB;QAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAK;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACvC,SAAC,CAAC,CAAC;KACJ;IACO,kBAAkB,CAAC,SAAiB,EAAE,EAAA;QAC5C,MAAM,KAAK,GACT,gEAAgE,CAAC;QACnE,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;SAClE;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AACD,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE,CAAC;AACpB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEvC,QAAA,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACzD,YAAA,OAAO,KAAK,CAAC;SACd;QACD,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;KACvD;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE,CAAC;AACtB,QAAA,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACrB;AAED,IAAA,gBAAgB,CAAC,OAAe,EAAA;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;KAC9C;AAED,IAAA,MAAM,UAAU,CACd,KAAiB,EACjB,QAAsB,EAAA;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAChC,CAAA,SAAA,CAAW,EACX,KAAK,EACL,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,aAAa,CACtC,CAAC;AACF,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,GAAG,YAAY,aAAa,EAAE;AAChC,YAAA,OAAO,SAAS,CAAC;SAClB;aAAM;YACL,IAAI,MAAM,GAAG,GAAU,CAAC;YACxB,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,YAAA,QAAQ,CAAC,KAAK,GAAG,YAAY,CAAC;AAE9B,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;AACzB,YAAA,OAAO,MAAM,CAAC;SACf;KACF;AACD,IAAA,WAAW,CAAC,QAAa,EAAA;QACvB,OAAO,QAAQ,CAAC,UAAU;AACxB,cAAE,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAI,EAAA,CAAA;AACtB,cAAE,CAAG,EAAA,QAAQ,CAAC,IAAI,aAAa,CAAC;KACnC;AACD,IAAA,YAAY,CAAC,QAAa,EAAA;QACxB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,MAAW,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;KACzE;AACD,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAChC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpB;AAED,IAAA,qBAAqB,CAAC,QAAsB,EAAA;AAC1C,QAAA,IAAI,QAAQ,GAAQ;YAClB,IAAI,EAAE,QAAQ,CAAC,KAAK;SACrB,CAAC;QAEF,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;KAC3D;AAED,IAAA,gBAAgB,GAAG,IAAI,GAAG,EAAe,CAAC;AAE1C,IAAA,QAAQ,CAAC,QAAa,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC3E;QACD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;KAC7C;wGApJU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,8LCrBjC,wgSA8PA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,cAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,OAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,SAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,OAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,KAAA,EAAA,KAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,KAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,eAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,cAAA,EAAA,IAAA,EAAA,OAAA,EAAA,QAAA,EAAA,OAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FDzOa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,SAAS;+BACE,cAAc,EAAA,QAAA,EAAA,wgSAAA,EAAA,CAAA;qLAKf,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;;;MEoBK,mBAAmB,CAAA;wGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAnB,mBAAmB,EAAA,YAAA,EAAA,CAvBf,oBAAoB,CAAA,EAAA,OAAA,EAAA,CAEjC,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,SAAS;YACT,iBAAiB;YACjB,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,mBAAmB;YACnB,iBAAiB;YACjB,mBAAmB;YACnB,eAAe;YACf,gBAAgB;YAChB,kBAAkB;YAClB,gBAAgB;AAChB,YAAA,qBAAqB,aAEb,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAEnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YArB5B,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,eAAe;YACf,SAAS;YACT,iBAAiB;YACjB,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,cAAc;YACd,mBAAmB;YACnB,iBAAiB;YACjB,mBAAmB;YACnB,eAAe;YACf,gBAAgB;YAChB,kBAAkB;YAClB,gBAAgB;YAChB,qBAAqB,CAAA,EAAA,CAAA,CAAA;;4FAIZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAxB/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,oBAAoB,CAAC;AACpC,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,eAAe;wBACf,SAAS;wBACT,iBAAiB;wBACjB,cAAc;wBACd,mBAAmB;wBACnB,kBAAkB;wBAClB,cAAc;wBACd,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;wBACnB,eAAe;wBACf,gBAAgB;wBAChB,kBAAkB;wBAClB,gBAAgB;wBAChB,qBAAqB;AACtB,qBAAA;oBACD,OAAO,EAAE,CAAC,oBAAoB,CAAC;AAChC,iBAAA,CAAA;;;AC7CD;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verben-workflow-ui",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.66",
|
|
4
4
|
"style": "styles/styles.css",
|
|
5
5
|
"exports": {
|
|
6
6
|
"./styles": {
|
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
"esm": "./esm2022/src/lib/pipes/verben-workflow-ui-src-lib-pipes.mjs",
|
|
22
22
|
"default": "./fesm2022/verben-workflow-ui-src-lib-pipes.mjs"
|
|
23
23
|
},
|
|
24
|
-
"./src/lib/
|
|
25
|
-
"types": "./src/lib/
|
|
26
|
-
"esm2022": "./esm2022/src/lib/
|
|
27
|
-
"esm": "./esm2022/src/lib/
|
|
28
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-
|
|
24
|
+
"./src/lib/services": {
|
|
25
|
+
"types": "./src/lib/services/index.d.ts",
|
|
26
|
+
"esm2022": "./esm2022/src/lib/services/verben-workflow-ui-src-lib-services.mjs",
|
|
27
|
+
"esm": "./esm2022/src/lib/services/verben-workflow-ui-src-lib-services.mjs",
|
|
28
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-services.mjs"
|
|
29
29
|
},
|
|
30
|
-
"./src/lib/
|
|
31
|
-
"types": "./src/lib/
|
|
32
|
-
"esm2022": "./esm2022/src/lib/
|
|
33
|
-
"esm": "./esm2022/src/lib/
|
|
34
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-
|
|
30
|
+
"./src/lib/shared": {
|
|
31
|
+
"types": "./src/lib/shared/index.d.ts",
|
|
32
|
+
"esm2022": "./esm2022/src/lib/shared/verben-workflow-ui-src-lib-shared.mjs",
|
|
33
|
+
"esm": "./esm2022/src/lib/shared/verben-workflow-ui-src-lib-shared.mjs",
|
|
34
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-shared.mjs"
|
|
35
35
|
},
|
|
36
36
|
"./src/lib/components/actors": {
|
|
37
37
|
"types": "./src/lib/components/actors/index.d.ts",
|
|
@@ -39,11 +39,17 @@
|
|
|
39
39
|
"esm": "./esm2022/src/lib/components/actors/verben-workflow-ui-src-lib-components-actors.mjs",
|
|
40
40
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-actors.mjs"
|
|
41
41
|
},
|
|
42
|
-
"./src/lib/
|
|
43
|
-
"types": "./src/lib/
|
|
44
|
-
"esm2022": "./esm2022/src/lib/
|
|
45
|
-
"esm": "./esm2022/src/lib/
|
|
46
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-
|
|
42
|
+
"./src/lib/components/designer": {
|
|
43
|
+
"types": "./src/lib/components/designer/index.d.ts",
|
|
44
|
+
"esm2022": "./esm2022/src/lib/components/designer/verben-workflow-ui-src-lib-components-designer.mjs",
|
|
45
|
+
"esm": "./esm2022/src/lib/components/designer/verben-workflow-ui-src-lib-components-designer.mjs",
|
|
46
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-components-designer.mjs"
|
|
47
|
+
},
|
|
48
|
+
"./src/lib/models": {
|
|
49
|
+
"types": "./src/lib/models/index.d.ts",
|
|
50
|
+
"esm2022": "./esm2022/src/lib/models/verben-workflow-ui-src-lib-models.mjs",
|
|
51
|
+
"esm": "./esm2022/src/lib/models/verben-workflow-ui-src-lib-models.mjs",
|
|
52
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-models.mjs"
|
|
47
53
|
},
|
|
48
54
|
"./src/lib/components/expiration": {
|
|
49
55
|
"types": "./src/lib/components/expiration/index.d.ts",
|
|
@@ -51,29 +57,17 @@
|
|
|
51
57
|
"esm": "./esm2022/src/lib/components/expiration/verben-workflow-ui-src-lib-components-expiration.mjs",
|
|
52
58
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-expiration.mjs"
|
|
53
59
|
},
|
|
54
|
-
"./src/lib/components/file-render": {
|
|
55
|
-
"types": "./src/lib/components/file-render/index.d.ts",
|
|
56
|
-
"esm2022": "./esm2022/src/lib/components/file-render/verben-workflow-ui-src-lib-components-file-render.mjs",
|
|
57
|
-
"esm": "./esm2022/src/lib/components/file-render/verben-workflow-ui-src-lib-components-file-render.mjs",
|
|
58
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs"
|
|
59
|
-
},
|
|
60
|
-
"./src/lib/services": {
|
|
61
|
-
"types": "./src/lib/services/index.d.ts",
|
|
62
|
-
"esm2022": "./esm2022/src/lib/services/verben-workflow-ui-src-lib-services.mjs",
|
|
63
|
-
"esm": "./esm2022/src/lib/services/verben-workflow-ui-src-lib-services.mjs",
|
|
64
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-services.mjs"
|
|
65
|
-
},
|
|
66
60
|
"./src/lib/components/file-upload": {
|
|
67
61
|
"types": "./src/lib/components/file-upload/index.d.ts",
|
|
68
62
|
"esm2022": "./esm2022/src/lib/components/file-upload/verben-workflow-ui-src-lib-components-file-upload.mjs",
|
|
69
63
|
"esm": "./esm2022/src/lib/components/file-upload/verben-workflow-ui-src-lib-components-file-upload.mjs",
|
|
70
64
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-file-upload.mjs"
|
|
71
65
|
},
|
|
72
|
-
"./src/lib/components/
|
|
73
|
-
"types": "./src/lib/components/
|
|
74
|
-
"esm2022": "./esm2022/src/lib/components/
|
|
75
|
-
"esm": "./esm2022/src/lib/components/
|
|
76
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-components-
|
|
66
|
+
"./src/lib/components/form-control": {
|
|
67
|
+
"types": "./src/lib/components/form-control/index.d.ts",
|
|
68
|
+
"esm2022": "./esm2022/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.mjs",
|
|
69
|
+
"esm": "./esm2022/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.mjs",
|
|
70
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs"
|
|
77
71
|
},
|
|
78
72
|
"./src/lib/components/form-group": {
|
|
79
73
|
"types": "./src/lib/components/form-group/index.d.ts",
|
|
@@ -81,18 +75,18 @@
|
|
|
81
75
|
"esm": "./esm2022/src/lib/components/form-group/verben-workflow-ui-src-lib-components-form-group.mjs",
|
|
82
76
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-form-group.mjs"
|
|
83
77
|
},
|
|
84
|
-
"./src/lib/components/form-control": {
|
|
85
|
-
"types": "./src/lib/components/form-control/index.d.ts",
|
|
86
|
-
"esm2022": "./esm2022/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.mjs",
|
|
87
|
-
"esm": "./esm2022/src/lib/components/form-control/verben-workflow-ui-src-lib-components-form-control.mjs",
|
|
88
|
-
"default": "./fesm2022/verben-workflow-ui-src-lib-components-form-control.mjs"
|
|
89
|
-
},
|
|
90
78
|
"./src/lib/components/form-response": {
|
|
91
79
|
"types": "./src/lib/components/form-response/index.d.ts",
|
|
92
80
|
"esm2022": "./esm2022/src/lib/components/form-response/verben-workflow-ui-src-lib-components-form-response.mjs",
|
|
93
81
|
"esm": "./esm2022/src/lib/components/form-response/verben-workflow-ui-src-lib-components-form-response.mjs",
|
|
94
82
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-form-response.mjs"
|
|
95
83
|
},
|
|
84
|
+
"./src/lib/components/flowable-status": {
|
|
85
|
+
"types": "./src/lib/components/flowable-status/index.d.ts",
|
|
86
|
+
"esm2022": "./esm2022/src/lib/components/flowable-status/verben-workflow-ui-src-lib-components-flowable-status.mjs",
|
|
87
|
+
"esm": "./esm2022/src/lib/components/flowable-status/verben-workflow-ui-src-lib-components-flowable-status.mjs",
|
|
88
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-components-flowable-status.mjs"
|
|
89
|
+
},
|
|
96
90
|
"./src/lib/components/form-timer": {
|
|
97
91
|
"types": "./src/lib/components/form-timer/index.d.ts",
|
|
98
92
|
"esm2022": "./esm2022/src/lib/components/form-timer/verben-workflow-ui-src-lib-components-form-timer.mjs",
|
|
@@ -123,6 +117,12 @@
|
|
|
123
117
|
"esm": "./esm2022/src/lib/components/operation-popup/verben-workflow-ui-src-lib-components-operation-popup.mjs",
|
|
124
118
|
"default": "./fesm2022/verben-workflow-ui-src-lib-components-operation-popup.mjs"
|
|
125
119
|
},
|
|
120
|
+
"./src/lib/components/file-render": {
|
|
121
|
+
"types": "./src/lib/components/file-render/index.d.ts",
|
|
122
|
+
"esm2022": "./esm2022/src/lib/components/file-render/verben-workflow-ui-src-lib-components-file-render.mjs",
|
|
123
|
+
"esm": "./esm2022/src/lib/components/file-render/verben-workflow-ui-src-lib-components-file-render.mjs",
|
|
124
|
+
"default": "./fesm2022/verben-workflow-ui-src-lib-components-file-render.mjs"
|
|
125
|
+
},
|
|
126
126
|
"./src/lib/components/stage-details": {
|
|
127
127
|
"types": "./src/lib/components/stage-details/index.d.ts",
|
|
128
128
|
"esm2022": "./esm2022/src/lib/components/stage-details/verben-workflow-ui-src-lib-components-stage-details.mjs",
|