@touchpoll/tp-survey 0.0.1
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/esm2022/lib/component/answer/answer.additional/answer.additional.component.mjs +49 -0
- package/esm2022/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.mjs +61 -0
- package/esm2022/lib/component/answer/answer.end/answer.end.component.mjs +30 -0
- package/esm2022/lib/component/answer/answer.info/answer.info.component.mjs +30 -0
- package/esm2022/lib/component/answer/answer.lang/answer.lang.component.mjs +22 -0
- package/esm2022/lib/component/answer/answer.master/answer.master.component.mjs +55 -0
- package/esm2022/lib/component/answer/answer.ms/answer.ms.component.mjs +106 -0
- package/esm2022/lib/component/answer/answer.od/answer.od.component.mjs +39 -0
- package/esm2022/lib/component/answer/answer.ol/answer.ol.component.mjs +39 -0
- package/esm2022/lib/component/answer/answer.sl/answer.sl.component.mjs +131 -0
- package/esm2022/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.mjs +17 -0
- package/esm2022/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.mjs +17 -0
- package/esm2022/lib/component/answer/answer.ss/answer.ss.component.mjs +51 -0
- package/esm2022/lib/component/answer/container.answer/container.answer.component.mjs +317 -0
- package/esm2022/lib/component/answer/container.answer/container.answer.validator.mjs +124 -0
- package/esm2022/lib/component/navigation.button/navigation.button.component.mjs +21 -0
- package/esm2022/lib/component/question.caption/question.caption.component.mjs +15 -0
- package/esm2022/lib/component/survey.play/survey.play.component.mjs +131 -0
- package/esm2022/lib/component/survey.question.preview/survey.question.preview.component.mjs +44 -0
- package/esm2022/lib/core/tp.servey.quota/tp.survey.quota.mjs +82 -0
- package/esm2022/lib/core/tp.survey.answer/tp.survey.answer.mjs +30 -0
- package/esm2022/lib/core/tp.survey.core/tp.survey.core.service.mjs +370 -0
- package/esm2022/lib/core/tp.survey.interview/tp.survey.interview.service.mjs +70 -0
- package/esm2022/lib/core/tp.survey.logic/tp.survey.logic.service.mjs +43 -0
- package/esm2022/lib/directive/alternatives.container/alternatives.container.directive.mjs +130 -0
- package/esm2022/lib/directive/focus.and.select/focus.and.select.directive.mjs +27 -0
- package/esm2022/lib/directive/survey.theme/survey.theme.directive.mjs +53 -0
- package/esm2022/lib/directive/update.font.size/update.font.size.directive.mjs +28 -0
- package/esm2022/lib/icons/default.icons/default.icons.mjs +15 -0
- package/esm2022/lib/icons/default.icons/default.icons.module.mjs +31 -0
- package/esm2022/lib/pipe/get.active.language/get.active.language.pipe.mjs +17 -0
- package/esm2022/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.mjs +18 -0
- package/esm2022/lib/pipe/key.values/key.values.pipe.mjs +20 -0
- package/esm2022/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.mjs +26 -0
- package/esm2022/lib/tp.survey.config.mjs +8 -0
- package/esm2022/lib/tp.survey.const.mjs +28 -0
- package/esm2022/lib/tp.survey.enum.mjs +59 -0
- package/esm2022/lib/tp.survey.interface.mjs +2 -0
- package/esm2022/lib/tp.survey.method.mjs +5 -0
- package/esm2022/lib/tp.survey.module.mjs +27 -0
- package/esm2022/lib/tp.survey.type.mjs +2 -0
- package/esm2022/public-api.mjs +14 -0
- package/esm2022/touchpoll-tp-survey.mjs +5 -0
- package/fesm2022/touchpoll-tp-survey.mjs +2210 -0
- package/fesm2022/touchpoll-tp-survey.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/component/answer/answer.additional/answer.additional.component.d.ts +17 -0
- package/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.d.ts +16 -0
- package/lib/component/answer/answer.end/answer.end.component.d.ts +6 -0
- package/lib/component/answer/answer.info/answer.info.component.d.ts +6 -0
- package/lib/component/answer/answer.lang/answer.lang.component.d.ts +9 -0
- package/lib/component/answer/answer.master/answer.master.component.d.ts +21 -0
- package/lib/component/answer/answer.ms/answer.ms.component.d.ts +21 -0
- package/lib/component/answer/answer.od/answer.od.component.d.ts +8 -0
- package/lib/component/answer/answer.ol/answer.ol.component.d.ts +7 -0
- package/lib/component/answer/answer.sl/answer.sl.component.d.ts +21 -0
- package/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.d.ts +8 -0
- package/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.d.ts +8 -0
- package/lib/component/answer/answer.ss/answer.ss.component.d.ts +10 -0
- package/lib/component/answer/container.answer/container.answer.component.d.ts +36 -0
- package/lib/component/answer/container.answer/container.answer.validator.d.ts +10 -0
- package/lib/component/navigation.button/navigation.button.component.d.ts +9 -0
- package/lib/component/question.caption/question.caption.component.d.ts +8 -0
- package/lib/component/survey.play/survey.play.component.d.ts +36 -0
- package/lib/component/survey.question.preview/survey.question.preview.component.d.ts +16 -0
- package/lib/core/tp.servey.quota/tp.survey.quota.d.ts +12 -0
- package/lib/core/tp.survey.answer/tp.survey.answer.d.ts +17 -0
- package/lib/core/tp.survey.core/tp.survey.core.service.d.ts +29 -0
- package/lib/core/tp.survey.interview/tp.survey.interview.service.d.ts +14 -0
- package/lib/core/tp.survey.logic/tp.survey.logic.service.d.ts +12 -0
- package/lib/directive/alternatives.container/alternatives.container.directive.d.ts +17 -0
- package/lib/directive/focus.and.select/focus.and.select.directive.d.ts +9 -0
- package/lib/directive/survey.theme/survey.theme.directive.d.ts +13 -0
- package/lib/directive/update.font.size/update.font.size.directive.d.ts +10 -0
- package/lib/icons/default.icons/default.icons.d.ts +5 -0
- package/lib/icons/default.icons/default.icons.module.d.ts +12 -0
- package/lib/pipe/get.active.language/get.active.language.pipe.d.ts +8 -0
- package/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.d.ts +8 -0
- package/lib/pipe/key.values/key.values.pipe.d.ts +14 -0
- package/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.d.ts +11 -0
- package/lib/tp.survey.config.d.ts +11 -0
- package/lib/tp.survey.const.d.ts +4 -0
- package/lib/tp.survey.enum.d.ts +51 -0
- package/lib/tp.survey.interface.d.ts +320 -0
- package/lib/tp.survey.method.d.ts +1 -0
- package/lib/tp.survey.module.d.ts +10 -0
- package/lib/tp.survey.type.d.ts +13 -0
- package/package.json +25 -0
- package/public-api.d.ts +9 -0
- package/styles/platform/component/survey.checkbox.scss +102 -0
- package/styles/platform/component/survey.radio.button.scss +34 -0
- package/styles/platform/survey.mixins.desktop.scss +146 -0
- package/styles/platform/survey.mixins.tablet.scss +132 -0
- package/styles/survey.mixins.scss +76 -0
- package/styles/survey.themes.scss +56 -0
- package/styles/theme/azure.blue.scss +54 -0
- package/styles/theme/cyan.orange.scss +54 -0
- package/styles/theme/rose.red.scss +54 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { booleanAttribute, Component, forwardRef, input, numberAttribute } from '@angular/core';
|
|
2
|
+
import { FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { MatCheckbox } from '@angular/material/checkbox';
|
|
4
|
+
import { JsonPipe, KeyValuePipe } from '@angular/common';
|
|
5
|
+
import { MatIcon } from '@angular/material/icon';
|
|
6
|
+
import { MatRadioButton, MatRadioGroup } from '@angular/material/radio';
|
|
7
|
+
import { map } from 'rxjs/operators';
|
|
8
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
+
import { filter, tap } from 'rxjs';
|
|
10
|
+
import { MultiLangObjectToHtmlPipe } from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';
|
|
11
|
+
import { AsFormArrayPipe } from './pipe/as.form.array/as.form.array.pipe';
|
|
12
|
+
import { AsFormControlPipe } from './pipe/as.form.control/as.form.control.pipe';
|
|
13
|
+
import { AnswerMasterComponent } from '../answer.master/answer.master.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/forms";
|
|
16
|
+
export class AnswerSLComponent extends AnswerMasterComponent {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.alternativeList = input.required();
|
|
20
|
+
this.sectionList = input.required();
|
|
21
|
+
this.multiSelect = input(false, { transform: booleanAttribute });
|
|
22
|
+
this.maxCount = input(0, { transform: numberAttribute });
|
|
23
|
+
this.answerSLForm = new FormGroup({});
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
const multiSelect = this.multiSelect();
|
|
27
|
+
this.sectionList().forEach(section => {
|
|
28
|
+
const sectionControl = this.#createSectionRowControl(multiSelect, []);
|
|
29
|
+
this.answerSLForm.addControl(section.SectionGuid.toString(), sectionControl);
|
|
30
|
+
});
|
|
31
|
+
this.answerSLForm.valueChanges.pipe(map((fullAnswer) => {
|
|
32
|
+
let res = {};
|
|
33
|
+
//Если в настройках указали мультивыбор для секции, то в данной реализации, при изменении форма возвращает массив boolean?, true/false, нажата отжата.
|
|
34
|
+
//Этот массив нужно конвертировать в массив number, в котором будут только нажатые альтернативы.
|
|
35
|
+
if (this.multiSelect()) {
|
|
36
|
+
Object.entries(fullAnswer).forEach(([key]) => {
|
|
37
|
+
const sectionAnswerCheckedArray = this.answerSLForm.get(key)?.value;
|
|
38
|
+
res[key] = this.alternativeList()
|
|
39
|
+
.map(alt => alt.Value)
|
|
40
|
+
.filter((_, index) => sectionAnswerCheckedArray[index]);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
//если единичный выбор для секции, то ответ просто исходное значение.
|
|
45
|
+
res = fullAnswer;
|
|
46
|
+
}
|
|
47
|
+
return res;
|
|
48
|
+
}), tap(res => this.#disableExtraControls(this.maxCount())), takeUntilDestroyed(this.destroyRef)).subscribe({
|
|
49
|
+
next: res => this.control.patchValue(res, { emitEvent: true })
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
#createSectionRowControl(multiSelect, answers) {
|
|
53
|
+
if (multiSelect) {
|
|
54
|
+
const msArray = new FormArray([]);
|
|
55
|
+
const answerAsArray = Array(answers);
|
|
56
|
+
this.alternativeList().forEach((alt) => {
|
|
57
|
+
const control = new FormControl(answerAsArray.includes(alt.Value), { nonNullable: true });
|
|
58
|
+
msArray.push(control, { emitEvent: false });
|
|
59
|
+
//В режиме multiSelect у альтернативы есть понятие "Группа". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.
|
|
60
|
+
//Логика такая же как и в ms вопросе
|
|
61
|
+
control.valueChanges.pipe(filter(value => value && this.multiSelect()), takeUntilDestroyed(this.destroyRef)).subscribe({
|
|
62
|
+
next: () => {
|
|
63
|
+
//сначала отбираем контролы у которых другая группа.
|
|
64
|
+
const otherGroupAlternativesList = this.alternativeList()
|
|
65
|
+
.map((alt, altIndex) => ({ alternative: alt, index: altIndex })) //нужен индекс, по нему проще выбирать контролы в msArray
|
|
66
|
+
.filter(data => data.alternative.GroupNo !== alt.GroupNo); //контролы у которых другая группа
|
|
67
|
+
//"отжимаем галочку"
|
|
68
|
+
otherGroupAlternativesList.forEach(data => {
|
|
69
|
+
const altControl = msArray.controls.at(data.index);
|
|
70
|
+
altControl.patchValue(false, { emitEvent: false });
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
return msArray;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
return new FormControl(Number(answers), { nonNullable: true });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество
|
|
82
|
+
#disableExtraControls(maxCount) {
|
|
83
|
+
//если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.
|
|
84
|
+
if (maxCount === 0 || !this.multiSelect()) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
this.sectionList().forEach(sec => {
|
|
88
|
+
const sectionControlArray = this.answerSLForm.get(sec.SectionGuid.toString());
|
|
89
|
+
const values = sectionControlArray.value;
|
|
90
|
+
const checkedCount = values.filter(v => v).length;
|
|
91
|
+
sectionControlArray.controls.forEach(control => {
|
|
92
|
+
if (checkedCount >= maxCount && !control.value) {
|
|
93
|
+
control.disable({ emitEvent: false });
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
control.enable({ emitEvent: false });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnswerSLComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
102
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: AnswerSLComponent, isStandalone: true, selector: "tp-survey-answer-sl", inputs: { alternativeList: { classPropertyName: "alternativeList", publicName: "alternativeList", isSignal: true, isRequired: true, transformFunction: null }, sectionList: { classPropertyName: "sectionList", publicName: "sectionList", isSignal: true, isRequired: true, transformFunction: null }, multiSelect: { classPropertyName: "multiSelect", publicName: "multiSelect", isSignal: true, isRequired: false, transformFunction: null }, maxCount: { classPropertyName: "maxCount", publicName: "maxCount", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
103
|
+
{
|
|
104
|
+
provide: NG_VALUE_ACCESSOR,
|
|
105
|
+
useExisting: forwardRef(() => AnswerSLComponent),
|
|
106
|
+
multi: true
|
|
107
|
+
},
|
|
108
|
+
], usesInheritance: true, ngImport: i0, template: "<table class=\"default-view\" [formGroup]=\"answerSLForm\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <th class=\"SLAlternativeCaption\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let sectionIndex = $index) {\r\n @if (multiSelect()){\r\n <tr>\r\n <td>\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alternativeControl of (secControl.value | asFormArray).controls ; track alternativeControl) {\r\n <td>\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\"/>\r\n </td>\r\n }\r\n </tr>\r\n } @else {\r\n <mat-radio-group [formControl]=\"secControl.value | asFormControl\" class=\"single-select-row\">\r\n <td class=\"single-select-item\">\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <td class=\"single-select-item\">\r\n <mat-radio-button\r\n class=\"alternative-sl tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n </mat-radio-button>\r\n </td>\r\n }\r\n </mat-radio-group>\r\n }\r\n }\r\n </tbody>\r\n</table>\r\n\r\n<div class=\"mobile-view\" [formGroup]=\"answerSLForm\">\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let secIndex = $index) {\r\n <div class=\"mobile-view-section-row\" [formArrayName]=\"secControl.key\">\r\n <span [innerHTML]= \"sectionList()[secIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"mobile-view-section-caption section-sl-caption\"></span>\r\n @if (multiSelect()) {\r\n <div class=\"mobile-view-alternative-list\">\r\n @for (alternativeControl of (secControl.value | asFormArray).controls; track alternativeControl; let altIndex = $index) {\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n } @else {\r\n <mat-radio-group\r\n class=\"mobile-view-alternative-list\"\r\n [formControl]=\"secControl.value | asFormControl\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n class=\"tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["td{text-align:center}table{width:100%}tr td{border-bottom:1px solid rgba(102,102,103,.49)}.default-view{display:block}.mobile-view{display:none;padding:1em;flex-flow:column;gap:4em}.mobile-view-alternative-list{display:flex;flex-flow:column}.mobile-view-section-row{margin-bottom:2em}.mobile-view-section-caption{display:block;border-bottom:1px solid}.section-sl-caption{font-size:1.3em}.alternative-sl-caption{font-size:1.1em}.single-select-row{display:table-row;vertical-align:middle;border-bottom:1px solid rgba(102,102,103,.49)}.single-select-item{vertical-align:middle;border-bottom:1px solid rgba(102,102,103,.49)}@media (max-width: 480px){.default-view{display:none}.mobile-view{display:block}}\n"], dependencies: [{ kind: "pipe", type: MultiLangObjectToHtmlPipe, name: "multiLangObjectToHtml" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: AsFormArrayPipe, name: "asFormArray" }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "pipe", type: AsFormControlPipe, name: "asFormControl" }] }); }
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnswerSLComponent, decorators: [{
|
|
111
|
+
type: Component,
|
|
112
|
+
args: [{ selector: 'tp-survey-answer-sl', standalone: true, imports: [
|
|
113
|
+
MultiLangObjectToHtmlPipe,
|
|
114
|
+
MatCheckbox,
|
|
115
|
+
ReactiveFormsModule,
|
|
116
|
+
KeyValuePipe,
|
|
117
|
+
MatIcon,
|
|
118
|
+
JsonPipe,
|
|
119
|
+
AsFormArrayPipe,
|
|
120
|
+
MatRadioButton,
|
|
121
|
+
MatRadioGroup,
|
|
122
|
+
AsFormControlPipe
|
|
123
|
+
], providers: [
|
|
124
|
+
{
|
|
125
|
+
provide: NG_VALUE_ACCESSOR,
|
|
126
|
+
useExisting: forwardRef(() => AnswerSLComponent),
|
|
127
|
+
multi: true
|
|
128
|
+
},
|
|
129
|
+
], template: "<table class=\"default-view\" [formGroup]=\"answerSLForm\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <th class=\"SLAlternativeCaption\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let sectionIndex = $index) {\r\n @if (multiSelect()){\r\n <tr>\r\n <td>\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alternativeControl of (secControl.value | asFormArray).controls ; track alternativeControl) {\r\n <td>\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\"/>\r\n </td>\r\n }\r\n </tr>\r\n } @else {\r\n <mat-radio-group [formControl]=\"secControl.value | asFormControl\" class=\"single-select-row\">\r\n <td class=\"single-select-item\">\r\n <span [innerHTML]= \"sectionList()[sectionIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </td>\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <td class=\"single-select-item\">\r\n <mat-radio-button\r\n class=\"alternative-sl tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n </mat-radio-button>\r\n </td>\r\n }\r\n </mat-radio-group>\r\n }\r\n }\r\n </tbody>\r\n</table>\r\n\r\n<div class=\"mobile-view\" [formGroup]=\"answerSLForm\">\r\n @for (secControl of answerSLForm.controls | keyvalue; track secControl.key; let secIndex = $index) {\r\n <div class=\"mobile-view-section-row\" [formArrayName]=\"secControl.key\">\r\n <span [innerHTML]= \"sectionList()[secIndex].MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"mobile-view-section-caption section-sl-caption\"></span>\r\n @if (multiSelect()) {\r\n <div class=\"mobile-view-alternative-list\">\r\n @for (alternativeControl of (secControl.value | asFormArray).controls; track alternativeControl; let altIndex = $index) {\r\n <mat-checkbox\r\n [formControl]=\"alternativeControl\"\r\n class=\"alternative-sl tp-survey-checkbox\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n } @else {\r\n <mat-radio-group\r\n class=\"mobile-view-alternative-list\"\r\n [formControl]=\"secControl.value | asFormControl\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n class=\"tp-survey-radio-button\"\r\n [value]=\"alt.Value\">\r\n <span class=\"alternative-sl-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: ["td{text-align:center}table{width:100%}tr td{border-bottom:1px solid rgba(102,102,103,.49)}.default-view{display:block}.mobile-view{display:none;padding:1em;flex-flow:column;gap:4em}.mobile-view-alternative-list{display:flex;flex-flow:column}.mobile-view-section-row{margin-bottom:2em}.mobile-view-section-caption{display:block;border-bottom:1px solid}.section-sl-caption{font-size:1.3em}.alternative-sl-caption{font-size:1.1em}.single-select-row{display:table-row;vertical-align:middle;border-bottom:1px solid rgba(102,102,103,.49)}.single-select-item{vertical-align:middle;border-bottom:1px solid rgba(102,102,103,.49)}@media (max-width: 480px){.default-view{display:none}.mobile-view{display:block}}\n"] }]
|
|
130
|
+
}] });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLnNsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RwLnN1cnZleS9zcmMvbGliL2NvbXBvbmVudC9hbnN3ZXIvYW5zd2VyLnNsL2Fuc3dlci5zbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cC5zdXJ2ZXkvc3JjL2xpYi9jb21wb25lbnQvYW5zd2VyL2Fuc3dlci5zbC9hbnN3ZXIuc2wuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sd0VBQXdFLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBQ3hFLE9BQU8sRUFB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QUMsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtnQkFDcEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFBO1FBRUosQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzhHQWhHVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix1bkJBUmpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGlEQzNDSCxna0dBMkVBLG92QkRqREkseUJBQXlCLDhEQUN6QixXQUFXLGdVQUNYLG1CQUFtQix5c0JBQ25CLFlBQVksNENBR1osZUFBZSxvREFDZixjQUFjLGdTQUNkLGFBQWEsa01BQ2IsaUJBQWlCOzsyRkFVUixpQkFBaUI7a0JBekI3QixTQUFTOytCQUNFLHFCQUFxQixjQUduQixJQUFJLFdBQ1A7d0JBQ1AseUJBQXlCO3dCQUN6QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixPQUFPO3dCQUNQLFFBQVE7d0JBQ1IsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGFBQWE7d0JBQ2IsaUJBQWlCO3FCQUNsQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Ym9vbGVhbkF0dHJpYnV0ZSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbnB1dCwgbnVtYmVyQXR0cmlidXRlLCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtNYXRDaGVja2JveH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQge0pzb25QaXBlLCBLZXlWYWx1ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7TWF0UmFkaW9CdXR0b24sIE1hdFJhZGlvR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHtmaWx0ZXIsIHRhcH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TXVsdGlMYW5nT2JqZWN0VG9IdG1sUGlwZX0gZnJvbSAnLi4vLi4vLi4vcGlwZS9tdWx0aS5sYW5nLm9iamVjdC50by5odG1sL211bHRpLmxhbmcub2JqZWN0LnRvLmh0bWwucGlwZSc7XHJcbmltcG9ydCB7QXNGb3JtQXJyYXlQaXBlfSBmcm9tICcuL3BpcGUvYXMuZm9ybS5hcnJheS9hcy5mb3JtLmFycmF5LnBpcGUnO1xyXG5pbXBvcnQge0FzRm9ybUNvbnRyb2xQaXBlfSBmcm9tICcuL3BpcGUvYXMuZm9ybS5jb250cm9sL2FzLmZvcm0uY29udHJvbC5waXBlJztcclxuaW1wb3J0IHtBbnN3ZXJNYXN0ZXJDb21wb25lbnR9IGZyb20gJy4uL2Fuc3dlci5tYXN0ZXIvYW5zd2VyLm1hc3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0Fuc3dlclNsVHlwZX0gZnJvbSAnLi4vLi4vLi4vdHAuc3VydmV5LnR5cGUnO1xyXG5pbXBvcnQge0lkYkFsdGVybmF0aXZlLCBJZGJTZWN0aW9ufSBmcm9tICcuLi8uLi8uLi90cC5zdXJ2ZXkuaW50ZXJmYWNlJztcclxuXHJcbmludGVyZmFjZSBJQW5zd2VyU0xGb3JtIHtcclxuICBba2V5OiBzdHJpbmddOiBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8Ym9vbGVhbj4+IHwgRm9ybUNvbnRyb2w8bnVtYmVyPiB8IEZvcm1Db250cm9sPEFycmF5PG51bWJlcj4+XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndHAtc3VydmV5LWFuc3dlci1zbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fuc3dlci5zbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYW5zd2VyLnNsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNdWx0aUxhbmdPYmplY3RUb0h0bWxQaXBlLFxyXG4gICAgTWF0Q2hlY2tib3gsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgS2V5VmFsdWVQaXBlLFxyXG4gICAgTWF0SWNvbixcclxuICAgIEpzb25QaXBlLFxyXG4gICAgQXNGb3JtQXJyYXlQaXBlLFxyXG4gICAgTWF0UmFkaW9CdXR0b24sXHJcbiAgICBNYXRSYWRpb0dyb3VwLFxyXG4gICAgQXNGb3JtQ29udHJvbFBpcGVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5zd2VyU0xDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5zd2VyU0xDb21wb25lbnQgZXh0ZW5kcyBBbnN3ZXJNYXN0ZXJDb21wb25lbnQ8QW5zd2VyU2xUeXBlPiBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBhbHRlcm5hdGl2ZUxpc3QgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxJZGJBbHRlcm5hdGl2ZT4+KCk7XHJcbiAgc2VjdGlvbkxpc3QgPSBpbnB1dC5yZXF1aXJlZDxBcnJheTxJZGJTZWN0aW9uPj4oKTtcclxuICBtdWx0aVNlbGVjdCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XHJcbiAgbWF4Q291bnQgPSBpbnB1dCgwLCB7dHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGV9KTtcclxuICBhbnN3ZXJTTEZvcm0gPSBuZXcgRm9ybUdyb3VwPElBbnN3ZXJTTEZvcm0+KHt9KVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG11bHRpU2VsZWN0ID0gdGhpcy5tdWx0aVNlbGVjdCgpO1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbkxpc3QoKS5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICBjb25zdCBzZWN0aW9uQ29udHJvbCA9IHRoaXMuI2NyZWF0ZVNlY3Rpb25Sb3dDb250cm9sKG11bHRpU2VsZWN0LCBbXSk7XHJcbiAgICAgIHRoaXMuYW5zd2VyU0xGb3JtIS5hZGRDb250cm9sKHNlY3Rpb24uU2VjdGlvbkd1aWQudG9TdHJpbmcoKSwgc2VjdGlvbkNvbnRyb2wsICk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuYW5zd2VyU0xGb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgIG1hcCgoZnVsbEFuc3dlcikgPT4ge1xyXG4gICAgICAgbGV0IHJlczogUmVjb3JkPHN0cmluZywgQXJyYXk8bnVtYmVyPiB8IG51bWJlcj4gPSB7fTtcclxuICAgICAgIC8v0JXRgdC70Lgg0LIg0L3QsNGB0YLRgNC+0LnQutCw0YUg0YPQutCw0LfQsNC70Lgg0LzRg9C70YzRgtC40LLRi9Cx0L7RgCDQtNC70Y8g0YHQtdC60YbQuNC4LCDRgtC+INCyINC00LDQvdC90L7QuSDRgNC10LDQu9C40LfQsNGG0LjQuCwg0L/RgNC4INC40LfQvNC10L3QtdC90LjQuCDRhNC+0YDQvNCwINCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC80LDRgdGB0LjQsiBib29sZWFuPywgdHJ1ZS9mYWxzZSwg0L3QsNC20LDRgtCwINC+0YLQttCw0YLQsC5cclxuICAgICAgIC8v0K3RgtC+0YIg0LzQsNGB0YHQuNCyINC90YPQttC90L4g0LrQvtC90LLQtdGA0YLQuNGA0L7QstCw0YLRjCDQsiDQvNCw0YHRgdC40LIgbnVtYmVyLCDQsiDQutC+0YLQvtGA0L7QvCDQsdGD0LTRg9GCINGC0L7Qu9GM0LrQviDQvdCw0LbQsNGC0YvQtSDQsNC70YzRgtC10YDQvdCw0YLQuNCy0YsuXHJcbiAgICAgICBpZiAodGhpcy5tdWx0aVNlbGVjdCgpKSB7XHJcbiAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZ1bGxBbnN3ZXIpLmZvckVhY2goKFtrZXldKSA9PiB7XHJcbiAgICAgICAgICAgY29uc3Qgc2VjdGlvbkFuc3dlckNoZWNrZWRBcnJheSA9IHRoaXMuYW5zd2VyU0xGb3JtLmdldChrZXkpPy52YWx1ZTtcclxuICAgICAgICAgICByZXNba2V5XSA9IHRoaXMuYWx0ZXJuYXRpdmVMaXN0KClcclxuICAgICAgICAgICAgLm1hcChhbHQgPT4gYWx0LlZhbHVlKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpbmRleCkgPT4gc2VjdGlvbkFuc3dlckNoZWNrZWRBcnJheVtpbmRleF0gKVxyXG4gICAgICAgICB9KTtcclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIC8v0LXRgdC70Lgg0LXQtNC40L3QuNGH0L3Ri9C5INCy0YvQsdC+0YAg0LTQu9GPINGB0LXQutGG0LjQuCwg0YLQviDQvtGC0LLQtdGCINC/0YDQvtGB0YLQviDQuNGB0YXQvtC00L3QvtC1INC30L3QsNGH0LXQvdC40LUuXHJcbiAgICAgICAgIHJlcyA9IGZ1bGxBbnN3ZXIgYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcclxuICAgICAgIH1cclxuICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgfSksXHJcbiAgICAgdGFwKHJlcyA9PiB0aGlzLiNkaXNhYmxlRXh0cmFDb250cm9scyh0aGlzLm1heENvdW50KCkpKSxcclxuICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxyXG4gICAgKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByZXMgPT4gdGhpcy5jb250cm9sLnBhdGNoVmFsdWUocmVzLCB7ZW1pdEV2ZW50OiB0cnVlfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAjY3JlYXRlU2VjdGlvblJvd0NvbnRyb2wobXVsdGlTZWxlY3Q6IGJvb2xlYW4sIGFuc3dlcnM6IG51bWJlciB8IEFycmF5PG51bWJlcj4pOiBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8Ym9vbGVhbj4+IHwgRm9ybUNvbnRyb2w8bnVtYmVyPiB7XHJcbiAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgY29uc3QgbXNBcnJheSA9IG5ldyBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8Ym9vbGVhbj4+KFtdKTtcclxuICAgICAgY29uc3QgYW5zd2VyQXNBcnJheSA9IEFycmF5KGFuc3dlcnMpO1xyXG4gICAgICBcclxuICAgICAgdGhpcy5hbHRlcm5hdGl2ZUxpc3QoKS5mb3JFYWNoKChhbHQpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sPSBuZXcgRm9ybUNvbnRyb2w8Ym9vbGVhbj4oIGFuc3dlckFzQXJyYXkuaW5jbHVkZXMoYWx0LlZhbHVlKSwge25vbk51bGxhYmxlOiB0cnVlfSk7XHJcbiAgICAgICAgbXNBcnJheS5wdXNoKGNvbnRyb2wsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcblxyXG4gICAgICAgIC8v0JIg0YDQtdC20LjQvNC1IG11bHRpU2VsZWN0INGDINCw0LvRjNGC0LXRgNC90LDRgtC40LLRiyDQtdGB0YLRjCDQv9C+0L3Rj9GC0LjQtSBcItCT0YDRg9C/0L/QsFwiLiDQk9GA0YPQv9C/0LAg0Y3RgtC+INGH0LjRgdC70L4uINCV0YHQu9C4INCy0YvQsdC40YDQsNGO0YIg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstGDINGBINC+0L/RgNC10LTQtdC70ZHQvdC90L7QuSDQs9GA0YPQv9C/0L7QuSwg0YLQviDQsNC70YzRgtC10YDQvdCw0YLQuNCy0Ysg0YEg0LTRgNGD0LPQvtC5INCz0YDRg9C/0L/QvtC5INC00L7Qu9C20L3RiyDQsdGL0YLRjCDQvtGC0LbQsNGC0YsuXHJcbiAgICAgICAgLy/Qm9C+0LPQuNC60LAg0YLQsNC60LDRjyDQttC1INC60LDQuiDQuCDQsiBtcyDQstC+0L/RgNC+0YHQtVxyXG4gICAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAmJiB0aGlzLm11bHRpU2VsZWN0KCkpLFxyXG4gICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcclxuICAgICAgICApLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8v0YHQvdCw0YfQsNC70LAg0L7RgtCx0LjRgNCw0LXQvCDQutC+0L3RgtGA0L7Qu9GLINGDINC60L7RgtC+0YDRi9GFINC00YDRg9Cz0LDRjyDQs9GA0YPQv9C/0LAuXHJcbiAgICAgICAgICAgIGNvbnN0IG90aGVyR3JvdXBBbHRlcm5hdGl2ZXNMaXN0ID0gdGhpcy5hbHRlcm5hdGl2ZUxpc3QoKVxyXG4gICAgICAgICAgICAgLm1hcCgoYWx0LCBhbHRJbmRleCkgPT4gKHthbHRlcm5hdGl2ZTogYWx0LCBpbmRleDogYWx0SW5kZXh9KSApICAvL9C90YPQttC10L0g0LjQvdC00LXQutGBLCDQv9C+INC90LXQvNGDINC/0YDQvtGJ0LUg0LLRi9Cx0LjRgNCw0YLRjCDQutC+0L3RgtGA0L7Qu9GLINCyIG1zQXJyYXlcclxuICAgICAgICAgICAgIC5maWx0ZXIoZGF0YSA9PiBkYXRhLmFsdGVybmF0aXZlLkdyb3VwTm8gIT09IGFsdC5Hcm91cE5vKTsgLy/QutC+0L3RgtGA0L7Qu9GLINGDINC60L7RgtC+0YDRi9GFINC00YDRg9Cz0LDRjyDQs9GA0YPQv9C/0LBcclxuXHJcbiAgICAgICAgICAgIC8vXCLQvtGC0LbQuNC80LDQtdC8INCz0LDQu9C+0YfQutGDXCJcclxuICAgICAgICAgICAgb3RoZXJHcm91cEFsdGVybmF0aXZlc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBhbHRDb250cm9sID0gbXNBcnJheS5jb250cm9scy5hdChkYXRhLmluZGV4KTtcclxuICAgICAgICAgICAgICBhbHRDb250cm9sIS5wYXRjaFZhbHVlKGZhbHNlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gbXNBcnJheTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyPihOdW1iZXIoYW5zd2VycyksIHtub25OdWxsYWJsZTogdHJ1ZX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy/QtNC40LfQtdC50LHQu9C40YIg0LrQvtC90YLRgNC+0LvQuCDQtdGB0LvQuCDQstGL0LHRgNCw0LvQuCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LjQu9C4INC10L3QtdC50LHQu9C40YIg0LXRgdC70Lgg0LLRi9Cx0YDQsNC70Lgg0L3QtSDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L5cclxuICAjZGlzYWJsZUV4dHJhQ29udHJvbHMobWF4Q291bnQ6IG51bWJlcik6IHZvaWR7XHJcbiAgICAvL9C10YHQu9C4INCyINC90LDRgdGC0YDQvtC50LrQsNGFINCw0L3QutC10YLRiyDRg9C60LDQt9Cw0LvQuCDRh9GC0L4g0LzQsNC60YHQuNC80LDQu9GM0L3QvtC1INCy0L7Qt9C80L7QttC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQstGL0LHRgNCw0L3QvdGL0YUg0LDQu9GM0YLQtdGA0L3QsNGC0LjQsiA9IDAsINC90L4g0L3QuNGH0LXQs9C+INC60L7QvdGC0YDQvtC70LjRgNC+0LLQsNGC0Ywg0L3QtSDQvdCw0LTQvi5cclxuICAgIGlmIChtYXhDb3VudCA9PT0gMCB8fCAhdGhpcy5tdWx0aVNlbGVjdCgpKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VjdGlvbkxpc3QoKS5mb3JFYWNoKHNlYyA9PiB7XHJcbiAgICAgIGNvbnN0IHNlY3Rpb25Db250cm9sQXJyYXkgPSB0aGlzLmFuc3dlclNMRm9ybS5nZXQoc2VjLlNlY3Rpb25HdWlkLnRvU3RyaW5nKCkpIGFzIEZvcm1BcnJheTxGb3JtQ29udHJvbDxib29sZWFuPj47XHJcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHNlY3Rpb25Db250cm9sQXJyYXkudmFsdWU7XHJcbiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IHZhbHVlcy5maWx0ZXIodiA9PiB2KS5sZW5ndGg7XHJcblxyXG4gICAgICBzZWN0aW9uQ29udHJvbEFycmF5LmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgICAgaWYgKGNoZWNrZWRDb3VudCA+PSBtYXhDb3VudCAmJiAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgY29udHJvbC5kaXNhYmxlKHtlbWl0RXZlbnQ6IGZhbHNlfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29udHJvbC5lbmFibGUoe2VtaXRFdmVudDogZmFsc2V9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8dGFibGUgY2xhc3M9XCJkZWZhdWx0LXZpZXdcIiBbZm9ybUdyb3VwXT1cImFuc3dlclNMRm9ybVwiPlxyXG4gPHRoZWFkPlxyXG4gPHRyPlxyXG4gIDx0aD48L3RoPlxyXG4gIEBmb3IgKGFsdCBvZiBhbHRlcm5hdGl2ZUxpc3QoKTsgdHJhY2sgYWx0LlZhbHVlOyBsZXQgaW5kZXggPSAkaW5kZXgpIHtcclxuICAgPHRoIGNsYXNzPVwiU0xBbHRlcm5hdGl2ZUNhcHRpb25cIj5cclxuICAgIDxzcGFuIFtpbm5lckhUTUxdPSBcImFsdC5NdWx0aUxhbmdDYXB0aW9ucyB8IG11bHRpTGFuZ09iamVjdFRvSHRtbDpsYW5ndWFnZSgpXCI+PC9zcGFuPlxyXG4gICA8L3RoPlxyXG4gIH1cclxuIDwvdHI+XHJcbiA8L3RoZWFkPlxyXG4gPHRib2R5PlxyXG4gIEBmb3IgKHNlY0NvbnRyb2wgb2YgYW5zd2VyU0xGb3JtLmNvbnRyb2xzIHwga2V5dmFsdWU7IHRyYWNrIHNlY0NvbnRyb2wua2V5OyBsZXQgc2VjdGlvbkluZGV4ID0gJGluZGV4KSB7XHJcbiAgIEBpZiAobXVsdGlTZWxlY3QoKSl7XHJcbiAgICA8dHI+XHJcbiAgICAgPHRkPlxyXG4gICAgICA8c3BhbiBbaW5uZXJIVE1MXT0gXCJzZWN0aW9uTGlzdCgpW3NlY3Rpb25JbmRleF0uTXVsdGlMYW5nQ2FwdGlvbnMgfCBtdWx0aUxhbmdPYmplY3RUb0h0bWw6bGFuZ3VhZ2UoKVwiPjwvc3Bhbj5cclxuICAgICA8L3RkPlxyXG4gICAgIEBmb3IgKGFsdGVybmF0aXZlQ29udHJvbCBvZiAoc2VjQ29udHJvbC52YWx1ZSB8IGFzRm9ybUFycmF5KS5jb250cm9scyA7IHRyYWNrIGFsdGVybmF0aXZlQ29udHJvbCkge1xyXG4gICAgICA8dGQ+XHJcbiAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImFsdGVybmF0aXZlQ29udHJvbFwiXHJcbiAgICAgICAgY2xhc3M9XCJhbHRlcm5hdGl2ZS1zbCB0cC1zdXJ2ZXktY2hlY2tib3hcIi8+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgfVxyXG4gICAgPC90cj5cclxuICAgfSBAZWxzZSB7XHJcbiAgICA8bWF0LXJhZGlvLWdyb3VwIFtmb3JtQ29udHJvbF09XCJzZWNDb250cm9sLnZhbHVlIHwgYXNGb3JtQ29udHJvbFwiIGNsYXNzPVwic2luZ2xlLXNlbGVjdC1yb3dcIj5cclxuICAgICA8dGQgY2xhc3M9XCJzaW5nbGUtc2VsZWN0LWl0ZW1cIj5cclxuICAgICAgPHNwYW4gW2lubmVySFRNTF09IFwic2VjdGlvbkxpc3QoKVtzZWN0aW9uSW5kZXhdLk11bHRpTGFuZ0NhcHRpb25zIHwgbXVsdGlMYW5nT2JqZWN0VG9IdG1sOmxhbmd1YWdlKClcIj48L3NwYW4+XHJcbiAgICAgPC90ZD5cclxuICAgICBAZm9yIChhbHQgb2YgYWx0ZXJuYXRpdmVMaXN0KCk7IHRyYWNrIGFsdC5WYWx1ZTsgbGV0IGluZGV4ID0gJGluZGV4KSB7XHJcbiAgICAgIDx0ZCBjbGFzcz1cInNpbmdsZS1zZWxlY3QtaXRlbVwiPlxyXG4gICAgICAgPG1hdC1yYWRpby1idXR0b25cclxuICAgICAgICBjbGFzcz1cImFsdGVybmF0aXZlLXNsICB0cC1zdXJ2ZXktcmFkaW8tYnV0dG9uXCJcclxuICAgICAgICBbdmFsdWVdPVwiYWx0LlZhbHVlXCI+XHJcbiAgICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgfVxyXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgIH1cclxuICB9XHJcbiA8L3Rib2R5PlxyXG48L3RhYmxlPlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vYmlsZS12aWV3XCIgW2Zvcm1Hcm91cF09XCJhbnN3ZXJTTEZvcm1cIj5cclxuIEBmb3IgKHNlY0NvbnRyb2wgb2YgYW5zd2VyU0xGb3JtLmNvbnRyb2xzIHwga2V5dmFsdWU7IHRyYWNrIHNlY0NvbnRyb2wua2V5OyBsZXQgc2VjSW5kZXggPSAkaW5kZXgpIHtcclxuICA8ZGl2IGNsYXNzPVwibW9iaWxlLXZpZXctc2VjdGlvbi1yb3dcIiBbZm9ybUFycmF5TmFtZV09XCJzZWNDb250cm9sLmtleVwiPlxyXG4gICA8c3BhbiBbaW5uZXJIVE1MXT0gXCJzZWN0aW9uTGlzdCgpW3NlY0luZGV4XS5NdWx0aUxhbmdDYXB0aW9ucyB8IG11bHRpTGFuZ09iamVjdFRvSHRtbDpsYW5ndWFnZSgpXCIgY2xhc3M9XCJtb2JpbGUtdmlldy1zZWN0aW9uLWNhcHRpb24gc2VjdGlvbi1zbC1jYXB0aW9uXCI+PC9zcGFuPlxyXG4gICBAaWYgKG11bHRpU2VsZWN0KCkpIHtcclxuICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtdmlldy1hbHRlcm5hdGl2ZS1saXN0XCI+XHJcbiAgICAgQGZvciAoYWx0ZXJuYXRpdmVDb250cm9sIG9mIChzZWNDb250cm9sLnZhbHVlIHwgYXNGb3JtQXJyYXkpLmNvbnRyb2xzOyB0cmFjayBhbHRlcm5hdGl2ZUNvbnRyb2w7IGxldCBhbHRJbmRleCA9ICRpbmRleCkge1xyXG4gICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICBbZm9ybUNvbnRyb2xdPVwiYWx0ZXJuYXRpdmVDb250cm9sXCJcclxuICAgICAgIGNsYXNzPVwiYWx0ZXJuYXRpdmUtc2wgdHAtc3VydmV5LWNoZWNrYm94XCI+XHJcbiAgICAgICA8c3BhbiBjbGFzcz1cImFsdGVybmF0aXZlLXNsLWNhcHRpb25cIiBbaW5uZXJIVE1MXT0gXCJhbHRlcm5hdGl2ZUxpc3QoKVthbHRJbmRleF0uTXVsdGlMYW5nQ2FwdGlvbnMgfCBtdWx0aUxhbmdPYmplY3RUb0h0bWw6bGFuZ3VhZ2UoKVwiPjwvc3Bhbj5cclxuICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgfVxyXG4gICAgPC9kaXY+XHJcbiAgIH0gQGVsc2Uge1xyXG4gICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgIGNsYXNzPVwibW9iaWxlLXZpZXctYWx0ZXJuYXRpdmUtbGlzdFwiXHJcbiAgICAgW2Zvcm1Db250cm9sXT1cInNlY0NvbnRyb2wudmFsdWUgfCBhc0Zvcm1Db250cm9sXCI+XHJcbiAgICAgQGZvciAoYWx0IG9mIGFsdGVybmF0aXZlTGlzdCgpOyB0cmFjayBhbHQuVmFsdWU7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgICAgY2xhc3M9XCJ0cC1zdXJ2ZXktcmFkaW8tYnV0dG9uXCJcclxuICAgICAgIFt2YWx1ZV09XCJhbHQuVmFsdWVcIj5cclxuICAgICAgIDxzcGFuIGNsYXNzPVwiYWx0ZXJuYXRpdmUtc2wtY2FwdGlvblwiIFtpbm5lckhUTUxdPSBcImFsdC5NdWx0aUxhbmdDYXB0aW9ucyB8IG11bHRpTGFuZ09iamVjdFRvSHRtbDpsYW5ndWFnZSgpXCI+PC9zcGFuPlxyXG4gICAgICA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgfVxyXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgIH1cclxuICA8L2Rpdj5cclxuIH1cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AsFormArrayPipe {
|
|
4
|
+
transform(value) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AsFormArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
8
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: AsFormArrayPipe, isStandalone: true, name: "asFormArray" }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AsFormArrayPipe, decorators: [{
|
|
11
|
+
type: Pipe,
|
|
12
|
+
args: [{
|
|
13
|
+
name: 'asFormArray',
|
|
14
|
+
standalone: true
|
|
15
|
+
}]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMuZm9ybS5hcnJheS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHAuc3VydmV5L3NyYy9saWIvY29tcG9uZW50L2Fuc3dlci9hbnN3ZXIuc2wvcGlwZS9hcy5mb3JtLmFycmF5L2FzLmZvcm0uYXJyYXkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFPbEQsTUFBTSxPQUFPLGVBQWU7SUFFMUIsU0FBUyxDQUFDLEtBQVU7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQUpVLGVBQWU7NEdBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFKM0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3JtQXJyYXksIEZvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AUGlwZSh7XHJcbiAgbmFtZTogJ2FzRm9ybUFycmF5JyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc0Zvcm1BcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnkpOiBGb3JtQXJyYXk8Rm9ybUNvbnRyb2w8Ym9vbGVhbj4+IHtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class AsFormControlPipe {
|
|
4
|
+
transform(value) {
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AsFormControlPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
8
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.6", ngImport: i0, type: AsFormControlPipe, isStandalone: true, name: "asFormControl" }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AsFormControlPipe, decorators: [{
|
|
11
|
+
type: Pipe,
|
|
12
|
+
args: [{
|
|
13
|
+
name: 'asFormControl',
|
|
14
|
+
standalone: true
|
|
15
|
+
}]
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXMuZm9ybS5jb250cm9sLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cC5zdXJ2ZXkvc3JjL2xpYi9jb21wb25lbnQvYW5zd2VyL2Fuc3dlci5zbC9waXBlL2FzLmZvcm0uY29udHJvbC9hcy5mb3JtLmNvbnRyb2wucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQzs7QUFPbEQsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixTQUFTLENBQUMsS0FBVTtRQUNsQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBSlUsaUJBQWlCOzRHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSjdCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGVBQWU7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UGlwZSwgUGlwZVRyYW5zZm9ybX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Rm9ybUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnYXNGb3JtQ29udHJvbCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNGb3JtQ29udHJvbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuICBcclxuICB0cmFuc2Zvcm0odmFsdWU6IGFueSk6IEZvcm1Db250cm9sPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, forwardRef, input, output, } from '@angular/core';
|
|
2
|
+
import { MatRadioButton, MatRadioGroup } from '@angular/material/radio';
|
|
3
|
+
import { NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { KeyValuePipe } from '@angular/common';
|
|
5
|
+
import { MatFormField } from '@angular/material/form-field';
|
|
6
|
+
import { MatInput } from '@angular/material/input';
|
|
7
|
+
import { MatIcon } from '@angular/material/icon';
|
|
8
|
+
import { MatCheckbox } from '@angular/material/checkbox';
|
|
9
|
+
import { MultiLangObjectToHtmlPipe } from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';
|
|
10
|
+
import { AnswerMasterComponent } from '../answer.master/answer.master.component';
|
|
11
|
+
import { AlternativesContainerDirective } from '../../../directive/alternatives.container/alternatives.container.directive';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "@angular/forms";
|
|
14
|
+
export class AnswerSSComponent extends AnswerMasterComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.question = input.required();
|
|
18
|
+
this.alternativeList = input.required();
|
|
19
|
+
this.onAlternativeClick = output();
|
|
20
|
+
}
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnswerSSComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
22
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.6", type: AnswerSSComponent, isStandalone: true, selector: "tp-survey-answer-ss", inputs: { question: { classPropertyName: "question", publicName: "question", isSignal: true, isRequired: true, transformFunction: null }, alternativeList: { classPropertyName: "alternativeList", publicName: "alternativeList", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onAlternativeClick: "onAlternativeClick" }, providers: [
|
|
23
|
+
{
|
|
24
|
+
provide: NG_VALUE_ACCESSOR,
|
|
25
|
+
useExisting: forwardRef(() => AnswerSSComponent),
|
|
26
|
+
multi: true
|
|
27
|
+
},
|
|
28
|
+
], usesInheritance: true, ngImport: i0, template: "<mat-radio-group\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n [formControl]=\"control\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n #tablet_alt\r\n class=\"alternative-ss-ms tp-survey-radio-button\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n [value]=\"alt.Value\"\r\n (change)=\"onAlternativeClick.emit($event.value)\">\r\n @if (alt.IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n", styles: [".container-controls{display:grid;justify-content:center;gap:1em}.container-controls>mat-radio-group{display:grid;grid-column-gap:2em;grid-gap:.5em;min-width:200px}@media (max-width: 480px){.container-controls{padding:1em}}\n"], dependencies: [{ kind: "directive", type: MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "pipe", type: MultiLangObjectToHtmlPipe, name: "multiLangObjectToHtml" }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: AlternativesContainerDirective, selector: "[tpSurveyAlternativesContainer]", inputs: ["tpSurveyAlternativesContainer", "containerViewModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: AnswerSSComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ selector: 'tp-survey-answer-ss', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33
|
+
MatRadioGroup,
|
|
34
|
+
ReactiveFormsModule,
|
|
35
|
+
MatRadioButton,
|
|
36
|
+
MultiLangObjectToHtmlPipe,
|
|
37
|
+
KeyValuePipe,
|
|
38
|
+
MatFormField,
|
|
39
|
+
MatInput,
|
|
40
|
+
MatIcon,
|
|
41
|
+
MatCheckbox,
|
|
42
|
+
AlternativesContainerDirective
|
|
43
|
+
], providers: [
|
|
44
|
+
{
|
|
45
|
+
provide: NG_VALUE_ACCESSOR,
|
|
46
|
+
useExisting: forwardRef(() => AnswerSSComponent),
|
|
47
|
+
multi: true
|
|
48
|
+
},
|
|
49
|
+
], template: "<mat-radio-group\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n [formControl]=\"control\">\r\n @for (alt of alternativeList(); track alt.Value; let index = $index) {\r\n <mat-radio-button\r\n #tablet_alt\r\n class=\"alternative-ss-ms tp-survey-radio-button\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n [value]=\"alt.Value\"\r\n (change)=\"onAlternativeClick.emit($event.value)\">\r\n @if (alt.IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <span class=\"alternative-ss-ms-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n", styles: [".container-controls{display:grid;justify-content:center;gap:1em}.container-controls>mat-radio-group{display:grid;grid-column-gap:2em;grid-gap:.5em;min-width:200px}@media (max-width: 480px){.container-controls{padding:1em}}\n"] }]
|
|
50
|
+
}] });
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5zd2VyLnNzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RwLnN1cnZleS9zcmMvbGliL2NvbXBvbmVudC9hbnN3ZXIvYW5zd2VyLnNzL2Fuc3dlci5zcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90cC5zdXJ2ZXkvc3JjL2xpYi9jb21wb25lbnQvYW5zd2VyL2Fuc3dlci5zcy9hbnN3ZXIuc3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUMsY0FBYyxFQUFFLGFBQWEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sd0VBQXdFLENBQUM7QUFDakgsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFL0UsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sNEVBQTRFLENBQUM7OztBQTRCMUgsTUFBTSxPQUFPLGlCQUFrQixTQUFRLHFCQUE2QjtJQTFCcEU7O1FBMkJFLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFlLENBQUM7UUFDekMsb0JBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO1FBQzFELHVCQUFrQixHQUFHLE1BQU0sRUFBVSxDQUFDO0tBQ3ZDOzhHQUpZLGlCQUFpQjtrR0FBakIsaUJBQWlCLDBaQVJqQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixpRENyQ0gsNjFCQW9CQSwwUkRBSSxhQUFhLHNNQUNiLG1CQUFtQiwwVEFDbkIsY0FBYywyUkFDZCx5QkFBeUIsOERBSXpCLE9BQU8sMklBRVAsOEJBQThCOzsyRkFVckIsaUJBQWlCO2tCQTFCN0IsU0FBUzsrQkFDRSxxQkFBcUIsbUJBR2QsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsYUFBYTt3QkFDYixtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QseUJBQXlCO3dCQUN6QixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsOEJBQThCO3FCQUMvQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDOzRCQUNoRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZm9yd2FyZFJlZiwgaW5wdXQsIG91dHB1dCx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdFJhZGlvQnV0dG9uLCBNYXRSYWRpb0dyb3VwfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9yYWRpbyc7XHJcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtLZXlWYWx1ZVBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TWF0Rm9ybUZpZWxkfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHtNYXRJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQge01hdEljb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQge01hdENoZWNrYm94fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7TXVsdGlMYW5nT2JqZWN0VG9IdG1sUGlwZX0gZnJvbSAnLi4vLi4vLi4vcGlwZS9tdWx0aS5sYW5nLm9iamVjdC50by5odG1sL211bHRpLmxhbmcub2JqZWN0LnRvLmh0bWwucGlwZSc7XHJcbmltcG9ydCB7QW5zd2VyTWFzdGVyQ29tcG9uZW50fSBmcm9tICcuLi9hbnN3ZXIubWFzdGVyL2Fuc3dlci5tYXN0ZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHtJZGJBbHRlcm5hdGl2ZSwgSWRiUXVlc3Rpb259IGZyb20gJy4uLy4uLy4uL3RwLnN1cnZleS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0FsdGVybmF0aXZlc0NvbnRhaW5lckRpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2FsdGVybmF0aXZlcy5jb250YWluZXIvYWx0ZXJuYXRpdmVzLmNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0cC1zdXJ2ZXktYW5zd2VyLXNzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5zd2VyLnNzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hbnN3ZXIuc3MuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdFJhZGlvR3JvdXAsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0UmFkaW9CdXR0b24sXHJcbiAgICBNdWx0aUxhbmdPYmplY3RUb0h0bWxQaXBlLFxyXG4gICAgS2V5VmFsdWVQaXBlLFxyXG4gICAgTWF0Rm9ybUZpZWxkLFxyXG4gICAgTWF0SW5wdXQsXHJcbiAgICBNYXRJY29uLFxyXG4gICAgTWF0Q2hlY2tib3gsXHJcbiAgICBBbHRlcm5hdGl2ZXNDb250YWluZXJEaXJlY3RpdmVcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQW5zd2VyU1NDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5zd2VyU1NDb21wb25lbnQgZXh0ZW5kcyBBbnN3ZXJNYXN0ZXJDb21wb25lbnQ8bnVtYmVyPntcclxuICBxdWVzdGlvbiA9IGlucHV0LnJlcXVpcmVkPElkYlF1ZXN0aW9uPigpO1xyXG4gIGFsdGVybmF0aXZlTGlzdCA9IGlucHV0LnJlcXVpcmVkPEFycmF5PElkYkFsdGVybmF0aXZlPj4oKTtcclxuICBvbkFsdGVybmF0aXZlQ2xpY2sgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG59XHJcblxyXG5cclxuIiwiPG1hdC1yYWRpby1ncm91cFxyXG4gY2xhc3M9XCJjb250YWluZXItbXMtc3MtYWx0ZXJuYXRpdmVzXCJcclxuIFt0cFN1cnZleUFsdGVybmF0aXZlc0NvbnRhaW5lcl0gPSBcInF1ZXN0aW9uKClcIlxyXG4gW2NvbnRhaW5lclZpZXdNb2RlbF09XCJ2aWV3TW9kZWwoKVwiXHJcbiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiPlxyXG4gQGZvciAoYWx0IG9mIGFsdGVybmF0aXZlTGlzdCgpOyB0cmFjayBhbHQuVmFsdWU7IGxldCBpbmRleCA9ICRpbmRleCkge1xyXG4gIDxtYXQtcmFkaW8tYnV0dG9uXHJcbiAgICN0YWJsZXRfYWx0XHJcbiAgIGNsYXNzPVwiYWx0ZXJuYXRpdmUtc3MtbXMgdHAtc3VydmV5LXJhZGlvLWJ1dHRvblwiXHJcbiAgIFtzdHlsZS5mb250LXNpemUuJV09XCJ2aWV3TW9kZWwoKSA9PT0gdmlld01vZGVsRS52bVRhYmxldCA/IHF1ZXN0aW9uKCkuQWx0ZXJuYXRpdmVUYWJsZXRGb250U2l6ZSA6IHVuZGVmaW5lZFwiXHJcbiAgIFt2YWx1ZV09XCJhbHQuVmFsdWVcIlxyXG4gICAoY2hhbmdlKT1cIm9uQWx0ZXJuYXRpdmVDbGljay5lbWl0KCRldmVudC52YWx1ZSlcIj5cclxuICAgQGlmIChhbHQuSXNNdXRlKSB7XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJpY29uLWlzLW11dGVcIiBzdmdJY29uPVwiaWNvbklzTXV0ZVwiPjwvbWF0LWljb24+XHJcbiAgIH1cclxuICAgPHNwYW4gY2xhc3M9XCJhbHRlcm5hdGl2ZS1zcy1tcy1jYXB0aW9uXCIgW2lubmVySFRNTF09IFwiYWx0Lk11bHRpTGFuZ0NhcHRpb25zIHwgbXVsdGlMYW5nT2JqZWN0VG9IdG1sOmxhbmd1YWdlKClcIj48L3NwYW4+XHJcbiAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gfVxyXG48L21hdC1yYWRpby1ncm91cD5cclxuXHJcbiJdfQ==
|