@acorex/modules 21.0.0-next.70 → 21.0.0-next.71

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.
Files changed (166) hide show
  1. package/fesm2022/acorex-modules-ai-management.mjs +7 -11
  2. package/fesm2022/acorex-modules-ai-management.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-IHgQ8RVH.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-BnfSTevp.mjs} +654 -496
  4. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BnfSTevp.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B95yBXgi.mjs → acorex-modules-assessment-management-assessment-case.entity-BWMbcZFT.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-B95yBXgi.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BWMbcZFT.mjs.map} +1 -1
  7. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-Jhy94fgV.mjs → acorex-modules-assessment-management-assessment-session-answers-view.util-B42XNJUV.mjs} +2 -2
  8. package/fesm2022/{acorex-modules-assessment-management-assessment-session-answers-view.util-Jhy94fgV.mjs.map → acorex-modules-assessment-management-assessment-session-answers-view.util-B42XNJUV.mjs.map} +1 -1
  9. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DBhBxqh1.mjs → acorex-modules-assessment-management-assessment-session.entity-osEWRiw1.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-DBhBxqh1.mjs.map → acorex-modules-assessment-management-assessment-session.entity-osEWRiw1.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs → acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs} +3 -3
  12. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs.map +1 -0
  13. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs → acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs.map → acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs → acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs} +18 -9
  16. package/fesm2022/acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs.map +1 -0
  17. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-RLIfWCzq.mjs → acorex-modules-assessment-management-question-bank-item.entity-DZBQOgAg.mjs} +3 -2
  20. package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-DZBQOgAg.mjs.map +1 -0
  21. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-B8LMKqVO.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BMv-XkZk.mjs} +19 -5
  22. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-BMv-XkZk.mjs.map +1 -0
  23. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CZBnfCYE.mjs → acorex-modules-assessment-management-questionnaire.entity-BGkWU83k.mjs} +4 -2
  24. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-BGkWU83k.mjs.map +1 -0
  25. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs → acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs} +3 -3
  26. package/fesm2022/{acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs.map → acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs → acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs} +3 -3
  28. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs.map → acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs.map} +1 -1
  29. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  30. package/fesm2022/{acorex-modules-auth-acorex-modules-auth-BUuEzfsI.mjs → acorex-modules-auth-acorex-modules-auth-BKMD5v6t.mjs} +17 -13
  31. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BKMD5v6t.mjs.map +1 -0
  32. package/fesm2022/{acorex-modules-auth-app-chooser.component-DnmLfX5x.mjs → acorex-modules-auth-app-chooser.component-DTlzE1Rd.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-auth-app-chooser.component-DnmLfX5x.mjs.map → acorex-modules-auth-app-chooser.component-DTlzE1Rd.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-auth-login.module-D1-POhQk.mjs → acorex-modules-auth-login.module-DSQfhKUZ.mjs} +4 -4
  35. package/fesm2022/{acorex-modules-auth-login.module-D1-POhQk.mjs.map → acorex-modules-auth-login.module-DSQfhKUZ.mjs.map} +1 -1
  36. package/fesm2022/acorex-modules-auth-master.layout-BDM5XtcM.mjs +25 -0
  37. package/fesm2022/acorex-modules-auth-master.layout-BDM5XtcM.mjs.map +1 -0
  38. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BhfFPeWT.mjs → acorex-modules-auth-oauth-callback.component-C4Q78fuo.mjs} +2 -2
  39. package/fesm2022/{acorex-modules-auth-oauth-callback.component-BhfFPeWT.mjs.map → acorex-modules-auth-oauth-callback.component-C4Q78fuo.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-auth-password.component-BMVSHYy7.mjs → acorex-modules-auth-password.component-C_55t9er.mjs} +2 -2
  41. package/fesm2022/{acorex-modules-auth-password.component-BMVSHYy7.mjs.map → acorex-modules-auth-password.component-C_55t9er.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-auth-password.component-Cm8DsDvu.mjs → acorex-modules-auth-password.component-VwEsbfR1.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-auth-password.component-Cm8DsDvu.mjs.map → acorex-modules-auth-password.component-VwEsbfR1.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-auth-routes-B85OzgW1.mjs → acorex-modules-auth-routes-prPiMAL6.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-auth-routes-B85OzgW1.mjs.map → acorex-modules-auth-routes-prPiMAL6.mjs.map} +1 -1
  46. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D6_rL2WP.mjs → acorex-modules-auth-tenant-chooser.component-DVyI9cGU.mjs} +2 -2
  47. package/fesm2022/{acorex-modules-auth-tenant-chooser.component-D6_rL2WP.mjs.map → acorex-modules-auth-tenant-chooser.component-DVyI9cGU.mjs.map} +1 -1
  48. package/fesm2022/{acorex-modules-auth-two-factor.module-DfyDQIw-.mjs → acorex-modules-auth-two-factor.module-C7vZrBHK.mjs} +2 -2
  49. package/fesm2022/{acorex-modules-auth-two-factor.module-DfyDQIw-.mjs.map → acorex-modules-auth-two-factor.module-C7vZrBHK.mjs.map} +1 -1
  50. package/fesm2022/{acorex-modules-auth-user-sessions.component-gJSHI_eh.mjs → acorex-modules-auth-user-sessions.component-ChF8OYdd.mjs} +2 -2
  51. package/fesm2022/{acorex-modules-auth-user-sessions.component-gJSHI_eh.mjs.map → acorex-modules-auth-user-sessions.component-ChF8OYdd.mjs.map} +1 -1
  52. package/fesm2022/acorex-modules-auth.mjs +1 -1
  53. package/fesm2022/acorex-modules-common.mjs +462 -5
  54. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  55. package/fesm2022/{acorex-modules-content-management-acorex-modules-content-management-txpooXrE.mjs → acorex-modules-content-management-acorex-modules-content-management-Bc_tCoHa.mjs} +6 -6
  56. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-Bc_tCoHa.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-D9woYm2m.mjs → acorex-modules-content-management-permission-definition.provider-2-_i1Kxd.mjs} +2 -2
  58. package/fesm2022/{acorex-modules-content-management-permission-definition.provider-D9woYm2m.mjs.map → acorex-modules-content-management-permission-definition.provider-2-_i1Kxd.mjs.map} +1 -1
  59. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-CQa1h31v.mjs → acorex-modules-content-management-template-content-editor-widget-edit.component-BdNwhaJ8.mjs} +2 -2
  60. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-edit.component-CQa1h31v.mjs.map → acorex-modules-content-management-template-content-editor-widget-edit.component-BdNwhaJ8.mjs.map} +1 -1
  61. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DzM4oMNV.mjs → acorex-modules-content-management-template-content-editor-widget-view.component-Cwnqyt0U.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-content-management-template-content-editor-widget-view.component-DzM4oMNV.mjs.map → acorex-modules-content-management-template-content-editor-widget-view.component-Cwnqyt0U.mjs.map} +1 -1
  63. package/fesm2022/acorex-modules-content-management.mjs +1 -1
  64. package/fesm2022/{acorex-modules-conversation-acorex-modules-conversation-DYW31fEm.mjs → acorex-modules-conversation-acorex-modules-conversation-B1ijk48q.mjs} +640 -219
  65. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-B1ijk48q.mjs.map +1 -0
  66. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Mlan0ADR.mjs +329 -0
  67. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-Mlan0ADR.mjs.map +1 -0
  68. package/fesm2022/{acorex-modules-conversation-comments-page.component-CNqL-HdS.mjs → acorex-modules-conversation-comments-page.component--Q5RxEyI.mjs} +2 -2
  69. package/fesm2022/{acorex-modules-conversation-comments-page.component-CNqL-HdS.mjs.map → acorex-modules-conversation-comments-page.component--Q5RxEyI.mjs.map} +1 -1
  70. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs → acorex-modules-conversation-send-assist-chat-message.command--_hCn9Et.mjs} +2 -2
  71. package/fesm2022/{acorex-modules-conversation-send-assist-chat-message.command-CuYYEqhb.mjs.map → acorex-modules-conversation-send-assist-chat-message.command--_hCn9Et.mjs.map} +1 -1
  72. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs → acorex-modules-conversation-start-assist-chat.command-BE1BPjj2.mjs} +2 -2
  73. package/fesm2022/{acorex-modules-conversation-start-assist-chat.command-BKwrZJDs.mjs.map → acorex-modules-conversation-start-assist-chat.command-BE1BPjj2.mjs.map} +1 -1
  74. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  75. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-DJMJFziT.mjs} +50 -18
  76. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-DJMJFziT.mjs.map +1 -0
  77. package/fesm2022/{acorex-modules-dashboard-management-index-Bhm8mAON.mjs → acorex-modules-dashboard-management-index-DoTVg9ro.mjs} +2 -2
  78. package/fesm2022/{acorex-modules-dashboard-management-index-Bhm8mAON.mjs.map → acorex-modules-dashboard-management-index-DoTVg9ro.mjs.map} +1 -1
  79. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  80. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  81. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  82. package/fesm2022/{acorex-modules-human-capital-management-acorex-modules-human-capital-management-DrKulwY-.mjs → acorex-modules-human-capital-management-acorex-modules-human-capital-management-C1lNgBrC.mjs} +189 -49
  83. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-C1lNgBrC.mjs.map +1 -0
  84. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-TavX6h7z.mjs → acorex-modules-human-capital-management-approve-leave-request.command-CDBhDXr8.mjs} +2 -2
  85. package/fesm2022/{acorex-modules-human-capital-management-approve-leave-request.command-TavX6h7z.mjs.map → acorex-modules-human-capital-management-approve-leave-request.command-CDBhDXr8.mjs.map} +1 -1
  86. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-ZEmi88vf.mjs → acorex-modules-human-capital-management-assign-position-assignment.command-pz0IOxa3.mjs} +2 -2
  87. package/fesm2022/{acorex-modules-human-capital-management-assign-position-assignment.command-ZEmi88vf.mjs.map → acorex-modules-human-capital-management-assign-position-assignment.command-pz0IOxa3.mjs.map} +1 -1
  88. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DzIMYIhe.mjs → acorex-modules-human-capital-management-cancel-leave-request.command-Czwdu-nH.mjs} +2 -2
  89. package/fesm2022/{acorex-modules-human-capital-management-cancel-leave-request.command-DzIMYIhe.mjs.map → acorex-modules-human-capital-management-cancel-leave-request.command-Czwdu-nH.mjs.map} +1 -1
  90. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-CrVU_3Jv.mjs → acorex-modules-human-capital-management-employee.entity-ZTRqQfRv.mjs} +21 -17
  91. package/fesm2022/acorex-modules-human-capital-management-employee.entity-ZTRqQfRv.mjs.map +1 -0
  92. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BeiaEsNZ.mjs → acorex-modules-human-capital-management-employment-type.entity-BIIc7EpP.mjs} +2 -2
  93. package/fesm2022/{acorex-modules-human-capital-management-employment-type.entity-BeiaEsNZ.mjs.map → acorex-modules-human-capital-management-employment-type.entity-BIIc7EpP.mjs.map} +1 -1
  94. package/fesm2022/{acorex-modules-human-capital-management-leave-request.entity-QeY6lcUY.mjs → acorex-modules-human-capital-management-leave-request.entity-Bmv7oLAr.mjs} +19 -24
  95. package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-Bmv7oLAr.mjs.map +1 -0
  96. package/fesm2022/{acorex-modules-human-capital-management-leave-type.entity-D7B3adkZ.mjs → acorex-modules-human-capital-management-leave-type.entity-OwdxjYKk.mjs} +10 -4
  97. package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-OwdxjYKk.mjs.map +1 -0
  98. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event-type.entity-Dim-8hT7.mjs → acorex-modules-human-capital-management-lifecycle-event-type.entity-C_XVrmZt.mjs} +19 -74
  99. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-C_XVrmZt.mjs.map +1 -0
  100. package/fesm2022/{acorex-modules-human-capital-management-lifecycle-event.entity-3HtYOKrY.mjs → acorex-modules-human-capital-management-lifecycle-event.entity-BwLAEtqA.mjs} +3 -3
  101. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-BwLAEtqA.mjs.map +1 -0
  102. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-Byxt921P.mjs → acorex-modules-human-capital-management-position-assignment.entity-DdMmiGbn.mjs} +2 -2
  103. package/fesm2022/{acorex-modules-human-capital-management-position-assignment.entity-Byxt921P.mjs.map → acorex-modules-human-capital-management-position-assignment.entity-DdMmiGbn.mjs.map} +1 -1
  104. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CAvjZTG9.mjs → acorex-modules-human-capital-management-reject-leave-request.command-Bdwwkcs3.mjs} +2 -2
  105. package/fesm2022/{acorex-modules-human-capital-management-reject-leave-request.command-CAvjZTG9.mjs.map → acorex-modules-human-capital-management-reject-leave-request.command-Bdwwkcs3.mjs.map} +1 -1
  106. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BeWrsQo8.mjs → acorex-modules-human-capital-management-revoke-position-assignment.command-Cq-aA79w.mjs} +2 -2
  107. package/fesm2022/{acorex-modules-human-capital-management-revoke-position-assignment.command-BeWrsQo8.mjs.map → acorex-modules-human-capital-management-revoke-position-assignment.command-Cq-aA79w.mjs.map} +1 -1
  108. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-Cx9TRMlY.mjs +230 -0
  109. package/fesm2022/acorex-modules-human-capital-management-start-leave-request-flow.command-Cx9TRMlY.mjs.map +1 -0
  110. package/fesm2022/{acorex-modules-human-capital-management-start-lifecycle-event-flow.command-Bz2SZcmm.mjs → acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DjepuAcu.mjs} +9 -14
  111. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-DjepuAcu.mjs.map +1 -0
  112. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  113. package/fesm2022/acorex-modules-report-management.mjs +2 -2
  114. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  115. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Dj9u0VEL.mjs → acorex-modules-settings-management-acorex-modules-settings-management-BfbVV7di.mjs} +5 -5
  116. package/fesm2022/{acorex-modules-settings-management-acorex-modules-settings-management-Dj9u0VEL.mjs.map → acorex-modules-settings-management-acorex-modules-settings-management-BfbVV7di.mjs.map} +1 -1
  117. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-DpRn1jAo.mjs → acorex-modules-settings-management-permission-definition.provider-BBb5hqkc.mjs} +2 -2
  118. package/fesm2022/{acorex-modules-settings-management-permission-definition.provider-DpRn1jAo.mjs.map → acorex-modules-settings-management-permission-definition.provider-BBb5hqkc.mjs.map} +1 -1
  119. package/fesm2022/{acorex-modules-settings-management-setting-page.component-C9wPgm_P.mjs → acorex-modules-settings-management-setting-page.component-Dn8CYgux.mjs} +4 -4
  120. package/fesm2022/{acorex-modules-settings-management-setting-page.component-C9wPgm_P.mjs.map → acorex-modules-settings-management-setting-page.component-Dn8CYgux.mjs.map} +1 -1
  121. package/fesm2022/{acorex-modules-settings-management-setting-view.component-BQ69Bx8C.mjs → acorex-modules-settings-management-setting-view.component-B5jpPo9k.mjs} +2 -2
  122. package/fesm2022/{acorex-modules-settings-management-setting-view.component-BQ69Bx8C.mjs.map → acorex-modules-settings-management-setting-view.component-B5jpPo9k.mjs.map} +1 -1
  123. package/fesm2022/acorex-modules-settings-management.mjs +1 -1
  124. package/fesm2022/{acorex-modules-workflow-management-index-CxheG2ry.mjs → acorex-modules-workflow-management-index-CztICioV.mjs} +64 -4
  125. package/fesm2022/acorex-modules-workflow-management-index-CztICioV.mjs.map +1 -0
  126. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-column.component-Cpi0Pq3n.mjs +79 -0
  127. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-column.component-Cpi0Pq3n.mjs.map +1 -0
  128. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-RbwX6Nd_.mjs +466 -0
  129. package/fesm2022/acorex-modules-workflow-management-workflow-configurator-widget-edit.component-RbwX6Nd_.mjs.map +1 -0
  130. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-DISpkWE4.mjs → acorex-modules-workflow-management-workflow-definition.entity-BfACGpo4.mjs} +2 -1
  131. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-BfACGpo4.mjs.map +1 -0
  132. package/fesm2022/acorex-modules-workflow-management.mjs +175 -29
  133. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  134. package/package.json +2 -2
  135. package/types/acorex-modules-ai-management.d.ts +2 -2
  136. package/types/acorex-modules-assessment-management.d.ts +214 -188
  137. package/types/acorex-modules-common.d.ts +13 -3
  138. package/types/acorex-modules-conversation.d.ts +22 -11
  139. package/types/acorex-modules-dashboard-management.d.ts +14 -2
  140. package/types/acorex-modules-document-management.d.ts +6 -0
  141. package/types/acorex-modules-human-capital-management.d.ts +28 -14
  142. package/types/acorex-modules-report-management.d.ts +3 -0
  143. package/types/acorex-modules-workflow-management.d.ts +18 -11
  144. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-IHgQ8RVH.mjs.map +0 -1
  145. package/fesm2022/acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs.map +0 -1
  146. package/fesm2022/acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs.map +0 -1
  147. package/fesm2022/acorex-modules-assessment-management-question-bank-item.entity-RLIfWCzq.mjs.map +0 -1
  148. package/fesm2022/acorex-modules-assessment-management-questionnaire-viewer-popup.component-B8LMKqVO.mjs.map +0 -1
  149. package/fesm2022/acorex-modules-assessment-management-questionnaire.entity-CZBnfCYE.mjs.map +0 -1
  150. package/fesm2022/acorex-modules-auth-acorex-modules-auth-BUuEzfsI.mjs.map +0 -1
  151. package/fesm2022/acorex-modules-auth-master.layout-DMP4RC6L.mjs +0 -25
  152. package/fesm2022/acorex-modules-auth-master.layout-DMP4RC6L.mjs.map +0 -1
  153. package/fesm2022/acorex-modules-content-management-acorex-modules-content-management-txpooXrE.mjs.map +0 -1
  154. package/fesm2022/acorex-modules-conversation-acorex-modules-conversation-DYW31fEm.mjs.map +0 -1
  155. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQlE8l4c.mjs +0 -329
  156. package/fesm2022/acorex-modules-conversation-assist-delegated-agent-detail-popup.component-DQlE8l4c.mjs.map +0 -1
  157. package/fesm2022/acorex-modules-dashboard-management-acorex-modules-dashboard-management-kk0CINL1.mjs.map +0 -1
  158. package/fesm2022/acorex-modules-human-capital-management-acorex-modules-human-capital-management-DrKulwY-.mjs.map +0 -1
  159. package/fesm2022/acorex-modules-human-capital-management-employee.entity-CrVU_3Jv.mjs.map +0 -1
  160. package/fesm2022/acorex-modules-human-capital-management-leave-request.entity-QeY6lcUY.mjs.map +0 -1
  161. package/fesm2022/acorex-modules-human-capital-management-leave-type.entity-D7B3adkZ.mjs.map +0 -1
  162. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event-type.entity-Dim-8hT7.mjs.map +0 -1
  163. package/fesm2022/acorex-modules-human-capital-management-lifecycle-event.entity-3HtYOKrY.mjs.map +0 -1
  164. package/fesm2022/acorex-modules-human-capital-management-start-lifecycle-event-flow.command-Bz2SZcmm.mjs.map +0 -1
  165. package/fesm2022/acorex-modules-workflow-management-index-CxheG2ry.mjs.map +0 -1
  166. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-DISpkWE4.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Injector, Injectable, NgModule, input, output, signal, viewChild, computed, effect, untracked, ChangeDetectionStrategy, Component, ViewEncapsulation, ElementRef, afterNextRender } from '@angular/core';
