@acorex-platform/module-assessment-management-client 0.0.58 → 0.0.59

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 (56) hide show
  1. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs} +63 -63
  2. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs.map → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs.map} +1 -1
  3. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-DGYCwZ7v.mjs → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-DGYCwZ7v.mjs.map → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs.map} +1 -1
  5. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.mjs → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs} +2 -2
  6. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-DY_9qPYh.mjs.map → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs.map} +1 -1
  7. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs} +2 -2
  8. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-CeLpGSGc.mjs.map → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs.map} +1 -1
  9. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs → acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs} +3 -3
  10. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer.service-DoO7ZQmw.mjs.map → acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs → acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-assessment-management-client-index-er5gI6QK.mjs.map → acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs} +3 -3
  14. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-Cz23Vkyv.mjs.map → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-DDQOvVpt.mjs.map → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-D4YlqMUf.mjs → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs} +2 -2
  18. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-D4YlqMUf.mjs.map → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs.map} +1 -1
  19. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-BYh-3EP9.mjs → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-BYh-3EP9.mjs.map → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs.map} +1 -1
  21. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-DARYq7ZJ.mjs → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs} +2 -2
  22. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-DARYq7ZJ.mjs.map → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs.map} +1 -1
  23. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-DIktPLmP.mjs → acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-DIktPLmP.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-BAoqjZ7K.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-BAoqjZ7K.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-O-d2f3fv.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-O-d2f3fv.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs.map} +1 -1
  29. package/fesm2022/{acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-D0Rkeywu.mjs → acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs} +2 -2
  30. package/fesm2022/{acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-D0Rkeywu.mjs.map → acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CHeyD-AC.mjs → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs} +2 -2
  32. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CHeyD-AC.mjs.map → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-DlpkbJCZ.mjs → acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs} +3 -3
  34. package/fesm2022/{acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-DlpkbJCZ.mjs.map → acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-t67ngnrD.mjs → acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs} +2 -2
  36. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-t67ngnrD.mjs.map → acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-DHgNcZ60.mjs → acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs} +2 -2
  38. package/fesm2022/{acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-DHgNcZ60.mjs.map → acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs.map} +1 -1
  39. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs} +2 -2
  40. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs.map → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs.map} +1 -1
  41. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs → acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs} +2 -2
  42. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs.map} +1 -1
  43. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs → acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs} +3 -3
  44. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs.map} +1 -1
  45. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs → acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs} +3 -3
  46. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs → acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs} +3 -3
  48. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map} +1 -1
  49. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs → acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs} +3 -3
  50. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs.map → acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map} +1 -1
  51. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs → acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs} +2 -2
  52. package/fesm2022/{acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs.map → acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map} +1 -1
  53. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CxZirYRJ.mjs → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs} +2 -2
  54. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-CxZirYRJ.mjs.map → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs.map} +1 -1
  55. package/fesm2022/acorex-platform-module-assessment-management-client.mjs +1 -1
  56. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-DHgNcZ60.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/questionnaire-viewer/show-questionnaire-viewer-popup.command.ts"],"sourcesContent":["import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { QuestionnaireBuilderValue } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isPlainObject } from 'lodash-es';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer/questionnaire-viewer.service';\nimport { QUESTIONNAIRE_VIEWER_FIELD, QUESTIONNAIRE_VIEWER_SOURCE_FIELD } from '../content-display.constants';\nimport { readRelatedRecordId } from '../content-display.util';\nimport { AXMRelatedContentRecordService } from '../related-content-record.service';\n\n//#region ----- Types -----\n\nexport interface ShowQuestionnaireViewerPopupInput {\n entity: string;\n id: string;\n field?: string;\n path: string;\n sourceField?: string;\n targetEntity: string;\n title?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/**\n * Opens the questionnaire stored on the related record and saves answers on this record.\n */\n@Injectable({ providedIn: 'root' })\nexport class ShowQuestionnaireViewerPopupCommand implements AXPCommand<ShowQuestionnaireViewerPopupInput, unknown> {\n //#region ----- Services & Dependencies -----\n\n private readonly questionnaireViewer = inject(AXMQuestionnaireViewerService);\n private readonly records = inject(AXMRelatedContentRecordService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly eventService = inject(AXPBroadcastEventService);\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n async execute(input: ShowQuestionnaireViewerPopupInput | undefined): AXPCommandExecuteResultPromise<unknown> {\n const evaluated = resolveInput(input);\n const entity = evaluated.entity?.trim() ?? '';\n const id = readRelatedRecordId(evaluated.id);\n const path = evaluated.path?.trim() ?? '';\n const targetEntity = evaluated.targetEntity?.trim() ?? '';\n const field = evaluated.field?.trim() || QUESTIONNAIRE_VIEWER_FIELD;\n const sourceField = evaluated.sourceField?.trim() || QUESTIONNAIRE_VIEWER_SOURCE_FIELD;\n\n if (!entity || !id || !path || !targetEntity) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const host = await this.records.find(entity, id);\n if (!host) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.not-found'),\n },\n };\n }\n\n const relatedId = readRelatedRecordId(host[path]);\n const structure = relatedId\n ? ((await this.records.readQuestionnaireStructure(\n targetEntity,\n relatedId,\n sourceField,\n )) as QuestionnaireBuilderValue | null)\n : null;\n if (!structure?.sections?.length) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.empty.description',\n ),\n },\n };\n }\n\n const current = host[field];\n const title =\n evaluated.title?.trim() ||\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.section-title',\n ));\n const opened = await this.questionnaireViewer.open({\n title,\n structure,\n initialAnswers: isPlainObject(current) ? (current as Record<string, any>) : {},\n });\n if (!opened || (!opened.submitted && !opened.saved)) {\n return { success: false };\n }\n\n await this.entityService.withEntity(entity).data().update(id, { [field]: opened.answers } as never);\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });\n return {\n success: true,\n kind: 'object',\n data: { id, [field]: opened.answers },\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.updated'),\n },\n };\n } catch {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.error.description'),\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction resolveInput(input: ShowQuestionnaireViewerPopupInput | undefined): ShowQuestionnaireViewerPopupInput {\n const raw = (input ?? {}) as ShowQuestionnaireViewerPopupInput & {\n options?: Partial<ShowQuestionnaireViewerPopupInput>;\n data?: Partial<ShowQuestionnaireViewerPopupInput> & { id?: string };\n };\n const options = raw.options ?? {};\n const data = raw.data ?? {};\n return {\n entity: options.entity ?? raw.entity ?? '',\n id: options.id ?? raw.id ?? data.id ?? '',\n field: options.field ?? raw.field,\n path: options.path ?? raw.path ?? '',\n sourceField: options.sourceField ?? raw.sourceField,\n targetEntity: options.targetEntity ?? raw.targetEntity ?? '',\n title: options.title ?? raw.title,\n };\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/questionnaire-viewer/show-questionnaire-viewer-popup.command.ts"],"sourcesContent":["import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { QuestionnaireBuilderValue } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isPlainObject } from 'lodash-es';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer/questionnaire-viewer.service';\nimport { QUESTIONNAIRE_VIEWER_FIELD, QUESTIONNAIRE_VIEWER_SOURCE_FIELD } from '../content-display.constants';\nimport { readRelatedRecordId } from '../content-display.util';\nimport { AXMRelatedContentRecordService } from '../related-content-record.service';\n\n//#region ----- Types -----\n\nexport interface ShowQuestionnaireViewerPopupInput {\n entity: string;\n id: string;\n field?: string;\n path: string;\n sourceField?: string;\n targetEntity: string;\n title?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/**\n * Opens the questionnaire stored on the related record and saves answers on this record.\n */\n@Injectable({ providedIn: 'root' })\nexport class ShowQuestionnaireViewerPopupCommand implements AXPCommand<ShowQuestionnaireViewerPopupInput, unknown> {\n //#region ----- Services & Dependencies -----\n\n private readonly questionnaireViewer = inject(AXMQuestionnaireViewerService);\n private readonly records = inject(AXMRelatedContentRecordService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly eventService = inject(AXPBroadcastEventService);\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n async execute(input: ShowQuestionnaireViewerPopupInput | undefined): AXPCommandExecuteResultPromise<unknown> {\n const evaluated = resolveInput(input);\n const entity = evaluated.entity?.trim() ?? '';\n const id = readRelatedRecordId(evaluated.id);\n const path = evaluated.path?.trim() ?? '';\n const targetEntity = evaluated.targetEntity?.trim() ?? '';\n const field = evaluated.field?.trim() || QUESTIONNAIRE_VIEWER_FIELD;\n const sourceField = evaluated.sourceField?.trim() || QUESTIONNAIRE_VIEWER_SOURCE_FIELD;\n\n if (!entity || !id || !path || !targetEntity) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const host = await this.records.find(entity, id);\n if (!host) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.not-found'),\n },\n };\n }\n\n const relatedId = readRelatedRecordId(host[path]);\n const structure = relatedId\n ? ((await this.records.readQuestionnaireStructure(\n targetEntity,\n relatedId,\n sourceField,\n )) as QuestionnaireBuilderValue | null)\n : null;\n if (!structure?.sections?.length) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.empty.description',\n ),\n },\n };\n }\n\n const current = host[field];\n const title =\n evaluated.title?.trim() ||\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.section-title',\n ));\n const opened = await this.questionnaireViewer.open({\n title,\n structure,\n initialAnswers: isPlainObject(current) ? (current as Record<string, any>) : {},\n });\n if (!opened || (!opened.submitted && !opened.saved)) {\n return { success: false };\n }\n\n await this.entityService.withEntity(entity).data().update(id, { [field]: opened.answers } as never);\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });\n return {\n success: true,\n kind: 'object',\n data: { id, [field]: opened.answers },\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.updated'),\n },\n };\n } catch {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.error.description'),\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction resolveInput(input: ShowQuestionnaireViewerPopupInput | undefined): ShowQuestionnaireViewerPopupInput {\n const raw = (input ?? {}) as ShowQuestionnaireViewerPopupInput & {\n options?: Partial<ShowQuestionnaireViewerPopupInput>;\n data?: Partial<ShowQuestionnaireViewerPopupInput> & { id?: string };\n };\n const options = raw.options ?? {};\n const data = raw.data ?? {};\n return {\n entity: options.entity ?? raw.entity ?? '',\n id: options.id ?? raw.id ?? data.id ?? '',\n field: options.field ?? raw.field,\n path: options.path ?? raw.path ?? '',\n sourceField: options.sourceField ?? raw.sourceField,\n targetEntity: options.targetEntity ?? raw.targetEntity ?? '',\n title: options.title ?? raw.title,\n };\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import * as i1 from '@acorex-platform/framework-client/layout/widget-core';
3
3
  import { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, computed, signal, effect, ChangeDetectionStrategy, Component } from '@angular/core';
6
- import { u as AXPTemplateWidgetProviderService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
6
+ import { u as AXPTemplateWidgetProviderService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
7
7
 
8
8
  class AXPTemplateWidgetEditComponent extends AXPValueWidgetComponent {
9
9
  // protected allowRemove = computed<boolean>(() => this.options()['allowRemove'] as boolean ?? false);
@@ -104,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
104
104
  }], ctorParameters: () => [] });
105
105
 
106
106
  export { AXPTemplateWidgetEditComponent };
