@touchpoll/tp-survey 0.0.56 → 0.0.58
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchpoll-tp-survey.mjs","sources":["../../../projects/tp.survey/src/lib/tp.survey.config.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.module.ts","../../../projects/tp.survey/src/lib/tp.survey.module.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.html","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.ts","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.html","../../../projects/tp.survey/src/lib/tp.survey.const.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.validator.ts","../../../projects/tp.survey/src/lib/core/tp.survey.logic/tp.survey.logic.service.ts","../../../projects/tp.survey/src/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.ts","../../../projects/tp.survey/src/lib/tp.survey.enum.ts","../../../projects/tp.survey/src/lib/component/answer/answer.master/answer.master.component.ts","../../../projects/tp.survey/src/lib/directive/alternatives.container/alternatives.container.directive.ts","../../../projects/tp.survey/src/lib/pipe/get.question.image.background.size/get.question.image.background.css.size.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.info/answer.info.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.end/answer.end.component.ts","../../../projects/tp.survey/src/lib/directive/focus.and.select/focus.and.select.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.html","../../../projects/tp.survey/src/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.ts","../../../projects/tp.survey/src/lib/pipe/key.values/key.values.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.html","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.html","../../../projects/tp.survey/src/lib/pipe/get.active.language/get.active.language.pipe.ts","../../../projects/tp.survey/src/lib/directive/update.font.size/update.font.size.directive.ts","../../../projects/tp.survey/src/lib/tp.survey.method.ts","../../../projects/tp.survey/src/lib/core/tp.servey.quota/tp.survey.quota.ts","../../../projects/tp.survey/src/lib/core/tp.survey.answer/tp.survey.answer.ts","../../../projects/tp.survey/src/lib/core/tp.survey.interview/tp.survey.interview.service.ts","../../../projects/tp.survey/src/lib/core/tp.survey.core/tp.survey.core.service.ts","../../../projects/tp.survey/src/lib/directive/survey.theme/survey.theme.directive.ts","../../../projects/tp.survey/src/lib/directive/image.position/image.position.directive.ts","../../../projects/tp.survey/src/lib/directive/image.site/image.size.directive.ts","../../../projects/tp.survey/src/lib/pipe/is.video/is.video.pipe.ts","../../../projects/tp.survey/src/lib/directive/insert.question.css/insert.question.css.directive.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.html","../../../projects/tp.survey/src/lib/pipe/generate.default.answer/generate.default.answer.pipe.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.html","../../../projects/tp.survey/src/public-api.ts","../../../projects/tp.survey/src/touchpoll-tp-survey.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {TpSurveyPlatform} from './tp.survey.type';\r\n\r\n\r\n\r\nexport interface TpSurveyConfig {\r\n tpPlatform: TpSurveyPlatform;\r\n}\r\n\r\n\r\n\r\n/**\r\n * A DI token for the survey service.\r\n *\r\n * @publicApi\r\n */\r\nexport const TP_SURVEY_CONFIGURATION = new InjectionToken<TpSurveyConfig>('__TOUCHPOLL_SURVEY_CONFIGURATION_TOKEN__')\r\n","export const defaultIcons = {\r\n 'iconButtonNext': `\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"/>\r\n `,\r\n 'iconButtonBack': `\r\n <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"/>\r\n `,\r\n 'iconIsMute': `\r\n <path d=\"M7.6,4H4A3,3,0,0,0,1,7H1a3,3,0,0,0,3,3H7.6a7.9,7.9,0,0,1,3.9,1L15,13V1L11.4,3A7.9,7.9,0,0,1,7.6,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <path d=\"M6,10v2.9a4,4,0,0,0,.3,1.5L7,17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"4\"/>\r\n <path d=\"M15,4h.1A1.9,1.9,0,0,1,17,5.9V8.1A1.9,1.9,0,0,1,15.1,10H15a0,0,0,0,1,0,0V4A0,0,0,0,1,15,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <line x1=\"1\" y1=\"1\" x2=\"17\" y2=\"17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n `,\r\n}\r\n","import {inject, NgModule, PLATFORM_ID} from '@angular/core';\r\nimport {isPlatformServer} from '@angular/common';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {MatIconRegistry} from '@angular/material/icon';\r\nimport {defaultIcons} from './default.icons';\r\n\r\n@NgModule()\r\nexport class DefaultIconsModule {\r\n constructor() {\r\n const domSanitizer = inject(DomSanitizer);\r\n const matIconRegistry = inject(MatIconRegistry);\r\n const platformId = inject(PLATFORM_ID);\r\n for (const [name, svgText] of Object.entries(defaultIcons)) {\r\n const iconText: string = `<svg viewBox=\"0 0 24 24\">${isPlatformServer(platformId) ? '' : svgText}</svg>`;\r\n matIconRegistry.addSvgIconLiteral(name, domSanitizer.bypassSecurityTrustHtml(iconText));\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {TP_SURVEY_CONFIGURATION, TpSurveyConfig} from './tp.survey.config';\r\nimport {DefaultIconsModule} from './icons/default.icons/default.icons.module';\r\n\r\n@NgModule({\r\n imports: [\r\n DefaultIconsModule\r\n ]\r\n})\r\nexport class TpSurveyModule {\r\n // #docregion for-root\r\n static forRoot(config: TpSurveyConfig): ModuleWithProviders<TpSurveyModule> {\r\n return {\r\n ngModule: TpSurveyModule,\r\n providers: [\r\n {provide: TP_SURVEY_CONFIGURATION, useValue: config}\r\n ]\r\n };\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, input} from '@angular/core';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-caption',\r\n templateUrl: './question.caption.component.html',\r\n styleUrls: ['./question.caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class QuestionCaptionComponent {\r\n caption = input<SafeHtml>();\r\n captionHelp = input<SafeHtml>();\r\n}\r\n","<div class=\"container-main\">\r\n <div [innerHTML]= \"caption()\" class=\"question-caption-font survey-object-caption\"></div>\r\n <div [innerHTML]= \"captionHelp()\" class=\"question-caption-helper-font survey-object-caption\"></div>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, input, output} from '@angular/core';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {NavigationButtonDirection} from '../../tp.survey.type';\r\n\r\n@Component({\n selector: 'tp-survey-navigation-button',\n imports: [\n MatButton,\n MatIcon\n ],\n templateUrl: './navigation.button.component.html',\n styleUrl: './navigation.button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class NavigationButtonComponent {\r\n direction = input.required<NavigationButtonDirection>()\r\n caption = input<string>();\r\n onClick = output<NavigationButtonDirection>()\r\n}\r\n\r\n","<button mat-flat-button (click)=\"onClick.emit(direction())\" class=\"navigation-button\">\r\n @if (direction() === 'back') {\r\n <mat-icon svgIcon=\"iconButtonBack\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n\r\n <span class=\"navigation-button-label\">{{ caption() }}</span>\r\n\r\n @if (direction() === 'next') {\r\n <mat-icon iconPositionEnd svgIcon=\"iconButtonNext\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n</button>\r\n\r\n","export const MISSING_VALUE = -97;\r\nexport const VIDEO_EXTENSION_LIST = ['.mpg','.webm','.ogv','.asx','.mpeg','.m4v', '.mp4', '.mov', '.avi', '.mkv', '.wmv', '.flv'];\r\n\r\n\r\nexport const BASE_WIDTH = 1280;\r\nexport const BASE_HEIGHT = 800;\r\n\r\nexport const LOGIC_FUNC_TEXT = `\r\n const self = this;\r\n var setVar = function(varName, value) {\r\n self[varName] = value\r\n };\r\n var FUNC_IN = function(varName, array) {\r\n return isNaN(parseInt(varName)) ? false : array.indexOf(varName) > -1\r\n };\r\n var FUNC_INTERSECT = function (var1, var2) {\r\n return Array.isArray(var1) && Array.isArray(var2) ? var1.some(function(el1) {\r\n return var2.some(function (el2) {\r\n return el2 === el1;\r\n });\r\n }) : false;\r\n };\r\n var value = function(varName, defaultValue) {\r\n const defVal = !defaultValue ? 0 : defaultValue;\r\n if ( (varName === -97) || (varName === null) || (varName === undefined) ) {\r\n return defVal\r\n } else {\r\n return varName\r\n }\r\n }\r\n for (var p in this) eval(\"var \" + p + \" = this[p];\"); `;\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {IdbAlternative, IdbSection} from '../../../tp.survey.interface';\r\n\r\nexport const answerDefaultValidator = (): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if ((control.value === null) || (control.value === MISSING_VALUE) ) {\r\n return {answerRequired: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const answerODValidator = (minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerOdAnswerType: true}\r\n }\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && (maxValue ?? 0 > 0) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerOLValidator = (isPhoneNumber: boolean, canSkip: boolean): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n const text = typeof control.value !== 'string' ? '' : control.value.trim();\r\n //Нужно, чтобы в поле ввели хоть что-то.\r\n if ( text.length === 0 && !canSkip) {\r\n return {answerOlAnswerError: true}\r\n }\r\n\r\n if (isPhoneNumber) {\r\n const res = text.length === 9 && !isNaN(Number(text)) || text === 'skip';\r\n if (!res) {\r\n return {answerOlTelephoneFormatError: true}\r\n }\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerSSValidator = (): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerSsAnswerType: true}\r\n }\r\n\r\n //нет ответа\r\n if (control.value < 0) {\r\n return {answerMissing: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerMSValidator = (visibleAlternativeList: Array<IdbAlternative>, minCount: number = 1, maxCount: number = 0): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //visibleAlternativeList - альтернативы на экране, если их 0, то смысла показывать вопрос нет\r\n //minCount - Минимальное количество ответов, которое может выбрать респондент, по умолчанию 1.\r\n //maxCount - Максимальное количество ответов, которые может выбрать респондент. Если указано 0, количество не ограничено. По умолчанию 0\r\n\r\n if (visibleAlternativeList.length === 0) {\r\n return null;\r\n }\r\n\r\n //ответ не массив, такого быть не может, это ошибка\r\n if (!Array.isArray(control.value)) {\r\n return {answerMsAnswerType: true}\r\n }\r\n \r\n //Проблема минимального количества ответов - если доступных на экране альтернатив меньше, чем настройка \"минимальное количество ответов\", то это нужно учитывать.\r\n //Поэтому вычисляем минимально возможное количество ответов, которое может выбрать респондент и если оно меньше значения из настроек, возьмем его.\r\n let minPossibleCount = minCount;\r\n if (control.value.length > 0) {\r\n const currentAlternativeGroup = visibleAlternativeList.find(alternative => alternative.Value === control.value[0])?.GroupNo ?? 1;\r\n minPossibleCount = Math.min(visibleAlternativeList.filter(alternative => alternative.GroupNo === currentAlternativeGroup).length, minCount);\r\n }\r\n\r\n //количество ответов\r\n const count = control.value.length;\r\n\r\n //проверяем minCount\r\n if (count < minPossibleCount) {\r\n return {answerMsMinCount: true}\r\n }\r\n\r\n //проверяем maxCount\r\n if (maxCount > 0 && count > maxCount) {\r\n return {answerMsMaxCount: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerSlValidator = (required: boolean, minAnswersCount: number, sectionList: Array<IdbSection>): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //если ответы для каждой секции необязательны, ничего не проверяем и выходим.\r\n if (!required) {\r\n return null;\r\n }\r\n if (!control.value) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //если хоть 1 сессия не имеет значения(или количество выбранных альтернатив меньше minAnswersCount), тогда ответ на вопрос не полный.\r\n const hasMissingAnswers = sectionList.some(section => {\r\n const sectionAnswers = control.value[section.SectionGuid.toString()];\r\n if (!sectionAnswers) {\r\n return true;\r\n } else{\r\n return Array.isArray(sectionAnswers) ? sectionAnswers.length === 0 || (minAnswersCount > 1 && sectionAnswers.length < minAnswersCount) : sectionAnswers === 0;\r\n }\r\n });\r\n if (hasMissingAnswers) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const additionalAnswerDefaultValidator = (required: boolean): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if ( (control.value === null || (typeof control.value === 'string' && control.value.trim().length === 0)) && required) {\r\n return { additionalAnswerRequired: true}\r\n }\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const additionalAnswerNumberValidator = (required: boolean, minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не обязательный, можно не контролировать\r\n if (!required) {\r\n return null;\r\n }\r\n\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {additionalAnswerType: true}\r\n }\r\n\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n","import {Injectable} from '@angular/core';\r\nimport {LOGIC_FUNC_TEXT} from '../../tp.survey.const';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyLogicService {\r\n #vars: LogicObject = Object.create(null);\r\n\r\n get vars(): object {\r\n return this.#vars;\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this.#vars[varName] = value;\r\n }\r\n\r\n getLogicVars(): LogicObject{\r\n return {...this.#vars};\r\n }\r\n\r\n executeLogic(expression?: string): boolean {\r\n try {\r\n const textExpression = typeof expression !== 'string' ? '' : expression.trim();\r\n return !textExpression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${textExpression}`).call(this.#vars);\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n executePostScript(expression?: string): void {\r\n try {\r\n const textExpression = typeof expression !== 'string' ? '' : expression.trim();\r\n new Function(`${LOGIC_FUNC_TEXT} ${textExpression}`).call(this.#vars);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\nimport {IdbLogicCaptionObject, IdbMultilangObject} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {TFindVariableVoid} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'multiLangObjectToHtml',\r\n})\r\nexport class MultiLangObjectToHtmlPipe implements PipeTransform {\r\n readonly #sanitizer = inject(DomSanitizer);\r\n readonly #logic = inject(TpSurveyLogicService);\r\n\r\n transform(caption: Array<IdbMultilangObject>, language: number, logicCaptions?: Array<IdbLogicCaptionObject>, findVariable?: TFindVariableVoid): SafeHtml {\r\n //сначала проверим есть ли текст у которого выполняется Expression.\r\n if (Array.isArray(logicCaptions)){\r\n const correctLogicCaption = logicCaptions.find(logicCaption => this.#logic.executeLogic(logicCaption.Expression));\r\n const correctLogicCaptionLangObj = correctLogicCaption?.MultiLangCaptions.find(capt => capt.lang === language);\r\n const text = correctLogicCaptionLangObj?._SYS_CaptionHTML ?? correctLogicCaptionLangObj?.CaptionHtml ?? '';\r\n\r\n //если есть хоть какой-то текст - показываем его\r\n if ((text ?? '').trim().length > 0){\r\n return this.#sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n }\r\n\r\n //если основой текст не указан, выходим\r\n if (!Array.isArray(caption)) {\r\n return ''\r\n }\r\n\r\n //ищем основной текс с нужным языком\r\n const langObj = caption.find(capt => capt.lang === language);\r\n const dirtyHtmlText = langObj?._SYS_CaptionHTML ?? langObj?.CaptionHtml ?? '';\r\n\r\n const normalizeHtmlText = dirtyHtmlText.replace(/(q_\\w{16}_A_\\w{3}|q_\\w{16}|v_\\w{16})/gmi, sysName => {\r\n const caption = !!findVariable ? findVariable(sysName) : 'unknown';\r\n const newDiv = document.createElement(\"div\");\r\n newDiv.innerHTML = caption;\r\n newDiv.textContent;\r\n return newDiv.textContent ?? '';\r\n });\r\n\r\n return this.#sanitizer.bypassSecurityTrustHtml(normalizeHtmlText);\r\n }\r\n\r\n}\r\n","export enum ViewModel {\r\n vmDesktop = 1, // desktop view\r\n vmMobile = 2, // phone view\r\n vmTablet = 3, // tablet view\r\n}\r\n\r\nexport enum SurveyEvents {\r\n seSurveyStart = 'survey.start', // on start survey\r\n seSurveyViewModelUpdate = 'survey.view.model.update', // on viewmodel updated\r\n seSurveyDeveloperModeUpdate = 'survey.developer.mode.update', // on Developermode updated\r\n seSurveyEnd = 'survey.end', // on end survey\r\n seQuestionShow = 'question.show', // before question show\r\n seQuestionHide = 'question.hide', // before question hide\r\n seQuestionRefresh = 'question.refresh', // refresh question (after edit)\r\n seQuestionAnswersCompleted = 'answers.completed', // after all answers complete\r\n seQuestionAnswersChange = 'answers.change', // after answers change\r\n seSurveyLanguageUpdate = 'survey.language.update' // on survey language updated\r\n}\r\n\r\nexport enum AdditionalAnswerType {\r\n aatNumber = 1,\r\n aatText = 2,\r\n aatBoolean = 3,\r\n}\r\n\r\nexport enum QuestionsType {\r\n eqLANG = 'LANG',\r\n eqSS = 'SS',\r\n eqMS = 'MS',\r\n eqINFO = 'INFO',\r\n eqSL = 'SL',\r\n eqOL = 'OL',\r\n eqOD = 'OD',\r\n eqEND = 'END',\r\n}\r\n\r\n\r\nexport enum ResultativeStatus {\r\n rsUnset = -1,\r\n rsUnresultative = 0,\r\n rsResultative = 1,\r\n}\r\n\r\nexport enum ValidStatus {\r\n vsUnset = -1,\r\n vsUnValid = 0,\r\n vsValid = 1,\r\n vsDoubtful = 2\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input} from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerT, TFindVariableVoid} from '../../../tp.survey.type';\r\nimport {ViewModel} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'app-answer-master',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMasterComponent),\r\n multi: true\r\n },\r\n ],\r\n\r\n})\r\nexport abstract class AnswerMasterComponent<T extends AnswerT> implements ControlValueAccessor {\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n findVariable = input.required<TFindVariableVoid>();\r\n repositoryPath = input<string>('');\r\n viewModelE = ViewModel;\r\n control: FormControl<T | null>;\r\n protected onModelChange = (data: T) => {};\r\n protected onModelTouched = () => {};\r\n protected readonly destroyRef = inject(DestroyRef);\r\n constructor() {\r\n this.control = new FormControl(null);\r\n this.control.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(res => {\r\n this.onModelChange(res!);\r\n })\r\n }\r\n\r\n registerOnChange(fn: (data: T) => void): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched();\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n }\r\n\r\n writeValue(value: T): void {\r\n this.control.patchValue(value, {emitEvent: false});\r\n }\r\n\r\n skipClick(): void{\r\n this.control.patchValue( 'skip' as T, {emitEvent: true});\r\n }\r\n}\r\n","import {ContentChildren, DestroyRef, Directive, effect, ElementRef, inject, input, QueryList, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAlternativesContainer]',\r\n})\r\nexport class AlternativesContainerDirective {\r\n question = input.required<IdbQuestion>( {alias: 'tpSurveyAlternativesContainer'});\r\n viewModel = input.required<ViewModel>({alias: 'containerViewModel'});\r\n @ContentChildren('tablet_alt', {read: ElementRef, })\r\n private set alternativesTemplates(value: QueryList<ElementRef<HTMLElement>> | undefined) {\r\n this.#updateLayout(value);\r\n }\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(private readonly _renderer: Renderer2,private readonly elementRef: ElementRef, private _breakpointObserver: BreakpointObserver) {\r\n effect(() => this.#updateLayout());\r\n }\r\n\r\n #updateLayout(alternatives?: QueryList<ElementRef<HTMLElement>>): void {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n this.#updateTabletLayout(alternatives);\r\n } else {\r\n this.#updateDesktopLayout();\r\n }\r\n }\r\n\r\n #updateDesktopLayout(): void {\r\n this._breakpointObserver.observe([\"(max-width: 480px)\"]).pipe(\r\n map((result: BreakpointState) => result.matches),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe((isMobile: boolean) => {\r\n let columnCount: number;\r\n if (isMobile) {\r\n columnCount = this.question().MobileViewAlternativeColumnCount || 1; //if 0 will be 1\r\n } else {\r\n columnCount = this.question().AlternativeColumnCount || 1; //if 0 will be 1\r\n }\r\n this._renderer.setStyle(this.elementRef.nativeElement, 'grid-template-columns', `repeat(${columnCount}, 10fr)`);\r\n });\r\n }\r\n\r\n #updateTabletLayout(alternatives?: QueryList<ElementRef<HTMLElement>>): void {\r\n if (!alternatives) {\r\n return;\r\n }\r\n\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const isMobile= this._breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n const question = this.question();\r\n const transformToPer = (newVal: number, containerSideSize: number): number => newVal * 100 / containerSideSize; // превращает размер px в %\r\n\r\n const containerWidthFull = this.elementRef.nativeElement.offsetWidth;\r\n const containerHeightFull = this.elementRef.nativeElement.offsetHeight;\r\n\r\n // const alternativeColumnCount = question.TabletViewAlternativeColumnCount ?? 1;\r\n let alternativeColumnCount;\r\n if (isMobile) {\r\n alternativeColumnCount = this.question().MobileViewAlternativeColumnCount ?? 1; //if 0 will be 1\r\n } else {\r\n alternativeColumnCount = this.question().TabletViewAlternativeColumnCount ?? 1; //if 0 will be 1\r\n }\r\n\r\n const horizontalRatio = containerWidthFull / BASE_WIDTH;\r\n const verticalRatio = containerHeightFull / BASE_HEIGHT;\r\n\r\n const maxAlternativeWidth: number = containerWidthFull * 0.7; // для авторазмера установим максимальный размер альтернативы в 70% от доступной длинны контейнера\r\n\r\n const alternativesCount = Math.max(alternatives.length, 1);\r\n\r\n const horizontalDistance = question.AlternativeHorizontalDistance ?? 10 * horizontalRatio;\r\n const verticalDistance = (question.AlternativeVerticalDistance ?? 10) * verticalRatio;\r\n const marginTop = question.AlternativeMarginTop ?? 10 * verticalRatio;\r\n const marginLeft = (question.AlternativeMarginLeft ?? 0) * horizontalRatio;\r\n const columnCount: number = alternativeColumnCount > alternativesCount ? alternativesCount : alternativeColumnCount;\r\n const rowCount: number = Math.round(alternativesCount / columnCount);\r\n\r\n const defaultHorizontalPadding = 10 * horizontalRatio;\r\n\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (question.AlternativeAutoSize ?? true) { // если авторазмер, то высоту и ширину считаем автоматом\r\n const marginsWidth = horizontalDistance * (columnCount - 1) + defaultHorizontalPadding * 2;\r\n width = Math.min((containerWidthFull - marginsWidth) / columnCount, maxAlternativeWidth);\r\n height = alternatives.reduce((maxHeight, alt) => { // узнаем максимальную высоту альтернативы\r\n const altWidthPercent = transformToPer(width, containerWidthFull);\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${altWidthPercent}%`);\r\n return Math.max(maxHeight, alt.nativeElement.clientHeight) ;\r\n }, 0);\r\n } else { // если авторазмер отключён, размеры берём из настроек\r\n width = question.AlternativeWidth ?? 300;\r\n height = question.AlternativeHeight ?? 50;\r\n }\r\n\r\n const deltaVertical= Math.max(containerHeightFull - height * rowCount - verticalDistance * (rowCount - 1), 0);\r\n const deltaHorizontal = (containerWidthFull - width * columnCount - horizontalDistance * (columnCount - 1)) / 2 - defaultHorizontalPadding;\r\n\r\n let rowNum = -1;\r\n let colNum = 0;\r\n alternatives.forEach((alt, index) => {\r\n let left = 0;\r\n let top = 0;\r\n if (question.AlternativeAutoArrange) {\r\n const isNewRow = (index) % columnCount === 0;\r\n if (isNewRow) {\r\n rowNum++;\r\n colNum = 0;\r\n }\r\n left = marginLeft + colNum * width + colNum * horizontalDistance + deltaHorizontal + defaultHorizontalPadding ;\r\n top = marginTop + rowNum * height + rowNum * verticalDistance + deltaVertical / 2 ;\r\n colNum++;\r\n } else {\r\n const altObj = question.Alternativelist[index];\r\n if (!!altObj) {\r\n left = altObj.x;\r\n top = altObj.y;\r\n if (!question.AlternativeAutoSize) {\r\n width = altObj.width > 0 ? altObj.width : question.AlternativeWidth;\r\n height = altObj.height > 0 ? altObj.height : question.AlternativeHeight;\r\n }\r\n }\r\n }\r\n this._renderer.setStyle(alt.nativeElement, 'width', `${transformToPer(width, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'height', `${transformToPer(height, containerHeightFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'left', `${transformToPer(left, containerWidthFull)}%`);\r\n this._renderer.setStyle(alt.nativeElement, 'top', `${transformToPer(top, containerHeightFull)}%`);\r\n });\r\n } else {\r\n alternatives.forEach((alt) => {\r\n this._renderer.setStyle(alt.nativeElement, 'width', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'height', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'left', ``);\r\n this._renderer.setStyle(alt.nativeElement, 'top', ``);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {BreakpointObserver} from '@angular/cdk/layout';\r\n\r\n@Pipe({\r\n name: 'getQuestionImageBackgroundCssSize',\r\n})\r\nexport class GetQuestionImageBackgroundCssSizePipe implements PipeTransform {\r\n readonly #breakpointObserver = inject(BreakpointObserver);\r\n\r\n transform(question: IdbQuestion): {height: string | null, width: string | null} {\r\n const isMobile= this.#breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n const height = isMobile ? question.MobileViewAlternativeBackgroundImageHeight : question.AlternativeBackgroundImageHeight;\r\n const width = isMobile ? question.MobileViewAlternativeBackgroundImageWidth : question.AlternativeBackgroundImageWidth;\r\n\r\n return {\r\n height: this.#normalizeValue(height),\r\n width: this.#normalizeValue(width),\r\n };\r\n }\r\n\r\n #normalizeValue(value: string | null): string{\r\n if (!value || typeof value !== 'string' ) {\r\n return 'auto';\r\n } else {\r\n value = value.toLowerCase().trim();\r\n if (value.endsWith('%') || value.endsWith('px') || value.endsWith('vh') || value.endsWith('vw')) {\r\n return value;\r\n }else {\r\n return `${value}px`;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, forwardRef, input, output,} from '@angular/core';\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatIcon} from '@angular/material/icon';\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\n\n@Component({\n selector: 'tp-survey-answer-ss',\n templateUrl: './answer.ss.component.html',\n styleUrls: ['./answer.ss.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatRadioGroup,\n ReactiveFormsModule,\n MatRadioButton,\n MultiLangObjectToHtmlPipe,\n MatIcon,\n AlternativesContainerDirective,\n GetQuestionImageBackgroundCssSizePipe\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerSSComponent),\n multi: true\n },\n ]\n})\nexport class AnswerSSComponent extends AnswerMasterComponent<number>{\n question = input.required<IdbQuestion>();\n alternativeList = input.required<Array<IdbAlternative>>();\n onAlternativeClick = output<number>();\n}\n\n\n","<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 <div class=\"container-caption\" [class.container-image]=\"!!alt.BackGround.Image\">\r\n @if (alt.BackGround.Image) {\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-info',\r\n template: '',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerInfoComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerInfoComponent extends AnswerMasterComponent<number>{\r\n}\r\n\r\n\r\n","import {AfterViewInit, ChangeDetectorRef, Component, forwardRef, inject, input, output} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\r\n\r\ninterface IAnswerMSForm {\r\n alternativeList: FormArray<FormControl<boolean>>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ms',\r\n templateUrl: './answer.ms.component.html',\r\n styleUrls: ['./answer.ms.component.scss'],\r\n imports: [\r\n ReactiveFormsModule,\r\n MatCheckbox,\r\n MultiLangObjectToHtmlPipe,\r\n MatIcon,\r\n AlternativesContainerDirective,\r\n GetQuestionImageBackgroundCssSizePipe,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMSComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerMSComponent extends AnswerMasterComponent<Array<number>> implements AfterViewInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n alternativeMaxAnswersCount = input.required<number>();\r\n onAlternativeClick = output<number>();\r\n readonly answerMSForm: FormGroup<IAnswerMSForm>;\r\n readonly #ref = inject(ChangeDetectorRef);\r\n constructor() {\r\n super();\r\n this.answerMSForm = new FormGroup<IAnswerMSForm>({\r\n alternativeList: new FormArray<FormControl<boolean>>([])\r\n })\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n const alternativeList = this.alternativeList();\r\n const answerAsArray: Array<number> = Array.isArray(this.control.value) ? this.control.value : [];\r\n const maxCount = this.alternativeMaxAnswersCount();\r\n this.answerMSForm.controls.alternativeList.clear({emitEvent: false});\r\n alternativeList.forEach( alt => {\r\n const control = new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n\r\n //У альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n control.valueChanges.pipe(\r\n filter(value => value),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe( {\r\n next: () => this.#uncheckControlsWithOtherGroup(alt.GroupNo)\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.push(control, {emitEvent: false});\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.valueChanges.pipe(\r\n map((_) => {\r\n const checkedArray = this.answerMSForm.controls.alternativeList.controls.map(c => c.value) ?? [];\r\n return this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => checkedArray[index] )\r\n }),\r\n tap(answerArray => this.#disableExtraControls(answerArray.length, maxCount)),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n });\r\n \r\n this.#ref.detectChanges();\r\n }\r\n\r\n //отжимает контролы у которых отличается номер группы\r\n #uncheckControlsWithOtherGroup(groupNumber: number): void {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в answerMSForm.controls.alternativeList\r\n .filter(data => data.alternative.GroupNo !== groupNumber); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = this.answerMSForm.controls.alternativeList.at(data.index);\r\n altControl.patchValue(false, {emitEvent: false})\r\n })\r\n }\r\n \r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(currentCount:number, maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0) {\r\n return\r\n }\r\n this.alternativeList().forEach((_, altIndex) => {\r\n const isDisable = currentCount >= maxCount;\r\n const control = this.answerMSForm.controls.alternativeList.at(altIndex);\r\n if (isDisable) {\r\n //надо дизейблить те которые не выбраны\r\n if (!control.value) {\r\n control.disable({emitEvent: false})\r\n }\r\n } else {\r\n //лимита нет, можно выбирать все\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n }\r\n}\r\n","<ng-container [formGroup]=\"answerMSForm\">\r\n\r\n <div\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n formArrayName=\"alternativeList\">\r\n @for (alt of answerMSForm.controls.alternativeList.controls; track alt; let indx = $index) {\r\n <mat-checkbox\r\n #tablet_alt\r\n [formControl]=\"alt\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n (change)=\"onAlternativeClick.emit(alternativeList()[indx].Value)\"\r\n class=\"alternative-ss-ms tp-survey-checkbox\">\r\n @if (alternativeList()[indx].IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <div class=\"container-caption\" [class.container-image]=\"!!alternativeList()[indx].BackGround.Image\">\r\n @if (alternativeList()[indx].BackGround.Image) {\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alternativeList()[indx].BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alternativeList()[indx].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {AdditionalAnswerCaptionPosition} from '../../../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../../../tp.survey.enum';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAdditionalAnswerCaptionPosition]',\r\n})\r\nexport class AdditionalAnswerCaptionPositionDirective{\r\n tpSurveyAdditionalAnswerCaptionPosition = input<AdditionalAnswerCaptionPosition>();\r\n tpSurveyAdditionalAnswerType = input<AdditionalAnswerType>();\r\n @HostBinding(\"class.caption-align-bottom\") public get classBottom() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'bottom';\r\n }\r\n @HostBinding(\"class.caption-align-top\") public get classTop() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'top';\r\n }\r\n @HostBinding(\"class.caption-align-left\") public get classLeft() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'left';\r\n }\r\n @HostBinding(\"class.caption-align-right\") public get classRight() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'right';\r\n }\r\n\r\n @HostBinding(\"class.answer-type-number\") public get classTypeNumber() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatNumber;\r\n }\r\n\r\n @HostBinding(\"class.answer-type-text\") public get classTypeText() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatText;\r\n }\r\n\r\n @HostBinding(\"class.answer-type-boolean\") public get classTypeBoolean() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatBoolean;\r\n }\r\n}\r\n","import {Component, forwardRef, input,} from '@angular/core';\r\nimport {FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\nimport {CdkTextareaAutosize} from '@angular/cdk/text-field';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {AdditionalAnswerCaptionPositionDirective} from './directive/additional.answer.caption.position/additional.answer.caption.position.directive';\r\nimport {AdditionalAnswer, AdditionalAnswerCaptionPosition} from '../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-additional',\r\n templateUrl: './answer.additional.component.html',\r\n styleUrls: ['./answer.additional.component.scss'],\r\n imports: [\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule,\r\n AdditionalAnswerCaptionPositionDirective,\r\n CdkTextareaAutosize,\r\n MatCheckbox,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerAdditionalComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerAdditionalComponent { //ControlValueAccessor\r\n // control = input.required<FormControl<AdditionalAnswer>>();\r\n control = input.required<FormControl<AdditionalAnswer>>();\r\n answerType = input.required<AdditionalAnswerType>()\r\n caption = input<SafeHtml>('');\r\n numberMinValue = input<number | null>(null);\r\n numberMaxValue = input<number | null>(null);\r\n textMultiline = input<boolean>(false);\r\n captionPosition = input<AdditionalAnswerCaptionPosition>('top');\r\n additionalAnswerType = AdditionalAnswerType;\r\n}\r\n","<div class=\"container-main\" [tpSurveyAdditionalAnswerCaptionPosition]=\"captionPosition()\" [tpSurveyAdditionalAnswerType]=\"answerType()\" >\r\n <span [innerHTML]= \"caption()\" class=\"answer-caption survey-object-caption\"></span>\r\n @switch (answerType()) {\r\n @case (additionalAnswerType.aatNumber) {\r\n <mat-form-field class=\"tp-survey-input\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"control()\" matInput [step]=\"1\" [min]=\"numberMinValue()\" [max]=\"numberMaxValue()\" type=\"number\">\r\n </mat-form-field>\r\n }\r\n\r\n @case (additionalAnswerType.aatText) {\r\n <mat-form-field appearance=\"outline\" class=\"tp-survey-input\" subscriptSizing=\"dynamic\">\r\n @if (textMultiline()) {\r\n <textarea\r\n [formControl]=\"control()\"\r\n cdkAutosizeMaxRows=\"5\"\r\n cdkAutosizeMinRows=\"3\"\r\n cdkTextareaAutosize matInput>\r\n </textarea>\r\n } @else {\r\n <input [formControl]=\"control()\" matInput type=\"text\">\r\n }\r\n </mat-form-field>\r\n }\r\n @case (additionalAnswerType.aatBoolean) {\r\n <mat-checkbox\r\n [formControl]=\"control()\"\r\n [class.answer-checkbox-center] = \"captionPosition() === 'left' || captionPosition() === 'right'\"\r\n class=\"tp-survey-checkbox\">\r\n </mat-checkbox>\r\n }\r\n }\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-end',\r\n template: '',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerEndComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\n\r\nexport class AnswerEndComponent extends AnswerMasterComponent<number>{\r\n}\r\n","import {Directive, ElementRef, OnInit} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tpSurveyFocusAndSelect]',\r\n})\r\nexport class FocusAndSelectDirective implements OnInit{\r\n constructor(private el: ElementRef) {\r\n if (!el.nativeElement['focus']) {\r\n throw new Error('Element does not accept focus.');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n const input: HTMLInputElement = this.el.nativeElement as HTMLInputElement;\r\n if ('focus' in input) {\r\n input.focus();\r\n input.select();\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, input} from '@angular/core';\nimport {FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatFormField, MatPrefix} from '@angular/material/form-field';\nimport {MatInput} from '@angular/material/input';\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\nimport {MatButton} from '@angular/material/button';\n\n@Component({\n selector: 'tp-survey-answer-ol',\n templateUrl: './answer.ol.component.html',\n styleUrls: ['./answer.ol.component.scss'],\n imports: [\n FocusAndSelectDirective,\n FormsModule,\n MatFormField,\n MatInput,\n ReactiveFormsModule,\n MatPrefix,\n MatButton\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerOLComponent),\n multi: true\n },\n ]\n})\nexport class AnswerOLComponent extends AnswerMasterComponent<number | 'skip'>{\n telephoneInput= input<boolean>(false);\n canSkip= input<boolean>(false);\n}\n","<div class=\"container-main\">\r\n @if (telephoneInput()) {\r\n <mat-form-field appearance=\"outline\">\r\n <input\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n matInput\r\n [formControl]=\"control\" tpSurveyFocusAndSelect>\r\n <span matTextPrefix>+380 </span>\r\n </mat-form-field>\r\n @if(canSkip()) {\r\n <button mat-button (click)=\"skipClick()\">Пропустити</button>\r\n }\r\n\r\n } @else {\r\n <mat-form-field appearance=\"outline\" class=\"input-text\">\r\n <textarea rows=\"10\" matInput [formControl]=\"control\" tpSurveyFocusAndSelect></textarea>\r\n </mat-form-field>\r\n }\r\n</div>\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormArray, FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormArray',\r\n})\r\nexport class AsFormArrayPipe implements PipeTransform {\r\n\r\n transform(value: any): FormArray<FormControl<boolean>> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormControl',\r\n})\r\nexport class AsFormControlPipe implements PipeTransform {\r\n\r\n transform(value: any): FormControl<number> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {AfterViewInit, booleanAttribute, ChangeDetectorRef, Component, forwardRef, inject, input, numberAttribute} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AsFormArrayPipe} from './pipe/as.form.array/as.form.array.pipe';\r\nimport {AsFormControlPipe} from './pipe/as.form.control/as.form.control.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {AnswerSlType} from '../../../tp.survey.type';\r\nimport {IdbAlternative, IdbQuestion, IdbSection} from '../../../tp.survey.interface';\r\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\r\n\r\ninterface IAnswerSLForm {\r\n [key: string]: FormArray<FormControl<boolean>> | FormControl<number> | FormControl<Array<number>>\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-sl',\r\n templateUrl: './answer.sl.component.html',\r\n styleUrls: ['./answer.sl.component.scss'],\r\n imports: [\r\n MultiLangObjectToHtmlPipe,\r\n MatCheckbox,\r\n ReactiveFormsModule,\r\n KeyValuePipe,\r\n AsFormArrayPipe,\r\n MatRadioButton,\r\n MatRadioGroup,\r\n AsFormControlPipe,\r\n GetQuestionImageBackgroundCssSizePipe\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSLComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerSLComponent extends AnswerMasterComponent<AnswerSlType> implements AfterViewInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n sectionList = input.required<Array<IdbSection>>();\r\n multiSelect = input(false, {transform: booleanAttribute});\r\n maxCount = input(0, {transform: numberAttribute});\r\n answerSLForm = new FormGroup<IAnswerSLForm>({})\r\n readonly #ref = inject(ChangeDetectorRef);\r\n ngAfterViewInit(): void {\r\n const multiSelect = this.multiSelect();\r\n const answer = this.control.value;\r\n this.sectionList().forEach(section => {\r\n const sectionAnswer = answer ? answer[section.SectionGuid] : [];\r\n const sectionControl = this.#createSectionRowControl(multiSelect, sectionAnswer );\r\n this.answerSLForm!.addControl(section.SectionGuid.toString(), sectionControl, );\r\n })\r\n\r\n this.answerSLForm.valueChanges.pipe(\r\n map((fullAnswer) => {\r\n let res: Record<string, Array<number> | number> = {};\r\n //Если в настройках указали мультивыбор для секции, то в данной реализации, при изменении форма возвращает массив boolean?, true/false, нажата отжата.\r\n //Этот массив нужно конвертировать в массив number, в котором будут только нажатые альтернативы.\r\n if (this.multiSelect()) {\r\n Object.entries(fullAnswer).forEach(([key]) => {\r\n const sectionAnswerCheckedArray = this.answerSLForm.get(key)?.value;\r\n res[key] = this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => sectionAnswerCheckedArray[index] )\r\n });\r\n } else {\r\n //если единичный выбор для секции, то ответ просто исходное значение.\r\n res = fullAnswer as Record<string, number>;\r\n }\r\n return res;\r\n }),\r\n tap(() => this.#disableExtraControls(this.maxCount())),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n });\r\n this.#ref.detectChanges();\r\n }\r\n\r\n #createSectionRowControl(multiSelect: boolean, answers: number | Array<number>): FormArray<FormControl<boolean>> | FormControl<number> {\r\n if (multiSelect) {\r\n const msArray = new FormArray<FormControl<boolean>>([]);\r\n const answerAsArray = Array.isArray(answers) ? Array.from(answers) : [];\r\n\r\n this.alternativeList().forEach((alt) => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n msArray.push(control, {emitEvent: false});\r\n\r\n //В режиме multiSelect у альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n //Логика такая же как и в ms вопросе\r\n control.valueChanges.pipe(\r\n filter(value => value && this.multiSelect()),\r\n takeUntilDestroyed(this.destroyRef),\r\n ).subscribe({\r\n next: () => {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в msArray\r\n .filter(data => data.alternative.GroupNo !== alt.GroupNo); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = msArray.controls.at(data.index);\r\n altControl!.patchValue(false, {emitEvent: false})\r\n });\r\n }\r\n })\r\n });\r\n return msArray;\r\n } else {\r\n return new FormControl<number>(Number(answers), {nonNullable: true});\r\n }\r\n }\r\n\r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0 || !this.multiSelect()) {\r\n return\r\n }\r\n\r\n this.sectionList().forEach(sec => {\r\n const sectionControlArray = this.answerSLForm.get(sec.SectionGuid.toString()) as FormArray<FormControl<boolean>>;\r\n const values = sectionControlArray.value;\r\n const checkedCount = values.filter(v => v).length;\r\n\r\n sectionControlArray.controls.forEach(control => {\r\n if (checkedCount >= maxCount && !control.value) {\r\n control.disable({emitEvent: false})\r\n } else {\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n\r\n })\r\n }\r\n}\r\n","<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 <div class=\"container-caption-desktop\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"survey-object-caption\"></span>\r\n @if (alt.BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n </div>\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()\" class=\"survey-object-caption\"></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()\" class=\"survey-object-caption\"></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 survey-object-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 <div class=\"container-caption-mobile\">\r\n @if (alternativeList()[altIndex].BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alternativeList()[altIndex].BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\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 <div class=\"container-caption-mobile\">\r\n @if (alt.BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {Component, forwardRef, input} from '@angular/core';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\n selector: 'tp-survey-answer-od',\n templateUrl: './answer.od.component.html',\n styleUrls: ['./answer.od.component.scss'],\n imports: [\n MatFormField,\n ReactiveFormsModule,\n FocusAndSelectDirective,\n MatInput,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerODComponent),\n multi: true\n },\n ]\n})\r\nexport class AnswerODComponent extends AnswerMasterComponent<number> {\r\n minValue = input<number>(1);\r\n maxValue = input<number | null>(null);\r\n}\r\n","<div class=\"container-main\">\r\n <mat-form-field appearance=\"outline\" class=\"input-od-number\">\r\n <input [formControl]=\"control\" [min]=\"minValue()\" [max]=\"maxValue()\" tpSurveyFocusAndSelect matInput type=\"number\">\r\n </mat-form-field>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbAdditionalAnswer} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getAdditionalValueByValue',\r\n})\r\nexport class GetAdditionalValueByValuePipe implements PipeTransform {\r\n\r\n transform(value: number | string, additionalAnswerList: Array<IdbAdditionalAnswer>): IdbAdditionalAnswer | undefined {\r\n const val = (typeof value === 'string') ? Number(value): value;\r\n return additionalAnswerList.find(aa => aa.Value === val);\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {AbstractControl, FormControl, FormGroup} from '@angular/forms';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'keyValues',\r\n})\r\nexport class KeyValuesPipe implements PipeTransform {\r\n\r\n transform(controls: FormGroup<{[key: string]: AbstractControl<AdditionalAnswer>}>): Array<{name: string, control: FormControl<AdditionalAnswer>}> {\r\n return Object.entries(controls).map(([key, control]) =>({\r\n name: key,\r\n control: control,\r\n }));\r\n }\r\n\r\n}\r\n","import {Component, input, output} from '@angular/core';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbBaseParamsLanguage} from '../../../tp.survey.interface';\r\nimport {MatButton} from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-lang',\r\n templateUrl: './answer.lang.component.html',\r\n styleUrls: ['./answer.lang.component.scss'],\r\n imports: [\r\n MatButton,\r\n ]\r\n})\r\n\r\nexport class AnswerLangComponent extends AnswerMasterComponent<number>{\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n onLanguageChange = output<number>();\r\n}\r\n","@for (language of languageList(); track $index) {\r\n <button mat-button (click)=\"onLanguageChange.emit(language.Value)\">\r\n {{language.Caption}}\r\n </button>\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal} from '@angular/core';\r\n\r\nimport {\r\n additionalAnswerDefaultValidator,\r\n additionalAnswerNumberValidator,\r\n answerDefaultValidator,\r\n answerMSValidator,\r\n answerODValidator,\r\n answerOLValidator,\r\n answerSlValidator,\r\n answerSSValidator\r\n} from './container.answer.validator';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerSSComponent} from '../answer.ss/answer.ss.component';\r\nimport {AnswerInfoComponent} from '../answer.info/answer.info.component';\r\nimport {AnswerMSComponent} from '../answer.ms/answer.ms.component';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerAdditionalComponent} from '../answer.additional/answer.additional.component';\r\nimport {AnswerEndComponent} from '../answer.end/answer.end.component';\r\nimport {debounceTime, tap} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerOLComponent} from '../answer.ol/answer.ol.component';\r\nimport {AnswerSLComponent} from '../answer.sl/answer.sl.component';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {AdditionalAnswer, AnswerSlType, AnswerT, TFindVariableVoid} from '../../../tp.survey.type';\r\nimport {AnswerODComponent} from '../answer.od/answer.od.component';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbAdditionalAnswer, IdbAlternative, IdbBaseParamsLanguage, IdbQuestion, IdbSection} from '../../../tp.survey.interface';\r\nimport {AdditionalAnswerType, QuestionsType, ViewModel} from '../../../tp.survey.enum';\r\nimport {TpSurveyLogicService} from '../../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {GetAdditionalValueByValuePipe} from '../../../pipe/get.additional.value.by.value/get.additional.value.by.value.pipe';\r\nimport {KeyValuesPipe} from '../../../pipe/key.values/key.values.pipe';\r\nimport {AnswerLangComponent} from '../answer.lang/answer.lang.component';\r\n\r\ninterface IAnswerForm {\r\n answer: FormControl<AnswerT>;\r\n additionalAnswers: FormGroup<{\r\n [key: string]: FormControl<AdditionalAnswer>\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-container-answer',\r\n imports: [\r\n AnswerODComponent,\r\n ReactiveFormsModule,\r\n AnswerSSComponent,\r\n AnswerInfoComponent,\r\n AnswerMSComponent,\r\n AnswerAdditionalComponent,\r\n MultiLangObjectToHtmlPipe,\r\n AnswerEndComponent,\r\n AnswerOLComponent,\r\n AnswerSLComponent,\r\n GetAdditionalValueByValuePipe,\r\n KeyValuesPipe,\r\n AnswerLangComponent\r\n ],\r\n templateUrl: './container.answer.component.html',\r\n styleUrl: './container.answer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ContainerAnswerComponent implements OnInit{\r\n findVariable = input.required<TFindVariableVoid>();\r\n question = input.required<IdbQuestion>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n answers = input<ICurrentQuestionAnswer>();\r\n developerMode = input<boolean>(false);\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n repositoryPath = input<string>('');\r\n visibleAlternativeList = signal<Array<IdbAlternative>>([]);\r\n visibleSectionList = signal<Array<IdbSection>>([]);\r\n visibleAdditionalAnswerList = signal<Array<IdbAdditionalAnswer>>([]);\r\n logicChanged = output<Record<string, any>>();\r\n answerChanged = output<AnswerChange>();\r\n onLanguageChange = output<number>();\r\n questionsType = QuestionsType;\r\n answerForm: FormGroup<IAnswerForm>;\r\n readonly AdditionalAnswerType = AdditionalAnswerType;\r\n #alternativeSequenceClicks: Array<[number, number]> = [];\r\n readonly #logic = inject(TpSurveyLogicService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.answerForm = new FormGroup<IAnswerForm>({\r\n answer: new FormControl<AnswerT>(null ),\r\n additionalAnswers: new FormGroup({}),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const answerValue = this.answers()?.question?.AnswerValue ?? null;\r\n const answerValueClear = answerValue === MISSING_VALUE ? null : answerValue;\r\n this.answerForm.patchValue({\r\n answer: answerValueClear,\r\n additionalAnswers: this.answers()?.question?.AnswerAdditional\r\n }, {emitEvent:false});\r\n\r\n this.#alternativeSequenceClicks = this.answers()?.question?.AlternativeSequenceClicks ?? [];\r\n this.#updateAlternativesAndSections();\r\n this.#updateAdditionalAnswers(true);\r\n this.#addValidator();\r\n\r\n this.answerForm.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.#emitLogicChanged()), //шлём новые логические переменные(может обновиться список additionalAnswers)\r\n tap(() => this.#updateAdditionalAnswers(false)), //перестраиваем additionalAnswers\r\n map(values => {\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n const additionalAnswerNormalized: Record<number, AdditionalAnswer> = {};\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const isVisible = this.visibleAdditionalAnswerList().find(faa => faa.Value === aa.Value);\r\n if (isVisible) {\r\n additionalAnswerNormalized[aa.Value] = !!values.additionalAnswers ? values.additionalAnswers[aa.Value]! : MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.enable({emitEvent: false})\r\n } else {\r\n additionalAnswerNormalized[aa.Value] = MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.disable({emitEvent: false})\r\n }\r\n });\r\n return {\r\n answer:values.answer,\r\n additionalAnswers: additionalAnswerNormalized,\r\n }\r\n }),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe(data => {\r\n this.answerChanged.emit({\r\n guid: this.question().QuestionGuid,\r\n isComplete: this.answerForm.valid,\r\n answer: data.answer!,\r\n additionalAnswers: data.additionalAnswers as Record<number, AdditionalAnswer>,\r\n logicVars: this.#getLogicVars(),\r\n viewedAlternativeValues: this.visibleAlternativeList().map(alt => alt.Value),\r\n viewedSectionGuids: this.visibleSectionList().map(alt => alt.SectionGuid),\r\n alternativeSequenceClicks: Array.from(this.#alternativeSequenceClicks)\r\n });\r\n });\r\n this.#setDefaultAnswers();\r\n \r\n /*Update 19.03.2025\r\n Когда нажимают кнопку back, ответы остаются, но логические переменные удаляются, см. TpSurveyCoreService.clearAnswerForCurrentQuestion\r\n Но если респондент ничего в ответе не меняет и нажимает кнопку далее, то логические переменные не обновляются.\r\n Поэтому если ответ на вопрос не равен MISSING_VALUE(-97), то нужно обновить логические переменные\r\n */\r\n if (answerValue !== MISSING_VALUE){\r\n this.#emitLogicChanged();\r\n }\r\n }\r\n\r\n #addValidator(): void{\r\n const question = this.question();\r\n this.answerForm.controls.answer.addValidators(answerDefaultValidator());\r\n\r\n switch (question.QuestionType){\r\n case QuestionsType.eqSS: {\r\n this.answerForm.controls.answer.addValidators(answerSSValidator());\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList(), this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOD: {\r\n this.answerForm.controls.answer.addValidators(answerODValidator(question.ODMinValue, question.ODMaxValue));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n this.answerForm.controls.answer.addValidators(answerOLValidator(question.OLTypeTel, question.CanSkip ?? false));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n this.answerForm.controls.answer.addValidators(answerSlValidator(this.question().RequireAllAnswers, this.question().SLSectionMinAnswersCount, this.visibleSectionList()));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n #setDefaultAnswers(): void{\r\n const question = this.question();\r\n const isLang = question.QuestionType === QuestionsType.eqLANG;\r\n const isInfo = question.QuestionType === QuestionsType.eqINFO;\r\n const isEnd = question.QuestionType === QuestionsType.eqEND;\r\n const isSSMS = (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) && (this.visibleAlternativeList().length === 0);\r\n\r\n if (isInfo || isEnd || isSSMS || isLang) {\r\n let defaultAnswer;\r\n switch (question.QuestionType) {\r\n case QuestionsType.eqMS: defaultAnswer = []; break;\r\n case QuestionsType.eqSS: defaultAnswer = 0; break;\r\n default: defaultAnswer = 1;\r\n }\r\n\r\n //может возникнуть ситуация, когда нет альтернатив для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n this.answerForm.patchValue({\r\n answer: defaultAnswer\r\n }, {emitEvent: true});\r\n }\r\n }\r\n\r\n\r\n //собираем все логические переменные, которые генерит вопрос\r\n #getLogicVars(): Record<string, any>{\r\n const questionType = this.question().QuestionType;\r\n const answer = this.answerForm.controls.answer.value;\r\n const logicObj: Record<string, any> = {};\r\n\r\n //переменная самого вопроса\r\n const questionSysName = this.question().SysName;\r\n\r\n //ответ на основной вопрос\r\n logicObj[questionSysName] = this.answerForm.value.answer;\r\n\r\n switch (questionType) {\r\n case QuestionsType.eqSS: {\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answer === alt.Value ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n const answers = Array.isArray(this.answerForm.value.answer) ? this.answerForm.value.answer : [];\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answers.find(val => val === alt.Value) ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n //логическая переменная для OL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n /*Тут сложнее чем в остальных типах вопросов.\r\n * 1. Логическая переменная для SL вопроса\r\n * 2. Логическая переменная для каждой секции\r\n * 3. Логические переменные для каждой альтернативы + секции\r\n * */\r\n\r\n //1. Логическая переменная для SL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n\r\n //Каждая секция должны иметь свою логическую переменную, array<number> если multiselect, number если multiselect = false, -97 если секция не была показана.\r\n //+ для каждой секции нужно добавлять логические переменные для каждой альтернативы. 1 нажата, 0 отжата, -97 если альтернатива не была показана.\r\n const fullAnswers = this.answerForm.value.answer as AnswerSlType;\r\n const visibleAlternativeList = this.visibleAlternativeList().map(alt => alt.Value);\r\n this.question().Sectionlist.forEach(section => {\r\n const sectionSysName = section.SysName;\r\n\r\n //если undefined, то заменим на -97 это значит секция не была показана.\r\n const sectionAnswer = fullAnswers[section.SectionGuid.toString()] ?? MISSING_VALUE;\r\n\r\n //2. добавляем переменную самой секции.\r\n logicObj[sectionSysName] = sectionAnswer;\r\n this.question().Alternativelist.forEach(alternative => {\r\n\r\n const sectionAlternativeSysName = `${sectionSysName}${alternative.SysName}`;\r\n //секция не была показана, значит альтернативы тоже\r\n if (sectionAnswer === MISSING_VALUE) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //сначала нужно проверить была ли показана альтернатива, если нет\r\n //альтернативы нет в списке показанных\r\n if (!visibleAlternativeList.find(visibleVal => visibleVal === alternative.Value)) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //альтернативы есть в списке показанных, нужно узнать была нажата или нет.\r\n const isPressed = Array.isArray(sectionAnswer) ? sectionAnswer.includes(alternative.Value) : sectionAnswer === alternative.Value;\r\n logicObj[sectionAlternativeSysName] = isPressed ? 1 : 0;\r\n }\r\n }\r\n });\r\n });\r\n break;\r\n }\r\n }\r\n\r\n //логические переменные дополнительных вопросов.\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const additionalAnswer = !!this.answerForm.value.additionalAnswers ? this.answerForm.value.additionalAnswers![aa.Value.toString()] : MISSING_VALUE;\r\n const additionalAnswerSysName = `${questionSysName}${aa.SysName}`;\r\n if (additionalAnswer === MISSING_VALUE) {\r\n //дополнительный ответ не был показан, (скрыт по логике)\r\n logicObj[additionalAnswerSysName] = MISSING_VALUE;\r\n } else {\r\n //если на вопрос не отвечали(null), этот самый null и добавляем как ответ.\r\n if (additionalAnswer === null) {\r\n logicObj[additionalAnswerSysName] = null;\r\n } else {\r\n //если вопрос типа текст, как переменную добавим 1, в остальных случаях сам ответ.\r\n logicObj[additionalAnswerSysName] = aa.AnswerType === AdditionalAnswerType.aatText ? 1 : additionalAnswer;\r\n }\r\n }\r\n });\r\n return logicObj;\r\n }\r\n\r\n #updateAlternativesAndSections(): void{\r\n const developerMode = this.developerMode();\r\n //фильтруем альтернативы,\r\n const filteredAlternativeList = this.question().Alternativelist.filter(alt => developerMode || this.#logic.executeLogic(alt.EnableExpression));\r\n\r\n //фильтруем секции,\r\n const filteredSectionList = this.question().Sectionlist.filter(sec => developerMode || this.#logic.executeLogic(sec.EnableExpression));\r\n\r\n //меняем расположение тех, которые этого требуют и обновляем глобальную переменную\r\n this.visibleAlternativeList.set(this.#arrangeRotatedList(filteredAlternativeList));\r\n //для секций тоже самое\r\n this.visibleSectionList.set(this.#arrangeRotatedList(filteredSectionList));\r\n }\r\n\r\n #updateAdditionalAnswers(isInit: boolean): void{\r\n const developerMode = this.developerMode();\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n\r\n if (isInit) {\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n switch (aa.AnswerType) {\r\n case AdditionalAnswerType.aatNumber: formGroup.addControl(aa.Value.toString(), new FormControl<number | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired), additionalAnswerNumberValidator(aa.IsRequired, aa.NumberMinValue, aa.NumberMaxValue)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatText: formGroup.addControl(aa.Value.toString(), new FormControl<string | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatBoolean: formGroup.addControl(aa.Value.toString(), new FormControl<boolean | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n }\r\n });\r\n return\r\n }\r\n\r\n //фильтруем,\r\n const filteredAdditionalAnswerList = this.question().AdditionalAnswerlist.filter(addAnswer => developerMode || this.#logic.executeLogic(addAnswer.EnableExpression));\r\n\r\n //обновляем глобальный список\r\n this.visibleAdditionalAnswerList.set(filteredAdditionalAnswerList);\r\n }\r\n\r\n onAlternativeClick(value: number) {\r\n this.#alternativeSequenceClicks.push([value, new Date().getTime()]);\r\n }\r\n\r\n #arrangeRotatedList<T extends IdbAlternative | IdbSection>(inputArray: Array<T>): Array <T> {\r\n //У каждой альтернативы и секции есть признак Rotation, который позволяем менять порядок отображения альтернативы или секции\r\n //если он true, то альтернатива и секция должна поменять расположение\r\n const resArray: Array<T | number> = [];\r\n\r\n //размер массива\r\n const inputArrayLength = inputArray.length;\r\n\r\n //проходимся по каждому элементу входного массива, и копируем в результирующий, Если Rotation, копируем его индекс, если Rotation не указан, копируем сам объект\r\n inputArray.forEach((obj, index) => resArray.push(obj.Rotation ? index : obj));\r\n\r\n //теперь с помощью рандома, расставим остальные эл-ты\r\n resArray.forEach((obj, index, array) => {\r\n if ((typeof obj === 'number') && (obj >= 0)) {\r\n while (true) {\r\n //если в новом массиве нет элемента из старого массива по random индексу, тогда копируем в новый массив старый елемент в новый адрес\r\n const newIndex = Math.floor( Math.random() * inputArrayLength );\r\n if (array.indexOf(inputArray[newIndex]) === -1) {\r\n array[index] = inputArray[newIndex];\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return resArray as Array<T>;\r\n }\r\n \r\n #emitLogicChanged(): void{\r\n this.logicChanged.emit(this.#getLogicVars())\r\n }\r\n}\r\n","<div class=\"container-main\" [formGroup]=\"answerForm\">\r\n @switch (question().QuestionType) {\r\n\r\n @case (questionsType.eqLANG) {\r\n <tp-survey-answer-lang\r\n [languageList]=\"languageList()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [language]=\"2\"\r\n [viewModel]=\"viewModel()\"\r\n (onLanguageChange)=\"onLanguageChange.emit($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqINFO) {\r\n <tp-survey-answer-info\r\n formControlName=\"answer\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"/>\r\n }\r\n\r\n @case (questionsType.eqSS) {\r\n <tp-survey-answer-ss\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqMS) {\r\n <tp-survey-answer-ms\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [alternativeMaxAnswersCount]=\"question().AlternativeMaxAnswersCount\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqOD) {\r\n <tp-survey-answer-od\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [minValue]=\"question().ODMinValue\"\r\n [maxValue]=\"question().ODMaxValue\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqOL) {\r\n <tp-survey-answer-ol\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [telephoneInput]=\"question().OLTypeTel\"\r\n [canSkip]=\"question().CanSkip\"/>\r\n }\r\n\r\n @case (questionsType.eqSL) {\r\n <tp-survey-answer-sl\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n [sectionList]=\"visibleSectionList()\"\r\n [multiSelect]=\"question().MultiSelect\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [maxCount]=\"this.question().SLSectionMaxAnswersCount\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqEND) {\r\n <tp-survey-answer-end\r\n formControlName=\"answer\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n />\r\n }\r\n }\r\n\r\n <div class=\"container-additional-answer\">\r\n @for (addAnswer of answerForm.controls.additionalAnswers.controls | keyValues; track addAnswer) {\r\n @if (addAnswer.name | getAdditionalValueByValue:visibleAdditionalAnswerList(); as additionalAnswerObject ) {\r\n <tp-survey-answer-additional\r\n [control]=\"addAnswer.control\"\r\n [class.full-width]=\"additionalAnswerObject.AnswerType===AdditionalAnswerType.aatText\"\r\n [answerType]=\"additionalAnswerObject.AnswerType\"\r\n [caption]=\"additionalAnswerObject.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [numberMinValue]=\"additionalAnswerObject.NumberMinValue\"\r\n [numberMaxValue]=\"additionalAnswerObject.NumberMaxValue\"\r\n [textMultiline]=\"additionalAnswerObject.TextMultiline\"\r\n [captionPosition]=\"additionalAnswerObject.CaptionPosition\"/>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbBaseParamsLanguage} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getActiveLanguage',\r\n})\r\nexport class GetActiveLanguagePipe implements PipeTransform {\r\n\r\n transform(languageList?: Array<IdbBaseParamsLanguage>, languageId?: number): IdbBaseParamsLanguage | undefined {\r\n return Array.isArray(languageList) ? languageList.find(langObj => langObj.Value === languageId && langObj.isActive) : undefined;\r\n }\r\n\r\n}\r\n","import {Directive, effect, ElementRef, input} from '@angular/core';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\n\r\n@Directive({\r\n selector: '[tpSurveyUpdateFontSize]',\r\n})\r\nexport class UpdateFontSizeDirective{\r\n viewModel = input.required<ViewModel>( {alias: 'tpSurveyUpdateFontSize'});\r\n constructor(private readonly _element: ElementRef) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const containerWidth = this._element.nativeElement.clientWidth;\r\n const containerHeight = this._element.nativeElement.clientHeight;\r\n const proportion: number = Math.min(containerWidth / BASE_WIDTH, containerHeight / BASE_HEIGHT );\r\n Array.from(this._element.nativeElement.children).forEach((el) => (el as HTMLElement).style.fontSize = `${proportion * 100}%`);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import {LOGIC_FUNC_TEXT} from './tp.survey.const';\r\n\r\nexport function executeLogicExpression(expression: string, vars: Record<string, unknown>): Function {\r\n return new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(vars);\r\n}\r\n\r\n","import {IdbQuestionaryQuota, IdbQuestionaryQuota2dObject} from '../../tp.survey.interface';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {executeLogicExpression} from '../../tp.survey.method';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\ntype QuotaCalculationResult = {\r\n name: string;\r\n guid: number;\r\n} | {\r\n name: null;\r\n guid2d: number;\r\n} | null;\r\n\r\nexport class SurveyQuotas {\r\n #completedQuota: {name: string | null; guid: number| null; guid2d: number| null} = {name: null, guid: null, guid2d: null};\r\n #quotas: Array<IdbQuestionaryQuota> = [];\r\n #quotas2d: Array<IdbQuestionaryQuota2dObject> = [];\r\n #quotaLimitDestinationQuestionGuid: number = -1;\r\n #quotaLimitDestinationQuestionNum: number = -1;\r\n\r\n setQuotas(quotas1d: Array<IdbQuestionaryQuota> = [], quotas2d: Array<IdbQuestionaryQuota2dObject> = [], quotaLimitDestinationQuestionGuid: number = -1, destinationQuestionNum: number = -1){\r\n this.#quotas = quotas1d;\r\n this.#quotas2d = quotas2d;\r\n this.#quotaLimitDestinationQuestionGuid = quotaLimitDestinationQuestionGuid;\r\n this.#quotaLimitDestinationQuestionNum = destinationQuestionNum;\r\n }\r\n\r\n guidIsDestinationQuestion(guid: number): boolean{\r\n return this.#quotaLimitDestinationQuestionGuid === guid;\r\n }\r\n\r\n\r\n get quotaIsCompleted(): boolean {\r\n return this.#completedQuota && (!!this.#completedQuota.guid || !!this.#completedQuota.guid2d) ;\r\n }\r\n\r\n get destinationQuestionGuid(): number {\r\n return this.#quotaLimitDestinationQuestionGuid\r\n }\r\n\r\n get quotaCount(): number {\r\n const quotas = this.#quotas && Array.isArray(this.#quotas) ? this.#quotas.length : 0;\r\n const quotas2d = this.#quotas2d && Array.isArray(this.#quotas2d) ? this.#quotas2d.length : 0;\r\n return quotas + quotas2d;\r\n }\r\n\r\n findFilledQuotas(currentQuestionNum: number, vars: LogicObject, interviewAnswers: Array<Answer>): void {\r\n /*\r\n * Поиск заполненной квоты это очень дорогой процесс. Его нужно оптимизировать по максимуму.\r\n * Перед поиском нужно выполнить ряд проверок.\r\n * Проверка currentQuestionNum <= this.#quotaLimitDestinationQuestionNum Нужна для оптимизации.\r\n * DestinationQuestion Желательно располагать после последнего квотного вопроса, потому что нет смысла постоянно проверять квоты, если вопросы которые используются для расчёта квоты меняться не будут.\r\n * например Квота Q1 + Q2 <= 25. DestinationQuestion нужно делать номером 3 или 4. Потому что как бы респондент не отвечал на последующие вопросы, результат квот не измениться и каждый раз их пересчитывать смысла нет.\r\n */\r\n if (\r\n (this.destinationQuestionGuid > 0) && //Глобально в настройках анкеты должен быть указан вопрос который должен отобразиться при достижении квоты, если его нет, то и искать квоты смысла нет.\r\n (this.quotaCount > 0) && //проверим если у нас вообще квоты\r\n (currentQuestionNum <= this.#quotaLimitDestinationQuestionNum) && // номер текущий вопроса меньше номера вопроса для перехода по достижении квот\r\n (!this.quotaIsCompleted) //и на финал проверим если ли уже заполненная квота, повторно не запускаем\r\n ) {\r\n\r\n new Promise<QuotaCalculationResult>((resolve, reject) => {\r\n if (Array.isArray(this.#quotas)) {\r\n const completedQuota = this.#quotas.find(quota => executeLogicExpression(quota.expression, vars));\r\n if (!!completedQuota) {\r\n return resolve({name: completedQuota.name, guid: completedQuota.quota_guid});\r\n }\r\n }\r\n\r\n if (Array.isArray(this.#quotas2d)) {\r\n const answers = this.#quotas2d.length > 0 ? interviewAnswers.map(a => ({av: a.AnswerValue, qg: a.QuestionGUID}) ) : [];\r\n\r\n const filledQuota2dArray = this.#quotas2d.filter(quotaValues => {\r\n /*\r\n * 2d квоты это всегда таблица. Но может быть иерархия, когда одно значение ответа может включать в себя один или несколько других ответов. Например \"Обл центр\" это 1, а город или село это другой ответ, хотя город и село это разные альтернативы\r\n * */\r\n if (Array.isArray(quotaValues.cqv) && quotaValues.cqv.length > 0) {\r\n /*\r\n * это ветка для случая с иерархией. Тут будет 2 массива.\r\n * В первом будут контролироваться те ответы которое должны совпадать полностью arrayEveryValues\r\n * Во втором arraySomeValue будет проверяться совпадение хотя бы 1 ответа\r\n * */\r\n\r\n const questionGuid = quotaValues.cqv[0].guid;\r\n\r\n const masterQuestion = quotaValues.qs.find( q => q.guid === questionGuid);\r\n const arrayEveryValues = quotaValues.qs.filter(q => q.guid != questionGuid);\r\n\r\n const arraySomeValue = [...quotaValues.cqv, ...[masterQuestion!]];\r\n\r\n const arrayEveryResult = arrayEveryValues.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n const arraySomeResult = arraySomeValue.some(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n //если в обоих массивах совпадают значения значит квота выполнилась\r\n return arrayEveryResult && arraySomeResult;\r\n } else {\r\n //обычный массив значений, в котором должны совпадать все значения\r\n return quotaValues.qs.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n }\r\n });\r\n //если не нашли заполненных квот выходим\r\n if (filledQuota2dArray.length <= 0) {\r\n return;\r\n }\r\n\r\n //ищем квоту которая заполнена и у нее есть условие и оно выполняется.\r\n const quota2dWithExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !!q.exp && executeLogicExpression(q.exp, vars));\r\n\r\n //если квота есть сообщим\r\n if (!!quota2dWithExpression) {\r\n return resolve({name: null, guid2d: quota2dWithExpression.qvg});\r\n }\r\n\r\n //если квоты с Expression нет, ищем квоту которая заполнена и у нее нет условия\r\n const quota2dWithoutExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !q.exp || (typeof q.exp === 'string' && q.exp.trim().length === 0));\r\n if (!!quota2dWithoutExpression) {\r\n return resolve({name: null, guid2d: quota2dWithoutExpression.qvg});\r\n }\r\n }\r\n reject(null)\r\n }).then(quota => {\r\n if (!!quota) {\r\n this.#completedQuota = {\r\n name: quota.name,\r\n guid: 'guid' in quota ? quota.guid : null,\r\n guid2d: 'guid2d' in quota ? quota.guid2d : null,\r\n }\r\n }\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n }\r\n }\r\n}\r\n","import {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\n\r\nexport class Answer implements IQuestionAnswer {\r\n readonly QuestionGUID: number;\r\n readonly QuestionVersion: number;\r\n readonly AnswerAdditional: Record<string, AdditionalAnswer> = {};\r\n readonly ViewedAlternativeValues: Array<number> = [];\r\n readonly ViewedSectionGuids: Array<number> = [];\r\n readonly AlternativeSequenceClicks: Array<[number, number]> = [];\r\n StartedAt = 0;\r\n FinishedAt = 0;\r\n AnswerValue: any = MISSING_VALUE;\r\n answerIsComplete: boolean = false;\r\n constructor(guid: number, version: number = -1) {\r\n this.QuestionGUID = guid;\r\n this.QuestionVersion = version;\r\n }\r\n clear(): void {\r\n this.StartedAt = 0;\r\n this.FinishedAt = 0;\r\n this.AnswerValue = MISSING_VALUE;\r\n this.ViewedAlternativeValues.length = 0;\r\n this.ViewedSectionGuids.length = 0;\r\n this.AlternativeSequenceClicks.length = 0;\r\n for (const key of Object.keys(this.AnswerAdditional)) {\r\n this.AnswerAdditional[Number(key)] = null;\r\n }\r\n }\r\n}\r\n","import {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyInterviewService {\r\n #answerList: Array<Answer> = [];\r\n startedAt: number = 0;\r\n\r\n createAnswer(guid: number, version: number): Answer {\r\n //ишем ответ с таким же номером как и в вопросе\r\n let answer = this.findAnswerByGuid(guid);\r\n\r\n //если ответа с таким номером вопроса нет, создадим\r\n if (!answer) {\r\n answer = new Answer(guid, version)\r\n this.#answerList.push(answer);\r\n }\r\n //вернём то, что создали или то что нашли\r\n return answer;\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this.#answerList.find(a => a.QuestionGUID === guid);\r\n }\r\n\r\n questionIsComplete(guid: number): boolean{\r\n const answer = this.findAnswerByGuid(guid);\r\n return !answer ? false : answer.answerIsComplete;\r\n }\r\n\r\n getAnswerList(): Array<Answer>{\r\n return this.#answerList;\r\n }\r\n\r\n overrideAnswers(answers: Array<IQuestionAnswer>): void{\r\n //не будем трогать вопросы которые = -97\r\n answers.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n const newAnswer = this.#answerList.find(aa => aa.QuestionGUID === oldAnswer.QuestionGUID);\r\n if (!!newAnswer) {\r\n //вернём основной ответ\r\n newAnswer.AnswerValue = oldAnswer.AnswerValue;\r\n\r\n newAnswer.StartedAt = oldAnswer.StartedAt;\r\n newAnswer.FinishedAt = oldAnswer.FinishedAt;\r\n\r\n //С дополнительными ответами сложнее, они помечены readonly. Поэтому сначала удалим, потом добавим\r\n for (const prop of Object.getOwnPropertyNames(newAnswer.AnswerAdditional)) {\r\n delete newAnswer.AnswerAdditional[prop];\r\n }\r\n //добавляем старые значения\r\n for (const [key, value] of Object.entries(oldAnswer.AnswerAdditional)) {\r\n newAnswer.AnswerAdditional[key] = value;\r\n }\r\n\r\n //То же самое с ViewedAlternativeValues и ViewedSectionGuids и AlternativeSequenceClicks. Т.к. они readonly сначала удалим, потом добавим\r\n newAnswer.ViewedAlternativeValues.length = 0;\r\n oldAnswer.ViewedAlternativeValues.forEach(oa => newAnswer.ViewedAlternativeValues.push(oa));\r\n\r\n newAnswer.ViewedSectionGuids.length = 0;\r\n oldAnswer.ViewedSectionGuids.forEach(oa => newAnswer.ViewedSectionGuids.push(oa));\r\n\r\n newAnswer.AlternativeSequenceClicks.length = 0;\r\n oldAnswer.AlternativeSequenceClicks.forEach(oa => newAnswer.AlternativeSequenceClicks.push(oa));\r\n }\r\n });\r\n }\r\n}\r\n","import {DestroyRef, inject, Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {BehaviorSubject, filter, Observable, Subject} from 'rxjs';\r\nimport {SurveyQuotas} from '../tp.servey.quota/tp.survey.quota';\r\nimport {TpSurveyLogicService} from '../tp.survey.logic/tp.survey.logic.service';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerChange, IdbQuestion, IdbQuestionary, IInterviewData, IInterviewLogicVar, IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {TpSurveyInterviewService} from '../tp.survey.interview/tp.survey.interview.service';\r\nimport {QuestionsType, ResultativeStatus, SurveyEvents, ValidStatus} from '../../tp.survey.enum';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {AnswerSlType, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\n\r\ninterface BroadcastEvent {\r\n key: string;\r\n data?: any;\r\n}\r\n\r\ninterface ILogicVarContainer {\r\n [questionGuid: string]: Set<string>;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyCoreService {\r\n readonly #eventBus = new Subject<BroadcastEvent>();\r\n readonly #currentQuestion = new BehaviorSubject<IdbQuestion | null>(null);\r\n #surveyQuotas = new SurveyQuotas();\r\n #questionary?: IdbQuestionary;\r\n #displayedQuestions: Array<number> = []; // нужно для навигации по кнопке back\r\n #questionLogicVarContainer: ILogicVarContainer = {}; //Нужно знать какая логическая переменная относится к какому вопросу. НапримерЮ когда нужно ее отчистить при переходе назад.\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object, private readonly _logic: TpSurveyLogicService, private readonly _interview: TpSurveyInterviewService) {\r\n // запускам проверку квот, после скрытия каждого(почти) вопроса (seQuestionHide)\r\n this.#eventBus.asObservable().pipe(\r\n filter(ev => ev.key === SurveyEvents.seQuestionHide ),\r\n takeUntilDestroyed(this.#destroyRef),\r\n ).subscribe({\r\n next: () => this.#surveyQuotas.findFilledQuotas(this.#currentQuestion.value?.QuestionNum ?? -1, Object.assign({}, this._logic.getLogicVars()), this._interview.getAnswerList())\r\n });\r\n }\r\n\r\n setupSurvey(questionaryRawData: IdbQuestionary, logicVars?: Array<IInterviewLogicVar>, answerList?: Array<IQuestionAnswer>, questionGuid?: number) {\r\n //если анкеты нет, делать нечего.\r\n if (!questionaryRawData) {\r\n this.#currentQuestion.next(null);\r\n return;\r\n }\r\n\r\n this.#questionary = questionaryRawData;\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n //узнаем есть ли вопрос который указали для перехода при заполнении квоты\r\n const destinationQuestion = this.#findQuestionByGuid(questionaryRawData.BaseParams.QuotaLimitDestinationQuestionGuid);\r\n\r\n //инициализируем квоты\r\n this.#surveyQuotas.setQuotas(questionaryRawData.Quotas, questionaryRawData.Quotas2d, destinationQuestion?.QuestionGuid ?? -1, destinationQuestion?.QuestionNum ?? -1);\r\n }\r\n\r\n //создадим ответы и логические переменные\r\n this.#initiateQuestions(this.#questionary.Questions)\r\n\r\n // Может быть 2 варианта запуска интервью, 1-новое интервью, 2-перезапуск старого интервью. В первом случае начало это lang или первый вопрос. Во втором, с последнего вопроса на который ответили.\r\n let startQuestionNum: number | undefined = undefined;\r\n\r\n //загружаем старые логические переменные и переменные которые указали из вне.\r\n this.#fillOldLogic(logicVars ?? []);\r\n\r\n //если загружаем ранее не законченное интервью, продолжаем с места последнего вопроса (случай номер 2)\r\n if (!!answerList && !!questionGuid) {\r\n //загружаем старые логические переменные и ответы\r\n this.#fillOldInterviewData(answerList);\r\n\r\n //ищем номер вопроса, который был последний перед сохранением.\r\n const questionLastSave = this.#findQuestionByGuid(questionGuid);\r\n\r\n //Вопрос могли удалить, тогда начнем сначала.\r\n if (!!questionLastSave) {\r\n startQuestionNum = questionLastSave.QuestionNum;\r\n }\r\n }\r\n\r\n if (startQuestionNum === undefined) {\r\n //Это новое интервью, без ранее сохранённых данных(случай 1). Запускаем опрос, первый экран это Lang вопрос, но если выбора языка нет, пропускаем и переходим на 1-й вопрос\r\n startQuestionNum = this.#activeLangCount > 1 ? 0 : this.#nextQuestionNum();\r\n }\r\n\r\n //пошлём событие о начале опроса\r\n this.#eventBus.next({key: SurveyEvents.seSurveyStart, data: {questionary: this.#questionary, interviewUuid: this._interview.startedAt}});\r\n\r\n //показываем вопрос\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[startQuestionNum]);\r\n }\r\n\r\n on(...key: Array<string>): Observable<any> {\r\n return this.#eventBus.asObservable().pipe(\r\n filter(event => key.includes(event.key)),\r\n map(event => event.data)\r\n );\r\n }\r\n\r\n goToNextQuestion(): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n if (!currentQuestion) {\r\n return;\r\n }\r\n //если ответ на текущий вопрос не закончен И опция пропуска вопроса не активна, выходим\r\n if (!this._interview.questionIsComplete(currentQuestion.QuestionGuid) && !currentQuestion.CanSkip) {\r\n return ;\r\n }\r\n\r\n //если указан PostScript, выполним его\r\n if (!!currentQuestion.PostScript) {\r\n this._logic.executePostScript(currentQuestion.PostScript);\r\n }\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[this.#nextQuestionNum()]);\r\n }\r\n\r\n goToBackQuestion(): void {\r\n this.#displayedQuestions.pop(); // удалим информацию о том что показывали этот вопрос\r\n const previousQuestionGuid = this.#displayedQuestions.pop(); // узнаем номер вопроса на который нам надо перейти, и удалим информацию что-бы не дублировать\r\n if (!!previousQuestionGuid) {\r\n const prevQuestion = this.#findQuestionByGuid(previousQuestionGuid);\r\n if (!!prevQuestion) {\r\n this.#clearAnswerForCurrentQuestion();// отчистим ответ на вопрос, если он уже есть.\r\n this.#changeCurrentQuestion(prevQuestion);\r\n }\r\n }\r\n }\r\n\r\n questionIsComplete(guid: number): boolean {\r\n const answer = this._interview.findAnswerByGuid(guid);\r\n return answer?.answerIsComplete ?? false\r\n }\r\n\r\n /*\r\n * функция по номеру вопроса, ищет ответ на этот guid, и возвращает ответ на этот вопрос.\r\n * если это ss ms, вместо номеров альтернатив подставляет текст.\r\n * работает только для eqOL, eqSS, eqMS\r\n * */\r\n guidToTextAnswer(guid: number, languageId: number): string {\r\n const answer = this.findAnswerByGuid(guid);\r\n const question = this.#findQuestionByGuid(guid);\r\n\r\n //если ответа нет, ревнём пустую строку\r\n if (!question || !answer || answer.AnswerValue === -97) {\r\n return ''\r\n }\r\n const questionType = question.QuestionType;\r\n\r\n switch (questionType) {\r\n\r\n case QuestionsType.eqOL: return answer.AnswerValue;\r\n case QuestionsType.eqSS: {\r\n //находим альтернативу и подставляем заголовок альтернативы с указанным языком, если заголовка нет, вернём alias\r\n const alternative = question.Alternativelist.find(alt => alt.Value === answer.AnswerValue);\r\n const altText = alternative?.MultiLangCaptions.find(obj => obj.lang === languageId);\r\n\r\n return (altText?.CaptionHtml || alternative?.alias) ?? '';\r\n }\r\n case QuestionsType.eqMS: {\r\n //всё то же самое, что и ss, только тут массив ответов,\r\n const answerArray = answer.AnswerValue as Array<number>;\r\n const alternativeArray = question.Alternativelist.filter(alt => answerArray.indexOf(alt.Value) > 0);\r\n const altTextArray = alternativeArray.map(alt => (alt.MultiLangCaptions.find(obj => obj.lang === languageId)?.CaptionHtml || alt.alias) ?? '');\r\n return altTextArray.join(', ');\r\n }\r\n default: return '';\r\n }\r\n }\r\n\r\n #fillOldLogic(logicVars: Array<IInterviewLogicVar>): void{\r\n //пропишем старые логические переменные\r\n if (Array.isArray(logicVars)) {\r\n logicVars.forEach(logicVarObj => {\r\n this._logic.setLogicValue(logicVarObj.nm, logicVarObj.vl);\r\n })\r\n }\r\n }\r\n\r\n #fillOldInterviewData(answerList: Array<IQuestionAnswer>): void{\r\n //пропишем старые ответы\r\n this._interview.overrideAnswers(answerList);\r\n\r\n //нужно вернуть время начала интервью, отдельно оно не сохраняется, поэтому возьмём минимальное время начала из ответов\r\n //фильтруем все вопросы у которых оно указано(>0) и трансформируем в число.\r\n const startedAtArray = answerList.filter(answer => answer.StartedAt > 0).map(answer => answer.StartedAt);\r\n\r\n //берём минимальное\r\n this._interview.startedAt = Math.min(...startedAtArray);\r\n\r\n\r\n //Заполним массив показанных вопросов, чтобы корректно работала кнопка назад и правильно сохранялось см. #finishInterview\r\n answerList.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n this.#displayedQuestions.push(oldAnswer.QuestionGUID);\r\n })\r\n }\r\n\r\n #changeCurrentQuestion(newQuestion: IdbQuestion): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n const currentTime = new Date().getTime();\r\n\r\n if (!!currentQuestion) {\r\n /*\r\n Сохраним время начала интервью. Фиксировать будем не с самого начала, а с ответа на первый вопрос.\r\n Потому что практика такая, открыть анкету на планшете и ходить искать респондентов и из-за этого длительность интервью может быть нерелевантно.\r\n * */\r\n if (this._interview.startedAt === 0 && currentQuestion.QuestionNum >= 0) {\r\n this._interview.startedAt = currentTime;\r\n }\r\n\r\n //нужно сохранить FinishedAt в ответах для старого вопроса\r\n const answer = this._interview.findAnswerByGuid(currentQuestion.QuestionGuid);\r\n if (!!answer) {\r\n answer.FinishedAt = currentTime;\r\n }\r\n this.#eventBus.next({key: SurveyEvents.seQuestionHide, data: currentQuestion});\r\n }\r\n this.#displayedQuestions.push(newQuestion.QuestionGuid);\r\n this.#currentQuestion.next(newQuestion);\r\n\r\n //нужно сохранить StartedAt в ответах для нового вопроса\r\n const answerNew = this._interview.findAnswerByGuid(newQuestion.QuestionGuid);\r\n if (!!answerNew) {\r\n answerNew.StartedAt = currentTime;\r\n }\r\n this.#eventBus.next({key: SurveyEvents.seQuestionShow, data: newQuestion});\r\n\r\n //если новый экран это end тогда завершаем интервью\r\n if (newQuestion.QuestionType === 'END') {\r\n this.#finishInterview();\r\n }\r\n\r\n //если это неявный вопрос и это ss или ms вопрос тогда посчитаем значения у этого вопроса\r\n if (newQuestion.Implicit) {\r\n this.#calculateImplicitQuestion(newQuestion);\r\n }\r\n }\r\n\r\n currentQuestion$(): Observable<IdbQuestion | null> {\r\n return this.#currentQuestion.asObservable();\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this._interview.findAnswerByGuid(guid);\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this._logic.setLogicValue(varName, value);\r\n }\r\n\r\n getLogicVars(): LogicObject {\r\n return this._logic.getLogicVars();\r\n }\r\n\r\n executeLogic(expression?: string): boolean{\r\n return this._logic.executeLogic(expression)\r\n }\r\n\r\n getAnswerList(): Array<Answer> {\r\n return this._interview.getAnswerList();\r\n }\r\n\r\n updateAnswer(eventData: AnswerChange): void {\r\n const answer = this._interview.findAnswerByGuid(eventData.guid);\r\n if (!answer) {\r\n return;\r\n }\r\n\r\n //вопросы которые в своем составе имеет секции, хранят ответы чуть по другому, точнее ответ на каждую секцию это отдельный объект в _interview.answerList\r\n //поэтому ответ для таких типов вопросов это [key: string]: Array<number> | number, где key(guid секции) это ответ на секцию, если key нет, секция не была показана\r\n if (this.#currentQuestion.value?.QuestionType === QuestionsType.eqSL) {\r\n const sectionList = this.#currentQuestion.value?.Sectionlist;\r\n\r\n //пройдёмся по каждой секции и если для неё есть ответ, запишем, в противном случае вместо ответа укажем -97(MISSING_VALUE)\r\n if (!!sectionList) {\r\n sectionList.forEach(section => {\r\n const sectionInterviewAnswer = this._interview.findAnswerByGuid(section.SectionGuid);\r\n if (!sectionInterviewAnswer){\r\n return\r\n }\r\n const sectionQuestionAnswer = eventData.answer ? (eventData.answer as AnswerSlType)[section.SectionGuid.toString()] : undefined;\r\n sectionInterviewAnswer.AnswerValue = sectionQuestionAnswer === undefined ? MISSING_VALUE : sectionQuestionAnswer;\r\n });\r\n }\r\n //ответ самого исходного вопроса\r\n answer.AnswerValue = eventData.answer;\r\n } else {\r\n //ответ на вопрос у которого нет секций\r\n answer.AnswerValue = eventData.answer;\r\n }\r\n\r\n //на вопрос ответили тогда когда есть все ответы и выполняется логика кнопки далее(если её указали)\r\n answer.answerIsComplete = eventData.isComplete && this.#nextButtonExpressionIsTrue();\r\n\r\n //ViewedAlternativeValues и ViewedSectionGuids. Т.к. они readonly сначала удалим, потом добавим\r\n answer.ViewedAlternativeValues.length = 0;\r\n eventData.viewedAlternativeValues.forEach(oa => answer.ViewedAlternativeValues.push(oa));\r\n\r\n answer.ViewedSectionGuids.length = 0;\r\n eventData.viewedSectionGuids.forEach(oa => answer.ViewedSectionGuids.push(oa));\r\n\r\n answer.AlternativeSequenceClicks.length = 0;\r\n eventData.alternativeSequenceClicks.forEach(oa => answer.AlternativeSequenceClicks.push(oa));\r\n\r\n\r\n Object.entries(answer.AnswerAdditional).forEach(([key]) => delete answer.AnswerAdditional[Number(key)]);\r\n Object.entries(eventData.additionalAnswers).forEach(([key, value]) => answer.AnswerAdditional[Number(key)] = value);\r\n\r\n this.updateLogic(eventData.logicVars);\r\n\r\n this.#eventBus.next({key: SurveyEvents.seQuestionAnswersChange, data: {question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete}});\r\n\r\n //может возникнуть ситуация, когда нет ни одной альтернативы или секции для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n const question = this.#findQuestionByGuid(eventData.guid);\r\n //ситуация когда можно сразу перейти на следующий вопрос для ss/ms вопросов и для неявных вопросов\r\n const canTransitionSSMS = (!!question && answer.answerIsComplete && (question.QuestionType === 'SS' || question.QuestionType === 'MS') && ( (eventData.viewedAlternativeValues.length === 0) || question.Implicit));\r\n\r\n const canTransitionOl = ((!!question && question?.QuestionType === QuestionsType.eqOL && (question.CanSkip ?? true) && answer.AnswerValue === 'skip'));\r\n if (canTransitionSSMS || canTransitionOl) {\r\n this.goToNextQuestion()\r\n }\r\n }\r\n\r\n updateLogic(logicVars: Record<string, any>): void{\r\n Object.entries(logicVars).forEach(([varName, value]) => {\r\n this.setLogicValue(varName, value)\r\n })\r\n }\r\n\r\n //возвращает количество активных языков\r\n get #activeLangCount(): number {\r\n //если анкета по какой-то причине ну указана, вернём 0\r\n return this.#questionary?.BaseParams.LanguageList.filter( langObj => langObj.isActive).length ?? 0;\r\n }\r\n\r\n //возвращает количество вопросов\r\n get #questionsCount(): number {\r\n return this.#questionary?.Questions.length ?? 0;\r\n }\r\n\r\n #finishInterview(): void {\r\n const currentTime = new Date();\r\n let resultDirty;\r\n try {\r\n resultDirty = this._logic.executeLogic(this.#questionary?.BaseParams.ResultativeScript ?? '');\r\n }catch (e) {\r\n resultDirty = false;\r\n }\r\n\r\n\r\n //если вопрос не был показан, удалим его ответы\r\n //такое может быть если не нажимали кнопку назад\r\n const answerList = this._interview.getAnswerList();\r\n this.#questionary?.Questions.forEach(question => {\r\n if (!this.#displayedQuestions.includes(question.QuestionGuid)) {\r\n answerList.find(answer => answer.QuestionGUID === question.QuestionGuid)?.clear();\r\n question.Sectionlist.forEach(section => {\r\n answerList.find(answer => answer.QuestionGUID === section.SectionGuid)?.clear();\r\n })\r\n }\r\n if (question.QuestionType === QuestionsType.eqSL) {\r\n const answer = answerList.find(answer => answer.QuestionGUID === question.QuestionGuid);\r\n if (answer && answer.AnswerValue !== MISSING_VALUE) {\r\n answer.AnswerValue = 1;\r\n }\r\n }\r\n })\r\n const interview: IInterviewData = {\r\n Language: 0, //todo lang\r\n SpotId: 0,\r\n DeviceId: 0,\r\n DeviceType: 0,\r\n Resultative: ResultativeStatus.rsUnset,\r\n Valid: ValidStatus.vsUnset,\r\n Wave: this.#questionary?.Info.current_wave ?? 0,\r\n QuestionaryName: this.#questionary?.Info.name ?? '',\r\n QuestionaryGuid: this.#questionary?.Info.questionary_guid ?? 0,\r\n StartedAt: this._interview.startedAt,\r\n FinishedAt: currentTime.getTime(),\r\n TineZoneBias: currentTime.getTimezoneOffset(),\r\n ResultatDirty: resultDirty,\r\n Answers: {\r\n AnsversList: Array.from(this._interview.getAnswerList())\r\n },\r\n additional_info: {\r\n QuestionaryUpdateTimestamp: new Date(this.#questionary?.Info.last_update_timestamp ?? 0).getTime(),\r\n quotaIsCompleted: this.#surveyQuotas.quotaIsCompleted\r\n },\r\n ResultQuotaGuids: [],\r\n ResultQuota2dGuids: [],\r\n LogicVars: [],\r\n };\r\n\r\n const logicVars = this._logic.getLogicVars();\r\n Object.entries(logicVars).forEach(([key, value]) => interview.LogicVars.push({nm: key, vl: value}));\r\n\r\n this.#eventBus.next({key: SurveyEvents.seSurveyEnd, data: interview});\r\n }\r\n\r\n #nextQuestionNum(): number {\r\n const currentQuestion = this.#currentQuestion.value;\r\n // проверим квоты\r\n const currentGuid = currentQuestion?.QuestionGuid ?? 0;\r\n if (this.#surveyQuotas.quotaIsCompleted && !this.#surveyQuotas.guidIsDestinationQuestion(currentGuid)) {\r\n // у нас есть заполненная квота, найдем вопрос который нужно показать при заполнении квоты\r\n const destinationQ = this.#findQuestionByGuid(this.#surveyQuotas.destinationQuestionGuid);\r\n //если вопрос есть(его могли удалить из анкеты), показывает его\r\n if (!!destinationQ) {\r\n return destinationQ.QuestionNum;\r\n }\r\n }\r\n\r\n // если нет заполненной квоты, переходим на следующий вопрос, ищем следующий вопрос который мы можем отобразить (до логика может запретить показ вопроса)\r\n let nextQuestionNum = (currentQuestion?.QuestionNum ?? 0) + 1;\r\n\r\n // но сначала проверим после логику\r\n if (!!currentQuestion) {\r\n const destQ = currentQuestion.logiclist.find(logObj => (logObj.DestinationQuestionGuid > 0) && this._logic.executeLogic(logObj.LogicText) );\r\n if (!!destQ) {\r\n const destQNum = this.#findQuestionByGuid(destQ.DestinationQuestionGuid)?.QuestionNum;\r\n if (Number.isSafeInteger(destQNum)) { // вопрос мог быть удалён, а логику оставить\r\n nextQuestionNum = destQNum!;\r\n }\r\n }\r\n }\r\n\r\n // общее количество вопросов, цикл будет считать до этого количества\r\n const questionCount = this.#questionsCount;\r\n do {\r\n //потенциально следующий вопрос\r\n const q = this.#questionary!.Questions[nextQuestionNum];\r\n\r\n //если это последний вопрос или если выполняется BeforeExpression и этот вопрос не DestinationQuota, можем его показать\r\n if (q.QuestionType === QuestionsType.eqEND || (this._logic.executeLogic(q.BeforeExpression) && !this.#surveyQuotas.guidIsDestinationQuestion(q.QuestionGuid)) ) {\r\n return nextQuestionNum;\r\n }\r\n //вопрос нельзя показывать, увеличиваем счётчик текущего вопроса на 1\r\n nextQuestionNum++;\r\n } while (nextQuestionNum < questionCount - 1); // end вопрос должен всегда быть показан\r\n return nextQuestionNum;\r\n }\r\n\r\n #initiateQuestions(questionList: Array<IdbQuestion>): void{\r\n questionList.forEach(question => {\r\n //создаём пустой ответ для вопроса.\r\n const answer = this._interview.createAnswer(question.QuestionGuid, question.Version);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answer) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n const logicVarSet = new Set<string>();\r\n this.#questionLogicVarContainer[question.QuestionGuid.toString()] = logicVarSet;\r\n\r\n logicVarSet.add(question.SysName);//привязываем переменную к вопросу\r\n this._logic.setLogicValue(question.SysName, MISSING_VALUE); // переменная самого вопроса\r\n\r\n //добавим доп ответы и логику для них\r\n question.AdditionalAnswerlist.forEach(aa => {\r\n const aaSysName = `${question.SysName}${aa.SysName}`;\r\n answer.AnswerAdditional[aa.Value] = null;\r\n this._logic.setLogicValue(aaSysName, MISSING_VALUE); // логика для переменных доп ответа\r\n logicVarSet.add(aaSysName); //привязываем переменную к вопросу\r\n });\r\n\r\n // если в тексте postScript есть запись типа setVar('varName', value); нужно инициализировать переменную varName значением -97.\r\n if (!!question.PostScript) {\r\n (question.PostScript.match(/(\\bsetvar\\b)\\(['|\"](.*?)['|\"]/gim) ?? []).map(scriptVar => scriptVar.match(/['|\"](.+)['|\"]/i)![1]).forEach(varName => {\r\n logicVarSet.add(varName);//привязываем переменную к вопросу\r\n this._logic.setLogicValue(varName, null)\r\n });\r\n }\r\n\r\n // для Вопросов SS/MS нужно прописать логику альтернатив sysname вопроса + sysname альтернативы\r\n if (question.Sectionlist.length <= 0) {// для Вопросов SS/MS\r\n question.Alternativelist.forEach(alt => {\r\n const aSysName = `${question.SysName}${alt.SysName}`\r\n this._logic.setLogicValue(aSysName, MISSING_VALUE);\r\n logicVarSet.add(aSysName); //привязываем переменную к вопросу\r\n });\r\n } else {\r\n //для вопросов у которых есть секции проинициализируем каждую секцию\r\n question.Sectionlist.forEach(section => {\r\n\r\n //создаём пустой ответ для секции.\r\n const answerForSection = this._interview.createAnswer(section.SectionGuid, 1);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answerForSection) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n // для Вопросов SL нужно прописать логику альтернатив и секций sysname секции + sysname альтернативы\r\n this._logic.setLogicValue(section.SysName, MISSING_VALUE); // переменная самой секции\r\n logicVarSet.add(section.SysName); //привязываем переменную к вопросу\r\n\r\n //логика альтернатив SL вопроса\r\n question.Alternativelist.forEach(alt => {\r\n const aSysName = `${section.SysName}${alt.SysName}`;\r\n this._logic.setLogicValue(aSysName, MISSING_VALUE);\r\n logicVarSet.add(aSysName); //привязываем переменную к вопросу\r\n });\r\n })\r\n }\r\n })\r\n }\r\n\r\n //ищет вопрос на guid\r\n #findQuestionByGuid(guid: number): IdbQuestion | undefined {\r\n if (!this.#questionary) {\r\n return undefined;\r\n }\r\n return this.#questionary.Questions.find(q => q.QuestionGuid === guid);\r\n }\r\n\r\n #nextButtonExpressionIsTrue(): boolean{\r\n const buttonNextExpression = this.#currentQuestion.value?.BtnNextExpression ?? '';\r\n //если скрипта для кнопки далее нет, вернём true\r\n if (buttonNextExpression.trim() === '') {\r\n return true;\r\n }\r\n try {\r\n return this._logic.executeLogic(buttonNextExpression);\r\n } catch (e) {\r\n console.error(e);\r\n return false;\r\n }\r\n }\r\n\r\n #calculateImplicitQuestion(question: IdbQuestion): void {\r\n if (question.Implicit && (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) ) {\r\n let questionAnswer: number | Array<number>;\r\n\r\n if (question.QuestionType === QuestionsType.eqSS) {\r\n const alt = question.Alternativelist.find(alt => this._logic.executeLogic(alt.EnableExpression));\r\n questionAnswer = !!alt ? alt.Value : 0;\r\n }\r\n\r\n if (question.QuestionType === QuestionsType.eqMS) {\r\n questionAnswer = question.Alternativelist\r\n .filter(alt => this._logic.executeLogic(alt.EnableExpression))\r\n .map(alt => alt.Value);\r\n }\r\n\r\n const answerChange: AnswerChange = {\r\n guid: question.QuestionGuid,\r\n isComplete: true,\r\n answer: questionAnswer!,\r\n additionalAnswers: {},\r\n logicVars: {},\r\n viewedAlternativeValues: Array.isArray(questionAnswer!) ? questionAnswer : [questionAnswer!],\r\n viewedSectionGuids: [],\r\n alternativeSequenceClicks: []\r\n }\r\n this.updateAnswer(answerChange);\r\n }\r\n }\r\n\r\n #clearAnswerForCurrentQuestion(): void {\r\n const currentQuestionGuid = this.#currentQuestion.value?.QuestionGuid ?? -1;\r\n\r\n //удаляем сам ответ на вопрос\r\n //25.02.2023 не будем удалять ответ, будем удалять только логические переменные, а ответы на не показанные вопросы удалим при финализации интервью\r\n // this._interview.findAnswerByGuid(currentQuestionGuid)?.clear();\r\n\r\n //удаляем переменные которые относятся к этому вопросу\r\n const logicSet = this.#questionLogicVarContainer[currentQuestionGuid];\r\n if (!!logicSet) {\r\n logicSet.forEach(sysName =>this._logic.setLogicValue(sysName, MISSING_VALUE));\r\n }\r\n }\r\n}\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\n\r\n@Directive({\r\n selector: '[tpSurveyTheme]',\r\n})\r\nexport class SurveyThemeDirective {\r\n theme = input<TpSurveyTheme>('touchpoll-light',{alias: 'tpSurveyTheme'});\r\n @HostBinding(\"class.survey-theme-touchpoll-light\") public get classTouchpollLight() {\r\n return this.theme() === 'touchpoll-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-cyan-orange-light\") public get classCyanOrangeLight() {\r\n return this.theme() === 'cyan-orange-light';\r\n }\r\n @HostBinding(\"class.survey-theme-cyan-orange-dark\") public get classCyanOrangeDark() {\r\n return this.theme() === 'cyan-orange-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-light\") public get classRoseRedLight() {\r\n return this.theme() === 'rose-red-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-dark\") public get classRoseRedDark() {\r\n return this.theme() === 'rose-red-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-light\") public get classAzureBlueLight() {\r\n return this.theme() === 'azure-blue-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-dark\") public get classAzureBlueDark() {\r\n return this.theme() === 'azure-blue-dark';\r\n }\r\n}\r\n\r\n","import {Directive, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbTpBackGround} from '../../tp.survey.interface';\r\n\r\n@Directive({\r\n selector: '[tpImagePosition]'\r\n})\r\nexport class ImagePositionDirective {\r\n imageBackground = input.required<IdbTpBackGround>({alias: 'tpImagePosition'});\r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement;\r\n const renderer = inject(Renderer2);\r\n\r\n effect(() => {\r\n switch (this.imageBackground().PositionHorizontal) {\r\n case \"left\": renderer.setStyle(nativeElement, 'grid-column', '1 / 1'); renderer.setStyle(nativeElement, 'justify-self', 'flex-start'); break;\r\n case \"center\": renderer.setStyle(nativeElement, 'grid-column', '2 / 2'); renderer.setStyle(nativeElement, 'justify-self', 'anchor-center'); break;\r\n case \"right\": renderer.setStyle(nativeElement, 'grid-column', '3 / 3'); renderer.setStyle(nativeElement, 'justify-self', 'flex-end'); break;\r\n default: renderer.setStyle(nativeElement, 'grid-column-start', 1); break;\r\n }\r\n\r\n switch (this.imageBackground().PositionVertical) {\r\n case \"top\": renderer.setStyle(nativeElement, 'grid-row', '1 / 1');break;\r\n case \"center\": renderer.setStyle(nativeElement, 'grid-row-start', 2); renderer.setStyle(nativeElement, 'align-self', 'center'); break;\r\n case \"bottom\": renderer.setStyle(nativeElement, 'grid-row', '3 / 3'); renderer.setStyle(nativeElement, 'align-self', 'flex-end'); break;\r\n default: renderer.setStyle(nativeElement, 'grid-row-start', 1); break;\r\n }\r\n });\r\n }\r\n}\r\n","import {Directive, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbTpBackGround} from '../../tp.survey.interface';\r\nimport {BreakpointObserver} from '@angular/cdk/layout';\r\n\r\n@Directive({\r\n selector: '[tpImageSize]'\r\n})\r\nexport class ImageSizeDirective {\r\n imageBackground = input.required<IdbTpBackGround>({alias: 'tpImageSize'});\r\n \r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement;\r\n const renderer = inject(Renderer2);\r\n const breakpointObserver = inject(BreakpointObserver);\r\n const isMobile= breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n effect(() => {\r\n const height = isMobile ? this.imageBackground().MobileHeight : this.imageBackground().DesktopHeight;\r\n const width = isMobile ? this.imageBackground().MobileWidth : this.imageBackground().DesktopWidth;\r\n\r\n const normalizeHeight = this.#normalizeValue(height);\r\n const normalizeWidth = this.#normalizeValue(width);\r\n\r\n renderer.setStyle(nativeElement, 'height', normalizeHeight);\r\n renderer.setStyle(nativeElement, 'width', normalizeWidth);\r\n });\r\n }\r\n \r\n #normalizeValue(value?: number | string | 'auto' | null): string{\r\n if (!value || value === 'auto') {\r\n return 'auto';\r\n }\r\n \r\n //по умолчанию, если ввели только число, то это будет px\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n \r\n if (typeof value === 'string') {\r\n const stringValue = value.toLowerCase().trim();\r\n if (stringValue.endsWith('%') || stringValue.endsWith('px') || stringValue.endsWith('vh') || stringValue.endsWith('vw')) {\r\n return value;\r\n }else {\r\n return `${value}px`;\r\n }\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {VIDEO_EXTENSION_LIST} from '../../tp.survey.const';\r\n\r\n\r\n@Pipe({\r\n name: 'isVideo'\r\n})\r\nexport class IsVideoPipe implements PipeTransform {\r\n\r\n transform(fileName: string): boolean {\r\n if (typeof fileName !== 'string') {\r\n return false;\r\n } else {\r\n const ext = (fileName.split('.').pop())?.toLowerCase() ?? '';\r\n return VIDEO_EXTENSION_LIST.includes(`.${ext}`)\r\n }\r\n\r\n }\r\n\r\n}\r\n","import {Directive, DOCUMENT, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\n\r\n@Directive({\r\n selector: '[tpSurveyInsertQuestionCss]',\r\n})\r\nexport class InsertQuestionCssDirective {\r\n question = input.required<IdbQuestion | null>({alias: 'tpSurveyInsertQuestionCss'});\r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement as HTMLInputElement;\r\n const renderer = inject(Renderer2);\r\n const document = inject(DOCUMENT);\r\n\r\n //у каждого вопроса будет свой css класс, чтобы можно было переопределить стили в свойстве вопроса Css\r\n effect(() => {\r\n //если вопрос не указан, то удаляем все классы, которые начинаются с question-\r\n if (this.question()) {\r\n renderer.addClass(nativeElement, `question-${this.question()?.QuestionNum}`)\r\n } else {\r\n nativeElement.classList.forEach(className => {\r\n if (className.startsWith('question-')) {\r\n renderer.removeClass(nativeElement, className)\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Если у вопроса указан Css, то добавляем его в head страницы. С селектором div.question-N. Где N - номер вопроса\r\n effect(() => {\r\n if (this.question()?.Css) {\r\n document.head.insertAdjacentHTML('beforeend',\r\n `<style>\r\n div.question-${this.question()?.QuestionNum} {\r\n ${this.question()?.Css}\r\n }\r\n </style>\r\n `);\r\n }\r\n });\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnInit, output, Signal, signal, TemplateRef} from '@angular/core';\r\nimport {concatMap, delay, delayWhen, distinctUntilChanged, filter, from, merge, mergeMap, of, tap, timer} from 'rxjs';\r\nimport {NgTemplateOutlet} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed, toObservable, toSignal} from '@angular/core/rxjs-interop';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbImage, IdbQuestion, IdbQuestionary, IInterviewAutoSaveData, IInterviewData, IInterviewProgressEvent} from '../../tp.survey.interface';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyCoreService} from '../../core/tp.survey.core/tp.survey.core.service';\r\nimport {NavigationButtonDirection, TpSurveyTheme} from '../../tp.survey.type';\r\nimport {QuestionsType, SurveyEvents, ViewModel} from '../../tp.survey.enum';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\nimport {ImagePositionDirective} from '../../directive/image.position/image.position.directive';\r\nimport {ImageSizeDirective} from '../../directive/image.site/image.size.directive';\r\nimport {IsVideoPipe} from '../../pipe/is.video/is.video.pipe';\r\nimport {InsertQuestionCssDirective} from '../../directive/insert.question.css/insert.question.css.directive';\r\n\r\ninterface ICurrentQuestionViewData {\r\n question: IdbQuestion | null;\r\n answers?: ICurrentQuestionAnswer;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-play',\r\n templateUrl: './survey.play.component.html',\r\n styleUrls: ['./survey.play.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n QuestionCaptionComponent,\r\n NavigationButtonComponent,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ImagePositionDirective,\r\n ImageSizeDirective,\r\n IsVideoPipe,\r\n InsertQuestionCssDirective\r\n ]\r\n})\r\nexport class SurveyPlayComponent implements OnInit{\r\n questionary = input.required<IdbQuestionary>();\r\n viewModel = input.required<ViewModel>();\r\n interviewAutoSaveData = input<IInterviewAutoSaveData>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n language = input<number>(2);\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n interviewStarted = output<void>();\r\n interviewFinished = output<IInterviewData>();\r\n interviewProgress = output<IInterviewProgressEvent>();\r\n\r\n readonly currentQuestionViewData: Signal<ICurrentQuestionViewData>;\r\n readonly question: Signal<IdbQuestion | null>;\r\n readonly activeLanguage = signal<number>(this.language())\r\n readonly visibleImageList: Signal<Array<IdbImage>>;\r\n readonly viewModelE = ViewModel;\r\n readonly backButtonAvailable;\r\n readonly nextButtonAvailable;\r\n readonly #core = inject(TpSurveyCoreService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor() {\r\n //Проблема в том, что если идёт подряд 2 вопроса с одинаковым типом, то не удаляется. Нужно пробросить null с небольшой задержкой, чтобы движок angular`а удалял старые компоненты\r\n this.currentQuestionViewData = toSignal(this.#core.currentQuestion$().pipe(\r\n filter(res => !res?.Implicit), //если это неявный вопрос, тогда его показывать не нужно\r\n mergeMap(currentQuestion => from([null, currentQuestion]).pipe(\r\n concatMap(val => of(val).pipe(\r\n delay(val === null ? 0 : 500),\r\n )),\r\n )),\r\n //будем реагировать только когда null => вопрос и наоборот вопрос => null.\r\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\r\n map(currentQuestion => ({\r\n question: currentQuestion,\r\n answers: !currentQuestion ? undefined : {\r\n question: this.#core.findAnswerByGuid(currentQuestion.QuestionGuid),\r\n sections: currentQuestion.Sectionlist.map(section => this.#core.findAnswerByGuid(section.SectionGuid)),\r\n }\r\n })),\r\n ), { initialValue: { question: null, answers: undefined } });\r\n\r\n this.question = computed(() => this.currentQuestionViewData().question)\r\n\r\n /*\r\n * кнопка далее нужно проверять при показе вопроса и при изменении ответа. При показе она может быть доступна сразу(например info).\r\n * Кнопка доступна если ответ корректно заполнен(questionIsComplete) и это не eqEND вопрос\r\n * */\r\n this.nextButtonAvailable = toSignal(merge(\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange).pipe(map(data => data.question)),\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(map(data => data))\r\n ).pipe(\r\n map(question => {\r\n //вопрос должен быть не eqEND и не eqLANG(для них кнопки далее быть не должно) + вопрос должен быть заполнен или его можно пропустить(указано в настройках)\r\n const isAvailable: boolean | undefined = !([QuestionsType.eqEND, QuestionsType.eqLANG].includes(question.QuestionType)) && (this.#core.questionIsComplete(question.QuestionGuid) || question.CanSkip)\r\n\r\n //в настройках вопроса можно указать задержку перед активацией кнопки Далее\r\n let delayInSettings = isNaN(Number(question.BtnNextDelaySec)) ? 1 : Number(question.BtnNextDelaySec) * 1000;\r\n\r\n //но если isAvailable не равно true(может быть undefined или false) то кнопка \"не активируется\" сразу\r\n if (!(isAvailable === true)) {\r\n delayInSettings = 1;\r\n }\r\n\r\n //уберём отрицательные и нулевые значения, если они случайно попали в настройки\r\n delayInSettings = Math.max(1, delayInSettings);\r\n\r\n return {\r\n isAvailable,\r\n delay: delayInSettings\r\n }\r\n }),\r\n delayWhen(params => timer(params.delay)),\r\n map(res => res.isAvailable)\r\n ), { initialValue: false });\r\n\r\n //кнопку Назад можно показывать если в настройках указали ShowBtnBack и это не eqEND вопрос\r\n this.backButtonAvailable = toSignal(this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n filter(question => !!question),\r\n map((question: IdbQuestion) => question.QuestionNum > 1 && question.ShowBtnBack && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ));\r\n\r\n this.#core.on(SurveyEvents.seSurveyEnd).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: interview => {\r\n interview.Language = this.activeLanguage()\r\n this.interviewFinished.emit(interview)\r\n }\r\n });\r\n\r\n this.#core.on(SurveyEvents.seSurveyStart).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: _ => this.interviewStarted.emit()\r\n });\r\n\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: q => this.interviewProgress.emit({\r\n currentNum: q.QuestionNum,\r\n questionsCount: this.questionary().Questions.length,\r\n questionGuid: q.QuestionGuid,\r\n interviewData: {\r\n logicVars: this.#core.getLogicVars(),\r\n answerList: this.#core.getAnswerList(),\r\n }\r\n })\r\n });\r\n\r\n //подготовим список картинок для отображения\r\n this.visibleImageList = toSignal(\r\n merge(\r\n toObservable(this.question),\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange)\r\n ).pipe(\r\n filter(() => !!this.question()),\r\n map( () => (this.question()!.ImageList ?? []).filter(image => this.#core.executeLogic(image.EnableExpression))))\r\n , { initialValue: [] });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.#core.setupSurvey(this.questionary(), this.interviewAutoSaveData()?.logic_vars, this.interviewAutoSaveData()?.answer_list, this.interviewAutoSaveData()?.question_guid, );\r\n }\r\n\r\n onNavigationButtonClick(direction: NavigationButtonDirection) {\r\n if (direction === 'next') {\r\n this.#core.goToNextQuestion()\r\n } else {\r\n this.#core.goToBackQuestion()\r\n }\r\n }\r\n\r\n onAnswerChanged(eventData: AnswerChange) {\r\n this.#core.updateAnswer(eventData);\r\n }\r\n\r\n onLogicChanged(logicVars: Record<string, any>) {\r\n this.#core.updateLogic(logicVars);\r\n }\r\n\r\n onLanguageChange(language: number) {\r\n this.activeLanguage.set(language);\r\n this.#core.goToNextQuestion();\r\n }\r\n\r\n findVariable(sysName: string): string{\r\n //Сюда могут заехать как переменные логические, типа Q_00000000000391A9, так и Q_00000000000391A9_A_001, так и \"переменные для ответов\" типа V_00000000000391A9\r\n //Переменные для ответов ищут ответ на данный вопрос, а потом подставляют туда значения (это всё пока только для SS, MS, OL вопросов)\r\n // мы можем брать значения только из заголовка вопроса, альтернативы или секции т.е. На вход могут прийти только Q1 или q1A1 или q1r1 в системном формате\r\n try {\r\n if (sysName.search(/^v_/gmi) >= 0) { // переменные для ответов типа V1\r\n const guid = Number(`0x${sysName.replace(/^v_/gmi, '')}`);\r\n return this.#core.guidToTextAnswer(guid, this.language());\r\n }\r\n //todo q_var\r\n return '';\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [style.background-color]=\"question()?.BackgroundColor\"\r\n [tpSurveyInsertQuestionCss]=\"question()\"\r\n\r\n [class.tp-view-desktop]=\"viewModel() === viewModelE.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === viewModelE.vmTablet\">\r\n\r\n @if (currentQuestionViewData(); as currentQuestionViewData) {\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:activeLanguage():question.LogicCaptionsList: findVariable.bind(this)\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:activeLanguage()\"/>\r\n\r\n @if (visibleImageList().length > 0) {\r\n <div\r\n class=\"container-image\"\r\n [class.container-image-tablet]=\"viewModel() === viewModelE.vmTablet\"\r\n [class.container-image-desktop]=\"viewModel() === viewModelE.vmDesktop\">\r\n @for (image of visibleImageList(); track $index) {\r\n @if (image.Image.Image | isVideo) {\r\n <video\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [controls]=\"false\"\r\n [autoplay]=\"true\"\r\n [loop]=\"true\"\r\n [muted]=\"true\"\r\n playsinline\r\n class=\"question-video\">\r\n <source [src]=\"questionary().Info.repository_path+'/' + image.Image.Image\" type=\"video/mp4\">\r\n </video>\r\n } @else {\r\n <img\r\n alt=\"answer logo\"\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [src]=\"questionary().Info.repository_path+'/' + image.Image.Image\"\r\n importance=\"low\" loading=\"lazy\"\r\n class=\"question-image\">\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"activeLanguage()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable.bind(this)\"\r\n [answers]=\"currentQuestionViewData.answers\"\r\n [languageList]=\"questionary().BaseParams.LanguageList\"\r\n [repositoryPath]=\"questionary().Info.repository_path\"\r\n (logicChanged)=\"onLogicChanged($event)\"\r\n (onLanguageChange)=\"onLanguageChange($event)\"\r\n (answerChanged)=\"onAnswerChanged($event)\"/>\r\n }\r\n }\r\n\r\n <div class=\"container-navigation\">\r\n <div class=\"container-navigation-back\">\r\n @if (backButtonAvailable()) {\r\n <tp-survey-navigation-button\r\n direction=\"back\"\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.back_button_caption\"\r\n (click)=\"onNavigationButtonClick('back')\"/>\r\n }\r\n </div>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"templateNavigationRef() ?? null\">\r\n </ng-container>\r\n\r\n <div class=\"container-navigation-next\">\r\n @if (nextButtonAvailable()){\r\n <tp-survey-navigation-button\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.next_button_caption\"\r\n direction=\"next\"\r\n (onClick)=\"onNavigationButtonClick('next')\"/>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {Answer} from '../../core/tp.survey.answer/tp.survey.answer';\r\n\r\n@Pipe({\r\n name: 'generateDefaultAnswer'\r\n})\r\nexport class GenerateDefaultAnswerPipe implements PipeTransform {\r\n\r\n transform(guid: number): Answer {\r\n return new Answer(guid);\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, input, TemplateRef} from '@angular/core';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {IdbBaseParamsLanguage, IdbQuestion} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\nimport {ImagePositionDirective} from '../../directive/image.position/image.position.directive';\r\nimport {ImageSizeDirective} from '../../directive/image.site/image.size.directive';\r\nimport {GenerateDefaultAnswerPipe} from '../../pipe/generate.default.answer/generate.default.answer.pipe';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-preview',\r\n imports: [\r\n ContainerAnswerComponent,\r\n QuestionCaptionComponent,\r\n UpdateFontSizeDirective,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ImagePositionDirective,\r\n ImageSizeDirective,\r\n GenerateDefaultAnswerPipe\r\n ],\r\n templateUrl: './survey.question.preview.component.html',\r\n styleUrl: './survey.question.preview.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n TpSurveyLogicService,\r\n ]\r\n})\r\nexport class SurveyQuestionPreviewComponent {\r\n question = input.required<IdbQuestion | null>();\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n repositoryPath = input<string>('');\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n ViewModel = ViewModel;\r\n\r\n findVariable(sysName: string): string{\r\n //Сюда могут заехать как переменные логические, типа Q_00000000000391A9, так и Q_00000000000391A9_A_001, так и \"переменные для ответов\" типа V_00000000000391A9\r\n //Переменные для ответов ищут ответ на данный вопрос, а потом подставляют туда значения (это всё пока только для SS, MS, OL вопросов)\r\n // мы можем брать значения только из заголовка вопроса, альтернативы или секции т.е. на вход могут прийти только Q1 или q1A1 или q1r1 в системном формате\r\n try {\r\n if (sysName.search(/^v_/gmi) >= 0) { // переменные для ответов типа V1\r\n return '{value}'\r\n }\r\n //todo q_var\r\n return '';\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n \r\n protected readonly viewModelE = ViewModel;\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === ViewModel.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === ViewModel.vmTablet\">\r\n\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:language()\"/>\r\n\r\n @if (question.ImageList?.length > 0) {\r\n <div\r\n class=\"container-image\"\r\n [class.container-image-tablet]=\"viewModel() === viewModelE.vmTablet\"\r\n [class.container-image-desktop]=\"viewModel() === viewModelE.vmDesktop\">\r\n @for (image of question.ImageList; track $index) {\r\n <img\r\n alt=\"answer logo\"\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [src]=\"repositoryPath() + '/' + image.Image.Image\"\r\n importance=\"low\" loading=\"lazy\"\r\n class=\"question-image\">\r\n }\r\n </div>\r\n }\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"language()\"\r\n [answers]=\"{question:question.QuestionGuid | generateDefaultAnswer, sections: []}\"\r\n [findVariable]=\"findVariable.bind(this)\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [developerMode]=\"true\"\r\n [viewModel]=\"viewModel()\"\r\n [languageList]=\"languageList()\"/>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of tp.survey\r\n */\r\n\r\n// export * from './lib/tp.survey.service';\r\n\r\nexport * from './lib/tp.survey.module';\r\nexport * from './lib/component/survey.play/survey.play.component';\r\nexport * from './lib/component/survey.question.preview/survey.question.preview.component';\r\nexport * from './lib/tp.survey.config';\r\nexport * from './lib/tp.survey.const';\r\nexport * from './lib/tp.survey.type';\r\nexport * from './lib/tp.survey.interface';\r\nexport * from './lib/tp.survey.enum';\r\nexport * from './lib/tp.survey.method';\r\nexport * from './lib/core/tp.survey.answer/tp.survey.answer';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.TpSurveyLogicService","i2.TpSurveyInterviewService"],"mappings":";;;;;;;;;;;;;;;;;;;AAWA;;;;AAIG;MACU,uBAAuB,GAAG,IAAI,cAAc,CAAiB,0CAA0C;;AChB7G,MAAM,YAAY,GAAG;AAC1B,IAAA,gBAAgB,EAAE,CAAA;;AAEjB,EAAA,CAAA;AACD,IAAA,gBAAgB,EAAE,CAAA;;AAEjB,EAAA,CAAA;AACD,IAAA,YAAY,EAAE,CAAA;;;;;AAKb,EAAA,CAAA;CACF;;MCNY,kBAAkB,CAAA;AAC7B,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAC/C,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AACtC,QAAA,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AAC1D,YAAA,MAAM,QAAQ,GAAY,CAAA,yBAAA,EAA4B,gBAAgB,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,QAAQ;AACzG,YAAA,eAAe,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACzF;IACF;8GATW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAlB,kBAAkB,EAAA,CAAA,CAAA;+GAAlB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCGY,cAAc,CAAA;;IAEzB,OAAO,OAAO,CAAC,MAAsB,EAAA;QACnC,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAC,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM;AACpD;SACF;IACH;8GATW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHvB,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAGT,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAHvB,kBAAkB,CAAA,EAAA,CAAA,CAAA;;2FAGT,cAAc,EAAA,UAAA,EAAA,CAAA;kBAL1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;MCCY,wBAAwB,CAAA;AANrC,IAAA,WAAA,GAAA;QAOE,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;QAC3B,IAAA,CAAA,WAAW,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;AAChC,IAAA;8GAHY,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,wBAAwB,0WCTrC,2PAIA,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDKa,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBANpC,SAAS;+BACE,4BAA4B,EAAA,eAAA,EAGrB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,2PAAA,EAAA,MAAA,EAAA,CAAA,0bAAA,CAAA,EAAA;;;MEQpC,yBAAyB,CAAA;AAVtC,IAAA,WAAA,GAAA;AAWE,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAA6B;QACvD,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;QACzB,IAAA,CAAA,OAAO,GAAG,MAAM,EAA6B;AAC9C,IAAA;8GAJY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECftC,oeAYA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDJQ,SAAS,yUACT,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAMF,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAVrC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,OAAA,EAC9B;wBACL,SAAS;wBACT;qBACH,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,oeAAA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA;;;AEb5C,MAAM,aAAa,GAAG,CAAC;AACvB,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAGzH,MAAM,UAAU,GAAG;AACnB,MAAM,WAAW,GAAG;AAEpB,MAAM,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;ACHxB,MAAM,sBAAsB,GAAG,MAAkB;IACtD,OAAO,CAAC,OAAwB,KAAmC;;AAEjE,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,MAAM,OAAO,CAAC,KAAK,KAAK,aAAa,CAAC,EAAG;AAClE,YAAA,OAAO,EAAC,cAAc,EAAE,IAAI,EAAC;QAC/B;;AAGA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,QAAuB,EAAE,QAAuB,KAAkB,CAAC,OAAwB,KAAiC;;IAE5J,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAC;IACnC;;;;;AAKA,IAAA,IAAK,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAS,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAS,CAAC,EAAI;AAC5J,QAAA,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC;IACpC;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,aAAsB,EAAE,OAAgB,KAAkB,CAAC,OAAwB,KAAiC;IACpJ,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE;;IAE1E,IAAK,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAG;AACnC,QAAA,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC;IACpC;IAEA,IAAI,aAAa,EAAE;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,KAAK,MAAM;QACxE,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,EAAC,4BAA4B,EAAE,IAAI,EAAC;QAC7C;IACF;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;AAGM,MAAM,iBAAiB,GAAG,MAAmB,CAAC,OAAwB,KAAiC;;IAE5G,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAC;IACnC;;AAGA,IAAA,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE;AACrB,QAAA,OAAO,EAAC,aAAa,EAAE,IAAI,EAAC;IAC9B;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;AAGM,MAAM,iBAAiB,GAAG,CAAC,sBAA6C,EAAE,QAAA,GAAmB,CAAC,EAAE,QAAA,GAAmB,CAAC,KAAkB,CAAC,OAAwB,KAAiC;;;;AAKrM,IAAA,IAAI,sBAAsB,CAAC,MAAM,KAAK,CAAC,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;;IAGA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACjC,QAAA,OAAO,EAAC,kBAAkB,EAAE,IAAI,EAAC;IACnC;;;IAIA,IAAI,gBAAgB,GAAG,QAAQ;IAC/B,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QAC5B,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC;QAChI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,KAAK,uBAAuB,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC7I;;AAGA,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM;;AAGlC,IAAA,IAAI,KAAK,GAAG,gBAAgB,EAAE;AAC5B,QAAA,OAAO,EAAC,gBAAgB,EAAE,IAAI,EAAC;IACjC;;IAGA,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;AACpC,QAAA,OAAO,EAAC,gBAAgB,EAAE,IAAI,EAAC;IACjC;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAE,eAAuB,EAAE,WAA8B,KAAkB,CAAC,OAAwB,KAAiC;;IAEtL,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;AAClB,QAAA,OAAO,EAAC,aAAa,EAAE,IAAI,EAAC;IAC9B;;IAGA,MAAM,iBAAiB,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,IAAG;AACnD,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACpE,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;QACb;aAAM;AACJ,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,KAAK,eAAe,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,cAAc,KAAK,CAAC;QAC/J;AACF,IAAA,CAAC,CAAC;IACF,IAAI,iBAAiB,EAAE;AACrB,QAAA,OAAO,EAAC,aAAa,EAAE,IAAI,EAAC;IAC9B;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;AAEM,MAAM,gCAAgC,GAAG,CAAC,QAAiB,KAAiB;IACjF,OAAO,CAAC,OAAwB,KAAmC;AACjE,QAAA,IAAM,CAAC,OAAO,CAAC,KAAK,KAAK,IAAI,KAAK,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,QAAQ,EAAE;AACtH,YAAA,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAC;QAC1C;;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AACH,CAAC;AAEM,MAAM,+BAA+B,GAAG,CAAC,QAAiB,EAAE,QAAuB,EAAE,QAAuB,KAAkB,CAAC,OAAwB,KAAiC;;IAE7L,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,IAAI;IACb;;IAGA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxC,QAAA,OAAO,EAAC,oBAAoB,EAAE,IAAI,EAAC;IACrC;;;;;AAMA,IAAA,IAAK,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAS,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,GAAG,QAAS,CAAC,EAAI;AACrI,QAAA,OAAO,EAAC,mBAAmB,EAAE,IAAI,EAAC;IACpC;;AAGA,IAAA,OAAO,IAAI;AACb,CAAC;;MC7JY,oBAAoB,CAAA;AAC/B,IAAA,KAAK,GAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAExC,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,aAAa,CAAC,OAAe,EAAE,KAAU,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK;IAC7B;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,EAAC,GAAG,IAAI,CAAC,KAAK,EAAC;IACxB;AAEA,IAAA,YAAY,CAAC,UAAmB,EAAA;AAC9B,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE;YAC9E,OAAO,CAAC,cAAc,GAAG,IAAI,GAAI,IAAI,QAAQ,CAAC,GAAG,eAAe,CAAA,QAAA,EAAW,cAAc,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/G;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,iBAAiB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI;AACF,YAAA,MAAM,cAAc,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE;AAC9E,YAAA,IAAI,QAAQ,CAAC,CAAA,EAAG,eAAe,IAAI,cAAc,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACvE;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAChB;IACF;8GA/BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCGY,yBAAyB,CAAA;AAC3B,IAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC;AACjC,IAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAE9C,IAAA,SAAS,CAAC,OAAkC,EAAE,QAAgB,EAAE,aAA4C,EAAE,YAAgC,EAAA;;AAE5I,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAC;YAC/B,MAAM,mBAAmB,GAAG,aAAa,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AACjH,YAAA,MAAM,0BAA0B,GAAG,mBAAmB,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;YAC9G,MAAM,IAAI,GAAI,0BAA0B,EAAE,gBAAgB,IAAI,0BAA0B,EAAE,WAAW,IAAI,EAAE;;AAG3G,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAC;gBACjC,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC;YACtD;QACF;;QAGA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,OAAO,EAAE;QACX;;AAGA,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC5D,MAAM,aAAa,GAAI,OAAO,EAAE,gBAAgB,IAAI,OAAO,EAAE,WAAW,IAAI,EAAE;QAE9E,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,yCAAyC,EAAE,OAAO,IAAG;AACnG,YAAA,MAAM,OAAO,GAAI,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,SAAS;YACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC5C,YAAA,MAAM,CAAC,SAAS,GAAG,OAAO;YAC1B,MAAM,CAAC,WAAW;AAClB,YAAA,OAAO,MAAM,CAAC,WAAW,IAAI,EAAE;AACjC,QAAA,CAAC,CAAC;QAEF,OAAO,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,iBAAiB,CAAC;IACnE;8GAnCW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,uBAAuB;AAC9B,iBAAA;;;ICRW;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAc;AACd,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AACd,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAc;AAChB,CAAC,EAJW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;IAMT;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,eAAA,CAAA,GAAA,cAA8B;AAC9B,IAAA,YAAA,CAAA,yBAAA,CAAA,GAAA,0BAAoD;AACpD,IAAA,YAAA,CAAA,6BAAA,CAAA,GAAA,8BAA4D;AAC5D,IAAA,YAAA,CAAA,aAAA,CAAA,GAAA,YAA4B;AAC5B,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;AAChC,IAAA,YAAA,CAAA,gBAAA,CAAA,GAAA,eAAgC;AAChC,IAAA,YAAA,CAAA,mBAAA,CAAA,GAAA,kBAAsC;AACtC,IAAA,YAAA,CAAA,4BAAA,CAAA,GAAA,mBAAgD;AAChD,IAAA,YAAA,CAAA,yBAAA,CAAA,GAAA,gBAA0C;IAC1C,YAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD,CAAA;AACnD,CAAC,EAXW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;IAaZ;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,oBAAA,CAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,oBAAA,CAAA,oBAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AAChB,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;IAMpB;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,MAAe;AACf,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,IAAa;AACb,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,IAAa;AACb,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,MAAe;AACf,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,IAAa;AACb,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,IAAa;AACb,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,IAAa;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,KAAe;AACjB,CAAC,EATW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAYb;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,SAAY;AACZ,IAAA,iBAAA,CAAA,iBAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAmB;AACnB,IAAA,iBAAA,CAAA,iBAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,GAAA,eAAiB;AACnB,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;IAMjB;AAAZ,CAAA,UAAY,WAAW,EAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,SAAY;AACZ,IAAA,WAAA,CAAA,WAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa;AACb,IAAA,WAAA,CAAA,WAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW;AACX,IAAA,WAAA,CAAA,WAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc;AAChB,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;;MCxBD,qBAAqB,CAAA;AAUzC,IAAA,WAAA,GAAA;AATA,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAa;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAqB;AAClD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,EAAE,0DAAC;QAClC,IAAA,CAAA,UAAU,GAAG,SAAS;AAEZ,QAAA,IAAA,CAAA,aAAa,GAAG,CAAC,IAAO,KAAI,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,cAAc,GAAG,MAAK,EAAE,CAAC;AAChB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAEhD,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAC7B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC,SAAS,CAAC,GAAG,IAAG;AAChB,YAAA,IAAI,CAAC,aAAa,CAAC,GAAI,CAAC;AAC1B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,EAAqB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;IACzB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;QACvB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,gBAAgB,CAAC,UAAmB,EAAA;IACpC;AAEA,IAAA,UAAU,CAAC,KAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;IACpD;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAE,MAAW,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;IAC1D;8GApCoB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAT9B;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACpD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARS,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAWQ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAb1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACpD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA;AAEF,iBAAA;;;MCPY,8BAA8B,CAAA;IAGzC,IACY,qBAAqB,CAAC,KAAqD,EAAA;AACpF,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5B;AACS,IAAA,WAAW;AACpB,IAAA,WAAA,CAA6B,SAAoB,EAAkB,UAAsB,EAAU,mBAAuC,EAAA;QAA7G,IAAA,CAAA,SAAS,GAAT,SAAS;QAA6B,IAAA,CAAA,UAAU,GAAV,UAAU;QAAsB,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QAPtH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,oDAAgB,KAAK,EAAE,+BAA+B,EAAA,CAAE;QACjF,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,qDAAa,KAAK,EAAE,oBAAoB,EAAA,CAAE;AAK3D,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;QAEvC,MAAM,CAAC,MAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IACrC;AAEA,IAAA,aAAa,CAAC,YAAiD,EAAA;QAC7D,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE;AAC3C,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;QACxC;aAAO;YACL,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEA,oBAAoB,GAAA;AAClB,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAC5D,GAAG,CAAC,CAAC,MAAuB,KAAK,MAAM,CAAC,OAAO,CAAC,EAChD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC,CAAC,QAAiB,KAAI;AAChC,YAAA,IAAI,WAAmB;YACvB,IAAI,QAAQ,EAAE;gBACZ,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,gCAAgC,IAAI,CAAC,CAAC;YACtE;iBAAO;gBACL,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,IAAI,CAAC,CAAC;YAC5D;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,uBAAuB,EAAE,UAAU,WAAW,CAAA,OAAA,CAAS,CAAC;AACjH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,mBAAmB,CAAC,YAAiD,EAAA;QACnE,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;QAEA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE;YAC3C,MAAM,QAAQ,GAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACxE,YAAA,MAAM,QAAQ,GAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,YAAA,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,iBAAyB,KAAc,MAAM,GAAG,GAAG,GAAG,iBAAiB,CAAC;YAEhH,MAAM,kBAAkB,GAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,WAAW;YACrE,MAAM,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY;;AAGtE,YAAA,IAAI,sBAAsB;YAC1B,IAAI,QAAQ,EAAE;gBACZ,sBAAsB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,gCAAgC,IAAI,CAAC,CAAC;YACjF;iBAAO;gBACL,sBAAsB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,gCAAgC,IAAI,CAAC,CAAC;YACjF;AAEA,YAAA,MAAM,eAAe,GAAG,kBAAkB,GAAI,UAAU;AACxD,YAAA,MAAM,aAAa,GAAK,mBAAmB,GAAG,WAAW;AAEzD,YAAA,MAAM,mBAAmB,GAAW,kBAAkB,GAAG,GAAG,CAAC;AAE7D,YAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;YAE1D,MAAM,kBAAkB,GAAG,QAAQ,CAAC,6BAA6B,IAAI,EAAE,GAAG,eAAe;YACzF,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,2BAA2B,IAAI,EAAE,IAAI,aAAa;YACrF,MAAM,SAAS,GAAG,QAAQ,CAAC,oBAAoB,IAAI,EAAE,GAAG,aAAa;YACrE,MAAM,UAAU,GAAI,CAAC,QAAQ,CAAC,qBAAqB,IAAI,CAAC,IAAI,eAAe;AAC3E,YAAA,MAAM,WAAW,GAAW,sBAAsB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,sBAAsB;YACnH,MAAM,QAAQ,GAAW,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,WAAW,CAAC;AAEpE,YAAA,MAAM,wBAAwB,GAAG,EAAE,GAAG,eAAe;YAErD,IAAI,KAAK,GAAG,CAAC;YACb,IAAI,MAAM,GAAG,CAAC;YAEd,IAAI,QAAQ,CAAC,mBAAmB,IAAI,IAAI,EAAE;AACxC,gBAAA,MAAM,YAAY,GAAG,kBAAkB,IAAK,WAAW,GAAG,CAAC,CAAC,GAAG,wBAAwB,GAAG,CAAC;AAC3F,gBAAA,KAAK,GAAI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,GAAG,YAAY,IAAI,WAAW,EAAE,mBAAmB,CAAC;gBACzF,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,GAAG,KAAI;oBAC9C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,kBAAkB,CAAC;AACjE,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA,EAAG,eAAe,CAAA,CAAA,CAAG,CAAC;AAC1E,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;gBAC5D,CAAC,EAAE,CAAC,CAAC;YACP;AAAO,iBAAA;AACL,gBAAA,KAAK,GAAI,QAAQ,CAAC,gBAAgB,IAAI,GAAG;AACzC,gBAAA,MAAM,GAAG,QAAQ,CAAC,iBAAiB,IAAI,EAAE;YAC3C;YAEA,MAAM,aAAa,GAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAM,gBAAgB,IAAM,QAAQ,GAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YACrH,MAAM,eAAe,GAAG,CAAC,kBAAkB,GAAI,KAAK,GAAI,WAAW,GAAG,kBAAkB,IAAI,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,wBAAwB;AAE5I,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,IAAI,MAAM,GAAG,CAAC;YACd,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;gBACnC,IAAI,IAAI,GAAG,CAAC;gBACZ,IAAI,GAAG,GAAG,CAAC;AACX,gBAAA,IAAI,QAAQ,CAAC,sBAAsB,EAAE;oBACnC,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAK,WAAW,KAAM,CAAC;oBAC9C,IAAI,QAAQ,EAAE;AACZ,wBAAA,MAAM,EAAE;wBACR,MAAM,GAAG,CAAC;oBACZ;AACA,oBAAA,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAI,MAAM,GAAG,kBAAkB,GAAG,eAAe,GAAG,wBAAwB;AAC9G,oBAAA,GAAG,GAAI,SAAS,GAAI,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,gBAAgB,GAAG,aAAa,GAAG,CAAC;AACnF,oBAAA,MAAM,EAAE;gBACV;qBAAO;oBACL,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC;AAC9C,oBAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACZ,wBAAA,IAAI,GAAG,MAAM,CAAC,CAAC;AACf,wBAAA,GAAG,GAAI,MAAM,CAAC,CAAC;AACf,wBAAA,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;AACjC,4BAAA,KAAK,GAAI,MAAM,CAAC,KAAK,GAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,gBAAgB;AACrE,4BAAA,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,iBAAiB;wBACzE;oBACF;gBACF;gBACA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA,EAAG,cAAc,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA,CAAA,CAAG,CAAC;gBACpG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAA,EAAG,cAAc,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA,CAAA,CAAG,CAAC;gBACvG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,CAAA,EAAG,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA,CAAA,CAAG,CAAC;gBAClG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,CAAA,EAAG,cAAc,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA,CAAA,CAAG,CAAC;AACnG,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK;AAC5B,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,EAAE,CAAA,CAAE,CAAC;AACvD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAA,CAAE,CAAC;AACxD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,EAAE,CAAA,CAAE,CAAC;AACtD,gBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,CAAA,CAAE,CAAC;AACvD,YAAA,CAAC,CAAC;QACJ;IACF;8GAjIW,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,ocAGH,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAHrC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAH1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC5C,iBAAA;;sBAIE,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,YAAY,EAAE,EAAC,IAAI,EAAE,UAAU,GAAG;;;MCPxC,qCAAqC,CAAA;AACvC,IAAA,mBAAmB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAEzD,IAAA,SAAS,CAAC,QAAqB,EAAA;QAC7B,MAAM,QAAQ,GAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACxE,QAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,0CAA0C,GAAG,QAAQ,CAAC,gCAAgC;AACzH,QAAA,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,yCAAyC,GAAG,QAAQ,CAAC,+BAA+B;QAEtH,OAAO;AACL,YAAA,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AACpC,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;SACnC;IACH;AAEA,IAAA,eAAe,CAAC,KAAoB,EAAA;QAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAG;AACxC,YAAA,OAAO,MAAM;QACf;aAAO;YACL,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAClC,YAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC/F,gBAAA,OAAO,KAAK;YACd;iBAAM;gBACJ,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrB;QACF;IACF;8GAzBW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAArC,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mCAAA,EAAA,CAAA,CAAA;;2FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAHjD,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,mCAAmC;AAC1C,iBAAA;;;AC0BK,MAAO,iBAAkB,SAAQ,qBAA6B,CAAA;AAtBpE,IAAA,WAAA,GAAA;;AAuBE,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAe;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAAyB;QACzD,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAU;AACtC,IAAA;8GAJY,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BH,2yCA0BA,EAAA,MAAA,EAAA,CAAA,8SAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDVI,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEd,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,8BAA8B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAF9B,yBAAyB,yDAGzB,qCAAqC,EAAA,IAAA,EAAA,mCAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAU5B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,eAAA,EAGd,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,aAAa;wBACb,mBAAmB;wBACnB,cAAc;wBACd,yBAAyB;wBACzB,OAAO;wBACP,8BAA8B;wBAC9B;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,2yCAAA,EAAA,MAAA,EAAA,CAAA,8SAAA,CAAA,EAAA;;;AEfG,MAAO,mBAAoB,SAAQ,qBAA6B,CAAA;8GAAzD,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,SAAA,EARnB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,mBAAmB,CAAC;AAClD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPS,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FASD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAX/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,yBAAyB,CAAC;AAClD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACuBK,MAAO,iBAAkB,SAAQ,qBAAoC,CAAA;AAMhE,IAAA,IAAI;AACb,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AAPT,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAe;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAAyB;AACzD,QAAA,IAAA,CAAA,0BAA0B,GAAG,KAAK,CAAC,QAAQ,qEAAU;QACrD,IAAA,CAAA,kBAAkB,GAAG,MAAM,EAAU;AAE5B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAGvC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,SAAS,CAAgB;AAC/C,YAAA,eAAe,EAAE,IAAI,SAAS,CAAuB,EAAE;AACxD,SAAA,CAAC;IACJ;IAGA,eAAe,GAAA;AACb,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE;QAC9C,MAAM,aAAa,GAAkB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE;AAChG,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,EAAE;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AACpE,QAAA,eAAe,CAAC,OAAO,CAAE,GAAG,IAAG;YAC7B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAW,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;;YAGjG,OAAO,CAAC,YAAY,CAAC,IAAI,CACxB,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,EACtB,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC,SAAS,CAAE;gBACX,IAAI,EAAE,MAAM,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,OAAO;AAC5D,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AAC9E,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAC3D,GAAG,CAAC,CAAC,CAAC,KAAI;YACT,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;YAChG,OAAO,IAAI,CAAC,eAAe;iBACzB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK;AACpB,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,CAAE;AAC7C,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAC5E,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC;AAC5D,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC3B;;AAGA,IAAA,8BAA8B,CAAC,WAAmB,EAAA;;AAEhD,QAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,eAAe;aACrD,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAE;AAC9D,aAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;;AAG3D,QAAA,0BAA0B,CAAC,OAAO,CAAC,IAAI,IAAG;AACxC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5E,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AAClD,QAAA,CAAC,CAAC;IACJ;;IAGA,qBAAqB,CAAC,YAAmB,EAAE,QAAgB,EAAA;;AAEzD,QAAA,IAAI,QAAQ,KAAK,CAAC,EAAE;YAClB;QACF;QACA,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAI;AAC7C,YAAA,MAAM,SAAS,GAAG,YAAY,IAAI,QAAQ;AAC1C,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC;YACvE,IAAI,SAAS,EAAE;;AAEb,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAClB,OAAO,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;gBACrC;YACF;iBAAO;;gBAEL,OAAO,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;8GAnFW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCH,q/CA4BA,EAAA,MAAA,EAAA,CAAA,gRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNI,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEX,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,8BAA8B,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,EAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAF9B,yBAAyB,EAAA,IAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAGzB,qCAAqC,EAAA,IAAA,EAAA,mCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAU5B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBApB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAGtB;wBACP,mBAAmB;wBACnB,WAAW;wBACX,yBAAyB;wBACzB,OAAO;wBACP,8BAA8B;wBAC9B,qCAAqC;qBACtC,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,q/CAAA,EAAA,MAAA,EAAA,CAAA,gRAAA,CAAA,EAAA;;;ME5BU,wCAAwC,CAAA;AAHrD,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,uCAAuC,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,yCAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAmC;QAClF,IAAA,CAAA,4BAA4B,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,8BAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAwB;AAyB7D,IAAA;AAxBC,IAAA,IAAsD,WAAW,GAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,uCAAuC,EAAE,KAAK,QAAQ;IACpE;AACA,IAAA,IAAmD,QAAQ,GAAA;AACzD,QAAA,OAAO,IAAI,CAAC,uCAAuC,EAAE,KAAK,KAAK;IACjE;AACA,IAAA,IAAoD,SAAS,GAAA;AAC3D,QAAA,OAAO,IAAI,CAAC,uCAAuC,EAAE,KAAK,MAAM;IAClE;AACA,IAAA,IAAqD,UAAU,GAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,uCAAuC,EAAE,KAAK,OAAO;IACnE;AAEA,IAAA,IAAoD,eAAe,GAAA;QACjE,OAAO,IAAI,CAAC,4BAA4B,EAAE,KAAK,oBAAoB,CAAC,SAAS;IAC/E;AAEA,IAAA,IAAkD,aAAa,GAAA;QAC7D,OAAO,IAAI,CAAC,4BAA4B,EAAE,KAAK,oBAAoB,CAAC,OAAO;IAC7E;AAEA,IAAA,IAAqD,gBAAgB,GAAA;QACnE,OAAO,IAAI,CAAC,4BAA4B,EAAE,KAAK,oBAAoB,CAAC,UAAU;IAChF;8GA1BW,wCAAwC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxC,wCAAwC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,EAAA,uCAAA,EAAA,EAAA,iBAAA,EAAA,yCAAA,EAAA,UAAA,EAAA,yCAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,4BAAA,EAAA,EAAA,iBAAA,EAAA,8BAAA,EAAA,UAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,kBAAA,EAAA,yBAAA,EAAA,eAAA,EAAA,0BAAA,EAAA,gBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,oBAAA,EAAA,2BAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAxC,wCAAwC,EAAA,UAAA,EAAA,CAAA;kBAHpD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,2CAA2C;AACtD,iBAAA;;sBAIE,WAAW;uBAAC,4BAA4B;;sBAGxC,WAAW;uBAAC,yBAAyB;;sBAGrC,WAAW;uBAAC,0BAA0B;;sBAGtC,WAAW;uBAAC,2BAA2B;;sBAIvC,WAAW;uBAAC,0BAA0B;;sBAItC,WAAW;uBAAC,wBAAwB;;sBAIpC,WAAW;uBAAC,2BAA2B;;;MCA7B,yBAAyB,CAAA;AApBtC,IAAA,WAAA,GAAA;;AAsBE,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,QAAQ,kDAAiC;AACzD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAwB;AACnD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAW,EAAE,mDAAC;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAgB,IAAI,0DAAC;AAC3C,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAgB,IAAI,0DAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,yDAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAkC,KAAK,2DAAC;QAC/D,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;AAC5C,IAAA;8GAVY,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARzB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,yBAAyB,CAAC;AACxD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7BH,80CAgCA,EAAA,MAAA,EAAA,CAAA,61BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhBI,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACR,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,wCAAwC,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,yCAAA,EAAA,8BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxC,mBAAmB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,WAAW,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAA,EAAA,eAAA,EAAA,MAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAUF,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBApBrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,OAAA,EAG9B;wBACP,YAAY;wBACZ,QAAQ;wBACR,mBAAmB;wBACnB,wCAAwC;wBACxC,mBAAmB;wBACnB,WAAW;qBACZ,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,+BAA+B,CAAC;AACxD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,80CAAA,EAAA,MAAA,EAAA,CAAA,61BAAA,CAAA,EAAA;;;AEbG,MAAO,kBAAmB,SAAQ,qBAA6B,CAAA;8GAAxD,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,SAAA,EATlB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,kBAAkB,CAAC;AACjD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAPS,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;2FAUD,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAZ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,EAAE;AACZ,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,wBAAwB,CAAC;AACjD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA;AACF,iBAAA;;;MCTY,uBAAuB,CAAA;AAClC,IAAA,WAAA,CAAoB,EAAc,EAAA;QAAd,IAAA,CAAA,EAAE,GAAF,EAAE;QACpB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;QACnD;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,KAAK,GAAqB,IAAI,CAAC,EAAE,CAAC,aAAiC;AACzE,QAAA,IAAI,OAAO,IAAI,KAAK,EAAE;YACpB,KAAK,CAAC,KAAK,EAAE;YACb,KAAK,CAAC,MAAM,EAAE;QAChB;IACF;8GAbW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACrC,iBAAA;;;ACyBK,MAAO,iBAAkB,SAAQ,qBAAsC,CAAA;AArB7E,IAAA,WAAA,GAAA;;AAsBE,QAAA,IAAA,CAAA,cAAc,GAAE,KAAK,CAAU,KAAK,0DAAC;AACrC,QAAA,IAAA,CAAA,OAAO,GAAE,KAAK,CAAU,KAAK,mDAAC;AAC/B,IAAA;8GAHY,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BH,yrBAoBA,EAAA,MAAA,EAAA,CAAA,2LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDPI,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACvB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACR,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,SAAS,qHACT,SAAS,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAUA,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBArB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAGtB;wBACP,uBAAuB;wBACvB,WAAW;wBACX,YAAY;wBACZ,QAAQ;wBACR,mBAAmB;wBACnB,SAAS;wBACT;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,yrBAAA,EAAA,MAAA,EAAA,CAAA,2LAAA,CAAA,EAAA;;;MErBU,eAAe,CAAA;AAE1B,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;8GAJW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACpB,iBAAA;;;MCCY,iBAAiB,CAAA;AAE5B,IAAA,SAAS,CAAC,KAAU,EAAA;AAClB,QAAA,OAAO,KAAK;IACd;8GAJW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,eAAe;AACtB,iBAAA;;;ACsCK,MAAO,iBAAkB,SAAQ,qBAAmC,CAAA;AAvB1E,IAAA,WAAA,GAAA;;AAwBE,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAe;AACxC,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,0DAAyB;AACzD,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAqB;QACjD,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,wDAAG,SAAS,EAAE,gBAAgB,EAAA,CAAE;QACzD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,qDAAG,SAAS,EAAE,eAAe,EAAA,CAAE;AACjD,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,SAAS,CAAgB,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA6F1C,IAAA;AA7FU,IAAA,IAAI;IACb,eAAe,GAAA;AACb,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE;AACtC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;QACjC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,IAAG;AACnC,YAAA,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE;YAC/D,MAAM,cAAc,GAAG,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE,aAAa,CAAE;AACjF,YAAA,IAAI,CAAC,YAAa,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAG;AACjF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAClC,GAAG,CAAC,CAAC,UAAU,KAAI;YACjB,IAAI,GAAG,GAA2C,EAAE;;;AAGpD,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,gBAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAI;AAC3C,oBAAA,MAAM,yBAAyB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK;AACnE,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe;yBAC7B,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK;AACpB,yBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,yBAAyB,CAAC,KAAK,CAAC,CAAE;AAC3D,gBAAA,CAAC,CAAC;YACJ;iBAAO;;gBAEL,GAAG,GAAG,UAAoC;YAC5C;AACA,YAAA,OAAO,GAAG;QACZ,CAAC,CAAC,EACF,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,EACtD,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC;AAC5D,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC3B;IAEA,wBAAwB,CAAC,WAAoB,EAAE,OAA+B,EAAA;QAC5E,IAAI,WAAW,EAAE;AACf,YAAA,MAAM,OAAO,GAAG,IAAI,SAAS,CAAuB,EAAE,CAAC;YACvD,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;YAEvE,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;gBACrC,MAAM,OAAO,GAAE,IAAI,WAAW,CAAW,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;gBAChG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;;;AAIzC,gBAAA,OAAO,CAAC,YAAY,CAAC,IAAI,CACxB,MAAM,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,EAC5C,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC,SAAS,CAAC;oBACV,IAAI,EAAE,MAAK;;AAET,wBAAA,MAAM,0BAA0B,GAAG,IAAI,CAAC,eAAe;6BACrD,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,MAAM,EAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAE;AAC9D,6BAAA,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;;AAG3D,wBAAA,0BAA0B,CAAC,OAAO,CAAC,IAAI,IAAG;AACxC,4BAAA,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;4BAClD,UAAW,CAAC,UAAU,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;AACnD,wBAAA,CAAC,CAAC;oBACJ;AACD,iBAAA,CAAC;AACJ,YAAA,CAAC,CAAC;AACF,YAAA,OAAO,OAAO;QAChB;aAAO;AACL,YAAA,OAAO,IAAI,WAAW,CAAS,MAAM,CAAC,OAAO,CAAC,EAAE,EAAC,WAAW,EAAE,IAAI,EAAC,CAAC;QACtE;IACF;;AAGA,IAAA,qBAAqB,CAAC,QAAgB,EAAA;;QAEpC,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YACzC;QACF;QAEA,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,IAAG;AAC/B,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAoC;AAChH,YAAA,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK;AACxC,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;AAEjD,YAAA,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;gBAC7C,IAAI,YAAY,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;oBAC9C,OAAO,CAAC,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;gBACrC;qBAAO;oBACL,OAAO,CAAC,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;gBACpC;AACF,YAAA,CAAC,CAAC;AAEJ,QAAA,CAAC,CAAC;IACJ;8GAnGW,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR,aAAA;AACF,SAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzCH,8+IA8FA,EAAA,MAAA,EAAA,CAAA,i7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDpEI,WAAW,sYACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGnB,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,SAAA,EAAA,OAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EANb,yBAAyB,yDAGzB,YAAY,EAAA,IAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EACZ,eAAe,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAGf,iBAAiB,iDACjB,qCAAqC,EAAA,IAAA,EAAA,mCAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAU5B,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAvB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAGtB;wBACP,yBAAyB;wBACzB,WAAW;wBACX,mBAAmB;wBACnB,YAAY;wBACZ,eAAe;wBACf,cAAc;wBACd,aAAa;wBACb,iBAAiB;wBACjB;qBACD,EAAA,SAAA,EACU;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,8+IAAA,EAAA,MAAA,EAAA,CAAA,i7BAAA,CAAA,EAAA;;;AEhBG,MAAO,iBAAkB,SAAQ,qBAA6B,CAAA;AAlBpE,IAAA,WAAA,GAAA;;AAmBE,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,oDAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAgB,IAAI,oDAAC;AACtC,IAAA;8GAHY,iBAAiB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EARf;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACV,aAAA;SACJ,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvBL,mRAMA,wMDMQ,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,iGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gHAAA,EAAA,MAAA,EAAA,CAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,uBAAuB,qEACvB,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAUH,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlB7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EAGtB;wBACL,YAAY;wBACZ,mBAAmB;wBACnB,uBAAuB;wBACvB,QAAQ;qBACX,EAAA,SAAA,EACU;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACV,yBAAA;AACJ,qBAAA,EAAA,QAAA,EAAA,mRAAA,EAAA,MAAA,EAAA,CAAA,gJAAA,CAAA,EAAA;;;MEjBQ,6BAA6B,CAAA;IAExC,SAAS,CAAC,KAAsB,EAAE,oBAAgD,EAAA;AAChF,QAAA,MAAM,GAAG,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,GAAE,KAAK;AAC9D,QAAA,OAAO,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC;IAC1D;8GALW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,2BAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;;;MCEY,aAAa,CAAA;AAExB,IAAA,SAAS,CAAC,QAAuE,EAAA;AAC/E,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,MAAK;AACtD,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,OAAO,EAAE,OAAO;AACjB,SAAA,CAAC,CAAC;IACL;8GAPW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,WAAW;AAClB,iBAAA;;;ACQK,MAAO,mBAAoB,SAAQ,qBAA6B,CAAA;AATtE,IAAA,WAAA,GAAA;;AAUE,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAgC;QAC7D,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;AACpC,IAAA;8GAHY,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdhC,8KAKA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKI,SAAS,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIA,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAT/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAAA,OAAA,EAGxB;wBACP,SAAS;AACV,qBAAA,EAAA,QAAA,EAAA,8KAAA,EAAA;;;MEmDU,wBAAwB,CAAA;AAkBnC,IAAA,0BAA0B;AACjB,IAAA,MAAM;AACN,IAAA,WAAW;AAEpB,IAAA,WAAA,GAAA;AArBA,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAqB;AAClD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAe;AACxC,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAa;QACvC,IAAA,CAAA,OAAO,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA0B;AACzC,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAU,KAAK,yDAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAgC;AAC7D,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,EAAE,0DAAC;AAClC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAwB,EAAE,kEAAC;AAC1D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAoB,EAAE,8DAAC;AAClD,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAA6B,EAAE,uEAAC;QACpE,IAAA,CAAA,YAAY,GAAG,MAAM,EAAuB;QAC5C,IAAA,CAAA,aAAa,GAAG,MAAM,EAAgB;QACtC,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAU;QACnC,IAAA,CAAA,aAAa,GAAG,aAAa;QAEpB,IAAA,CAAA,oBAAoB,GAAG,oBAAoB;QACpD,IAAA,CAAA,0BAA0B,GAA4B,EAAE;AAC/C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAGvC,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAc;AAC3C,YAAA,MAAM,EAAE,IAAI,WAAW,CAAU,IAAI,CAAE;AACvC,YAAA,iBAAiB,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;AACrC,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,IAAI,IAAI;AACjE,QAAA,MAAM,gBAAgB,GAAG,WAAW,KAAK,aAAa,GAAG,IAAI,GAAG,WAAW;AAC3E,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,YAAA,MAAM,EAAE,gBAAgB;YACxB,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE;AAC9C,SAAA,EAAE,EAAC,SAAS,EAAC,KAAK,EAAC,CAAC;AAErB,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,yBAAyB,IAAI,EAAE;QAC3F,IAAI,CAAC,8BAA8B,EAAE;AACrC,QAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE;QAEpB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAChC,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACnC,QAAA,GAAG,CAAC,MAAM,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC/C,GAAG,CAAC,MAAM,IAAG;YACX,MAAM,SAAS,GAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAA+B;YAC3E,MAAM,0BAA0B,GAAqC,EAAE;YACvE,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAG;gBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,2BAA2B,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,CAAC;gBACxF,IAAI,SAAS,EAAE;oBACb,0BAA0B,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAE,GAAG,aAAa;AACvH,oBAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;gBAChE;qBAAQ;AACN,oBAAA,0BAA0B,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,aAAa;AACpD,oBAAA,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;gBACjE;AACF,YAAA,CAAC,CAAC;YACF,OAAO;gBACL,MAAM,EAAC,MAAM,CAAC,MAAM;AACpB,gBAAA,iBAAiB,EAAE,0BAA0B;aAC9C;AACH,QAAA,CAAC,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC,IAAI,IAAG;AACjB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AACtB,gBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY;AAClC,gBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;gBACjC,MAAM,EAAE,IAAI,CAAC,MAAO;gBACpB,iBAAiB,EAAE,IAAI,CAAC,iBAAqD;AAC7E,gBAAA,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE;AAC/B,gBAAA,uBAAuB,EAAE,IAAI,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC5E,gBAAA,kBAAkB,EAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;gBAC1E,yBAAyB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B;AACtE,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,kBAAkB,EAAE;AAEzB;;;;AAIE;AACF,QAAA,IAAI,WAAW,KAAK,aAAa,EAAC;YAChC,IAAI,CAAC,iBAAiB,EAAE;QAC1B;IACF;IAEA,aAAa,GAAA;AACX,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;AAEvE,QAAA,QAAQ,QAAQ,CAAC,YAAY;AAC3B,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;gBAClE;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,0BAA0B,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,0BAA0B,CAAC,CAAC;gBACxL;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;gBACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC1G;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;gBACvB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;gBAC/G;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACvB,gBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,wBAAwB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;gBACxK;YACF;;IAEJ;IAEA,kBAAkB,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,MAAM;QAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,MAAM;QAC7D,MAAM,KAAK,GAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,KAAK;AAC5D,QAAA,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;QAE7J,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,EAAE;AACvC,YAAA,IAAI,aAAa;AACjB,YAAA,QAAQ,QAAQ,CAAC,YAAY;gBAC3B,KAAK,aAAa,CAAC,IAAI;oBAAE,aAAa,GAAG,EAAE;oBAAE;gBAC7C,KAAK,aAAa,CAAC,IAAI;oBAAE,aAAa,GAAG,CAAC;oBAAE;AAC5C,gBAAA,SAAS,aAAa,GAAG,CAAC;;;AAI5B,YAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AACzB,gBAAA,MAAM,EAAE;AACT,aAAA,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;QACvB;IACF;;IAIA,aAAa,GAAA;QACX,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;QACpD,MAAM,QAAQ,GAAwB,EAAE;;QAGxC,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO;;QAG/C,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM;QAExD,QAAQ,YAAY;AAClB,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;;AAEvB,gBAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,OAAO,CAAE,GAAG,IAAI,QAAQ,CAAC,CAAA,EAAG,eAAe,GAAG,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7H;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACvB,gBAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE;;gBAE/F,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,OAAO,CAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,eAAe,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/I;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;;AAEvB,gBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;gBAC7B;YACF;AAEA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;AACvB;;;;AAII;;AAGJ,gBAAA,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC;;;gBAI7B,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAsB;AAChE,gBAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;gBAClF,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;AAC5C,oBAAA,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO;;AAGtC,oBAAA,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,IAAI,aAAa;;AAGlF,oBAAA,QAAQ,CAAC,cAAc,CAAC,GAAG,aAAa;oBACxC,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,IAAG;wBAEpD,MAAM,yBAAyB,GAAG,CAAA,EAAG,cAAc,GAAG,WAAW,CAAC,OAAO,CAAA,CAAE;;AAE3E,wBAAA,IAAI,aAAa,KAAK,aAAa,EAAG;AACpC,4BAAA,QAAQ,CAAC,yBAAyB,CAAC,GAAG,aAAa;wBACrD;6BAAO;;;AAGL,4BAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,WAAW,CAAC,KAAK,CAAC,EAAE;AAChF,gCAAA,QAAQ,CAAC,yBAAyB,CAAC,GAAG,aAAa;4BACrD;iCAAO;;gCAEL,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,aAAa,KAAK,WAAW,CAAC,KAAK;AAChI,gCAAA,QAAQ,CAAC,yBAAyB,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC;4BACzD;wBACF;AACF,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;gBACF;YACF;;;QAIF,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAG;AAChD,YAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,iBAAkB,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,aAAa;YAClJ,MAAM,uBAAuB,GAAG,CAAA,EAAG,eAAe,GAAG,EAAE,CAAC,OAAO,CAAA,CAAE;AACjE,YAAA,IAAI,gBAAgB,KAAK,aAAa,EAAE;;AAEtC,gBAAA,QAAQ,CAAC,uBAAuB,CAAC,GAAG,aAAa;YACnD;iBAAO;;AAEL,gBAAA,IAAI,gBAAgB,KAAK,IAAI,EAAE;AAC7B,oBAAA,QAAQ,CAAC,uBAAuB,CAAC,GAAG,IAAI;gBAC1C;qBAAO;;AAEL,oBAAA,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,UAAU,KAAK,oBAAoB,CAAC,OAAO,GAAG,CAAC,GAAG,gBAAgB;gBAC3G;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAQ;IACjB;IAEA,8BAA8B,GAAA;AAC5B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;;AAE1C,QAAA,MAAM,uBAAuB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;;AAG9I,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;;AAGtI,QAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;;AAElF,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC5E;AAEA,IAAA,wBAAwB,CAAC,MAAe,EAAA;AACtC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;QAC1C,MAAM,SAAS,GAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,iBAA+B;QAE3E,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAG;AAChD,gBAAA,QAAQ,EAAE,CAAC,UAAU;oBACnB,KAAK,oBAAoB,CAAC,SAAS;wBAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,WAAW,CAAiB,IAAI,EAAC,EAAC,UAAU,EAAE,CAAC,gCAAgC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,+BAA+B,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;wBAAE;oBAClS,KAAK,oBAAoB,CAAC,OAAO;AAAK,wBAAA,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,WAAW,CAAiB,IAAI,EAAC,EAAC,UAAU,EAAE,CAAC,gCAAgC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;wBAAE;oBAC5M,KAAK,oBAAoB,CAAC,UAAU;AAAE,wBAAA,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,WAAW,CAAiB,IAAI,EAAC,EAAC,UAAU,EAAE,CAAC,gCAAgC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC;wBAAE;;AAEhN,YAAA,CAAC,CAAC;YACF;QACF;;AAGA,QAAA,MAAM,4BAA4B,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,IAAI,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;;AAGpK,QAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,4BAA4B,CAAC;IACpE;AAEA,IAAA,kBAAkB,CAAC,KAAa,EAAA;AAC9B,QAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IACrE;AAEA,IAAA,mBAAmB,CAAwC,UAAoB,EAAA;;;QAG7E,MAAM,QAAQ,GAAsB,EAAE;;AAGtC,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM;;QAG1C,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;;QAG7E,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,KAAI;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,QAAQ,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE;gBAC3C,OAAO,IAAI,EAAE;;AAEX,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAE,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAE;AAC/D,oBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;wBAC9C,KAAK,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;wBACnC;oBACF;gBACF;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,QAAoB;IAC7B;IAEA,iBAAiB,GAAA;QACf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9C;8GAtTW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9DrC,w6HAkHA,EAAA,MAAA,EAAA,CAAA,gwBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDtEI,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,sGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,yBAAyB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEzB,kBAAkB,EAAA,QAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,iBAAiB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,aAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGjB,mBAAmB,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EANnB,yBAAyB,EAAA,IAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAIzB,6BAA6B,EAAA,IAAA,EAAA,2BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAC7B,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAOJ,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBArBpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,iBAAiB;wBACjB,mBAAmB;wBACnB,iBAAiB;wBACjB,mBAAmB;wBACnB,iBAAiB;wBACjB,yBAAyB;wBACzB,yBAAyB;wBACzB,kBAAkB;wBAClB,iBAAiB;wBACjB,iBAAiB;wBACjB,6BAA6B;wBAC7B,aAAa;wBACb;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w6HAAA,EAAA,MAAA,EAAA,CAAA,gwBAAA,CAAA,EAAA;;;MEtDpC,qBAAqB,CAAA;IAEhC,SAAS,CAAC,YAA2C,EAAE,UAAmB,EAAA;AACxE,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS;IACjI;8GAJW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,mBAAmB;AAC1B,iBAAA;;;MCEY,uBAAuB,CAAA;AAElC,IAAA,WAAA,CAA6B,QAAoB,EAAA;QAApB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QADrC,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,qDAAc,KAAK,EAAE,wBAAwB,EAAA,CAAE;QAEvE,MAAM,CAAC,MAAK;YACV,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE;gBAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW;gBAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY;AAChE,gBAAA,MAAM,UAAU,GAAW,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,UAAU,EAAE,eAAe,GAAG,WAAW,CAAE;AAChG,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAO,EAAkB,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAA,EAAG,UAAU,GAAG,GAAG,CAAA,CAAA,CAAG,CAAC;YAChI;AACF,QAAA,CAAC,CAAC;IACJ;8GAXW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACrC,iBAAA;;;ACJK,SAAU,sBAAsB,CAAC,UAAkB,EAAE,IAA6B,EAAA;AACtF,IAAA,OAAO,IAAI,QAAQ,CAAC,CAAA,EAAG,eAAe,CAAA,QAAA,EAAW,UAAU,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3E;;MCSa,YAAY,CAAA;AACvB,IAAA,eAAe,GAAoE,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC;IACzH,OAAO,GAA+B,EAAE;IACxC,SAAS,GAAuC,EAAE;IAClD,kCAAkC,GAAW,CAAC,CAAC;IAC/C,iCAAiC,GAAW,CAAC,CAAC;AAE9C,IAAA,SAAS,CAAC,QAAA,GAAuC,EAAE,EAAE,QAAA,GAA+C,EAAE,EAAE,iCAAA,GAA4C,CAAC,CAAC,EAAE,sBAAA,GAAiC,CAAC,CAAC,EAAA;AACzL,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;AACvB,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;AACzB,QAAA,IAAI,CAAC,kCAAkC,GAAG,iCAAiC;AAC3E,QAAA,IAAI,CAAC,iCAAiC,GAAG,sBAAsB;IACjE;AAEA,IAAA,yBAAyB,CAAC,IAAY,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,kCAAkC,KAAK,IAAI;IACzD;AAGA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;IAC/F;AAEA,IAAA,IAAI,uBAAuB,GAAA;QACzB,OAAO,IAAI,CAAC,kCAAkC;IAChD;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,MAAM,GAAK,IAAI,CAAC,OAAO,IAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAK,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QAC7F,OAAO,MAAM,GAAG,QAAQ;IAC1B;AAEA,IAAA,gBAAgB,CAAC,kBAA0B,EAAE,IAAiB,EAAE,gBAA+B,EAAA;AAC7F;;;;;;AAME;QACF,IACC,CAAC,IAAI,CAAC,uBAAuB,GAAG,CAAC;AACjC,aAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACrB,aAAC,kBAAkB,IAAI,IAAI,CAAC,iCAAiC,CAAC;AAC9D,aAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;UACvB;AAEA,YAAA,IAAI,OAAO,CAAyB,CAAC,OAAO,EAAE,MAAM,KAAI;gBACtD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;oBAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,sBAAsB,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACjG,oBAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AACpB,wBAAA,OAAO,OAAO,CAAC,EAAC,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,UAAU,EAAC,CAAC;oBAC9E;gBACF;gBAEA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACjC,oBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAE,GAAG,EAAE;oBAEtH,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,IAAG;AAC7D;;AAEI;AACJ,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE;;;;AAII;4BAEJ,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;AAE5C,4BAAA,MAAM,cAAc,GAAG,WAAW,CAAC,EAAE,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AACzE,4BAAA,MAAM,gBAAgB,GAAG,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,YAAY,CAAC;AAE3E,4BAAA,MAAM,cAAc,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,cAAe,CAAC,CAAC;AAEjE,4BAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5I,4BAAA,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;;4BAExI,OAAO,gBAAgB,IAAI,eAAe;wBAC5C;6BAAO;;AAEL,4BAAA,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;wBAC1H;AACF,oBAAA,CAAC,CAAC;;AAEF,oBAAA,IAAI,kBAAkB,CAAC,MAAM,IAAI,CAAC,EAAE;wBAClC;oBACF;;oBAGA,MAAM,qBAAqB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAA8B,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;AAGzI,oBAAA,IAAI,CAAC,CAAC,qBAAqB,EAAE;AAC3B,wBAAA,OAAO,OAAO,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,CAAC,GAAG,EAAC,CAAC;oBACjE;;AAGA,oBAAA,MAAM,wBAAwB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAA8B,KAAK,CAAC,CAAC,CAAC,GAAG,KAAM,OAAO,CAAC,CAAC,GAAG,KAAM,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AAClK,oBAAA,IAAI,CAAC,CAAC,wBAAwB,EAAE;AAC9B,wBAAA,OAAO,OAAO,CAAC,EAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,CAAC,GAAG,EAAC,CAAC;oBACpE;gBACF;gBACA,MAAM,CAAC,IAAI,CAAC;AACd,YAAA,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAG;AACd,gBAAA,IAAI,CAAC,CAAC,KAAK,EAAE;oBACX,IAAI,CAAC,eAAe,GAAG;wBACrB,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,wBAAA,IAAI,EAAE,MAAM,IAAK,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI;AAC1C,wBAAA,MAAM,EAAE,QAAQ,IAAK,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI;qBACjD;gBACH;AACF,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAG;AACb,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACpB,YAAA,CAAC,CAAC;QACJ;IACF;AACD;;MChIY,MAAM,CAAA;AAWjB,IAAA,WAAA,CAAY,IAAY,EAAE,OAAA,GAAkB,CAAC,CAAC,EAAA;QARrC,IAAA,CAAA,gBAAgB,GAAqC,EAAE;QACvD,IAAA,CAAA,uBAAuB,GAAkB,EAAE;QAC3C,IAAA,CAAA,kBAAkB,GAAkB,EAAE;QACtC,IAAA,CAAA,yBAAyB,GAA4B,EAAE;QAChE,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,WAAW,GAAQ,aAAa;QAChC,IAAA,CAAA,gBAAgB,GAAY,KAAK;AAE/B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,OAAO;IAChC;IACA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa;AAChC,QAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;AACvC,QAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;YACpD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;QAC3C;IACF;AACD;;MCtBY,wBAAwB,CAAA;AAHrC,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,WAAW,GAAmB,EAAE;QAChC,IAAA,CAAA,SAAS,GAAW,CAAC;AA4DtB,IAAA;AA7DC,IAAA,WAAW;IAGX,YAAY,CAAC,IAAY,EAAE,OAAe,EAAA;;QAExC,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;QAGxC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B;;AAEA,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,gBAAgB,CAAC,IAAY,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC;IAC5D;AAEA,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAC1C,QAAA,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,gBAAgB;IAClD;IAEA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,eAAe,CAAC,OAA+B,EAAA;;AAE7C,QAAA,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;YACjF,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAC;AACzF,YAAA,IAAI,CAAC,CAAC,SAAS,EAAE;;AAEf,gBAAA,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW;AAE7C,gBAAA,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS;AACzC,gBAAA,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU;;AAG3C,gBAAA,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACxE,oBAAA,OAAO,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBAC1C;;AAEA,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE;AACrE,oBAAA,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK;gBACzC;;AAGA,gBAAA,SAAS,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;AAC5C,gBAAA,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE3F,gBAAA,SAAS,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AACvC,gBAAA,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEjF,gBAAA,SAAS,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;AAC9C,gBAAA,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjG;AACF,QAAA,CAAC,CAAC;IACJ;8GA7DW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCmBY,mBAAmB,CAAA;AACrB,IAAA,SAAS,GAAG,IAAI,OAAO,EAAkB;AACzC,IAAA,gBAAgB,GAAG,IAAI,eAAe,CAAqB,IAAI,CAAC;AACzE,IAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAClC,IAAA,YAAY;AACZ,IAAA,mBAAmB,GAAkB,EAAE,CAAC;AACxC,IAAA,0BAA0B,GAAuB,EAAE,CAAC;AAC3C,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AACzC,IAAA,WAAA,CAAkD,UAAkB,EAAmB,MAA4B,EAAmB,UAAoC,EAAA;QAAxH,IAAA,CAAA,UAAU,GAAV,UAAU;QAA2B,IAAA,CAAA,MAAM,GAAN,MAAM;QAAyC,IAAA,CAAA,UAAU,GAAV,UAAU;;AAE9I,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CACjC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,YAAY,CAAC,cAAc,CAAE,EACrD,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC;AACV,YAAA,IAAI,EAAE,MAAM,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AAC/K,SAAA,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,kBAAkC,EAAE,SAAqC,EAAE,UAAmC,EAAE,YAAqB,EAAA;;QAE/I,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB;AAEtC,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;;AAEtC,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,UAAU,CAAC,iCAAiC,CAAC;;YAGrH,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,YAAY,IAAI,CAAC,CAAC,EAAE,mBAAmB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC;QACvK;;QAGA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;;QAGpD,IAAI,gBAAgB,GAAuB,SAAS;;AAGpD,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,EAAE,CAAC;;QAGnC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,YAAY,EAAE;;AAElC,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;;YAGtC,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;;AAG/D,YAAA,IAAI,CAAC,CAAC,gBAAgB,EAAE;AACtB,gBAAA,gBAAgB,GAAG,gBAAgB,CAAC,WAAW;YACjD;QACF;AAEA,QAAA,IAAI,gBAAgB,KAAK,SAAS,EAAE;;AAElC,YAAA,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC5E;;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,YAAY,CAAC,aAAa,EAAE,IAAI,EAAE,EAAC,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAC,EAAC,CAAC;;AAGxI,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC7E;IAEA,EAAE,CAAC,GAAG,GAAkB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,IAAI,CACxC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACxC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CACxB;IACH;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK;QACnD,IAAI,CAAC,eAAe,EAAE;YACpB;QACF;;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;YACjG;QACF;;AAGA,QAAA,IAAI,CAAC,CAAC,eAAe,CAAC,UAAU,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;QAC3D;AACA,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAa,CAAC,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACpF;IAEA,gBAAgB,GAAA;AACd,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;AAC5D,QAAA,IAAI,CAAC,CAAC,oBAAoB,EAAE;YAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;AACnE,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;AAClB,gBAAA,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;YAC3C;QACF;IACF;AAEA,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACrD,QAAA,OAAO,MAAM,EAAE,gBAAgB,IAAI,KAAK;IAC1C;AAEA;;;;AAII;IACJ,gBAAgB,CAAC,IAAY,EAAE,UAAkB,EAAA;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;;AAG/C,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,CAAC,EAAE,EAAE;AACtD,YAAA,OAAO,EAAE;QACX;AACA,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;QAE1C,QAAQ,YAAY;YAElB,KAAK,aAAa,CAAC,IAAI,EAAE,OAAO,MAAM,CAAC,WAAW;AAClD,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;;gBAEvB,MAAM,WAAW,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,WAAW,CAAC;AAC1F,gBAAA,MAAM,OAAO,GAAG,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC;gBAEnF,OAAO,CAAC,OAAO,EAAE,WAAW,IAAI,WAAW,EAAE,KAAK,KAAK,EAAE;YAC3D;AACA,YAAA,KAAK,aAAa,CAAC,IAAI,EAAE;;AAEvB,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAA4B;gBACvD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnG,gBAAA,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,WAAW,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;AAC9I,gBAAA,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;AACA,YAAA,SAAS,OAAO,EAAE;;IAEtB;AAEA,IAAA,aAAa,CAAC,SAAoC,EAAA;;AAEhD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,SAAS,CAAC,OAAO,CAAC,WAAW,IAAG;AAC9B,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC;AAC3D,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,qBAAqB,CAAC,UAAkC,EAAA;;AAEtD,QAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC;;;QAI3C,MAAM,cAAc,GAAI,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;;AAGzG,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC;;AAIvD,QAAA,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,IAAG;YACpF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;AACvD,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,sBAAsB,CAAC,WAAwB,EAAA;AAC7C,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK;QACnD,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;AAExC,QAAA,IAAI,CAAC,CAAC,eAAe,EAAE;AACrB;;;AAGI;AACJ,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC,IAAI,eAAe,CAAC,WAAW,IAAI,CAAC,EAAE;AACvE,gBAAA,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,WAAW;YACzC;;AAGA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC;AAC7E,YAAA,IAAI,CAAC,CAAC,MAAM,EAAE;AACZ,gBAAA,MAAM,CAAC,UAAU,GAAG,WAAW;YACjC;AACA,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,eAAe,EAAC,CAAC;QAChF;QACA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;AACvD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC;;AAGvC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC;AAC5E,QAAA,IAAI,CAAC,CAAC,SAAS,EAAE;AACf,YAAA,SAAS,CAAC,SAAS,GAAG,WAAW;QACnC;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,WAAW,EAAC,CAAC;;AAG1E,QAAA,IAAI,WAAW,CAAC,YAAY,KAAK,KAAK,EAAE;YACtC,IAAI,CAAC,gBAAgB,EAAE;QACzB;;AAGA,QAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;AACxB,YAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,CAAC;QAC9C;IACF;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;IAC7C;AAEA,IAAA,gBAAgB,CAAC,IAAY,EAAA;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAC/C;IAEA,aAAa,CAAC,OAAe,EAAE,KAAU,EAAA;QACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;IAC3C;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACnC;AAEA,IAAA,YAAY,CAAC,UAAmB,EAAA;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;IAC7C;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;IACxC;AAEA,IAAA,YAAY,CAAC,SAAuB,EAAA;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE;YACX;QACF;;;AAIA,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE;YACpE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,WAAW;;AAG5D,YAAA,IAAI,CAAC,CAAC,WAAW,EAAE;AACjB,gBAAA,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;AAC5B,oBAAA,MAAM,sBAAsB,GAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;oBACrF,IAAI,CAAC,sBAAsB,EAAC;wBAC1B;oBACF;oBACA,MAAM,qBAAqB,GAAG,SAAS,CAAC,MAAM,GAAK,SAAS,CAAC,MAAuB,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,SAAS;AAChI,oBAAA,sBAAsB,CAAC,WAAW,GAAG,qBAAqB,KAAK,SAAS,GAAG,aAAa,GAAG,qBAAqB;AAClH,gBAAA,CAAC,CAAC;YACJ;;AAEA,YAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM;QACvC;aAAO;;AAEL,YAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM;QACvC;;QAGA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,2BAA2B,EAAE;;AAGpF,QAAA,MAAM,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,SAAS,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAExF,QAAA,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC;AACpC,QAAA,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE9E,QAAA,MAAM,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC;AAC3C,QAAA,SAAS,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAG5F,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACvG,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAEnH,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC;AAErC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,YAAY,CAAC,uBAAuB,EAAE,IAAI,EAAE,EAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,EAAC,EAAC,CAAC;;QAG1J,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC;;AAEzD,QAAA,MAAM,iBAAiB,IAAK,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC,gBAAgB,KAAK,QAAQ,CAAC,YAAY,KAAK,IAAI,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI,CAAC,KAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,MAAM,KAAK,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAEpN,QAAA,MAAM,eAAe,KAAK,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE,YAAY,KAAK,aAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,EAAE;AACtJ,QAAA,IAAI,iBAAiB,IAAI,eAAe,EAAE;YACxC,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AAEA,IAAA,WAAW,CAAC,SAA8B,EAAA;AACxC,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,KAAI;AACrD,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC;AACpC,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,gBAAgB,GAAA;;QAElB,OAAO,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAE,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC;IACpG;;AAGA,IAAA,IAAI,eAAe,GAAA;QACjB,OAAO,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,IAAI,CAAC;IACjD;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE;AAC9B,QAAA,IAAI,WAAW;AACf,QAAA,IAAI;AACF,YAAA,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC/F;QAAC,OAAO,CAAC,EAAE;YACT,WAAW,GAAG,KAAK;QACrB;;;QAKA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;QAClD,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAC7D,gBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE;AACjF,gBAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAI;AACtC,oBAAA,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE;AACjF,gBAAA,CAAC,CAAC;YACJ;YACA,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE;AAChD,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC;gBACvF,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,KAAK,aAAa,EAAE;AAClD,oBAAA,MAAM,CAAC,WAAW,GAAG,CAAC;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,SAAS,GAAmB;YAChC,QAAQ,EAAE,CAAC;AACX,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,iBAAiB,CAAC,OAAO;YACtC,KAAK,EAAE,WAAW,CAAC,OAAO;YAC1B,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC;YAC/C,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;YACnD,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,IAAI,CAAC;AAC9D,YAAA,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS;AACpC,YAAA,UAAU,EAAE,WAAW,CAAC,OAAO,EAAE;AACjC,YAAA,YAAY,EAAE,WAAW,CAAC,iBAAiB,EAAE;AAC7C,YAAA,aAAa,EAAE,WAAW;AAC1B,YAAA,OAAO,EAAE;gBACP,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACxD,aAAA;AACD,YAAA,eAAe,EAAE;AACf,gBAAA,0BAA0B,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAClG,gBAAA,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC;AACtC,aAAA;AACD,YAAA,gBAAgB,EAAE,EAAE;AACpB,YAAA,kBAAkB,EAAE,EAAE;AACtB,YAAA,SAAS,EAAE,EAAE;SACd;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC5C,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAC,CAAC,CAAC;AAEnG,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,YAAY,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,EAAC,CAAC;IACvE;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK;;AAEnD,QAAA,MAAM,WAAW,GAAG,eAAe,EAAE,YAAY,IAAI,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,WAAW,CAAC,EAAE;;AAErG,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;;AAEzF,YAAA,IAAI,CAAC,CAAC,YAAY,EAAE;gBAClB,OAAO,YAAY,CAAC,WAAW;YACjC;QACF;;QAGA,IAAI,eAAe,GAAG,CAAC,eAAe,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC;;AAG7D,QAAA,IAAI,CAAC,CAAC,eAAe,EAAE;AACrB,YAAA,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,uBAAuB,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAE;AAC3I,YAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,WAAW;gBACrF,IAAI,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;oBAClC,eAAe,GAAG,QAAS;gBAC7B;YACF;QACF;;AAGA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe;AAC1C,QAAA,GAAG;;YAED,MAAM,CAAC,GAAG,IAAI,CAAC,YAAa,CAAC,SAAS,CAAC,eAAe,CAAC;;AAGvD,YAAA,IAAI,CAAC,CAAC,YAAY,KAAK,aAAa,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAG;AAC9J,gBAAA,OAAO,eAAe;YACxB;;AAEA,YAAA,eAAe,EAAE;QACnB,CAAC,QAAQ,eAAe,GAAG,aAAa,GAAG,CAAC,EAAE;AAC9C,QAAA,OAAO,eAAe;IACxB;AAEA,IAAA,kBAAkB,CAAC,YAAgC,EAAA;AACjD,QAAA,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAG;;AAE9B,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC;;YAGpF,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;YACrC;AAEA,YAAA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU;AACrC,YAAA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,WAAW;YAE/E,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClC,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;;AAG3D,YAAA,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,IAAG;gBACzC,MAAM,SAAS,GAAG,CAAA,EAAG,QAAQ,CAAC,OAAO,CAAA,EAAG,EAAE,CAAC,OAAO,CAAA,CAAE;gBACpD,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI;gBACxC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACpD,gBAAA,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7B,YAAA,CAAC,CAAC;;AAGF,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE;AACzB,gBAAA,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,kCAAkC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAG;AAC/I,oBAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1C,gBAAA,CAAC,CAAC;YACJ;;YAGA,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;AACpC,gBAAA,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;oBACrC,MAAM,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAC,OAAO,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAE;oBACpD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AAClD,oBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5B,gBAAA,CAAC,CAAC;YACJ;iBAAO;;AAEL,gBAAA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;;AAGrC,oBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;;oBAG7E,IAAI,CAAC,gBAAgB,EAAE;AACrB,wBAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;oBACrC;;AAGA,oBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;oBAC1D,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;AAGjC,oBAAA,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;wBACrC,MAAM,QAAQ,GAAG,CAAA,EAAG,OAAO,CAAC,OAAO,CAAA,EAAG,GAAG,CAAC,OAAO,CAAA,CAAE;wBACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC;AAClD,wBAAA,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5B,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,mBAAmB,CAAC,IAAY,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,SAAS;QAClB;AACA,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC;IACvE;IAEA,2BAA2B,GAAA;QACzB,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,IAAI,EAAE;;AAEjF,QAAA,IAAI,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;AACtC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,IAAI;YACF,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,oBAAoB,CAAC;QACvD;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,0BAA0B,CAAC,QAAqB,EAAA;QAC9C,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,CAAC,EAAG;AACxH,YAAA,IAAI,cAAsC;YAE1C,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE;gBAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAChG,gBAAA,cAAc,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC;YACxC;YAEA,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,IAAI,EAAE;gBAChD,cAAc,GAAG,QAAQ,CAAC;AACvB,qBAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC;qBAC5D,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;YAC1B;AAEA,YAAA,MAAM,YAAY,GAAiB;gBACjC,IAAI,EAAE,QAAQ,CAAC,YAAY;AAC3B,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,MAAM,EAAE,cAAe;AACvB,gBAAA,iBAAiB,EAAE,EAAE;AACrB,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,cAAe,CAAC,GAAG,cAAc,GAAG,CAAC,cAAe,CAAC;AAC5F,gBAAA,kBAAkB,EAAE,EAAE;AACtB,gBAAA,yBAAyB,EAAE;aAC5B;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACjC;IACF;IAEA,8BAA8B,GAAA;AAC5B,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,CAAC;;;;;QAO3E,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC;AACrE,QAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;AACd,YAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC/E;IACF;AApiBW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,kBAQV,WAAW,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AARpB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BASc,MAAM;2BAAC,WAAW;;;MC5BpB,oBAAoB,CAAA;AAHjC,IAAA,WAAA,GAAA;QAIE,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgB,iBAAiB,kDAAE,KAAK,EAAE,eAAe,EAAA,CAAE;AA2BzE,IAAA;AA1BC,IAAA,IAA8D,mBAAmB,GAAA;AAC/E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,iBAAiB;IAC3C;AAEA,IAAA,IAAgE,oBAAoB,GAAA;AAClF,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,mBAAmB;IAC7C;AACA,IAAA,IAA+D,mBAAmB,GAAA;AAChF,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,kBAAkB;IAC5C;AAEA,IAAA,IAA6D,iBAAiB,GAAA;AAC5E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,gBAAgB;IAC1C;AAEA,IAAA,IAA4D,gBAAgB,GAAA;AAC1E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,eAAe;IACzC;AAEA,IAAA,IAA+D,mBAAmB,GAAA;AAChF,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,kBAAkB;IAC5C;AAEA,IAAA,IAA8D,kBAAkB,GAAA;AAC9E,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,iBAAiB;IAC3C;8GA3BW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oCAAA,EAAA,0BAAA,EAAA,sCAAA,EAAA,2BAAA,EAAA,qCAAA,EAAA,0BAAA,EAAA,mCAAA,EAAA,wBAAA,EAAA,kCAAA,EAAA,uBAAA,EAAA,qCAAA,EAAA,0BAAA,EAAA,oCAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC5B,iBAAA;;sBAGE,WAAW;uBAAC,oCAAoC;;sBAIhD,WAAW;uBAAC,sCAAsC;;sBAGlD,WAAW;uBAAC,qCAAqC;;sBAIjD,WAAW;uBAAC,mCAAmC;;sBAI/C,WAAW;uBAAC,kCAAkC;;sBAI9C,WAAW;uBAAC,qCAAqC;;sBAIjD,WAAW;uBAAC,oCAAoC;;;MCzBtC,sBAAsB,CAAA;AAEjC,IAAA,WAAA,GAAA;QADA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,2DAAmB,KAAK,EAAE,iBAAiB,EAAA,CAAE;QAE3E,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AACtD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;QAElC,MAAM,CAAC,MAAK;AACV,YAAA,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC,kBAAkB;AAC/C,gBAAA,KAAK,MAAM;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,CAAC;oBAAE;AACvI,gBAAA,KAAK,QAAQ;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,eAAe,CAAC;oBAAE;AAC5I,gBAAA,KAAK,OAAO;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,cAAc,EAAE,UAAU,CAAC;oBAAE;AACtI,gBAAA;oBAAS,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,EAAE,CAAC,CAAC;oBAAE;;AAGrE,YAAA,QAAQ,IAAI,CAAC,eAAe,EAAE,CAAC,gBAAgB;AAC7C,gBAAA,KAAK,KAAK;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC;oBAAC;AAClE,gBAAA,KAAK,QAAQ;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,QAAQ,CAAC;oBAAE;AAChI,gBAAA,KAAK,QAAQ;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC;oBAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;oBAAE;AAClI,gBAAA;oBAAS,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBAAE;;AAEpE,QAAA,CAAC,CAAC;IACJ;8GArBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;MCEY,kBAAkB,CAAA;AAG7B,IAAA,WAAA,GAAA;QAFA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAC,QAAQ,2DAAmB,KAAK,EAAE,aAAa,EAAA,CAAE;QAGvE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa;AACtD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAClC,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACrD,MAAM,QAAQ,GAAE,kBAAkB,CAAC,SAAS,CAAC,oBAAoB,CAAC;QAClE,MAAM,CAAC,MAAK;YACV,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,aAAa;YACpG,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,YAAY;YAEjG,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;YACpD,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAElD,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC;YAC3D,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC;AAC3D,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,KAAuC,EAAA;AACrD,QAAA,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,EAAE;AAC9B,YAAA,OAAO,MAAM;QACf;;AAGA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;QACrB;AAEA,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACvH,gBAAA,OAAO,KAAK;YACd;iBAAM;gBACJ,OAAO,CAAA,EAAG,KAAK,CAAA,EAAA,CAAI;YACrB;QACF;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;8GAxCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;MCCY,WAAW,CAAA;AAEtB,IAAA,SAAS,CAAC,QAAgB,EAAA;AACxB,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;aAAO;AACL,YAAA,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE;YAC5D,OAAO,oBAAoB,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAA,CAAE,CAAC;QACjD;IAEF;8GAVW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;2FAAX,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCAY,0BAA0B,CAAA;AAErC,IAAA,WAAA,GAAA;QADA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,oDAAsB,KAAK,EAAE,2BAA2B,EAAA,CAAE;QAEjF,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,aAAiC;AAC1E,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAClC,QAAA,MAAM,QAAQ,GAAK,MAAM,CAAC,QAAQ,CAAC;;QAGnC,MAAM,CAAC,MAAK;;AAEV,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,gBAAA,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAA,CAAE,CAAC;YAC9E;iBAAO;AACL,gBAAA,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,IAAG;AAC1C,oBAAA,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE;AACrC,wBAAA,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC;oBAChD;AACF,gBAAA,CAAC,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE;AACxB,gBAAA,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAC1C,CAAA;AACiB,yBAAA,EAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,CAAA;AACrC,gBAAA,EAAA,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAA;;;AAG7B,QAAA,CAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC;IACJ;8GAjCW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACxC,iBAAA;;;MCyCY,mBAAmB,CAAA;AAkBrB,IAAA,KAAK;AACL,IAAA,WAAW;AACpB,IAAA,WAAA,GAAA;AAnBA,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,sDAAkB;AAC9C,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAa;QACvC,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA0B;AACvD,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgB,mBAAmB,iDAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAS,CAAC,oDAAC;QAC3B,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2B;QACxD,IAAA,CAAA,gBAAgB,GAAG,MAAM,EAAQ;QACjC,IAAA,CAAA,iBAAiB,GAAG,MAAM,EAAkB;QAC5C,IAAA,CAAA,iBAAiB,GAAG,MAAM,EAA2B;QAI5C,IAAA,CAAA,cAAc,GAAG,MAAM,CAAS,IAAI,CAAC,QAAQ,EAAE,0DAAC;QAEhD,IAAA,CAAA,UAAU,GAAG,SAAS;AAGtB,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACnC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;;QAGvC,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,IAAI,CACxE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;QAC7B,QAAQ,CAAC,eAAe,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAC5D,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAC3B,KAAK,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAC9B,CAAC,CACH,CAAC;;AAEF,QAAA,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACvE,GAAG,CAAC,eAAe,KAAK;AACtB,YAAA,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,CAAC,eAAe,GAAG,SAAS,GAAG;gBACtC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC;gBACnE,QAAQ,EAAE,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACvG;AACF,SAAA,CAAC,CAAC,CACJ,EAAE,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;AAE5D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC,QAAQ,oDAAC;AAEvE;;;AAGI;AACJ,QAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,KAAK,CACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EACpF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CACnE,CAAC,IAAI,CACJ,GAAG,CAAC,QAAQ,IAAG;;AAEb,YAAA,MAAM,WAAW,GAAwB,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC;;YAGrM,IAAI,eAAe,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI;;AAG3G,YAAA,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC,EAAE;gBAC3B,eAAe,GAAG,CAAC;YACrB;;YAGA,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC;YAE9C,OAAO;gBACL,WAAW;AACX,gBAAA,KAAK,EAAE;aACR;AACH,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACxC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAC5B,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;;AAG3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CACjF,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,EAC9B,GAAG,CAAC,CAAC,QAAqB,KAAK,QAAQ,CAAC,WAAW,GAAG,CAAC,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,KAAK,IAAI,QAAQ,CAAC,YAAY,KAAK,aAAa,CAAC,MAAM,CAAC,EACnL,KAAK,CAAC,CAAC,CAAC,CACT,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,IAAI,CAC3C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC;YACV,IAAI,EAAE,SAAS,IAAG;AAChB,gBAAA,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AAC1C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC;AACD,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,IAAI,CAC7C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC;YACV,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI;AACtC,SAAA,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,IAAI,CAC9C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC,CAAC,SAAS,CAAC;YACV,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBACrC,UAAU,EAAE,CAAC,CAAC,WAAW;gBACzB,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,MAAM;gBACnD,YAAY,EAAE,CAAC,CAAC,YAAY;AAC5B,gBAAA,aAAa,EAAE;AACb,oBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;AACpC,oBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACvC;aACF;AACF,SAAA,CAAC;;AAGF,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAC/B,KAAK,CACJ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC3B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,uBAAuB,CAAC,CACnD,CAAC,IAAI,CACL,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAC/B,GAAG,CAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC,SAAS,IAAI,EAAE,EAAE,MAAM,CAAC,KAAK,IAAK,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAChH,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC1B;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,CAAG;IAChL;AAEA,IAAA,uBAAuB,CAAC,SAAoC,EAAA;AAC1D,QAAA,IAAI,SAAS,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;QAC/B;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;QAC/B;IACF;AAEA,IAAA,eAAe,CAAC,SAAuB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC;IACpC;AAEA,IAAA,cAAc,CAAC,SAA8B,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC;IACnC;AAEA,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;IAC/B;AAEA,IAAA,YAAY,CAAC,OAAe,EAAA;;;;AAI1B,QAAA,IAAI;YACF,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA,CAAE,CAAC;AACzD,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC3D;;AAEA,YAAA,OAAO,EAAE;QACX;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,EAAE;QACX;IACF;8GAhKW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9ChC,0xGAuFA,EAAA,MAAA,EAAA,CAAA,m65QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvDI,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,yBAAyB,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACzB,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAExB,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,gBAAgB,oJAEhB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAElB,0BAA0B,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAR1B,qBAAqB,EAAA,IAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAGrB,yBAAyB,EAAA,IAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAIzB,WAAW,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIF,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBApB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACP,wBAAwB;wBACxB,yBAAyB;wBACzB,wBAAwB;wBACxB,qBAAqB;wBACrB,uBAAuB;wBACvB,gBAAgB;wBAChB,yBAAyB;wBACzB,oBAAoB;wBACpB,sBAAsB;wBACtB,kBAAkB;wBAClB,WAAW;wBACX;AACD,qBAAA,EAAA,QAAA,EAAA,0xGAAA,EAAA,MAAA,EAAA,CAAA,m65QAAA,CAAA,EAAA;;;MEtCU,yBAAyB,CAAA;AAEpC,IAAA,SAAS,CAAC,IAAY,EAAA;AACpB,QAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC;IACzB;8GAJW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MC4BY,8BAA8B,CAAA;AAnB3C,IAAA,WAAA,GAAA;AAoBE,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAsB;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAU;AACnC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,oDAAa;AACvC,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,uDAAgC;AAC7D,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAgB,mBAAmB,iDAAC;AACjD,QAAA,IAAA,CAAA,cAAc,GAAG,KAAK,CAAS,EAAE,0DAAC;QAClC,IAAA,CAAA,qBAAqB,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAA2B;QACxD,IAAA,CAAA,SAAS,GAAG,SAAS;QAiBF,IAAA,CAAA,UAAU,GAAG,SAAS;AAC1C,IAAA;AAhBC,IAAA,YAAY,CAAC,OAAe,EAAA;;;;AAI1B,QAAA,IAAI;YACF,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AACjC,gBAAA,OAAO,SAAS;YAClB;;AAEA,YAAA,OAAO,EAAE;QACX;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,EAAE;QACX;IACF;8GAvBW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAJ9B;YACT,oBAAoB;AACrB,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC/BH,+/CAwCA,EAAA,MAAA,EAAA,CAAA,kx4QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvBI,wBAAwB,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,wBAAwB,2GACxB,uBAAuB,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEvB,oBAAoB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,sBAAsB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,kBAAkB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAHlB,yBAAyB,yDAIzB,yBAAyB,EAAA,IAAA,EAAA,uBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAShB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAnB1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACP,wBAAwB;wBACxB,wBAAwB;wBACxB,uBAAuB;wBACvB,yBAAyB;wBACzB,oBAAoB;wBACpB,sBAAsB;wBACtB,kBAAkB;wBAClB;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,SAAA,EACpC;wBACT,oBAAoB;AACrB,qBAAA,EAAA,QAAA,EAAA,+/CAAA,EAAA,MAAA,EAAA,CAAA,kx4QAAA,CAAA,EAAA;;;AE/BH;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"touchpoll-tp-survey.mjs","sources":["../../../projects/tp.survey/src/lib/tp.survey.config.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.ts","../../../projects/tp.survey/src/lib/icons/default.icons/default.icons.module.ts","../../../projects/tp.survey/src/lib/tp.survey.module.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.ts","../../../projects/tp.survey/src/lib/component/question.caption/question.caption.component.html","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.ts","../../../projects/tp.survey/src/lib/component/navigation.button/navigation.button.component.html","../../../projects/tp.survey/src/lib/tp.survey.const.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.validator.ts","../../../projects/tp.survey/src/lib/core/tp.survey.logic/tp.survey.logic.service.ts","../../../projects/tp.survey/src/lib/pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe.ts","../../../projects/tp.survey/src/lib/tp.survey.enum.ts","../../../projects/tp.survey/src/lib/component/answer/answer.master/answer.master.component.ts","../../../projects/tp.survey/src/lib/directive/alternatives.container/alternatives.container.directive.ts","../../../projects/tp.survey/src/lib/pipe/get.question.image.background.size/get.question.image.background.css.size.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ss/answer.ss.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.info/answer.info.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ms/answer.ms.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.additional/directive/additional.answer.caption.position/additional.answer.caption.position.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.additional/answer.additional.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.end/answer.end.component.ts","../../../projects/tp.survey/src/lib/directive/focus.and.select/focus.and.select.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ol/answer.ol.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.array/as.form.array.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/pipe/as.form.control/as.form.control.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.sl/answer.sl.component.html","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.od/answer.od.component.html","../../../projects/tp.survey/src/lib/pipe/get.additional.value.by.value/get.additional.value.by.value.pipe.ts","../../../projects/tp.survey/src/lib/pipe/key.values/key.values.pipe.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.lang/answer.lang.component.html","../../../projects/tp.survey/src/lib/directive/canvas.context/canvas.context.ts","../../../projects/tp.survey/src/lib/directive/canvas.container/canvas.container.directive.ts","../../../projects/tp.survey/src/lib/directive/canvas.image/canvas.image.directive.ts","../../../projects/tp.survey/src/lib/directive/canvas.drawing/canvas.drawing.directive.ts","../../../projects/tp.survey/src/lib/directive/canvas.region/canvas.region.directive.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ac/answer.ac.component.ts","../../../projects/tp.survey/src/lib/component/answer/answer.ac/answer.ac.component.html","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.ts","../../../projects/tp.survey/src/lib/component/answer/container.answer/container.answer.component.html","../../../projects/tp.survey/src/lib/pipe/get.active.language/get.active.language.pipe.ts","../../../projects/tp.survey/src/lib/directive/update.font.size/update.font.size.directive.ts","../../../projects/tp.survey/src/lib/tp.survey.method.ts","../../../projects/tp.survey/src/lib/core/tp.servey.quota/tp.survey.quota.ts","../../../projects/tp.survey/src/lib/core/tp.survey.answer/tp.survey.answer.ts","../../../projects/tp.survey/src/lib/core/tp.survey.interview/tp.survey.interview.service.ts","../../../projects/tp.survey/src/lib/core/tp.survey.core/tp.survey.core.service.ts","../../../projects/tp.survey/src/lib/directive/survey.theme/survey.theme.directive.ts","../../../projects/tp.survey/src/lib/directive/image.position/image.position.directive.ts","../../../projects/tp.survey/src/lib/directive/image.site/image.size.directive.ts","../../../projects/tp.survey/src/lib/pipe/is.video/is.video.pipe.ts","../../../projects/tp.survey/src/lib/directive/insert.question.css/insert.question.css.directive.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.ts","../../../projects/tp.survey/src/lib/component/survey.play/survey.play.component.html","../../../projects/tp.survey/src/lib/pipe/generate.default.answer/generate.default.answer.pipe.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.ts","../../../projects/tp.survey/src/lib/component/survey.question.preview/survey.question.preview.component.html","../../../projects/tp.survey/src/public-api.ts","../../../projects/tp.survey/src/touchpoll-tp-survey.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\r\nimport {TpSurveyPlatform} from './tp.survey.type';\r\n\r\n\r\n\r\nexport interface TpSurveyConfig {\r\n tpPlatform: TpSurveyPlatform;\r\n}\r\n\r\n\r\n\r\n/**\r\n * A DI token for the survey service.\r\n *\r\n * @publicApi\r\n */\r\nexport const TP_SURVEY_CONFIGURATION = new InjectionToken<TpSurveyConfig>('__TOUCHPOLL_SURVEY_CONFIGURATION_TOKEN__')\r\n","export const defaultIcons = {\r\n 'iconButtonNext': `\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\"/>\r\n `,\r\n 'iconButtonBack': `\r\n <path d=\"M15.41 16.59L10.83 12l4.58-4.59L14 6l-6 6 6 6 1.41-1.41z\"/>\r\n `,\r\n 'iconIsMute': `\r\n <path d=\"M7.6,4H4A3,3,0,0,0,1,7H1a3,3,0,0,0,3,3H7.6a7.9,7.9,0,0,1,3.9,1L15,13V1L11.4,3A7.9,7.9,0,0,1,7.6,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <path d=\"M6,10v2.9a4,4,0,0,0,.3,1.5L7,17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"4\"/>\r\n <path d=\"M15,4h.1A1.9,1.9,0,0,1,17,5.9V8.1A1.9,1.9,0,0,1,15.1,10H15a0,0,0,0,1,0,0V4A0,0,0,0,1,15,4Z\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n <line x1=\"1\" y1=\"1\" x2=\"17\" y2=\"17\" fill=\"none\" stroke=\"#444\" stroke-linejoin=\"round\" stroke-width=\"2\"/>\r\n `,\r\n}\r\n","import {inject, NgModule, PLATFORM_ID} from '@angular/core';\r\nimport {isPlatformServer} from '@angular/common';\r\nimport {DomSanitizer} from '@angular/platform-browser';\r\nimport {MatIconRegistry} from '@angular/material/icon';\r\nimport {defaultIcons} from './default.icons';\r\n\r\n@NgModule()\r\nexport class DefaultIconsModule {\r\n constructor() {\r\n const domSanitizer = inject(DomSanitizer);\r\n const matIconRegistry = inject(MatIconRegistry);\r\n const platformId = inject(PLATFORM_ID);\r\n for (const [name, svgText] of Object.entries(defaultIcons)) {\r\n const iconText: string = `<svg viewBox=\"0 0 24 24\">${isPlatformServer(platformId) ? '' : svgText}</svg>`;\r\n matIconRegistry.addSvgIconLiteral(name, domSanitizer.bypassSecurityTrustHtml(iconText));\r\n }\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {TP_SURVEY_CONFIGURATION, TpSurveyConfig} from './tp.survey.config';\r\nimport {DefaultIconsModule} from './icons/default.icons/default.icons.module';\r\n\r\n@NgModule({\r\n imports: [\r\n DefaultIconsModule\r\n ]\r\n})\r\nexport class TpSurveyModule {\r\n // #docregion for-root\r\n static forRoot(config: TpSurveyConfig): ModuleWithProviders<TpSurveyModule> {\r\n return {\r\n ngModule: TpSurveyModule,\r\n providers: [\r\n {provide: TP_SURVEY_CONFIGURATION, useValue: config}\r\n ]\r\n };\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, input} from '@angular/core';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-caption',\r\n templateUrl: './question.caption.component.html',\r\n styleUrls: ['./question.caption.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class QuestionCaptionComponent {\r\n caption = input<SafeHtml>();\r\n captionHelp = input<SafeHtml>();\r\n}\r\n","<div class=\"container-main\">\r\n <div [innerHTML]= \"caption()\" class=\"question-caption-font survey-object-caption\"></div>\r\n <div [innerHTML]= \"captionHelp()\" class=\"question-caption-helper-font survey-object-caption\"></div>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, input, output} from '@angular/core';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {NavigationButtonDirection} from '../../tp.survey.type';\r\n\r\n@Component({\n selector: 'tp-survey-navigation-button',\n imports: [\n MatButton,\n MatIcon\n ],\n templateUrl: './navigation.button.component.html',\n styleUrl: './navigation.button.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\r\nexport class NavigationButtonComponent {\r\n direction = input.required<NavigationButtonDirection>()\r\n caption = input<string>();\r\n onClick = output<NavigationButtonDirection>()\r\n}\r\n\r\n","<button mat-flat-button (click)=\"onClick.emit(direction())\" class=\"navigation-button\">\r\n @if (direction() === 'back') {\r\n <mat-icon svgIcon=\"iconButtonBack\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n\r\n <span class=\"navigation-button-label\">{{ caption() }}</span>\r\n\r\n @if (direction() === 'next') {\r\n <mat-icon iconPositionEnd svgIcon=\"iconButtonNext\" aria-hidden=\"false\" class=\"navigation-button-icon\"/>\r\n }\r\n</button>\r\n\r\n","export const MISSING_VALUE = -97;\r\nexport const VIDEO_EXTENSION_LIST = ['.mpg','.webm','.ogv','.asx','.mpeg','.m4v', '.mp4', '.mov', '.avi', '.mkv', '.wmv', '.flv'];\r\n\r\n\r\nexport const BASE_WIDTH = 1280;\r\nexport const BASE_HEIGHT = 800;\r\n\r\nexport const LOGIC_FUNC_TEXT = `\r\n const self = this;\r\n var setVar = function(varName, value) {\r\n self[varName] = value\r\n };\r\n var FUNC_IN = function(varName, array) {\r\n return isNaN(parseInt(varName)) ? false : array.indexOf(varName) > -1\r\n };\r\n var FUNC_INTERSECT = function (var1, var2) {\r\n return Array.isArray(var1) && Array.isArray(var2) ? var1.some(function(el1) {\r\n return var2.some(function (el2) {\r\n return el2 === el1;\r\n });\r\n }) : false;\r\n };\r\n var value = function(varName, defaultValue) {\r\n const defVal = !defaultValue ? 0 : defaultValue;\r\n if ( (varName === -97) || (varName === null) || (varName === undefined) ) {\r\n return defVal\r\n } else {\r\n return varName\r\n }\r\n }\r\n for (var p in this) eval(\"var \" + p + \" = this[p];\"); `;\r\n","import {AbstractControl, ValidatorFn} from '@angular/forms';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {IdbAlternative, IdbSection} from '../../../tp.survey.interface';\r\n\r\nexport const answerDefaultValidator = (): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if ((control.value === null) || (control.value === MISSING_VALUE) ) {\r\n return {answerRequired: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const answerODValidator = (minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerOdAnswerType: true}\r\n }\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && (maxValue ?? 0 > 0) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerOLValidator = (isPhoneNumber: boolean, canSkip: boolean): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n const text = typeof control.value !== 'string' ? '' : control.value.trim();\r\n //Нужно, чтобы в поле ввели хоть что-то.\r\n if ( text.length === 0 && !canSkip) {\r\n return {answerOlAnswerError: true}\r\n }\r\n\r\n if (isPhoneNumber) {\r\n const res = text.length === 9 && !isNaN(Number(text)) || text === 'skip';\r\n if (!res) {\r\n return {answerOlTelephoneFormatError: true}\r\n }\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerSSValidator = (): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {answerSsAnswerType: true}\r\n }\r\n\r\n //нет ответа\r\n if (control.value < 0) {\r\n return {answerMissing: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\n\r\nexport const answerMSValidator = (visibleAlternativeList: Array<IdbAlternative>, minCount: number = 1, maxCount: number = 0): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //visibleAlternativeList - альтернативы на экране, если их 0, то смысла показывать вопрос нет\r\n //minCount - Минимальное количество ответов, которое может выбрать респондент, по умолчанию 1.\r\n //maxCount - Максимальное количество ответов, которые может выбрать респондент. Если указано 0, количество не ограничено. По умолчанию 0\r\n\r\n if (visibleAlternativeList.length === 0) {\r\n return null;\r\n }\r\n\r\n //ответ не массив, такого быть не может, это ошибка\r\n if (!Array.isArray(control.value)) {\r\n return {answerMsAnswerType: true}\r\n }\r\n \r\n //Проблема минимального количества ответов - если доступных на экране альтернатив меньше, чем настройка \"минимальное количество ответов\", то это нужно учитывать.\r\n //Поэтому вычисляем минимально возможное количество ответов, которое может выбрать респондент и если оно меньше значения из настроек, возьмем его.\r\n let minPossibleCount = minCount;\r\n if (control.value.length > 0) {\r\n const currentAlternativeGroup = visibleAlternativeList.find(alternative => alternative.Value === control.value[0])?.GroupNo ?? 1;\r\n minPossibleCount = Math.min(visibleAlternativeList.filter(alternative => alternative.GroupNo === currentAlternativeGroup).length, minCount);\r\n }\r\n\r\n //количество ответов\r\n const count = control.value.length;\r\n\r\n //проверяем minCount\r\n if (count < minPossibleCount) {\r\n return {answerMsMinCount: true}\r\n }\r\n\r\n //проверяем maxCount\r\n if (maxCount > 0 && count > maxCount) {\r\n return {answerMsMaxCount: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const answerSlValidator = (required: boolean, minAnswersCount: number, sectionList: Array<IdbSection>): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //если ответы для каждой секции необязательны, ничего не проверяем и выходим.\r\n if (!required) {\r\n return null;\r\n }\r\n if (!control.value) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //если хоть 1 сессия не имеет значения(или количество выбранных альтернатив меньше minAnswersCount), тогда ответ на вопрос не полный.\r\n const hasMissingAnswers = sectionList.some(section => {\r\n const sectionAnswers = control.value[section.SectionGuid.toString()];\r\n if (!sectionAnswers) {\r\n return true;\r\n } else{\r\n return Array.isArray(sectionAnswers) ? sectionAnswers.length === 0 || (minAnswersCount > 1 && sectionAnswers.length < minAnswersCount) : sectionAnswers === 0;\r\n }\r\n });\r\n if (hasMissingAnswers) {\r\n return {answerMissing: true};\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n\r\nexport const additionalAnswerDefaultValidator = (required: boolean): ValidatorFn => {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if ( (control.value === null || (typeof control.value === 'string' && control.value.trim().length === 0)) && required) {\r\n return { additionalAnswerRequired: true}\r\n }\r\n //ошибок нет, всё корректно\r\n return null;\r\n };\r\n};\r\n\r\nexport const additionalAnswerNumberValidator = (required: boolean, minValue: number | null, maxValue: number | null): ValidatorFn => (control: AbstractControl): {[key: string]: any} | null => {\r\n //ответ не обязательный, можно не контролировать\r\n if (!required) {\r\n return null;\r\n }\r\n\r\n //ответ не число, такого быть не может, это ошибка\r\n if (!Number.isSafeInteger(control.value)) {\r\n return {additionalAnswerType: true}\r\n }\r\n\r\n //Нужно проверить 2 ситуации.\r\n //1 В настройках вопроса указали minValue, тогда введённое число должно быть больше minValue.\r\n //2 В настройках вопроса указали maxValue, тогда введённое число должно быть меньше maxValue.\r\n //Если эти условия не выполняются, то это ошибка.\r\n if ( (Number.isSafeInteger(minValue) && control.value < minValue!) || (Number.isSafeInteger(maxValue) && control.value > maxValue!) ) {\r\n return {answerOdAnswerError: true}\r\n }\r\n\r\n //ошибок нет, всё корректно\r\n return null;\r\n};\r\n","import {Injectable} from '@angular/core';\r\nimport {LOGIC_FUNC_TEXT} from '../../tp.survey.const';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyLogicService {\r\n #vars: LogicObject = Object.create(null);\r\n\r\n get vars(): object {\r\n return this.#vars;\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this.#vars[varName] = value;\r\n }\r\n\r\n getLogicVars(): LogicObject{\r\n return {...this.#vars};\r\n }\r\n\r\n executeLogic(expression?: string): boolean {\r\n try {\r\n const textExpression = typeof expression !== 'string' ? '' : expression.trim();\r\n return !textExpression ? true : new Function(`${LOGIC_FUNC_TEXT} return ${textExpression}`).call(this.#vars);\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n executePostScript(expression?: string): void {\r\n try {\r\n const textExpression = typeof expression !== 'string' ? '' : expression.trim();\r\n new Function(`${LOGIC_FUNC_TEXT} ${textExpression}`).call(this.#vars);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport {DomSanitizer, SafeHtml} from '@angular/platform-browser';\r\nimport {IdbLogicCaptionObject, IdbMultilangObject} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {TFindVariableVoid} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'multiLangObjectToHtml',\r\n})\r\nexport class MultiLangObjectToHtmlPipe implements PipeTransform {\r\n readonly #sanitizer = inject(DomSanitizer);\r\n readonly #logic = inject(TpSurveyLogicService);\r\n\r\n transform(caption: Array<IdbMultilangObject>, language: number, logicCaptions?: Array<IdbLogicCaptionObject>, findVariable?: TFindVariableVoid): SafeHtml {\r\n //сначала проверим есть ли текст у которого выполняется Expression.\r\n if (Array.isArray(logicCaptions)){\r\n const correctLogicCaption = logicCaptions.find(logicCaption => this.#logic.executeLogic(logicCaption.Expression));\r\n const correctLogicCaptionLangObj = correctLogicCaption?.MultiLangCaptions.find(capt => capt.lang === language);\r\n const text = correctLogicCaptionLangObj?._SYS_CaptionHTML ?? correctLogicCaptionLangObj?.CaptionHtml ?? '';\r\n\r\n //если есть хоть какой-то текст - показываем его\r\n if ((text ?? '').trim().length > 0){\r\n return this.#sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n }\r\n\r\n //если основой текст не указан, выходим\r\n if (!Array.isArray(caption)) {\r\n return ''\r\n }\r\n\r\n //ищем основной текс с нужным языком\r\n const langObj = caption.find(capt => capt.lang === language);\r\n const dirtyHtmlText = langObj?._SYS_CaptionHTML ?? langObj?.CaptionHtml ?? '';\r\n\r\n const normalizeHtmlText = dirtyHtmlText.replace(/(q_\\w{16}_A_\\w{3}|q_\\w{16}|v_\\w{16})/gmi, sysName => {\r\n const caption = !!findVariable ? findVariable(sysName) : 'unknown';\r\n const newDiv = document.createElement(\"div\");\r\n newDiv.innerHTML = caption;\r\n newDiv.textContent;\r\n return newDiv.textContent ?? '';\r\n });\r\n\r\n return this.#sanitizer.bypassSecurityTrustHtml(normalizeHtmlText);\r\n }\r\n\r\n}\r\n","export enum ViewModel {\r\n vmDesktop = 1, // desktop view\r\n vmMobile = 2, // phone view\r\n vmTablet = 3, // tablet view\r\n}\r\n\r\nexport enum SurveyEvents {\r\n seSurveyStart = 'survey.start', // on start survey\r\n seSurveyViewModelUpdate = 'survey.view.model.update', // on viewmodel updated\r\n seSurveyDeveloperModeUpdate = 'survey.developer.mode.update', // on Developermode updated\r\n seSurveyEnd = 'survey.end', // on end survey\r\n seQuestionShow = 'question.show', // before question show\r\n seQuestionHide = 'question.hide', // before question hide\r\n seQuestionRefresh = 'question.refresh', // refresh question (after edit)\r\n seQuestionAnswersCompleted = 'answers.completed', // after all answers complete\r\n seQuestionAnswersChange = 'answers.change', // after answers change\r\n seSurveyLanguageUpdate = 'survey.language.update' // on survey language updated\r\n}\r\n\r\nexport enum AdditionalAnswerType {\r\n aatNumber = 1,\r\n aatText = 2,\r\n aatBoolean = 3,\r\n}\r\n\r\nexport enum QuestionsType {\r\n eqLANG = 'LANG',\r\n eqSS = 'SS',\r\n eqMS = 'MS',\r\n eqINFO = 'INFO',\r\n eqSL = 'SL',\r\n eqOL = 'OL',\r\n eqOD = 'OD',\r\n eqAC = 'AC',\r\n eqEND = 'END',\r\n}\r\n\r\nexport enum ResultativeStatus {\r\n rsUnset = -1,\r\n rsUnresultative = 0,\r\n rsResultative = 1,\r\n}\r\n\r\nexport enum ValidStatus {\r\n vsUnset = -1,\r\n vsUnValid = 0,\r\n vsValid = 1,\r\n vsDoubtful = 2\r\n}\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input} from '@angular/core';\r\nimport {ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerT, TFindVariableVoid} from '../../../tp.survey.type';\r\nimport {ViewModel} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'app-answer-master',\r\n template: '',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMasterComponent),\r\n multi: true\r\n },\r\n ],\r\n\r\n})\r\nexport abstract class AnswerMasterComponent<T extends AnswerT> implements ControlValueAccessor {\r\n language = input.required<number>();\r\n viewModel = input.required<ViewModel>();\r\n findVariable = input.required<TFindVariableVoid>();\r\n repositoryPath = input<string>('');\r\n viewModelE = ViewModel;\r\n control: FormControl<T | null>;\r\n protected onModelChange = (data: T) => {};\r\n protected onModelTouched = () => {};\r\n protected readonly destroyRef = inject(DestroyRef);\r\n constructor() {\r\n this.control = new FormControl(null);\r\n this.control.valueChanges.pipe(\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe(res => {\r\n this.onModelChange(res!);\r\n })\r\n }\r\n\r\n registerOnChange(fn: (data: T) => void): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onModelTouched();\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n }\r\n\r\n writeValue(value: T): void {\r\n this.control.patchValue(value, {emitEvent: false});\r\n }\r\n\r\n skipClick(): void{\r\n this.control.patchValue( 'skip' as T, {emitEvent: true});\r\n }\r\n}\r\n","import {ContentChildren, DestroyRef, Directive, effect, ElementRef, inject, input, QueryList, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\nimport {BreakpointObserver, BreakpointState} from '@angular/cdk/layout';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {map} from 'rxjs/operators';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAlternativesContainer]',\r\n})\r\nexport class AlternativesContainerDirective {\r\n question = input.required<IdbQuestion>( {alias: 'tpSurveyAlternativesContainer'});\r\n viewModel = input.required<ViewModel>({alias: 'containerViewModel'});\r\n @ContentChildren('tablet_alt', {read: ElementRef, })\r\n private set alternativesTemplates(value: QueryList<ElementRef<HTMLElement>> | undefined) {\r\n this.#updateLayout(value);\r\n }\r\n readonly #destroyRef = inject(DestroyRef);\r\n readonly #renderer = inject(Renderer2);\r\n readonly #elementRef = inject(ElementRef);\r\n readonly #breakpointObserver = inject(BreakpointObserver);\r\n constructor() {\r\n effect(() => this.#updateLayout());\r\n }\r\n\r\n #updateLayout(alternatives?: QueryList<ElementRef<HTMLElement>>): void {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n this.#updateTabletLayout(alternatives);\r\n } else {\r\n this.#updateDesktopLayout();\r\n }\r\n }\r\n\r\n #updateDesktopLayout(): void {\r\n this.#breakpointObserver.observe([\"(max-width: 480px)\"]).pipe(\r\n map((result: BreakpointState) => result.matches),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe((isMobile: boolean) => {\r\n let columnCount: number;\r\n if (isMobile) {\r\n columnCount = this.question().MobileViewAlternativeColumnCount || 1; //if 0 will be 1\r\n } else {\r\n columnCount = this.question().AlternativeColumnCount || 1; //if 0 will be 1\r\n }\r\n this.#renderer.setStyle(this.#elementRef.nativeElement, 'grid-template-columns', `repeat(${columnCount}, 10fr)`);\r\n });\r\n }\r\n\r\n #updateTabletLayout(alternatives?: QueryList<ElementRef<HTMLElement>>): void {\r\n if (!alternatives) {\r\n return;\r\n }\r\n\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const isMobile= this.#breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n const question = this.question();\r\n const transformToPer = (newVal: number, containerSideSize: number): number => newVal * 100 / containerSideSize; // превращает размер px в %\r\n\r\n const containerWidthFull = this.#elementRef.nativeElement.offsetWidth;\r\n const containerHeightFull = this.#elementRef.nativeElement.offsetHeight;\r\n\r\n // const alternativeColumnCount = question.TabletViewAlternativeColumnCount ?? 1;\r\n let alternativeColumnCount;\r\n if (isMobile) {\r\n alternativeColumnCount = this.question().MobileViewAlternativeColumnCount ?? 1; //if 0 will be 1\r\n } else {\r\n alternativeColumnCount = this.question().TabletViewAlternativeColumnCount ?? 1; //if 0 will be 1\r\n }\r\n\r\n const horizontalRatio = containerWidthFull / BASE_WIDTH;\r\n const verticalRatio = containerHeightFull / BASE_HEIGHT;\r\n\r\n const maxAlternativeWidth: number = containerWidthFull * 0.7; // для авторазмера установим максимальный размер альтернативы в 70% от доступной длинны контейнера\r\n\r\n const alternativesCount = Math.max(alternatives.length, 1);\r\n\r\n const horizontalDistance = question.AlternativeHorizontalDistance ?? 10 * horizontalRatio;\r\n const verticalDistance = (question.AlternativeVerticalDistance ?? 10) * verticalRatio;\r\n const marginTop = question.AlternativeMarginTop ?? 10 * verticalRatio;\r\n const marginLeft = (question.AlternativeMarginLeft ?? 0) * horizontalRatio;\r\n const columnCount: number = alternativeColumnCount > alternativesCount ? alternativesCount : alternativeColumnCount;\r\n const rowCount: number = Math.round(alternativesCount / columnCount);\r\n\r\n const defaultHorizontalPadding = 10 * horizontalRatio;\r\n\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (question.AlternativeAutoSize ?? true) { // если авторазмер, то высоту и ширину считаем автоматом\r\n const marginsWidth = horizontalDistance * (columnCount - 1) + defaultHorizontalPadding * 2;\r\n width = Math.min((containerWidthFull - marginsWidth) / columnCount, maxAlternativeWidth);\r\n height = alternatives.reduce((maxHeight, alt) => { // узнаем максимальную высоту альтернативы\r\n const altWidthPercent = transformToPer(width, containerWidthFull);\r\n this.#renderer.setStyle(alt.nativeElement, 'width', `${altWidthPercent}%`);\r\n return Math.max(maxHeight, alt.nativeElement.clientHeight) ;\r\n }, 0);\r\n } else { // если авторазмер отключён, размеры берём из настроек\r\n width = question.AlternativeWidth ?? 300;\r\n height = question.AlternativeHeight ?? 50;\r\n }\r\n\r\n const deltaVertical= Math.max(containerHeightFull - height * rowCount - verticalDistance * (rowCount - 1), 0);\r\n const deltaHorizontal = (containerWidthFull - width * columnCount - horizontalDistance * (columnCount - 1)) / 2 - defaultHorizontalPadding;\r\n\r\n let rowNum = -1;\r\n let colNum = 0;\r\n alternatives.forEach((alt, index) => {\r\n let left = 0;\r\n let top = 0;\r\n if (question.AlternativeAutoArrange) {\r\n const isNewRow = (index) % columnCount === 0;\r\n if (isNewRow) {\r\n rowNum++;\r\n colNum = 0;\r\n }\r\n left = marginLeft + colNum * width + colNum * horizontalDistance + deltaHorizontal + defaultHorizontalPadding ;\r\n top = marginTop + rowNum * height + rowNum * verticalDistance + deltaVertical / 2 ;\r\n colNum++;\r\n } else {\r\n const altObj = question.Alternativelist[index];\r\n if (!!altObj) {\r\n left = altObj.x;\r\n top = altObj.y;\r\n if (!question.AlternativeAutoSize) {\r\n width = altObj.width > 0 ? altObj.width : question.AlternativeWidth;\r\n height = altObj.height > 0 ? altObj.height : question.AlternativeHeight;\r\n }\r\n }\r\n }\r\n this.#renderer.setStyle(alt.nativeElement, 'width', `${transformToPer(width, containerWidthFull)}%`);\r\n this.#renderer.setStyle(alt.nativeElement, 'height', `${transformToPer(height, containerHeightFull)}%`);\r\n this.#renderer.setStyle(alt.nativeElement, 'left', `${transformToPer(left, containerWidthFull)}%`);\r\n this.#renderer.setStyle(alt.nativeElement, 'top', `${transformToPer(top, containerHeightFull)}%`);\r\n });\r\n } else {\r\n alternatives.forEach((alt) => {\r\n this.#renderer.setStyle(alt.nativeElement, 'width', ``);\r\n this.#renderer.setStyle(alt.nativeElement, 'height', ``);\r\n this.#renderer.setStyle(alt.nativeElement, 'left', ``);\r\n this.#renderer.setStyle(alt.nativeElement, 'top', ``);\r\n });\r\n }\r\n }\r\n\r\n}\r\n","import {inject, Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\nimport {BreakpointObserver} from '@angular/cdk/layout';\r\n\r\n@Pipe({\r\n name: 'getQuestionImageBackgroundCssSize',\r\n})\r\nexport class GetQuestionImageBackgroundCssSizePipe implements PipeTransform {\r\n readonly #breakpointObserver = inject(BreakpointObserver);\r\n\r\n transform(question: IdbQuestion): {height: string | null, width: string | null} {\r\n const isMobile= this.#breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n const height = isMobile ? question.MobileViewAlternativeBackgroundImageHeight : question.AlternativeBackgroundImageHeight;\r\n const width = isMobile ? question.MobileViewAlternativeBackgroundImageWidth : question.AlternativeBackgroundImageWidth;\r\n\r\n return {\r\n height: this.#normalizeValue(height),\r\n width: this.#normalizeValue(width),\r\n };\r\n }\r\n\r\n #normalizeValue(value: string | null): string{\r\n if (!value || typeof value !== 'string' ) {\r\n return 'auto';\r\n } else {\r\n value = value.toLowerCase().trim();\r\n if (value.endsWith('%') || value.endsWith('px') || value.endsWith('vh') || value.endsWith('vw')) {\r\n return value;\r\n }else {\r\n return `${value}px`;\r\n }\r\n }\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, forwardRef, input, output,} from '@angular/core';\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatIcon} from '@angular/material/icon';\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\n\n@Component({\n selector: 'tp-survey-answer-ss',\n templateUrl: './answer.ss.component.html',\n styleUrls: ['./answer.ss.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatRadioGroup,\n ReactiveFormsModule,\n MatRadioButton,\n MultiLangObjectToHtmlPipe,\n MatIcon,\n AlternativesContainerDirective,\n GetQuestionImageBackgroundCssSizePipe\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerSSComponent),\n multi: true\n },\n ]\n})\nexport class AnswerSSComponent extends AnswerMasterComponent<number>{\n question = input.required<IdbQuestion>();\n alternativeList = input.required<Array<IdbAlternative>>();\n onAlternativeClick = output<number>();\n}\n\n\n","<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 <div class=\"container-caption\" [class.container-image]=\"!!alt.BackGround.Image\">\r\n @if (alt.BackGround.Image) {\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n </mat-radio-button>\r\n }\r\n</mat-radio-group>\r\n\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-info',\r\n template: '',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerInfoComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\nexport class AnswerInfoComponent extends AnswerMasterComponent<number>{\r\n}\r\n\r\n\r\n","import {AfterViewInit, ChangeDetectorRef, Component, forwardRef, inject, input, output} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {MatIcon} from '@angular/material/icon';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbAlternative, IdbQuestion} from '../../../tp.survey.interface';\r\nimport {AlternativesContainerDirective} from '../../../directive/alternatives.container/alternatives.container.directive';\r\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\r\n\r\ninterface IAnswerMSForm {\r\n alternativeList: FormArray<FormControl<boolean>>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ms',\r\n templateUrl: './answer.ms.component.html',\r\n styleUrls: ['./answer.ms.component.scss'],\r\n imports: [\r\n ReactiveFormsModule,\r\n MatCheckbox,\r\n MultiLangObjectToHtmlPipe,\r\n MatIcon,\r\n AlternativesContainerDirective,\r\n GetQuestionImageBackgroundCssSizePipe,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerMSComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerMSComponent extends AnswerMasterComponent<Array<number>> implements AfterViewInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n alternativeMaxAnswersCount = input.required<number>();\r\n onAlternativeClick = output<number>();\r\n readonly answerMSForm: FormGroup<IAnswerMSForm>;\r\n readonly #ref = inject(ChangeDetectorRef);\r\n constructor() {\r\n super();\r\n this.answerMSForm = new FormGroup<IAnswerMSForm>({\r\n alternativeList: new FormArray<FormControl<boolean>>([])\r\n })\r\n }\r\n\r\n\r\n ngAfterViewInit(): void {\r\n const alternativeList = this.alternativeList();\r\n const answerAsArray: Array<number> = Array.isArray(this.control.value) ? this.control.value : [];\r\n const maxCount = this.alternativeMaxAnswersCount();\r\n this.answerMSForm.controls.alternativeList.clear({emitEvent: false});\r\n alternativeList.forEach( alt => {\r\n const control = new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n\r\n //У альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n control.valueChanges.pipe(\r\n filter(value => value),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe( {\r\n next: () => this.#uncheckControlsWithOtherGroup(alt.GroupNo)\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.push(control, {emitEvent: false});\r\n });\r\n\r\n this.answerMSForm.controls.alternativeList.valueChanges.pipe(\r\n map((_) => {\r\n const checkedArray = this.answerMSForm.controls.alternativeList.controls.map(c => c.value) ?? [];\r\n return this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => checkedArray[index] )\r\n }),\r\n tap(answerArray => this.#disableExtraControls(answerArray.length, maxCount)),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n });\r\n \r\n this.#ref.detectChanges();\r\n }\r\n\r\n //отжимает контролы у которых отличается номер группы\r\n #uncheckControlsWithOtherGroup(groupNumber: number): void {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в answerMSForm.controls.alternativeList\r\n .filter(data => data.alternative.GroupNo !== groupNumber); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = this.answerMSForm.controls.alternativeList.at(data.index);\r\n altControl.patchValue(false, {emitEvent: false})\r\n })\r\n }\r\n \r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(currentCount:number, maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0) {\r\n return\r\n }\r\n this.alternativeList().forEach((_, altIndex) => {\r\n const isDisable = currentCount >= maxCount;\r\n const control = this.answerMSForm.controls.alternativeList.at(altIndex);\r\n if (isDisable) {\r\n //надо дизейблить те которые не выбраны\r\n if (!control.value) {\r\n control.disable({emitEvent: false})\r\n }\r\n } else {\r\n //лимита нет, можно выбирать все\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n }\r\n}\r\n","<ng-container [formGroup]=\"answerMSForm\">\r\n <div\r\n class=\"container-ms-ss-alternatives\"\r\n [tpSurveyAlternativesContainer] = \"question()\"\r\n [containerViewModel]=\"viewModel()\"\r\n formArrayName=\"alternativeList\">\r\n @for (alt of answerMSForm.controls.alternativeList.controls; track alt; let indx = $index) {\r\n <mat-checkbox\r\n #tablet_alt\r\n [formControl]=\"alt\"\r\n [style.font-size.%]=\"viewModel() === viewModelE.vmTablet ? question().AlternativeTabletFontSize : undefined\"\r\n (change)=\"onAlternativeClick.emit(alternativeList()[indx].Value)\"\r\n class=\"alternative-ss-ms tp-survey-checkbox\">\r\n @if (alternativeList()[indx].IsMute) {\r\n <mat-icon class=\"icon-is-mute\" svgIcon=\"iconIsMute\"></mat-icon>\r\n }\r\n <div class=\"container-caption\" [class.container-image]=\"!!alternativeList()[indx].BackGround.Image\">\r\n @if (alternativeList()[indx].BackGround.Image) {\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alternativeList()[indx].BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-ss-ms-caption survey-object-caption\" [innerHTML]= \"alternativeList()[indx].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n </mat-checkbox>\r\n }\r\n </div>\r\n</ng-container>\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {AdditionalAnswerCaptionPosition} from '../../../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../../../tp.survey.enum';\r\n\r\n@Directive({\r\n selector: '[tpSurveyAdditionalAnswerCaptionPosition]',\r\n})\r\nexport class AdditionalAnswerCaptionPositionDirective{\r\n tpSurveyAdditionalAnswerCaptionPosition = input<AdditionalAnswerCaptionPosition>();\r\n tpSurveyAdditionalAnswerType = input<AdditionalAnswerType>();\r\n @HostBinding(\"class.caption-align-bottom\") public get classBottom() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'bottom';\r\n }\r\n @HostBinding(\"class.caption-align-top\") public get classTop() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'top';\r\n }\r\n @HostBinding(\"class.caption-align-left\") public get classLeft() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'left';\r\n }\r\n @HostBinding(\"class.caption-align-right\") public get classRight() {\r\n return this.tpSurveyAdditionalAnswerCaptionPosition() === 'right';\r\n }\r\n\r\n @HostBinding(\"class.answer-type-number\") public get classTypeNumber() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatNumber;\r\n }\r\n\r\n @HostBinding(\"class.answer-type-text\") public get classTypeText() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatText;\r\n }\r\n\r\n @HostBinding(\"class.answer-type-boolean\") public get classTypeBoolean() {\r\n return this.tpSurveyAdditionalAnswerType() === AdditionalAnswerType.aatBoolean;\r\n }\r\n}\r\n","import {Component, forwardRef, input,} from '@angular/core';\r\nimport {FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {SafeHtml} from '@angular/platform-browser';\r\nimport {CdkTextareaAutosize} from '@angular/cdk/text-field';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {AdditionalAnswerCaptionPositionDirective} from './directive/additional.answer.caption.position/additional.answer.caption.position.directive';\r\nimport {AdditionalAnswer, AdditionalAnswerCaptionPosition} from '../../../tp.survey.type';\r\nimport {AdditionalAnswerType} from '../../../tp.survey.enum';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-additional',\r\n templateUrl: './answer.additional.component.html',\r\n styleUrls: ['./answer.additional.component.scss'],\r\n imports: [\r\n MatFormField,\r\n MatInput,\r\n ReactiveFormsModule,\r\n AdditionalAnswerCaptionPositionDirective,\r\n CdkTextareaAutosize,\r\n MatCheckbox,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerAdditionalComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerAdditionalComponent { //ControlValueAccessor\r\n // control = input.required<FormControl<AdditionalAnswer>>();\r\n control = input.required<FormControl<AdditionalAnswer>>();\r\n answerType = input.required<AdditionalAnswerType>()\r\n caption = input<SafeHtml>('');\r\n numberMinValue = input<number | null>(null);\r\n numberMaxValue = input<number | null>(null);\r\n textMultiline = input<boolean>(false);\r\n captionPosition = input<AdditionalAnswerCaptionPosition>('top');\r\n additionalAnswerType = AdditionalAnswerType;\r\n}\r\n","<div class=\"container-main\" [tpSurveyAdditionalAnswerCaptionPosition]=\"captionPosition()\" [tpSurveyAdditionalAnswerType]=\"answerType()\" >\r\n <span [innerHTML]= \"caption()\" class=\"answer-caption survey-object-caption\"></span>\r\n @switch (answerType()) {\r\n @case (additionalAnswerType.aatNumber) {\r\n <mat-form-field class=\"tp-survey-input\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <input [formControl]=\"control()\" matInput [step]=\"1\" [min]=\"numberMinValue()\" [max]=\"numberMaxValue()\" type=\"number\">\r\n </mat-form-field>\r\n }\r\n\r\n @case (additionalAnswerType.aatText) {\r\n <mat-form-field appearance=\"outline\" class=\"tp-survey-input\" subscriptSizing=\"dynamic\">\r\n @if (textMultiline()) {\r\n <textarea\r\n [formControl]=\"control()\"\r\n cdkAutosizeMaxRows=\"5\"\r\n cdkAutosizeMinRows=\"3\"\r\n cdkTextareaAutosize matInput>\r\n </textarea>\r\n } @else {\r\n <input [formControl]=\"control()\" matInput type=\"text\">\r\n }\r\n </mat-form-field>\r\n }\r\n @case (additionalAnswerType.aatBoolean) {\r\n <mat-checkbox\r\n [formControl]=\"control()\"\r\n [class.answer-checkbox-center] = \"captionPosition() === 'left' || captionPosition() === 'right'\"\r\n class=\"tp-survey-checkbox\">\r\n </mat-checkbox>\r\n }\r\n }\r\n</div>\r\n","import {Component, forwardRef} from '@angular/core';\r\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-end',\r\n template: '',\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerEndComponent),\r\n multi: true\r\n },\r\n ],\r\n})\r\n\r\nexport class AnswerEndComponent extends AnswerMasterComponent<number>{\r\n}\r\n","import {Directive, ElementRef, OnInit} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[tpSurveyFocusAndSelect]',\r\n})\r\nexport class FocusAndSelectDirective implements OnInit{\r\n constructor(private el: ElementRef) {\r\n if (!el.nativeElement['focus']) {\r\n throw new Error('Element does not accept focus.');\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n const input: HTMLInputElement = this.el.nativeElement as HTMLInputElement;\r\n if ('focus' in input) {\r\n input.focus();\r\n input.select();\r\n }\r\n }\r\n}\r\n","import {Component, forwardRef, input} from '@angular/core';\nimport {FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\nimport {MatFormField, MatPrefix} from '@angular/material/form-field';\nimport {MatInput} from '@angular/material/input';\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\nimport {MatButton} from '@angular/material/button';\n\n@Component({\n selector: 'tp-survey-answer-ol',\n templateUrl: './answer.ol.component.html',\n styleUrls: ['./answer.ol.component.scss'],\n imports: [\n FocusAndSelectDirective,\n FormsModule,\n MatFormField,\n MatInput,\n ReactiveFormsModule,\n MatPrefix,\n MatButton\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerOLComponent),\n multi: true\n },\n ]\n})\nexport class AnswerOLComponent extends AnswerMasterComponent<number | 'skip'>{\n telephoneInput= input<boolean>(false);\n canSkip= input<boolean>(false);\n}\n","<div class=\"container-main\">\r\n @if (telephoneInput()) {\r\n <mat-form-field appearance=\"outline\">\r\n <input\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n matInput\r\n [formControl]=\"control\" tpSurveyFocusAndSelect>\r\n <span matTextPrefix>+380 </span>\r\n </mat-form-field>\r\n @if(canSkip()) {\r\n <button mat-button (click)=\"skipClick()\">Пропустити</button>\r\n }\r\n\r\n } @else {\r\n <mat-form-field appearance=\"outline\" class=\"input-text\">\r\n <textarea rows=\"10\" matInput [formControl]=\"control\" tpSurveyFocusAndSelect></textarea>\r\n </mat-form-field>\r\n }\r\n</div>\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormArray, FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormArray',\r\n})\r\nexport class AsFormArrayPipe implements PipeTransform {\r\n\r\n transform(value: any): FormArray<FormControl<boolean>> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\n\r\n@Pipe({\r\n name: 'asFormControl',\r\n})\r\nexport class AsFormControlPipe implements PipeTransform {\r\n\r\n transform(value: any): FormControl<number> {\r\n return value;\r\n }\r\n\r\n}\r\n","import {AfterViewInit, booleanAttribute, ChangeDetectorRef, Component, forwardRef, inject, input, numberAttribute} from '@angular/core';\r\nimport {FormArray, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatCheckbox} from '@angular/material/checkbox';\r\nimport {KeyValuePipe} from '@angular/common';\r\nimport {MatRadioButton, MatRadioGroup} from '@angular/material/radio';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {filter, tap} from 'rxjs';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AsFormArrayPipe} from './pipe/as.form.array/as.form.array.pipe';\r\nimport {AsFormControlPipe} from './pipe/as.form.control/as.form.control.pipe';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {AnswerSlType} from '../../../tp.survey.type';\r\nimport {IdbAlternative, IdbQuestion, IdbSection} from '../../../tp.survey.interface';\r\nimport {GetQuestionImageBackgroundCssSizePipe} from '../../../pipe/get.question.image.background.size/get.question.image.background.css.size.pipe';\r\n\r\ninterface IAnswerSLForm {\r\n [key: string]: FormArray<FormControl<boolean>> | FormControl<number> | FormControl<Array<number>>\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-sl',\r\n templateUrl: './answer.sl.component.html',\r\n styleUrls: ['./answer.sl.component.scss'],\r\n imports: [\r\n MultiLangObjectToHtmlPipe,\r\n MatCheckbox,\r\n ReactiveFormsModule,\r\n KeyValuePipe,\r\n AsFormArrayPipe,\r\n MatRadioButton,\r\n MatRadioGroup,\r\n AsFormControlPipe,\r\n GetQuestionImageBackgroundCssSizePipe\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerSLComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerSLComponent extends AnswerMasterComponent<AnswerSlType> implements AfterViewInit{\r\n question = input.required<IdbQuestion>();\r\n alternativeList = input.required<Array<IdbAlternative>>();\r\n sectionList = input.required<Array<IdbSection>>();\r\n multiSelect = input(false, {transform: booleanAttribute});\r\n maxCount = input(0, {transform: numberAttribute});\r\n answerSLForm = new FormGroup<IAnswerSLForm>({})\r\n readonly #ref = inject(ChangeDetectorRef);\r\n ngAfterViewInit(): void {\r\n const multiSelect = this.multiSelect();\r\n const answer = this.control.value;\r\n this.sectionList().forEach(section => {\r\n const sectionAnswer = answer ? answer[section.SectionGuid] : [];\r\n const sectionControl = this.#createSectionRowControl(multiSelect, sectionAnswer );\r\n this.answerSLForm!.addControl(section.SectionGuid.toString(), sectionControl, );\r\n })\r\n\r\n this.answerSLForm.valueChanges.pipe(\r\n map((fullAnswer) => {\r\n let res: Record<string, Array<number> | number> = {};\r\n //Если в настройках указали мультивыбор для секции, то в данной реализации, при изменении форма возвращает массив boolean?, true/false, нажата отжата.\r\n //Этот массив нужно конвертировать в массив number, в котором будут только нажатые альтернативы.\r\n if (this.multiSelect()) {\r\n Object.entries(fullAnswer).forEach(([key]) => {\r\n const sectionAnswerCheckedArray = this.answerSLForm.get(key)?.value;\r\n res[key] = this.alternativeList()\r\n .map(alt => alt.Value)\r\n .filter((_, index) => sectionAnswerCheckedArray[index] )\r\n });\r\n } else {\r\n //если единичный выбор для секции, то ответ просто исходное значение.\r\n res = fullAnswer as Record<string, number>;\r\n }\r\n return res;\r\n }),\r\n tap(() => this.#disableExtraControls(this.maxCount())),\r\n takeUntilDestroyed(this.destroyRef)\r\n ).subscribe({\r\n next: res => this.control.patchValue(res, {emitEvent: true})\r\n });\r\n this.#ref.detectChanges();\r\n }\r\n\r\n #createSectionRowControl(multiSelect: boolean, answers: number | Array<number>): FormArray<FormControl<boolean>> | FormControl<number> {\r\n if (multiSelect) {\r\n const msArray = new FormArray<FormControl<boolean>>([]);\r\n const answerAsArray = Array.isArray(answers) ? Array.from(answers) : [];\r\n\r\n this.alternativeList().forEach((alt) => {\r\n const control= new FormControl<boolean>( answerAsArray.includes(alt.Value), {nonNullable: true});\r\n msArray.push(control, {emitEvent: false});\r\n\r\n //В режиме multiSelect у альтернативы есть понятие \"Группа\". Группа это число. Если выбирают альтернативу с определённой группой, то альтернативы с другой группой должны быть отжаты.\r\n //Логика такая же как и в ms вопросе\r\n control.valueChanges.pipe(\r\n filter(value => value && this.multiSelect()),\r\n takeUntilDestroyed(this.destroyRef),\r\n ).subscribe({\r\n next: () => {\r\n //сначала отбираем контролы у которых другая группа.\r\n const otherGroupAlternativesList = this.alternativeList()\r\n .map((alt, altIndex) => ({alternative: alt, index: altIndex}) ) //нужен индекс, по нему проще выбирать контролы в msArray\r\n .filter(data => data.alternative.GroupNo !== alt.GroupNo); //контролы у которых другая группа\r\n\r\n //\"отжимаем галочку\"\r\n otherGroupAlternativesList.forEach(data => {\r\n const altControl = msArray.controls.at(data.index);\r\n altControl!.patchValue(false, {emitEvent: false})\r\n });\r\n }\r\n })\r\n });\r\n return msArray;\r\n } else {\r\n return new FormControl<number>(Number(answers), {nonNullable: true});\r\n }\r\n }\r\n\r\n //дизейблит контроли если выбрали максимальное количество или енейблит если выбрали не максимальное количество\r\n #disableExtraControls(maxCount: number): void{\r\n //если в настройках анкеты указали что максимальное возможное количество выбранных альтернатив = 0, но ничего контролировать не надо.\r\n if (maxCount === 0 || !this.multiSelect()) {\r\n return\r\n }\r\n\r\n this.sectionList().forEach(sec => {\r\n const sectionControlArray = this.answerSLForm.get(sec.SectionGuid.toString()) as FormArray<FormControl<boolean>>;\r\n const values = sectionControlArray.value;\r\n const checkedCount = values.filter(v => v).length;\r\n\r\n sectionControlArray.controls.forEach(control => {\r\n if (checkedCount >= maxCount && !control.value) {\r\n control.disable({emitEvent: false})\r\n } else {\r\n control.enable({emitEvent: false})\r\n }\r\n })\r\n\r\n })\r\n }\r\n}\r\n","<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 <div class=\"container-caption-desktop\">\r\n <span [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\" class=\"survey-object-caption\"></span>\r\n @if (alt.BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n </div>\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()\" class=\"survey-object-caption\"></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()\" class=\"survey-object-caption\"></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 survey-object-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 <div class=\"container-caption-mobile\">\r\n @if (alternativeList()[altIndex].BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alternativeList()[altIndex].BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alternativeList()[altIndex].MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\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 <div class=\"container-caption-mobile\">\r\n @if (alt.BackGround.Image){\r\n @let imageSize = question() | getQuestionImageBackgroundCssSize;\r\n <img alt=\"answer logo\" [style.height]=\"imageSize.height\" [style.width]=\"imageSize.width\" [src]=\"repositoryPath()+'/' + alt.BackGround.Image\" importance=\"low\" loading=\"lazy\" class=\"answer-image\">\r\n }\r\n <span class=\"alternative-sl-caption survey-object-caption\" [innerHTML]= \"alt.MultiLangCaptions | multiLangObjectToHtml:language()\"></span>\r\n </div>\r\n\r\n </mat-radio-button>\r\n }\r\n </mat-radio-group>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {Component, forwardRef, input} from '@angular/core';\r\nimport {MatFormField} from '@angular/material/form-field';\r\nimport {MatInput} from '@angular/material/input';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {FocusAndSelectDirective} from '../../../directive/focus.and.select/focus.and.select.directive';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\n\r\n@Component({\n selector: 'tp-survey-answer-od',\n templateUrl: './answer.od.component.html',\n styleUrls: ['./answer.od.component.scss'],\n imports: [\n MatFormField,\n ReactiveFormsModule,\n FocusAndSelectDirective,\n MatInput,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AnswerODComponent),\n multi: true\n },\n ]\n})\r\nexport class AnswerODComponent extends AnswerMasterComponent<number> {\r\n minValue = input<number>(1);\r\n maxValue = input<number | null>(null);\r\n}\r\n","<div class=\"container-main\">\r\n <mat-form-field appearance=\"outline\" class=\"input-od-number\">\r\n <input [formControl]=\"control\" [min]=\"minValue()\" [max]=\"maxValue()\" tpSurveyFocusAndSelect matInput type=\"number\">\r\n </mat-form-field>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbAdditionalAnswer} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getAdditionalValueByValue',\r\n})\r\nexport class GetAdditionalValueByValuePipe implements PipeTransform {\r\n\r\n transform(value: number | string, additionalAnswerList: Array<IdbAdditionalAnswer>): IdbAdditionalAnswer | undefined {\r\n const val = (typeof value === 'string') ? Number(value): value;\r\n return additionalAnswerList.find(aa => aa.Value === val);\r\n }\r\n\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {AbstractControl, FormControl, FormGroup} from '@angular/forms';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\n\r\n@Pipe({\r\n name: 'keyValues',\r\n})\r\nexport class KeyValuesPipe implements PipeTransform {\r\n\r\n transform(controls: FormGroup<{[key: string]: AbstractControl<AdditionalAnswer>}>): Array<{name: string, control: FormControl<AdditionalAnswer>}> {\r\n return Object.entries(controls).map(([key, control]) =>({\r\n name: key,\r\n control: control,\r\n }));\r\n }\r\n\r\n}\r\n","import {Component, input, output} from '@angular/core';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbBaseParamsLanguage} from '../../../tp.survey.interface';\r\nimport {MatButton} from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-lang',\r\n templateUrl: './answer.lang.component.html',\r\n styleUrls: ['./answer.lang.component.scss'],\r\n imports: [\r\n MatButton,\r\n ]\r\n})\r\n\r\nexport class AnswerLangComponent extends AnswerMasterComponent<number>{\r\n languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n onLanguageChange = output<number>();\r\n}\r\n","@for (language of languageList(); track $index) {\r\n <button mat-button (click)=\"onLanguageChange.emit(language.Value)\">\r\n {{language.Caption}}\r\n </button>\r\n}\r\n","import {InjectionToken, Signal, WritableSignal} from '@angular/core';\r\nimport {Subject} from 'rxjs';\r\nimport {IdbQuestion, IPoint} from '../../tp.survey.interface';\r\nimport {TMode} from '../../tp.survey.type';\r\n\r\nexport interface PointerEventData {\r\n type: 'down' | 'move' | 'up' | 'leave' | 'contextmenu';\r\n clientX: number;\r\n clientY: number;\r\n}\r\n\r\n\r\nexport type NormalizedPoint = { nx: number; ny: number };\r\nexport type Stroke = NormalizedPoint[];\r\nexport interface Region { points: NormalizedPoint[]; color: string; }\r\nexport interface ImageBounds { x: number; y: number; width: number; height: number; }\r\n\r\nexport interface ICanvasContext {\r\n canvasSize: WritableSignal<{ w: number; h: number } | null>;\r\n imageBounds: WritableSignal<ImageBounds | null>;\r\n image: WritableSignal<HTMLImageElement | null>;\r\n mode: Signal<TMode>;\r\n question: Signal<IdbQuestion>;\r\n readonly hasActiveRegion: WritableSignal<boolean>;\r\n readonly pointerEvents$: Subject<PointerEventData>;\r\n readonly drawPoint$: Subject<{ clientX: number; clientY: number }>;\r\n \r\n // points — пиксельные координаты оригинальной картинки (x ∈ [0, img.naturalWidth])\r\n notifyRegionCreated(points: Array<IPoint>): void;\r\n notifyRegionSelected(index: number, points: Array<IPoint>): void;\r\n}\r\n\r\nexport const CANVAS_CONTEXT = new InjectionToken<ICanvasContext>('CanvasContext');\r\n\r\nexport function setupCanvasBuffer(canvas: HTMLCanvasElement, ctx2d: CanvasRenderingContext2D, size: { w: number; h: number }): void {\r\n const dpr = window.devicePixelRatio || 1;\r\n canvas.width = size.w * dpr;\r\n canvas.height = size.h * dpr;\r\n ctx2d.setTransform(dpr, 0, 0, dpr, 0, 0);\r\n}\r\n","import {afterNextRender, Directive, effect, ElementRef, inject, input, OnDestroy, output, signal} from '@angular/core';\r\nimport {IdbQuestion, IPoint} from '../../tp.survey.interface';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {Subject} from 'rxjs';\r\nimport {CANVAS_CONTEXT, ICanvasContext, ImageBounds, PointerEventData} from '../canvas.context/canvas.context';\r\nimport {TMode} from '../../tp.survey.type';\r\n\r\n@Directive({\r\n selector: '[tpSurveyCanvasContainer]',\r\n providers: [\r\n {\r\n provide: CANVAS_CONTEXT,\r\n useExisting: CanvasContainerDirective\r\n }\r\n ],\r\n})\r\nexport class CanvasContainerDirective implements ICanvasContext, OnDestroy {\r\n readonly question = input.required<IdbQuestion>({ alias: 'tpSurveyCanvasContainer' });\r\n readonly viewModel = input.required<ViewModel>({ alias: 'containerViewModel' });\r\n readonly repositoryPath = input.required<string>({ alias: 'questionaryRepositoryPath' });\r\n readonly mode = input<TMode>('survey');\r\n readonly regionCreated = output<Array<IPoint>>();\r\n readonly regionSelected = output<{ index: number; points: Array<IPoint> }>();\r\n\r\n // ICanvasContext\r\n readonly canvasSize = signal<{ w: number; h: number } | null>(null);\r\n readonly imageBounds = signal<ImageBounds | null>(null);\r\n readonly image = signal<HTMLImageElement | null>(null);\r\n readonly hasActiveRegion = signal(false);\r\n readonly pointerEvents$ = new Subject<PointerEventData>();\r\n readonly drawPoint$ = new Subject<{ clientX: number; clientY: number }>();\r\n\r\n readonly #el = inject(ElementRef<HTMLElement>);\r\n #observer: ResizeObserver | null = null;\r\n\r\n constructor() {\r\n effect(() => {\r\n const testImage = this.question().TestImage;\r\n const path = this.repositoryPath();\r\n if (!testImage) { this.image.set(null); return; }\r\n const img = new Image();\r\n img.onload = () => this.image.set(img);\r\n img.src = `${path}/${testImage}`;\r\n });\r\n\r\n afterNextRender(() => {\r\n this.#observer = new ResizeObserver(entries => {\r\n const { width, height } = entries[0].contentRect;\r\n this.canvasSize.set({ w: width, h: height });\r\n });\r\n this.#observer.observe(this.#el.nativeElement);\r\n });\r\n }\r\n\r\n notifyRegionCreated(points: Array<IPoint>): void {\r\n this.regionCreated.emit(points);\r\n }\r\n\r\n notifyRegionSelected(index: number, points: Array<IPoint>): void {\r\n this.regionSelected.emit({ index, points });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#observer?.disconnect();\r\n this.pointerEvents$.complete();\r\n }\r\n}\r\n","import { afterNextRender, Directive, effect, ElementRef, inject, signal } from '@angular/core';\r\nimport { CANVAS_CONTEXT, setupCanvasBuffer } from '../canvas.context/canvas.context';\r\n\r\n@Directive({\r\n selector: 'canvas[tpSurveyCanvasImage]',\r\n})\r\nexport class CanvasImageDirective {\r\n readonly #ctx = inject(CANVAS_CONTEXT);\r\n readonly #el = inject(ElementRef<HTMLCanvasElement>);\r\n readonly #canvas = signal<HTMLCanvasElement | null>(null);\r\n #ctx2d: CanvasRenderingContext2D | null = null;\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n const canvas = this.#el.nativeElement;\r\n this.#ctx2d = canvas.getContext('2d')!;\r\n this.#canvas.set(canvas);\r\n });\r\n\r\n effect(() => {\r\n const canvas = this.#canvas();\r\n const size = this.#ctx.canvasSize();\r\n const img = this.#ctx.image();\r\n if (!canvas || !size || !img || !this.#ctx2d) return;\r\n\r\n setupCanvasBuffer(canvas, this.#ctx2d, size);\r\n\r\n const scale = Math.min(size.w / img.naturalWidth, size.h / img.naturalHeight);\r\n const drawW = img.naturalWidth * scale;\r\n const drawH = img.naturalHeight * scale;\r\n const x = (size.w - drawW) / 2;\r\n const y = (size.h - drawH) / 2;\r\n\r\n this.#ctx2d.clearRect(0, 0, size.w, size.h);\r\n this.#ctx2d.drawImage(img, x, y, drawW, drawH);\r\n\r\n this.#ctx.imageBounds.set({ x, y, width: drawW, height: drawH });\r\n });\r\n }\r\n}\r\n","import {afterNextRender, DestroyRef, Directive, effect, ElementRef, inject, output, signal} from '@angular/core';\r\nimport {CANVAS_CONTEXT, ImageBounds, NormalizedPoint, setupCanvasBuffer, Stroke} from '../canvas.context/canvas.context';\r\nimport {IPoint} from '../../tp.survey.interface';\r\n\r\n@Directive({\r\n selector: 'canvas[tpSurveyCanvasDrawing]',\r\n})\r\nexport class CanvasDrawingDirective {\r\n readonly #ctx = inject(CANVAS_CONTEXT);\r\n readonly #el = inject(ElementRef<HTMLCanvasElement>);\r\n readonly #canvas = signal<HTMLCanvasElement | null>(null);\r\n\r\n readonly strokeComplete = output<IPoint[]>();\r\n\r\n #ctx2d: CanvasRenderingContext2D | null = null;\r\n #strokes: Stroke[] = [];\r\n #currentStroke: NormalizedPoint[] | null = null;\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n const abort = new AbortController();\r\n destroyRef.onDestroy(() => abort.abort());\r\n\r\n afterNextRender(() => {\r\n const canvas = this.#el.nativeElement;\r\n this.#ctx2d = canvas.getContext('2d')!;\r\n this.#bindEvents(canvas, abort.signal);\r\n this.#canvas.set(canvas);\r\n });\r\n\r\n // При resize: пересоздать буфер и перерисовать сохранённые штрихи\r\n effect(() => {\r\n const canvas = this.#canvas();\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (!canvas || !bounds || !size || !this.#ctx2d) return;\r\n\r\n setupCanvasBuffer(canvas, this.#ctx2d, size);\r\n\r\n this.#redraw(bounds, size);\r\n });\r\n }\r\n\r\n #toImagePoints(points: NormalizedPoint[]): IPoint[] {\r\n const img = this.#ctx.image()!;\r\n return points.map(p => ({\r\n x: Math.round(p.nx * img.naturalWidth),\r\n y: Math.round(p.ny * img.naturalHeight),\r\n }));\r\n }\r\n\r\n clearStrokes(): void {\r\n this.#strokes = [];\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (bounds && size) this.#redraw(bounds, size);\r\n }\r\n\r\n #toNormalized(clientX: number, clientY: number, canvas: HTMLCanvasElement, bounds: ImageBounds): NormalizedPoint {\r\n const rect = canvas.getBoundingClientRect();\r\n return {\r\n nx: (clientX - rect.left - bounds.x) / bounds.width,\r\n ny: (clientY - rect.top - bounds.y) / bounds.height,\r\n };\r\n }\r\n\r\n #toCanvas(p: NormalizedPoint, bounds: ImageBounds): { x: number; y: number } {\r\n return { x: bounds.x + p.nx * bounds.width, y: bounds.y + p.ny * bounds.height };\r\n }\r\n\r\n #redraw(bounds: ImageBounds, size: { w: number; h: number }): void {\r\n if (!this.#ctx2d) return;\r\n this.#ctx2d.clearRect(0, 0, size.w, size.h);\r\n const q = this.#ctx.question();\r\n this.#ctx2d.save();\r\n this.#ctx2d.globalAlpha = (q.PenAlfa ?? 10) / 10;\r\n this.#ctx2d.strokeStyle = q.PenColor ?? '#ff0000';\r\n this.#ctx2d.lineWidth = 4;\r\n this.#ctx2d.lineCap = 'round';\r\n this.#ctx2d.lineJoin = 'round';\r\n\r\n const all = this.#currentStroke ? [...this.#strokes, this.#currentStroke] : this.#strokes;\r\n for (const stroke of all) {\r\n if (stroke.length < 2) continue;\r\n const pts = stroke.map(p => this.#toCanvas(p, bounds));\r\n this.#ctx2d.beginPath();\r\n this.#ctx2d.moveTo(pts[0].x, pts[0].y);\r\n for (let i = 1; i < pts.length; i++) this.#ctx2d.lineTo(pts[i].x, pts[i].y);\r\n this.#ctx2d.stroke();\r\n }\r\n\r\n this.#ctx2d.restore();\r\n }\r\n\r\n #bindEvents(canvas: HTMLCanvasElement, signal: AbortSignal): void {\r\n canvas.addEventListener('contextmenu', (e) => {\r\n if (this.#ctx.mode() !== 'editing') {\r\n return;\r\n }\r\n if (!this.#ctx.hasActiveRegion()) {\r\n return;\r\n }\r\n e.preventDefault();\r\n this.#ctx.pointerEvents$.next({ type: 'contextmenu', clientX: e.clientX, clientY: e.clientY });\r\n }, { signal });\r\n\r\n canvas.addEventListener('mousedown', (e) => {\r\n if (e.button !== 0) {\r\n return;\r\n }\r\n const bounds = this.#ctx.imageBounds();\r\n if (!bounds) {\r\n return;\r\n }\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'down', clientX: e.clientX, clientY: e.clientY });\r\n return;\r\n }\r\n this.#currentStroke = [this.#toNormalized(e.clientX, e.clientY, canvas, bounds)];\r\n }, { signal });\r\n\r\n canvas.addEventListener('mousemove', (e) => {\r\n const bounds = this.#ctx.imageBounds();\r\n if (!bounds) {\r\n return;\r\n }\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'move', clientX: e.clientX, clientY: e.clientY });\r\n return;\r\n }\r\n if (!this.#currentStroke) {\r\n return;\r\n }\r\n this.#currentStroke.push(this.#toNormalized(e.clientX, e.clientY, canvas, bounds));\r\n this.#ctx.drawPoint$.next({ clientX: e.clientX, clientY: e.clientY });\r\n const size = this.#ctx.canvasSize();\r\n if (size) {\r\n this.#redraw(bounds, size);\r\n }\r\n }, { signal });\r\n\r\n canvas.addEventListener('mouseup', (e) => {\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'up', clientX: e.clientX, clientY: e.clientY });\r\n return;\r\n }\r\n if (this.#currentStroke?.length) {\r\n this.#strokes.push(this.#currentStroke);\r\n this.strokeComplete.emit(this.#toImagePoints(this.#currentStroke));\r\n }\r\n this.#currentStroke = null;\r\n }, { signal });\r\n\r\n canvas.addEventListener('mouseleave', (e) => {\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'leave', clientX: e.clientX, clientY: e.clientY });\r\n return;\r\n }\r\n if (this.#currentStroke?.length) {\r\n this.#strokes.push(this.#currentStroke);\r\n this.strokeComplete.emit(this.#toImagePoints(this.#currentStroke));\r\n }\r\n this.#currentStroke = null;\r\n }, { signal });\r\n\r\n canvas.addEventListener('touchstart', (e) => {\r\n e.preventDefault();\r\n const t = e.touches[0];\r\n const bounds = this.#ctx.imageBounds();\r\n if (!bounds) {\r\n return;\r\n }\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'down', clientX: t.clientX, clientY: t.clientY });\r\n return;\r\n }\r\n this.#currentStroke = [this.#toNormalized(t.clientX, t.clientY, canvas, bounds)];\r\n }, { passive: false, signal });\r\n\r\n canvas.addEventListener('touchmove', (e) => {\r\n e.preventDefault();\r\n const t = e.touches[0];\r\n const bounds = this.#ctx.imageBounds();\r\n if (!bounds) {\r\n return;\r\n }\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'move', clientX: t.clientX, clientY: t.clientY });\r\n return;\r\n }\r\n if (!this.#currentStroke) {\r\n return;\r\n }\r\n this.#currentStroke.push(this.#toNormalized(t.clientX, t.clientY, canvas, bounds));\r\n this.#ctx.drawPoint$.next({ clientX: t.clientX, clientY: t.clientY });\r\n const size = this.#ctx.canvasSize();\r\n if (size) {\r\n this.#redraw(bounds, size);\r\n }\r\n }, { passive: false, signal });\r\n\r\n canvas.addEventListener('touchend', (e) => {\r\n const t = e.changedTouches[0];\r\n if (this.#ctx.mode() === 'editing') {\r\n this.#ctx.pointerEvents$.next({ type: 'up', clientX: t.clientX, clientY: t.clientY });\r\n return;\r\n }\r\n if (this.#currentStroke?.length) {\r\n this.#strokes.push(this.#currentStroke);\r\n this.strokeComplete.emit(this.#toImagePoints(this.#currentStroke));\r\n }\r\n this.#currentStroke = null;\r\n }, { signal });\r\n }\r\n}\r\n","import {afterNextRender, DestroyRef, Directive, effect, ElementRef, inject, input, output, signal} from '@angular/core';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {fromEvent} from 'rxjs';\r\nimport {CANVAS_CONTEXT, ImageBounds, NormalizedPoint, setupCanvasBuffer} from '../canvas.context/canvas.context';\r\nimport {IdbRegion, IPoint} from '../../tp.survey.interface';\r\n\r\nconst SNAP_RADIUS_CSS = 20;\r\nconst REGION_COLORS = ['#e63946', '#2a9d8f', '#e9c46a', '#f4a261', '#a8dadc'];\r\n\r\ninterface Region {\r\n points: NormalizedPoint[];\r\n color: string;\r\n caption: string;\r\n}\r\n\r\n@Directive({\r\n selector: 'canvas[tpSurveyCanvasRegion]',\r\n})\r\nexport class CanvasRegionDirective {\r\n readonly #ctx = inject(CANVAS_CONTEXT);\r\n readonly #el = inject(ElementRef<HTMLCanvasElement>);\r\n readonly #canvas = signal<HTMLCanvasElement | null>(null);\r\n\r\n readonly regionList = input<Array<IdbRegion>>([]);\r\n readonly regionHit = output<{ index: number; points: IPoint[] }>();\r\n\r\n #ctx2d: CanvasRenderingContext2D | null = null;\r\n #regions: Region[] = [];\r\n #currentRegion: NormalizedPoint[] | null = null;\r\n #cursorClient: { x: number; y: number } | null = null;\r\n #hoveredIndex: number | null = null;\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n this.#ctx.pointerEvents$\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(({ type, clientX, clientY }) => this.#handleEvent(type, clientX, clientY));\r\n\r\n this.#ctx.drawPoint$\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(({ clientX, clientY }) => this.#checkRegionHit(clientX, clientY));\r\n\r\n fromEvent<KeyboardEvent>(document, 'keydown')\r\n .pipe(takeUntilDestroyed(destroyRef))\r\n .subscribe(e => this.#handleKeydown(e));\r\n\r\n afterNextRender(() => {\r\n const canvas = this.#el.nativeElement;\r\n this.#ctx2d = canvas.getContext('2d')!;\r\n this.#canvas.set(canvas);\r\n });\r\n\r\n effect(() => {\r\n const canvas = this.#canvas();\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (!canvas || !bounds || !size || !this.#ctx2d) return;\r\n\r\n setupCanvasBuffer(canvas, this.#ctx2d, size);\r\n\r\n this.#redraw(bounds, size);\r\n });\r\n\r\n effect(() => {\r\n const list = this.regionList().filter(reg => reg.Value >= 0);\r\n const image = this.#ctx.image();\r\n if (!image) {\r\n this.#regions = [];\r\n return;\r\n }\r\n this.#regions = list.map((r, i) => ({\r\n points: r.Points.map(p => ({\r\n nx: p.x / image.naturalWidth,\r\n ny: p.y / image.naturalHeight,\r\n })),\r\n color: REGION_COLORS[i % REGION_COLORS.length],\r\n caption: r.Caption,\r\n }));\r\n this.#currentRegion = null;\r\n this.#ctx.hasActiveRegion.set(false);\r\n this.#hoveredIndex = null;\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (bounds && size) this.#redraw(bounds, size);\r\n });\r\n }\r\n\r\n clearRegions(): void {\r\n this.#regions = [];\r\n this.#currentRegion = null;\r\n this.#ctx.hasActiveRegion.set(false);\r\n this.#cursorClient = null;\r\n this.#hoveredIndex = null;\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (bounds && size) this.#redraw(bounds, size);\r\n }\r\n\r\n #toNormalized(clientX: number, clientY: number, bounds: ImageBounds): NormalizedPoint {\r\n const rect = this.#el.nativeElement.getBoundingClientRect();\r\n return {\r\n nx: (clientX - rect.left - bounds.x) / bounds.width,\r\n ny: (clientY - rect.top - bounds.y) / bounds.height,\r\n };\r\n }\r\n\r\n #toCanvas(p: NormalizedPoint, bounds: ImageBounds): { x: number; y: number } {\r\n return { x: bounds.x + p.nx * bounds.width, y: bounds.y + p.ny * bounds.height };\r\n }\r\n\r\n #isNearFirst(clientX: number, clientY: number, bounds: ImageBounds): boolean {\r\n if (!this.#currentRegion?.length) return false;\r\n const rect = this.#el.nativeElement.getBoundingClientRect();\r\n const first = this.#toCanvas(this.#currentRegion[0], bounds);\r\n const dx = clientX - (first.x + rect.left);\r\n const dy = clientY - (first.y + rect.top);\r\n return Math.sqrt(dx * dx + dy * dy) < SNAP_RADIUS_CSS;\r\n }\r\n\r\n #handleKeydown(e: KeyboardEvent): void {\r\n if (e.key !== 'Escape' || this.#ctx.mode() !== 'editing' || !this.#currentRegion) return;\r\n this.#currentRegion = null;\r\n this.#ctx.hasActiveRegion.set(false);\r\n this.#cursorClient = null;\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (bounds && size) this.#redraw(bounds, size);\r\n }\r\n\r\n #handleEvent(type: 'down' | 'move' | 'up' | 'leave' | 'contextmenu', clientX: number, clientY: number): void {\r\n const bounds = this.#ctx.imageBounds();\r\n const size = this.#ctx.canvasSize();\r\n if (!bounds || !size) return;\r\n\r\n if (type === 'contextmenu') {\r\n if (!this.#currentRegion) return;\r\n this.#currentRegion.pop();\r\n if (this.#currentRegion.length === 0) {\r\n this.#currentRegion = null;\r\n this.#ctx.hasActiveRegion.set(false);\r\n }\r\n this.#redraw(bounds, size);\r\n return;\r\n }\r\n\r\n if (type === 'move') {\r\n this.#cursorClient = { x: clientX, y: clientY };\r\n if (!this.#currentRegion) {\r\n const prev = this.#hoveredIndex;\r\n this.#hoveredIndex = this.#findRegionAt(clientX, clientY, bounds);\r\n if (this.#hoveredIndex !== prev) this.#redraw(bounds, size);\r\n } else {\r\n this.#redraw(bounds, size);\r\n }\r\n return;\r\n }\r\n\r\n if (type === 'leave') {\r\n this.#cursorClient = null;\r\n const hadHover = this.#hoveredIndex !== null;\r\n this.#hoveredIndex = null;\r\n if (this.#currentRegion || hadHover) this.#redraw(bounds, size);\r\n return;\r\n }\r\n\r\n if (type === 'down') {\r\n if (!this.#currentRegion) {\r\n const hit = this.#findRegionAt(clientX, clientY, bounds);\r\n if (hit !== -1) {\r\n this.#ctx.notifyRegionSelected(hit, this.#toImagePoints(this.#regions[hit].points));\r\n return;\r\n }\r\n this.#currentRegion = [this.#toNormalized(clientX, clientY, bounds)];\r\n this.#ctx.hasActiveRegion.set(true);\r\n } else if (this.#currentRegion.length >= 3 && this.#isNearFirst(clientX, clientY, bounds)) {\r\n this.#closeRegion(bounds, size);\r\n } else {\r\n this.#currentRegion.push(this.#toNormalized(clientX, clientY, bounds));\r\n }\r\n this.#redraw(bounds, size);\r\n }\r\n }\r\n\r\n #checkRegionHit(clientX: number, clientY: number): void {\r\n const bounds = this.#ctx.imageBounds();\r\n if (!bounds) {\r\n return;\r\n }\r\n const index = this.#findRegionAt(clientX, clientY, bounds);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.regionHit.emit({ index, points: this.#toImagePoints(this.#regions[index].points) });\r\n }\r\n\r\n #closeRegion(bounds: ImageBounds, size: { w: number; h: number }): void {\r\n if (!this.#currentRegion) return;\r\n const color = REGION_COLORS[this.#regions.length % REGION_COLORS.length];\r\n this.#regions.push({ points: [...this.#currentRegion], color, caption: '' });\r\n this.#ctx.notifyRegionCreated(this.#toImagePoints(this.#currentRegion));\r\n this.#currentRegion = null;\r\n this.#ctx.hasActiveRegion.set(false);\r\n this.#cursorClient = null;\r\n this.#redraw(bounds, size);\r\n }\r\n\r\n #redraw(bounds: ImageBounds, size: { w: number; h: number }): void {\r\n if (!this.#ctx2d) {\r\n return;\r\n }\r\n this.#ctx2d.clearRect(0, 0, size.w, size.h);\r\n\r\n if (this.#ctx.mode() === 'survey') {\r\n return;\r\n }\r\n\r\n for (let i = 0; i < this.#regions.length; i++) {\r\n const region = this.#regions[i];\r\n const pts = region.points.map(p => this.#toCanvas(p, bounds));\r\n this.#drawPolygon(pts, region.color, true, i === this.#hoveredIndex);\r\n if (region.caption) this.#drawCaption(pts, region.caption);\r\n }\r\n\r\n if (!this.#currentRegion?.length) return;\r\n\r\n const color = REGION_COLORS[this.#regions.length % REGION_COLORS.length];\r\n const pts = this.#currentRegion.map(p => this.#toCanvas(p, bounds));\r\n this.#drawPolygon(pts, color, false);\r\n\r\n if (this.#cursorClient) {\r\n const rect = this.#el.nativeElement.getBoundingClientRect();\r\n const curX = this.#cursorClient.x - rect.left;\r\n const curY = this.#cursorClient.y - rect.top;\r\n const last = pts[pts.length - 1];\r\n const snapping = this.#currentRegion.length >= 3 &&\r\n this.#isNearFirst(this.#cursorClient.x, this.#cursorClient.y, bounds);\r\n\r\n this.#ctx2d.save();\r\n this.#ctx2d.strokeStyle = snapping ? '#ffffff' : color;\r\n this.#ctx2d.lineWidth = snapping ? 2 : 1;\r\n this.#ctx2d.setLineDash([4, 4]);\r\n this.#ctx2d.beginPath();\r\n this.#ctx2d.moveTo(last.x, last.y);\r\n this.#ctx2d.lineTo(curX, curY);\r\n this.#ctx2d.stroke();\r\n this.#ctx2d.restore();\r\n\r\n this.#drawSnapDot(pts[0], color, snapping);\r\n }\r\n }\r\n\r\n #drawPolygon(pts: { x: number; y: number }[], color: string, closed: boolean, hovered = false): void {\r\n if (!this.#ctx2d || pts.length < 2) return;\r\n this.#ctx2d.save();\r\n this.#ctx2d.beginPath();\r\n this.#ctx2d.moveTo(pts[0].x, pts[0].y);\r\n for (let i = 1; i < pts.length; i++) this.#ctx2d.lineTo(pts[i].x, pts[i].y);\r\n if (closed) this.#ctx2d.closePath();\r\n this.#ctx2d.fillStyle = hovered ? color + '77' : color + '44';\r\n this.#ctx2d.fill();\r\n this.#ctx2d.strokeStyle = hovered ? '#ffffff' : color;\r\n this.#ctx2d.lineWidth = hovered ? 3 : 2;\r\n this.#ctx2d.lineJoin = 'round';\r\n this.#ctx2d.lineCap = 'round';\r\n this.#ctx2d.stroke();\r\n this.#ctx2d.restore();\r\n }\r\n\r\n #toImagePoints(points: NormalizedPoint[]): Array<IPoint> {\r\n const img = this.#ctx.image()!;\r\n return points.map(p => ({\r\n x: Math.round(p.nx * img.naturalWidth),\r\n y: Math.round(p.ny * img.naturalHeight),\r\n }));\r\n }\r\n\r\n #findRegionAt(clientX: number, clientY: number, bounds: ImageBounds): number {\r\n const rect = this.#el.nativeElement.getBoundingClientRect();\r\n const cx = clientX - rect.left;\r\n const cy = clientY - rect.top;\r\n for (let i = this.#regions.length - 1; i >= 0; i--) {\r\n const pts = this.#regions[i].points.map(p => this.#toCanvas(p, bounds));\r\n if (this.#pointInPolygon(cx, cy, pts)) return i;\r\n }\r\n return -1;\r\n }\r\n\r\n #pointInPolygon(px: number, py: number, pts: { x: number; y: number }[]): boolean {\r\n let inside = false;\r\n for (let i = 0, j = pts.length - 1; i < pts.length; j = i++) {\r\n const xi = pts[i].x, yi = pts[i].y;\r\n const xj = pts[j].x, yj = pts[j].y;\r\n if ((yi > py) !== (yj > py) && px < ((xj - xi) * (py - yi)) / (yj - yi) + xi) {\r\n inside = !inside;\r\n }\r\n }\r\n return inside;\r\n }\r\n\r\n #drawCaption(pts: Array<{ x: number; y: number }>, caption: string): void {\r\n if (!this.#ctx2d) return;\r\n const cx = pts.reduce((s, p) => s + p.x, 0) / pts.length;\r\n const cy = pts.reduce((s, p) => s + p.y, 0) / pts.length;\r\n this.#ctx2d.save();\r\n this.#ctx2d.font = 'bold 13px sans-serif';\r\n this.#ctx2d.textAlign = 'center';\r\n this.#ctx2d.textBaseline = 'middle';\r\n this.#ctx2d.strokeStyle = 'rgba(0,0,0,0.65)';\r\n this.#ctx2d.lineWidth = 3;\r\n this.#ctx2d.lineJoin = 'round';\r\n this.#ctx2d.strokeText(caption, cx, cy);\r\n this.#ctx2d.fillStyle = '#ffffff';\r\n this.#ctx2d.fillText(caption, cx, cy);\r\n this.#ctx2d.restore();\r\n }\r\n\r\n #drawSnapDot(pt: { x: number; y: number }, color: string, highlighted: boolean): void {\r\n if (!this.#ctx2d) return;\r\n this.#ctx2d.save();\r\n this.#ctx2d.beginPath();\r\n this.#ctx2d.arc(pt.x, pt.y, highlighted ? 9 : 6, 0, Math.PI * 2);\r\n this.#ctx2d.fillStyle = highlighted ? '#ffffff' : color;\r\n this.#ctx2d.fill();\r\n this.#ctx2d.strokeStyle = highlighted ? color : '#ffffff';\r\n this.#ctx2d.lineWidth = 2;\r\n this.#ctx2d.stroke();\r\n this.#ctx2d.restore();\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, forwardRef, input, output, viewChild} from '@angular/core';\r\nimport {AnswerMasterComponent} from '../answer.master/answer.master.component';\r\nimport {IdbQuestion, IPoint, IRegionSelectedEvent} from '../../../tp.survey.interface';\r\nimport {NG_VALUE_ACCESSOR, ReactiveFormsModule} from '@angular/forms';\r\nimport {MatButton} from '@angular/material/button';\r\nimport {CanvasContainerDirective} from '../../../directive/canvas.container/canvas.container.directive';\r\nimport {CanvasImageDirective} from '../../../directive/canvas.image/canvas.image.directive';\r\nimport {CanvasDrawingDirective} from '../../../directive/canvas.drawing/canvas.drawing.directive';\r\nimport {CanvasRegionDirective} from '../../../directive/canvas.region/canvas.region.directive';\r\nimport {TMode} from '../../../tp.survey.type';\r\n\r\nconst REGION_THERE_NO_SUCH_VALUE = -1; //\"нет таких\"\r\nconst REGION_NO_ANSWER = -2; //\"не попали ни 1 регион\"\r\n\r\n@Component({\r\n selector: 'tp-survey-answer-ac',\r\n imports: [\r\n ReactiveFormsModule,\r\n MatButton,\r\n CanvasContainerDirective,\r\n CanvasImageDirective,\r\n CanvasDrawingDirective,\r\n CanvasRegionDirective,\r\n ],\r\n templateUrl: './answer.ac.component.html',\r\n styleUrl: './answer.ac.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AnswerAcComponent),\r\n multi: true\r\n },\r\n ]\r\n})\r\nexport class AnswerAcComponent extends AnswerMasterComponent<Array<number>> {\r\n readonly question = input.required<IdbQuestion>();\r\n readonly mode = input<TMode>('survey');\r\n readonly regionCreated = output<Array<IPoint>>();\r\n readonly regionSelected = output<IRegionSelectedEvent>();\r\n readonly strokeComplete = output<IPoint[]>();\r\n \r\n\r\n private readonly _drawingDir = viewChild(CanvasDrawingDirective);\r\n readonly #hittedRegionValueList = new Set<number>();\r\n readonly #drawingPoints: Array<IPoint> = [];\r\n constructor() {\r\n super();\r\n this.#reset();\r\n }\r\n\r\n onRegionCreated(points: Array<IPoint>): void {\r\n this.regionCreated.emit(points);\r\n }\r\n\r\n onRegionSelected(event: IRegionSelectedEvent): void {\r\n this.regionSelected.emit(event);\r\n }\r\n \r\n onRegionHit(regionIndex: number, regionPoints: Array<IPoint>): void {\r\n const reg = this.question().RegionList?.find(r => r.Points?.length === regionPoints.length && r.Points.every((p, i) => p.x === regionPoints[i].x && p.y === regionPoints[i].y));\r\n \r\n if (reg) {\r\n //удаляем регион \"не попали ни 1 регион\" и \"нет таких\"\r\n this.#hittedRegionValueList.delete(REGION_NO_ANSWER);\r\n this.#hittedRegionValueList.delete(REGION_THERE_NO_SUCH_VALUE);\r\n\r\n //добавляем тот что выбрали\r\n this.#hittedRegionValueList.add(reg.Value);\r\n }\r\n }\r\n \r\n onClear(): void {\r\n this._drawingDir()?.clearStrokes();\r\n this.#reset();\r\n }\r\n\r\n onThereNoSuch() {\r\n this.onClear();\r\n this.#hittedRegionValueList.clear();\r\n this.#hittedRegionValueList.add(REGION_THERE_NO_SUCH_VALUE);\r\n \r\n //обновляем значение\r\n this.#updateValue();\r\n }\r\n\r\n onStrokeComplete(points: Array<IPoint>): void {\r\n this.#drawingPoints.push(...points);\r\n\r\n //если у нас в \"ответах\" только \"нет таких\" например сначала нажали на \"нет таких\", а потом ещё порисовали, но не попали ни в регион тогда в массив запишем \"не попали ни 1 регион\"\r\n if (this.#hittedRegionValueList.size === 1 && this.#hittedRegionValueList.has(REGION_THERE_NO_SUCH_VALUE)) {\r\n this.#hittedRegionValueList.clear();\r\n this.#hittedRegionValueList.add(REGION_NO_ANSWER); //по умолчанию добавляем ответ, \"не выбрали ни 1 регион\"\r\n }\r\n //обновляем значение\r\n this.#updateValue();\r\n }\r\n\r\n #reset(): void {\r\n this.#drawingPoints.length = 0;\r\n this.#hittedRegionValueList.clear();\r\n this.#hittedRegionValueList.add(REGION_NO_ANSWER); //по умолчанию добавляем ответ, \"не выбрали ни 1 регион\"\r\n\r\n //обновляем значение\r\n this.#updateValue();\r\n }\r\n \r\n #updateValue(): void {\r\n const arr = [...this.#hittedRegionValueList];\r\n this.control.patchValue(arr, {emitEvent: true});\r\n \r\n this.strokeComplete.emit(this.#drawingPoints);\r\n }\r\n}\r\n","<div\r\n [tpSurveyCanvasContainer]=\"question()\"\r\n [questionaryRepositoryPath]=\"repositoryPath()\"\r\n [containerViewModel]=\"viewModel()\"\r\n [mode]=\"mode()\"\r\n (regionCreated)=\"onRegionCreated($event)\"\r\n (regionSelected)=\"onRegionSelected($event)\"\r\n class=\"canvas-stack\">\r\n <canvas tpSurveyCanvasImage></canvas>\r\n <canvas tpSurveyCanvasRegion [regionList]=\"question().RegionList\" (regionHit)=\"onRegionHit($event.index, $event.points)\"></canvas>\r\n <canvas tpSurveyCanvasDrawing (strokeComplete)=\"onStrokeComplete($event)\"></canvas>\r\n</div>\r\n\r\n<div class=\"container-controls\">\r\n <button mat-raised-button (click)=\"onClear()\">Очистити</button>\r\n <button mat-flat-button (click)=\"onThereNoSuch()\">Немає таких</button>\r\n</div>\r\n","import {ChangeDetectionStrategy, Component, DestroyRef, inject, input, OnInit, output, signal} from '@angular/core';\r\n\r\nimport {\r\n additionalAnswerDefaultValidator,\r\n additionalAnswerNumberValidator,\r\n answerDefaultValidator,\r\n answerMSValidator,\r\n answerODValidator,\r\n answerOLValidator,\r\n answerSlValidator,\r\n answerSSValidator\r\n} from './container.answer.validator';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\nimport {AnswerSSComponent} from '../answer.ss/answer.ss.component';\r\nimport {AnswerInfoComponent} from '../answer.info/answer.info.component';\r\nimport {AnswerMSComponent} from '../answer.ms/answer.ms.component';\r\nimport {MultiLangObjectToHtmlPipe} from '../../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {AnswerAdditionalComponent} from '../answer.additional/answer.additional.component';\r\nimport {AnswerEndComponent} from '../answer.end/answer.end.component';\r\nimport {debounceTime, tap} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerOLComponent} from '../answer.ol/answer.ol.component';\r\nimport {AnswerSLComponent} from '../answer.sl/answer.sl.component';\r\nimport {FormControl, FormGroup, ReactiveFormsModule} from '@angular/forms';\r\nimport {AdditionalAnswer, AnswerSlType, AnswerT, TFindVariableVoid, TMode} from '../../../tp.survey.type';\r\nimport {AnswerODComponent} from '../answer.od/answer.od.component';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbAdditionalAnswer, IdbAlternative, IdbBaseParamsLanguage, IdbQuestion, IdbSection, IPoint, IRegionSelectedEvent} from '../../../tp.survey.interface';\r\nimport {AdditionalAnswerType, QuestionsType, ViewModel} from '../../../tp.survey.enum';\r\nimport {TpSurveyLogicService} from '../../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MISSING_VALUE} from '../../../tp.survey.const';\r\nimport {GetAdditionalValueByValuePipe} from '../../../pipe/get.additional.value.by.value/get.additional.value.by.value.pipe';\r\nimport {KeyValuesPipe} from '../../../pipe/key.values/key.values.pipe';\r\nimport {AnswerLangComponent} from '../answer.lang/answer.lang.component';\r\nimport {AnswerAcComponent} from '../answer.ac/answer.ac.component';\r\n\r\ninterface IAnswerForm {\r\n answer: FormControl<AnswerT>;\r\n additionalAnswers: FormGroup<{\r\n [key: string]: FormControl<AdditionalAnswer>\r\n }>;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-container-answer',\r\n imports: [\r\n AnswerODComponent,\r\n ReactiveFormsModule,\r\n AnswerSSComponent,\r\n AnswerInfoComponent,\r\n AnswerMSComponent,\r\n AnswerAdditionalComponent,\r\n MultiLangObjectToHtmlPipe,\r\n AnswerEndComponent,\r\n AnswerOLComponent,\r\n AnswerSLComponent,\r\n GetAdditionalValueByValuePipe,\r\n KeyValuesPipe,\r\n AnswerLangComponent,\r\n AnswerAcComponent\r\n ],\r\n templateUrl: './container.answer.component.html',\r\n styleUrl: './container.answer.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class ContainerAnswerComponent implements OnInit{\r\n readonly findVariable = input.required<TFindVariableVoid>();\r\n readonly question = input.required<IdbQuestion>();\r\n readonly language = input.required<number>();\r\n readonly viewModel = input.required<ViewModel>();\r\n readonly answers = input<ICurrentQuestionAnswer>();\r\n readonly developerMode = input<boolean>(false);\r\n readonly languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n readonly repositoryPath = input<string>('');\r\n readonly visibleAlternativeList = signal<Array<IdbAlternative>>([]);\r\n readonly visibleSectionList = signal<Array<IdbSection>>([]);\r\n readonly visibleAdditionalAnswerList = signal<Array<IdbAdditionalAnswer>>([]);\r\n readonly mode = input<TMode>('survey');\r\n readonly logicChanged = output<Record<string, any>>();\r\n readonly answerChanged = output<AnswerChange>();\r\n readonly onLanguageChange = output<number>();\r\n readonly regionCreated = output<Array<IPoint>>();\r\n readonly regionSelected = output<IRegionSelectedEvent>();\r\n readonly questionsType = QuestionsType;\r\n readonly answerForm: FormGroup<IAnswerForm>;\r\n readonly AdditionalAnswerType = AdditionalAnswerType;\r\n readonly #acStrokePointList: Array<IPoint> = [];\r\n readonly #logic = inject(TpSurveyLogicService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n #alternativeSequenceClicks: Array<[number, number]> = [];\r\n\r\n constructor() {\r\n this.answerForm = new FormGroup<IAnswerForm>({\r\n answer: new FormControl<AnswerT>(null ),\r\n additionalAnswers: new FormGroup({}),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const answerValue = this.answers()?.question?.AnswerValue ?? null;\r\n const answerValueClear = answerValue === MISSING_VALUE ? null : answerValue;\r\n this.answerForm.patchValue({\r\n answer: answerValueClear,\r\n additionalAnswers: this.answers()?.question?.AnswerAdditional\r\n }, {emitEvent:false});\r\n\r\n this.#alternativeSequenceClicks = this.answers()?.question?.AlternativeSequenceClicks ?? [];\r\n this.#updateAlternativesAndSections();\r\n this.#updateAdditionalAnswers(true);\r\n this.#addValidator();\r\n\r\n this.answerForm.valueChanges.pipe(\r\n debounceTime(250),\r\n tap(() => this.#emitLogicChanged()), //шлём новые логические переменные(может обновиться список additionalAnswers)\r\n tap(() => this.#updateAdditionalAnswers(false)), //перестраиваем additionalAnswers\r\n map(values => {\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n const additionalAnswerNormalized: Record<number, AdditionalAnswer> = {};\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const isVisible = this.visibleAdditionalAnswerList().find(faa => faa.Value === aa.Value);\r\n if (isVisible) {\r\n additionalAnswerNormalized[aa.Value] = !!values.additionalAnswers ? values.additionalAnswers[aa.Value]! : MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.enable({emitEvent: false})\r\n } else {\r\n additionalAnswerNormalized[aa.Value] = MISSING_VALUE;\r\n formGroup.get(aa.Value.toString())?.disable({emitEvent: false})\r\n }\r\n });\r\n return {\r\n answer:values.answer,\r\n additionalAnswers: additionalAnswerNormalized,\r\n }\r\n }),\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe(data => {\r\n this.answerChanged.emit({\r\n guid: this.question().QuestionGuid,\r\n isComplete: this.answerForm.valid,\r\n answer: data.answer!,\r\n additionalAnswers: data.additionalAnswers as Record<number, AdditionalAnswer>,\r\n logicVars: this.#getLogicVars(),\r\n viewedAlternativeValues: this.visibleAlternativeList().map(alt => alt.Value),\r\n viewedSectionGuids: this.visibleSectionList().map(alt => alt.SectionGuid),\r\n alternativeSequenceClicks: Array.from(this.#alternativeSequenceClicks),\r\n acStrokePointList: this.#acStrokePointList.length > 0 ? this.#acStrokePointList : undefined\r\n });\r\n });\r\n this.#setDefaultAnswers();\r\n \r\n /*Update 19.03.2025\r\n Когда нажимают кнопку back, ответы остаются, но логические переменные удаляются, см. TpSurveyCoreService.clearAnswerForCurrentQuestion\r\n Но если респондент ничего в ответе не меняет и нажимает кнопку далее, то логические переменные не обновляются.\r\n Поэтому если ответ на вопрос не равен MISSING_VALUE(-97), то нужно обновить логические переменные\r\n */\r\n if (answerValue !== MISSING_VALUE){\r\n this.#emitLogicChanged();\r\n }\r\n }\r\n\r\n #addValidator(): void{\r\n const question = this.question();\r\n this.answerForm.controls.answer.addValidators(answerDefaultValidator());\r\n\r\n switch (question.QuestionType){\r\n case QuestionsType.eqSS: {\r\n this.answerForm.controls.answer.addValidators(answerSSValidator());\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n this.answerForm.controls.answer.addValidators(answerMSValidator(this.visibleAlternativeList(), this.question().AlternativeMinAnswersCount, this.question().AlternativeMaxAnswersCount));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOD: {\r\n this.answerForm.controls.answer.addValidators(answerODValidator(question.ODMinValue, question.ODMaxValue));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n this.answerForm.controls.answer.addValidators(answerOLValidator(question.OLTypeTel, question.CanSkip ?? false));\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n this.answerForm.controls.answer.addValidators(answerSlValidator(this.question().RequireAllAnswers, this.question().SLSectionMinAnswersCount, this.visibleSectionList()));\r\n break;\r\n }\r\n }\r\n }\r\n\r\n #setDefaultAnswers(): void{\r\n const question = this.question();\r\n const isLang = question.QuestionType === QuestionsType.eqLANG;\r\n const isInfo = question.QuestionType === QuestionsType.eqINFO;\r\n const isEnd = question.QuestionType === QuestionsType.eqEND;\r\n const isSSMS = (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) && (this.visibleAlternativeList().length === 0);\r\n\r\n if (isInfo || isEnd || isSSMS || isLang) {\r\n let defaultAnswer;\r\n switch (question.QuestionType) {\r\n case QuestionsType.eqMS: defaultAnswer = []; break;\r\n case QuestionsType.eqSS: defaultAnswer = 0; break;\r\n default: defaultAnswer = 1;\r\n }\r\n\r\n //может возникнуть ситуация, когда нет альтернатив для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n this.answerForm.patchValue({\r\n answer: defaultAnswer\r\n }, {emitEvent: true});\r\n }\r\n }\r\n\r\n //собираем все логические переменные, которые генерит вопрос\r\n #getLogicVars(): Record<string, any>{\r\n const questionType = this.question().QuestionType;\r\n const answer = this.answerForm.controls.answer.value;\r\n const logicObj: Record<string, any> = {};\r\n\r\n //переменная самого вопроса\r\n const questionSysName = this.question().SysName;\r\n\r\n //ответ на основной вопрос\r\n logicObj[questionSysName] = this.answerForm.value.answer;\r\n\r\n switch (questionType) {\r\n case QuestionsType.eqSS: {\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answer === alt.Value ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqMS: {\r\n const answers = Array.isArray(this.answerForm.value.answer) ? this.answerForm.value.answer : [];\r\n //каждая альтернатива имеет свою переменную, 1 нажата, 0 не нажата или скрыта(скрыта сомнительно, что это правильно)\r\n this.question().Alternativelist.forEach( alt => logicObj[`${questionSysName}${alt.SysName}`] = answers.find(val => val === alt.Value) ? 1 : 0); // переменные альтернатив\r\n break;\r\n }\r\n\r\n case QuestionsType.eqOL: {\r\n //логическая переменная для OL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n break;\r\n }\r\n\r\n case QuestionsType.eqSL: {\r\n /*Тут сложнее чем в остальных типах вопросов.\r\n * 1. Логическая переменная для SL вопроса\r\n * 2. Логическая переменная для каждой секции\r\n * 3. Логические переменные для каждой альтернативы + секции\r\n * */\r\n\r\n //1. Логическая переменная для SL вопроса - 1, а не то что ввели\r\n logicObj[questionSysName] = 1;\r\n\r\n //Каждая секция должны иметь свою логическую переменную, array<number> если multiselect, number если multiselect = false, -97 если секция не была показана.\r\n //+ для каждой секции нужно добавлять логические переменные для каждой альтернативы. 1 нажата, 0 отжата, -97 если альтернатива не была показана.\r\n const fullAnswers = this.answerForm.value.answer as AnswerSlType;\r\n const visibleAlternativeList = this.visibleAlternativeList().map(alt => alt.Value);\r\n this.question().Sectionlist.forEach(section => {\r\n const sectionSysName = section.SysName;\r\n\r\n //если undefined, то заменим на -97 это значит секция не была показана.\r\n const sectionAnswer = fullAnswers[section.SectionGuid.toString()] ?? MISSING_VALUE;\r\n\r\n //2. добавляем переменную самой секции.\r\n logicObj[sectionSysName] = sectionAnswer;\r\n this.question().Alternativelist.forEach(alternative => {\r\n\r\n const sectionAlternativeSysName = `${sectionSysName}${alternative.SysName}`;\r\n //секция не была показана, значит альтернативы тоже\r\n if (sectionAnswer === MISSING_VALUE) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //сначала нужно проверить была ли показана альтернатива, если нет\r\n //альтернативы нет в списке показанных\r\n if (!visibleAlternativeList.find(visibleVal => visibleVal === alternative.Value)) {\r\n logicObj[sectionAlternativeSysName] = MISSING_VALUE;\r\n } else {\r\n //альтернативы есть в списке показанных, нужно узнать была нажата или нет.\r\n const isPressed = Array.isArray(sectionAnswer) ? sectionAnswer.includes(alternative.Value) : sectionAnswer === alternative.Value;\r\n logicObj[sectionAlternativeSysName] = isPressed ? 1 : 0;\r\n }\r\n }\r\n });\r\n });\r\n break;\r\n }\r\n }\r\n\r\n //логические переменные дополнительных вопросов.\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n const additionalAnswer = !!this.answerForm.value.additionalAnswers ? this.answerForm.value.additionalAnswers![aa.Value.toString()] : MISSING_VALUE;\r\n const additionalAnswerSysName = `${questionSysName}${aa.SysName}`;\r\n if (additionalAnswer === MISSING_VALUE) {\r\n //дополнительный ответ не был показан, (скрыт по логике)\r\n logicObj[additionalAnswerSysName] = MISSING_VALUE;\r\n } else {\r\n //если на вопрос не отвечали(null), этот самый null и добавляем как ответ.\r\n if (additionalAnswer === null) {\r\n logicObj[additionalAnswerSysName] = null;\r\n } else {\r\n //если вопрос типа текст, как переменную добавим 1, в остальных случаях сам ответ.\r\n logicObj[additionalAnswerSysName] = aa.AnswerType === AdditionalAnswerType.aatText ? 1 : additionalAnswer;\r\n }\r\n }\r\n });\r\n return logicObj;\r\n }\r\n\r\n #updateAlternativesAndSections(): void{\r\n const developerMode = this.developerMode();\r\n //фильтруем альтернативы,\r\n const filteredAlternativeList = this.question().Alternativelist.filter(alt => developerMode || this.#logic.executeLogic(alt.EnableExpression));\r\n\r\n //фильтруем секции,\r\n const filteredSectionList = this.question().Sectionlist.filter(sec => developerMode || this.#logic.executeLogic(sec.EnableExpression));\r\n\r\n //меняем расположение тех, которые этого требуют и обновляем глобальную переменную\r\n this.visibleAlternativeList.set(this.#arrangeRotatedList(filteredAlternativeList));\r\n //для секций тоже самое\r\n this.visibleSectionList.set(this.#arrangeRotatedList(filteredSectionList));\r\n }\r\n\r\n #updateAdditionalAnswers(isInit: boolean): void{\r\n const developerMode = this.developerMode();\r\n const formGroup = (this.answerForm.controls.additionalAnswers as FormGroup);\r\n\r\n if (isInit) {\r\n this.question().AdditionalAnswerlist.forEach(aa => {\r\n switch (aa.AnswerType) {\r\n case AdditionalAnswerType.aatNumber: formGroup.addControl(aa.Value.toString(), new FormControl<number | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired), additionalAnswerNumberValidator(aa.IsRequired, aa.NumberMinValue, aa.NumberMaxValue)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatText: formGroup.addControl(aa.Value.toString(), new FormControl<string | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n case AdditionalAnswerType.aatBoolean: formGroup.addControl(aa.Value.toString(), new FormControl<boolean | null>(null,{validators: [additionalAnswerDefaultValidator(aa.IsRequired)]}), {emitEvent: false}); break;\r\n }\r\n });\r\n return\r\n }\r\n\r\n //фильтруем,\r\n const filteredAdditionalAnswerList = this.question().AdditionalAnswerlist.filter(addAnswer => developerMode || this.#logic.executeLogic(addAnswer.EnableExpression));\r\n\r\n //обновляем глобальный список\r\n this.visibleAdditionalAnswerList.set(filteredAdditionalAnswerList);\r\n }\r\n\r\n onAlternativeClick(value: number) {\r\n this.#alternativeSequenceClicks.push([value, new Date().getTime()]);\r\n }\r\n \r\n onAcStrokeComplete(pointList: Array<IPoint>) {\r\n this.#acStrokePointList.length = 0;\r\n this.#acStrokePointList.push(...pointList);\r\n }\r\n\r\n #arrangeRotatedList<T extends IdbAlternative | IdbSection>(inputArray: Array<T>): Array <T> {\r\n //У каждой альтернативы и секции есть признак Rotation, который позволяем менять порядок отображения альтернативы или секции\r\n //если он true, то альтернатива и секция должна поменять расположение\r\n const resArray: Array<T | number> = [];\r\n\r\n //размер массива\r\n const inputArrayLength = inputArray.length;\r\n\r\n //проходимся по каждому элементу входного массива, и копируем в результирующий, Если Rotation, копируем его индекс, если Rotation не указан, копируем сам объект\r\n inputArray.forEach((obj, index) => resArray.push(obj.Rotation ? index : obj));\r\n\r\n //теперь с помощью рандома, расставим остальные эл-ты\r\n resArray.forEach((obj, index, array) => {\r\n if ((typeof obj === 'number') && (obj >= 0)) {\r\n while (true) {\r\n //если в новом массиве нет элемента из старого массива по random индексу, тогда копируем в новый массив старый елемент в новый адрес\r\n const newIndex = Math.floor( Math.random() * inputArrayLength );\r\n if (array.indexOf(inputArray[newIndex]) === -1) {\r\n array[index] = inputArray[newIndex];\r\n break;\r\n }\r\n }\r\n }\r\n });\r\n return resArray as Array<T>;\r\n }\r\n \r\n #emitLogicChanged(): void{\r\n this.logicChanged.emit(this.#getLogicVars())\r\n }\r\n \r\n\r\n}\r\n","<div class=\"container-main\" [formGroup]=\"answerForm\">\r\n @switch (question().QuestionType) {\r\n\r\n @case (questionsType.eqLANG) {\r\n <tp-survey-answer-lang\r\n [languageList]=\"languageList()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [language]=\"2\"\r\n [viewModel]=\"viewModel()\"\r\n (onLanguageChange)=\"onLanguageChange.emit($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqINFO) {\r\n <tp-survey-answer-info\r\n formControlName=\"answer\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"/>\r\n }\r\n\r\n @case (questionsType.eqSS) {\r\n <tp-survey-answer-ss\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqMS) {\r\n <tp-survey-answer-ms\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [alternativeMaxAnswersCount]=\"question().AlternativeMaxAnswersCount\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n (onAlternativeClick)=\"onAlternativeClick($event)\"/>\r\n }\r\n\r\n @case (questionsType.eqOD) {\r\n <tp-survey-answer-od\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [minValue]=\"question().ODMinValue\"\r\n [maxValue]=\"question().ODMaxValue\"\r\n />\r\n }\r\n\r\n @case (questionsType.eqOL) {\r\n <tp-survey-answer-ol\r\n formControlName=\"answer\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [telephoneInput]=\"question().OLTypeTel\"\r\n [canSkip]=\"question().CanSkip\"/>\r\n }\r\n\r\n @case (questionsType.eqSL) {\r\n <tp-survey-answer-sl\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [alternativeList]=\"visibleAlternativeList()\"\r\n [sectionList]=\"visibleSectionList()\"\r\n [multiSelect]=\"question().MultiSelect\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [maxCount]=\"this.question().SLSectionMaxAnswersCount\"\r\n />\r\n }\r\n\r\n\r\n @case (questionsType.eqAC) {\r\n <tp-survey-answer-ac\r\n formControlName=\"answer\"\r\n [question]=\"question()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [findVariable]=\"findVariable()\"\r\n [mode]=\"mode()\"\r\n (regionCreated)=\"regionCreated.emit($event)\"\r\n (regionSelected)=\"regionSelected.emit($event)\"\r\n (strokeComplete)=\"onAcStrokeComplete($event)\"\r\n />\r\n }\r\n\r\n\r\n @case (questionsType.eqEND) {\r\n <tp-survey-answer-end\r\n formControlName=\"answer\"\r\n [findVariable]=\"findVariable()\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [language]=\"language()\"\r\n [viewModel]=\"viewModel()\"\r\n />\r\n }\r\n }\r\n\r\n <div class=\"container-additional-answer\">\r\n @for (addAnswer of answerForm.controls.additionalAnswers.controls | keyValues; track addAnswer) {\r\n @if (addAnswer.name | getAdditionalValueByValue:visibleAdditionalAnswerList(); as additionalAnswerObject ) {\r\n <tp-survey-answer-additional\r\n [control]=\"addAnswer.control\"\r\n [class.full-width]=\"additionalAnswerObject.AnswerType===AdditionalAnswerType.aatText\"\r\n [answerType]=\"additionalAnswerObject.AnswerType\"\r\n [caption]=\"additionalAnswerObject.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [numberMinValue]=\"additionalAnswerObject.NumberMinValue\"\r\n [numberMaxValue]=\"additionalAnswerObject.NumberMaxValue\"\r\n [textMultiline]=\"additionalAnswerObject.TextMultiline\"\r\n [captionPosition]=\"additionalAnswerObject.CaptionPosition\"/>\r\n }\r\n }\r\n </div>\r\n</div>\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {IdbBaseParamsLanguage} from '../../tp.survey.interface';\r\n\r\n@Pipe({\r\n name: 'getActiveLanguage',\r\n})\r\nexport class GetActiveLanguagePipe implements PipeTransform {\r\n\r\n transform(languageList?: Array<IdbBaseParamsLanguage>, languageId?: number): IdbBaseParamsLanguage | undefined {\r\n return Array.isArray(languageList) ? languageList.find(langObj => langObj.Value === languageId && langObj.isActive) : undefined;\r\n }\r\n\r\n}\r\n","import {Directive, effect, ElementRef, input} from '@angular/core';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {BASE_HEIGHT, BASE_WIDTH} from '../../tp.survey.const';\r\n\r\n@Directive({\r\n selector: '[tpSurveyUpdateFontSize]',\r\n})\r\nexport class UpdateFontSizeDirective{\r\n viewModel = input.required<ViewModel>( {alias: 'tpSurveyUpdateFontSize'});\r\n constructor(private readonly _element: ElementRef) {\r\n effect(() => {\r\n if (this.viewModel() === ViewModel.vmTablet) {\r\n const containerWidth = this._element.nativeElement.clientWidth;\r\n const containerHeight = this._element.nativeElement.clientHeight;\r\n const proportion: number = Math.min(containerWidth / BASE_WIDTH, containerHeight / BASE_HEIGHT );\r\n Array.from(this._element.nativeElement.children).forEach((el) => (el as HTMLElement).style.fontSize = `${proportion * 100}%`);\r\n }\r\n });\r\n }\r\n}\r\n\r\n","import {LOGIC_FUNC_TEXT} from './tp.survey.const';\r\n\r\nexport function executeLogicExpression(expression: string, vars: Record<string, unknown>): Function {\r\n return new Function(`${LOGIC_FUNC_TEXT} return ${expression}`).call(vars);\r\n}\r\n\r\n","import {IdbQuestionaryQuota, IdbQuestionaryQuota2dObject} from '../../tp.survey.interface';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {executeLogicExpression} from '../../tp.survey.method';\r\nimport {LogicObject} from '../../tp.survey.type';\r\n\r\ntype QuotaCalculationResult = {\r\n name: string;\r\n guid: number;\r\n} | {\r\n name: null;\r\n guid2d: number;\r\n} | null;\r\n\r\nexport class SurveyQuotas {\r\n #completedQuota: {name: string | null; guid: number| null; guid2d: number| null} = {name: null, guid: null, guid2d: null};\r\n #quotas: Array<IdbQuestionaryQuota> = [];\r\n #quotas2d: Array<IdbQuestionaryQuota2dObject> = [];\r\n #quotaLimitDestinationQuestionGuid: number = -1;\r\n #quotaLimitDestinationQuestionNum: number = -1;\r\n\r\n setQuotas(quotas1d: Array<IdbQuestionaryQuota> = [], quotas2d: Array<IdbQuestionaryQuota2dObject> = [], quotaLimitDestinationQuestionGuid: number = -1, destinationQuestionNum: number = -1){\r\n this.#quotas = quotas1d;\r\n this.#quotas2d = quotas2d;\r\n this.#quotaLimitDestinationQuestionGuid = quotaLimitDestinationQuestionGuid;\r\n this.#quotaLimitDestinationQuestionNum = destinationQuestionNum;\r\n }\r\n\r\n guidIsDestinationQuestion(guid: number): boolean{\r\n return this.#quotaLimitDestinationQuestionGuid === guid;\r\n }\r\n\r\n\r\n get quotaIsCompleted(): boolean {\r\n return this.#completedQuota && (!!this.#completedQuota.guid || !!this.#completedQuota.guid2d) ;\r\n }\r\n\r\n get destinationQuestionGuid(): number {\r\n return this.#quotaLimitDestinationQuestionGuid\r\n }\r\n\r\n get quotaCount(): number {\r\n const quotas = this.#quotas && Array.isArray(this.#quotas) ? this.#quotas.length : 0;\r\n const quotas2d = this.#quotas2d && Array.isArray(this.#quotas2d) ? this.#quotas2d.length : 0;\r\n return quotas + quotas2d;\r\n }\r\n\r\n findFilledQuotas(currentQuestionNum: number, vars: LogicObject, interviewAnswers: Array<Answer>): void {\r\n /*\r\n * Поиск заполненной квоты это очень дорогой процесс. Его нужно оптимизировать по максимуму.\r\n * Перед поиском нужно выполнить ряд проверок.\r\n * Проверка currentQuestionNum <= this.#quotaLimitDestinationQuestionNum Нужна для оптимизации.\r\n * DestinationQuestion Желательно располагать после последнего квотного вопроса, потому что нет смысла постоянно проверять квоты, если вопросы которые используются для расчёта квоты меняться не будут.\r\n * например Квота Q1 + Q2 <= 25. DestinationQuestion нужно делать номером 3 или 4. Потому что как бы респондент не отвечал на последующие вопросы, результат квот не измениться и каждый раз их пересчитывать смысла нет.\r\n */\r\n if (\r\n (this.destinationQuestionGuid > 0) && //Глобально в настройках анкеты должен быть указан вопрос который должен отобразиться при достижении квоты, если его нет, то и искать квоты смысла нет.\r\n (this.quotaCount > 0) && //проверим если у нас вообще квоты\r\n (currentQuestionNum <= this.#quotaLimitDestinationQuestionNum) && // номер текущий вопроса меньше номера вопроса для перехода по достижении квот\r\n (!this.quotaIsCompleted) //и на финал проверим если ли уже заполненная квота, повторно не запускаем\r\n ) {\r\n\r\n new Promise<QuotaCalculationResult>((resolve, reject) => {\r\n if (Array.isArray(this.#quotas)) {\r\n const completedQuota = this.#quotas.find(quota => executeLogicExpression(quota.expression, vars));\r\n if (!!completedQuota) {\r\n return resolve({name: completedQuota.name, guid: completedQuota.quota_guid});\r\n }\r\n }\r\n\r\n if (Array.isArray(this.#quotas2d)) {\r\n const answers = this.#quotas2d.length > 0 ? interviewAnswers.map(a => ({av: a.AnswerValue, qg: a.QuestionGUID}) ) : [];\r\n\r\n const filledQuota2dArray = this.#quotas2d.filter(quotaValues => {\r\n /*\r\n * 2d квоты это всегда таблица. Но может быть иерархия, когда одно значение ответа может включать в себя один или несколько других ответов. Например \"Обл центр\" это 1, а город или село это другой ответ, хотя город и село это разные альтернативы\r\n * */\r\n if (Array.isArray(quotaValues.cqv) && quotaValues.cqv.length > 0) {\r\n /*\r\n * это ветка для случая с иерархией. Тут будет 2 массива.\r\n * В первом будут контролироваться те ответы которое должны совпадать полностью arrayEveryValues\r\n * Во втором arraySomeValue будет проверяться совпадение хотя бы 1 ответа\r\n * */\r\n\r\n const questionGuid = quotaValues.cqv[0].guid;\r\n\r\n const masterQuestion = quotaValues.qs.find( q => q.guid === questionGuid);\r\n const arrayEveryValues = quotaValues.qs.filter(q => q.guid != questionGuid);\r\n\r\n const arraySomeValue = [...quotaValues.cqv, ...[masterQuestion!]];\r\n\r\n const arrayEveryResult = arrayEveryValues.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n const arraySomeResult = arraySomeValue.some(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n //если в обоих массивах совпадают значения значит квота выполнилась\r\n return arrayEveryResult && arraySomeResult;\r\n } else {\r\n //обычный массив значений, в котором должны совпадать все значения\r\n return quotaValues.qs.every(qvq => !!answers.find(intAnswer => intAnswer.qg === qvq.guid && intAnswer.av === qvq.value))\r\n }\r\n });\r\n //если не нашли заполненных квот выходим\r\n if (filledQuota2dArray.length <= 0) {\r\n return;\r\n }\r\n\r\n //ищем квоту которая заполнена и у нее есть условие и оно выполняется.\r\n const quota2dWithExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !!q.exp && executeLogicExpression(q.exp, vars));\r\n\r\n //если квота есть сообщим\r\n if (!!quota2dWithExpression) {\r\n return resolve({name: null, guid2d: quota2dWithExpression.qvg});\r\n }\r\n\r\n //если квоты с Expression нет, ищем квоту которая заполнена и у нее нет условия\r\n const quota2dWithoutExpression = filledQuota2dArray.find((q: IdbQuestionaryQuota2dObject) => !q.exp || (typeof q.exp === 'string' && q.exp.trim().length === 0));\r\n if (!!quota2dWithoutExpression) {\r\n return resolve({name: null, guid2d: quota2dWithoutExpression.qvg});\r\n }\r\n }\r\n reject(null)\r\n }).then(quota => {\r\n if (!!quota) {\r\n this.#completedQuota = {\r\n name: quota.name,\r\n guid: 'guid' in quota ? quota.guid : null,\r\n guid2d: 'guid2d' in quota ? quota.guid2d : null,\r\n }\r\n }\r\n }).catch(err => {\r\n console.error(err);\r\n });\r\n }\r\n }\r\n}\r\n","import {IPoint, IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {AdditionalAnswer} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\n\r\nexport class Answer implements IQuestionAnswer {\r\n readonly QuestionGUID: number;\r\n readonly QuestionVersion: number;\r\n readonly AnswerAdditional: Record<string, AdditionalAnswer> = {};\r\n readonly ViewedAlternativeValues: Array<number> = [];\r\n readonly ViewedSectionGuids: Array<number> = [];\r\n readonly AlternativeSequenceClicks: Array<[number, number]> = [];\r\n readonly StrokePointList: Array<IPoint> = [];\r\n StartedAt = 0;\r\n FinishedAt = 0;\r\n AnswerValue: any = MISSING_VALUE;\r\n answerIsComplete: boolean = false;\r\n constructor(guid: number, version: number = -1) {\r\n this.QuestionGUID = guid;\r\n this.QuestionVersion = version;\r\n }\r\n clear(): void {\r\n this.StartedAt = 0;\r\n this.FinishedAt = 0;\r\n this.AnswerValue = MISSING_VALUE;\r\n this.ViewedAlternativeValues.length = 0;\r\n this.ViewedSectionGuids.length = 0;\r\n this.StrokePointList.length = 0;\r\n this.AlternativeSequenceClicks.length = 0;\r\n for (const key of Object.keys(this.AnswerAdditional)) {\r\n this.AnswerAdditional[Number(key)] = null;\r\n }\r\n }\r\n}\r\n","import {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyInterviewService {\r\n #answerList: Array<Answer> = [];\r\n startedAt: number = 0;\r\n\r\n createAnswer(guid: number, version: number): Answer {\r\n //ишем ответ с таким же номером как и в вопросе\r\n let answer = this.findAnswerByGuid(guid);\r\n\r\n //если ответа с таким номером вопроса нет, создадим\r\n if (!answer) {\r\n answer = new Answer(guid, version)\r\n this.#answerList.push(answer);\r\n }\r\n //вернём то, что создали или то что нашли\r\n return answer;\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this.#answerList.find(a => a.QuestionGUID === guid);\r\n }\r\n\r\n questionIsComplete(guid: number): boolean{\r\n const answer = this.findAnswerByGuid(guid);\r\n return !answer ? false : answer.answerIsComplete;\r\n }\r\n\r\n getAnswerList(): Array<Answer>{\r\n return this.#answerList;\r\n }\r\n\r\n overrideAnswers(answers: Array<IQuestionAnswer>): void{\r\n //не будем трогать вопросы которые = -97\r\n answers.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n const newAnswer = this.#answerList.find(aa => aa.QuestionGUID === oldAnswer.QuestionGUID);\r\n if (!!newAnswer) {\r\n //вернём основной ответ\r\n newAnswer.AnswerValue = oldAnswer.AnswerValue;\r\n\r\n newAnswer.StartedAt = oldAnswer.StartedAt;\r\n newAnswer.FinishedAt = oldAnswer.FinishedAt;\r\n\r\n //С дополнительными ответами сложнее, они помечены readonly. Поэтому сначала удалим, потом добавим\r\n for (const prop of Object.getOwnPropertyNames(newAnswer.AnswerAdditional)) {\r\n delete newAnswer.AnswerAdditional[prop];\r\n }\r\n //добавляем старые значения\r\n for (const [key, value] of Object.entries(oldAnswer.AnswerAdditional)) {\r\n newAnswer.AnswerAdditional[key] = value;\r\n }\r\n\r\n //То же самое с ViewedAlternativeValues и ViewedSectionGuids и AlternativeSequenceClicks. Т.к. они readonly сначала удалим, потом добавим\r\n newAnswer.ViewedAlternativeValues.length = 0;\r\n oldAnswer.ViewedAlternativeValues.forEach(oa => newAnswer.ViewedAlternativeValues.push(oa));\r\n\r\n newAnswer.ViewedSectionGuids.length = 0;\r\n oldAnswer.ViewedSectionGuids.forEach(oa => newAnswer.ViewedSectionGuids.push(oa));\r\n\r\n newAnswer.AlternativeSequenceClicks.length = 0;\r\n oldAnswer.AlternativeSequenceClicks.forEach(oa => newAnswer.AlternativeSequenceClicks.push(oa));\r\n }\r\n });\r\n }\r\n}\r\n","import {DestroyRef, inject, Inject, Injectable, PLATFORM_ID} from '@angular/core';\r\nimport {BehaviorSubject, filter, Observable, Subject} from 'rxjs';\r\nimport {SurveyQuotas} from '../tp.servey.quota/tp.survey.quota';\r\nimport {TpSurveyLogicService} from '../tp.survey.logic/tp.survey.logic.service';\r\nimport {isPlatformBrowser} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {AnswerChange, IdbQuestion, IdbQuestionary, IInterviewData, IInterviewLogicVar, IQuestionAnswer} from '../../tp.survey.interface';\r\nimport {TpSurveyInterviewService} from '../tp.survey.interview/tp.survey.interview.service';\r\nimport {QuestionsType, ResultativeStatus, SurveyEvents, ValidStatus} from '../../tp.survey.enum';\r\nimport {Answer} from '../tp.survey.answer/tp.survey.answer';\r\nimport {AnswerSlType, LogicObject} from '../../tp.survey.type';\r\nimport {MISSING_VALUE} from '../../tp.survey.const';\r\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\r\n\r\ninterface BroadcastEvent {\r\n key: string;\r\n data?: any;\r\n}\r\n\r\ninterface ILogicVarContainer {\r\n [questionGuid: string]: Set<string>;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TpSurveyCoreService {\r\n readonly #eventBus = new Subject<BroadcastEvent>();\r\n readonly #currentQuestion = new BehaviorSubject<IdbQuestion | null>(null);\r\n #surveyQuotas = new SurveyQuotas();\r\n #questionary?: IdbQuestionary;\r\n #displayedQuestions: Array<number> = []; // нужно для навигации по кнопке back\r\n #questionLogicVarContainer: ILogicVarContainer = {}; //Нужно знать какая логическая переменная относится к какому вопросу. НапримерЮ когда нужно ее отчистить при переходе назад.\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor(@Inject(PLATFORM_ID) private readonly platformId: object, private readonly _logic: TpSurveyLogicService, private readonly _interview: TpSurveyInterviewService) {\r\n // запускам проверку квот, после скрытия каждого(почти) вопроса (seQuestionHide)\r\n this.#eventBus.asObservable().pipe(\r\n filter(ev => ev.key === SurveyEvents.seQuestionHide ),\r\n takeUntilDestroyed(this.#destroyRef),\r\n ).subscribe({\r\n next: () => this.#surveyQuotas.findFilledQuotas(this.#currentQuestion.value?.QuestionNum ?? -1, Object.assign({}, this._logic.getLogicVars()), this._interview.getAnswerList())\r\n });\r\n }\r\n\r\n setupSurvey(questionaryRawData: IdbQuestionary, logicVars?: Array<IInterviewLogicVar>, answerList?: Array<IQuestionAnswer>, questionGuid?: number) {\r\n //если анкеты нет, делать нечего.\r\n if (!questionaryRawData) {\r\n this.#currentQuestion.next(null);\r\n return;\r\n }\r\n\r\n this.#questionary = questionaryRawData;\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n //узнаем есть ли вопрос который указали для перехода при заполнении квоты\r\n const destinationQuestion = this.#findQuestionByGuid(questionaryRawData.BaseParams.QuotaLimitDestinationQuestionGuid);\r\n\r\n //инициализируем квоты\r\n this.#surveyQuotas.setQuotas(questionaryRawData.Quotas, questionaryRawData.Quotas2d, destinationQuestion?.QuestionGuid ?? -1, destinationQuestion?.QuestionNum ?? -1);\r\n }\r\n\r\n //создадим ответы и логические переменные\r\n this.#initiateQuestions(this.#questionary.Questions)\r\n\r\n // Может быть 2 варианта запуска интервью, 1-новое интервью, 2-перезапуск старого интервью. В первом случае начало это lang или первый вопрос. Во втором, с последнего вопроса на который ответили.\r\n let startQuestionNum: number | undefined = undefined;\r\n\r\n //загружаем старые логические переменные и переменные которые указали из вне.\r\n this.#fillOldLogic(logicVars ?? []);\r\n\r\n //если загружаем ранее не законченное интервью, продолжаем с места последнего вопроса (случай номер 2)\r\n if (!!answerList && !!questionGuid) {\r\n //загружаем старые логические переменные и ответы\r\n this.#fillOldInterviewData(answerList);\r\n\r\n //ищем номер вопроса, который был последний перед сохранением.\r\n const questionLastSave = this.#findQuestionByGuid(questionGuid);\r\n\r\n //Вопрос могли удалить, тогда начнем сначала.\r\n if (!!questionLastSave) {\r\n startQuestionNum = questionLastSave.QuestionNum;\r\n }\r\n }\r\n\r\n if (startQuestionNum === undefined) {\r\n //Это новое интервью, без ранее сохранённых данных(случай 1). Запускаем опрос, первый экран это Lang вопрос, но если выбора языка нет, пропускаем и переходим на 1-й вопрос\r\n startQuestionNum = this.#activeLangCount > 1 ? 0 : this.#nextQuestionNum();\r\n }\r\n\r\n //пошлём событие о начале опроса\r\n this.#eventBus.next({key: SurveyEvents.seSurveyStart, data: {questionary: this.#questionary, interviewUuid: this._interview.startedAt}});\r\n\r\n //показываем вопрос\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[startQuestionNum]);\r\n }\r\n\r\n on(...key: Array<string>): Observable<any> {\r\n return this.#eventBus.asObservable().pipe(\r\n filter(event => key.includes(event.key)),\r\n map(event => event.data)\r\n );\r\n }\r\n\r\n goToNextQuestion(): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n if (!currentQuestion) {\r\n return;\r\n }\r\n //если ответ на текущий вопрос не закончен И опция пропуска вопроса не активна, выходим\r\n if (!this._interview.questionIsComplete(currentQuestion.QuestionGuid) && !currentQuestion.CanSkip) {\r\n return ;\r\n }\r\n\r\n //если указан PostScript, выполним его\r\n if (!!currentQuestion.PostScript) {\r\n this._logic.executePostScript(currentQuestion.PostScript);\r\n }\r\n this.#changeCurrentQuestion(this.#questionary!.Questions[this.#nextQuestionNum()]);\r\n }\r\n\r\n goToBackQuestion(): void {\r\n this.#displayedQuestions.pop(); // удалим информацию о том что показывали этот вопрос\r\n const previousQuestionGuid = this.#displayedQuestions.pop(); // узнаем номер вопроса на который нам надо перейти, и удалим информацию что-бы не дублировать\r\n if (!!previousQuestionGuid) {\r\n const prevQuestion = this.#findQuestionByGuid(previousQuestionGuid);\r\n if (!!prevQuestion) {\r\n this.#clearAnswerForCurrentQuestion();// отчистим ответ на вопрос, если он уже есть.\r\n this.#changeCurrentQuestion(prevQuestion);\r\n }\r\n }\r\n }\r\n\r\n questionIsComplete(guid: number): boolean {\r\n const answer = this._interview.findAnswerByGuid(guid);\r\n return answer?.answerIsComplete ?? false\r\n }\r\n\r\n /*\r\n * функция по номеру вопроса, ищет ответ на этот guid, и возвращает ответ на этот вопрос.\r\n * если это ss ms, вместо номеров альтернатив подставляет текст.\r\n * работает только для eqOL, eqSS, eqMS\r\n * */\r\n guidToTextAnswer(guid: number, languageId: number): string {\r\n const answer = this.findAnswerByGuid(guid);\r\n const question = this.#findQuestionByGuid(guid);\r\n\r\n //если ответа нет, ревнём пустую строку\r\n if (!question || !answer || answer.AnswerValue === -97) {\r\n return ''\r\n }\r\n const questionType = question.QuestionType;\r\n\r\n switch (questionType) {\r\n\r\n case QuestionsType.eqOL: return answer.AnswerValue;\r\n case QuestionsType.eqSS: {\r\n //находим альтернативу и подставляем заголовок альтернативы с указанным языком, если заголовка нет, вернём alias\r\n const alternative = question.Alternativelist.find(alt => alt.Value === answer.AnswerValue);\r\n const altText = alternative?.MultiLangCaptions.find(obj => obj.lang === languageId);\r\n\r\n return (altText?.CaptionHtml || alternative?.alias) ?? '';\r\n }\r\n case QuestionsType.eqMS: {\r\n //всё то же самое, что и ss, только тут массив ответов,\r\n const answerArray = answer.AnswerValue as Array<number>;\r\n const alternativeArray = question.Alternativelist.filter(alt => answerArray.indexOf(alt.Value) > 0);\r\n const altTextArray = alternativeArray.map(alt => (alt.MultiLangCaptions.find(obj => obj.lang === languageId)?.CaptionHtml || alt.alias) ?? '');\r\n return altTextArray.join(', ');\r\n }\r\n default: return '';\r\n }\r\n }\r\n\r\n #fillOldLogic(logicVars: Array<IInterviewLogicVar>): void{\r\n //пропишем старые логические переменные\r\n if (Array.isArray(logicVars)) {\r\n logicVars.forEach(logicVarObj => {\r\n this._logic.setLogicValue(logicVarObj.nm, logicVarObj.vl);\r\n })\r\n }\r\n }\r\n\r\n #fillOldInterviewData(answerList: Array<IQuestionAnswer>): void{\r\n //пропишем старые ответы\r\n this._interview.overrideAnswers(answerList);\r\n\r\n //нужно вернуть время начала интервью, отдельно оно не сохраняется, поэтому возьмём минимальное время начала из ответов\r\n //фильтруем все вопросы у которых оно указано(>0) и трансформируем в число.\r\n const startedAtArray = answerList.filter(answer => answer.StartedAt > 0).map(answer => answer.StartedAt);\r\n\r\n //берём минимальное\r\n this._interview.startedAt = Math.min(...startedAtArray);\r\n\r\n\r\n //Заполним массив показанных вопросов, чтобы корректно работала кнопка назад и правильно сохранялось см. #finishInterview\r\n answerList.filter(answer => answer.AnswerValue !== MISSING_VALUE).forEach(oldAnswer => {\r\n this.#displayedQuestions.push(oldAnswer.QuestionGUID);\r\n })\r\n }\r\n\r\n #changeCurrentQuestion(newQuestion: IdbQuestion): void {\r\n const currentQuestion = this.#currentQuestion.value;\r\n const currentTime = new Date().getTime();\r\n\r\n if (!!currentQuestion) {\r\n /*\r\n Сохраним время начала интервью. Фиксировать будем не с самого начала, а с ответа на первый вопрос.\r\n Потому что практика такая, открыть анкету на планшете и ходить искать респондентов и из-за этого длительность интервью может быть нерелевантно.\r\n * */\r\n if (this._interview.startedAt === 0 && currentQuestion.QuestionNum >= 0) {\r\n this._interview.startedAt = currentTime;\r\n }\r\n\r\n //нужно сохранить FinishedAt в ответах для старого вопроса\r\n const answer = this._interview.findAnswerByGuid(currentQuestion.QuestionGuid);\r\n if (!!answer) {\r\n answer.FinishedAt = currentTime;\r\n }\r\n this.#eventBus.next({key: SurveyEvents.seQuestionHide, data: currentQuestion});\r\n }\r\n this.#displayedQuestions.push(newQuestion.QuestionGuid);\r\n this.#currentQuestion.next(newQuestion);\r\n\r\n //нужно сохранить StartedAt в ответах для нового вопроса\r\n const answerNew = this._interview.findAnswerByGuid(newQuestion.QuestionGuid);\r\n if (!!answerNew) {\r\n answerNew.StartedAt = currentTime;\r\n }\r\n this.#eventBus.next({key: SurveyEvents.seQuestionShow, data: newQuestion});\r\n\r\n //если новый экран это end тогда завершаем интервью\r\n if (newQuestion.QuestionType === 'END') {\r\n this.#finishInterview();\r\n }\r\n\r\n //если это неявный вопрос и это ss или ms вопрос тогда посчитаем значения у этого вопроса\r\n if (newQuestion.Implicit) {\r\n this.#calculateImplicitQuestion(newQuestion);\r\n }\r\n }\r\n\r\n currentQuestion$(): Observable<IdbQuestion | null> {\r\n return this.#currentQuestion.asObservable();\r\n }\r\n\r\n findAnswerByGuid(guid: number): Answer | undefined {\r\n return this._interview.findAnswerByGuid(guid);\r\n }\r\n\r\n setLogicValue(varName: string, value: any): void {\r\n this._logic.setLogicValue(varName, value);\r\n }\r\n\r\n getLogicVars(): LogicObject {\r\n return this._logic.getLogicVars();\r\n }\r\n\r\n executeLogic(expression?: string): boolean{\r\n return this._logic.executeLogic(expression)\r\n }\r\n\r\n getAnswerList(): Array<Answer> {\r\n return this._interview.getAnswerList();\r\n }\r\n\r\n updateAnswer(eventData: AnswerChange): void {\r\n const answer = this._interview.findAnswerByGuid(eventData.guid);\r\n if (!answer) {\r\n return;\r\n }\r\n\r\n //вопросы которые в своем составе имеет секции, хранят ответы чуть по другому, точнее ответ на каждую секцию это отдельный объект в _interview.answerList\r\n //поэтому ответ для таких типов вопросов это [key: string]: Array<number> | number, где key(guid секции) это ответ на секцию, если key нет, секция не была показана\r\n if (this.#currentQuestion.value?.QuestionType === QuestionsType.eqSL) {\r\n const sectionList = this.#currentQuestion.value?.Sectionlist;\r\n\r\n //пройдёмся по каждой секции и если для неё есть ответ, запишем, в противном случае вместо ответа укажем -97(MISSING_VALUE)\r\n if (!!sectionList) {\r\n sectionList.forEach(section => {\r\n const sectionInterviewAnswer = this._interview.findAnswerByGuid(section.SectionGuid);\r\n if (!sectionInterviewAnswer){\r\n return\r\n }\r\n const sectionQuestionAnswer = eventData.answer ? (eventData.answer as AnswerSlType)[section.SectionGuid.toString()] : undefined;\r\n sectionInterviewAnswer.AnswerValue = sectionQuestionAnswer === undefined ? MISSING_VALUE : sectionQuestionAnswer;\r\n });\r\n }\r\n //ответ самого исходного вопроса\r\n answer.AnswerValue = eventData.answer;\r\n } else {\r\n //ответ на вопрос у которого нет секций\r\n answer.AnswerValue = eventData.answer;\r\n }\r\n\r\n //на вопрос ответили тогда когда есть все ответы и выполняется логика кнопки далее(если её указали)\r\n answer.answerIsComplete = eventData.isComplete && this.#nextButtonExpressionIsTrue();\r\n\r\n //ViewedAlternativeValues и ViewedSectionGuids. Т.к. они readonly сначала удалим, потом добавим\r\n answer.ViewedAlternativeValues.length = 0;\r\n eventData.viewedAlternativeValues.forEach(oa => answer.ViewedAlternativeValues.push(oa));\r\n\r\n answer.ViewedSectionGuids.length = 0;\r\n eventData.viewedSectionGuids.forEach(oa => answer.ViewedSectionGuids.push(oa));\r\n\r\n answer.AlternativeSequenceClicks.length = 0;\r\n eventData.alternativeSequenceClicks.forEach(oa => answer.AlternativeSequenceClicks.push(oa));\r\n \r\n answer.StrokePointList.length = 0;\r\n if (eventData.acStrokePointList) {\r\n eventData.acStrokePointList.forEach(oa => answer.StrokePointList.push(oa));\r\n }\r\n\r\n Object.entries(answer.AnswerAdditional).forEach(([key]) => delete answer.AnswerAdditional[Number(key)]);\r\n Object.entries(eventData.additionalAnswers).forEach(([key, value]) => answer.AnswerAdditional[Number(key)] = value);\r\n\r\n this.updateLogic(eventData.logicVars);\r\n\r\n this.#eventBus.next({key: SurveyEvents.seQuestionAnswersChange, data: {question: this.#currentQuestion.value, answerIsComplete: answer.answerIsComplete}});\r\n\r\n //может возникнуть ситуация, когда нет ни одной альтернативы или секции для отображения.в этом случае вопрос показывать не нужно, как ответ записываем 0 и переходим на следующий\r\n const question = this.#findQuestionByGuid(eventData.guid);\r\n //ситуация когда можно сразу перейти на следующий вопрос для ss/ms вопросов и для неявных вопросов\r\n const canTransitionSSMS = (!!question && answer.answerIsComplete && (question.QuestionType === 'SS' || question.QuestionType === 'MS') && ( (eventData.viewedAlternativeValues.length === 0) || question.Implicit));\r\n\r\n const canTransitionOl = ((!!question && question?.QuestionType === QuestionsType.eqOL && (question.CanSkip ?? true) && answer.AnswerValue === 'skip'));\r\n if (canTransitionSSMS || canTransitionOl) {\r\n this.goToNextQuestion()\r\n }\r\n }\r\n\r\n updateLogic(logicVars: Record<string, any>): void{\r\n Object.entries(logicVars).forEach(([varName, value]) => {\r\n this.setLogicValue(varName, value)\r\n })\r\n }\r\n\r\n //возвращает количество активных языков\r\n get #activeLangCount(): number {\r\n //если анкета по какой-то причине ну указана, вернём 0\r\n return this.#questionary?.BaseParams.LanguageList.filter( langObj => langObj.isActive).length ?? 0;\r\n }\r\n\r\n //возвращает количество вопросов\r\n get #questionsCount(): number {\r\n return this.#questionary?.Questions.length ?? 0;\r\n }\r\n\r\n #finishInterview(): void {\r\n const currentTime = new Date();\r\n let resultDirty;\r\n try {\r\n resultDirty = this._logic.executeLogic(this.#questionary?.BaseParams.ResultativeScript ?? '');\r\n }catch (e) {\r\n resultDirty = false;\r\n }\r\n\r\n\r\n //если вопрос не был показан, удалим его ответы\r\n //такое может быть если не нажимали кнопку назад\r\n const answerList = this._interview.getAnswerList();\r\n this.#questionary?.Questions.forEach(question => {\r\n if (!this.#displayedQuestions.includes(question.QuestionGuid)) {\r\n answerList.find(answer => answer.QuestionGUID === question.QuestionGuid)?.clear();\r\n question.Sectionlist.forEach(section => {\r\n answerList.find(answer => answer.QuestionGUID === section.SectionGuid)?.clear();\r\n })\r\n }\r\n if (question.QuestionType === QuestionsType.eqSL) {\r\n const answer = answerList.find(answer => answer.QuestionGUID === question.QuestionGuid);\r\n if (answer && answer.AnswerValue !== MISSING_VALUE) {\r\n answer.AnswerValue = 1;\r\n }\r\n }\r\n })\r\n const interview: IInterviewData = {\r\n Language: 0, //todo lang\r\n SpotId: 0,\r\n DeviceId: 0,\r\n DeviceType: 0,\r\n Resultative: ResultativeStatus.rsUnset,\r\n Valid: ValidStatus.vsUnset,\r\n Wave: this.#questionary?.Info.current_wave ?? 0,\r\n QuestionaryName: this.#questionary?.Info.name ?? '',\r\n QuestionaryGuid: this.#questionary?.Info.questionary_guid ?? 0,\r\n StartedAt: this._interview.startedAt,\r\n FinishedAt: currentTime.getTime(),\r\n TineZoneBias: currentTime.getTimezoneOffset(),\r\n ResultatDirty: resultDirty,\r\n Answers: {\r\n AnsversList: Array.from(this._interview.getAnswerList())\r\n },\r\n additional_info: {\r\n QuestionaryUpdateTimestamp: new Date(this.#questionary?.Info.last_update_timestamp ?? 0).getTime(),\r\n quotaIsCompleted: this.#surveyQuotas.quotaIsCompleted\r\n },\r\n ResultQuotaGuids: [],\r\n ResultQuota2dGuids: [],\r\n LogicVars: [],\r\n };\r\n\r\n const logicVars = this._logic.getLogicVars();\r\n Object.entries(logicVars).forEach(([key, value]) => interview.LogicVars.push({nm: key, vl: value}));\r\n\r\n this.#eventBus.next({key: SurveyEvents.seSurveyEnd, data: interview});\r\n }\r\n\r\n #nextQuestionNum(): number {\r\n const currentQuestion = this.#currentQuestion.value;\r\n // проверим квоты\r\n const currentGuid = currentQuestion?.QuestionGuid ?? 0;\r\n if (this.#surveyQuotas.quotaIsCompleted && !this.#surveyQuotas.guidIsDestinationQuestion(currentGuid)) {\r\n // у нас есть заполненная квота, найдем вопрос который нужно показать при заполнении квоты\r\n const destinationQ = this.#findQuestionByGuid(this.#surveyQuotas.destinationQuestionGuid);\r\n //если вопрос есть(его могли удалить из анкеты), показывает его\r\n if (!!destinationQ) {\r\n return destinationQ.QuestionNum;\r\n }\r\n }\r\n\r\n // если нет заполненной квоты, переходим на следующий вопрос, ищем следующий вопрос который мы можем отобразить (до логика может запретить показ вопроса)\r\n let nextQuestionNum = (currentQuestion?.QuestionNum ?? 0) + 1;\r\n\r\n // но сначала проверим после логику\r\n if (!!currentQuestion) {\r\n const destQ = currentQuestion.logiclist.find(logObj => (logObj.DestinationQuestionGuid > 0) && this._logic.executeLogic(logObj.LogicText) );\r\n if (!!destQ) {\r\n const destQNum = this.#findQuestionByGuid(destQ.DestinationQuestionGuid)?.QuestionNum;\r\n if (Number.isSafeInteger(destQNum)) { // вопрос мог быть удалён, а логику оставить\r\n nextQuestionNum = destQNum!;\r\n }\r\n }\r\n }\r\n\r\n // общее количество вопросов, цикл будет считать до этого количества\r\n const questionCount = this.#questionsCount;\r\n do {\r\n //потенциально следующий вопрос\r\n const q = this.#questionary!.Questions[nextQuestionNum];\r\n\r\n //если это последний вопрос или если выполняется BeforeExpression и этот вопрос не DestinationQuota, можем его показать\r\n if (q.QuestionType === QuestionsType.eqEND || (this._logic.executeLogic(q.BeforeExpression) && !this.#surveyQuotas.guidIsDestinationQuestion(q.QuestionGuid)) ) {\r\n return nextQuestionNum;\r\n }\r\n //вопрос нельзя показывать, увеличиваем счётчик текущего вопроса на 1\r\n nextQuestionNum++;\r\n } while (nextQuestionNum < questionCount - 1); // end вопрос должен всегда быть показан\r\n return nextQuestionNum;\r\n }\r\n\r\n #initiateQuestions(questionList: Array<IdbQuestion>): void{\r\n questionList.forEach(question => {\r\n //создаём пустой ответ для вопроса.\r\n const answer = this._interview.createAnswer(question.QuestionGuid, question.Version);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answer) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n const logicVarSet = new Set<string>();\r\n this.#questionLogicVarContainer[question.QuestionGuid.toString()] = logicVarSet;\r\n\r\n logicVarSet.add(question.SysName);//привязываем переменную к вопросу\r\n this._logic.setLogicValue(question.SysName, MISSING_VALUE); // переменная самого вопроса\r\n\r\n //добавим доп ответы и логику для них\r\n question.AdditionalAnswerlist.forEach(aa => {\r\n const aaSysName = `${question.SysName}${aa.SysName}`;\r\n answer.AnswerAdditional[aa.Value] = null;\r\n this._logic.setLogicValue(aaSysName, MISSING_VALUE); // логика для переменных доп ответа\r\n logicVarSet.add(aaSysName); //привязываем переменную к вопросу\r\n });\r\n\r\n // если в тексте postScript есть запись типа setVar('varName', value); нужно инициализировать переменную varName значением -97.\r\n if (!!question.PostScript) {\r\n (question.PostScript.match(/(\\bsetvar\\b)\\(['|\"](.*?)['|\"]/gim) ?? []).map(scriptVar => scriptVar.match(/['|\"](.+)['|\"]/i)![1]).forEach(varName => {\r\n logicVarSet.add(varName);//привязываем переменную к вопросу\r\n this._logic.setLogicValue(varName, null)\r\n });\r\n }\r\n\r\n // для Вопросов SS/MS нужно прописать логику альтернатив sysname вопроса + sysname альтернативы\r\n if (question.Sectionlist.length <= 0) {// для Вопросов SS/MS\r\n question.Alternativelist.forEach(alt => {\r\n const aSysName = `${question.SysName}${alt.SysName}`\r\n this._logic.setLogicValue(aSysName, MISSING_VALUE);\r\n logicVarSet.add(aSysName); //привязываем переменную к вопросу\r\n });\r\n } else {\r\n //для вопросов у которых есть секции проинициализируем каждую секцию\r\n question.Sectionlist.forEach(section => {\r\n\r\n //создаём пустой ответ для секции.\r\n const answerForSection = this._interview.createAnswer(section.SectionGuid, 1);\r\n\r\n //такого быть не должно, это ошибка\r\n if (!answerForSection) {\r\n throw new Error('answer not found');\r\n }\r\n\r\n // для Вопросов SL нужно прописать логику альтернатив и секций sysname секции + sysname альтернативы\r\n this._logic.setLogicValue(section.SysName, MISSING_VALUE); // переменная самой секции\r\n logicVarSet.add(section.SysName); //привязываем переменную к вопросу\r\n\r\n //логика альтернатив SL вопроса\r\n question.Alternativelist.forEach(alt => {\r\n const aSysName = `${section.SysName}${alt.SysName}`;\r\n this._logic.setLogicValue(aSysName, MISSING_VALUE);\r\n logicVarSet.add(aSysName); //привязываем переменную к вопросу\r\n });\r\n })\r\n }\r\n })\r\n }\r\n\r\n //ищет вопрос на guid\r\n #findQuestionByGuid(guid: number): IdbQuestion | undefined {\r\n if (!this.#questionary) {\r\n return undefined;\r\n }\r\n return this.#questionary.Questions.find(q => q.QuestionGuid === guid);\r\n }\r\n\r\n #nextButtonExpressionIsTrue(): boolean{\r\n const buttonNextExpression = this.#currentQuestion.value?.BtnNextExpression ?? '';\r\n //если скрипта для кнопки далее нет, вернём true\r\n if (buttonNextExpression.trim() === '') {\r\n return true;\r\n }\r\n try {\r\n return this._logic.executeLogic(buttonNextExpression);\r\n } catch (e) {\r\n console.error(e);\r\n return false;\r\n }\r\n }\r\n\r\n #calculateImplicitQuestion(question: IdbQuestion): void {\r\n if (question.Implicit && (question.QuestionType === QuestionsType.eqSS || question.QuestionType === QuestionsType.eqMS) ) {\r\n let questionAnswer: number | Array<number>;\r\n\r\n if (question.QuestionType === QuestionsType.eqSS) {\r\n const alt = question.Alternativelist.find(alt => this._logic.executeLogic(alt.EnableExpression));\r\n questionAnswer = !!alt ? alt.Value : 0;\r\n }\r\n\r\n if (question.QuestionType === QuestionsType.eqMS) {\r\n questionAnswer = question.Alternativelist\r\n .filter(alt => this._logic.executeLogic(alt.EnableExpression))\r\n .map(alt => alt.Value);\r\n }\r\n\r\n const answerChange: AnswerChange = {\r\n guid: question.QuestionGuid,\r\n isComplete: true,\r\n answer: questionAnswer!,\r\n additionalAnswers: {},\r\n logicVars: {},\r\n viewedAlternativeValues: Array.isArray(questionAnswer!) ? questionAnswer : [questionAnswer!],\r\n viewedSectionGuids: [],\r\n alternativeSequenceClicks: []\r\n }\r\n this.updateAnswer(answerChange);\r\n }\r\n }\r\n\r\n #clearAnswerForCurrentQuestion(): void {\r\n const currentQuestionGuid = this.#currentQuestion.value?.QuestionGuid ?? -1;\r\n\r\n //удаляем сам ответ на вопрос\r\n //25.02.2023 не будем удалять ответ, будем удалять только логические переменные, а ответы на не показанные вопросы удалим при финализации интервью\r\n // this._interview.findAnswerByGuid(currentQuestionGuid)?.clear();\r\n\r\n //удаляем переменные которые относятся к этому вопросу\r\n const logicSet = this.#questionLogicVarContainer[currentQuestionGuid];\r\n if (!!logicSet) {\r\n logicSet.forEach(sysName =>this._logic.setLogicValue(sysName, MISSING_VALUE));\r\n }\r\n }\r\n}\r\n","import {Directive, HostBinding, input} from '@angular/core';\r\nimport {TpSurveyTheme} from '../../tp.survey.type';\r\n\r\n@Directive({\r\n selector: '[tpSurveyTheme]',\r\n})\r\nexport class SurveyThemeDirective {\r\n theme = input<TpSurveyTheme>('touchpoll-light',{alias: 'tpSurveyTheme'});\r\n @HostBinding(\"class.survey-theme-touchpoll-light\") public get classTouchpollLight() {\r\n return this.theme() === 'touchpoll-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-cyan-orange-light\") public get classCyanOrangeLight() {\r\n return this.theme() === 'cyan-orange-light';\r\n }\r\n @HostBinding(\"class.survey-theme-cyan-orange-dark\") public get classCyanOrangeDark() {\r\n return this.theme() === 'cyan-orange-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-light\") public get classRoseRedLight() {\r\n return this.theme() === 'rose-red-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-rose-red-dark\") public get classRoseRedDark() {\r\n return this.theme() === 'rose-red-dark';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-light\") public get classAzureBlueLight() {\r\n return this.theme() === 'azure-blue-light';\r\n }\r\n\r\n @HostBinding(\"class.survey-theme-azure-blue-dark\") public get classAzureBlueDark() {\r\n return this.theme() === 'azure-blue-dark';\r\n }\r\n}\r\n\r\n","import {Directive, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbTpBackGround} from '../../tp.survey.interface';\r\n\r\n@Directive({\r\n selector: '[tpImagePosition]'\r\n})\r\nexport class ImagePositionDirective {\r\n imageBackground = input.required<IdbTpBackGround>({alias: 'tpImagePosition'});\r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement;\r\n const renderer = inject(Renderer2);\r\n\r\n effect(() => {\r\n switch (this.imageBackground().PositionHorizontal) {\r\n case \"left\": renderer.setStyle(nativeElement, 'grid-column', '1 / 1'); renderer.setStyle(nativeElement, 'justify-self', 'flex-start'); break;\r\n case \"center\": renderer.setStyle(nativeElement, 'grid-column', '2 / 2'); renderer.setStyle(nativeElement, 'justify-self', 'anchor-center'); break;\r\n case \"right\": renderer.setStyle(nativeElement, 'grid-column', '3 / 3'); renderer.setStyle(nativeElement, 'justify-self', 'flex-end'); break;\r\n default: renderer.setStyle(nativeElement, 'grid-column-start', 1); break;\r\n }\r\n\r\n switch (this.imageBackground().PositionVertical) {\r\n case \"top\": renderer.setStyle(nativeElement, 'grid-row', '1 / 1');break;\r\n case \"center\": renderer.setStyle(nativeElement, 'grid-row-start', 2); renderer.setStyle(nativeElement, 'align-self', 'center'); break;\r\n case \"bottom\": renderer.setStyle(nativeElement, 'grid-row', '3 / 3'); renderer.setStyle(nativeElement, 'align-self', 'flex-end'); break;\r\n default: renderer.setStyle(nativeElement, 'grid-row-start', 1); break;\r\n }\r\n });\r\n }\r\n}\r\n","import {Directive, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbTpBackGround} from '../../tp.survey.interface';\r\nimport {BreakpointObserver} from '@angular/cdk/layout';\r\n\r\n@Directive({\r\n selector: '[tpImageSize]'\r\n})\r\nexport class ImageSizeDirective {\r\n imageBackground = input.required<IdbTpBackGround>({alias: 'tpImageSize'});\r\n \r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement;\r\n const renderer = inject(Renderer2);\r\n const breakpointObserver = inject(BreakpointObserver);\r\n const isMobile= breakpointObserver.isMatched(\"(max-width: 480px)\");\r\n effect(() => {\r\n const height = isMobile ? this.imageBackground().MobileHeight : this.imageBackground().DesktopHeight;\r\n const width = isMobile ? this.imageBackground().MobileWidth : this.imageBackground().DesktopWidth;\r\n\r\n const normalizeHeight = this.#normalizeValue(height);\r\n const normalizeWidth = this.#normalizeValue(width);\r\n\r\n renderer.setStyle(nativeElement, 'height', normalizeHeight);\r\n renderer.setStyle(nativeElement, 'width', normalizeWidth);\r\n });\r\n }\r\n \r\n #normalizeValue(value?: number | string | 'auto' | null): string{\r\n if (!value || value === 'auto') {\r\n return 'auto';\r\n }\r\n \r\n //по умолчанию, если ввели только число, то это будет px\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n \r\n if (typeof value === 'string') {\r\n const stringValue = value.toLowerCase().trim();\r\n if (stringValue.endsWith('%') || stringValue.endsWith('px') || stringValue.endsWith('vh') || stringValue.endsWith('vw')) {\r\n return value;\r\n }else {\r\n return `${value}px`;\r\n }\r\n } else {\r\n return value;\r\n }\r\n }\r\n\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {VIDEO_EXTENSION_LIST} from '../../tp.survey.const';\r\n\r\n\r\n@Pipe({\r\n name: 'isVideo'\r\n})\r\nexport class IsVideoPipe implements PipeTransform {\r\n\r\n transform(fileName: string): boolean {\r\n if (typeof fileName !== 'string') {\r\n return false;\r\n } else {\r\n const ext = (fileName.split('.').pop())?.toLowerCase() ?? '';\r\n return VIDEO_EXTENSION_LIST.includes(`.${ext}`)\r\n }\r\n\r\n }\r\n\r\n}\r\n","import {Directive, DOCUMENT, effect, ElementRef, inject, input, Renderer2} from '@angular/core';\r\nimport {IdbQuestion} from '../../tp.survey.interface';\r\n\r\n@Directive({\r\n selector: '[tpSurveyInsertQuestionCss]',\r\n})\r\nexport class InsertQuestionCssDirective {\r\n question = input.required<IdbQuestion | null>({alias: 'tpSurveyInsertQuestionCss'});\r\n constructor() {\r\n const nativeElement = inject(ElementRef).nativeElement as HTMLInputElement;\r\n const renderer = inject(Renderer2);\r\n const document = inject(DOCUMENT);\r\n\r\n //у каждого вопроса будет свой css класс, чтобы можно было переопределить стили в свойстве вопроса Css\r\n effect(() => {\r\n //если вопрос не указан, то удаляем все классы, которые начинаются с question-\r\n if (this.question()) {\r\n renderer.addClass(nativeElement, `question-${this.question()?.QuestionNum}`)\r\n } else {\r\n nativeElement.classList.forEach(className => {\r\n if (className.startsWith('question-')) {\r\n renderer.removeClass(nativeElement, className)\r\n }\r\n });\r\n }\r\n });\r\n\r\n //Если у вопроса указан Css, то добавляем его в head страницы. С селектором div.question-N. Где N - номер вопроса\r\n effect(() => {\r\n if (this.question()?.Css) {\r\n document.head.insertAdjacentHTML('beforeend',\r\n `<style>\r\n div.question-${this.question()?.QuestionNum} {\r\n ${this.question()?.Css}\r\n }\r\n </style>\r\n `);\r\n }\r\n });\r\n }\r\n}\r\n","import {ChangeDetectionStrategy, Component, computed, DestroyRef, inject, input, OnInit, output, Signal, signal, TemplateRef} from '@angular/core';\r\nimport {concatMap, delay, delayWhen, distinctUntilChanged, filter, from, merge, mergeMap, of, tap, timer} from 'rxjs';\r\nimport {NgTemplateOutlet} from '@angular/common';\r\nimport {map} from 'rxjs/operators';\r\nimport {takeUntilDestroyed, toObservable, toSignal} from '@angular/core/rxjs-interop';\r\nimport {AnswerChange, ICurrentQuestionAnswer, IdbImage, IdbQuestion, IdbQuestionary, IInterviewAutoSaveData, IInterviewData, IInterviewProgressEvent} from '../../tp.survey.interface';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {NavigationButtonComponent} from '../navigation.button/navigation.button.component';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {GetActiveLanguagePipe} from '../../pipe/get.active.language/get.active.language.pipe';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TpSurveyCoreService} from '../../core/tp.survey.core/tp.survey.core.service';\r\nimport {NavigationButtonDirection, TpSurveyTheme} from '../../tp.survey.type';\r\nimport {QuestionsType, SurveyEvents, ViewModel} from '../../tp.survey.enum';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\nimport {ImagePositionDirective} from '../../directive/image.position/image.position.directive';\r\nimport {ImageSizeDirective} from '../../directive/image.site/image.size.directive';\r\nimport {IsVideoPipe} from '../../pipe/is.video/is.video.pipe';\r\nimport {InsertQuestionCssDirective} from '../../directive/insert.question.css/insert.question.css.directive';\r\n\r\ninterface ICurrentQuestionViewData {\r\n question: IdbQuestion | null;\r\n answers?: ICurrentQuestionAnswer;\r\n}\r\n\r\n@Component({\r\n selector: 'tp-survey-play',\r\n templateUrl: './survey.play.component.html',\r\n styleUrls: ['./survey.play.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n QuestionCaptionComponent,\r\n NavigationButtonComponent,\r\n ContainerAnswerComponent,\r\n GetActiveLanguagePipe,\r\n UpdateFontSizeDirective,\r\n NgTemplateOutlet,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ImagePositionDirective,\r\n ImageSizeDirective,\r\n IsVideoPipe,\r\n InsertQuestionCssDirective\r\n ]\r\n})\r\nexport class SurveyPlayComponent implements OnInit{\r\n questionary = input.required<IdbQuestionary>();\r\n viewModel = input.required<ViewModel>();\r\n interviewAutoSaveData = input<IInterviewAutoSaveData>();\r\n theme = input<TpSurveyTheme>('cyan-orange-light');\r\n language = input<number>(2);\r\n templateNavigationRef = input<TemplateRef<any> | null>();\r\n interviewStarted = output<void>();\r\n interviewFinished = output<IInterviewData>();\r\n interviewProgress = output<IInterviewProgressEvent>();\r\n\r\n readonly currentQuestionViewData: Signal<ICurrentQuestionViewData>;\r\n readonly question: Signal<IdbQuestion | null>;\r\n readonly activeLanguage = signal<number>(this.language())\r\n readonly visibleImageList: Signal<Array<IdbImage>>;\r\n readonly viewModelE = ViewModel;\r\n readonly backButtonAvailable;\r\n readonly nextButtonAvailable;\r\n readonly #core = inject(TpSurveyCoreService);\r\n readonly #destroyRef = inject(DestroyRef);\r\n constructor() {\r\n //Проблема в том, что если идёт подряд 2 вопроса с одинаковым типом, то не удаляется. Нужно пробросить null с небольшой задержкой, чтобы движок angular`а удалял старые компоненты\r\n this.currentQuestionViewData = toSignal(this.#core.currentQuestion$().pipe(\r\n filter(res => !res?.Implicit), //если это неявный вопрос, тогда его показывать не нужно\r\n mergeMap(currentQuestion => from([null, currentQuestion]).pipe(\r\n concatMap(val => of(val).pipe(\r\n delay(val === null ? 0 : 500),\r\n )),\r\n )),\r\n //будем реагировать только когда null => вопрос и наоборот вопрос => null.\r\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\r\n map(currentQuestion => ({\r\n question: currentQuestion,\r\n answers: !currentQuestion ? undefined : {\r\n question: this.#core.findAnswerByGuid(currentQuestion.QuestionGuid),\r\n sections: currentQuestion.Sectionlist.map(section => this.#core.findAnswerByGuid(section.SectionGuid)),\r\n }\r\n })),\r\n ), { initialValue: { question: null, answers: undefined } });\r\n\r\n this.question = computed(() => this.currentQuestionViewData().question)\r\n\r\n /*\r\n * кнопка далее нужно проверять при показе вопроса и при изменении ответа. При показе она может быть доступна сразу(например info).\r\n * Кнопка доступна если ответ корректно заполнен(questionIsComplete) и это не eqEND вопрос\r\n * */\r\n this.nextButtonAvailable = toSignal(merge(\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange).pipe(map(data => data.question)),\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(map(data => data))\r\n ).pipe(\r\n map(question => {\r\n //вопрос должен быть не eqEND и не eqLANG(для них кнопки далее быть не должно) + вопрос должен быть заполнен или его можно пропустить(указано в настройках)\r\n const isAvailable: boolean | undefined = !([QuestionsType.eqEND, QuestionsType.eqLANG].includes(question.QuestionType)) && (this.#core.questionIsComplete(question.QuestionGuid) || question.CanSkip)\r\n\r\n //в настройках вопроса можно указать задержку перед активацией кнопки Далее\r\n let delayInSettings = isNaN(Number(question.BtnNextDelaySec)) ? 1 : Number(question.BtnNextDelaySec) * 1000;\r\n\r\n //но если isAvailable не равно true(может быть undefined или false) то кнопка \"не активируется\" сразу\r\n if (!(isAvailable === true)) {\r\n delayInSettings = 1;\r\n }\r\n\r\n //уберём отрицательные и нулевые значения, если они случайно попали в настройки\r\n delayInSettings = Math.max(1, delayInSettings);\r\n\r\n return {\r\n isAvailable,\r\n delay: delayInSettings\r\n }\r\n }),\r\n delayWhen(params => timer(params.delay)),\r\n map(res => res.isAvailable)\r\n ), { initialValue: false });\r\n\r\n //кнопку Назад можно показывать если в настройках указали ShowBtnBack и это не eqEND вопрос\r\n this.backButtonAvailable = toSignal(this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n filter(question => !!question),\r\n map((question: IdbQuestion) => question.QuestionNum > 1 && question.ShowBtnBack && question.QuestionType !== QuestionsType.eqEND && question.QuestionType !== QuestionsType.eqLANG),\r\n delay(1),\r\n ));\r\n\r\n this.#core.on(SurveyEvents.seSurveyEnd).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: interview => {\r\n interview.Language = this.activeLanguage()\r\n this.interviewFinished.emit(interview)\r\n }\r\n });\r\n\r\n this.#core.on(SurveyEvents.seSurveyStart).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: _ => this.interviewStarted.emit()\r\n });\r\n\r\n this.#core.on(SurveyEvents.seQuestionShow).pipe(\r\n takeUntilDestroyed(this.#destroyRef)\r\n ).subscribe({\r\n next: q => this.interviewProgress.emit({\r\n currentNum: q.QuestionNum,\r\n questionsCount: this.questionary().Questions.length,\r\n questionGuid: q.QuestionGuid,\r\n interviewData: {\r\n logicVars: this.#core.getLogicVars(),\r\n answerList: this.#core.getAnswerList(),\r\n }\r\n })\r\n });\r\n\r\n //подготовим список картинок для отображения\r\n this.visibleImageList = toSignal(\r\n merge(\r\n toObservable(this.question),\r\n this.#core.on(SurveyEvents.seQuestionAnswersChange)\r\n ).pipe(\r\n filter(() => !!this.question()),\r\n map( () => (this.question()!.ImageList ?? []).filter(image => this.#core.executeLogic(image.EnableExpression))))\r\n , { initialValue: [] });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.#core.setupSurvey(this.questionary(), this.interviewAutoSaveData()?.logic_vars, this.interviewAutoSaveData()?.answer_list, this.interviewAutoSaveData()?.question_guid, );\r\n }\r\n\r\n onNavigationButtonClick(direction: NavigationButtonDirection) {\r\n if (direction === 'next') {\r\n this.#core.goToNextQuestion()\r\n } else {\r\n this.#core.goToBackQuestion()\r\n }\r\n }\r\n\r\n onAnswerChanged(eventData: AnswerChange) {\r\n this.#core.updateAnswer(eventData);\r\n }\r\n\r\n onLogicChanged(logicVars: Record<string, any>) {\r\n this.#core.updateLogic(logicVars);\r\n }\r\n\r\n onLanguageChange(language: number) {\r\n this.activeLanguage.set(language);\r\n this.#core.goToNextQuestion();\r\n }\r\n\r\n findVariable(sysName: string): string{\r\n //Сюда могут заехать как переменные логические, типа Q_00000000000391A9, так и Q_00000000000391A9_A_001, так и \"переменные для ответов\" типа V_00000000000391A9\r\n //Переменные для ответов ищут ответ на данный вопрос, а потом подставляют туда значения (это всё пока только для SS, MS, OL вопросов)\r\n // мы можем брать значения только из заголовка вопроса, альтернативы или секции т.е. На вход могут прийти только Q1 или q1A1 или q1r1 в системном формате\r\n try {\r\n if (sysName.search(/^v_/gmi) >= 0) { // переменные для ответов типа V1\r\n const guid = Number(`0x${sysName.replace(/^v_/gmi, '')}`);\r\n return this.#core.guidToTextAnswer(guid, this.language());\r\n }\r\n //todo q_var\r\n return '';\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [style.background-color]=\"question()?.BackgroundColor\"\r\n [tpSurveyInsertQuestionCss]=\"question()\"\r\n\r\n [class.tp-view-desktop]=\"viewModel() === viewModelE.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === viewModelE.vmTablet\">\r\n\r\n @if (currentQuestionViewData(); as currentQuestionViewData) {\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:activeLanguage():question.LogicCaptionsList: findVariable.bind(this)\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:activeLanguage()\"/>\r\n\r\n @if (visibleImageList().length > 0) {\r\n <div\r\n class=\"container-image\"\r\n [class.container-image-tablet]=\"viewModel() === viewModelE.vmTablet\"\r\n [class.container-image-desktop]=\"viewModel() === viewModelE.vmDesktop\">\r\n @for (image of visibleImageList(); track $index) {\r\n @if (image.Image.Image | isVideo) {\r\n <video\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [controls]=\"false\"\r\n [autoplay]=\"true\"\r\n [loop]=\"true\"\r\n [muted]=\"true\"\r\n playsinline\r\n class=\"question-video\">\r\n <source [src]=\"questionary().Info.repository_path+'/' + image.Image.Image\" type=\"video/mp4\">\r\n </video>\r\n } @else {\r\n <img\r\n alt=\"answer logo\"\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [src]=\"questionary().Info.repository_path+'/' + image.Image.Image\"\r\n importance=\"low\" loading=\"lazy\"\r\n class=\"question-image\">\r\n }\r\n }\r\n </div>\r\n }\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"activeLanguage()\"\r\n [viewModel]=\"viewModel()\"\r\n [findVariable]=\"findVariable.bind(this)\"\r\n [answers]=\"currentQuestionViewData.answers\"\r\n [languageList]=\"questionary().BaseParams.LanguageList\"\r\n [repositoryPath]=\"questionary().Info.repository_path\"\r\n (logicChanged)=\"onLogicChanged($event)\"\r\n (onLanguageChange)=\"onLanguageChange($event)\"\r\n (answerChanged)=\"onAnswerChanged($event)\"/>\r\n }\r\n }\r\n\r\n <div class=\"container-navigation\">\r\n <div class=\"container-navigation-back\">\r\n @if (backButtonAvailable()) {\r\n <tp-survey-navigation-button\r\n direction=\"back\"\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.back_button_caption\"\r\n (click)=\"onNavigationButtonClick('back')\"/>\r\n }\r\n </div>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"templateNavigationRef() ?? null\">\r\n </ng-container>\r\n\r\n <div class=\"container-navigation-next\">\r\n @if (nextButtonAvailable()){\r\n <tp-survey-navigation-button\r\n [caption]=\"(questionary().BaseParams.LanguageList | getActiveLanguage: activeLanguage())?.next_button_caption\"\r\n direction=\"next\"\r\n (onClick)=\"onNavigationButtonClick('next')\"/>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\nimport {Answer} from '../../core/tp.survey.answer/tp.survey.answer';\r\n\r\n@Pipe({\r\n name: 'generateDefaultAnswer'\r\n})\r\nexport class GenerateDefaultAnswerPipe implements PipeTransform {\r\n\r\n transform(guid: number): Answer {\r\n return new Answer(guid);\r\n }\r\n\r\n}\r\n","import {ChangeDetectionStrategy, Component, input, output, TemplateRef} from '@angular/core';\r\nimport {ContainerAnswerComponent} from '../answer/container.answer/container.answer.component';\r\nimport {QuestionCaptionComponent} from '../question.caption/question.caption.component';\r\nimport {UpdateFontSizeDirective} from '../../directive/update.font.size/update.font.size.directive';\r\nimport {TMode, TpSurveyTheme} from '../../tp.survey.type';\r\nimport {ViewModel} from '../../tp.survey.enum';\r\nimport {IdbBaseParamsLanguage, IdbQuestion, IPoint, IRegionSelectedEvent} from '../../tp.survey.interface';\r\nimport {TpSurveyLogicService} from '../../core/tp.survey.logic/tp.survey.logic.service';\r\nimport {MultiLangObjectToHtmlPipe} from '../../pipe/multi.lang.object.to.html/multi.lang.object.to.html.pipe';\r\nimport {SurveyThemeDirective} from '../../directive/survey.theme/survey.theme.directive';\r\nimport {ImagePositionDirective} from '../../directive/image.position/image.position.directive';\r\nimport {ImageSizeDirective} from '../../directive/image.site/image.size.directive';\r\nimport {GenerateDefaultAnswerPipe} from '../../pipe/generate.default.answer/generate.default.answer.pipe';\r\n\r\n@Component({\r\n selector: 'tp-survey-question-preview',\r\n imports: [\r\n ContainerAnswerComponent,\r\n QuestionCaptionComponent,\r\n UpdateFontSizeDirective,\r\n MultiLangObjectToHtmlPipe,\r\n SurveyThemeDirective,\r\n ImagePositionDirective,\r\n ImageSizeDirective,\r\n GenerateDefaultAnswerPipe\r\n ],\r\n templateUrl: './survey.question.preview.component.html',\r\n styleUrl: './survey.question.preview.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n TpSurveyLogicService,\r\n ]\r\n})\r\nexport class SurveyQuestionPreviewComponent {\r\n readonly question = input.required<IdbQuestion | null>();\r\n readonly language = input.required<number>();\r\n readonly viewModel = input.required<ViewModel>();\r\n readonly languageList = input.required<Array<IdbBaseParamsLanguage>>();\r\n readonly theme = input<TpSurveyTheme>('cyan-orange-light');\r\n readonly repositoryPath = input<string>('');\r\n readonly templateNavigationRef = input<TemplateRef<any> | null>();\r\n readonly mode = input<TMode>('editing');\r\n\r\n readonly regionCreated = output<Array<IPoint>>();\r\n readonly regionSelected = output<IRegionSelectedEvent>();\r\n \r\n readonly viewModelE = ViewModel;\r\n\r\n findVariable(sysName: string): string{\r\n //Сюда могут заехать как переменные логические, типа Q_00000000000391A9, так и Q_00000000000391A9_A_001, так и \"переменные для ответов\" типа V_00000000000391A9\r\n //Переменные для ответов ищут ответ на данный вопрос, а потом подставляют туда значения (это всё пока только для SS, MS, OL вопросов)\r\n // мы можем брать значения только из заголовка вопроса, альтернативы или секции т.е. на вход могут прийти только Q1 или q1A1 или q1r1 в системном формате\r\n try {\r\n if (sysName.search(/^v_/gmi) >= 0) { // переменные для ответов типа V1\r\n return '{value}'\r\n }\r\n //todo q_var\r\n return '';\r\n } catch (e) {\r\n return '';\r\n }\r\n }\r\n \r\n\r\n}\r\n","<div\r\n class=\"survey-container-main survey-typography\"\r\n [tpSurveyUpdateFontSize]=\"viewModel()\"\r\n [tpSurveyTheme]=\"theme()\"\r\n [class.tp-view-desktop]=\"viewModel() === viewModelE.vmDesktop\"\r\n [class.tp-view-tablet]=\"viewModel() === viewModelE.vmTablet\">\r\n\r\n @if (question(); as question) {\r\n <tp-survey-question-caption\r\n [caption]=\"question.MultiLangCaptions | multiLangObjectToHtml:language()\"\r\n [captionHelp]=\"question.MultiLangCaptionsHelper | multiLangObjectToHtml:language()\"/>\r\n\r\n @if (question.ImageList?.length > 0) {\r\n <div\r\n class=\"container-image\"\r\n [class.container-image-tablet]=\"viewModel() === viewModelE.vmTablet\"\r\n [class.container-image-desktop]=\"viewModel() === viewModelE.vmDesktop\">\r\n @for (image of question.ImageList; track $index) {\r\n <img\r\n alt=\"answer logo\"\r\n [tpImagePosition]=\"image.Image\"\r\n [tpImageSize]=\"image.Image\"\r\n [src]=\"repositoryPath() + '/' + image.Image.Image\"\r\n importance=\"low\" loading=\"lazy\"\r\n class=\"question-image\">\r\n }\r\n </div>\r\n }\r\n\r\n <tp-survey-container-answer\r\n [question]=\"question\"\r\n [language]=\"language()\"\r\n [answers]=\"{question:question.QuestionGuid | generateDefaultAnswer, sections: []}\"\r\n [findVariable]=\"findVariable.bind(this)\"\r\n [repositoryPath]=\"repositoryPath()\"\r\n [developerMode]=\"true\"\r\n [viewModel]=\"viewModel()\"\r\n [mode]=\"mode()\"\r\n [languageList]=\"languageList()\"\r\n (regionCreated)=\"regionCreated.emit($event)\"\r\n (regionSelected)=\"regionSelected.emit($event)\"/>\r\n }\r\n</div>\r\n","/*\r\n * Public API Surface of tp.survey\r\n */\r\n\r\n// export * from './lib/tp.survey.service';\r\n\r\nexport * from './lib/tp.survey.module';\r\nexport * from './lib/component/survey.play/survey.play.component';\r\nexport * from './lib/component/survey.question.preview/survey.question.preview.component';\r\nexport * from './lib/tp.survey.config';\r\nexport * from './lib/tp.survey.const';\r\nexport * from './lib/tp.survey.type';\r\nexport * from './lib/tp.survey.interface';\r\nexport * from './lib/tp.survey.enum';\r\nexport * from './lib/tp.survey.method';\r\nexport * from './lib/core/tp.survey.answer/tp.survey.answer';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TpSurveyLogicService","i2.TpSurveyInterviewService"],"mappings":"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"}
|