@acorex/modules 21.0.0-next.31 → 21.0.0-next.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs → acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs} +10 -11
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-agent.entity-C2APPc7g.mjs.map → acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-D_54-MqC.mjs.map → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs} +6 -4
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +1 -0
- package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-assist.entity-D7sIFWTx.mjs.map → acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs → acorex-modules-ai-management-index-KX3TVRXr.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-index-DoOTRMvM.mjs.map → acorex-modules-ai-management-index-KX3TVRXr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs → acorex-modules-ai-management-model.entity-BeuDUahR.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-model.entity-xhfG1tFZ.mjs.map → acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs} +2 -2
- package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-Bot8Ctq1.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map} +1 -1
- package/fesm2022/acorex-modules-ai-management.mjs +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs} +25 -25
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs.map → acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-BwwarDP0.mjs.map → acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-CQNn4Ryb.mjs.map → acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-AptlLpWh.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-index-BBzx9W5u.mjs → acorex-modules-assessment-management-index-B2SncZAW.mjs} +6 -6
- package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-BMoPn_op.mjs.map → acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BI7JJIbZ.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BfWuSVG9.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CcDAcPJJ.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-DC7xwETF.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-DF7F-quh.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs} +3 -3
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-zybar1sK.mjs.map → acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-DqJ-_k-4.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-IHxXETJQ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/acorex-modules-dashboard-management.mjs +4337 -3486
- package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +3 -2
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +784 -0
- package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +1 -0
- package/fesm2022/acorex-modules-organization-management.mjs +3 -9
- package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
- package/fesm2022/acorex-modules-workflow-management.mjs +488 -105
- package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-dashboard-management.d.ts +395 -216
- package/types/acorex-modules-organization-management.d.ts +3 -12
- package/types/acorex-modules-workflow-management.d.ts +27 -0
- package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-B6lnG21F.mjs.map +0 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-pG9y9bqO.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-index-BBzx9W5u.mjs.map +0 -1
- package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs +0 -638
- package/fesm2022/acorex-modules-organization-management-org-chart.page-E0hy7dXg.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-assessment-management-acorex-modules-assessment-management-D1DhOSYU.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/const.ts","../../../../libs/modules/assessment-management/src/lib/entity.provider.ts","../../../../libs/modules/assessment-management/src/lib/features.keys.ts","../../../../libs/modules/assessment-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/menu.keys.ts","../../../../libs/modules/assessment-management/src/lib/permission.keys.ts","../../../../libs/modules/assessment-management/src/lib/menu.provider.ts","../../../../libs/modules/assessment-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/search-command.provider.ts","../../../../libs/modules/assessment-management/src/lib/manifest.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget.config.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widget-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.module.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-bank-interface.utils.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-comment.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-hint.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/utils/pre-post-content.utils.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.service.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.viewmodel.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/question/questionnaire-viewer-question.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/section-header/questionnaire-viewer-section-header.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/single-page-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/page-per-group-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/page-per-question-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/side-menu-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/viewer-container/viewer-container.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/viewer-container/viewer-container.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-evaluator-scope.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.module.ts","../../../../libs/modules/assessment-management/src/lib/assessment-management.module.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-bank-item.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/questionnaire/questionnaire.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/assessment-case/assessment-case.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/assessment-session/assessment-session.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/questionnaire-calculation/questionnaire-calculation.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/pre-questionnaire-content/pre-questionnaire-content.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/post-questionnaire-content/post-questionnaire-content.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-standalone-page/questionnaire-viewer-standalone-page.component.ts","../../../../libs/modules/assessment-management/src/acorex-modules-assessment-management.ts"],"sourcesContent":["//#region ---- Root Configuration ----\n\nconst config = { i18n: 'assessment-management' };\n\nexport const RootConfig = {\n config,\n module: {\n module: 'assessment-management',\n route: 'assessment-management',\n name: 'AssessmentManagement',\n title: '@assessment-management:module.title',\n icon: 'fa-light fa-clipboard-list-check',\n },\n entities: {\n questionBankItem: {\n name: 'QuestionBankItem',\n title: '@assessment-management:question-bank.entities.question-bank-item.title',\n titlePlural: '@assessment-management:question-bank.entities.question-bank-item.plural',\n icon: 'fa-light fa-question-circle',\n },\n questionnaire: {\n name: 'Questionnaire',\n title: '@assessment-management:questionnaires.entities.questionnaire.title',\n titlePlural: '@assessment-management:questionnaires.entities.questionnaire.plural',\n icon: 'fa-light fa-clipboard-list',\n },\n assessmentCase: {\n name: 'AssessmentCase',\n title: '@assessment-management:cases.entities.assessment-case.title',\n titlePlural: '@assessment-management:cases.entities.assessment-case.plural',\n icon: 'fa-light fa-briefcase',\n },\n assessmentSession: {\n name: 'AssessmentSession',\n title: '@assessment-management:sessions.entities.assessment-session.title',\n titlePlural: '@assessment-management:sessions.entities.assessment-session.plural',\n icon: 'fa-light fa-clipboard-check',\n },\n questionnaireCalculation: {\n name: 'QuestionnaireCalculation',\n title: '@assessment-management:questionnaire-calculations.entities.questionnaire-calculation.title',\n titlePlural: '@assessment-management:questionnaire-calculations.entities.questionnaire-calculation.plural',\n icon: 'fa-light fa-calculator',\n },\n },\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { inject, Injector } from '@angular/core';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader } from '@acorex/platform/layout/entity';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Entity Provider ----\n\nexport class AXMAssessmentManagementEntityProvider implements AXPEntityDefinitionLoader {\n private readonly injector = inject(Injector);\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.questionBankItem.name:\n return (await import('./entities/question-bank-item/question-bank-item.entity')).factory(this.injector);\n\n case RootConfig.entities.questionnaire.name:\n return (await import('./entities/questionnaire/questionnaire.entity')).factory();\n\n case RootConfig.entities.assessmentCase.name:\n return (await import('./entities/assessment-case/assessment-case.entity')).factory(this.injector);\n\n case RootConfig.entities.assessmentSession.name:\n return (await import('./entities/assessment-session/assessment-session.entity')).factory(this.injector);\n\n case RootConfig.entities.questionnaireCalculation.name:\n return (await import('./entities/questionnaire-calculation/questionnaire-calculation.entity')).factory(this.injector);\n }\n }\n\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n//#endregion\n\n","export const AXMAssessmentManagementFeatureKeys = {\n QuestionnaireManagement: 'AssessmentManagement:Feature:Questionnaire.Management',\n} as const;\n\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { AXMAssessmentManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Assessment Management Feature Definition Provider.\n * Provides feature definitions for the Assessment Management module.\n */\nexport class AXMAssessmentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Question Bank feature\n context.addFeature(AXMAssessmentManagementFeatureKeys.QuestionnaireManagement, {\n title: '@assessment-management:features.questionnaire-management.title',\n description: '@assessment-management:features.questionnaire-management.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","export const AXPAssessmentManagementMenuKeys = {\n Questionnaires: 'AssessmentManagement:Menu:Questionnaires',\n Cases: 'AssessmentManagement:Menu:Cases',\n QuestionBankItems: 'AssessmentManagement:Menu:QuestionBankItems',\n} as const;\n\n","export const AXMAssessmentManagementPermissionKeys = {\n AssessmentManagement: {\n QuestionBank: 'AssessmentManagement:QuestionBank:Management',\n Questionnaire: {\n Management: 'AssessmentManagement:Questionnaire:Management',\n Create: 'AssessmentManagement:Questionnaire:Create',\n Edit: 'AssessmentManagement:Questionnaire:Edit',\n Delete: 'AssessmentManagement:Questionnaire:Delete',\n },\n Case: {\n Management: 'AssessmentManagement:Case:Management',\n Create: 'AssessmentManagement:Case:Create',\n Edit: 'AssessmentManagement:Case:Edit',\n Delete: 'AssessmentManagement:Case:Delete',\n },\n Session: {\n Management: 'AssessmentManagement:Session:Management',\n Create: 'AssessmentManagement:Session:Create',\n Edit: 'AssessmentManagement:Session:Edit',\n Delete: 'AssessmentManagement:Session:Delete',\n },\n QuestionnaireCalculation: {\n Management: 'AssessmentManagement:QuestionnaireCalculation:Management',\n },\n Automation: {\n Management: 'AssessmentManagement:Automation:Management',\n },\n },\n} as const;\n\n","//#region ---- Imports ----\n\nimport { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAssessmentManagementMenuKeys } from './menu.keys';\nimport { AXMAssessmentManagementPermissionKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\nexport class AXMAssessmentManagementMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n // Configuration > Forms & Assessments: Question Bank, Questionnaires\n const formsMenu = context.find(AXPCommonMenuKeys.FormsAndAssessments);\n if (!formsMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.FormsAndAssessments,\n priority: 8935,\n text: '@general:menus.forms-and-assessments.title',\n icon: 'fa-light fa-clipboard-list-check',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.FormsAndAssessments).addItems([\n {\n name: AXPAssessmentManagementMenuKeys.QuestionBankItems,\n text: '@assessment-management:question-bank.entities.question-bank-item.plural',\n path: this.entityService.withEntity(module.name, RootConfig.entities.questionBankItem.name).createPath(),\n icon: RootConfig.entities.questionBankItem.icon,\n priority: 1,\n policy: {\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.QuestionBank],\n },\n },\n {\n name: AXPAssessmentManagementMenuKeys.Questionnaires,\n text: RootConfig.entities.questionnaire.titlePlural,\n path: this.entityService.withEntity(module.name, RootConfig.entities.questionnaire.name).createPath(),\n icon: RootConfig.entities.questionnaire.icon,\n priority: 2,\n policy: {\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.Questionnaire.Management],\n },\n },\n ]);\n\n // Root under MODULES: Assessments (Cases)\n context.addItems([\n {\n name: AXPAssessmentManagementMenuKeys.Cases,\n priority: 9010,\n text: '@general:menus.assessments.title',\n icon: RootConfig.entities.assessmentCase.icon,\n path: this.entityService.withEntity(module.name, RootConfig.entities.assessmentCase.name).createPath(),\n policy: {\n features: [module.name],\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.Case.Management],\n },\n },\n ]);\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable } from '@angular/core';\nimport { AXMAssessmentManagementPermissionKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Permission Provider ----\n\n@Injectable()\nexport class AXMAssessmentManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMAssessmentManagementPermissionKeys.AssessmentManagement;\n\n // I18n path constants for cleaner code\n const MODULE_PERMISSIONS = '@assessment-management:module.permissions';\n const QUESTION_BANK_PERMISSIONS = '@assessment-management:question-bank.permissions.question-bank';\n const QUESTIONNAIRE_PERMISSIONS = '@assessment-management:questionnaires.permissions.questionnaire';\n const CASE_PERMISSIONS = '@assessment-management:cases.permissions.assessment-case';\n const SESSION_PERMISSIONS = '@assessment-management:sessions.permissions.assessment-session';\n const QUESTIONNAIRE_CALCULATION_PERMISSIONS =\n '@assessment-management:questionnaire-calculations.permissions.questionnaire-calculation';\n const AUTOMATION_PERMISSIONS = '@assessment-management:automations.permissions.automation';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n )\n\n // QuestionBank Permission\n .addPermission(\n keys.QuestionBank,\n `${QUESTION_BANK_PERMISSIONS}.management.title`,\n `${QUESTION_BANK_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n // Questionnaire Permissions\n .addPermission(\n keys.Questionnaire.Management,\n `${QUESTIONNAIRE_PERMISSIONS}.management.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Questionnaire.Create,\n `${QUESTIONNAIRE_PERMISSIONS}.create.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Questionnaire.Edit,\n `${QUESTIONNAIRE_PERMISSIONS}.edit.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Questionnaire.Delete,\n `${QUESTIONNAIRE_PERMISSIONS}.delete.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // AssessmentCase Permissions\n .addPermission(\n keys.Case.Management,\n `${CASE_PERMISSIONS}.management.title`,\n `${CASE_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Case.Create,\n `${CASE_PERMISSIONS}.create.title`,\n `${CASE_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Case.Edit,\n `${CASE_PERMISSIONS}.edit.title`,\n `${CASE_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Case.Delete,\n `${CASE_PERMISSIONS}.delete.title`,\n `${CASE_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // AssessmentSession Permissions\n .addPermission(\n keys.Session.Management,\n `${SESSION_PERMISSIONS}.management.title`,\n `${SESSION_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Session.Create,\n `${SESSION_PERMISSIONS}.create.title`,\n `${SESSION_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Session.Edit,\n `${SESSION_PERMISSIONS}.edit.title`,\n `${SESSION_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Session.Delete,\n `${SESSION_PERMISSIONS}.delete.title`,\n `${SESSION_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // QuestionnaireCalculation Permissions\n .addPermission(\n keys.QuestionnaireCalculation.Management,\n `${QUESTIONNAIRE_CALCULATION_PERMISSIONS}.management.title`,\n `${QUESTIONNAIRE_CALCULATION_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n // Automation Permissions\n .addPermission(\n keys.Automation.Management,\n `${AUTOMATION_PERMISSIONS}.management.title`,\n `${AUTOMATION_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n .endGroup();\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPSearchCommandProvider, AXPSearchResult, createEntityCommandOptions } from '@acorex/platform/common';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Search Command Provider ----\n\nexport class AXMAssessmentManagementSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n {\n id: 'create-questionnaire',\n group: 'command',\n title: 'New Questionnaire',\n icon: RootConfig.entities.questionnaire.icon,\n description: 'Create a new assessment questionnaire, survey, checklist, or test.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`,\n {\n name: RootConfig.entities.questionnaire.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.questionnaire.title,\n }\n ),\n },\n },\n {\n id: 'create-question-bank-item',\n group: 'command',\n title: 'New Question',\n icon: RootConfig.entities.questionBankItem.icon,\n description: 'Create a new question for the question bank.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}`,\n {\n name: RootConfig.entities.questionBankItem.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.questionBankItem.title,\n }\n ),\n },\n },\n {\n id: 'create-assessment-case',\n group: 'command',\n title: 'New Assessment Case',\n icon: RootConfig.entities.assessmentCase.icon,\n description: 'Assign a questionnaire to a target entity for a purpose.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}`,\n {\n name: RootConfig.entities.assessmentCase.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.assessmentCase.title,\n }\n ),\n },\n },\n {\n id: 'create-assessment-session',\n group: 'command',\n title: 'New Assessment Session',\n icon: RootConfig.entities.assessmentSession.icon,\n description: 'Create a new assessment session for filling out a questionnaire.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}`,\n {\n name: RootConfig.entities.assessmentSession.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.assessmentSession.title,\n }\n ),\n },\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Assessment Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const AssessmentManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required: false,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\n//#endregion\n\n//#region ---- Widget config ----\n\nexport const AXMQuestionBankInterfaceEditorWidget: AXPWidgetConfig = {\n name: 'question-bank-interface-editor',\n title: '@assessment-management:question-bank.entities.question-bank-item.fields.interface.title',\n icon: 'fa-solid fa-puzzle-piece',\n description:\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.description',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'fieldName',\n title: 'Field Name',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'fieldName',\n type: 'text-box',\n options: {\n placeholder: 'Enter field name',\n },\n },\n },\n },\n {\n name: 'fieldTitle',\n title: 'Field Title',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'fieldTitle',\n type: 'text-box',\n options: {\n placeholder: 'Enter field title',\n },\n },\n },\n },\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Enter label',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./question-bank-interface-editor-widget-edit.component').then(\n (c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./question-bank-interface-editor-widget-edit.component').then(\n (c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('@acorex/platform/layout/widgets').then((m) => m.AXPWidgetFieldConfiguratorWidgetColumnComponent),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMQuestionBankInterfaceEditorWidget } from './widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget.config';\n\n//#endregion\n\n//#region ---- Questionnaire Builder Widgets Provider ----\n\n@Injectable()\nexport class AXMQuestionnaireBuilderWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXMQuestionBankInterfaceEditorWidget];\n }\n}\n\n//#endregion\n","import { NgModule } from '@angular/core';\nimport { AXMMetaDataDefinitionEntityModule } from '@acorex/modules/data-management';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMQuestionnaireBuilderWidgetsProvider } from './widget-definition.provider';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n AXMMetaDataDefinitionEntityModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMQuestionnaireBuilderWidgetsProvider, multi: true },\n ],\n})\nexport class AXMQuestionnaireBuilderFeatureModule { }\n\n","//#region ---- Imports ----\n\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { AXMQuestionBankItemInterfaceValue } from './question-bank-item.types';\n\n//#endregion\n\n//#region ---- Strip metadata for widget runtime ----\n\n/**\n * Returns a plain {@link AXPWidgetNode} for rendering / validation, removing optional\n * `metadata` provenance stored alongside the widget configuration on question bank items.\n */\nexport function stripQuestionBankInterfaceMetadata(\n value: AXMQuestionBankItemInterfaceValue | AXPWidgetNode | undefined | null,\n): AXPWidgetNode | undefined {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return value === null || value === undefined ? undefined : (value as unknown as AXPWidgetNode);\n }\n const v = value as unknown as Record<string, unknown>;\n if (!('metadata' in v) || v['metadata'] === undefined) {\n return value as unknown as AXPWidgetNode;\n }\n const { metadata: _metadata, ...rest } = v;\n return Object.keys(rest).length ? (rest as unknown as AXPWidgetNode) : undefined;\n}\n\n//#endregion\n\n//#region ---- Clone from meta-data definition row ----\n\n/**\n * Normalizes the `interface` field of a meta-data definition entity row to a widget node.\n */\nexport async function resolveWidgetNodeFromMetaDataDefinitionInterface(\n raw: string | AXPWidgetNode | (() => Promise<AXPWidgetNode>) | null | undefined,\n): Promise<AXPWidgetNode | null> {\n if (raw == null) {\n return null;\n }\n if (typeof raw === 'function') {\n const node = await raw();\n return node && node.type ? cloneDeep(node) : null;\n }\n if (typeof raw === 'string') {\n try {\n const parsed = JSON.parse(raw || '{}') as AXPWidgetNode;\n return parsed?.type ? cloneDeep(parsed) : null;\n } catch {\n return null;\n }\n }\n if (typeof raw === 'object' && (raw as AXPWidgetNode).type) {\n return cloneDeep(raw as AXPWidgetNode);\n }\n return null;\n}\n\n//#endregion\n","//#region ---- Question comment value object ----\n\n/**\n * Respondent free-text comment configuration (per question bank item; overridable per questionnaire item).\n */\nexport interface AXMAssessmentQuestionCommentConfig {\n enabled: boolean;\n required: boolean;\n}\n\n/**\n * Default when no configuration is stored.\n */\nexport const DEFAULT_QUESTION_COMMENT_CONFIG: AXMAssessmentQuestionCommentConfig = {\n enabled: false,\n required: false,\n};\n\n/**\n * Normalizes API / partial values to a complete config.\n */\nexport function normalizeQuestionCommentConfig(\n value: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n): AXMAssessmentQuestionCommentConfig {\n return {\n enabled: value?.enabled === true,\n required: value?.required === true,\n };\n}\n\n/**\n * Merges question bank defaults with optional questionnaire item overrides.\n */\nexport function mergeQuestionCommentConfig(\n bank: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n override: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n): AXMAssessmentQuestionCommentConfig {\n const b = normalizeQuestionCommentConfig(bank);\n if (!override) {\n return b;\n }\n return {\n enabled: override.enabled !== undefined ? override.enabled === true : b.enabled,\n required: override.required !== undefined ? override.required === true : b.required,\n };\n}\n\n/**\n * Returns only fields that differ from the bank default (for persisting questionnaire item overrides).\n */\nexport function diffQuestionCommentOverride(\n bank: AXMAssessmentQuestionCommentConfig,\n edited: AXMAssessmentQuestionCommentConfig,\n): Partial<AXMAssessmentQuestionCommentConfig> | undefined {\n const diff: Partial<AXMAssessmentQuestionCommentConfig> = {};\n if (edited.enabled !== bank.enabled) {\n diff.enabled = edited.enabled;\n }\n if (edited.required !== bank.required) {\n diff.required = edited.required;\n }\n return Object.keys(diff).length > 0 ? diff : undefined;\n}\n\n/**\n * Context path for the respondent comment text for a questionnaire item (`answers.comments.<itemName>`).\n */\nexport function getQuestionAnswerCommentStoragePath(questionItemName: string): string {\n return `answers.comments.${questionItemName}`;\n}\n\n//#endregion\n","//#region ---- Question hint value object ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\n\n/**\n * Visual style when a hint is shown (maps to ax-alert color).\n */\nexport type AXMAssessmentQuestionHintVisualMode = 'info' | 'warning' | 'danger' | 'success' | 'neutral';\n\n/**\n * `off` = no hint (same intent as \"hidden\" / \"none\"); visual modes require {@link AXMAssessmentQuestionHintConfigShown.content}.\n */\nexport type AXMAssessmentQuestionHintMode = 'off' | AXMAssessmentQuestionHintVisualMode;\n\nexport type AXMAssessmentQuestionHintConfigOff = { mode: 'off' };\n\nexport type AXMAssessmentQuestionHintConfigShown = {\n mode: AXMAssessmentQuestionHintVisualMode;\n content: AXPMultiLanguageString;\n};\n\n/**\n * Question hint configuration (question bank default; overridable per questionnaire item).\n */\nexport type AXMAssessmentQuestionHintConfig = AXMAssessmentQuestionHintConfigOff | AXMAssessmentQuestionHintConfigShown;\n\n/**\n * Partial override on a questionnaire item (`undefined` / omitted fields inherit from the bank).\n */\nexport type AXMAssessmentQuestionHintPartial = {\n mode?: AXMAssessmentQuestionHintMode;\n content?: AXPMultiLanguageString;\n};\n\nexport const DEFAULT_QUESTION_HINT_CONFIG: AXMAssessmentQuestionHintConfig = { mode: 'off' };\n\nconst VISUAL_MODES: readonly AXMAssessmentQuestionHintVisualMode[] = [\n 'info',\n 'warning',\n 'danger',\n 'success',\n 'neutral',\n];\n\nfunction isEmptyHintContent(c: AXPMultiLanguageString | undefined): boolean {\n if (c == null) {\n return true;\n }\n if (typeof c === 'string') {\n return c.trim().length === 0;\n }\n if (typeof c === 'object') {\n return Object.values(c as Record<string, unknown>).every(\n (v) => typeof v !== 'string' || v.trim().length === 0,\n );\n }\n return true;\n}\n\n/** Normalizes select / API values to a hint mode (exported for questionnaire builder forms). */\nexport function normalizeQuestionHintMode(raw: unknown): AXMAssessmentQuestionHintMode | undefined {\n if (raw == null) {\n return undefined;\n }\n if (typeof raw === 'string') {\n if (raw === 'off') {\n return 'off';\n }\n if (VISUAL_MODES.includes(raw as AXMAssessmentQuestionHintVisualMode)) {\n return raw as AXMAssessmentQuestionHintVisualMode;\n }\n return undefined;\n }\n if (typeof raw === 'object' && raw !== null && 'id' in raw) {\n const id = (raw as { id: unknown }).id;\n return normalizeQuestionHintMode(id);\n }\n return undefined;\n}\n\n/**\n * Reads optional `hint` or legacy flat `hintContent` / `hintMode` from a record (API / persisted rows).\n */\nexport function readHintFieldsFromRecord(rec: Record<string, unknown> | null | undefined): {\n hint?: unknown;\n legacyContent?: unknown;\n legacyMode?: unknown;\n} {\n if (!rec) {\n return {};\n }\n const hint = rec['hint'] ?? rec['Hint'];\n const legacyContent = rec['hintContent'] ?? rec['hint_content'];\n const legacyMode = rec['hintMode'] ?? rec['hint_mode'];\n return { hint, legacyContent, legacyMode };\n}\n\n/**\n * Normalizes API / partial values to a complete config. Coerces legacy flat fields when `hint` is absent.\n */\nexport function normalizeQuestionHintConfig(\n value: AXMAssessmentQuestionHintConfig | AXMAssessmentQuestionHintPartial | null | undefined,\n legacy?: { hintContent?: AXPMultiLanguageString; hintMode?: unknown },\n): AXMAssessmentQuestionHintConfig {\n let mode = normalizeQuestionHintMode(\n value && typeof value === 'object' && 'mode' in value ? (value as { mode?: unknown }).mode : undefined,\n );\n let content =\n value && typeof value === 'object' && 'content' in value\n ? ((value as { content?: AXPMultiLanguageString }).content as AXPMultiLanguageString | undefined)\n : undefined;\n\n const hintObj = value && typeof value === 'object' && ('mode' in value || 'content' in value) ? value : null;\n const noStructuredHint = !hintObj || (mode === undefined && content === undefined);\n\n if (noStructuredHint && legacy) {\n const lm = normalizeQuestionHintMode(legacy.hintMode);\n const lc = legacy.hintContent;\n if (lm !== undefined) {\n mode = lm;\n }\n if (lc !== undefined) {\n content = lc;\n }\n }\n\n if (mode === 'off' || mode === undefined) {\n if (mode === undefined && content != null && !isEmptyHintContent(content)) {\n const fallbackMode: AXMAssessmentQuestionHintVisualMode = 'info';\n return { mode: fallbackMode, content: content as AXPMultiLanguageString };\n }\n return { mode: 'off' };\n }\n\n if (isEmptyHintContent(content)) {\n return { mode: 'off' };\n }\n\n return { mode, content: content as AXPMultiLanguageString };\n}\n\n/**\n * Merges question bank defaults with optional questionnaire item overrides (per-field, like former hintContent/hintMode).\n */\nexport function mergeQuestionHintForViewer(\n bank: AXMAssessmentQuestionHintConfig | null | undefined,\n item: AXMAssessmentQuestionHintPartial | null | undefined,\n): AXMAssessmentQuestionHintConfig {\n const b = normalizeQuestionHintConfig(bank);\n if (!item || (item.mode === undefined && item.content === undefined)) {\n return b;\n }\n\n if (item.mode !== undefined) {\n const mode = normalizeQuestionHintMode(item.mode) ?? 'off';\n if (mode === 'off') {\n return { mode: 'off' };\n }\n const content =\n item.content !== undefined\n ? item.content\n : b.mode !== 'off'\n ? b.content\n : undefined;\n return normalizeQuestionHintConfig({ mode, content });\n }\n\n const mode: AXMAssessmentQuestionHintMode = b.mode !== 'off' ? b.mode : 'info';\n return normalizeQuestionHintConfig({ mode, content: item.content });\n}\n\n/**\n * Returns only fields that differ from the bank default (for persisting questionnaire item overrides).\n */\nexport function diffQuestionHintOverride(\n bank: AXMAssessmentQuestionHintConfig,\n edited: AXMAssessmentQuestionHintConfig,\n): AXMAssessmentQuestionHintPartial | undefined {\n if (edited.mode === 'off' && bank.mode === 'off') {\n return undefined;\n }\n if (edited.mode === 'off' && bank.mode !== 'off') {\n return { mode: 'off' };\n }\n if (bank.mode === 'off' && edited.mode !== 'off') {\n return { mode: edited.mode, content: edited.content };\n }\n const diff: AXMAssessmentQuestionHintPartial = {};\n if (edited.mode !== bank.mode) {\n diff.mode = edited.mode;\n }\n if (edited.mode !== 'off') {\n const bc = bank.mode !== 'off' ? bank.content : undefined;\n const ec = edited.content;\n if (JSON.stringify(ec ?? null) !== JSON.stringify(bc ?? null)) {\n diff.content = ec;\n }\n }\n return Object.keys(diff).length > 0 ? diff : undefined;\n}\n\n/**\n * Normalizes a question bank row (or similar) to a full hint config, including legacy flat fields.\n */\nexport function normalizeQuestionHintFromEntityRow(row: unknown): AXMAssessmentQuestionHintConfig {\n const fr = readHintFieldsFromRecord(row as Record<string, unknown> | null | undefined);\n return normalizeQuestionHintConfig(\n fr.hint as AXMAssessmentQuestionHintConfig | AXMAssessmentQuestionHintPartial | null | undefined,\n {\n hintContent: fr.legacyContent as AXPMultiLanguageString | undefined,\n hintMode: fr.legacyMode,\n },\n );\n}\n\n/**\n * Reads optional questionnaire item hint override from a persisted item record (including legacy keys).\n */\nexport function parseQuestionHintPartialFromRecord(\n row: Record<string, unknown> | null | undefined,\n): AXMAssessmentQuestionHintPartial | undefined {\n if (!row) {\n return undefined;\n }\n const fr = readHintFieldsFromRecord(row);\n if (fr.hint != null && typeof fr.hint === 'object' && !Array.isArray(fr.hint)) {\n const h = fr.hint as AXMAssessmentQuestionHintPartial;\n if (h.mode !== undefined || h.content !== undefined) {\n const out: AXMAssessmentQuestionHintPartial = {};\n if (h.mode !== undefined) {\n const m = normalizeQuestionHintMode(h.mode);\n if (m !== undefined) {\n out.mode = m;\n }\n }\n if (h.content !== undefined) {\n out.content = h.content;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n }\n }\n if (fr.legacyContent == null && fr.legacyMode == null) {\n return undefined;\n }\n const out: AXMAssessmentQuestionHintPartial = {};\n if (fr.legacyMode !== undefined) {\n const m = normalizeQuestionHintMode(fr.legacyMode);\n if (m !== undefined) {\n out.mode = m;\n }\n }\n if (fr.legacyContent !== undefined) {\n out.content = fr.legacyContent as AXPMultiLanguageString;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPExpression, AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\nimport type { AXMAssessmentQuestionCommentConfig } from '../../entities/question-bank-item/question-comment.types';\nimport {\n parseQuestionHintPartialFromRecord,\n type AXMAssessmentQuestionHintPartial,\n} from '../../entities/question-bank-item/question-hint.types';\n\n//#endregion\n\n//#region ---- Questionnaire Builder Types ----\n\n/**\n * Represents a single question item within a section\n */\nexport interface QuestionnaireBuilderItem {\n /** Unique technical name within the questionnaire (answer keys, visibility, calculations). */\n name: string;\n /** Optional labels for answer.byTag / answer.allByTag in calculations (case-insensitive match). */\n tags?: string[];\n questionBankItemId: string;\n order: number;\n /** Static `true` / `false` or an expression string for conditional required. */\n isRequired?: boolean | AXPExpression;\n /** `false` hides; expression string for conditional visibility; omitted / `true` means visible (default). */\n isVisible?: boolean | AXPExpression;\n interfaceOverride?: AXPWidgetNode;\n /** Partial override of question bank `hint`; omitted keys inherit from the bank item. */\n hint?: AXMAssessmentQuestionHintPartial;\n /** Partial override of question bank `comment` policy; omitted keys inherit from the bank item. */\n comment?: Partial<AXMAssessmentQuestionCommentConfig>;\n isNewlyAdded?: boolean;\n\n // Related question data (from expose)\n question?: {\n id: string;\n title: AXPMultiLanguageString;\n question?: AXPMultiLanguageString;\n note?: AXPMultiLanguageString;\n difficulty?: string;\n interface?: {\n type?: string;\n };\n };\n}\n\n/**\n * Answer map key for a questionnaire item (matches viewer session).\n */\nexport function getQuestionnaireItemAnswerKey(item: Pick<QuestionnaireBuilderItem, 'name'>): string {\n return typeof item.name === 'string' ? item.name.trim() : '';\n}\n\n//#endregion\n\n//#region ---- Questionnaire Builder Section Types ----\n\n/**\n * Represents a section containing questions\n */\nexport interface QuestionnaireBuilderSection {\n /** Unique technical section name. */\n name: string;\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n order: number;\n /** Optional labels (e.g. for calculations or filtering by section). */\n tags?: string[];\n /** `false` hides section; expression string for conditional visibility; omitted / `true` means visible (default). */\n isVisible?: boolean | AXPExpression;\n items: QuestionnaireBuilderItem[];\n isNewlyAdded?: boolean;\n}\n\n//#endregion\n\n//#region ---- Questionnaire Builder State Types ----\n\n/**\n * Overall state for the questionnaire builder widget (designer mode)\n */\nexport interface QuestionnaireBuilderState {\n sections: QuestionnaireBuilderSection[];\n selectedItemName?: string;\n selectedSectionName?: string;\n displaySettings?: QuestionnaireDisplaySettings;\n}\n\n/**\n * Display settings for questionnaire viewer\n */\nexport interface QuestionnaireDisplaySettings {\n /**\n * View mode: single-page, page-per-group, page-per-question, side-menu\n */\n viewMode?: 'single-page' | 'page-per-group' | 'page-per-question' | 'side-menu';\n\n /**\n * Show progress bar\n */\n showProgressBar?: boolean;\n\n /**\n * Progress calculation mode: answered or navigation\n */\n progressMode?: 'answered' | 'navigation';\n\n /**\n * Show timer\n */\n showTimer?: boolean;\n\n /**\n * Show question numbers\n */\n showQuestionNumbers?: boolean;\n\n /**\n * Auto-save answers as user types\n */\n autoSave?: boolean;\n\n /**\n * Show validation errors inline\n */\n showValidationErrors?: boolean;\n\n /**\n * Allow skipping questions (if not required)\n */\n allowSkipping?: boolean;\n\n /**\n * Show question counter (e.g., \"Question 3 of 10\")\n */\n showQuestionCounter?: boolean;\n\n /**\n * Validation timing strategy:\n * - step: validate on each step/section navigation\n * - end: validate only at final submit\n * Default: step\n */\n validationStrategy?: 'step' | 'end';\n}\n\n/**\n * Value structure stored in entity (simplified for persistence)\n */\nexport interface QuestionnaireBuilderValue {\n sections: Array<{\n name: string;\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n order: number;\n tags?: string[];\n isVisible?: boolean | AXPExpression;\n items: Array<{\n name: string;\n questionBankItemId: string;\n order: number;\n isRequired?: boolean | AXPExpression;\n isVisible?: boolean | AXPExpression;\n interfaceOverride?: AXPWidgetNode;\n hint?: AXMAssessmentQuestionHintPartial;\n comment?: Partial<AXMAssessmentQuestionCommentConfig>;\n tags?: string[];\n }>;\n }>;\n /**\n * Display settings for questionnaire viewer\n */\n displaySettings?: QuestionnaireDisplaySettings;\n}\n\n//#endregion\n\n//#region ---- Utility Functions ----\n\n/**\n * True only when the item is statically required (boolean true), not expression-based.\n */\nexport function isQuestionnaireItemStaticallyRequired(isRequired?: boolean | string): boolean {\n return isRequired === true;\n}\n\n/**\n * True when the UI should indicate required (static true or non-empty expression).\n */\nexport function isQuestionnaireItemRequiredForDisplay(isRequired?: boolean | string): boolean {\n if (isRequired === true) {\n return true;\n }\n if (typeof isRequired === 'string' && isRequired.trim() !== '') {\n return true;\n }\n return false;\n}\n\n/**\n * Builder list badge mode: static required, expression-driven required, or optional (mapped to badge variants in the builder UI).\n */\nexport type QuestionnaireItemRequiredBadgeMode = 'required' | 'conditional' | 'optional';\n\nexport function getQuestionnaireItemRequiredBadgeMode(isRequired?: boolean | string): QuestionnaireItemRequiredBadgeMode {\n if (isRequired === true) {\n return 'required';\n }\n if (typeof isRequired === 'string') {\n const t = isRequired.trim();\n if (!t) {\n return 'optional';\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return 'required';\n }\n if (tl === 'false' || tl === '0') {\n return 'optional';\n }\n return 'conditional';\n }\n return 'optional';\n}\n\n/**\n * Builder list badge mode for visibility: always visible (default), hidden, or expression-driven.\n */\nexport type QuestionnaireItemVisibilityBadgeMode = 'visible' | 'hidden' | 'conditional';\n\nexport function getQuestionnaireItemVisibilityBadgeMode(isVisible?: boolean | string | null): QuestionnaireItemVisibilityBadgeMode {\n if (isVisible === false) {\n return 'hidden';\n }\n if (isVisible === true || isVisible === undefined || isVisible === null) {\n return 'visible';\n }\n if (typeof isVisible === 'string') {\n const t = isVisible.trim();\n if (!t) {\n return 'visible';\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return 'visible';\n }\n if (tl === 'false' || tl === '0') {\n return 'hidden';\n }\n return 'conditional';\n }\n return 'visible';\n}\n\n/**\n * Convert raw value to builder state\n */\nexport function convertValueToState(value: QuestionnaireBuilderValue | null | undefined): QuestionnaireBuilderState {\n // Handle null/undefined or empty sections\n if (!value || !value.sections || value.sections.length === 0) {\n // Always return at least one default section\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n sections: [defaultSection],\n displaySettings: value?.displaySettings,\n };\n }\n\n // Handle structure (sections with nested items)\n return {\n sections: value.sections.map((section, sectionIndex) => {\n const legacy = section as { id?: string };\n const sectionName =\n (typeof section.name === 'string' && section.name.trim()) ||\n (typeof legacy.id === 'string' && legacy.id.trim()) ||\n `section-${sectionIndex}`;\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order ?? sectionIndex,\n tags: section.tags,\n isVisible: section.isVisible,\n items: (section.items || []).map((item, itemIndex) => {\n const itemLegacy = item as { id?: string };\n const itemName =\n (typeof item.name === 'string' && item.name.trim()) ||\n (typeof itemLegacy.id === 'string' && itemLegacy.id.trim()) ||\n `item-${itemIndex}`;\n return {\n name: itemName,\n questionBankItemId: item.questionBankItemId,\n order: item.order ?? itemIndex,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n interfaceOverride: item.interfaceOverride,\n hint: parseQuestionHintPartialFromRecord(item as unknown as Record<string, unknown>),\n comment: item.comment,\n tags: item.tags,\n isNewlyAdded: false,\n };\n }),\n isNewlyAdded: false,\n };\n }),\n displaySettings: value.displaySettings,\n };\n}\n\n/**\n * Convert builder state to value for persistence\n */\nexport function convertStateToValue(state: QuestionnaireBuilderState, existingValue?: QuestionnaireBuilderValue): QuestionnaireBuilderValue {\n const result: QuestionnaireBuilderValue = {\n sections: state.sections\n .filter((section) => {\n // Drop sections that are NOT newly added AND have no items\n // Keep sections that are newly added OR have items\n const isNewlyAdded = section.isNewlyAdded === true;\n const hasItems = section.items.length > 0;\n\n return isNewlyAdded || hasItems;\n })\n .map((section) => {\n return {\n name: section.name,\n title: section.title,\n description: section.description,\n order: section.order,\n tags: section.tags,\n isVisible: section.isVisible,\n items: section.items.map((item) => ({\n name: item.name,\n questionBankItemId: item.questionBankItemId,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n interfaceOverride: item.interfaceOverride,\n hint: item.hint,\n comment: item.comment,\n tags: item.tags,\n })),\n };\n }),\n };\n\n // Preserve displaySettings from state first, then from existing value if state doesn't have it\n if (state.displaySettings) {\n result.displaySettings = state.displaySettings;\n } else if (existingValue?.displaySettings) {\n result.displaySettings = existingValue.displaySettings;\n }\n\n return result;\n}\n\n/**\n * Create a default section\n */\nexport function createDefaultSection(): QuestionnaireBuilderSection {\n const name = `section-${Date.now()}`;\n return {\n name,\n title: 'New Section',\n description: undefined,\n order: 0,\n isVisible: undefined,\n items: [],\n isNewlyAdded: true,\n };\n}\n\n/**\n * All questionnaire item names currently in the structure (for uniqueness when allocating new names).\n */\nexport function collectQuestionnaireItemNames(sections: QuestionnaireBuilderSection[]): Set<string> {\n const set = new Set<string>();\n for (const sec of sections) {\n for (const it of sec.items) {\n if (it.name) set.add(it.name);\n }\n }\n return set;\n}\n\n/**\n * Allocates the next user-friendly name (`q1`, `q2`, …) not present in `used`.\n * Increments from the highest existing `q<number>` name, then skips collisions.\n */\nexport function allocateNextQuestionItemName(used: Set<string>): string {\n let maxQ = 0;\n for (const id of used) {\n const m = /^q(\\d+)$/i.exec(id.trim());\n if (m) maxQ = Math.max(maxQ, parseInt(m[1], 10));\n }\n let n = maxQ + 1;\n let candidate = `q${n}`;\n while (used.has(candidate)) {\n n++;\n candidate = `q${n}`;\n }\n return candidate;\n}\n\n//#endregion\n\n","//#region ---- Pre/Post Content Utilities ----\n\nimport { resolveMultiLanguageString } from '@acorex/platform/core';\nimport type { PrePostContentValue } from '../../../entities/questionnaire/questionnaire.types';\n\n/**\n * Formats elapsed seconds as `m:ss` or `h:mm:ss` when an hour or more.\n */\nexport function formatElapsedDuration(totalSeconds: number): string {\n const s = Math.max(0, Math.floor(totalSeconds));\n const hours = Math.floor(s / 3600);\n const minutes = Math.floor((s % 3600) / 60);\n const secs = s % 60;\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n}\n\n/**\n * Placeholder values for post-questionnaire summary content.\n * Fixed keys plus any {{name}} from questionnaire calculation outcomes.\n */\nexport interface SummaryPlaceholderValues {\n totalQuestions?: number;\n answeredCount?: number;\n /** Elapsed questionnaire time in whole seconds (e.g. from the viewer timer). */\n totalTimeSeconds?: number;\n /** Pre-formatted duration for {{totalTime}}. */\n totalTimeFormatted?: string;\n /** Computed calculation values (name -> value) for placeholders like {{bmi}}. */\n outcomes?: Record<string, unknown>;\n /** Display label per calculation `name` (entity title); used in the outcomes list UI. */\n outcomeTitles?: Record<string, string>;\n}\n\n/**\n * Resolve placeholders in summary content.\n * Fixed: {{totalQuestions}}, {{answeredCount}}, {{totalTime}}, {{elapsedSeconds}}.\n * Plus any {{calculationName}} from values.outcomes.\n */\nexport function resolveSummaryPlaceholders(\n content: string,\n values: SummaryPlaceholderValues\n): string {\n if (!content) return '';\n\n const elapsed = values.totalTimeSeconds;\n const totalTimeStr =\n values.totalTimeFormatted ??\n (elapsed !== undefined && elapsed !== null ? formatElapsedDuration(elapsed) : '');\n\n let result = content\n .replace(/\\{\\{totalQuestions\\}\\}/g, String(values.totalQuestions ?? ''))\n .replace(/\\{\\{answeredCount\\}\\}/g, String(values.answeredCount ?? ''))\n .replace(/\\{\\{totalTime\\}\\}/g, totalTimeStr)\n .replace(/\\{\\{elapsedSeconds\\}\\}/g, elapsed !== undefined && elapsed !== null ? String(elapsed) : '');\n\n const outcomes = values.outcomes;\n if (outcomes && typeof outcomes === 'object') {\n for (const [key, val] of Object.entries(outcomes)) {\n const re = new RegExp(`\\\\{\\\\{\\\\s*${escapeRegExp(key)}\\\\s*\\\\}\\\\}`, 'g');\n result = result.replace(re, val !== undefined && val !== null ? String(val) : '');\n }\n }\n\n return result;\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Strip HTML tags for plain-text labels (validation messages, review fallback).\n */\nexport function stripHtmlToPlain(html: string): string {\n if (!html?.trim()) return '';\n try {\n if (typeof DOMParser !== 'undefined') {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const text = doc.body?.textContent?.trim();\n if (text) return text;\n }\n } catch {\n /* ignore */\n }\n return html.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Human-readable label for a question bank item: prefer plain text from rich `question`, else `title`.\n */\nexport function resolveQuestionBankItemPlainLabel(\n details: { title: PrePostContentValue; question?: PrePostContentValue | null | undefined },\n locale: string,\n): string {\n const q = details.question;\n if (q != null && q !== '') {\n const html = resolveMultiLanguageString(q, locale);\n const plain = stripHtmlToPlain(html);\n if (plain) return plain;\n }\n const titleResolved = resolveMultiLanguageString(details.title, locale);\n return titleResolved.trim() || 'This field';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport {\n AXPExpressionEvaluatorService,\n AXPExpressionEvaluatorScope,\n AXPDeviceService,\n} from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { get } from 'lodash-es';\nimport type {\n AXMAssessmentManagementQuestionnaireCalculationEntityModel,\n QuestionnaireCalculationResultKind,\n} from '../../entities/questionnaire-calculation/questionnaire-calculation.types';\nimport { RootConfig } from '../../const';\nimport {\n QuestionnaireBuilderItem,\n QuestionnaireBuilderValue,\n getQuestionnaireItemAnswerKey,\n} from '../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from './questionnaire-viewer.types';\nimport type { PrePostConfig } from '../../entities/questionnaire/questionnaire.types';\nimport { formatElapsedDuration, type SummaryPlaceholderValues } from './utils/pre-post-content.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Named values produced by questionnaire calculations (calculation `name` → evaluated value). */\nexport type QuestionnaireCalculationValues = Record<string, unknown>;\n\nexport interface AXMQuestionnaireViewerServiceConfig {\n /**\n * Dialog title\n */\n title: string;\n\n /**\n * Questionnaire structure data\n */\n structure: QuestionnaireBuilderValue;\n\n /**\n * Pre/post questionnaire config (welcome, review, summary)\n */\n prePostConfig?: PrePostConfig | null;\n\n /**\n * Optional viewer configuration\n * If not provided, displaySettings from structure will be used\n */\n config?: QuestionnaireViewerConfig;\n\n\n /**\n * Initial answers to pre-fill the questionnaire\n */\n initialAnswers?: Record<string, any>;\n\n /**\n * Persisted questionnaire entity id — used to load and evaluate questionnaire calculations on submit.\n */\n questionnaireId?: string;\n\n /**\n * When provided, called on submit. Should save and return result for summary.\n */\n submitHandler?: (answers: Record<string, any>) => Promise<SummaryPlaceholderValues | null | void>;\n}\n\nexport interface AXMQuestionnaireViewerServiceResult {\n /**\n * All answers from the questionnaire\n */\n answers: Record<string, any>;\n\n /**\n * Questions with their corresponding answers\n */\n questions: Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n }>;\n\n /**\n * Whether the dialog was submitted (true) or closed (false)\n */\n submitted: boolean;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the questionnaire viewer dialog and evaluates questionnaire calculations when a questionnaire id is provided.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMQuestionnaireViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly entityService = inject(AXPEntityService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n protected readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open questionnaire viewer in a dialog\n */\n async open(config: AXMQuestionnaireViewerServiceConfig): Promise<AXMQuestionnaireViewerServiceResult | null> {\n const { AXMQuestionnaireViewerPopupComponent } = await import('./pages/viewer-popup/questionnaire-viewer-popup.component');\n const structure = config.structure;\n const submitHandler =\n config.submitHandler ??\n ((answers: Record<string, any>) =>\n this.buildSummaryPlaceholderValues(structure, answers, { questionnaireId: config.questionnaireId }));\n const result = await this.popupService.open(AXMQuestionnaireViewerPopupComponent, {\n title: config.title,\n size: this.deviceService.isSmall() ? 'full' : 'lg',\n data: {\n structure: config.structure,\n prePostConfig: config.prePostConfig ?? null,\n config: config.config,\n initialAnswers: config.initialAnswers || {},\n submitHandler,\n questionnaireId: config.questionnaireId,\n },\n });\n\n return result.data || null;\n }\n\n /**\n * Evaluate all questionnaire calculations for the given questionnaire and answers.\n * Pass `structure` so expressions can use `answer.byId`, `answer.byTag`, and `answer.allByTag`.\n */\n /**\n * Resolves `isVisible` for a section or question: `false` hides; `true`/undefined shows;\n * non-empty string is evaluated with the same scope as questionnaire calculations (`answer.*`, `fn.*`, etc.).\n */\n async evaluateQuestionnaireVisibilityFlag(\n isVisible: boolean | string | undefined | null,\n answers: Record<string, unknown>,\n structure: QuestionnaireBuilderValue | null | undefined,\n ): Promise<boolean> {\n if (isVisible === false) {\n return false;\n }\n if (isVisible === true || isVisible === undefined || isVisible === null) {\n return true;\n }\n const trimmed = String(isVisible).trim();\n if (!trimmed) {\n return true;\n }\n try {\n const scope = this.buildExpressionScope(answers, {}, structure ?? null);\n const wrapped = trimmed.includes('{{') ? trimmed : `{{ ${trimmed} }}`;\n const raw = await this.expressionEvaluator.evaluate(wrapped, scope as AXPExpressionEvaluatorScope);\n return this.coerceOutcome(raw, 'boolean') as boolean;\n } catch (err) {\n console.warn('[QuestionnaireViewer] Visibility expression evaluation failed:', isVisible, err);\n return false;\n }\n }\n\n /**\n * Evaluates questionnaire calculations and returns values plus display titles from calculation entities.\n */\n async evaluateOutcomes(\n questionnaireId: string,\n answers: Record<string, unknown>,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<{ values: QuestionnaireCalculationValues; outcomeTitles: Record<string, string> }> {\n const rules = await this.loadCalculationsForQuestionnaire(questionnaireId);\n if (!rules?.length) return { values: {}, outcomeTitles: {} };\n\n const sorted = this.topologicalSort(rules);\n const outcomes: QuestionnaireCalculationValues = {};\n const outcomeTitles: Record<string, string> = {};\n\n for (const rule of sorted) {\n if (rule.name) {\n outcomeTitles[rule.name] = this.resolveOutcomeDisplayTitle(rule);\n }\n const value = await this.computeResult(rule, answers, outcomes, structure);\n if (rule.name && value !== undefined) outcomes[rule.name] = value;\n }\n\n return { values: outcomes, outcomeTitles };\n }\n\n /**\n * Progress metrics and optional calculation results for summary / preview.\n */\n async buildSummaryPlaceholderValues(\n structure: QuestionnaireBuilderValue,\n answers: Record<string, any>,\n options?: { questionnaireId?: string; elapsedSeconds?: number },\n ): Promise<SummaryPlaceholderValues> {\n const { answeredQuestionsCount } = this.calculateProgressFromStructure(structure, answers);\n const totalQuestions =\n structure?.sections?.reduce((s, sec) => s + (sec.items?.length ?? 0), 0) ?? 0;\n let outcomes: Record<string, unknown> | undefined;\n let outcomeTitles: Record<string, string> | undefined;\n if (options?.questionnaireId) {\n const { values: evaluated, outcomeTitles: titles } = await this.evaluateOutcomes(\n options.questionnaireId,\n answers as Record<string, unknown>,\n structure,\n );\n if (Object.keys(evaluated).length > 0) {\n outcomes = evaluated;\n outcomeTitles = titles;\n }\n }\n const elapsed = options?.elapsedSeconds;\n const totalTimeFormatted =\n elapsed !== undefined && elapsed !== null ? formatElapsedDuration(elapsed) : undefined;\n return {\n totalQuestions,\n answeredCount: answeredQuestionsCount,\n totalTimeSeconds: elapsed,\n totalTimeFormatted,\n outcomes,\n outcomeTitles,\n };\n }\n\n //#endregion\n\n //#region ---- Progress ----\n\n /**\n * Count answered questions using the same paths as the viewer session (item id or answers.itemId).\n */\n calculateProgressFromStructure(\n structure: QuestionnaireBuilderValue,\n answers: Record<string, any>,\n ): { answeredQuestionsCount: number; progressPercentage: number } {\n if (!structure?.sections?.length) {\n return { answeredQuestionsCount: 0, progressPercentage: 0 };\n }\n let answered = 0;\n let total = 0;\n for (const section of structure.sections) {\n if (!section.items?.length) continue;\n for (const item of section.items) {\n total++;\n const key = getQuestionnaireItemAnswerKey(item);\n const value = key ? this.resolveStoredAnswer(answers, key) : null;\n const isEmpty =\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n if (!isEmpty) answered++;\n }\n }\n const progressPercentage = total > 0 ? Math.round((answered / total) * 100) : 0;\n return { answeredQuestionsCount: answered, progressPercentage };\n }\n\n //#endregion\n\n //#region ---- Questionnaire calculations (evaluation) ----\n\n private async loadCalculationsForQuestionnaire(\n questionnaireId: string,\n ): Promise<AXMAssessmentManagementQuestionnaireCalculationEntityModel[]> {\n const result = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaireCalculation.name)\n .data<string, AXMAssessmentManagementQuestionnaireCalculationEntityModel>()\n .query({\n filter: {\n field: 'questionnaireId',\n operator: { type: 'equal' },\n value: questionnaireId,\n },\n take: 500,\n skip: 0,\n });\n return (result?.items ?? []) as AXMAssessmentManagementQuestionnaireCalculationEntityModel[];\n }\n\n /**\n * Display label for a calculation: entity `title` when set, otherwise a humanized `name`.\n */\n private resolveOutcomeDisplayTitle(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): string {\n const title = rule.title;\n if (typeof title === 'string') {\n const t = title.trim();\n if (t.length > 0) return t;\n }\n const name = rule.name?.trim();\n if (name) return this.humanizeCalculationKey(name);\n return '';\n }\n\n private humanizeCalculationKey(name: string): string {\n return name\n .replace(/_/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n }\n\n private async computeResult(\n rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel,\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<unknown> {\n const exprText = this.calculationExpressionText(rule);\n if (!exprText) return undefined;\n const raw = await this.evaluateOutcomeExpression(exprText, answers, outcomes, structure);\n return this.coerceOutcome(raw, this.inferResultKind(rule));\n }\n\n /** Non-empty trimmed `expression`, or empty string if missing. */\n private calculationExpressionText(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): string {\n const exp = rule.expression;\n return typeof exp === 'string' ? exp.trim() : '';\n }\n\n private inferResultKind(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): QuestionnaireCalculationResultKind {\n const k = rule.resultKind;\n if (k === 'number' || k === 'string' || k === 'boolean') return k;\n return 'number';\n }\n\n private coerceOutcome(raw: unknown, kind: QuestionnaireCalculationResultKind): unknown {\n if (raw === undefined || raw === null) return raw;\n switch (kind) {\n case 'boolean': {\n if (typeof raw === 'boolean') return raw;\n if (typeof raw === 'number') return raw !== 0;\n if (typeof raw === 'string') {\n const s = raw.toLowerCase().trim();\n if (['true', '1', 'yes'].includes(s)) return true;\n if (['false', '0', 'no'].includes(s)) return false;\n }\n return Boolean(raw);\n }\n case 'number': {\n const n = Number(raw);\n return Number.isFinite(n) ? n : undefined;\n }\n case 'string':\n return raw === undefined || raw === null ? '' : String(raw);\n default:\n return raw;\n }\n }\n\n private async evaluateOutcomeExpression(\n expression: string,\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<unknown> {\n const trimmed = expression?.trim();\n if (!trimmed) return undefined;\n try {\n const scope = this.buildExpressionScope(answers, outcomes, structure);\n const wrapped = trimmed.includes('{{') ? trimmed : `{{ ${trimmed} }}`;\n return await this.expressionEvaluator.evaluate(wrapped, scope as AXPExpressionEvaluatorScope);\n } catch (err) {\n console.warn('[QuestionnaireViewer] Calculation expression evaluation failed:', expression, err);\n return undefined;\n }\n }\n\n /**\n * Resolves an answer the same way as the viewer session (`key` or `answers.key`).\n */\n private resolveStoredAnswer(answers: Record<string, unknown>, key: string): unknown {\n const rawKey = String(key ?? '').trim();\n if (!rawKey) return undefined;\n const normalizedKey = rawKey.startsWith('answers.') ? rawKey.slice('answers.'.length) : rawKey;\n if (!normalizedKey) return undefined;\n return answers[normalizedKey] ?? get(answers, normalizedKey) ?? get(answers, `answers.${normalizedKey}`);\n }\n\n /** Sections and items ordered by `order` for deterministic `byTag` matching. */\n private flattenQuestionnaireItems(structure: QuestionnaireBuilderValue | null | undefined): QuestionnaireBuilderItem[] {\n if (!structure?.sections?.length) return [];\n const sections = [...structure.sections].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n const out: QuestionnaireBuilderItem[] = [];\n for (const sec of sections) {\n const items = [...(sec.items ?? [])].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n out.push(...items);\n }\n return out;\n }\n\n private normalizeQuestionnaireTag(tag: string): string {\n return String(tag).trim().toLowerCase();\n }\n\n /**\n * Scope: answer.eval (path), answer.byId / byTag / allByTag, formula.eval / outcome.eval, fn.* helpers.\n */\n private buildExpressionScope(\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Record<string, unknown> {\n const resolveOutcome = (key: string): unknown => outcomes[key];\n const itemsOrdered = this.flattenQuestionnaireItems(structure ?? null);\n\n const itemHasTag = (item: QuestionnaireBuilderItem, normalizedTag: string): boolean => {\n if (!normalizedTag) return false;\n const tags = item.tags ?? [];\n return tags.some((t) => this.normalizeQuestionnaireTag(String(t)) === normalizedTag);\n };\n\n const resolveForItem = (item: QuestionnaireBuilderItem | undefined): unknown => {\n if (!item) return undefined;\n return this.resolveStoredAnswer(answers, getQuestionnaireItemAnswerKey(item));\n };\n\n const findFirstItemByTag = (tag: string): QuestionnaireBuilderItem | undefined => {\n const nt = this.normalizeQuestionnaireTag(tag);\n if (!nt) return undefined;\n return itemsOrdered.find((item) => itemHasTag(item, nt));\n };\n\n const findAllItemsByTag = (tag: string): QuestionnaireBuilderItem[] => {\n const nt = this.normalizeQuestionnaireTag(tag);\n if (!nt) return [];\n return itemsOrdered.filter((item) => itemHasTag(item, nt));\n };\n\n const findItemByStableId = (id: string): QuestionnaireBuilderItem | undefined => {\n const sid = String(id).trim();\n if (!sid) return undefined;\n return itemsOrdered.find((item) => item.name === sid);\n };\n const collectNumeric = (...args: unknown[]): number[] => {\n const out: number[] = [];\n const visit = (a: unknown): void => {\n if (a === undefined || a === null || a === '') return;\n if (typeof a === 'number' && Number.isFinite(a)) {\n out.push(a);\n return;\n }\n if (typeof a === 'string') {\n const t = a.trim();\n if (t !== '' && Number.isFinite(Number(t))) out.push(Number(t));\n return;\n }\n if (Array.isArray(a)) {\n for (const x of a) visit(x);\n }\n };\n for (const arg of args) visit(arg);\n return out;\n };\n\n const fn = {\n SUM: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.reduce((s, x) => s + x, 0);\n },\n AVERAGE: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n if (!arr.length) return undefined;\n return arr.reduce((s, x) => s + x, 0) / arr.length;\n },\n COUNT: (...args: unknown[]) => collectNumeric(...args).length,\n MIN: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.length ? Math.min(...arr) : undefined;\n },\n MAX: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.length ? Math.max(...arr) : undefined;\n },\n IF: (cond: unknown, whenTrue: unknown, whenFalse: unknown) => (cond ? whenTrue : whenFalse),\n ROUND: (n: unknown, digits?: unknown) => {\n const x = Number(n);\n const d = digits === undefined ? 0 : Number(digits);\n if (!Number.isFinite(x)) return undefined;\n const p = 10 ** (Number.isFinite(d) ? d : 0);\n return Math.round(x * p) / p;\n },\n };\n\n return {\n answer: {\n eval: (key: string): unknown => this.resolveStoredAnswer(answers, key),\n byId: (id: string): unknown => resolveForItem(findItemByStableId(id)),\n byTag: (tag: string): unknown => resolveForItem(findFirstItemByTag(tag)),\n allByTag: (tag: string): unknown[] =>\n findAllItemsByTag(tag).map((item) => resolveForItem(item)),\n },\n formula: { eval: resolveOutcome },\n outcome: { eval: resolveOutcome },\n fn,\n };\n }\n\n private expressionOutcomeRefs(expression: string | undefined, ruleNames: Set<string>): Set<string> {\n const deps = new Set<string>();\n if (!expression || typeof expression !== 'string') return deps;\n const patterns = [\n /formula\\.eval\\s*\\(\\s*['\"]([a-zA-Z0-9_-]+)['\"]\\s*\\)/g,\n /outcome\\.eval\\s*\\(\\s*['\"]([a-zA-Z0-9_-]+)['\"]\\s*\\)/g,\n ];\n for (const regex of patterns) {\n regex.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = regex.exec(expression)) !== null) {\n const name = m[1];\n if (ruleNames.has(name)) deps.add(name);\n }\n }\n return deps;\n }\n\n private topologicalSort(\n rules: AXMAssessmentManagementQuestionnaireCalculationEntityModel[],\n ): AXMAssessmentManagementQuestionnaireCalculationEntityModel[] {\n const nameToRule = new Map<string, AXMAssessmentManagementQuestionnaireCalculationEntityModel>();\n const ruleNames = new Set<string>();\n for (const r of rules) {\n if (r.name) {\n nameToRule.set(r.name, r);\n ruleNames.add(r.name);\n }\n }\n\n const order: string[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n if (visiting.has(name)) return;\n visiting.add(name);\n const rule = nameToRule.get(name);\n if (rule) {\n const exprStr = this.calculationExpressionText(rule);\n const formDeps = this.expressionOutcomeRefs(exprStr, ruleNames);\n for (const d of formDeps) visit(d);\n }\n visiting.delete(name);\n visited.add(name);\n order.push(name);\n };\n\n for (const name of ruleNames) visit(name);\n return order\n .map((name) => nameToRule.get(name))\n .filter((r): r is AXMAssessmentManagementQuestionnaireCalculationEntityModel => !!r);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { resolveMultiLanguageString, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetContainerComponent, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { get } from 'lodash-es';\nimport { stripQuestionBankInterfaceMetadata } from '../../entities/question-bank-item/question-bank-interface.utils';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../entities/question-bank-item/question-bank-item.types';\nimport {\n getQuestionAnswerCommentStoragePath,\n mergeQuestionCommentConfig,\n normalizeQuestionCommentConfig,\n type AXMAssessmentQuestionCommentConfig,\n} from '../../entities/question-bank-item/question-comment.types';\nimport type { AXMAssessmentManagementQuestionnaireEntityModel } from '../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../const';\nimport {\n mergeQuestionHintForViewer,\n normalizeQuestionHintFromEntityRow,\n parseQuestionHintPartialFromRecord,\n} from '../../entities/question-bank-item/question-hint.types';\nimport { QuestionnaireBuilderValue, isQuestionnaireItemStaticallyRequired } from '../questionnaire-builder/questionnaire-builder.types';\nimport {\n QuestionnaireViewerAttachment,\n QuestionnaireViewerConfig,\n QuestionnaireViewerData,\n QuestionnaireViewerQuestion,\n QuestionnaireViewerSection,\n QuestionnaireValidationStrategy,\n} from './questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerService } from './questionnaire-viewer.service';\nimport { resolveQuestionBankItemPlainLabel, stripHtmlToPlain } from './utils/pre-post-content.utils';\n\n//#endregion\n\n/** Guards concurrent `refreshVisibility` runs; incremented on each refresh. */\nlet questionnaireViewerVisibilityRefreshSeq = 0;\n\nfunction persistedSectionName(section: QuestionnaireBuilderValue['sections'][number], index: number): string {\n const n = typeof section.name === 'string' ? section.name.trim() : '';\n if (n) return n;\n const legacy = section as { id?: string };\n const id = typeof legacy.id === 'string' ? legacy.id.trim() : '';\n return id || `section-${index}`;\n}\n\nfunction persistedItemName(\n item: QuestionnaireBuilderValue['sections'][number]['items'][number],\n index: number,\n): string {\n const n = typeof item.name === 'string' ? item.name.trim() : '';\n if (n) return n;\n const legacy = item as { id?: string };\n const id = typeof legacy.id === 'string' ? legacy.id.trim() : '';\n return id || `item-${index}`;\n}\n\nfunction normalizeValidationStrategy(value: unknown): QuestionnaireValidationStrategy {\n if (value === 'step' || value === 'end') {\n return value;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id?: unknown }).id === 'string') {\n return normalizeValidationStrategy((value as { id: string }).id);\n }\n return 'step';\n}\n\n//#region ---- Helpers ----\n\n/**\n * Normalize question bank attachments (string[] or AXPFileListItem[]) to viewer attachment list.\n */\nfunction normalizeAttachments(raw: unknown): QuestionnaireViewerAttachment[] {\n if (raw == null) return [];\n if (!Array.isArray(raw)) return [];\n return raw\n .map((item): QuestionnaireViewerAttachment | null => {\n if (typeof item === 'string') return { id: item, name: undefined };\n if (item && typeof item === 'object' && 'id' in item && typeof (item as { id: unknown }).id === 'string') {\n const obj = item as { id: string; name?: string };\n return { id: obj.id, name: typeof obj.name === 'string' ? obj.name : undefined };\n }\n if (item && typeof item === 'object' && 'source' in item) {\n const src = (item as { source?: { kind?: string; value?: unknown } }).source;\n if (src?.kind === 'fileId' && typeof src.value === 'string') {\n const name = (item as { name?: string }).name;\n return { id: src.value, name: typeof name === 'string' ? name : undefined };\n }\n }\n return null;\n })\n .filter((a): a is QuestionnaireViewerAttachment => a != null);\n}\n\nfunction resolvedCommentPolicyForBuilderItem(\n item: QuestionnaireBuilderValue['sections'][number]['items'][number],\n questionDetails: AXMAssessmentManagementQuestionBankItemEntityModel | null,\n): AXMAssessmentQuestionCommentConfig {\n const bank = normalizeQuestionCommentConfig(questionDetails?.comment);\n const override = (item as { comment?: Partial<AXMAssessmentQuestionCommentConfig> }).comment;\n return mergeQuestionCommentConfig(bank, override);\n}\n\n/**\n * Sync visibility: booleans apply immediately; expression strings use the async-filled cache (`cache[id] === false` hides).\n */\nfunction resolveVisibilityFlagSync(\n flag: boolean | string | undefined,\n entityId: string,\n cache: Record<string, boolean>,\n): boolean {\n if (flag === false) {\n return false;\n }\n if (flag === true || flag === undefined) {\n return true;\n }\n return cache[entityId] !== false;\n}\n\nfunction visibleQuestionsForSection(\n section: QuestionnaireViewerSection,\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): QuestionnaireViewerQuestion[] {\n if (!resolveVisibilityFlagSync(section.isVisible, section.name, sectionCache)) {\n return [];\n }\n return section.questions.filter((q) => resolveVisibilityFlagSync(q.isVisible, q.name, questionCache));\n}\n\nfunction countAllVisibleQuestions(\n data: QuestionnaireViewerData,\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): number {\n let n = 0;\n for (const sec of data.sections) {\n n += visibleQuestionsForSection(sec, sectionCache, questionCache).length;\n }\n return n;\n}\n\n/**\n * Section is navigable / renderable when it has at least one visible question (section `isVisible` is applied inside `visibleQuestionsForSection`).\n */\nfunction firstSectionIndexWithVisibleContent(\n sections: QuestionnaireViewerSection[],\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): number {\n const idx = sections.findIndex(\n (sec) => visibleQuestionsForSection(sec, sectionCache, questionCache).length > 0,\n );\n return idx === -1 ? 0 : idx;\n}\n\n//#endregion\n\n//#region ---- Validation Error Types ----\n\nexport interface QuestionnaireValidationError {\n name: string;\n questionTitle: string;\n sectionName?: string;\n sectionTitle?: string;\n error: string;\n}\n\nexport interface QuestionnaireValidationResult {\n isValid: boolean;\n errors: QuestionnaireValidationError[];\n}\n\n//#endregion\n\n//#region ---- ViewModel ----\n\nexport const AXMQuestionnaireViewerViewModel = signalStore(\n withState(() => ({\n // Data\n questionnaireData: null as QuestionnaireViewerData | null,\n structure: null as QuestionnaireBuilderValue | null,\n config: null as QuestionnaireViewerConfig | null,\n\n // State\n isLoading: true,\n error: null as string | null,\n\n // Navigation\n currentSectionIndex: 0,\n currentQuestionIndex: 0,\n\n // Timer\n timerElapsed: 0, // seconds\n timerInterval: null as any,\n\n // References\n form: null as any,\n widgetContainer: null as AXPWidgetContainerComponent | null,\n\n // Validation errors\n validationErrors: [] as QuestionnaireValidationError[],\n\n /** Filled by `refreshVisibility` when `isVisible` is an expression string. */\n sectionVisibilityById: {} as Record<string, boolean>,\n questionVisibilityById: {} as Record<string, boolean>,\n })),\n\n withComputed((store) => ({\n //#region ---- View Mode ----\n\n viewMode: computed(() => {\n const config = store.config();\n const configMode = config?.viewMode;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsViewMode = displaySettings?.viewMode;\n return configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n }),\n\n //#endregion\n\n //#region ---- Sections & Questions ----\n\n sections: computed(() => {\n const data = store.questionnaireData();\n return data?.sections || [];\n }),\n\n /** Section indices that have at least one visible question (for side-menu tabs, etc.). */\n sectionIndicesWithVisibleContent: computed(() => {\n const data = store.questionnaireData();\n const list = data?.sections ?? [];\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const indices: number[] = [];\n for (let i = 0; i < list.length; i++) {\n if (visibleQuestionsForSection(list[i], sc, qc).length > 0) {\n indices.push(i);\n }\n }\n return indices;\n }),\n\n currentSection: computed(() => {\n const data = store.questionnaireData();\n if (!data) return null;\n const sections = data.sections;\n const index = store.currentSectionIndex();\n return sections[index] || null;\n }),\n\n currentQuestion: computed(() => {\n const data = store.questionnaireData();\n if (!data) return null;\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const section = data.sections[store.currentSectionIndex()];\n if (!section) return null;\n const visible = visibleQuestionsForSection(section, sc, qc);\n return visible[store.currentQuestionIndex()] ?? null;\n }),\n\n totalQuestionsCount: computed(() => {\n const data = store.questionnaireData();\n if (!data) return 0;\n return countAllVisibleQuestions(data, store.sectionVisibilityById(), store.questionVisibilityById());\n }),\n\n totalSectionsCount: computed(() => {\n const data = store.questionnaireData();\n return data?.sections.length || 0;\n }),\n\n //#endregion\n\n //#region ---- Progress ----\n\n progressMode: computed(() => {\n const config = store.config();\n const configValue = config?.progressMode;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.progressMode;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : 'answered');\n }),\n\n answeredQuestionsCount: computed(() => {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) {\n return 0;\n }\n\n try {\n const contextService = container.contextService;\n const changeEvent = contextService.changeEvent();\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n let answeredCount = 0;\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (!isEmpty) {\n answeredCount++;\n }\n }\n }\n\n return answeredCount;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error counting answered questions:', error);\n return 0;\n }\n }),\n\n progressPercentage: computed(() => {\n const data = store.questionnaireData();\n if (!data) return 0;\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const totalQuestions = countAllVisibleQuestions(data, sc, qc);\n if (totalQuestions === 0) return 0;\n\n // Calculate progress mode\n const config = store.config();\n const structure = store.structure();\n const configValue = config?.progressMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsValue = displaySettings?.progressMode;\n const progressMode = configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : 'answered');\n\n // Calculate view mode\n const configMode = config?.viewMode;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n if (progressMode === 'answered') {\n // Calculate answered count directly\n const container = store.widgetContainer();\n if (!container?.contextService) return 0;\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n let answeredCount = 0;\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (!isEmpty) {\n answeredCount++;\n }\n }\n }\n\n return Math.round((answeredCount / totalQuestions) * 100);\n } catch (error) {\n return 0;\n }\n }\n\n if (progressMode === 'navigation') {\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const totalSections = data.sections.length;\n const currentSection = store.currentSectionIndex();\n return Math.round(((currentSection + 1) / totalSections) * 100);\n }\n\n if (viewMode === 'page-per-question') {\n let currentQuestionIndex = 0;\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n\n for (let i = 0; i < currentSIndex; i++) {\n currentQuestionIndex += visibleQuestionsForSection(data.sections[i], sc, qc).length;\n }\n currentQuestionIndex += currentQIndex + 1;\n\n return Math.round((currentQuestionIndex / totalQuestions) * 100);\n }\n\n return 0;\n }\n\n return 0;\n }),\n\n //#endregion\n\n //#region ---- Display Settings ----\n\n showProgressBar: computed(() => {\n const config = store.config();\n const configValue = config?.showProgressBar;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showProgressBar;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : true);\n }),\n\n showTimer: computed(() => {\n const config = store.config();\n const configValue = config?.timer?.showTimer;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showTimer;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : false);\n }),\n\n timerTimeLimit: computed(() => {\n const config = store.config();\n return config?.timer?.timeLimit;\n }),\n\n showQuestionNumbers: computed(() => {\n const config = store.config();\n const configValue = config?.showQuestionNumbers;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showQuestionNumbers;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : true);\n }),\n\n showQuestionCounter: computed(() => {\n const config = store.config();\n const configValue = config?.showQuestionCounter;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showQuestionCounter;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : false);\n }),\n\n currentQuestionPosition: computed(() => {\n const data = store.questionnaireData();\n if (!data) return { current: 0, total: 0 };\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const total = countAllVisibleQuestions(data, sc, qc);\n\n if (viewMode === 'page-per-question') {\n let current = 0;\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n\n for (let i = 0; i < currentSIndex; i++) {\n current += visibleQuestionsForSection(data.sections[i], sc, qc).length;\n }\n current += currentQIndex + 1;\n\n return { current, total };\n }\n\n return { current: 0, total };\n }),\n\n timerText: computed(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n if (!timeLimit) return '';\n\n const elapsed = store.timerElapsed();\n const remaining = Math.max(0, timeLimit - elapsed);\n\n const hours = Math.floor(remaining / 3600);\n const minutes = Math.floor((remaining % 3600) / 60);\n const seconds = remaining % 60;\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n }),\n\n timerWidget: computed<AXPWidgetNode | null>(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n if (!timeLimit) return null;\n\n const widgetNode: AXPWidgetNode = {\n type: 'stopwatch',\n name: 'questionnaire-timer',\n path: 'timer.elapsed',\n options: {\n mode: 'count-down',\n timeLimit: timeLimit,\n format: timeLimit >= 3600 ? 'hh:mm:ss' : 'mm:ss',\n autoStart: true,\n showControls: false,\n },\n mode: 'edit',\n };\n\n return widgetNode;\n }),\n\n validationStrategy: computed<QuestionnaireValidationStrategy>(() => {\n const config = store.config();\n const configValue = config?.validationStrategy;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.validationStrategy;\n return configValue !== undefined\n ? normalizeValidationStrategy(configValue)\n : normalizeValidationStrategy(displaySettingsValue);\n }),\n\n //#endregion\n\n //#region ---- Navigation ----\n\n canNavigateNext: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visible = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visible.length - 1) {\n return true;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n }\n\n return false;\n }),\n\n canNavigatePrevious: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const sections = data.sections;\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentQIndex = store.currentQuestionIndex();\n const currentSIndex = store.currentSectionIndex();\n if (currentQIndex > 0) {\n return true;\n }\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(data.sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n }\n\n return false;\n }),\n\n /**\n * Check if we're on the last step\n */\n isLastStep: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'single-page') {\n // For single-page, we're always on the last step\n return true;\n } else if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return false;\n }\n }\n return true;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visible = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visible.length - 1) {\n return false;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }),\n\n /**\n * Check if all required questions are answered\n */\n areAllRequiredQuestionsAnswered: computed(() => {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return false;\n\n try {\n const contextService = container.contextService;\n contextService.changeEvent();\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n // Only check required questions\n if (!isQuestionnaireItemStaticallyRequired(question.isRequired)) continue;\n\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return false;\n }\n }\n }\n\n return true;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error checking required questions:', error);\n return false;\n }\n }),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n entityService = inject(AXPEntityService),\n toastService = inject(AXToastService),\n translationService = inject(AXTranslationService),\n questionnaireViewerService = inject(AXMQuestionnaireViewerService),\n ) => ({\n //#region ---- Registration ----\n\n registerForm(form: any): void {\n patchState(store, { form });\n },\n\n registerWidgetContainer(container: AXPWidgetContainerComponent): void {\n patchState(store, { widgetContainer: container });\n void this.refreshVisibility();\n },\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n async loadQuestionnaire(id: string, initialAnswers?: Record<string, any>, config?: QuestionnaireViewerConfig): Promise<void> {\n patchState(store, { isLoading: true, error: null, config: config || null });\n\n try {\n const questionnaire = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(id);\n if (!questionnaire) {\n throw new Error('Questionnaire not found');\n }\n\n const structure: QuestionnaireBuilderValue = questionnaire.questions || { sections: [] };\n\n const sectionsWithQuestions: QuestionnaireViewerSection[] = await Promise.all(\n structure.sections.map(async (section, sectionIndex) => {\n const sectionName = persistedSectionName(section, sectionIndex);\n const questions: QuestionnaireViewerQuestion[] = await Promise.all(\n section.items.map(async (item, itemIndex) => {\n const questionDetails = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(item.questionBankItemId)\n .catch(() => null);\n\n const indexBasedPath = `answers.${sectionIndex}-${itemIndex}`;\n const itemKey = persistedItemName(item, itemIndex);\n const answerKey =\n (typeof item.name === 'string' && item.name.trim()) ||\n (questionDetails as Record<string, unknown> | null)?.['name'] ||\n itemKey;\n\n let widgetInterface: any = stripQuestionBankInterfaceMetadata(\n questionDetails?.interface,\n );\n if (widgetInterface) {\n const path = answerKey ? `answers.${answerKey}` : indexBasedPath;\n const name = answerKey || `answer-${sectionIndex}-${itemIndex}`;\n\n // Get existing validations from options or directly from interface\n const existingOptions = widgetInterface.options || {};\n const existingValidations = existingOptions.validations || widgetInterface.validations || [];\n const validations = [...existingValidations];\n if (item.isRequired === true) {\n const hasRequiredValidation = validations.some(v => v.rule === 'required');\n if (!hasRequiredValidation) {\n validations.push({\n rule: 'required',\n message: 'This field is required.',\n });\n }\n }\n\n // Apply readonly mode from config\n const isReadonly = config?.readonly ?? false;\n\n widgetInterface = {\n ...widgetInterface,\n path: path,\n name: name,\n options: {\n ...existingOptions,\n readonly: isReadonly || existingOptions.readonly,\n validations: validations.length > 0 ? validations : undefined,\n },\n };\n }\n\n const attachments = normalizeAttachments(\n (questionDetails as Record<string, unknown> | null)?.['attachments'],\n );\n\n return {\n name: persistedItemName(item, itemIndex),\n questionBankItemId: item.questionBankItemId,\n sectionName,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n hint: mergeQuestionHintForViewer(\n normalizeQuestionHintFromEntityRow(questionDetails),\n parseQuestionHintPartialFromRecord(item as Record<string, unknown>),\n ),\n comment: resolvedCommentPolicyForBuilderItem(item, questionDetails),\n attachments: attachments.length > 0 ? attachments : undefined,\n question: questionDetails\n ? {\n id: questionDetails.id,\n title: questionDetails.title,\n question: questionDetails.question,\n note: questionDetails.note,\n difficulty: questionDetails.difficulty,\n interface: widgetInterface,\n }\n : {\n id: item.questionBankItemId,\n title: 'Question',\n question: undefined,\n note: undefined,\n difficulty: undefined,\n interface: undefined,\n },\n };\n }),\n );\n\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order,\n isVisible: section.isVisible,\n questions: questions.sort((a, b) => a.order - b.order),\n };\n }),\n );\n\n patchState(store, {\n questionnaireData: {\n id: questionnaire.id,\n title: questionnaire.title,\n description: questionnaire.description,\n type: questionnaire.type,\n sections: sectionsWithQuestions.sort((a, b) => a.order - b.order),\n },\n isLoading: false,\n });\n\n // Set initial answers in widget container context if provided\n if (initialAnswers && Object.keys(initialAnswers).length > 0) {\n const container = store.widgetContainer();\n if (container?.contextService) {\n const currentData = container.contextService.data() || {};\n const existingAnswers = (currentData as any).answers || {};\n const mergedData = { ...currentData, answers: { ...existingAnswers, ...initialAnswers } };\n container.contextService.set(mergedData);\n }\n }\n } catch (err: any) {\n patchState(store, {\n error: err.message || 'Failed to load questionnaire',\n isLoading: false,\n });\n }\n },\n\n async loadStructure(structure: QuestionnaireBuilderValue, config?: QuestionnaireViewerConfig, initialAnswers?: Record<string, any>): Promise<void> {\n patchState(store, { isLoading: true, error: null, structure, config: config || null });\n\n try {\n if (!structure.sections || structure.sections.length === 0) {\n patchState(store, {\n questionnaireData: {\n id: 'preview',\n title: 'Preview',\n description: undefined,\n type: 'questionnaire',\n sections: [],\n },\n isLoading: false,\n });\n return;\n }\n\n const sectionsWithQuestions: QuestionnaireViewerSection[] = await Promise.all(\n structure.sections.map(async (section, sectionIndex) => {\n const sectionName = persistedSectionName(section, sectionIndex);\n const questions: QuestionnaireViewerQuestion[] = await Promise.all(\n (section.items || []).map(async (item, itemIndex) => {\n const questionDetails = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(item.questionBankItemId)\n .catch(() => null);\n\n const indexBasedPath = `answers.${sectionIndex}-${itemIndex}`;\n const itemKey = persistedItemName(item, itemIndex);\n const answerKey =\n (typeof item.name === 'string' && item.name.trim()) ||\n (questionDetails as Record<string, unknown> | null)?.['name'] ||\n itemKey;\n\n const rawInterface =\n item.interfaceOverride ?? questionDetails?.interface;\n let widgetInterface: any = stripQuestionBankInterfaceMetadata(rawInterface);\n\n if (widgetInterface) {\n const path = answerKey ? `answers.${answerKey}` : indexBasedPath;\n const name = answerKey || `answer-${sectionIndex}-${itemIndex}`;\n\n // Get existing validations from options or directly from interface\n const existingOptions = widgetInterface.options || {};\n const existingValidations = existingOptions.validations || widgetInterface.validations || [];\n const validations = [...existingValidations];\n if (item.isRequired === true) {\n const hasRequiredValidation = validations.some(v => v.rule === 'required');\n if (!hasRequiredValidation) {\n validations.push({\n rule: 'required',\n options: {\n message: 'This field is required.',\n },\n\n });\n }\n }\n\n // Apply readonly mode from config\n const isReadonly = config?.readonly ?? false;\n\n widgetInterface = {\n ...widgetInterface,\n path: path,\n name: name,\n options: {\n ...existingOptions,\n readonly: isReadonly || existingOptions.readonly,\n validations: validations.length > 0 ? validations : undefined,\n },\n };\n }\n\n const questionData = questionDetails\n ? {\n id: questionDetails.id,\n title: questionDetails.title,\n question: questionDetails.question,\n note: questionDetails.note,\n difficulty: questionDetails.difficulty,\n interface: widgetInterface,\n }\n : {\n id: item.questionBankItemId,\n title: 'Question',\n question: undefined,\n note: undefined,\n difficulty: undefined,\n interface: widgetInterface,\n };\n\n const attachmentsLoadStructure = normalizeAttachments(\n (questionDetails as Record<string, unknown> | null)?.['attachments'],\n );\n\n return {\n name: persistedItemName(item, itemIndex),\n questionBankItemId: item.questionBankItemId,\n sectionName,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n hint: mergeQuestionHintForViewer(\n normalizeQuestionHintFromEntityRow(questionDetails),\n parseQuestionHintPartialFromRecord(item as Record<string, unknown>),\n ),\n comment: resolvedCommentPolicyForBuilderItem(item, questionDetails),\n attachments: attachmentsLoadStructure.length > 0 ? attachmentsLoadStructure : undefined,\n question: questionData,\n };\n }),\n );\n\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order,\n isVisible: section.isVisible,\n questions: questions.sort((a, b) => a.order - b.order),\n };\n }),\n );\n\n patchState(store, {\n questionnaireData: {\n id: 'preview',\n title: 'Preview',\n description: undefined,\n type: 'questionnaire' as const,\n sections: sectionsWithQuestions.sort((a, b) => a.order - b.order),\n },\n isLoading: false,\n });\n\n // Set initial answers in widget container context if provided\n if (initialAnswers && Object.keys(initialAnswers).length > 0) {\n const container = store.widgetContainer();\n if (container?.contextService) {\n const currentData = container.contextService.data() || {};\n const existingAnswers = (currentData as any).answers || {};\n const mergedData = { ...currentData, answers: { ...existingAnswers, ...initialAnswers } };\n container.contextService.set(mergedData);\n }\n }\n } catch (err: any) {\n console.error('[QuestionnaireViewer] Error loading structure:', err);\n patchState(store, {\n error: err.message || 'Failed to load structure',\n isLoading: false,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Validation ----\n\n /**\n * Recomputes async visibility for expression `isVisible` flags (sections and questions).\n */\n async refreshVisibility(): Promise<void> {\n questionnaireViewerVisibilityRefreshSeq += 1;\n const seq = questionnaireViewerVisibilityRefreshSeq;\n const data = store.questionnaireData();\n const structure = store.structure();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) {\n patchState(store, { sectionVisibilityById: {}, questionVisibilityById: {} });\n return;\n }\n const contextData = (container.contextService.data() || {}) as Record<string, unknown>;\n const answers = (contextData['answers'] as Record<string, unknown>) ?? {};\n const sectionMap: Record<string, boolean> = {};\n const questionMap: Record<string, boolean> = {};\n\n for (const section of data.sections) {\n const secVis = await questionnaireViewerService.evaluateQuestionnaireVisibilityFlag(\n section.isVisible,\n answers,\n structure,\n );\n if (seq !== questionnaireViewerVisibilityRefreshSeq) {\n return;\n }\n sectionMap[section.name] = secVis;\n for (const q of section.questions) {\n if (!secVis) {\n questionMap[q.name] = false;\n continue;\n }\n questionMap[q.name] = await questionnaireViewerService.evaluateQuestionnaireVisibilityFlag(\n q.isVisible,\n answers,\n structure,\n );\n if (seq !== questionnaireViewerVisibilityRefreshSeq) {\n return;\n }\n }\n }\n\n const viewMode = store.viewMode();\n const navPatch: { currentSectionIndex?: number; currentQuestionIndex?: number } = {};\n if (viewMode !== 'single-page') {\n let si = store.currentSectionIndex();\n let qi = store.currentQuestionIndex();\n const sections = data.sections;\n\n const sectionIndexOk = (idx: number) =>\n idx >= 0 &&\n idx < sections.length &&\n visibleQuestionsForSection(sections[idx], sectionMap, questionMap).length > 0;\n\n if (!sectionIndexOk(si)) {\n si = firstSectionIndexWithVisibleContent(sections, sectionMap, questionMap);\n qi = 0;\n }\n\n if (viewMode === 'page-per-question') {\n let vis = visibleQuestionsForSection(sections[si], sectionMap, questionMap);\n if (vis.length === 0) {\n const idx = sections.findIndex(\n (sec) => visibleQuestionsForSection(sec, sectionMap, questionMap).length > 0,\n );\n if (idx >= 0) {\n si = idx;\n qi = 0;\n vis = visibleQuestionsForSection(sections[si], sectionMap, questionMap);\n }\n }\n if (vis.length > 0) {\n qi = Math.min(Math.max(0, qi), vis.length - 1);\n } else {\n qi = 0;\n }\n } else {\n qi = 0;\n }\n\n navPatch.currentSectionIndex = si;\n navPatch.currentQuestionIndex = qi;\n }\n\n patchState(store, {\n sectionVisibilityById: sectionMap,\n questionVisibilityById: questionMap,\n ...navPatch,\n });\n },\n\n /**\n * Whether the section should be shown: at least one visible question (section and question `isVisible` rules).\n * Sections with no visible questions are treated as hidden.\n */\n isSectionVisible(section: QuestionnaireViewerSection): boolean {\n return (\n visibleQuestionsForSection(\n section,\n store.sectionVisibilityById(),\n store.questionVisibilityById(),\n ).length > 0\n );\n },\n\n /**\n * Visible questions in a section (respects section and question `isVisible`).\n */\n getVisibleQuestionsInSection(section: QuestionnaireViewerSection): QuestionnaireViewerQuestion[] {\n return visibleQuestionsForSection(\n section,\n store.sectionVisibilityById(),\n store.questionVisibilityById(),\n );\n },\n\n /**\n * Check if a question is visible (section gate + question `isVisible`).\n */\n isQuestionVisible(question: QuestionnaireViewerQuestion): boolean {\n const data = store.questionnaireData();\n if (!data) {\n return true;\n }\n const section = data.sections.find((s) => s.name === question.sectionName);\n if (section && !this.isSectionVisible(section)) {\n return false;\n }\n return resolveVisibilityFlagSync(\n question.isVisible,\n question.name,\n store.questionVisibilityById(),\n );\n },\n\n /**\n * Get visible questions for current page based on view mode\n */\n getVisibleQuestions(): QuestionnaireViewerQuestion[] {\n const data = store.questionnaireData();\n if (!data) {\n return [];\n }\n\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode =\n configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'single-page') {\n const visibleQuestions: QuestionnaireViewerQuestion[] = [];\n for (const section of sections) {\n visibleQuestions.push(...this.getVisibleQuestionsInSection(section));\n }\n return visibleQuestions;\n }\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const currentSection = sections[store.currentSectionIndex()];\n return currentSection ? this.getVisibleQuestionsInSection(currentSection) : [];\n }\n if (viewMode === 'page-per-question') {\n const q = store.currentQuestion();\n return q ? [q] : [];\n }\n\n return [];\n },\n\n /**\n * Validate a single question\n */\n async validateQuestion(question: QuestionnaireViewerQuestion): Promise<string | null> {\n const container = store.widgetContainer();\n if (!container?.contextService) {\n return 'Widget container not available';\n }\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n const widgetPath = question.question.interface?.path;\n\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return 'This field is required.';\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n return 'Comment is required.';\n }\n }\n\n // TODO: Add other validation rules from widget interface\n\n return null;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error validating question:', error);\n return 'Validation error occurred';\n }\n },\n\n /**\n * Validate all visible questions on current page\n */\n async validateCurrentPage(): Promise<QuestionnaireValidationResult> {\n const form = store.form();\n if (!form) {\n console.warn('[QuestionnaireViewer] Form not available for validation');\n return { isValid: true, errors: [] };\n }\n\n // Get visible questions\n const visibleQuestions = this.getVisibleQuestions();\n\n // Get sections for lookup\n const data = store.questionnaireData();\n if (!data) {\n return { isValid: true, errors: [] };\n }\n const sections = data.sections;\n\n // Validate form first to trigger validation (this ensures form state is updated)\n await form.validate();\n\n // Manually validate each visible question\n // The form validation doesn't provide paths in the rules, so we validate manually\n const errors: QuestionnaireValidationError[] = [];\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const question of visibleQuestions) {\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n const section = sections.find((s) => s.name === question.sectionName);\n\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage = await translationService.translateAsync(\n '@acorex:validation.messages.required'\n ) || `${questionTitle} is required`;\n\n // Replace {{ title }} placeholder if present, otherwise use the message as-is\n const finalErrorMessage = errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage;\n\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section?.name,\n sectionTitle: section\n ? resolveMultiLanguageString(section.title, locale)\n : undefined,\n error: finalErrorMessage,\n });\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.comment-required',\n )) || 'A comment is required for this question.';\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section?.name,\n sectionTitle: section\n ? resolveMultiLanguageString(section.title, locale)\n : undefined,\n error: errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage,\n });\n }\n }\n\n // TODO: Add other validation rules from widget interface\n }\n }\n\n patchState(store, { validationErrors: errors });\n\n if (errors.length > 0) {\n const errorMessage = await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.current-page-error'\n ) || `Please complete ${errors.length} required question(s) on this page.`;\n\n toastService.show({\n color: 'danger',\n title: await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.error-title'\n ) || 'Validation Error',\n content: errorMessage,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n /**\n * Validate all questions in entire questionnaire\n */\n async validateAllQuestions(): Promise<QuestionnaireValidationResult> {\n const form = store.form();\n if (!form) {\n return { isValid: true, errors: [] };\n }\n\n const data = store.questionnaireData();\n if (!data) {\n return { isValid: true, errors: [] };\n }\n\n // Validate form first to trigger validation (this ensures form state is updated)\n await form.validate();\n\n // Manually validate all visible questions\n // The form validation doesn't provide paths in the rules, so we validate manually\n const errors: QuestionnaireValidationError[] = [];\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const section of data.sections) {\n for (const question of section.questions) {\n // Only include visible questions\n if (!this.isQuestionVisible(question)) {\n continue;\n }\n\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage = await translationService.translateAsync(\n '@acorex:validation.messages.required'\n ) || `${questionTitle} is required`;\n\n // Replace {{ title }} placeholder if present, otherwise use the message as-is\n const finalErrorMessage = errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage;\n\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section.name,\n sectionTitle: resolveMultiLanguageString(section.title, locale),\n error: finalErrorMessage,\n });\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.comment-required',\n )) || 'A comment is required for this question.';\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section.name,\n sectionTitle: resolveMultiLanguageString(section.title, locale),\n error: errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage,\n });\n }\n }\n\n // TODO: Add other validation rules from widget interface\n }\n }\n }\n\n patchState(store, { validationErrors: errors });\n\n if (errors.length > 0) {\n const errorMessage = await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.all-questions-error'\n ) || `Please complete ${errors.length} required question(s) in the questionnaire.`;\n\n toastService.show({\n color: 'danger',\n title: await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.error-title'\n ) || 'Validation Error',\n content: errorMessage,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n //#endregion\n\n //#region ---- Navigation ----\n\n async navigateNext(): Promise<boolean> {\n if (store.validationStrategy() === 'step') {\n const validationResult = await this.validateCurrentPage();\n if (!validationResult.isValid) {\n return false;\n }\n }\n\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visibleHere = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visibleHere.length - 1) {\n patchState(store, { currentQuestionIndex: currentQIndex + 1 });\n return true;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n const vis = visibleQuestionsForSection(sections[s], sc, qc);\n if (vis.length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n }\n\n return false;\n },\n\n async navigatePrevious(): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentQIndex = store.currentQuestionIndex();\n const currentSIndex = store.currentSectionIndex();\n\n if (currentQIndex > 0) {\n patchState(store, { currentQuestionIndex: currentQIndex - 1 });\n return true;\n }\n for (let s = currentSIndex - 1; s >= 0; s--) {\n const vis = visibleQuestionsForSection(sections[s], sc, qc);\n if (vis.length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: vis.length - 1,\n });\n return true;\n }\n }\n }\n\n return false;\n },\n\n /**\n * Check if current section is valid (without showing toast)\n */\n async isCurrentSectionValid(): Promise<boolean> {\n const form = store.form();\n if (!form) {\n return true;\n }\n\n // Get visible questions\n const visibleQuestions = this.getVisibleQuestions();\n\n // Get sections for lookup\n const data = store.questionnaireData();\n if (!data) {\n return true;\n }\n const sections = data.sections;\n\n // Validate form first to trigger validation\n await form.validate();\n\n // Manually validate each visible question\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const question of visibleQuestions) {\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return false;\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n return false;\n }\n }\n }\n }\n\n return true;\n },\n\n /**\n * Check if a section can be navigated to\n */\n async isSectionNavigable(sectionIndex: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (sectionIndex < 0 || sectionIndex >= sections.length) {\n return false;\n }\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n if (visibleQuestionsForSection(sections[sectionIndex], sc, qc).length === 0) {\n return false;\n }\n\n // If navigating to current section, always allowed\n if (sectionIndex === store.currentSectionIndex()) {\n return true;\n }\n\n // End strategy allows free section navigation.\n if (store.validationStrategy() === 'end') {\n return true;\n }\n\n // Check if current section is valid\n return await this.isCurrentSectionValid();\n },\n\n async navigateToSection(index: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (index < 0 || index >= sections.length) {\n return false;\n }\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n if (visibleQuestionsForSection(sections[index], sc, qc).length === 0) {\n return false;\n }\n\n // Check if navigation is allowed\n const canNavigate = await this.isSectionNavigable(index);\n if (!canNavigate) {\n if (store.validationStrategy() === 'step') {\n await this.validateCurrentPage();\n }\n return false;\n }\n\n patchState(store, {\n currentSectionIndex: index,\n currentQuestionIndex: 0,\n });\n return true;\n },\n\n async navigateToQuestion(sectionIndex: number, questionIndex: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (sectionIndex < 0 || sectionIndex >= sections.length) {\n return false;\n }\n\n const section = sections[sectionIndex];\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const visible = visibleQuestionsForSection(section, sc, qc);\n if (questionIndex < 0 || questionIndex >= visible.length) {\n return false;\n }\n\n if (store.validationStrategy() === 'step') {\n const validationResult = await this.validateCurrentPage();\n if (!validationResult.isValid) {\n return false;\n }\n }\n\n patchState(store, {\n currentSectionIndex: sectionIndex,\n currentQuestionIndex: questionIndex,\n });\n return true;\n },\n\n //#endregion\n\n //#region ---- Answers ----\n\n getAllAnswers(): Record<string, any> {\n const container = store.widgetContainer();\n if (!container?.contextService) return {};\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n // Extract answers from context data - answers are stored under 'answers' property\n return (contextData as any).answers || {};\n } catch (error) {\n console.error('[QuestionnaireViewer] Error getting all answers:', error);\n return {};\n }\n },\n\n getQuestionsWithAnswers(): Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n question: QuestionnaireViewerQuestion;\n }> {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return [];\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const questionsWithAnswers: Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n question: QuestionnaireViewerQuestion;\n }> = [];\n\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n const answer = widgetPath ? get(contextData, widgetPath) : undefined;\n\n const n = question.question.note;\n const notePlain =\n n != null && n !== ''\n ? stripHtmlToPlain(resolveMultiLanguageString(n, locale)) || undefined\n : undefined;\n\n questionsWithAnswers.push({\n name: question.name,\n questionBankItemId: question.questionBankItemId,\n sectionName: section.name,\n sectionOrder: section.order,\n sectionTitle: section.title,\n sectionDescription: section.description,\n title: resolveQuestionBankItemPlainLabel(question.question, locale),\n note: notePlain,\n answer: answer,\n isRequired: question.isRequired,\n question,\n });\n }\n }\n\n return questionsWithAnswers;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error getting questions with answers:', error);\n return [];\n }\n },\n\n /**\n * Get count of unanswered required questions in a section\n * Used for badge display in side-menu view\n */\n getSectionUnansweredRequiredCount(sectionName: string): number {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return 0;\n\n try {\n const contextService = container.contextService;\n contextService.changeEvent();\n const contextData = contextService.data() || {};\n let unansweredCount = 0;\n\n const section = data.sections.find((s) => s.name === sectionName);\n if (!section) return 0;\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n // Only count required questions\n if (!isQuestionnaireItemStaticallyRequired(question.isRequired)) continue;\n\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n unansweredCount++;\n }\n }\n\n return unansweredCount;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error counting unanswered required questions:', error);\n return 0;\n }\n },\n\n async submit(): Promise<{ success: boolean; answers: Record<string, any>; errors?: QuestionnaireValidationError[] }> {\n const validationResult = await this.validateAllQuestions();\n if (!validationResult.isValid) {\n return {\n success: false,\n answers: this.getAllAnswers(),\n errors: validationResult.errors,\n };\n }\n\n return {\n success: true,\n answers: this.getAllAnswers(),\n };\n },\n\n //#endregion\n\n //#region ---- Timer ----\n\n startTimer(): void {\n this.stopTimer();\n\n patchState(store, { timerElapsed: 0 });\n const interval = setInterval(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n const elapsed = store.timerElapsed();\n\n if (timeLimit && elapsed >= timeLimit) {\n this.stopTimer();\n // TODO: Handle time limit reached\n } else {\n patchState(store, { timerElapsed: elapsed + 1 });\n }\n }, 1000);\n\n patchState(store, { timerInterval: interval });\n },\n\n stopTimer(): void {\n const interval = store.timerInterval();\n if (interval) {\n clearInterval(interval);\n patchState(store, { timerInterval: null });\n }\n },\n\n updateTimerElapsed(value: number): void {\n patchState(store, { timerElapsed: value });\n },\n\n //#endregion\n }),\n ),\n);\n\n//#endregion","//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXAlertModule } from '@acorex/components/alert';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPResolveMultiLanguageStringPipe, containsHtmlMarkup } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { FormsModule } from '@angular/forms';\nimport { isQuestionnaireItemRequiredForDisplay } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { getQuestionAnswerCommentStoragePath } from '../../../../entities/question-bank-item/question-comment.types';\nimport type { AXMAssessmentQuestionHintConfigShown } from '../../../../entities/question-bank-item/question-hint.types';\nimport { AXMQuestionnaireViewerViewModel } from '../../questionnaire-viewer.viewmodel';\nimport { QuestionnaireViewerQuestion, QuestionnaireViewerAttachment } from '../../questionnaire-viewer.types';\nimport { get } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable Question Component\n * Displays a single question with its widget interface\n */\n@Component({\n selector: 'axm-questionnaire-viewer-question',\n template: `\n <div\n class=\"__question-item\"\n [class.__answered]=\"isAnswered()\"\n [class.__view-mode]=\"mode() === 'view'\"\n >\n <div class=\"__question-header\">\n @if (showQuestionNumbers() || (showQuestionCounter() && currentPosition())) {\n <div class=\"__question-header-left\">\n @if (showQuestionNumbers()) {\n <span class=\"__question-number\">{{ sectionOrder() }}.{{ questionIndex() }}</span>\n }\n @if (showQuestionCounter() && currentPosition()) {\n <span class=\"__question-counter\">\n Question {{ currentPosition()!.current }} of {{ currentPosition()!.total }}\n </span>\n }\n </div>\n }\n <div class=\"__question-header-right\">\n <div class=\"__question-title-block ax-flex ax-flex-col ax-gap-1 ax-flex-1 ax-min-w-0 ax-items-stretch\">\n @if (question().question.question; as qBody) {\n @if (qBody !== '' && (qBody | axpResolveMultiLanguageString).trim().length > 0) {\n @if (containsHtmlMarkup((qBody | axpResolveMultiLanguageString).trim())) {\n <div\n class=\"__question-title __question-title--rich\"\n [innerHTML]=\"qBody | axpResolveMultiLanguageString | safe: 'html'\"\n ></div>\n } @else {\n <h3 class=\"__question-title\">{{ (qBody | axpResolveMultiLanguageString).trim() }}</h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | axpResolveMultiLanguageString }}\n </h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | axpResolveMultiLanguageString }}\n </h3>\n }\n </div>\n @if (isAnswered()) {\n <span class=\"__answered-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.answered' | translate | async\n }}</span>\n } @else if (showRequiredBadge()) {\n <span class=\"__required-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.required' | translate | async\n }}</span>\n }\n </div>\n </div>\n <!-- Question Note -->\n @if (question().question.note; as noteRaw) {\n @if (noteRaw !== '' && (noteRaw | axpResolveMultiLanguageString).trim()) {\n <div\n class=\"__question-note\"\n [innerHTML]=\"noteRaw | axpResolveMultiLanguageString | safe: 'html'\"\n ></div>\n }\n }\n <!-- Question Widget -->\n <div class=\"__question-widget\">\n @if (question().question.interface) {\n <ng-container axp-widget-renderer [node]=\"question().question.interface\" [mode]=\"mode()\"></ng-container>\n } @else {\n <p class=\"__widget-placeholder\">No widget interface configured</p>\n }\n </div>\n\n @if (hintShown(); as hShown) {\n @if (hShown.content; as hintRaw) {\n @if (hintRaw !== '' && (hintRaw | axpResolveMultiLanguageString).trim()) {\n <ax-alert [color]=\"hintModeClass()\" role=\"note\">\n <!-- <ax-title>{{ '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint.title' | translate | async }}</ax-title> -->\n <ax-icon ></ax-icon>\n <ax-content>\n <div [innerHTML]=\"hintRaw | axpResolveMultiLanguageString | safe: 'html'\"></div>\n </ax-content>\n </ax-alert>\n }\n }\n }\n\n @if (question().comment.enabled) {\n @if (mode() === 'view') {\n @if (respondentCommentText().trim(); as commentView) {\n <div class=\"__question-comment __question-comment--readonly\">\n <p class=\"__question-comment-text\">{{ commentView }}</p>\n </div>\n }\n } @else {\n <div class=\"__question-comment\">\n <ax-text-area\n [rows]=\"2\"\n [ngModel]=\"respondentCommentText()\"\n (onValueChanged)=\"onRespondentCommentChanged($event)\"\n [placeholder]=\"\n '@assessment-management:questionnaires.components.questionnaire-viewer.comment.placeholder' | translate | async\n \"\n ></ax-text-area>\n </div>\n }\n }\n\n @if (questionAttachments().length > 0) {\n <div class=\"__attachments\">\n <span class=\"__attachments-label\">{{ '@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title' | translate | async }}:</span>\n <ul class=\"__attachments-list\">\n @for (att of questionAttachments(); track att.id) {\n <li>\n <a class=\"__attachment-link\" href=\"#\" (click)=\"openAttachment($event, att)\" role=\"button\">\n <i class=\"fa-light fa-paperclip\"></i>\n {{ att.name || att.id }}\n </a>\n </li>\n }\n </ul>\n </div>\n }\n </div>\n `,\n styleUrl: './questionnaire-viewer-question.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXAlertModule,\n AXDecoratorModule,\n AXSafePipe,\n AXPResolveMultiLanguageStringPipe,\n AXTextAreaModule,\n AXFormModule,\n FormsModule,\n ],\n encapsulation: ViewEncapsulation.None,\n\n})\nexport class AXMQuestionnaireViewerQuestionComponent {\n //#region ---- Services & Dependencies ----\n\n /** Exposed for template `@if (containsHtmlMarkup(...))`. */\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel, { optional: true });\n private readonly fileStorageService = inject(AXPFileStorageService, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n question = input.required<QuestionnaireViewerQuestion>();\n\n /** Context data when used outside questionnaire viewer (e.g. review step). Used for isAnswered when vm is null. */\n contextData = input<Record<string, any> | undefined>(undefined);\n sectionOrder = input.required<number>();\n questionIndex = input.required<number>();\n showQuestionNumbers = input<boolean>(true);\n showQuestionCounter = input<boolean>(false);\n currentPosition = input<{ current: number; total: number } | undefined>(undefined);\n\n /** Widget render mode: 'edit' for answering, 'view' for read-only display (e.g. review step). */\n mode = input<'edit' | 'view'>('edit');\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Non-off hint for the template (narrows discriminated union for `content`). */\n hintShown = computed((): AXMAssessmentQuestionHintConfigShown | null => {\n const h = this.question()?.hint;\n if (!h || h.mode === 'off') {\n return null;\n }\n return h;\n });\n\n /**\n * Map hint mode to CSS modifier class (info, warning, danger, success, neutral).\n */\n hintModeClass = computed((): string => {\n const hShown = this.hintShown();\n if (!hShown) {\n return 'default ';\n }\n const mode = hShown.mode;\n switch (mode) {\n case 'info': return 'primary';\n case 'warning': return 'warning';\n case 'danger': return 'danger';\n case 'success': return 'success';\n case 'neutral': return 'default';\n default: return 'default';\n }\n });\n\n /** Show \"Required\" when statically required or when a required expression is configured. */\n showRequiredBadge = computed(() => isQuestionnaireItemRequiredForDisplay(this.question().isRequired));\n\n /**\n * Check if question is answered\n */\n isAnswered = computed(() => {\n const question = this.question();\n const contextDataInput = this.contextData();\n const container = this.vm?.widgetContainer();\n const data = contextDataInput ?? container?.contextService?.data() ?? {};\n if (!question || !question.question.interface?.path) return false;\n\n try {\n const widgetPath = question.question.interface.path;\n const value = get(data, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n return !isEmpty;\n } catch (error) {\n console.error('[QuestionnaireViewerQuestion] Error checking if answered:', error);\n return false;\n }\n });\n\n /** Attachments from question bank item to show as access links. */\n questionAttachments = computed((): QuestionnaireViewerAttachment[] => {\n const q = this.question();\n return q?.attachments ?? [];\n });\n\n /**\n * Storage path for respondent comment text (`answers.comments.<questionItemName>`).\n */\n private respondentCommentPath = computed(() => getQuestionAnswerCommentStoragePath(this.question().name));\n\n /**\n * Current respondent comment from session context (when viewer is active).\n */\n respondentCommentText = computed((): string => {\n const path = this.respondentCommentPath();\n const ctxData = this.vm?.widgetContainer()?.contextService?.data() ?? this.contextData();\n if (!path || !ctxData) return '';\n const v = get(ctxData as Record<string, unknown>, path);\n if (v == null) return '';\n return typeof v === 'string' ? v : String(v);\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /**\n * Persists respondent comment into the questionnaire session context.\n */\n protected onRespondentCommentChanged(e: AXValueChangedEvent<string | undefined>): void {\n if (this.mode() === 'view') {\n return;\n }\n const cs = this.vm?.widgetContainer()?.contextService;\n const path = this.respondentCommentPath();\n if (!cs || !path) {\n return;\n }\n const next = (e.value as string | undefined) ?? '';\n cs.update(path, next);\n }\n\n /**\n * Open/download attachment using the same approach as axp-file-list (file-uploader):\n * - If storage returns a URL: use an anchor with href + target _blank + programmatic click.\n * - If storage returns binary only: create object URL from blob and trigger download.\n * Avoids window.open() which can open an empty tab when url is undefined.\n */\n async openAttachment(event: Event, att: QuestionnaireViewerAttachment): Promise<void> {\n event.preventDefault();\n if (!this.fileStorageService || !att?.id) return;\n try {\n const info = await this.fileStorageService.getInfo(att.id);\n const fileName = att.name ?? (info as { name?: string }).name ?? 'download';\n\n if (info && (info as { binary?: Blob }).binary instanceof Blob) {\n const blob = (info as { binary: Blob }).binary;\n this.triggerDownload(blob, fileName);\n return;\n }\n if (info && typeof (info as { url?: string }).url === 'string' && (info as { url: string }).url) {\n const url = (info as { url: string }).url;\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n return;\n }\n } catch (err) {\n console.error('[QuestionnaireViewerQuestion] Error opening attachment:', att.id, err);\n }\n }\n\n /**\n * Trigger file download from blob (same as file-list triggerDownload).\n */\n private triggerDownload(blob: Blob, fileName: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport {\n AXPResolveMultiLanguageStringPipe,\n containsHtmlMarkup,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Section title and description for questionnaire viewer layouts.\n * Resolves {@link AXPMultiLanguageString} for the active (or explicit) locale.\n */\n@Component({\n selector: 'axm-questionnaire-viewer-section-header',\n template: `\n <div [class]=\"headerSectionClass()\">\n <h2 [class]=\"titleHeadingClass()\">\n {{ title() | axpResolveMultiLanguageString: locale() }}\n </h2>\n @if (description(); as desc) {\n @if ((desc | axpResolveMultiLanguageString: locale()).trim().length > 0) {\n @if (containsHtmlMarkup((desc | axpResolveMultiLanguageString: locale()).trim())) {\n <div\n class=\"__section-description __section-description--rich\"\n [innerHTML]=\"desc | axpResolveMultiLanguageString: locale() | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__section-description\">\n {{ (desc | axpResolveMultiLanguageString: locale()).trim() }}\n </p>\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AXPResolveMultiLanguageStringPipe],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-section-header ax-block' },\n styleUrl: './questionnaire-viewer-section-header.component.scss',\n})\nexport class AXMQuestionnaireViewerSectionHeaderComponent {\n //#region ---- Inputs ----\n\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n title = input.required<AXPMultiLanguageString>();\n\n description = input<AXPMultiLanguageString | undefined>();\n\n /** When set, resolves strings for this locale instead of the active app language. */\n locale = input<string | undefined>(undefined);\n\n /**\n * Typography for the section title.\n * - `lg`: matches page-per-group / side-menu main heading\n * - `md`: matches single-page / one-question-per-page density\n */\n titleSize = input<'lg' | 'md'>('lg');\n\n /**\n * Optional margin below the header block (parent layouts vary).\n */\n marginBottom = input<'none' | 'sm' | 'md'>('none');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly titleHeadingClass = computed(() =>\n this.titleSize() === 'lg' ? '__section-title-lg' : '__section-title-md',\n );\n\n protected readonly headerSectionClass = computed(() => {\n const parts = ['__section-header'];\n if (this.marginBottom() === 'sm') {\n parts.push('__mb-sm');\n } else if (this.marginBottom() === 'md') {\n parts.push('__mb-md');\n }\n return parts.join(' ');\n });\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Single Page View Component\n * Displays all sections and questions on a single page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-single-page-view',\n template: `\n @for (section of vm.sections(); track section.name) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__single-page-section\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\">\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'md'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\">\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./single-page-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerSinglePageViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n\n //#endregion\n\n //#region ---- Sticky parent initialization ----\n\n constructor() {\n afterNextRender(() => {\n this.stickyParent.set(this.findScrollParent(this.host.nativeElement));\n });\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Page Per Group View Component\n * Displays one section (group) per page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-page-per-group-view',\n template: `\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__page-section\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\">\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\">\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./page-per-group-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerPagePerGroupViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n\n //#endregion\n\n constructor() {\n afterNextRender(() => {\n this.stickyParent.set(this.findScrollParent(this.host.nativeElement));\n });\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Page Per Question View Component\n * Displays one question per page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-page-per-question-view',\n template: `\n @if (vm.currentQuestion(); as question) {\n <div class=\"__page-question\">\n @if (vm.currentSection(); as currentSection) {\n <axm-questionnaire-viewer-section-header\n [title]=\"currentSection.title\"\n [description]=\"currentSection.description\"\n [titleSize]=\"'md'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n }\n\n <axm-questionnaire-viewer-question\n class=\"ax-mt-8\"\n [question]=\"question\"\n [sectionOrder]=\"vm.currentSectionIndex() + 1\"\n [questionIndex]=\"vm.currentQuestionIndex() + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"vm.showQuestionCounter()\"\n [currentPosition]=\"vm.currentQuestionPosition()\">\n </axm-questionnaire-viewer-question>\n </div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styles: [`\n axm-questionnaire-viewer-page-per-question-view {\n @apply ax-flex ax-flex-col ax-gap-4 ax-p-4;\n @apply ax-lightest-surface ax-flex-shrink-0;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerPagePerQuestionViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n //#endregion\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXResizableDirective } from '@acorex/cdk/resizable';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTabsComponent, AXTabsModule } from '@acorex/components/tabs';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPDeviceService, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Side Menu View Component\n * Displays sections in a left sidebar (tabs) and all questions from selected section on the right\n */\n@Component({\n selector: 'axm-questionnaire-viewer-side-menu-view',\n template: `\n <div class=\"__side-menu-container\">\n <!-- Desktop Sidebar (Large screens) -->\n @if (deviceService.isLarge()) {\n <div class=\"__desktop-sidebar\" [axResizable]=\"true\">\n <ax-tabs class=\"__sidebar-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (sectionIndex of vm.sectionIndicesWithVisibleContent(); track sectionIndex) {\n <ax-tab-item\n [text]=\"vm.sections()[sectionIndex].title | axpResolveMultiLanguageString\"\n (onClick)=\"handleSectionClick(sectionIndex)\"\n [disabled]=\"isSectionDisabled(sectionIndex)\"\n >\n @if (getSectionBadgeCount(vm.sections()[sectionIndex].name) > 0) {\n <ax-badge\n [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\"\n [color]=\"'danger'\"\n >\n </ax-badge>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n\n <!-- Mobile/Tablet: Drawer Container -->\n @if (deviceService.isSmall() || deviceService.isMedium()) {\n <ax-drawer-container class=\"__drawer-container\">\n <!-- Sidebar Drawer (Mobile) -->\n <ax-drawer\n #sidebarDrawer\n [location]=\"'start'\"\n [mode]=\"'overlay'\"\n [collapsed]=\"sidebarDrawerCollapsed()\"\n [closeOnBackdropClick]=\"true\"\n (onBackdropClick)=\"sidebarDrawerCollapsed.set(true)\"\n class=\"__sidebar-drawer ax-w-[250px]\"\n >\n <ax-content class=\"__sidebar-content\">\n <ax-tabs class=\"__sidebar-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (sectionIndex of vm.sectionIndicesWithVisibleContent(); track sectionIndex) {\n <ax-tab-item\n [text]=\"vm.sections()[sectionIndex].title | axpResolveMultiLanguageString\"\n (onClick)=\"handleSectionClick(sectionIndex)\"\n [active]=\"vm.currentSectionIndex() === sectionIndex\"\n [disabled]=\"isSectionDisabled(sectionIndex)\"\n >\n @if (getSectionBadgeCount(vm.sections()[sectionIndex].name) > 0) {\n <ax-badge\n [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\"\n [color]=\"'danger'\"\n >\n </ax-badge>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </ax-content>\n </ax-drawer>\n\n <!-- Main Content (Mobile) -->\n <ax-content class=\"__main-content\">\n <!-- Questions Content -->\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n @if (stickyParent(); as parent) {\n <div class=\"__mobile-header-row\" [axpSticky]=\"'--stuck'\" [stickyParent]=\"parent\" [stickyOffset]=\"0\">\n <div class=\"__mobile-menu-button\">\n <ax-button look=\"blank\" (onClick)=\"sidebarDrawerCollapsed.set(!sidebarDrawerCollapsed())\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-bars\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\"\n >\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-container\">\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\"\n >\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n </ax-content>\n </ax-drawer-container>\n } @else {\n <!-- Desktop Main Content -->\n <div class=\"__main-content\">\n <!-- Questions Content -->\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__questions-container\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\"\n >\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\"\n >\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\"\n >\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n `,\n styleUrl: './side-menu-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMQuestionnaireViewerQuestionComponent,\n AXMQuestionnaireViewerSectionHeaderComponent,\n AXPResolveMultiLanguageStringPipe,\n AXTabsModule,\n AXBadgeModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n AXResizableDirective,\n AXButtonModule,\n AXDecoratorModule,\n AXPStickyDirective,\n ],\n})\nexport class AXMQuestionnaireViewerSideMenuViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly host = inject(ElementRef<HTMLElement>);\n protected readonly sidebarDrawerCollapsed = signal<boolean>(true);\n protected readonly sectionNavigabilityCache = signal<Map<number, boolean>>(new Map());\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n protected readonly tabRef = viewChild(AXTabsComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n afterNextRender(() => {\n const mainContent = this.host.nativeElement.querySelector('.__main-content') as HTMLElement | null;\n const resolvedStickyParent =\n this.findScrollParent(mainContent) ?? this.findScrollParent(this.host.nativeElement) ?? mainContent;\n this.stickyParent.set(resolvedStickyParent);\n });\n\n effect(() => {\n this.tabRef()?.select(this.vm.currentSectionIndex());\n });\n\n // Update navigability cache when validation state changes\n effect(async () => {\n const sections = this.vm.sections();\n const currentIndex = this.vm.currentSectionIndex();\n const validateBeforeNav = this.vm.validationStrategy() === 'step';\n\n // Only check if validation is enabled\n if (validateBeforeNav && sections.length > 0) {\n const cache = new Map<number, boolean>();\n\n for (let i = 0; i < sections.length; i++) {\n if (i === currentIndex) {\n cache.set(i, true); // Current section is always navigable\n } else {\n const navigable = await this.vm.isSectionNavigable(i);\n cache.set(i, navigable);\n }\n }\n\n this.sectionNavigabilityCache.set(cache);\n } else {\n // If validation is disabled, all sections are navigable\n const cache = new Map<number, boolean>();\n sections.forEach((_, i) => cache.set(i, true));\n this.sectionNavigabilityCache.set(cache);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle section tab click\n */\n protected async handleSectionClick(sectionIndex: number): Promise<void> {\n await this.vm.navigateToSection(sectionIndex);\n // Close drawer on mobile after selection\n if (this.deviceService.isSmall() || this.deviceService.isMedium()) {\n this.sidebarDrawerCollapsed.set(true);\n }\n }\n\n /**\n * Get badge count for section (unanswered required questions)\n */\n protected getSectionBadgeCount(sectionName: string): number {\n this.vm.sectionVisibilityById();\n this.vm.questionVisibilityById();\n return this.vm.getSectionUnansweredRequiredCount(sectionName);\n }\n\n /**\n * Check if section tab should be disabled\n */\n protected isSectionDisabled(sectionIndex: number): boolean {\n this.vm.sectionVisibilityById();\n this.vm.questionVisibilityById();\n\n const sections = this.vm.sections();\n const section = sections[sectionIndex];\n if (section && !this.vm.isSectionVisible(section)) {\n return true;\n }\n\n const currentIndex = this.vm.currentSectionIndex();\n\n // Current section is never disabled\n if (sectionIndex === currentIndex) {\n return false;\n }\n\n // If validation is disabled, no tabs are disabled\n const validateBeforeNav = this.vm.validationStrategy() === 'step';\n if (!validateBeforeNav) {\n return false;\n }\n\n // Check cache\n const cache = this.sectionNavigabilityCache();\n return cache.has(sectionIndex) ? !cache.get(sectionIndex)! : false;\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerViewModel } from '../../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerSinglePageViewComponent } from '../../views/single-page-view.component';\nimport { AXMQuestionnaireViewerPagePerGroupViewComponent } from '../../views/page-per-group-view.component';\nimport { AXMQuestionnaireViewerPagePerQuestionViewComponent } from '../../views/page-per-question-view.component';\nimport { AXMQuestionnaireViewerSideMenuViewComponent } from '../../views/side-menu-view.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Questionnaire Viewer Component\n * Renders a questionnaire for viewing/answering with configurable display modes\n */\n@Component({\n selector: 'axm-questionnaire-viewer',\n templateUrl: './viewer-container.component.html',\n styleUrl: './viewer-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXFormModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n // View components\n AXMQuestionnaireViewerSinglePageViewComponent,\n AXMQuestionnaireViewerPagePerGroupViewComponent,\n AXMQuestionnaireViewerPagePerQuestionViewComponent,\n AXMQuestionnaireViewerSideMenuViewComponent,\n ],\n providers: [AXMQuestionnaireViewerViewModel],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-questionnaire-viewer',\n },\n})\nexport class AXMQuestionnaireViewerComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly translationService = inject(AXTranslationService);\n\n /**\n * Layout direction from the active UI language so question layout and widgets mirror correctly in RTL.\n */\n protected readonly layoutDirection = computed((): 'ltr' | 'rtl' => {\n const lang = this.translationService.getActiveLang?.() ?? 'en-US';\n const primary = lang.split(/[-_]/)[0]?.toLowerCase() ?? 'en';\n const rtlPrimaries = new Set(['ar', 'fa', 'he', 'ur', 'ps', 'sd', 'ug', 'dv', 'yi', 'ku', 'ckb']);\n return rtlPrimaries.has(primary) ? 'rtl' : 'ltr';\n });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /**\n * Questionnaire ID to load and display (required if structure is not provided)\n */\n questionnaireId = input<string | undefined>(undefined);\n\n /**\n * Structure data for preview mode (used when questionnaireId is not provided)\n */\n structure = input<QuestionnaireBuilderValue | undefined>(undefined);\n\n /**\n * Viewer configuration\n * Note: If properties are undefined, displaySettings from structure will be used\n */\n config = input<QuestionnaireViewerConfig | undefined>(undefined);\n\n /**\n * Initial answers to pre-fill the questionnaire\n */\n initialAnswers = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when answers change\n */\n answersChanged = output<Record<string, any>>();\n\n /**\n * Emitted when a question is answered\n */\n questionAnswered = output<{ name: string; value: any }>();\n\n //#endregion\n\n //#region ---- View References ----\n\n /**\n * Form reference for validation\n */\n protected form = viewChild<AXFormComponent>('form');\n\n /**\n * Widget container reference for context access\n */\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Register form and widget container when available\n effect(() => {\n const form = this.form();\n if (form) {\n this.vm.registerForm(form);\n }\n });\n\n effect(() => {\n const container = this.widgetContainer();\n if (container) {\n this.vm.registerWidgetContainer(container);\n }\n });\n\n // Load questionnaire when ID or structure changes\n effect(() => {\n const id = this.questionnaireId();\n const structure = this.structure();\n const config = this.config();\n const initialAnswers = this.initialAnswers();\n\n if (id) {\n this.vm.loadQuestionnaire(id, initialAnswers, config);\n } else if (structure) {\n if (structure.sections && structure.sections.length > 0) {\n this.vm.loadStructure(structure, config, initialAnswers);\n } else {\n // Structure exists but has no sections - set empty state\n this.vm.loadStructure({ sections: [] }, config, initialAnswers);\n }\n }\n });\n\n // Start timer if enabled\n effect(() => {\n const shouldShowTimer = this.vm.showTimer();\n const timeLimit = this.vm.timerTimeLimit();\n\n if (shouldShowTimer && timeLimit) {\n this.vm.startTimer();\n } else {\n this.vm.stopTimer();\n }\n });\n\n // Re-evaluate expression `isVisible` when answers / context change\n effect(() => {\n this.vm.questionnaireData();\n const container = this.widgetContainer();\n container?.contextService?.changeEvent();\n void this.vm.refreshVisibility();\n });\n }\n\n //#endregion\n\n //#region ---- Public API - State Access ----\n\n /**\n * Get viewmodel instance (for accessing computed properties)\n */\n get viewmodel() {\n return this.vm;\n }\n\n /**\n * Check if can navigate previous\n */\n get canNavigatePrevious(): boolean {\n return this.vm.canNavigatePrevious();\n }\n\n /**\n * Check if can navigate next\n */\n get canNavigateNext(): boolean {\n return this.vm.canNavigateNext();\n }\n\n /**\n * Get current view mode\n */\n get viewMode(): 'single-page' | 'page-per-group' | 'page-per-question' | 'side-menu' {\n return this.vm.viewMode();\n }\n\n /**\n * Check if we're on the last step\n */\n get isLastStep(): boolean {\n return this.vm.isLastStep();\n }\n\n /**\n * Check if all required questions are answered\n */\n get areAllRequiredQuestionsAnswered(): boolean {\n return this.vm.areAllRequiredQuestionsAnswered();\n }\n\n //#endregion\n\n //#region ---- Public API Methods ----\n\n /**\n * Navigate to next question/section\n * Validates current page before navigating\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateNext(): Promise<boolean> {\n return await this.vm.navigateNext();\n }\n\n /**\n * Navigate to previous question/section\n * @returns true if navigation succeeded\n */\n async navigatePrevious(): Promise<boolean> {\n return await this.vm.navigatePrevious();\n }\n\n /**\n * Navigate to specific section\n * Validates current page before navigating\n * @param index Section index (0-based)\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateToSection(index: number): Promise<boolean> {\n return await this.vm.navigateToSection(index);\n }\n\n /**\n * Navigate to specific question\n * Validates current page before navigating\n * @param sectionIndex Section index (0-based)\n * @param questionIndex Question index (0-based)\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateToQuestion(sectionIndex: number, questionIndex: number): Promise<boolean> {\n return await this.vm.navigateToQuestion(sectionIndex, questionIndex);\n }\n\n /**\n * Validate all visible questions on current page\n * @returns Validation result with errors\n */\n async validateCurrentPage() {\n return await this.vm.validateCurrentPage();\n }\n\n /**\n * Validate all questions in entire questionnaire\n * @returns Validation result with errors\n */\n async validateAllQuestions() {\n return await this.vm.validateAllQuestions();\n }\n\n /**\n * Get all answers from context\n */\n getAllAnswers(): Record<string, any> {\n return this.vm.getAllAnswers();\n }\n\n /**\n * Get questions with their corresponding answers\n */\n getQuestionsWithAnswers() {\n return this.vm.getQuestionsWithAnswers();\n }\n\n /**\n * Get context data for review step (answers at widget paths).\n * Must be called before transitioning to review while viewer is still rendered.\n */\n getReviewContext(): Record<string, any> {\n const container = this.vm.widgetContainer();\n return container?.contextService?.data() ?? {};\n }\n\n /**\n * Submit questionnaire\n * Validates all questions before submitting\n * @returns Submit result with success status, answers, and errors if any\n */\n async submit() {\n return await this.vm.submit();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle context changes for auto-save\n */\n protected handleContextChanged(): void {\n const answers = this.vm.getAllAnswers();\n this.answersChanged.emit(answers);\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-widgets-container #widgetContainer [attr.dir]=\"layoutDirection()\" [context]=\"{}\"\n (onContextChanged)=\"handleContextChanged()\">\n @if (vm.isLoading()) {\n <div class=\"__loading\">\n <axp-state-message icon=\"fa-light fa-spinner fa-spin\"\n [title]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async) || ''\"\n [description]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.loading.description' | translate | async) || ''\">\n </axp-state-message>\n </div>\n } @else if (vm.error()) {\n <div class=\"__error\">\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.error.title' | translate | async) || ''\"\n [description]=\"vm.error() || ''\">\n </axp-state-message>\n </div>\n } @else if (vm.questionnaireData()) {\n <div class=\"__questionnaire-container\">\n <ax-form #form>\n @if (vm.viewMode() === 'single-page') {\n <axm-questionnaire-viewer-single-page-view></axm-questionnaire-viewer-single-page-view>\n } @else if (vm.viewMode() === 'page-per-group') {\n <axm-questionnaire-viewer-page-per-group-view></axm-questionnaire-viewer-page-per-group-view>\n } @else if (vm.viewMode() === 'page-per-question') {\n <axm-questionnaire-viewer-page-per-question-view></axm-questionnaire-viewer-page-per-question-view>\n } @else if (vm.viewMode() === 'side-menu') {\n <axm-questionnaire-viewer-side-menu-view></axm-questionnaire-viewer-side-menu-view>\n }\n </ax-form>\n </div>\n }\n</axp-widgets-container>\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n AXPFilterDefinition,\n resolveMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { QuestionnaireBuilderValue } from '../questionnaire-builder';\n\n//#endregion\n\n//#region ---- Helper: Map question interface to filter widget ----\n\nconst INTERFACE_TO_FILTER_WIDGET: Record<string, string> = {\n 'text-editor': 'string-filter',\n 'text-box': 'string-filter',\n 'large-text-editor': 'string-filter',\n 'large-text-box': 'string-filter',\n 'number-editor': 'number-filter',\n 'number-box': 'number-filter',\n 'rate-picker': 'number-filter',\n 'select-editor': 'select-filter',\n 'select-box': 'select-filter',\n 'selection-list': 'select-filter',\n 'selection-list-editor': 'select-filter',\n 'toggle-editor': 'boolean-filter',\n 'checkbox-editor': 'boolean-filter',\n 'date-time-editor': 'datetime-filter',\n 'date-time-box': 'datetime-filter',\n};\n\ninterface QuestionBankItemRecord {\n id: string;\n title?: string;\n interface?: { type?: string; options?: Record<string, unknown> };\n}\n\nfunction resolveInterface(\n itemInterfaceOverride?: { type?: string; options?: Record<string, unknown> },\n questionInterface?: { type?: string; options?: Record<string, unknown> },\n): { type: string; options: Record<string, unknown> } {\n const resolved = (itemInterfaceOverride ?? questionInterface) ?? {};\n const widgetType =\n INTERFACE_TO_FILTER_WIDGET[resolved.type ?? ''] ?? 'string-filter';\n const options = (resolved.options ?? {}) as Record<string, unknown>;\n\n return {\n type: widgetType,\n options: {\n ...options,\n valueField: options['valueField'] ?? 'id',\n textField: options['textField'] ?? 'title',\n },\n };\n}\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Questionnaire Evaluator Scope Provider\n *\n * Provides expression evaluation capabilities for questionnaire operations:\n * - Get filter definitions from questionnaire questions for use in ConditionBuilder\n */\nexport class AXMQuestionnaireEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n const questionnaireEntity = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n const questionBankEntity = `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}`;\n const questionnaireCalculationEntity = `${RootConfig.module.name}.${RootConfig.entities.questionnaireCalculation.name}`;\n\n const filterDefinitionsImpl = async (questionnaireId: string): Promise<AXPFilterDefinition[]> => {\n if (!questionnaireId) {\n return [];\n }\n\n try {\n const dataAccessor = this.entityService\n .withEntity(questionnaireEntity)\n .data<any, any>();\n const questionnaire = (await dataAccessor.byKey(questionnaireId)) as\n | { questions?: QuestionnaireBuilderValue }\n | null\n | undefined;\n\n const structure = questionnaire?.questions;\n if (!structure?.sections?.length) {\n return [];\n }\n\n const questionBankItemIds = new Set<string>();\n for (const section of structure.sections) {\n for (const item of section.items ?? []) {\n const qid = item.questionBankItemId;\n if (qid) questionBankItemIds.add(qid);\n }\n }\n\n const questionBankMap = new Map<string, QuestionBankItemRecord>();\n if (questionBankItemIds.size > 0) {\n const ids = Array.from(questionBankItemIds);\n const qbDataAccessor = this.entityService\n .withEntity(questionBankEntity)\n .data<any, any>();\n\n try {\n const queryResult = await qbDataAccessor.query({\n skip: 0,\n take: Math.max(ids.length, 500),\n filter:\n ids.length === 1\n ? { field: 'id', operator: { type: 'equal' }, value: ids[0] }\n : { field: 'id', operator: { type: 'in' }, value: ids },\n });\n for (const q of queryResult?.items ?? []) {\n questionBankMap.set((q as { id: string }).id, q as QuestionBankItemRecord);\n }\n } catch {\n for (const id of ids) {\n try {\n const q = await qbDataAccessor.byKey(id);\n if (q) questionBankMap.set((q as { id: string }).id, q as QuestionBankItemRecord);\n } catch {\n /* skip */\n }\n }\n }\n }\n\n const definitions: AXPFilterDefinition[] = [];\n let order = 0;\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n\n for (const section of structure.sections) {\n const items = section.items ?? [];\n const sectionTitleResolved = resolveMultiLanguageString(section.title, locale);\n for (const item of items) {\n const itemId = item.name ?? item.questionBankItemId ?? `item-${order}`;\n const field = `answers.${itemId}`;\n\n const question = item.questionBankItemId\n ? questionBankMap.get(item.questionBankItemId)\n : undefined;\n const title =\n question?.title ??\n (sectionTitleResolved ? `${sectionTitleResolved} - ${itemId}` : `Question ${order + 1}`);\n\n const { type: widgetType, options: widgetOptions } = resolveInterface(\n item.interfaceOverride as { type?: string; options?: Record<string, unknown> },\n question?.interface as { type?: string; options?: Record<string, unknown> },\n );\n\n definitions.push({\n id: itemId,\n field,\n title,\n operator: { type: 'equal' },\n widget: {\n type: widgetType,\n options: {\n ...widgetOptions,\n clearButton: true,\n hasClearButton: true,\n },\n },\n filterType: {\n advance: true,\n inline: true,\n },\n filters: [],\n order,\n } as AXPFilterDefinition);\n\n order++;\n }\n }\n\n return definitions;\n } catch {\n return [];\n }\n };\n\n /** Filter definitions from questionnaire calculations (for automation condition: rules.ruleName). */\n const forRules = async (questionnaireId: string): Promise<AXPFilterDefinition[]> => {\n if (!questionnaireId) {\n return [];\n }\n try {\n const dataAccessor = this.entityService\n .withEntity(questionnaireCalculationEntity)\n .data<any, any>();\n const queryResult = await dataAccessor.query({\n skip: 0,\n take: 500,\n filter: {\n field: 'questionnaireId',\n operator: { type: 'equal' },\n value: questionnaireId,\n },\n });\n const rules = (queryResult?.items ?? []) as Array<{ id: string; name: string; title?: string }>;\n return rules.map((rule, order) => ({\n id: rule.id,\n field: `rules.${rule.name}`,\n title: rule.title ?? rule.name,\n operator: { type: 'equal' },\n widget: {\n type: 'string-filter',\n options: {\n valueField: 'id',\n textField: 'title',\n clearButton: true,\n hasClearButton: true,\n },\n },\n filterType: { advance: true, inline: true },\n filters: [],\n order,\n })) as AXPFilterDefinition[];\n } catch {\n return [];\n }\n };\n\n context.addScope('questionnaire', {\n /** Filter definitions from questionnaire answers (e.g. visibility / automation conditions). */\n answers: filterDefinitionsImpl,\n /** Filter definitions from questionnaire calculations for automation condition builder (rules.ruleName). */\n rules: forRules,\n });\n\n // Automation condition builder: provide rules for refType = AssessmentManagement.Questionnaire\n const automationRules = async (refType: string, refId: string): Promise<AXPFilterDefinition[]> => {\n const questionnaireRef = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n if (refType === questionnaireRef) {\n return forRules(refId);\n }\n return [];\n };\n context.addScope('automation', {\n rules: automationRules,\n });\n }\n}\n\n//#endregion\n","import { NgModule } from '@angular/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMQuestionnaireViewerComponent } from './components/viewer-container';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { RootConfig } from '../../const';\nimport { AXMQuestionnaireEvaluatorScopeProvider } from './questionnaire-evaluator-scope.provider';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex/platform/core';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n // Import standalone components\n AXMQuestionnaireViewerComponent,\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMQuestionnaireEvaluatorScopeProvider,\n multi: true,\n },\n // Commands\n provideCommandSetups([\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:Preview`,\n command: () => import('./commands/preview-questionnaire.command').then((c) => c.PreviewQuestionnaireCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:PreviewQuestion`,\n command: () => import('./commands/preview-question.command').then((c) => c.PreviewQuestionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}:Preview`,\n command: () => import('./commands/preview-question.command').then((c) => c.PreviewQuestionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ViewAnswers`,\n command: () => import('./commands/view-session-answers.command').then((c) => c.ViewSessionAnswersCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:Fill`,\n command: () => import('./commands/fill-assessment-session.command').then((c) => c.FillAssessmentSessionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:Fill`,\n command: () => import('./commands/fill-assessment-session.command').then((c) => c.FillAssessmentSessionCommand),\n },\n ]),\n ],\n})\nexport class AXMQuestionnaireViewerFeatureModule { }\n\n","//#region ---- Imports ----\n\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex/platform/common';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';\nimport { provideCommand } from '@acorex/platform/runtime';\nimport {\n AXP_FEATURE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n provideLazyProvider,\n} from '@acorex/platform/core';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { AssessmentManagementManifest } from './manifest';\nimport { RootConfig } from './const';\n\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXMQuestionnaireBuilderFeatureModule } from './features/questionnaire-builder/questionnaire-builder.module';\nimport { AXMQuestionnaireViewerFeatureModule } from './features/questionnaire-viewer/questionnaire-viewer.module';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction questionnaireViewerRoutesFactory(): Routes {\n const route = (RootConfig.module as { route?: string }).route ?? 'assessment-management';\n return [\n {\n path: `:app/${route}/questionnaire/fill/:caseId`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component').then(\n (c) => c.AXMQuestionnaireViewerPageComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [\n AXMQuestionnaireBuilderFeatureModule,\n AXMQuestionnaireViewerFeatureModule,\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: questionnaireViewerRoutesFactory,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: AssessmentManagementManifest,\n multi: true,\n },\n // Status Providers\n provideLazyProvider(AXP_STATUS_PROVIDERS, () =>\n import('./features/assessment-case-status.provider').then((m) => m.AXMAssessmentCaseStatusProvider),\n ),\n provideLazyProvider(AXP_STATUS_PROVIDERS, () =>\n import('./features/assessment-session-status.provider').then((m) => m.AXMAssessmentSessionStatusProvider),\n ),\n // Provider references (now using tokens)\n provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () =>\n import('./feature-definition.provider').then((m) => m.AXMAssessmentManagementFeatureDefinitionProvider),\n ),\n provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () =>\n import('./permission-definition.provider').then((m) => m.AXMAssessmentManagementPermissionDefinitionProvider),\n ),\n provideLazyProvider(AXP_MENU_PROVIDER, () =>\n import('./menu.provider').then((m) => m.AXMAssessmentManagementMenuProvider),\n ),\n provideLazyProvider(AXP_ENTITY_DEFINITION_LOADER, () =>\n import('./entity.provider').then((m) => m.AXMAssessmentManagementEntityProvider),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/questionnaire-builder/pages/questionnaire-questions-page').then(\n (m) => m.AXMQuestionnaireQuestionsPageComponentProvider\n ),\n ),\n provideCommand(\n 'Questionnaire:Questions:Save',\n () =>\n import('./features/questionnaire-builder/pages/questionnaire-questions-page/save-questionnaire-questions.command').then(\n (m) => m.AXMSaveQuestionnaireQuestionsCommand\n )\n ),\n provideLazyProvider(AXP_SEARCH_PROVIDER, () =>\n import('./search-command.provider').then((m) => m.AXMAssessmentManagementSearchCommandProvider),\n ),\n\n ],\n})\nexport class AXMAssessmentManagementModule { }\n\n//#endregion\n","//#region ---- QuestionBankItem Model ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityModel } from \"@acorex/platform/layout/entity\";\n\nimport type { AXMAssessmentQuestionCommentConfig } from './question-comment.types';\nimport type { AXMAssessmentQuestionHintConfig } from './question-hint.types';\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n/** Provenance when `interface` was loaded from a meta-data definition (frozen clone). */\nexport interface AXMQuestionBankItemInterfaceMetadata {\n id: string;\n name: string;\n title: AXPMultiLanguageString | string;\n /**\n * TODO: Set from definition versioning when the versioning system is implemented (placeholder until then).\n */\n version: number;\n}\n\nexport type AXMQuestionBankItemInterfaceValue = AXPWidgetNode & {\n metadata?: AXMQuestionBankItemInterfaceMetadata;\n};\n\nexport interface AXMAssessmentManagementQuestionBankItemEntityModel extends AXPEntityModel<string> {\n /**\n * Short label for the question bank list (administrators).\n * Not used as the respondent-facing question text; see `question`.\n */\n title: AXPMultiLanguageString;\n /** Unique variable name for questionnaire calculations (answer.eval('name')). */\n name?: string;\n /** Respondent-facing question body (rich text). */\n question?: AXPMultiLanguageString;\n /** Optional note (rich text); formerly description. */\n note?: AXPMultiLanguageString;\n categoryId?: string;\n tags?: string[];\n\n // Question Properties\n difficulty?: 'easy' | 'medium' | 'hard';\n estimatedTime?: number; // seconds\n\n /** Default hint (rich text + style, or off). Overridable per questionnaire item. */\n hint?: AXMAssessmentQuestionHintConfig;\n\n /** Default respondent comment box policy (overridable per questionnaire item). */\n comment?: AXMAssessmentQuestionCommentConfig;\n\n // User Interface — widget node plus optional provenance when cloned from a meta-data definition (frozen snapshot).\n interface?: AXMQuestionBankItemInterfaceValue;\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { QuestionnaireDisplaySettings } from '../../features/questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireBuilderValue } from '../../features/questionnaire-builder/questionnaire-builder.types';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Questionnaire Model ----\n\n/**\n * Pre- / post-questionnaire rich text (welcome, summary, etc.).\n * @alias AXPMultiLanguageString\n */\nexport type PrePostContentValue = AXPMultiLanguageString;\n\n/**\n * Pre-questionnaire configuration (shown before questions).\n */\nexport interface PreQuestionnaireConfig {\n enabled: boolean;\n /** Rich text content. Supports multi-language: Record<locale, string>. */\n content?: PrePostContentValue;\n}\n\n/**\n * Post-questionnaire configuration (review before submit, summary after submit).\n * Summary content supports placeholders: {{totalQuestions}}, {{answeredCount}}, {{totalTime}}, {{elapsedSeconds}}, and {{calculationName}} from configured calculations.\n */\nexport interface PostQuestionnaireConfig {\n /** Show review step before submit (all answers, edit/submit). */\n reviewEnabled: boolean;\n /** Show summary screen after submit. */\n summaryEnabled: boolean;\n /** When true, show a separate step after the summary with calculation results (name/value list). */\n showCalculationResults?: boolean;\n /** Rich text content for summary. Supports multi-language and placeholders. */\n summaryContent?: PrePostContentValue;\n}\n\n/**\n * Entity-level display options (viewer / builder preview). Subset of {@link QuestionnaireDisplaySettings}.\n */\nexport type QuestionnaireEntityDisplaySettings = Pick<\n QuestionnaireDisplaySettings,\n 'viewMode' | 'showProgressBar' | 'showTimer' | 'showQuestionNumbers' | 'validationStrategy'\n>;\n\nexport const DEFAULT_PRE_QUESTIONNAIRE_CONFIG: PreQuestionnaireConfig = { enabled: false };\n\nexport const DEFAULT_POST_QUESTIONNAIRE_CONFIG: PostQuestionnaireConfig = {\n reviewEnabled: false,\n summaryEnabled: false,\n showCalculationResults: false,\n};\n\nexport const DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY: QuestionnaireEntityDisplaySettings = {\n viewMode: 'single-page',\n showProgressBar: true,\n showTimer: false,\n showQuestionNumbers: true,\n validationStrategy: 'step',\n};\n\n/**\n * Pre/post configuration for viewer flow (from {@link toPrePostConfig}).\n */\nexport interface PrePostConfig {\n pre: PreQuestionnaireConfig;\n post: PostQuestionnaireConfig;\n}\n\nexport interface AXMAssessmentManagementQuestionnaireEntityModel extends AXPEntityModel<string> {\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n type: 'questionnaire' | 'survey' | 'checklist' | 'test' | 'evaluation';\n\n questions?: QuestionnaireBuilderValue;\n\n /** Viewer / preview display. */\n display?: QuestionnaireEntityDisplaySettings;\n\n /** Welcome screen before questions. */\n pre?: PreQuestionnaireConfig;\n\n /** Review before submit, summary / results after submit. */\n post?: PostQuestionnaireConfig;\n\n categoryId?: string;\n tags?: string[];\n color?: string;\n}\n\n/**\n * Maps entity pre/post to viewer config (defaults when omitted).\n */\nexport function toPrePostConfig(q: Partial<AXMAssessmentManagementQuestionnaireEntityModel> | null | undefined): PrePostConfig | null {\n if (!q) {\n return null;\n }\n const pre: PreQuestionnaireConfig = {\n ...DEFAULT_PRE_QUESTIONNAIRE_CONFIG,\n ...q.pre,\n enabled: q.pre?.enabled === true,\n };\n const post: PostQuestionnaireConfig = {\n ...DEFAULT_POST_QUESTIONNAIRE_CONFIG,\n ...q.post,\n reviewEnabled: q.post?.reviewEnabled === true,\n summaryEnabled: q.post?.summaryEnabled === true,\n showCalculationResults: q.post?.showCalculationResults === true,\n };\n return { pre, post };\n}\n\nconst VIEW_MODE_VALUES = ['single-page', 'page-per-group', 'page-per-question', 'side-menu'] as const;\ntype ViewModeValue = (typeof VIEW_MODE_VALUES)[number];\nconst VALIDATION_STRATEGY_VALUES = ['step', 'end'] as const;\ntype ValidationStrategyValue = (typeof VALIDATION_STRATEGY_VALUES)[number];\n\n/**\n * Coerces stored view mode (string or SelectBox `{ id }`) to a known value.\n */\nexport function normalizeViewMode(value: unknown): ViewModeValue {\n if (typeof value === 'string' && VIEW_MODE_VALUES.includes(value as ViewModeValue)) {\n return value as ViewModeValue;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id: string }).id === 'string') {\n return normalizeViewMode((value as { id: string }).id);\n }\n return 'single-page';\n}\n\n/**\n * Coerces stored validation strategy (string or SelectBox `{ id }`) to a known value.\n */\nexport function normalizeValidationStrategy(value: unknown): ValidationStrategyValue {\n if (typeof value === 'string' && VALIDATION_STRATEGY_VALUES.includes(value as ValidationStrategyValue)) {\n return value as ValidationStrategyValue;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id: string }).id === 'string') {\n return normalizeValidationStrategy((value as { id: string }).id);\n }\n return 'step';\n}\n\n/**\n * Maps entity `display` to {@link QuestionnaireDisplaySettings} (defaults when omitted).\n */\nexport function toDisplaySettings(q: Partial<AXMAssessmentManagementQuestionnaireEntityModel> | null | undefined): QuestionnaireDisplaySettings | null {\n if (!q) {\n return null;\n }\n const d = { ...DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY, ...q.display };\n return {\n viewMode: normalizeViewMode(d.viewMode),\n showProgressBar: d.showProgressBar ?? true,\n showTimer: d.showTimer ?? false,\n showQuestionNumbers: d.showQuestionNumbers ?? true,\n validationStrategy: normalizeValidationStrategy(d.validationStrategy),\n };\n}\n\n//#endregion\n","//#region ---- Types ----\n\nimport { AXPEntityReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMAssessmentCaseStatus = 'active' | 'closed' | 'cancelled';\n\nexport interface AXMAssessmentManagementAssessmentCaseEntityModel extends AXPEntityModel<string> {\n\n /**\n * Single questionnaire assigned to this case.\n */\n questionnaireId: string;\n\n /**\n * Optional friendly title for lists/search.\n */\n title: string;\n\n description?: string;\n\n /**\n * Target entity (e.g. AssetManagement.Asset, HumanCapital.Employee).\n */\n subjectRef: AXPEntityReference;\n\n status: AXMAssessmentCaseStatus;\n}\n\n//#endregion\n\n\n","//#region ---- Types ----\n\nimport { AXPEntityModel } from \"@acorex/platform/layout/entity\";\n\nexport type AXMAssessmentSessionRole = 'responder' | 'supervisor' | 'reviewer';\n\nexport type AXMAssessmentSessionStatus = 'not-started' | 'in-progress' | 'submitted' | 'under-review' | 'approved' | 'rejected' | 'completed';\n\nexport interface AXMAssessmentManagementAssessmentSessionEntityModel extends AXPEntityModel<string> {\n caseId: string;\n\n // Responder\n responderId: string;\n role: AXMAssessmentSessionRole;\n\n // Status managed by status plugin (statusId field added automatically)\n\n // Time tracking\n startedAt?: Date;\n lastSavedAt?: Date;\n timeSpent?: number; // Total seconds\n\n // Progress\n progressPercentage: number;\n answeredQuestionsCount: number;\n\n // Answers\n answers: Record<string, unknown>;\n\n // Override chain\n previousId?: string;\n}\n\n//#endregion\n\n","//#region ---- Types ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n/** Primitive type of the evaluated value (coercion after expression runs). */\nexport type QuestionnaireCalculationResultKind = 'number' | 'string' | 'boolean';\n\nexport interface AXMAssessmentManagementQuestionnaireCalculationEntityModel extends AXPEntityModel<string> {\n questionnaireId?: string;\n questionnaire?: { id?: string; title?: AXPMultiLanguageString; type?: string };\n name?: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n resultKind?: QuestionnaireCalculationResultKind;\n /**\n * Use `{{ ... }}` or plain expression body; scope includes `answer.eval`, `outcome.eval` / `formula.eval`, and `fn.SUM`, `fn.AVERAGE`, etc.\n */\n expression?: string;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport type { PrePostContentValue } from '../../../../entities/questionnaire/questionnaire.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable pre-questionnaire (welcome) content component.\n * Renders rich text content only. Start button is provided by the host footer.\n * Use in page, popup, standalone, and preview views.\n */\n@Component({\n selector: 'axm-pre-questionnaire-content',\n template: `\n <div class=\"axm-pre-questionnaire-content ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\">\n <div\n class=\"ax-max-w-2xl ax-w-full ax-prose ax-text-on-surface\"\n [innerHTML]=\"content() | axpResolveMultiLanguageString: locale() | safe: 'html'\"\n ></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AXPResolveMultiLanguageStringPipe],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-pre-questionnaire-content' },\n})\nexport class AXMPreQuestionnaireContentComponent {\n //#region ---- Inputs ----\n\n /** Rich text content. Supports multi-language: Record<locale, string>. */\n content = input<PrePostContentValue | null | undefined>(null);\n\n /** Locale for multi-language content. Defaults to active lang. */\n locale = input<string | undefined>(undefined);\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { resolveMultiLanguageString, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { resolveSummaryPlaceholders, type SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport type { PrePostContentValue } from '../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireViewerQuestion } from '../../questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../section-header/questionnaire-viewer-section-header.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface QuestionWithAnswer {\n name: string;\n title: string;\n answer: unknown;\n /** Full question with interface for widget rendering in view mode. */\n question?: QuestionnaireViewerQuestion;\n /** Section technical name (for grouping in review). */\n sectionName?: string;\n /** Section order from questionnaire (matches `section.order` in viewer). */\n sectionOrder?: number;\n sectionTitle?: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n}\n\n/** One section block in review (all visible questions, answered or not). */\nexport interface ReviewSectionGroup {\n readonly trackKey: string;\n readonly sectionName: string;\n readonly sectionOrder: number;\n readonly sectionTitle: AXPMultiLanguageString;\n readonly sectionDescription?: AXPMultiLanguageString;\n readonly items: QuestionWithAnswer[];\n}\n\n/** `review` = Q&A list; `summary` = rich summary only; `results` = calculation outcomes list only. */\nexport type PostQuestionnaireMode = 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable post-questionnaire component.\n * Renders review (Q&A), summary (rich text), or results (outcome list).\n * Edit, Submit, Next, Done buttons are provided by the host footer.\n */\n@Component({\n selector: 'axm-post-questionnaire-content',\n template: `\n @if (mode() === 'review') {\n <div class=\"axm-post-questionnaire-content __review ax-flex ax-flex-col ax-overflow-auto ax-min-h-full ax-text-on-surface\">\n <div class=\"ax-p-4 ax-border-b ax-border-surface\">\n <h2 class=\"ax-text-lg ax-font-semibold ax-text-on-surface\">{{ '@assessment-management:questionnaires.components.questionnaire-viewer.flow.review-title' | translate | async }}</h2>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n @if (reviewContext(); as ctx) {\n <axp-widgets-container [context]=\"ctx\" class=\"ax-flex ax-flex-col ax-gap-6\">\n @for (group of reviewSectionGroups(); track group.trackKey) {\n <section class=\"ax-flex ax-flex-col ax-gap-4\">\n <axm-questionnaire-viewer-section-header\n [title]=\"group.sectionTitle\"\n [description]=\"group.sectionDescription\"\n titleSize=\"md\"\n marginBottom=\"sm\"\n />\n @for (item of group.items; track item.name; let qi = $index) {\n @if (item.question?.question?.interface) {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-overflow-hidden ax-shadow-sm\">\n <axm-questionnaire-viewer-question\n [question]=\"item.question!\"\n [sectionOrder]=\"group.sectionOrder\"\n [questionIndex]=\"qi + 1\"\n [showQuestionNumbers]=\"showQuestionNumbers()\"\n [mode]=\"'view'\"\n [contextData]=\"ctx\"\n ></axm-questionnaire-viewer-question>\n </div>\n } @else {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\">\n <div class=\"ax-font-medium ax-mb-2 ax-text-on-surface\">{{ item.title }}</div>\n <div class=\"ax-text-sm __post-text-muted\">{{ formatAnswer(item.answer) }}</div>\n </div>\n }\n }\n </section>\n }\n </axp-widgets-container>\n } @else {\n @for (group of reviewSectionGroups(); track group.trackKey) {\n <section class=\"ax-flex ax-flex-col ax-gap-4\">\n <axm-questionnaire-viewer-section-header\n [title]=\"group.sectionTitle\"\n [description]=\"group.sectionDescription\"\n titleSize=\"md\"\n marginBottom=\"sm\"\n />\n @for (item of group.items; track item.name) {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\">\n <div class=\"ax-font-medium ax-mb-2 ax-text-on-surface\">{{ item.title }}</div>\n <div class=\"ax-text-sm __post-text-muted\">{{ formatAnswer(item.answer) }}</div>\n </div>\n }\n </section>\n }\n }\n </div>\n </div>\n } @else if (mode() === 'results') {\n <div\n class=\"axm-post-questionnaire-content __results ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\"\n >\n @if (outcomeEntries().length > 0) {\n <div class=\"ax-max-w-2xl ax-w-full\">\n <h3 class=\"ax-text-base ax-font-semibold ax-mb-3 ax-text-on-surface\">\n {{\n '@assessment-management:questionnaires.components.questionnaire-viewer.flow.outcomes-section-title'\n | translate\n | async\n }}\n </h3>\n <ul class=\"ax-list-none ax-p-0 ax-m-0 ax-flex ax-flex-col ax-gap-1 ax-rounded-lg ax-border ax-border-surface ax-lighter-surface ax-overflow-hidden\">\n @for (row of outcomeEntries(); track row.key) {\n <li class=\"ax-flex ax-justify-between ax-gap-4 ax-py-3 ax-px-4 ax-border-b ax-border-surface last:ax-border-b-0\">\n <span class=\"ax-text-sm ax-font-medium __post-text-muted\">{{ row.label }}</span>\n <span class=\"ax-text-sm ax-text-on-surface ax-text-right ax-break-all\">{{ formatAnswer(row.value) }}</span>\n </li>\n }\n </ul>\n </div>\n } @else {\n <p class=\"ax-text-sm __post-text-muted\">\n {{ '@assessment-management:questionnaires.components.questionnaire-viewer.flow.no-outcomes' | translate | async }}\n </p>\n }\n </div>\n } @else {\n <div\n class=\"axm-post-questionnaire-content __summary ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\"\n >\n <div class=\"ax-max-w-2xl ax-w-full ax-prose ax-text-on-surface\" [innerHTML]=\"summaryContentHtml()\"></div>\n </div>\n }\n `,\n styles: [\n `\n .axm-post-questionnaire-content .__post-text-muted {\n color: rgb(var(--ax-sys-color-on-surface-variant));\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXMQuestionnaireViewerQuestionComponent,\n AXMQuestionnaireViewerSectionHeaderComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-post-questionnaire-content' },\n})\nexport class AXMPostQuestionnaireContentComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /** Display mode: review, summary (rich text), or results (calculation list). */\n mode = input<PostQuestionnaireMode>('review');\n\n /** Questions with answers for review mode. */\n questionsWithAnswers = input<QuestionWithAnswer[]>([]);\n\n /** Context data for widget rendering in view mode (answers at widget paths). Required for proper display. */\n reviewContext = input<Record<string, any> | null>(null);\n\n /** Summary content (rich text). Supports multi-language and placeholders. */\n summaryContent = input<PrePostContentValue | null | undefined>(null);\n\n /** Placeholder values: totals, time, and calculation outcomes. */\n placeholderValues = input<SummaryPlaceholderValues | null>(null);\n\n /** Locale for multi-language content. Defaults to active lang. */\n locale = input<string | undefined>(undefined);\n\n /**\n * Matches questionnaire viewer display settings (`showQuestionNumbers`).\n * When true, review shows `sectionOrder.questionIndex` like single-page / page-per-group.\n */\n showQuestionNumbers = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Groups review rows by section (all visible questions in questionnaire order, answered or not). */\n protected readonly reviewSectionGroups = computed((): ReviewSectionGroup[] => {\n const items = this.questionsWithAnswers();\n if (!items.length) {\n return [];\n }\n const groups: Array<{\n trackKey: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n items: QuestionWithAnswer[];\n }> = [];\n for (const item of items) {\n const sectionName = item.sectionName ?? item.question?.sectionName ?? '';\n const sectionOrder = item.sectionOrder ?? 0;\n const trackKey = `${sectionOrder}::${sectionName}`;\n const sectionTitle: AXPMultiLanguageString =\n item.sectionTitle ?? ({ 'en-US': sectionName || item.title } as AXPMultiLanguageString);\n const sectionDescription = item.sectionDescription;\n const last = groups[groups.length - 1];\n if (!last || last.trackKey !== trackKey) {\n groups.push({\n trackKey,\n sectionName,\n sectionOrder,\n sectionTitle,\n sectionDescription,\n items: [item],\n });\n } else {\n last.items.push(item);\n }\n }\n return groups;\n });\n\n /** Calculation name/value pairs for results step; `label` is entity title or humanized name. */\n protected readonly outcomeEntries = computed(() => {\n const pv = this.placeholderValues();\n const o = pv?.outcomes;\n const titles = pv?.outcomeTitles;\n if (!o || typeof o !== 'object') return [] as Array<{ key: string; value: unknown; label: string }>;\n return Object.entries(o).map(([key, value]) => ({\n key,\n value,\n label: (titles?.[key] ?? '').trim() || this.humanizeOutcomeKey(key),\n }));\n });\n\n protected readonly summaryContentHtml = computed(() => {\n const content = this.summaryContent();\n const values = this.placeholderValues();\n const localeVal = this.locale() ?? this.translationService.getActiveLang?.() ?? 'en-US';\n let resolved = resolveMultiLanguageString(content, localeVal);\n if (resolved && values) {\n resolved = resolveSummaryPlaceholders(resolved, values);\n }\n if (!resolved && values) {\n resolved = `<p>You answered <strong>${values.answeredCount ?? 0}</strong> of <strong>${values.totalQuestions ?? 0}</strong> questions.</p>`;\n }\n return resolved ? this.sanitizer.bypassSecurityTrustHtml(resolved) : '';\n });\n\n //#endregion\n\n //#region ---- Helpers ----\n\n /** Fallback when no calculation entity title is available. */\n private humanizeOutcomeKey(key: string): string {\n return key\n .replace(/_/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n }\n\n protected formatAnswer(answer: unknown): string {\n if (answer == null || answer === '') return '—';\n if (typeof answer === 'string') return answer;\n if (typeof answer === 'number' || typeof answer === 'boolean') return String(answer);\n if (Array.isArray(answer)) return answer.map((a) => (typeof a === 'object' ? JSON.stringify(a) : String(a))).join(', ');\n if (typeof answer === 'object') return JSON.stringify(answer);\n return String(answer);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent, AXPStopwatchComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../../entities/assessment-case/assessment-case.types';\nimport type {\n AXMAssessmentManagementAssessmentSessionEntityModel,\n AXMAssessmentSessionRole,\n} from '../../../../entities/assessment-session/assessment-session.types';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../../../const';\nimport type { SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer.service';\nimport { AXMQuestionnaireViewerComponent } from '../../components/viewer-container';\nimport { AXMPreQuestionnaireContentComponent } from '../../components/pre-questionnaire-content';\nimport {\n AXMPostQuestionnaireContentComponent,\n type QuestionWithAnswer,\n} from '../../components/post-questionnaire-content';\nimport { AXButtonModule } from '@acorex/components/button';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype FlowStep = 'pre' | 'questions' | 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-questionnaire-viewer-page',\n templateUrl: './questionnaire-viewer-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXButtonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //AXPStopwatchComponent,\n AXMQuestionnaireViewerComponent,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }],\n styleUrl: './questionnaire-viewer-page.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-page' },\n})\nexport class AXMQuestionnaireViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly entityService = inject(AXPEntityService);\n private readonly authSession = inject(AXPSessionService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly structure = signal<QuestionnaireBuilderValue | null>(null);\n protected readonly questionnaire = signal<AXMAssessmentManagementQuestionnaireEntityModel | null>(null);\n protected readonly initialAnswers = signal<Record<string, any>>({});\n protected readonly viewerConfig = signal<QuestionnaireViewerConfig | undefined>({ readonly: false });\n protected readonly prePostConfig = signal<ReturnType<typeof toPrePostConfig>>(null);\n protected readonly isLoading = signal(true);\n protected readonly loadError = signal<string | null>(null);\n protected readonly currentSessionId = signal<string | null>(null);\n\n protected readonly flowStep = signal<FlowStep>('questions');\n protected readonly reviewSnapshot = signal<QuestionWithAnswer[]>([]);\n protected readonly reviewContext = signal<Record<string, any> | null>(null);\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly isSubmitting = signal(false);\n protected readonly canNavigatePrevious = signal(false);\n protected readonly canNavigateNext = signal(false);\n protected readonly showNavigationButtons = signal(false);\n protected readonly isLastStep = signal(false);\n protected readonly areAllRequiredQuestionsAnswered = signal(false);\n\n //#endregion\n\n //#region ---- View References ----\n\n protected readonly viewer = viewChild<AXMQuestionnaireViewerComponent>('viewer');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly viewerViewModel = computed(() => this.viewer()?.viewmodel);\n protected readonly totalQuestionsCount = computed(() => this.viewerViewModel()?.totalQuestionsCount() ?? 0);\n protected readonly totalSectionsCount = computed(() => this.viewerViewModel()?.totalSectionsCount() ?? 0);\n protected readonly showTimer = computed(() => this.viewerViewModel()?.showTimer() ?? false);\n protected readonly timerTimeLimit = computed(() => this.viewerViewModel()?.timerTimeLimit());\n protected readonly timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0);\n protected readonly showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false);\n protected readonly answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0);\n protected readonly isReadonly = computed(() => this.viewerConfig()?.readonly ?? false);\n\n protected readonly showReviewButton = computed(\n () => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions'\n );\n\n /** Use answers from review context when returning from review; otherwise use initial answers. */\n protected readonly effectiveInitialAnswers = computed(() => {\n const ctx = this.reviewContext();\n if (!ctx) return this.initialAnswers();\n return (ctx as { answers?: Record<string, any> }).answers ?? ctx;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n effect(() => {\n const v = this.viewer();\n if (v) {\n const vm = v.viewmodel;\n this.canNavigatePrevious.set(vm.canNavigatePrevious());\n this.canNavigateNext.set(vm.canNavigateNext());\n const viewMode = v.viewMode;\n this.showNavigationButtons.set(viewMode === 'page-per-group' || viewMode === 'page-per-question' || viewMode === 'side-menu');\n this.isLastStep.set(v.isLastStep);\n this.areAllRequiredQuestionsAnswered.set(v.areAllRequiredQuestionsAnswered);\n }\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.loadData();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadData(): Promise<void> {\n const caseId = this.route.snapshot.paramMap.get('caseId') ?? this.route.parent?.snapshot.paramMap.get('caseId');\n if (!caseId) {\n this.loadError.set('Case ID is required');\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.loadError.set(null);\n\n try {\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(caseId);\n if (!assessmentCase) {\n this.loadError.set('Assessment case not found');\n this.isLoading.set(false);\n return;\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire?.questions?.sections?.length) {\n this.loadError.set('Questionnaire or questions not found');\n this.isLoading.set(false);\n return;\n }\n\n let answers: Record<string, any> = {};\n const existingSessionId = this.route.snapshot.queryParamMap.get('sessionId') ?? this.route.parent?.snapshot.queryParamMap.get('sessionId');\n if (existingSessionId) {\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(existingSessionId);\n if (session?.answers) {\n answers = session.answers;\n this.currentSessionId.set(existingSessionId);\n }\n }\n\n this.questionnaire.set(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel);\n this.structure.set({\n ...questionnaire.questions,\n displaySettings: toDisplaySettings(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel) ?? undefined,\n } as QuestionnaireBuilderValue);\n this.initialAnswers.set(answers);\n const cfg = toPrePostConfig(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel);\n this.prePostConfig.set(cfg);\n this.flowStep.set(cfg?.pre.enabled === true ? 'pre' : 'questions');\n this.viewerConfig.set({ readonly: false });\n } catch (err: any) {\n this.loadError.set(err?.message ?? 'Failed to load questionnaire');\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Submit Handler ----\n\n /**\n * After successful submit: outcomes first (if enabled), then summary last (if enabled), else close.\n */\n private applyPostSubmitFlow(summary: SummaryPlaceholderValues | null): void {\n const cfg = this.prePostConfig();\n if (!summary) {\n this.handleDone();\n return;\n }\n if (cfg?.post.showCalculationResults === true) {\n this.flowStep.set('results');\n return;\n }\n if (cfg?.post.summaryEnabled === true) {\n this.flowStep.set('summary');\n return;\n }\n this.handleDone();\n }\n\n private async saveSessionAndGetSummary(answers: Record<string, any>): Promise<SummaryPlaceholderValues | null> {\n const caseIdVal = this.route.snapshot.paramMap.get('caseId') ?? this.route.parent?.snapshot.paramMap.get('caseId');\n const structureVal = this.structure();\n const q = this.questionnaire();\n if (!caseIdVal || !structureVal || !q) return null;\n\n const { answeredQuestionsCount, progressPercentage } =\n this.questionnaireViewerService.calculateProgressFromStructure(structureVal, answers);\n const responderId = this.authSession.user?.id;\n if (!responderId) {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync('@general:messages.generic.error.description'),\n });\n return null;\n }\n\n const now = new Date();\n const sessionIdVal = this.currentSessionId();\n const role: AXMAssessmentSessionRole = 'responder';\n const sessionData: Partial<AXMAssessmentManagementAssessmentSessionEntityModel> = {\n caseId: caseIdVal,\n responderId,\n role,\n answers,\n progressPercentage,\n answeredQuestionsCount,\n lastSavedAt: now,\n };\n\n const sessionDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n if (sessionIdVal) {\n await sessionDataAccessor.update(sessionIdVal, sessionData);\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.form.saved.success.title'),\n content: await this.translateService.translateAsync('@general:messages.form.saved.success.description'),\n });\n } else {\n const newSessionData = { ...sessionData, startedAt: now } as Omit<AXMAssessmentManagementAssessmentSessionEntityModel, 'id'>;\n await sessionDataAccessor.create(newSessionData);\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@assessment-management:sessions.states.submitted'),\n content: '',\n });\n }\n\n const elapsed = this.viewerViewModel()?.timerElapsed() ?? 0;\n return this.questionnaireViewerService.buildSummaryPlaceholderValues(structureVal, answers, {\n questionnaireId: q.id,\n elapsedSeconds: elapsed,\n });\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPageTitle(): Promise<string> {\n return this.translateService.translateAsync('@assessment-management:cases.actions.fill-assessment.title');\n }\n\n override getPageBreadcrumbs(): ReturnType<AXPPageLayoutBaseComponent['getPageBreadcrumbs']> {\n return [\n { title: '@assessment-management:cases.entities.assessment-case.plural', command: { name: 'navigate', options: { path: this.getCasesListPath() } } },\n { title: '@assessment-management:cases.actions.fill-assessment.title' },\n ];\n }\n\n override async getBackButton(): Promise<{ title: string } | null> {\n const title = await this.translateService.translateAsync('@assessment-management:cases.entities.assessment-case.plural');\n return { title };\n }\n\n override onBackButtonClick(): void {\n this.router.navigateByUrl(this.getCasesListPath());\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private getCasesListPath(): string {\n const app = this.authSession.application?.name ?? 'demo';\n return `/${app}/m/assessment-management/e/AssessmentCase/list`;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleAnswersChanged(_answers: Record<string, any>): void { }\n\n protected handleReviewClick(): void {\n const viewer = this.viewer();\n const items = viewer?.getQuestionsWithAnswers() ?? [];\n const context = viewer?.getReviewContext() ?? null;\n this.reviewSnapshot.set(\n items.map((q) => ({\n name: q.name,\n title: q.title,\n answer: q.answer,\n question: q.question,\n sectionName: q.sectionName,\n sectionOrder: q.sectionOrder,\n sectionTitle: q.sectionTitle,\n sectionDescription: q.sectionDescription,\n })),\n );\n this.reviewContext.set(context);\n this.flowStep.set('review');\n }\n\n protected async handleReviewSubmit(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected async handlePreviousClick(): Promise<void> {\n await this.viewer()?.navigatePrevious();\n }\n\n protected async handleNextClick(): Promise<void> {\n await this.viewer()?.navigateNext();\n }\n\n protected async handleSubmitClick(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected handleDone(): void {\n this.router.navigateByUrl(this.getCasesListPath());\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- Page shell layout -->\n<axp-page-layout>\n <!-- Main content area -->\n <axp-page-content class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0\"\n [class.ax-overflow-hidden]=\"flowStep() === 'questions'\" [class.ax-overflow-y-auto]=\"flowStep() !== 'questions'\">\n <!-- Loading state -->\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-min-h-[200px]\">\n <span>{{ '@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async\n }}</span>\n </div>\n }\n <!-- Error state -->\n @else if (loadError()) {\n <div class=\"ax-p-4 ax-text-error-600\">\n {{ loadError() }}\n </div>\n }\n <!-- Content state -->\n @else if (structure()) {\n <!-- Pre-questionnaire introduction content -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"prePostConfig()?.pre?.content\"></axm-pre-questionnaire-content>\n }\n <!-- Post-submit results content -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Post-submit summary content -->\n @else if (flowStep() === 'summary') {\n <axm-post-questionnaire-content mode=\"summary\" [summaryContent]=\"prePostConfig()?.post?.summaryContent\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Questionnaire and review flow -->\n @else {\n <!-- Review mode content -->\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content mode=\"review\" [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"></axm-post-questionnaire-content>\n }\n\n <!-- Questionnaire workspace (hidden while in review mode) -->\n <div class=\"__questions ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\"\n [class.ax-invisible]=\"flowStep() === 'review'\" [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\" [class.ax-size-0]=\"flowStep() === 'review'\"\n [class.ax-overflow-hidden]=\"flowStep() === 'review'\">\n\n <!-- Questionnaire rendering container -->\n <div class=\"__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden\">\n <axm-questionnaire-viewer #viewer [structure]=\"structure()!\" [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n (answersChanged)=\"handleAnswersChanged($event)\"></axm-questionnaire-viewer>\n </div>\n </div>\n }\n }\n </axp-page-content>\n\n <!-- Footer actions (only when content is ready) -->\n @if (structure() && !isLoading() && !loadError()) {\n <axp-page-footer class=\"--animated\">\n <!-- Footer prefix: progress indicator -->\n <axp-layout-prefix>\n @if (flowStep() === 'questions') {\n <div class=\"__footer-progress ax-text-sm ax-font-mono ax-tabular-nums\" dir=\"ltr\">\n @if (showProgressBar()) {\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n }\n </div>\n }\n <!-- @if (showTimer()) {\n <axp-stopwatch [mode]=\"timerTimeLimit() ? 'count-down' : 'count-up'\" [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\" [autoStart]=\"true\"\n [showControls]=\"false\" [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"></axp-stopwatch>\n } -->\n </axp-layout-prefix>\n\n <!-- Footer suffix: flow action buttons -->\n <axp-layout-suffix>\n @if (flowStep() === 'pre') {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.start' | translate | async\"\n (onClick)=\"flowStep.set('questions')\"></ax-button>\n }\n <!-- Question step actions -->\n @else if (flowStep() === 'questions') {\n <!-- Question navigation buttons -->\n @if (showNavigationButtons()) {\n <ax-button look=\"solid\" [disabled]=\"!canNavigatePrevious()\"\n [text]=\"'@general:actions.previous.title' | translate | async\" (onClick)=\"handlePreviousClick()\"></ax-button>\n @if (!isLastStep()) {\n <ax-button look=\"solid\" color=\"primary\" [disabled]=\"!canNavigateNext()\"\n [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"handleNextClick()\"></ax-button>\n }\n }\n\n <!-- Final-step actions -->\n @if (isLastStep() && showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.review' | translate | async\"\n [disabled]=\"!areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n @if (isLastStep() && !showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\"\n [disabled]=\"isReadonly() || isSubmitting() || !areAllRequiredQuestionsAnswered()\"\n (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n }\n <!-- Review step actions -->\n @else if (flowStep() === 'review') {\n <ax-button look=\"outline\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.edit' | translate | async\"\n (onClick)=\"flowStep.set('questions')\"></ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\"\n [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n }\n <!-- Results step actions -->\n @else if (flowStep() === 'results') {\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.next.title' | translate | async\"\n (onClick)=\"flowStep.set('summary')\"></ax-button>\n } @else {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"></ax-button>\n }\n }\n <!-- Summary step action -->\n @else if (flowStep() === 'summary') {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"></ax-button>\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStopwatchComponent } from '@acorex/platform/layout/components';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetCoreService,\n} from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { AXMQuestionnaireViewerComponent } from '../../components/viewer-container';\nimport { AXMPreQuestionnaireContentComponent } from '../../components/pre-questionnaire-content';\nimport {\n AXMPostQuestionnaireContentComponent,\n type QuestionWithAnswer,\n} from '../../components/post-questionnaire-content';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../../entities/assessment-session/assessment-session.types';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport type { SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer.service';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { RootConfig } from '../../../../const';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype FlowStep = 'pre' | 'questions' | 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-questionnaire-viewer-standalone-page',\n template: `\n <div class=\"__standalone ax-min-h-screen ax-flex ax-flex-col ax-lightest-surface\">\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-flex-1 ax-min-h-[200px]\">\n <span>{{ '@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async }}</span>\n </div>\n } @else if (loadError()) {\n <div class=\"ax-p-6 ax-text-error-600 ax-text-center\">\n {{ loadError() }}\n </div>\n } @else if (structure()) {\n <div class=\"__main-container ax-flex-1 ax-flex ax-flex-col ax-max-w-4xl ax-mx-auto ax-w-full ax-min-h-0 ax-p-4\">\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content\n [content]=\"prePostConfig()?.pre?.content\"\n ></axm-pre-questionnaire-content>\n } @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n } @else if (flowStep() === 'summary') {\n <axm-post-questionnaire-content\n mode=\"summary\"\n [summaryContent]=\"prePostConfig()?.post?.summaryContent\"\n [placeholderValues]=\"submitResult()\"\n ></axm-post-questionnaire-content>\n } @else {\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content\n mode=\"review\"\n [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"\n [showQuestionNumbers]=\"viewerConfig()?.showQuestionNumbers ?? true\"\n ></axm-post-questionnaire-content>\n }\n <div\n class=\"__questions ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\"\n [class.ax-invisible]=\"flowStep() === 'review'\"\n [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\"\n [class.ax-size-0]=\"flowStep() === 'review'\"\n [class.ax-overflow-hidden]=\"flowStep() === 'review'\"\n >\n <div class=\"__header ax-flex-shrink-0 ax-p-4 ax-border-b ax-border-surface\">\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"__toolbar-meta ax-flex ax-items-center ax-gap-4 ax-text-sm\">\n @if (totalQuestionsCount() > 0) {\n <span><i class=\"fa-light fa-list-check ax-text-primary-600\"></i> {{ totalQuestionsCount() }} {{ totalQuestionsCount() === 1 ? 'Question' : 'Questions' }}</span>\n }\n @if (showTimer()) {\n <axp-stopwatch\n [mode]=\"'count-down'\"\n [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\"\n [autoStart]=\"true\"\n [showControls]=\"false\"\n [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"\n ></axp-stopwatch>\n }\n </div>\n </div>\n </div>\n <div class=\"__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden\">\n <axm-questionnaire-viewer\n #viewer\n [structure]=\"structure()!\"\n [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n ></axm-questionnaire-viewer>\n </div>\n </div>\n }\n </div>\n }\n @if (structure() && (flowStep() === 'pre' || flowStep() === 'questions' || flowStep() === 'review' || flowStep() === 'summary' || flowStep() === 'results')) {\n <ax-footer class=\"__standalone-footer ax-flex ax-items-center ax-justify-between ax-gap-4 ax-py-4 ax-mt-4 ax-px-4 ax-border-t ax-border-surface ax-lightest-surface\">\n <ax-prefix>\n @if (flowStep() === 'questions') {\n <div class=\"__footer-progress ax-text-sm ax-font-mono ax-tabular-nums\" dir=\"ltr\">\n @if (showProgressBar()) {\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n }\n </div>\n }\n </ax-prefix>\n <ax-suffix>\n @if (flowStep() === 'pre') {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.start' | translate | async\" (onClick)=\"flowStep.set('questions')\"></ax-button>\n } @else if (flowStep() === 'questions') {\n @if (showNavigationButtons()) {\n <ax-button look=\"solid\" [disabled]=\"!canNavigatePrevious()\" [text]=\"'@general:actions.previous.title' | translate | async\" (onClick)=\"handlePreviousClick()\"></ax-button>\n @if (!isLastStep()) {\n <ax-button look=\"solid\" color=\"primary\" [disabled]=\"!canNavigateNext()\" [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"handleNextClick()\"></ax-button>\n }\n }\n @if (isLastStep() && showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.review' | translate | async\" [disabled]=\"!areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n @if (isLastStep() && !showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" [disabled]=\"isReadonly() || isSubmitting() || !areAllRequiredQuestionsAnswered()\" (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n } @else if (flowStep() === 'review') {\n <ax-button look=\"outline\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.edit' | translate | async\" (onClick)=\"flowStep.set('questions')\"></ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n } @else if (flowStep() === 'results') {\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"flowStep.set('summary')\"></ax-button>\n } @else {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\" (onClick)=\"handleDone()\"></ax-button>\n }\n } @else if (flowStep() === 'summary') {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\" (onClick)=\"handleDone()\"></ax-button>\n }\n </ax-suffix>\n </ax-footer>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStopwatchComponent,\n AXMQuestionnaireViewerComponent,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [AXPWidgetCoreService, AXPContextStore],\n styleUrl: './questionnaire-viewer-standalone-page.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-standalone-page' },\n})\nexport class AXMQuestionnaireViewerStandalonePageComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly route = inject(ActivatedRoute);\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly structure = signal<QuestionnaireBuilderValue | null>(null);\n protected readonly questionnaire = signal<AXMAssessmentManagementQuestionnaireEntityModel | null>(null);\n protected readonly initialAnswers = signal<Record<string, any>>({});\n protected readonly prePostConfig = signal<ReturnType<typeof toPrePostConfig>>(null);\n protected readonly viewerConfig = signal<QuestionnaireViewerConfig | undefined>({ readonly: false });\n protected readonly isLoading = signal(true);\n protected readonly loadError = signal<string | null>(null);\n protected readonly isSubmitting = signal(false);\n\n protected readonly flowStep = signal<FlowStep>('questions');\n protected readonly reviewSnapshot = signal<QuestionWithAnswer[]>([]);\n protected readonly reviewContext = signal<Record<string, any> | null>(null);\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly canNavigatePrevious = signal(false);\n protected readonly canNavigateNext = signal(false);\n protected readonly showNavigationButtons = signal(false);\n protected readonly isLastStep = signal(false);\n protected readonly areAllRequiredQuestionsAnswered = signal(false);\n\n //#endregion\n\n //#region ---- View References ----\n\n protected readonly viewer = viewChild<AXMQuestionnaireViewerComponent>('viewer');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly viewerViewModel = computed(() => this.viewer()?.viewmodel);\n protected readonly totalQuestionsCount = computed(() => this.viewerViewModel()?.totalQuestionsCount() ?? 0);\n protected readonly showTimer = computed(() => this.viewerViewModel()?.showTimer() ?? false);\n protected readonly timerTimeLimit = computed(() => this.viewerViewModel()?.timerTimeLimit());\n protected readonly timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0);\n protected readonly showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false);\n protected readonly answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0);\n protected readonly isReadonly = computed(() => this.viewerConfig()?.readonly ?? false);\n\n protected readonly showReviewButton = computed(\n () => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions'\n );\n\n /** Use answers from review context when returning from review; otherwise use initial answers. */\n protected readonly effectiveInitialAnswers = computed(() => {\n const ctx = this.reviewContext();\n if (!ctx) return this.initialAnswers();\n return (ctx as { answers?: Record<string, any> }).answers ?? ctx;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const v = this.viewer();\n if (v) {\n const vm = v.viewmodel;\n this.canNavigatePrevious.set(vm.canNavigatePrevious());\n this.canNavigateNext.set(vm.canNavigateNext());\n const viewMode = v.viewMode;\n this.showNavigationButtons.set(viewMode === 'page-per-group' || viewMode === 'page-per-question' || viewMode === 'side-menu');\n this.isLastStep.set(v.isLastStep);\n this.areAllRequiredQuestionsAnswered.set(v.areAllRequiredQuestionsAnswered);\n }\n });\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadData(): Promise<void> {\n const sessionId = this.route.snapshot.paramMap.get('sessionId') ?? this.route.parent?.snapshot.paramMap.get('sessionId');\n if (!sessionId) {\n this.loadError.set('Session ID is required');\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.loadError.set(null);\n\n try {\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (!session) {\n this.loadError.set('Session not found');\n this.isLoading.set(false);\n return;\n }\n\n const caseId = session.caseId;\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(caseId);\n if (!assessmentCase) {\n this.loadError.set('Assessment case not found');\n this.isLoading.set(false);\n return;\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire?.questions?.sections?.length) {\n this.loadError.set('Questionnaire or questions not found');\n this.isLoading.set(false);\n return;\n }\n\n const answers = session.answers ?? {};\n const cfg = toPrePostConfig(questionnaire);\n this.questionnaire.set(questionnaire);\n this.structure.set({\n ...questionnaire.questions,\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n } as QuestionnaireBuilderValue);\n this.initialAnswers.set(answers);\n this.prePostConfig.set(cfg);\n this.flowStep.set(cfg?.pre.enabled === true ? 'pre' : 'questions');\n this.viewerConfig.set({ readonly: false });\n } catch (err: any) {\n this.loadError.set(err?.message ?? 'Failed to load questionnaire');\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Submit Handler ----\n\n private async saveSessionAndGetSummary(answers: Record<string, any>): Promise<SummaryPlaceholderValues | null> {\n const sessionId = this.route.snapshot.paramMap.get('sessionId') ?? this.route.parent?.snapshot.paramMap.get('sessionId');\n const structureVal = this.structure();\n const q = this.questionnaire();\n if (!sessionId || !structureVal || !q) return null;\n\n const { answeredQuestionsCount, progressPercentage } =\n this.questionnaireViewerService.calculateProgressFromStructure(structureVal, answers);\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (session) {\n await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .update(sessionId, {\n answers,\n progressPercentage,\n answeredQuestionsCount,\n lastSavedAt: new Date(),\n });\n }\n\n const elapsed = this.viewerViewModel()?.timerElapsed() ?? 0;\n return this.questionnaireViewerService.buildSummaryPlaceholderValues(structureVal, answers, {\n questionnaireId: q.id,\n elapsedSeconds: elapsed,\n });\n }\n\n /**\n * After successful submit: outcomes first (if enabled), then summary last (if enabled), else close.\n */\n private applyPostSubmitFlow(summary: SummaryPlaceholderValues | null): void {\n const cfg = this.prePostConfig();\n if (!summary) {\n this.handleDone();\n return;\n }\n if (cfg?.post.showCalculationResults === true) {\n this.flowStep.set('results');\n return;\n }\n if (cfg?.post.summaryEnabled === true) {\n this.flowStep.set('summary');\n return;\n }\n this.handleDone();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleReviewClick(): void {\n const viewer = this.viewer();\n const items = viewer?.getQuestionsWithAnswers() ?? [];\n const context = viewer?.getReviewContext() ?? null;\n this.reviewSnapshot.set(\n items.map((q) => ({\n name: q.name,\n title: q.title,\n answer: q.answer,\n question: q.question,\n sectionName: q.sectionName,\n sectionOrder: q.sectionOrder,\n sectionTitle: q.sectionTitle,\n sectionDescription: q.sectionDescription,\n })),\n );\n this.reviewContext.set(context);\n this.flowStep.set('review');\n }\n\n protected async handleReviewSubmit(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected async handlePreviousClick(): Promise<void> {\n await this.viewer()?.navigatePrevious();\n }\n\n protected async handleNextClick(): Promise<void> {\n await this.viewer()?.navigateNext();\n }\n\n protected async handleSubmitClick(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected handleDone(): void {\n // Standalone: could navigate away or show message\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["normalizeValidationStrategy","i3","i6","i7","i1","i4","i5","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs","sources":["../../../../libs/modules/assessment-management/src/lib/const.ts","../../../../libs/modules/assessment-management/src/lib/entity.provider.ts","../../../../libs/modules/assessment-management/src/lib/features.keys.ts","../../../../libs/modules/assessment-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/menu.keys.ts","../../../../libs/modules/assessment-management/src/lib/permission.keys.ts","../../../../libs/modules/assessment-management/src/lib/menu.provider.ts","../../../../libs/modules/assessment-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/search-command.provider.ts","../../../../libs/modules/assessment-management/src/lib/manifest.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget.config.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/widget-definition.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.module.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-bank-interface.utils.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-comment.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-hint.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questionnaire-builder.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/utils/pre-post-content.utils.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.service.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.viewmodel.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/question/questionnaire-viewer-question.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/section-header/questionnaire-viewer-section-header.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/single-page-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/page-per-group-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/page-per-question-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/side-menu-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/viewer-container/viewer-container.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/viewer-container/viewer-container.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-evaluator-scope.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.module.ts","../../../../libs/modules/assessment-management/src/lib/assessment-management.module.ts","../../../../libs/modules/assessment-management/src/lib/entities/question-bank-item/question-bank-item.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/questionnaire/questionnaire.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/assessment-case/assessment-case.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/assessment-session/assessment-session.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/questionnaire-calculation/questionnaire-calculation.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/pre-questionnaire-content/pre-questionnaire-content.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/post-questionnaire-content/post-questionnaire-content.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/pages/viewer-standalone-page/questionnaire-viewer-standalone-page.component.ts","../../../../libs/modules/assessment-management/src/acorex-modules-assessment-management.ts"],"sourcesContent":["//#region ---- Root Configuration ----\n\nconst config = { i18n: 'assessment-management' };\n\nexport const RootConfig = {\n config,\n module: {\n module: 'assessment-management',\n route: 'assessment-management',\n name: 'AssessmentManagement',\n title: '@assessment-management:module.title',\n icon: 'fa-light fa-clipboard-list-check',\n },\n entities: {\n questionBankItem: {\n name: 'QuestionBankItem',\n title: '@assessment-management:question-bank.entities.question-bank-item.title',\n titlePlural: '@assessment-management:question-bank.entities.question-bank-item.plural',\n icon: 'fa-light fa-question-circle',\n },\n questionnaire: {\n name: 'Questionnaire',\n title: '@assessment-management:questionnaires.entities.questionnaire.title',\n titlePlural: '@assessment-management:questionnaires.entities.questionnaire.plural',\n icon: 'fa-light fa-clipboard-list',\n },\n assessmentCase: {\n name: 'AssessmentCase',\n title: '@assessment-management:cases.entities.assessment-case.title',\n titlePlural: '@assessment-management:cases.entities.assessment-case.plural',\n icon: 'fa-light fa-briefcase',\n },\n assessmentSession: {\n name: 'AssessmentSession',\n title: '@assessment-management:sessions.entities.assessment-session.title',\n titlePlural: '@assessment-management:sessions.entities.assessment-session.plural',\n icon: 'fa-light fa-clipboard-check',\n },\n questionnaireCalculation: {\n name: 'QuestionnaireCalculation',\n title: '@assessment-management:questionnaire-calculations.entities.questionnaire-calculation.title',\n titlePlural: '@assessment-management:questionnaire-calculations.entities.questionnaire-calculation.plural',\n icon: 'fa-light fa-calculator',\n },\n },\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { inject, Injector } from '@angular/core';\nimport { AXPEntity } from '@acorex/platform/common';\nimport { AXPEntityDefinitionLoader } from '@acorex/platform/layout/entity';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Entity Provider ----\n\nexport class AXMAssessmentManagementEntityProvider implements AXPEntityDefinitionLoader {\n private readonly injector = inject(Injector);\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.questionBankItem.name:\n return (await import('./entities/question-bank-item/question-bank-item.entity')).factory(this.injector);\n\n case RootConfig.entities.questionnaire.name:\n return (await import('./entities/questionnaire/questionnaire.entity')).factory();\n\n case RootConfig.entities.assessmentCase.name:\n return (await import('./entities/assessment-case/assessment-case.entity')).factory(this.injector);\n\n case RootConfig.entities.assessmentSession.name:\n return (await import('./entities/assessment-session/assessment-session.entity')).factory(this.injector);\n\n case RootConfig.entities.questionnaireCalculation.name:\n return (await import('./entities/questionnaire-calculation/questionnaire-calculation.entity')).factory(this.injector);\n }\n }\n\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n return Promise.resolve(\n Object.values(RootConfig.entities).map((e) => ({ name: e.name, module: m }))\n );\n }\n}\n\n//#endregion\n\n","export const AXMAssessmentManagementFeatureKeys = {\n QuestionnaireManagement: 'AssessmentManagement:Feature:Questionnaire.Management',\n} as const;\n\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { AXMAssessmentManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Assessment Management Feature Definition Provider.\n * Provides feature definitions for the Assessment Management module.\n */\nexport class AXMAssessmentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Question Bank feature\n context.addFeature(AXMAssessmentManagementFeatureKeys.QuestionnaireManagement, {\n title: '@assessment-management:features.questionnaire-management.title',\n description: '@assessment-management:features.questionnaire-management.description',\n defaultValue: true,\n type: 'boolean',\n });\n }\n}\n\n//#endregion\n\n","export const AXPAssessmentManagementMenuKeys = {\n Questionnaires: 'AssessmentManagement:Menu:Questionnaires',\n Cases: 'AssessmentManagement:Menu:Cases',\n QuestionBankItems: 'AssessmentManagement:Menu:QuestionBankItems',\n} as const;\n\n","export const AXMAssessmentManagementPermissionKeys = {\n AssessmentManagement: {\n QuestionBank: 'AssessmentManagement:QuestionBank:Management',\n Questionnaire: {\n Management: 'AssessmentManagement:Questionnaire:Management',\n Create: 'AssessmentManagement:Questionnaire:Create',\n Edit: 'AssessmentManagement:Questionnaire:Edit',\n Delete: 'AssessmentManagement:Questionnaire:Delete',\n },\n Case: {\n Management: 'AssessmentManagement:Case:Management',\n Create: 'AssessmentManagement:Case:Create',\n Edit: 'AssessmentManagement:Case:Edit',\n Delete: 'AssessmentManagement:Case:Delete',\n },\n Session: {\n Management: 'AssessmentManagement:Session:Management',\n Create: 'AssessmentManagement:Session:Create',\n Edit: 'AssessmentManagement:Session:Edit',\n Delete: 'AssessmentManagement:Session:Delete',\n },\n QuestionnaireCalculation: {\n Management: 'AssessmentManagement:QuestionnaireCalculation:Management',\n },\n Automation: {\n Management: 'AssessmentManagement:Automation:Management',\n },\n },\n} as const;\n\n","//#region ---- Imports ----\n\nimport { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPAssessmentManagementMenuKeys } from './menu.keys';\nimport { AXMAssessmentManagementPermissionKeys } from './permission.keys';\n\n//#endregion\n\n//#region ---- Menu Provider ----\n\nexport class AXMAssessmentManagementMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n\n // Configuration > Forms & Assessments: Question Bank, Questionnaires\n const formsMenu = context.find(AXPCommonMenuKeys.FormsAndAssessments);\n if (!formsMenu.exists) {\n context.find(AXPCommonMenuKeys.Configuration).addItems([\n {\n name: AXPCommonMenuKeys.FormsAndAssessments,\n priority: 8935,\n text: '@general:menus.forms-and-assessments.title',\n icon: 'fa-light fa-clipboard-list-check',\n type: 'menu',\n children: [],\n },\n ]);\n }\n\n context.find(AXPCommonMenuKeys.FormsAndAssessments).addItems([\n {\n name: AXPAssessmentManagementMenuKeys.QuestionBankItems,\n text: '@assessment-management:question-bank.entities.question-bank-item.plural',\n path: this.entityService.withEntity(module.name, RootConfig.entities.questionBankItem.name).createPath(),\n icon: RootConfig.entities.questionBankItem.icon,\n priority: 1,\n policy: {\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.QuestionBank],\n },\n },\n {\n name: AXPAssessmentManagementMenuKeys.Questionnaires,\n text: RootConfig.entities.questionnaire.titlePlural,\n path: this.entityService.withEntity(module.name, RootConfig.entities.questionnaire.name).createPath(),\n icon: RootConfig.entities.questionnaire.icon,\n priority: 2,\n policy: {\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.Questionnaire.Management],\n },\n },\n ]);\n\n // Root under MODULES: Assessments (Cases)\n context.addItems([\n {\n name: AXPAssessmentManagementMenuKeys.Cases,\n priority: 9010,\n text: '@general:menus.assessments.title',\n icon: RootConfig.entities.assessmentCase.icon,\n path: this.entityService.withEntity(module.name, RootConfig.entities.assessmentCase.name).createPath(),\n policy: {\n features: [module.name],\n permissions: [AXMAssessmentManagementPermissionKeys.AssessmentManagement.Case.Management],\n },\n },\n ]);\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable } from '@angular/core';\nimport { AXMAssessmentManagementPermissionKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Permission Provider ----\n\n@Injectable()\nexport class AXMAssessmentManagementPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n const keys = AXMAssessmentManagementPermissionKeys.AssessmentManagement;\n\n // I18n path constants for cleaner code\n const MODULE_PERMISSIONS = '@assessment-management:module.permissions';\n const QUESTION_BANK_PERMISSIONS = '@assessment-management:question-bank.permissions.question-bank';\n const QUESTIONNAIRE_PERMISSIONS = '@assessment-management:questionnaires.permissions.questionnaire';\n const CASE_PERMISSIONS = '@assessment-management:cases.permissions.assessment-case';\n const SESSION_PERMISSIONS = '@assessment-management:sessions.permissions.assessment-session';\n const QUESTIONNAIRE_CALCULATION_PERMISSIONS =\n '@assessment-management:questionnaire-calculations.permissions.questionnaire-calculation';\n const AUTOMATION_PERMISSIONS = '@assessment-management:automations.permissions.automation';\n\n context\n .addGroup(\n RootConfig.module.name,\n `${MODULE_PERMISSIONS}.title`,\n `${MODULE_PERMISSIONS}.description`\n )\n\n // QuestionBank Permission\n .addPermission(\n keys.QuestionBank,\n `${QUESTION_BANK_PERMISSIONS}.management.title`,\n `${QUESTION_BANK_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n // Questionnaire Permissions\n .addPermission(\n keys.Questionnaire.Management,\n `${QUESTIONNAIRE_PERMISSIONS}.management.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Questionnaire.Create,\n `${QUESTIONNAIRE_PERMISSIONS}.create.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Questionnaire.Edit,\n `${QUESTIONNAIRE_PERMISSIONS}.edit.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Questionnaire.Delete,\n `${QUESTIONNAIRE_PERMISSIONS}.delete.title`,\n `${QUESTIONNAIRE_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // AssessmentCase Permissions\n .addPermission(\n keys.Case.Management,\n `${CASE_PERMISSIONS}.management.title`,\n `${CASE_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Case.Create,\n `${CASE_PERMISSIONS}.create.title`,\n `${CASE_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Case.Edit,\n `${CASE_PERMISSIONS}.edit.title`,\n `${CASE_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Case.Delete,\n `${CASE_PERMISSIONS}.delete.title`,\n `${CASE_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // AssessmentSession Permissions\n .addPermission(\n keys.Session.Management,\n `${SESSION_PERMISSIONS}.management.title`,\n `${SESSION_PERMISSIONS}.management.description`\n )\n .addChild(\n keys.Session.Create,\n `${SESSION_PERMISSIONS}.create.title`,\n `${SESSION_PERMISSIONS}.create.description`\n )\n .addChild(\n keys.Session.Edit,\n `${SESSION_PERMISSIONS}.edit.title`,\n `${SESSION_PERMISSIONS}.edit.description`\n )\n .addChild(\n keys.Session.Delete,\n `${SESSION_PERMISSIONS}.delete.title`,\n `${SESSION_PERMISSIONS}.delete.description`\n )\n .endPermission()\n\n // QuestionnaireCalculation Permissions\n .addPermission(\n keys.QuestionnaireCalculation.Management,\n `${QUESTIONNAIRE_CALCULATION_PERMISSIONS}.management.title`,\n `${QUESTIONNAIRE_CALCULATION_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n // Automation Permissions\n .addPermission(\n keys.Automation.Management,\n `${AUTOMATION_PERMISSIONS}.management.title`,\n `${AUTOMATION_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n .endGroup();\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPSearchCommandProvider, AXPSearchResult, createEntityCommandOptions } from '@acorex/platform/common';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Search Command Provider ----\n\nexport class AXMAssessmentManagementSearchCommandProvider extends AXPSearchCommandProvider {\n commands: AXPSearchResult[] = [\n {\n id: 'create-questionnaire',\n group: 'command',\n title: 'New Questionnaire',\n icon: RootConfig.entities.questionnaire.icon,\n description: 'Create a new assessment questionnaire, survey, checklist, or test.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`,\n {\n name: RootConfig.entities.questionnaire.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.questionnaire.title,\n }\n ),\n },\n },\n {\n id: 'create-question-bank-item',\n group: 'command',\n title: 'New Question',\n icon: RootConfig.entities.questionBankItem.icon,\n description: 'Create a new question for the question bank.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}`,\n {\n name: RootConfig.entities.questionBankItem.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.questionBankItem.title,\n }\n ),\n },\n },\n {\n id: 'create-assessment-case',\n group: 'command',\n title: 'New Assessment Case',\n icon: RootConfig.entities.assessmentCase.icon,\n description: 'Assign a questionnaire to a target entity for a purpose.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}`,\n {\n name: RootConfig.entities.assessmentCase.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.assessmentCase.title,\n }\n ),\n },\n },\n {\n id: 'create-assessment-session',\n group: 'command',\n title: 'New Assessment Session',\n icon: RootConfig.entities.assessmentSession.icon,\n description: 'Create a new assessment session for filling out a questionnaire.',\n command: {\n name: 'Entity:Create',\n options: createEntityCommandOptions(\n `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}`,\n {\n name: RootConfig.entities.assessmentSession.name,\n module: RootConfig.module.name,\n title: RootConfig.entities.assessmentSession.title,\n }\n ),\n },\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Assessment Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const AssessmentManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n required: false,\n\n // Module dependencies (optional)\n};\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXP_WIDGETS_EDITOR_CATEGORY, AXPWidgetConfig, AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\n//#endregion\n\n//#region ---- Widget config ----\n\nexport const AXMQuestionBankInterfaceEditorWidget: AXPWidgetConfig = {\n name: 'question-bank-interface-editor',\n title: '@assessment-management:question-bank.entities.question-bank-item.fields.interface.title',\n icon: 'fa-solid fa-puzzle-piece',\n description:\n '@assessment-management:question-bank.entities.question-bank-item.fields.interface.description',\n categories: AXP_WIDGETS_EDITOR_CATEGORY,\n groups: [AXPWidgetGroupEnum.UtilityWidget],\n type: 'editor',\n defaultFilterWidgetName: 'string-filter',\n properties: [\n AXP_NAME_PROPERTY,\n AXP_DATA_PATH_PROPERTY,\n {\n name: 'fieldName',\n title: 'Field Name',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'fieldName',\n type: 'text-box',\n options: {\n placeholder: 'Enter field name',\n },\n },\n },\n },\n {\n name: 'fieldTitle',\n title: 'Field Title',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'fieldTitle',\n type: 'text-box',\n options: {\n placeholder: 'Enter field title',\n },\n },\n },\n },\n {\n name: 'label',\n title: 'Label',\n visible: true,\n group: { name: 'general', title: 'General', order: 1 },\n schema: {\n dataType: 'string',\n interface: {\n path: 'label',\n type: 'text-box',\n options: {\n placeholder: 'Enter label',\n },\n },\n },\n },\n ],\n components: {\n edit: {\n component: () =>\n import('./question-bank-interface-editor-widget-edit.component').then(\n (c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent,\n ),\n },\n designer: {\n component: () =>\n import('./question-bank-interface-editor-widget-edit.component').then(\n (c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent,\n ),\n },\n column: {\n component: () =>\n import('@acorex/platform/layout/widgets').then((m) => m.AXPWidgetFieldConfiguratorWidgetColumnComponent),\n },\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXMQuestionBankInterfaceEditorWidget } from './widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget.config';\n\n//#endregion\n\n//#region ---- Questionnaire Builder Widgets Provider ----\n\n@Injectable()\nexport class AXMQuestionnaireBuilderWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return [AXMQuestionBankInterfaceEditorWidget];\n }\n}\n\n//#endregion\n","import { NgModule } from '@angular/core';\nimport { AXMMetaDataDefinitionEntityModule } from '@acorex/modules/data-management';\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMQuestionnaireBuilderWidgetsProvider } from './widget-definition.provider';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n AXMMetaDataDefinitionEntityModule,\n ],\n exports: [],\n declarations: [],\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMQuestionnaireBuilderWidgetsProvider, multi: true },\n ],\n})\nexport class AXMQuestionnaireBuilderFeatureModule { }\n\n","//#region ---- Imports ----\n\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { AXMQuestionBankItemInterfaceValue } from './question-bank-item.types';\n\n//#endregion\n\n//#region ---- Strip metadata for widget runtime ----\n\n/**\n * Returns a plain {@link AXPWidgetNode} for rendering / validation, removing optional\n * `metadata` provenance stored alongside the widget configuration on question bank items.\n */\nexport function stripQuestionBankInterfaceMetadata(\n value: AXMQuestionBankItemInterfaceValue | AXPWidgetNode | undefined | null,\n): AXPWidgetNode | undefined {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) {\n return value === null || value === undefined ? undefined : (value as unknown as AXPWidgetNode);\n }\n const v = value as unknown as Record<string, unknown>;\n if (!('metadata' in v) || v['metadata'] === undefined) {\n return value as unknown as AXPWidgetNode;\n }\n const { metadata: _metadata, ...rest } = v;\n return Object.keys(rest).length ? (rest as unknown as AXPWidgetNode) : undefined;\n}\n\n//#endregion\n\n//#region ---- Clone from meta-data definition row ----\n\n/**\n * Normalizes the `interface` field of a meta-data definition entity row to a widget node.\n */\nexport async function resolveWidgetNodeFromMetaDataDefinitionInterface(\n raw: string | AXPWidgetNode | (() => Promise<AXPWidgetNode>) | null | undefined,\n): Promise<AXPWidgetNode | null> {\n if (raw == null) {\n return null;\n }\n if (typeof raw === 'function') {\n const node = await raw();\n return node && node.type ? cloneDeep(node) : null;\n }\n if (typeof raw === 'string') {\n try {\n const parsed = JSON.parse(raw || '{}') as AXPWidgetNode;\n return parsed?.type ? cloneDeep(parsed) : null;\n } catch {\n return null;\n }\n }\n if (typeof raw === 'object' && (raw as AXPWidgetNode).type) {\n return cloneDeep(raw as AXPWidgetNode);\n }\n return null;\n}\n\n//#endregion\n","//#region ---- Question comment value object ----\n\n/**\n * Respondent free-text comment configuration (per question bank item; overridable per questionnaire item).\n */\nexport interface AXMAssessmentQuestionCommentConfig {\n enabled: boolean;\n required: boolean;\n}\n\n/**\n * Default when no configuration is stored.\n */\nexport const DEFAULT_QUESTION_COMMENT_CONFIG: AXMAssessmentQuestionCommentConfig = {\n enabled: false,\n required: false,\n};\n\n/**\n * Normalizes API / partial values to a complete config.\n */\nexport function normalizeQuestionCommentConfig(\n value: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n): AXMAssessmentQuestionCommentConfig {\n return {\n enabled: value?.enabled === true,\n required: value?.required === true,\n };\n}\n\n/**\n * Merges question bank defaults with optional questionnaire item overrides.\n */\nexport function mergeQuestionCommentConfig(\n bank: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n override: Partial<AXMAssessmentQuestionCommentConfig> | null | undefined,\n): AXMAssessmentQuestionCommentConfig {\n const b = normalizeQuestionCommentConfig(bank);\n if (!override) {\n return b;\n }\n return {\n enabled: override.enabled !== undefined ? override.enabled === true : b.enabled,\n required: override.required !== undefined ? override.required === true : b.required,\n };\n}\n\n/**\n * Returns only fields that differ from the bank default (for persisting questionnaire item overrides).\n */\nexport function diffQuestionCommentOverride(\n bank: AXMAssessmentQuestionCommentConfig,\n edited: AXMAssessmentQuestionCommentConfig,\n): Partial<AXMAssessmentQuestionCommentConfig> | undefined {\n const diff: Partial<AXMAssessmentQuestionCommentConfig> = {};\n if (edited.enabled !== bank.enabled) {\n diff.enabled = edited.enabled;\n }\n if (edited.required !== bank.required) {\n diff.required = edited.required;\n }\n return Object.keys(diff).length > 0 ? diff : undefined;\n}\n\n/**\n * Context path for the respondent comment text for a questionnaire item (`answers.comments.<itemName>`).\n */\nexport function getQuestionAnswerCommentStoragePath(questionItemName: string): string {\n return `answers.comments.${questionItemName}`;\n}\n\n//#endregion\n","//#region ---- Question hint value object ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\n\n/**\n * Visual style when a hint is shown (maps to ax-alert color).\n */\nexport type AXMAssessmentQuestionHintVisualMode = 'info' | 'warning' | 'danger' | 'success' | 'neutral';\n\n/**\n * `off` = no hint (same intent as \"hidden\" / \"none\"); visual modes require {@link AXMAssessmentQuestionHintConfigShown.content}.\n */\nexport type AXMAssessmentQuestionHintMode = 'off' | AXMAssessmentQuestionHintVisualMode;\n\nexport type AXMAssessmentQuestionHintConfigOff = { mode: 'off' };\n\nexport type AXMAssessmentQuestionHintConfigShown = {\n mode: AXMAssessmentQuestionHintVisualMode;\n content: AXPMultiLanguageString;\n};\n\n/**\n * Question hint configuration (question bank default; overridable per questionnaire item).\n */\nexport type AXMAssessmentQuestionHintConfig = AXMAssessmentQuestionHintConfigOff | AXMAssessmentQuestionHintConfigShown;\n\n/**\n * Partial override on a questionnaire item (`undefined` / omitted fields inherit from the bank).\n */\nexport type AXMAssessmentQuestionHintPartial = {\n mode?: AXMAssessmentQuestionHintMode;\n content?: AXPMultiLanguageString;\n};\n\nexport const DEFAULT_QUESTION_HINT_CONFIG: AXMAssessmentQuestionHintConfig = { mode: 'off' };\n\nconst VISUAL_MODES: readonly AXMAssessmentQuestionHintVisualMode[] = [\n 'info',\n 'warning',\n 'danger',\n 'success',\n 'neutral',\n];\n\nfunction isEmptyHintContent(c: AXPMultiLanguageString | undefined): boolean {\n if (c == null) {\n return true;\n }\n if (typeof c === 'string') {\n return c.trim().length === 0;\n }\n if (typeof c === 'object') {\n return Object.values(c as Record<string, unknown>).every(\n (v) => typeof v !== 'string' || v.trim().length === 0,\n );\n }\n return true;\n}\n\n/** Normalizes select / API values to a hint mode (exported for questionnaire builder forms). */\nexport function normalizeQuestionHintMode(raw: unknown): AXMAssessmentQuestionHintMode | undefined {\n if (raw == null) {\n return undefined;\n }\n if (typeof raw === 'string') {\n if (raw === 'off') {\n return 'off';\n }\n if (VISUAL_MODES.includes(raw as AXMAssessmentQuestionHintVisualMode)) {\n return raw as AXMAssessmentQuestionHintVisualMode;\n }\n return undefined;\n }\n if (typeof raw === 'object' && raw !== null && 'id' in raw) {\n const id = (raw as { id: unknown }).id;\n return normalizeQuestionHintMode(id);\n }\n return undefined;\n}\n\n/**\n * Reads optional `hint` or legacy flat `hintContent` / `hintMode` from a record (API / persisted rows).\n */\nexport function readHintFieldsFromRecord(rec: Record<string, unknown> | null | undefined): {\n hint?: unknown;\n legacyContent?: unknown;\n legacyMode?: unknown;\n} {\n if (!rec) {\n return {};\n }\n const hint = rec['hint'] ?? rec['Hint'];\n const legacyContent = rec['hintContent'] ?? rec['hint_content'];\n const legacyMode = rec['hintMode'] ?? rec['hint_mode'];\n return { hint, legacyContent, legacyMode };\n}\n\n/**\n * Normalizes API / partial values to a complete config. Coerces legacy flat fields when `hint` is absent.\n */\nexport function normalizeQuestionHintConfig(\n value: AXMAssessmentQuestionHintConfig | AXMAssessmentQuestionHintPartial | null | undefined,\n legacy?: { hintContent?: AXPMultiLanguageString; hintMode?: unknown },\n): AXMAssessmentQuestionHintConfig {\n let mode = normalizeQuestionHintMode(\n value && typeof value === 'object' && 'mode' in value ? (value as { mode?: unknown }).mode : undefined,\n );\n let content =\n value && typeof value === 'object' && 'content' in value\n ? ((value as { content?: AXPMultiLanguageString }).content as AXPMultiLanguageString | undefined)\n : undefined;\n\n const hintObj = value && typeof value === 'object' && ('mode' in value || 'content' in value) ? value : null;\n const noStructuredHint = !hintObj || (mode === undefined && content === undefined);\n\n if (noStructuredHint && legacy) {\n const lm = normalizeQuestionHintMode(legacy.hintMode);\n const lc = legacy.hintContent;\n if (lm !== undefined) {\n mode = lm;\n }\n if (lc !== undefined) {\n content = lc;\n }\n }\n\n if (mode === 'off' || mode === undefined) {\n if (mode === undefined && content != null && !isEmptyHintContent(content)) {\n const fallbackMode: AXMAssessmentQuestionHintVisualMode = 'info';\n return { mode: fallbackMode, content: content as AXPMultiLanguageString };\n }\n return { mode: 'off' };\n }\n\n if (isEmptyHintContent(content)) {\n return { mode: 'off' };\n }\n\n return { mode, content: content as AXPMultiLanguageString };\n}\n\n/**\n * Merges question bank defaults with optional questionnaire item overrides (per-field, like former hintContent/hintMode).\n */\nexport function mergeQuestionHintForViewer(\n bank: AXMAssessmentQuestionHintConfig | null | undefined,\n item: AXMAssessmentQuestionHintPartial | null | undefined,\n): AXMAssessmentQuestionHintConfig {\n const b = normalizeQuestionHintConfig(bank);\n if (!item || (item.mode === undefined && item.content === undefined)) {\n return b;\n }\n\n if (item.mode !== undefined) {\n const mode = normalizeQuestionHintMode(item.mode) ?? 'off';\n if (mode === 'off') {\n return { mode: 'off' };\n }\n const content =\n item.content !== undefined\n ? item.content\n : b.mode !== 'off'\n ? b.content\n : undefined;\n return normalizeQuestionHintConfig({ mode, content });\n }\n\n const mode: AXMAssessmentQuestionHintMode = b.mode !== 'off' ? b.mode : 'info';\n return normalizeQuestionHintConfig({ mode, content: item.content });\n}\n\n/**\n * Returns only fields that differ from the bank default (for persisting questionnaire item overrides).\n */\nexport function diffQuestionHintOverride(\n bank: AXMAssessmentQuestionHintConfig,\n edited: AXMAssessmentQuestionHintConfig,\n): AXMAssessmentQuestionHintPartial | undefined {\n if (edited.mode === 'off' && bank.mode === 'off') {\n return undefined;\n }\n if (edited.mode === 'off' && bank.mode !== 'off') {\n return { mode: 'off' };\n }\n if (bank.mode === 'off' && edited.mode !== 'off') {\n return { mode: edited.mode, content: edited.content };\n }\n const diff: AXMAssessmentQuestionHintPartial = {};\n if (edited.mode !== bank.mode) {\n diff.mode = edited.mode;\n }\n if (edited.mode !== 'off') {\n const bc = bank.mode !== 'off' ? bank.content : undefined;\n const ec = edited.content;\n if (JSON.stringify(ec ?? null) !== JSON.stringify(bc ?? null)) {\n diff.content = ec;\n }\n }\n return Object.keys(diff).length > 0 ? diff : undefined;\n}\n\n/**\n * Normalizes a question bank row (or similar) to a full hint config, including legacy flat fields.\n */\nexport function normalizeQuestionHintFromEntityRow(row: unknown): AXMAssessmentQuestionHintConfig {\n const fr = readHintFieldsFromRecord(row as Record<string, unknown> | null | undefined);\n return normalizeQuestionHintConfig(\n fr.hint as AXMAssessmentQuestionHintConfig | AXMAssessmentQuestionHintPartial | null | undefined,\n {\n hintContent: fr.legacyContent as AXPMultiLanguageString | undefined,\n hintMode: fr.legacyMode,\n },\n );\n}\n\n/**\n * Reads optional questionnaire item hint override from a persisted item record (including legacy keys).\n */\nexport function parseQuestionHintPartialFromRecord(\n row: Record<string, unknown> | null | undefined,\n): AXMAssessmentQuestionHintPartial | undefined {\n if (!row) {\n return undefined;\n }\n const fr = readHintFieldsFromRecord(row);\n if (fr.hint != null && typeof fr.hint === 'object' && !Array.isArray(fr.hint)) {\n const h = fr.hint as AXMAssessmentQuestionHintPartial;\n if (h.mode !== undefined || h.content !== undefined) {\n const out: AXMAssessmentQuestionHintPartial = {};\n if (h.mode !== undefined) {\n const m = normalizeQuestionHintMode(h.mode);\n if (m !== undefined) {\n out.mode = m;\n }\n }\n if (h.content !== undefined) {\n out.content = h.content;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n }\n }\n if (fr.legacyContent == null && fr.legacyMode == null) {\n return undefined;\n }\n const out: AXMAssessmentQuestionHintPartial = {};\n if (fr.legacyMode !== undefined) {\n const m = normalizeQuestionHintMode(fr.legacyMode);\n if (m !== undefined) {\n out.mode = m;\n }\n }\n if (fr.legacyContent !== undefined) {\n out.content = fr.legacyContent as AXPMultiLanguageString;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPExpression, AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\nimport type { AXMAssessmentQuestionCommentConfig } from '../../entities/question-bank-item/question-comment.types';\nimport {\n parseQuestionHintPartialFromRecord,\n type AXMAssessmentQuestionHintPartial,\n} from '../../entities/question-bank-item/question-hint.types';\n\n//#endregion\n\n//#region ---- Questionnaire Builder Types ----\n\n/**\n * Represents a single question item within a section\n */\nexport interface QuestionnaireBuilderItem {\n /** Unique technical name within the questionnaire (answer keys, visibility, calculations). */\n name: string;\n /** Optional labels for answer.byTag / answer.allByTag in calculations (case-insensitive match). */\n tags?: string[];\n questionBankItemId: string;\n order: number;\n /** Static `true` / `false` or an expression string for conditional required. */\n isRequired?: boolean | AXPExpression;\n /** `false` hides; expression string for conditional visibility; omitted / `true` means visible (default). */\n isVisible?: boolean | AXPExpression;\n interfaceOverride?: AXPWidgetNode;\n /** Partial override of question bank `hint`; omitted keys inherit from the bank item. */\n hint?: AXMAssessmentQuestionHintPartial;\n /** Partial override of question bank `comment` policy; omitted keys inherit from the bank item. */\n comment?: Partial<AXMAssessmentQuestionCommentConfig>;\n isNewlyAdded?: boolean;\n\n // Related question data (from expose)\n question?: {\n id: string;\n title: AXPMultiLanguageString;\n question?: AXPMultiLanguageString;\n note?: AXPMultiLanguageString;\n difficulty?: string;\n interface?: {\n type?: string;\n };\n };\n}\n\n/**\n * Answer map key for a questionnaire item (matches viewer session).\n */\nexport function getQuestionnaireItemAnswerKey(item: Pick<QuestionnaireBuilderItem, 'name'>): string {\n return typeof item.name === 'string' ? item.name.trim() : '';\n}\n\n//#endregion\n\n//#region ---- Questionnaire Builder Section Types ----\n\n/**\n * Represents a section containing questions\n */\nexport interface QuestionnaireBuilderSection {\n /** Unique technical section name. */\n name: string;\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n order: number;\n /** Optional labels (e.g. for calculations or filtering by section). */\n tags?: string[];\n /** `false` hides section; expression string for conditional visibility; omitted / `true` means visible (default). */\n isVisible?: boolean | AXPExpression;\n items: QuestionnaireBuilderItem[];\n isNewlyAdded?: boolean;\n}\n\n//#endregion\n\n//#region ---- Questionnaire Builder State Types ----\n\n/**\n * Overall state for the questionnaire builder widget (designer mode)\n */\nexport interface QuestionnaireBuilderState {\n sections: QuestionnaireBuilderSection[];\n selectedItemName?: string;\n selectedSectionName?: string;\n displaySettings?: QuestionnaireDisplaySettings;\n}\n\n/**\n * Display settings for questionnaire viewer\n */\nexport interface QuestionnaireDisplaySettings {\n /**\n * View mode: single-page, page-per-group, page-per-question, side-menu\n */\n viewMode?: 'single-page' | 'page-per-group' | 'page-per-question' | 'side-menu';\n\n /**\n * Show progress bar\n */\n showProgressBar?: boolean;\n\n /**\n * Progress calculation mode: answered or navigation\n */\n progressMode?: 'answered' | 'navigation';\n\n /**\n * Show timer\n */\n showTimer?: boolean;\n\n /**\n * Show question numbers\n */\n showQuestionNumbers?: boolean;\n\n /**\n * Auto-save answers as user types\n */\n autoSave?: boolean;\n\n /**\n * Show validation errors inline\n */\n showValidationErrors?: boolean;\n\n /**\n * Allow skipping questions (if not required)\n */\n allowSkipping?: boolean;\n\n /**\n * Show question counter (e.g., \"Question 3 of 10\")\n */\n showQuestionCounter?: boolean;\n\n /**\n * Validation timing strategy:\n * - step: validate on each step/section navigation\n * - end: validate only at final submit\n * Default: step\n */\n validationStrategy?: 'step' | 'end';\n}\n\n/**\n * Value structure stored in entity (simplified for persistence)\n */\nexport interface QuestionnaireBuilderValue {\n sections: Array<{\n name: string;\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n order: number;\n tags?: string[];\n isVisible?: boolean | AXPExpression;\n items: Array<{\n name: string;\n questionBankItemId: string;\n order: number;\n isRequired?: boolean | AXPExpression;\n isVisible?: boolean | AXPExpression;\n interfaceOverride?: AXPWidgetNode;\n hint?: AXMAssessmentQuestionHintPartial;\n comment?: Partial<AXMAssessmentQuestionCommentConfig>;\n tags?: string[];\n }>;\n }>;\n /**\n * Display settings for questionnaire viewer\n */\n displaySettings?: QuestionnaireDisplaySettings;\n}\n\n//#endregion\n\n//#region ---- Utility Functions ----\n\n/**\n * True only when the item is statically required (boolean true), not expression-based.\n */\nexport function isQuestionnaireItemStaticallyRequired(isRequired?: boolean | string): boolean {\n return isRequired === true;\n}\n\n/**\n * True when the UI should indicate required (static true or non-empty expression).\n */\nexport function isQuestionnaireItemRequiredForDisplay(isRequired?: boolean | string): boolean {\n if (isRequired === true) {\n return true;\n }\n if (typeof isRequired === 'string' && isRequired.trim() !== '') {\n return true;\n }\n return false;\n}\n\n/**\n * Builder list badge mode: static required, expression-driven required, or optional (mapped to badge variants in the builder UI).\n */\nexport type QuestionnaireItemRequiredBadgeMode = 'required' | 'conditional' | 'optional';\n\nexport function getQuestionnaireItemRequiredBadgeMode(isRequired?: boolean | string): QuestionnaireItemRequiredBadgeMode {\n if (isRequired === true) {\n return 'required';\n }\n if (typeof isRequired === 'string') {\n const t = isRequired.trim();\n if (!t) {\n return 'optional';\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return 'required';\n }\n if (tl === 'false' || tl === '0') {\n return 'optional';\n }\n return 'conditional';\n }\n return 'optional';\n}\n\n/**\n * Builder list badge mode for visibility: always visible (default), hidden, or expression-driven.\n */\nexport type QuestionnaireItemVisibilityBadgeMode = 'visible' | 'hidden' | 'conditional';\n\nexport function getQuestionnaireItemVisibilityBadgeMode(isVisible?: boolean | string | null): QuestionnaireItemVisibilityBadgeMode {\n if (isVisible === false) {\n return 'hidden';\n }\n if (isVisible === true || isVisible === undefined || isVisible === null) {\n return 'visible';\n }\n if (typeof isVisible === 'string') {\n const t = isVisible.trim();\n if (!t) {\n return 'visible';\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return 'visible';\n }\n if (tl === 'false' || tl === '0') {\n return 'hidden';\n }\n return 'conditional';\n }\n return 'visible';\n}\n\n/**\n * Convert raw value to builder state\n */\nexport function convertValueToState(value: QuestionnaireBuilderValue | null | undefined): QuestionnaireBuilderState {\n // Handle null/undefined or empty sections\n if (!value || !value.sections || value.sections.length === 0) {\n // Always return at least one default section\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return {\n sections: [defaultSection],\n displaySettings: value?.displaySettings,\n };\n }\n\n // Handle structure (sections with nested items)\n return {\n sections: value.sections.map((section, sectionIndex) => {\n const legacy = section as { id?: string };\n const sectionName =\n (typeof section.name === 'string' && section.name.trim()) ||\n (typeof legacy.id === 'string' && legacy.id.trim()) ||\n `section-${sectionIndex}`;\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order ?? sectionIndex,\n tags: section.tags,\n isVisible: section.isVisible,\n items: (section.items || []).map((item, itemIndex) => {\n const itemLegacy = item as { id?: string };\n const itemName =\n (typeof item.name === 'string' && item.name.trim()) ||\n (typeof itemLegacy.id === 'string' && itemLegacy.id.trim()) ||\n `item-${itemIndex}`;\n return {\n name: itemName,\n questionBankItemId: item.questionBankItemId,\n order: item.order ?? itemIndex,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n interfaceOverride: item.interfaceOverride,\n hint: parseQuestionHintPartialFromRecord(item as unknown as Record<string, unknown>),\n comment: item.comment,\n tags: item.tags,\n isNewlyAdded: false,\n };\n }),\n isNewlyAdded: false,\n };\n }),\n displaySettings: value.displaySettings,\n };\n}\n\n/**\n * Convert builder state to value for persistence\n */\nexport function convertStateToValue(state: QuestionnaireBuilderState, existingValue?: QuestionnaireBuilderValue): QuestionnaireBuilderValue {\n const result: QuestionnaireBuilderValue = {\n sections: state.sections\n .filter((section) => {\n // Drop sections that are NOT newly added AND have no items\n // Keep sections that are newly added OR have items\n const isNewlyAdded = section.isNewlyAdded === true;\n const hasItems = section.items.length > 0;\n\n return isNewlyAdded || hasItems;\n })\n .map((section) => {\n return {\n name: section.name,\n title: section.title,\n description: section.description,\n order: section.order,\n tags: section.tags,\n isVisible: section.isVisible,\n items: section.items.map((item) => ({\n name: item.name,\n questionBankItemId: item.questionBankItemId,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n interfaceOverride: item.interfaceOverride,\n hint: item.hint,\n comment: item.comment,\n tags: item.tags,\n })),\n };\n }),\n };\n\n // Preserve displaySettings from state first, then from existing value if state doesn't have it\n if (state.displaySettings) {\n result.displaySettings = state.displaySettings;\n } else if (existingValue?.displaySettings) {\n result.displaySettings = existingValue.displaySettings;\n }\n\n return result;\n}\n\n/**\n * Create a default section\n */\nexport function createDefaultSection(): QuestionnaireBuilderSection {\n const name = `section-${Date.now()}`;\n return {\n name,\n title: 'New Section',\n description: undefined,\n order: 0,\n isVisible: undefined,\n items: [],\n isNewlyAdded: true,\n };\n}\n\n/**\n * All questionnaire item names currently in the structure (for uniqueness when allocating new names).\n */\nexport function collectQuestionnaireItemNames(sections: QuestionnaireBuilderSection[]): Set<string> {\n const set = new Set<string>();\n for (const sec of sections) {\n for (const it of sec.items) {\n if (it.name) set.add(it.name);\n }\n }\n return set;\n}\n\n/**\n * Allocates the next user-friendly name (`q1`, `q2`, …) not present in `used`.\n * Increments from the highest existing `q<number>` name, then skips collisions.\n */\nexport function allocateNextQuestionItemName(used: Set<string>): string {\n let maxQ = 0;\n for (const id of used) {\n const m = /^q(\\d+)$/i.exec(id.trim());\n if (m) maxQ = Math.max(maxQ, parseInt(m[1], 10));\n }\n let n = maxQ + 1;\n let candidate = `q${n}`;\n while (used.has(candidate)) {\n n++;\n candidate = `q${n}`;\n }\n return candidate;\n}\n\n//#endregion\n\n","//#region ---- Pre/Post Content Utilities ----\n\nimport { resolveMultiLanguageString } from '@acorex/platform/core';\nimport type { PrePostContentValue } from '../../../entities/questionnaire/questionnaire.types';\n\n/**\n * Formats elapsed seconds as `m:ss` or `h:mm:ss` when an hour or more.\n */\nexport function formatElapsedDuration(totalSeconds: number): string {\n const s = Math.max(0, Math.floor(totalSeconds));\n const hours = Math.floor(s / 3600);\n const minutes = Math.floor((s % 3600) / 60);\n const secs = s % 60;\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n }\n return `${minutes}:${secs.toString().padStart(2, '0')}`;\n}\n\n/**\n * Placeholder values for post-questionnaire summary content.\n * Fixed keys plus any {{name}} from questionnaire calculation outcomes.\n */\nexport interface SummaryPlaceholderValues {\n totalQuestions?: number;\n answeredCount?: number;\n /** Elapsed questionnaire time in whole seconds (e.g. from the viewer timer). */\n totalTimeSeconds?: number;\n /** Pre-formatted duration for {{totalTime}}. */\n totalTimeFormatted?: string;\n /** Computed calculation values (name -> value) for placeholders like {{bmi}}. */\n outcomes?: Record<string, unknown>;\n /** Display label per calculation `name` (entity title); used in the outcomes list UI. */\n outcomeTitles?: Record<string, string>;\n}\n\n/**\n * Resolve placeholders in summary content.\n * Fixed: {{totalQuestions}}, {{answeredCount}}, {{totalTime}}, {{elapsedSeconds}}.\n * Plus any {{calculationName}} from values.outcomes.\n */\nexport function resolveSummaryPlaceholders(\n content: string,\n values: SummaryPlaceholderValues\n): string {\n if (!content) return '';\n\n const elapsed = values.totalTimeSeconds;\n const totalTimeStr =\n values.totalTimeFormatted ??\n (elapsed !== undefined && elapsed !== null ? formatElapsedDuration(elapsed) : '');\n\n let result = content\n .replace(/\\{\\{totalQuestions\\}\\}/g, String(values.totalQuestions ?? ''))\n .replace(/\\{\\{answeredCount\\}\\}/g, String(values.answeredCount ?? ''))\n .replace(/\\{\\{totalTime\\}\\}/g, totalTimeStr)\n .replace(/\\{\\{elapsedSeconds\\}\\}/g, elapsed !== undefined && elapsed !== null ? String(elapsed) : '');\n\n const outcomes = values.outcomes;\n if (outcomes && typeof outcomes === 'object') {\n for (const [key, val] of Object.entries(outcomes)) {\n const re = new RegExp(`\\\\{\\\\{\\\\s*${escapeRegExp(key)}\\\\s*\\\\}\\\\}`, 'g');\n result = result.replace(re, val !== undefined && val !== null ? String(val) : '');\n }\n }\n\n return result;\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Strip HTML tags for plain-text labels (validation messages, review fallback).\n */\nexport function stripHtmlToPlain(html: string): string {\n if (!html?.trim()) return '';\n try {\n if (typeof DOMParser !== 'undefined') {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n const text = doc.body?.textContent?.trim();\n if (text) return text;\n }\n } catch {\n /* ignore */\n }\n return html.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * Human-readable label for a question bank item: prefer plain text from rich `question`, else `title`.\n */\nexport function resolveQuestionBankItemPlainLabel(\n details: { title: PrePostContentValue; question?: PrePostContentValue | null | undefined },\n locale: string,\n): string {\n const q = details.question;\n if (q != null && q !== '') {\n const html = resolveMultiLanguageString(q, locale);\n const plain = stripHtmlToPlain(html);\n if (plain) return plain;\n }\n const titleResolved = resolveMultiLanguageString(details.title, locale);\n return titleResolved.trim() || 'This field';\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { AXPopupService } from '@acorex/components/popup';\nimport {\n AXPExpressionEvaluatorService,\n AXPExpressionEvaluatorScope,\n AXPDeviceService,\n} from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { get } from 'lodash-es';\nimport type {\n AXMAssessmentManagementQuestionnaireCalculationEntityModel,\n QuestionnaireCalculationResultKind,\n} from '../../entities/questionnaire-calculation/questionnaire-calculation.types';\nimport { RootConfig } from '../../const';\nimport {\n QuestionnaireBuilderItem,\n QuestionnaireBuilderValue,\n getQuestionnaireItemAnswerKey,\n} from '../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from './questionnaire-viewer.types';\nimport type { PrePostConfig } from '../../entities/questionnaire/questionnaire.types';\nimport { formatElapsedDuration, type SummaryPlaceholderValues } from './utils/pre-post-content.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Named values produced by questionnaire calculations (calculation `name` → evaluated value). */\nexport type QuestionnaireCalculationValues = Record<string, unknown>;\n\nexport interface AXMQuestionnaireViewerServiceConfig {\n /**\n * Dialog title\n */\n title: string;\n\n /**\n * Questionnaire structure data\n */\n structure: QuestionnaireBuilderValue;\n\n /**\n * Pre/post questionnaire config (welcome, review, summary)\n */\n prePostConfig?: PrePostConfig | null;\n\n /**\n * Optional viewer configuration\n * If not provided, displaySettings from structure will be used\n */\n config?: QuestionnaireViewerConfig;\n\n\n /**\n * Initial answers to pre-fill the questionnaire\n */\n initialAnswers?: Record<string, any>;\n\n /**\n * Persisted questionnaire entity id — used to load and evaluate questionnaire calculations on submit.\n */\n questionnaireId?: string;\n\n /**\n * When provided, called on submit. Should save and return result for summary.\n */\n submitHandler?: (answers: Record<string, any>) => Promise<SummaryPlaceholderValues | null | void>;\n}\n\nexport interface AXMQuestionnaireViewerServiceResult {\n /**\n * All answers from the questionnaire\n */\n answers: Record<string, any>;\n\n /**\n * Questions with their corresponding answers\n */\n questions: Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n }>;\n\n /**\n * Whether the dialog was submitted (true) or closed (false)\n */\n submitted: boolean;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the questionnaire viewer dialog and evaluates questionnaire calculations when a questionnaire id is provided.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMQuestionnaireViewerService {\n //#region ---- Services & Dependencies ----\n\n private readonly popupService = inject(AXPopupService);\n private readonly entityService = inject(AXPEntityService);\n private readonly expressionEvaluator = inject(AXPExpressionEvaluatorService);\n protected readonly deviceService = inject(AXPDeviceService);\n\n //#endregion\n\n //#region ---- Public Methods ----\n\n /**\n * Open questionnaire viewer in a dialog\n */\n async open(config: AXMQuestionnaireViewerServiceConfig): Promise<AXMQuestionnaireViewerServiceResult | null> {\n const { AXMQuestionnaireViewerPopupComponent } = await import('./pages/viewer-popup/questionnaire-viewer-popup.component');\n const structure = config.structure;\n const submitHandler =\n config.submitHandler ??\n ((answers: Record<string, any>) =>\n this.buildSummaryPlaceholderValues(structure, answers, { questionnaireId: config.questionnaireId }));\n const result = await this.popupService.open(AXMQuestionnaireViewerPopupComponent, {\n title: config.title,\n size: this.deviceService.isSmall() ? 'full' : 'lg',\n data: {\n structure: config.structure,\n prePostConfig: config.prePostConfig ?? null,\n config: config.config,\n initialAnswers: config.initialAnswers || {},\n submitHandler,\n questionnaireId: config.questionnaireId,\n },\n });\n\n return result.data || null;\n }\n\n /**\n * Evaluate all questionnaire calculations for the given questionnaire and answers.\n * Pass `structure` so expressions can use `answer.byId`, `answer.byTag`, and `answer.allByTag`.\n */\n /**\n * Resolves `isVisible` for a section or question: `false` hides; `true`/undefined shows;\n * non-empty string is evaluated with the same scope as questionnaire calculations (`answer.*`, `fn.*`, etc.).\n */\n async evaluateQuestionnaireVisibilityFlag(\n isVisible: boolean | string | undefined | null,\n answers: Record<string, unknown>,\n structure: QuestionnaireBuilderValue | null | undefined,\n ): Promise<boolean> {\n if (isVisible === false) {\n return false;\n }\n if (isVisible === true || isVisible === undefined || isVisible === null) {\n return true;\n }\n const trimmed = String(isVisible).trim();\n if (!trimmed) {\n return true;\n }\n try {\n const scope = this.buildExpressionScope(answers, {}, structure ?? null);\n const wrapped = trimmed.includes('{{') ? trimmed : `{{ ${trimmed} }}`;\n const raw = await this.expressionEvaluator.evaluate(wrapped, scope as AXPExpressionEvaluatorScope);\n return this.coerceOutcome(raw, 'boolean') as boolean;\n } catch (err) {\n console.warn('[QuestionnaireViewer] Visibility expression evaluation failed:', isVisible, err);\n return false;\n }\n }\n\n /**\n * Evaluates questionnaire calculations and returns values plus display titles from calculation entities.\n */\n async evaluateOutcomes(\n questionnaireId: string,\n answers: Record<string, unknown>,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<{ values: QuestionnaireCalculationValues; outcomeTitles: Record<string, string> }> {\n const rules = await this.loadCalculationsForQuestionnaire(questionnaireId);\n if (!rules?.length) return { values: {}, outcomeTitles: {} };\n\n const sorted = this.topologicalSort(rules);\n const outcomes: QuestionnaireCalculationValues = {};\n const outcomeTitles: Record<string, string> = {};\n\n for (const rule of sorted) {\n if (rule.name) {\n outcomeTitles[rule.name] = this.resolveOutcomeDisplayTitle(rule);\n }\n const value = await this.computeResult(rule, answers, outcomes, structure);\n if (rule.name && value !== undefined) outcomes[rule.name] = value;\n }\n\n return { values: outcomes, outcomeTitles };\n }\n\n /**\n * Progress metrics and optional calculation results for summary / preview.\n */\n async buildSummaryPlaceholderValues(\n structure: QuestionnaireBuilderValue,\n answers: Record<string, any>,\n options?: { questionnaireId?: string; elapsedSeconds?: number },\n ): Promise<SummaryPlaceholderValues> {\n const { answeredQuestionsCount } = this.calculateProgressFromStructure(structure, answers);\n const totalQuestions =\n structure?.sections?.reduce((s, sec) => s + (sec.items?.length ?? 0), 0) ?? 0;\n let outcomes: Record<string, unknown> | undefined;\n let outcomeTitles: Record<string, string> | undefined;\n if (options?.questionnaireId) {\n const { values: evaluated, outcomeTitles: titles } = await this.evaluateOutcomes(\n options.questionnaireId,\n answers as Record<string, unknown>,\n structure,\n );\n if (Object.keys(evaluated).length > 0) {\n outcomes = evaluated;\n outcomeTitles = titles;\n }\n }\n const elapsed = options?.elapsedSeconds;\n const totalTimeFormatted =\n elapsed !== undefined && elapsed !== null ? formatElapsedDuration(elapsed) : undefined;\n return {\n totalQuestions,\n answeredCount: answeredQuestionsCount,\n totalTimeSeconds: elapsed,\n totalTimeFormatted,\n outcomes,\n outcomeTitles,\n };\n }\n\n //#endregion\n\n //#region ---- Progress ----\n\n /**\n * Count answered questions using the same paths as the viewer session (item id or answers.itemId).\n */\n calculateProgressFromStructure(\n structure: QuestionnaireBuilderValue,\n answers: Record<string, any>,\n ): { answeredQuestionsCount: number; progressPercentage: number } {\n if (!structure?.sections?.length) {\n return { answeredQuestionsCount: 0, progressPercentage: 0 };\n }\n let answered = 0;\n let total = 0;\n for (const section of structure.sections) {\n if (!section.items?.length) continue;\n for (const item of section.items) {\n total++;\n const key = getQuestionnaireItemAnswerKey(item);\n const value = key ? this.resolveStoredAnswer(answers, key) : null;\n const isEmpty =\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n if (!isEmpty) answered++;\n }\n }\n const progressPercentage = total > 0 ? Math.round((answered / total) * 100) : 0;\n return { answeredQuestionsCount: answered, progressPercentage };\n }\n\n //#endregion\n\n //#region ---- Questionnaire calculations (evaluation) ----\n\n private async loadCalculationsForQuestionnaire(\n questionnaireId: string,\n ): Promise<AXMAssessmentManagementQuestionnaireCalculationEntityModel[]> {\n const result = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaireCalculation.name)\n .data<string, AXMAssessmentManagementQuestionnaireCalculationEntityModel>()\n .query({\n filter: {\n field: 'questionnaireId',\n operator: { type: 'equal' },\n value: questionnaireId,\n },\n take: 500,\n skip: 0,\n });\n return (result?.items ?? []) as AXMAssessmentManagementQuestionnaireCalculationEntityModel[];\n }\n\n /**\n * Display label for a calculation: entity `title` when set, otherwise a humanized `name`.\n */\n private resolveOutcomeDisplayTitle(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): string {\n const title = rule.title;\n if (typeof title === 'string') {\n const t = title.trim();\n if (t.length > 0) return t;\n }\n const name = rule.name?.trim();\n if (name) return this.humanizeCalculationKey(name);\n return '';\n }\n\n private humanizeCalculationKey(name: string): string {\n return name\n .replace(/_/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n }\n\n private async computeResult(\n rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel,\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<unknown> {\n const exprText = this.calculationExpressionText(rule);\n if (!exprText) return undefined;\n const raw = await this.evaluateOutcomeExpression(exprText, answers, outcomes, structure);\n return this.coerceOutcome(raw, this.inferResultKind(rule));\n }\n\n /** Non-empty trimmed `expression`, or empty string if missing. */\n private calculationExpressionText(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): string {\n const exp = rule.expression;\n return typeof exp === 'string' ? exp.trim() : '';\n }\n\n private inferResultKind(rule: AXMAssessmentManagementQuestionnaireCalculationEntityModel): QuestionnaireCalculationResultKind {\n const k = rule.resultKind;\n if (k === 'number' || k === 'string' || k === 'boolean') return k;\n return 'number';\n }\n\n private coerceOutcome(raw: unknown, kind: QuestionnaireCalculationResultKind): unknown {\n if (raw === undefined || raw === null) return raw;\n switch (kind) {\n case 'boolean': {\n if (typeof raw === 'boolean') return raw;\n if (typeof raw === 'number') return raw !== 0;\n if (typeof raw === 'string') {\n const s = raw.toLowerCase().trim();\n if (['true', '1', 'yes'].includes(s)) return true;\n if (['false', '0', 'no'].includes(s)) return false;\n }\n return Boolean(raw);\n }\n case 'number': {\n const n = Number(raw);\n return Number.isFinite(n) ? n : undefined;\n }\n case 'string':\n return raw === undefined || raw === null ? '' : String(raw);\n default:\n return raw;\n }\n }\n\n private async evaluateOutcomeExpression(\n expression: string,\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<unknown> {\n const trimmed = expression?.trim();\n if (!trimmed) return undefined;\n try {\n const scope = this.buildExpressionScope(answers, outcomes, structure);\n const wrapped = trimmed.includes('{{') ? trimmed : `{{ ${trimmed} }}`;\n return await this.expressionEvaluator.evaluate(wrapped, scope as AXPExpressionEvaluatorScope);\n } catch (err) {\n console.warn('[QuestionnaireViewer] Calculation expression evaluation failed:', expression, err);\n return undefined;\n }\n }\n\n /**\n * Resolves an answer the same way as the viewer session (`key` or `answers.key`).\n */\n private resolveStoredAnswer(answers: Record<string, unknown>, key: string): unknown {\n const rawKey = String(key ?? '').trim();\n if (!rawKey) return undefined;\n const normalizedKey = rawKey.startsWith('answers.') ? rawKey.slice('answers.'.length) : rawKey;\n if (!normalizedKey) return undefined;\n return answers[normalizedKey] ?? get(answers, normalizedKey) ?? get(answers, `answers.${normalizedKey}`);\n }\n\n /** Sections and items ordered by `order` for deterministic `byTag` matching. */\n private flattenQuestionnaireItems(structure: QuestionnaireBuilderValue | null | undefined): QuestionnaireBuilderItem[] {\n if (!structure?.sections?.length) return [];\n const sections = [...structure.sections].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n const out: QuestionnaireBuilderItem[] = [];\n for (const sec of sections) {\n const items = [...(sec.items ?? [])].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n out.push(...items);\n }\n return out;\n }\n\n private normalizeQuestionnaireTag(tag: string): string {\n return String(tag).trim().toLowerCase();\n }\n\n /**\n * Scope: answer.eval (path), answer.byId / byTag / allByTag, formula.eval / outcome.eval, fn.* helpers.\n */\n private buildExpressionScope(\n answers: Record<string, unknown>,\n outcomes: QuestionnaireCalculationValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Record<string, unknown> {\n const resolveOutcome = (key: string): unknown => outcomes[key];\n const itemsOrdered = this.flattenQuestionnaireItems(structure ?? null);\n\n const itemHasTag = (item: QuestionnaireBuilderItem, normalizedTag: string): boolean => {\n if (!normalizedTag) return false;\n const tags = item.tags ?? [];\n return tags.some((t) => this.normalizeQuestionnaireTag(String(t)) === normalizedTag);\n };\n\n const resolveForItem = (item: QuestionnaireBuilderItem | undefined): unknown => {\n if (!item) return undefined;\n return this.resolveStoredAnswer(answers, getQuestionnaireItemAnswerKey(item));\n };\n\n const findFirstItemByTag = (tag: string): QuestionnaireBuilderItem | undefined => {\n const nt = this.normalizeQuestionnaireTag(tag);\n if (!nt) return undefined;\n return itemsOrdered.find((item) => itemHasTag(item, nt));\n };\n\n const findAllItemsByTag = (tag: string): QuestionnaireBuilderItem[] => {\n const nt = this.normalizeQuestionnaireTag(tag);\n if (!nt) return [];\n return itemsOrdered.filter((item) => itemHasTag(item, nt));\n };\n\n const findItemByStableId = (id: string): QuestionnaireBuilderItem | undefined => {\n const sid = String(id).trim();\n if (!sid) return undefined;\n return itemsOrdered.find((item) => item.name === sid);\n };\n const collectNumeric = (...args: unknown[]): number[] => {\n const out: number[] = [];\n const visit = (a: unknown): void => {\n if (a === undefined || a === null || a === '') return;\n if (typeof a === 'number' && Number.isFinite(a)) {\n out.push(a);\n return;\n }\n if (typeof a === 'string') {\n const t = a.trim();\n if (t !== '' && Number.isFinite(Number(t))) out.push(Number(t));\n return;\n }\n if (Array.isArray(a)) {\n for (const x of a) visit(x);\n }\n };\n for (const arg of args) visit(arg);\n return out;\n };\n\n const fn = {\n SUM: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.reduce((s, x) => s + x, 0);\n },\n AVERAGE: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n if (!arr.length) return undefined;\n return arr.reduce((s, x) => s + x, 0) / arr.length;\n },\n COUNT: (...args: unknown[]) => collectNumeric(...args).length,\n MIN: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.length ? Math.min(...arr) : undefined;\n },\n MAX: (...args: unknown[]) => {\n const arr = collectNumeric(...args);\n return arr.length ? Math.max(...arr) : undefined;\n },\n IF: (cond: unknown, whenTrue: unknown, whenFalse: unknown) => (cond ? whenTrue : whenFalse),\n ROUND: (n: unknown, digits?: unknown) => {\n const x = Number(n);\n const d = digits === undefined ? 0 : Number(digits);\n if (!Number.isFinite(x)) return undefined;\n const p = 10 ** (Number.isFinite(d) ? d : 0);\n return Math.round(x * p) / p;\n },\n };\n\n return {\n answer: {\n eval: (key: string): unknown => this.resolveStoredAnswer(answers, key),\n byId: (id: string): unknown => resolveForItem(findItemByStableId(id)),\n byTag: (tag: string): unknown => resolveForItem(findFirstItemByTag(tag)),\n allByTag: (tag: string): unknown[] =>\n findAllItemsByTag(tag).map((item) => resolveForItem(item)),\n },\n formula: { eval: resolveOutcome },\n outcome: { eval: resolveOutcome },\n fn,\n };\n }\n\n private expressionOutcomeRefs(expression: string | undefined, ruleNames: Set<string>): Set<string> {\n const deps = new Set<string>();\n if (!expression || typeof expression !== 'string') return deps;\n const patterns = [\n /formula\\.eval\\s*\\(\\s*['\"]([a-zA-Z0-9_-]+)['\"]\\s*\\)/g,\n /outcome\\.eval\\s*\\(\\s*['\"]([a-zA-Z0-9_-]+)['\"]\\s*\\)/g,\n ];\n for (const regex of patterns) {\n regex.lastIndex = 0;\n let m: RegExpExecArray | null;\n while ((m = regex.exec(expression)) !== null) {\n const name = m[1];\n if (ruleNames.has(name)) deps.add(name);\n }\n }\n return deps;\n }\n\n private topologicalSort(\n rules: AXMAssessmentManagementQuestionnaireCalculationEntityModel[],\n ): AXMAssessmentManagementQuestionnaireCalculationEntityModel[] {\n const nameToRule = new Map<string, AXMAssessmentManagementQuestionnaireCalculationEntityModel>();\n const ruleNames = new Set<string>();\n for (const r of rules) {\n if (r.name) {\n nameToRule.set(r.name, r);\n ruleNames.add(r.name);\n }\n }\n\n const order: string[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (name: string) => {\n if (visited.has(name)) return;\n if (visiting.has(name)) return;\n visiting.add(name);\n const rule = nameToRule.get(name);\n if (rule) {\n const exprStr = this.calculationExpressionText(rule);\n const formDeps = this.expressionOutcomeRefs(exprStr, ruleNames);\n for (const d of formDeps) visit(d);\n }\n visiting.delete(name);\n visited.add(name);\n order.push(name);\n };\n\n for (const name of ruleNames) visit(name);\n return order\n .map((name) => nameToRule.get(name))\n .filter((r): r is AXMAssessmentManagementQuestionnaireCalculationEntityModel => !!r);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { resolveMultiLanguageString, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetContainerComponent, AXPWidgetNode } from '@acorex/platform/layout/widget-core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { get } from 'lodash-es';\nimport { stripQuestionBankInterfaceMetadata } from '../../entities/question-bank-item/question-bank-interface.utils';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../entities/question-bank-item/question-bank-item.types';\nimport {\n getQuestionAnswerCommentStoragePath,\n mergeQuestionCommentConfig,\n normalizeQuestionCommentConfig,\n type AXMAssessmentQuestionCommentConfig,\n} from '../../entities/question-bank-item/question-comment.types';\nimport type { AXMAssessmentManagementQuestionnaireEntityModel } from '../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../const';\nimport {\n mergeQuestionHintForViewer,\n normalizeQuestionHintFromEntityRow,\n parseQuestionHintPartialFromRecord,\n} from '../../entities/question-bank-item/question-hint.types';\nimport { QuestionnaireBuilderValue, isQuestionnaireItemStaticallyRequired } from '../questionnaire-builder/questionnaire-builder.types';\nimport {\n QuestionnaireViewerAttachment,\n QuestionnaireViewerConfig,\n QuestionnaireViewerData,\n QuestionnaireViewerQuestion,\n QuestionnaireViewerSection,\n QuestionnaireValidationStrategy,\n} from './questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerService } from './questionnaire-viewer.service';\nimport { resolveQuestionBankItemPlainLabel, stripHtmlToPlain } from './utils/pre-post-content.utils';\n\n//#endregion\n\n/** Guards concurrent `refreshVisibility` runs; incremented on each refresh. */\nlet questionnaireViewerVisibilityRefreshSeq = 0;\n\nfunction persistedSectionName(section: QuestionnaireBuilderValue['sections'][number], index: number): string {\n const n = typeof section.name === 'string' ? section.name.trim() : '';\n if (n) return n;\n const legacy = section as { id?: string };\n const id = typeof legacy.id === 'string' ? legacy.id.trim() : '';\n return id || `section-${index}`;\n}\n\nfunction persistedItemName(\n item: QuestionnaireBuilderValue['sections'][number]['items'][number],\n index: number,\n): string {\n const n = typeof item.name === 'string' ? item.name.trim() : '';\n if (n) return n;\n const legacy = item as { id?: string };\n const id = typeof legacy.id === 'string' ? legacy.id.trim() : '';\n return id || `item-${index}`;\n}\n\nfunction normalizeValidationStrategy(value: unknown): QuestionnaireValidationStrategy {\n if (value === 'step' || value === 'end') {\n return value;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id?: unknown }).id === 'string') {\n return normalizeValidationStrategy((value as { id: string }).id);\n }\n return 'step';\n}\n\n//#region ---- Helpers ----\n\n/**\n * Normalize question bank attachments (string[] or AXPFileListItem[]) to viewer attachment list.\n */\nfunction normalizeAttachments(raw: unknown): QuestionnaireViewerAttachment[] {\n if (raw == null) return [];\n if (!Array.isArray(raw)) return [];\n return raw\n .map((item): QuestionnaireViewerAttachment | null => {\n if (typeof item === 'string') return { id: item, name: undefined };\n if (item && typeof item === 'object' && 'id' in item && typeof (item as { id: unknown }).id === 'string') {\n const obj = item as { id: string; name?: string };\n return { id: obj.id, name: typeof obj.name === 'string' ? obj.name : undefined };\n }\n if (item && typeof item === 'object' && 'source' in item) {\n const src = (item as { source?: { kind?: string; value?: unknown } }).source;\n if (src?.kind === 'fileId' && typeof src.value === 'string') {\n const name = (item as { name?: string }).name;\n return { id: src.value, name: typeof name === 'string' ? name : undefined };\n }\n }\n return null;\n })\n .filter((a): a is QuestionnaireViewerAttachment => a != null);\n}\n\nfunction resolvedCommentPolicyForBuilderItem(\n item: QuestionnaireBuilderValue['sections'][number]['items'][number],\n questionDetails: AXMAssessmentManagementQuestionBankItemEntityModel | null,\n): AXMAssessmentQuestionCommentConfig {\n const bank = normalizeQuestionCommentConfig(questionDetails?.comment);\n const override = (item as { comment?: Partial<AXMAssessmentQuestionCommentConfig> }).comment;\n return mergeQuestionCommentConfig(bank, override);\n}\n\n/**\n * Sync visibility: booleans apply immediately; expression strings use the async-filled cache (`cache[id] === false` hides).\n */\nfunction resolveVisibilityFlagSync(\n flag: boolean | string | undefined,\n entityId: string,\n cache: Record<string, boolean>,\n): boolean {\n if (flag === false) {\n return false;\n }\n if (flag === true || flag === undefined) {\n return true;\n }\n return cache[entityId] !== false;\n}\n\nfunction visibleQuestionsForSection(\n section: QuestionnaireViewerSection,\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): QuestionnaireViewerQuestion[] {\n if (!resolveVisibilityFlagSync(section.isVisible, section.name, sectionCache)) {\n return [];\n }\n return section.questions.filter((q) => resolveVisibilityFlagSync(q.isVisible, q.name, questionCache));\n}\n\nfunction countAllVisibleQuestions(\n data: QuestionnaireViewerData,\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): number {\n let n = 0;\n for (const sec of data.sections) {\n n += visibleQuestionsForSection(sec, sectionCache, questionCache).length;\n }\n return n;\n}\n\n/**\n * Section is navigable / renderable when it has at least one visible question (section `isVisible` is applied inside `visibleQuestionsForSection`).\n */\nfunction firstSectionIndexWithVisibleContent(\n sections: QuestionnaireViewerSection[],\n sectionCache: Record<string, boolean>,\n questionCache: Record<string, boolean>,\n): number {\n const idx = sections.findIndex(\n (sec) => visibleQuestionsForSection(sec, sectionCache, questionCache).length > 0,\n );\n return idx === -1 ? 0 : idx;\n}\n\n//#endregion\n\n//#region ---- Validation Error Types ----\n\nexport interface QuestionnaireValidationError {\n name: string;\n questionTitle: string;\n sectionName?: string;\n sectionTitle?: string;\n error: string;\n}\n\nexport interface QuestionnaireValidationResult {\n isValid: boolean;\n errors: QuestionnaireValidationError[];\n}\n\n//#endregion\n\n//#region ---- ViewModel ----\n\nexport const AXMQuestionnaireViewerViewModel = signalStore(\n withState(() => ({\n // Data\n questionnaireData: null as QuestionnaireViewerData | null,\n structure: null as QuestionnaireBuilderValue | null,\n config: null as QuestionnaireViewerConfig | null,\n\n // State\n isLoading: true,\n error: null as string | null,\n\n // Navigation\n currentSectionIndex: 0,\n currentQuestionIndex: 0,\n\n // Timer\n timerElapsed: 0, // seconds\n timerInterval: null as any,\n\n // References\n form: null as any,\n widgetContainer: null as AXPWidgetContainerComponent | null,\n\n // Validation errors\n validationErrors: [] as QuestionnaireValidationError[],\n\n /** Filled by `refreshVisibility` when `isVisible` is an expression string. */\n sectionVisibilityById: {} as Record<string, boolean>,\n questionVisibilityById: {} as Record<string, boolean>,\n })),\n\n withComputed((store) => ({\n //#region ---- View Mode ----\n\n viewMode: computed(() => {\n const config = store.config();\n const configMode = config?.viewMode;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsViewMode = displaySettings?.viewMode;\n return configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n }),\n\n //#endregion\n\n //#region ---- Sections & Questions ----\n\n sections: computed(() => {\n const data = store.questionnaireData();\n return data?.sections || [];\n }),\n\n /** Section indices that have at least one visible question (for side-menu tabs, etc.). */\n sectionIndicesWithVisibleContent: computed(() => {\n const data = store.questionnaireData();\n const list = data?.sections ?? [];\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const indices: number[] = [];\n for (let i = 0; i < list.length; i++) {\n if (visibleQuestionsForSection(list[i], sc, qc).length > 0) {\n indices.push(i);\n }\n }\n return indices;\n }),\n\n currentSection: computed(() => {\n const data = store.questionnaireData();\n if (!data) return null;\n const sections = data.sections;\n const index = store.currentSectionIndex();\n return sections[index] || null;\n }),\n\n currentQuestion: computed(() => {\n const data = store.questionnaireData();\n if (!data) return null;\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const section = data.sections[store.currentSectionIndex()];\n if (!section) return null;\n const visible = visibleQuestionsForSection(section, sc, qc);\n return visible[store.currentQuestionIndex()] ?? null;\n }),\n\n totalQuestionsCount: computed(() => {\n const data = store.questionnaireData();\n if (!data) return 0;\n return countAllVisibleQuestions(data, store.sectionVisibilityById(), store.questionVisibilityById());\n }),\n\n totalSectionsCount: computed(() => {\n const data = store.questionnaireData();\n return data?.sections.length || 0;\n }),\n\n //#endregion\n\n //#region ---- Progress ----\n\n progressMode: computed(() => {\n const config = store.config();\n const configValue = config?.progressMode;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.progressMode;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : 'answered');\n }),\n\n answeredQuestionsCount: computed(() => {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) {\n return 0;\n }\n\n try {\n const contextService = container.contextService;\n const changeEvent = contextService.changeEvent();\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n let answeredCount = 0;\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (!isEmpty) {\n answeredCount++;\n }\n }\n }\n\n return answeredCount;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error counting answered questions:', error);\n return 0;\n }\n }),\n\n progressPercentage: computed(() => {\n const data = store.questionnaireData();\n if (!data) return 0;\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const totalQuestions = countAllVisibleQuestions(data, sc, qc);\n if (totalQuestions === 0) return 0;\n\n // Calculate progress mode\n const config = store.config();\n const structure = store.structure();\n const configValue = config?.progressMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsValue = displaySettings?.progressMode;\n const progressMode = configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : 'answered');\n\n // Calculate view mode\n const configMode = config?.viewMode;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n if (progressMode === 'answered') {\n // Calculate answered count directly\n const container = store.widgetContainer();\n if (!container?.contextService) return 0;\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n let answeredCount = 0;\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (!isEmpty) {\n answeredCount++;\n }\n }\n }\n\n return Math.round((answeredCount / totalQuestions) * 100);\n } catch (error) {\n return 0;\n }\n }\n\n if (progressMode === 'navigation') {\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const totalSections = data.sections.length;\n const currentSection = store.currentSectionIndex();\n return Math.round(((currentSection + 1) / totalSections) * 100);\n }\n\n if (viewMode === 'page-per-question') {\n let currentQuestionIndex = 0;\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n\n for (let i = 0; i < currentSIndex; i++) {\n currentQuestionIndex += visibleQuestionsForSection(data.sections[i], sc, qc).length;\n }\n currentQuestionIndex += currentQIndex + 1;\n\n return Math.round((currentQuestionIndex / totalQuestions) * 100);\n }\n\n return 0;\n }\n\n return 0;\n }),\n\n //#endregion\n\n //#region ---- Display Settings ----\n\n showProgressBar: computed(() => {\n const config = store.config();\n const configValue = config?.showProgressBar;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showProgressBar;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : true);\n }),\n\n showTimer: computed(() => {\n const config = store.config();\n const configValue = config?.timer?.showTimer;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showTimer;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : false);\n }),\n\n timerTimeLimit: computed(() => {\n const config = store.config();\n return config?.timer?.timeLimit;\n }),\n\n showQuestionNumbers: computed(() => {\n const config = store.config();\n const configValue = config?.showQuestionNumbers;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showQuestionNumbers;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : true);\n }),\n\n showQuestionCounter: computed(() => {\n const config = store.config();\n const configValue = config?.showQuestionCounter;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.showQuestionCounter;\n return configValue !== undefined\n ? configValue\n : (displaySettingsValue !== undefined ? displaySettingsValue : false);\n }),\n\n currentQuestionPosition: computed(() => {\n const data = store.questionnaireData();\n if (!data) return { current: 0, total: 0 };\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const total = countAllVisibleQuestions(data, sc, qc);\n\n if (viewMode === 'page-per-question') {\n let current = 0;\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n\n for (let i = 0; i < currentSIndex; i++) {\n current += visibleQuestionsForSection(data.sections[i], sc, qc).length;\n }\n current += currentQIndex + 1;\n\n return { current, total };\n }\n\n return { current: 0, total };\n }),\n\n timerText: computed(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n if (!timeLimit) return '';\n\n const elapsed = store.timerElapsed();\n const remaining = Math.max(0, timeLimit - elapsed);\n\n const hours = Math.floor(remaining / 3600);\n const minutes = Math.floor((remaining % 3600) / 60);\n const seconds = remaining % 60;\n\n if (hours > 0) {\n return `${hours}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n }),\n\n timerWidget: computed<AXPWidgetNode | null>(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n if (!timeLimit) return null;\n\n const widgetNode: AXPWidgetNode = {\n type: 'stopwatch',\n name: 'questionnaire-timer',\n path: 'timer.elapsed',\n options: {\n mode: 'count-down',\n timeLimit: timeLimit,\n format: timeLimit >= 3600 ? 'hh:mm:ss' : 'mm:ss',\n autoStart: true,\n showControls: false,\n },\n mode: 'edit',\n };\n\n return widgetNode;\n }),\n\n validationStrategy: computed<QuestionnaireValidationStrategy>(() => {\n const config = store.config();\n const configValue = config?.validationStrategy;\n const structure = store.structure();\n const displaySettings = structure?.displaySettings;\n\n const displaySettingsValue = displaySettings?.validationStrategy;\n return configValue !== undefined\n ? normalizeValidationStrategy(configValue)\n : normalizeValidationStrategy(displaySettingsValue);\n }),\n\n //#endregion\n\n //#region ---- Navigation ----\n\n canNavigateNext: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visible = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visible.length - 1) {\n return true;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n }\n\n return false;\n }),\n\n canNavigatePrevious: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const sections = data.sections;\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentQIndex = store.currentQuestionIndex();\n const currentSIndex = store.currentSectionIndex();\n if (currentQIndex > 0) {\n return true;\n }\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(data.sections[s], sc, qc).length > 0) {\n return true;\n }\n }\n return false;\n }\n\n return false;\n }),\n\n /**\n * Check if we're on the last step\n */\n isLastStep: computed(() => {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'single-page') {\n // For single-page, we're always on the last step\n return true;\n } else if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return false;\n }\n }\n return true;\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visible = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visible.length - 1) {\n return false;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n }),\n\n /**\n * Check if all required questions are answered\n */\n areAllRequiredQuestionsAnswered: computed(() => {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return false;\n\n try {\n const contextService = container.contextService;\n contextService.changeEvent();\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n // Only check required questions\n if (!isQuestionnaireItemStaticallyRequired(question.isRequired)) continue;\n\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return false;\n }\n }\n }\n\n return true;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error checking required questions:', error);\n return false;\n }\n }),\n\n //#endregion\n })),\n\n withMethods(\n (\n store,\n entityService = inject(AXPEntityService),\n toastService = inject(AXToastService),\n translationService = inject(AXTranslationService),\n questionnaireViewerService = inject(AXMQuestionnaireViewerService),\n ) => ({\n //#region ---- Registration ----\n\n registerForm(form: any): void {\n patchState(store, { form });\n },\n\n registerWidgetContainer(container: AXPWidgetContainerComponent): void {\n patchState(store, { widgetContainer: container });\n void this.refreshVisibility();\n },\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n async loadQuestionnaire(id: string, initialAnswers?: Record<string, any>, config?: QuestionnaireViewerConfig): Promise<void> {\n patchState(store, { isLoading: true, error: null, config: config || null });\n\n try {\n const questionnaire = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(id);\n if (!questionnaire) {\n throw new Error('Questionnaire not found');\n }\n\n const structure: QuestionnaireBuilderValue = questionnaire.questions || { sections: [] };\n\n const sectionsWithQuestions: QuestionnaireViewerSection[] = await Promise.all(\n structure.sections.map(async (section, sectionIndex) => {\n const sectionName = persistedSectionName(section, sectionIndex);\n const questions: QuestionnaireViewerQuestion[] = await Promise.all(\n section.items.map(async (item, itemIndex) => {\n const questionDetails = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(item.questionBankItemId)\n .catch(() => null);\n\n const indexBasedPath = `answers.${sectionIndex}-${itemIndex}`;\n const itemKey = persistedItemName(item, itemIndex);\n const answerKey =\n (typeof item.name === 'string' && item.name.trim()) ||\n (questionDetails as Record<string, unknown> | null)?.['name'] ||\n itemKey;\n\n let widgetInterface: any = stripQuestionBankInterfaceMetadata(\n questionDetails?.interface,\n );\n if (widgetInterface) {\n const path = answerKey ? `answers.${answerKey}` : indexBasedPath;\n const name = answerKey || `answer-${sectionIndex}-${itemIndex}`;\n\n // Get existing validations from options or directly from interface\n const existingOptions = widgetInterface.options || {};\n const existingValidations = existingOptions.validations || widgetInterface.validations || [];\n const validations = [...existingValidations];\n if (item.isRequired === true) {\n const hasRequiredValidation = validations.some(v => v.rule === 'required');\n if (!hasRequiredValidation) {\n validations.push({\n rule: 'required',\n message: 'This field is required.',\n });\n }\n }\n\n // Apply readonly mode from config\n const isReadonly = config?.readonly ?? false;\n\n widgetInterface = {\n ...widgetInterface,\n path: path,\n name: name,\n options: {\n ...existingOptions,\n readonly: isReadonly || existingOptions.readonly,\n validations: validations.length > 0 ? validations : undefined,\n },\n };\n }\n\n const attachments = normalizeAttachments(\n (questionDetails as Record<string, unknown> | null)?.['attachments'],\n );\n\n return {\n name: persistedItemName(item, itemIndex),\n questionBankItemId: item.questionBankItemId,\n sectionName,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n hint: mergeQuestionHintForViewer(\n normalizeQuestionHintFromEntityRow(questionDetails),\n parseQuestionHintPartialFromRecord(item as Record<string, unknown>),\n ),\n comment: resolvedCommentPolicyForBuilderItem(item, questionDetails),\n attachments: attachments.length > 0 ? attachments : undefined,\n question: questionDetails\n ? {\n id: questionDetails.id,\n title: questionDetails.title,\n question: questionDetails.question,\n note: questionDetails.note,\n difficulty: questionDetails.difficulty,\n interface: widgetInterface,\n }\n : {\n id: item.questionBankItemId,\n title: 'Question',\n question: undefined,\n note: undefined,\n difficulty: undefined,\n interface: undefined,\n },\n };\n }),\n );\n\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order,\n isVisible: section.isVisible,\n questions: questions.sort((a, b) => a.order - b.order),\n };\n }),\n );\n\n patchState(store, {\n questionnaireData: {\n id: questionnaire.id,\n title: questionnaire.title,\n description: questionnaire.description,\n type: questionnaire.type,\n sections: sectionsWithQuestions.sort((a, b) => a.order - b.order),\n },\n isLoading: false,\n });\n\n // Set initial answers in widget container context if provided\n if (initialAnswers && Object.keys(initialAnswers).length > 0) {\n const container = store.widgetContainer();\n if (container?.contextService) {\n const currentData = container.contextService.data() || {};\n const existingAnswers = (currentData as any).answers || {};\n const mergedData = { ...currentData, answers: { ...existingAnswers, ...initialAnswers } };\n container.contextService.set(mergedData);\n }\n }\n } catch (err: any) {\n patchState(store, {\n error: err.message || 'Failed to load questionnaire',\n isLoading: false,\n });\n }\n },\n\n async loadStructure(structure: QuestionnaireBuilderValue, config?: QuestionnaireViewerConfig, initialAnswers?: Record<string, any>): Promise<void> {\n patchState(store, { isLoading: true, error: null, structure, config: config || null });\n\n try {\n if (!structure.sections || structure.sections.length === 0) {\n patchState(store, {\n questionnaireData: {\n id: 'preview',\n title: 'Preview',\n description: undefined,\n type: 'questionnaire',\n sections: [],\n },\n isLoading: false,\n });\n return;\n }\n\n const sectionsWithQuestions: QuestionnaireViewerSection[] = await Promise.all(\n structure.sections.map(async (section, sectionIndex) => {\n const sectionName = persistedSectionName(section, sectionIndex);\n const questions: QuestionnaireViewerQuestion[] = await Promise.all(\n (section.items || []).map(async (item, itemIndex) => {\n const questionDetails = await entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(item.questionBankItemId)\n .catch(() => null);\n\n const indexBasedPath = `answers.${sectionIndex}-${itemIndex}`;\n const itemKey = persistedItemName(item, itemIndex);\n const answerKey =\n (typeof item.name === 'string' && item.name.trim()) ||\n (questionDetails as Record<string, unknown> | null)?.['name'] ||\n itemKey;\n\n const rawInterface =\n item.interfaceOverride ?? questionDetails?.interface;\n let widgetInterface: any = stripQuestionBankInterfaceMetadata(rawInterface);\n\n if (widgetInterface) {\n const path = answerKey ? `answers.${answerKey}` : indexBasedPath;\n const name = answerKey || `answer-${sectionIndex}-${itemIndex}`;\n\n // Get existing validations from options or directly from interface\n const existingOptions = widgetInterface.options || {};\n const existingValidations = existingOptions.validations || widgetInterface.validations || [];\n const validations = [...existingValidations];\n if (item.isRequired === true) {\n const hasRequiredValidation = validations.some(v => v.rule === 'required');\n if (!hasRequiredValidation) {\n validations.push({\n rule: 'required',\n options: {\n message: 'This field is required.',\n },\n\n });\n }\n }\n\n // Apply readonly mode from config\n const isReadonly = config?.readonly ?? false;\n\n widgetInterface = {\n ...widgetInterface,\n path: path,\n name: name,\n options: {\n ...existingOptions,\n readonly: isReadonly || existingOptions.readonly,\n validations: validations.length > 0 ? validations : undefined,\n },\n };\n }\n\n const questionData = questionDetails\n ? {\n id: questionDetails.id,\n title: questionDetails.title,\n question: questionDetails.question,\n note: questionDetails.note,\n difficulty: questionDetails.difficulty,\n interface: widgetInterface,\n }\n : {\n id: item.questionBankItemId,\n title: 'Question',\n question: undefined,\n note: undefined,\n difficulty: undefined,\n interface: widgetInterface,\n };\n\n const attachmentsLoadStructure = normalizeAttachments(\n (questionDetails as Record<string, unknown> | null)?.['attachments'],\n );\n\n return {\n name: persistedItemName(item, itemIndex),\n questionBankItemId: item.questionBankItemId,\n sectionName,\n order: item.order,\n isRequired: item.isRequired,\n isVisible: item.isVisible,\n hint: mergeQuestionHintForViewer(\n normalizeQuestionHintFromEntityRow(questionDetails),\n parseQuestionHintPartialFromRecord(item as Record<string, unknown>),\n ),\n comment: resolvedCommentPolicyForBuilderItem(item, questionDetails),\n attachments: attachmentsLoadStructure.length > 0 ? attachmentsLoadStructure : undefined,\n question: questionData,\n };\n }),\n );\n\n return {\n name: sectionName,\n title: section.title,\n description: section.description,\n order: section.order,\n isVisible: section.isVisible,\n questions: questions.sort((a, b) => a.order - b.order),\n };\n }),\n );\n\n patchState(store, {\n questionnaireData: {\n id: 'preview',\n title: 'Preview',\n description: undefined,\n type: 'questionnaire' as const,\n sections: sectionsWithQuestions.sort((a, b) => a.order - b.order),\n },\n isLoading: false,\n });\n\n // Set initial answers in widget container context if provided\n if (initialAnswers && Object.keys(initialAnswers).length > 0) {\n const container = store.widgetContainer();\n if (container?.contextService) {\n const currentData = container.contextService.data() || {};\n const existingAnswers = (currentData as any).answers || {};\n const mergedData = { ...currentData, answers: { ...existingAnswers, ...initialAnswers } };\n container.contextService.set(mergedData);\n }\n }\n } catch (err: any) {\n console.error('[QuestionnaireViewer] Error loading structure:', err);\n patchState(store, {\n error: err.message || 'Failed to load structure',\n isLoading: false,\n });\n }\n },\n\n //#endregion\n\n //#region ---- Validation ----\n\n /**\n * Recomputes async visibility for expression `isVisible` flags (sections and questions).\n */\n async refreshVisibility(): Promise<void> {\n questionnaireViewerVisibilityRefreshSeq += 1;\n const seq = questionnaireViewerVisibilityRefreshSeq;\n const data = store.questionnaireData();\n const structure = store.structure();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) {\n patchState(store, { sectionVisibilityById: {}, questionVisibilityById: {} });\n return;\n }\n const contextData = (container.contextService.data() || {}) as Record<string, unknown>;\n const answers = (contextData['answers'] as Record<string, unknown>) ?? {};\n const sectionMap: Record<string, boolean> = {};\n const questionMap: Record<string, boolean> = {};\n\n for (const section of data.sections) {\n const secVis = await questionnaireViewerService.evaluateQuestionnaireVisibilityFlag(\n section.isVisible,\n answers,\n structure,\n );\n if (seq !== questionnaireViewerVisibilityRefreshSeq) {\n return;\n }\n sectionMap[section.name] = secVis;\n for (const q of section.questions) {\n if (!secVis) {\n questionMap[q.name] = false;\n continue;\n }\n questionMap[q.name] = await questionnaireViewerService.evaluateQuestionnaireVisibilityFlag(\n q.isVisible,\n answers,\n structure,\n );\n if (seq !== questionnaireViewerVisibilityRefreshSeq) {\n return;\n }\n }\n }\n\n const viewMode = store.viewMode();\n const navPatch: { currentSectionIndex?: number; currentQuestionIndex?: number } = {};\n if (viewMode !== 'single-page') {\n let si = store.currentSectionIndex();\n let qi = store.currentQuestionIndex();\n const sections = data.sections;\n\n const sectionIndexOk = (idx: number) =>\n idx >= 0 &&\n idx < sections.length &&\n visibleQuestionsForSection(sections[idx], sectionMap, questionMap).length > 0;\n\n if (!sectionIndexOk(si)) {\n si = firstSectionIndexWithVisibleContent(sections, sectionMap, questionMap);\n qi = 0;\n }\n\n if (viewMode === 'page-per-question') {\n let vis = visibleQuestionsForSection(sections[si], sectionMap, questionMap);\n if (vis.length === 0) {\n const idx = sections.findIndex(\n (sec) => visibleQuestionsForSection(sec, sectionMap, questionMap).length > 0,\n );\n if (idx >= 0) {\n si = idx;\n qi = 0;\n vis = visibleQuestionsForSection(sections[si], sectionMap, questionMap);\n }\n }\n if (vis.length > 0) {\n qi = Math.min(Math.max(0, qi), vis.length - 1);\n } else {\n qi = 0;\n }\n } else {\n qi = 0;\n }\n\n navPatch.currentSectionIndex = si;\n navPatch.currentQuestionIndex = qi;\n }\n\n patchState(store, {\n sectionVisibilityById: sectionMap,\n questionVisibilityById: questionMap,\n ...navPatch,\n });\n },\n\n /**\n * Whether the section should be shown: at least one visible question (section and question `isVisible` rules).\n * Sections with no visible questions are treated as hidden.\n */\n isSectionVisible(section: QuestionnaireViewerSection): boolean {\n return (\n visibleQuestionsForSection(\n section,\n store.sectionVisibilityById(),\n store.questionVisibilityById(),\n ).length > 0\n );\n },\n\n /**\n * Visible questions in a section (respects section and question `isVisible`).\n */\n getVisibleQuestionsInSection(section: QuestionnaireViewerSection): QuestionnaireViewerQuestion[] {\n return visibleQuestionsForSection(\n section,\n store.sectionVisibilityById(),\n store.questionVisibilityById(),\n );\n },\n\n /**\n * Check if a question is visible (section gate + question `isVisible`).\n */\n isQuestionVisible(question: QuestionnaireViewerQuestion): boolean {\n const data = store.questionnaireData();\n if (!data) {\n return true;\n }\n const section = data.sections.find((s) => s.name === question.sectionName);\n if (section && !this.isSectionVisible(section)) {\n return false;\n }\n return resolveVisibilityFlagSync(\n question.isVisible,\n question.name,\n store.questionVisibilityById(),\n );\n },\n\n /**\n * Get visible questions for current page based on view mode\n */\n getVisibleQuestions(): QuestionnaireViewerQuestion[] {\n const data = store.questionnaireData();\n if (!data) {\n return [];\n }\n\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode =\n configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'single-page') {\n const visibleQuestions: QuestionnaireViewerQuestion[] = [];\n for (const section of sections) {\n visibleQuestions.push(...this.getVisibleQuestionsInSection(section));\n }\n return visibleQuestions;\n }\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const currentSection = sections[store.currentSectionIndex()];\n return currentSection ? this.getVisibleQuestionsInSection(currentSection) : [];\n }\n if (viewMode === 'page-per-question') {\n const q = store.currentQuestion();\n return q ? [q] : [];\n }\n\n return [];\n },\n\n /**\n * Validate a single question\n */\n async validateQuestion(question: QuestionnaireViewerQuestion): Promise<string | null> {\n const container = store.widgetContainer();\n if (!container?.contextService) {\n return 'Widget container not available';\n }\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n const widgetPath = question.question.interface?.path;\n\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return 'This field is required.';\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n return 'Comment is required.';\n }\n }\n\n // TODO: Add other validation rules from widget interface\n\n return null;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error validating question:', error);\n return 'Validation error occurred';\n }\n },\n\n /**\n * Validate all visible questions on current page\n */\n async validateCurrentPage(): Promise<QuestionnaireValidationResult> {\n const form = store.form();\n if (!form) {\n console.warn('[QuestionnaireViewer] Form not available for validation');\n return { isValid: true, errors: [] };\n }\n\n // Get visible questions\n const visibleQuestions = this.getVisibleQuestions();\n\n // Get sections for lookup\n const data = store.questionnaireData();\n if (!data) {\n return { isValid: true, errors: [] };\n }\n const sections = data.sections;\n\n // Validate form first to trigger validation (this ensures form state is updated)\n await form.validate();\n\n // Manually validate each visible question\n // The form validation doesn't provide paths in the rules, so we validate manually\n const errors: QuestionnaireValidationError[] = [];\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const question of visibleQuestions) {\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n const section = sections.find((s) => s.name === question.sectionName);\n\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage = await translationService.translateAsync(\n '@acorex:validation.messages.required'\n ) || `${questionTitle} is required`;\n\n // Replace {{ title }} placeholder if present, otherwise use the message as-is\n const finalErrorMessage = errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage;\n\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section?.name,\n sectionTitle: section\n ? resolveMultiLanguageString(section.title, locale)\n : undefined,\n error: finalErrorMessage,\n });\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.comment-required',\n )) || 'A comment is required for this question.';\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section?.name,\n sectionTitle: section\n ? resolveMultiLanguageString(section.title, locale)\n : undefined,\n error: errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage,\n });\n }\n }\n\n // TODO: Add other validation rules from widget interface\n }\n }\n\n patchState(store, { validationErrors: errors });\n\n if (errors.length > 0) {\n const errorMessage = await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.current-page-error'\n ) || `Please complete ${errors.length} required question(s) on this page.`;\n\n toastService.show({\n color: 'danger',\n title: await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.error-title'\n ) || 'Validation Error',\n content: errorMessage,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n /**\n * Validate all questions in entire questionnaire\n */\n async validateAllQuestions(): Promise<QuestionnaireValidationResult> {\n const form = store.form();\n if (!form) {\n return { isValid: true, errors: [] };\n }\n\n const data = store.questionnaireData();\n if (!data) {\n return { isValid: true, errors: [] };\n }\n\n // Validate form first to trigger validation (this ensures form state is updated)\n await form.validate();\n\n // Manually validate all visible questions\n // The form validation doesn't provide paths in the rules, so we validate manually\n const errors: QuestionnaireValidationError[] = [];\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const section of data.sections) {\n for (const question of section.questions) {\n // Only include visible questions\n if (!this.isQuestionVisible(question)) {\n continue;\n }\n\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage = await translationService.translateAsync(\n '@acorex:validation.messages.required'\n ) || `${questionTitle} is required`;\n\n // Replace {{ title }} placeholder if present, otherwise use the message as-is\n const finalErrorMessage = errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage;\n\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section.name,\n sectionTitle: resolveMultiLanguageString(section.title, locale),\n error: finalErrorMessage,\n });\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.comment-required',\n )) || 'A comment is required for this question.';\n errors.push({\n name: question.name,\n questionTitle,\n sectionName: section.name,\n sectionTitle: resolveMultiLanguageString(section.title, locale),\n error: errorMessage.includes('{{ title }}')\n ? errorMessage.replace('{{ title }}', questionTitle)\n : errorMessage,\n });\n }\n }\n\n // TODO: Add other validation rules from widget interface\n }\n }\n }\n\n patchState(store, { validationErrors: errors });\n\n if (errors.length > 0) {\n const errorMessage = await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.all-questions-error'\n ) || `Please complete ${errors.length} required question(s) in the questionnaire.`;\n\n toastService.show({\n color: 'danger',\n title: await translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.validation.error-title'\n ) || 'Validation Error',\n content: errorMessage,\n location: 'bottom-center',\n closeButton: true,\n timeOut: 5000,\n timeOutProgress: true,\n });\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n },\n\n //#endregion\n\n //#region ---- Navigation ----\n\n async navigateNext(): Promise<boolean> {\n if (store.validationStrategy() === 'step') {\n const validationResult = await this.validateCurrentPage();\n if (!validationResult.isValid) {\n return false;\n }\n }\n\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n const currentQIndex = store.currentQuestionIndex();\n const currentSection = sections[currentSIndex];\n if (!currentSection) return false;\n\n const visibleHere = visibleQuestionsForSection(currentSection, sc, qc);\n if (currentQIndex < visibleHere.length - 1) {\n patchState(store, { currentQuestionIndex: currentQIndex + 1 });\n return true;\n }\n for (let s = currentSIndex + 1; s < sections.length; s++) {\n const vis = visibleQuestionsForSection(sections[s], sc, qc);\n if (vis.length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n }\n\n return false;\n },\n\n async navigatePrevious(): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n // Calculate view mode\n const config = store.config();\n const structure = store.structure();\n const configMode = config?.viewMode;\n const displaySettings = structure?.displaySettings;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode = configMode !== undefined\n ? configMode\n : (displaySettingsViewMode !== undefined ? displaySettingsViewMode : 'single-page');\n\n const sections = data.sections;\n\n if (viewMode === 'page-per-group' || viewMode === 'side-menu') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentSIndex = store.currentSectionIndex();\n for (let s = currentSIndex - 1; s >= 0; s--) {\n if (visibleQuestionsForSection(sections[s], sc, qc).length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: 0,\n });\n return true;\n }\n }\n } else if (viewMode === 'page-per-question') {\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const currentQIndex = store.currentQuestionIndex();\n const currentSIndex = store.currentSectionIndex();\n\n if (currentQIndex > 0) {\n patchState(store, { currentQuestionIndex: currentQIndex - 1 });\n return true;\n }\n for (let s = currentSIndex - 1; s >= 0; s--) {\n const vis = visibleQuestionsForSection(sections[s], sc, qc);\n if (vis.length > 0) {\n patchState(store, {\n currentSectionIndex: s,\n currentQuestionIndex: vis.length - 1,\n });\n return true;\n }\n }\n }\n\n return false;\n },\n\n /**\n * Check if current section is valid (without showing toast)\n */\n async isCurrentSectionValid(): Promise<boolean> {\n const form = store.form();\n if (!form) {\n return true;\n }\n\n // Get visible questions\n const visibleQuestions = this.getVisibleQuestions();\n\n // Get sections for lookup\n const data = store.questionnaireData();\n if (!data) {\n return true;\n }\n const sections = data.sections;\n\n // Validate form first to trigger validation\n await form.validate();\n\n // Manually validate each visible question\n const container = store.widgetContainer();\n\n if (container?.contextService) {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n\n for (const question of visibleQuestions) {\n const widgetPath = question.question.interface?.path;\n if (widgetPath) {\n const value = get(contextData, widgetPath);\n\n if (isQuestionnaireItemStaticallyRequired(question.isRequired)) {\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n if (isEmpty) {\n return false;\n }\n }\n }\n\n const commentPolicy = question.comment;\n if (commentPolicy.enabled && commentPolicy.required) {\n const cPath = getQuestionAnswerCommentStoragePath(question.name);\n const cVal = get(contextData, cPath);\n const commentEmpty =\n cVal === null ||\n cVal === undefined ||\n (typeof cVal === 'string' && cVal.trim() === '');\n if (commentEmpty) {\n return false;\n }\n }\n }\n }\n\n return true;\n },\n\n /**\n * Check if a section can be navigated to\n */\n async isSectionNavigable(sectionIndex: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (sectionIndex < 0 || sectionIndex >= sections.length) {\n return false;\n }\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n if (visibleQuestionsForSection(sections[sectionIndex], sc, qc).length === 0) {\n return false;\n }\n\n // If navigating to current section, always allowed\n if (sectionIndex === store.currentSectionIndex()) {\n return true;\n }\n\n // End strategy allows free section navigation.\n if (store.validationStrategy() === 'end') {\n return true;\n }\n\n // Check if current section is valid\n return await this.isCurrentSectionValid();\n },\n\n async navigateToSection(index: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (index < 0 || index >= sections.length) {\n return false;\n }\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n if (visibleQuestionsForSection(sections[index], sc, qc).length === 0) {\n return false;\n }\n\n // Check if navigation is allowed\n const canNavigate = await this.isSectionNavigable(index);\n if (!canNavigate) {\n if (store.validationStrategy() === 'step') {\n await this.validateCurrentPage();\n }\n return false;\n }\n\n patchState(store, {\n currentSectionIndex: index,\n currentQuestionIndex: 0,\n });\n return true;\n },\n\n async navigateToQuestion(sectionIndex: number, questionIndex: number): Promise<boolean> {\n const data = store.questionnaireData();\n if (!data) return false;\n\n const sections = data.sections;\n if (sectionIndex < 0 || sectionIndex >= sections.length) {\n return false;\n }\n\n const section = sections[sectionIndex];\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const visible = visibleQuestionsForSection(section, sc, qc);\n if (questionIndex < 0 || questionIndex >= visible.length) {\n return false;\n }\n\n if (store.validationStrategy() === 'step') {\n const validationResult = await this.validateCurrentPage();\n if (!validationResult.isValid) {\n return false;\n }\n }\n\n patchState(store, {\n currentSectionIndex: sectionIndex,\n currentQuestionIndex: questionIndex,\n });\n return true;\n },\n\n //#endregion\n\n //#region ---- Answers ----\n\n getAllAnswers(): Record<string, any> {\n const container = store.widgetContainer();\n if (!container?.contextService) return {};\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n // Extract answers from context data - answers are stored under 'answers' property\n return (contextData as any).answers || {};\n } catch (error) {\n console.error('[QuestionnaireViewer] Error getting all answers:', error);\n return {};\n }\n },\n\n getQuestionsWithAnswers(): Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n question: QuestionnaireViewerQuestion;\n }> {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return [];\n\n try {\n const contextService = container.contextService;\n const contextData = contextService.data() || {};\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n const questionsWithAnswers: Array<{\n name: string;\n questionBankItemId: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n title: string;\n note?: string;\n answer: any;\n isRequired?: boolean | string;\n question: QuestionnaireViewerQuestion;\n }> = [];\n\n const locale = translationService.getActiveLang?.() ?? 'en-US';\n\n for (const section of data.sections) {\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n const widgetPath = question.question.interface?.path;\n const answer = widgetPath ? get(contextData, widgetPath) : undefined;\n\n const n = question.question.note;\n const notePlain =\n n != null && n !== ''\n ? stripHtmlToPlain(resolveMultiLanguageString(n, locale)) || undefined\n : undefined;\n\n questionsWithAnswers.push({\n name: question.name,\n questionBankItemId: question.questionBankItemId,\n sectionName: section.name,\n sectionOrder: section.order,\n sectionTitle: section.title,\n sectionDescription: section.description,\n title: resolveQuestionBankItemPlainLabel(question.question, locale),\n note: notePlain,\n answer: answer,\n isRequired: question.isRequired,\n question,\n });\n }\n }\n\n return questionsWithAnswers;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error getting questions with answers:', error);\n return [];\n }\n },\n\n /**\n * Get count of unanswered required questions in a section\n * Used for badge display in side-menu view\n */\n getSectionUnansweredRequiredCount(sectionName: string): number {\n const data = store.questionnaireData();\n const container = store.widgetContainer();\n if (!data || !container?.contextService) return 0;\n\n try {\n const contextService = container.contextService;\n contextService.changeEvent();\n const contextData = contextService.data() || {};\n let unansweredCount = 0;\n\n const section = data.sections.find((s) => s.name === sectionName);\n if (!section) return 0;\n\n const sc = store.sectionVisibilityById();\n const qc = store.questionVisibilityById();\n\n for (const question of visibleQuestionsForSection(section, sc, qc)) {\n // Only count required questions\n if (!isQuestionnaireItemStaticallyRequired(question.isRequired)) continue;\n\n const widgetPath = question.question.interface?.path;\n if (!widgetPath) continue;\n\n const value = get(contextData, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && Object.keys(value).length === 0);\n\n if (isEmpty) {\n unansweredCount++;\n }\n }\n\n return unansweredCount;\n } catch (error) {\n console.error('[QuestionnaireViewer] Error counting unanswered required questions:', error);\n return 0;\n }\n },\n\n async submit(): Promise<{ success: boolean; answers: Record<string, any>; errors?: QuestionnaireValidationError[] }> {\n const validationResult = await this.validateAllQuestions();\n if (!validationResult.isValid) {\n return {\n success: false,\n answers: this.getAllAnswers(),\n errors: validationResult.errors,\n };\n }\n\n return {\n success: true,\n answers: this.getAllAnswers(),\n };\n },\n\n //#endregion\n\n //#region ---- Timer ----\n\n startTimer(): void {\n this.stopTimer();\n\n patchState(store, { timerElapsed: 0 });\n const interval = setInterval(() => {\n const config = store.config();\n const timeLimit = config?.timer?.timeLimit;\n const elapsed = store.timerElapsed();\n\n if (timeLimit && elapsed >= timeLimit) {\n this.stopTimer();\n // TODO: Handle time limit reached\n } else {\n patchState(store, { timerElapsed: elapsed + 1 });\n }\n }, 1000);\n\n patchState(store, { timerInterval: interval });\n },\n\n stopTimer(): void {\n const interval = store.timerInterval();\n if (interval) {\n clearInterval(interval);\n patchState(store, { timerInterval: null });\n }\n },\n\n updateTimerElapsed(value: number): void {\n patchState(store, { timerElapsed: value });\n },\n\n //#endregion\n }),\n ),\n);\n\n//#endregion","//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXAlertModule } from '@acorex/components/alert';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXTextAreaModule } from '@acorex/components/text-area';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPResolveMultiLanguageStringPipe, containsHtmlMarkup } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { FormsModule } from '@angular/forms';\nimport { isQuestionnaireItemRequiredForDisplay } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { getQuestionAnswerCommentStoragePath } from '../../../../entities/question-bank-item/question-comment.types';\nimport type { AXMAssessmentQuestionHintConfigShown } from '../../../../entities/question-bank-item/question-hint.types';\nimport { AXMQuestionnaireViewerViewModel } from '../../questionnaire-viewer.viewmodel';\nimport { QuestionnaireViewerQuestion, QuestionnaireViewerAttachment } from '../../questionnaire-viewer.types';\nimport { get } from 'lodash-es';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable Question Component\n * Displays a single question with its widget interface\n */\n@Component({\n selector: 'axm-questionnaire-viewer-question',\n template: `\n <div\n class=\"__question-item\"\n [class.__answered]=\"isAnswered()\"\n [class.__view-mode]=\"mode() === 'view'\"\n >\n <div class=\"__question-header\">\n @if (showQuestionNumbers() || (showQuestionCounter() && currentPosition())) {\n <div class=\"__question-header-left\">\n @if (showQuestionNumbers()) {\n <span class=\"__question-number\">{{ sectionOrder() }}.{{ questionIndex() }}</span>\n }\n @if (showQuestionCounter() && currentPosition()) {\n <span class=\"__question-counter\">\n Question {{ currentPosition()!.current }} of {{ currentPosition()!.total }}\n </span>\n }\n </div>\n }\n <div class=\"__question-header-right\">\n <div class=\"__question-title-block ax-flex ax-flex-col ax-gap-1 ax-flex-1 ax-min-w-0 ax-items-stretch\">\n @if (question().question.question; as qBody) {\n @if (qBody !== '' && (qBody | axpResolveMultiLanguageString).trim().length > 0) {\n @if (containsHtmlMarkup((qBody | axpResolveMultiLanguageString).trim())) {\n <div\n class=\"__question-title __question-title--rich\"\n [innerHTML]=\"qBody | axpResolveMultiLanguageString | safe: 'html'\"\n ></div>\n } @else {\n <h3 class=\"__question-title\">{{ (qBody | axpResolveMultiLanguageString).trim() }}</h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | axpResolveMultiLanguageString }}\n </h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | axpResolveMultiLanguageString }}\n </h3>\n }\n </div>\n @if (isAnswered()) {\n <span class=\"__answered-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.answered' | translate | async\n }}</span>\n } @else if (showRequiredBadge()) {\n <span class=\"__required-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.required' | translate | async\n }}</span>\n }\n </div>\n </div>\n <!-- Question Note -->\n @if (question().question.note; as noteRaw) {\n @if (noteRaw !== '' && (noteRaw | axpResolveMultiLanguageString).trim()) {\n <div\n class=\"__question-note\"\n [innerHTML]=\"noteRaw | axpResolveMultiLanguageString | safe: 'html'\"\n ></div>\n }\n }\n <!-- Question Widget -->\n <div class=\"__question-widget\">\n @if (question().question.interface) {\n <ng-container axp-widget-renderer [node]=\"question().question.interface\" [mode]=\"mode()\"></ng-container>\n } @else {\n <p class=\"__widget-placeholder\">No widget interface configured</p>\n }\n </div>\n\n @if (hintShown(); as hShown) {\n @if (hShown.content; as hintRaw) {\n @if (hintRaw !== '' && (hintRaw | axpResolveMultiLanguageString).trim()) {\n <ax-alert [color]=\"hintModeClass()\" role=\"note\">\n <!-- <ax-title>{{ '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint.title' | translate | async }}</ax-title> -->\n <ax-icon ></ax-icon>\n <ax-content>\n <div [innerHTML]=\"hintRaw | axpResolveMultiLanguageString | safe: 'html'\"></div>\n </ax-content>\n </ax-alert>\n }\n }\n }\n\n @if (question().comment.enabled) {\n @if (mode() === 'view') {\n @if (respondentCommentText().trim(); as commentView) {\n <div class=\"__question-comment __question-comment--readonly\">\n <p class=\"__question-comment-text\">{{ commentView }}</p>\n </div>\n }\n } @else {\n <div class=\"__question-comment\">\n <ax-text-area\n [rows]=\"2\"\n [ngModel]=\"respondentCommentText()\"\n (onValueChanged)=\"onRespondentCommentChanged($event)\"\n [placeholder]=\"\n '@assessment-management:questionnaires.components.questionnaire-viewer.comment.placeholder' | translate | async\n \"\n ></ax-text-area>\n </div>\n }\n }\n\n @if (questionAttachments().length > 0) {\n <div class=\"__attachments\">\n <span class=\"__attachments-label\">{{ '@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title' | translate | async }}:</span>\n <ul class=\"__attachments-list\">\n @for (att of questionAttachments(); track att.id) {\n <li>\n <a class=\"__attachment-link\" href=\"#\" (click)=\"openAttachment($event, att)\" role=\"button\">\n <i class=\"fa-light fa-paperclip\"></i>\n {{ att.name || att.id }}\n </a>\n </li>\n }\n </ul>\n </div>\n }\n </div>\n `,\n styleUrl: './questionnaire-viewer-question.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXAlertModule,\n AXDecoratorModule,\n AXSafePipe,\n AXPResolveMultiLanguageStringPipe,\n AXTextAreaModule,\n AXFormModule,\n FormsModule,\n ],\n encapsulation: ViewEncapsulation.None,\n\n})\nexport class AXMQuestionnaireViewerQuestionComponent {\n //#region ---- Services & Dependencies ----\n\n /** Exposed for template `@if (containsHtmlMarkup(...))`. */\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel, { optional: true });\n private readonly fileStorageService = inject(AXPFileStorageService, { optional: true });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n question = input.required<QuestionnaireViewerQuestion>();\n\n /** Context data when used outside questionnaire viewer (e.g. review step). Used for isAnswered when vm is null. */\n contextData = input<Record<string, any> | undefined>(undefined);\n sectionOrder = input.required<number>();\n questionIndex = input.required<number>();\n showQuestionNumbers = input<boolean>(true);\n showQuestionCounter = input<boolean>(false);\n currentPosition = input<{ current: number; total: number } | undefined>(undefined);\n\n /** Widget render mode: 'edit' for answering, 'view' for read-only display (e.g. review step). */\n mode = input<'edit' | 'view'>('edit');\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Non-off hint for the template (narrows discriminated union for `content`). */\n hintShown = computed((): AXMAssessmentQuestionHintConfigShown | null => {\n const h = this.question()?.hint;\n if (!h || h.mode === 'off') {\n return null;\n }\n return h;\n });\n\n /**\n * Map hint mode to CSS modifier class (info, warning, danger, success, neutral).\n */\n hintModeClass = computed((): string => {\n const hShown = this.hintShown();\n if (!hShown) {\n return 'default ';\n }\n const mode = hShown.mode;\n switch (mode) {\n case 'info': return 'primary';\n case 'warning': return 'warning';\n case 'danger': return 'danger';\n case 'success': return 'success';\n case 'neutral': return 'default';\n default: return 'default';\n }\n });\n\n /** Show \"Required\" when statically required or when a required expression is configured. */\n showRequiredBadge = computed(() => isQuestionnaireItemRequiredForDisplay(this.question().isRequired));\n\n /**\n * Check if question is answered\n */\n isAnswered = computed(() => {\n const question = this.question();\n const contextDataInput = this.contextData();\n const container = this.vm?.widgetContainer();\n const data = contextDataInput ?? container?.contextService?.data() ?? {};\n if (!question || !question.question.interface?.path) return false;\n\n try {\n const widgetPath = question.question.interface.path;\n const value = get(data, widgetPath);\n\n const isEmpty = value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0) ||\n (typeof value === 'object' && value !== null && Object.keys(value).length === 0);\n\n return !isEmpty;\n } catch (error) {\n console.error('[QuestionnaireViewerQuestion] Error checking if answered:', error);\n return false;\n }\n });\n\n /** Attachments from question bank item to show as access links. */\n questionAttachments = computed((): QuestionnaireViewerAttachment[] => {\n const q = this.question();\n return q?.attachments ?? [];\n });\n\n /**\n * Storage path for respondent comment text (`answers.comments.<questionItemName>`).\n */\n private respondentCommentPath = computed(() => getQuestionAnswerCommentStoragePath(this.question().name));\n\n /**\n * Current respondent comment from session context (when viewer is active).\n */\n respondentCommentText = computed((): string => {\n const path = this.respondentCommentPath();\n const ctxData = this.vm?.widgetContainer()?.contextService?.data() ?? this.contextData();\n if (!path || !ctxData) return '';\n const v = get(ctxData as Record<string, unknown>, path);\n if (v == null) return '';\n return typeof v === 'string' ? v : String(v);\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /**\n * Persists respondent comment into the questionnaire session context.\n */\n protected onRespondentCommentChanged(e: AXValueChangedEvent<string | undefined>): void {\n if (this.mode() === 'view') {\n return;\n }\n const cs = this.vm?.widgetContainer()?.contextService;\n const path = this.respondentCommentPath();\n if (!cs || !path) {\n return;\n }\n const next = (e.value as string | undefined) ?? '';\n cs.update(path, next);\n }\n\n /**\n * Open/download attachment using the same approach as axp-file-list (file-uploader):\n * - If storage returns a URL: use an anchor with href + target _blank + programmatic click.\n * - If storage returns binary only: create object URL from blob and trigger download.\n * Avoids window.open() which can open an empty tab when url is undefined.\n */\n async openAttachment(event: Event, att: QuestionnaireViewerAttachment): Promise<void> {\n event.preventDefault();\n if (!this.fileStorageService || !att?.id) return;\n try {\n const info = await this.fileStorageService.getInfo(att.id);\n const fileName = att.name ?? (info as { name?: string }).name ?? 'download';\n\n if (info && (info as { binary?: Blob }).binary instanceof Blob) {\n const blob = (info as { binary: Blob }).binary;\n this.triggerDownload(blob, fileName);\n return;\n }\n if (info && typeof (info as { url?: string }).url === 'string' && (info as { url: string }).url) {\n const url = (info as { url: string }).url;\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n return;\n }\n } catch (err) {\n console.error('[QuestionnaireViewerQuestion] Error opening attachment:', att.id, err);\n }\n }\n\n /**\n * Trigger file download from blob (same as file-list triggerDownload).\n */\n private triggerDownload(blob: Blob, fileName: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n }\n\n //#endregion\n}\n","//#region ---- Imports ----\n\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport {\n AXPResolveMultiLanguageStringPipe,\n containsHtmlMarkup,\n type AXPMultiLanguageString,\n} from '@acorex/platform/core';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Section title and description for questionnaire viewer layouts.\n * Resolves {@link AXPMultiLanguageString} for the active (or explicit) locale.\n */\n@Component({\n selector: 'axm-questionnaire-viewer-section-header',\n template: `\n <div [class]=\"headerSectionClass()\">\n <h2 [class]=\"titleHeadingClass()\">\n {{ title() | axpResolveMultiLanguageString: locale() }}\n </h2>\n @if (description(); as desc) {\n @if ((desc | axpResolveMultiLanguageString: locale()).trim().length > 0) {\n @if (containsHtmlMarkup((desc | axpResolveMultiLanguageString: locale()).trim())) {\n <div\n class=\"__section-description __section-description--rich\"\n [innerHTML]=\"desc | axpResolveMultiLanguageString: locale() | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__section-description\">\n {{ (desc | axpResolveMultiLanguageString: locale()).trim() }}\n </p>\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AXPResolveMultiLanguageStringPipe],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-section-header ax-block' },\n styleUrl: './questionnaire-viewer-section-header.component.scss',\n})\nexport class AXMQuestionnaireViewerSectionHeaderComponent {\n //#region ---- Inputs ----\n\n protected readonly containsHtmlMarkup = containsHtmlMarkup;\n\n title = input.required<AXPMultiLanguageString>();\n\n description = input<AXPMultiLanguageString | undefined>();\n\n /** When set, resolves strings for this locale instead of the active app language. */\n locale = input<string | undefined>(undefined);\n\n /**\n * Typography for the section title.\n * - `lg`: matches page-per-group / side-menu main heading\n * - `md`: matches single-page / one-question-per-page density\n */\n titleSize = input<'lg' | 'md'>('lg');\n\n /**\n * Optional margin below the header block (parent layouts vary).\n */\n marginBottom = input<'none' | 'sm' | 'md'>('none');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly titleHeadingClass = computed(() =>\n this.titleSize() === 'lg' ? '__section-title-lg' : '__section-title-md',\n );\n\n protected readonly headerSectionClass = computed(() => {\n const parts = ['__section-header'];\n if (this.marginBottom() === 'sm') {\n parts.push('__mb-sm');\n } else if (this.marginBottom() === 'md') {\n parts.push('__mb-md');\n }\n return parts.join(' ');\n });\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Single Page View Component\n * Displays all sections and questions on a single page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-single-page-view',\n template: `\n @for (section of vm.sections(); track section.name) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__single-page-section\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\">\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'md'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\">\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./single-page-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerSinglePageViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n\n //#endregion\n\n //#region ---- Sticky parent initialization ----\n\n constructor() {\n afterNextRender(() => {\n this.stickyParent.set(this.findScrollParent(this.host.nativeElement));\n });\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Page Per Group View Component\n * Displays one section (group) per page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-page-per-group-view',\n template: `\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__page-section\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\">\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\">\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./page-per-group-view.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerPagePerGroupViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly host = inject(ElementRef<HTMLElement>);\n\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n\n //#endregion\n\n constructor() {\n afterNextRender(() => {\n this.stickyParent.set(this.findScrollParent(this.host.nativeElement));\n });\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\n\nimport { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } from '@angular/core';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Page Per Question View Component\n * Displays one question per page\n */\n@Component({\n selector: 'axm-questionnaire-viewer-page-per-question-view',\n template: `\n @if (vm.currentQuestion(); as question) {\n <div class=\"__page-question\">\n @if (vm.currentSection(); as currentSection) {\n <axm-questionnaire-viewer-section-header\n [title]=\"currentSection.title\"\n [description]=\"currentSection.description\"\n [titleSize]=\"'md'\"\n [marginBottom]=\"'none'\">\n </axm-questionnaire-viewer-section-header>\n }\n\n <axm-questionnaire-viewer-question\n class=\"ax-mt-8\"\n [question]=\"question\"\n [sectionOrder]=\"vm.currentSectionIndex() + 1\"\n [questionIndex]=\"vm.currentQuestionIndex() + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"vm.showQuestionCounter()\"\n [currentPosition]=\"vm.currentQuestionPosition()\">\n </axm-questionnaire-viewer-question>\n </div>\n }\n `,\n encapsulation: ViewEncapsulation.None,\n styles: [`\n axm-questionnaire-viewer-page-per-question-view {\n @apply ax-flex ax-flex-col ax-gap-4 ax-p-4;\n @apply ax-lightest-surface ax-flex-shrink-0;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent],\n})\nexport class AXMQuestionnaireViewerPagePerQuestionViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n //#endregion\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXDrawerDirectiveModule } from '@acorex/cdk/drawer';\nimport { AXResizableDirective } from '@acorex/cdk/resizable';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXTabsComponent, AXTabsModule } from '@acorex/components/tabs';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPDeviceService, AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../components/question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../components/section-header';\nimport { AXMQuestionnaireViewerViewModel } from '../questionnaire-viewer.viewmodel';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Side Menu View Component\n * Displays sections in a left sidebar (tabs) and all questions from selected section on the right\n */\n@Component({\n selector: 'axm-questionnaire-viewer-side-menu-view',\n template: `\n <div class=\"__side-menu-container\">\n <!-- Desktop Sidebar (Large screens) -->\n @if (deviceService.isLarge()) {\n <div class=\"__desktop-sidebar\" [axResizable]=\"true\">\n <ax-tabs class=\"__sidebar-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (sectionIndex of vm.sectionIndicesWithVisibleContent(); track sectionIndex) {\n <ax-tab-item\n [text]=\"vm.sections()[sectionIndex].title | axpResolveMultiLanguageString\"\n (onClick)=\"handleSectionClick(sectionIndex)\"\n [disabled]=\"isSectionDisabled(sectionIndex)\"\n >\n @if (getSectionBadgeCount(vm.sections()[sectionIndex].name) > 0) {\n <ax-badge\n [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\"\n [color]=\"'danger'\"\n >\n </ax-badge>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n }\n\n <!-- Mobile/Tablet: Drawer Container -->\n @if (deviceService.isSmall() || deviceService.isMedium()) {\n <ax-drawer-container class=\"__drawer-container\">\n <!-- Sidebar Drawer (Mobile) -->\n <ax-drawer\n #sidebarDrawer\n [location]=\"'start'\"\n [mode]=\"'overlay'\"\n [collapsed]=\"sidebarDrawerCollapsed()\"\n [closeOnBackdropClick]=\"true\"\n (onBackdropClick)=\"sidebarDrawerCollapsed.set(true)\"\n class=\"__sidebar-drawer ax-w-[250px]\"\n >\n <ax-content class=\"__sidebar-content\">\n <ax-tabs class=\"__sidebar-tabs\" [look]=\"'with-line-color'\" [location]=\"'end'\" [fitParent]=\"true\">\n @for (sectionIndex of vm.sectionIndicesWithVisibleContent(); track sectionIndex) {\n <ax-tab-item\n [text]=\"vm.sections()[sectionIndex].title | axpResolveMultiLanguageString\"\n (onClick)=\"handleSectionClick(sectionIndex)\"\n [active]=\"vm.currentSectionIndex() === sectionIndex\"\n [disabled]=\"isSectionDisabled(sectionIndex)\"\n >\n @if (getSectionBadgeCount(vm.sections()[sectionIndex].name) > 0) {\n <ax-badge\n [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\"\n [color]=\"'danger'\"\n >\n </ax-badge>\n }\n </ax-tab-item>\n }\n </ax-tabs>\n </ax-content>\n </ax-drawer>\n\n <!-- Main Content (Mobile) -->\n <ax-content class=\"__main-content\">\n <!-- Questions Content -->\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n @if (stickyParent(); as parent) {\n <div class=\"__mobile-header-row\" [axpSticky]=\"'--stuck'\" [stickyParent]=\"parent\" [stickyOffset]=\"0\">\n <div class=\"__mobile-menu-button\">\n <ax-button look=\"blank\" (onClick)=\"sidebarDrawerCollapsed.set(!sidebarDrawerCollapsed())\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-bars\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\"\n >\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-container\">\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\"\n >\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n </ax-content>\n </ax-drawer-container>\n } @else {\n <!-- Desktop Main Content -->\n <div class=\"__main-content\">\n <!-- Questions Content -->\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__questions-container\">\n @if (stickyParent(); as parent) {\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"parent\"\n [stickyOffset]=\"0\"\n >\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'lg'\"\n [marginBottom]=\"'none'\"\n >\n </axm-questionnaire-viewer-section-header>\n </div>\n }\n\n <div class=\"__questions-list\">\n @for (question of vm.getVisibleQuestionsInSection(section); track question.name; let i = $index) {\n <axm-questionnaire-viewer-question\n [question]=\"question\"\n [sectionOrder]=\"section.order\"\n [questionIndex]=\"i + 1\"\n [showQuestionNumbers]=\"vm.showQuestionNumbers()\"\n [showQuestionCounter]=\"false\"\n >\n </axm-questionnaire-viewer-question>\n }\n </div>\n </div>\n }\n }\n </div>\n }\n </div>\n `,\n styleUrl: './side-menu-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMQuestionnaireViewerQuestionComponent,\n AXMQuestionnaireViewerSectionHeaderComponent,\n AXPResolveMultiLanguageStringPipe,\n AXTabsModule,\n AXBadgeModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n AXResizableDirective,\n AXButtonModule,\n AXDecoratorModule,\n AXPStickyDirective,\n ],\n})\nexport class AXMQuestionnaireViewerSideMenuViewComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly host = inject(ElementRef<HTMLElement>);\n protected readonly sidebarDrawerCollapsed = signal<boolean>(true);\n protected readonly sectionNavigabilityCache = signal<Map<number, boolean>>(new Map());\n protected readonly stickyParent = signal<HTMLElement | null>(null);\n protected readonly tabRef = viewChild(AXTabsComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n afterNextRender(() => {\n const mainContent = this.host.nativeElement.querySelector('.__main-content') as HTMLElement | null;\n const resolvedStickyParent =\n this.findScrollParent(mainContent) ?? this.findScrollParent(this.host.nativeElement) ?? mainContent;\n this.stickyParent.set(resolvedStickyParent);\n });\n\n effect(() => {\n this.tabRef()?.select(this.vm.currentSectionIndex());\n });\n\n // Update navigability cache when validation state changes\n effect(async () => {\n const sections = this.vm.sections();\n const currentIndex = this.vm.currentSectionIndex();\n const validateBeforeNav = this.vm.validationStrategy() === 'step';\n\n // Only check if validation is enabled\n if (validateBeforeNav && sections.length > 0) {\n const cache = new Map<number, boolean>();\n\n for (let i = 0; i < sections.length; i++) {\n if (i === currentIndex) {\n cache.set(i, true); // Current section is always navigable\n } else {\n const navigable = await this.vm.isSectionNavigable(i);\n cache.set(i, navigable);\n }\n }\n\n this.sectionNavigabilityCache.set(cache);\n } else {\n // If validation is disabled, all sections are navigable\n const cache = new Map<number, boolean>();\n sections.forEach((_, i) => cache.set(i, true));\n this.sectionNavigabilityCache.set(cache);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Methods ----\n\n /**\n * Handle section tab click\n */\n protected async handleSectionClick(sectionIndex: number): Promise<void> {\n await this.vm.navigateToSection(sectionIndex);\n // Close drawer on mobile after selection\n if (this.deviceService.isSmall() || this.deviceService.isMedium()) {\n this.sidebarDrawerCollapsed.set(true);\n }\n }\n\n /**\n * Get badge count for section (unanswered required questions)\n */\n protected getSectionBadgeCount(sectionName: string): number {\n this.vm.sectionVisibilityById();\n this.vm.questionVisibilityById();\n return this.vm.getSectionUnansweredRequiredCount(sectionName);\n }\n\n /**\n * Check if section tab should be disabled\n */\n protected isSectionDisabled(sectionIndex: number): boolean {\n this.vm.sectionVisibilityById();\n this.vm.questionVisibilityById();\n\n const sections = this.vm.sections();\n const section = sections[sectionIndex];\n if (section && !this.vm.isSectionVisible(section)) {\n return true;\n }\n\n const currentIndex = this.vm.currentSectionIndex();\n\n // Current section is never disabled\n if (sectionIndex === currentIndex) {\n return false;\n }\n\n // If validation is disabled, no tabs are disabled\n const validateBeforeNav = this.vm.validationStrategy() === 'step';\n if (!validateBeforeNav) {\n return false;\n }\n\n // Check cache\n const cache = this.sectionNavigabilityCache();\n return cache.has(sectionIndex) ? !cache.get(sectionIndex)! : false;\n }\n\n private findScrollParent(from: HTMLElement | null): HTMLElement | null {\n let node: HTMLElement | null = from?.parentElement ?? null;\n while (node) {\n const { overflowY } = getComputedStyle(node);\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, viewChild, ViewEncapsulation } from '@angular/core';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetContainerComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerViewModel } from '../../questionnaire-viewer.viewmodel';\nimport { AXMQuestionnaireViewerSinglePageViewComponent } from '../../views/single-page-view.component';\nimport { AXMQuestionnaireViewerPagePerGroupViewComponent } from '../../views/page-per-group-view.component';\nimport { AXMQuestionnaireViewerPagePerQuestionViewComponent } from '../../views/page-per-question-view.component';\nimport { AXMQuestionnaireViewerSideMenuViewComponent } from '../../views/side-menu-view.component';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Questionnaire Viewer Component\n * Renders a questionnaire for viewing/answering with configurable display modes\n */\n@Component({\n selector: 'axm-questionnaire-viewer',\n templateUrl: './viewer-container.component.html',\n styleUrl: './viewer-container.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPStateMessageComponent,\n AXFormModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n // View components\n AXMQuestionnaireViewerSinglePageViewComponent,\n AXMQuestionnaireViewerPagePerGroupViewComponent,\n AXMQuestionnaireViewerPagePerQuestionViewComponent,\n AXMQuestionnaireViewerSideMenuViewComponent,\n ],\n providers: [AXMQuestionnaireViewerViewModel],\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'axm-questionnaire-viewer',\n },\n})\nexport class AXMQuestionnaireViewerComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly vm = inject(AXMQuestionnaireViewerViewModel);\n\n private readonly translationService = inject(AXTranslationService);\n\n /**\n * Layout direction from the active UI language so question layout and widgets mirror correctly in RTL.\n */\n protected readonly layoutDirection = computed((): 'ltr' | 'rtl' => {\n const lang = this.translationService.getActiveLang?.() ?? 'en-US';\n const primary = lang.split(/[-_]/)[0]?.toLowerCase() ?? 'en';\n const rtlPrimaries = new Set(['ar', 'fa', 'he', 'ur', 'ps', 'sd', 'ug', 'dv', 'yi', 'ku', 'ckb']);\n return rtlPrimaries.has(primary) ? 'rtl' : 'ltr';\n });\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /**\n * Questionnaire ID to load and display (required if structure is not provided)\n */\n questionnaireId = input<string | undefined>(undefined);\n\n /**\n * Structure data for preview mode (used when questionnaireId is not provided)\n */\n structure = input<QuestionnaireBuilderValue | undefined>(undefined);\n\n /**\n * Viewer configuration\n * Note: If properties are undefined, displaySettings from structure will be used\n */\n config = input<QuestionnaireViewerConfig | undefined>(undefined);\n\n /**\n * Initial answers to pre-fill the questionnaire\n */\n initialAnswers = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when answers change\n */\n answersChanged = output<Record<string, any>>();\n\n /**\n * Emitted when a question is answered\n */\n questionAnswered = output<{ name: string; value: any }>();\n\n //#endregion\n\n //#region ---- View References ----\n\n /**\n * Form reference for validation\n */\n protected form = viewChild<AXFormComponent>('form');\n\n /**\n * Widget container reference for context access\n */\n protected widgetContainer = viewChild<AXPWidgetContainerComponent>(AXPWidgetContainerComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Register form and widget container when available\n effect(() => {\n const form = this.form();\n if (form) {\n this.vm.registerForm(form);\n }\n });\n\n effect(() => {\n const container = this.widgetContainer();\n if (container) {\n this.vm.registerWidgetContainer(container);\n }\n });\n\n // Load questionnaire when ID or structure changes\n effect(() => {\n const id = this.questionnaireId();\n const structure = this.structure();\n const config = this.config();\n const initialAnswers = this.initialAnswers();\n\n if (id) {\n this.vm.loadQuestionnaire(id, initialAnswers, config);\n } else if (structure) {\n if (structure.sections && structure.sections.length > 0) {\n this.vm.loadStructure(structure, config, initialAnswers);\n } else {\n // Structure exists but has no sections - set empty state\n this.vm.loadStructure({ sections: [] }, config, initialAnswers);\n }\n }\n });\n\n // Start timer if enabled\n effect(() => {\n const shouldShowTimer = this.vm.showTimer();\n const timeLimit = this.vm.timerTimeLimit();\n\n if (shouldShowTimer && timeLimit) {\n this.vm.startTimer();\n } else {\n this.vm.stopTimer();\n }\n });\n\n // Re-evaluate expression `isVisible` when answers / context change\n effect(() => {\n this.vm.questionnaireData();\n const container = this.widgetContainer();\n container?.contextService?.changeEvent();\n void this.vm.refreshVisibility();\n });\n }\n\n //#endregion\n\n //#region ---- Public API - State Access ----\n\n /**\n * Get viewmodel instance (for accessing computed properties)\n */\n get viewmodel() {\n return this.vm;\n }\n\n /**\n * Check if can navigate previous\n */\n get canNavigatePrevious(): boolean {\n return this.vm.canNavigatePrevious();\n }\n\n /**\n * Check if can navigate next\n */\n get canNavigateNext(): boolean {\n return this.vm.canNavigateNext();\n }\n\n /**\n * Get current view mode\n */\n get viewMode(): 'single-page' | 'page-per-group' | 'page-per-question' | 'side-menu' {\n return this.vm.viewMode();\n }\n\n /**\n * Check if we're on the last step\n */\n get isLastStep(): boolean {\n return this.vm.isLastStep();\n }\n\n /**\n * Check if all required questions are answered\n */\n get areAllRequiredQuestionsAnswered(): boolean {\n return this.vm.areAllRequiredQuestionsAnswered();\n }\n\n //#endregion\n\n //#region ---- Public API Methods ----\n\n /**\n * Navigate to next question/section\n * Validates current page before navigating\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateNext(): Promise<boolean> {\n return await this.vm.navigateNext();\n }\n\n /**\n * Navigate to previous question/section\n * @returns true if navigation succeeded\n */\n async navigatePrevious(): Promise<boolean> {\n return await this.vm.navigatePrevious();\n }\n\n /**\n * Navigate to specific section\n * Validates current page before navigating\n * @param index Section index (0-based)\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateToSection(index: number): Promise<boolean> {\n return await this.vm.navigateToSection(index);\n }\n\n /**\n * Navigate to specific question\n * Validates current page before navigating\n * @param sectionIndex Section index (0-based)\n * @param questionIndex Question index (0-based)\n * @returns true if navigation succeeded, false if validation failed\n */\n async navigateToQuestion(sectionIndex: number, questionIndex: number): Promise<boolean> {\n return await this.vm.navigateToQuestion(sectionIndex, questionIndex);\n }\n\n /**\n * Validate all visible questions on current page\n * @returns Validation result with errors\n */\n async validateCurrentPage() {\n return await this.vm.validateCurrentPage();\n }\n\n /**\n * Validate all questions in entire questionnaire\n * @returns Validation result with errors\n */\n async validateAllQuestions() {\n return await this.vm.validateAllQuestions();\n }\n\n /**\n * Get all answers from context\n */\n getAllAnswers(): Record<string, any> {\n return this.vm.getAllAnswers();\n }\n\n /**\n * Get questions with their corresponding answers\n */\n getQuestionsWithAnswers() {\n return this.vm.getQuestionsWithAnswers();\n }\n\n /**\n * Get context data for review step (answers at widget paths).\n * Must be called before transitioning to review while viewer is still rendered.\n */\n getReviewContext(): Record<string, any> {\n const container = this.vm.widgetContainer();\n return container?.contextService?.data() ?? {};\n }\n\n /**\n * Submit questionnaire\n * Validates all questions before submitting\n * @returns Submit result with success status, answers, and errors if any\n */\n async submit() {\n return await this.vm.submit();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle context changes for auto-save\n */\n protected handleContextChanged(): void {\n const answers = this.vm.getAllAnswers();\n this.answersChanged.emit(answers);\n }\n\n //#endregion\n}\n\n//#endregion\n","<axp-widgets-container #widgetContainer [attr.dir]=\"layoutDirection()\" [context]=\"{}\"\n (onContextChanged)=\"handleContextChanged()\">\n @if (vm.isLoading()) {\n <div class=\"__loading\">\n <axp-state-message icon=\"fa-light fa-spinner fa-spin\"\n [title]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async) || ''\"\n [description]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.loading.description' | translate | async) || ''\">\n </axp-state-message>\n </div>\n } @else if (vm.error()) {\n <div class=\"__error\">\n <axp-state-message icon=\"fa-light fa-exclamation-triangle\"\n [title]=\"('@assessment-management:questionnaires.components.questionnaire-viewer.error.title' | translate | async) || ''\"\n [description]=\"vm.error() || ''\">\n </axp-state-message>\n </div>\n } @else if (vm.questionnaireData()) {\n <div class=\"__questionnaire-container\">\n <ax-form #form>\n @if (vm.viewMode() === 'single-page') {\n <axm-questionnaire-viewer-single-page-view></axm-questionnaire-viewer-single-page-view>\n } @else if (vm.viewMode() === 'page-per-group') {\n <axm-questionnaire-viewer-page-per-group-view></axm-questionnaire-viewer-page-per-group-view>\n } @else if (vm.viewMode() === 'page-per-question') {\n <axm-questionnaire-viewer-page-per-question-view></axm-questionnaire-viewer-page-per-question-view>\n } @else if (vm.viewMode() === 'side-menu') {\n <axm-questionnaire-viewer-side-menu-view></axm-questionnaire-viewer-side-menu-view>\n }\n </ax-form>\n </div>\n }\n</axp-widgets-container>\n","//#region ---- Imports ----\n\nimport { AXTranslationService } from '@acorex/core/translation';\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n AXPFilterDefinition,\n resolveMultiLanguageString,\n} from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { QuestionnaireBuilderValue } from '../questionnaire-builder';\n\n//#endregion\n\n//#region ---- Helper: Map question interface to filter widget ----\n\nconst INTERFACE_TO_FILTER_WIDGET: Record<string, string> = {\n 'text-editor': 'string-filter',\n 'text-box': 'string-filter',\n 'large-text-editor': 'string-filter',\n 'large-text-box': 'string-filter',\n 'number-editor': 'number-filter',\n 'number-box': 'number-filter',\n 'rate-picker': 'number-filter',\n 'select-editor': 'select-filter',\n 'select-box': 'select-filter',\n 'selection-list': 'select-filter',\n 'selection-list-editor': 'select-filter',\n 'toggle-editor': 'boolean-filter',\n 'checkbox-editor': 'boolean-filter',\n 'date-time-editor': 'datetime-filter',\n 'date-time-box': 'datetime-filter',\n};\n\ninterface QuestionBankItemRecord {\n id: string;\n title?: string;\n interface?: { type?: string; options?: Record<string, unknown> };\n}\n\nfunction resolveInterface(\n itemInterfaceOverride?: { type?: string; options?: Record<string, unknown> },\n questionInterface?: { type?: string; options?: Record<string, unknown> },\n): { type: string; options: Record<string, unknown> } {\n const resolved = (itemInterfaceOverride ?? questionInterface) ?? {};\n const widgetType =\n INTERFACE_TO_FILTER_WIDGET[resolved.type ?? ''] ?? 'string-filter';\n const options = (resolved.options ?? {}) as Record<string, unknown>;\n\n return {\n type: widgetType,\n options: {\n ...options,\n valueField: options['valueField'] ?? 'id',\n textField: options['textField'] ?? 'title',\n },\n };\n}\n\n//#endregion\n\n//#region ---- Provider ----\n\n/**\n * Questionnaire Evaluator Scope Provider\n *\n * Provides expression evaluation capabilities for questionnaire operations:\n * - Get filter definitions from questionnaire questions for use in ConditionBuilder\n */\nexport class AXMQuestionnaireEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n const questionnaireEntity = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n const questionBankEntity = `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}`;\n const questionnaireCalculationEntity = `${RootConfig.module.name}.${RootConfig.entities.questionnaireCalculation.name}`;\n\n const filterDefinitionsImpl = async (questionnaireId: string): Promise<AXPFilterDefinition[]> => {\n if (!questionnaireId) {\n return [];\n }\n\n try {\n const dataAccessor = this.entityService\n .withEntity(questionnaireEntity)\n .data<any, any>();\n const questionnaire = (await dataAccessor.byKey(questionnaireId)) as\n | { questions?: QuestionnaireBuilderValue }\n | null\n | undefined;\n\n const structure = questionnaire?.questions;\n if (!structure?.sections?.length) {\n return [];\n }\n\n const questionBankItemIds = new Set<string>();\n for (const section of structure.sections) {\n for (const item of section.items ?? []) {\n const qid = item.questionBankItemId;\n if (qid) questionBankItemIds.add(qid);\n }\n }\n\n const questionBankMap = new Map<string, QuestionBankItemRecord>();\n if (questionBankItemIds.size > 0) {\n const ids = Array.from(questionBankItemIds);\n const qbDataAccessor = this.entityService\n .withEntity(questionBankEntity)\n .data<any, any>();\n\n try {\n const queryResult = await qbDataAccessor.query({\n skip: 0,\n take: Math.max(ids.length, 500),\n filter:\n ids.length === 1\n ? { field: 'id', operator: { type: 'equal' }, value: ids[0] }\n : { field: 'id', operator: { type: 'in' }, value: ids },\n });\n for (const q of queryResult?.items ?? []) {\n questionBankMap.set((q as { id: string }).id, q as QuestionBankItemRecord);\n }\n } catch {\n for (const id of ids) {\n try {\n const q = await qbDataAccessor.byKey(id);\n if (q) questionBankMap.set((q as { id: string }).id, q as QuestionBankItemRecord);\n } catch {\n /* skip */\n }\n }\n }\n }\n\n const definitions: AXPFilterDefinition[] = [];\n let order = 0;\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n\n for (const section of structure.sections) {\n const items = section.items ?? [];\n const sectionTitleResolved = resolveMultiLanguageString(section.title, locale);\n for (const item of items) {\n const itemId = item.name ?? item.questionBankItemId ?? `item-${order}`;\n const field = `answers.${itemId}`;\n\n const question = item.questionBankItemId\n ? questionBankMap.get(item.questionBankItemId)\n : undefined;\n const title =\n question?.title ??\n (sectionTitleResolved ? `${sectionTitleResolved} - ${itemId}` : `Question ${order + 1}`);\n\n const { type: widgetType, options: widgetOptions } = resolveInterface(\n item.interfaceOverride as { type?: string; options?: Record<string, unknown> },\n question?.interface as { type?: string; options?: Record<string, unknown> },\n );\n\n definitions.push({\n id: itemId,\n field,\n title,\n operator: { type: 'equal' },\n widget: {\n type: widgetType,\n options: {\n ...widgetOptions,\n clearButton: true,\n hasClearButton: true,\n },\n },\n filterType: {\n advance: true,\n inline: true,\n },\n filters: [],\n order,\n } as AXPFilterDefinition);\n\n order++;\n }\n }\n\n return definitions;\n } catch {\n return [];\n }\n };\n\n /** Filter definitions from questionnaire calculations (for automation condition: rules.ruleName). */\n const forRules = async (questionnaireId: string): Promise<AXPFilterDefinition[]> => {\n if (!questionnaireId) {\n return [];\n }\n try {\n const dataAccessor = this.entityService\n .withEntity(questionnaireCalculationEntity)\n .data<any, any>();\n const queryResult = await dataAccessor.query({\n skip: 0,\n take: 500,\n filter: {\n field: 'questionnaireId',\n operator: { type: 'equal' },\n value: questionnaireId,\n },\n });\n const rules = (queryResult?.items ?? []) as Array<{ id: string; name: string; title?: string }>;\n return rules.map((rule, order) => ({\n id: rule.id,\n field: `rules.${rule.name}`,\n title: rule.title ?? rule.name,\n operator: { type: 'equal' },\n widget: {\n type: 'string-filter',\n options: {\n valueField: 'id',\n textField: 'title',\n clearButton: true,\n hasClearButton: true,\n },\n },\n filterType: { advance: true, inline: true },\n filters: [],\n order,\n })) as AXPFilterDefinition[];\n } catch {\n return [];\n }\n };\n\n context.addScope('questionnaire', {\n /** Filter definitions from questionnaire answers (e.g. visibility / automation conditions). */\n answers: filterDefinitionsImpl,\n /** Filter definitions from questionnaire calculations for automation condition builder (rules.ruleName). */\n rules: forRules,\n });\n\n // Automation condition builder: provide rules for refType = AssessmentManagement.Questionnaire\n const automationRules = async (refType: string, refId: string): Promise<AXPFilterDefinition[]> => {\n const questionnaireRef = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n if (refType === questionnaireRef) {\n return forRules(refId);\n }\n return [];\n };\n context.addScope('automation', {\n rules: automationRules,\n });\n }\n}\n\n//#endregion\n","import { NgModule } from '@angular/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMQuestionnaireViewerComponent } from './components/viewer-container';\nimport { provideCommandSetups } from '@acorex/platform/runtime';\nimport { RootConfig } from '../../const';\nimport { AXMQuestionnaireEvaluatorScopeProvider } from './questionnaire-evaluator-scope.provider';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex/platform/core';\n\n@NgModule({\n imports: [\n AXPWidgetCoreModule,\n // Import standalone components\n AXMQuestionnaireViewerComponent,\n ],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXMQuestionnaireEvaluatorScopeProvider,\n multi: true,\n },\n // Commands\n provideCommandSetups([\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:Preview`,\n command: () => import('./commands/preview-questionnaire.command').then((c) => c.PreviewQuestionnaireCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:PreviewQuestion`,\n command: () => import('./commands/preview-question.command').then((c) => c.PreviewQuestionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}:Preview`,\n command: () => import('./commands/preview-question.command').then((c) => c.PreviewQuestionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ViewAnswers`,\n command: () => import('./commands/view-session-answers.command').then((c) => c.ViewSessionAnswersCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:Fill`,\n command: () => import('./commands/fill-assessment-session.command').then((c) => c.FillAssessmentSessionCommand),\n },\n {\n key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:Fill`,\n command: () => import('./commands/fill-assessment-session.command').then((c) => c.FillAssessmentSessionCommand),\n },\n ]),\n ],\n})\nexport class AXMQuestionnaireViewerFeatureModule { }\n\n","//#region ---- Imports ----\n\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXP_STATUS_PROVIDERS } from '@acorex/platform/common';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';\nimport { provideCommand } from '@acorex/platform/runtime';\nimport {\n AXP_FEATURE_DEFINITION_PROVIDER,\n AXP_MODULE_MANIFEST_PROVIDER,\n provideLazyProvider,\n} from '@acorex/platform/core';\nimport { NgModule } from '@angular/core';\nimport { Routes, ROUTES } from '@angular/router';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { AssessmentManagementManifest } from './manifest';\nimport { RootConfig } from './const';\n\nimport { AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXMQuestionnaireBuilderFeatureModule } from './features/questionnaire-builder/questionnaire-builder.module';\nimport { AXMQuestionnaireViewerFeatureModule } from './features/questionnaire-viewer/questionnaire-viewer.module';\n\n//#endregion\n\n//#region ---- Routes ----\n\nfunction questionnaireViewerRoutesFactory(): Routes {\n const route = (RootConfig.module as { route?: string }).route ?? 'assessment-management';\n return [\n {\n path: `:app/${route}/questionnaire/fill/:caseId`,\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () =>\n import('./features/questionnaire-viewer/pages/viewer-page/questionnaire-viewer-page.component').then(\n (c) => c.AXMQuestionnaireViewerPageComponent,\n ),\n data: { reuse: false },\n },\n ],\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Module ----\n\n@NgModule({\n imports: [\n AXMQuestionnaireBuilderFeatureModule,\n AXMQuestionnaireViewerFeatureModule,\n ],\n providers: [\n {\n provide: ROUTES,\n multi: true,\n useFactory: questionnaireViewerRoutesFactory,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: AssessmentManagementManifest,\n multi: true,\n },\n // Status Providers\n provideLazyProvider(AXP_STATUS_PROVIDERS, () =>\n import('./features/assessment-case-status.provider').then((m) => m.AXMAssessmentCaseStatusProvider),\n ),\n provideLazyProvider(AXP_STATUS_PROVIDERS, () =>\n import('./features/assessment-session-status.provider').then((m) => m.AXMAssessmentSessionStatusProvider),\n ),\n // Provider references (now using tokens)\n provideLazyProvider(AXP_FEATURE_DEFINITION_PROVIDER, () =>\n import('./feature-definition.provider').then((m) => m.AXMAssessmentManagementFeatureDefinitionProvider),\n ),\n provideLazyProvider(AXP_PERMISSION_DEFINITION_PROVIDER, () =>\n import('./permission-definition.provider').then((m) => m.AXMAssessmentManagementPermissionDefinitionProvider),\n ),\n provideLazyProvider(AXP_MENU_PROVIDER, () =>\n import('./menu.provider').then((m) => m.AXMAssessmentManagementMenuProvider),\n ),\n provideLazyProvider(AXP_ENTITY_DEFINITION_LOADER, () =>\n import('./entity.provider').then((m) => m.AXMAssessmentManagementEntityProvider),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/questionnaire-builder/pages/questionnaire-questions-page').then(\n (m) => m.AXMQuestionnaireQuestionsPageComponentProvider\n ),\n ),\n provideCommand(\n 'Questionnaire:Questions:Save',\n () =>\n import('./features/questionnaire-builder/pages/questionnaire-questions-page/save-questionnaire-questions.command').then(\n (m) => m.AXMSaveQuestionnaireQuestionsCommand\n )\n ),\n provideLazyProvider(AXP_SEARCH_PROVIDER, () =>\n import('./search-command.provider').then((m) => m.AXMAssessmentManagementSearchCommandProvider),\n ),\n\n ],\n})\nexport class AXMAssessmentManagementModule { }\n\n//#endregion\n","//#region ---- QuestionBankItem Model ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityModel } from \"@acorex/platform/layout/entity\";\n\nimport type { AXMAssessmentQuestionCommentConfig } from './question-comment.types';\nimport type { AXMAssessmentQuestionHintConfig } from './question-hint.types';\nimport type { AXPWidgetNode } from '@acorex/platform/layout/widget-core';\n\n/** Provenance when `interface` was loaded from a meta-data definition (frozen clone). */\nexport interface AXMQuestionBankItemInterfaceMetadata {\n id: string;\n name: string;\n title: AXPMultiLanguageString | string;\n /**\n * TODO: Set from definition versioning when the versioning system is implemented (placeholder until then).\n */\n version: number;\n}\n\nexport type AXMQuestionBankItemInterfaceValue = AXPWidgetNode & {\n metadata?: AXMQuestionBankItemInterfaceMetadata;\n};\n\nexport interface AXMAssessmentManagementQuestionBankItemEntityModel extends AXPEntityModel<string> {\n /**\n * Short label for the question bank list (administrators).\n * Not used as the respondent-facing question text; see `question`.\n */\n title: AXPMultiLanguageString;\n /** Unique variable name for questionnaire calculations (answer.eval('name')). */\n name?: string;\n /** Respondent-facing question body (rich text). */\n question?: AXPMultiLanguageString;\n /** Optional note (rich text); formerly description. */\n note?: AXPMultiLanguageString;\n categoryId?: string;\n tags?: string[];\n\n // Question Properties\n difficulty?: 'easy' | 'medium' | 'hard';\n estimatedTime?: number; // seconds\n\n /** Default hint (rich text + style, or off). Overridable per questionnaire item. */\n hint?: AXMAssessmentQuestionHintConfig;\n\n /** Default respondent comment box policy (overridable per questionnaire item). */\n comment?: AXMAssessmentQuestionCommentConfig;\n\n // User Interface — widget node plus optional provenance when cloned from a meta-data definition (frozen snapshot).\n interface?: AXMQuestionBankItemInterfaceValue;\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { QuestionnaireDisplaySettings } from '../../features/questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireBuilderValue } from '../../features/questionnaire-builder/questionnaire-builder.types';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n//#endregion\n\n//#region ---- Questionnaire Model ----\n\n/**\n * Pre- / post-questionnaire rich text (welcome, summary, etc.).\n * @alias AXPMultiLanguageString\n */\nexport type PrePostContentValue = AXPMultiLanguageString;\n\n/**\n * Pre-questionnaire configuration (shown before questions).\n */\nexport interface PreQuestionnaireConfig {\n enabled: boolean;\n /** Rich text content. Supports multi-language: Record<locale, string>. */\n content?: PrePostContentValue;\n}\n\n/**\n * Post-questionnaire configuration (review before submit, summary after submit).\n * Summary content supports placeholders: {{totalQuestions}}, {{answeredCount}}, {{totalTime}}, {{elapsedSeconds}}, and {{calculationName}} from configured calculations.\n */\nexport interface PostQuestionnaireConfig {\n /** Show review step before submit (all answers, edit/submit). */\n reviewEnabled: boolean;\n /** Show summary screen after submit. */\n summaryEnabled: boolean;\n /** When true, show a separate step after the summary with calculation results (name/value list). */\n showCalculationResults?: boolean;\n /** Rich text content for summary. Supports multi-language and placeholders. */\n summaryContent?: PrePostContentValue;\n}\n\n/**\n * Entity-level display options (viewer / builder preview). Subset of {@link QuestionnaireDisplaySettings}.\n */\nexport type QuestionnaireEntityDisplaySettings = Pick<\n QuestionnaireDisplaySettings,\n 'viewMode' | 'showProgressBar' | 'showTimer' | 'showQuestionNumbers' | 'validationStrategy'\n>;\n\nexport const DEFAULT_PRE_QUESTIONNAIRE_CONFIG: PreQuestionnaireConfig = { enabled: false };\n\nexport const DEFAULT_POST_QUESTIONNAIRE_CONFIG: PostQuestionnaireConfig = {\n reviewEnabled: false,\n summaryEnabled: false,\n showCalculationResults: false,\n};\n\nexport const DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY: QuestionnaireEntityDisplaySettings = {\n viewMode: 'single-page',\n showProgressBar: true,\n showTimer: false,\n showQuestionNumbers: true,\n validationStrategy: 'step',\n};\n\n/**\n * Pre/post configuration for viewer flow (from {@link toPrePostConfig}).\n */\nexport interface PrePostConfig {\n pre: PreQuestionnaireConfig;\n post: PostQuestionnaireConfig;\n}\n\nexport interface AXMAssessmentManagementQuestionnaireEntityModel extends AXPEntityModel<string> {\n title: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n type: 'questionnaire' | 'survey' | 'checklist' | 'test' | 'evaluation';\n\n questions?: QuestionnaireBuilderValue;\n\n /** Viewer / preview display. */\n display?: QuestionnaireEntityDisplaySettings;\n\n /** Welcome screen before questions. */\n pre?: PreQuestionnaireConfig;\n\n /** Review before submit, summary / results after submit. */\n post?: PostQuestionnaireConfig;\n\n categoryId?: string;\n tags?: string[];\n color?: string;\n}\n\n/**\n * Maps entity pre/post to viewer config (defaults when omitted).\n */\nexport function toPrePostConfig(q: Partial<AXMAssessmentManagementQuestionnaireEntityModel> | null | undefined): PrePostConfig | null {\n if (!q) {\n return null;\n }\n const pre: PreQuestionnaireConfig = {\n ...DEFAULT_PRE_QUESTIONNAIRE_CONFIG,\n ...q.pre,\n enabled: q.pre?.enabled === true,\n };\n const post: PostQuestionnaireConfig = {\n ...DEFAULT_POST_QUESTIONNAIRE_CONFIG,\n ...q.post,\n reviewEnabled: q.post?.reviewEnabled === true,\n summaryEnabled: q.post?.summaryEnabled === true,\n showCalculationResults: q.post?.showCalculationResults === true,\n };\n return { pre, post };\n}\n\nconst VIEW_MODE_VALUES = ['single-page', 'page-per-group', 'page-per-question', 'side-menu'] as const;\ntype ViewModeValue = (typeof VIEW_MODE_VALUES)[number];\nconst VALIDATION_STRATEGY_VALUES = ['step', 'end'] as const;\ntype ValidationStrategyValue = (typeof VALIDATION_STRATEGY_VALUES)[number];\n\n/**\n * Coerces stored view mode (string or SelectBox `{ id }`) to a known value.\n */\nexport function normalizeViewMode(value: unknown): ViewModeValue {\n if (typeof value === 'string' && VIEW_MODE_VALUES.includes(value as ViewModeValue)) {\n return value as ViewModeValue;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id: string }).id === 'string') {\n return normalizeViewMode((value as { id: string }).id);\n }\n return 'single-page';\n}\n\n/**\n * Coerces stored validation strategy (string or SelectBox `{ id }`) to a known value.\n */\nexport function normalizeValidationStrategy(value: unknown): ValidationStrategyValue {\n if (typeof value === 'string' && VALIDATION_STRATEGY_VALUES.includes(value as ValidationStrategyValue)) {\n return value as ValidationStrategyValue;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id: string }).id === 'string') {\n return normalizeValidationStrategy((value as { id: string }).id);\n }\n return 'step';\n}\n\n/**\n * Maps entity `display` to {@link QuestionnaireDisplaySettings} (defaults when omitted).\n */\nexport function toDisplaySettings(q: Partial<AXMAssessmentManagementQuestionnaireEntityModel> | null | undefined): QuestionnaireDisplaySettings | null {\n if (!q) {\n return null;\n }\n const d = { ...DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY, ...q.display };\n return {\n viewMode: normalizeViewMode(d.viewMode),\n showProgressBar: d.showProgressBar ?? true,\n showTimer: d.showTimer ?? false,\n showQuestionNumbers: d.showQuestionNumbers ?? true,\n validationStrategy: normalizeValidationStrategy(d.validationStrategy),\n };\n}\n\n//#endregion\n","//#region ---- Types ----\n\nimport { AXPEntityReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMAssessmentCaseStatus = 'active' | 'closed' | 'cancelled';\n\nexport interface AXMAssessmentManagementAssessmentCaseEntityModel extends AXPEntityModel<string> {\n\n /**\n * Single questionnaire assigned to this case.\n */\n questionnaireId: string;\n\n /**\n * Optional friendly title for lists/search.\n */\n title: string;\n\n description?: string;\n\n /**\n * Target entity (e.g. AssetManagement.Asset, HumanCapital.Employee).\n */\n subjectRef: AXPEntityReference;\n\n status: AXMAssessmentCaseStatus;\n}\n\n//#endregion\n\n\n","//#region ---- Types ----\n\nimport { AXPEntityModel } from \"@acorex/platform/layout/entity\";\n\nexport type AXMAssessmentSessionRole = 'responder' | 'supervisor' | 'reviewer';\n\nexport type AXMAssessmentSessionStatus = 'not-started' | 'in-progress' | 'submitted' | 'under-review' | 'approved' | 'rejected' | 'completed';\n\nexport interface AXMAssessmentManagementAssessmentSessionEntityModel extends AXPEntityModel<string> {\n caseId: string;\n\n // Responder\n responderId: string;\n role: AXMAssessmentSessionRole;\n\n // Status managed by status plugin (statusId field added automatically)\n\n // Time tracking\n startedAt?: Date;\n lastSavedAt?: Date;\n timeSpent?: number; // Total seconds\n\n // Progress\n progressPercentage: number;\n answeredQuestionsCount: number;\n\n // Answers\n answers: Record<string, unknown>;\n\n // Override chain\n previousId?: string;\n}\n\n//#endregion\n\n","//#region ---- Types ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\n/** Primitive type of the evaluated value (coercion after expression runs). */\nexport type QuestionnaireCalculationResultKind = 'number' | 'string' | 'boolean';\n\nexport interface AXMAssessmentManagementQuestionnaireCalculationEntityModel extends AXPEntityModel<string> {\n questionnaireId?: string;\n questionnaire?: { id?: string; title?: AXPMultiLanguageString; type?: string };\n name?: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n resultKind?: QuestionnaireCalculationResultKind;\n /**\n * Use `{{ ... }}` or plain expression body; scope includes `answer.eval`, `outcome.eval` / `formula.eval`, and `fn.SUM`, `fn.AVERAGE`, etc.\n */\n expression?: string;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\n\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPResolveMultiLanguageStringPipe } from '@acorex/platform/core';\nimport type { PrePostContentValue } from '../../../../entities/questionnaire/questionnaire.types';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable pre-questionnaire (welcome) content component.\n * Renders rich text content only. Start button is provided by the host footer.\n * Use in page, popup, standalone, and preview views.\n */\n@Component({\n selector: 'axm-pre-questionnaire-content',\n template: `\n <div class=\"axm-pre-questionnaire-content ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\">\n <div\n class=\"ax-max-w-2xl ax-w-full ax-prose ax-text-on-surface\"\n [innerHTML]=\"content() | axpResolveMultiLanguageString: locale() | safe: 'html'\"\n ></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AXPResolveMultiLanguageStringPipe],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-pre-questionnaire-content' },\n})\nexport class AXMPreQuestionnaireContentComponent {\n //#region ---- Inputs ----\n\n /** Rich text content. Supports multi-language: Record<locale, string>. */\n content = input<PrePostContentValue | null | undefined>(null);\n\n /** Locale for multi-language content. Defaults to active lang. */\n locale = input<string | undefined>(undefined);\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { resolveMultiLanguageString, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { resolveSummaryPlaceholders, type SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport type { PrePostContentValue } from '../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireViewerQuestion } from '../../questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerQuestionComponent } from '../question/questionnaire-viewer-question.component';\nimport { AXMQuestionnaireViewerSectionHeaderComponent } from '../section-header/questionnaire-viewer-section-header.component';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface QuestionWithAnswer {\n name: string;\n title: string;\n answer: unknown;\n /** Full question with interface for widget rendering in view mode. */\n question?: QuestionnaireViewerQuestion;\n /** Section technical name (for grouping in review). */\n sectionName?: string;\n /** Section order from questionnaire (matches `section.order` in viewer). */\n sectionOrder?: number;\n sectionTitle?: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n}\n\n/** One section block in review (all visible questions, answered or not). */\nexport interface ReviewSectionGroup {\n readonly trackKey: string;\n readonly sectionName: string;\n readonly sectionOrder: number;\n readonly sectionTitle: AXPMultiLanguageString;\n readonly sectionDescription?: AXPMultiLanguageString;\n readonly items: QuestionWithAnswer[];\n}\n\n/** `review` = Q&A list; `summary` = rich summary only; `results` = calculation outcomes list only. */\nexport type PostQuestionnaireMode = 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable post-questionnaire component.\n * Renders review (Q&A), summary (rich text), or results (outcome list).\n * Edit, Submit, Next, Done buttons are provided by the host footer.\n */\n@Component({\n selector: 'axm-post-questionnaire-content',\n template: `\n @if (mode() === 'review') {\n <div class=\"axm-post-questionnaire-content __review ax-flex ax-flex-col ax-overflow-auto ax-min-h-full ax-text-on-surface\">\n <div class=\"ax-p-4 ax-border-b ax-border-surface\">\n <h2 class=\"ax-text-lg ax-font-semibold ax-text-on-surface\">{{ '@assessment-management:questionnaires.components.questionnaire-viewer.flow.review-title' | translate | async }}</h2>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto ax-p-4 ax-flex ax-flex-col ax-gap-6\">\n @if (reviewContext(); as ctx) {\n <axp-widgets-container [context]=\"ctx\" class=\"ax-flex ax-flex-col ax-gap-6\">\n @for (group of reviewSectionGroups(); track group.trackKey) {\n <section class=\"ax-flex ax-flex-col ax-gap-4\">\n <axm-questionnaire-viewer-section-header\n [title]=\"group.sectionTitle\"\n [description]=\"group.sectionDescription\"\n titleSize=\"md\"\n marginBottom=\"sm\"\n />\n @for (item of group.items; track item.name; let qi = $index) {\n @if (item.question?.question?.interface) {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-overflow-hidden ax-shadow-sm\">\n <axm-questionnaire-viewer-question\n [question]=\"item.question!\"\n [sectionOrder]=\"group.sectionOrder\"\n [questionIndex]=\"qi + 1\"\n [showQuestionNumbers]=\"showQuestionNumbers()\"\n [mode]=\"'view'\"\n [contextData]=\"ctx\"\n ></axm-questionnaire-viewer-question>\n </div>\n } @else {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\">\n <div class=\"ax-font-medium ax-mb-2 ax-text-on-surface\">{{ item.title }}</div>\n <div class=\"ax-text-sm __post-text-muted\">{{ formatAnswer(item.answer) }}</div>\n </div>\n }\n }\n </section>\n }\n </axp-widgets-container>\n } @else {\n @for (group of reviewSectionGroups(); track group.trackKey) {\n <section class=\"ax-flex ax-flex-col ax-gap-4\">\n <axm-questionnaire-viewer-section-header\n [title]=\"group.sectionTitle\"\n [description]=\"group.sectionDescription\"\n titleSize=\"md\"\n marginBottom=\"sm\"\n />\n @for (item of group.items; track item.name) {\n <div class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\">\n <div class=\"ax-font-medium ax-mb-2 ax-text-on-surface\">{{ item.title }}</div>\n <div class=\"ax-text-sm __post-text-muted\">{{ formatAnswer(item.answer) }}</div>\n </div>\n }\n </section>\n }\n }\n </div>\n </div>\n } @else if (mode() === 'results') {\n <div\n class=\"axm-post-questionnaire-content __results ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\"\n >\n @if (outcomeEntries().length > 0) {\n <div class=\"ax-max-w-2xl ax-w-full\">\n <h3 class=\"ax-text-base ax-font-semibold ax-mb-3 ax-text-on-surface\">\n {{\n '@assessment-management:questionnaires.components.questionnaire-viewer.flow.outcomes-section-title'\n | translate\n | async\n }}\n </h3>\n <ul class=\"ax-list-none ax-p-0 ax-m-0 ax-flex ax-flex-col ax-gap-1 ax-rounded-lg ax-border ax-border-surface ax-lighter-surface ax-overflow-hidden\">\n @for (row of outcomeEntries(); track row.key) {\n <li class=\"ax-flex ax-justify-between ax-gap-4 ax-py-3 ax-px-4 ax-border-b ax-border-surface last:ax-border-b-0\">\n <span class=\"ax-text-sm ax-font-medium __post-text-muted\">{{ row.label }}</span>\n <span class=\"ax-text-sm ax-text-on-surface ax-text-right ax-break-all\">{{ formatAnswer(row.value) }}</span>\n </li>\n }\n </ul>\n </div>\n } @else {\n <p class=\"ax-text-sm __post-text-muted\">\n {{ '@assessment-management:questionnaires.components.questionnaire-viewer.flow.no-outcomes' | translate | async }}\n </p>\n }\n </div>\n } @else {\n <div\n class=\"axm-post-questionnaire-content __summary ax-flex ax-flex-col ax-items-center ax-justify-center ax-p-8 ax-min-h-[200px] ax-text-on-surface\"\n >\n <div class=\"ax-max-w-2xl ax-w-full ax-prose ax-text-on-surface\" [innerHTML]=\"summaryContentHtml()\"></div>\n </div>\n }\n `,\n styles: [\n `\n .axm-post-questionnaire-content .__post-text-muted {\n color: rgb(var(--ax-sys-color-on-surface-variant));\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXMQuestionnaireViewerQuestionComponent,\n AXMQuestionnaireViewerSectionHeaderComponent,\n ],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-post-questionnaire-content' },\n})\nexport class AXMPostQuestionnaireContentComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly sanitizer = inject(DomSanitizer);\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /** Display mode: review, summary (rich text), or results (calculation list). */\n mode = input<PostQuestionnaireMode>('review');\n\n /** Questions with answers for review mode. */\n questionsWithAnswers = input<QuestionWithAnswer[]>([]);\n\n /** Context data for widget rendering in view mode (answers at widget paths). Required for proper display. */\n reviewContext = input<Record<string, any> | null>(null);\n\n /** Summary content (rich text). Supports multi-language and placeholders. */\n summaryContent = input<PrePostContentValue | null | undefined>(null);\n\n /** Placeholder values: totals, time, and calculation outcomes. */\n placeholderValues = input<SummaryPlaceholderValues | null>(null);\n\n /** Locale for multi-language content. Defaults to active lang. */\n locale = input<string | undefined>(undefined);\n\n /**\n * Matches questionnaire viewer display settings (`showQuestionNumbers`).\n * When true, review shows `sectionOrder.questionIndex` like single-page / page-per-group.\n */\n showQuestionNumbers = input<boolean>(true);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** Groups review rows by section (all visible questions in questionnaire order, answered or not). */\n protected readonly reviewSectionGroups = computed((): ReviewSectionGroup[] => {\n const items = this.questionsWithAnswers();\n if (!items.length) {\n return [];\n }\n const groups: Array<{\n trackKey: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n items: QuestionWithAnswer[];\n }> = [];\n for (const item of items) {\n const sectionName = item.sectionName ?? item.question?.sectionName ?? '';\n const sectionOrder = item.sectionOrder ?? 0;\n const trackKey = `${sectionOrder}::${sectionName}`;\n const sectionTitle: AXPMultiLanguageString =\n item.sectionTitle ?? ({ 'en-US': sectionName || item.title } as AXPMultiLanguageString);\n const sectionDescription = item.sectionDescription;\n const last = groups[groups.length - 1];\n if (!last || last.trackKey !== trackKey) {\n groups.push({\n trackKey,\n sectionName,\n sectionOrder,\n sectionTitle,\n sectionDescription,\n items: [item],\n });\n } else {\n last.items.push(item);\n }\n }\n return groups;\n });\n\n /** Calculation name/value pairs for results step; `label` is entity title or humanized name. */\n protected readonly outcomeEntries = computed(() => {\n const pv = this.placeholderValues();\n const o = pv?.outcomes;\n const titles = pv?.outcomeTitles;\n if (!o || typeof o !== 'object') return [] as Array<{ key: string; value: unknown; label: string }>;\n return Object.entries(o).map(([key, value]) => ({\n key,\n value,\n label: (titles?.[key] ?? '').trim() || this.humanizeOutcomeKey(key),\n }));\n });\n\n protected readonly summaryContentHtml = computed(() => {\n const content = this.summaryContent();\n const values = this.placeholderValues();\n const localeVal = this.locale() ?? this.translationService.getActiveLang?.() ?? 'en-US';\n let resolved = resolveMultiLanguageString(content, localeVal);\n if (resolved && values) {\n resolved = resolveSummaryPlaceholders(resolved, values);\n }\n if (!resolved && values) {\n resolved = `<p>You answered <strong>${values.answeredCount ?? 0}</strong> of <strong>${values.totalQuestions ?? 0}</strong> questions.</p>`;\n }\n return resolved ? this.sanitizer.bypassSecurityTrustHtml(resolved) : '';\n });\n\n //#endregion\n\n //#region ---- Helpers ----\n\n /** Fallback when no calculation entity title is available. */\n private humanizeOutcomeKey(key: string): string {\n return key\n .replace(/_/g, ' ')\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(' ');\n }\n\n protected formatAnswer(answer: unknown): string {\n if (answer == null || answer === '') return '—';\n if (typeof answer === 'string') return answer;\n if (typeof answer === 'number' || typeof answer === 'boolean') return String(answer);\n if (Array.isArray(answer)) return answer.map((a) => (typeof a === 'object' ? JSON.stringify(a) : String(a))).join(', ');\n if (typeof answer === 'object') return JSON.stringify(answer);\n return String(answer);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPThemeLayoutBlockComponent, AXPStopwatchComponent } from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../../entities/assessment-case/assessment-case.types';\nimport type {\n AXMAssessmentManagementAssessmentSessionEntityModel,\n AXMAssessmentSessionRole,\n} from '../../../../entities/assessment-session/assessment-session.types';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../../../const';\nimport type { SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer.service';\nimport { AXMQuestionnaireViewerComponent } from '../../components/viewer-container';\nimport { AXMPreQuestionnaireContentComponent } from '../../components/pre-questionnaire-content';\nimport {\n AXMPostQuestionnaireContentComponent,\n type QuestionWithAnswer,\n} from '../../components/post-questionnaire-content';\nimport { AXButtonModule } from '@acorex/components/button';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype FlowStep = 'pre' | 'questions' | 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-questionnaire-viewer-page',\n templateUrl: './questionnaire-viewer-page.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXTranslationModule,\n AXButtonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //AXPStopwatchComponent,\n AXMQuestionnaireViewerComponent,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }],\n styleUrl: './questionnaire-viewer-page.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-page' },\n})\nexport class AXMQuestionnaireViewerPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Services & Dependencies ----\n\n protected readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly entityService = inject(AXPEntityService);\n private readonly authSession = inject(AXPSessionService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly structure = signal<QuestionnaireBuilderValue | null>(null);\n protected readonly questionnaire = signal<AXMAssessmentManagementQuestionnaireEntityModel | null>(null);\n protected readonly initialAnswers = signal<Record<string, any>>({});\n protected readonly viewerConfig = signal<QuestionnaireViewerConfig | undefined>({ readonly: false });\n protected readonly prePostConfig = signal<ReturnType<typeof toPrePostConfig>>(null);\n protected readonly isLoading = signal(true);\n protected readonly loadError = signal<string | null>(null);\n protected readonly currentSessionId = signal<string | null>(null);\n\n protected readonly flowStep = signal<FlowStep>('questions');\n protected readonly reviewSnapshot = signal<QuestionWithAnswer[]>([]);\n protected readonly reviewContext = signal<Record<string, any> | null>(null);\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly isSubmitting = signal(false);\n protected readonly canNavigatePrevious = signal(false);\n protected readonly canNavigateNext = signal(false);\n protected readonly showNavigationButtons = signal(false);\n protected readonly isLastStep = signal(false);\n protected readonly areAllRequiredQuestionsAnswered = signal(false);\n\n //#endregion\n\n //#region ---- View References ----\n\n protected readonly viewer = viewChild<AXMQuestionnaireViewerComponent>('viewer');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly viewerViewModel = computed(() => this.viewer()?.viewmodel);\n protected readonly totalQuestionsCount = computed(() => this.viewerViewModel()?.totalQuestionsCount() ?? 0);\n protected readonly totalSectionsCount = computed(() => this.viewerViewModel()?.totalSectionsCount() ?? 0);\n protected readonly showTimer = computed(() => this.viewerViewModel()?.showTimer() ?? false);\n protected readonly timerTimeLimit = computed(() => this.viewerViewModel()?.timerTimeLimit());\n protected readonly timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0);\n protected readonly showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false);\n protected readonly answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0);\n protected readonly isReadonly = computed(() => this.viewerConfig()?.readonly ?? false);\n\n protected readonly showReviewButton = computed(\n () => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions'\n );\n\n /** Use answers from review context when returning from review; otherwise use initial answers. */\n protected readonly effectiveInitialAnswers = computed(() => {\n const ctx = this.reviewContext();\n if (!ctx) return this.initialAnswers();\n return (ctx as { answers?: Record<string, any> }).answers ?? ctx;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n effect(() => {\n const v = this.viewer();\n if (v) {\n const vm = v.viewmodel;\n this.canNavigatePrevious.set(vm.canNavigatePrevious());\n this.canNavigateNext.set(vm.canNavigateNext());\n const viewMode = v.viewMode;\n this.showNavigationButtons.set(viewMode === 'page-per-group' || viewMode === 'page-per-question' || viewMode === 'side-menu');\n this.isLastStep.set(v.isLastStep);\n this.areAllRequiredQuestionsAnswered.set(v.areAllRequiredQuestionsAnswered);\n }\n });\n }\n\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n await this.loadData();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadData(): Promise<void> {\n const caseId = this.route.snapshot.paramMap.get('caseId') ?? this.route.parent?.snapshot.paramMap.get('caseId');\n if (!caseId) {\n this.loadError.set('Case ID is required');\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.loadError.set(null);\n\n try {\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(caseId);\n if (!assessmentCase) {\n this.loadError.set('Assessment case not found');\n this.isLoading.set(false);\n return;\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire?.questions?.sections?.length) {\n this.loadError.set('Questionnaire or questions not found');\n this.isLoading.set(false);\n return;\n }\n\n let answers: Record<string, any> = {};\n const existingSessionId = this.route.snapshot.queryParamMap.get('sessionId') ?? this.route.parent?.snapshot.queryParamMap.get('sessionId');\n if (existingSessionId) {\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(existingSessionId);\n if (session?.answers) {\n answers = session.answers;\n this.currentSessionId.set(existingSessionId);\n }\n }\n\n this.questionnaire.set(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel);\n this.structure.set({\n ...questionnaire.questions,\n displaySettings: toDisplaySettings(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel) ?? undefined,\n } as QuestionnaireBuilderValue);\n this.initialAnswers.set(answers);\n const cfg = toPrePostConfig(questionnaire as AXMAssessmentManagementQuestionnaireEntityModel);\n this.prePostConfig.set(cfg);\n this.flowStep.set(cfg?.pre.enabled === true ? 'pre' : 'questions');\n this.viewerConfig.set({ readonly: false });\n } catch (err: any) {\n this.loadError.set(err?.message ?? 'Failed to load questionnaire');\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Submit Handler ----\n\n /**\n * After successful submit: outcomes first (if enabled), then summary last (if enabled), else close.\n */\n private applyPostSubmitFlow(summary: SummaryPlaceholderValues | null): void {\n const cfg = this.prePostConfig();\n if (!summary) {\n this.handleDone();\n return;\n }\n if (cfg?.post.showCalculationResults === true) {\n this.flowStep.set('results');\n return;\n }\n if (cfg?.post.summaryEnabled === true) {\n this.flowStep.set('summary');\n return;\n }\n this.handleDone();\n }\n\n private async saveSessionAndGetSummary(answers: Record<string, any>): Promise<SummaryPlaceholderValues | null> {\n const caseIdVal = this.route.snapshot.paramMap.get('caseId') ?? this.route.parent?.snapshot.paramMap.get('caseId');\n const structureVal = this.structure();\n const q = this.questionnaire();\n if (!caseIdVal || !structureVal || !q) return null;\n\n const { answeredQuestionsCount, progressPercentage } =\n this.questionnaireViewerService.calculateProgressFromStructure(structureVal, answers);\n const responderId = this.authSession.user?.id;\n if (!responderId) {\n this.toastService.show({\n color: 'danger',\n title: await this.translateService.translateAsync('@general:messages.generic.error.title'),\n content: await this.translateService.translateAsync('@general:messages.generic.error.description'),\n });\n return null;\n }\n\n const now = new Date();\n const sessionIdVal = this.currentSessionId();\n const role: AXMAssessmentSessionRole = 'responder';\n const sessionData: Partial<AXMAssessmentManagementAssessmentSessionEntityModel> = {\n caseId: caseIdVal,\n responderId,\n role,\n answers,\n progressPercentage,\n answeredQuestionsCount,\n lastSavedAt: now,\n };\n\n const sessionDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n if (sessionIdVal) {\n await sessionDataAccessor.update(sessionIdVal, sessionData);\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@general:messages.form.saved.success.title'),\n content: await this.translateService.translateAsync('@general:messages.form.saved.success.description'),\n });\n } else {\n const newSessionData = { ...sessionData, startedAt: now } as Omit<AXMAssessmentManagementAssessmentSessionEntityModel, 'id'>;\n await sessionDataAccessor.create(newSessionData);\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@assessment-management:sessions.states.submitted'),\n content: '',\n });\n }\n\n const elapsed = this.viewerViewModel()?.timerElapsed() ?? 0;\n return this.questionnaireViewerService.buildSummaryPlaceholderValues(structureVal, answers, {\n questionnaireId: q.id,\n elapsedSeconds: elapsed,\n });\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPageTitle(): Promise<string> {\n return this.translateService.translateAsync('@assessment-management:cases.actions.fill-assessment.title');\n }\n\n override getPageBreadcrumbs(): ReturnType<AXPPageLayoutBaseComponent['getPageBreadcrumbs']> {\n return [\n { title: '@assessment-management:cases.entities.assessment-case.plural', command: { name: 'navigate', options: { path: this.getCasesListPath() } } },\n { title: '@assessment-management:cases.actions.fill-assessment.title' },\n ];\n }\n\n override async getBackButton(): Promise<{ title: string } | null> {\n const title = await this.translateService.translateAsync('@assessment-management:cases.entities.assessment-case.plural');\n return { title };\n }\n\n override onBackButtonClick(): void {\n this.router.navigateByUrl(this.getCasesListPath());\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private getCasesListPath(): string {\n const app = this.authSession.application?.name ?? 'demo';\n return `/${app}/m/assessment-management/e/AssessmentCase/list`;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleAnswersChanged(_answers: Record<string, any>): void { }\n\n protected handleReviewClick(): void {\n const viewer = this.viewer();\n const items = viewer?.getQuestionsWithAnswers() ?? [];\n const context = viewer?.getReviewContext() ?? null;\n this.reviewSnapshot.set(\n items.map((q) => ({\n name: q.name,\n title: q.title,\n answer: q.answer,\n question: q.question,\n sectionName: q.sectionName,\n sectionOrder: q.sectionOrder,\n sectionTitle: q.sectionTitle,\n sectionDescription: q.sectionDescription,\n })),\n );\n this.reviewContext.set(context);\n this.flowStep.set('review');\n }\n\n protected async handleReviewSubmit(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected async handlePreviousClick(): Promise<void> {\n await this.viewer()?.navigatePrevious();\n }\n\n protected async handleNextClick(): Promise<void> {\n await this.viewer()?.navigateNext();\n }\n\n protected async handleSubmitClick(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected handleDone(): void {\n this.router.navigateByUrl(this.getCasesListPath());\n }\n\n //#endregion\n}\n\n//#endregion\n","<!-- Page shell layout -->\n<axp-page-layout>\n <!-- Main content area -->\n <axp-page-content class=\"ax-flex ax-flex-col ax-flex-1 ax-min-h-0\"\n [class.ax-overflow-hidden]=\"flowStep() === 'questions'\" [class.ax-overflow-y-auto]=\"flowStep() !== 'questions'\">\n <!-- Loading state -->\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-min-h-[200px]\">\n <span>{{ '@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async\n }}</span>\n </div>\n }\n <!-- Error state -->\n @else if (loadError()) {\n <div class=\"ax-p-4 ax-text-error-600\">\n {{ loadError() }}\n </div>\n }\n <!-- Content state -->\n @else if (structure()) {\n <!-- Pre-questionnaire introduction content -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"prePostConfig()?.pre?.content\"></axm-pre-questionnaire-content>\n }\n <!-- Post-submit results content -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Post-submit summary content -->\n @else if (flowStep() === 'summary') {\n <axm-post-questionnaire-content mode=\"summary\" [summaryContent]=\"prePostConfig()?.post?.summaryContent\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Questionnaire and review flow -->\n @else {\n <!-- Review mode content -->\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content mode=\"review\" [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"></axm-post-questionnaire-content>\n }\n\n <!-- Questionnaire workspace (hidden while in review mode) -->\n <div class=\"__questions ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\"\n [class.ax-invisible]=\"flowStep() === 'review'\" [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\" [class.ax-size-0]=\"flowStep() === 'review'\"\n [class.ax-overflow-hidden]=\"flowStep() === 'review'\">\n\n <!-- Questionnaire rendering container -->\n <div class=\"__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden\">\n <axm-questionnaire-viewer #viewer [structure]=\"structure()!\" [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n (answersChanged)=\"handleAnswersChanged($event)\"></axm-questionnaire-viewer>\n </div>\n </div>\n }\n }\n </axp-page-content>\n\n <!-- Footer actions (only when content is ready) -->\n @if (structure() && !isLoading() && !loadError()) {\n <axp-page-footer class=\"--animated\">\n <!-- Footer prefix: progress indicator -->\n <axp-layout-prefix>\n @if (flowStep() === 'questions') {\n <div class=\"__footer-progress ax-text-sm ax-font-mono ax-tabular-nums\" dir=\"ltr\">\n @if (showProgressBar()) {\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n }\n </div>\n }\n <!-- @if (showTimer()) {\n <axp-stopwatch [mode]=\"timerTimeLimit() ? 'count-down' : 'count-up'\" [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\" [autoStart]=\"true\"\n [showControls]=\"false\" [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"></axp-stopwatch>\n } -->\n </axp-layout-prefix>\n\n <!-- Footer suffix: flow action buttons -->\n <axp-layout-suffix>\n @if (flowStep() === 'pre') {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.start' | translate | async\"\n (onClick)=\"flowStep.set('questions')\"></ax-button>\n }\n <!-- Question step actions -->\n @else if (flowStep() === 'questions') {\n <!-- Question navigation buttons -->\n @if (showNavigationButtons()) {\n <ax-button look=\"solid\" [disabled]=\"!canNavigatePrevious()\"\n [text]=\"'@general:actions.previous.title' | translate | async\" (onClick)=\"handlePreviousClick()\"></ax-button>\n @if (!isLastStep()) {\n <ax-button look=\"solid\" color=\"primary\" [disabled]=\"!canNavigateNext()\"\n [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"handleNextClick()\"></ax-button>\n }\n }\n\n <!-- Final-step actions -->\n @if (isLastStep() && showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.review' | translate | async\"\n [disabled]=\"!areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n @if (isLastStep() && !showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\"\n [disabled]=\"isReadonly() || isSubmitting() || !areAllRequiredQuestionsAnswered()\"\n (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n }\n <!-- Review step actions -->\n @else if (flowStep() === 'review') {\n <ax-button look=\"outline\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.edit' | translate | async\"\n (onClick)=\"flowStep.set('questions')\"></ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\"\n [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n }\n <!-- Results step actions -->\n @else if (flowStep() === 'results') {\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.next.title' | translate | async\"\n (onClick)=\"flowStep.set('summary')\"></ax-button>\n } @else {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"></ax-button>\n }\n }\n <!-- Summary step action -->\n @else if (flowStep() === 'summary') {\n <ax-button look=\"solid\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\"\n (onClick)=\"handleDone()\"></ax-button>\n }\n </axp-layout-suffix>\n </axp-page-footer>\n }\n</axp-page-layout>","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStopwatchComponent } from '@acorex/platform/layout/components';\nimport {\n AXPWidgetCoreModule,\n AXPWidgetCoreService,\n} from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n OnInit,\n signal,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { QuestionnaireBuilderValue } from '../../../questionnaire-builder/questionnaire-builder.types';\nimport { AXMQuestionnaireViewerComponent } from '../../components/viewer-container';\nimport { AXMPreQuestionnaireContentComponent } from '../../components/pre-questionnaire-content';\nimport {\n AXMPostQuestionnaireContentComponent,\n type QuestionWithAnswer,\n} from '../../components/post-questionnaire-content';\nimport { QuestionnaireViewerConfig } from '../../questionnaire-viewer.types';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../../entities/assessment-session/assessment-session.types';\nimport {\n type AXMAssessmentManagementQuestionnaireEntityModel,\n toDisplaySettings,\n toPrePostConfig,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport type { SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer.service';\nimport { AXPContextStore } from '@acorex/platform/core';\nimport { RootConfig } from '../../../../const';\n\n//#endregion\n\n//#region ---- Types ----\n\ntype FlowStep = 'pre' | 'questions' | 'review' | 'summary' | 'results';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-questionnaire-viewer-standalone-page',\n template: `\n <div class=\"__standalone ax-min-h-screen ax-flex ax-flex-col ax-lightest-surface\">\n @if (isLoading()) {\n <div class=\"ax-flex ax-items-center ax-justify-center ax-flex-1 ax-min-h-[200px]\">\n <span>{{ '@assessment-management:questionnaires.components.questionnaire-viewer.loading.title' | translate | async }}</span>\n </div>\n } @else if (loadError()) {\n <div class=\"ax-p-6 ax-text-error-600 ax-text-center\">\n {{ loadError() }}\n </div>\n } @else if (structure()) {\n <div class=\"__main-container ax-flex-1 ax-flex ax-flex-col ax-max-w-4xl ax-mx-auto ax-w-full ax-min-h-0 ax-p-4\">\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content\n [content]=\"prePostConfig()?.pre?.content\"\n ></axm-pre-questionnaire-content>\n } @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n } @else if (flowStep() === 'summary') {\n <axm-post-questionnaire-content\n mode=\"summary\"\n [summaryContent]=\"prePostConfig()?.post?.summaryContent\"\n [placeholderValues]=\"submitResult()\"\n ></axm-post-questionnaire-content>\n } @else {\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content\n mode=\"review\"\n [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"\n [showQuestionNumbers]=\"viewerConfig()?.showQuestionNumbers ?? true\"\n ></axm-post-questionnaire-content>\n }\n <div\n class=\"__questions ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-hidden\"\n [class.ax-invisible]=\"flowStep() === 'review'\"\n [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\"\n [class.ax-size-0]=\"flowStep() === 'review'\"\n [class.ax-overflow-hidden]=\"flowStep() === 'review'\"\n >\n <div class=\"__header ax-flex-shrink-0 ax-p-4 ax-border-b ax-border-surface\">\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"__toolbar-meta ax-flex ax-items-center ax-gap-4 ax-text-sm\">\n @if (totalQuestionsCount() > 0) {\n <span><i class=\"fa-light fa-list-check ax-text-primary-600\"></i> {{ totalQuestionsCount() }} {{ totalQuestionsCount() === 1 ? 'Question' : 'Questions' }}</span>\n }\n @if (showTimer()) {\n <axp-stopwatch\n [mode]=\"'count-down'\"\n [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\"\n [autoStart]=\"true\"\n [showControls]=\"false\"\n [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"\n ></axp-stopwatch>\n }\n </div>\n </div>\n </div>\n <div class=\"__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden\">\n <axm-questionnaire-viewer\n #viewer\n [structure]=\"structure()!\"\n [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n ></axm-questionnaire-viewer>\n </div>\n </div>\n }\n </div>\n }\n @if (structure() && (flowStep() === 'pre' || flowStep() === 'questions' || flowStep() === 'review' || flowStep() === 'summary' || flowStep() === 'results')) {\n <ax-footer class=\"__standalone-footer ax-flex ax-items-center ax-justify-between ax-gap-4 ax-py-4 ax-mt-4 ax-px-4 ax-border-t ax-border-surface ax-lightest-surface\">\n <ax-prefix>\n @if (flowStep() === 'questions') {\n <div class=\"__footer-progress ax-text-sm ax-font-mono ax-tabular-nums\" dir=\"ltr\">\n @if (showProgressBar()) {\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n }\n </div>\n }\n </ax-prefix>\n <ax-suffix>\n @if (flowStep() === 'pre') {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.start' | translate | async\" (onClick)=\"flowStep.set('questions')\"></ax-button>\n } @else if (flowStep() === 'questions') {\n @if (showNavigationButtons()) {\n <ax-button look=\"solid\" [disabled]=\"!canNavigatePrevious()\" [text]=\"'@general:actions.previous.title' | translate | async\" (onClick)=\"handlePreviousClick()\"></ax-button>\n @if (!isLastStep()) {\n <ax-button look=\"solid\" color=\"primary\" [disabled]=\"!canNavigateNext()\" [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"handleNextClick()\"></ax-button>\n }\n }\n @if (isLastStep() && showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.review' | translate | async\" [disabled]=\"!areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n @if (isLastStep() && !showReviewButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" [disabled]=\"isReadonly() || isSubmitting() || !areAllRequiredQuestionsAnswered()\" (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n } @else if (flowStep() === 'review') {\n <ax-button look=\"outline\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.edit' | translate | async\" (onClick)=\"flowStep.set('questions')\"></ax-button>\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.submit.title' | translate | async\" [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n } @else if (flowStep() === 'results') {\n @if (prePostConfig()?.post?.summaryEnabled) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@general:actions.next.title' | translate | async\" (onClick)=\"flowStep.set('summary')\"></ax-button>\n } @else {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\" (onClick)=\"handleDone()\"></ax-button>\n }\n } @else if (flowStep() === 'summary') {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.done' | translate | async\" (onClick)=\"handleDone()\"></ax-button>\n }\n </ax-suffix>\n </ax-footer>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n AXPStopwatchComponent,\n AXMQuestionnaireViewerComponent,\n AXMPreQuestionnaireContentComponent,\n AXMPostQuestionnaireContentComponent,\n ],\n providers: [AXPWidgetCoreService, AXPContextStore],\n styleUrl: './questionnaire-viewer-standalone-page.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-viewer-standalone-page' },\n})\nexport class AXMQuestionnaireViewerStandalonePageComponent implements OnInit {\n //#region ---- Services & Dependencies ----\n\n private readonly route = inject(ActivatedRoute);\n private readonly entityService = inject(AXPEntityService);\n private readonly questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly structure = signal<QuestionnaireBuilderValue | null>(null);\n protected readonly questionnaire = signal<AXMAssessmentManagementQuestionnaireEntityModel | null>(null);\n protected readonly initialAnswers = signal<Record<string, any>>({});\n protected readonly prePostConfig = signal<ReturnType<typeof toPrePostConfig>>(null);\n protected readonly viewerConfig = signal<QuestionnaireViewerConfig | undefined>({ readonly: false });\n protected readonly isLoading = signal(true);\n protected readonly loadError = signal<string | null>(null);\n protected readonly isSubmitting = signal(false);\n\n protected readonly flowStep = signal<FlowStep>('questions');\n protected readonly reviewSnapshot = signal<QuestionWithAnswer[]>([]);\n protected readonly reviewContext = signal<Record<string, any> | null>(null);\n protected readonly submitResult = signal<SummaryPlaceholderValues | null>(null);\n protected readonly canNavigatePrevious = signal(false);\n protected readonly canNavigateNext = signal(false);\n protected readonly showNavigationButtons = signal(false);\n protected readonly isLastStep = signal(false);\n protected readonly areAllRequiredQuestionsAnswered = signal(false);\n\n //#endregion\n\n //#region ---- View References ----\n\n protected readonly viewer = viewChild<AXMQuestionnaireViewerComponent>('viewer');\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly viewerViewModel = computed(() => this.viewer()?.viewmodel);\n protected readonly totalQuestionsCount = computed(() => this.viewerViewModel()?.totalQuestionsCount() ?? 0);\n protected readonly showTimer = computed(() => this.viewerViewModel()?.showTimer() ?? false);\n protected readonly timerTimeLimit = computed(() => this.viewerViewModel()?.timerTimeLimit());\n protected readonly timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0);\n protected readonly showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false);\n protected readonly answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0);\n protected readonly isReadonly = computed(() => this.viewerConfig()?.readonly ?? false);\n\n protected readonly showReviewButton = computed(\n () => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions'\n );\n\n /** Use answers from review context when returning from review; otherwise use initial answers. */\n protected readonly effectiveInitialAnswers = computed(() => {\n const ctx = this.reviewContext();\n if (!ctx) return this.initialAnswers();\n return (ctx as { answers?: Record<string, any> }).answers ?? ctx;\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const v = this.viewer();\n if (v) {\n const vm = v.viewmodel;\n this.canNavigatePrevious.set(vm.canNavigatePrevious());\n this.canNavigateNext.set(vm.canNavigateNext());\n const viewMode = v.viewMode;\n this.showNavigationButtons.set(viewMode === 'page-per-group' || viewMode === 'page-per-question' || viewMode === 'side-menu');\n this.isLastStep.set(v.isLastStep);\n this.areAllRequiredQuestionsAnswered.set(v.areAllRequiredQuestionsAnswered);\n }\n });\n }\n\n ngOnInit(): void {\n this.loadData();\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadData(): Promise<void> {\n const sessionId = this.route.snapshot.paramMap.get('sessionId') ?? this.route.parent?.snapshot.paramMap.get('sessionId');\n if (!sessionId) {\n this.loadError.set('Session ID is required');\n this.isLoading.set(false);\n return;\n }\n\n this.isLoading.set(true);\n this.loadError.set(null);\n\n try {\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (!session) {\n this.loadError.set('Session not found');\n this.isLoading.set(false);\n return;\n }\n\n const caseId = session.caseId;\n const assessmentCase = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>()\n .byKey(caseId);\n if (!assessmentCase) {\n this.loadError.set('Assessment case not found');\n this.isLoading.set(false);\n return;\n }\n\n const questionnaire = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(assessmentCase.questionnaireId);\n if (!questionnaire?.questions?.sections?.length) {\n this.loadError.set('Questionnaire or questions not found');\n this.isLoading.set(false);\n return;\n }\n\n const answers = session.answers ?? {};\n const cfg = toPrePostConfig(questionnaire);\n this.questionnaire.set(questionnaire);\n this.structure.set({\n ...questionnaire.questions,\n displaySettings: toDisplaySettings(questionnaire) ?? undefined,\n } as QuestionnaireBuilderValue);\n this.initialAnswers.set(answers);\n this.prePostConfig.set(cfg);\n this.flowStep.set(cfg?.pre.enabled === true ? 'pre' : 'questions');\n this.viewerConfig.set({ readonly: false });\n } catch (err: any) {\n this.loadError.set(err?.message ?? 'Failed to load questionnaire');\n } finally {\n this.isLoading.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Submit Handler ----\n\n private async saveSessionAndGetSummary(answers: Record<string, any>): Promise<SummaryPlaceholderValues | null> {\n const sessionId = this.route.snapshot.paramMap.get('sessionId') ?? this.route.parent?.snapshot.paramMap.get('sessionId');\n const structureVal = this.structure();\n const q = this.questionnaire();\n if (!sessionId || !structureVal || !q) return null;\n\n const { answeredQuestionsCount, progressPercentage } =\n this.questionnaireViewerService.calculateProgressFromStructure(structureVal, answers);\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(sessionId);\n if (session) {\n await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .update(sessionId, {\n answers,\n progressPercentage,\n answeredQuestionsCount,\n lastSavedAt: new Date(),\n });\n }\n\n const elapsed = this.viewerViewModel()?.timerElapsed() ?? 0;\n return this.questionnaireViewerService.buildSummaryPlaceholderValues(structureVal, answers, {\n questionnaireId: q.id,\n elapsedSeconds: elapsed,\n });\n }\n\n /**\n * After successful submit: outcomes first (if enabled), then summary last (if enabled), else close.\n */\n private applyPostSubmitFlow(summary: SummaryPlaceholderValues | null): void {\n const cfg = this.prePostConfig();\n if (!summary) {\n this.handleDone();\n return;\n }\n if (cfg?.post.showCalculationResults === true) {\n this.flowStep.set('results');\n return;\n }\n if (cfg?.post.summaryEnabled === true) {\n this.flowStep.set('summary');\n return;\n }\n this.handleDone();\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleReviewClick(): void {\n const viewer = this.viewer();\n const items = viewer?.getQuestionsWithAnswers() ?? [];\n const context = viewer?.getReviewContext() ?? null;\n this.reviewSnapshot.set(\n items.map((q) => ({\n name: q.name,\n title: q.title,\n answer: q.answer,\n question: q.question,\n sectionName: q.sectionName,\n sectionOrder: q.sectionOrder,\n sectionTitle: q.sectionTitle,\n sectionDescription: q.sectionDescription,\n })),\n );\n this.reviewContext.set(context);\n this.flowStep.set('review');\n }\n\n protected async handleReviewSubmit(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected async handlePreviousClick(): Promise<void> {\n await this.viewer()?.navigatePrevious();\n }\n\n protected async handleNextClick(): Promise<void> {\n await this.viewer()?.navigateNext();\n }\n\n protected async handleSubmitClick(): Promise<void> {\n const viewer = this.viewer();\n if (!viewer) return;\n this.isSubmitting.set(true);\n try {\n const result = await viewer.submit();\n if (result.success && result.answers) {\n const summary = await this.saveSessionAndGetSummary(result.answers);\n this.submitResult.set(summary ?? null);\n this.applyPostSubmitFlow(summary);\n }\n } finally {\n this.isSubmitting.set(false);\n }\n }\n\n protected handleDone(): void {\n // Standalone: could navigate away or show message\n }\n\n //#endregion\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["normalizeValidationStrategy","i3","i6","i7","i1","i4","i5","i2"],"mappings":"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"}
|