3
3
  import { AXPCommonMenuKeys } from '@acorex/modules/common';
4
- import { AXPEntityService, AXPEntityDefinitionRegistryService, AXPEntityEventsKeys, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
5
- import { AXPSearchCommandProvider, createEntityCommandOptions, AXPFileStorageService, AXPStickyDirective, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXPSystemStatusType } from '@acorex/platform/common';
4
+ import { AXPEntityService, AXPEntityDefinitionRegistryService, AXPEntityEventsKeys, AXPFileListComponent, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';
5
+ import { AXPSearchCommandProvider, createEntityCommandOptions, AXPStickyDirective, AXP_STATUS_PROVIDERS, AXP_MENU_PROVIDER, AXP_SEARCH_PROVIDER, AXPSystemStatusType } from '@acorex/platform/common';
6
6
  import { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER, AXPSessionService } from '@acorex/platform/auth';
7
7
  import { AXPDataSelectorService, AXPPropertyViewerService, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXP_PAGE_COMPONENT_PROVIDER, AXPOutcomeResultsViewerComponent, AXPThemeLayoutBlockComponent, AXPStopwatchComponent } from '@acorex/platform/layout/components';
8
8
  import { AXPCommandService, provideCommandSetups, provideCommand } from '@acorex/platform/runtime';
@@ -48,6 +48,8 @@ import * as i3$1 from '@acorex/components/drawer';
48
48
  import { AXDrawerModule } from '@acorex/components/drawer';
49
49
  import * as i1$2 from '@acorex/components/tabs';
50
50
  import { AXTabsComponent, AXTabsModule } from '@acorex/components/tabs';
51
+ import * as i3$2 from '@acorex/components/popover';
52
+ import { AXPopoverModule } from '@acorex/components/popover';
51
53
  import { DomSanitizer } from '@angular/platform-browser';
52
54
 
53
55
  //#region ---- Root Configuration ----
@@ -101,13 +103,13 @@ class AXMAssessmentManagementEntityProvider {
101
103
  if (moduleName === RootConfig.module.name) {
102
104
  switch (entityName) {
103
105
  case RootConfig.entities.questionBankItem.name:
104
- return (await import('./acorex-modules-assessment-management-question-bank-item.entity-RLIfWCzq.mjs')).factory(this.injector);
106
+ return (await import('./acorex-modules-assessment-management-question-bank-item.entity-DZBQOgAg.mjs')).factory(this.injector);
105
107
  case RootConfig.entities.questionnaire.name:
106
- return (await import('./acorex-modules-assessment-management-questionnaire.entity-CZBnfCYE.mjs')).factory();
108
+ return (await import('./acorex-modules-assessment-management-questionnaire.entity-BGkWU83k.mjs')).factory();
107
109
  case RootConfig.entities.assessmentCase.name:
108
- return (await import('./acorex-modules-assessment-management-assessment-case.entity-B95yBXgi.mjs')).factory(this.injector);
110
+ return (await import('./acorex-modules-assessment-management-assessment-case.entity-BWMbcZFT.mjs')).factory(this.injector);
109
111
  case RootConfig.entities.assessmentSession.name:
110
- return (await import('./acorex-modules-assessment-management-assessment-session.entity-DBhBxqh1.mjs')).factory(this.injector);
112
+ return (await import('./acorex-modules-assessment-management-assessment-session.entity-osEWRiw1.mjs')).factory(this.injector);
111
113
  }
112
114
  }
113
115
  return null;
@@ -430,10 +432,10 @@ const AXMQuestionBankInterfaceEditorWidget = {
430
432
  ],
431
433
  components: {
432
434
  edit: {
433
- component: () => import('./acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs').then((c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent),
435
+ component: () => import('./acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs').then((c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent),
434
436
  },
435
437
  designer: {
436
- component: () => import('./acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BCtQO_j7.mjs').then((c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent),
438
+ component: () => import('./acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-BvqEePUh.mjs').then((c) => c.AXMQuestionBankInterfaceEditorWidgetEditComponent),
437
439
  },
438
440
  column: {
439
441
  component: () => import('@acorex/platform/layout/widgets').then((m) => m.AXPWidgetFieldConfiguratorWidgetColumnComponent),
@@ -762,224 +764,6 @@ function parseQuestionHintPartialFromRecord(row) {
762
764
  }
763
765
  //#endregion
764
766
 
765
- //#region ---- Imports ----
766
- /**
767
- * Answer map key for a questionnaire item (matches viewer session).
768
- */
769
- function getQuestionnaireItemAnswerKey(item) {
770
- return typeof item.name === 'string' ? item.name.trim() : '';
771
- }
772
- /**
773
- * Storage key for answers — matches viewer `answerKey` fallback when item name is empty.
774
- */
775
- function resolveQuestionnaireItemAnswerStorageKey(item, itemIndex) {
776
- const fromName = getQuestionnaireItemAnswerKey(item);
777
- if (fromName) {
778
- return fromName;
779
- }
780
- const legacyId = typeof item.id === 'string' ? item.id.trim() : '';
781
- return legacyId || `item-${itemIndex}`;
782
- }
783
- //#endregion
784
- //#region ---- Utility Functions ----
785
- /**
786
- * True only when the item is statically required (boolean true), not expression-based.
787
- */
788
- function isQuestionnaireItemStaticallyRequired(isRequired) {
789
- return isRequired === true;
790
- }
791
- /**
792
- * True when the UI should indicate required (static true or non-empty expression).
793
- */
794
- function isQuestionnaireItemRequiredForDisplay(isRequired) {
795
- if (isRequired === true) {
796
- return true;
797
- }
798
- if (typeof isRequired === 'string' && isRequired.trim() !== '') {
799
- return true;
800
- }
801
- return false;
802
- }
803
- function getQuestionnaireItemRequiredBadgeMode(isRequired) {
804
- if (isRequired === true) {
805
- return 'required';
806
- }
807
- if (typeof isRequired === 'string') {
808
- const t = isRequired.trim();
809
- if (!t) {
810
- return 'optional';
811
- }
812
- const tl = t.toLowerCase();
813
- if (tl === 'true' || tl === '1') {
814
- return 'required';
815
- }
816
- if (tl === 'false' || tl === '0') {
817
- return 'optional';
818
- }
819
- return 'conditional';
820
- }
821
- return 'optional';
822
- }
823
- function getQuestionnaireItemVisibilityBadgeMode(isVisible) {
824
- if (isVisible === false) {
825
- return 'hidden';
826
- }
827
- if (isVisible === true || isVisible === undefined || isVisible === null) {
828
- return 'visible';
829
- }
830
- if (typeof isVisible === 'string') {
831
- const t = isVisible.trim();
832
- if (!t) {
833
- return 'visible';
834
- }
835
- const tl = t.toLowerCase();
836
- if (tl === 'true' || tl === '1') {
837
- return 'visible';
838
- }
839
- if (tl === 'false' || tl === '0') {
840
- return 'hidden';
841
- }
842
- return 'conditional';
843
- }
844
- return 'visible';
845
- }
846
- /**
847
- * Convert raw value to builder state
848
- */
849
- function convertValueToState(value) {
850
- // Handle null/undefined or empty sections
851
- if (!value || !value.sections || value.sections.length === 0) {
852
- // Always return at least one default section
853
- const defaultSection = createDefaultSection();
854
- defaultSection.order = 0;
855
- return {
856
- sections: [defaultSection],
857
- displaySettings: value?.displaySettings,
858
- };
859
- }
860
- // Handle structure (sections with nested items)
861
- return {
862
- sections: value.sections.map((section, sectionIndex) => {
863
- const legacy = section;
864
- const sectionName = (typeof section.name === 'string' && section.name.trim()) ||
865
- (typeof legacy.id === 'string' && legacy.id.trim()) ||
866
- `section-${sectionIndex}`;
867
- return {
868
- name: sectionName,
869
- title: section.title,
870
- description: section.description,
871
- order: section.order ?? sectionIndex,
872
- tags: section.tags,
873
- isVisible: section.isVisible,
874
- items: (section.items || []).map((item, itemIndex) => {
875
- const itemLegacy = item;
876
- const itemName = (typeof item.name === 'string' && item.name.trim()) ||
877
- (typeof itemLegacy.id === 'string' && itemLegacy.id.trim()) ||
878
- `item-${itemIndex}`;
879
- return {
880
- name: itemName,
881
- questionBankItemId: item.questionBankItemId,
882
- order: item.order ?? itemIndex,
883
- isRequired: item.isRequired,
884
- isVisible: item.isVisible,
885
- interfaceOverride: item.interfaceOverride,
886
- hint: parseQuestionHintPartialFromRecord(item),
887
- comment: item.comment,
888
- tags: item.tags,
889
- isNewlyAdded: false,
890
- };
891
- }),
892
- isNewlyAdded: false,
893
- };
894
- }),
895
- displaySettings: value.displaySettings,
896
- };
897
- }
898
- /**
899
- * Convert builder state to value for persistence
900
- */
901
- function convertStateToValue(state, existingValue) {
902
- const result = {
903
- sections: state.sections.map((section) => {
904
- return {
905
- name: section.name,
906
- title: section.title,
907
- description: section.description,
908
- order: section.order,
909
- tags: section.tags,
910
- isVisible: section.isVisible,
911
- items: section.items.map((item) => ({
912
- name: item.name,
913
- questionBankItemId: item.questionBankItemId,
914
- order: item.order,
915
- isRequired: item.isRequired,
916
- isVisible: item.isVisible,
917
- interfaceOverride: item.interfaceOverride,
918
- hint: item.hint,
919
- comment: item.comment,
920
- tags: item.tags,
921
- })),
922
- };
923
- }),
924
- };
925
- // Preserve displaySettings from state first, then from existing value if state doesn't have it
926
- if (state.displaySettings) {
927
- result.displaySettings = state.displaySettings;
928
- }
929
- else if (existingValue?.displaySettings) {
930
- result.displaySettings = existingValue.displaySettings;
931
- }
932
- return result;
933
- }
934
- /**
935
- * Create a default section
936
- */
937
- function createDefaultSection() {
938
- const name = `section-${Date.now()}`;
939
- return {
940
- name,
941
- title: 'New Section',
942
- description: undefined,
943
- order: 0,
944
- isVisible: undefined,
945
- items: [],
946
- isNewlyAdded: true,
947
- };
948
- }
949
- /**
950
- * All questionnaire item names currently in the structure (for uniqueness when allocating new names).
951
- */
952
- function collectQuestionnaireItemNames(sections) {
953
- const set = new Set();
954
- for (const sec of sections) {
955
- for (const it of sec.items) {
956
- if (it.name)
957
- set.add(it.name);
958
- }
959
- }
960
- return set;
961
- }
962
- /**
963
- * Allocates the next user-friendly name (`q1`, `q2`, …) not present in `used`.
964
- * Increments from the highest existing `q<number>` name, then skips collisions.
965
- */
966
- function allocateNextQuestionItemName(used) {
967
- let maxQ = 0;
968
- for (const id of used) {
969
- const m = /^q(\d+)$/i.exec(id.trim());
970
- if (m)
971
- maxQ = Math.max(maxQ, parseInt(m[1], 10));
972
- }
973
- let n = maxQ + 1;
974
- let candidate = `q${n}`;
975
- while (used.has(candidate)) {
976
- n++;
977
- candidate = `q${n}`;
978
- }
979
- return candidate;
980
- }
981
- //#endregion
982
-
983
767
  //#region ---- Imports ----
984
768
  const DEFAULT_PRE_QUESTIONNAIRE_CONFIG = { enabled: false };
985
769
  const DEFAULT_POST_QUESTIONNAIRE_CONFIG = {
@@ -1205,51 +989,269 @@ function normalizeViewMode(value) {
1205
989
  if (typeof value === 'string' && VIEW_MODE_VALUES.includes(value)) {
1206
990
  return value;
1207
991
  }
1208
- if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
1209
- return normalizeViewMode(value.id);
992
+ if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
993
+ return normalizeViewMode(value.id);
994
+ }
995
+ return 'single-page';
996
+ }
997
+ /**
998
+ * Coerces stored validation strategy (string or SelectBox `{ id }`) to a known value.
999
+ */
1000
+ function normalizeValidationStrategy$1(value) {
1001
+ if (typeof value === 'string' && VALIDATION_STRATEGY_VALUES.includes(value)) {
1002
+ return value;
1003
+ }
1004
+ if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
1005
+ return normalizeValidationStrategy$1(value.id);
1006
+ }
1007
+ return 'step';
1008
+ }
1009
+ /**
1010
+ * Coerces stored completion mode (string or SelectBox `{ id }`) to a known value.
1011
+ */
1012
+ function normalizeCompletionMode(value) {
1013
+ if (typeof value === 'string' && COMPLETION_MODE_VALUES.includes(value)) {
1014
+ return value;
1015
+ }
1016
+ if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
1017
+ return normalizeCompletionMode(value.id);
1018
+ }
1019
+ return 'submit-only';
1020
+ }
1021
+ /**
1022
+ * Maps entity `display` to {@link QuestionnaireDisplaySettings} (defaults when omitted).
1023
+ */
1024
+ function toDisplaySettings(q) {
1025
+ if (!q) {
1026
+ return null;
1027
+ }
1028
+ const d = { ...DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY, ...q.display };
1029
+ return {
1030
+ viewMode: normalizeViewMode(d.viewMode),
1031
+ showProgressBar: d.showProgressBar ?? true,
1032
+ showTimer: d.showTimer ?? false,
1033
+ showQuestionNumbers: d.showQuestionNumbers ?? true,
1034
+ validationStrategy: normalizeValidationStrategy$1(d.validationStrategy),
1035
+ completionMode: normalizeCompletionMode(d.completionMode),
1036
+ };
1037
+ }
1038
+ //#endregion
1039
+
1040
+ //#region ---- Imports ----
1041
+ /**
1042
+ * Answer map key for a questionnaire item (matches viewer session).
1043
+ */
1044
+ function getQuestionnaireItemAnswerKey(item) {
1045
+ return typeof item.name === 'string' ? item.name.trim() : '';
1046
+ }
1047
+ /**
1048
+ * Storage key for answers — matches viewer `answerKey` fallback when item name is empty.
1049
+ */
1050
+ function resolveQuestionnaireItemAnswerStorageKey(item, itemIndex) {
1051
+ const fromName = getQuestionnaireItemAnswerKey(item);
1052
+ if (fromName) {
1053
+ return fromName;
1054
+ }
1055
+ const legacyId = typeof item.id === 'string' ? item.id.trim() : '';
1056
+ return legacyId || `item-${itemIndex}`;
1057
+ }
1058
+ //#endregion
1059
+ //#region ---- Utility Functions ----
1060
+ /**
1061
+ * True only when the item is statically required (boolean true), not expression-based.
1062
+ */
1063
+ function isQuestionnaireItemStaticallyRequired(isRequired) {
1064
+ return isRequired === true;
1065
+ }
1066
+ /**
1067
+ * True when the UI should indicate required (static true or non-empty expression).
1068
+ */
1069
+ function isQuestionnaireItemRequiredForDisplay(isRequired) {
1070
+ if (isRequired === true) {
1071
+ return true;
1072
+ }
1073
+ if (typeof isRequired === 'string' && isRequired.trim() !== '') {
1074
+ return true;
1075
+ }
1076
+ return false;
1077
+ }
1078
+ function getQuestionnaireItemRequiredBadgeMode(isRequired) {
1079
+ if (isRequired === true) {
1080
+ return 'required';
1081
+ }
1082
+ if (typeof isRequired === 'string') {
1083
+ const t = isRequired.trim();
1084
+ if (!t) {
1085
+ return 'optional';
1086
+ }
1087
+ const tl = t.toLowerCase();
1088
+ if (tl === 'true' || tl === '1') {
1089
+ return 'required';
1090
+ }
1091
+ if (tl === 'false' || tl === '0') {
1092
+ return 'optional';
1093
+ }
1094
+ return 'conditional';
1095
+ }
1096
+ return 'optional';
1097
+ }
1098
+ function getQuestionnaireItemVisibilityBadgeMode(isVisible) {
1099
+ if (isVisible === false) {
1100
+ return 'hidden';
1101
+ }
1102
+ if (isVisible === true || isVisible === undefined || isVisible === null) {
1103
+ return 'visible';
1104
+ }
1105
+ if (typeof isVisible === 'string') {
1106
+ const t = isVisible.trim();
1107
+ if (!t) {
1108
+ return 'visible';
1109
+ }
1110
+ const tl = t.toLowerCase();
1111
+ if (tl === 'true' || tl === '1') {
1112
+ return 'visible';
1113
+ }
1114
+ if (tl === 'false' || tl === '0') {
1115
+ return 'hidden';
1116
+ }
1117
+ return 'conditional';
1118
+ }
1119
+ return 'visible';
1120
+ }
1121
+ /**
1122
+ * Convert raw value to builder state
1123
+ */
1124
+ function convertValueToState(value) {
1125
+ // Handle null/undefined or empty sections
1126
+ if (!value || !value.sections || value.sections.length === 0) {
1127
+ // Always return at least one default section
1128
+ const defaultSection = createDefaultSection();
1129
+ defaultSection.order = 0;
1130
+ return {
1131
+ sections: [defaultSection],
1132
+ displaySettings: value?.displaySettings,
1133
+ };
1134
+ }
1135
+ // Handle structure (sections with nested items)
1136
+ return {
1137
+ sections: value.sections.map((section, sectionIndex) => {
1138
+ const legacy = section;
1139
+ const sectionName = (typeof section.name === 'string' && section.name.trim()) ||
1140
+ (typeof legacy.id === 'string' && legacy.id.trim()) ||
1141
+ `section-${sectionIndex}`;
1142
+ return {
1143
+ name: sectionName,
1144
+ title: section.title,
1145
+ description: section.description,
1146
+ order: section.order ?? sectionIndex,
1147
+ tags: section.tags,
1148
+ isVisible: section.isVisible,
1149
+ items: (section.items || []).map((item, itemIndex) => {
1150
+ const itemLegacy = item;
1151
+ const itemName = (typeof item.name === 'string' && item.name.trim()) ||
1152
+ (typeof itemLegacy.id === 'string' && itemLegacy.id.trim()) ||
1153
+ `item-${itemIndex}`;
1154
+ return {
1155
+ name: itemName,
1156
+ questionBankItemId: item.questionBankItemId,
1157
+ order: item.order ?? itemIndex,
1158
+ isRequired: item.isRequired,
1159
+ isVisible: item.isVisible,
1160
+ interfaceOverride: item.interfaceOverride,
1161
+ hint: parseQuestionHintPartialFromRecord(item),
1162
+ comment: item.comment,
1163
+ tags: item.tags,
1164
+ isNewlyAdded: false,
1165
+ };
1166
+ }),
1167
+ isNewlyAdded: false,
1168
+ };
1169
+ }),
1170
+ displaySettings: value.displaySettings,
1171
+ };
1172
+ }
1173
+ /**
1174
+ * Convert builder state to value for persistence
1175
+ */
1176
+ function convertStateToValue(state, existingValue) {
1177
+ const result = {
1178
+ sections: state.sections.map((section) => {
1179
+ return {
1180
+ name: section.name,
1181
+ title: section.title,
1182
+ description: section.description,
1183
+ order: section.order,
1184
+ tags: section.tags,
1185
+ isVisible: section.isVisible,
1186
+ items: section.items.map((item) => ({
1187
+ name: item.name,
1188
+ questionBankItemId: item.questionBankItemId,
1189
+ order: item.order,
1190
+ isRequired: item.isRequired,
1191
+ isVisible: item.isVisible,
1192
+ interfaceOverride: item.interfaceOverride,
1193
+ hint: item.hint,
1194
+ comment: item.comment,
1195
+ tags: item.tags,
1196
+ })),
1197
+ };
1198
+ }),
1199
+ };
1200
+ // Preserve displaySettings from state first, then from existing value if state doesn't have it
1201
+ if (state.displaySettings) {
1202
+ result.displaySettings = state.displaySettings;
1203
+ }
1204
+ else if (existingValue?.displaySettings) {
1205
+ result.displaySettings = existingValue.displaySettings;
1210
1206
  }
1211
- return 'single-page';
1207
+ return result;
1212
1208
  }
1213
1209
  /**
1214
- * Coerces stored validation strategy (string or SelectBox `{ id }`) to a known value.
1210
+ * Create a default section
1215
1211
  */
1216
- function normalizeValidationStrategy$1(value) {
1217
- if (typeof value === 'string' && VALIDATION_STRATEGY_VALUES.includes(value)) {
1218
- return value;
1219
- }
1220
- if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
1221
- return normalizeValidationStrategy$1(value.id);
1222
- }
1223
- return 'step';
1212
+ function createDefaultSection() {
1213
+ const name = `section-${Date.now()}`;
1214
+ return {
1215
+ name,
1216
+ title: 'New Section',
1217
+ description: undefined,
1218
+ order: 0,
1219
+ isVisible: undefined,
1220
+ items: [],
1221
+ isNewlyAdded: true,
1222
+ };
1224
1223
  }
1225
1224
  /**
1226
- * Coerces stored completion mode (string or SelectBox `{ id }`) to a known value.
1225
+ * All questionnaire item names currently in the structure (for uniqueness when allocating new names).
1227
1226
  */
1228
- function normalizeCompletionMode(value) {
1229
- if (typeof value === 'string' && COMPLETION_MODE_VALUES.includes(value)) {
1230
- return value;
1231
- }
1232
- if (value != null && typeof value === 'object' && 'id' in value && typeof value.id === 'string') {
1233
- return normalizeCompletionMode(value.id);
1227
+ function collectQuestionnaireItemNames(sections) {
1228
+ const set = new Set();
1229
+ for (const sec of sections) {
1230
+ for (const it of sec.items) {
1231
+ if (it.name)
1232
+ set.add(it.name);
1233
+ }
1234
1234
  }
1235
- return 'submit-only';
1235
+ return set;
1236
1236
  }
1237
1237
  /**
1238
- * Maps entity `display` to {@link QuestionnaireDisplaySettings} (defaults when omitted).
1238
+ * Allocates the next user-friendly name (`q1`, `q2`, …) not present in `used`.
1239
+ * Increments from the highest existing `q<number>` name, then skips collisions.
1239
1240
  */
1240
- function toDisplaySettings(q) {
1241
- if (!q) {
1242
- return null;
1241
+ function allocateNextQuestionItemName(used) {
1242
+ let maxQ = 0;
1243
+ for (const id of used) {
1244
+ const m = /^q(\d+)$/i.exec(id.trim());
1245
+ if (m)
1246
+ maxQ = Math.max(maxQ, parseInt(m[1], 10));
1243
1247
  }
1244
- const d = { ...DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY, ...q.display };
1245
- return {
1246
- viewMode: normalizeViewMode(d.viewMode),
1247
- showProgressBar: d.showProgressBar ?? true,
1248
- showTimer: d.showTimer ?? false,
1249
- showQuestionNumbers: d.showQuestionNumbers ?? true,
1250
- validationStrategy: normalizeValidationStrategy$1(d.validationStrategy),
1251
- completionMode: normalizeCompletionMode(d.completionMode),
1252
- };
1248
+ let n = maxQ + 1;
1249
+ let candidate = `q${n}`;
1250
+ while (used.has(candidate)) {
1251
+ n++;
1252
+ candidate = `q${n}`;
1253
+ }
1254
+ return candidate;
1253
1255
  }
1254
1256
  //#endregion
1255
1257
 
@@ -1376,7 +1378,7 @@ class AXMQuestionnaireViewerService {
1376
1378
  * Open questionnaire viewer in a dialog
1377
1379
  */
1378
1380
  async open(config) {
1379
- const { AXMQuestionnaireViewerPopupComponent } = await import('./acorex-modules-assessment-management-questionnaire-viewer-popup.component-B8LMKqVO.mjs');
1381
+ const { AXMQuestionnaireViewerPopupComponent } = await import('./acorex-modules-assessment-management-questionnaire-viewer-popup.component-BMv-XkZk.mjs');
1380
1382
  const structure = config.structure;
1381
1383
  const submitHandler = config.submitHandler ??
1382
1384
  ((answers) => this.buildSummaryPlaceholderValues(structure, answers, {
@@ -1892,6 +1894,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1892
1894
  }]
1893
1895
  }] });
1894
1896
 
1897
+ //#region ---- Preview dialog title ----
1898
+ /**
1899
+ * Formats popup title as `Preview: {questionnaire name}` when a name is available.
1900
+ */
1901
+ function formatQuestionnairePreviewDialogTitle(previewLabel, questionnaireName) {
1902
+ const base = previewLabel.trim() || 'Preview';
1903
+ const name = questionnaireName?.trim();
1904
+ return name ? `${base}: ${name}` : base;
1905
+ }
1906
+ //#endregion
1907
+
1895
1908
  //#region ---- Imports ----
1896
1909
  //#endregion
1897
1910
  //#region ---- Groups ----
@@ -2208,6 +2221,8 @@ class AXMQuestionnaireQuestionsBuilderComponent {
2208
2221
  * Persisted questionnaire id (e.g. from entity form) — enables questionnaire outcomes in preview.
2209
2222
  */
2210
2223
  this.questionnaireEntityId = input(undefined, ...(ngDevMode ? [{ debugName: "questionnaireEntityId" }] : /* istanbul ignore next */ []));
2224
+ /** Questionnaire display name for preview dialog title (`Preview: {name}`). */
2225
+ this.questionnaireTitle = input(undefined, ...(ngDevMode ? [{ debugName: "questionnaireTitle" }] : /* istanbul ignore next */ []));
2211
2226
  /**
2212
2227
  * Value change event
2213
2228
  */
@@ -3009,7 +3024,8 @@ class AXMQuestionnaireQuestionsBuilderComponent {
3009
3024
  const currentValue = convertStateToValue(this.builderState(), this.value() || undefined);
3010
3025
  // Always use the current displaySettings from the computed property to ensure preview uses latest settings
3011
3026
  currentValue.displaySettings = this.displaySettings();
3012
- const previewTitle = (await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title')) || 'Preview';
3027
+ const previewTitleBase = (await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-builder.actions.preview.title')) || 'Preview';
3028
+ const previewTitle = formatQuestionnairePreviewDialogTitle(previewTitleBase, this.questionnaireTitle());
3013
3029
  const result = await this.questionnaireViewerService.open({
3014
3030
  title: previewTitle,
3015
3031
  structure: currentValue,
@@ -3035,7 +3051,7 @@ class AXMQuestionnaireQuestionsBuilderComponent {
3035
3051
  }
3036
3052
  }
3037
3053
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireQuestionsBuilderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3038
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireQuestionsBuilderComponent, isStandalone: true, selector: "axm-questionnaire-questions-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, prePostConfig: { classPropertyName: "prePostConfig", publicName: "prePostConfig", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, displaySettingsInput: { classPropertyName: "displaySettingsInput", publicName: "displaySettingsInput", isSignal: true, isRequired: false, transformFunction: null }, questionnaireEntityId: { classPropertyName: "questionnaireEntityId", publicName: "questionnaireEntityId", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "fullscreenDirective", first: true, predicate: ["fullscreen"], descendants: true, isSignal: true }, { propertyName: "standardRef", first: true, predicate: AXPStandardSectionItemsBuilderComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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>", styles: [".axm-questionnaire-questions-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-questions-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-questions-builder .__header .__header-left,.axm-questionnaire-questions-builder .__header .__header-right{display:flex;gap:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStandardSectionItemsBuilderComponent, selector: "axp-standard-section-items-builder", inputs: ["value", "config", "readonly"], outputs: ["valueChange"] }, { kind: "directive", type: AXFullScreenDirective, selector: "[axFullscreen]", outputs: ["fullscreenChange"], exportAs: ["axFullscreen"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireQuestionsBuilderComponent, isStandalone: true, selector: "axm-questionnaire-questions-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, prePostConfig: { classPropertyName: "prePostConfig", publicName: "prePostConfig", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, displaySettingsInput: { classPropertyName: "displaySettingsInput", publicName: "displaySettingsInput", isSignal: true, isRequired: false, transformFunction: null }, questionnaireEntityId: { classPropertyName: "questionnaireEntityId", publicName: "questionnaireEntityId", isSignal: true, isRequired: false, transformFunction: null }, questionnaireTitle: { classPropertyName: "questionnaireTitle", publicName: "questionnaireTitle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "fullscreenDirective", first: true, predicate: ["fullscreen"], descendants: true, isSignal: true }, { propertyName: "standardRef", first: true, predicate: AXPStandardSectionItemsBuilderComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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>", styles: [".axm-questionnaire-questions-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-questions-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-questions-builder .__header .__header-left,.axm-questionnaire-questions-builder .__header .__header-right{display:flex;gap:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXSwitchModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStandardSectionItemsBuilderComponent, selector: "axp-standard-section-items-builder", inputs: ["value", "config", "readonly"], outputs: ["valueChange"] }, { kind: "directive", type: AXFullScreenDirective, selector: "[axFullscreen]", outputs: ["fullscreenChange"], exportAs: ["axFullscreen"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3039
3055
  }
3040
3056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireQuestionsBuilderComponent, decorators: [{
3041
3057
  type: Component,
@@ -3052,7 +3068,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3052
3068
  AXPStandardSectionItemsBuilderComponent,
3053
3069
  AXFullScreenDirective,
3054
3070
  ], template: "<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>", styles: [".axm-questionnaire-questions-builder{display:flex;height:100%;width:100%;flex-direction:column}.axm-questionnaire-questions-builder .__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;border-bottom-width:1px;padding:.75rem}.axm-questionnaire-questions-builder .__header .__header-left,.axm-questionnaire-questions-builder .__header .__header-right{display:flex;gap:.5rem}\n"] }]
3055
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], prePostConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "prePostConfig", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], displaySettingsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "displaySettingsInput", required: false }] }], questionnaireEntityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireEntityId", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], fullscreenDirective: [{ type: i0.ViewChild, args: ['fullscreen', { isSignal: true }] }], standardRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPStandardSectionItemsBuilderComponent), { isSignal: true }] }] } });
3071
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], prePostConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "prePostConfig", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], displaySettingsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "displaySettingsInput", required: false }] }], questionnaireEntityId: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireEntityId", required: false }] }], questionnaireTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireTitle", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], fullscreenDirective: [{ type: i0.ViewChild, args: ['fullscreen', { isSignal: true }] }], standardRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPStandardSectionItemsBuilderComponent), { isSignal: true }] }] } });
3056
3072
 
