@piserve-tech/form-submission 0.0.0-watch
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.
- package/README.md +24 -0
- package/element-type/element-type.module.d.ts +12 -0
- package/element-type/form-elements/form-elements.component.d.ts +7 -0
- package/element-type/question/question.component.d.ts +14 -0
- package/element-type/sub-form/sub-form.component.d.ts +6 -0
- package/esm2022/element-type/element-type.module.mjs +36 -0
- package/esm2022/element-type/form-elements/form-elements.component.mjs +23 -0
- package/esm2022/element-type/question/question.component.mjs +52 -0
- package/esm2022/element-type/sub-form/sub-form.component.mjs +17 -0
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +198 -0
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +155 -0
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +147 -0
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +77 -0
- package/esm2022/form-fields/form-fields.module.mjs +154 -0
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +79 -0
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +75 -0
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +81 -0
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +59 -0
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +172 -0
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +129 -0
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +89 -0
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +16 -0
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +27 -0
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +29 -0
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +60 -0
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +27 -0
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +61 -0
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +86 -0
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +42 -0
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +59 -0
- package/esm2022/form-submission/form-submission.module.mjs +42 -0
- package/esm2022/form-submission/header/header.component.mjs +16 -0
- package/esm2022/form-submission/logic/logic.component.mjs +17 -0
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +27 -0
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +42 -0
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +157 -0
- package/esm2022/lib/form-submission.component.mjs +23 -0
- package/esm2022/lib/form-submission.module.mjs +45 -0
- package/esm2022/lib/form-submission.service.mjs +14 -0
- package/esm2022/logic/logic/logic.component.mjs +17 -0
- package/esm2022/logic/logic.module.mjs +20 -0
- package/esm2022/models/appearance.model.mjs +2 -0
- package/esm2022/models/elementOptionAPI.model.mjs +2 -0
- package/esm2022/models/elementOptionAPIData.model.mjs +2 -0
- package/esm2022/models/elementOptionDB.model.mjs +2 -0
- package/esm2022/models/elementOptionDBCriteria.model.mjs +2 -0
- package/esm2022/models/enum/condition.enum.mjs +18 -0
- package/esm2022/models/enum/elementType .enum.mjs +24 -0
- package/esm2022/models/enum/entityType.enum.mjs +12 -0
- package/esm2022/models/formConfiguration.model.mjs +2 -0
- package/esm2022/models/formElement.model.mjs +2 -0
- package/esm2022/models/formElementType.model.mjs +2 -0
- package/esm2022/models/grid.model.mjs +2 -0
- package/esm2022/models/logic.model.mjs +2 -0
- package/esm2022/models/option.model.mjs +2 -0
- package/esm2022/models/page.model.mjs +2 -0
- package/esm2022/models/publicForm.model.mjs +2 -0
- package/esm2022/models/question.model.mjs +2 -0
- package/esm2022/models/row.model.mjs +2 -0
- package/esm2022/models/section.model.mjs +2 -0
- package/esm2022/models/subForm.model.mjs +2 -0
- package/esm2022/models/validation.model.mjs +2 -0
- package/esm2022/piserve-tech-form-submission.mjs +5 -0
- package/esm2022/public-api.mjs +7 -0
- package/esm2022/services/countryService.mjs +65 -0
- package/esm2022/services/data.service.mjs +26 -0
- package/esm2022/services/form.service.mjs +43 -0
- package/esm2022/services/mapper.service.mjs +256 -0
- package/fesm2022/piserve-tech-form-submission.mjs +2558 -0
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -0
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +42 -0
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +41 -0
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +45 -0
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +24 -0
- package/form-fields/form-fields.module.d.ts +36 -0
- package/form-fields/location-fields/location-fields.component.d.ts +24 -0
- package/form-fields/mail-fields/mail-fields.component.d.ts +21 -0
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +45 -0
- package/form-fields/number-fields/number-fields.component.d.ts +22 -0
- package/form-fields/password-fields/password-fields.component.d.ts +35 -0
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +39 -0
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +24 -0
- package/form-fields/section-fields/section-fields.component.d.ts +6 -0
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +10 -0
- package/form-fields/signature-fields/signature-fields.component.d.ts +12 -0
- package/form-fields/slider-fields/slider-fields.component.d.ts +25 -0
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +10 -0
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +22 -0
- package/form-fields/text-fields/text-fields.component.d.ts +30 -0
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +16 -0
- package/form-fields/url-fields/url-fields.component.d.ts +22 -0
- package/form-submission/form-submission.module.d.ts +14 -0
- package/form-submission/header/header.component.d.ts +6 -0
- package/form-submission/logic/logic.component.d.ts +6 -0
- package/form-submission/navigation-tabs/navigation-tabs.component.d.ts +10 -0
- package/form-submission/next-prev-navigation/next-prev-navigation.component.d.ts +15 -0
- package/form-submission/submit-form/submit-form.component.d.ts +43 -0
- package/index.d.ts +5 -0
- package/lib/form-submission.component.d.ts +10 -0
- package/lib/form-submission.module.d.ts +14 -0
- package/lib/form-submission.service.d.ts +6 -0
- package/logic/logic/logic.component.d.ts +6 -0
- package/logic/logic.module.d.ts +8 -0
- package/models/appearance.model.d.ts +48 -0
- package/models/elementOptionAPI.model.d.ts +11 -0
- package/models/elementOptionAPIData.model.d.ts +5 -0
- package/models/elementOptionDB.model.d.ts +7 -0
- package/models/elementOptionDBCriteria.model.d.ts +7 -0
- package/models/enum/condition.enum.d.ts +16 -0
- package/models/enum/elementType .enum.d.ts +22 -0
- package/models/enum/entityType.enum.d.ts +10 -0
- package/models/formConfiguration.model.d.ts +16 -0
- package/models/formElement.model.d.ts +12 -0
- package/models/formElementType.model.d.ts +5 -0
- package/models/grid.model.d.ts +8 -0
- package/models/logic.model.d.ts +8 -0
- package/models/option.model.d.ts +11 -0
- package/models/page.model.d.ts +5 -0
- package/models/publicForm.model.d.ts +7 -0
- package/models/question.model.d.ts +14 -0
- package/models/row.model.d.ts +4 -0
- package/models/section.model.d.ts +5 -0
- package/models/subForm.model.d.ts +8 -0
- package/models/validation.model.d.ts +44 -0
- package/package.json +43 -0
- package/public-api.d.ts +3 -0
- package/services/countryService.d.ts +21 -0
- package/services/data.service.d.ts +13 -0
- package/services/form.service.d.ts +17 -0
- package/services/mapper.service.d.ts +10 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@angular/forms";
|
|
5
|
+
import * as i3 from "ngx-bootstrap/datepicker";
|
|
6
|
+
export class DateTimeFieldsComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.bsConfig = {
|
|
9
|
+
containerClass: 'theme-red', // Set the container class to apply the grey theme
|
|
10
|
+
};
|
|
11
|
+
this.question = {};
|
|
12
|
+
this.required = false;
|
|
13
|
+
this.hint = '';
|
|
14
|
+
this.count = 0;
|
|
15
|
+
this.dateType = '';
|
|
16
|
+
this.format = 'DD-MM-YYYY';
|
|
17
|
+
this.minDateOption = '';
|
|
18
|
+
this.maxDateOption = '';
|
|
19
|
+
this.todayDate = new Date(); // Current date
|
|
20
|
+
this.selectedDate = '';
|
|
21
|
+
this.selectedTime = '';
|
|
22
|
+
this.selectedDateRange = '';
|
|
23
|
+
this.selectedDateAndTime = '';
|
|
24
|
+
this.validationMessage = '';
|
|
25
|
+
this.validate = new EventEmitter();
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this.valueAssigned();
|
|
29
|
+
}
|
|
30
|
+
valueAssigned() {
|
|
31
|
+
this.count = this.question.count;
|
|
32
|
+
this.required = this.question.required;
|
|
33
|
+
this.hint = this.question.hint;
|
|
34
|
+
this.dateType = this.question.formElement.appearance.dateType;
|
|
35
|
+
this.format = this.question.formElement.appearance.format;
|
|
36
|
+
this.minDateOption = this.question.formElement.validation.minDateOption;
|
|
37
|
+
this.minDate = this.getMinDate();
|
|
38
|
+
this.maxDateOption = this.question.formElement.validation.maxDateOption;
|
|
39
|
+
this.maxDate = this.getMaxDate();
|
|
40
|
+
}
|
|
41
|
+
getMinDate() {
|
|
42
|
+
if (this.minDateOption === 'TODAY') {
|
|
43
|
+
return this.todayDate;
|
|
44
|
+
}
|
|
45
|
+
else if (this.minDateOption === 'CUSTOM') {
|
|
46
|
+
return new Date(this.question.formElement.validation.minDate);
|
|
47
|
+
}
|
|
48
|
+
return undefined; // Return undefined if no valid option
|
|
49
|
+
}
|
|
50
|
+
getMaxDate() {
|
|
51
|
+
if (this.maxDateOption === 'TODAY') {
|
|
52
|
+
return this.todayDate;
|
|
53
|
+
}
|
|
54
|
+
else if (this.maxDateOption === 'CUSTOM') {
|
|
55
|
+
return new Date(this.question.formElement.validation.maxDate);
|
|
56
|
+
}
|
|
57
|
+
return undefined; // Return undefined if no valid option
|
|
58
|
+
}
|
|
59
|
+
openDatePicker() {
|
|
60
|
+
this.datepicker.toggle();
|
|
61
|
+
}
|
|
62
|
+
openDateRangePicker() {
|
|
63
|
+
this.dateRangePicker.toggle();
|
|
64
|
+
}
|
|
65
|
+
openDateAndTimePicker() {
|
|
66
|
+
this.dateAndTimePicker.toggle();
|
|
67
|
+
}
|
|
68
|
+
validateField() {
|
|
69
|
+
if (this.dateType === 'DATE_ONLY') {
|
|
70
|
+
this.question.answer = String(this.selectedDate);
|
|
71
|
+
this.validateDateOnly();
|
|
72
|
+
}
|
|
73
|
+
else if (this.dateType === 'TIME_ONLY') {
|
|
74
|
+
this.question.answer = String(this.selectedTime);
|
|
75
|
+
this.validateTimeOnly();
|
|
76
|
+
}
|
|
77
|
+
else if (this.dateType === 'DATE_AND_TIME') {
|
|
78
|
+
this.question.answer = String(this.selectedDateAndTime);
|
|
79
|
+
this.validateDateAndTime();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
this.question.answer = String(this.selectedDateRange);
|
|
83
|
+
this.validateDateRange();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
validateDateOnly() {
|
|
87
|
+
this.validationFailed = false;
|
|
88
|
+
this.validationMessage = '';
|
|
89
|
+
if (this.required && !this.selectedDate) {
|
|
90
|
+
this.validationFailed = true;
|
|
91
|
+
this.validationMessage = 'This is a required question';
|
|
92
|
+
this.question.validation = false;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.question.validation = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
validateTimeOnly() {
|
|
99
|
+
this.validationFailed = false;
|
|
100
|
+
this.validationMessage = '';
|
|
101
|
+
if (this.required && !this.selectedTime) {
|
|
102
|
+
this.validationFailed = true;
|
|
103
|
+
this.validationMessage = 'This is a required question';
|
|
104
|
+
;
|
|
105
|
+
this.question.validation = false;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.question.validation = true;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
validateDateRange() {
|
|
112
|
+
this.validationFailed = false;
|
|
113
|
+
this.validationMessage = '';
|
|
114
|
+
if (this.required && !this.selectedDateRange) {
|
|
115
|
+
this.validationFailed = true;
|
|
116
|
+
this.validationMessage = 'This is a required question';
|
|
117
|
+
this.question.validation = false;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
this.question.validation = true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
validateDateAndTime() {
|
|
124
|
+
this.validationFailed = false;
|
|
125
|
+
this.validationMessage = '';
|
|
126
|
+
if (this.required && !this.selectedDateAndTime) {
|
|
127
|
+
this.validationFailed = true;
|
|
128
|
+
this.validationMessage = 'This is a required question';
|
|
129
|
+
this.question.validation = false;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
this.question.validation = true;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateTimeFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DateTimeFieldsComponent, selector: "lib-date-time-fields", inputs: { question: "question" }, outputs: { validate: "validate" }, viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["datepickerYMD"], descendants: true }, { propertyName: "dateRangePicker", first: true, predicate: ["daterangepicker"], descendants: true }, { propertyName: "dateAndTimePicker", first: true, predicate: ["dateAndTimePicker"], descendants: true }], ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label> \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div class=\"svg-wrapper mb-2 hintIcon\" [attr.data-title]=\"hint\" *ngIf=\"hint\">\r\n <svg class=\"hintSvg\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n</div>\r\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\r\n <!-- Date only picker -->\r\n <div class=\"input-container\">\r\n <input\r\n class=\"form-control height\"\r\n #datepickerYMD=\"bsDatepicker\"\r\n bsDatepicker\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{ dateInputFormat: format }\"\r\n [(ngModel)]=\"selectedDate\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDatePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\r\n <!-- Time picker -->\r\n <input type=\"time\" class=\"form-control height\"\r\n (blur)=\"validateTimeOnly()\" \r\n [(ngModel)]=\"selectedTime\"\r\n (ngModelChange)=\"validateTimeOnly()\"\r\n [class.invalid]=\"validationFailed\"/>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\r\n <!-- Date and time picker -->\r\n <div class=\"input-container\">\r\n <input\r\n #dateAndTimePicker=\"bsDatepicker\"\r\n type=\"text\"\r\n class=\"form-control height\"\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{\r\n withTimepicker: true,\r\n keepDatepickerOpened: true,\r\n rangeInputFormat: format,\r\n dateInputFormat: format\r\n }\"\r\n bsDatepicker\r\n [class.invalid]=\"validationFailed\"\r\n [(ngModel)]=\"selectedDateAndTime\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDateAndTimePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\r\n <!-- Date range picker -->\r\n <div class=\"input-container\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control height\"\r\n #daterangepicker=\"bsDaterangepicker\"\r\n bsDaterangepicker\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{\r\n rangeInputFormat: format,\r\n dateInputFormat: format,\r\n showWeekNumbers: false\r\n }\"\r\n [(ngModel)]=\"selectedDateRange\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDateRangePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.BsDatepickerDirective, selector: "[bsDatepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isDisabled", "minDate", "maxDate", "minMode", "daysDisabled", "datesDisabled", "datesEnabled", "dateCustomClasses", "dateTooltipTexts", "isOpen", "bsValue", "bsConfig"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDatepicker"] }, { kind: "directive", type: i3.BsDatepickerInputDirective, selector: "input[bsDatepicker]" }, { kind: "directive", type: i3.BsDaterangepickerDirective, selector: "[bsDaterangepicker]", inputs: ["placement", "triggers", "outsideClick", "container", "outsideEsc", "isOpen", "bsValue", "bsConfig", "isDisabled", "minDate", "maxDate", "dateCustomClasses", "daysDisabled", "datesDisabled", "datesEnabled"], outputs: ["onShown", "onHidden", "bsValueChange"], exportAs: ["bsDaterangepicker"] }, { kind: "directive", type: i3.BsDaterangepickerInputDirective, selector: "input[bsDaterangepicker]" }] }); }
|
|
137
|
+
}
|
|
138
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DateTimeFieldsComponent, decorators: [{
|
|
139
|
+
type: Component,
|
|
140
|
+
args: [{ selector: 'lib-date-time-fields', template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label> \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div class=\"svg-wrapper mb-2 hintIcon\" [attr.data-title]=\"hint\" *ngIf=\"hint\">\r\n <svg class=\"hintSvg\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\" stroke=\"#323232\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n</div>\r\n <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\r\n <!-- Date only picker -->\r\n <div class=\"input-container\">\r\n <input\r\n class=\"form-control height\"\r\n #datepickerYMD=\"bsDatepicker\"\r\n bsDatepicker\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{ dateInputFormat: format }\"\r\n [(ngModel)]=\"selectedDate\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDatePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\r\n <!-- Time picker -->\r\n <input type=\"time\" class=\"form-control height\"\r\n (blur)=\"validateTimeOnly()\" \r\n [(ngModel)]=\"selectedTime\"\r\n (ngModelChange)=\"validateTimeOnly()\"\r\n [class.invalid]=\"validationFailed\"/>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\r\n <!-- Date and time picker -->\r\n <div class=\"input-container\">\r\n <input\r\n #dateAndTimePicker=\"bsDatepicker\"\r\n type=\"text\"\r\n class=\"form-control height\"\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{\r\n withTimepicker: true,\r\n keepDatepickerOpened: true,\r\n rangeInputFormat: format,\r\n dateInputFormat: format\r\n }\"\r\n bsDatepicker\r\n [class.invalid]=\"validationFailed\"\r\n [(ngModel)]=\"selectedDateAndTime\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDateAndTimePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\r\n <!-- Date range picker -->\r\n <div class=\"input-container\">\r\n <input\r\n type=\"text\"\r\n class=\"form-control height\"\r\n #daterangepicker=\"bsDaterangepicker\"\r\n bsDaterangepicker\r\n [minDate]=\"minDate ? minDate : todayDate\"\r\n [maxDate]=\"maxDate ? maxDate : todayDate\"\r\n [bsConfig]=\"{\r\n rangeInputFormat: format,\r\n dateInputFormat: format,\r\n showWeekNumbers: false\r\n }\"\r\n [(ngModel)]=\"selectedDateRange\"\r\n (blur)=\"validateField()\"\r\n (ngModelChange)=\"validateField()\"\r\n [class.invalid]=\"validationFailed\"\r\n />\r\n <i class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\" (click)=\"openDateRangePicker()\"></i>\r\n </div>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mt-2\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n </ng-container>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.input-container{position:relative}.input-container .form-control{padding-right:30px}.input-container .calendar-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);cursor:pointer}\n"] }]
|
|
141
|
+
}], propDecorators: { question: [{
|
|
142
|
+
type: Input
|
|
143
|
+
}], datepicker: [{
|
|
144
|
+
type: ViewChild,
|
|
145
|
+
args: ['datepickerYMD']
|
|
146
|
+
}], dateRangePicker: [{
|
|
147
|
+
type: ViewChild,
|
|
148
|
+
args: ['daterangepicker']
|
|
149
|
+
}], dateAndTimePicker: [{
|
|
150
|
+
type: ViewChild,
|
|
151
|
+
args: ['dateAndTimePicker']
|
|
152
|
+
}], validate: [{
|
|
153
|
+
type: Output
|
|
154
|
+
}] } });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2RhdGUtdGltZS1maWVsZHMvZGF0ZS10aW1lLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFXbEYsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQU1FLGFBQVEsR0FBZ0M7WUFDdEMsY0FBYyxFQUFFLFdBQVcsRUFBRSxrREFBa0Q7U0FDaEYsQ0FBQztRQUVPLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2xCLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixXQUFNLEdBQVcsWUFBWSxDQUFDO1FBQzlCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRTNCLGNBQVMsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsZUFBZTtRQUM3QyxpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0Isd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FBRWpDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUtyQixhQUFRLEdBQTJCLElB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cnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQnNEYXRlcGlja2VyQ29uZmlnLFxyXG4gIEJzRGF0ZXBpY2tlckRpcmVjdGl2ZSxcclxufSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItZGF0ZS10aW1lLWZpZWxkcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtdGltZS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtdGltZS1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRmllbGRzQ29tcG9uZW50IHtcclxuICBic0NvbmZpZzogUGFydGlhbDxCc0RhdGVwaWNrZXJDb25maWc+ID0ge1xyXG4gICAgY29udGFpbmVyQ2xhc3M6ICd0aGVtZS1yZWQnLCAvLyBTZXQgdGhlIGNvbnRhaW5lciBjbGFzcyB0byBhcHBseSB0aGUgZ3JleSB0aGVtZVxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcclxuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gIGRhdGVUeXBlOiBzdHJpbmcgPSAnJztcclxuICBmb3JtYXQ6IHN0cmluZyA9ICdERC1NTS1ZWVlZJztcclxuICBtaW5EYXRlT3B0aW9uOiBzdHJpbmcgPSAnJztcclxuICBtaW5EYXRlOiBEYXRlIHwgdW5kZWZpbmVkOyAvLyBJbml0aWFsaXplIG1pbkRhdGUgYXMgRGF0ZSBvciB1bmRlZmluZWRcclxuICBtYXhEYXRlT3B0aW9uOiBzdHJpbmcgPSAnJztcclxuICBtYXhEYXRlOiBEYXRlIHwgdW5kZWZpbmVkOyAvLyBJbml0aWFsaXplIG1heERhdGUgYXMgRGF0ZSBvciB1bmRlZmluZWRcclxuICB0b2RheURhdGU6IERhdGUgPSBuZXcgRGF0ZSgpOyAvLyBDdXJyZW50IGRhdGVcclxuICBzZWxlY3RlZERhdGU6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkVGltZTogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0ZWREYXRlUmFuZ2U6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkRGF0ZUFuZFRpbWU6IHN0cmluZyA9ICcnO1xyXG4gIHZhbGlkYXRpb25GYWlsZWQhOiBib29sZWFuO1xyXG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSAnJztcclxuICBAVmlld0NoaWxkKCdkYXRlcGlja2VyWU1EJykgZGF0ZXBpY2tlciE6IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZTtcclxuICBAVmlld0NoaWxkKCdkYXRlcmFuZ2VwaWNrZXInKSBkYXRlUmFuZ2VQaWNrZXIhOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XHJcbiAgQFZpZXdDaGlsZCgnZGF0ZUFuZFRpbWVQaWNrZXInKSBkYXRlQW5kVGltZVBpY2tlciE6IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZTtcclxuXHJcbiAgQE91dHB1dCgpIHZhbGlkYXRlIDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQXNzaWduZWQoKSB7ICAgIFxyXG4gICAgdGhpcy5jb3VudCA9IHRoaXMucXVlc3Rpb24uY291bnQ7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcclxuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcclxuICAgIHRoaXMuZGF0ZVR5cGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2UuZGF0ZVR5cGU7XHJcbiAgICB0aGlzLmZvcm1hdCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5mb3JtYXQ7XHJcbiAgICB0aGlzLm1pbkRhdGVPcHRpb24gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluRGF0ZU9wdGlvbjtcclxuICAgIHRoaXMubWluRGF0ZSA9IHRoaXMuZ2V0TWluRGF0ZSgpO1xyXG4gICAgdGhpcy5tYXhEYXRlT3B0aW9uID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heERhdGVPcHRpb247XHJcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmdldE1heERhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldE1pbkRhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5taW5EYXRlT3B0aW9uID09PSAnVE9EQVknKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvZGF5RGF0ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5taW5EYXRlT3B0aW9uID09PSAnQ1VTVE9NJykge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1pbkRhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBubyB2YWxpZCBvcHRpb25cclxuICB9XHJcblxyXG4gIGdldE1heERhdGUoKTogRGF0ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5tYXhEYXRlT3B0aW9uID09PSAnVE9EQVknKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRvZGF5RGF0ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tYXhEYXRlT3B0aW9uID09PSAnQ1VTVE9NJykge1xyXG4gICAgICByZXR1cm4gbmV3IERhdGUodGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heERhdGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBubyB2YWxpZCBvcHRpb25cclxuICB9XHJcblxyXG4gIG9wZW5EYXRlUGlja2VyKCkge1xyXG4gICAgdGhpcy5kYXRlcGlja2VyLnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRhdGVSYW5nZVBpY2tlcigpIHtcclxuICAgIHRoaXMuZGF0ZVJhbmdlUGlja2VyLnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRhdGVBbmRUaW1lUGlja2VyKCkge1xyXG4gICAgdGhpcy5kYXRlQW5kVGltZVBpY2tlci50b2dnbGUoKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlRmllbGQoKXtcclxuICAgIGlmKHRoaXMuZGF0ZVR5cGUgPT09ICdEQVRFX09OTFknKXsgICAgICBcclxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXI9U3RyaW5nKHRoaXMuc2VsZWN0ZWREYXRlKTtcclxuICAgICAgdGhpcy52YWxpZGF0ZURhdGVPbmx5KClcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5kYXRlVHlwZSA9PT0gJ1RJTUVfT05MWScpe1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlcj1TdHJpbmcodGhpcy5zZWxlY3RlZFRpbWUpO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlVGltZU9ubHkoKVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmRhdGVUeXBlID09PSAnREFURV9BTkRfVElNRScpe1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlcj1TdHJpbmcodGhpcy5zZWxlY3RlZERhdGVBbmRUaW1lKTtcclxuICAgICAgdGhpcy52YWxpZGF0ZURhdGVBbmRUaW1lKClcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyPVN0cmluZyh0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlKTtcclxuICAgICAgdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZURhdGVPbmx5KCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZERhdGUpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb24nO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICB2YWxpZGF0ZVRpbWVPbmx5KCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZFRpbWUpIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdUaGlzIGlzIGEgcmVxdWlyZWQgcXVlc3Rpb24nOztcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRhdGVEYXRlUmFuZ2UoKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcclxuICAgIGlmICh0aGlzLnJlcXVpcmVkICYmICF0aGlzLnNlbGVjdGVkRGF0ZVJhbmdlKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnVGhpcyBpcyBhIHJlcXVpcmVkIHF1ZXN0aW9uJztcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgdmFsaWRhdGVEYXRlQW5kVGltZSgpIHtcclxuICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuc2VsZWN0ZWREYXRlQW5kVGltZSkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1RoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbic7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwiJ2NvbC0nICsgY291bnRcIiBjbGFzcz1cIm1iLTUgcHgtM1wiPlxyXG4gIDxkaXYgIGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiPlxyXG4gIDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWw+Jm5ic3A7XHJcbiAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxyXG4gIDxkaXYgY2xhc3M9XCJzdmctd3JhcHBlciAgbWItMiBoaW50SWNvblwiIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiICpuZ0lmPVwiaGludFwiPlxyXG4gICAgPHN2ZyBjbGFzcz1cImhpbnRTdmdcIiAgdmlld0JveD1cIjAgMCAzMCAzMFwiICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIiBzdHJva2U9XCIjMzIzMjMyXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICA8cGF0aCBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCIgc3Ryb2tlPVwiIzMyMzIzMlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPHBhdGggZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiIHN0cm9rZT1cIiMzMjMyMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICA8L3N2Zz5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0ZVR5cGUgPT09ICdEQVRFX09OTFknXCI+XHJcbiAgICAgIDwhLS0gRGF0ZSBvbmx5IHBpY2tlciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaGVpZ2h0XCJcclxuICAgICAgICAgICNkYXRlcGlja2VyWU1EPVwiYnNEYXRlcGlja2VyXCJcclxuICAgICAgICAgIGJzRGF0ZXBpY2tlclxyXG4gICAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZSA/IG1pbkRhdGUgOiB0b2RheURhdGVcIlxyXG4gICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZSA/IG1heERhdGUgOiB0b2RheURhdGVcIlxyXG4gICAgICAgICAgW2JzQ29uZmlnXT1cInsgZGF0ZUlucHV0Rm9ybWF0OiBmb3JtYXQgfVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiXHJcbiAgICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKClcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVGaWVsZCgpXCJcclxuICAgICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jYWxlbmRhci1kYXlzIGNhbGVuZGFyLWljb24gdGV4dC1wcmltYXJ5IGZzLTVcIiAgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKClcIj48L2k+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgbXQtMlwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJ2YWxpZGF0aW9uU3ZnXCIgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMjFDNy4wMjkgMjEgMyAxNi45NzEgMyAxMkMzIDcuMDI5IDcuMDI5IDMgMTIgM0MxNi45NzEgMyAyMSA3LjAyOSAyMSAxMkMyMSAxNi45NzEgMTYuOTcxIDIxIDEyIDIxWlwiIGZpbGw9XCIjRkYwMDAwXCIgc3Ryb2tlPVwiI0ZGMDAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTIuNzVMMTIgNy43NVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxNlwiIHI9XCIxXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICB7e3ZhbGlkYXRpb25NZXNzYWdlfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRlVHlwZSA9PT0gJ1RJTUVfT05MWSdcIj5cclxuICAgICAgPCEtLSBUaW1lIHBpY2tlciAtLT5cclxuICAgICAgPGlucHV0IHR5cGU9XCJ0aW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaGVpZ2h0XCJcclxuICAgICAgKGJsdXIpPVwidmFsaWRhdGVUaW1lT25seSgpXCIgXHJcbiAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUaW1lXCJcclxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsaWRhdGVUaW1lT25seSgpXCJcclxuICAgICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiLz5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIiBmaWxsPVwiI0ZGMDAwMFwiIHN0cm9rZT1cIiNGRjAwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAge3t2YWxpZGF0aW9uTWVzc2FnZX19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0ZVR5cGUgPT09ICdEQVRFX0FORF9USU1FJ1wiPlxyXG4gICAgICA8IS0tIERhdGUgYW5kIHRpbWUgcGlja2VyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAjZGF0ZUFuZFRpbWVQaWNrZXI9XCJic0RhdGVwaWNrZXJcIlxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxyXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGUgPyBtaW5EYXRlIDogdG9kYXlEYXRlXCJcclxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlID8gbWF4RGF0ZSA6IHRvZGF5RGF0ZVwiXHJcbiAgICAgICAgW2JzQ29uZmlnXT1cIntcclxuICAgICAgICAgIHdpdGhUaW1lcGlja2VyOiB0cnVlLFxyXG4gICAgICAgICAga2VlcERhdGVwaWNrZXJPcGVuZWQ6IHRydWUsXHJcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBmb3JtYXQsXHJcbiAgICAgICAgICBkYXRlSW5wdXRGb3JtYXQ6IGZvcm1hdFxyXG4gICAgICAgIH1cIlxyXG4gICAgICAgIGJzRGF0ZXBpY2tlclxyXG4gICAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWREYXRlQW5kVGltZVwiXHJcbiAgICAgICAgKGJsdXIpPVwidmFsaWRhdGVGaWVsZCgpXCJcclxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ2YWxpZGF0ZUZpZWxkKClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNhbGVuZGFyLWRheXMgY2FsZW5kYXItaWNvbiB0ZXh0LXByaW1hcnkgZnMtNVwiICAoY2xpY2spPVwib3BlbkRhdGVBbmRUaW1lUGlja2VyKClcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIiBmaWxsPVwiI0ZGMDAwMFwiIHN0cm9rZT1cIiNGRjAwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAge3t2YWxpZGF0aW9uTWVzc2FnZX19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0ZVR5cGUgPT09ICdEQVRFX1JBTkdFJ1wiPlxyXG4gICAgICA8IS0tIERhdGUgcmFuZ2UgcGlja2VyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBoZWlnaHRcIlxyXG4gICAgICAgICNkYXRlcmFuZ2VwaWNrZXI9XCJic0RhdGVyYW5nZXBpY2tlclwiXHJcbiAgICAgICAgYnNEYXRlcmFuZ2VwaWNrZXJcclxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlID8gbWluRGF0ZSA6IHRvZGF5RGF0ZVwiXHJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZSA/IG1heERhdGUgOiB0b2RheURhdGVcIlxyXG4gICAgICAgIFtic0NvbmZpZ109XCJ7XHJcbiAgICAgICAgICByYW5nZUlucHV0Rm9ybWF0OiBmb3JtYXQsXHJcbiAgICAgICAgICBkYXRlSW5wdXRGb3JtYXQ6IGZvcm1hdCxcclxuICAgICAgICAgIHNob3dXZWVrTnVtYmVyczogZmFsc2VcclxuICAgICAgICB9XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVJhbmdlXCJcclxuICAgICAgICAoYmx1cik9XCJ2YWxpZGF0ZUZpZWxkKClcIlxyXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbGlkYXRlRmllbGQoKVwiXHJcbiAgICAgICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtY2FsZW5kYXItZGF5cyBjYWxlbmRhci1pY29uIHRleHQtcHJpbWFyeSBmcy01XCIgIChjbGljayk9XCJvcGVuRGF0ZVJhbmdlUGlja2VyKClcIj48L2k+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG10LTJcIj5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTEyIDIxQzcuMDI5IDIxIDMgMTYuOTcxIDMgMTJDMyA3LjAyOSA3LjAyOSAzIDEyIDNDMTYuOTcxIDMgMjEgNy4wMjkgMjEgMTJDMjEgMTYuOTcxIDE2Ljk3MSAyMSAxMiAyMVpcIiBmaWxsPVwiI0ZGMDAwMFwiIHN0cm9rZT1cIiNGRjAwMDBcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDEyLjc1TDEyIDcuNzVcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAge3t2YWxpZGF0aW9uTWVzc2FnZX19PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../services/form.service";
|
|
4
|
+
import * as i2 from "@angular/common";
|
|
5
|
+
import * as i3 from "@piserve-tech/drop-down";
|
|
6
|
+
export class DropDownFieldsComponent {
|
|
7
|
+
constructor(formService) {
|
|
8
|
+
this.formService = formService;
|
|
9
|
+
this.question = {};
|
|
10
|
+
this.count = 0;
|
|
11
|
+
this.required = false;
|
|
12
|
+
this.hint = '';
|
|
13
|
+
this.selectionType = '';
|
|
14
|
+
this.minimumSelection = 0;
|
|
15
|
+
this.maximumSelection = 0;
|
|
16
|
+
this.optionType = '';
|
|
17
|
+
this.lookupTable = '';
|
|
18
|
+
this.customOptions = [];
|
|
19
|
+
this.database = {};
|
|
20
|
+
this.api = {};
|
|
21
|
+
this.selectedValue = [];
|
|
22
|
+
this.validationMessage = '';
|
|
23
|
+
this.validate = new EventEmitter();
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.valueAssigned();
|
|
27
|
+
}
|
|
28
|
+
onValueChange(newValue) {
|
|
29
|
+
this.selectedValue = newValue;
|
|
30
|
+
this.selectItems();
|
|
31
|
+
}
|
|
32
|
+
valueAssigned() {
|
|
33
|
+
console.log('Question', this.question);
|
|
34
|
+
this.count = this.question.count;
|
|
35
|
+
this.required = this.question.required;
|
|
36
|
+
this.hint = this.question.hint;
|
|
37
|
+
this.selectionType = this.question.formElement.appearance.selectionType;
|
|
38
|
+
this.minimumSelection =
|
|
39
|
+
this.question.formElement.validation.minimumSelection;
|
|
40
|
+
this.maximumSelection =
|
|
41
|
+
this.question.formElement.validation.maximumSelection;
|
|
42
|
+
this.optionType = this.question.formElement.option.optionType;
|
|
43
|
+
switch (this.optionType) {
|
|
44
|
+
case 'OPTION':
|
|
45
|
+
this.customOptions = this.question.formElement.option.customOptions.map((option) => ({
|
|
46
|
+
label: option.value,
|
|
47
|
+
value: '',
|
|
48
|
+
image: '',
|
|
49
|
+
}));
|
|
50
|
+
break;
|
|
51
|
+
case 'LOOKUP':
|
|
52
|
+
this.lookupTable = this.question.formElement.option.lookupTable;
|
|
53
|
+
this.fetchDataFromLookup();
|
|
54
|
+
break;
|
|
55
|
+
case 'DATABASE':
|
|
56
|
+
this.database = this.question.formElement.option.database;
|
|
57
|
+
this.fetchDataFromDatabase();
|
|
58
|
+
break;
|
|
59
|
+
case 'API':
|
|
60
|
+
this.api = this.question.formElement.option.api;
|
|
61
|
+
this.fetchDataFromAPI();
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
console.warn('Unknown option type:', this.optionType);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
transformDatabaseObject(database) {
|
|
68
|
+
return {
|
|
69
|
+
tableName: database.tableName,
|
|
70
|
+
valueField: database.valueField,
|
|
71
|
+
labelField: database.labelField,
|
|
72
|
+
criteria: database.criteria.map((criteria) => ({
|
|
73
|
+
field: criteria.field,
|
|
74
|
+
condition: criteria.condition,
|
|
75
|
+
value: criteria.inputValue,
|
|
76
|
+
logicalOperator: criteria.logicalOperator,
|
|
77
|
+
})),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
fetchDataFromDatabase() {
|
|
81
|
+
const transformedDatabase = this.transformDatabaseObject(this.database);
|
|
82
|
+
this.formService.fetchDataFromDatabase(transformedDatabase).subscribe((response) => {
|
|
83
|
+
if (response.success) {
|
|
84
|
+
this.customOptions = response.result.map((item) => ({
|
|
85
|
+
value: item.value,
|
|
86
|
+
label: item.label,
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.error('Error fetching data from database:', response.message);
|
|
91
|
+
}
|
|
92
|
+
}, (error) => {
|
|
93
|
+
console.error('HTTP Error:', error);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
fetchDataFromLookup() {
|
|
97
|
+
this.formService.fetchDataFromLookup(this.lookupTable).subscribe((response) => {
|
|
98
|
+
this.customOptions = response.result.values.map((item) => ({
|
|
99
|
+
value: item.value,
|
|
100
|
+
label: item.label,
|
|
101
|
+
}));
|
|
102
|
+
}, (error) => {
|
|
103
|
+
console.error('HTTP Error:', error);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
fetchDataFromAPI() {
|
|
107
|
+
const apiConfig = this.api;
|
|
108
|
+
this.formService.fetchDataFromExternalAPI(apiConfig.url).subscribe((response) => {
|
|
109
|
+
const data = this.extractDataByPath(response, apiConfig.pathToValue);
|
|
110
|
+
this.customOptions = data.map((item) => ({
|
|
111
|
+
value: item[apiConfig.valueField],
|
|
112
|
+
label: item[apiConfig.labelField],
|
|
113
|
+
}));
|
|
114
|
+
}, (error) => {
|
|
115
|
+
console.error('HTTP Error:', error);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
extractDataByPath(data, path) {
|
|
119
|
+
return path.split('.').reduce((acc, part) => acc && acc[part], data);
|
|
120
|
+
}
|
|
121
|
+
selectItems() {
|
|
122
|
+
this.validationFailed = false;
|
|
123
|
+
this.validationMessage = '';
|
|
124
|
+
if (this.selectedValue.length == 0 && this.required) {
|
|
125
|
+
this.validationFailed = true;
|
|
126
|
+
this.validationMessage = `This is a required question`;
|
|
127
|
+
this.validate.emit(this.validationFailed);
|
|
128
|
+
}
|
|
129
|
+
else if (this.selectedValue.length < this.minimumSelection ||
|
|
130
|
+
this.selectedValue.length > this.maximumSelection) {
|
|
131
|
+
this.validationFailed = true;
|
|
132
|
+
this.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;
|
|
133
|
+
this.validate.emit(this.validationFailed);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropDownFieldsComponent, deps: [{ token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
137
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DropDownFieldsComponent, selector: "lib-drop-down-fields", inputs: { question: "question" }, outputs: { validate: "validate" }, ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <lib-dropdown\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n ></lib-dropdown>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mb-2\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropdownComponent, selector: "lib-dropdown", inputs: ["multiple", "scrollable", "selectedItems", "placeholder", "items", "showCreateNew", "selectedValues", "customButtons", "showBorder"], outputs: ["buttonClick", "selectedItemsChange", "onScroll", "onCreateNew", "onSearch"] }] }); }
|
|
138
|
+
}
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropDownFieldsComponent, decorators: [{
|
|
140
|
+
type: Component,
|
|
141
|
+
args: [{ selector: 'lib-drop-down-fields', template: "<div [ngClass]=\"'col-' + count\" class=\"mb-5 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <lib-dropdown\r\n [items]=\"customOptions\"\r\n [multiple]=\"selectionType === 'SINGLE' ? false : true\"\r\n ></lib-dropdown>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger mb-2\">\r\n <svg\r\n class=\"validationSvg\"\r\n viewBox=\"0 0 24 24\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\"\r\n fill=\"#FF0000\"\r\n stroke=\"#FF0000\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M12 12.75L12 7.75\"\r\n stroke=\"white\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\" />\r\n </svg>\r\n {{ validationMessage }}\r\n </div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}\n"] }]
|
|
142
|
+
}], ctorParameters: function () { return [{ type: i1.FormService }]; }, propDecorators: { question: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], validate: [{
|
|
145
|
+
type: Output
|
|
146
|
+
}] } });
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2Ryb3AtZG93bi1maWVsZHMvZHJvcC1kb3duLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQWN2RSxNQUFNLE9BQU8sdUJBQXVCO0lBbUJsQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWxCbkMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUM1QixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNsQixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixxQkFBZ0IsR0FBVyxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBQzdCLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFDekIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsUUFBRyxHQUFRLEVBQUUsQ0FBQztRQUNkLGtCQUFhLEdBQVUsRUFBRSxDQUFDO1FBRTFCLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUVyQixhQUFRLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFFeEIsQ0FBQztJQUVqRCxRQUFRO1FBQ04sSUFB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QUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ25ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLDZCQUE2QixDQUFDO1lBQ3ZELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFDakQ7WUFDQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxvQ0FBb0MsSUFBSSxDQUFDLGdCQUFnQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQzsrR0E1SlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsaUlDZHBDLGlnR0FnRkE7OzRGRGxFYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCO2tHQUt2QixRQUFRO3NCQUFoQixLQUFLO2dCQWdCSSxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLnNlcnZpY2UnO1xyXG5cclxuaW50ZXJmYWNlIERyb3BEb3duRGF0YSB7XHJcbiAgdmFsdWU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGltYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWRyb3AtZG93bi1maWVsZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wLWRvd24tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcm9wLWRvd24tZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wRG93bkZpZWxkc0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgcXVlc3Rpb246IGFueSA9IHt9O1xyXG4gIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gIHJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGludDogc3RyaW5nID0gJyc7XHJcbiAgc2VsZWN0aW9uVHlwZTogc3RyaW5nID0gJyc7XHJcbiAgbWluaW11bVNlbGVjdGlvbjogbnVtYmVyID0gMDtcclxuICBtYXhpbXVtU2VsZWN0aW9uOiBudW1iZXIgPSAwO1xyXG4gIG9wdGlvblR5cGU6IHN0cmluZyA9ICcnO1xyXG4gIGxvb2t1cFRhYmxlOiBzdHJpbmcgPSAnJztcclxuICBjdXN0b21PcHRpb25zOiBEcm9wRG93bkRhdGFbXSA9IFtdO1xyXG4gIGRhdGFiYXNlOiBhbnkgPSB7fTtcclxuICBhcGk6IGFueSA9IHt9O1xyXG4gIHNlbGVjdGVkVmFsdWU6IGFueVtdID0gW107XHJcbiAgdmFsaWRhdGlvbkZhaWxlZCE6IGJvb2xlYW47XHJcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBAT3V0cHV0KCkgdmFsaWRhdGU6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xyXG4gIH1cclxuXHJcbiAgb25WYWx1ZUNoYW5nZShuZXdWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBuZXdWYWx1ZTtcclxuICAgIHRoaXMuc2VsZWN0SXRlbXMoKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQXNzaWduZWQoKSB7XHJcbiAgICBjb25zb2xlLmxvZygnUXVlc3Rpb24nLHRoaXMucXVlc3Rpb24pO1xyXG4gICAgXHJcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbi5jb3VudDtcclxuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkO1xyXG4gICAgdGhpcy5oaW50ID0gdGhpcy5xdWVzdGlvbi5oaW50O1xyXG4gICAgdGhpcy5zZWxlY3Rpb25UeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnNlbGVjdGlvblR5cGU7XHJcbiAgICB0aGlzLm1pbmltdW1TZWxlY3Rpb24gPVxyXG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluaW11bVNlbGVjdGlvbjtcclxuICAgIHRoaXMubWF4aW11bVNlbGVjdGlvbiA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5tYXhpbXVtU2VsZWN0aW9uO1xyXG4gICAgdGhpcy5vcHRpb25UeXBlID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24ub3B0aW9uVHlwZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMub3B0aW9uVHlwZSkge1xyXG4gICAgICBjYXNlICdPUFRJT04nOlxyXG4gICAgICAgIHRoaXMuY3VzdG9tT3B0aW9ucyA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQub3B0aW9uLmN1c3RvbU9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgKG9wdGlvbjogeyB2YWx1ZTogc3RyaW5nIH0pID0+ICh7XHJcbiAgICAgICAgICAgIGxhYmVsOiBvcHRpb24udmFsdWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcclxuICAgICAgICAgICAgaW1hZ2U6ICcnLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdMT09LVVAnOlxyXG4gICAgICAgIHRoaXMubG9va3VwVGFibGUgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5sb29rdXBUYWJsZTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21Mb29rdXAoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnREFUQUJBU0UnOlxyXG4gICAgICAgIHRoaXMuZGF0YWJhc2UgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50Lm9wdGlvbi5kYXRhYmFzZTtcclxuICAgICAgICB0aGlzLmZldGNoRGF0YUZyb21EYXRhYmFzZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdBUEknOlxyXG4gICAgICAgIHRoaXMuYXBpID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5vcHRpb24uYXBpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hEYXRhRnJvbUFQSSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBvcHRpb24gdHlwZTonLCB0aGlzLm9wdGlvblR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtRGF0YWJhc2VPYmplY3QoZGF0YWJhc2U6IGFueSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdGFibGVOYW1lOiBkYXRhYmFzZS50YWJsZU5hbWUsXHJcbiAgICAgIHZhbHVlRmllbGQ6IGRhdGFiYXNlLnZhbHVlRmllbGQsXHJcbiAgICAgIGxhYmVsRmllbGQ6IGRhdGFiYXNlLmxhYmVsRmllbGQsXHJcbiAgICAgIGNyaXRlcmlhOiBkYXRhYmFzZS5jcml0ZXJpYS5tYXAoKGNyaXRlcmlhOiBhbnkpID0+ICh7XHJcbiAgICAgICAgZmllbGQ6IGNyaXRlcmlhLmZpZWxkLFxyXG4gICAgICAgIGNvbmRpdGlvbjogY3JpdGVyaWEuY29uZGl0aW9uLFxyXG4gICAgICAgIHZhbHVlOiBjcml0ZXJpYS5pbnB1dFZhbHVlLFxyXG4gICAgICAgIGxvZ2ljYWxPcGVyYXRvcjogY3JpdGVyaWEubG9naWNhbE9wZXJhdG9yLFxyXG4gICAgICB9KSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hEYXRhRnJvbURhdGFiYXNlKCkge1xyXG4gICAgY29uc3QgdHJhbnNmb3JtZWREYXRhYmFzZSA9IHRoaXMudHJhbnNmb3JtRGF0YWJhc2VPYmplY3QodGhpcy5kYXRhYmFzZSk7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21EYXRhYmFzZSh0cmFuc2Zvcm1lZERhdGFiYXNlKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogeyB2YWx1ZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0pID0+ICh7XHJcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0ubGFiZWwsXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhIGZyb20gZGF0YWJhc2U6JywgcmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21Mb29rdXAoKSB7XHJcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZldGNoRGF0YUZyb21Mb29rdXAodGhpcy5sb29rdXBUYWJsZSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmN1c3RvbU9wdGlvbnMgPSByZXNwb25zZS5yZXN1bHQudmFsdWVzLm1hcChcclxuICAgICAgICAgIChpdGVtOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSkgPT4gKHtcclxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdIVFRQIEVycm9yOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoRGF0YUZyb21BUEkoKSB7XHJcbiAgICBjb25zdCBhcGlDb25maWcgPSB0aGlzLmFwaTtcclxuICAgIHRoaXMuZm9ybVNlcnZpY2UuZmV0Y2hEYXRhRnJvbUV4dGVybmFsQVBJKGFwaUNvbmZpZy51cmwpLnN1YnNjcmliZShcclxuICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZXh0cmFjdERhdGFCeVBhdGgocmVzcG9uc2UsIGFwaUNvbmZpZy5wYXRoVG9WYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5jdXN0b21PcHRpb25zID0gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgICAgIHZhbHVlOiBpdGVtW2FwaUNvbmZpZy52YWx1ZUZpZWxkXSxcclxuICAgICAgICAgIGxhYmVsOiBpdGVtW2FwaUNvbmZpZy5sYWJlbEZpZWxkXSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0hUVFAgRXJyb3I6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdERhdGFCeVBhdGgoZGF0YTogYW55LCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChhY2MsIHBhcnQpID0+IGFjYyAmJiBhY2NbcGFydF0sIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0SXRlbXMoKSB7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID09IDAgJiYgdGhpcy5yZXF1aXJlZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFRoaXMgaXMgYSByZXF1aXJlZCBxdWVzdGlvbmA7XHJcbiAgICAgIHRoaXMudmFsaWRhdGUuZW1pdCh0aGlzLnZhbGlkYXRpb25GYWlsZWQpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA8IHRoaXMubWluaW11bVNlbGVjdGlvbiB8fFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gdGhpcy5tYXhpbXVtU2VsZWN0aW9uXHJcbiAgICApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBzZWxlY3RlZCBvcHRpb25zIG11c3QgYmUgYmV0d2VlbiAke3RoaXMubWluaW11bVNlbGVjdGlvbn0gJiAke3RoaXMubWF4aW11bVNlbGVjdGlvbn1gO1xyXG4gICAgICB0aGlzLnZhbGlkYXRlLmVtaXQodGhpcy52YWxpZGF0aW9uRmFpbGVkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBbbmdDbGFzc109XCInY29sLScgKyBjb3VudFwiIGNsYXNzPVwibWItNSBweC0zXCI+XHJcbiAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cclxuICAgIDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcclxuICAgID4mbmJzcDtcclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJzdmctd3JhcHBlciBtYi0yIGhpbnRJY29uXCJcclxuICAgICAgW2F0dHIuZGF0YS10aXRsZV09XCJoaW50XCJcclxuICAgICAgKm5nSWY9XCJoaW50XCJcclxuICAgID5cclxuICAgICAgPHN2Z1xyXG4gICAgICAgIGNsYXNzPVwiaGludFN2Z1wiXHJcbiAgICAgICAgdmlld0JveD1cIjAgMCAzMCAzMFwiXHJcbiAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgID5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgIGQ9XCJNMTUgMjYuMjVWMjYuMjVDOC43ODYyNSAyNi4yNSAzLjc1IDIxLjIxMzggMy43NSAxNVYxNUMzLjc1IDguNzg2MjUgOC43ODYyNSAzLjc1IDE1IDMuNzVWMy43NUMyMS4yMTM4IDMuNzUgMjYuMjUgOC43ODYyNSAyNi4yNSAxNVYxNUMyNi4yNSAyMS4yMTM4IDIxLjIxMzggMjYuMjUgMTUgMjYuMjVaXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTUgMTYuNTYyM1YxNi4yNDk4QzE1IDE1LjIyODUgMTUuNjMxMiAxNC42NzQ4IDE2LjI2MzcgMTQuMjQ5OEMxNi44ODEyIDEzLjgzMzUgMTcuNSAxMy4yOTEgMTcuNSAxMi4yOTFDMTcuNSAxMC45MDk4IDE2LjM4MTMgOS43OTEwMiAxNSA5Ljc5MTAyQzEzLjYxODcgOS43OTEwMiAxMi41IDEwLjkwOTggMTIuNSAxMi4yOTFcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxsaWItZHJvcGRvd25cclxuICAgIFtpdGVtc109XCJjdXN0b21PcHRpb25zXCJcclxuICAgIFttdWx0aXBsZV09XCJzZWxlY3Rpb25UeXBlID09PSAnU0lOR0xFJyA/IGZhbHNlIDogdHJ1ZVwiXHJcbiAgPjwvbGliLWRyb3Bkb3duPlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtYi0yXCI+XHJcbiAgICA8c3ZnXHJcbiAgICAgIGNsYXNzPVwidmFsaWRhdGlvblN2Z1wiXHJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgID5cclxuICAgICAgPHBhdGhcclxuICAgICAgICBkPVwiTTEyLjAwMSAxNi43NUMxMi4xMzkgMTYuNzUgMTIuMjUxIDE2LjYzOCAxMi4yNSAxNi41QzEyLjI1IDE2LjM2MiAxMi4xMzggMTYuMjUgMTIgMTYuMjVDMTEuODYyIDE2LjI1IDExLjc1IDE2LjM2MiAxMS43NSAxNi41QzExLjc1IDE2LjYzOCAxMS44NjIgMTYuNzUgMTIuMDAxIDE2Ljc1XCJcclxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgZD1cIk0xMiAyMUM3LjAyOSAyMSAzIDE2Ljk3MSAzIDEyQzMgNy4wMjkgNy4wMjkgMyAxMiAzQzE2Ljk3MSAzIDIxIDcuMDI5IDIxIDEyQzIxIDE2Ljk3MSAxNi45NzEgMjEgMTIgMjFaXCJcclxuICAgICAgICBmaWxsPVwiI0ZGMDAwMFwiXHJcbiAgICAgICAgc3Ryb2tlPVwiI0ZGMDAwMFwiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxwYXRoXHJcbiAgICAgICAgZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCJcclxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICA8L3N2Zz5cclxuICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "@piserve-tech/file-upload";
|
|
5
|
+
export class FilePickerFieldsComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.question = {};
|
|
8
|
+
this.count = 0;
|
|
9
|
+
this.required = false;
|
|
10
|
+
this.hint = '';
|
|
11
|
+
this.multiFileUploads = true;
|
|
12
|
+
this.fileTypes = [];
|
|
13
|
+
this.fileSize = 0;
|
|
14
|
+
this.fileSizeUnit = '';
|
|
15
|
+
this.totalFileSize = 0;
|
|
16
|
+
this.dragAndDrop = true;
|
|
17
|
+
this.previewUploadedFiles = true;
|
|
18
|
+
this.validationFailed = false;
|
|
19
|
+
this.validationMessage = '';
|
|
20
|
+
}
|
|
21
|
+
handleFileTypeNotAllowed(fileType) {
|
|
22
|
+
console.log(`File type not allowed in app: ${fileType}`);
|
|
23
|
+
this.validationFailed = true;
|
|
24
|
+
this.validationMessage = 'File type not allowed';
|
|
25
|
+
}
|
|
26
|
+
handleFileSize(fileType) {
|
|
27
|
+
console.log(`maximum limit app: ${fileType}`);
|
|
28
|
+
}
|
|
29
|
+
handleFinalArray(fileType) {
|
|
30
|
+
const extractedData = fileType.map((item) => ({
|
|
31
|
+
name: item._file.name,
|
|
32
|
+
size: item._file.size,
|
|
33
|
+
type: item._file.type,
|
|
34
|
+
}));
|
|
35
|
+
const jsonString = JSON.stringify(extractedData);
|
|
36
|
+
}
|
|
37
|
+
ngOnInit() {
|
|
38
|
+
this.valueAssigned();
|
|
39
|
+
}
|
|
40
|
+
valueAssigned() {
|
|
41
|
+
this.count = this.question.count;
|
|
42
|
+
this.required = this.question.required;
|
|
43
|
+
this.hint = this.question.hint;
|
|
44
|
+
this.multiFileUploads =
|
|
45
|
+
this.question.formElement.appearance.multiFileUploads;
|
|
46
|
+
this.dragAndDrop = this.question.formElement.appearance.dragAndDrop;
|
|
47
|
+
this.previewUploadedFiles =
|
|
48
|
+
this.question.formElement.appearance.previewUploadedFiles;
|
|
49
|
+
this.fileTypes = this.question.formElement.validation.fileTypes;
|
|
50
|
+
this.fileSizeUnit = this.question.formElement.validation.fileSizeUnit;
|
|
51
|
+
this.fileSize = this.convertToBytes(this.question.formElement.validation.fileSize, this.fileSizeUnit);
|
|
52
|
+
if (this.multiFileUploads) {
|
|
53
|
+
this.totalFileSize = this.convertToBytes(this.question.formElement.validation.totalFileSize, this.fileSizeUnit);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.totalFileSize = this.fileSize;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
convertToBytes(size, unit) {
|
|
60
|
+
const units = {
|
|
61
|
+
B: 1,
|
|
62
|
+
KB: 1024,
|
|
63
|
+
MB: 1024 * 1024,
|
|
64
|
+
GB: 1024 * 1024 * 1024,
|
|
65
|
+
};
|
|
66
|
+
return size * (units[unit.toUpperCase()] || 1);
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilePickerFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilePickerFieldsComponent, selector: "lib-file-picker-fields", inputs: { question: "question" }, ngImport: i0, template: "<div [ngClass]=\"'col-' + count\" class=\"mb-4 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <lib-docUpload\r\n [totalSize]=\"totalFileSize\"\r\n [fileAllowed]=\"fileTypes\"\r\n [multiple]=\"multiFileUploads\"\r\n (fileTypeNotAllowed)=\"handleFileTypeNotAllowed($event)\"\r\n (fileSizeAllowed)=\"handleFileSize($event)\"\r\n (finalArray)=\"handleFinalArray($event)\"\r\n ></lib-docUpload>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.fileInput{position:relative;height:44px;width:111px;background:#d3d3d3;border-radius:6px;padding:0 16px;display:flex;align-items:center;justify-content:center;cursor:pointer}.fileInput input{opacity:0;position:absolute;left:0;top:0;width:100%;height:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.DocUploadComponent, selector: "lib-docUpload", inputs: ["totalSize", "fileAllowed", "multiple"], outputs: ["fileTypeNotAllowed", "fileSizeAllowed", "finalArray"] }] }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilePickerFieldsComponent, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'lib-file-picker-fields', template: "<div [ngClass]=\"'col-' + count\" class=\"mb-4 px-3\">\r\n <div class=\"input-wrapper\">\r\n <label>{{ question.question }}</label\r\n > \r\n <span class=\"text-danger\" *ngIf=\"required\">*</span>\r\n <div\r\n class=\"svg-wrapper mb-2 hintIcon\"\r\n [attr.data-title]=\"hint\"\r\n *ngIf=\"hint\"\r\n >\r\n <svg\r\n class=\"hintSvg\"\r\n viewBox=\"0 0 30 30\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n fill-rule=\"evenodd\"\r\n clip-rule=\"evenodd\"\r\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\r\n stroke=\"#323232\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n <lib-docUpload\r\n [totalSize]=\"totalFileSize\"\r\n [fileAllowed]=\"fileTypes\"\r\n [multiple]=\"multiFileUploads\"\r\n (fileTypeNotAllowed)=\"handleFileTypeNotAllowed($event)\"\r\n (fileSizeAllowed)=\"handleFileSize($event)\"\r\n (finalArray)=\"handleFinalArray($event)\"\r\n ></lib-docUpload>\r\n <div *ngIf=\"validationFailed\" class=\"text-danger\">\r\n <svg class=\"validationSvg\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.001 16.75C12.139 16.75 12.251 16.638 12.25 16.5C12.25 16.362 12.138 16.25 12 16.25C11.862 16.25 11.75 16.362 11.75 16.5C11.75 16.638 11.862 16.75 12.001 16.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 21C7.029 21 3 16.971 3 12C3 7.029 7.029 3 12 3C16.971 3 21 7.029 21 12C21 16.971 16.971 21 12 21Z\" fill=\"#FF0000\" stroke=\"#FF0000\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M12 12.75L12 7.75\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"white\"/>\r\n </svg>\r\n {{validationMessage}}</div>\r\n</div>\r\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-left:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);left:50%;transform:translate(-50%);padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;white-space:nowrap}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}.validationSvg{width:24px;height:24px;fill:none}.fileInput{position:relative;height:44px;width:111px;background:#d3d3d3;border-radius:6px;padding:0 16px;display:flex;align-items:center;justify-content:center;cursor:pointer}.fileInput input{opacity:0;position:absolute;left:0;top:0;width:100%;height:inherit}\n"] }]
|
|
74
|
+
}], propDecorators: { question: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}] } });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1waWNrZXItZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvZm9ybS1maWVsZHMvZmlsZS1waWNrZXItZmllbGRzL2ZpbGUtcGlja2VyLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL2ZpbGUtcGlja2VyLWZpZWxkcy9maWxlLXBpY2tlci1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPakQsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQU1XLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDNUIsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFDekIsYUFBUSxHQUFXLENBQUMsQ0FBQztRQUNyQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUUxQixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1Qix5QkFBb0IsR0FBWSxJQUFJLENBQUM7UUFDckMscUJBQWdCLEdBQVMsS0FBSyxDQUFDO1FBQy9CLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztLQTBEN0I7SUF4REMsd0JBQXdCLENBQUMsUUFBZ0I7UUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIs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dXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWZpbGUtcGlja2VyLWZpZWxkcycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbGUtcGlja2VyLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsZS1waWNrZXItZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWxlUGlja2VyRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XHJcbiAgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaW50OiBzdHJpbmcgPSAnJztcclxuICBtdWx0aUZpbGVVcGxvYWRzOiBib29sZWFuID0gdHJ1ZTtcclxuICBmaWxlVHlwZXM6IHN0cmluZ1tdID0gW107XHJcbiAgZmlsZVNpemU6IG51bWJlciA9IDA7XHJcbiAgZmlsZVNpemVVbml0OiBzdHJpbmcgPSAnJztcclxuICB0b3RhbEZpbGVTaXplOiBudW1iZXIgPSAwO1xyXG5cclxuICBkcmFnQW5kRHJvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJldmlld1VwbG9hZGVkRmlsZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHZhbGlkYXRpb25GYWlsZWQ6Ym9vbGVhbj1mYWxzZTtcclxuICB2YWxpZGF0aW9uTWVzc2FnZTpzdHJpbmc9Jyc7XHJcblxyXG4gIGhhbmRsZUZpbGVUeXBlTm90QWxsb3dlZChmaWxlVHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhgRmlsZSB0eXBlIG5vdCBhbGxvd2VkIGluIGFwcDogJHtmaWxlVHlwZX1gKTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkPXRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2U9J0ZpbGUgdHlwZSBub3QgYWxsb3dlZCc7XHJcbiAgfVxyXG4gIGhhbmRsZUZpbGVTaXplKGZpbGVUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKGBtYXhpbXVtIGxpbWl0IGFwcDogJHtmaWxlVHlwZX1gKTtcclxuICB9XHJcbiAgaGFuZGxlRmluYWxBcnJheShmaWxlVHlwZTogYW55W10pOiB2b2lkIHtcclxuICAgIGNvbnN0IGV4dHJhY3RlZERhdGEgPSBmaWxlVHlwZS5tYXAoKGl0ZW06IGFueSkgPT4gKHtcclxuICAgICAgbmFtZTogaXRlbS5fZmlsZS5uYW1lLFxyXG4gICAgICBzaXplOiBpdGVtLl9maWxlLnNpemUsXHJcbiAgICAgIHR5cGU6IGl0ZW0uX2ZpbGUudHlwZSxcclxuICAgIH0pKTtcclxuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHRyYWN0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy52YWx1ZUFzc2lnbmVkKCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUFzc2lnbmVkKCl7XHJcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbi5jb3VudDtcclxuICAgIHRoaXMucmVxdWlyZWQgPSB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkO1xyXG4gICAgdGhpcy5oaW50ID0gdGhpcy5xdWVzdGlvbi5oaW50O1xyXG4gICAgdGhpcy5tdWx0aUZpbGVVcGxvYWRzID1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLm11bHRpRmlsZVVwbG9hZHM7XHJcbiAgICB0aGlzLmRyYWdBbmREcm9wID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmRyYWdBbmREcm9wO1xyXG4gICAgdGhpcy5wcmV2aWV3VXBsb2FkZWRGaWxlcyA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5wcmV2aWV3VXBsb2FkZWRGaWxlcztcclxuICAgIHRoaXMuZmlsZVR5cGVzID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLmZpbGVUeXBlcztcclxuICAgIHRoaXMuZmlsZVNpemVVbml0ID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLmZpbGVTaXplVW5pdDtcclxuXHJcbiAgICB0aGlzLmZpbGVTaXplID0gdGhpcy5jb252ZXJ0VG9CeXRlcyhcclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLmZpbGVTaXplLFxyXG4gICAgICB0aGlzLmZpbGVTaXplVW5pdFxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLm11bHRpRmlsZVVwbG9hZHMpIHtcclxuICAgICAgdGhpcy50b3RhbEZpbGVTaXplID0gdGhpcy5jb252ZXJ0VG9CeXRlcyhcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24udG90YWxGaWxlU2l6ZSxcclxuICAgICAgICB0aGlzLmZpbGVTaXplVW5pdFxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50b3RhbEZpbGVTaXplID0gdGhpcy5maWxlU2l6ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0J5dGVzKHNpemU6IG51bWJlciwgdW5pdDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHVuaXRzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xyXG4gICAgICBCOiAxLFxyXG4gICAgICBLQjogMTAyNCxcclxuICAgICAgTUI6IDEwMjQgKiAxMDI0LFxyXG4gICAgICBHQjogMTAyNCAqIDEwMjQgKiAxMDI0LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBzaXplICogKHVuaXRzW3VuaXQudG9VcHBlckNhc2UoKV0gfHwgMSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW25nQ2xhc3NdPVwiJ2NvbC0nICsgY291bnRcIiBjbGFzcz1cIm1iLTQgcHgtM1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyXCI+XHJcbiAgICA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXHJcbiAgICA+Jm5ic3A7XHJcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXHJcbiAgICAgICpuZ0lmPVwiaGludFwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmdcclxuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8bGliLWRvY1VwbG9hZFxyXG4gICAgW3RvdGFsU2l6ZV09XCJ0b3RhbEZpbGVTaXplXCJcclxuICAgIFtmaWxlQWxsb3dlZF09XCJmaWxlVHlwZXNcIlxyXG4gICAgW211bHRpcGxlXT1cIm11bHRpRmlsZVVwbG9hZHNcIlxyXG4gICAgKGZpbGVUeXBlTm90QWxsb3dlZCk9XCJoYW5kbGVGaWxlVHlwZU5vdEFsbG93ZWQoJGV2ZW50KVwiXHJcbiAgICAoZmlsZVNpemVBbGxvd2VkKT1cImhhbmRsZUZpbGVTaXplKCRldmVudClcIlxyXG4gICAgKGZpbmFsQXJyYXkpPVwiaGFuZGxlRmluYWxBcnJheSgkZXZlbnQpXCJcclxuICA+PC9saWItZG9jVXBsb2FkPlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxyXG4gICAgPHN2ZyBjbGFzcz1cInZhbGlkYXRpb25TdmdcIiAgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgPHBhdGggZD1cIk0xMi4wMDEgMTYuNzVDMTIuMTM5IDE2Ljc1IDEyLjI1MSAxNi42MzggMTIuMjUgMTYuNUMxMi4yNSAxNi4zNjIgMTIuMTM4IDE2LjI1IDEyIDE2LjI1QzExLjg2MiAxNi4yNSAxMS43NSAxNi4zNjIgMTEuNzUgMTYuNUMxMS43NSAxNi42MzggMTEuODYyIDE2Ljc1IDEyLjAwMSAxNi43NVwiIHN0cm9rZT1cIndoaXRlXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTIgMjFDNy4wMjkgMjEgMyAxNi45NzEgMyAxMkMzIDcuMDI5IDcuMDI5IDMgMTIgM0MxNi45NzEgMyAyMSA3LjAyOSAyMSAxMkMyMSAxNi45NzEgMTYuOTcxIDIxIDEyIDIxWlwiIGZpbGw9XCIjRkYwMDAwXCIgc3Ryb2tlPVwiI0ZGMDAwMFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPHBhdGggZD1cIk0xMiAxMi43NUwxMiA3Ljc1XCIgc3Ryb2tlPVwid2hpdGVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTZcIiByPVwiMVwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIHt7dmFsaWRhdGlvbk1lc3NhZ2V9fTwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|