@acorex-platform/module-assessment-management-client 0.0.20

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 (35) hide show
  1. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs +10593 -0
  2. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs +83 -0
  4. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-case-status.provider-i48XDX-I.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs +124 -0
  6. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs +97 -0
  8. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-session-status.provider-Bk9hHj5V.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs +134 -0
  10. package/fesm2022/acorex-platform-module-assessment-management-client-assessment-voice.commands-CduVfWQ-.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs +1171 -0
  12. package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs +270 -0
  14. package/fesm2022/acorex-platform-module-assessment-management-client-fill-assessment-session.command-VF80DWQf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-assessment-management-client-list-question-difficulty-options.query-h3xT-MNd.mjs +59 -0
  16. package/fesm2022/acorex-platform-module-assessment-management-client-list-question-difficulty-options.query-h3xT-MNd.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs +123 -0
  18. package/fesm2022/acorex-platform-module-assessment-management-client-preview-question.command-C1ODQxDn.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs +165 -0
  20. package/fesm2022/acorex-platform-module-assessment-management-client-preview-questionnaire.command-DBm7ve4w.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-assessment-management-client-preview-session-pdf.command-BsiJU6ep.mjs +178 -0
  22. package/fesm2022/acorex-platform-module-assessment-management-client-preview-session-pdf.command-BsiJU6ep.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs +489 -0
  24. package/fesm2022/acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Bbl-efrl.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs +609 -0
  26. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs +228 -0
  28. package/fesm2022/acorex-platform-module-assessment-management-client-review-assessment-session.command-CZ96KQ-l.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs +280 -0
  30. package/fesm2022/acorex-platform-module-assessment-management-client-view-session-answers.command-CCzJoJ4p.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-assessment-management-client.mjs +2 -0
  32. package/fesm2022/acorex-platform-module-assessment-management-client.mjs.map +1 -0
  33. package/package.json +28 -0
  34. package/types/acorex-platform-module-assessment-management-client-contracts.d.ts +752 -0
  35. package/types/acorex-platform-module-assessment-management-client.d.ts +1279 -0