3057
3073
  /** Component key for the questionnaire Questions page tab. Register via AXP_PAGE_COMPONENT_PROVIDER. */
3058
3074
  const QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY = 'questionnaire-questions-page';
@@ -3176,7 +3192,8 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3176
3192
  * 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.
3177
3193
  */
3178
3194
  this.questionsBaselinePendingReconcile = signal(false, ...(ngDevMode ? [{ debugName: "questionsBaselinePendingReconcile" }] : /* istanbul ignore next */ []));
3179
- this.isDirty = signal(false, ...(ngDevMode ? [{ debugName: "isDirty" }] : /* istanbul ignore next */ []));
3195
+ /** Avoid naming `isDirty` collides with {@link AXPContextStore.isDirty} on injected stores. */
3196
+ this.hasUnsavedChanges = signal(false, ...(ngDevMode ? [{ debugName: "hasUnsavedChanges" }] : /* istanbul ignore next */ []));
3180
3197
  //#endregion
3181
3198
  //#region ---- Computed State ----
3182
3199
  /** Current context: prefer local updates so edits are preserved. */
@@ -3201,6 +3218,13 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3201
3218
  const ctx = this.context();
3202
3219
  return resolvePersistedEntityId(ctx);
3203
3220
  }, ...(ngDevMode ? [{ debugName: "questionnaireEntityId" }] : /* istanbul ignore next */ []));
3221
+ /** Resolved questionnaire name for preview popup title. */
3222
+ this.questionnaireDisplayTitle = computed(() => {
3223
+ const title = this.context()['title'];
3224
+ const locale = this.translateService.getActiveLang?.() ?? 'en-US';
3225
+ const resolved = resolveMultiLanguageString(title, locale).trim();
3226
+ return resolved || undefined;
3227
+ }, ...(ngDevMode ? [{ debugName: "questionnaireDisplayTitle" }] : /* istanbul ignore next */ []));
3204
3228
  let previousRootId = undefined;
3205
3229
  effect(() => {
3206
3230
  const ctx = this.rootContext();
@@ -3210,7 +3234,7 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3210
3234
  this.localContext.set(null);
3211
3235
  const rootQuestions = ctx?.['questions'];
3212
3236
  this.baselineQuestions.set(this.cloneQuestions(rootQuestions));
3213
- this.isDirty.set(false);
3237
+ this.hasUnsavedChanges.set(false);
3214
3238
  this.questionsBaselinePendingReconcile.set(true);
3215
3239
  }
3216
3240
  });
@@ -3260,7 +3284,7 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3260
3284
  zone: 'footer',
3261
3285
  priority: 'secondary',
3262
3286
  color: 'default',