107
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs.map
107
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-template-widget-edit.component-3DZovs7s.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/widgets/template/template-widget-edit.component.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPTemplateWidgetProviderService } from '../../components/template-picker/template.provider';\n\n@Component({\n selector: 'axp-template-widget-edit',\n template: `\n @for (node of nodes(); track $index) {\n <ng-container axp-widget-renderer\n [node]=\"node\"\n [parentNode]=\"this\"\n [mode]=\"this.mode\">\n </ng-container>\n }\n <!-- @if(nodes().length>0) {\n <ng-container>\n \n </ng-container> -->\n <!-- @if(showRemove())\n {\n <div\n class=\"text-danger-500 hover:text-danger-800 mt-2 text-xs cursor-pointer\"\n (click)=\"handleRemoveClick()\"\n >\n {{ '@form-template-management:templates.terms.remove-template' | translate | async }}\n </div>\n }\n } \n @else {\n <span\n class=\"underline decoration-dotted underline-offset-8 hover:text-primary-500 cursor-pointer\"\n (click)=\"handleSelectClick()\"\n >\n {{ '@form-template-management:templates.terms.choose-template' | translate | async }}\n </span>\n } -->\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXTranslationModule]\n})\nexport class AXPTemplateWidgetEditComponent extends AXPValueWidgetComponent {\n private metaKey = '__meta__';\n\n private templateProvider = inject(AXPTemplateWidgetProviderService);\n protected templateId = computed<string>(() => this.options()['templateId'] as string);\n protected nodes = signal<AXPWidgetNode[]>([]);\n // protected allowRemove = computed<boolean>(() => this.options()['allowRemove'] as boolean ?? false);\n\n\n // protected showRemove = computed(() => {\n // return this.allowRemove() && this.parent?.config.name != 'template';\n // });\n\n constructor() {\n super();\n //\n effect(\n async () => {\n this.nodes.set([]);\n const templateId = this.templateId();\n if (templateId) {\n const item = await this.templateProvider.get(templateId);\n if (item) {\n this.nodes.set(item.nodes);\n }\n }\n }\n );\n }\n\n //TODO: make a new widget to handle select widget in edit mode\n // protected async handleSelectClick() {\n // const result = await this.templateProvider.chooseTemplate();\n // if (result) {\n // this.setOptions({ templateId: result.id });\n // const value = this.getValue() ?? {};\n // set(value, this.metaKey, { templateId: result.id });\n // this.setValue(value);\n // }\n // }\n\n // protected async handleRemoveClick() {\n // this.setOptions({ templateId: null });\n // this.setValue(null);\n // }\n}\n"],"names":[],"mappings":";;;;;;;AA4CM,MAAO,8BAA+B,SAAQ,uBAAuB,CAAA;;;;;AAazE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAbD,IAAA,CAAA,OAAO,GAAG,UAAU;AAEpB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACzD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAW;uFAAC;QAC3E,IAAA,CAAA,KAAK,GAAG,MAAM,CAAkB,EAAE;kFAAC;;QAW3C,MAAM,CACJ,YAAW;AACT,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,UAAU,EAAE;gBACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;gBACxD,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5B;YACF;AACF,QAAA,CAAC,CACF;IACH;8GA5BW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAES,mBAAmB,uQAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBApC1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,mBAAmB;AACnD,iBAAA;;;"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/widgets/template/template-widget-edit.component.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPTemplateWidgetProviderService } from '../../components/template-picker/template.provider';\n\n@Component({\n selector: 'axp-template-widget-edit',\n template: `\n @for (node of nodes(); track $index) {\n <ng-container axp-widget-renderer\n [node]=\"node\"\n [parentNode]=\"this\"\n [mode]=\"this.mode\">\n </ng-container>\n }\n <!-- @if(nodes().length>0) {\n <ng-container>\n \n </ng-container> -->\n <!-- @if(showRemove())\n {\n <div\n class=\"text-danger-500 hover:text-danger-800 mt-2 text-xs cursor-pointer\"\n (click)=\"handleRemoveClick()\"\n >\n {{ '@form-template-management:templates.terms.remove-template' | translate | async }}\n </div>\n }\n } \n @else {\n <span\n class=\"underline decoration-dotted underline-offset-8 hover:text-primary-500 cursor-pointer\"\n (click)=\"handleSelectClick()\"\n >\n {{ '@form-template-management:templates.terms.choose-template' | translate | async }}\n </span>\n } -->\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXTranslationModule]\n})\nexport class AXPTemplateWidgetEditComponent extends AXPValueWidgetComponent {\n private metaKey = '__meta__';\n\n private templateProvider = inject(AXPTemplateWidgetProviderService);\n protected templateId = computed<string>(() => this.options()['templateId'] as string);\n protected nodes = signal<AXPWidgetNode[]>([]);\n // protected allowRemove = computed<boolean>(() => this.options()['allowRemove'] as boolean ?? false);\n\n\n // protected showRemove = computed(() => {\n // return this.allowRemove() && this.parent?.config.name != 'template';\n // });\n\n constructor() {\n super();\n //\n effect(\n async () => {\n this.nodes.set([]);\n const templateId = this.templateId();\n if (templateId) {\n const item = await this.templateProvider.get(templateId);\n if (item) {\n this.nodes.set(item.nodes);\n }\n }\n }\n );\n }\n\n //TODO: make a new widget to handle select widget in edit mode\n // protected async handleSelectClick() {\n // const result = await this.templateProvider.chooseTemplate();\n // if (result) {\n // this.setOptions({ templateId: result.id });\n // const value = this.getValue() ?? {};\n // set(value, this.metaKey, { templateId: result.id });\n // this.setValue(value);\n // }\n // }\n\n // protected async handleRemoveClick() {\n // this.setOptions({ templateId: null });\n // this.setValue(null);\n // }\n}\n"],"names":[],"mappings":";;;;;;;AA4CM,MAAO,8BAA+B,SAAQ,uBAAuB,CAAA;;;;;AAazE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAbD,IAAA,CAAA,OAAO,GAAG,UAAU;AAEpB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACzD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAW;uFAAC;QAC3E,IAAA,CAAA,KAAK,GAAG,MAAM,CAAkB,EAAE;kFAAC;;QAW3C,MAAM,CACJ,YAAW;AACT,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,UAAU,EAAE;gBACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;gBACxD,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5B;YACF;AACF,QAAA,CAAC,CACF;IACH;8GA5BW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAES,mBAAmB,uQAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBApC1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,mBAAmB;AACnD,iBAAA;;;"}
@@ -10,7 +10,7 @@ import { AsyncPipe } from '@angular/common';
10
10
  import * as i0 from '@angular/core';
11
11
  import { computed, signal, model, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
12
12
  import { isEqual } from 'lodash-es';
13
- import { g as testSheetChoiceId } from './acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs';
13
+ import { g as testSheetChoiceId } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
14
14
 
15
15
  //#region ----- Imports -----
16
16
  //#endregion
@@ -87,4 +87,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
87
87
  }], propDecorators: { widgetConfigModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "widgetConfigModel", required: false }] }, { type: i0.Output, args: ["widgetConfigModelChange"] }] } });
88
88
 
89
89
  export { AXMTestSheetCellTypeWidgetEditComponent };
