@acorex/modules 21.0.0-next.63 → 21.0.0-next.65
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-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BC6vzGG9.mjs} +25 -3
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-BC6vzGG9.mjs.map +1 -0
- package/fesm2022/acorex-modules-ai-management.mjs +43 -7
- package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-DqmJVJ0z.mjs} +22 -37
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DqmJVJ0z.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B6C2PRZw.mjs → acorex-modules-assessment-management-assessment-case.entity-DhVwPz0T.mjs} +8 -7
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-DhVwPz0T.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DquzZNaQ.mjs → acorex-modules-assessment-management-assessment-session.entity-BvV2Qgw1.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DquzZNaQ.mjs.map → acorex-modules-assessment-management-assessment-session.entity-BvV2Qgw1.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CRE8SxzC.mjs → acorex-modules-assessment-management-fill-assessment-session.command-4fkaeAG-.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-CRE8SxzC.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-4fkaeAG-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-Ce7yOnJY.mjs → acorex-modules-assessment-management-preview-question.command-6IGOdVVZ.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-question.command-Ce7yOnJY.mjs.map → acorex-modules-assessment-management-preview-question.command-6IGOdVVZ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-S-8MDeB7.mjs → acorex-modules-assessment-management-preview-questionnaire.command-CRDBe_BS.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-S-8MDeB7.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-CRDBe_BS.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-wdHMGBxi.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-B2ES-zcL.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-wdHMGBxi.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-B2ES-zcL.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-1Pm9O0kv.mjs → acorex-modules-assessment-management-question-bank-item.entity-Cw2WCdYK.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-1Pm9O0kv.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Cw2WCdYK.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-Dwx0y7WY.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-D9I3S-ZT.mjs} +120 -7
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-D9I3S-ZT.mjs.map +1 -0
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-BI_jc4C6.mjs → acorex-modules-assessment-management-questionnaire.entity-D9nHUmQB.mjs} +2 -2
- package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-BI_jc4C6.mjs.map → acorex-modules-assessment-management-questionnaire.entity-D9nHUmQB.mjs.map} +1 -1
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-BOeO3Dit.mjs +350 -0
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-BOeO3Dit.mjs.map +1 -0
- package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
- package/fesm2022/acorex-modules-common.mjs +0 -8
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs → acorex-modules-content-management-acorex-modules-content-management-DMMKjUJP.mjs} +6 -6
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-DMMKjUJP.mjs.map +1 -0
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs → acorex-modules-content-management-permission-definition.provider-B9RvUa2y.mjs} +2 -2
- package/fesm2022/{acorex-modules-content-management-permission-definition.provider-Bcq5uOVH.mjs.map → acorex-modules-content-management-permission-definition.provider-B9RvUa2y.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-BAuczQJ_.mjs} +2 -2
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-D_q_xWeI.mjs.map → acorex-modules-content-management-template-content-editor-widget-edit.component-BAuczQJ_.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-BbAK7l89.mjs} +2 -2
- package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DU5y6UxK.mjs.map → acorex-modules-content-management-template-content-editor-widget-view.component-BbAK7l89.mjs.map} +1 -1
- package/fesm2022/acorex-modules-content-management.mjs +1 -1
- package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs → acorex-modules-conversation-acorex-modules-conversation-CuaEuIdl.mjs} +122 -38
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-CuaEuIdl.mjs.map +1 -0
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-E0e9YjO9.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-assist-delegated-agent-detail-popup.component-VKPbkRqI.mjs.map → acorex-modules-conversation-assist-delegated-agent-detail-popup.component-E0e9YjO9.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs → acorex-modules-conversation-comments-page.component-zaGnoDs-.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-comments-page.component-ehUCjoFD.mjs.map → acorex-modules-conversation-comments-page.component-zaGnoDs-.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs → acorex-modules-conversation-send-assist-chat-message.command-D2vjfYtY.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-ZNcVi54N.mjs.map → acorex-modules-conversation-send-assist-chat-message.command-D2vjfYtY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs → acorex-modules-conversation-start-assist-chat.command-C2IEDIG9.mjs} +2 -2
- package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-CX6lm1lG.mjs.map → acorex-modules-conversation-start-assist-chat.command-C2IEDIG9.mjs.map} +1 -1
- package/fesm2022/acorex-modules-conversation.mjs +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-uRz1c5Km.mjs} +20 -20
- package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-BWezAea1.mjs.map → acorex-modules-human-capital-management-acorex-modules-human-capital-management-uRz1c5Km.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs → acorex-modules-human-capital-management-approve-leave-request.command-23klKnTy.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-Bh_Bbq5-.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-23klKnTy.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-BJ8xUiR2.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-BpDdDG9i.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-BJ8xUiR2.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-B3u1gXWI.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-CjtKaKFw.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-B3u1gXWI.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs → acorex-modules-human-capital-management-employee.entity-uhwOOw_y.mjs} +11 -3
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-uhwOOw_y.mjs.map +1 -0
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs → acorex-modules-human-capital-management-employment-type.entity-BQe82rsr.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-B20Taa5x.mjs.map → acorex-modules-human-capital-management-employment-type.entity-BQe82rsr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs → acorex-modules-human-capital-management-leave-request.entity-CE4hs4C8.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-BO8QXpZE.mjs.map → acorex-modules-human-capital-management-leave-request.entity-CE4hs4C8.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs → acorex-modules-human-capital-management-leave-type.entity-DJ4EEUKg.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-CQwSWqSh.mjs.map → acorex-modules-human-capital-management-leave-type.entity-DJ4EEUKg.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-CB2hlyOP.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-BPWJrvbN.mjs.map → acorex-modules-human-capital-management-lifecycle-event-type.entity-CB2hlyOP.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-DWonFZpU.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event.entity-ZZuPu9KQ.mjs.map → acorex-modules-human-capital-management-lifecycle-event.entity-DWonFZpU.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs → acorex-modules-human-capital-management-position-assignment.entity-o8PjggiT.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-BN1y0qhi.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-o8PjggiT.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs → acorex-modules-human-capital-management-reject-leave-request.command-B6sr7oey.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-LczqOHP-.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-B6sr7oey.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-aH7qTRnr.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-Dm8YacDI.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-aH7qTRnr.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B-VsXS4c.mjs} +2 -2
- package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DPwuyFz2.mjs.map → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-B-VsXS4c.mjs.map} +1 -1
- package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
- package/fesm2022/{acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs → acorex-modules-task-management-acorex-modules-task-management-DAh3IByo.mjs} +37 -19
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management-DAh3IByo.mjs.map +1 -0
- package/fesm2022/{acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs → acorex-modules-task-management-task-board.page-C2hB9JPM.mjs} +21 -12
- package/fesm2022/acorex-modules-task-management-task-board.page-C2hB9JPM.mjs.map +1 -0
- package/fesm2022/acorex-modules-task-management.mjs +1 -1
- package/fesm2022/acorex-modules-workflow-management-index-BhVZ1Bcw.mjs.map +1 -1
- package/package.json +2 -2
- package/types/acorex-modules-ai-management.d.ts +1 -2
- package/types/acorex-modules-assessment-management.d.ts +8 -0
- package/types/acorex-modules-conversation.d.ts +23 -3
- package/types/acorex-modules-task-management.d.ts +14 -1
- package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-u1hZ4P5s.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-case.entity-B6C2PRZw.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs +0 -47
- package/fesm2022/acorex-modules-assessment-management-assessment-session-answers-view.util-BRdwcIvw.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-Dwx0y7WY.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs +0 -157
- package/fesm2022/acorex-modules-assessment-management-view-case-last-session-answers.command-Ds-QGMPy.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs +0 -172
- package/fesm2022/acorex-modules-assessment-management-view-session-answers.command-COTVoRRG.mjs.map +0 -1
- package/fesm2022/acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs +0 -239
- package/fesm2022/acorex-modules-assessment-management-view-session-outcomes.command-2buH7ydV.mjs.map +0 -1
- package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-CO8lZb34.mjs.map +0 -1
- package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DkdNLMKa.mjs.map +0 -1
- package/fesm2022/acorex-modules-human-capital-management-employee.entity-Cx_oY2aK.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-acorex-modules-task-management--mdNdYIs.mjs.map +0 -1
- package/fesm2022/acorex-modules-task-management-task-board.page-BIZ1qH7m.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-assessment-management-acorex-modules-assessment-management-DlhSQ0cB.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/questions/widgets/question-bank-interface-editor-widget/question-bank-interface-editor-widget.config.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/widgets/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/questions/builder/questionnaire-questions.types.ts","../../../../libs/modules/assessment-management/src/lib/entities/questionnaire/questionnaire.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/utils/questionnaire-answer.utils.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/questionnaire-viewer.service.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/builder/questionnaire-question-edit.property-tabs.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/builder/questionnaire-questions-builder.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/builder/questionnaire-questions-builder.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/pages/questionnaire-questions-page/QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/pages/questionnaire-questions-page/save-questionnaire-questions.command.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/pages/questionnaire-questions-page/questionnaire-questions-page.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/pages/questionnaire-questions-page/questionnaire-questions-page-component.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/questions/index.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/outcome-display-rule.constants.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/outcome-result-kind.constants.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/questionnaire-outcome-edit.property-tabs.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/questionnaire-outcomes-builder.mapping.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/questionnaire-outcomes-builder.types.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/questionnaire-outcomes-builder.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/builder/questionnaire-outcomes-builder.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page/QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page/save-questionnaire-outcomes.command.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page/questionnaire-outcomes-page.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page/questionnaire-outcomes-page-component.provider.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/outcomes/index.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-builder/index.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/single-page-view.component.html","../../../../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-group-view.component.html","../../../../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/page-per-question-view.component.html","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/side-menu-view.component.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/views/side-menu-view.component.html","../../../../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/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/features/questionnaire-viewer/utils/assessment-session-persistence.util.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/utils/outcome-results-view.mapper.ts","../../../../libs/modules/assessment-management/src/lib/features/questionnaire-viewer/components/outcome-results/questionnaire-outcome-results.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 },\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 }\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 },\n Session: {\n Management: 'AssessmentManagement:Session: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 policy: {\n features: [module.name],\n },\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 features: [module.name],\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 features: [module.name],\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 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 (view-only; cases are created by workflows)\n .addPermission(\n keys.Case.Management,\n `${CASE_PERMISSIONS}.management.title`,\n `${CASE_PERMISSIONS}.management.description`\n )\n .endPermission()\n\n // AssessmentSession Permissions (view-only; sessions are created by workflows)\n .addPermission(\n keys.Session.Management,\n `${SESSION_PERMISSIONS}.management.title`,\n `${SESSION_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}\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-light 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 './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 './questions/widgets/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, outcomes). */\n name: string;\n /** Optional labels for answer.byTag / answer.allByTag in outcomes (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/**\n * Storage key for answers — matches viewer `answerKey` fallback when item name is empty.\n */\nexport function resolveQuestionnaireItemAnswerStorageKey(\n item: Pick<QuestionnaireBuilderItem, 'name'> & { id?: string },\n itemIndex: number,\n): string {\n const fromName = getQuestionnaireItemAnswerKey(item);\n if (fromName) {\n return fromName;\n }\n const legacyId = typeof item.id === 'string' ? item.id.trim() : '';\n return legacyId || `item-${itemIndex}`;\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 outcomes 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 */\n/** Whether the respondent can save a draft before final submit. */\nexport type QuestionnaireCompletionMode = 'submit-only' | 'save-and-continue';\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 * submit-only: final submit only; save-and-continue: draft save + submit.\n */\n completionMode?: QuestionnaireCompletionMode;\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 ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { QuestionnaireDisplaySettings } from '../../features/questionnaire-builder/questions/builder/questionnaire-questions.types';\nimport { QuestionnaireBuilderValue } from '../../features/questionnaire-builder/questions/builder/questionnaire-questions.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 {{outcomeName}} from configured outcomes.\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 with outcome results (name/value list). */\n showOutcomeResults?: 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 QuestionnaireCompletionMode = 'submit-only' | 'save-and-continue';\n\nexport type QuestionnaireEntityDisplaySettings = Pick<\n QuestionnaireDisplaySettings,\n 'viewMode' | 'showProgressBar' | 'showTimer' | 'showQuestionNumbers' | 'validationStrategy' | 'completionMode'\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 showOutcomeResults: 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 completionMode: 'submit-only',\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\n/** Primitive type of an evaluated outcome value (coercion after expression runs). */\nexport type QuestionnaireOutcomeResultKind = 'number' | 'string' | 'boolean';\n\n/** Text emphasis for outcome result display rules. */\nexport type QuestionnaireOutcomeDisplayEmphasis = 'normal' | 'medium' | 'bold';\n\n/** Comparison operator for display rule conditions against the evaluated outcome `value`. */\nexport type QuestionnaireOutcomeDisplayOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte';\n\n/**\n * Theme color chooser value: `\"foreground background border\"` (hex or utility classes).\n */\nexport type QuestionnaireOutcomeDisplayColor = string;\n\n/** Icon chooser value or resolved Font Awesome class string. */\nexport type QuestionnaireOutcomeDisplayIcon =\n | string\n | {\n label?: string;\n styleClass?: string;\n iconClass?: string;\n };\n\n/**\n * Conditional styling for an outcome value in the results step.\n * Rules are evaluated in order; the first matching condition wins.\n */\nexport interface QuestionnaireOutcomeDisplayRule {\n id: string;\n order: number;\n operator: QuestionnaireOutcomeDisplayOperator;\n compareValue: number | string | boolean;\n /** Theme color chooser value applied to the outcome value in results. */\n color: QuestionnaireOutcomeDisplayColor;\n emphasis?: QuestionnaireOutcomeDisplayEmphasis;\n icon?: QuestionnaireOutcomeDisplayIcon;\n}\n\nconst OUTCOME_DISPLAY_OPERATORS: QuestionnaireOutcomeDisplayOperator[] = [\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n];\n\nconst OUTCOME_DISPLAY_EMPHASIS: QuestionnaireOutcomeDisplayEmphasis[] = ['normal', 'medium', 'bold'];\n\nfunction normalizeOutcomeDisplayColor(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n const parts = trimmed.split(/\\s+/);\n if (parts.length !== 3) {\n return undefined;\n }\n return trimmed;\n}\n\nfunction normalizeOutcomeDisplayOperator(value: unknown): QuestionnaireOutcomeDisplayOperator | undefined {\n const raw =\n typeof value === 'string'\n ? value\n : typeof value === 'object' && value !== null && 'id' in value\n ? String((value as { id?: unknown }).id ?? '')\n : '';\n const normalized = raw.trim().toLowerCase();\n return OUTCOME_DISPLAY_OPERATORS.includes(normalized as QuestionnaireOutcomeDisplayOperator)\n ? (normalized as QuestionnaireOutcomeDisplayOperator)\n : undefined;\n}\n\nfunction normalizeOutcomeDisplayCompareValue(value: unknown): number | string | boolean | undefined {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n if (trimmed === 'true') return true;\n if (trimmed === 'false') return false;\n const asNumber = Number(trimmed);\n if (Number.isFinite(asNumber)) {\n return asNumber;\n }\n return trimmed;\n }\n return undefined;\n}\n\nfunction normalizeOutcomeDisplayEmphasis(value: unknown): QuestionnaireOutcomeDisplayEmphasis {\n const raw =\n typeof value === 'string'\n ? value\n : typeof value === 'object' && value !== null && 'id' in value\n ? String((value as { id?: unknown }).id ?? '')\n : '';\n const normalized = raw.trim().toLowerCase();\n return OUTCOME_DISPLAY_EMPHASIS.includes(normalized as QuestionnaireOutcomeDisplayEmphasis)\n ? (normalized as QuestionnaireOutcomeDisplayEmphasis)\n : 'normal';\n}\n\nfunction normalizeOutcomeDisplayIcon(\n icon: QuestionnaireOutcomeDisplayIcon | null | undefined,\n): string | undefined {\n if (icon == null || icon === '') {\n return undefined;\n }\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n const styleClass = String(icon.styleClass ?? '').trim();\n const iconClass = String(icon.iconClass ?? '').trim();\n const combined = [styleClass, iconClass].filter(Boolean).join(' ');\n return combined.length > 0 ? combined : undefined;\n}\n\n/** Parses a theme color chooser value into foreground, background, and border parts. */\nexport function parseQuestionnaireOutcomeDisplayColor(\n value: string | null | undefined,\n): { foreground: string; background: string; border: string } | null {\n if (!value?.trim()) {\n return null;\n }\n const parts = value.trim().split(/\\s+/);\n if (parts.length !== 3) {\n return null;\n }\n return {\n foreground: parts[0],\n background: parts[1],\n border: parts[2],\n };\n}\n\nexport function isQuestionnaireOutcomeDisplayColorHex(value: string): boolean {\n return value.trim().startsWith('#');\n}\n\n/**\n * Returns true when the evaluated outcome value matches the display rule condition.\n */\nexport function matchesQuestionnaireOutcomeDisplayRule(\n value: unknown,\n rule: Pick<QuestionnaireOutcomeDisplayRule, 'operator' | 'compareValue'>,\n): boolean {\n const right = rule.compareValue;\n switch (rule.operator) {\n case 'eq':\n return value == right;\n case 'neq':\n return value != right;\n case 'gt':\n return Number(value) > Number(right);\n case 'gte':\n return Number(value) >= Number(right);\n case 'lt':\n return Number(value) < Number(right);\n case 'lte':\n return Number(value) <= Number(right);\n default:\n return false;\n }\n}\n\nexport function normalizeQuestionnaireOutcomeDisplayRules(\n rules: QuestionnaireOutcomeDisplayRule[] | null | undefined,\n): QuestionnaireOutcomeDisplayRule[] {\n if (!Array.isArray(rules)) {\n return [];\n }\n const normalized: QuestionnaireOutcomeDisplayRule[] = [];\n for (const [index, rule] of rules.entries()) {\n const operator = normalizeOutcomeDisplayOperator(rule?.operator);\n const compareValue = normalizeOutcomeDisplayCompareValue(rule?.compareValue);\n const color = normalizeOutcomeDisplayColor(rule?.color);\n if (!operator || compareValue === undefined || !color) {\n continue;\n }\n normalized.push({\n id: String(rule?.id ?? '').trim() || `rule-${index + 1}`,\n order: rule?.order ?? index,\n operator,\n compareValue,\n color,\n emphasis: normalizeOutcomeDisplayEmphasis(rule?.emphasis),\n icon: normalizeOutcomeDisplayIcon(rule?.icon),\n });\n }\n return normalized.sort((a, b) => a.order - b.order);\n}\n\n/**\n * Named outcome rule embedded on a questionnaire.\n * Referenced in expressions via outcome.eval('name') and in summary placeholders as {{name}}.\n */\nexport interface QuestionnaireOutcomeItem {\n id: string;\n /** Unique programmatic name within the questionnaire (variable-name style). */\n name: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n resultKind: QuestionnaireOutcomeResultKind;\n /**\n * Use `{{ ... }}` or plain expression body; scope includes `answer.eval`, `outcome.eval`, and `fn.*`.\n */\n expression: string;\n /** Optional ordered display rules applied to the evaluated value in the results step. */\n displayRules?: QuestionnaireOutcomeDisplayRule[];\n}\n\n/** Section grouping outcome rules (same builder pattern as questionnaire questions). */\nexport interface QuestionnaireOutcomeSection {\n /** Unique technical section name. */\n name: string;\n title?: AXPMultiLanguageString;\n description?: AXPMultiLanguageString;\n order: number;\n items: QuestionnaireOutcomeItem[];\n isNewlyAdded?: boolean;\n}\n\n/** Embedded outcome rules on questionnaire. */\nexport interface QuestionnaireOutcomesValue {\n sections: QuestionnaireOutcomeSection[];\n}\n\nexport const DEFAULT_QUESTIONNAIRE_OUTCOMES: QuestionnaireOutcomesValue = { sections: [] };\n\nexport function normalizeQuestionnaireOutcomesValue(\n value: QuestionnaireOutcomesValue | null | undefined,\n): QuestionnaireOutcomesValue {\n const sections = value?.sections;\n if (!Array.isArray(sections)) {\n return { sections: [] };\n }\n return {\n sections: sections.map((section, index) => ({\n ...section,\n name: (section.name ?? '').trim() || `section-${index + 1}`,\n order: section.order ?? index,\n items: Array.isArray(section.items)\n ? section.items.map((item) => ({\n ...item,\n displayRules: normalizeQuestionnaireOutcomeDisplayRules(item.displayRules),\n }))\n : [],\n })),\n };\n}\n\n/** All outcome items across sections (evaluation, automations, duplicate checks). */\nexport function flattenQuestionnaireOutcomeItems(\n value: QuestionnaireOutcomesValue | null | undefined,\n): QuestionnaireOutcomeItem[] {\n return normalizeQuestionnaireOutcomesValue(value).sections.flatMap((section) => section.items);\n}\n\nexport function findDuplicateOutcomeNames(\n value: QuestionnaireOutcomesValue | null | undefined,\n): string[] {\n const seen = new Map<string, number>();\n for (const item of flattenQuestionnaireOutcomeItems(value)) {\n const key = (item.name ?? '').trim();\n if (!key) continue;\n seen.set(key, (seen.get(key) ?? 0) + 1);\n }\n return Array.from(seen.entries())\n .filter(([, count]) => count > 1)\n .map(([name]) => name);\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 /** Named outcome rules evaluated from answers (outcome.eval / summary placeholders). */\n outcomes?: QuestionnaireOutcomesValue;\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 showOutcomeResults: q.post?.showOutcomeResults === 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];\nconst COMPLETION_MODE_VALUES = ['submit-only', 'save-and-continue'] as const;\ntype CompletionModeValue = (typeof COMPLETION_MODE_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 * Coerces stored completion mode (string or SelectBox `{ id }`) to a known value.\n */\nexport function normalizeCompletionMode(value: unknown): CompletionModeValue {\n if (typeof value === 'string' && COMPLETION_MODE_VALUES.includes(value as CompletionModeValue)) {\n return value as CompletionModeValue;\n }\n if (value != null && typeof value === 'object' && 'id' in value && typeof (value as { id: string }).id === 'string') {\n return normalizeCompletionMode((value as { id: string }).id);\n }\n return 'submit-only';\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 completionMode: normalizeCompletionMode(d.completionMode),\n };\n}\n\n//#endregion\n","//#region ---- Pre/Post Content Utilities ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { PrePostContentValue } from '../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireOutcomeDisplayEmphasis } 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 * Resolved display styling for an outcome value row.\n */\nexport interface OutcomeResultDisplay {\n color?: string;\n emphasis: QuestionnaireOutcomeDisplayEmphasis;\n iconClass?: string;\n}\n\n/**\n * One evaluated outcome row for the post-submit results step.\n */\nexport interface OutcomeResultEntry {\n key: string;\n value: unknown;\n label: string;\n display?: OutcomeResultDisplay;\n}\n\n/**\n * Outcome results grouped under a questionnaire outcomes section.\n */\nexport interface OutcomeResultSectionGroup {\n trackKey: string;\n sectionName: string;\n sectionOrder: number;\n sectionTitle: AXPMultiLanguageString;\n sectionDescription?: AXPMultiLanguageString;\n items: OutcomeResultEntry[];\n}\n\n/**\n * Placeholder values for post-questionnaire summary content.\n * Fixed keys plus any {{name}} from questionnaire 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 outcome values (name -> value) for placeholders like {{bmi}}. */\n outcomes?: Record<string, unknown>;\n /** Display label per outcome `name` (title); used in the outcomes list UI. */\n outcomeTitles?: Record<string, string>;\n /** Outcome rows grouped by configured outcomes section (when available). */\n outcomeSections?: OutcomeResultSectionGroup[];\n}\n\n/**\n * Resolve placeholders in summary content.\n * Fixed: {{totalQuestions}}, {{answeredCount}}, {{totalTime}}, {{elapsedSeconds}}.\n * Plus any {{outcomeName}} from values.outcomes.\n */\nexport function resolveSummaryPlaceholders(content: string, values: SummaryPlaceholderValues): string {\n if (!content) return '';\n\n const elapsed = values.totalTimeSeconds;\n const totalTimeStr =\n values.totalTimeFormatted ?? (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\n .replace(/<[^>]+>/g, ' ')\n .replace(/\\s+/g, ' ')\n .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 ---- Answer emptiness ----\n\n/**\n * Returns whether a questionnaire widget answer is considered empty for progress, badges, and validation.\n *\n * **Dates:** `Date` values are `object` with no enumerable own keys; they must not be treated like `{}`.\n * Invalid dates (`NaN` time) are treated as empty.\n */\nexport function isQuestionnaireAnswerValueEmpty(value: unknown): boolean {\n if (value === null || value === undefined || value === '') {\n return true;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (value instanceof Date) {\n return Number.isNaN(value.getTime());\n }\n if (typeof value === 'object') {\n return Object.keys(value as object).length === 0;\n }\n return false;\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { Injectable, inject } from '@angular/core';\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\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 AXMAssessmentManagementQuestionnaireEntityModel,\n QuestionnaireOutcomeItem,\n QuestionnaireOutcomeResultKind,\n QuestionnaireOutcomeSection,\n QuestionnaireOutcomesValue,\n} from '../../entities/questionnaire/questionnaire.types';\nimport {\n flattenQuestionnaireOutcomeItems,\n matchesQuestionnaireOutcomeDisplayRule,\n normalizeQuestionnaireOutcomeDisplayRules,\n normalizeQuestionnaireOutcomesValue,\n} from '../../entities/questionnaire/questionnaire.types';\nimport { RootConfig } from '../../const';\nimport {\n QuestionnaireBuilderItem,\n QuestionnaireBuilderValue,\n getQuestionnaireItemAnswerKey,\n resolveQuestionnaireItemAnswerStorageKey,\n} from '../questionnaire-builder';\nimport { QuestionnaireAssessmentFillContext, QuestionnaireViewerConfig } from './questionnaire-viewer.types';\nimport type { PrePostConfig } from '../../entities/questionnaire/questionnaire.types';\nimport {\n formatElapsedDuration,\n type OutcomeResultDisplay,\n type OutcomeResultSectionGroup,\n type SummaryPlaceholderValues,\n} from './utils/pre-post-content.utils';\nimport { isQuestionnaireAnswerValueEmpty } from './utils/questionnaire-answer.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\n/** Named values produced by questionnaire outcome rules (outcome `name` → evaluated value). */\nexport type QuestionnaireOutcomeValues = 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 embedded outcome rules when inline rules are not provided.\n */\n questionnaireId?: string;\n\n /**\n * Inline outcome rules (e.g. unsaved builder state). Takes precedence over loading from the questionnaire entity.\n */\n outcomeRules?: QuestionnaireOutcomeItem[];\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 /**\n * When provided, called on save-and-continue (draft). Should persist without final validation.\n */\n saveHandler?: (answers: Record<string, any>) => Promise<void>;\n\n /**\n * Assessment case/session ids for fill popup persistence (popup cannot receive function handlers).\n */\n assessmentFillContext?: QuestionnaireAssessmentFillContext;\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 * Draft saved via save-and-continue without final submit.\n */\n saved?: boolean;\n}\n\n//#endregion\n\n//#region ---- Service ----\n\n/**\n * Opens the questionnaire viewer dialog and evaluates questionnaire outcomes 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, {\n questionnaireId: config.questionnaireId,\n outcomeRules: config.outcomeRules,\n }));\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 saveHandler: config.saveHandler,\n assessmentFillContext: config.assessmentFillContext,\n questionnaireId: config.questionnaireId,\n outcomeRules: config.outcomeRules,\n },\n });\n\n return result.data || null;\n }\n\n /**\n * Evaluate all questionnaire outcomes 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 outcomes (`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 outcome rules and returns values plus display titles.\n */\n async evaluateOutcomes(\n answers: Record<string, unknown>,\n options?: {\n questionnaireId?: string;\n outcomeRules?: QuestionnaireOutcomeItem[];\n structure?: QuestionnaireBuilderValue | null;\n },\n ): Promise<{ values: QuestionnaireOutcomeValues; outcomeTitles: Record<string, string> }> {\n const rules = await this.resolveOutcomeRules(options?.questionnaireId, options?.outcomeRules);\n if (!rules.length) return { values: {}, outcomeTitles: {} };\n\n const sorted = this.topologicalSort(rules);\n const outcomes: QuestionnaireOutcomeValues = {};\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, options?.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 outcome results for summary / preview.\n */\n async buildSummaryPlaceholderValues(\n structure: QuestionnaireBuilderValue,\n answers: Record<string, any>,\n options?: { questionnaireId?: string; outcomeRules?: QuestionnaireOutcomeItem[]; 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 let outcomeSections: OutcomeResultSectionGroup[] | undefined;\n if (options?.outcomeRules?.length || options?.questionnaireId) {\n const { values: evaluated, outcomeTitles: titles } = await this.evaluateOutcomes(answers, {\n questionnaireId: options?.questionnaireId,\n outcomeRules: options?.outcomeRules,\n structure,\n });\n if (Object.keys(evaluated).length > 0) {\n outcomes = evaluated;\n outcomeTitles = titles;\n const sections = await this.resolveOutcomeSections(options?.questionnaireId, options?.outcomeRules);\n outcomeSections = this.buildOutcomeResultSections(sections, evaluated, 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 outcomeSections,\n };\n }\n\n /**\n * Builds outcome section rows from stored session values (no expression re-evaluation).\n */\n async buildOutcomeResultsFromStoredValues(\n storedOutcomes: Record<string, unknown>,\n options: { questionnaireId: string },\n ): Promise<Pick<SummaryPlaceholderValues, 'outcomes' | 'outcomeTitles' | 'outcomeSections'>> {\n const keys = Object.keys(storedOutcomes);\n if (!keys.length) {\n return { outcomes: {}, outcomeTitles: {}, outcomeSections: [] };\n }\n\n const rules = await this.resolveOutcomeRules(options.questionnaireId, undefined);\n const outcomeTitles: Record<string, string> = {};\n for (const rule of rules) {\n if (rule.name) {\n outcomeTitles[rule.name] = this.resolveOutcomeDisplayTitle(rule);\n }\n }\n\n const sections = await this.resolveOutcomeSections(options.questionnaireId, undefined);\n const outcomeSections = this.buildOutcomeResultSections(sections, storedOutcomes, outcomeTitles);\n\n return {\n outcomes: storedOutcomes,\n outcomeTitles,\n outcomeSections,\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 (let itemIndex = 0; itemIndex < section.items.length; itemIndex++) {\n const item = section.items[itemIndex];\n total++;\n const key =\n getQuestionnaireItemAnswerKey(item) ||\n resolveQuestionnaireItemAnswerStorageKey(item, itemIndex);\n const value = key ? this.resolveStoredAnswer(answers, key) : null;\n const isEmpty = isQuestionnaireAnswerValueEmpty(value);\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 outcomes (evaluation) ----\n\n private async resolveOutcomeRules(\n questionnaireId?: string,\n inlineRules?: QuestionnaireOutcomeItem[] | null,\n ): Promise<QuestionnaireOutcomeItem[]> {\n if (inlineRules?.length) {\n return inlineRules;\n }\n if (!questionnaireId) {\n return [];\n }\n const questionnaire = await this.loadQuestionnaire(questionnaireId);\n return flattenQuestionnaireOutcomeItems(questionnaire?.outcomes);\n }\n\n private async resolveOutcomeSections(\n questionnaireId?: string,\n inlineRules?: QuestionnaireOutcomeItem[] | null,\n ): Promise<QuestionnaireOutcomeSection[]> {\n if (inlineRules?.length) {\n return [{ name: 'outcomes', order: 0, items: inlineRules }];\n }\n if (!questionnaireId) {\n return [];\n }\n const questionnaire = await this.loadQuestionnaire(questionnaireId);\n return normalizeQuestionnaireOutcomesValue(questionnaire?.outcomes).sections;\n }\n\n private async loadQuestionnaire(\n questionnaireId: string,\n ): Promise<AXMAssessmentManagementQuestionnaireEntityModel | null | undefined> {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionnaire.name)\n .data<string, AXMAssessmentManagementQuestionnaireEntityModel>()\n .byKey(questionnaireId);\n }\n\n private buildOutcomeResultSections(\n sections: QuestionnaireOutcomeSection[],\n values: Record<string, unknown>,\n titles: Record<string, string>,\n ): OutcomeResultSectionGroup[] {\n const sortedSections = sections.slice().sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n const groups: OutcomeResultSectionGroup[] = [];\n\n for (const [index, section] of sortedSections.entries()) {\n const sectionName = (section.name ?? '').trim() || `section-${index + 1}`;\n const sectionOrder = section.order ?? index;\n const items = [];\n for (const item of section.items ?? []) {\n if (!item.name || values[item.name] === undefined) {\n continue;\n }\n const value = values[item.name];\n const display = this.resolveOutcomeDisplay(item, value);\n items.push({\n key: item.name,\n value,\n label: (titles[item.name] ?? '').trim() || this.humanizeOutcomeKey(item.name),\n display,\n });\n }\n if (items.length === 0) {\n continue;\n }\n groups.push({\n trackKey: `${sectionOrder}::${sectionName}`,\n sectionName,\n sectionOrder,\n sectionTitle: section.title ?? { 'en-US': sectionName },\n sectionDescription: section.description,\n items,\n });\n }\n\n return groups;\n }\n\n /**\n * First matching display rule for an evaluated outcome value.\n */\n private resolveOutcomeDisplay(\n rule: QuestionnaireOutcomeItem,\n value: unknown,\n ): OutcomeResultDisplay | undefined {\n const displayRules = normalizeQuestionnaireOutcomeDisplayRules(rule.displayRules);\n if (!displayRules.length) {\n return undefined;\n }\n\n for (const displayRule of displayRules) {\n if (matchesQuestionnaireOutcomeDisplayRule(value, displayRule)) {\n return {\n color: displayRule.color,\n emphasis: displayRule.emphasis ?? 'normal',\n iconClass: typeof displayRule.icon === 'string' ? displayRule.icon : undefined,\n };\n }\n }\n\n return undefined;\n }\n\n /**\n * Display label for an outcome rule: `title` when set, otherwise a humanized `name`.\n */\n private resolveOutcomeDisplayTitle(rule: QuestionnaireOutcomeItem): string {\n const resolved = resolveMultiLanguageString(rule.title, 'en-US').trim();\n if (resolved.length > 0) {\n return resolved;\n }\n const name = rule.name?.trim();\n if (name) return this.humanizeOutcomeKey(name);\n return '';\n }\n\n private humanizeOutcomeKey(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: QuestionnaireOutcomeItem,\n answers: Record<string, unknown>,\n outcomes: QuestionnaireOutcomeValues,\n structure?: QuestionnaireBuilderValue | null,\n ): Promise<unknown> {\n const exprText = this.outcomeExpressionText(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 outcomeExpressionText(rule: QuestionnaireOutcomeItem): string {\n const exp = rule.expression;\n return typeof exp === 'string' ? exp.trim() : '';\n }\n\n private inferResultKind(rule: QuestionnaireOutcomeItem): QuestionnaireOutcomeResultKind {\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: QuestionnaireOutcomeResultKind): 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: QuestionnaireOutcomeValues,\n structure?: QuestionnaireBuilderValue | null,\n value?: unknown,\n ): Promise<unknown> {\n const trimmed = expression?.trim();\n if (!trimmed) return undefined;\n try {\n const scope = this.buildExpressionScope(answers, outcomes, structure, value);\n const wrapped = trimmed.includes('{{') ? trimmed : `{{ ${trimmed} }}`;\n return await this.expressionEvaluator.evaluate(wrapped, scope as AXPExpressionEvaluatorScope);\n } catch (err) {\n console.warn('[QuestionnaireViewer] Outcome 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: QuestionnaireOutcomeValues,\n structure?: QuestionnaireBuilderValue | null,\n value?: unknown,\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 ...(value !== undefined ? { value } : {}),\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: QuestionnaireOutcomeItem[],\n ): QuestionnaireOutcomeItem[] {\n const nameToRule = new Map<string, QuestionnaireOutcomeItem>();\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.outcomeExpressionText(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 QuestionnaireOutcomeItem => !!r);\n }\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPPropertyViewerTab } from '@acorex/platform/layout/components';\nimport {\n AXPWidgetsCatalog,\n createBooleanProperty,\n type AXPWidgetProperty,\n type AXPWidgetPropertyGroup,\n} from '@acorex/platform/layout/widget-core';\n\nimport type { AXMAssessmentQuestionHintConfig } from '../../../../entities/question-bank-item/question-hint.types';\n\n//#endregion\n\n//#region ---- Groups ----\n\nconst GROUP_IDENTITY: AXPWidgetPropertyGroup = {\n name: 'identity',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.identity.title',\n order: 0,\n};\n\nconst GROUP_VALIDATION: AXPWidgetPropertyGroup = {\n name: 'validation',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.validation.title',\n order: 1,\n};\n\nconst GROUP_VISIBILITY: AXPWidgetPropertyGroup = {\n name: 'visibility',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.visibility.title',\n order: 2,\n};\n\nconst GROUP_HINT: AXPWidgetPropertyGroup = {\n name: 'hint',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.hint.title',\n order: 3,\n};\n\nconst GROUP_COMMENT: AXPWidgetPropertyGroup = {\n name: 'comment',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.groups.comment.title',\n order: 4,\n};\n\n//#endregion\n\n//#region ---- Shared options ----\n\nconst HINT_MODE_OPTIONS = [\n {\n id: 'off',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.off',\n },\n {\n id: 'info',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.info',\n },\n {\n id: 'warning',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.warning',\n },\n {\n id: 'danger',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.danger',\n },\n {\n id: 'success',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.success',\n },\n {\n id: 'neutral',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.options.neutral',\n },\n] as const;\n\n//#endregion\n\n//#region ---- Properties by group ----\n\nconst IDENTITY_PROPS: AXPWidgetProperty[] = [\n {\n name: 'name',\n title: '@general:terms.common.name',\n group: GROUP_IDENTITY,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'name',\n path: 'name',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: '@general:terms.common.name',\n },\n },\n },\n visible: true,\n },\n {\n name: 'tags',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.tags.title',\n group: GROUP_IDENTITY,\n order: 20,\n schema: {\n dataType: 'array',\n defaultValue: [],\n interface: {\n name: 'tags',\n path: 'tags',\n type: 'tag-editor',\n options: {\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-builder.fields.tags.placeholder',\n allowDuplicate: false,\n },\n },\n },\n visible: true,\n },\n];\n\nconst VALIDATION_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isRequired',\n path: 'isRequired',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.is-required.title',\n group: GROUP_VALIDATION,\n defaultValue: false,\n }),\n order: 10,\n },\n];\n\nconst VISIBILITY_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'isVisible',\n path: 'isVisible',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.visible.title',\n group: GROUP_VISIBILITY,\n defaultValue: true,\n }),\n order: 10,\n },\n];\n\nconst HINT_PROPS: AXPWidgetProperty[] = [\n {\n name: 'hintMode',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint-mode.title',\n group: GROUP_HINT,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: { id: 'off', title: HINT_MODE_OPTIONS[0].title },\n interface: {\n name: 'hintMode',\n path: 'hint.mode',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [...HINT_MODE_OPTIONS],\n },\n },\n },\n visible: true,\n },\n {\n name: 'hintContent',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.hint.title',\n group: GROUP_HINT,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'hintContent',\n path: 'hint.content',\n type: AXPWidgetsCatalog.richText,\n options: {},\n },\n },\n visible: \"{{ context.eval('hint.mode') && (context.eval('hint.mode').id || context.eval('hint.mode')) != 'off' }}\",\n },\n];\n\nconst COMMENT_PROPS: AXPWidgetProperty[] = [\n {\n ...createBooleanProperty({\n name: 'commentEnabled',\n path: 'comment.enabled',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.comment-enabled.title',\n group: GROUP_COMMENT,\n defaultValue: false,\n }),\n order: 10,\n },\n {\n ...createBooleanProperty({\n name: 'commentRequired',\n path: 'comment.required',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.fields.comment-required.title',\n group: GROUP_COMMENT,\n defaultValue: false,\n visible: \"{{ context.eval('comment.enabled') === true }}\",\n }),\n order: 20,\n },\n];\n\n//#endregion\n\n//#region ---- Hint form context helper ----\n\n/**\n * Builds initial `hint` object for the question property viewer from the effective (merged) hint config.\n */\nexport function createQuestionHintFormContext(hint: AXMAssessmentQuestionHintConfig): {\n content: string;\n mode: { id: string; title: string };\n} {\n let content = '';\n if (hint.mode !== 'off') {\n const hc = hint.content;\n if (typeof hc === 'string') {\n content = hc;\n } else if (hc && typeof hc === 'object') {\n content = Object.values(hc as Record<string, string>)[0] ?? '';\n }\n }\n const modeId = hint.mode;\n const opt = HINT_MODE_OPTIONS.find((o) => o.id === modeId) ?? HINT_MODE_OPTIONS[0];\n return {\n content,\n mode: { id: opt.id, title: opt.title },\n };\n}\n\n//#endregion\n\n//#region ---- Tab definition ----\n\n/**\n * Property viewer tabs for editing a single questionnaire question row (metadata).\n */\nexport const QUESTIONNAIRE_QUESTION_EDIT_TABS: AXPPropertyViewerTab[] = [\n {\n name: 'general',\n title: '@assessment-management:questionnaires.components.questionnaire-builder.tabs.general.title',\n groups: [\n {\n name: GROUP_IDENTITY.name,\n title: GROUP_IDENTITY.title,\n isCollapsed: false,\n props: IDENTITY_PROPS,\n },\n {\n name: GROUP_VALIDATION.name,\n title: GROUP_VALIDATION.title,\n isCollapsed: false,\n props: VALIDATION_PROPS,\n },\n {\n name: GROUP_VISIBILITY.name,\n title: GROUP_VISIBILITY.title,\n isCollapsed: false,\n props: VISIBILITY_PROPS,\n },\n {\n name: GROUP_HINT.name,\n title: GROUP_HINT.title,\n isCollapsed: false,\n props: HINT_PROPS,\n },\n {\n name: GROUP_COMMENT.name,\n title: GROUP_COMMENT.title,\n isCollapsed: false,\n props: COMMENT_PROPS,\n },\n ],\n },\n];\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXDataSource } from '@acorex/cdk/common';\nimport { AXFullScreenDirective } from '@acorex/cdk/full-screen';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { AXPEntity, AXPEntityProperty, AXPEntityTableColumn } from '@acorex/platform/common';\nimport { type AXPCategoryEntity, type AXPExpression, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport {\n AXPCategoryTreeDataSource,\n AXPDataSelectorService,\n AXPPropertyViewerService,\n AXPStandardSectionItemsBuilderComponent,\n type AXPBuilderBadge,\n type AXPBuilderItem,\n type AXPBuilderItemViewModel,\n type AXPBuilderSection,\n type AXPBuilderValue,\n type AXPPropertyViewerResult,\n type AXPStandardSectionItemsBuilderConfig,\n} from '@acorex/platform/layout/components';\nimport { AXPEntityDefinitionRegistryService, AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXPWidgetRegistryService } from '@acorex/platform/layout/widget-core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RootConfig } from '../../../../const';\nimport type { AXMAssessmentManagementQuestionBankItemEntityModel } from '../../../../entities/question-bank-item/question-bank-item.types';\nimport {\n diffQuestionCommentOverride,\n mergeQuestionCommentConfig,\n normalizeQuestionCommentConfig,\n type AXMAssessmentQuestionCommentConfig,\n} from '../../../../entities/question-bank-item/question-comment.types';\nimport {\n diffQuestionHintOverride,\n mergeQuestionHintForViewer,\n normalizeQuestionHintConfig,\n normalizeQuestionHintFromEntityRow,\n normalizeQuestionHintMode,\n parseQuestionHintPartialFromRecord,\n type AXMAssessmentQuestionHintConfig,\n type AXMAssessmentQuestionHintPartial,\n} from '../../../../entities/question-bank-item/question-hint.types';\nimport type { PrePostConfig } from '../../../../entities/questionnaire/questionnaire.types';\nimport { AXMQuestionnaireViewerService } from '../../../questionnaire-viewer/questionnaire-viewer.service';\nimport { stripHtmlToPlain } from '../../../questionnaire-viewer/utils/pre-post-content.utils';\nimport {\n allocateNextQuestionItemName,\n collectQuestionnaireItemNames,\n convertStateToValue,\n convertValueToState,\n createDefaultSection,\n getQuestionnaireItemRequiredBadgeMode,\n getQuestionnaireItemVisibilityBadgeMode,\n QuestionnaireBuilderItem,\n QuestionnaireBuilderSection,\n QuestionnaireBuilderState,\n QuestionnaireBuilderValue,\n QuestionnaireDisplaySettings,\n} from './questionnaire-questions.types';\nimport {\n createQuestionHintFormContext,\n QUESTIONNAIRE_QUESTION_EDIT_TABS,\n} from './questionnaire-question-edit.property-tabs';\n\n//#endregion\n\n//#region ---- Edit question dialog ----\n\ninterface QuestionnaireQuestionHintForm {\n content?: AXPMultiLanguageString;\n mode?: AXMAssessmentQuestionHintConfig['mode'] | string | { id?: string };\n}\n\ninterface QuestionnaireEditQuestionFormContext {\n /** Technical question name (maps to {@link QuestionnaireBuilderItem.name}). */\n name?: string;\n tags?: unknown;\n isRequired?: boolean | string;\n /** Default true when omitted (always visible). */\n isVisible?: boolean | AXPExpression;\n hint?: QuestionnaireQuestionHintForm;\n /** Effective comment policy (merged bank default + item overrides) for editing. */\n comment?: { enabled: boolean; required: boolean };\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Reusable Questionnaire Builder Component\n * Can be used both in dialog and inline contexts\n */\n@Component({\n selector: 'axm-questionnaire-questions-builder',\n templateUrl: './questionnaire-questions-builder.component.html',\n styleUrl: './questionnaire-questions-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n FormsModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXFormModule,\n AXSwitchModule,\n AXLabelModule,\n AXTranslationModule,\n AXPStandardSectionItemsBuilderComponent,\n AXFullScreenDirective,\n ],\n})\nexport class AXMQuestionnaireQuestionsBuilderComponent {\n //#region ---- Services & Dependencies ----\n\n protected dataSelectorService = inject(AXPDataSelectorService);\n private readonly entityService = inject(AXPEntityService);\n protected entityResolver = inject(AXPEntityDefinitionRegistryService);\n protected translationService = inject(AXTranslationService);\n protected propertyViewerService = inject(AXPPropertyViewerService);\n protected questionnaireViewerService = inject(AXMQuestionnaireViewerService);\n protected toastService = inject(AXToastService);\n protected widgetRegistry = inject(AXPWidgetRegistryService);\n private readonly commandService = inject(AXPCommandService);\n\n //#endregion\n\n //#region ---- Question bank entity data ----\n\n private questionBankData() {\n return this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>();\n }\n\n private questionBankCategoryData() {\n return this.entityService\n .withEntity(RootConfig.module.name, `${RootConfig.entities.questionBankItem.name}Category`)\n .data<string, AXPCategoryEntity<string>>();\n }\n\n //#endregion\n\n //#region ---- Inputs & Outputs ----\n\n /**\n * Initial value (QuestionnaireBuilderValue)\n */\n value = input<QuestionnaireBuilderValue | null>(null);\n\n /**\n * Readonly mode\n */\n readonly = input<boolean>(false);\n\n /**\n * Pre/post config for preview (welcome, review, summary).\n * When provided, passed to the preview dialog.\n */\n prePostConfig = input<PrePostConfig | null>(null);\n\n /**\n * When false, the header (Add Section, Settings, Preview, Full Screen) is hidden.\n * Use when actions are provided by the host (e.g. page primary header actions).\n */\n showHeader = input<boolean>(true);\n\n /**\n * Display settings (view mode, progress bar, timer, etc.) when provided by the host (e.g. entity form).\n * Used for preview. When not provided, falls back to state/value or defaults.\n */\n displaySettingsInput = input<QuestionnaireDisplaySettings | null>(null);\n\n /**\n * Persisted questionnaire id (e.g. from entity form) — enables questionnaire outcomes in preview.\n */\n questionnaireEntityId = input<string | undefined>(undefined);\n\n /**\n * Value change event\n */\n valueChange = output<QuestionnaireBuilderValue>();\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n // Designer state management - always start with at least one default section\n protected builderState = signal<QuestionnaireBuilderState>({\n sections: [createDefaultSection()],\n });\n\n // Selected item tracking\n protected selectedItemName = signal<string | null>(null);\n protected selectedSectionName = signal<string | null>(null);\n\n // Fullscreen directive reference\n protected readonly fullscreenDirective = viewChild<AXFullScreenDirective>('fullscreen');\n\n protected readonly standardRef = viewChild(AXPStandardSectionItemsBuilderComponent);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n // Track last emitted value to prevent circular updates\n let lastEmittedValue: QuestionnaireBuilderValue | null = null;\n\n // Sync value input to state (only when value changes externally)\n effect(() => {\n const val = this.value();\n if (val !== null && val !== undefined) {\n const currentState = untracked(() => this.builderState());\n const currentValue = convertStateToValue(currentState);\n\n const valStr = JSON.stringify(val);\n const currentStr = JSON.stringify(currentValue);\n const lastEmittedStr = lastEmittedValue ? JSON.stringify(lastEmittedValue) : null;\n\n if (valStr !== currentStr && valStr !== lastEmittedStr) {\n const newState = convertValueToState(val);\n untracked(() => {\n this.builderState.set(newState);\n this.loadQuestionDetailsForState(newState);\n });\n }\n } else if (val === null || val === undefined) {\n // If value is null/undefined, ensure we have at least one default section\n const currentState = untracked(() => this.builderState());\n if (currentState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n untracked(() => {\n this.builderState.set({ sections: [defaultSection] });\n });\n }\n }\n });\n\n // Sync state changes to output\n effect(() => {\n const state = this.builderState();\n const currentValue = this.value();\n const value = convertStateToValue(state, currentValue || undefined);\n\n untracked(() => {\n lastEmittedValue = value;\n this.valueChange.emit(value);\n });\n });\n }\n\n /**\n * Load question details for all items in the state\n */\n private async loadQuestionDetailsForState(state: QuestionnaireBuilderState): Promise<void> {\n const questionIds = new Set<string>();\n\n // Collect all question bank item IDs\n state.sections.forEach((section) => {\n section.items.forEach((item) => {\n if (item.questionBankItemId && !item.question) {\n questionIds.add(item.questionBankItemId);\n }\n });\n });\n\n if (questionIds.size === 0) return;\n\n // Load all questions in parallel\n const questionPromises = Array.from(questionIds).map((id) =>\n this.questionBankData()\n .byKey(id)\n .catch(() => null),\n );\n const questions = await Promise.all(questionPromises);\n\n // Create a map of question ID to question data\n const questionMap = new Map<string, any>();\n questions.forEach((q) => {\n if (q) {\n questionMap.set(q.id, q);\n }\n });\n\n // Update state with question details\n this.builderState.update((currentState) => ({\n ...currentState,\n sections: currentState.sections.map((section) => ({\n ...section,\n items: section.items.map((item) => {\n if (item.question) return item; // Already has question data\n\n const questionData = questionMap.get(item.questionBankItemId);\n if (questionData) {\n return {\n ...item,\n question: {\n id: questionData.id,\n title: questionData.title,\n question: questionData.question,\n note: questionData.note,\n difficulty: questionData.difficulty,\n interface: questionData.interface,\n },\n };\n }\n\n return item;\n }),\n })),\n }));\n }\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /** Value for {@link AXPStandardSectionItemsBuilderComponent} (sections only; drag/reorder handled there). */\n protected builderValue = computed<AXPBuilderValue>(() => ({\n sections: this.builderState().sections.map(\n (s) =>\n ({\n id: s.name,\n name: s.name,\n order: s.order,\n title: s.title,\n description: s.description,\n tags: s.tags,\n isVisible: s.isVisible,\n items: s.items.map(\n (it) =>\n ({\n id: it.name,\n name: it.name,\n order: it.order,\n questionBankItemId: it.questionBankItemId,\n isRequired: it.isRequired,\n isVisible: it.isVisible,\n interfaceOverride: it.interfaceOverride,\n hint: it.hint,\n comment: it.comment,\n tags: it.tags,\n question: it.question,\n isNewlyAdded: it.isNewlyAdded,\n }) as AXPBuilderItem,\n ),\n }) as AXPBuilderSection,\n ),\n }));\n\n protected isPreviewDisabled = computed(\n () => this.builderState().sections.length === 0 || this.builderState().sections.every((s) => s.items.length === 0),\n );\n\n protected readonly standardConfig = computed<AXPStandardSectionItemsBuilderConfig>(() => ({\n showSectionTechnicalName: true,\n minSectionCount: 1,\n texts: {\n addSection: '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title',\n addItem: '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-question.title',\n emptySectionsTitle:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.no-sections.title',\n emptySectionsDescription:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.no-sections.description',\n emptyItemsTitle:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.title',\n emptyItemsDescription:\n '@assessment-management:questionnaires.components.questionnaire-builder.empty-states.empty-section.description',\n defaultSectionBadge:\n '@assessment-management:questionnaires.components.questionnaire-builder.default-section-badge',\n },\n mapItemToView: (item, section) => this.mapQuestionnaireItemToView(item, section),\n promptAddItems: (sid, v) => this.questionnairePromptAddItems(sid, v),\n promptEditItem: (item, sid, v) => this.questionnairePromptEditItem(item, sid, v),\n }));\n\n private mapQuestionnaireItemToView(item: AXPBuilderItem, _section: AXPBuilderSection): AXPBuilderItemViewModel {\n const q = item as unknown as QuestionnaireBuilderItem;\n const title = this.itemQuestionHeading(q);\n const note = this.itemQuestionNotePreview(q);\n const badges: AXPBuilderBadge[] = [];\n const req = q.isRequired;\n const rawReq = typeof req === 'boolean' || typeof req === 'string' ? req : undefined;\n const requiredMode = getQuestionnaireItemRequiredBadgeMode(rawReq);\n if (requiredMode === 'required') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.required',\n variant: 'danger',\n });\n } else if (requiredMode === 'conditional') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.conditional-required',\n variant: 'warning',\n });\n } else {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.optional',\n variant: 'success',\n });\n }\n\n const rawVis = q.isVisible;\n const visibilityMode = getQuestionnaireItemVisibilityBadgeMode(\n typeof rawVis === 'boolean' || typeof rawVis === 'string' ? rawVis : undefined,\n );\n if (visibilityMode === 'hidden') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-hidden',\n variant: 'danger',\n });\n } else if (visibilityMode === 'conditional') {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-conditional',\n variant: 'warning',\n });\n } else {\n badges.push({\n text: '@assessment-management:questionnaires.components.questionnaire-builder.item-badge.visibility-visible',\n variant: 'success',\n });\n }\n\n return {\n icon: this.getQuestionWidgetIcon(q),\n title,\n name: q.name,\n description: note || undefined,\n badges,\n };\n }\n\n /**\n * Standard section-items builder emits here. Uses direct `builderState.update` so the `valueChange`\n * effect runs in the same turn and hosts (e.g. questions page) can mark dirty.\n */\n protected onBuilderValueChange(next: AXPBuilderValue): void {\n this.builderState.update((state) => {\n const updatedState: QuestionnaireBuilderState = {\n ...state,\n sections: this.mergeSectionsFromStandardBuilder(\n next.sections as unknown as QuestionnaireBuilderSection[],\n state.sections,\n ),\n };\n if (updatedState.sections.length === 0) {\n const defaultSection = createDefaultSection();\n defaultSection.order = 0;\n return { ...updatedState, sections: [defaultSection] };\n }\n return updatedState;\n });\n }\n\n private mergeSectionsFromStandardBuilder(\n incoming: QuestionnaireBuilderSection[],\n previous: QuestionnaireBuilderSection[],\n ): QuestionnaireBuilderSection[] {\n const prevByName = new Map(previous.map((s) => [s.name, s]));\n return incoming.map((sec) => {\n const axSec = sec as unknown as AXPBuilderSection;\n const incomingName = String(axSec['name'] ?? axSec['id'] ?? '').trim();\n const prevSec = prevByName.get(incomingName);\n if (!prevSec) {\n return this.normalizeIncomingSection(sec);\n }\n const prevItemByName = new Map(prevSec.items.map((i) => [i.name, i]));\n const merged = this.normalizeIncomingSection(sec);\n return {\n ...merged,\n isNewlyAdded: prevSec.isNewlyAdded ?? merged.isNewlyAdded,\n items: merged.items.map((it) => {\n const prev = prevItemByName.get(it.name);\n if (!prev) {\n return it;\n }\n return {\n ...prev,\n ...it,\n question: it.question ?? prev.question,\n };\n }),\n };\n });\n }\n\n /** Map platform section rows (id + name) into domain sections (name only). */\n private normalizeIncomingSection(sec: QuestionnaireBuilderSection): QuestionnaireBuilderSection {\n const ax = sec as unknown as AXPBuilderSection;\n const name = String(ax['name'] ?? ax['id'] ?? '').trim() || `section-${Date.now()}`;\n return {\n name,\n title: sec.title,\n description: sec.description,\n order: sec.order,\n tags: sec.tags,\n isVisible: sec.isVisible,\n isNewlyAdded: sec.isNewlyAdded,\n items: sec.items.map((it) => this.normalizeIncomingItem(it as unknown as AXPBuilderItem)),\n };\n }\n\n private normalizeIncomingItem(it: AXPBuilderItem): QuestionnaireBuilderItem {\n const name = String(it['name'] ?? it['id'] ?? '').trim() || `item-${Date.now()}`;\n const qbi = (it as unknown as QuestionnaireBuilderItem).questionBankItemId;\n return {\n name,\n questionBankItemId: qbi,\n order: it.order,\n isRequired: (it as unknown as QuestionnaireBuilderItem).isRequired,\n isVisible: (it as unknown as QuestionnaireBuilderItem).isVisible,\n interfaceOverride: (it as unknown as QuestionnaireBuilderItem).interfaceOverride,\n hint: (it as unknown as QuestionnaireBuilderItem).hint,\n comment: (it as unknown as QuestionnaireBuilderItem).comment,\n tags: (it as unknown as QuestionnaireBuilderItem).tags,\n question: (it as unknown as QuestionnaireBuilderItem).question,\n isNewlyAdded: (it as unknown as QuestionnaireBuilderItem).isNewlyAdded,\n };\n }\n\n /** Edit dialog context: default visible; normalize legacy string booleans; expressions pass through (property viewer handles binding). */\n private questionEditFormIsVisible(raw: boolean | string | undefined): boolean | string {\n if (raw === undefined || raw === null) {\n return true;\n }\n if (typeof raw === 'boolean') {\n return raw;\n }\n if (raw.trim() === '') {\n return true;\n }\n const t = raw.trim().toLowerCase();\n if (t === 'true' || t === '1') {\n return true;\n }\n if (t === 'false' || t === '0') {\n return false;\n }\n return raw.trim();\n }\n\n private questionEditFormIsRequired(item: Pick<QuestionnaireBuilderItem, 'isRequired'>): boolean | string {\n const r = item.isRequired;\n if (typeof r === 'string') {\n const t = r.trim();\n if (!t) {\n return false;\n }\n const tl = t.toLowerCase();\n if (tl === 'true' || tl === '1') {\n return true;\n }\n if (tl === 'false' || tl === '0') {\n return false;\n }\n return t;\n }\n return r ?? false;\n }\n\n /** Persist from property viewer: omit when default visible; `false` when hidden; trimmed non-empty string = expression. */\n private persistQuestionIsVisibleFromForm(value: unknown): boolean | string | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value === 'boolean') {\n return value ? undefined : false;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n return t || undefined;\n }\n return undefined;\n }\n\n private persistQuestionIsRequiredFromForm(value: unknown): boolean | string {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const t = value.trim();\n if (!t) {\n return false;\n }\n return t;\n }\n return false;\n }\n\n private async questionnairePromptEditItem(\n item: AXPBuilderItem,\n sectionId: string,\n _value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null> {\n const qItem = item as unknown as QuestionnaireBuilderItem;\n const validationFailed = async (\n titleKey: string,\n descKey: string,\n fallTitle: string,\n fallDesc: string,\n ): Promise<never> => {\n const title = (await this.translationService.translateAsync(titleKey)) || fallTitle;\n const content = (await this.translationService.translateAsync(descKey)) || fallDesc;\n this.toastService.show({ color: 'warning', title, content });\n throw new Error('QuestionnaireEditQuestionValidation');\n };\n\n try {\n const bankRow = qItem.questionBankItemId\n ? await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.questionBankItem.name)\n .data<string, AXMAssessmentManagementQuestionBankItemEntityModel>()\n .byKey(qItem.questionBankItemId)\n .catch(() => null)\n : null;\n const bankComment = normalizeQuestionCommentConfig(bankRow?.comment);\n const mergedCommentForForm = mergeQuestionCommentConfig(bankComment, qItem.comment);\n const bankHint = normalizeQuestionHintFromEntityRow(bankRow ?? {});\n const mergedHintForForm = mergeQuestionHintForViewer(\n bankHint,\n parseQuestionHintPartialFromRecord(qItem as unknown as Record<string, unknown>),\n );\n\n const result = await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.edit-question.title',\n )\n .setSize('md')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(QUESTIONNAIRE_QUESTION_EDIT_TABS)\n .setContext({\n name: qItem.name,\n tags: qItem.tags ?? [],\n isRequired: this.questionEditFormIsRequired(qItem),\n isVisible: this.questionEditFormIsVisible(qItem.isVisible),\n hint: createQuestionHintFormContext(mergedHintForForm),\n comment: mergedCommentForForm,\n })\n .onAction(async (ref) => {\n const context = ref.context() as QuestionnaireEditQuestionFormContext;\n const rawId = String(context.name ?? '').trim();\n if (!rawId) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-required.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-required.description',\n 'Question ID required',\n 'Enter a unique question ID.',\n );\n }\n if (!this.isValidQuestionnaireItemName(rawId)) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-invalid.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-invalid.description',\n 'Invalid question ID',\n 'Use letters, numbers, underscores, and hyphens (1–128 characters).',\n );\n }\n const isDuplicate = this.builderState().sections.some((s) =>\n s.items.some((i) => (s.name !== sectionId || i.name !== qItem.name) && i.name === rawId),\n );\n if (isDuplicate) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-duplicate.title',\n '@assessment-management:questionnaires.components.questionnaire-builder.validation.question-id-duplicate.description',\n 'Duplicate question ID',\n 'Another question already uses this ID.',\n );\n }\n });\n })\n .show();\n\n if (!result) {\n return null;\n }\n\n const formData = (result as AXPPropertyViewerResult).values as QuestionnaireEditQuestionFormContext;\n const rawIdOut = String(formData.name ?? '').trim();\n const tags = this.normalizeTagsFromForm(formData.tags);\n const hintPersist = this.persistQuestionHintFromForm(bankHint, formData.hint);\n const commentPersist = this.persistQuestionCommentFromForm(bankComment, formData.comment);\n const nextItem = {\n ...qItem,\n name: rawIdOut,\n id: rawIdOut,\n tags,\n isRequired: this.persistQuestionIsRequiredFromForm(formData.isRequired),\n isVisible: this.persistQuestionIsVisibleFromForm(formData.isVisible),\n } as QuestionnaireBuilderItem & AXPBuilderItem;\n if (hintPersist != null) {\n nextItem.hint = hintPersist;\n } else {\n delete nextItem.hint;\n }\n if (commentPersist != null) {\n nextItem.comment = commentPersist;\n } else {\n delete nextItem.comment;\n }\n return nextItem as AXPBuilderItem;\n } catch (error) {\n if (error instanceof Error && error.message === 'QuestionnaireEditQuestionValidation') {\n return null;\n }\n console.error('Error editing question:', error);\n return null;\n }\n }\n\n /**\n * Get current display settings from state or default\n */\n protected displaySettings = computed<QuestionnaireDisplaySettings>(() => {\n const fromInput = this.displaySettingsInput();\n if (fromInput != null) {\n return fromInput;\n }\n const state = this.builderState();\n if (state.displaySettings) {\n return state.displaySettings;\n }\n const currentValue = convertStateToValue(state, this.value() || undefined);\n return (\n currentValue.displaySettings || {\n viewMode: 'single-page' as const,\n showProgressBar: true,\n showTimer: false,\n showQuestionNumbers: true,\n }\n );\n });\n\n //#endregion\n\n //#region ---- Section Management ----\n\n /** Toolbar / page command: delegates to {@link AXPStandardSectionItemsBuilderComponent#addSection}. */\n async addSection(): Promise<void> {\n await this.standardRef()?.addSection();\n }\n\n //#endregion\n\n //#region ---- Item Management ----\n\n private async questionnairePromptAddItems(\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem[] | null> {\n const all = value.sections as unknown as QuestionnaireBuilderSection[];\n const section = all.find((x) => x.name === sectionId);\n if (!section) return null;\n return (await this.selectQuestionsFromQuestionBankForSection(section, all)) as AXPBuilderItem[] | null;\n }\n\n /**\n * Open question bank selector and return new items (standard builder appends them).\n */\n private async selectQuestionsFromQuestionBankForSection(\n section: QuestionnaireBuilderSection,\n allSections: QuestionnaireBuilderSection[],\n ): Promise<QuestionnaireBuilderItem[] | null> {\n try {\n const dataSource = new AXDataSource({\n key: 'id',\n pageSize: 20,\n load: async (e) => {\n const questions = await this.questionBankData().query(e);\n return {\n items: questions.items,\n total: questions.total,\n };\n },\n });\n\n // Create category tree data source for filtering\n const categoryTreeDataSource: AXPCategoryTreeDataSource = {\n loadRootNodes: async () => {\n const result = await this.questionBankCategoryData().query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'isEmpty' },\n value: true,\n },\n });\n\n return result.items.map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n loadChildNodes: async (parentId: string) => {\n const result = await this.questionBankCategoryData().query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: { type: 'equal' },\n value: parentId,\n },\n });\n\n return result.items.map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n searchNodes: async (searchValue: string) => {\n const result = await this.questionBankCategoryData().query({\n skip: 0,\n take: 1000,\n filter: {\n filters: [\n {\n field: 'title',\n operator: { type: 'contains' },\n value: searchValue,\n },\n {\n field: 'name',\n operator: { type: 'contains' },\n value: searchValue,\n },\n ],\n logic: 'or',\n },\n });\n\n return result.items.map((item: any) => ({\n id: item.id,\n title: item.title || item.name,\n description: item.description || '',\n parentId: item.parentId,\n childrenCount: item.childrenCount || 0,\n }));\n },\n };\n\n const entity: AXPEntity | null = await this.entityResolver.resolve(\n RootConfig.module.name,\n RootConfig.entities.questionBankItem.name,\n );\n if (!entity) {\n throw new Error('Entity not found: ' + RootConfig.entities.questionBankItem.name);\n }\n\n const columns =\n entity.columns\n ?.filter((column: AXPEntityTableColumn) =>\n entity!.properties.some((property: AXPEntityProperty) => property.name === column.name),\n )\n .map((column: AXPEntityTableColumn) => {\n const property = entity!.properties.find((prop: AXPEntityProperty) => prop.name === column.name);\n return {\n name: column.name,\n title: property?.title ?? '',\n visible: column.options?.visible !== false,\n widget: {\n type: column.showAs?.type ?? property?.schema?.interface?.type ?? 'text-editor',\n options: column.showAs?.options ?? property?.schema?.interface?.options ?? {},\n },\n };\n }) || [];\n\n // Translate titles\n const selectQuestionsTitle =\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.select-questions',\n )) || 'Select Questions from Question Bank';\n\n const categoriesTitle =\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.categories',\n )) || 'Categories';\n\n const titleLabel = (await this.translationService.translateAsync('@general:terms.common.title')) || 'Title';\n const noteLabel =\n (await this.translationService.translateAsync(\n '@assessment-management:question-bank.entities.question-bank-item.fields.note.title',\n )) || 'Note';\n\n // Open data selector with category filter\n const result = await this.dataSelectorService.openWithCategoryFilter(\n {\n title: selectQuestionsTitle,\n dataSource: dataSource,\n columns: columns,\n selectionMode: 'multiple',\n searchFields: [\n { name: 'title', title: titleLabel },\n { name: 'note', title: noteLabel },\n ],\n allowCreate: 'full',\n onCreate: (mode) => this.createQuestionBankItem(entity, mode),\n },\n {\n title: categoriesTitle,\n dataSource: categoryTreeDataSource,\n filterField: 'categoryIds',\n filterOperator: 'contains',\n width: '350px',\n },\n );\n\n if (result?.items && result.items.length > 0) {\n const questionPromises = result.items.map((item: any) =>\n this.questionBankData()\n .byKey(item.id)\n .catch(() => null),\n );\n const questions = await Promise.all(questionPromises);\n\n const used = collectQuestionnaireItemNames(allSections);\n const baseOrder = section.items.length;\n const newItems: QuestionnaireBuilderItem[] = result.items.map((item: any, index: number) => {\n const fullQuestion = questions[index];\n const qName = allocateNextQuestionItemName(used);\n used.add(qName);\n return {\n name: qName,\n questionBankItemId: item.id,\n order: baseOrder + index,\n isRequired: false,\n isVisible: undefined,\n isNewlyAdded: true,\n question: fullQuestion\n ? {\n id: fullQuestion.id,\n title: fullQuestion.title,\n question: fullQuestion.question,\n note: fullQuestion.note,\n difficulty: fullQuestion.difficulty,\n }\n : {\n id: item.id,\n title: item.title || 'Question',\n question: item.question,\n note: item.note,\n difficulty: item.difficulty,\n },\n };\n });\n return newItems;\n }\n return null;\n } catch (error) {\n console.error('Error loading questions:', error);\n return null;\n }\n }\n\n /**\n * Create a new question bank item via Entity:Create and return it for selection in the data selector.\n */\n private async createQuestionBankItem(\n entity: AXPEntity,\n _mode: 'full' | 'quick',\n ): Promise<Record<string, unknown> | null> {\n const result = await this.commandService.execute('Entity:Create', {\n __context__: {\n entity: `${entity.module}.${entity.name}`,\n entityInfo: {\n name: entity.name,\n module: entity.module,\n title: entity.title,\n parentKey: entity.parentKey,\n },\n data: {},\n options: {},\n },\n });\n\n if (result?.success && result?.data) {\n const item = Array.isArray(result.data) ? result.data[0] : result.data;\n return item as Record<string, unknown>;\n }\n return null;\n }\n\n /**\n * Maps nested `hint` from the question property viewer to persisted questionnaire item `hint` partial (diff from bank).\n */\n private persistQuestionHintFromForm(\n bank: AXMAssessmentQuestionHintConfig,\n hint: QuestionnaireEditQuestionFormContext['hint'],\n ): AXMAssessmentQuestionHintPartial | undefined {\n if (!hint) {\n return undefined;\n }\n const modeRaw =\n hint.mode == null ? undefined : typeof hint.mode === 'string' ? hint.mode : (hint.mode as { id?: string }).id;\n const mode = normalizeQuestionHintMode(modeRaw) ?? 'off';\n const c = hint.content;\n let content: AXPMultiLanguageString | undefined;\n if (c == null) {\n content = undefined;\n } else if (typeof c === 'string') {\n const t = c.trim();\n content = t || undefined;\n } else if (typeof c === 'object') {\n content = c as AXPMultiLanguageString;\n }\n const edited = normalizeQuestionHintConfig({ mode, content });\n return diffQuestionHintOverride(bank, edited);\n }\n\n /**\n * Persists questionnaire item `comment` override: only fields that differ from the question bank default.\n */\n private persistQuestionCommentFromForm(\n bank: AXMAssessmentQuestionCommentConfig,\n form: QuestionnaireEditQuestionFormContext['comment'],\n ): Partial<AXMAssessmentQuestionCommentConfig> | undefined {\n if (!form) {\n return undefined;\n }\n const edited = normalizeQuestionCommentConfig(form);\n return diffQuestionCommentOverride(bank, edited);\n }\n\n /**\n * Normalize tag-editor output to trimmed unique strings (supports string[] or { title }[] from tag service).\n */\n private normalizeTagsFromForm(raw: unknown): string[] | undefined {\n if (raw == null || !Array.isArray(raw)) return undefined;\n const seen = new Set<string>();\n const out: string[] = [];\n for (const entry of raw) {\n let t = '';\n if (typeof entry === 'string') t = entry.trim();\n else if (entry && typeof entry === 'object' && 'title' in entry) {\n t = String((entry as { title: string }).title).trim();\n }\n if (!t) continue;\n const key = t.toLowerCase();\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(t);\n }\n return out.length ? out : undefined;\n }\n\n /** Allowed characters for questionnaire item technical name (UUID-safe). */\n private isValidQuestionnaireItemName(name: string): boolean {\n return name.length >= 1 && name.length <= 128 && /^[a-zA-Z0-9_-]+$/.test(name);\n }\n\n /**\n * Plain heading for builder cards: prefer rich `question`, else admin list `title`.\n */\n protected itemQuestionHeading(item: QuestionnaireBuilderItem): string {\n const q = item.question;\n if (!q) {\n return 'Question';\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const raw = q.question;\n if (raw != null && raw !== '') {\n const html = typeof raw === 'string' ? raw : resolveMultiLanguageString(raw as Record<string, string>, locale);\n const plain = stripHtmlToPlain(html);\n if (plain.trim()) {\n return plain;\n }\n }\n const titleResolved = resolveMultiLanguageString(q.title, locale);\n return titleResolved.trim() || 'Question';\n }\n\n /** Plain preview line for optional note under the heading. */\n protected itemQuestionNotePreview(item: QuestionnaireBuilderItem): string {\n const raw = item.question?.note;\n if (raw == null || raw === '') {\n return '';\n }\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n const html = typeof raw === 'string' ? raw : resolveMultiLanguageString(raw as Record<string, string>, locale);\n return stripHtmlToPlain(html);\n }\n\n /**\n * Resolve icon based on widget type, with safe fallback.\n */\n protected getQuestionWidgetIcon(item: QuestionnaireBuilderItem): string {\n const fallbackIcon = 'fa-light fa-question-circle';\n const widgetType = item.interfaceOverride?.type ?? item.question?.interface?.type;\n\n if (!widgetType) {\n return fallbackIcon;\n }\n\n try {\n return this.widgetRegistry.resolve(widgetType).icon ?? fallbackIcon;\n } catch {\n return fallbackIcon;\n }\n }\n\n //#endregion\n\n //#region ---- Preview ----\n\n /**\n * Open preview dialog with questionnaire viewer\n */\n async handlePreview(): Promise<void> {\n if (this.isPreviewDisabled()) {\n return;\n }\n\n try {\n const currentValue = convertStateToValue(this.builderState(), this.value() || undefined);\n // Always use the current displaySettings from the computed property to ensure preview uses latest settings\n currentValue.displaySettings = this.displaySettings();\n const previewTitle =\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title',\n )) || 'Preview';\n\n const result = await this.questionnaireViewerService.open({\n title: previewTitle,\n structure: currentValue,\n prePostConfig: this.prePostConfig() ?? undefined,\n questionnaireId: this.questionnaireEntityId(),\n });\n\n // Handle result if needed (answers, submitted status)\n if (result) {\n console.log('Questionnaire preview result:', result);\n }\n } catch (error) {\n console.error('Error opening preview:', error);\n }\n }\n\n /**\n * Toggle fullscreen mode using the directive\n */\n async handleFullscreen(): Promise<void> {\n const fullscreen = this.fullscreenDirective();\n if (fullscreen) {\n await fullscreen.toggle();\n }\n }\n\n //#endregion\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-questionnaire-questions-builder\" axFullscreen #fullscreen=\"axFullscreen\">\n @if (showHeader()) {\n <div class=\"__header\">\n <div class=\"__header-left\"></div>\n <div class=\"__header-right\">\n @if (!readonly()) {\n <ax-button class=\"ax-sm\" [text]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title'\n | translate\n | async) || 'Add Section'\n \" [color]=\"'primary'\" (onClick)=\"addSection()\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button class=\"ax-sm\" [title]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title'\n | translate\n | async) || 'Preview'\n \" [disabled]=\"isPreviewDisabled()\" (onClick)=\"handlePreview()\">\n <ax-icon icon=\"fa-light fa-eye\"></ax-icon>\n </ax-button>\n }\n <ax-button class=\"ax-sm\" [title]=\"\n ('@assessment-management:questionnaires.components.questionnaire-builder.actions.fullscreen.title'\n | translate\n | async) || 'Full Screen'\n \" (onClick)=\"handleFullscreen()\">\n <ax-icon icon=\"fa-light fa-expand\"></ax-icon>\n </ax-button>\n </div>\n </div>\n }\n\n <axp-standard-section-items-builder #standardRef class=\"ax-block ax-min-h-[200px]\" [value]=\"builderValue()\"\n [config]=\"standardConfig()\" [readonly]=\"readonly()\" (valueChange)=\"onBuilderValueChange($event)\" />\n</div>","/** Component key for the questionnaire Questions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY = 'questionnaire-questions-page';\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../../../const';\nimport type { QuestionnaireBuilderValue } from '../../builder/questionnaire-questions.types';\n\nexport const QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND = 'Questionnaire:Questions:Save';\n\nexport interface SaveQuestionnaireQuestionsInput {\n id: string;\n questions: QuestionnaireBuilderValue;\n __context__?: Record<string, unknown>;\n}\n\n/**\n * Command to save the questionnaire questions field.\n * By default uses entity update (patch) with { questions }.\n * Can be overridden for custom API logic.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMSaveQuestionnaireQuestionsCommand implements AXPCommand<SaveQuestionnaireQuestionsInput, unknown> {\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(input: SaveQuestionnaireQuestionsInput): Promise<AXPExecuteCommandResult<unknown>> {\n const { id, questions } = input;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const entityRef = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n const dataAccessor = this.entityService.withEntity(entityRef).data<any, any>();\n\n await dataAccessor.update(id, { questions });\n\n return {\n success: true,\n data: { id, questions },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n","import {\n AXPActionMenuItem,\n AXPBroadcastEventService,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n} from '@acorex/platform/core';\nimport { AXPEntityEventsKeys } from '@acorex/platform/layout/entity';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n} from '@acorex/platform/layout/views';\nimport type { AXPLayoutDetailsViewAction } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RootConfig } from '../../../../../const';\nimport type { PrePostConfig } from '../../../../../entities/questionnaire/questionnaire.types';\nimport { toDisplaySettings, toPrePostConfig } from '../../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireBuilderValue } from '../../builder/questionnaire-questions.types';\nimport { AXMQuestionnaireQuestionsBuilderComponent } from '../../builder/questionnaire-questions-builder.component';\nimport {\n QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n SaveQuestionnaireQuestionsInput,\n} from './save-questionnaire-questions.command';\nimport { cloneDeep, isEqual, isNil } from 'lodash-es';\n\n/** Local command handled in execute(); reverts questions to rootContext (no AXPCommand). */\nconst QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND = 'Questionnaire:Questions:Discard';\nconst QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND = 'Questionnaire:Questions:AddSection';\nconst QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND = 'Questionnaire:Questions:Preview';\n\n//#region ---- Questionnaire Questions Page Component ----\n\n/**\n * Page component that renders the questions property using axm-questionnaire-questions-builder.\n * Extends AXPPageLayoutBaseComponent to provide a Save button that persists questions via Questionnaire:Questions:Save.\n * Receives rootContext (entity data).\n */\n@Component({\n selector: 'axm-questionnaire-questions-page',\n standalone: true,\n imports: [AXMQuestionnaireQuestionsBuilderComponent],\n template: `\n <axm-questionnaire-questions-builder\n #builderRef\n [value]=\"questionsValue()\"\n [prePostConfig]=\"prePostConfig()\"\n [displaySettingsInput]=\"entityDisplaySettings()\"\n [questionnaireEntityId]=\"questionnaireEntityId()\"\n [showHeader]=\"false\"\n (valueChange)=\"onQuestionsChange($event)\">\n </axm-questionnaire-questions-builder>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMQuestionnaireQuestionsPageComponent,\n },\n ],\n})\nexport class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input<Record<string, unknown>>();\n /** Optional page config (e.g. field, layout) set by the page-component-renderer. */\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private commandService = inject(AXPCommandService);\n private eventService = inject(AXPBroadcastEventService);\n private hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n //#endregion\n\n //#region ---- View References ----\n\n builderRef = viewChild<AXMQuestionnaireQuestionsBuilderComponent>('builderRef');\n\n //#endregion\n\n //#region ---- State Signals ----\n\n /** Latest context (includes edited questions). Used for Save when rootContext is not updated by the parent. */\n private localContext = signal<Record<string, unknown> | null>(null);\n\n /** When true, the next valueChange from the builder is ignored (avoids undoing discard due to stale emit). */\n private ignoreNextValueChange = signal(false);\n\n /** Stable pre/post config so we don't pass a new object every CD (avoids infinite loop). */\n private prePostConfigStable = signal<PrePostConfig | null>(null);\n /** Baseline snapshot of questions for dirty checks. */\n private baselineQuestions = signal<QuestionnaireBuilderValue | null | undefined>(null);\n /**\n * When true, the next builder emission should realign the baseline to the builder's canonical shape.\n * Root/API `questions` often differs from the normalized object emitted by the builder (defaults, ordering, derived fields), which would otherwise keep `isDirty` true on load and after discard/save.\n */\n private questionsBaselinePendingReconcile = signal(false);\n protected isDirty = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n let previousRootId: unknown = undefined;\n effect(\n () => {\n const ctx = this.rootContext();\n const currentId = ctx != null && typeof ctx === 'object' ? ctx['id'] : undefined;\n if (currentId !== previousRootId) {\n previousRootId = currentId;\n this.localContext.set(null);\n const rootQuestions = ctx?.['questions'] as QuestionnaireBuilderValue | null | undefined;\n this.baselineQuestions.set(this.cloneQuestions(rootQuestions));\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n }\n }\n );\n let lastPrePostKey = '';\n effect(\n () => {\n const ctx = this.rootContext();\n const next = toPrePostConfig(ctx ?? undefined);\n const key = next ? JSON.stringify(next) : '';\n if (key !== lastPrePostKey) {\n lastPrePostKey = key;\n this.prePostConfigStable.set(next);\n }\n }\n );\n }\n\n //#endregion\n\n //#region ---- Computed State ----\n\n /** Current context: prefer local updates so edits are preserved. */\n private context = computed(() => {\n const local = this.localContext();\n if (local != null) return local;\n return this.rootContext() ?? {};\n });\n\n /** Questions value passed to the builder (from context). */\n questionsValue = computed<QuestionnaireBuilderValue | null>(() => {\n const ctx = this.context();\n const q = ctx['questions'];\n return (q != null && typeof q === 'object' ? q : null) as QuestionnaireBuilderValue | null;\n });\n\n /** Pre/post config for preview; stable reference to avoid infinite change detection. */\n prePostConfig = computed(() => this.prePostConfigStable());\n\n /** Display settings from entity (for builder preview). */\n entityDisplaySettings = computed(() => toDisplaySettings((this.rootContext() ?? undefined) as Parameters<typeof toDisplaySettings>[0]) ?? null);\n\n /** Questionnaire entity id for preview outcome evaluation. */\n questionnaireEntityId = computed((): string | undefined => {\n const id = this.rootContext()?.['id'];\n return typeof id === 'string' && id.length > 0 ? id : undefined;\n });\n\n //#endregion\n\n //#region ---- Page Actions ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const addSectionTitle =\n (await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.add-section.title'\n )) || 'Add Section';\n const previewTitle =\n (await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title'\n )) || 'Preview';\n const discardTitle =\n (await this.translateService.translateAsync('@general:actions.discard.title')) || 'Discard';\n const saveTitle =\n (await this.translateService.translateAsync('@general:actions.save.title')) || 'Save';\n\n const addSectionAction: AXPLayoutDetailsViewAction = {\n title: addSectionTitle,\n icon: 'fa-light fa-layer-group',\n zone: 'header',\n priority: 'primary',\n color: 'primary',\n command: {\n name: QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND,\n options: {},\n },\n };\n const previewAction: AXPLayoutDetailsViewAction = {\n title: previewTitle,\n icon: 'fa-light fa-eye',\n zone: 'header',\n priority: 'primary',\n color: 'default',\n command: {\n name: QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND,\n options: {},\n },\n };\n const discardAction: AXPLayoutDetailsViewAction = {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND,\n options: {},\n },\n };\n const saveAction: AXPLayoutDetailsViewAction = {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n options: {},\n },\n };\n return [addSectionAction, previewAction, discardAction, saveAction];\n }\n\n //#endregion\n\n //#region ---- Command Handling ----\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND) {\n this.ignoreNextValueChange.set(true);\n this.localContext.set(null);\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n this.recompute();\n return;\n }\n if (command.name === QUESTIONNAIRE_QUESTIONS_ADD_SECTION_COMMAND) {\n void this.builderRef()?.addSection();\n return;\n }\n if (command.name === QUESTIONNAIRE_QUESTIONS_PREVIEW_COMMAND) {\n this.builderRef()?.handlePreview();\n return;\n }\n if (command.name !== QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND) {\n return;\n }\n\n // Return result for delegateExecute; cast needed to satisfy base signature\n return this.handleSaveExecute() as unknown as Promise<void>;\n }\n\n private async handleSaveExecute(): Promise<AXPExecuteCommandResult> {\n const ctx = this.localContext() ?? this.rootContext() ?? {};\n const id = typeof ctx['id'] === 'string' ? ctx['id'] : undefined;\n const questions = ctx['questions'] as QuestionnaireBuilderValue | undefined;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n const input: SaveQuestionnaireQuestionsInput = {\n id,\n questions: questions ?? { sections: [] },\n };\n\n const result = await this.commandService.execute<SaveQuestionnaireQuestionsInput, unknown>(\n QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,\n input\n );\n\n const execResult = (result ?? { success: false }) as AXPExecuteCommandResult;\n\n if (execResult.success) {\n const savedQuestions = questions ?? { sections: [] };\n this.baselineQuestions.set(this.cloneQuestions(savedQuestions));\n this.localContext.set(null);\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(true);\n this.recompute();\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, {\n name: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`,\n });\n // Success toast is shown by details-view when execute() returns success\n }\n\n return execResult;\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /** Updates local context when the builder emits a new questions value. Skip if unchanged to avoid CD loop. */\n onQuestionsChange(value: QuestionnaireBuilderValue): void {\n if (this.ignoreNextValueChange()) {\n this.ignoreNextValueChange.set(false);\n return;\n }\n const current = this.questionsValue();\n if (this.areQuestionsEqual(current ?? undefined, value ?? undefined)) {\n if (this.questionsBaselinePendingReconcile()) {\n const aligned = current ?? value;\n this.baselineQuestions.set(this.cloneQuestions(aligned ?? undefined));\n this.questionsBaselinePendingReconcile.set(false);\n this.isDirty.set(false);\n }\n return;\n }\n const base = this.localContext() ?? this.rootContext() ?? {};\n\n if (this.questionsBaselinePendingReconcile() && this.localContext() == null) {\n this.baselineQuestions.set(this.cloneQuestions(value));\n this.isDirty.set(false);\n this.questionsBaselinePendingReconcile.set(false);\n this.localContext.set({ ...base, questions: value });\n this.recompute();\n return;\n }\n\n this.localContext.set({ ...base, questions: value });\n const baseline = this.baselineQuestions();\n const dirty = !this.areQuestionsEqual(baseline, value);\n this.isDirty.set(dirty);\n this.recompute();\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n\n private areQuestionsEqual(a: QuestionnaireBuilderValue | null | undefined, b: QuestionnaireBuilderValue | null | undefined): boolean {\n return isEqual(a, b);\n }\n\n private cloneQuestions(\n value: QuestionnaireBuilderValue | null | undefined,\n ): QuestionnaireBuilderValue | null | undefined {\n if (isNil(value)) return value;\n return cloneDeep(value);\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout.recompute?.();\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY } from './QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY';\n\n//#region ---- Questionnaire Questions Page Component Provider ----\n\n@Injectable()\nexport class AXMQuestionnaireQuestionsPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./questionnaire-questions-page.component').then(\n (m) => m.AXMQuestionnaireQuestionsPageComponent\n ),\n },\n ];\n }\n}\n\n//#endregion\n","//#region ---- Questions builder exports ----\n\nexport * from './builder/questionnaire-questions.types';\nexport * from './builder/questionnaire-questions-builder.component';\nexport * from './pages/questionnaire-questions-page';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n QuestionnaireOutcomeDisplayEmphasis,\n QuestionnaireOutcomeDisplayOperator,\n} from '../../../../entities/questionnaire/questionnaire.types';\n\n//#endregion\n\n//#region ---- Select options ----\n\n/** i18n keys for comparison operator select options. */\nexport const OUTCOME_DISPLAY_OPERATOR_LABEL_KEYS: Record<QuestionnaireOutcomeDisplayOperator, string> = {\n eq: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.eq',\n neq: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.neq',\n gt: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.gt',\n gte: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.gte',\n lt: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.lt',\n lte: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-operator.options.lte',\n};\n\n/** i18n keys for emphasis select options. */\nexport const OUTCOME_DISPLAY_EMPHASIS_LABEL_KEYS: Record<QuestionnaireOutcomeDisplayEmphasis, string> = {\n normal:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-emphasis.options.normal',\n medium:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-emphasis.options.medium',\n bold:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-emphasis.options.bold',\n};\n\nexport const OUTCOME_DISPLAY_OPERATOR_SELECT_OPTIONS = (\n Object.keys(OUTCOME_DISPLAY_OPERATOR_LABEL_KEYS) as QuestionnaireOutcomeDisplayOperator[]\n).map((id) => ({\n id,\n title: OUTCOME_DISPLAY_OPERATOR_LABEL_KEYS[id],\n}));\n\nexport const OUTCOME_DISPLAY_OPERATOR_STRING_SELECT_OPTIONS = OUTCOME_DISPLAY_OPERATOR_SELECT_OPTIONS.filter(\n (option) => option.id === 'eq' || option.id === 'neq',\n);\n\nexport const OUTCOME_DISPLAY_OPERATOR_BOOLEAN_SELECT_OPTIONS = OUTCOME_DISPLAY_OPERATOR_SELECT_OPTIONS.filter(\n (option) => option.id === 'eq',\n);\n\nexport const OUTCOME_DISPLAY_EMPHASIS_SELECT_OPTIONS = (\n Object.keys(OUTCOME_DISPLAY_EMPHASIS_LABEL_KEYS) as QuestionnaireOutcomeDisplayEmphasis[]\n).map((id) => ({\n id,\n title: OUTCOME_DISPLAY_EMPHASIS_LABEL_KEYS[id],\n}));\n\nexport function toOutcomeDisplayOperatorSelectValue(operator: QuestionnaireOutcomeDisplayOperator): {\n id: QuestionnaireOutcomeDisplayOperator;\n title: string;\n} {\n return { id: operator, title: OUTCOME_DISPLAY_OPERATOR_LABEL_KEYS[operator] };\n}\n\nexport function toOutcomeDisplayEmphasisSelectValue(emphasis: QuestionnaireOutcomeDisplayEmphasis): {\n id: QuestionnaireOutcomeDisplayEmphasis;\n title: string;\n} {\n return { id: emphasis, title: OUTCOME_DISPLAY_EMPHASIS_LABEL_KEYS[emphasis] };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { createMultiLanguageString, resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type { QuestionnaireOutcomeResultKind } from '../../../../entities/questionnaire/questionnaire.types';\n\n//#endregion\n\n//#region ---- Result kind labels ----\n\n/** i18n keys for select options (property viewer). */\nexport const OUTCOME_RESULT_KIND_LABEL_KEYS: Record<QuestionnaireOutcomeResultKind, string> = {\n number: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.result-kind.options.number',\n string: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.result-kind.options.string',\n boolean: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.result-kind.options.boolean',\n};\n\n/**\n * Sync labels for list badges — mirrors i18n `result-kind.options` (en-US Title Case).\n * Select/editor fields still use {@link OUTCOME_RESULT_KIND_LABEL_KEYS} with the translate pipe.\n */\nconst OUTCOME_RESULT_KIND_LABELS: Record<QuestionnaireOutcomeResultKind, AXPMultiLanguageString> = {\n number: createMultiLanguageString('Number', 'عدد'),\n string: createMultiLanguageString('Text', 'متن'),\n boolean: createMultiLanguageString('Yes / No', 'بله / خیر'),\n};\n\nexport const OUTCOME_RESULT_KIND_SELECT_OPTIONS = (\n Object.keys(OUTCOME_RESULT_KIND_LABEL_KEYS) as QuestionnaireOutcomeResultKind[]\n).map((id) => ({\n id,\n title: OUTCOME_RESULT_KIND_LABEL_KEYS[id],\n}));\n\nexport function resolveOutcomeResultKindLabel(\n kind: QuestionnaireOutcomeResultKind,\n locale: string,\n): string {\n return resolveMultiLanguageString(OUTCOME_RESULT_KIND_LABELS[kind], locale);\n}\n\nexport function toOutcomeResultKindSelectValue(kind: QuestionnaireOutcomeResultKind): {\n id: QuestionnaireOutcomeResultKind;\n title: string;\n} {\n return { id: kind, title: OUTCOME_RESULT_KIND_LABEL_KEYS[kind] };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type { AXPPropertyViewerTab } from '@acorex/platform/layout/components';\nimport {\n AXPWidgetsCatalog,\n type AXPWidgetNode,\n type AXPWidgetProperty,\n type AXPWidgetPropertyGroup,\n} from '@acorex/platform/layout/widget-core';\nimport type { QuestionnaireOutcomeResultKind } from '../../../../entities/questionnaire/questionnaire.types';\nimport {\n OUTCOME_DISPLAY_EMPHASIS_SELECT_OPTIONS,\n OUTCOME_DISPLAY_OPERATOR_BOOLEAN_SELECT_OPTIONS,\n OUTCOME_DISPLAY_OPERATOR_SELECT_OPTIONS,\n OUTCOME_DISPLAY_OPERATOR_STRING_SELECT_OPTIONS,\n} from './outcome-display-rule.constants';\nimport { OUTCOME_RESULT_KIND_SELECT_OPTIONS } from './outcome-result-kind.constants';\n\n//#endregion\n\n//#region ---- Groups ----\n\nconst GROUP_BASIC: AXPWidgetPropertyGroup = {\n name: 'basic-info',\n title: '@general:terms.interface.basic-info',\n order: 0,\n};\n\nconst GROUP_RESULT: AXPWidgetPropertyGroup = {\n name: 'result',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.groups.result',\n order: 1,\n};\n\nconst GROUP_DISPLAY_RULES: AXPWidgetPropertyGroup = {\n name: 'display-rules',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.groups.display-rules',\n order: 2,\n};\n\nconst RESULT_KIND_OPTIONS = OUTCOME_RESULT_KIND_SELECT_OPTIONS;\n\nconst DISPLAY_RULE_GRID_CELL = {\n alignSelf: 'center',\n alignItems: 'center',\n justifyContent: 'center',\n} as const;\n\nconst COMPARE_VALUE_PLACEHOLDER =\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-compare-value.placeholder';\n\n//#endregion\n\n//#region ---- Display rule row layout (result-kind aware) ----\n\nfunction buildDisplayRuleOperatorWidget(resultKind: QuestionnaireOutcomeResultKind): AXPWidgetNode {\n const dataSource =\n resultKind === 'boolean'\n ? OUTCOME_DISPLAY_OPERATOR_BOOLEAN_SELECT_OPTIONS\n : resultKind === 'string'\n ? OUTCOME_DISPLAY_OPERATOR_STRING_SELECT_OPTIONS\n : OUTCOME_DISPLAY_OPERATOR_SELECT_OPTIONS;\n\n return {\n type: AXPWidgetsCatalog.select,\n mode: 'edit',\n path: 'operator',\n name: 'operator',\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [...dataSource],\n },\n };\n}\n\nfunction buildDisplayRuleCompareValueWidget(resultKind: QuestionnaireOutcomeResultKind): AXPWidgetNode {\n if (resultKind === 'boolean') {\n return {\n type: AXPWidgetsCatalog.toggle,\n mode: 'edit',\n path: 'compareValue',\n name: 'compareValue',\n options: {},\n };\n }\n\n if (resultKind === 'string') {\n return {\n type: AXPWidgetsCatalog.text,\n mode: 'edit',\n path: 'compareValue',\n name: 'compareValue',\n options: {\n placeholder: COMPARE_VALUE_PLACEHOLDER,\n },\n };\n }\n\n return {\n type: AXPWidgetsCatalog.number,\n mode: 'edit',\n path: 'compareValue',\n name: 'compareValue',\n options: {\n placeholder: COMPARE_VALUE_PLACEHOLDER,\n },\n };\n}\n\nfunction buildDisplayRuleRepeaterChildren(resultKind: QuestionnaireOutcomeResultKind): AXPWidgetNode[] {\n return [\n {\n type: AXPWidgetsCatalog.grid,\n mode: 'edit',\n options: {\n width: '100%',\n grid: {\n default: {\n columns: 12,\n gap: '8px',\n alignItems: 'center',\n },\n },\n },\n children: [\n {\n type: AXPWidgetsCatalog.gridItem,\n mode: 'edit',\n options: { colSpan: 3, ...DISPLAY_RULE_GRID_CELL },\n children: [buildDisplayRuleOperatorWidget(resultKind)],\n },\n {\n type: AXPWidgetsCatalog.gridItem,\n mode: 'edit',\n options: { colSpan: 2, ...DISPLAY_RULE_GRID_CELL },\n children: [buildDisplayRuleCompareValueWidget(resultKind)],\n },\n {\n type: AXPWidgetsCatalog.gridItem,\n mode: 'edit',\n options: { colSpan: 3, ...DISPLAY_RULE_GRID_CELL },\n children: [\n {\n type: AXPWidgetsCatalog.themeColorChooser,\n mode: 'edit',\n path: 'color',\n name: 'color',\n options: {\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-color.placeholder',\n },\n },\n ],\n },\n {\n type: AXPWidgetsCatalog.gridItem,\n mode: 'edit',\n options: { colSpan: 2, ...DISPLAY_RULE_GRID_CELL },\n children: [\n {\n type: AXPWidgetsCatalog.select,\n mode: 'edit',\n path: 'emphasis',\n name: 'emphasis',\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [...OUTCOME_DISPLAY_EMPHASIS_SELECT_OPTIONS],\n },\n },\n ],\n },\n {\n type: AXPWidgetsCatalog.gridItem,\n mode: 'edit',\n options: { colSpan: 2, ...DISPLAY_RULE_GRID_CELL },\n children: [\n {\n type: AXPWidgetsCatalog.iconChooser,\n mode: 'edit',\n path: 'icon',\n name: 'icon',\n options: {},\n },\n ],\n },\n ],\n },\n ];\n}\n\nfunction buildDisplayRulesProps(resultKind: QuestionnaireOutcomeResultKind): AXPWidgetProperty[] {\n return [\n {\n name: 'displayRules',\n title:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-rules.title',\n description:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.display-rules.description',\n group: GROUP_DISPLAY_RULES,\n order: 10,\n showLabel: false,\n schema: {\n dataType: 'array',\n defaultValue: [],\n nullable: true,\n interface: {\n name: 'displayRules',\n path: 'displayRules',\n type: AXPWidgetsCatalog.repeaterLayout,\n options: {\n hasControls: true,\n allowReorder: true,\n width: '100%',\n },\n children: buildDisplayRuleRepeaterChildren(resultKind),\n },\n },\n visible: true,\n },\n ];\n}\n\n//#endregion\n\n//#region ---- Properties ----\n\nconst BASIC_PROPS: AXPWidgetProperty[] = [\n {\n name: 'name',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.name.title',\n group: GROUP_BASIC,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'name',\n path: 'name',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.name.placeholder',\n },\n },\n },\n validations: [{ rule: 'required' }, { rule: 'variable-name' }],\n visible: true,\n },\n {\n name: 'title',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.title.title',\n group: GROUP_BASIC,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'title',\n path: 'title',\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.title.placeholder',\n },\n },\n },\n validations: [{ rule: 'required' }],\n visible: true,\n },\n {\n name: 'description',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.description.title',\n group: GROUP_BASIC,\n order: 30,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'description',\n path: 'description',\n type: AXPWidgetsCatalog.largeText,\n options: {\n rows: 3,\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.description.placeholder',\n },\n },\n },\n visible: true,\n },\n];\n\nconst RESULT_PROPS: AXPWidgetProperty[] = [\n {\n name: 'resultKind',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.result-kind.title',\n group: GROUP_RESULT,\n order: 10,\n schema: {\n dataType: 'string',\n defaultValue: { id: 'number', title: RESULT_KIND_OPTIONS[0].title },\n interface: {\n name: 'resultKind',\n path: 'resultKind',\n type: AXPWidgetsCatalog.select,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: [...RESULT_KIND_OPTIONS],\n },\n },\n },\n validations: [{ rule: 'required' }],\n visible: true,\n },\n {\n name: 'expression',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.expression.title',\n group: GROUP_RESULT,\n order: 20,\n schema: {\n dataType: 'string',\n defaultValue: '',\n interface: {\n name: 'expression',\n path: 'expression',\n type: 'code-editor',\n options: {\n language: 'javascript',\n lineNumbers: true,\n height: 'min-h-72',\n placeholder:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.fields.expression.placeholder',\n },\n },\n },\n validations: [{ rule: 'required' }],\n visible: true,\n },\n];\n\n//#endregion\n\n//#region ---- Tabs ----\n\n/** Builds outcome edit tabs; display-rule value widgets match the selected result kind. */\nexport function buildQuestionnaireOutcomeEditTabs(\n resultKind: QuestionnaireOutcomeResultKind = 'number',\n): AXPPropertyViewerTab[] {\n return [\n {\n name: 'general',\n title: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.tabs.general.title',\n groups: [\n {\n name: GROUP_BASIC.name,\n title: GROUP_BASIC.title,\n isCollapsed: false,\n props: BASIC_PROPS,\n },\n {\n name: GROUP_RESULT.name,\n title: GROUP_RESULT.title,\n isCollapsed: false,\n props: RESULT_PROPS,\n },\n {\n name: GROUP_DISPLAY_RULES.name,\n title: GROUP_DISPLAY_RULES.title,\n isCollapsed: false,\n props: buildDisplayRulesProps(resultKind),\n },\n ],\n },\n ];\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport type {\n AXPBuilderItem,\n AXPBuilderSection,\n AXPBuilderValue,\n} from '@acorex/platform/layout/components';\nimport type {\n QuestionnaireOutcomeItem,\n QuestionnaireOutcomeSection,\n QuestionnaireOutcomesValue,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport { normalizeQuestionnaireOutcomesValue } from '../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireOutcomesBuilderItem } from './questionnaire-outcomes-builder.types';\n\n//#endregion\n\n//#region ---- Mapping ----\n\nfunction outcomeItemToBuilderItem(item: QuestionnaireOutcomesBuilderItem, index: number): AXPBuilderItem {\n return {\n id: item.id,\n name: item.name,\n order: item.order ?? index,\n title: item.title,\n description: item.description,\n resultKind: item.resultKind,\n expression: item.expression,\n displayRules: item.displayRules,\n isNewlyAdded: item.isNewlyAdded,\n };\n}\n\nfunction builderItemToOutcomeItem(item: AXPBuilderItem, index: number): QuestionnaireOutcomesBuilderItem {\n return {\n id: String(item.id ?? item['name'] ?? AXPDataGenerator.uuid()),\n name: String(item['name'] ?? ''),\n title: item['title'] as QuestionnaireOutcomesBuilderItem['title'],\n description: item['description'] as QuestionnaireOutcomesBuilderItem['description'],\n resultKind: (item['resultKind'] ?? 'number') as QuestionnaireOutcomesBuilderItem['resultKind'],\n expression: String(item['expression'] ?? ''),\n displayRules: item['displayRules'] as QuestionnaireOutcomesBuilderItem['displayRules'],\n order: item.order ?? index,\n isNewlyAdded: item['isNewlyAdded'] === true,\n };\n}\n\nfunction sectionToBuilderSection(section: QuestionnaireOutcomeSection, index: number): AXPBuilderSection {\n const name = section.name.trim() || `section-${index + 1}`;\n return {\n id: name,\n name,\n order: section.order ?? index,\n title: section.title,\n description: section.description,\n isNewlyAdded: section.isNewlyAdded,\n items: (section.items ?? []).map((item, itemIndex) => outcomeItemToBuilderItem(item, itemIndex)),\n };\n}\n\nfunction builderSectionToOutcomeSection(section: AXPBuilderSection, index: number): QuestionnaireOutcomeSection {\n const name = String(section['name'] ?? section.id ?? '').trim() || `section-${index + 1}`;\n return {\n name,\n title: section['title'] as QuestionnaireOutcomeSection['title'],\n description: section['description'] as QuestionnaireOutcomeSection['description'],\n order: section.order ?? index,\n isNewlyAdded: section['isNewlyAdded'] === true,\n items: section.items.map((item, itemIndex) => builderItemToOutcomeItem(item, itemIndex)),\n };\n}\n\nexport function outcomesValueToBuilderValue(\n value: QuestionnaireOutcomesValue | null | undefined,\n): AXPBuilderValue {\n const normalized = normalizeQuestionnaireOutcomesValue(value);\n return {\n sections: normalized.sections.map((section, index) => sectionToBuilderSection(section, index)),\n };\n}\n\nexport function builderValueToOutcomesValue(value: AXPBuilderValue): QuestionnaireOutcomesValue {\n return {\n sections: value.sections.map((section, index) => builderSectionToOutcomeSection(section, index)),\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport type {\n QuestionnaireOutcomeItem,\n QuestionnaireOutcomeSection,\n QuestionnaireOutcomesValue,\n} from '../../../../entities/questionnaire/questionnaire.types';\n\n//#endregion\n\n//#region ---- Builder model ----\n\nexport interface QuestionnaireOutcomesBuilderItem extends QuestionnaireOutcomeItem {\n order?: number;\n isNewlyAdded?: boolean;\n}\n\nexport interface QuestionnaireOutcomesBuilderSection extends QuestionnaireOutcomeSection {\n items: QuestionnaireOutcomesBuilderItem[];\n}\n\nexport interface QuestionnaireOutcomesBuilderState {\n sections: QuestionnaireOutcomesBuilderSection[];\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nexport function normalizeOutcomeName(name: string | undefined): string {\n return (name ?? '').trim();\n}\n\nexport function createDefaultOutcomeSection(order = 0): QuestionnaireOutcomesBuilderSection {\n return {\n name: `section-${Date.now()}`,\n title: 'New Section',\n order,\n items: [],\n isNewlyAdded: true,\n };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXToastService } from '@acorex/components/toast';\nimport {\n AXTranslationModule,\n AXTranslationService,\n isEffectivelyEmptyLocalizedValue,\n resolveMultiLanguageString,\n} from '@acorex/core/translation';\nimport { AXPDataGenerator, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { createMultiLanguageString } from '@acorex/core/translation';\nimport {\n AXPPropertyViewerService,\n AXPStandardSectionItemsBuilderComponent,\n type AXPBuilderBadge,\n type AXPBuilderItem,\n type AXPBuilderItemViewModel,\n type AXPBuilderSection,\n type AXPBuilderValue,\n type AXPPropertyViewerResult,\n type AXPStandardSectionItemsBuilderConfig,\n} from '@acorex/platform/layout/components';\nimport { CommonModule } from '@angular/common';\nimport { get } from 'lodash-es';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport type {\n QuestionnaireOutcomeDisplayEmphasis,\n QuestionnaireOutcomeDisplayIcon,\n QuestionnaireOutcomeDisplayOperator,\n QuestionnaireOutcomeDisplayRule,\n QuestionnaireOutcomeResultKind,\n QuestionnaireOutcomesValue,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport {\n normalizeQuestionnaireOutcomeDisplayRules,\n normalizeQuestionnaireOutcomesValue,\n} from '../../../../entities/questionnaire/questionnaire.types';\nimport {\n toOutcomeDisplayEmphasisSelectValue,\n toOutcomeDisplayOperatorSelectValue,\n} from './outcome-display-rule.constants';\nimport { buildQuestionnaireOutcomeEditTabs } from './questionnaire-outcome-edit.property-tabs';\nimport {\n resolveOutcomeResultKindLabel,\n toOutcomeResultKindSelectValue,\n} from './outcome-result-kind.constants';\nimport {\n builderValueToOutcomesValue,\n outcomesValueToBuilderValue,\n} from './questionnaire-outcomes-builder.mapping';\nimport {\n createDefaultOutcomeSection,\n normalizeOutcomeName,\n type QuestionnaireOutcomesBuilderItem,\n} from './questionnaire-outcomes-builder.types';\n\n//#endregion\n\n//#region ---- Form context ----\n\ninterface QuestionnaireOutcomeEditFormContext {\n name?: string;\n title?: AXPMultiLanguageString | string;\n description?: AXPMultiLanguageString | string;\n resultKind?: QuestionnaireOutcomeResultKind | { id?: string; title?: string };\n expression?: string;\n displayRules?: QuestionnaireOutcomeDisplayRuleFormRow[];\n}\n\ninterface QuestionnaireOutcomeDisplayRuleFormRow {\n id?: string;\n operator?: QuestionnaireOutcomeDisplayOperator | { id?: string; title?: string };\n compareValue?: number | string | boolean;\n color?: string;\n emphasis?: QuestionnaireOutcomeDisplayEmphasis | { id?: string; title?: string };\n icon?: QuestionnaireOutcomeDisplayIcon | null;\n}\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-questionnaire-outcomes-builder',\n templateUrl: './questionnaire-outcomes-builder.component.html',\n styleUrl: './questionnaire-outcomes-builder.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPStandardSectionItemsBuilderComponent,\n ],\n})\nexport class AXMQuestionnaireOutcomesBuilderComponent {\n //#region ---- Inputs / Outputs ----\n\n value = input<QuestionnaireOutcomesValue | null>(null);\n readonly = input(false);\n showHeader = input(true);\n valueChange = output<QuestionnaireOutcomesValue>();\n\n //#endregion\n\n //#region ---- Services ----\n\n private readonly propertyViewerService = inject(AXPPropertyViewerService);\n private readonly translationService = inject(AXTranslationService);\n private readonly toastService = inject(AXToastService);\n\n //#endregion\n\n //#region ---- View references ----\n\n protected readonly standardRef = viewChild(AXPStandardSectionItemsBuilderComponent);\n\n //#endregion\n\n //#region ---- State ----\n\n protected readonly builderValue = signal<AXPBuilderValue>({ sections: [] });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n effect(() => {\n const next = normalizeQuestionnaireOutcomesValue(this.value());\n const mapped = outcomesValueToBuilderValue(next);\n untracked(() => this.builderValue.set(this.ensureMinOneSection(mapped)));\n });\n }\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly standardConfig = computed<AXPStandardSectionItemsBuilderConfig>(() => ({\n showSectionTechnicalName: true,\n minSectionCount: 1,\n texts: {\n addSection: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.actions.add-section.title',\n addItem: '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.actions.add-outcome.title',\n emptySectionsTitle:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.empty.no-sections.title',\n emptySectionsDescription:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.empty.no-sections.description',\n emptyItemsTitle:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.empty.empty-section.title',\n emptyItemsDescription:\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.empty.empty-section.description',\n },\n mapItemToView: (item, _section) => this.mapOutcomeItemToView(item),\n promptAddItems: (sectionId, value) => this.promptAddOutcome(sectionId, value),\n promptEditItem: (item, sectionId, value) => this.promptEditOutcome(item, sectionId, value),\n }));\n\n //#endregion\n\n //#region ---- Public API ----\n\n /** Page header command: delegates to standard builder add-section dialog. */\n async addSection(): Promise<void> {\n await this.standardRef()?.addSection();\n }\n\n //#endregion\n\n //#region ---- Builder handlers ----\n\n protected onBuilderValueChange(next: AXPBuilderValue): void {\n const normalized = this.ensureMinOneSection(next);\n this.builderValue.set(normalized);\n this.valueChange.emit(builderValueToOutcomesValue(normalized));\n }\n\n //#endregion\n\n //#region ---- Item mapping ----\n\n private mapOutcomeItemToView(item: AXPBuilderItem): AXPBuilderItemViewModel {\n const outcome = item as unknown as QuestionnaireOutcomesBuilderItem;\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n const title = resolveMultiLanguageString(outcome.title, locale).trim();\n const description = resolveMultiLanguageString(outcome.description, locale).trim();\n const badges: AXPBuilderBadge[] = [];\n const kind = this.coerceResultKind(outcome.resultKind);\n badges.push({\n text: resolveOutcomeResultKindLabel(kind, locale),\n variant: 'neutral',\n });\n\n return {\n icon: 'fa-light fa-calculator',\n title: title || outcome.name || '—',\n name: outcome.name,\n description: description || undefined,\n badges,\n };\n }\n\n //#endregion\n\n //#region ---- Prompts ----\n\n private async promptAddOutcome(\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem[] | null> {\n const section = value.sections.find((s) => s.id === sectionId);\n if (!section) {\n return null;\n }\n const takenNames = this.collectOutcomeNames(value);\n const defaultName = this.allocateOutcomeName(takenNames);\n const item = await this.openOutcomeDialog({\n mode: 'add',\n context: {\n name: defaultName,\n title: '',\n description: '',\n resultKind: toOutcomeResultKindSelectValue('number'),\n expression: '',\n displayRules: [],\n },\n sectionId,\n value,\n excludeItemId: undefined,\n });\n return item ? [item] : null;\n }\n\n private async promptEditOutcome(\n item: AXPBuilderItem,\n sectionId: string,\n value: AXPBuilderValue,\n ): Promise<AXPBuilderItem | null> {\n const outcome = item as unknown as QuestionnaireOutcomesBuilderItem;\n return this.openOutcomeDialog({\n mode: 'edit',\n context: {\n name: outcome.name,\n title: outcome.title ?? '',\n description: outcome.description ?? '',\n resultKind: toOutcomeResultKindSelectValue(this.coerceResultKind(outcome.resultKind)),\n expression: outcome.expression ?? '',\n displayRules: this.toDisplayRulesFormContext(outcome.displayRules),\n },\n sectionId,\n value,\n excludeItemId: item.id,\n existingItem: item,\n });\n }\n\n private async openOutcomeDialog(options: {\n mode: 'add' | 'edit';\n context: QuestionnaireOutcomeEditFormContext;\n sectionId: string;\n value: AXPBuilderValue;\n excludeItemId?: string;\n existingItem?: AXPBuilderItem;\n }): Promise<AXPBuilderItem | null> {\n const validationFailed = async (\n titleKey: string,\n descKey: string,\n fallTitle: string,\n fallDesc: string,\n ): Promise<never> => {\n const title = (await this.translationService.translateAsync(titleKey)) || fallTitle;\n const content = (await this.translationService.translateAsync(descKey)) || fallDesc;\n this.toastService.show({ color: 'warning', title, content });\n throw new Error('QuestionnaireOutcomeEditValidation');\n };\n\n try {\n const titleKey =\n options.mode === 'add'\n ? '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.actions.add-outcome.title'\n : '@general:actions.edit.title';\n\n const initialResultKind = this.coerceResultKind(options.context.resultKind);\n\n const result = await this.propertyViewerService\n .create()\n .dialog((d) => {\n d.setTitle(titleKey)\n .setSize('lg')\n .setCloseButton(true)\n .setMode('advanced')\n .setTabs(buildQuestionnaireOutcomeEditTabs(initialResultKind))\n .setContext(options.context)\n .onAction(async (ref) => {\n const context = ref.context() as QuestionnaireOutcomeEditFormContext;\n const rawName = normalizeOutcomeName(context.name);\n if (!rawName) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.name-required.title',\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.name-required.description',\n 'Name required',\n 'Enter a unique outcome name.',\n );\n }\n if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(rawName)) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.name-invalid.title',\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.name-invalid.description',\n 'Invalid name',\n 'Use letters, numbers, underscores, and hyphens.',\n );\n }\n const taken = this.collectOutcomeNames(options.value, options.excludeItemId);\n if (taken.has(rawName)) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.duplicate-name',\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.duplicate-name',\n 'Duplicate name',\n 'Another outcome already uses this name.',\n );\n }\n const title = context.title;\n if (isEffectivelyEmptyLocalizedValue(title)) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.title-required.title',\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.title-required.description',\n 'Title required',\n 'Enter a display title for this outcome.',\n );\n }\n const expression = String(context.expression ?? '').trim();\n if (!expression) {\n await validationFailed(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.expression-required.title',\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.expression-required.description',\n 'Expression required',\n 'Enter an expression for this outcome.',\n );\n }\n });\n })\n .show();\n\n if (!result) {\n return null;\n }\n\n const form = (result as AXPPropertyViewerResult).values as QuestionnaireOutcomeEditFormContext;\n const name = normalizeOutcomeName(form.name);\n const title = this.normalizeLocalizedField(form.title);\n const description = this.normalizeLocalizedField(form.description);\n const resultKind = this.coerceResultKind(form.resultKind);\n const expression = String(form.expression ?? '').trim();\n const displayRules = this.normalizeDisplayRulesFromForm(form.displayRules, resultKind);\n const id =\n options.mode === 'edit' && options.existingItem\n ? String(options.existingItem.id)\n : AXPDataGenerator.uuid();\n\n return {\n ...(options.existingItem ?? {}),\n id,\n name,\n title,\n description,\n resultKind,\n expression,\n displayRules,\n order: options.existingItem?.order ?? 0,\n isNewlyAdded: options.mode === 'add',\n } as AXPBuilderItem;\n } catch (error) {\n if (error instanceof Error && error.message === 'QuestionnaireOutcomeEditValidation') {\n return null;\n }\n console.error('Error editing outcome:', error);\n return null;\n }\n }\n\n //#endregion\n\n //#region ---- Utility ----\n\n private ensureMinOneSection(value: AXPBuilderValue): AXPBuilderValue {\n if (value.sections.length > 0) {\n return value;\n }\n const section = createDefaultOutcomeSection(0);\n return outcomesValueToBuilderValue({ sections: [section] });\n }\n\n private collectOutcomeNames(value: AXPBuilderValue, excludeItemId?: string): Set<string> {\n const names = new Set<string>();\n for (const section of value.sections) {\n for (const item of section.items) {\n if (excludeItemId != null && item.id === excludeItemId) {\n continue;\n }\n const name = normalizeOutcomeName(String(item['name'] ?? ''));\n if (name) {\n names.add(name);\n }\n }\n }\n return names;\n }\n\n private allocateOutcomeName(taken: Set<string>): string {\n let index = taken.size + 1;\n let name = `outcome_${index}`;\n while (taken.has(name)) {\n index += 1;\n name = `outcome_${index}`;\n }\n return name;\n }\n\n private coerceResultKind(value: unknown): QuestionnaireOutcomeResultKind {\n if (value === 'number' || value === 'string' || value === 'boolean') {\n return value;\n }\n if (value != null && typeof value === 'object' && 'id' in value) {\n const id = (value as { id?: string }).id;\n if (id === 'number' || id === 'string' || id === 'boolean') {\n return id;\n }\n }\n return 'number';\n }\n\n private coerceDisplayOperator(\n value: unknown,\n resultKind: QuestionnaireOutcomeResultKind,\n ): QuestionnaireOutcomeDisplayOperator {\n let operator: QuestionnaireOutcomeDisplayOperator | undefined;\n if (value === 'eq' || value === 'neq' || value === 'gt' || value === 'gte' || value === 'lt' || value === 'lte') {\n operator = value;\n } else if (value != null && typeof value === 'object' && 'id' in value) {\n const id = (value as { id?: string }).id;\n if (id === 'eq' || id === 'neq' || id === 'gt' || id === 'gte' || id === 'lt' || id === 'lte') {\n operator = id;\n }\n }\n\n if (resultKind === 'boolean') {\n return operator === 'eq' || operator === 'neq' ? operator : 'eq';\n }\n if (resultKind === 'string') {\n return operator === 'eq' || operator === 'neq' ? operator : 'eq';\n }\n return operator ?? 'gte';\n }\n\n private coerceDisplayCompareValue(\n value: unknown,\n resultKind: QuestionnaireOutcomeResultKind,\n ): number | string | boolean | undefined {\n if (resultKind === 'boolean') {\n if (typeof value === 'boolean') {\n return value;\n }\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n return undefined;\n }\n\n if (resultKind === 'number') {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return undefined;\n }\n const asNumber = Number(trimmed);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n }\n return undefined;\n }\n\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n return undefined;\n }\n\n private normalizeDisplayColorValue(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n const parts = trimmed.split(/\\s+/);\n if (parts.length !== 3) {\n return undefined;\n }\n return trimmed;\n }\n\n private coerceDisplayEmphasis(value: unknown): QuestionnaireOutcomeDisplayEmphasis {\n if (value === 'normal' || value === 'medium' || value === 'bold') {\n return value;\n }\n if (value != null && typeof value === 'object' && 'id' in value) {\n const id = (value as { id?: string }).id;\n if (id === 'normal' || id === 'medium' || id === 'bold') {\n return id;\n }\n }\n return 'normal';\n }\n\n private normalizeDisplayIconValue(value: unknown): string | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n }\n if (typeof value === 'object') {\n const styleClass = String(get(value, 'styleClass') ?? '').trim();\n const iconClass = String(get(value, 'iconClass') ?? '').trim();\n const combined = [styleClass, iconClass].filter(Boolean).join(' ');\n return combined.length > 0 ? combined : undefined;\n }\n return undefined;\n }\n\n private toDisplayRulesFormContext(\n rules: QuestionnaireOutcomeDisplayRule[] | null | undefined,\n ): QuestionnaireOutcomeDisplayRuleFormRow[] {\n return normalizeQuestionnaireOutcomeDisplayRules(rules).map((rule) => ({\n id: rule.id,\n operator: toOutcomeDisplayOperatorSelectValue(rule.operator),\n compareValue: rule.compareValue,\n color: rule.color,\n emphasis: toOutcomeDisplayEmphasisSelectValue(rule.emphasis ?? 'normal'),\n icon: rule.icon,\n }));\n }\n\n private normalizeDisplayRulesFromForm(\n raw: unknown,\n resultKind: QuestionnaireOutcomeResultKind,\n ): QuestionnaireOutcomeDisplayRule[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n const rows: QuestionnaireOutcomeDisplayRule[] = [];\n for (const [index, row] of raw.entries()) {\n const compareValue = this.coerceDisplayCompareValue(get(row, 'compareValue'), resultKind);\n const color = this.normalizeDisplayColorValue(get(row, 'color'));\n if (compareValue === undefined || !color) {\n continue;\n }\n rows.push({\n id: String(get(row, 'id') ?? AXPDataGenerator.uuid()),\n order: index,\n operator: this.coerceDisplayOperator(get(row, 'operator'), resultKind),\n compareValue,\n color,\n emphasis: this.coerceDisplayEmphasis(get(row, 'emphasis')),\n icon: this.normalizeDisplayIconValue(get(row, 'icon')),\n });\n }\n return normalizeQuestionnaireOutcomeDisplayRules(rows);\n }\n\n private normalizeLocalizedField(value: unknown): AXPMultiLanguageString | undefined {\n if (value == null || value === '') {\n return undefined;\n }\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed ? createMultiLanguageString(trimmed, trimmed) : undefined;\n }\n if (typeof value === 'object') {\n return value as AXPMultiLanguageString;\n }\n return undefined;\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"axm-questionnaire-outcomes-builder\">\n @if (showHeader()) {\n <div class=\"__header\">\n <div class=\"__header-left\"></div>\n <div class=\"__header-right\">\n @if (!readonly()) {\n <ax-button\n class=\"ax-sm\"\n [text]=\"\n ('@assessment-management:questionnaires.components.questionnaire-outcomes-builder.actions.add-section.title'\n | translate\n | async) || 'Add Section'\n \"\n [color]=\"'primary'\"\n (onClick)=\"addSection()\">\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-layer-group\"></ax-icon>\n </ax-prefix>\n </ax-button>\n }\n </div>\n </div>\n }\n\n <axp-standard-section-items-builder\n #standardRef\n class=\"ax-block ax-min-h-[200px]\"\n [value]=\"builderValue()\"\n [config]=\"standardConfig()\"\n [readonly]=\"readonly()\"\n (valueChange)=\"onBuilderValueChange($event)\" />\n</div>\n","/** Component key for the questionnaire Outcomes page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY = 'questionnaire-outcomes-page';\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPExecuteCommandResult } from '@acorex/platform/core';\nimport { AXPCommand } from '@acorex/platform/runtime';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../../../const';\nimport type { QuestionnaireOutcomesValue } from '../../../../../entities/questionnaire/questionnaire.types';\n\nexport const QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND = 'Questionnaire:Outcomes:Save';\n\nexport interface SaveQuestionnaireOutcomesInput {\n id: string;\n outcomes: QuestionnaireOutcomesValue;\n __context__?: Record<string, unknown>;\n}\n\n/**\n * Command to save the questionnaire outcomes field.\n * Patches entity with { outcomes }.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class AXMSaveQuestionnaireOutcomesCommand implements AXPCommand<SaveQuestionnaireOutcomesInput, unknown> {\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n\n async execute(input: SaveQuestionnaireOutcomesInput): Promise<AXPExecuteCommandResult<unknown>> {\n const { id, outcomes } = input;\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const entityRef = `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`;\n const dataAccessor = this.entityService.withEntity(entityRef).data<any, any>();\n\n await dataAccessor.update(id, { outcomes });\n\n return {\n success: true,\n data: { id, outcomes },\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.success.description'),\n },\n };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : await this.translationService.translateAsync('@general:messages.generic.error.description');\n\n return {\n success: false,\n message: { text: message },\n };\n }\n }\n}\n","import {\n AXPActionMenuItem,\n AXPBroadcastEventService,\n AXPExecuteCommand,\n AXPExecuteCommandResult,\n} from '@acorex/platform/core';\nimport { AXPEntityEventsKeys } from '@acorex/platform/layout/entity';\nimport {\n AXPPageLayoutBase,\n AXPPageLayoutBaseComponent,\n} from '@acorex/platform/layout/views';\nimport type { AXPLayoutDetailsViewAction } from '@acorex/platform/layout/views';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n signal,\n viewChild,\n} from '@angular/core';\nimport { cloneDeep, isEqual, isNil } from 'lodash-es';\nimport { RootConfig } from '../../../../../const';\nimport {\n findDuplicateOutcomeNames,\n normalizeQuestionnaireOutcomesValue,\n type QuestionnaireOutcomesValue,\n} from '../../../../../entities/questionnaire/questionnaire.types';\nimport { AXMQuestionnaireOutcomesBuilderComponent } from '../../builder/questionnaire-outcomes-builder.component';\nimport {\n QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND,\n SaveQuestionnaireOutcomesInput,\n} from './save-questionnaire-outcomes.command';\n\nconst QUESTIONNAIRE_OUTCOMES_DISCARD_COMMAND = 'Questionnaire:Outcomes:Discard';\nconst QUESTIONNAIRE_OUTCOMES_ADD_SECTION_COMMAND = 'Questionnaire:Outcomes:AddSection';\n\n//#region ---- Questionnaire Outcomes Page Component ----\n\n@Component({\n selector: 'axm-questionnaire-outcomes-page',\n standalone: true,\n imports: [AXMQuestionnaireOutcomesBuilderComponent],\n template: `\n <axm-questionnaire-outcomes-builder\n #builderRef\n [value]=\"outcomesValue()\"\n [showHeader]=\"false\"\n (valueChange)=\"onOutcomesChange($event)\">\n </axm-questionnaire-outcomes-builder>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMQuestionnaireOutcomesPageComponent,\n },\n ],\n})\nexport class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {\n //#region ---- Inputs ----\n\n rootContext = input<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n\n //#endregion\n\n //#region ---- Services ----\n\n private commandService = inject(AXPCommandService);\n private eventService = inject(AXPBroadcastEventService);\n private hostPageLayout = inject(AXPPageLayoutBase, { optional: true, skipSelf: true });\n\n //#endregion\n\n //#region ---- View References ----\n\n builderRef = viewChild<AXMQuestionnaireOutcomesBuilderComponent>('builderRef');\n\n //#endregion\n\n //#region ---- State ----\n\n private localContext = signal<Record<string, unknown> | null>(null);\n private ignoreNextValueChange = signal(false);\n private baselineOutcomes = signal<QuestionnaireOutcomesValue | null | undefined>(null);\n private outcomesBaselinePendingReconcile = signal(false);\n protected isDirty = signal(false);\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n let previousRootId: unknown = undefined;\n effect(() => {\n const ctx = this.rootContext();\n const currentId = ctx != null && typeof ctx === 'object' ? ctx['id'] : undefined;\n if (currentId !== previousRootId) {\n previousRootId = currentId;\n this.localContext.set(null);\n const rootOutcomes = normalizeQuestionnaireOutcomesValue(\n ctx?.['outcomes'] as QuestionnaireOutcomesValue | null | undefined,\n );\n this.baselineOutcomes.set(this.cloneOutcomes(rootOutcomes));\n this.isDirty.set(false);\n this.outcomesBaselinePendingReconcile.set(true);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Computed ----\n\n private context = computed(() => {\n const local = this.localContext();\n if (local != null) return local;\n return this.rootContext() ?? {};\n });\n\n outcomesValue = computed((): QuestionnaireOutcomesValue => {\n const ctx = this.context();\n return normalizeQuestionnaireOutcomesValue(ctx['outcomes'] as QuestionnaireOutcomesValue | null | undefined);\n });\n\n //#endregion\n\n //#region ---- Page Actions ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n const addSectionTitle =\n (await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.actions.add-section.title',\n )) || 'Add Section';\n const discardTitle =\n (await this.translateService.translateAsync('@general:actions.discard.title')) || 'Discard';\n const saveTitle =\n (await this.translateService.translateAsync('@general:actions.save.title')) || 'Save';\n\n const addSectionAction: AXPLayoutDetailsViewAction = {\n title: addSectionTitle,\n icon: 'fa-light fa-layer-group',\n zone: 'header',\n priority: 'primary',\n color: 'primary',\n command: {\n name: QUESTIONNAIRE_OUTCOMES_ADD_SECTION_COMMAND,\n options: {},\n },\n };\n const discardAction: AXPLayoutDetailsViewAction = {\n title: discardTitle,\n icon: 'fa-light fa-rotate-left',\n zone: 'footer',\n priority: 'secondary',\n color: 'default',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_OUTCOMES_DISCARD_COMMAND,\n options: {},\n },\n };\n const saveAction: AXPLayoutDetailsViewAction = {\n title: saveTitle,\n icon: 'fa-light fa-floppy-disk',\n zone: 'footer',\n priority: 'primary',\n color: 'primary',\n visible: this.isDirty(),\n command: {\n name: QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND,\n options: {},\n },\n };\n return [addSectionAction, discardAction, saveAction];\n }\n\n //#endregion\n\n //#region ---- Command Handling ----\n\n override execute(command: AXPExecuteCommand): void | Promise<void> {\n if (command.name === QUESTIONNAIRE_OUTCOMES_DISCARD_COMMAND) {\n this.ignoreNextValueChange.set(true);\n this.localContext.set(null);\n this.isDirty.set(false);\n this.outcomesBaselinePendingReconcile.set(true);\n this.recompute();\n return;\n }\n if (command.name === QUESTIONNAIRE_OUTCOMES_ADD_SECTION_COMMAND) {\n void this.builderRef()?.addSection();\n return;\n }\n if (command.name !== QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND) {\n return;\n }\n return this.handleSaveExecute() as unknown as Promise<void>;\n }\n\n private async handleSaveExecute(): Promise<AXPExecuteCommandResult> {\n const ctx = this.localContext() ?? this.rootContext() ?? {};\n const id = typeof ctx['id'] === 'string' ? ctx['id'] : undefined;\n const outcomes = normalizeQuestionnaireOutcomesValue(\n ctx['outcomes'] as QuestionnaireOutcomesValue | null | undefined,\n );\n\n if (!id) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n if (findDuplicateOutcomeNames(outcomes).length > 0) {\n return {\n success: false,\n message: {\n text: await this.translateService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-outcomes-builder.validation.duplicate-name',\n ),\n },\n };\n }\n\n const input: SaveQuestionnaireOutcomesInput = { id, outcomes };\n const result = await this.commandService.execute<SaveQuestionnaireOutcomesInput, unknown>(\n QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND,\n input,\n );\n\n const execResult = (result ?? { success: false }) as AXPExecuteCommandResult;\n\n if (execResult.success) {\n this.baselineOutcomes.set(this.cloneOutcomes(outcomes));\n this.localContext.set(null);\n this.isDirty.set(false);\n this.outcomesBaselinePendingReconcile.set(true);\n this.recompute();\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, {\n name: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}`,\n });\n }\n\n return execResult;\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n onOutcomesChange(value: QuestionnaireOutcomesValue): void {\n if (this.ignoreNextValueChange()) {\n this.ignoreNextValueChange.set(false);\n return;\n }\n const current = this.outcomesValue();\n if (this.areOutcomesEqual(current, value)) {\n if (this.outcomesBaselinePendingReconcile()) {\n this.baselineOutcomes.set(this.cloneOutcomes(current));\n this.outcomesBaselinePendingReconcile.set(false);\n this.isDirty.set(false);\n }\n return;\n }\n const base = this.localContext() ?? this.rootContext() ?? {};\n\n if (this.outcomesBaselinePendingReconcile() && this.localContext() == null) {\n this.baselineOutcomes.set(this.cloneOutcomes(value));\n this.isDirty.set(false);\n this.outcomesBaselinePendingReconcile.set(false);\n this.localContext.set({ ...base, outcomes: value });\n this.recompute();\n return;\n }\n\n this.localContext.set({ ...base, outcomes: value });\n const baseline = this.baselineOutcomes();\n this.isDirty.set(!this.areOutcomesEqual(baseline, value));\n this.recompute();\n }\n\n //#endregion\n\n //#region ---- Utility ----\n\n private areOutcomesEqual(\n a: QuestionnaireOutcomesValue | null | undefined,\n b: QuestionnaireOutcomesValue | null | undefined,\n ): boolean {\n return isEqual(normalizeQuestionnaireOutcomesValue(a), normalizeQuestionnaireOutcomesValue(b));\n }\n\n private cloneOutcomes(value: QuestionnaireOutcomesValue | null | undefined): QuestionnaireOutcomesValue {\n if (isNil(value)) {\n return { sections: [] };\n }\n return cloneDeep(normalizeQuestionnaireOutcomesValue(value));\n }\n\n protected override recompute(): void {\n super.recompute();\n const maybeLayout = this.hostPageLayout as unknown as { recompute?: () => void };\n maybeLayout.recompute?.();\n }\n\n //#endregion\n}\n\n//#endregion\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY } from './QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY';\n\n//#region ---- Questionnaire Outcomes Page Component Provider ----\n\n@Injectable()\nexport class AXMQuestionnaireOutcomesPageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./questionnaire-outcomes-page.component').then(\n (m) => m.AXMQuestionnaireOutcomesPageComponent,\n ),\n },\n ];\n }\n}\n\n//#endregion\n","//#region ---- Outcomes builder exports ----\n\nexport * from './builder/questionnaire-outcomes-builder.component';\nexport * from './builder/questionnaire-outcomes-builder.types';\nexport * from './pages/questionnaire-outcomes-page';\n\n//#endregion\n","//#region ---- Questionnaire builder feature exports ----\n\nexport * from './questions';\nexport * from './outcomes';\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { 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 { RootConfig } from '../../const';\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 {\n mergeQuestionHintForViewer,\n normalizeQuestionHintFromEntityRow,\n parseQuestionHintPartialFromRecord,\n} from '../../entities/question-bank-item/question-hint.types';\nimport type { AXMAssessmentManagementQuestionnaireEntityModel } from '../../entities/questionnaire/questionnaire.types';\nimport {\n QuestionnaireBuilderValue,\n isQuestionnaireItemStaticallyRequired,\n} from '../questionnaire-builder';\nimport { AXMQuestionnaireViewerService } from './questionnaire-viewer.service';\nimport {\n QuestionnaireValidationStrategy,\n QuestionnaireViewerAttachment,\n QuestionnaireViewerConfig,\n QuestionnaireViewerData,\n QuestionnaireViewerQuestion,\n QuestionnaireViewerSection,\n} from './questionnaire-viewer.types';\nimport { resolveQuestionBankItemPlainLabel, stripHtmlToPlain } from './utils/pre-post-content.utils';\nimport { isQuestionnaireAnswerValueEmpty } from './utils/questionnaire-answer.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 (\n value != null &&\n typeof value === 'object' &&\n 'id' in value &&\n typeof (value as { id?: unknown }).id === 'string'\n ) {\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((sec) => visibleQuestionsForSection(sec, sectionCache, questionCache).length > 0);\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\n ? displaySettingsViewMode\n : 'single-page';\n }),\n\n isReadonly: computed(() => store.config()?.readonly === true),\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\n ? displaySettingsValue\n : '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 = isQuestionnaireAnswerValueEmpty(value);\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 =\n configValue !== undefined\n ? configValue\n : displaySettingsValue !== undefined\n ? displaySettingsValue\n : 'answered';\n\n // Calculate view mode\n const configMode = config?.viewMode;\n const displaySettingsViewMode = displaySettings?.viewMode;\n const viewMode =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 = isQuestionnaireAnswerValueEmpty(value);\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 ? configValue : 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\n ? displaySettingsValue\n : 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 ? configValue : 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\n ? displaySettingsValue\n : 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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 = isQuestionnaireAnswerValueEmpty(value);\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(\n id: string,\n initialAnswers?: Record<string, any>,\n config?: QuestionnaireViewerConfig,\n ): 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(questionDetails?.interface);\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(\n structure: QuestionnaireBuilderValue,\n config?: QuestionnaireViewerConfig,\n initialAnswers?: Record<string, any>,\n ): 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 = 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 // 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(section, store.sectionVisibilityById(), store.questionVisibilityById()).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(section, store.sectionVisibilityById(), store.questionVisibilityById());\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(question.isVisible, question.name, store.questionVisibilityById());\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\n ? displaySettingsViewMode\n : '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 = isQuestionnaireAnswerValueEmpty(value);\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 || cVal === undefined || (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 = isQuestionnaireAnswerValueEmpty(value);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync('@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 ? resolveMultiLanguageString(section.title, locale) : 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 || cVal === undefined || (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 ? resolveMultiLanguageString(section.title, locale) : 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 =\n (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:\n (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 = isQuestionnaireAnswerValueEmpty(value);\n\n if (isEmpty) {\n const questionTitle = resolveQuestionBankItemPlainLabel(question.question, locale);\n const errorMessage =\n (await translationService.translateAsync('@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 || cVal === undefined || (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 =\n (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:\n (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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 =\n configMode !== undefined\n ? configMode\n : displaySettingsViewMode !== undefined\n ? displaySettingsViewMode\n : '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 = isQuestionnaireAnswerValueEmpty(value);\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 || cVal === undefined || (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 = isQuestionnaireAnswerValueEmpty(value);\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 /**\n * Returns current answers without required-field validation (draft save).\n */\n saveDraft(): {\n success: boolean;\n answers: Record<string, any>;\n } {\n return {\n success: true,\n answers: this.getAllAnswers(),\n };\n },\n\n async submit(): Promise<{\n success: boolean;\n answers: Record<string, any>;\n errors?: QuestionnaireValidationError[];\n }> {\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\n","//#region ---- Imports ----\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\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 { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { containsHtmlMarkup } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { get } from 'lodash-es';\nimport { getQuestionAnswerCommentStoragePath } from '../../../../entities/question-bank-item/question-comment.types';\nimport type { AXMAssessmentQuestionHintConfigShown } from '../../../../entities/question-bank-item/question-hint.types';\nimport { isQuestionnaireItemRequiredForDisplay } from '../../../questionnaire-builder';\nimport { QuestionnaireViewerAttachment, QuestionnaireViewerQuestion } from '../../questionnaire-viewer.types';\nimport { AXMQuestionnaireViewerViewModel } from '../../questionnaire-viewer.viewmodel';\nimport { isQuestionnaireAnswerValueEmpty } from '../../utils/questionnaire-answer.utils';\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 class=\"__question-item\" [class.__answered]=\"isAnswered()\" [class.__view-mode]=\"effectiveMode() === 'view'\">\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 | translate | async)?.trim()!.length > 0) {\n @if (containsHtmlMarkup((qBody | translate | async)?.trim())) {\n <div\n class=\"__question-title __question-title--rich\"\n [innerHTML]=\"qBody | translate | async | safe: 'html'\"\n ></div>\n } @else {\n <h3 class=\"__question-title\">{{ (qBody | translate | async)?.trim() }}</h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | translate | async }}\n </h3>\n }\n } @else {\n <h3 class=\"__question-title\">\n {{ question().question.title | translate | async }}\n </h3>\n }\n </div>\n @if (isAnswered()) {\n <span class=\"__answered-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.answered'\n | translate\n | async\n }}</span>\n } @else if (showRequiredBadge()) {\n <span class=\"__required-badge\">{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.badges.required'\n | translate\n | async\n }}</span>\n }\n </div>\n </div>\n <!-- Question Note -->\n @if (question().question.note; as noteRaw) {\n @if (noteRaw !== '' && (noteRaw | translate | async)?.trim()) {\n <div class=\"__question-note\" [innerHTML]=\"noteRaw | translate | async | safe: 'html'\"></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]=\"effectiveMode()\"></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 | translate | async)?.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 | translate | async | safe: 'html'\"></div>\n </ax-content>\n </ax-alert>\n }\n }\n }\n\n @if (question().comment.enabled) {\n @if (effectiveMode() === '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'\n | translate\n | 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\"\n >{{\n '@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title'\n | translate\n | async\n }}:</span\n >\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 AXTextAreaModule,\n AXFormModule,\n FormsModule,\n ],\n encapsulation: ViewEncapsulation.None,\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 /**\n * Resolves question render mode from explicit input or viewer readonly config.\n */\n effectiveMode = computed((): 'edit' | 'view' => {\n if (this.mode() === 'view') {\n return 'view';\n }\n return this.vm?.isReadonly?.() ? 'view' : 'edit';\n });\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':\n return 'primary';\n case 'warning':\n return 'warning';\n case 'danger':\n return 'danger';\n case 'success':\n return 'success';\n case 'neutral':\n return 'default';\n default:\n 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 = isQuestionnaireAnswerValueEmpty(value);\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.effectiveMode() === '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 { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { containsHtmlMarkup, type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/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() | translate | async }}\n </h2>\n @if (description(); as desc) {\n @if ((desc | translate | async)?.trim()!.length > 0) {\n @if (containsHtmlMarkup((desc | translate | async)?.trim())) {\n <div\n class=\"__section-description __section-description--rich\"\n [innerHTML]=\"desc | translate | async | safe: 'html'\"\n ></div>\n } @else {\n <p class=\"__section-description\">\n {{ (desc | translate | async)?.trim() }}\n </p>\n }\n }\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AsyncPipe],\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 /**\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 templateUrl: './single-page-view.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './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","@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 >\n <axm-questionnaire-viewer-section-header\n [title]=\"section.title\"\n [description]=\"section.description\"\n [titleSize]=\"'md'\"\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","//#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 templateUrl: './page-per-group-view.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './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","@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 >\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","//#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 templateUrl: './page-per-question-view.component.html',\n encapsulation: ViewEncapsulation.None,\n styleUrl: './page-per-question-view.component.scss',\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","@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 >\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 >\n </axm-questionnaire-viewer-question>\n </div>\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 { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPStickyDirective } from '@acorex/platform/common';\nimport { AXPDeviceService } from '@acorex/platform/core';\nimport { AsyncPipe } from '@angular/common';\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 templateUrl: './side-menu-view.component.html',\n styleUrl: './side-menu-view.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n AXMQuestionnaireViewerQuestionComponent,\n AXMQuestionnaireViewerSectionHeaderComponent,\n AXTabsModule,\n AXBadgeModule,\n AXDrawerModule,\n AXDrawerDirectiveModule,\n AXResizableDirective,\n AXButtonModule,\n AXDecoratorModule,\n AXPStickyDirective,\n AsyncPipe,\n AXTranslationModule,\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 // Side-menu scrolls inside .__main-content; axpSticky must listen to that element, not an outer ancestor.\n this.stickyParent.set(mainContent ?? this.findScrollParent(this.host.nativeElement));\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","<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 | translate | async) || ''\"\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 | translate | async) || ''\"\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=\"__page-section\">\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=\"__page-section\">\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","//#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';\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 * Collect answers for draft save (no required-field validation).\n */\n saveDraft() {\n return this.vm.saveDraft();\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, resolveMultiLanguageString } from '@acorex/core/translation';\nimport {\n AXPExpressionEvaluatorScopeProvider,\n AXPExpressionEvaluatorScopeProviderContext,\n AXPFilterDefinition,\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';\nimport { flattenQuestionnaireOutcomeItems } from '../../entities/questionnaire/questionnaire.types';\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 = 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\n const filterDefinitionsImpl = async (questionnaireId: string): Promise<AXPFilterDefinition[]> => {\n if (!questionnaireId) {\n return [];\n }\n\n try {\n const dataAccessor = this.entityService.withEntity(questionnaireEntity).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.withEntity(questionBankEntity).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 ? questionBankMap.get(item.questionBankItemId) : 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 embedded questionnaire outcomes (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.withEntity(questionnaireEntity).data<any, any>();\n const questionnaire = await dataAccessor.byKey(questionnaireId);\n const rules = flattenQuestionnaireOutcomeItems(questionnaire?.outcomes);\n const locale = this.translationService.getActiveLang() ?? 'en-US';\n return rules.map((rule, order) => ({\n id: rule.id,\n field: `rules.${rule.name}`,\n title: resolveMultiLanguageString(rule.title, locale) || 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 outcomes 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}:ViewOutcomes`,\n command: () => import('./commands/view-session-outcomes.command').then((c) => c.ViewSessionOutcomesCommand),\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 key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:ViewLastSessionAnswers`,\n command: () =>\n import('./commands/view-case-last-session-answers.command').then(\n (c) => c.ViewCaseLastSessionAnswersCommand,\n ),\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/questions/pages/questionnaire-questions-page').then(\n (m) => m.AXMQuestionnaireQuestionsPageComponentProvider\n ),\n ),\n provideLazyProvider(AXP_PAGE_COMPONENT_PROVIDER, () =>\n import('./features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page').then(\n (m) => m.AXMQuestionnaireOutcomesPageComponentProvider\n ),\n ),\n provideCommand(\n 'Questionnaire:Questions:Save',\n () =>\n import('./features/questionnaire-builder/questions/pages/questionnaire-questions-page/save-questionnaire-questions.command').then(\n (m) => m.AXMSaveQuestionnaireQuestionsCommand\n )\n ),\n provideCommand(\n 'Questionnaire:Outcomes:Save',\n () =>\n import('./features/questionnaire-builder/outcomes/pages/questionnaire-outcomes-page/save-questionnaire-outcomes.command').then(\n (m) => m.AXMSaveQuestionnaireOutcomesCommand\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 outcomes (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 ---- Types ----\n\nimport { AXPEntityReference } from '@acorex/platform/core';\nimport { AXPEntityModel } from '@acorex/platform/layout/entity';\n\nexport type AXMAssessmentCaseStatus =\n | 'draft'\n | 'active'\n | 'in-progress'\n | 'closed'\n | '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 /**\n * Target entity (e.g. AssetManagement.Asset, HumanCapital.Employee).\n */\n subjectRef: AXPEntityReference;\n\n /** Status plugin field (`assessment-management.status.case`). */\n statusId?: 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 plugin field (`assessment-management.status.session`). */\n statusId?: AXMAssessmentSessionStatus;\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 /**\n * Evaluated questionnaire outcome values (rule `name` → value), snapshot at submit.\n */\n outcomes?: Record<string, unknown>;\n\n // Override chain\n previousId?: string;\n}\n\n//#endregion\n\n","//#region ---- Imports ----\n\nimport { AXPSystemStatusType } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { defaultTo, first, get, isEmpty, isObject } from 'lodash-es';\nimport { QuestionnaireBuilderValue } from '../../questionnaire-builder';\nimport type { AXMAssessmentManagementAssessmentCaseEntityModel } from '../../../entities/assessment-case/assessment-case.types';\nimport type { AXMAssessmentManagementAssessmentSessionEntityModel } from '../../../entities/assessment-session/assessment-session.types';\nimport { RootConfig } from '../../../const';\nimport { AXMQuestionnaireViewerService } from '../questionnaire-viewer.service';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface PersistAssessmentSessionProgressMetrics {\n answeredQuestionsCount: number;\n progressPercentage: number;\n}\n\nexport interface PersistAssessmentSessionInput {\n entityService: AXPEntityService;\n questionnaireViewerService: AXMQuestionnaireViewerService;\n caseId: string;\n sessionId: string | null;\n existingSession: AXMAssessmentManagementAssessmentSessionEntityModel | null;\n responderId: string;\n role: AXMAssessmentManagementAssessmentSessionEntityModel['role'];\n structure: QuestionnaireBuilderValue;\n questionnaireId: string;\n answers: Record<string, unknown>;\n finalize: boolean;\n /** When provided (e.g. from live viewer), overrides structure-based progress calculation. */\n progressMetrics?: PersistAssessmentSessionProgressMetrics;\n /** Elapsed seconds from questionnaire viewer timer. */\n timeSpentSeconds?: number;\n}\n\nexport interface PersistAssessmentSessionResult {\n sessionId: string;\n}\n\n//#endregion\n\n//#region ---- Persistence ----\n\n/**\n * Loads a session by id using list query first, then byKey.\n */\nasync function loadSessionById(\n entityService: AXPEntityService,\n sessionId: string,\n): Promise<AXMAssessmentManagementAssessmentSessionEntityModel | null> {\n const sessionAccessor = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n const listMatch = await sessionAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: sessionId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await sessionAccessor.byKey(sessionId), null);\n}\n\n/**\n * Loads assessment case by id using query first, then byKey.\n */\nasync function loadCaseById(\n entityService: AXPEntityService,\n caseId: string,\n): Promise<AXMAssessmentManagementAssessmentCaseEntityModel | null> {\n const caseAccessor = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>();\n\n const listMatch = await caseAccessor.query({\n skip: 0,\n take: 1,\n filter: {\n field: 'id',\n operator: { type: 'equal' },\n value: caseId,\n },\n });\n\n const fromQuery = first(listMatch.items);\n if (fromQuery) {\n return fromQuery;\n }\n\n return defaultTo(await caseAccessor.byKey(caseId), null);\n}\n\n/**\n * Bumps case audit metadata by performing a domain update (history middleware sets auditInfo.updated.at).\n */\nasync function touchAssessmentCaseActivity(\n entityService: AXPEntityService,\n caseId: string,\n): Promise<void> {\n const assessmentCase = await loadCaseById(entityService, caseId);\n if (!assessmentCase) {\n return;\n }\n\n const caseAccessor = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentCase.name)\n .data<string, AXMAssessmentManagementAssessmentCaseEntityModel>();\n\n const caseStatus = assessmentCase.statusId;\n const nextCaseStatus =\n caseStatus === AXPSystemStatusType.Closed || caseStatus === AXPSystemStatusType.Cancelled\n ? caseStatus\n : AXPSystemStatusType.InProgress;\n\n await caseAccessor.update(caseId, { statusId: nextCaseStatus });\n}\n\n/**\n * Upserts assessment session answers and status; moves case to in-progress when saving or submitting.\n */\nexport async function persistAssessmentSession(\n input: PersistAssessmentSessionInput,\n): Promise<PersistAssessmentSessionResult> {\n const {\n entityService,\n questionnaireViewerService,\n caseId,\n sessionId,\n existingSession,\n responderId,\n role,\n structure,\n answers,\n finalize,\n progressMetrics,\n timeSpentSeconds,\n } = input;\n\n const calculatedProgress = questionnaireViewerService.calculateProgressFromStructure(structure, answers);\n const answeredQuestionsCount = defaultTo(\n get(progressMetrics, 'answeredQuestionsCount'),\n calculatedProgress.answeredQuestionsCount,\n );\n const progressPercentage = defaultTo(\n get(progressMetrics, 'progressPercentage'),\n calculatedProgress.progressPercentage,\n );\n const now = new Date();\n\n const sessionAccessor = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>();\n\n let resolvedSessionId = sessionId;\n let currentSession = existingSession;\n\n if (resolvedSessionId && !currentSession) {\n currentSession = await loadSessionById(entityService, resolvedSessionId);\n }\n\n const sessionStatusId = finalize\n ? 'submitted'\n : get(currentSession, 'statusId') === 'submitted'\n ? 'submitted'\n : AXPSystemStatusType.InProgress;\n\n const sessionData: Record<string, unknown> = {\n caseId,\n responderId,\n role,\n answers,\n progressPercentage,\n answeredQuestionsCount,\n lastSavedAt: now,\n statusId: sessionStatusId,\n };\n\n if (isEmpty(get(currentSession, 'startedAt'))) {\n sessionData['startedAt'] = now;\n }\n\n if (timeSpentSeconds != null && timeSpentSeconds >= 0) {\n sessionData['timeSpent'] = timeSpentSeconds;\n }\n\n const questionnaireId = input.questionnaireId;\n if (questionnaireId) {\n const { values } = await questionnaireViewerService.evaluateOutcomes(answers, {\n questionnaireId,\n structure,\n });\n if (isObject(values) && !isEmpty(values)) {\n sessionData['outcomes'] = values;\n }\n }\n\n if (resolvedSessionId) {\n await sessionAccessor.update(resolvedSessionId, sessionData);\n } else {\n sessionData['startedAt'] = now;\n resolvedSessionId = await sessionAccessor.create(\n sessionData as Omit<AXMAssessmentManagementAssessmentSessionEntityModel, 'id'>,\n );\n }\n\n await touchAssessmentCaseActivity(entityService, caseId);\n\n return { sessionId: resolvedSessionId! };\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXSafePipe } from '@acorex/core/pipes';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/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\n 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 >\n <div\n class=\"ax-max-w-2xl ax-w-full ax-prose ax-text-on-surface\"\n [innerHTML]=\"content() | translate | async | safe: 'html'\"\n ></div>\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AXSafePipe, AsyncPipe],\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 //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { resolveMultiLanguageString } from '@acorex/core/translation';\nimport type { AXPMultiLanguageString } from '@acorex/platform/core';\nimport type {\n AXPOutcomeResultRow,\n AXPOutcomeResultsViewModel,\n AXPOutcomeResultSection,\n AXPOutcomeResultValuePresentation,\n} from '@acorex/platform/layout/components';\nimport {\n isQuestionnaireOutcomeDisplayColorHex,\n parseQuestionnaireOutcomeDisplayColor,\n} from '../../../entities/questionnaire/questionnaire.types';\nimport type { OutcomeResultDisplay, OutcomeResultEntry, OutcomeResultSectionGroup } from './pre-post-content.utils';\nimport type { SummaryPlaceholderValues } from './pre-post-content.utils';\n\n//#endregion\n\n//#region ---- Presentation ----\n\n/**\n * Maps questionnaire outcome display metadata to platform value chip classes/styles.\n */\nexport function mapOutcomeDisplayToValuePresentation(display?: OutcomeResultDisplay): AXPOutcomeResultValuePresentation {\n const classes = ['__outcome-value'];\n if (display?.emphasis === 'medium') {\n classes.push('__emphasis-medium');\n } else if (display?.emphasis === 'bold') {\n classes.push('__emphasis-bold');\n }\n\n if (!display?.color) {\n classes.push('__tone-default');\n return { classes: classes.join(' ') };\n }\n\n const parsed = parseQuestionnaireOutcomeDisplayColor(display.color);\n if (!parsed) {\n classes.push('__tone-default');\n return { classes: classes.join(' ') };\n }\n\n if (isQuestionnaireOutcomeDisplayColorHex(parsed.background)) {\n return {\n classes: classes.join(' '),\n color: parsed.foreground,\n backgroundColor: parsed.background,\n borderColor: parsed.border,\n };\n }\n\n return {\n classes: [...classes, parsed.foreground, parsed.background, parsed.border].join(' '),\n };\n}\n\nfunction mapOutcomeRow(entry: OutcomeResultEntry): AXPOutcomeResultRow {\n return {\n key: entry.key,\n label: entry.label,\n value: entry.value,\n iconClass: entry.display?.iconClass,\n valuePresentation: mapOutcomeDisplayToValuePresentation(entry.display),\n };\n}\n\nfunction resolveSectionText(value: AXPMultiLanguageString | undefined, locale: string, fallback: string): string {\n const resolved = resolveMultiLanguageString(value, locale).trim();\n return resolved.length > 0 ? resolved : fallback;\n}\n\n//#endregion\n\n//#region ---- View model ----\n\n/**\n * Maps post-submit placeholder values or snapshot sections to {@link AXPOutcomeResultsViewModel}.\n */\nexport function mapToOutcomeResultsViewModel(\n source: Pick<SummaryPlaceholderValues, 'outcomeSections' | 'outcomes' | 'outcomeTitles'> | null | undefined,\n options?: { locale?: string },\n): AXPOutcomeResultsViewModel {\n const locale = options?.locale ?? 'en-US';\n const sections = source?.outcomeSections;\n if (Array.isArray(sections) && sections.length > 0) {\n return {\n sections: sections.map((group) => mapSectionGroup(group, locale)),\n rows: sections.length === 1 ? sections[0].items.map(mapOutcomeRow) : undefined,\n };\n }\n\n const outcomes = source?.outcomes;\n const titles = source?.outcomeTitles;\n if (!outcomes || typeof outcomes !== 'object') {\n return { rows: [] };\n }\n\n const rows = Object.entries(outcomes).map(([key, value]) =>\n mapOutcomeRow({\n key,\n value,\n label: (titles?.[key] ?? '').trim() || humanizeOutcomeKey(key),\n }),\n );\n\n return { rows };\n}\n\nfunction mapSectionGroup(group: OutcomeResultSectionGroup, locale: string): AXPOutcomeResultSection {\n const fallbackTitle = group.sectionName || group.trackKey;\n return {\n trackKey: group.trackKey,\n title: resolveSectionText(group.sectionTitle, locale, fallbackTitle),\n description: group.sectionDescription\n ? resolveSectionText(group.sectionDescription, locale, '')\n : undefined,\n items: group.items.map(mapOutcomeRow),\n };\n}\n\nfunction 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//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPOutcomeResultsViewerComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport type { SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { mapToOutcomeResultsViewModel } from '../../utils/outcome-results-view.mapper';\n\n//#endregion\n\n//#region ---- Component ----\n\n/**\n * Post-submit outcome results step; delegates presentation to {@link AXPOutcomeResultsViewerComponent}.\n */\n@Component({\n selector: 'axm-questionnaire-outcome-results',\n template: `\n <axp-outcome-results-viewer\n [model]=\"viewModel()\"\n [title]=\"\n ('@assessment-management:questionnaires.components.questionnaire-viewer.flow.outcomes-section-title'\n | translate\n | async) ?? ''\n \"\n [emptyMessage]=\"\n ('@assessment-management:questionnaires.components.questionnaire-viewer.flow.no-outcomes'\n | translate\n | async) ?? ''\n \"\n />\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXTranslationModule, AsyncPipe, AXPOutcomeResultsViewerComponent],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'axm-questionnaire-outcome-results ax-block' },\n})\nexport class AXMQuestionnaireOutcomeResultsComponent {\n //#region ---- Services & Dependencies ----\n\n private readonly translationService = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /** Evaluated outcomes, titles, and optional grouped sections from the viewer service. */\n placeholderValues = input<SummaryPlaceholderValues | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected readonly viewModel = computed(() => {\n const locale = this.translationService.getActiveLang?.() ?? 'en-US';\n return mapToOutcomeResultsViewModel(this.placeholderValues(), { locale });\n });\n\n //#endregion\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXTranslationModule, AXTranslationService, resolveMultiLanguageString } from '@acorex/core/translation';\nimport { type AXPMultiLanguageString } from '@acorex/platform/core';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, input, ViewEncapsulation } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport type { PrePostContentValue } from '../../../../entities/questionnaire/questionnaire.types';\nimport type { QuestionnaireViewerQuestion } from '../../questionnaire-viewer.types';\nimport { resolveSummaryPlaceholders, type SummaryPlaceholderValues } from '../../utils/pre-post-content.utils';\nimport { AXMQuestionnaireOutcomeResultsComponent } from '../outcome-results/questionnaire-outcome-results.component';\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` = outcome 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\n class=\"axm-post-questionnaire-content __review ax-flex ax-flex-col ax-overflow-auto ax-min-h-full ax-text-on-surface\"\n >\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\">\n {{\n '@assessment-management:questionnaires.components.questionnaire-viewer.flow.review-title'\n | translate\n | async\n }}\n </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\n class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-overflow-hidden ax-shadow-sm\"\n >\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\n class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\"\n >\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\n class=\"__review-question-card ax-lighter-surface ax-rounded-lg ax-border ax-border-surface ax-p-4 ax-shadow-sm\"\n >\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 <axm-questionnaire-outcome-results [placeholderValues]=\"placeholderValues()\" />\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 AXMQuestionnaireOutcomeResultsComponent,\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 (outcome 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 outcome values. */\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 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 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))\n 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';\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 { persistAssessmentSession } from '../../utils/assessment-session-persistence.util';\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 protected readonly existingSession = signal<AXMAssessmentManagementAssessmentSessionEntityModel | 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) {\n if (session.answers) {\n answers = session.answers;\n }\n this.currentSessionId.set(existingSessionId);\n this.existingSession.set(session);\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.showOutcomeResults === 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 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 vm = this.viewerViewModel();\n const result = await persistAssessmentSession({\n entityService: this.entityService,\n questionnaireViewerService: this.questionnaireViewerService,\n caseId: caseIdVal,\n sessionId: this.currentSessionId(),\n existingSession: this.existingSession(),\n responderId,\n role: 'responder' satisfies AXMAssessmentSessionRole,\n structure: structureVal,\n questionnaireId: q.id,\n answers,\n finalize: true,\n progressMetrics: vm\n ? {\n answeredQuestionsCount: vm.answeredQuestionsCount(),\n progressPercentage: vm.progressPercentage(),\n }\n : undefined,\n timeSpentSeconds: vm?.timerElapsed(),\n });\n\n this.currentSessionId.set(result.sessionId);\n const session = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(result.sessionId);\n if (session) {\n this.existingSession.set(session);\n }\n\n this.toastService.show({\n color: 'success',\n title: await this.translateService.translateAsync('@assessment-management:sessions.states.submitted'),\n content: '',\n });\n\n const elapsed = vm?.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';\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 { persistAssessmentSession } from '../../utils/assessment-session-persistence.util';\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 protected readonly sessionId = signal<string | null>(null);\n protected readonly existingSession = signal<AXMAssessmentManagementAssessmentSessionEntityModel | 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 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 this.sessionId.set(sessionId);\n this.existingSession.set(session);\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 sessionIdVal = this.sessionId();\n const structureVal = this.structure();\n const q = this.questionnaire();\n const session = this.existingSession();\n if (!sessionIdVal || !structureVal || !q || !session) return null;\n\n const vm = this.viewerViewModel();\n const result = await persistAssessmentSession({\n entityService: this.entityService,\n questionnaireViewerService: this.questionnaireViewerService,\n caseId: session.caseId,\n sessionId: sessionIdVal,\n existingSession: session,\n responderId: session.responderId,\n role: session.role,\n structure: structureVal,\n questionnaireId: q.id,\n answers,\n finalize: true,\n progressMetrics: vm\n ? {\n answeredQuestionsCount: vm.answeredQuestionsCount(),\n progressPercentage: vm.progressPercentage(),\n }\n : undefined,\n timeSpentSeconds: vm?.timerElapsed(),\n });\n\n const updated = await this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)\n .data<string, AXMAssessmentManagementAssessmentSessionEntityModel>()\n .byKey(result.sessionId);\n if (updated) {\n this.existingSession.set(updated);\n }\n\n const elapsed = vm?.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.showOutcomeResults === 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","i2","i3","i4","i1","i5","i6"],"mappings":"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"}
|