3263
- visible: this.isDirty(),
3287
+ visible: this.hasUnsavedChanges(),
3264
3288
  command: {
3265
3289
  name: QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND,
3266
3290
  options: {},
@@ -3272,7 +3296,7 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3272
3296
  zone: 'footer',
3273
3297
  priority: 'primary',
3274
3298
  color: 'primary',
3275
- visible: this.isDirty(),
3299
+ visible: this.hasUnsavedChanges(),
3276
3300
  command: {
3277
3301
  name: QUESTIONNAIRE_QUESTIONS_SAVE_COMMAND,
3278
3302
  options: {},
@@ -3286,7 +3310,7 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3286
3310
  if (command.name === QUESTIONNAIRE_QUESTIONS_DISCARD_COMMAND) {
3287
3311
  this.ignoreNextValueChange.set(true);
3288
3312
  this.localContext.set(null);
3289
- this.isDirty.set(false);
3313
+ this.hasUnsavedChanges.set(false);
3290
3314
  this.questionsBaselinePendingReconcile.set(true);
3291
3315
  this.recompute();
3292
3316
  return;
@@ -3327,7 +3351,7 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3327
3351
  const savedQuestions = questions ?? { sections: [] };
3328
3352
  this.baselineQuestions.set(this.cloneQuestions(savedQuestions));
3329
3353
  this.localContext.set(null);
3330
- this.isDirty.set(false);
3354
+ this.hasUnsavedChanges.set(false);
3331
3355
  this.questionsBaselinePendingReconcile.set(true);
3332
3356
  this.recompute();
3333
3357
  this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, {
@@ -3351,26 +3375,26 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3351
3375
  const aligned = current ?? value;
3352
3376
  this.baselineQuestions.set(this.cloneQuestions(aligned ?? undefined));
3353
3377
  this.questionsBaselinePendingReconcile.set(false);
3354
- this.isDirty.set(false);
3378
+ this.hasUnsavedChanges.set(false);
3355
3379
  }
3356
3380
  return;
3357
3381
  }
3358
3382
  const base = this.localContext() ?? this.rootContext() ?? {};
3359
3383
  if (this.questionsBaselinePendingReconcile() && this.localContext() == null) {
3360
3384
  this.baselineQuestions.set(this.cloneQuestions(value));
3361
- this.isDirty.set(false);
3385
+ this.hasUnsavedChanges.set(false);
3362
3386
  this.questionsBaselinePendingReconcile.set(false);
3363
3387
  this.localContext.set({ ...base, questions: value });
3364
- this.contextStore.update('questions', value);
3388
+ this.contextStore.update('questions', value, { origin: 'system' });
3365
3389
  this.recompute();
3366
3390
  return;
3367
3391
  }
3368
3392
  const nextContext = { ...base, questions: value };
3369
3393
  this.localContext.set(nextContext);
3370
- this.contextStore.update('questions', value);
3394
+ this.contextStore.update('questions', value, { origin: 'user' });
3371
3395
  const baseline = this.baselineQuestions();
3372
3396
  const dirty = !this.areQuestionsEqual(baseline, value);
3373
- this.isDirty.set(dirty);
3397
+ this.hasUnsavedChanges.set(dirty);
3374
3398
  this.recompute();
3375
3399
  }
3376
3400
  //#endregion
@@ -3414,11 +3438,12 @@ class AXMQuestionnaireQuestionsPageComponent extends AXPPageLayoutBaseComponent
3414
3438
  [prePostConfig]="prePostConfig()"
3415
3439
  [displaySettingsInput]="entityDisplaySettings()"
3416
3440
  [questionnaireEntityId]="questionnaireEntityId()"
3441
+ [questionnaireTitle]="questionnaireDisplayTitle()"
3417
3442
  [showHeader]="false"
3418
3443
  (valueChange)="onQuestionsChange($event)"
3419
3444
  >
3420
3445
  </axm-questionnaire-questions-builder>
3421
- `, isInline: true, dependencies: [{ kind: "component", type: AXMQuestionnaireQuestionsBuilderComponent, selector: "axm-questionnaire-questions-builder", inputs: ["value", "readonly", "prePostConfig", "showHeader", "displaySettingsInput", "questionnaireEntityId"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3446
+ `, isInline: true, dependencies: [{ kind: "component", type: AXMQuestionnaireQuestionsBuilderComponent, selector: "axm-questionnaire-questions-builder", inputs: ["value", "readonly", "prePostConfig", "showHeader", "displaySettingsInput", "questionnaireEntityId", "questionnaireTitle"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3422
3447
  }
3423
3448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireQuestionsPageComponent, decorators: [{
3424
3449
  type: Component,
@@ -3433,6 +3458,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
3433
3458
  [prePostConfig]="prePostConfig()"
3434
3459
  [displaySettingsInput]="entityDisplaySettings()"
3435
3460
  [questionnaireEntityId]="questionnaireEntityId()"
3461
+ [questionnaireTitle]="questionnaireDisplayTitle()"
3436
3462
  [showHeader]="false"
3437
3463
  (valueChange)="onQuestionsChange($event)"
3438
3464
  >
@@ -3985,10 +4011,6 @@ class AXMQuestionnaireOutcomesBuilderComponent {
3985
4011
  this.externalBuilderValue = signal({ sections: [] }, ...(ngDevMode ? [{ debugName: "externalBuilderValue" }] : /* istanbul ignore next */ []));
3986
4012
  /** Skips one `[value]` input sync per local commit echo from the page. */
3987
4013
  this.externalSyncSkipCount = 0;
3988
- //#endregion
3989
- //#region ---- Computed ----
3990
- /** Whether the underlying section-items builder has unsaved edits. */
3991
- this.isDirty = computed(() => this.standardRef()?.isDirty() ?? false, ...(ngDevMode ? [{ debugName: "isDirty" }] : /* istanbul ignore next */ []));
3992
4014
  this.standardConfig = computed(() => ({
3993
4015
  showSectionTechnicalName: true,
3994
4016
  minSectionCount: 1,
@@ -4020,6 +4042,12 @@ class AXMQuestionnaireOutcomesBuilderComponent {
4020
4042
  });
4021
4043
  }
4022
4044
  //#endregion
4045
+ //#region ---- Computed ----
4046
+ /** Whether the underlying section-items builder has unsaved edits. */
4047
+ hasUnsavedChanges() {
4048
+ return this.standardRef()?.isDirty() ?? false;
4049
+ }
4050
+ //#endregion
4023
4051
  //#region ---- Public API ----
4024
4052
  /** Page header command: delegates to standard builder add-section dialog. */
4025
4053
  async addSection() {
@@ -4492,8 +4520,8 @@ class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {
4492
4520
  const ctx = this.context();
4493
4521
  return normalizeQuestionnaireOutcomesValue(ctx['outcomes']);
4494
4522
  }, ...(ngDevMode ? [{ debugName: "outcomesValue" }] : /* istanbul ignore next */ []));
4495
- /** Dirty state owned by {@link AXPSectionItemsBuilderComponent}, read via the hosted builder. */
4496
- this.isDirty = computed(() => this.builderRef()?.isDirty() ?? false, ...(ngDevMode ? [{ debugName: "isDirty" }] : /* istanbul ignore next */ []));
4523
+ /** Dirty state owned by the hosted builder (not named `isDirty` — collides with {@link AXPContextStore.isDirty}). */
4524
+ this.hasUnsavedChanges = computed(() => this.builderRef()?.hasUnsavedChanges() ?? false, ...(ngDevMode ? [{ debugName: "hasUnsavedChanges" }] : /* istanbul ignore next */ []));
4497
4525
  let previousRootId = undefined;
4498
4526
  effect(() => {
4499
4527
  const ctx = this.rootContext();
@@ -4504,7 +4532,7 @@ class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {
4504
4532
  }
4505
4533
  });
4506
4534
  effect(() => {
4507
- this.builderRef()?.isDirty();
4535
+ this.builderRef()?.hasUnsavedChanges();
4508
4536
  untracked(() => this.recompute());
4509
4537
  });
4510
4538
  }
@@ -4531,7 +4559,7 @@ class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {
4531
4559
  zone: 'footer',
4532
4560
  priority: 'secondary',
4533
4561
  color: 'default',
4534
- visible: this.isDirty(),
4562
+ visible: this.hasUnsavedChanges(),
4535
4563
  command: {
4536
4564
  name: QUESTIONNAIRE_OUTCOMES_DISCARD_COMMAND,
4537
4565
  options: {},
@@ -4543,7 +4571,7 @@ class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {
4543
4571
  zone: 'footer',
4544
4572
  priority: 'primary',
4545
4573
  color: 'primary',
4546
- visible: this.isDirty(),
4574
+ visible: this.hasUnsavedChanges(),
4547
4575
  command: {
4548
4576
  name: QUESTIONNAIRE_OUTCOMES_SAVE_COMMAND,
4549
4577
  options: {},
@@ -4617,7 +4645,8 @@ class AXMQuestionnaireOutcomesPageComponent extends AXPPageLayoutBaseComponent {
4617
4645
  }
4618
4646
  const base = this.localContext() ?? this.rootContext() ?? {};
4619
4647
  this.localContext.set({ ...base, outcomes: value });
4620
- this.contextStore.update('outcomes', value);
4648
+ // Builder owns dirty state; keep shared context in sync without marking the entity form dirty.
4649
+ this.contextStore.update('outcomes', value, { origin: 'system' });
4621
4650
  this.recompute();
4622
4651
  }
4623
4652
  //#endregion
@@ -4716,6 +4745,55 @@ var index = /*#__PURE__*/Object.freeze({
4716
4745
  //#region ---- Questionnaire builder feature exports ----
4717
4746
  //#endregion
4718
4747
 
4748
+ //#region ---- Imports ----
4749
+ //#endregion
4750
+ //#region ---- Normalization ----
4751
+ /**
4752
+ * Normalize entity attachments (string[] or file list items) to viewer attachment list.
4753
+ * Prefers `source.kind === 'fileId'` over row `id` (row id is often a client UUID, not storage id).
4754
+ */
4755
+ function normalizeQuestionnaireViewerAttachments(raw) {
4756
+ if (raw == null)
4757
+ return [];
4758
+ if (!Array.isArray(raw))
4759
+ return [];
4760
+ return raw
4761
+ .map((item) => {
4762
+ if (typeof item === 'string') {
4763
+ return { id: item, name: undefined };
4764
+ }
4765
+ if (!item || typeof item !== 'object') {
4766
+ return null;
4767
+ }
4768
+ const row = item;
4769
+ if (row.status === 'deleted') {
4770
+ return null;
4771
+ }
4772
+ const src = row.source;
4773
+ if (src?.kind === 'fileId' && typeof src.value === 'string' && src.value.trim()) {
4774
+ return { id: src.value, name: typeof row.name === 'string' ? row.name : undefined };
4775
+ }
4776
+ if (typeof row.id === 'string' && row.id.trim()) {
4777
+ return { id: row.id, name: typeof row.name === 'string' ? row.name : undefined };
4778
+ }
4779
+ return null;
4780
+ })
4781
+ .filter((a) => a != null);
4782
+ }
4783
+ /**
4784
+ * Map viewer attachments to `AXPFileListItem` for `axp-file-list` (links look).
4785
+ */
4786
+ function questionnaireViewerAttachmentsToFileListItems(attachments) {
4787
+ return attachments.map((att) => ({
4788
+ id: att.id,
4789
+ name: att.name ?? att.id,
4790
+ status: 'attached',
4791
+ source: { kind: 'fileId', value: att.id },
4792
+ readOnly: true,
4793
+ }));
4794
+ }
4795
+ //#endregion
4796
+
4719
4797
  //#region ---- Imports ----
4720
4798
  //#endregion
4721
4799
  /** Guards concurrent `refreshVisibility` runs; incremented on each refresh. */
@@ -4749,33 +4827,6 @@ function normalizeValidationStrategy(value) {
4749
4827
  return 'step';
4750
4828
  }
4751
4829
  //#region ---- Helpers ----
4752
- /**
4753
- * Normalize question bank attachments (string[] or AXPFileListItem[]) to viewer attachment list.
4754
- */
4755
- function normalizeAttachments(raw) {
4756
- if (raw == null)
4757
- return [];
4758
- if (!Array.isArray(raw))
4759
- return [];
4760
- return raw
4761
- .map((item) => {
4762
- if (typeof item === 'string')
4763
- return { id: item, name: undefined };
4764
- if (item && typeof item === 'object' && 'id' in item && typeof item.id === 'string') {
4765
- const obj = item;
4766
- return { id: obj.id, name: typeof obj.name === 'string' ? obj.name : undefined };
4767
- }
4768
- if (item && typeof item === 'object' && 'source' in item) {
4769
- const src = item.source;
4770
- if (src?.kind === 'fileId' && typeof src.value === 'string') {
4771
- const name = item.name;
4772
- return { id: src.value, name: typeof name === 'string' ? name : undefined };
4773
- }
4774
- }
4775
- return null;
4776
- })
4777
- .filter((a) => a != null);
4778
- }
4779
4830
  function resolvedCommentPolicyForBuilderItem(item, questionDetails) {
4780
4831
  const bank = normalizeQuestionCommentConfig(questionDetails?.comment);
4781
4832
  const override = item.comment;
@@ -4858,6 +4909,10 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
4858
4909
  const data = store.questionnaireData();
4859
4910
  return data?.sections || [];
4860
4911
  }),
4912
+ questionnaireAttachments: computed(() => {
4913
+ const data = store.questionnaireData();
4914
+ return data?.attachments ?? [];
4915
+ }),
4861
4916
  /** Section indices that have at least one visible question (for side-menu tabs, etc.). */
4862
4917
  sectionIndicesWithVisibleContent: computed(() => {
4863
4918
  const data = store.questionnaireData();
@@ -5341,7 +5396,7 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
5341
5396
  },
5342
5397
  //#endregion
5343
5398
  //#region ---- Data Loading ----
5344
- async loadQuestionnaire(id, initialAnswers, config) {
5399
+ async loadQuestionnaire(id, initialAnswers, config, structureDisplaySettings) {
5345
5400
  patchState(store, { isLoading: true, error: null, config: config || null });
5346
5401
  try {
5347
5402
  const questionnaire = await entityService
@@ -5352,6 +5407,7 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
5352
5407
  throw new Error('Questionnaire not found');
5353
5408
  }
5354
5409
  const structure = questionnaire.questions || { sections: [] };
5410
+ const displaySettings = structureDisplaySettings ?? toDisplaySettings(questionnaire) ?? undefined;
5355
5411
  const sectionsWithQuestions = await Promise.all(structure.sections.map(async (section, sectionIndex) => {
5356
5412
  const sectionName = persistedSectionName(section, sectionIndex);
5357
5413
  const questions = await Promise.all(section.items.map(async (item, itemIndex) => {
@@ -5395,7 +5451,7 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
5395
5451
  },
5396
5452
  };
5397
5453
  }
5398
- const attachments = normalizeAttachments(questionDetails?.['attachments']);
5454
+ const attachments = normalizeQuestionnaireViewerAttachments(questionDetails?.['attachments']);
5399
5455
  return {
5400
5456
  name: persistedItemName(item, itemIndex),
5401
5457
  questionBankItemId: item.questionBankItemId,
@@ -5434,12 +5490,18 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
5434
5490
  questions: questions.sort((a, b) => a.order - b.order),
5435
5491
  };
5436
5492
  }));
5493
+ const questionnaireAttachments = normalizeQuestionnaireViewerAttachments(questionnaire.attachments);
5437
5494
  patchState(store, {
5495
+ structure: {
5496
+ sections: structure.sections ?? [],
5497
+ displaySettings,
5498
+ },
5438
5499
  questionnaireData: {
5439
5500
  id: questionnaire.id,
5440
5501
  title: questionnaire.title,
5441
5502
  description: questionnaire.description,
5442
5503
  type: questionnaire.type,
5504
+ attachments: questionnaireAttachments.length > 0 ? questionnaireAttachments : undefined,
5443
5505
  sections: sectionsWithQuestions.sort((a, b) => a.order - b.order),
5444
5506
  },
5445
5507
  isLoading: false,
@@ -5541,7 +5603,7 @@ const AXMQuestionnaireViewerViewModel = signalStore(withState(() => ({
5541
5603
  difficulty: undefined,
5542
5604
  interface: widgetInterface,
5543
5605
  };
5544
- const attachmentsLoadStructure = normalizeAttachments(questionDetails?.['attachments']);
5606
+ const attachmentsLoadStructure = normalizeQuestionnaireViewerAttachments(questionDetails?.['attachments']);
5545
5607
  return {
5546
5608
  name: persistedItemName(item, itemIndex),
5547
5609
  questionBankItemId: item.questionBankItemId,
@@ -6366,7 +6428,6 @@ class AXMQuestionnaireViewerQuestionComponent {
6366
6428
  /** Exposed for template `@if (containsHtmlMarkup(...))`. */
6367
6429
  this.containsHtmlMarkup = containsHtmlMarkup;
6368
6430
  this.vm = inject(AXMQuestionnaireViewerViewModel, { optional: true });
6369
- this.fileStorageService = inject(AXPFileStorageService, { optional: true });
6370
6431
  //#endregion
6371
6432
  //#region ---- Inputs ----
6372
6433
  this.question = input.required(...(ngDevMode ? [{ debugName: "question" }] : /* istanbul ignore next */ []));
@@ -6450,6 +6511,7 @@ class AXMQuestionnaireViewerQuestionComponent {
6450
6511
  const q = this.question();
6451
6512
  return q?.attachments ?? [];
6452
6513
  }, ...(ngDevMode ? [{ debugName: "questionAttachments" }] : /* istanbul ignore next */ []));
6514
+ this.questionAttachmentFiles = computed(() => questionnaireViewerAttachmentsToFileListItems(this.questionAttachments()), ...(ngDevMode ? [{ debugName: "questionAttachmentFiles" }] : /* istanbul ignore next */ []));
6453
6515
  /**
6454
6516
  * Storage path for respondent comment text (`answers.comments.<questionItemName>`).
6455
6517
  */
@@ -6485,54 +6547,6 @@ class AXMQuestionnaireViewerQuestionComponent {
6485
6547
  const next = e.value ?? '';
6486
6548
  cs.update(path, next);
6487
6549
  }
6488
- /**
6489
- * Open/download attachment using the same approach as axp-file-list (file-uploader):
6490
- * - If storage returns a URL: use an anchor with href + target _blank + programmatic click.
6491
- * - If storage returns binary only: create object URL from blob and trigger download.
6492
- * Avoids window.open() which can open an empty tab when url is undefined.
6493
- */
6494
- async openAttachment(event, att) {
6495
- event.preventDefault();
6496
- if (!this.fileStorageService || !att?.id)
6497
- return;
6498
- try {
6499
- const info = await this.fileStorageService.getInfo(att.id);
6500
- const fileName = att.name ?? info.name ?? 'download';
6501
- if (info && info.binary instanceof Blob) {
6502
- const blob = info.binary;
6503
- this.triggerDownload(blob, fileName);
6504
- return;
6505
- }
6506
- if (info && typeof info.url === 'string' && info.url) {
6507
- const url = info.url;
6508
- const link = document.createElement('a');
6509
- link.href = url;
6510
- link.download = fileName;
6511
- link.target = '_blank';
6512
- link.rel = 'noopener noreferrer';
6513
- document.body.appendChild(link);
6514
- link.click();
6515
- document.body.removeChild(link);
6516
- return;
6517
- }
6518
- }
6519
- catch (err) {
6520
- console.error('[QuestionnaireViewerQuestion] Error opening attachment:', att.id, err);
6521
- }
6522
- }
6523
- /**
6524
- * Trigger file download from blob (same as file-list triggerDownload).
6525
- */
6526
- triggerDownload(blob, fileName) {
6527
- const url = URL.createObjectURL(blob);
6528
- const link = document.createElement('a');
6529
- link.href = url;
6530
- link.download = fileName;
6531
- document.body.appendChild(link);
6532
- link.click();
6533
- document.body.removeChild(link);
6534
- URL.revokeObjectURL(url);
6535
- }
6536
6550
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerQuestionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6537
6551
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerQuestionComponent, isStandalone: true, selector: "axm-questionnaire-viewer-question", inputs: { question: { classPropertyName: "question", publicName: "question", isSignal: true, isRequired: true, transformFunction: null }, contextData: { classPropertyName: "contextData", publicName: "contextData", isSignal: true, isRequired: false, transformFunction: null }, sectionOrder: { classPropertyName: "sectionOrder", publicName: "sectionOrder", isSignal: true, isRequired: true, transformFunction: null }, questionIndex: { classPropertyName: "questionIndex", publicName: "questionIndex", isSignal: true, isRequired: true, transformFunction: null }, showQuestionNumbers: { classPropertyName: "showQuestionNumbers", publicName: "showQuestionNumbers", isSignal: true, isRequired: false, transformFunction: null }, showQuestionCounter: { classPropertyName: "showQuestionCounter", publicName: "showQuestionCounter", isSignal: true, isRequired: false, transformFunction: null }, currentPosition: { classPropertyName: "currentPosition", publicName: "currentPosition", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
6538
6552
  <div class="__question-item" [class.__answered]="isAnswered()" [class.__view-mode]="effectiveMode() === 'view'">
@@ -6640,28 +6654,16 @@ class AXMQuestionnaireViewerQuestionComponent {
6640
6654
  }
6641
6655
 
6642
6656
  @if (questionAttachments().length > 0) {
6643
- <div class="__attachments">
6644
- <span class="__attachments-label"
6645
- >{{
6646
- '@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title'
6647
- | translate
6648
- | async
6649
- }}:</span
6650
- >
6651
- <ul class="__attachments-list">
6652
- @for (att of questionAttachments(); track att.id) {
6653
- <li>
6654
- <a class="__attachment-link" href="#" (click)="openAttachment($event, att)" role="button">
6655
- <i class="fa-light fa-paperclip"></i>
6656
- {{ att.name || att.id }}
6657
- </a>
6658
- </li>
6659
- }
6660
- </ul>
6661
- </div>
6657
+ <axp-file-list
6658
+ [files]="questionAttachmentFiles()"
6659
+ look="links"
6660
+ linksLayout="inline"
6661
+ [readonly]="true"
6662
+ titleKey="@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title"
6663
+ />
6662
6664
  }
6663
6665
  </div>
6664
- `, isInline: true, styles: ["axm-questionnaire-viewer-question{display:block}axm-questionnaire-viewer-question .__question-item{display:flex;flex-direction:column;gap:.25rem;padding:1rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}axm-questionnaire-viewer-question .__question-item.__answered{border-radius:.5rem;background:rgba(var(--ax-sys-color-primary-surface),.14)}axm-questionnaire-viewer-question .__question-item.__answered:not(.__view-mode){border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header{display:flex;width:100%;min-width:0px;align-items:flex-start;justify-content:space-between;gap:1rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left{display:flex;flex-shrink:0;align-items:center;gap:.75rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-number{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-counter{font-size:.75rem;line-height:1rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:flex-start;gap:.5rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block{min-width:0px;flex:1 1 0%;text-align:start}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title{margin:0;min-width:0px;flex:1 1 0%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block h3.__question-title{font-weight:500}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich{width:100%;max-width:100%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich li{margin-block:.125rem;padding-inline-start:.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul ul{list-style-type:circle;margin-block:.25rem 0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title.__question-title--rich{font-weight:400}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__answered-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-success-lighter-surface));color:rgb(var(--ax-sys-color-on-success-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__required-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-warning-lighter-surface));color:rgb(var(--ax-sys-color-on-warning-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-note{font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-note p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-note p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-note ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note li{margin-block:.125rem}axm-questionnaire-viewer-question .__question-item .__question-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-widget{text-align:start}axm-questionnaire-viewer-question .__question-item .__question-widget>*{margin-bottom:0}axm-questionnaire-viewer-question .__question-item .__widget-placeholder{border-radius:.25rem;border-width:1px;border-style:dashed;padding:1rem;font-size:.875rem;line-height:1.25rem;font-style:italic;color:rgb(var(--ax-sys-color-on-surface-variant));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment{display:flex;width:100%;flex-direction:column;gap:.25rem}axm-questionnaire-viewer-question .__question-item .__question-comment ax-text-area{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment--readonly{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment-text{margin:0;width:100%;font-size:.875rem;line-height:1.25rem;white-space:pre-wrap;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment-label{font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-comment-required{color:rgb(var(--ax-sys-color-danger-600))}axm-questionnaire-viewer-question .__question-item .__attachments{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding-top:.75rem}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-label{margin-inline-end:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list{margin:0;margin-top:.25rem;list-style-type:none;padding-left:0}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li{margin-top:.25rem}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link{display:inline-flex;align-items:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:underline;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:rgb(var(--ax-sys-color-primary-dark-surface))}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link:hover{opacity:.9}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link i{flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXAlertModule }, { kind: "component", type: i2$1.AXAlertComponent, selector: "ax-alert", inputs: ["color", "timeOut"], outputs: ["colorChange", "onClosed", "timeOutChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTextAreaModule }, { kind: "component", type: i4$1.AXTextAreaComponent, selector: "ax-text-area", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "placeholder", "maxLength", "look", "rows", "allowResize", "showCounter", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6666
+ `, isInline: true, styles: ["axm-questionnaire-viewer-question{display:block}axm-questionnaire-viewer-question .__question-item{display:flex;flex-direction:column;gap:.25rem;padding:1rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-question .__question-item:hover{background:rgba(var(--ax-sys-color-primary-surface),.08);border-color:rgba(var(--ax-sys-color-primary-surface),.14)}axm-questionnaire-viewer-question .__question-item.__answered{background:rgba(var(--ax-sys-color-primary-surface),.14);border-color:rgba(var(--ax-sys-color-primary-surface),.5)}axm-questionnaire-viewer-question .__question-item .__question-header{display:flex;width:100%;min-width:0px;align-items:flex-start;justify-content:space-between;gap:1rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left{display:flex;flex-shrink:0;align-items:center;gap:.75rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-number{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-counter{font-size:.75rem;line-height:1rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:flex-start;gap:.5rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block{min-width:0px;flex:1 1 0%;text-align:start}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title{margin:0;min-width:0px;flex:1 1 0%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block h3.__question-title{font-weight:500}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich{width:100%;max-width:100%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich li{margin-block:.125rem;padding-inline-start:.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul ul{list-style-type:circle;margin-block:.25rem 0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title.__question-title--rich{font-weight:400}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__answered-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-success-lighter-surface));color:rgb(var(--ax-sys-color-on-success-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__required-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-warning-lighter-surface));color:rgb(var(--ax-sys-color-on-warning-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-note{font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-note p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-note p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-note ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note li{margin-block:.125rem}axm-questionnaire-viewer-question .__question-item .__question-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-widget{text-align:start}axm-questionnaire-viewer-question .__question-item .__question-widget>*{margin-bottom:0}axm-questionnaire-viewer-question .__question-item .__widget-placeholder{border-radius:.25rem;border-width:1px;border-style:dashed;padding:1rem;font-size:.875rem;line-height:1.25rem;font-style:italic;color:rgb(var(--ax-sys-color-on-surface-variant));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment{display:flex;width:100%;flex-direction:column;gap:.25rem}axm-questionnaire-viewer-question .__question-item .__question-comment ax-text-area{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment--readonly{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment-text{margin:0;width:100%;font-size:.875rem;line-height:1.25rem;white-space:pre-wrap;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment-label{font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-comment-required{color:rgb(var(--ax-sys-color-danger-600))}axm-questionnaire-viewer-question .__question-item axp-file-list.--look-links.--links-inline{display:block;padding-top:.75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "directive", type: i1$1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"], outputs: ["onOptionsChanged", "onValueChanged", "onLoad"], exportAs: ["widgetRenderer"] }, { kind: "ngmodule", type: AXAlertModule }, { kind: "component", type: i2$1.AXAlertComponent, selector: "ax-alert", inputs: ["color", "timeOut"], outputs: ["colorChange", "onClosed", "timeOutChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTextAreaModule }, { kind: "component", type: i4$1.AXTextAreaComponent, selector: "ax-text-area", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "placeholder", "maxLength", "look", "rows", "allowResize", "showCounter", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "titleKey", "showLabel", "linksLayout", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AXSafePipe, name: "safe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6665
6667
  }
6666
6668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerQuestionComponent, decorators: [{
6667
6669
  type: Component,
@@ -6771,25 +6773,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6771
6773
  }
6772
6774
 
6773
6775
  @if (questionAttachments().length > 0) {
6774
- <div class="__attachments">
6775
- <span class="__attachments-label"
6776
- >{{
6777
- '@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title'
6778
- | translate
6779
- | async
6780
- }}:</span
6781
- >
6782
- <ul class="__attachments-list">
6783
- @for (att of questionAttachments(); track att.id) {
6784
- <li>
6785
- <a class="__attachment-link" href="#" (click)="openAttachment($event, att)" role="button">
6786
- <i class="fa-light fa-paperclip"></i>
6787
- {{ att.name || att.id }}
6788
- </a>
6789
- </li>
6790
- }
6791
- </ul>
6792
- </div>
6776
+ <axp-file-list
6777
+ [files]="questionAttachmentFiles()"
6778
+ look="links"
6779
+ linksLayout="inline"
6780
+ [readonly]="true"
6781
+ titleKey="@assessment-management:questionnaires.components.questionnaire-viewer.attachments.title"
6782
+ />
6793
6783
  }
6794
6784
  </div>
6795
6785
  `, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
@@ -6802,7 +6792,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6802
6792
  AXTextAreaModule,
6803
6793
  AXFormModule,
6804
6794
  FormsModule,
6805
- ], encapsulation: ViewEncapsulation.None, styles: ["axm-questionnaire-viewer-question{display:block}axm-questionnaire-viewer-question .__question-item{display:flex;flex-direction:column;gap:.25rem;padding:1rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}axm-questionnaire-viewer-question .__question-item.__answered{border-radius:.5rem;background:rgba(var(--ax-sys-color-primary-surface),.14)}axm-questionnaire-viewer-question .__question-item.__answered:not(.__view-mode){border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header{display:flex;width:100%;min-width:0px;align-items:flex-start;justify-content:space-between;gap:1rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left{display:flex;flex-shrink:0;align-items:center;gap:.75rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-number{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-counter{font-size:.75rem;line-height:1rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:flex-start;gap:.5rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block{min-width:0px;flex:1 1 0%;text-align:start}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title{margin:0;min-width:0px;flex:1 1 0%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block h3.__question-title{font-weight:500}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich{width:100%;max-width:100%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich li{margin-block:.125rem;padding-inline-start:.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul ul{list-style-type:circle;margin-block:.25rem 0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title.__question-title--rich{font-weight:400}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__answered-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-success-lighter-surface));color:rgb(var(--ax-sys-color-on-success-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__required-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-warning-lighter-surface));color:rgb(var(--ax-sys-color-on-warning-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-note{font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-note p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-note p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-note ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note li{margin-block:.125rem}axm-questionnaire-viewer-question .__question-item .__question-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-widget{text-align:start}axm-questionnaire-viewer-question .__question-item .__question-widget>*{margin-bottom:0}axm-questionnaire-viewer-question .__question-item .__widget-placeholder{border-radius:.25rem;border-width:1px;border-style:dashed;padding:1rem;font-size:.875rem;line-height:1.25rem;font-style:italic;color:rgb(var(--ax-sys-color-on-surface-variant));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment{display:flex;width:100%;flex-direction:column;gap:.25rem}axm-questionnaire-viewer-question .__question-item .__question-comment ax-text-area{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment--readonly{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment-text{margin:0;width:100%;font-size:.875rem;line-height:1.25rem;white-space:pre-wrap;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment-label{font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-comment-required{color:rgb(var(--ax-sys-color-danger-600))}axm-questionnaire-viewer-question .__question-item .__attachments{border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding-top:.75rem}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-label{margin-inline-end:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list{margin:0;margin-top:.25rem;list-style-type:none;padding-left:0}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li{margin-top:.25rem}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link{display:inline-flex;align-items:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:underline;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;color:rgb(var(--ax-sys-color-primary-dark-surface))}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link:hover{opacity:.9}axm-questionnaire-viewer-question .__question-item .__attachments .__attachments-list li .__attachment-link i{flex-shrink:0}\n"] }]
6795
+ AXPFileListComponent,
6796
+ ], encapsulation: ViewEncapsulation.None, styles: ["axm-questionnaire-viewer-question{display:block}axm-questionnaire-viewer-question .__question-item{display:flex;flex-direction:column;gap:.25rem;padding:1rem;text-align:start;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s;border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-question .__question-item:hover{background:rgba(var(--ax-sys-color-primary-surface),.08);border-color:rgba(var(--ax-sys-color-primary-surface),.14)}axm-questionnaire-viewer-question .__question-item.__answered{background:rgba(var(--ax-sys-color-primary-surface),.14);border-color:rgba(var(--ax-sys-color-primary-surface),.5)}axm-questionnaire-viewer-question .__question-item .__question-header{display:flex;width:100%;min-width:0px;align-items:flex-start;justify-content:space-between;gap:1rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left{display:flex;flex-shrink:0;align-items:center;gap:.75rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-number{font-size:.875rem;line-height:1.25rem;font-weight:600;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-left .__question-counter{font-size:.75rem;line-height:1rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right{display:flex;min-width:0px;flex:1 1 0%;flex-wrap:wrap;align-items:flex-start;gap:.5rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block{min-width:0px;flex:1 1 0%;text-align:start}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title{margin:0;min-width:0px;flex:1 1 0%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block h3.__question-title{font-weight:500}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich{width:100%;max-width:100%;text-align:start;font-size:1rem;line-height:1.5rem;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich li{margin-block:.125rem;padding-inline-start:.25rem}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title--rich ul ul{list-style-type:circle;margin-block:.25rem 0}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__question-title-block .__question-title.__question-title--rich{font-weight:400}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__answered-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-success-lighter-surface));color:rgb(var(--ax-sys-color-on-success-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-header .__question-header-right .__required-badge{border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;font-weight:500;background-color:rgb(var(--ax-sys-color-warning-lighter-surface));color:rgb(var(--ax-sys-color-on-warning-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-note{font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-note p{margin:0}axm-questionnaire-viewer-question .__question-item .__question-note p:first-child{margin-top:0}axm-questionnaire-viewer-question .__question-item .__question-note ul{list-style-type:disc;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note ol{list-style-type:decimal;list-style-position:outside;margin-block:.375rem 0;padding-inline-start:1.25rem}axm-questionnaire-viewer-question .__question-item .__question-note li{margin-block:.125rem}axm-questionnaire-viewer-question .__question-item .__question-description{margin-top:.25rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-widget{text-align:start}axm-questionnaire-viewer-question .__question-item .__question-widget>*{margin-bottom:0}axm-questionnaire-viewer-question .__question-item .__widget-placeholder{border-radius:.25rem;border-width:1px;border-style:dashed;padding:1rem;font-size:.875rem;line-height:1.25rem;font-style:italic;color:rgb(var(--ax-sys-color-on-surface-variant));--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment{display:flex;width:100%;flex-direction:column;gap:.25rem}axm-questionnaire-viewer-question .__question-item .__question-comment ax-text-area{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment--readonly{margin-top:.5rem}axm-questionnaire-viewer-question .__question-item .__question-comment-text{margin:0;width:100%;font-size:.875rem;line-height:1.25rem;white-space:pre-wrap;color:rgb(var(--ax-sys-color-on-surface))}axm-questionnaire-viewer-question .__question-item .__question-comment-label{font-size:.875rem;line-height:1.25rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-question .__question-item .__question-comment-required{color:rgb(var(--ax-sys-color-danger-600))}axm-questionnaire-viewer-question .__question-item axp-file-list.--look-links.--links-inline{display:block;padding-top:.75rem}\n"] }]
6806
6797
  }], propDecorators: { question: [{ type: i0.Input, args: [{ isSignal: true, alias: "question", required: true }] }], contextData: [{ type: i0.Input, args: [{ isSignal: true, alias: "contextData", required: false }] }], sectionOrder: [{ type: i0.Input, args: [{ isSignal: true, alias: "sectionOrder", required: true }] }], questionIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionIndex", required: true }] }], showQuestionNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showQuestionNumbers", required: false }] }], showQuestionCounter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showQuestionCounter", required: false }] }], currentPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPosition", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }] } });
6807
6798
 
6808
6799
  //#region ---- Imports ----
@@ -6898,35 +6889,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6898
6889
  * Displays all sections and questions on a single page
6899
6890
  */
6900
6891
  class AXMQuestionnaireViewerSinglePageViewComponent {
6901
- //#endregion
6902
- //#region ---- Sticky parent initialization ----
6903
6892
  constructor() {
6904
6893
  //#region ---- Services & Dependencies ----
6905
6894
  this.vm = inject(AXMQuestionnaireViewerViewModel);
6906
- this.host = inject((ElementRef));
6907
- this.stickyParent = signal(null, ...(ngDevMode ? [{ debugName: "stickyParent" }] : /* istanbul ignore next */ []));
6908
- afterNextRender(() => {
6909
- this.stickyParent.set(this.findScrollParent(this.host.nativeElement));
6910
- });
6911
- }
6912
- findScrollParent(from) {
6913
- let node = from?.parentElement ?? null;
6914
- while (node) {
6915
- const { overflowY } = getComputedStyle(node);
6916
- if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {
6917
- return node;
6918
- }
6919
- node = node.parentElement;
6920
- }
6921
- return null;
6922
6895
  }
6923
6896
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerSinglePageViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6924
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerSinglePageViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-single-page-view", ngImport: i0, template: "@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", styles: ["axm-questionnaire-viewer-single-page-view{display:flex;min-height:0px;width:100%;flex-direction:column;gap:1.5rem;padding:1rem}axm-questionnaire-viewer-single-page-view .__single-page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-single-page-view .__questions-list{display:flex;flex-direction:column;gap:.5rem}axm-questionnaire-viewer-single-page-view .__questions-list .__question-item{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}\n"], dependencies: [{ kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6897
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerSinglePageViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-single-page-view", ngImport: i0, template: "<div #viewerScroll class=\"__viewer-scroll\">\n @for (section of vm.sections(); track section.name) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__single-page-section\">\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"viewerScroll\"\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 <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", styles: ["axm-questionnaire-viewer-single-page-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-single-page-view .__single-page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-single-page-view .__questions-list{display:flex;flex-direction:column;gap:.5rem;padding-left:1rem;padding-right:1rem;padding-bottom:1rem}\n"], dependencies: [{ kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6925
6898
  }
6926
6899
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerSinglePageViewComponent, decorators: [{
6927
6900
  type: Component,
6928
- args: [{ selector: 'axm-questionnaire-viewer-single-page-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent], template: "@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", styles: ["axm-questionnaire-viewer-single-page-view{display:flex;min-height:0px;width:100%;flex-direction:column;gap:1.5rem;padding:1rem}axm-questionnaire-viewer-single-page-view .__single-page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axm-questionnaire-viewer-single-page-view .__single-page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-single-page-view .__questions-list{display:flex;flex-direction:column;gap:.5rem}axm-questionnaire-viewer-single-page-view .__questions-list .__question-item{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}\n"] }]
6929
- }], ctorParameters: () => [] });
6901
+ args: [{ selector: 'axm-questionnaire-viewer-single-page-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent], template: "<div #viewerScroll class=\"__viewer-scroll\">\n @for (section of vm.sections(); track section.name) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__single-page-section\">\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"viewerScroll\"\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 <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", styles: ["axm-questionnaire-viewer-single-page-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-single-page-view .__single-page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-single-page-view .__questions-list{display:flex;flex-direction:column;gap:.5rem;padding-left:1rem;padding-right:1rem;padding-bottom:1rem}\n"] }]
6902
+ }] });
6930
6903
 
6931
6904
  //#region ---- Imports ----
6932
6905
  //#endregion
@@ -6936,34 +6909,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6936
6909
  * Displays one section (group) per page
6937
6910
  */
6938
6911
  class AXMQuestionnaireViewerPagePerGroupViewComponent {
6939
- //#endregion
6940
6912
  constructor() {
6941
6913
  //#region ---- Services & Dependencies ----
6942
6914
  this.vm = inject(AXMQuestionnaireViewerViewModel);
6943
- this.host = inject((ElementRef));
6944
- this.stickyParent = signal(null, ...(ngDevMode ? [{ debugName: "stickyParent" }] : /* istanbul ignore next */ []));
6945
- afterNextRender(() => {
6946
- this.stickyParent.set(this.findScrollParent(this.host.nativeElement));
6947
- });
6948
- }
6949
- findScrollParent(from) {
6950
- let node = from?.parentElement ?? null;
6951
- while (node) {
6952
- const { overflowY } = getComputedStyle(node);
6953
- if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {
6954
- return node;
6955
- }
6956
- node = node.parentElement;
6957
- }
6958
- return null;
6959
6915
  }
6960
6916
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerPagePerGroupViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6961
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerPagePerGroupViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-page-per-group-view", ngImport: i0, template: "@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", styles: ["axm-questionnaire-viewer-page-per-group-view{display:flex;min-height:0px;width:100%;flex-direction:column;gap:1rem;padding:1rem}axm-questionnaire-viewer-page-per-group-view .__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-page-per-group-view .__questions-list{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__questions-list .__question-item{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-page-per-group-view .__navigation{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}\n"], dependencies: [{ kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6917
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerPagePerGroupViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-page-per-group-view", ngImport: i0, template: "<div #viewerScroll class=\"__viewer-scroll\">\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__page-group-section\">\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"viewerScroll\"\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 <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", styles: ["axm-questionnaire-viewer-page-per-group-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-page-per-group-view .__page-group-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__questions-list{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding-left:1rem;padding-right:1rem;padding-bottom:1rem}axm-questionnaire-viewer-page-per-group-view .__navigation{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}\n"], dependencies: [{ kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
6962
6918
  }
6963
6919
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerPagePerGroupViewComponent, decorators: [{
6964
6920
  type: Component,
6965
- args: [{ selector: 'axm-questionnaire-viewer-page-per-group-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent], template: "@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", styles: ["axm-questionnaire-viewer-page-per-group-view{display:flex;min-height:0px;width:100%;flex-direction:column;gap:1rem;padding:1rem}axm-questionnaire-viewer-page-per-group-view .__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axm-questionnaire-viewer-page-per-group-view .__page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}axm-questionnaire-viewer-page-per-group-view .__questions-list{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__questions-list .__question-item{border-radius:.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}axm-questionnaire-viewer-page-per-group-view .__navigation{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}\n"] }]
6966
- }], ctorParameters: () => [] });
6921
+ args: [{ selector: 'axm-questionnaire-viewer-page-per-group-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPStickyDirective, AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent], template: "<div #viewerScroll class=\"__viewer-scroll\">\n @if (vm.currentSection(); as section) {\n @if (vm.isSectionVisible(section)) {\n <div class=\"__page-group-section\">\n <div\n class=\"__section-title-sticky\"\n [axpSticky]=\"'--stuck'\"\n [stickyParent]=\"viewerScroll\"\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 <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", styles: ["axm-questionnaire-viewer-page-per-group-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-page-per-group-view .__page-group-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem}axm-questionnaire-viewer-page-per-group-view .__questions-list{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding-left:1rem;padding-right:1rem;padding-bottom:1rem}axm-questionnaire-viewer-page-per-group-view .__navigation{display:flex;align-items:center;justify-content:space-between;border-top-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));padding:1rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}\n"] }]
6922
+ }] });
6967
6923
 
6968
6924
  //#region ---- Imports ----
6969
6925
  //#endregion
@@ -6985,6 +6941,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
6985
6941
  args: [{ selector: 'axm-questionnaire-viewer-page-per-question-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMQuestionnaireViewerQuestionComponent, AXMQuestionnaireViewerSectionHeaderComponent], template: "@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", styles: ["axm-questionnaire-viewer-page-per-question-view{display:flex;flex-direction:column;gap:1rem;padding:1rem;flex-shrink:0;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}\n"] }]
6986
6942
  }] });
6987
6943
 
6944
+ //#endregion
6945
+ //#region ---- Scroll parent resolution ----
6946
+ /**
6947
+ * Resolves the scroll container for questionnaire viewer sticky section headers so
6948
+ * `axpSticky` listens to the same element as `position: sticky`.
6949
+ */
6950
+ function resolveQuestionnaireViewerStickyScrollParent(host, options = {}) {
6951
+ const stickySelector = options.stickySelector ?? '.__section-title-sticky, .__mobile-header-row';
6952
+ const preferred = options.preferredSelector
6953
+ ? host.querySelector(options.preferredSelector)
6954
+ : null;
6955
+ const stickyEl = host.querySelector(stickySelector);
6956
+ if (preferred && isScrollContainer(preferred)) {
6957
+ return preferred;
6958
+ }
6959
+ const overflowingAncestor = findOverflowingScrollParent(stickyEl ?? preferred ?? host);
6960
+ return overflowingAncestor ?? preferred ?? findScrollParent(host);
6961
+ }
6962
+ /**
6963
+ * Updates a sticky scroll-parent signal when layout or questionnaire content changes.
6964
+ */
6965
+ function bindQuestionnaireViewerStickyScrollParent(host, stickyParent, options = {}) {
6966
+ const next = resolveQuestionnaireViewerStickyScrollParent(host, options);
6967
+ if (next !== stickyParent()) {
6968
+ stickyParent.set(next);
6969
+ }
6970
+ }
6971
+ function isScrollContainer(element) {
6972
+ const { overflowY } = getComputedStyle(element);
6973
+ return overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay';
6974
+ }
6975
+ function isActiveScrollContainer(element) {
6976
+ return isScrollContainer(element) && element.scrollHeight > element.clientHeight;
6977
+ }
6978
+ function findOverflowingScrollParent(from) {
6979
+ let node = from?.parentElement ?? null;
6980
+ while (node) {
6981
+ if (isActiveScrollContainer(node)) {
6982
+ return node;
6983
+ }
6984
+ node = node.parentElement;
6985
+ }
6986
+ return null;
6987
+ }
6988
+ function findScrollParent(from) {
6989
+ let node = from?.parentElement ?? null;
6990
+ while (node) {
6991
+ const { overflowY } = getComputedStyle(node);
6992
+ if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {
6993
+ return node;
6994
+ }
6995
+ node = node.parentElement;
6996
+ }
6997
+ return null;
6998
+ }
6999
+ //#endregion
7000
+
6988
7001
  //#region ---- Imports ----
6989
7002
  //#endregion
6990
7003
  //#region ---- Component ----
@@ -7004,14 +7017,20 @@ class AXMQuestionnaireViewerSideMenuViewComponent {
7004
7017
  this.sectionNavigabilityCache = signal(new Map(), ...(ngDevMode ? [{ debugName: "sectionNavigabilityCache" }] : /* istanbul ignore next */ []));
7005
7018
  this.stickyParent = signal(null, ...(ngDevMode ? [{ debugName: "stickyParent" }] : /* istanbul ignore next */ []));
7006
7019
  this.tabRef = viewChild(AXTabsComponent, ...(ngDevMode ? [{ debugName: "tabRef" }] : /* istanbul ignore next */ []));
7007
- afterNextRender(() => {
7008
- const mainContent = this.host.nativeElement.querySelector('.__main-content');
7009
- // Side-menu scrolls inside .__main-content; axpSticky must listen to that element, not an outer ancestor.
7010
- this.stickyParent.set(mainContent ?? this.findScrollParent(this.host.nativeElement));
7011
- });
7020
+ const refreshStickyParent = () => {
7021
+ bindQuestionnaireViewerStickyScrollParent(this.host.nativeElement, this.stickyParent, {
7022
+ preferredSelector: '.__main-content',
7023
+ });
7024
+ };
7025
+ afterNextRender(() => refreshStickyParent());
7012
7026
  effect(() => {
7013
7027
  this.tabRef()?.select(this.vm.currentSectionIndex());
7014
7028
  });
7029
+ effect(() => {
7030
+ this.vm.currentSection();
7031
+ this.vm.questionnaireData();
7032
+ untracked(() => queueMicrotask(refreshStickyParent));
7033
+ });
7015
7034
  // Update navigability cache when validation state changes
7016
7035
  effect(async () => {
7017
7036
  const sections = this.vm.sections();
@@ -7084,19 +7103,8 @@ class AXMQuestionnaireViewerSideMenuViewComponent {
7084
7103
  const cache = this.sectionNavigabilityCache();
7085
7104
  return cache.has(sectionIndex) ? !cache.get(sectionIndex) : false;
7086
7105
  }
7087
- findScrollParent(from) {
7088
- let node = from?.parentElement ?? null;
7089
- while (node) {
7090
- const { overflowY } = getComputedStyle(node);
7091
- if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') {
7092
- return node;
7093
- }
7094
- node = node.parentElement;
7095
- }
7096
- return null;
7097
- }
7098
7106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerSideMenuViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7099
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerSideMenuViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-side-menu-view", viewQueries: [{ propertyName: "tabRef", first: true, predicate: AXTabsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: ["axm-questionnaire-viewer-side-menu-view{display:block;min-height:0px;width:100%;overflow:hidden}@media(min-width:640px){axm-questionnaire-viewer-side-menu-view{height:100%}}@media(min-width:1024px){axm-questionnaire-viewer-side-menu-view{height:65vh}}.__side-menu-container{display:flex;height:100%;min-height:0px;width:100%;overflow:hidden}.__drawer-container{display:flex;height:100%;width:100%;overflow:hidden}.__sidebar-drawer{height:100%;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-content{height:100%;overflow-y:auto}.__desktop-sidebar{display:flex;height:100%;min-height:0px;flex-shrink:0;flex-direction:column;overflow:hidden;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-tabs{--ax-comp-tabs-default-border-radius: 0;height:100%;min-height:0px;flex:1 1 0%;overflow-y:auto}.__sidebar-tabs ax-tab-item{margin-top:0;margin-bottom:0;padding-top:.75rem;padding-bottom:.75rem;font-weight:600}.__main-content{display:flex;max-height:83vh;min-height:0px;flex:1 1 0%;flex-direction:column;overflow-y:auto}@media(min-width:768px){.__main-content{max-height:75vh}}.__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding:1rem}.__page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}.__page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){.__page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}.__page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}.__page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-header-row{position:sticky;top:0;z-index:10;isolation:isolate;display:flex;flex-shrink:0;align-items:flex-start;gap:.5rem;border-bottom-width:1px;padding:.5rem 1rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}.__mobile-header-row:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}.__mobile-header-row.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__mobile-header-row.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-menu-button{margin-inline-start:-.5rem;flex-shrink:0}.__questions-list{display:flex;flex-direction:column;gap:1rem}\n"], dependencies: [{ kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i1$2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i1$2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2$2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "transition", "closeOnBackdropClick", "backdropClass", "collapsed", "singleOpenMode"], outputs: ["onBackdropClick", "collapsedStateChanged"] }, { kind: "component", type: i3$1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDrawerDirectiveModule }, { kind: "directive", type: AXResizableDirective, selector: "[axResizable]", inputs: ["axResizable", "minWidth", "maxWidth", "dblClickAction", "width", "defaultWidth"], outputs: ["axResizableChange", "minWidthChange", "maxWidthChange", "dblClickActionChange", "widthChange", "defaultWidthChange", "onResizingStarted", "onResizingEnded", "onResizingDblClick"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerSideMenuViewComponent, isStandalone: true, selector: "axm-questionnaire-viewer-side-menu-view", viewQueries: [{ propertyName: "tabRef", first: true, predicate: AXTabsComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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 [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\" [color]=\"'danger'\">\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 @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=\"__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 </div>\n }\n</div>\n", styles: ["axm-questionnaire-viewer-side-menu-view{display:block;min-height:0px;width:100%;overflow:hidden}@media(min-width:640px){axm-questionnaire-viewer-side-menu-view{height:100%}}@media(min-width:1024px){axm-questionnaire-viewer-side-menu-view{height:65vh}}.__side-menu-container{display:flex;height:100%;min-height:0px;width:100%;overflow:hidden}.__drawer-container{display:flex;height:100%;width:100%;overflow:hidden}.__sidebar-drawer{height:100%;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-content{height:100%;overflow-y:auto}.__desktop-sidebar{display:flex;height:100%;min-height:0px;flex-shrink:0;flex-direction:column;overflow:hidden;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-tabs{--ax-comp-tabs-default-border-radius: 0;height:100%;min-height:0px;flex:1 1 0%;overflow-y:auto}.__sidebar-tabs ax-tab-item{margin-top:0;margin-bottom:0;padding-top:.75rem;padding-bottom:.75rem;font-weight:600}.__main-content{display:flex;max-height:83vh;min-height:0px;flex:1 1 0%;flex-direction:column;overflow-y:auto;overflow-x:hidden}@media(min-width:768px){.__main-content{max-height:75vh}}.__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding:1rem}.__mobile-menu-button{margin-inline-start:-.5rem;flex-shrink:0}.__questions-list{display:flex;flex-direction:column;gap:1rem}\n"], dependencies: [{ kind: "component", type: AXMQuestionnaireViewerQuestionComponent, selector: "axm-questionnaire-viewer-question", inputs: ["question", "contextData", "sectionOrder", "questionIndex", "showQuestionNumbers", "showQuestionCounter", "currentPosition", "mode"] }, { kind: "component", type: AXMQuestionnaireViewerSectionHeaderComponent, selector: "axm-questionnaire-viewer-section-header", inputs: ["title", "description", "titleSize", "marginBottom"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i1$2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i1$2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i2$2.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "transition", "closeOnBackdropClick", "backdropClass", "collapsed", "singleOpenMode"], outputs: ["onBackdropClick", "collapsedStateChanged"] }, { kind: "component", type: i3$1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDrawerDirectiveModule }, { kind: "directive", type: AXResizableDirective, selector: "[axResizable]", inputs: ["axResizable", "minWidth", "maxWidth", "dblClickAction", "width", "defaultWidth"], outputs: ["axResizableChange", "minWidthChange", "maxWidthChange", "dblClickActionChange", "widthChange", "defaultWidthChange", "onResizingStarted", "onResizingEnded", "onResizingDblClick"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7100
7108
  }
7101
7109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerSideMenuViewComponent, decorators: [{
7102
7110
  type: Component,
@@ -7113,7 +7121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7113
7121
  AXPStickyDirective,
7114
7122
  AsyncPipe,
7115
7123
  AXTranslationModule,
7116
- ], template: "<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", styles: ["axm-questionnaire-viewer-side-menu-view{display:block;min-height:0px;width:100%;overflow:hidden}@media(min-width:640px){axm-questionnaire-viewer-side-menu-view{height:100%}}@media(min-width:1024px){axm-questionnaire-viewer-side-menu-view{height:65vh}}.__side-menu-container{display:flex;height:100%;min-height:0px;width:100%;overflow:hidden}.__drawer-container{display:flex;height:100%;width:100%;overflow:hidden}.__sidebar-drawer{height:100%;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-content{height:100%;overflow-y:auto}.__desktop-sidebar{display:flex;height:100%;min-height:0px;flex-shrink:0;flex-direction:column;overflow:hidden;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-tabs{--ax-comp-tabs-default-border-radius: 0;height:100%;min-height:0px;flex:1 1 0%;overflow-y:auto}.__sidebar-tabs ax-tab-item{margin-top:0;margin-bottom:0;padding-top:.75rem;padding-bottom:.75rem;font-weight:600}.__main-content{display:flex;max-height:83vh;min-height:0px;flex:1 1 0%;flex-direction:column;overflow-y:auto}@media(min-width:768px){.__main-content{max-height:75vh}}.__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding:1rem}.__page-section .__section-title-sticky{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-bottom-width:1px;padding-top:.5rem;padding-bottom:.5rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}.__page-section .__section-title-sticky:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}@media(prefers-reduced-motion:reduce){.__page-section .__section-title-sticky{transition-duration:1ms;transition-timing-function:linear}.__page-section .__section-title-sticky:before{transition-duration:1ms;transition-timing-function:linear}}.__page-section .__section-title-sticky.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__page-section .__section-title-sticky.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-header-row{position:sticky;top:0;z-index:10;isolation:isolate;display:flex;flex-shrink:0;align-items:flex-start;gap:.5rem;border-bottom-width:1px;padding:.5rem 1rem;transition:padding-block .28s cubic-bezier(.33,1,.68,1),border-color .22s ease-out}.__mobile-header-row:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;box-shadow:none;transition:inset-inline .28s cubic-bezier(.22,1,.36,1),box-shadow .28s cubic-bezier(.33,1,.68,1)}.__mobile-header-row.--stuck{border-bottom-width:1px;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__mobile-header-row.--stuck:before{inset-inline:-1rem;--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-menu-button{margin-inline-start:-.5rem;flex-shrink:0}.__questions-list{display:flex;flex-direction:column;gap:1rem}\n"] }]
7124
+ ], template: "<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 [text]=\"getSectionBadgeCount(vm.sections()[sectionIndex].name).toString()\" [color]=\"'danger'\">\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 @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=\"__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 </div>\n }\n</div>\n", styles: ["axm-questionnaire-viewer-side-menu-view{display:block;min-height:0px;width:100%;overflow:hidden}@media(min-width:640px){axm-questionnaire-viewer-side-menu-view{height:100%}}@media(min-width:1024px){axm-questionnaire-viewer-side-menu-view{height:65vh}}.__side-menu-container{display:flex;height:100%;min-height:0px;width:100%;overflow:hidden}.__drawer-container{display:flex;height:100%;width:100%;overflow:hidden}.__sidebar-drawer{height:100%;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-content{height:100%;overflow-y:auto}.__desktop-sidebar{display:flex;height:100%;min-height:0px;flex-shrink:0;flex-direction:column;overflow:hidden;border-inline-end-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__sidebar-tabs{--ax-comp-tabs-default-border-radius: 0;height:100%;min-height:0px;flex:1 1 0%;overflow-y:auto}.__sidebar-tabs ax-tab-item{margin-top:0;margin-bottom:0;padding-top:.75rem;padding-bottom:.75rem;font-weight:600}.__main-content{display:flex;max-height:83vh;min-height:0px;flex:1 1 0%;flex-direction:column;overflow-y:auto;overflow-x:hidden}@media(min-width:768px){.__main-content{max-height:75vh}}.__page-section{display:flex;flex-shrink:0;flex-direction:column;gap:1rem;padding:1rem}.__mobile-menu-button{margin-inline-start:-.5rem;flex-shrink:0}.__questions-list{display:flex;flex-direction:column;gap:1rem}\n"] }]
7117
7125
  }], ctorParameters: () => [], propDecorators: { tabRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXTabsComponent), { isSignal: true }] }] } });
7118
7126
 
7119
7127
  //#region ---- Imports ----
@@ -7198,7 +7206,7 @@ class AXMQuestionnaireViewerComponent {
7198
7206
  const config = this.config();
7199
7207
  const initialAnswers = this.initialAnswers();
7200
7208
  if (id) {
7201
- this.vm.loadQuestionnaire(id, initialAnswers, config);
7209
+ void this.vm.loadQuestionnaire(id, initialAnswers, config, structure?.displaySettings);
7202
7210
  }
7203
7211
  else if (structure) {
7204
7212
  if (structure.sections && structure.sections.length > 0) {
@@ -7361,7 +7369,7 @@ class AXMQuestionnaireViewerComponent {
7361
7369
  this.answersChanged.emit(answers);
7362
7370
  }
7363
7371
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7364
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerComponent, isStandalone: true, selector: "axm-questionnaire-viewer", inputs: { questionnaireId: { classPropertyName: "questionnaireId", publicName: "questionnaireId", isSignal: true, isRequired: false, transformFunction: null }, structure: { classPropertyName: "structure", publicName: "structure", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, initialAnswers: { classPropertyName: "initialAnswers", publicName: "initialAnswers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { answersChanged: "answersChanged", questionAnswered: "questionAnswered" }, host: { classAttribute: "axm-questionnaire-viewer" }, providers: [AXMQuestionnaireViewerViewModel], viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, isSignal: true }, { propertyName: "widgetContainer", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [".axm-questionnaire-viewer{display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer axp-widgets-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer .__loading,.axm-questionnaire-viewer .__error{display:flex;height:100%;align-items:center;justify-content:center}.axm-questionnaire-viewer .__questionnaire-container{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i1$3.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "component", type:
7372
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerComponent, isStandalone: true, selector: "axm-questionnaire-viewer", inputs: { questionnaireId: { classPropertyName: "questionnaireId", publicName: "questionnaireId", isSignal: true, isRequired: false, transformFunction: null }, structure: { classPropertyName: "structure", publicName: "structure", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, initialAnswers: { classPropertyName: "initialAnswers", publicName: "initialAnswers", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { answersChanged: "answersChanged", questionAnswered: "questionAnswered" }, host: { classAttribute: "axm-questionnaire-viewer" }, providers: [AXMQuestionnaireViewerViewModel], viewQueries: [{ propertyName: "form", first: true, predicate: ["form"], descendants: true, isSignal: true }, { propertyName: "widgetContainer", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<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", styles: [".axm-questionnaire-viewer{display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer axp-widgets-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer .__loading,.axm-questionnaire-viewer .__error{display:flex;height:100%;align-items:center;justify-content:center}.axm-questionnaire-viewer .__questionnaire-container{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}.axm-questionnaire-viewer ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}\n", ".__section-title-sticky,.__mobile-header-row{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section-title-sticky:before,.__mobile-header-row:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;background-color:rgb(var(--ax-sys-color-lightest-surface));border-bottom:1px solid transparent;box-shadow:none;transition:box-shadow .2s ease-out,border-color .2s ease-out}@media(prefers-reduced-motion:reduce){.__section-title-sticky:before,.__mobile-header-row:before{transition-duration:1ms}}.__section-title-sticky:after,.__mobile-header-row:after{content:\"\";position:absolute;bottom:0;left:1rem;right:1rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-surface));pointer-events:none;opacity:1;transition:opacity .2s ease-out}@media(prefers-reduced-motion:reduce){.__section-title-sticky:after,.__mobile-header-row:after{transition-duration:1ms}}.__section-title-sticky.--stuck:after,.__mobile-header-row.--stuck:after{opacity:0}.__section-title-sticky.--stuck:before,.__mobile-header-row.--stuck:before{border-bottom-color:rgb(var(--ax-sys-color-border-surface));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-header-row{display:flex;flex-shrink:0;align-items:flex-start;gap:.5rem}.__section-title-sticky,.__mobile-header-row{padding-left:1rem;padding-right:1rem}.__section-title-sticky.--stuck:before,.__mobile-header-row.--stuck:before{inset-inline:-1rem}.__viewer-scroll{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow-y:auto;overflow-x:hidden;max-height:83vh}@media(min-width:768px){.__viewer-scroll{max-height:75vh}}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll){display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll) .__questionnaire-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll) ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-popup .__content:has(.__viewer-scroll){overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll){display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll) .__questionnaire-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll) ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content:has(.__viewer-scroll){overflow:hidden}axm-questionnaire-viewer-single-page-view,axm-questionnaire-viewer-page-per-group-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "look"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i1$3.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: i1$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "functions"], outputs: ["onContextChanged"] }, { kind: "component", type:
7365
7373
  // View components
7366
7374
  AXMQuestionnaireViewerSinglePageViewComponent, selector: "axm-questionnaire-viewer-single-page-view" }, { kind: "component", type: AXMQuestionnaireViewerPagePerGroupViewComponent, selector: "axm-questionnaire-viewer-page-per-group-view" }, { kind: "component", type: AXMQuestionnaireViewerPagePerQuestionViewComponent, selector: "axm-questionnaire-viewer-page-per-question-view" }, { kind: "component", type: AXMQuestionnaireViewerSideMenuViewComponent, selector: "axm-questionnaire-viewer-side-menu-view" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7367
7375
  }
@@ -7381,7 +7389,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7381
7389
  AXMQuestionnaireViewerSideMenuViewComponent,
7382
7390
  ], providers: [AXMQuestionnaireViewerViewModel], encapsulation: ViewEncapsulation.None, host: {
7383
7391
  class: 'axm-questionnaire-viewer',
7384
- }, template: "<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", styles: [".axm-questionnaire-viewer{display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer axp-widgets-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer .__loading,.axm-questionnaire-viewer .__error{display:flex;height:100%;align-items:center;justify-content:center}.axm-questionnaire-viewer .__questionnaire-container{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}\n"] }]
7392
+ }, template: "<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", styles: [".axm-questionnaire-viewer{display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer axp-widgets-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column}.axm-questionnaire-viewer .__loading,.axm-questionnaire-viewer .__error{display:flex;height:100%;align-items:center;justify-content:center}.axm-questionnaire-viewer .__questionnaire-container{display:flex;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}.axm-questionnaire-viewer ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}\n", ".__section-title-sticky,.__mobile-header-row{position:sticky;top:0;z-index:10;isolation:isolate;min-width:0px;align-self:stretch;border-style:none;padding-top:.75rem;padding-bottom:.75rem;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}.__section-title-sticky:before,.__mobile-header-row:before{content:\"\";position:absolute;z-index:-1;inset-block:0;inset-inline:0;pointer-events:none;background-color:rgb(var(--ax-sys-color-lightest-surface));border-bottom:1px solid transparent;box-shadow:none;transition:box-shadow .2s ease-out,border-color .2s ease-out}@media(prefers-reduced-motion:reduce){.__section-title-sticky:before,.__mobile-header-row:before{transition-duration:1ms}}.__section-title-sticky:after,.__mobile-header-row:after{content:\"\";position:absolute;bottom:0;left:1rem;right:1rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-surface));pointer-events:none;opacity:1;transition:opacity .2s ease-out}@media(prefers-reduced-motion:reduce){.__section-title-sticky:after,.__mobile-header-row:after{transition-duration:1ms}}.__section-title-sticky.--stuck:after,.__mobile-header-row.--stuck:after{opacity:0}.__section-title-sticky.--stuck:before,.__mobile-header-row.--stuck:before{border-bottom-color:rgb(var(--ax-sys-color-border-surface));--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.__mobile-header-row{display:flex;flex-shrink:0;align-items:flex-start;gap:.5rem}.__section-title-sticky,.__mobile-header-row{padding-left:1rem;padding-right:1rem}.__section-title-sticky.--stuck:before,.__mobile-header-row.--stuck:before{inset-inline:-1rem}.__viewer-scroll{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow-y:auto;overflow-x:hidden;max-height:83vh}@media(min-width:768px){.__viewer-scroll{max-height:75vh}}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll){display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll) .__questionnaire-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-popup .__content axm-questionnaire-viewer:has(.__viewer-scroll) ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-popup .__content:has(.__viewer-scroll){overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll){display:flex;height:100%;max-height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll) .__questionnaire-container{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer:has(.__viewer-scroll) ax-form{display:flex;height:100%;min-height:0px;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content:has(.__viewer-scroll){overflow:hidden}axm-questionnaire-viewer-single-page-view,axm-questionnaire-viewer-page-per-group-view{display:flex;height:100%;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}\n"] }]
7385
7393
  }], ctorParameters: () => [], propDecorators: { questionnaireId: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireId", required: false }] }], structure: [{ type: i0.Input, args: [{ isSignal: true, alias: "structure", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], initialAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAnswers", required: false }] }], answersChanged: [{ type: i0.Output, args: ["answersChanged"] }], questionAnswered: [{ type: i0.Output, args: ["questionAnswered"] }], form: [{ type: i0.ViewChild, args: ['form', { isSignal: true }] }], widgetContainer: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXPWidgetContainerComponent), { isSignal: true }] }] } });
7386
7394
 
7387
7395
  //#region ---- Imports ----
@@ -7592,35 +7600,35 @@ class AXMQuestionnaireViewerFeatureModule {
7592
7600
  provideCommandSetups([
7593
7601
  {
7594
7602
  key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:Preview`,
7595
- command: () => import('./acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs').then((c) => c.AXPPreviewQuestionnaireCommand),
7603
+ command: () => import('./acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs').then((c) => c.AXPPreviewQuestionnaireCommand),
7596
7604
  },
7597
7605
  {
7598
7606
  key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:PreviewQuestion`,
7599
- command: () => import('./acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs').then((c) => c.PreviewQuestionCommand),
7607
+ command: () => import('./acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs').then((c) => c.PreviewQuestionCommand),
7600
7608
  },
7601
7609
  {
7602
7610
  key: `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}:Preview`,
7603
- command: () => import('./acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs').then((c) => c.PreviewQuestionCommand),
7611
+ command: () => import('./acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs').then((c) => c.PreviewQuestionCommand),
7604
7612
  },
7605
7613
  {
7606
7614
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ViewAnswers`,
7607
- command: () => import('./acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs').then((c) => c.ViewSessionAnswersCommand),
7615
+ command: () => import('./acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs').then((c) => c.ViewSessionAnswersCommand),
7608
7616
  },
7609
7617
  {
7610
7618
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:Fill`,
7611
- command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs').then((c) => c.FillAssessmentSessionCommand),
7619
+ command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs').then((c) => c.FillAssessmentSessionCommand),
7612
7620
  },
7613
7621
  {
7614
7622
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:Fill`,
7615
- command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs').then((c) => c.FillAssessmentSessionCommand),
7623
+ command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs').then((c) => c.FillAssessmentSessionCommand),
7616
7624
  },
7617
7625
  {
7618
7626
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ReviewAnswers`,
7619
- command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7627
+ command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7620
7628
  },
7621
7629
  {
7622
7630
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:ReviewAnswers`,
7623
- command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7631
+ command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7624
7632
  },
7625
7633
  ]),
7626
7634
  ], imports: [AXPWidgetCoreModule,
@@ -7647,35 +7655,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
7647
7655
  provideCommandSetups([
7648
7656
  {
7649
7657
  key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:Preview`,
7650
- command: () => import('./acorex-modules-assessment-management-preview-questionnaire.command-Sd4gRHo5.mjs').then((c) => c.AXPPreviewQuestionnaireCommand),
7658
+ command: () => import('./acorex-modules-assessment-management-preview-questionnaire.command-BUUnlr7g.mjs').then((c) => c.AXPPreviewQuestionnaireCommand),
7651
7659
  },
7652
7660
  {
7653
7661
  key: `${RootConfig.module.name}.${RootConfig.entities.questionnaire.name}:PreviewQuestion`,
7654
- command: () => import('./acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs').then((c) => c.PreviewQuestionCommand),
7662
+ command: () => import('./acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs').then((c) => c.PreviewQuestionCommand),
7655
7663
  },
7656
7664
  {
7657
7665
  key: `${RootConfig.module.name}.${RootConfig.entities.questionBankItem.name}:Preview`,
7658
- command: () => import('./acorex-modules-assessment-management-preview-question.command-B29oj3WB.mjs').then((c) => c.PreviewQuestionCommand),
7666
+ command: () => import('./acorex-modules-assessment-management-preview-question.command-B0kZz-BV.mjs').then((c) => c.PreviewQuestionCommand),
7659
7667
  },
7660
7668
  {
7661
7669
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ViewAnswers`,
7662
- command: () => import('./acorex-modules-assessment-management-view-session-answers.command-BN-nYHha.mjs').then((c) => c.ViewSessionAnswersCommand),
7670
+ command: () => import('./acorex-modules-assessment-management-view-session-answers.command-2LB7JKZx.mjs').then((c) => c.ViewSessionAnswersCommand),
7663
7671
  },
7664
7672
  {
7665
7673
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:Fill`,
7666
- command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs').then((c) => c.FillAssessmentSessionCommand),
7674
+ command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs').then((c) => c.FillAssessmentSessionCommand),
7667
7675
  },
7668
7676
  {
7669
7677
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:Fill`,
7670
- command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-nkFpnKE2.mjs').then((c) => c.FillAssessmentSessionCommand),
7678
+ command: () => import('./acorex-modules-assessment-management-fill-assessment-session.command-DIUV6Az-.mjs').then((c) => c.FillAssessmentSessionCommand),
7671
7679
  },
7672
7680
  {
7673
7681
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentSession.name}:ReviewAnswers`,
7674
- command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7682
+ command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7675
7683
  },
7676
7684
  {
7677
7685
  key: `${RootConfig.module.name}.${RootConfig.entities.assessmentCase.name}:ReviewAnswers`,
7678
- command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-hB_LFUSE.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7686
+ command: () => import('./acorex-modules-assessment-management-review-assessment-session.command-Bqi7YO0X.mjs').then((c) => c.ReviewAssessmentSessionCommand),
7679
7687
  },
7680
7688
  ]),
7681
7689
  ],
@@ -7905,6 +7913,128 @@ async function persistAssessmentSession(input) {
7905
7913
  }
7906
7914
  //#endregion
7907
7915
 
7916
+ //#region ---- Imports ----
7917
+ //#endregion
7918
+ //#region ---- Component ----
7919
+ /**
7920
+ * Footer control for questionnaire-level reference documents (popover list).
7921
+ */
7922
+ class AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent {
7923
+ constructor() {
7924
+ //#region ---- Inputs ----
7925
+ this.attachments = input.required(...(ngDevMode ? [{ debugName: "attachments" }] : /* istanbul ignore next */ []));
7926
+ //#endregion
7927
+ //#region ---- Computed ----
7928
+ this.files = computed(() => questionnaireViewerAttachmentsToFileListItems(this.attachments()), ...(ngDevMode ? [{ debugName: "files" }] : /* istanbul ignore next */ []));
7929
+ }
7930
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7931
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, isStandalone: true, selector: "axm-questionnaire-viewer-questionnaire-attachments-footer", inputs: { attachments: { classPropertyName: "attachments", publicName: "attachments", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "axm-questionnaire-viewer-questionnaire-attachments-footer" }, ngImport: i0, template: `
7932
+ @if (attachments().length > 0) {
7933
+ <div class="__questionnaire-attachments-footer">
7934
+ <span #trigger class="__trigger">
7935
+ <ax-button
7936
+ look="link"
7937
+ color="primary"
7938
+ [text]="
7939
+ '@assessment-management:questionnaires.components.questionnaire-viewer.questionnaire-attachments.footer-action.title'
7940
+ | translate
7941
+ | async
7942
+ "
7943
+ >
7944
+ <ax-icon><i class="fa-light fa-paperclip"></i></ax-icon>
7945
+ </ax-button>
7946
+ </span>
7947
+
7948
+ <ax-popover [target]="trigger" [openOn]="'toggle'" [closeOn]="'clickOut'" [offsetY]="8">
7949
+ <div
7950
+ class="axm-questionnaire-viewer-attachments-popover ax-lightest-surface ax-min-w-[17.5rem] ax-max-w-[26rem] ax-overflow-hidden"
7951
+ >
7952
+ <div class="ax-border-b ax-border-surface ax-px-4 ax-py-3">
7953
+ <h3 class="ax-m-0 ax-text-sm ax-font-semibold ax-leading-normal ax-text-on-lightest-surface">
7954
+ {{
7955
+ '@assessment-management:questionnaires.components.questionnaire-viewer.questionnaire-attachments.title'
7956
+ | translate
7957
+ | async
7958
+ }}
7959
+ </h3>
7960
+ </div>
7961
+ <div class="ax-max-h-64 ax-overflow-y-auto ax-px-3 ax-py-3" style="max-height: max(30dvh, 12rem)">
7962
+ <axp-file-list
7963
+ [files]="files()"
7964
+ look="links"
7965
+ linksLayout="menu"
7966
+ [showLabel]="false"
7967
+ [readonly]="true"
7968
+ />
7969
+ </div>
7970
+ </div>
7971
+ </ax-popover>
7972
+ </div>
7973
+ }
7974
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXPopoverModule }, { kind: "component", type: i3$2.AXPopoverComponent, selector: "ax-popover", inputs: ["width", "disablePanelClass", "disabled", "offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "closeOnScroll", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: AXPFileListComponent, selector: "axp-file-list", inputs: ["readonly", "fileEditable", "enableTitleDescription", "multiple", "look", "titleKey", "showLabel", "linksLayout", "files", "plugins", "excludePlugins", "capabilities"], outputs: ["onRemove", "onRevert", "onRename"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
7975
+ }
7976
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, decorators: [{
7977
+ type: Component,
7978
+ args: [{
7979
+ selector: 'axm-questionnaire-viewer-questionnaire-attachments-footer',
7980
+ template: `
7981
+ @if (attachments().length > 0) {
7982
+ <div class="__questionnaire-attachments-footer">
7983
+ <span #trigger class="__trigger">
7984
+ <ax-button
7985
+ look="link"
7986
+ color="primary"
7987
+ [text]="
7988
+ '@assessment-management:questionnaires.components.questionnaire-viewer.questionnaire-attachments.footer-action.title'
7989
+ | translate
7990
+ | async
7991
+ "
7992
+ >
7993
+ <ax-icon><i class="fa-light fa-paperclip"></i></ax-icon>
7994
+ </ax-button>
7995
+ </span>
7996
+
7997
+ <ax-popover [target]="trigger" [openOn]="'toggle'" [closeOn]="'clickOut'" [offsetY]="8">
7998
+ <div
7999
+ class="axm-questionnaire-viewer-attachments-popover ax-lightest-surface ax-min-w-[17.5rem] ax-max-w-[26rem] ax-overflow-hidden"
8000
+ >
8001
+ <div class="ax-border-b ax-border-surface ax-px-4 ax-py-3">
8002
+ <h3 class="ax-m-0 ax-text-sm ax-font-semibold ax-leading-normal ax-text-on-lightest-surface">
8003
+ {{
8004
+ '@assessment-management:questionnaires.components.questionnaire-viewer.questionnaire-attachments.title'
8005
+ | translate
8006
+ | async
8007
+ }}
8008
+ </h3>
8009
+ </div>
8010
+ <div class="ax-max-h-64 ax-overflow-y-auto ax-px-3 ax-py-3" style="max-height: max(30dvh, 12rem)">
8011
+ <axp-file-list
8012
+ [files]="files()"
8013
+ look="links"
8014
+ linksLayout="menu"
8015
+ [showLabel]="false"
8016
+ [readonly]="true"
8017
+ />
8018
+ </div>
8019
+ </div>
8020
+ </ax-popover>
8021
+ </div>
8022
+ }
8023
+ `,
8024
+ changeDetection: ChangeDetectionStrategy.OnPush,
8025
+ imports: [
8026
+ AsyncPipe,
8027
+ AXTranslationModule,
8028
+ AXButtonModule,
8029
+ AXDecoratorModule,
8030
+ AXPopoverModule,
8031
+ AXPFileListComponent,
8032
+ ],
8033
+ encapsulation: ViewEncapsulation.None,
8034
+ host: { class: 'axm-questionnaire-viewer-questionnaire-attachments-footer' },
8035
+ }]
8036
+ }], propDecorators: { attachments: [{ type: i0.Input, args: [{ isSignal: true, alias: "attachments", required: true }] }] } });
8037
+
7908
8038
  //#region ---- Imports ----
7909
8039
  //#endregion
7910
8040
  //#region ---- Component ----
@@ -8432,6 +8562,13 @@ class AXMQuestionnaireViewerPageComponent extends AXPPageLayoutBaseComponent {
8432
8562
  this.timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0, ...(ngDevMode ? [{ debugName: "timerElapsed" }] : /* istanbul ignore next */ []));
8433
8563
  this.showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false, ...(ngDevMode ? [{ debugName: "showProgressBar" }] : /* istanbul ignore next */ []));
8434
8564
  this.answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0, ...(ngDevMode ? [{ debugName: "answeredQuestionsCount" }] : /* istanbul ignore next */ []));
8565
+ this.questionnaireAttachments = computed(() => {
8566
+ const fromViewer = this.viewerViewModel()?.questionnaireAttachments();
8567
+ if (fromViewer && fromViewer.length > 0) {
8568
+ return fromViewer;
8569
+ }
8570
+ return normalizeQuestionnaireViewerAttachments(this.questionnaire()?.attachments);
8571
+ }, ...(ngDevMode ? [{ debugName: "questionnaireAttachments" }] : /* istanbul ignore next */ []));
8435
8572
  this.isReadonly = computed(() => this.viewerConfig()?.readonly ?? false, ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
8436
8573
  this.showReviewButton = computed(() => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions', ...(ngDevMode ? [{ debugName: "showReviewButton" }] : /* istanbul ignore next */ []));
8437
8574
  /** Use answers from review context when returning from review; otherwise use initial answers. */
@@ -8685,9 +8822,9 @@ class AXMQuestionnaireViewerPageComponent extends AXPPageLayoutBaseComponent {
8685
8822
  this.router.navigateByUrl(this.getCasesListPath());
8686
8823
  }
8687
8824
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8688
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerPageComponent, isStandalone: true, selector: "axm-questionnaire-viewer-page", host: { classAttribute: "axm-questionnaire-viewer-page" }, providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }], viewQueries: [{ propertyName: "viewer", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- 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>", styles: ["axm-questionnaire-viewer-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));position:sticky;top:0;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type:
8825
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXMQuestionnaireViewerPageComponent, isStandalone: true, selector: "axm-questionnaire-viewer-page", host: { classAttribute: "axm-questionnaire-viewer-page" }, providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }], viewQueries: [{ propertyName: "viewer", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- 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\n #viewer\n [questionnaireId]=\"questionnaire()?.id\"\n [structure]=\"structure()!\"\n [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n (answersChanged)=\"handleAnswersChanged($event)\"\n ></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=\"ax-flex ax-items-center ax-gap-4 ax-min-w-0\">\n <axm-questionnaire-viewer-questionnaire-attachments-footer\n [attachments]=\"questionnaireAttachments()\"\n />\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 </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>", styles: ["axm-questionnaire-viewer-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));position:sticky;top:0;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXPPageLayoutComponent, selector: "axp-page-layout" }, { kind: "component", type: AXPThemeLayoutBlockComponent, selector: " axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, " }, { kind: "component", type:
8689
8826
  //AXPStopwatchComponent,
8690
- AXMQuestionnaireViewerComponent, selector: "axm-questionnaire-viewer", inputs: ["questionnaireId", "structure", "config", "initialAnswers"], outputs: ["answersChanged", "questionAnswered"] }, { kind: "component", type: AXMPreQuestionnaireContentComponent, selector: "axm-pre-questionnaire-content", inputs: ["content"] }, { kind: "component", type: AXMPostQuestionnaireContentComponent, selector: "axm-post-questionnaire-content", inputs: ["mode", "questionsWithAnswers", "reviewContext", "summaryContent", "placeholderValues", "locale", "showQuestionNumbers"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8827
+ AXMQuestionnaireViewerComponent, selector: "axm-questionnaire-viewer", inputs: ["questionnaireId", "structure", "config", "initialAnswers"], outputs: ["answersChanged", "questionAnswered"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, selector: "axm-questionnaire-viewer-questionnaire-attachments-footer", inputs: ["attachments"] }, { kind: "component", type: AXMPreQuestionnaireContentComponent, selector: "axm-pre-questionnaire-content", inputs: ["content"] }, { kind: "component", type: AXMPostQuestionnaireContentComponent, selector: "axm-post-questionnaire-content", inputs: ["mode", "questionsWithAnswers", "reviewContext", "summaryContent", "placeholderValues", "locale", "showQuestionNumbers"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
8691
8828
  }
8692
8829
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerPageComponent, decorators: [{
8693
8830
  type: Component,
@@ -8699,9 +8836,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
8699
8836
  AXPThemeLayoutBlockComponent,
8700
8837
  //AXPStopwatchComponent,
8701
8838
  AXMQuestionnaireViewerComponent,
8839
+ AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent,
8702
8840
  AXMPreQuestionnaireContentComponent,
8703
8841
  AXMPostQuestionnaireContentComponent,
8704
- ], providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }], encapsulation: ViewEncapsulation.None, host: { class: 'axm-questionnaire-viewer-page' }, template: "<!-- 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>", styles: ["axm-questionnaire-viewer-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));position:sticky;top:0;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"] }]
8842
+ ], providers: [{ provide: AXPPageLayoutBase, useExisting: AXMQuestionnaireViewerPageComponent }], encapsulation: ViewEncapsulation.None, host: { class: 'axm-questionnaire-viewer-page' }, template: "<!-- 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\n #viewer\n [questionnaireId]=\"questionnaire()?.id\"\n [structure]=\"structure()!\"\n [config]=\"viewerConfig()\"\n [initialAnswers]=\"effectiveInitialAnswers()\"\n (answersChanged)=\"handleAnswersChanged($event)\"\n ></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=\"ax-flex ax-items-center ax-gap-4 ax-min-w-0\">\n <axm-questionnaire-viewer-questionnaire-attachments-footer\n [attachments]=\"questionnaireAttachments()\"\n />\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 </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>", styles: ["axm-questionnaire-viewer-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));position:sticky;top:0;color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"] }]
8705
8843
  }], ctorParameters: () => [], propDecorators: { viewer: [{ type: i0.ViewChild, args: ['viewer', { isSignal: true }] }] } });
8706
8844
 
8707
8845
  var questionnaireViewerPage_component = /*#__PURE__*/Object.freeze({
@@ -8753,6 +8891,13 @@ class AXMQuestionnaireViewerStandalonePageComponent {
8753
8891
  this.timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0, ...(ngDevMode ? [{ debugName: "timerElapsed" }] : /* istanbul ignore next */ []));
8754
8892
  this.showProgressBar = computed(() => this.viewerViewModel()?.showProgressBar() ?? false, ...(ngDevMode ? [{ debugName: "showProgressBar" }] : /* istanbul ignore next */ []));
8755
8893
  this.answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0, ...(ngDevMode ? [{ debugName: "answeredQuestionsCount" }] : /* istanbul ignore next */ []));
8894
+ this.questionnaireAttachments = computed(() => {
8895
+ const fromViewer = this.viewerViewModel()?.questionnaireAttachments();
8896
+ if (fromViewer && fromViewer.length > 0) {
8897
+ return fromViewer;
8898
+ }
8899
+ return normalizeQuestionnaireViewerAttachments(this.questionnaire()?.attachments);
8900
+ }, ...(ngDevMode ? [{ debugName: "questionnaireAttachments" }] : /* istanbul ignore next */ []));
8756
8901
  this.isReadonly = computed(() => this.viewerConfig()?.readonly ?? false, ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
8757
8902
  this.showReviewButton = computed(() => this.isLastStep() && (this.prePostConfig()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions', ...(ngDevMode ? [{ debugName: "showReviewButton" }] : /* istanbul ignore next */ []));
8758
8903
  /** Use answers from review context when returning from review; otherwise use initial answers. */
@@ -9028,6 +9173,7 @@ class AXMQuestionnaireViewerStandalonePageComponent {
9028
9173
  <div class="__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden">
9029
9174
  <axm-questionnaire-viewer
9030
9175
  #viewer
9176
+ [questionnaireId]="questionnaire()?.id"
9031
9177
  [structure]="structure()!"
9032
9178
  [config]="viewerConfig()"
9033
9179
  [initialAnswers]="effectiveInitialAnswers()"
@@ -9041,10 +9187,15 @@ class AXMQuestionnaireViewerStandalonePageComponent {
9041
9187
  <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">
9042
9188
  <ax-prefix>
9043
9189
  @if (flowStep() === 'questions') {
9044
- <div class="__footer-progress ax-text-sm ax-font-mono ax-tabular-nums" dir="ltr">
9045
- @if (showProgressBar()) {
9046
- {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}
9047
- }
9190
+ <div class="ax-flex ax-items-center ax-gap-4 ax-min-w-0">
9191
+ <axm-questionnaire-viewer-questionnaire-attachments-footer
9192
+ [attachments]="questionnaireAttachments()"
9193
+ />
9194
+ <div class="__footer-progress ax-text-sm ax-font-mono ax-tabular-nums" dir="ltr">
9195
+ @if (showProgressBar()) {
9196
+ {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}
9197
+ }
9198
+ </div>
9048
9199
  </div>
9049
9200
  }
9050
9201
  </ax-prefix>
@@ -9080,7 +9231,7 @@ class AXMQuestionnaireViewerStandalonePageComponent {
9080
9231
  </ax-footer>
9081
9232
  }
9082
9233
  </div>
9083
- `, isInline: true, styles: ["axm-questionnaire-viewer-standalone-page{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__body{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content-area{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));color:rgb(var(--ax-sys-color-on-surface-variant));position:sticky;top:0}axm-questionnaire-viewer-standalone-page .__header .__header-top{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta{display:flex;align-items:center;gap:1rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item{display:flex;align-items:center;gap:.375rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item i{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item span{font-weight:500}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-timer{display:flex;flex-shrink:0;align-items:center}axm-questionnaire-viewer-standalone-page .__content-wrapper{display:flex;min-height:0px;flex:1 1 0%;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-standalone-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-standalone-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: AXPStopwatchComponent, selector: "axp-stopwatch", inputs: ["mode", "timeLimit", "format", "autoStart", "showControls", "value"], outputs: ["valueChange", "timeUp"] }, { kind: "component", type: AXMQuestionnaireViewerComponent, selector: "axm-questionnaire-viewer", inputs: ["questionnaireId", "structure", "config", "initialAnswers"], outputs: ["answersChanged", "questionAnswered"] }, { kind: "component", type: AXMPreQuestionnaireContentComponent, selector: "axm-pre-questionnaire-content", inputs: ["content"] }, { kind: "component", type: AXMPostQuestionnaireContentComponent, selector: "axm-post-questionnaire-content", inputs: ["mode", "questionsWithAnswers", "reviewContext", "summaryContent", "placeholderValues", "locale", "showQuestionNumbers"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9234
+ `, isInline: true, styles: ["axm-questionnaire-viewer-standalone-page{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__body{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content-area{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));color:rgb(var(--ax-sys-color-on-surface-variant));position:sticky;top:0}axm-questionnaire-viewer-standalone-page .__header .__header-top{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta{display:flex;align-items:center;gap:1rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item{display:flex;align-items:center;gap:.375rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item i{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item span{font-weight:500}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-timer{display:flex;flex-shrink:0;align-items:center}axm-questionnaire-viewer-standalone-page .__content-wrapper{display:flex;min-height:0px;flex:1 1 0%;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-standalone-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-standalone-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXPWidgetCoreModule }, { kind: "component", type: AXPStopwatchComponent, selector: "axp-stopwatch", inputs: ["mode", "timeLimit", "format", "autoStart", "showControls", "value"], outputs: ["valueChange", "timeUp"] }, { kind: "component", type: AXMQuestionnaireViewerComponent, selector: "axm-questionnaire-viewer", inputs: ["questionnaireId", "structure", "config", "initialAnswers"], outputs: ["answersChanged", "questionAnswered"] }, { kind: "component", type: AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, selector: "axm-questionnaire-viewer-questionnaire-attachments-footer", inputs: ["attachments"] }, { kind: "component", type: AXMPreQuestionnaireContentComponent, selector: "axm-pre-questionnaire-content", inputs: ["content"] }, { kind: "component", type: AXMPostQuestionnaireContentComponent, selector: "axm-post-questionnaire-content", inputs: ["mode", "questionsWithAnswers", "reviewContext", "summaryContent", "placeholderValues", "locale", "showQuestionNumbers"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9084
9235
  }
9085
9236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXMQuestionnaireViewerStandalonePageComponent, decorators: [{
9086
9237
  type: Component,
@@ -9148,6 +9299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9148
9299
  <div class="__content ax-flex ax-flex-col ax-flex-1 ax-min-h-0 ax-overflow-y-auto ax-overflow-x-hidden">
9149
9300
  <axm-questionnaire-viewer
9150
9301
  #viewer
9302
+ [questionnaireId]="questionnaire()?.id"
9151
9303
  [structure]="structure()!"
9152
9304
  [config]="viewerConfig()"
9153
9305
  [initialAnswers]="effectiveInitialAnswers()"
@@ -9161,10 +9313,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9161
9313
  <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">
9162
9314
  <ax-prefix>
9163
9315
  @if (flowStep() === 'questions') {
9164
- <div class="__footer-progress ax-text-sm ax-font-mono ax-tabular-nums" dir="ltr">
9165
- @if (showProgressBar()) {
9166
- {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}
9167
- }
9316
+ <div class="ax-flex ax-items-center ax-gap-4 ax-min-w-0">
9317
+ <axm-questionnaire-viewer-questionnaire-attachments-footer
9318
+ [attachments]="questionnaireAttachments()"
9319
+ />
9320
+ <div class="__footer-progress ax-text-sm ax-font-mono ax-tabular-nums" dir="ltr">
9321
+ @if (showProgressBar()) {
9322
+ {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}
9323
+ }
9324
+ </div>
9168
9325
  </div>
9169
9326
  }
9170
9327
  </ax-prefix>
@@ -9208,6 +9365,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9208
9365
  AXPWidgetCoreModule,
9209
9366
  AXPStopwatchComponent,
9210
9367
  AXMQuestionnaireViewerComponent,
9368
+ AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent,
9211
9369
  AXMPreQuestionnaireContentComponent,
9212
9370
  AXMPostQuestionnaireContentComponent,
9213
9371
  ], providers: [AXPWidgetCoreService, AXPContextStore], encapsulation: ViewEncapsulation.None, host: { class: 'axm-questionnaire-viewer-standalone-page' }, styles: ["axm-questionnaire-viewer-standalone-page{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__body{display:flex;min-height:0px;width:100%;flex:1 1 0%;flex-direction:column;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content-area{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-standalone-page .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface));border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-surface),var(--tw-border-opacity, 1));color:rgb(var(--ax-sys-color-on-surface-variant));position:sticky;top:0}axm-questionnaire-viewer-standalone-page .__header .__header-top{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.75rem 1rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta{display:flex;align-items:center;gap:1rem;font-size:.75rem;line-height:1rem;--tw-text-opacity: 1;color:rgb(82 82 82 / var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item{display:flex;align-items:center;gap:.375rem}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item i{font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-600),var(--tw-text-opacity, 1))}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-meta .__meta-item span{font-weight:500}axm-questionnaire-viewer-standalone-page .__header .__header-top .__header-timer{display:flex;flex-shrink:0;align-items:center}axm-questionnaire-viewer-standalone-page .__content-wrapper{display:flex;min-height:0px;flex:1 1 0%;overflow:hidden}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer{display:flex;height:auto;max-height:none;min-height:0px;width:100%;max-width:100%;flex:none;flex-direction:column}axm-questionnaire-viewer-standalone-page .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-standalone-page .__toolbar-meta{color:rgb(var(--ax-sys-color-on-surface-variant))}axm-questionnaire-viewer-standalone-page .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}\n"] }]
@@ -9217,5 +9375,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
9217
9375
  * Generated bundle index. Do not edit.
9218
9376
  */
9219
9377
 
9220
- export { AXMQuestionnaireViewerService as A, diffQuestionCommentOverride as B, diffQuestionHintOverride as C, DEFAULT_POST_QUESTIONNAIRE_CONFIG as D, findDuplicateOutcomeNames as E, flattenQuestionnaireOutcomeItems as F, getQuestionAnswerCommentStoragePath as G, isQuestionnaireOutcomeDisplayColorHex as H, matchesQuestionnaireOutcomeDisplayRule as I, mergeQuestionCommentConfig as J, mergeQuestionHintForViewer as K, normalizeQuestionCommentConfig as L, normalizeQuestionHintConfig as M, normalizeQuestionHintFromEntityRow as N, normalizeQuestionHintMode as O, normalizeQuestionnaireOutcomeDisplayRules as P, QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY as Q, RootConfig as R, normalizeQuestionnaireOutcomesValue as S, normalizeValidationStrategy$1 as T, normalizeViewMode as U, parseQuestionHintPartialFromRecord as V, parseQuestionnaireOutcomeDisplayColor as W, readHintFieldsFromRecord as X, QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY as a, AXMQuestionnaireViewerComponent as b, AXMPreQuestionnaireContentComponent as c, AXMPostQuestionnaireContentComponent as d, toDisplaySettings as e, AXMAssessmentManagementEntityProvider as f, AXMAssessmentManagementFeatureDefinitionProvider as g, AXMAssessmentManagementFeatureKeys as h, AXMAssessmentManagementMenuProvider as i, AXMAssessmentManagementModule as j, AXMAssessmentManagementPermissionDefinitionProvider as k, AXMAssessmentManagementPermissionKeys as l, AXMAssessmentManagementSearchCommandProvider as m, normalizeCompletionMode as n, AXMQuestionnaireViewerPageComponent as o, persistAssessmentSession as p, AXMQuestionnaireViewerStandalonePageComponent as q, resolveWidgetNodeFromMetaDataDefinitionInterface as r, stripQuestionBankInterfaceMetadata as s, toPrePostConfig as t, AXPAssessmentManagementMenuKeys as u, DEFAULT_PRE_QUESTIONNAIRE_CONFIG as v, DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY as w, DEFAULT_QUESTIONNAIRE_OUTCOMES as x, DEFAULT_QUESTION_COMMENT_CONFIG as y, DEFAULT_QUESTION_HINT_CONFIG as z };
9221
- //# sourceMappingURL=acorex-modules-assessment-management-acorex-modules-assessment-management-IHgQ8RVH.mjs.map
9378
+ export { AXMQuestionnaireViewerService as A, DEFAULT_QUESTION_COMMENT_CONFIG as B, DEFAULT_QUESTION_HINT_CONFIG as C, DEFAULT_POST_QUESTIONNAIRE_CONFIG as D, diffQuestionCommentOverride as E, diffQuestionHintOverride as F, findDuplicateOutcomeNames as G, flattenQuestionnaireOutcomeItems as H, getQuestionAnswerCommentStoragePath as I, isQuestionnaireOutcomeDisplayColorHex as J, matchesQuestionnaireOutcomeDisplayRule as K, mergeQuestionCommentConfig as L, mergeQuestionHintForViewer as M, normalizeQuestionCommentConfig as N, normalizeQuestionHintConfig as O, normalizeQuestionHintFromEntityRow as P, QUESTIONNAIRE_QUESTIONS_PAGE_COMPONENT_KEY as Q, RootConfig as R, normalizeQuestionHintMode as S, normalizeQuestionnaireOutcomeDisplayRules as T, normalizeQuestionnaireOutcomesValue as U, normalizeValidationStrategy$1 as V, normalizeViewMode as W, parseQuestionHintPartialFromRecord as X, parseQuestionnaireOutcomeDisplayColor as Y, readHintFieldsFromRecord as Z, QUESTIONNAIRE_OUTCOMES_PAGE_COMPONENT_KEY as a, AXMQuestionnaireViewerComponent as b, AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent as c, AXMPreQuestionnaireContentComponent as d, AXMPostQuestionnaireContentComponent as e, formatQuestionnairePreviewDialogTitle as f, toDisplaySettings as g, AXMAssessmentManagementEntityProvider as h, AXMAssessmentManagementFeatureDefinitionProvider as i, AXMAssessmentManagementFeatureKeys as j, AXMAssessmentManagementMenuProvider as k, AXMAssessmentManagementModule as l, AXMAssessmentManagementPermissionDefinitionProvider as m, normalizeCompletionMode as n, AXMAssessmentManagementPermissionKeys as o, persistAssessmentSession as p, AXMAssessmentManagementSearchCommandProvider as q, resolveWidgetNodeFromMetaDataDefinitionInterface as r, stripQuestionBankInterfaceMetadata as s, toPrePostConfig as t, AXMQuestionnaireViewerPageComponent as u, AXMQuestionnaireViewerStandalonePageComponent as v, AXPAssessmentManagementMenuKeys as w, DEFAULT_PRE_QUESTIONNAIRE_CONFIG as x, DEFAULT_QUESTIONNAIRE_ENTITY_DISPLAY as y, DEFAULT_QUESTIONNAIRE_OUTCOMES as z };
9379
+ //# sourceMappingURL=acorex-modules-assessment-management-acorex-modules-assessment-management-BnfSTevp.mjs.map