90
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs.map
90
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-DRFfLOCE.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-cell-type-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-cell-type-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, model, signal, untracked } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport { testSheetChoiceId } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-cell-type-widget-edit',\n templateUrl: './test-sheet-cell-type-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXFormModule, AXLabelModule, AXTranslationModule, AXPWidgetFieldConfiguratorComponent],\n host: {\n class: 'block w-full min-w-0',\n '[class.hidden]': '!showCellType()',\n },\n})\nexport class AXMTestSheetCellTypeWidgetEditComponent extends AXPValueWidgetComponent<AXPWidgetNode> {\n //#region ----- Constants -----\n\n protected readonly cellTypeLabel = '@assessment-management:widgets.test-sheet.columns.widget';\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n /** Static columns are authored text. Only an input column picks a cell widget. */\n protected readonly showCellType = computed(() => {\n this.contextService.changeEvent();\n const parent = this.parentPath();\n if (!parent) {\n return false;\n }\n return testSheetChoiceId(this.contextService.getValue(`${parent}.role`)) !== 'static';\n });\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly isInitialized = signal(false);\n\n protected readonly widgetConfigModel = model<AXPWidgetNode>({ type: '', options: {} });\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly syncValueToConfigurator = effect(() => {\n const value = this.getValue();\n if (value && value.type) {\n const currentModel = untracked(() => this.widgetConfigModel());\n if (!isEqual(value, currentModel)) {\n untracked(() => {\n this.widgetConfigModel.set(value);\n this.isInitialized.set(true);\n });\n }\n return;\n }\n untracked(() => {\n if (!this.isInitialized()) {\n this.isInitialized.set(true);\n }\n });\n });\n\n private readonly syncConfiguratorToValue = effect(() => {\n const modelValue = this.widgetConfigModel();\n if (!untracked(() => this.isInitialized()) || !modelValue?.type) {\n return;\n }\n const currentValue = untracked(() => this.getValue());\n if (!isEqual(modelValue, currentValue)) {\n untracked(() => {\n this.setValue(modelValue);\n });\n }\n });\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Cell type only when the column is an input ----- -->\n@if (showCellType()) {\n <ax-form-field>\n <ax-label>{{ cellTypeLabel | translate | async }}</ax-label>\n <!-- --------------------------------------------------------------- -->\n <!-- ----- Widget picker after the current cell widget has loaded ----- -->\n @if (isInitialized()) {\n <axp-widget-field-configurator\n [(widget)]=\"widgetConfigModel\"\n [label]=\"cellTypeLabel\"\n [readonly]=\"isReadonly()\"\n ></axp-widget-field-configurator>\n }\n </ax-form-field>\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-cell-type-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-cell-type-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetFieldConfiguratorComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, model, signal, untracked } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport { testSheetChoiceId } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-cell-type-widget-edit',\n templateUrl: './test-sheet-cell-type-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXFormModule, AXLabelModule, AXTranslationModule, AXPWidgetFieldConfiguratorComponent],\n host: {\n class: 'block w-full min-w-0',\n '[class.hidden]': '!showCellType()',\n },\n})\nexport class AXMTestSheetCellTypeWidgetEditComponent extends AXPValueWidgetComponent<AXPWidgetNode> {\n //#region ----- Constants -----\n\n protected readonly cellTypeLabel = '@assessment-management:widgets.test-sheet.columns.widget';\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n /** Static columns are authored text. Only an input column picks a cell widget. */\n protected readonly showCellType = computed(() => {\n this.contextService.changeEvent();\n const parent = this.parentPath();\n if (!parent) {\n return false;\n }\n return testSheetChoiceId(this.contextService.getValue(`${parent}.role`)) !== 'static';\n });\n\n //#endregion\n\n //#region ----- State Signals -----\n\n protected readonly isInitialized = signal(false);\n\n protected readonly widgetConfigModel = model<AXPWidgetNode>({ type: '', options: {} });\n\n //#endregion\n\n //#region ----- Effects -----\n\n private readonly syncValueToConfigurator = effect(() => {\n const value = this.getValue();\n if (value && value.type) {\n const currentModel = untracked(() => this.widgetConfigModel());\n if (!isEqual(value, currentModel)) {\n untracked(() => {\n this.widgetConfigModel.set(value);\n this.isInitialized.set(true);\n });\n }\n return;\n }\n untracked(() => {\n if (!this.isInitialized()) {\n this.isInitialized.set(true);\n }\n });\n });\n\n private readonly syncConfiguratorToValue = effect(() => {\n const modelValue = this.widgetConfigModel();\n if (!untracked(() => this.isInitialized()) || !modelValue?.type) {\n return;\n }\n const currentValue = untracked(() => this.getValue());\n if (!isEqual(modelValue, currentValue)) {\n untracked(() => {\n this.setValue(modelValue);\n });\n }\n });\n\n //#endregion\n}\n\n//#endregion\n","<!-- ----- Cell type only when the column is an input ----- -->\n@if (showCellType()) {\n <ax-form-field>\n <ax-label>{{ cellTypeLabel | translate | async }}</ax-label>\n <!-- --------------------------------------------------------------- -->\n <!-- ----- Widget picker after the current cell widget has loaded ----- -->\n @if (isInitialized()) {\n <axp-widget-field-configurator\n [(widget)]=\"widgetConfigModel\"\n [label]=\"cellTypeLabel\"\n [readonly]=\"isReadonly()\"\n ></axp-widget-field-configurator>\n }\n </ax-form-field>\n}\n"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ import { AXPSpreadsheetComponent } from '@acorex-platform/framework-client/layou
4
4
  import { AsyncPipe } from '@angular/common';
5
5
  import * as i0 from '@angular/core';
6
6
  import { input, model, output, computed, ChangeDetectionStrategy, Component } from '@angular/core';
7
- import { x as AXM_TEST_SHEET_ROW_GROUP_PATH } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
8
- import { t as toTestSheetSpreadsheetColumns, c as toTestSheetRowWidgets, d as testSheetHasRowGroups } from './acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs';
7
+ import { x as AXM_TEST_SHEET_ROW_GROUP_PATH } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
8
+ import { t as toTestSheetSpreadsheetColumns, c as toTestSheetRowWidgets, d as testSheetHasRowGroups } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
9
9
 
10
10
  //#region ----- Imports -----
11
11
  //#endregion
@@ -74,4 +74,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
74
74
  }], propDecorators: { definition: [{ type: i0.Input, args: [{ isSignal: true, alias: "definition", required: true }] }], rowsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowsInput", required: false }] }], rowsModel: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowsModel", required: false }] }, { type: i0.Output, args: ["rowsModelChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], sheetChange: [{ type: i0.Output, args: ["sheetChange"] }] } });
75
75
 
76
76
  export { AXMTestSheetGridComponent as A };
77
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs.map
77
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-grid.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-grid.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSpreadsheetComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\n\nimport { AXM_TEST_SHEET_ROW_GROUP_PATH, type AXMTestSheetDefinition } from './test-sheet.types';\nimport { testSheetHasRowGroups, toTestSheetRowWidgets, toTestSheetSpreadsheetColumns } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-grid',\n templateUrl: './test-sheet-grid.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule, AXPSpreadsheetComponent],\n})\nexport class AXMTestSheetGridComponent {\n //#region ----- Inputs -----\n\n definition = input.required<AXMTestSheetDefinition>();\n\n /** Fixed-mode rows. */\n rowsInput = input<Record<string, unknown>[]>([]);\n\n /** Repeated-mode rows. */\n rowsModel = model<Record<string, unknown>[]>([]);\n\n readonly = input(false);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n sheetChange = output<Record<string, unknown>[]>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly rowInputs = computed(() => this.definition().layout === 'row-inputs');\n\n protected readonly sheetDir = computed(() => {\n const direction = this.definition().direction;\n if (direction) {\n return direction;\n }\n return this.rowInputs() ? 'rtl' : null;\n });\n\n protected readonly columns = computed(() => toTestSheetSpreadsheetColumns(this.definition()));\n\n protected readonly rowWidgets = computed(() => toTestSheetRowWidgets(this.definition()));\n\n protected readonly spreadsheetRowMode = computed(() =>\n this.definition().rowMode === 'repeated' ? 'dynamic' : 'fixed',\n );\n\n protected readonly rowGroupPath = computed(() =>\n testSheetHasRowGroups(this.definition()) ? AXM_TEST_SHEET_ROW_GROUP_PATH : null,\n );\n\n protected readonly sheetTitle = computed(() => {\n if (this.rowInputs()) {\n return this.definition().rowHeaderTitle ?? '';\n }\n return this.rowGroupPath() ? '@assessment-management:widgets.test-sheet.group-header' : '';\n });\n\n protected readonly showRowHeader = computed(\n () => this.rowInputs() || this.definition().rowMode === 'repeated',\n );\n\n protected readonly rowTitlePath = computed(() => (this.rowInputs() ? 'title' : null));\n\n protected readonly allowRowChanges = computed(\n () => this.definition().rowMode === 'repeated' && !this.readonly(),\n );\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSheetChange(rows: Record<string, unknown>[]): void {\n this.sheetChange.emit(rows);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (columns().length === 0) {\n <!-- ----- Prompt when the question has no columns yet ----- -->\n <p class=\"text-sm text-neutral-500 py-2\">\n {{ '@assessment-management:widgets.test-sheet.empty-sheet' | translate | async }}\n </p>\n}\n<!-- ----- Spreadsheet bound to the authored columns and row mode ----- -->\n@else {\n <div [attr.dir]=\"sheetDir()\">\n <axp-spreadsheet\n [title]=\"sheetTitle()\"\n [columns]=\"columns()\"\n [rowWidgets]=\"rowWidgets()\"\n [rowMode]=\"spreadsheetRowMode()\"\n [rowsInput]=\"rowsInput()\"\n [(rowsModel)]=\"rowsModel\"\n [readonly]=\"readonly()\"\n [showRowHeader]=\"showRowHeader()\"\n [rowTitlePath]=\"rowTitlePath()\"\n [rowGroupPath]=\"rowGroupPath()\"\n [allowAddRows]=\"allowRowChanges()\"\n [allowRemoveRows]=\"allowRowChanges()\"\n [showCellActions]=\"false\"\n emptyCellPlaceholder=\"–\"\n (spreadsheetChange)=\"onSheetChange($event)\"\n />\n </div>\n}\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-grid.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-grid.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSpreadsheetComponent } from '@acorex-platform/framework-client/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\n\nimport { AXM_TEST_SHEET_ROW_GROUP_PATH, type AXMTestSheetDefinition } from './test-sheet.types';\nimport { testSheetHasRowGroups, toTestSheetRowWidgets, toTestSheetSpreadsheetColumns } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-grid',\n templateUrl: './test-sheet-grid.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule, AXPSpreadsheetComponent],\n})\nexport class AXMTestSheetGridComponent {\n //#region ----- Inputs -----\n\n definition = input.required<AXMTestSheetDefinition>();\n\n /** Fixed-mode rows. */\n rowsInput = input<Record<string, unknown>[]>([]);\n\n /** Repeated-mode rows. */\n rowsModel = model<Record<string, unknown>[]>([]);\n\n readonly = input(false);\n\n //#endregion\n\n //#region ----- Outputs -----\n\n sheetChange = output<Record<string, unknown>[]>();\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly rowInputs = computed(() => this.definition().layout === 'row-inputs');\n\n protected readonly sheetDir = computed(() => {\n const direction = this.definition().direction;\n if (direction) {\n return direction;\n }\n return this.rowInputs() ? 'rtl' : null;\n });\n\n protected readonly columns = computed(() => toTestSheetSpreadsheetColumns(this.definition()));\n\n protected readonly rowWidgets = computed(() => toTestSheetRowWidgets(this.definition()));\n\n protected readonly spreadsheetRowMode = computed(() =>\n this.definition().rowMode === 'repeated' ? 'dynamic' : 'fixed',\n );\n\n protected readonly rowGroupPath = computed(() =>\n testSheetHasRowGroups(this.definition()) ? AXM_TEST_SHEET_ROW_GROUP_PATH : null,\n );\n\n protected readonly sheetTitle = computed(() => {\n if (this.rowInputs()) {\n return this.definition().rowHeaderTitle ?? '';\n }\n return this.rowGroupPath() ? '@assessment-management:widgets.test-sheet.group-header' : '';\n });\n\n protected readonly showRowHeader = computed(\n () => this.rowInputs() || this.definition().rowMode === 'repeated',\n );\n\n protected readonly rowTitlePath = computed(() => (this.rowInputs() ? 'title' : null));\n\n protected readonly allowRowChanges = computed(\n () => this.definition().rowMode === 'repeated' && !this.readonly(),\n );\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSheetChange(rows: Record<string, unknown>[]): void {\n this.sheetChange.emit(rows);\n }\n\n //#endregion\n}\n\n//#endregion\n","@if (columns().length === 0) {\n <!-- ----- Prompt when the question has no columns yet ----- -->\n <p class=\"text-sm text-neutral-500 py-2\">\n {{ '@assessment-management:widgets.test-sheet.empty-sheet' | translate | async }}\n </p>\n}\n<!-- ----- Spreadsheet bound to the authored columns and row mode ----- -->\n@else {\n <div [attr.dir]=\"sheetDir()\">\n <axp-spreadsheet\n [title]=\"sheetTitle()\"\n [columns]=\"columns()\"\n [rowWidgets]=\"rowWidgets()\"\n [rowMode]=\"spreadsheetRowMode()\"\n [rowsInput]=\"rowsInput()\"\n [(rowsModel)]=\"rowsModel\"\n [readonly]=\"readonly()\"\n [showRowHeader]=\"showRowHeader()\"\n [rowTitlePath]=\"rowTitlePath()\"\n [rowGroupPath]=\"rowGroupPath()\"\n [allowAddRows]=\"allowRowChanges()\"\n [allowRemoveRows]=\"allowRowChanges()\"\n [showCellActions]=\"false\"\n emptyCellPlaceholder=\"–\"\n (spreadsheetChange)=\"onSheetChange($event)\"\n />\n </div>\n}\n"],"names":["i1"],"mappings":";;;;;;;;;AAAA;AAUA;AAEA;MAQa,yBAAyB,CAAA;AANtC,IAAA,WAAA,GAAA;;QASE,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ;uFAA0B;;QAGrD,IAAA,CAAA,SAAS,GAAG,KAAK,CAA4B,EAAE;sFAAC;;QAGhD,IAAA,CAAA,SAAS,GAAG,KAAK,CAA4B,EAAE;sFAAC;QAEhD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK;qFAAC;;;QAMvB,IAAA,CAAA,WAAW,GAAG,MAAM,EAA6B;;;AAM9B,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,KAAK,YAAY;sFAAC;AAErE,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,SAAS;YAC7C,IAAI,SAAS,EAAE;AACb,gBAAA,OAAO,SAAS;YAClB;AACA,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,KAAK,GAAG,IAAI;QACxC,CAAC;qFAAC;AAEiB,QAAA,IAAA,CAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,6BAA6B,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oFAAC;AAE1E,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;uFAAC;QAErE,IAAA,CAAA,kBAAkB,GAAG,QAAQ,CAAC,MAC/C,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO;+FAC/D;QAEkB,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,6BAA6B,GAAG,IAAI;yFAChF;AAEkB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;gBACpB,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,cAAc,IAAI,EAAE;YAC/C;AACA,YAAA,OAAO,IAAI,CAAC,YAAY,EAAE,GAAG,wDAAwD,GAAG,EAAE;QAC5F,CAAC;uFAAC;AAEiB,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,KAAK,UAAU;0FACnE;AAEkB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC;yFAAC;AAElE,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAC3C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;4FACnE;AAWF,IAAA;;;AALW,IAAA,aAAa,CAAC,IAA+B,EAAA;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;8GApEW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,irBCpBtC,u+BA4BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDVuB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,uBAAuB,icAAvD,SAAS,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAER,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;+BACE,qBAAqB,EAAA,eAAA,EAEd,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,SAAS,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,EAAA,QAAA,EAAA,u+BAAA,EAAA;;;"}
@@ -7,8 +7,8 @@ import * as i0 from '@angular/core';
7
7
  import { computed, effect, ChangeDetectionStrategy, Component } from '@angular/core';
8
8
  import { isEqual } from 'lodash-es';
9
9
  import { objectKeyValueTransforms } from '@acorex-platform/framework-client/core';
10
- import { z as AXM_TEST_SHEET_CELL_TYPE_WIDGET } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
11
- import { g as testSheetChoiceId, h as assignTestSheetItemNames, i as ensureTestSheetColumnWidgets } from './acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs';
10
+ import { z as AXM_TEST_SHEET_CELL_TYPE_WIDGET } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
11
+ import { g as testSheetChoiceId, h as assignTestSheetItemNames, i as ensureTestSheetColumnWidgets } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
12
12
 
13
13
  //#region ----- Constants -----
14
14
  const ID_VALUE = objectKeyValueTransforms('id');
@@ -233,4 +233,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
233
233
  }], ctorParameters: () => [] });