@@ -0,0 +1,609 @@
1
+ import { AXBasePageComponent } from '@acorex/components/page';
2
+ import { AXAlertModule } from '@acorex/components/alert';
3
+ import * as i4 from '@acorex/core/translation';
4
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
5
+ import * as i1 from '@acorex/components/button';
6
+ import { AXButtonModule } from '@acorex/components/button';
7
+ import { AXToastService } from '@acorex/components/toast';
8
+ import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
9
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
10
+ import * as i2 from '@acorex/components/decorators';
11
+ import { AXDecoratorModule } from '@acorex/components/decorators';
12
+ import * as i3 from '@angular/common';
13
+ import { CommonModule } from '@angular/common';
14
+ import * as i0 from '@angular/core';
15
+ import { inject, input, computed, signal, viewChild, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
16
+ import { first } from 'lodash';
17
+ import { RootConfig, resolvePrintSettings, AXM_ASSESSMENT_SESSION_PREVIEW_PDF_CLIENT_COMMAND_KEY } from '@acorex-platform/module-assessment-management-client/contracts';
18
+ import { A as AXMQuestionnaireViewerService, a as AXMQuestionnairePrintSnapshotService, b as AXMQuestionnairePrintHostComponent, p as persistAssessmentSession, c as AXMQuestionnaireViewerComponent, d as AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent, e as AXMPreQuestionnaireContentComponent, f as AXMPostQuestionnaireContentComponent } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-jljmsqNu.mjs';
19
+
20
+ //#region ---- Imports ----
21
+ //#endregion
22
+ //#region ---- Component ----
23
+ class AXMQuestionnaireViewerPopupComponent extends AXBasePageComponent {
24
+ safeInputValue(inputOrValue) {
25
+ return typeof inputOrValue === 'function' ? inputOrValue() : inputOrValue;
26
+ }
27
+ /** Fallback when submitHandler is not passed (e.g. popup framework does not pass functions). */
28
+ getDefaultSubmitHandler() {
29
+ return async (answers) => {
30
+ return this.questionnaireViewerService.buildSummaryPlaceholderValues(this.structureValue(), answers, {
31
+ questionnaireId: this.questionnaireIdValue(),
32
+ outcomeRules: this.outcomeRulesValue(),
33
+ elapsedSeconds: this.timerElapsed(),
34
+ });
35
+ };
36
+ }
37
+ /**
38
+ * First step after submit: outcomes (if enabled), else summary (if enabled), else close. Summary is always last when both are on.
39
+ */
40
+ resolvePostSubmitFirstStep(summary) {
41
+ if (!summary)
42
+ return null;
43
+ const cfg = this.prePostConfigValue();
44
+ if (cfg?.post.showOutcomeResults === true)
45
+ return 'results';
46
+ if (cfg?.post.summaryEnabled === true)
47
+ return 'summary';
48
+ return null;
49
+ }
50
+ //#endregion
51
+ //#region ---- Lifecycle ----
52
+ constructor() {
53
+ super();
54
+ //#region ---- Services & Dependencies ----
55
+ this.questionnaireViewerService = inject(AXMQuestionnaireViewerService);
56
+ this.entityService = inject(AXPEntityService);
57
+ this.toastService = inject(AXToastService);
58
+ this.translationService = inject(AXTranslationService);
59
+ this.printSnapshot = inject(AXMQuestionnairePrintSnapshotService);
60
+ this.commandService = inject(AXPCommandService);
61
+ //#endregion
62
+ //#region ---- Inputs ----
63
+ this.structure = input.required(/* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "structure" }] : /* istanbul ignore next */ []));
65
+ this.prePostConfig = input(null, /* @ts-ignore */
66
+ ...(ngDevMode ? [{ debugName: "prePostConfig" }] : /* istanbul ignore next */ []));
67
+ this.config = input(undefined, /* @ts-ignore */
68
+ ...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
69
+ this.initialAnswers = input({}, /* @ts-ignore */
70
+ ...(ngDevMode ? [{ debugName: "initialAnswers" }] : /* istanbul ignore next */ []));
71
+ this.submitHandler = input(/* @ts-ignore */
72
+ ...(ngDevMode ? [undefined, { debugName: "submitHandler" }] : /* istanbul ignore next */ []));
73
+ this.saveHandler = input(/* @ts-ignore */
74
+ ...(ngDevMode ? [undefined, { debugName: "saveHandler" }] : /* istanbul ignore next */ []));
75
+ this.assessmentFillContext = input(undefined, /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "assessmentFillContext" }] : /* istanbul ignore next */ []));
77
+ this.questionnaireId = input(undefined, /* @ts-ignore */
78
+ ...(ngDevMode ? [{ debugName: "questionnaireId" }] : /* istanbul ignore next */ []));
79
+ this.printTemplateId = input(undefined, /* @ts-ignore */
80
+ ...(ngDevMode ? [{ debugName: "printTemplateId" }] : /* istanbul ignore next */ []));
81
+ this.outcomeRules = input(undefined, /* @ts-ignore */
82
+ ...(ngDevMode ? [{ debugName: "outcomeRules" }] : /* istanbul ignore next */ []));
83
+ this.storedOutcomeResults = input(null, /* @ts-ignore */
84
+ ...(ngDevMode ? [{ debugName: "storedOutcomeResults" }] : /* istanbul ignore next */ []));
85
+ this.printTitle = input(undefined, /* @ts-ignore */
86
+ ...(ngDevMode ? [{ debugName: "printTitle" }] : /* istanbul ignore next */ []));
87
+ /** Safe accessors: popup framework may overwrite inputs with plain values. */
88
+ this.prePostConfigValue = computed(() => this.safeInputValue(this.prePostConfig), /* @ts-ignore */
89
+ ...(ngDevMode ? [{ debugName: "prePostConfigValue" }] : /* istanbul ignore next */ []));
90
+ this.structureValue = computed(() => this.safeInputValue(this.structure), /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "structureValue" }] : /* istanbul ignore next */ []));
92
+ this.configValue = computed(() => this.safeInputValue(this.config), /* @ts-ignore */
93
+ ...(ngDevMode ? [{ debugName: "configValue" }] : /* istanbul ignore next */ []));
94
+ this.initialAnswersValue = computed(() => this.safeInputValue(this.initialAnswers), /* @ts-ignore */
95
+ ...(ngDevMode ? [{ debugName: "initialAnswersValue" }] : /* istanbul ignore next */ []));
96
+ this.questionnaireIdValue = computed(() => this.safeInputValue(this.questionnaireId), /* @ts-ignore */
97
+ ...(ngDevMode ? [{ debugName: "questionnaireIdValue" }] : /* istanbul ignore next */ []));
98
+ this.printTemplateIdValue = computed(() => this.safeInputValue(this.printTemplateId), /* @ts-ignore */
99
+ ...(ngDevMode ? [{ debugName: "printTemplateIdValue" }] : /* istanbul ignore next */ []));
100
+ this.outcomeRulesValue = computed(() => this.safeInputValue(this.outcomeRules), /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "outcomeRulesValue" }] : /* istanbul ignore next */ []));
102
+ this.storedOutcomeResultsValue = computed(() => this.safeInputValue(this.storedOutcomeResults), /* @ts-ignore */
103
+ ...(ngDevMode ? [{ debugName: "storedOutcomeResultsValue" }] : /* istanbul ignore next */ []));
104
+ this.printTitleValue = computed(() => this.safeInputValue(this.printTitle), /* @ts-ignore */
105
+ ...(ngDevMode ? [{ debugName: "printTitleValue" }] : /* istanbul ignore next */ []));
106
+ /** Readonly entry step from viewer config (popup assigns plain object on `config`). */
107
+ this.readonlyInitialFlowStep = computed(() => {
108
+ const step = this.configValue()?.initialFlowStep;
109
+ return step === 'results' ? 'results' : 'questions';
110
+ }, /* @ts-ignore */
111
+ ...(ngDevMode ? [{ debugName: "readonlyInitialFlowStep" }] : /* istanbul ignore next */ []));
112
+ this.assessmentFillContextValue = computed(() => {
113
+ const raw = this.safeInputValue(this.assessmentFillContext);
114
+ if (raw && typeof raw === 'object' && typeof raw.caseId === 'string') {
115
+ return raw;
116
+ }
117
+ return null;
118
+ }, /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "assessmentFillContextValue" }] : /* istanbul ignore next */ []));
120
+ this.submitHandlerValue = computed(() => {
121
+ const handler = this.safeInputValue(this.submitHandler);
122
+ if (typeof handler === 'function')
123
+ return handler;
124
+ if (this.assessmentFillContextValue()) {
125
+ return (answers) => this.persistAssessmentAnswers(answers, true);
126
+ }
127
+ return this.getDefaultSubmitHandler();
128
+ }, /* @ts-ignore */
129
+ ...(ngDevMode ? [{ debugName: "submitHandlerValue" }] : /* istanbul ignore next */ []));
130
+ this.explicitSaveHandler = computed(() => {
131
+ const handler = this.safeInputValue(this.saveHandler);
132
+ return typeof handler === 'function' ? handler : undefined;
133
+ }, /* @ts-ignore */
134
+ ...(ngDevMode ? [{ debugName: "explicitSaveHandler" }] : /* istanbul ignore next */ []));
135
+ this.isReadonly = computed(() => this.configValue()?.readonly === true, /* @ts-ignore */
136
+ ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
137
+ this.isPreviewMode = computed(() => this.configValue()?.previewMode === true, /* @ts-ignore */
138
+ ...(ngDevMode ? [{ debugName: "isPreviewMode" }] : /* istanbul ignore next */ []));
139
+ this.isReviewDecisionMode = computed(() => this.configValue()?.reviewDecisionMode === true, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "isReviewDecisionMode" }] : /* istanbul ignore next */ []));
141
+ this.completionMode = computed(() => {
142
+ const fromConfig = this.configValue()?.completionMode;
143
+ if (fromConfig) {
144
+ return fromConfig;
145
+ }
146
+ return this.structureValue()?.displaySettings?.completionMode ?? 'submit-only';
147
+ }, /* @ts-ignore */
148
+ ...(ngDevMode ? [{ debugName: "completionMode" }] : /* istanbul ignore next */ []));
149
+ this.showSaveButton = computed(() => {
150
+ if (this.isReadonly() || this.completionMode() !== 'save-and-continue') {
151
+ return false;
152
+ }
153
+ return !!this.assessmentFillContextValue() || !!this.explicitSaveHandler();
154
+ }, /* @ts-ignore */
155
+ ...(ngDevMode ? [{ debugName: "showSaveButton" }] : /* istanbul ignore next */ []));
156
+ this.showSubmitButton = computed(() => !this.isReadonly(), /* @ts-ignore */
157
+ ...(ngDevMode ? [{ debugName: "showSubmitButton" }] : /* istanbul ignore next */ []));
158
+ /** Submit on questions/review; "Finish preview" when `previewMode` is enabled. */
159
+ this.primarySubmitActionLabel = computed(() => this.isPreviewMode()
160
+ ? '@assessment-management:questionnaires.components.questionnaire-viewer.preview.finish.title'
161
+ : '@general:actions.submit.title', /* @ts-ignore */
162
+ ...(ngDevMode ? [{ debugName: "primarySubmitActionLabel" }] : /* istanbul ignore next */ []));
163
+ /** Session row loaded for fill persistence (popup cannot use command closures). */
164
+ this.existingSession = signal(null, /* @ts-ignore */
165
+ ...(ngDevMode ? [{ debugName: "existingSession" }] : /* istanbul ignore next */ []));
166
+ this.activeSessionId = signal(null, /* @ts-ignore */
167
+ ...(ngDevMode ? [{ debugName: "activeSessionId" }] : /* istanbul ignore next */ []));
168
+ /** Use answers from review context when returning from review; otherwise use initial input. */
169
+ this.effectiveInitialAnswers = computed(() => {
170
+ const ctx = this.reviewContext();
171
+ if (!ctx)
172
+ return this.initialAnswersValue();
173
+ return ctx.answers ?? ctx;
174
+ }, /* @ts-ignore */
175
+ ...(ngDevMode ? [{ debugName: "effectiveInitialAnswers" }] : /* istanbul ignore next */ []));
176
+ //#endregion
177
+ //#region ---- State ----
178
+ this.flowStep = signal('questions', /* @ts-ignore */
179
+ ...(ngDevMode ? [{ debugName: "flowStep" }] : /* istanbul ignore next */ []));
180
+ this.initialFlowApplied = signal(false, /* @ts-ignore */
181
+ ...(ngDevMode ? [{ debugName: "initialFlowApplied" }] : /* istanbul ignore next */ []));
182
+ this.reviewSnapshot = signal([], /* @ts-ignore */
183
+ ...(ngDevMode ? [{ debugName: "reviewSnapshot" }] : /* istanbul ignore next */ []));
184
+ this.reviewContext = signal(null, /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "reviewContext" }] : /* istanbul ignore next */ []));
186
+ this.submitResult = signal(null, /* @ts-ignore */
187
+ ...(ngDevMode ? [{ debugName: "submitResult" }] : /* istanbul ignore next */ []));
188
+ this.lastSubmittedAnswers = signal({}, /* @ts-ignore */
189
+ ...(ngDevMode ? [{ debugName: "lastSubmittedAnswers" }] : /* istanbul ignore next */ []));
190
+ this.lastSubmittedQuestions = signal([], /* @ts-ignore */
191
+ ...(ngDevMode ? [{ debugName: "lastSubmittedQuestions" }] : /* istanbul ignore next */ []));
192
+ this.isSubmitting = signal(false, /* @ts-ignore */
193
+ ...(ngDevMode ? [{ debugName: "isSubmitting" }] : /* istanbul ignore next */ []));
194
+ this.canNavigatePrevious = signal(false, /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "canNavigatePrevious" }] : /* istanbul ignore next */ []));
196
+ this.canNavigateNext = signal(false, /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "canNavigateNext" }] : /* istanbul ignore next */ []));
198
+ this.showNavigationButtons = signal(false, /* @ts-ignore */
199
+ ...(ngDevMode ? [{ debugName: "showNavigationButtons" }] : /* istanbul ignore next */ []));
200
+ this.isLastStep = signal(false, /* @ts-ignore */
201
+ ...(ngDevMode ? [{ debugName: "isLastStep" }] : /* istanbul ignore next */ []));
202
+ this.areAllRequiredQuestionsAnswered = signal(false, /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "areAllRequiredQuestionsAnswered" }] : /* istanbul ignore next */ []));
204
+ this.isPreviewingPdf = signal(false, /* @ts-ignore */
205
+ ...(ngDevMode ? [{ debugName: "isPreviewingPdf" }] : /* istanbul ignore next */ []));
206
+ //#endregion
207
+ //#region ---- View References ----
208
+ this.viewer = viewChild('viewer', /* @ts-ignore */
209
+ ...(ngDevMode ? [{ debugName: "viewer" }] : /* istanbul ignore next */ []));
210
+ this.printHost = viewChild(AXMQuestionnairePrintHostComponent, /* @ts-ignore */
211
+ ...(ngDevMode ? [{ debugName: "printHost" }] : /* istanbul ignore next */ []));
212
+ this.printAnswers = signal({}, /* @ts-ignore */
213
+ ...(ngDevMode ? [{ debugName: "printAnswers" }] : /* istanbul ignore next */ []));
214
+ //#endregion
215
+ //#region ---- Computed ----
216
+ this.viewerViewModel = computed(() => this.viewer()?.viewmodel, /* @ts-ignore */
217
+ ...(ngDevMode ? [{ debugName: "viewerViewModel" }] : /* istanbul ignore next */ []));
218
+ this.totalQuestionsCount = computed(() => this.viewerViewModel()?.totalQuestionsCount() ?? 0, /* @ts-ignore */
219
+ ...(ngDevMode ? [{ debugName: "totalQuestionsCount" }] : /* istanbul ignore next */ []));
220
+ this.showTimer = computed(() => this.viewerViewModel()?.showTimer() ?? false, /* @ts-ignore */
221
+ ...(ngDevMode ? [{ debugName: "showTimer" }] : /* istanbul ignore next */ []));
222
+ this.timerTimeLimit = computed(() => this.viewerViewModel()?.timerTimeLimit(), /* @ts-ignore */
223
+ ...(ngDevMode ? [{ debugName: "timerTimeLimit" }] : /* istanbul ignore next */ []));
224
+ this.timerElapsed = computed(() => this.viewerViewModel()?.timerElapsed() ?? 0, /* @ts-ignore */
225
+ ...(ngDevMode ? [{ debugName: "timerElapsed" }] : /* istanbul ignore next */ []));
226
+ this.answeredQuestionsCount = computed(() => this.viewerViewModel()?.answeredQuestionsCount() ?? 0, /* @ts-ignore */
227
+ ...(ngDevMode ? [{ debugName: "answeredQuestionsCount" }] : /* istanbul ignore next */ []));
228
+ this.questionnaireAttachments = computed(() => this.viewerViewModel()?.questionnaireAttachments() ?? [], /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "questionnaireAttachments" }] : /* istanbul ignore next */ []));
230
+ this.showReviewButton = computed(() => this.isLastStep() && (this.prePostConfigValue()?.post?.reviewEnabled ?? false) && this.flowStep() === 'questions', /* @ts-ignore */
231
+ ...(ngDevMode ? [{ debugName: "showReviewButton" }] : /* istanbul ignore next */ []));
232
+ /** True when readonly view has stored outcome results to display. */
233
+ this.hasStoredOutcomeResults = computed(() => {
234
+ const result = this.storedOutcomeResultsValue() ?? this.submitResult();
235
+ if (!result) {
236
+ return false;
237
+ }
238
+ if ((result.outcomeSections?.length ?? 0) > 0) {
239
+ return true;
240
+ }
241
+ return Object.keys(result.outcomes ?? {}).length > 0;
242
+ }, /* @ts-ignore */
243
+ ...(ngDevMode ? [{ debugName: "hasStoredOutcomeResults" }] : /* istanbul ignore next */ []));
244
+ /** Results navigation on any questions step (readonly session review only). */
245
+ this.showViewResultsButton = computed(() => this.isReadonly() && this.flowStep() === 'questions' && this.hasStoredOutcomeResults(), /* @ts-ignore */
246
+ ...(ngDevMode ? [{ debugName: "showViewResultsButton" }] : /* istanbul ignore next */ []));
247
+ /** Sign off / Reject on readonly manager review (questions or outcome results step). */
248
+ this.showReviewDecisionButtons = computed(() => this.isReviewDecisionMode() &&
249
+ this.isReadonly() &&
250
+ (this.flowStep() === 'questions' || this.flowStep() === 'results'), /* @ts-ignore */
251
+ ...(ngDevMode ? [{ debugName: "showReviewDecisionButtons" }] : /* istanbul ignore next */ []));
252
+ this.showFooter = computed(() => ['pre', 'questions', 'review', 'summary', 'results'].includes(this.flowStep()), /* @ts-ignore */
253
+ ...(ngDevMode ? [{ debugName: "showFooter" }] : /* istanbul ignore next */ []));
254
+ this.showPreviewPdfButton = computed(() => this.flowStep() === 'questions' || this.flowStep() === 'review', /* @ts-ignore */
255
+ ...(ngDevMode ? [{ debugName: "showPreviewPdfButton" }] : /* istanbul ignore next */ []));
256
+ effect(() => {
257
+ const cfg = this.prePostConfigValue();
258
+ const initial = this.readonlyInitialFlowStep();
259
+ const stored = this.storedOutcomeResultsValue();
260
+ if (stored) {
261
+ this.submitResult.set(stored);
262
+ }
263
+ if (this.initialFlowApplied()) {
264
+ return;
265
+ }
266
+ if (initial === 'results') {
267
+ if (!stored) {
268
+ return;
269
+ }
270
+ this.flowStep.set('results');
271
+ this.initialFlowApplied.set(true);
272
+ return;
273
+ }
274
+ this.flowStep.set(cfg?.pre.enabled === true ? 'pre' : 'questions');
275
+ this.initialFlowApplied.set(true);
276
+ });
277
+ effect(() => {
278
+ const ctx = this.assessmentFillContextValue();
279
+ const sessionId = ctx?.sessionId;
280
+ if (sessionId) {
281
+ this.activeSessionId.set(sessionId);
282
+ void this.loadExistingSession(sessionId);
283
+ }
284
+ });
285
+ effect(() => {
286
+ const v = this.viewer();
287
+ if (v) {
288
+ const vm = v.viewmodel;
289
+ this.canNavigatePrevious.set(vm.canNavigatePrevious());
290
+ this.canNavigateNext.set(vm.canNavigateNext());
291
+ const viewMode = v.viewMode;
292
+ this.showNavigationButtons.set(viewMode === 'page-per-group' || viewMode === 'page-per-question' || viewMode === 'side-menu');
293
+ this.isLastStep.set(v.isLastStep);
294
+ this.areAllRequiredQuestionsAnswered.set(v.areAllRequiredQuestionsAnswered);
295
+ }
296
+ });
297
+ }
298
+ //#endregion
299
+ //#region ---- Assessment persistence ----
300
+ async loadExistingSession(sessionId) {
301
+ const sessionAccessor = this.entityService
302
+ .withEntity(RootConfig.module.name, RootConfig.entities.assessmentSession.name)
303
+ .data();
304
+ const listMatch = await sessionAccessor.query({
305
+ skip: 0,
306
+ take: 1,
307
+ filter: {
308
+ field: 'id',
309
+ operator: { type: 'equal' },
310
+ value: sessionId,
311
+ },
312
+ });
313
+ const fromQuery = first(listMatch.items);
314
+ if (fromQuery) {
315
+ this.existingSession.set(fromQuery);
316
+ return;
317
+ }
318
+ const session = await sessionAccessor.byKey(sessionId);
319
+ if (session) {
320
+ this.existingSession.set(session);
321
+ }
322
+ }
323
+ async persistAssessmentAnswers(answers, finalize) {
324
+ const ctx = this.assessmentFillContextValue();
325
+ const questionnaireId = this.questionnaireIdValue();
326
+ if (!ctx || !questionnaireId) {
327
+ return null;
328
+ }
329
+ const vm = this.viewerViewModel();
330
+ const progressMetrics = vm != null
331
+ ? {
332
+ answeredQuestionsCount: vm.answeredQuestionsCount(),
333
+ progressPercentage: vm.progressPercentage(),
334
+ }
335
+ : undefined;
336
+ const result = await persistAssessmentSession({
337
+ entityService: this.entityService,
338
+ questionnaireViewerService: this.questionnaireViewerService,
339
+ caseId: ctx.caseId,
340
+ sessionId: this.activeSessionId() ?? ctx.sessionId ?? null,
341
+ existingSession: this.existingSession(),
342
+ responderId: ctx.responderId,
343
+ role: ctx.role,
344
+ structure: this.structureValue(),
345
+ questionnaireId,
346
+ answers,
347
+ finalize,
348
+ progressMetrics,
349
+ timeSpentSeconds: vm?.timerElapsed(),
350
+ });
351
+ this.activeSessionId.set(result.sessionId);
352
+ await this.loadExistingSession(result.sessionId);
353
+ if (finalize) {
354
+ this.schedulePrintSnapshot(result.sessionId);
355
+ }
356
+ if (!finalize) {
357
+ this.toastService.show({
358
+ color: 'success',
359
+ title: await this.translationService.translateAsync('@general:messages.form.saved.success.title'),
360
+ content: await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.actions.save-as-draft.success'),
361
+ });
362
+ return null;
363
+ }
364
+ return this.questionnaireViewerService.buildSummaryPlaceholderValues(this.structureValue(), answers, {
365
+ questionnaireId,
366
+ elapsedSeconds: this.timerElapsed(),
367
+ });
368
+ }
369
+ schedulePrintSnapshot(sessionId) {
370
+ this.printAnswers.set(this.viewer()?.getAllAnswers() ?? this.effectiveInitialAnswers() ?? {});
371
+ this.printSnapshot.scheduleStore({
372
+ entityService: this.entityService,
373
+ sessionId,
374
+ title: this.printTitleValue()?.trim() || undefined,
375
+ host: this.printHost(),
376
+ answers: this.printAnswers(),
377
+ });
378
+ }
379
+ //#endregion
380
+ //#region ---- Event Handlers ----
381
+ async handlePreviewPdfClick() {
382
+ if (this.isPreviewingPdf()) {
383
+ return;
384
+ }
385
+ this.isPreviewingPdf.set(true);
386
+ const previewWindow = typeof window !== 'undefined' ? window.open('about:blank', '_blank') : null;
387
+ if (previewWindow) {
388
+ try {
389
+ previewWindow.document.title = 'Preview PDF';
390
+ previewWindow.document.body.innerHTML =
391
+ '<p style="font-family:sans-serif;padding:24px;color:#64748b">Generating PDF…</p>';
392
+ }
393
+ catch {
394
+ // about:blank can be briefly cross-origin in some browsers
395
+ }
396
+ }
397
+ // Keep this tab visible so print widgets can paint and timers are not throttled.
398
+ window.focus();
399
+ try {
400
+ const answers = this.viewer()?.getAllAnswers() ?? this.effectiveInitialAnswers() ?? {};
401
+ this.printAnswers.set(answers);
402
+ const title = this.printTitleValue()?.trim() || 'Questionnaire';
403
+ const printHtmlGzip = await this.printSnapshot.captureHtmlGzipFromHost(this.printHost(), title, answers);
404
+ if (!printHtmlGzip) {
405
+ previewWindow?.close();
406
+ this.toastService.show({
407
+ color: 'danger',
408
+ title: await this.translationService.translateAsync('@assessment-management:sessions.actions.preview-pdf.failed'),
409
+ });
410
+ return;
411
+ }
412
+ const print = resolvePrintSettings(this.structureValue()?.printSettings);
413
+ const fill = this.assessmentFillContextValue();
414
+ const result = await this.commandService.execute(AXM_ASSESSMENT_SESSION_PREVIEW_PDF_CLIENT_COMMAND_KEY, {
415
+ printHtmlGzip,
416
+ title,
417
+ locale: this.translationService.getActiveLang?.() ?? 'en-US',
418
+ paperSize: print.paperSize,
419
+ orientation: print.orientation,
420
+ watermark: print.watermark,
421
+ sessionId: this.activeSessionId() ?? fill?.sessionId,
422
+ caseId: fill?.caseId,
423
+ questionnaireId: this.questionnaireIdValue(),
424
+ printTemplateId: this.printTemplateIdValue(),
425
+ previewWindow,
426
+ });
427
+ if (result?.success === false) {
428
+ previewWindow?.close();
429
+ this.toastService.show({
430
+ color: 'danger',
431
+ title: (typeof result.message?.text === 'string' && result.message.text.trim()) ||
432
+ (await this.translationService.translateAsync('@assessment-management:sessions.actions.preview-pdf.failed')),
433
+ });
434
+ }
435
+ }
436
+ catch (error) {
437
+ previewWindow?.close();
438
+ this.toastService.show({
439
+ color: 'danger',
440
+ title: error instanceof Error ? error.message : 'Failed to preview assessment session PDF.',
441
+ });
442
+ }
443
+ finally {
444
+ this.isPreviewingPdf.set(false);
445
+ }
446
+ }
447
+ handleReviewClick() {
448
+ const viewer = this.viewer();
449
+ const items = viewer?.getQuestionsWithAnswers() ?? [];
450
+ const context = viewer?.getReviewContext() ?? null;
451
+ this.reviewSnapshot.set(items.map((q) => ({
452
+ name: q.name,
453
+ title: q.title,
454
+ answer: q.answer,
455
+ question: q.question,
456
+ sectionName: q.sectionName,
457
+ sectionOrder: q.sectionOrder,
458
+ sectionTitle: q.sectionTitle,
459
+ sectionDescription: q.sectionDescription,
460
+ })));
461
+ this.reviewContext.set(context);
462
+ this.flowStep.set('review');
463
+ }
464
+ async handleSaveClick() {
465
+ const viewer = this.viewer();
466
+ if (!viewer || !this.showSaveButton()) {
467
+ return;
468
+ }
469
+ this.isSubmitting.set(true);
470
+ try {
471
+ const result = viewer.saveDraft();
472
+ if (result.success && result.answers) {
473
+ const explicit = this.explicitSaveHandler();
474
+ if (explicit) {
475
+ await explicit(result.answers);
476
+ }
477
+ else {
478
+ await this.persistAssessmentAnswers(result.answers, false);
479
+ }
480
+ this.close({
481
+ answers: result.answers,
482
+ questions: viewer.getQuestionsWithAnswers(),
483
+ submitted: false,
484
+ saved: true,
485
+ });
486
+ }
487
+ }
488
+ finally {
489
+ this.isSubmitting.set(false);
490
+ }
491
+ }
492
+ async handleReviewSubmit() {
493
+ const viewer = this.viewer();
494
+ const handler = this.submitHandlerValue();
495
+ if (!viewer || !handler)
496
+ return;
497
+ this.isSubmitting.set(true);
498
+ try {
499
+ const result = await viewer.submit();
500
+ if (result.success && result.answers) {
501
+ const summary = await handler(result.answers);
502
+ const questions = viewer.getQuestionsWithAnswers();
503
+ this.submitResult.set(summary ?? null);
504
+ this.lastSubmittedAnswers.set(result.answers);
505
+ this.lastSubmittedQuestions.set(questions);
506
+ const step = this.resolvePostSubmitFirstStep(summary ?? null);
507
+ if (step) {
508
+ this.flowStep.set(step);
509
+ }
510
+ else {
511
+ this.close({ answers: result.answers, questions, submitted: true });
512
+ }
513
+ }
514
+ }
515
+ finally {
516
+ this.isSubmitting.set(false);
517
+ }
518
+ }
519
+ async handlePreviousClick() {
520
+ await this.viewer()?.navigatePrevious();
521
+ }
522
+ async handleNextClick() {
523
+ await this.viewer()?.navigateNext();
524
+ }
525
+ async handleSubmitClick() {
526
+ const viewer = this.viewer();
527
+ const handler = this.submitHandlerValue();
528
+ if (!viewer || !handler)
529
+ return;
530
+ this.isSubmitting.set(true);
531
+ try {
532
+ const result = await viewer.submit();
533
+ if (result.success && result.answers) {
534
+ const summary = await handler(result.answers);
535
+ const questions = viewer.getQuestionsWithAnswers();
536
+ this.submitResult.set(summary ?? null);
537
+ this.lastSubmittedAnswers.set(result.answers);
538
+ this.lastSubmittedQuestions.set(questions);
539
+ const step = this.resolvePostSubmitFirstStep(summary ?? null);
540
+ if (step) {
541
+ this.flowStep.set(step);
542
+ }
543
+ else {
544
+ this.close({ answers: result.answers, questions, submitted: true });
545
+ }
546
+ }
547
+ }
548
+ finally {
549
+ this.isSubmitting.set(false);
550
+ }
551
+ }
552
+ handleViewResultsClick() {
553
+ const stored = this.storedOutcomeResultsValue();
554
+ if (stored) {
555
+ this.submitResult.set(stored);
556
+ }
557
+ this.flowStep.set('results');
558
+ }
559
+ handleDone() {
560
+ if (this.isReadonly() && !this.isReviewDecisionMode()) {
561
+ this.close({
562
+ answers: this.effectiveInitialAnswers(),
563
+ questions: this.viewer()?.getQuestionsWithAnswers() ?? [],
564
+ submitted: false,
565
+ });
566
+ return;
567
+ }
568
+ const answers = this.lastSubmittedAnswers();
569
+ const questions = this.lastSubmittedQuestions();
570
+ this.close({ answers, questions, submitted: true });
571
+ }
572
+ handleReviewSignOff() {
573
+ this.closeWithReviewDecision('signed-off');
574
+ }
575
+ handleReviewReject() {
576
+ this.closeWithReviewDecision('rejected');
577
+ }
578
+ closeWithReviewDecision(decision) {
579
+ this.close({
580
+ answers: this.effectiveInitialAnswers(),
581
+ questions: this.viewer()?.getQuestionsWithAnswers() ?? [],
582
+ submitted: false,
583
+ decision,
584
+ });
585
+ }
586
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQuestionnaireViewerPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
587
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMQuestionnaireViewerPopupComponent, isStandalone: true, selector: "axm-questionnaire-viewer-popup", inputs: { structure: { classPropertyName: "structure", publicName: "structure", isSignal: true, isRequired: true, transformFunction: null }, prePostConfig: { classPropertyName: "prePostConfig", publicName: "prePostConfig", 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 }, submitHandler: { classPropertyName: "submitHandler", publicName: "submitHandler", isSignal: true, isRequired: false, transformFunction: null }, saveHandler: { classPropertyName: "saveHandler", publicName: "saveHandler", isSignal: true, isRequired: false, transformFunction: null }, assessmentFillContext: { classPropertyName: "assessmentFillContext", publicName: "assessmentFillContext", isSignal: true, isRequired: false, transformFunction: null }, questionnaireId: { classPropertyName: "questionnaireId", publicName: "questionnaireId", isSignal: true, isRequired: false, transformFunction: null }, printTemplateId: { classPropertyName: "printTemplateId", publicName: "printTemplateId", isSignal: true, isRequired: false, transformFunction: null }, outcomeRules: { classPropertyName: "outcomeRules", publicName: "outcomeRules", isSignal: true, isRequired: false, transformFunction: null }, storedOutcomeResults: { classPropertyName: "storedOutcomeResults", publicName: "storedOutcomeResults", isSignal: true, isRequired: false, transformFunction: null }, printTitle: { classPropertyName: "printTitle", publicName: "printTitle", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "viewer", first: true, predicate: ["viewer"], descendants: true, isSignal: true }, { propertyName: "printHost", first: true, predicate: AXMQuestionnairePrintHostComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!-- Main content area: flow-step driven body -->\n<div class=\"__content-area flex flex-1 min-h-0 flex-col\"\n [class.overflow-hidden]=\"flowStep() === 'questions'\" [class.overflow-y-auto]=\"flowStep() !== 'questions'\">\n <!-- Pre-questionnaire introduction content -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"$safeNavigationMigration(prePostConfigValue()?.pre?.content)\"></axm-pre-questionnaire-content>\n }\n <!-- Post-submit outcome results -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [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]=\"$safeNavigationMigration(prePostConfigValue()?.post?.summaryContent)\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Questionnaire and review flow -->\n @else {\n <!-- Review mode content (answers snapshot before submit) -->\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content mode=\"review\" [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"\n [showQuestionNumbers]=\"configValue()?.showQuestionNumbers ?? true\"></axm-post-questionnaire-content>\n }\n\n <!-- Questionnaire workspace (hidden off-screen while in review mode) -->\n <div class=\"__questions flex flex-col flex-1 min-h-0 overflow-hidden\"\n [class.invisible]=\"flowStep() === 'review'\" [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\" [class.size-0]=\"flowStep() === 'review'\"\n [class.overflow-hidden]=\"flowStep() === 'review'\">\n <!-- @if (showTimer()) {\n <div class=\"__header flex-shrink-0 p-4 border-b border-surface\">\n <div class=\"flex justify-between items-center\">\n <div class=\"__toolbar-meta flex items-center gap-4 text-sm\">\n @if (totalQuestionsCount() > 0) {\n <span><i class=\"fa-light fa-list-check\"></i> {{ totalQuestionsCount() }} {{ totalQuestionsCount() === 1 ? 'Question' : 'Questions' }}</span>\n }\n @if (showTimer()) {\n <axp-stopwatch\n [mode]=\"'count-down'\"\n [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\"\n [autoStart]=\"true\"\n [showControls]=\"false\"\n [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"\n ></axp-stopwatch>\n }\n </div>\n </div>\n </div>\n } -->\n\n <!-- Questionnaire rendering container -->\n <div class=\"__content flex flex-1 min-h-0 flex-col overflow-y-auto overflow-x-hidden\">\n <axm-questionnaire-viewer #viewer [questionnaireId]=\"questionnaireIdValue()\" [structure]=\"structureValue()\"\n [config]=\"configValue()\" [initialAnswers]=\"effectiveInitialAnswers()\"></axm-questionnaire-viewer>\n </div>\n </div>\n }\n</div>\n\n<!-- Popup footer: flow action buttons -->\n@if (showFooter()) {\n<ax-footer class=\"__popup-footer flex-shrink-0 border-t px-4 py-3\">\n <!-- Footer prefix: attachments and progress -->\n <ax-prefix>\n <div class=\"flex items-center gap-4 min-w-0\">\n @if (flowStep() === 'questions') {\n <axm-questionnaire-viewer-questionnaire-attachments-footer [attachments]=\"questionnaireAttachments()\" />\n <div class=\"__footer-progress text-sm font-mono tabular-nums\" dir=\"ltr\">\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n </div>\n }\n @if (showPreviewPdfButton()) {\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"'@assessment-management:sessions.actions.preview-pdf.title' | translate | async\"\n [disabled]=\"isPreviewingPdf()\" (onClick)=\"handlePreviewPdfClick()\"></ax-button>\n }\n </div>\n </ax-prefix>\n\n <!-- Footer suffix: flow action buttons -->\n <ax-suffix>\n <!-- Pre-questionnaire welcome step -->\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 <!-- Draft save (fill mode with save-and-continue) -->\n @if (showSaveButton()) {\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.actions.save-as-draft.title' | translate | async\"\n [disabled]=\"isSubmitting() || isReadonly()\" (onClick)=\"handleSaveClick()\"></ax-button>\n }\n <!-- Section / page navigation (paginated view modes) -->\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 <!-- Last step: optional review before submit -->\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]=\"isReadonly() || !areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n <!-- Last step: submit when review is disabled -->\n @if (isLastStep() && !showReviewButton() && showSubmitButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"primarySubmitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting() || isReadonly() || !areAllRequiredQuestionsAnswered()\"\n (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n <!-- Readonly session review: jump to stored outcome results -->\n @if (showViewResultsButton()) {\n <ax-button look=\"outline\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.results' | translate | async\"\n (onClick)=\"handleViewResultsClick()\">\n <ax-icon class=\"fa-light fa-chart-simple\"></ax-icon>\n </ax-button>\n }\n <!-- Manager review decision (readonly workflow review) -->\n @if (showReviewDecisionButtons()) {\n <ax-button look=\"solid\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.sign-off' | translate | async\"\n (onClick)=\"handleReviewSignOff()\">\n <ax-icon class=\"fa-light fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"solid\" color=\"danger\" [text]=\"'@general:actions.reject.title' | translate | async\"\n (onClick)=\"handleReviewReject()\">\n <ax-icon class=\"fa-light fa-times\"></ax-icon>\n </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]=\"primarySubmitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n }\n <!-- Results step actions -->\n @else if (flowStep() === 'results') {\n <!-- Readonly session review: return to answers -->\n @if (isReadonly() && hasStoredOutcomeResults()) {\n <ax-button look=\"outline\" [color]=\"'primary'\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.answers' | translate | async\"\n (onClick)=\"flowStep.set('questions')\">\n <ax-icon class=\"fa-light fa-clipboard-list-check\"></ax-icon>\n </ax-button>\n }\n @if (showReviewDecisionButtons()) {\n <ax-button look=\"solid\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.sign-off' | translate | async\"\n (onClick)=\"handleReviewSignOff()\">\n <ax-icon class=\"fa-light fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"solid\" color=\"danger\" [text]=\"'@general:actions.reject.title' | translate | async\"\n (onClick)=\"handleReviewReject()\">\n <ax-icon class=\"fa-light fa-times\"></ax-icon>\n </ax-button>\n } @else if (prePostConfigValue()?.post?.summaryEnabled && !isReadonly()) {\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 </ax-suffix>\n</ax-footer>\n}\n\n<axm-questionnaire-print-host\n [structure]=\"structureValue()\"\n [questionnaireId]=\"questionnaireIdValue()\"\n [answers]=\"printAnswers()\"\n [prePostConfig]=\"prePostConfigValue()\"\n [placeholderValues]=\"storedOutcomeResultsValue() ?? submitResult()\"\n/>", styles: ["@layer properties;axm-questionnaire-viewer-popup{display:flex;height:100%;max-height:90vh;min-height:0px;width:100%;flex:1;flex-direction:column;overflow:hidden}@media(width>=64rem){axm-questionnaire-viewer-popup{max-height:75vh}}axm-questionnaire-viewer-popup .__content-area{min-height:0px}axm-questionnaire-viewer-popup .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-popup .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface-variant));position:sticky;top:0}axm-questionnaire-viewer-popup .__header .__header-top{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-neutral-600, oklch(43.9% 0 none))}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5)}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item i{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-primary-600))}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item span{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}axm-questionnaire-viewer-popup .__header .__header-top .__header-timer{display:flex;flex-shrink:0;align-items:center}axm-questionnaire-viewer-popup .__content-wrapper{display:flex;min-height:0px;flex:1;overflow:hidden}axm-questionnaire-viewer-popup .__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-popup .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-popup .__popup-footer{position:sticky;bottom:0;z-index:20;border-top-style:var(--tw-border-style);border-top-width:1px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:rgba(var(--ax-sys-color-surface))}axm-questionnaire-viewer-popup .__toolbar-meta,axm-questionnaire-viewer-popup .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}axp-popup-content:has(axm-questionnaire-viewer-popup){display:flex;min-height:0px;flex-direction:column;overflow:hidden}axp-popup-content:has(axm-questionnaire-viewer-popup) axm-questionnaire-viewer-popup{min-height:0px;flex:1}axp-layout-container#axp-popup-layout:has(axm-questionnaire-viewer-popup){min-height:0px;overflow:hidden}axp-layout-container#axp-popup-layout:has(axm-questionnaire-viewer-popup) axp-page-content{min-height:0px;flex:1;overflow:hidden}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "ngmodule", type: AXAlertModule }, { 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: "component", type:
588
+ //AXPStopwatchComponent,
589
+ 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: "component", type: AXMQuestionnairePrintHostComponent, selector: "axm-questionnaire-print-host", inputs: ["structure", "questionnaireId", "answers", "prePostConfig", "placeholderValues", "options"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
590
+ }
591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMQuestionnaireViewerPopupComponent, decorators: [{
592
+ type: Component,
593
+ args: [{ selector: 'axm-questionnaire-viewer-popup', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
594
+ CommonModule,
595
+ AXTranslationModule,
596
+ AXAlertModule,
597
+ AXButtonModule,
598
+ AXDecoratorModule,
599
+ //AXPStopwatchComponent,
600
+ AXMQuestionnaireViewerComponent,
601
+ AXMQuestionnaireViewerQuestionnaireAttachmentsFooterComponent,
602
+ AXMPreQuestionnaireContentComponent,
603
+ AXMPostQuestionnaireContentComponent,
604
+ AXMQuestionnairePrintHostComponent,
605
+ ], encapsulation: ViewEncapsulation.None, template: "<!-- Main content area: flow-step driven body -->\n<div class=\"__content-area flex flex-1 min-h-0 flex-col\"\n [class.overflow-hidden]=\"flowStep() === 'questions'\" [class.overflow-y-auto]=\"flowStep() !== 'questions'\">\n <!-- Pre-questionnaire introduction content -->\n @if (flowStep() === 'pre') {\n <axm-pre-questionnaire-content [content]=\"$safeNavigationMigration(prePostConfigValue()?.pre?.content)\"></axm-pre-questionnaire-content>\n }\n <!-- Post-submit outcome results -->\n @else if (flowStep() === 'results') {\n <axm-post-questionnaire-content mode=\"results\" [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]=\"$safeNavigationMigration(prePostConfigValue()?.post?.summaryContent)\"\n [placeholderValues]=\"submitResult()\"></axm-post-questionnaire-content>\n }\n <!-- Questionnaire and review flow -->\n @else {\n <!-- Review mode content (answers snapshot before submit) -->\n @if (flowStep() === 'review') {\n <axm-post-questionnaire-content mode=\"review\" [questionsWithAnswers]=\"reviewSnapshot()\"\n [reviewContext]=\"reviewContext()\"\n [showQuestionNumbers]=\"configValue()?.showQuestionNumbers ?? true\"></axm-post-questionnaire-content>\n }\n\n <!-- Questionnaire workspace (hidden off-screen while in review mode) -->\n <div class=\"__questions flex flex-col flex-1 min-h-0 overflow-hidden\"\n [class.invisible]=\"flowStep() === 'review'\" [style.position]=\"flowStep() === 'review' ? 'fixed' : null\"\n [style.left]=\"flowStep() === 'review' ? '-9999px' : null\" [class.size-0]=\"flowStep() === 'review'\"\n [class.overflow-hidden]=\"flowStep() === 'review'\">\n <!-- @if (showTimer()) {\n <div class=\"__header flex-shrink-0 p-4 border-b border-surface\">\n <div class=\"flex justify-between items-center\">\n <div class=\"__toolbar-meta flex items-center gap-4 text-sm\">\n @if (totalQuestionsCount() > 0) {\n <span><i class=\"fa-light fa-list-check\"></i> {{ totalQuestionsCount() }} {{ totalQuestionsCount() === 1 ? 'Question' : 'Questions' }}</span>\n }\n @if (showTimer()) {\n <axp-stopwatch\n [mode]=\"'count-down'\"\n [timeLimit]=\"timerTimeLimit()\"\n [format]=\"timerTimeLimit() && timerTimeLimit()! >= 3600 ? 'hh:mm:ss' : 'mm:ss'\"\n [autoStart]=\"true\"\n [showControls]=\"false\"\n [value]=\"timerElapsed()\"\n (valueChange)=\"viewerViewModel()!.updateTimerElapsed($event)\"\n ></axp-stopwatch>\n }\n </div>\n </div>\n </div>\n } -->\n\n <!-- Questionnaire rendering container -->\n <div class=\"__content flex flex-1 min-h-0 flex-col overflow-y-auto overflow-x-hidden\">\n <axm-questionnaire-viewer #viewer [questionnaireId]=\"questionnaireIdValue()\" [structure]=\"structureValue()\"\n [config]=\"configValue()\" [initialAnswers]=\"effectiveInitialAnswers()\"></axm-questionnaire-viewer>\n </div>\n </div>\n }\n</div>\n\n<!-- Popup footer: flow action buttons -->\n@if (showFooter()) {\n<ax-footer class=\"__popup-footer flex-shrink-0 border-t px-4 py-3\">\n <!-- Footer prefix: attachments and progress -->\n <ax-prefix>\n <div class=\"flex items-center gap-4 min-w-0\">\n @if (flowStep() === 'questions') {\n <axm-questionnaire-viewer-questionnaire-attachments-footer [attachments]=\"questionnaireAttachments()\" />\n <div class=\"__footer-progress text-sm font-mono tabular-nums\" dir=\"ltr\">\n {{ answeredQuestionsCount() }} / {{ totalQuestionsCount() }}\n </div>\n }\n @if (showPreviewPdfButton()) {\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"'@assessment-management:sessions.actions.preview-pdf.title' | translate | async\"\n [disabled]=\"isPreviewingPdf()\" (onClick)=\"handlePreviewPdfClick()\"></ax-button>\n }\n </div>\n </ax-prefix>\n\n <!-- Footer suffix: flow action buttons -->\n <ax-suffix>\n <!-- Pre-questionnaire welcome step -->\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 <!-- Draft save (fill mode with save-and-continue) -->\n @if (showSaveButton()) {\n <ax-button look=\"outline\" color=\"primary\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.actions.save-as-draft.title' | translate | async\"\n [disabled]=\"isSubmitting() || isReadonly()\" (onClick)=\"handleSaveClick()\"></ax-button>\n }\n <!-- Section / page navigation (paginated view modes) -->\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 <!-- Last step: optional review before submit -->\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]=\"isReadonly() || !areAllRequiredQuestionsAnswered()\" (onClick)=\"handleReviewClick()\"></ax-button>\n }\n <!-- Last step: submit when review is disabled -->\n @if (isLastStep() && !showReviewButton() && showSubmitButton()) {\n <ax-button look=\"solid\" color=\"primary\" [text]=\"primarySubmitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting() || isReadonly() || !areAllRequiredQuestionsAnswered()\"\n (onClick)=\"handleSubmitClick()\"></ax-button>\n }\n <!-- Readonly session review: jump to stored outcome results -->\n @if (showViewResultsButton()) {\n <ax-button look=\"outline\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.results' | translate | async\"\n (onClick)=\"handleViewResultsClick()\">\n <ax-icon class=\"fa-light fa-chart-simple\"></ax-icon>\n </ax-button>\n }\n <!-- Manager review decision (readonly workflow review) -->\n @if (showReviewDecisionButtons()) {\n <ax-button look=\"solid\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.sign-off' | translate | async\"\n (onClick)=\"handleReviewSignOff()\">\n <ax-icon class=\"fa-light fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"solid\" color=\"danger\" [text]=\"'@general:actions.reject.title' | translate | async\"\n (onClick)=\"handleReviewReject()\">\n <ax-icon class=\"fa-light fa-times\"></ax-icon>\n </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]=\"primarySubmitActionLabel() | translate | async\"\n [disabled]=\"isSubmitting()\" (onClick)=\"handleReviewSubmit()\"></ax-button>\n }\n <!-- Results step actions -->\n @else if (flowStep() === 'results') {\n <!-- Readonly session review: return to answers -->\n @if (isReadonly() && hasStoredOutcomeResults()) {\n <ax-button look=\"outline\" [color]=\"'primary'\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.answers' | translate | async\"\n (onClick)=\"flowStep.set('questions')\">\n <ax-icon class=\"fa-light fa-clipboard-list-check\"></ax-icon>\n </ax-button>\n }\n @if (showReviewDecisionButtons()) {\n <ax-button look=\"solid\" color=\"success\"\n [text]=\"'@assessment-management:questionnaires.components.questionnaire-viewer.flow.sign-off' | translate | async\"\n (onClick)=\"handleReviewSignOff()\">\n <ax-icon class=\"fa-light fa-check\"></ax-icon>\n </ax-button>\n <ax-button look=\"solid\" color=\"danger\" [text]=\"'@general:actions.reject.title' | translate | async\"\n (onClick)=\"handleReviewReject()\">\n <ax-icon class=\"fa-light fa-times\"></ax-icon>\n </ax-button>\n } @else if (prePostConfigValue()?.post?.summaryEnabled && !isReadonly()) {\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 </ax-suffix>\n</ax-footer>\n}\n\n<axm-questionnaire-print-host\n [structure]=\"structureValue()\"\n [questionnaireId]=\"questionnaireIdValue()\"\n [answers]=\"printAnswers()\"\n [prePostConfig]=\"prePostConfigValue()\"\n [placeholderValues]=\"storedOutcomeResultsValue() ?? submitResult()\"\n/>", styles: ["@layer properties;axm-questionnaire-viewer-popup{display:flex;height:100%;max-height:90vh;min-height:0px;width:100%;flex:1;flex-direction:column;overflow:hidden}@media(width>=64rem){axm-questionnaire-viewer-popup{max-height:75vh}}axm-questionnaire-viewer-popup .__content-area{min-height:0px}axm-questionnaire-viewer-popup .__questions{min-height:0px;overflow:hidden}axm-questionnaire-viewer-popup .__header{z-index:20;display:flex;flex-shrink:0;flex-direction:column;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:rgba(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface-variant));position:sticky;top:0}axm-questionnaire-viewer-popup .__header .__header-top{display:flex;align-items:center;justify-content:space-between;gap:calc(var(--spacing, .25rem) * 4);padding-inline:calc(var(--spacing, .25rem) * 4);padding-block:calc(var(--spacing, .25rem) * 3)}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);font-size:var(--text-xs, .75rem);line-height:var(--tw-leading, var(--text-xs--line-height, calc(1 / .75)));color:var(--color-neutral-600, oklch(43.9% 0 none))}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 1.5)}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item i{font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:rgba(var(--ax-sys-color-primary-600))}axm-questionnaire-viewer-popup .__header .__header-top .__header-meta .__meta-item span{--tw-font-weight: var(--font-weight-medium, 500);font-weight:var(--font-weight-medium, 500)}axm-questionnaire-viewer-popup .__header .__header-top .__header-timer{display:flex;flex-shrink:0;align-items:center}axm-questionnaire-viewer-popup .__content-wrapper{display:flex;min-height:0px;flex:1;overflow:hidden}axm-questionnaire-viewer-popup .__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-popup .__content axm-questionnaire-viewer .__questionnaire-container{min-height:0px;flex:none;overflow:visible}axm-questionnaire-viewer-popup .__popup-footer{position:sticky;bottom:0;z-index:20;border-top-style:var(--tw-border-style);border-top-width:1px;background-color:var(--color-lightest);color:var(--color-on-lightest);border-color:var(--color-border-lightest);border-color:rgba(var(--ax-sys-color-surface))}axm-questionnaire-viewer-popup .__toolbar-meta,axm-questionnaire-viewer-popup .__footer-progress{color:rgb(var(--ax-sys-color-on-surface-variant))}axp-popup-content:has(axm-questionnaire-viewer-popup){display:flex;min-height:0px;flex-direction:column;overflow:hidden}axp-popup-content:has(axm-questionnaire-viewer-popup) axm-questionnaire-viewer-popup{min-height:0px;flex:1}axp-layout-container#axp-popup-layout:has(axm-questionnaire-viewer-popup){min-height:0px;overflow:hidden}axp-layout-container#axp-popup-layout:has(axm-questionnaire-viewer-popup) axp-page-content{min-height:0px;flex:1;overflow:hidden}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style: solid;--tw-font-weight: initial}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
606
+ }], ctorParameters: () => [], propDecorators: { structure: [{ type: i0.Input, args: [{ isSignal: true, alias: "structure", required: true }] }], prePostConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "prePostConfig", required: false }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], initialAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialAnswers", required: false }] }], submitHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "submitHandler", required: false }] }], saveHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "saveHandler", required: false }] }], assessmentFillContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "assessmentFillContext", required: false }] }], questionnaireId: [{ type: i0.Input, args: [{ isSignal: true, alias: "questionnaireId", required: false }] }], printTemplateId: [{ type: i0.Input, args: [{ isSignal: true, alias: "printTemplateId", required: false }] }], outcomeRules: [{ type: i0.Input, args: [{ isSignal: true, alias: "outcomeRules", required: false }] }], storedOutcomeResults: [{ type: i0.Input, args: [{ isSignal: true, alias: "storedOutcomeResults", required: false }] }], printTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "printTitle", required: false }] }], viewer: [{ type: i0.ViewChild, args: ['viewer', { isSignal: true }] }], printHost: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXMQuestionnairePrintHostComponent), { isSignal: true }] }] } });
607
+
608
+ export { AXMQuestionnaireViewerPopupComponent };
609
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-Djcfg0dv.mjs.map