234
234
 
235
235
  export { AXMTestSheetSchemaWidgetEditComponent };
236
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs.map
236
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-Bcvp2Dx5.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema.layout.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema-widget-edit.component.html"],"sourcesContent":["import { objectKeyValueTransforms } from '@acorex-platform/framework-client/core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\nimport { AXM_TEST_SHEET_CELL_TYPE_WIDGET } from './test-sheet.types';\n\n//#region ----- Constants -----\n\nconst ID_VALUE = objectKeyValueTransforms('id');\n\nconst ROW_MODE_ITEMS = [\n { id: 'fixed', title: '@assessment-management:widgets.test-sheet.row-mode.fixed' },\n { id: 'repeated', title: '@assessment-management:widgets.test-sheet.row-mode.repeated' },\n];\n\nconst COLUMN_ROLE_ITEMS = [\n { id: 'static', title: '@assessment-management:widgets.test-sheet.columns.static' },\n { id: 'input', title: '@assessment-management:widgets.test-sheet.columns.input' },\n];\n\nconst COLUMN_DEFAULT_ITEM = {\n name: '',\n title: '',\n groupTitle: '',\n role: 'input',\n widget: { type: 'text-editor', options: {} },\n};\n\nconst ROW_DEFAULT_ITEM = {\n name: '',\n groupTitle: '',\n cells: {},\n};\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMTestSheetSchemaStaticColumn {\n name: string;\n title: string;\n}\n\n//#endregion\n\n//#region ----- Layout -----\n\nexport function buildTestSheetRowModeNode(disabled: boolean): AXPWidgetNode {\n return labeledField('@assessment-management:widgets.test-sheet.row-mode.title', {\n type: 'select-editor',\n name: 'rowMode',\n path: 'rowMode',\n valueTransforms: ID_VALUE,\n options: {\n disabled,\n valueField: 'id',\n textField: 'title',\n dataSource: ROW_MODE_ITEMS,\n },\n }, 'fill');\n}\n\nexport function buildTestSheetColumnsNode(disabled: boolean): AXPWidgetNode {\n return repeaterNode('columns', disabled, COLUMN_DEFAULT_ITEM, [\n cardLayout([\n fieldRow([\n labeledField('@assessment-management:widgets.test-sheet.columns.name', textField('title', disabled), 'half'),\n labeledField(\n '@assessment-management:widgets.test-sheet.columns.group-title',\n textField('groupTitle', disabled),\n 'half',\n ),\n ]),\n labeledField(\n '@assessment-management:widgets.test-sheet.columns.role',\n selectField('role', COLUMN_ROLE_ITEMS, disabled),\n 'fill',\n ),\n {\n type: AXM_TEST_SHEET_CELL_TYPE_WIDGET,\n name: 'widget',\n path: 'widget',\n options: { readonly: disabled },\n },\n ]),\n ]);\n}\n\nexport function buildTestSheetRowsNode(\n disabled: boolean,\n staticColumns: AXMTestSheetSchemaStaticColumn[],\n): AXPWidgetNode {\n return repeaterNode('rows', disabled, ROW_DEFAULT_ITEM, [\n cardLayout([\n labeledField(\n '@assessment-management:widgets.test-sheet.rows.group-title',\n textField('groupTitle', disabled),\n 'fill',\n ),\n ...staticColumns.map((column) =>\n labeledField(column.title, textField(`cells.${column.name}`, disabled), 'fill'),\n ),\n ]),\n ]);\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction repeaterNode(\n path: 'columns' | 'rows',\n disabled: boolean,\n defaultItem: Record<string, unknown>,\n children: AXPWidgetNode[],\n): AXPWidgetNode {\n return {\n type: 'repeater-layout',\n name: path,\n path,\n options: {\n hasControls: true,\n allowReorder: !disabled,\n disabled,\n defaultItem,\n },\n children,\n };\n}\n\n/** Rounded card. This is the repeater row root. */\nfunction cardLayout(children: AXPWidgetNode[]): AXPWidgetNode {\n return {\n type: 'flex-layout',\n options: {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n gap: '12px',\n width: '100%',\n spacing: { padding: '12px', margin: '0' },\n border: {\n width: '1px',\n style: 'solid',\n radius: '0.5rem',\n color: 'rgb(var(--ax-sys-color-border-lighter-surface))',\n },\n },\n children,\n };\n}\n\nfunction fieldRow(children: AXPWidgetNode[]): AXPWidgetNode {\n return {\n type: 'flex-layout',\n options: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n gap: '12px',\n width: '100%',\n },\n children,\n };\n}\n\nfunction labeledField(\n label: string,\n editor: AXPWidgetNode,\n size: 'half' | 'fill',\n): AXPWidgetNode {\n const box =\n size === 'half'\n ? { width: 'calc(50% - 6px)', minWidth: '12rem' }\n : { width: '100%', minWidth: '0' };\n return {\n type: 'form-field',\n options: {\n label,\n showLabel: true,\n ...box,\n },\n children: [editor],\n };\n}\n\nfunction textField(path: string, disabled: boolean): AXPWidgetNode {\n return {\n type: 'text-editor',\n name: path,\n path,\n options: { disabled },\n };\n}\n\nfunction selectField(\n path: string,\n dataSource: { id: string; title: string }[],\n disabled: boolean,\n): AXPWidgetNode {\n return {\n type: 'select-editor',\n name: path,\n path,\n valueTransforms: ID_VALUE,\n options: {\n disabled,\n valueField: 'id',\n textField: 'title',\n dataSource,\n },\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport {\n buildTestSheetColumnsNode,\n buildTestSheetRowModeNode,\n buildTestSheetRowsNode,\n type AXMTestSheetSchemaStaticColumn,\n} from './test-sheet-schema.layout';\nimport type { AXMTestSheetDefinition } from './test-sheet.types';\nimport { assignTestSheetItemNames, ensureTestSheetColumnWidgets, testSheetChoiceId } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-schema-widget-edit',\n templateUrl: './test-sheet-schema-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule, AXPWidgetCoreModule],\n})\nexport class AXMTestSheetSchemaWidgetEditComponent extends AXPValueWidgetComponent<AXMTestSheetDefinition | null> {\n //#region ----- Computed Properties -----\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n protected readonly rowModeNode = computed(() => buildTestSheetRowModeNode(this.isReadonly()));\n\n protected readonly columnsNode = computed(() => buildTestSheetColumnsNode(this.isReadonly()));\n\n protected readonly showFixedRows = computed(\n () => testSheetChoiceId(this.getValue()?.rowMode) !== 'repeated',\n );\n\n protected readonly staticColumns = computed(\n () => {\n const columns = this.getValue()?.columns;\n if (!Array.isArray(columns)) {\n return [] as AXMTestSheetSchemaStaticColumn[];\n }\n return columns\n .filter(\n (column) =>\n typeof column?.name === 'string' &&\n column.name.trim().length > 0 &&\n testSheetChoiceId(column.role) === 'static',\n )\n .map((column) => ({\n name: column.name.trim(),\n title: typeof column.title === 'string' && column.title.trim() ? column.title.trim() : column.name.trim(),\n }));\n },\n { equal: isEqual },\n );\n\n protected readonly rowsNode = computed(() => buildTestSheetRowsNode(this.isReadonly(), this.staticColumns()));\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n this.contextService.changeEvent();\n this.assignMissingNames();\n });\n }\n\n //#endregion\n\n //#region ----- Schema Updates -----\n\n /**\n * Repeater rows start without a column or row key.\n * Names are assigned once so static cells and answers keep a stable path.\n * Input columns that only have a legacy widget type get a widget node for the configurator.\n */\n private assignMissingNames(): void {\n const value = this.getValue();\n if (!value || typeof value !== 'object') {\n return;\n }\n const namedColumns = Array.isArray(value.columns) ? assignTestSheetItemNames(value.columns, 'col') : null;\n const columns = namedColumns ? ensureTestSheetColumnWidgets(namedColumns.items) : null;\n const rows = Array.isArray(value.rows) ? assignTestSheetItemNames(value.rows, 'row') : null;\n const columnsChanged = !!namedColumns?.changed || !!columns?.changed;\n if (!columnsChanged && !rows?.changed) {\n return;\n }\n this.setValue({\n ...value,\n ...(columnsChanged && columns ? { columns: columns.items } : {}),\n ...(rows?.changed ? { rows: rows.items } : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex flex-col gap-4\">\n <!-- ----- Row mode: fixed template or respondent-added rows ----- -->\n <ng-container axp-widget-renderer [node]=\"rowModeNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n\n <!-- ----- Columns: each repeater row is a bordered flex card ----- -->\n <section class=\"flex flex-col gap-2\">\n <h3 class=\"text-sm font-medium\">\n {{ '@assessment-management:widgets.test-sheet.columns.title' | translate | async }}\n </h3>\n <ng-container axp-widget-renderer [node]=\"columnsNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n </section>\n\n <!-- ----- Fixed rows and the merged title that can span them ----- -->\n @if (showFixedRows()) {\n <section class=\"flex flex-col gap-2\">\n <h3 class=\"text-sm font-medium\">\n {{ '@assessment-management:widgets.test-sheet.rows.title' | translate | async }}\n </h3>\n <ng-container axp-widget-renderer [node]=\"rowsNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n </section>\n }\n</div>\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema.layout.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-schema-widget-edit.component.html"],"sourcesContent":["import { objectKeyValueTransforms } from '@acorex-platform/framework-client/core';\nimport type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\n\nimport { AXM_TEST_SHEET_CELL_TYPE_WIDGET } from './test-sheet.types';\n\n//#region ----- Constants -----\n\nconst ID_VALUE = objectKeyValueTransforms('id');\n\nconst ROW_MODE_ITEMS = [\n { id: 'fixed', title: '@assessment-management:widgets.test-sheet.row-mode.fixed' },\n { id: 'repeated', title: '@assessment-management:widgets.test-sheet.row-mode.repeated' },\n];\n\nconst COLUMN_ROLE_ITEMS = [\n { id: 'static', title: '@assessment-management:widgets.test-sheet.columns.static' },\n { id: 'input', title: '@assessment-management:widgets.test-sheet.columns.input' },\n];\n\nconst COLUMN_DEFAULT_ITEM = {\n name: '',\n title: '',\n groupTitle: '',\n role: 'input',\n widget: { type: 'text-editor', options: {} },\n};\n\nconst ROW_DEFAULT_ITEM = {\n name: '',\n groupTitle: '',\n cells: {},\n};\n\n//#endregion\n\n//#region ----- Types -----\n\nexport interface AXMTestSheetSchemaStaticColumn {\n name: string;\n title: string;\n}\n\n//#endregion\n\n//#region ----- Layout -----\n\nexport function buildTestSheetRowModeNode(disabled: boolean): AXPWidgetNode {\n return labeledField('@assessment-management:widgets.test-sheet.row-mode.title', {\n type: 'select-editor',\n name: 'rowMode',\n path: 'rowMode',\n valueTransforms: ID_VALUE,\n options: {\n disabled,\n valueField: 'id',\n textField: 'title',\n dataSource: ROW_MODE_ITEMS,\n },\n }, 'fill');\n}\n\nexport function buildTestSheetColumnsNode(disabled: boolean): AXPWidgetNode {\n return repeaterNode('columns', disabled, COLUMN_DEFAULT_ITEM, [\n cardLayout([\n fieldRow([\n labeledField('@assessment-management:widgets.test-sheet.columns.name', textField('title', disabled), 'half'),\n labeledField(\n '@assessment-management:widgets.test-sheet.columns.group-title',\n textField('groupTitle', disabled),\n 'half',\n ),\n ]),\n labeledField(\n '@assessment-management:widgets.test-sheet.columns.role',\n selectField('role', COLUMN_ROLE_ITEMS, disabled),\n 'fill',\n ),\n {\n type: AXM_TEST_SHEET_CELL_TYPE_WIDGET,\n name: 'widget',\n path: 'widget',\n options: { readonly: disabled },\n },\n ]),\n ]);\n}\n\nexport function buildTestSheetRowsNode(\n disabled: boolean,\n staticColumns: AXMTestSheetSchemaStaticColumn[],\n): AXPWidgetNode {\n return repeaterNode('rows', disabled, ROW_DEFAULT_ITEM, [\n cardLayout([\n labeledField(\n '@assessment-management:widgets.test-sheet.rows.group-title',\n textField('groupTitle', disabled),\n 'fill',\n ),\n ...staticColumns.map((column) =>\n labeledField(column.title, textField(`cells.${column.name}`, disabled), 'fill'),\n ),\n ]),\n ]);\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction repeaterNode(\n path: 'columns' | 'rows',\n disabled: boolean,\n defaultItem: Record<string, unknown>,\n children: AXPWidgetNode[],\n): AXPWidgetNode {\n return {\n type: 'repeater-layout',\n name: path,\n path,\n options: {\n hasControls: true,\n allowReorder: !disabled,\n disabled,\n defaultItem,\n },\n children,\n };\n}\n\n/** Rounded card. This is the repeater row root. */\nfunction cardLayout(children: AXPWidgetNode[]): AXPWidgetNode {\n return {\n type: 'flex-layout',\n options: {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n gap: '12px',\n width: '100%',\n spacing: { padding: '12px', margin: '0' },\n border: {\n width: '1px',\n style: 'solid',\n radius: '0.5rem',\n color: 'rgb(var(--ax-sys-color-border-lighter-surface))',\n },\n },\n children,\n };\n}\n\nfunction fieldRow(children: AXPWidgetNode[]): AXPWidgetNode {\n return {\n type: 'flex-layout',\n options: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n gap: '12px',\n width: '100%',\n },\n children,\n };\n}\n\nfunction labeledField(\n label: string,\n editor: AXPWidgetNode,\n size: 'half' | 'fill',\n): AXPWidgetNode {\n const box =\n size === 'half'\n ? { width: 'calc(50% - 6px)', minWidth: '12rem' }\n : { width: '100%', minWidth: '0' };\n return {\n type: 'form-field',\n options: {\n label,\n showLabel: true,\n ...box,\n },\n children: [editor],\n };\n}\n\nfunction textField(path: string, disabled: boolean): AXPWidgetNode {\n return {\n type: 'text-editor',\n name: path,\n path,\n options: { disabled },\n };\n}\n\nfunction selectField(\n path: string,\n dataSource: { id: string; title: string }[],\n disabled: boolean,\n): AXPWidgetNode {\n return {\n type: 'select-editor',\n name: path,\n path,\n valueTransforms: ID_VALUE,\n options: {\n disabled,\n valueField: 'id',\n textField: 'title',\n dataSource,\n },\n };\n}\n\n//#endregion\n","//#region ----- Imports -----\n\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport {\n buildTestSheetColumnsNode,\n buildTestSheetRowModeNode,\n buildTestSheetRowsNode,\n type AXMTestSheetSchemaStaticColumn,\n} from './test-sheet-schema.layout';\nimport type { AXMTestSheetDefinition } from './test-sheet.types';\nimport { assignTestSheetItemNames, ensureTestSheetColumnWidgets, testSheetChoiceId } from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-schema-widget-edit',\n templateUrl: './test-sheet-schema-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, AXTranslationModule, AXPWidgetCoreModule],\n})\nexport class AXMTestSheetSchemaWidgetEditComponent extends AXPValueWidgetComponent<AXMTestSheetDefinition | null> {\n //#region ----- Computed Properties -----\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n protected readonly rowModeNode = computed(() => buildTestSheetRowModeNode(this.isReadonly()));\n\n protected readonly columnsNode = computed(() => buildTestSheetColumnsNode(this.isReadonly()));\n\n protected readonly showFixedRows = computed(\n () => testSheetChoiceId(this.getValue()?.rowMode) !== 'repeated',\n );\n\n protected readonly staticColumns = computed(\n () => {\n const columns = this.getValue()?.columns;\n if (!Array.isArray(columns)) {\n return [] as AXMTestSheetSchemaStaticColumn[];\n }\n return columns\n .filter(\n (column) =>\n typeof column?.name === 'string' &&\n column.name.trim().length > 0 &&\n testSheetChoiceId(column.role) === 'static',\n )\n .map((column) => ({\n name: column.name.trim(),\n title: typeof column.title === 'string' && column.title.trim() ? column.title.trim() : column.name.trim(),\n }));\n },\n { equal: isEqual },\n );\n\n protected readonly rowsNode = computed(() => buildTestSheetRowsNode(this.isReadonly(), this.staticColumns()));\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n this.contextService.changeEvent();\n this.assignMissingNames();\n });\n }\n\n //#endregion\n\n //#region ----- Schema Updates -----\n\n /**\n * Repeater rows start without a column or row key.\n * Names are assigned once so static cells and answers keep a stable path.\n * Input columns that only have a legacy widget type get a widget node for the configurator.\n */\n private assignMissingNames(): void {\n const value = this.getValue();\n if (!value || typeof value !== 'object') {\n return;\n }\n const namedColumns = Array.isArray(value.columns) ? assignTestSheetItemNames(value.columns, 'col') : null;\n const columns = namedColumns ? ensureTestSheetColumnWidgets(namedColumns.items) : null;\n const rows = Array.isArray(value.rows) ? assignTestSheetItemNames(value.rows, 'row') : null;\n const columnsChanged = !!namedColumns?.changed || !!columns?.changed;\n if (!columnsChanged && !rows?.changed) {\n return;\n }\n this.setValue({\n ...value,\n ...(columnsChanged && columns ? { columns: columns.items } : {}),\n ...(rows?.changed ? { rows: rows.items } : {}),\n });\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"flex flex-col gap-4\">\n <!-- ----- Row mode: fixed template or respondent-added rows ----- -->\n <ng-container axp-widget-renderer [node]=\"rowModeNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n\n <!-- ----- Columns: each repeater row is a bordered flex card ----- -->\n <section class=\"flex flex-col gap-2\">\n <h3 class=\"text-sm font-medium\">\n {{ '@assessment-management:widgets.test-sheet.columns.title' | translate | async }}\n </h3>\n <ng-container axp-widget-renderer [node]=\"columnsNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n </section>\n\n <!-- ----- Fixed rows and the merged title that can span them ----- -->\n @if (showFixedRows()) {\n <section class=\"flex flex-col gap-2\">\n <h3 class=\"text-sm font-medium\">\n {{ '@assessment-management:widgets.test-sheet.rows.title' | translate | async }}\n </h3>\n <ng-container axp-widget-renderer [node]=\"rowsNode()\" [parentNode]=\"this\" [mode]=\"'edit'\"></ng-container>\n </section>\n }\n</div>\n"],"names":["i2"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layou
2
2
  import * as i0 from '@angular/core';
3
3
  import { model, signal, computed, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
4
4
  import { isEqual } from 'lodash-es';
5
- import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs';
6
- import { n as normalizeTestSheetDefinition, a as buildRepeatedTestSheetRows, b as buildFixedTestSheetRows, e as applyTestSheetComputations, f as toStoredTestSheetAnswer } from './acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs';
5
+ import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs';
6
+ import { n as normalizeTestSheetDefinition, a as buildRepeatedTestSheetRows, b as buildFixedTestSheetRows, e as applyTestSheetComputations, f as toStoredTestSheetAnswer } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
7
7
 
8
8
  //#region ----- Imports -----
9
9
  //#endregion
@@ -78,4 +78,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
78
78
  }], ctorParameters: () => [], propDecorators: { repeatedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "repeatedRows", required: false }] }, { type: i0.Output, args: ["repeatedRowsChange"] }] } });
79
79
 
80
80
  export { AXMTestSheetWidgetEditComponent };
81
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs.map
81
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-CrvzEcSh.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, model, signal, untracked } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport type { AXMTestSheetDefinition } from './test-sheet.types';\nimport {\n applyTestSheetComputations,\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n toStoredTestSheetAnswer,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-edit',\n templateUrl: './test-sheet-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetEditComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- State Signals -----\n\n protected readonly repeatedRows = model<Record<string, unknown>[]>([]);\n\n /** Fixed-mode rows. Stops tracking the saved answer after the first edit so the grid is not rebuilt. */\n protected readonly fixedRows = signal<Record<string, unknown>[]>([]);\n\n private answerTouched = false;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed<AXMTestSheetDefinition>(() =>\n normalizeTestSheetDefinition(this.options()['sheet']),\n );\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const definition = this.definition();\n const value = this.getValue();\n if (this.answerTouched) {\n return;\n }\n untracked(() => {\n if (definition.rowMode === 'repeated') {\n const next = buildRepeatedTestSheetRows(value);\n if (!isEqual(next, this.repeatedRows())) {\n this.repeatedRows.set(next);\n }\n return;\n }\n const next = buildFixedTestSheetRows(definition, value);\n if (!isEqual(next, this.fixedRows())) {\n this.fixedRows.set(next);\n }\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSheetChange(rows: Record<string, unknown>[]): void {\n if (this.isReadonly()) {\n return;\n }\n this.answerTouched = true;\n const next = applyTestSheetComputations(rows, this.definition());\n if (next !== rows) {\n if (this.definition().rowMode === 'repeated') {\n this.repeatedRows.set(next);\n } else {\n this.fixedRows.set(next);\n }\n }\n const stored = toStoredTestSheetAnswer(next, this.definition());\n const current = this.getValue() ?? null;\n if (!isEqual(stored, current)) {\n this.setValue(stored);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [(rowsModel)]=\"repeatedRows\"\n [readonly]=\"isReadonly()\"\n (sheetChange)=\"onSheetChange($event)\"\n/>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, model, signal, untracked } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport type { AXMTestSheetDefinition } from './test-sheet.types';\nimport {\n applyTestSheetComputations,\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n toStoredTestSheetAnswer,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-edit',\n templateUrl: './test-sheet-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetEditComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- State Signals -----\n\n protected readonly repeatedRows = model<Record<string, unknown>[]>([]);\n\n /** Fixed-mode rows. Stops tracking the saved answer after the first edit so the grid is not rebuilt. */\n protected readonly fixedRows = signal<Record<string, unknown>[]>([]);\n\n private answerTouched = false;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed<AXMTestSheetDefinition>(() =>\n normalizeTestSheetDefinition(this.options()['sheet']),\n );\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const definition = this.definition();\n const value = this.getValue();\n if (this.answerTouched) {\n return;\n }\n untracked(() => {\n if (definition.rowMode === 'repeated') {\n const next = buildRepeatedTestSheetRows(value);\n if (!isEqual(next, this.repeatedRows())) {\n this.repeatedRows.set(next);\n }\n return;\n }\n const next = buildFixedTestSheetRows(definition, value);\n if (!isEqual(next, this.fixedRows())) {\n this.fixedRows.set(next);\n }\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSheetChange(rows: Record<string, unknown>[]): void {\n if (this.isReadonly()) {\n return;\n }\n this.answerTouched = true;\n const next = applyTestSheetComputations(rows, this.definition());\n if (next !== rows) {\n if (this.definition().rowMode === 'repeated') {\n this.repeatedRows.set(next);\n } else {\n this.fixedRows.set(next);\n }\n }\n const stored = toStoredTestSheetAnswer(next, this.definition());\n const current = this.getValue() ?? null;\n if (!isEqual(stored, current)) {\n this.setValue(stored);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [(rowsModel)]=\"repeatedRows\"\n [readonly]=\"isReadonly()\"\n (sheetChange)=\"onSheetChange($event)\"\n/>\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
2
2
  import * as i0 from '@angular/core';
3
3
  import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
4
- import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-DENxbikr.mjs';
5
- import { n as normalizeTestSheetDefinition, b as buildFixedTestSheetRows, a as buildRepeatedTestSheetRows } from './acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs';
4
+ import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs';
5
+ import { n as normalizeTestSheetDefinition, b as buildFixedTestSheetRows, a as buildRepeatedTestSheetRows } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
6
6
 
7
7
  //#region ----- Imports -----
8
8
  //#endregion
@@ -27,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
27
27
  }] });
28
28
 
29
29
  export { AXMTestSheetWidgetViewComponent };
30
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs.map
30
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-sSky9nAq.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport {\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-view',\n templateUrl: './test-sheet-widget-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetViewComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed(() => normalizeTestSheetDefinition(this.options()['sheet']));\n\n protected readonly fixedRows = computed(() => buildFixedTestSheetRows(this.definition(), this.getValue()));\n\n protected readonly repeatedRows = computed(() => buildRepeatedTestSheetRows(this.getValue()));\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [rowsModel]=\"repeatedRows()\"\n [readonly]=\"true\"\n/>\n"],"names":[],"mappings":";;;;;;AAAA;AAYA;AAEA;AAQM,MAAO,+BAAgC,SAAQ,uBAAyD,CAAA;AAN9G,IAAA,WAAA,GAAA;;;AASqB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;uFAAC;AAElF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;sFAAC;AAEvF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;yFAAC;AAG9F,IAAA;8GAVY,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5C,qJAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcY,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,mBAErB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,qJAAA,EAAA;;;"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport {\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-view',\n templateUrl: './test-sheet-widget-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetViewComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed(() => normalizeTestSheetDefinition(this.options()['sheet']));\n\n protected readonly fixedRows = computed(() => buildFixedTestSheetRows(this.definition(), this.getValue()));\n\n protected readonly repeatedRows = computed(() => buildRepeatedTestSheetRows(this.getValue()));\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [rowsModel]=\"repeatedRows()\"\n [readonly]=\"true\"\n/>\n"],"names":[],"mappings":";;;;;;AAAA;AAYA;AAEA;AAQM,MAAO,+BAAgC,SAAQ,uBAAyD,CAAA;AAN9G,IAAA,WAAA,GAAA;;;AASqB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;uFAAC;AAElF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;sFAAC;AAEvF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;yFAAC;AAG9F,IAAA;8GAVY,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5C,qJAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcY,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,mBAErB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,qJAAA,EAAA;;;"}
@@ -1,4 +1,4 @@
1
- import { x as AXM_TEST_SHEET_ROW_GROUP_PATH, y as AXM_TEST_SHEET_INPUT_WIDGET_TYPES } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-DxRFMK3k.mjs';
1
+ import { x as AXM_TEST_SHEET_ROW_GROUP_PATH, y as AXM_TEST_SHEET_INPUT_WIDGET_TYPES } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
2
2
 
3
3
  //#region ----- Normalize -----
4
4
  function emptyTestSheetDefinition() {
@@ -420,4 +420,4 @@ function isRecord(value) {
420
420
  //#endregion
421
421
 
422
422
  export { buildRepeatedTestSheetRows as a, buildFixedTestSheetRows as b, toTestSheetRowWidgets as c, testSheetHasRowGroups as d, applyTestSheetComputations as e, toStoredTestSheetAnswer as f, testSheetChoiceId as g, assignTestSheetItemNames as h, ensureTestSheetColumnWidgets as i, normalizeTestSheetDefinition as n, toTestSheetSpreadsheetColumns as t };
423
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs.map
423
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet.util-T-kPrzoj.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet.util.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type { AXPSpreadsheetColumn, AXPSpreadsheetRowWidget } from '@acorex-platform/framework-client/layout/components';\n\nimport {\n AXM_TEST_SHEET_INPUT_WIDGET_TYPES,\n AXM_TEST_SHEET_ROW_GROUP_PATH,\n type AXMTestSheetColumn,\n type AXMTestSheetDefinition,\n type AXMTestSheetInputWidgetType,\n type AXMTestSheetLayout,\n type AXMTestSheetPercentDiff,\n type AXMTestSheetRow,\n type AXMTestSheetRowMode,\n} from './test-sheet.types';\n\n//#region ----- Normalize -----\n\nexport function emptyTestSheetDefinition(): AXMTestSheetDefinition {\n return {\n rowMode: 'fixed',\n layout: 'column-inputs',\n columns: [],\n rows: [],\n };\n}\n\nexport function normalizeTestSheetDefinition(value: unknown): AXMTestSheetDefinition {\n const source = isRecord(value) ? value : {};\n const rowMode: AXMTestSheetRowMode = source['rowMode'] === 'repeated' ? 'repeated' : 'fixed';\n const layout: AXMTestSheetLayout = source['layout'] === 'row-inputs' ? 'row-inputs' : 'column-inputs';\n const rowHeaderTitle = asText(source['rowHeaderTitle']) || undefined;\n const direction = source['direction'] === 'rtl' || source['direction'] === 'ltr' ? source['direction'] : undefined;\n const columns = Array.isArray(source['columns'])\n ? source['columns'].map((column) => normalizeColumn(column)).filter((column): column is AXMTestSheetColumn => !!column)\n : [];\n const rows = Array.isArray(source['rows'])\n ? source['rows'].map((row) => normalizeRow(row)).filter((row): row is AXMTestSheetRow => !!row)\n : [];\n return { rowMode, layout, rowHeaderTitle, direction, columns, rows };\n}\n\nfunction normalizeColumn(value: unknown): AXMTestSheetColumn | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const role = value['role'] === 'static' ? 'static' : 'input';\n const widgetType = asWidgetType(value['widgetType']);\n const baseWidget = asWidgetNode(value['widget']) ?? (role === 'input' ? legacyInputWidget(value) : undefined);\n return {\n name,\n title: asText(value['title']),\n description: asText(value['description']) || undefined,\n groupTitle: asText(value['groupTitle']) || undefined,\n role,\n widget: moveColumnOptionsOntoWidget(baseWidget, value),\n widgetType: role === 'input' ? widgetType : undefined,\n choices: asText(value['choices']) || undefined,\n percentDiff: normalizePercentDiff(value['percentDiff']),\n };\n}\n\nfunction normalizeRow(value: unknown): AXMTestSheetRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const cellsSource = isRecord(value['cells']) ? value['cells'] : {};\n const cells: Record<string, string> = {};\n for (const [key, cell] of Object.entries(cellsSource)) {\n cells[key] = asText(cell);\n }\n const role = value['role'] === 'static' ? 'static' : value['role'] === 'input' ? 'input' : undefined;\n return {\n name,\n groupTitle: asText(value['groupTitle']) || undefined,\n title: asText(value['title']) || undefined,\n role,\n widget: role === 'static' ? undefined : asWidgetNode(value['widget']),\n cells,\n };\n}\n\n//#endregion\n\n//#region ----- Spreadsheet mapping -----\n\nexport function testSheetHasRowGroups(definition: AXMTestSheetDefinition): boolean {\n return (\n definition.rowMode === 'fixed' &&\n definition.rows.some((row) => (row.groupTitle ?? '').trim().length > 0)\n );\n}\n\nexport function toTestSheetSpreadsheetColumns(definition: AXMTestSheetDefinition): AXPSpreadsheetColumn[] {\n return definition.columns.map((column) => ({\n name: column.name,\n title: column.title || column.name,\n description: column.description,\n path: column.name,\n groupTitle: column.groupTitle,\n readonly: column.role === 'static' || !!column.percentDiff,\n widget: column.percentDiff\n ? { type: 'number-editor', options: { decimals: 2 } }\n : column.role === 'static'\n ? staticCellWidget(column)\n : inputCellWidget(column),\n }));\n}\n\n/**\n * Writes percent-difference columns from the two source cells on each row.\n * Returns the same array when nothing changed.\n */\nexport function applyTestSheetComputations(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] {\n const computed = definition.columns.filter((column) => column.percentDiff);\n if (computed.length === 0) {\n return rows;\n }\n let changed = false;\n const next = rows.map((row) => {\n const copy: Record<string, unknown> = { ...row };\n let rowChanged = false;\n for (const column of computed) {\n const formula = column.percentDiff;\n if (!formula) {\n continue;\n }\n const value = percentDifference(copy[formula.base], copy[formula.other]);\n if (value == null) {\n if (Object.prototype.hasOwnProperty.call(copy, column.name)) {\n delete copy[column.name];\n rowChanged = true;\n }\n continue;\n }\n if (copy[column.name] !== value) {\n copy[column.name] = value;\n rowChanged = true;\n }\n }\n if (rowChanged) {\n changed = true;\n return copy;\n }\n return row;\n });\n return changed ? next : rows;\n}\n\n/** Row widgets for `row-inputs`. Static rows stay as authored text. */\nexport function toTestSheetRowWidgets(definition: AXMTestSheetDefinition): AXPSpreadsheetRowWidget[] | null {\n if (definition.layout !== 'row-inputs') {\n return null;\n }\n return definition.rows.map((row) => ({\n name: row.name,\n readonly: row.role === 'static',\n widget: row.role === 'static' ? undefined : row.widget,\n }));\n}\n\nexport function buildFixedTestSheetRows(\n definition: AXMTestSheetDefinition,\n answer: unknown,\n): Record<string, unknown>[] {\n const saved = asRowList(answer);\n const inputNames = inputColumnNames(definition);\n return definition.rows.map((row) => {\n const next: Record<string, unknown> = {\n name: row.name,\n [AXM_TEST_SHEET_ROW_GROUP_PATH]: row.groupTitle ?? '',\n };\n if (row.title) {\n next['title'] = row.title;\n }\n if (row.role === 'static') {\n for (const column of definition.columns) {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n return next;\n }\n for (const column of definition.columns) {\n if (column.role === 'static') {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n }\n const match = saved.find((item) => item['name'] === row.name);\n if (match) {\n for (const name of inputNames) {\n if (Object.prototype.hasOwnProperty.call(match, name)) {\n next[name] = match[name];\n }\n }\n }\n return next;\n });\n}\n\nexport function buildRepeatedTestSheetRows(answer: unknown): Record<string, unknown>[] {\n return asRowList(answer).map((row) => ({ ...row }));\n}\n\n/**\n * Persists the grid only after an input cell has a value.\n * Static text alone does not count as an answer.\n */\nexport function toStoredTestSheetAnswer(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] | null {\n const names = inputColumnNames(definition);\n const staticRowNames = new Set(\n definition.rows.filter((row) => row.role === 'static').map((row) => row.name),\n );\n const inputRows = rows.filter((row) => !staticRowNames.has(asText(row['name'])));\n const filled = inputRows.some((row) => names.some((name) => isFilledCell(row[name])));\n if (!filled) {\n return null;\n }\n return inputRows.map((row) => {\n const stored: Record<string, unknown> = { ...row };\n delete stored['title'];\n return stored;\n });\n}\n\nexport function nextTestSheetKey(prefix: string, used: string[]): string {\n const taken = new Set(used);\n let index = used.length + 1;\n let name = `${prefix}${index}`;\n while (taken.has(name)) {\n index += 1;\n name = `${prefix}${index}`;\n }\n return name;\n}\n\n/** Reads a select value stored as an id string or as `{ id }`. */\nexport function testSheetChoiceId(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (isRecord(value) && typeof value['id'] === 'string') {\n return value['id'];\n }\n return '';\n}\n\n/**\n * Fills blank or duplicate `name` keys on repeater rows.\n * Existing objects are kept when the name is already unique.\n */\nexport function assignTestSheetItemNames<T extends { name?: string }>(\n items: T[],\n prefix: string,\n): { items: T[]; changed: boolean } {\n const used = new Set<string>();\n let changed = false;\n const next = items.map((item) => {\n const current = item && typeof item === 'object' ? item : ({} as T);\n const name = typeof current.name === 'string' ? current.name.trim() : '';\n if (name && !used.has(name)) {\n used.add(name);\n return current;\n }\n changed = true;\n const assigned = nextTestSheetKey(prefix, [...used]);\n used.add(assigned);\n return { ...current, name: assigned };\n });\n return { items: next, changed };\n}\n\n/**\n * Older columns store `widgetType` and `choices`.\n * The configurator reads `widget`, so a missing node is built once from those fields.\n */\nexport function ensureTestSheetColumnWidgets<\n T extends {\n name?: string;\n role?: unknown;\n widget?: unknown;\n widgetType?: unknown;\n choices?: unknown;\n required?: unknown;\n defaultValue?: unknown;\n },\n>(items: T[]): { items: T[]; changed: boolean } {\n let changed = false;\n const next = items.map((item) => {\n if (!isRecord(item)) {\n return item;\n }\n const isStatic = testSheetChoiceId(item['role']) === 'static';\n const current = asWidgetNode(item['widget']);\n const base = current ?? (isStatic ? undefined : legacyInputWidget(item));\n const widget = moveColumnOptionsOntoWidget(base, item);\n const stripLegacy = item['required'] !== undefined || item['defaultValue'] !== undefined;\n if (widget === current && !stripLegacy) {\n return item;\n }\n changed = true;\n const nextItem: Record<string, unknown> = { ...item };\n if (widget) {\n nextItem['widget'] = widget;\n }\n delete nextItem['required'];\n delete nextItem['defaultValue'];\n return nextItem as T;\n });\n return { items: next, changed };\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction normalizePercentDiff(value: unknown): AXMTestSheetPercentDiff | undefined {\n if (!isRecord(value) || value['kind'] !== 'percent-diff') {\n return undefined;\n }\n const base = asText(value['base']);\n const other = asText(value['other']);\n if (!base || !other) {\n return undefined;\n }\n return { kind: 'percent-diff', base, other };\n}\n\n/** `|other - base| / |base| × 100`, rounded to two decimals. Empty when either side is missing or the base is 0. */\nfunction percentDifference(baseValue: unknown, otherValue: unknown): number | null {\n const base = asFiniteNumber(baseValue);\n const other = asFiniteNumber(otherValue);\n if (base == null || other == null || base === 0) {\n return null;\n }\n return Math.round((Math.abs(other - base) / Math.abs(base)) * 10000) / 100;\n}\n\nfunction asFiniteNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction inputColumnNames(definition: AXMTestSheetDefinition): string[] {\n return definition.columns.filter((column) => column.role === 'input').map((column) => column.name);\n}\n\nfunction staticCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return {\n type: 'text-editor',\n defaultValue: column.widget?.defaultValue ?? '',\n options: {},\n };\n}\n\nfunction inputCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return asWidgetNode(column.widget) ?? legacyInputWidget(column);\n}\n\nfunction legacyInputWidget(source: { widgetType?: unknown; choices?: unknown }): AXPWidgetNode {\n const type = asWidgetType(source.widgetType);\n if (type === 'select-editor') {\n const choices = typeof source.choices === 'string' ? source.choices : '';\n const dataSource = choices\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => ({ id: line, title: line }));\n return {\n type,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource,\n },\n };\n }\n return { type, options: {} };\n}\n\n/**\n * Older sheets stored required and default value on the column.\n * The widget configurator stores them on the node: `defaultValue` and `options.validations.required`.\n */\nfunction moveColumnOptionsOntoWidget(\n widget: AXPWidgetNode | undefined,\n source: { required?: unknown; defaultValue?: unknown },\n): AXPWidgetNode | undefined {\n const defaultValue = typeof source.defaultValue === 'string' ? source.defaultValue : '';\n const needsRequired = source.required === true && (!widget || !widgetHasRequired(widget));\n const needsDefault =\n defaultValue.length > 0 && (widget?.defaultValue === undefined || widget.defaultValue === '');\n if (!needsRequired && !needsDefault) {\n return widget;\n }\n const next: AXPWidgetNode = widget\n ? { ...widget, options: { ...(widget.options ?? {}) } }\n : { type: 'text-editor', options: {} };\n if (needsRequired) {\n const validations = isRecord(next.options?.['validations']) ? { ...next.options['validations'] } : {};\n validations['required'] = { rule: 'required' };\n next.options = { ...(next.options ?? {}), validations };\n }\n if (needsDefault) {\n next.defaultValue = defaultValue;\n }\n return next;\n}\n\nfunction widgetHasRequired(node: AXPWidgetNode): boolean {\n const validations = node.options?.['validations'];\n if (Array.isArray(validations)) {\n return validations.some((rule) => isRequiredRule(rule));\n }\n if (isRecord(validations)) {\n return isRequiredRule(validations['required']);\n }\n return false;\n}\n\nfunction isRequiredRule(value: unknown): boolean {\n return isRecord(value) && value['rule'] === 'required' && value['disabled'] !== true;\n}\n\nfunction asWidgetNode(value: unknown): AXPWidgetNode | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = asText(value['type']).trim();\n if (!type) {\n return undefined;\n }\n const node: AXPWidgetNode = {\n type,\n options: isRecord(value['options']) ? value['options'] : {},\n };\n if (value['defaultValue'] !== undefined) {\n node.defaultValue = value['defaultValue'];\n }\n if (value['triggers']) {\n node.triggers = value['triggers'] as AXPWidgetNode['triggers'];\n }\n if (value['valueTransforms']) {\n node.valueTransforms = value['valueTransforms'] as AXPWidgetNode['valueTransforms'];\n }\n return node;\n}\n\nfunction asWidgetType(value: unknown): AXMTestSheetInputWidgetType {\n const text = asText(value);\n if ((AXM_TEST_SHEET_INPUT_WIDGET_TYPES as readonly string[]).includes(text)) {\n return text as AXMTestSheetInputWidgetType;\n }\n return 'text-editor';\n}\n\nfunction asRowList(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter(isRecord);\n}\n\nfunction isFilledCell(value: unknown): boolean {\n if (value === null || value === undefined || value === '' || value === false) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return true;\n}\n\nfunction asText(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet.util.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type { AXPSpreadsheetColumn, AXPSpreadsheetRowWidget } from '@acorex-platform/framework-client/layout/components';\n\nimport {\n AXM_TEST_SHEET_INPUT_WIDGET_TYPES,\n AXM_TEST_SHEET_ROW_GROUP_PATH,\n type AXMTestSheetColumn,\n type AXMTestSheetDefinition,\n type AXMTestSheetInputWidgetType,\n type AXMTestSheetLayout,\n type AXMTestSheetPercentDiff,\n type AXMTestSheetRow,\n type AXMTestSheetRowMode,\n} from './test-sheet.types';\n\n//#region ----- Normalize -----\n\nexport function emptyTestSheetDefinition(): AXMTestSheetDefinition {\n return {\n rowMode: 'fixed',\n layout: 'column-inputs',\n columns: [],\n rows: [],\n };\n}\n\nexport function normalizeTestSheetDefinition(value: unknown): AXMTestSheetDefinition {\n const source = isRecord(value) ? value : {};\n const rowMode: AXMTestSheetRowMode = source['rowMode'] === 'repeated' ? 'repeated' : 'fixed';\n const layout: AXMTestSheetLayout = source['layout'] === 'row-inputs' ? 'row-inputs' : 'column-inputs';\n const rowHeaderTitle = asText(source['rowHeaderTitle']) || undefined;\n const direction = source['direction'] === 'rtl' || source['direction'] === 'ltr' ? source['direction'] : undefined;\n const columns = Array.isArray(source['columns'])\n ? source['columns'].map((column) => normalizeColumn(column)).filter((column): column is AXMTestSheetColumn => !!column)\n : [];\n const rows = Array.isArray(source['rows'])\n ? source['rows'].map((row) => normalizeRow(row)).filter((row): row is AXMTestSheetRow => !!row)\n : [];\n return { rowMode, layout, rowHeaderTitle, direction, columns, rows };\n}\n\nfunction normalizeColumn(value: unknown): AXMTestSheetColumn | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const role = value['role'] === 'static' ? 'static' : 'input';\n const widgetType = asWidgetType(value['widgetType']);\n const baseWidget = asWidgetNode(value['widget']) ?? (role === 'input' ? legacyInputWidget(value) : undefined);\n return {\n name,\n title: asText(value['title']),\n description: asText(value['description']) || undefined,\n groupTitle: asText(value['groupTitle']) || undefined,\n role,\n widget: moveColumnOptionsOntoWidget(baseWidget, value),\n widgetType: role === 'input' ? widgetType : undefined,\n choices: asText(value['choices']) || undefined,\n percentDiff: normalizePercentDiff(value['percentDiff']),\n };\n}\n\nfunction normalizeRow(value: unknown): AXMTestSheetRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const cellsSource = isRecord(value['cells']) ? value['cells'] : {};\n const cells: Record<string, string> = {};\n for (const [key, cell] of Object.entries(cellsSource)) {\n cells[key] = asText(cell);\n }\n const role = value['role'] === 'static' ? 'static' : value['role'] === 'input' ? 'input' : undefined;\n return {\n name,\n groupTitle: asText(value['groupTitle']) || undefined,\n title: asText(value['title']) || undefined,\n role,\n widget: role === 'static' ? undefined : asWidgetNode(value['widget']),\n cells,\n };\n}\n\n//#endregion\n\n//#region ----- Spreadsheet mapping -----\n\nexport function testSheetHasRowGroups(definition: AXMTestSheetDefinition): boolean {\n return (\n definition.rowMode === 'fixed' &&\n definition.rows.some((row) => (row.groupTitle ?? '').trim().length > 0)\n );\n}\n\nexport function toTestSheetSpreadsheetColumns(definition: AXMTestSheetDefinition): AXPSpreadsheetColumn[] {\n return definition.columns.map((column) => ({\n name: column.name,\n title: column.title || column.name,\n description: column.description,\n path: column.name,\n groupTitle: column.groupTitle,\n readonly: column.role === 'static' || !!column.percentDiff,\n widget: column.percentDiff\n ? { type: 'number-editor', options: { decimals: 2 } }\n : column.role === 'static'\n ? staticCellWidget(column)\n : inputCellWidget(column),\n }));\n}\n\n/**\n * Writes percent-difference columns from the two source cells on each row.\n * Returns the same array when nothing changed.\n */\nexport function applyTestSheetComputations(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] {\n const computed = definition.columns.filter((column) => column.percentDiff);\n if (computed.length === 0) {\n return rows;\n }\n let changed = false;\n const next = rows.map((row) => {\n const copy: Record<string, unknown> = { ...row };\n let rowChanged = false;\n for (const column of computed) {\n const formula = column.percentDiff;\n if (!formula) {\n continue;\n }\n const value = percentDifference(copy[formula.base], copy[formula.other]);\n if (value == null) {\n if (Object.prototype.hasOwnProperty.call(copy, column.name)) {\n delete copy[column.name];\n rowChanged = true;\n }\n continue;\n }\n if (copy[column.name] !== value) {\n copy[column.name] = value;\n rowChanged = true;\n }\n }\n if (rowChanged) {\n changed = true;\n return copy;\n }\n return row;\n });\n return changed ? next : rows;\n}\n\n/** Row widgets for `row-inputs`. Static rows stay as authored text. */\nexport function toTestSheetRowWidgets(definition: AXMTestSheetDefinition): AXPSpreadsheetRowWidget[] | null {\n if (definition.layout !== 'row-inputs') {\n return null;\n }\n return definition.rows.map((row) => ({\n name: row.name,\n readonly: row.role === 'static',\n widget: row.role === 'static' ? undefined : row.widget,\n }));\n}\n\nexport function buildFixedTestSheetRows(\n definition: AXMTestSheetDefinition,\n answer: unknown,\n): Record<string, unknown>[] {\n const saved = asRowList(answer);\n const inputNames = inputColumnNames(definition);\n return definition.rows.map((row) => {\n const next: Record<string, unknown> = {\n name: row.name,\n [AXM_TEST_SHEET_ROW_GROUP_PATH]: row.groupTitle ?? '',\n };\n if (row.title) {\n next['title'] = row.title;\n }\n if (row.role === 'static') {\n for (const column of definition.columns) {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n return next;\n }\n for (const column of definition.columns) {\n if (column.role === 'static') {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n }\n const match = saved.find((item) => item['name'] === row.name);\n if (match) {\n for (const name of inputNames) {\n if (Object.prototype.hasOwnProperty.call(match, name)) {\n next[name] = match[name];\n }\n }\n }\n return next;\n });\n}\n\nexport function buildRepeatedTestSheetRows(answer: unknown): Record<string, unknown>[] {\n return asRowList(answer).map((row) => ({ ...row }));\n}\n\n/**\n * Persists the grid only after an input cell has a value.\n * Static text alone does not count as an answer.\n */\nexport function toStoredTestSheetAnswer(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] | null {\n const names = inputColumnNames(definition);\n const staticRowNames = new Set(\n definition.rows.filter((row) => row.role === 'static').map((row) => row.name),\n );\n const inputRows = rows.filter((row) => !staticRowNames.has(asText(row['name'])));\n const filled = inputRows.some((row) => names.some((name) => isFilledCell(row[name])));\n if (!filled) {\n return null;\n }\n return inputRows.map((row) => {\n const stored: Record<string, unknown> = { ...row };\n delete stored['title'];\n return stored;\n });\n}\n\nexport function nextTestSheetKey(prefix: string, used: string[]): string {\n const taken = new Set(used);\n let index = used.length + 1;\n let name = `${prefix}${index}`;\n while (taken.has(name)) {\n index += 1;\n name = `${prefix}${index}`;\n }\n return name;\n}\n\n/** Reads a select value stored as an id string or as `{ id }`. */\nexport function testSheetChoiceId(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (isRecord(value) && typeof value['id'] === 'string') {\n return value['id'];\n }\n return '';\n}\n\n/**\n * Fills blank or duplicate `name` keys on repeater rows.\n * Existing objects are kept when the name is already unique.\n */\nexport function assignTestSheetItemNames<T extends { name?: string }>(\n items: T[],\n prefix: string,\n): { items: T[]; changed: boolean } {\n const used = new Set<string>();\n let changed = false;\n const next = items.map((item) => {\n const current = item && typeof item === 'object' ? item : ({} as T);\n const name = typeof current.name === 'string' ? current.name.trim() : '';\n if (name && !used.has(name)) {\n used.add(name);\n return current;\n }\n changed = true;\n const assigned = nextTestSheetKey(prefix, [...used]);\n used.add(assigned);\n return { ...current, name: assigned };\n });\n return { items: next, changed };\n}\n\n/**\n * Older columns store `widgetType` and `choices`.\n * The configurator reads `widget`, so a missing node is built once from those fields.\n */\nexport function ensureTestSheetColumnWidgets<\n T extends {\n name?: string;\n role?: unknown;\n widget?: unknown;\n widgetType?: unknown;\n choices?: unknown;\n required?: unknown;\n defaultValue?: unknown;\n },\n>(items: T[]): { items: T[]; changed: boolean } {\n let changed = false;\n const next = items.map((item) => {\n if (!isRecord(item)) {\n return item;\n }\n const isStatic = testSheetChoiceId(item['role']) === 'static';\n const current = asWidgetNode(item['widget']);\n const base = current ?? (isStatic ? undefined : legacyInputWidget(item));\n const widget = moveColumnOptionsOntoWidget(base, item);\n const stripLegacy = item['required'] !== undefined || item['defaultValue'] !== undefined;\n if (widget === current && !stripLegacy) {\n return item;\n }\n changed = true;\n const nextItem: Record<string, unknown> = { ...item };\n if (widget) {\n nextItem['widget'] = widget;\n }\n delete nextItem['required'];\n delete nextItem['defaultValue'];\n return nextItem as T;\n });\n return { items: next, changed };\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction normalizePercentDiff(value: unknown): AXMTestSheetPercentDiff | undefined {\n if (!isRecord(value) || value['kind'] !== 'percent-diff') {\n return undefined;\n }\n const base = asText(value['base']);\n const other = asText(value['other']);\n if (!base || !other) {\n return undefined;\n }\n return { kind: 'percent-diff', base, other };\n}\n\n/** `|other - base| / |base| × 100`, rounded to two decimals. Empty when either side is missing or the base is 0. */\nfunction percentDifference(baseValue: unknown, otherValue: unknown): number | null {\n const base = asFiniteNumber(baseValue);\n const other = asFiniteNumber(otherValue);\n if (base == null || other == null || base === 0) {\n return null;\n }\n return Math.round((Math.abs(other - base) / Math.abs(base)) * 10000) / 100;\n}\n\nfunction asFiniteNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction inputColumnNames(definition: AXMTestSheetDefinition): string[] {\n return definition.columns.filter((column) => column.role === 'input').map((column) => column.name);\n}\n\nfunction staticCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return {\n type: 'text-editor',\n defaultValue: column.widget?.defaultValue ?? '',\n options: {},\n };\n}\n\nfunction inputCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return asWidgetNode(column.widget) ?? legacyInputWidget(column);\n}\n\nfunction legacyInputWidget(source: { widgetType?: unknown; choices?: unknown }): AXPWidgetNode {\n const type = asWidgetType(source.widgetType);\n if (type === 'select-editor') {\n const choices = typeof source.choices === 'string' ? source.choices : '';\n const dataSource = choices\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => ({ id: line, title: line }));\n return {\n type,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource,\n },\n };\n }\n return { type, options: {} };\n}\n\n/**\n * Older sheets stored required and default value on the column.\n * The widget configurator stores them on the node: `defaultValue` and `options.validations.required`.\n */\nfunction moveColumnOptionsOntoWidget(\n widget: AXPWidgetNode | undefined,\n source: { required?: unknown; defaultValue?: unknown },\n): AXPWidgetNode | undefined {\n const defaultValue = typeof source.defaultValue === 'string' ? source.defaultValue : '';\n const needsRequired = source.required === true && (!widget || !widgetHasRequired(widget));\n const needsDefault =\n defaultValue.length > 0 && (widget?.defaultValue === undefined || widget.defaultValue === '');\n if (!needsRequired && !needsDefault) {\n return widget;\n }\n const next: AXPWidgetNode = widget\n ? { ...widget, options: { ...(widget.options ?? {}) } }\n : { type: 'text-editor', options: {} };\n if (needsRequired) {\n const validations = isRecord(next.options?.['validations']) ? { ...next.options['validations'] } : {};\n validations['required'] = { rule: 'required' };\n next.options = { ...(next.options ?? {}), validations };\n }\n if (needsDefault) {\n next.defaultValue = defaultValue;\n }\n return next;\n}\n\nfunction widgetHasRequired(node: AXPWidgetNode): boolean {\n const validations = node.options?.['validations'];\n if (Array.isArray(validations)) {\n return validations.some((rule) => isRequiredRule(rule));\n }\n if (isRecord(validations)) {\n return isRequiredRule(validations['required']);\n }\n return false;\n}\n\nfunction isRequiredRule(value: unknown): boolean {\n return isRecord(value) && value['rule'] === 'required' && value['disabled'] !== true;\n}\n\nfunction asWidgetNode(value: unknown): AXPWidgetNode | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = asText(value['type']).trim();\n if (!type) {\n return undefined;\n }\n const node: AXPWidgetNode = {\n type,\n options: isRecord(value['options']) ? value['options'] : {},\n };\n if (value['defaultValue'] !== undefined) {\n node.defaultValue = value['defaultValue'];\n }\n if (value['triggers']) {\n node.triggers = value['triggers'] as AXPWidgetNode['triggers'];\n }\n if (value['valueTransforms']) {\n node.valueTransforms = value['valueTransforms'] as AXPWidgetNode['valueTransforms'];\n }\n return node;\n}\n\nfunction asWidgetType(value: unknown): AXMTestSheetInputWidgetType {\n const text = asText(value);\n if ((AXM_TEST_SHEET_INPUT_WIDGET_TYPES as readonly string[]).includes(text)) {\n return text as AXMTestSheetInputWidgetType;\n }\n return 'text-editor';\n}\n\nfunction asRowList(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter(isRecord);\n}\n\nfunction isFilledCell(value: unknown): boolean {\n if (value === null || value === undefined || value === '' || value === false) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return true;\n}\n\nfunction asText(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}