{"version":3,"file":"piserve-tech-form-submission.mjs","sources":["../../../projects/form-submission/src/lib/form-submission.service.ts","../../../projects/form-submission/src/environment/environment.ts","../../../projects/form-submission/src/services/mapper.service.ts","../../../projects/form-submission/src/services/validation.service.ts","../../../projects/form-submission/src/services/form-validation.service.ts","../../../projects/form-submission/src/services/whenClause.service.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.ts","../../../projects/form-submission/src/form-fields/section-fields/section-fields.component.html","../../../projects/form-submission/src/services/data.service.ts","../../../projects/form-submission/src/services/form.service.ts","../../../projects/form-submission/src/services/element-tracker.service.ts","../../../projects/form-submission/src/services/score.service.ts","../../../projects/form-submission/src/services/hidden-field.service.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.ts","../../../projects/form-submission/src/form-fields/check-box-fields/check-box-fields.component.html","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.ts","../../../projects/form-submission/src/form-fields/date-time-fields/date-time-fields.component.html","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.ts","../../../projects/form-submission/src/form-fields/drop-down-fields/drop-down-fields.component.html","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.ts","../../../projects/form-submission/src/form-fields/file-picker-fields/file-picker-fields.component.html","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.ts","../../../projects/form-submission/src/form-fields/location-fields/location-fields.component.html","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.ts","../../../projects/form-submission/src/form-fields/mail-fields/mail-fields.component.html","../../../projects/form-submission/src/services/countryService.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.ts","../../../projects/form-submission/src/form-fields/mobile-fields/mobile-fields.component.html","../../../projects/form-submission/src/services/aggregate.service.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.ts","../../../projects/form-submission/src/form-fields/number-fields/number-fields.component.html","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.ts","../../../projects/form-submission/src/form-fields/password-fields/password-fields.component.html","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.ts","../../../projects/form-submission/src/form-fields/radio-button-fields/radio-button-fields.component.html","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.ts","../../../projects/form-submission/src/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.html","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.ts","../../../projects/form-submission/src/form-fields/selection-matrix-fields/selection-matrix-fields.component.html","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.ts","../../../projects/form-submission/src/form-fields/signature-fields/signature-fields.component.html","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.ts","../../../projects/form-submission/src/form-fields/slider-fields/slider-fields.component.html","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.ts","../../../projects/form-submission/src/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.html","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.ts","../../../projects/form-submission/src/form-fields/text-area-fields/text-area-fields.component.html","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.ts","../../../projects/form-submission/src/form-fields/text-fields/text-fields.component.html","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.ts","../../../projects/form-submission/src/form-fields/toggle-switch-fields/toggle-switch-fields.component.html","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.ts","../../../projects/form-submission/src/form-fields/url-fields/url-fields.component.html","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.ts","../../../projects/form-submission/src/form-fields/aggregate-function/aggregate-function.component.html","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.ts","../../../projects/form-submission/src/form-fields/currency-fields/currency-fields.component.html","../../../projects/form-submission/src/form-fields/hidden-field/hidden-field.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.ts","../../../projects/form-submission/src/form-fields/iframe-fields/iframe-fields.component.html","../../../projects/form-submission/src/question/question/question.component.ts","../../../projects/form-submission/src/question/question/question.component.html","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.ts","../../../projects/form-submission/src/question/confirm-dialog/confirm-dialog.component.html","../../../projects/form-submission/src/services/subform-copy.service.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.ts","../../../projects/form-submission/src/sub-form/submission-modal/submission-modal.component.html","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.ts","../../../projects/form-submission/src/question/multiple-subform/multiple-subform.component.html","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.ts","../../../projects/form-submission/src/question/inline-multiple-subform/inline-multiple-subform.component.html","../../../projects/form-submission/src/question/card-subform/card-subform.component.ts","../../../projects/form-submission/src/question/card-subform/card-subform.component.html","../../../projects/form-submission/src/question/sub-form/sub-form.component.ts","../../../projects/form-submission/src/question/sub-form/sub-form.component.html","../../../projects/form-submission/src/question/question-group/question-group.component.ts","../../../projects/form-submission/src/question/question-group/question-group.component.html","../../../projects/form-submission/src/question/multifields/multifields.component.ts","../../../projects/form-submission/src/question/multifields/multifields.component.html","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.ts","../../../projects/form-submission/src/question/recursive-logic/recursive-logic.component.html","../../../projects/form-submission/src/question/form-elements/form-elements.component.ts","../../../projects/form-submission/src/question/form-elements/form-elements.component.html","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.ts","../../../projects/form-submission/src/form-submission/navigation-tabs/navigation-tabs.component.html","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent .ts","../../../projects/form-submission/src/form-submission/save-as-draft/saveDraftModalComponent.html","../../../projects/form-submission/src/services/recaptcha.service.ts","../../../projects/form-submission/src/form-submission/header/header.component.ts","../../../projects/form-submission/src/form-submission/header/header.component.html","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.ts","../../../projects/form-submission/src/form-submission/next-prev-navigation/next-prev-navigation.component.html","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.ts","../../../projects/form-submission/src/form-submission/submission-container/submission-container.component.html","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.ts","../../../projects/form-submission/src/form-submission/submit-form/submit-form.component.html","../../../projects/form-submission/src/lib/form-submission.component.ts","../../../projects/form-submission/src/lib/form-submission.component.html","../../../projects/form-submission/src/form-fields/form-fields.module.ts","../../../projects/form-submission/src/shared/shared.module.ts","../../../projects/form-submission/src/form-submission/form-submission.module.ts","../../../projects/form-submission/src/lib/form-submission.module.ts","../../../projects/form-submission/src/public-api.ts","../../../projects/form-submission/src/piserve-tech-form-submission.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FormSubmissionService {\n\n  constructor() { }\n}\n","export let environment = {\n    production: false,\n    googleRecaptchaSiteKey: '',\n     htmlDirection: 'ltr'\n  };\n  ","import { Appearance } from '../models/appearance.model';\nimport { ElementOptionAPI } from '../models/elementOptionAPI.model';\nimport { elementOptionAPIData } from '../models/elementOptionAPIData.model';\nimport { ElementOptionDB } from '../models/elementOptionDB.model';\nimport { ElementOptionDBCriteria } from '../models/elementOptionDBCriteria.model';\nimport { FormElement } from '../models/formElement.model';\nimport { Grid } from '../models/grid.model';\nimport { Page } from '../models/page.model';\nimport { PublicForm } from '../models/publicForm.model';\nimport { Question } from '../models/question.model';\nimport { Row } from '../models/row.model';\nimport { Validation } from '../models/validation.model';\nimport { Option } from '../models/option.model';\nimport { Section } from '../models/section.model';\nimport { SubForm } from '../models/subForm.model';\nimport { FormElementType } from '../models/formElementType.model';\nimport { Logic } from '../models/logic.model';\nimport { Attachment } from '../models/attachment.model';\nimport { Submission } from '../models/submission.model';\nimport { Answer } from '../models/answer.model';\nimport { termsAndConditionType } from '../models/terms&condition.model';\nimport { FormConfiguration } from '../models/formConfiguration.model';\nimport { QuestionGroup } from '../models/questionGroup.model';\nimport { SubformProperty } from '../models/subformPropery.model';\nimport { Multifields } from '../models/multifields.model';\nimport { AggregateFunction } from '../models/aggregate.model';\nimport { DefaultAnswersModel } from '../models/defaultAnswersModel.model';\nimport { DefaultAnswerEntry } from '../models/defaultAnswerEntry.model';\nimport { DefaultQuestionAnswer } from '../models/defaultQuestionAnswer.model';\nimport { SubformConfiguration } from '../models/subformConfiguration.model';\nimport { EmitterDTO } from '../models/emitters.model';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { Scoring } from '../models/scoring.model';\nimport { HiddenField } from '../models/hiddenField.model';\nimport { IFrameProperties } from '../models/iFrameProperties.model';\nimport { SubmissionCopyConfig } from '../models/submissionCopyConfig.mopdel';\n\nexport function mapPublicFormToModel(apiPublicForm: any): PublicForm {\n  return {\n    name: apiPublicForm.result.name,\n    formConfiguration: mapFormConfigurationToModel(\n      apiPublicForm.result.moduleConfiguration\n    ),\n    currency:apiPublicForm?.result?.currency,\n    defautlCurrency:apiPublicForm?.result?.defaultCurrency,\n    pages: apiPublicForm.result.pages.map((apiPage: any) =>\n      mapPageToModel(apiPage,apiPublicForm?.result?.currency,apiPublicForm?.result?.defaultCurrency)\n    ),\n    questionAnswers:apiPublicForm.result.questionAnswers,\n    parentId:apiPublicForm.result.parentId,\n    emitters: apiPublicForm.result.emittersDTOS\n      ? apiPublicForm.result.emittersDTOS.map((emitter: any) => mapEmitterToModel(emitter))\n      : [],\n    score:apiPublicForm.score,\n    maximumPossibleScore:apiPublicForm.maximumPossibleScore,\n  };\n}\n\n\nexport function mapEmitterToModel(apiEmitter: any): EmitterDTO {\n  return {\n    id: apiEmitter.id,\n    keyName: apiEmitter.keyName,\n    valueSource: apiEmitter.valueSource,\n    questionId: apiEmitter.questionId,\n    inputValue: apiEmitter.inputValue,\n    isConflict: apiEmitter.isConflict ?? false\n  };\n}\n\n\nfunction mapFormConfigurationToModel(\n  apiFormConfiguration: any\n): FormConfiguration {\n  return {\n    saveAutomatically: apiFormConfiguration?.saveAutomatically,\n    saveInterval: apiFormConfiguration?.saveInterval,\n    customizeFont: apiFormConfiguration?.customizeFont,\n    fontFamily: apiFormConfiguration?.fontFamily,\n    fontSize: apiFormConfiguration?.fontSize,\n    enableDataExport: apiFormConfiguration?.enableDataExport,\n    fileFormats: apiFormConfiguration?.fileFormats,\n    enableQuestionNumbering: apiFormConfiguration?.enableQuestionNumbering,\n    questionNumbering: apiFormConfiguration?.questionNumbering,\n    enableGoogleRecaptcha: apiFormConfiguration?.enableGoogleRecaptcha,\n    googleRecaptchaKey: apiFormConfiguration?.googleRecaptchaKey,\n    googleRecaptchaSecret: apiFormConfiguration?.googleRecaptchaSecret,\n    navigation: apiFormConfiguration?.navigation,\n    markAllQuestionsAsRequired: apiFormConfiguration?.markAllQuestionsAsRequired,\n  };\n}\n\n\n\nexport function mapPageToModel(apiPage: any, currency:any, defaultCurrency:any): Page {\n  return {\n    title: apiPage.title,\n    testElementName: apiPage.testElementName,\n    rows: apiPage?.rows?.map((apiRow: any) => mapRowToModel(apiRow,currency,defaultCurrency)),\n  };\n}\n\nfunction mapRowToModel(apiRow: any, currency:any,defaultCurrency:any): Row {\n  return {\n    grid: apiRow.grid.map((apiGrid: any) => mapGridToModel(apiGrid,currency,defaultCurrency)),\n  };\n}\n\nfunction mapGridToModel(apiGrid: any, currency:any,defaultCurrency:any): Grid {\n  let entity: Section | Question | SubForm | QuestionGroup | Multifields | undefined;\n\n  switch (apiGrid.entityType) {\n    case 'QUESTION':\n      entity = mapQuestionToModel(apiGrid.element,currency,defaultCurrency);\n      break;\n    case 'SECTION':\n      entity = mapSectionToModel(apiGrid.element);\n      break;\n    case 'SUBFORM':\n      entity = mapSubFormToModel(apiGrid.element,currency,defaultCurrency);\n      break;\n    case 'QUESTION_GROUP':\n      entity = mapQuestionGroupToModel(apiGrid.element,currency,defaultCurrency);\n      break;\n    case 'MULTIFIELD':\n      entity = mapMultifieldsToModel(apiGrid.element,currency,defaultCurrency);\n      break;\n    default:\n      throw new Error(`Unknown entity type: ${apiGrid.entityType}`);\n  }\n\n  const whenClause = mapWhenClauseModel(apiGrid.whenClauseDTO);\n  // read actions safely\n  const actions: string[] = Array.isArray(whenClause?.whenClauseActions)\n    ? whenClause.whenClauseActions\n    : [];\n\n  // pick last action if multiple (your UI prevents that but safe handling)\n  const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n  let shouldShow = true; // default visible\n\n  if (action === 'SHOW') {\n    shouldShow = false;  // default hidden when action = SHOW\n  }\n  if (action === 'HIDE') {\n    shouldShow = true;   // default shown when action = HIDE\n  }\n\n  return {\n    entityType: apiGrid.entityType,\n    element: entity,\n    whenClause: whenClause,\n    show: shouldShow\n  };\n}\n\nexport function mapWhenClauseModel(whenClauseDTO: any) {\n  // 🧩 Guard: Handle undefined/null or malformed data\n  if (!whenClauseDTO || !Array.isArray(whenClauseDTO.whenClauseCondition)) {\n\n    return {\n      activate: false,\n      whenClauseCondition: [],\n      whenClauseActions: []\n    };\n  }\n\n  return {\n    activate: !!whenClauseDTO.activate,\n    whenClauseActions: whenClauseDTO.whenClauseActions || [],\n    whenClauseCondition: whenClauseDTO.whenClauseCondition.map((condition: any) => ({\n      logic: condition.logic || '',\n      questionid: condition.questionid || '',\n      condition: condition.condition || '',\n      value: condition.value ?? '' // handle null/undefined gracefully\n    }))\n  };\n}\n\nexport function mapSectionToModel(apiSection: any): Section {\n  return {\n    id: apiSection.id,\n    title: apiSection.title,\n    description: apiSection.description,\n    testElementName: apiSection.testElementName\n  };\n}\n\nexport function mapQuestionToModel(apiQuestion: any, currency:any, defaultCurrency:any): Question {\n  return {\n    count: apiQuestion.count,\n    id: apiQuestion.id,\n    questionNumber: apiQuestion.questionNumber,\n    required: apiQuestion.required,\n    hint: apiQuestion.hint,\n    question: apiQuestion.question,\n    testElementName: apiQuestion.testElementName,\n    answer: apiQuestion?.answer,\n    validation: true,\n    formElement: mapFormElementToModel(apiQuestion.formElement,currency,defaultCurrency),\n    childLogics: apiQuestion?.childLogics?.map((logic: any) =>\n      mapLogicToModel(logic, currency,defaultCurrency)\n    ),\n    answerId: apiQuestion?.answerId,\n    attachments: apiQuestion?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)) || [],\n    deleteFiles: [],\n    defaultValue:apiQuestion?.defaultValue,\n    disableEdit:apiQuestion?.disableEdit,\n    score:apiQuestion.score,\n    maximumPossibleScore:apiQuestion.maximumPossibleScore,\n    amountInWords: apiQuestion?.amountInWords,\n    answerCurrency:apiQuestion?.currencySymbol\n  };\n}\n\nfunction mapAttachmentToModel(apiAttachment: any): Attachment {\n  return {\n    fileId: apiAttachment.fileId,\n    fileName: apiAttachment.fileName,\n    fileUrl: apiAttachment.fileUrl,\n    fileSize:apiAttachment?.fileSize\n  };\n}\n\nfunction mapFormElementToModel(apiFormElement: any, currency:any, defaultCurrency:any): FormElement {\n  return {\n    elementType: apiFormElement.elementType,\n    appearance: mapAppearanceToModel(apiFormElement.appearance,currency,defaultCurrency),\n    validation: mapValidationToModel(apiFormElement.validation),\n    option: mapOptionToModel(apiFormElement?.option),\n    aggregateFunction: mapAggregateFunction(apiFormElement?.aggregateFunction),\n    selectionMatrixLabel: apiFormElement.selectionMatrixLabel,\n    selectionMatrixColumn: apiFormElement.selectionMatrixColumn,\n    termsAndConditionType: maptermsAndCondition(apiFormElement),\n    scoring: mapScoringToModel(apiFormElement.scoring),\n    hiddenField: mapHiddenFieldToModel(apiFormElement?.hiddenField),\n    iFrameProperties: mapIframeProperties(apiFormElement?.iFrameProperties)\n  };\n}\n\nfunction mapIframeProperties(iFrameProperties: any): IFrameProperties {\n  return {\n    contentType: iFrameProperties?.contentType,\n    url: iFrameProperties?.url,\n    html: iFrameProperties?.html,\n    style: iFrameProperties?.style,\n    script: iFrameProperties?.script\n  }\n}\n\nfunction mapHiddenFieldToModel(hiddenField: any): HiddenField {\n  return {\n    value: hiddenField?.value,\n    valueSource: hiddenField?.valueSource,\n    key: hiddenField?.key,\n    updateOn: hiddenField?.updateOn || 'BOTH'\n  }\n}\n\nfunction mapAggregateFunction(aggregateFunction: any): AggregateFunction | undefined {\n  if (!aggregateFunction) {\n    return undefined;\n  }\n\n  return {\n    aggregateOperation: aggregateFunction.aggregateOperation,\n    formula: aggregateFunction.formula\n  };\n}\n\nfunction maptermsAndCondition(Element: any): termsAndConditionType {\n  if(Element.termsAndCondition != undefined){\n    let data = Element.termsAndCondition\n    return {\n      termsAndConditionType: data.termsAndConditionType,\n      fileUrl: data.fileUrl,\n      fileName: data.fileName,\n  };\n  }\n  else{\n    return {\n      termsAndConditionType: '',\n      fileUrl: '',\n      fileName: '',\n    }\n  }\n\n}\n\nfunction mapLogicToModel(apiLogic: any, currency:any,defaultCurrency:any): Logic {\n  return {\n    id: apiLogic.id,\n    inputValue: apiLogic.inputValue,\n    condition: apiLogic.condition,\n    showLogic: false,\n    rows: apiLogic?.rows?.map((element: any) =>\n      mapRowToModel(element,currency,defaultCurrency)\n    ),\n  };\n}\n\nexport function mapSubFormToModel(apiSubForm: any, currency:any,defaultCurrency:any): SubForm {\n  return {\n    id: apiSubForm.id,\n    count: apiSubForm.count,\n    title: apiSubForm.title,\n    description: apiSubForm.description,\n    testElementName: apiSubForm.testElementName,\n    rows: apiSubForm.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n    submissions: apiSubForm?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n    property: apiSubForm.property ? mapPropertyToModel(apiSubForm.property) : undefined,\n    defaultAnswers: apiSubForm.defaultAnswers ? mapDefaultAnswersToModel(apiSubForm.defaultAnswers) : undefined,\n    deleted: false,\n    scores:apiSubForm.scores,\n    maximumPossibleScore:apiSubForm.maximumPossibleScore,\n    submissionCopyConfig: mapSubmissionCopyConfig(apiSubForm.submissionCopyConfig),\n    required: apiSubForm.required\n  };\n}\n\nexport function mapSubmissionCopyConfig(copyConfig:any): SubmissionCopyConfig | undefined {\n  if(!copyConfig) return undefined;\n  return {\n    allowCopyFromOtherSubmissions: copyConfig.allowCopyFromOtherSubmissions,\n    editableQuestions: copyConfig.editableQuestions,\n  };\n}\n\nexport function mapDefaultAnswersToModel(apiDefaultAnswers: any): DefaultAnswersModel {\n  return {\n      answers: apiDefaultAnswers.answers.map((entry: any) => mapDefaultAnswerEntry(entry))\n  };\n}\n\nexport function mapDefaultAnswerEntry(apiEntry: any): DefaultAnswerEntry {\n  return {\n    isDeleteEnable: apiEntry.isDeleteEnable,\n    defaultQuestionsAnswers: apiEntry.defaultQuestionsAnswers.map((question: any) => mapDefaultQuestionAnswer(question))\n  };\n}\n\nexport function mapDefaultQuestionAnswer(apiQuestion: any): DefaultQuestionAnswer {\n  return {\n    defaultAnswer: apiQuestion.defaultAnswer,\n    readOnly: apiQuestion.readOnly,\n    isDeleteEnable: apiQuestion.isDeleteEnable,\n    questionId: apiQuestion.questionId\n  };\n}\n\nfunction mapPropertyToModel(apiProperty: any): SubformProperty {\n  return {\n    subFormStructure: apiProperty.subFormStructure,\n    subFormType: apiProperty.subFormType,\n    allowDelete: apiProperty.allowDelete,\n    allowCopy: apiProperty.allowCopy,\n    addButtonLabel: apiProperty.addButtonLabel\n  };\n}\n\nexport function mapQuestionGroupToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): QuestionGroup {\n  return {\n    id: apiQuestionGroup.id,\n    count: apiQuestionGroup.count,\n    title: apiQuestionGroup.title,\n    description: apiQuestionGroup.description,\n    testElementName: apiQuestionGroup.testElementName,\n    rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n    submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n  };\n}\n\nexport function mapMultifieldsToModel(apiQuestionGroup: any,currency:any,defaultCurrency:any): Multifields {\n  return {\n    id: apiQuestionGroup.id,\n    question: apiQuestionGroup.question,\n    questionNumber: apiQuestionGroup.questionNumber,\n    count: apiQuestionGroup.count,\n    testElementName: apiQuestionGroup.testElementName,\n    rows: apiQuestionGroup.rows.map((element: any) => mapRowToModel(element,currency,defaultCurrency)),\n    submissions: apiQuestionGroup?.submissions?.map((submission: any) => mapSubmissionToModel(submission)),\n  };\n}\n\nfunction mapSubmissionToModel(apiSubmission: any): Submission {\n  return {\n    submissionId: apiSubmission?.submissionId,\n    answers: apiSubmission?.answers?.map((answer: any) => mapAnswerToModel(answer)),\n    configuration: mapSubformConfiguration(apiSubmission?.configuration),\n    scores:apiSubmission.scores,\n    sourceSubmissionId:apiSubmission.sourceSubmissionId,\n    isCopied:apiSubmission.isCopied\n  };\n}\n\nfunction mapAnswerToModel(apiAnswer: any): Answer {\n  return {\n    questionId: apiAnswer.questionId,\n    answer: apiAnswer?.answer,\n    answerId: apiAnswer?.answerId,\n    attachments: apiAnswer?.attachments?.map((attachment: any) => mapAttachmentToModel(attachment)),\n    scores:apiAnswer.scores,\n    maximumPossibleScore:apiAnswer.maximumPossibleScore,\n    show:apiAnswer?.show,\n    amountInWords: apiAnswer?.amountInWords,\n    answerCurrency:apiAnswer?.currencySymbol\n  };\n}\n\nfunction mapSubformConfiguration(config: any): SubformConfiguration | undefined {\n  if (!config) return undefined;\n  return {\n    allowDelete: !!config.allowDelete,\n    isDefault: !!config.isDefault,\n  };\n}\n\nexport function mapFormElementTypeToModel(\n  apiFormElementType: any\n): FormElementType<any> {\n  return {\n    entityType: apiFormElementType?.entityType,\n    element: apiFormElementType?.element,\n  };\n}\n\nfunction mapAppearanceToModel(apiAppearance: any, currency:any, defaultCurrency:any): Appearance {\n  return {\n    placeholder: apiAppearance?.placeholder,\n    fontSize: apiAppearance?.fontSize,\n    textAlign: apiAppearance?.textAlign,\n    font: apiAppearance?.font,\n    underline: apiAppearance?.underline,\n    bold: apiAppearance?.bold,\n    italics: apiAppearance?.italics,\n    defaultValue: apiAppearance?.defaultValue,\n    numberOfRows: apiAppearance?.numberOfRows,\n    singleSelection: apiAppearance?.singleSelection,\n    displayCountryCode: apiAppearance?.displayCountryCode,\n    displayFlag: apiAppearance?.displayFlag,\n    displayCode: apiAppearance?.displayCode,\n    showCountryName: apiAppearance?.showCountryName,\n    beautifyNumbers: apiAppearance?.beautifyNumbers,\n    upAndDownButton: apiAppearance?.upAndDownButton,\n    allowNegativeValues: apiAppearance?.allowNegativeValues,\n    showPreviewButton: apiAppearance?.showPreviewButton,\n    confirmPassword: apiAppearance?.confirmPassword,\n    viewButton: apiAppearance?.viewButton,\n    displayStrong: apiAppearance?.displayStrong,\n    dateType: apiAppearance?.dateType,\n    format: apiAppearance?.format,\n    setCurrentPosition: apiAppearance?.setCurrentPosition,\n    defaultZoomLevel: apiAppearance?.defaultZoomLevel,\n    allowFullScreen: apiAppearance?.allowFullScreen,\n    latitude: apiAppearance?.latitude,\n    longitude: apiAppearance?.longitude,\n    showAcceptButton: apiAppearance?.showAcceptButton,\n    labelOnValue: apiAppearance?.labelOnValue,\n    labelOffValue: apiAppearance?.labelOffValue,\n    labelOnColor: apiAppearance?.labelOnColor,\n    labelOffColor: apiAppearance?.labelOffColor,\n    minValue: apiAppearance?.minValue,\n    maxValue: apiAppearance?.maxValue,\n    stepValue: apiAppearance?.stepValue,\n    changeSliderColor: apiAppearance?.changeSliderColor,\n    sliderColor: apiAppearance?.sliderColor,\n    canvasOption: apiAppearance?.canvasOption,\n    selectionType: apiAppearance?.selectionType,\n    dragAndDrop: apiAppearance?.dragAndDrop,\n    previewUploadedFiles: apiAppearance?.previewUploadedFiles,\n    multiFileUploads: apiAppearance?.multiFileUploads,\n    selectionColorRequired: apiAppearance?.selectionColorRequired,\n    selectionColor: apiAppearance?.selectionColor,\n    color: apiAppearance?.color,\n    avatarPicker:apiAppearance?.avatarPicker,\n    timeFormat:apiAppearance?.timeFormat,\n    displayOptionsInColumn:apiAppearance?.displayOptionsInColumn,\n    currencySymbol:apiAppearance?.currencySymbol,\n    decimalPrecision:apiAppearance?.decimalPrecision,\n    symbolPosition:apiAppearance?.symbolPosition,\n    thousandSeparator:apiAppearance?.thousandSeparator,\n    currency:currency,\n    limitCurrencies:apiAppearance?.limitCurrencies,\n    currencyOption:apiAppearance?.currencyOption,\n    specificCurrencySymbol:apiAppearance?.specificCurrencySymbol,\n    limitCurrencySymbol:apiAppearance?.limitCurrencySymbol,\n    width: apiAppearance?.width,\n    height: apiAppearance?.height,\n    showAmountInWords: apiAppearance?.showAmountInWords,\n    defaultCurrency:defaultCurrency\n  };\n}\n\nfunction mapValidationToModel(apiValidation: any): Validation {\n  return {\n    regexValidation: apiValidation?.regexValidation,\n    regex: apiValidation?.regex,\n    validationMessage: apiValidation?.validationMessage,\n    limitedCharacters: apiValidation?.limitedCharacters,\n    count: apiValidation?.count,\n    minimumSelection: apiValidation?.minimumSelection,\n    maximumSelection: apiValidation?.maximumSelection,\n    countryWiseValidation: apiValidation?.countryWiseValidation,\n    restrictCountry: apiValidation?.restrictCountry,\n    allowedCountries: apiValidation?.allowedCountries,\n    blockedCountries: apiValidation?.blockedCountries,\n    regularExpression: apiValidation?.regularExpression,\n    expectedDomains: apiValidation?.expectedDomains,\n    min: apiValidation?.min,\n    max: apiValidation?.max,\n    minLength: apiValidation?.minLength,\n    maxLength: apiValidation?.maxLength,\n    requireLowercaseLetters: apiValidation?.requireLowercaseLetters,\n    requireUppercaseLetters: apiValidation?.requireUppercaseLetters,\n    requireNumbers: apiValidation?.requireNumbers,\n    requireSpecialCharacters: apiValidation?.requireSpecialCharacters,\n    allowedSpecialCharacters: apiValidation?.allowedSpecialCharacters,\n    minDateOption: apiValidation?.minDateOption,\n    minDate: apiValidation?.minDate,\n    maxDateOption: apiValidation?.maxDateOption,\n    maxDate: apiValidation?.maxDate,\n    regionBoundary: apiValidation?.regionBoundary,\n    region: apiValidation?.region,\n    preventFromProceedingWithoutAgree:\n      apiValidation?.preventFromProceedingWithoutAgree,\n    buttonColour: apiValidation?.buttonColour,\n    maxFileSize: apiValidation?.maxFileSize,\n    minFileSize: apiValidation?.minFileSize,\n    minSelection: apiValidation?.minSelection,\n    maxSelection: apiValidation?.maxSelection,\n    fileTypes: apiValidation?.fileTypes,\n    fileSize: apiValidation?.fileSize,\n    fileSizeUnit: apiValidation?.fileSizeUnit,\n    totalFileSize: apiValidation?.totalFileSize,\n    minSelectionRequired: apiValidation?.minSelectionRequired,\n    minSelectionValue: apiValidation?.minSelectionValue,\n    validationType: apiValidation?.validationType,\n    validation: apiValidation?.validation,\n    minTime: apiValidation?.minTime,\n    maxTime:apiValidation?.maxTime,\n    minTimeOption:apiValidation?.minTimeOption,\n    maxTimeOption: apiValidation?.maxTimeOption,\n  };\n}\n\nfunction mapElementOptionDBToModel(apiElementOptionDB: any): ElementOptionDB {\n  return {\n    tableName: apiElementOptionDB.tableName,\n    valueField: apiElementOptionDB.valueField,\n    labelField: apiElementOptionDB.labelField,\n    labelPattern: apiElementOptionDB.labelPattern,\n    criteria: apiElementOptionDB?.criteria.map((apiCriteria: any) =>\n      mapElementOptionDBCriteriaToModel(apiCriteria)\n    ),\n  };\n}\n\nfunction mapElementOptionDBCriteriaToModel(\n  apiElementOptionDBCriteria: any\n): ElementOptionDBCriteria {\n  return {\n    field: apiElementOptionDBCriteria?.field,\n    condition: apiElementOptionDBCriteria?.condition,\n    valueSource: apiElementOptionDBCriteria?.valueSource,\n    inputValue: apiElementOptionDBCriteria?.inputValue,\n    logicalOperator: apiElementOptionDBCriteria?.logicalOperator,\n  };\n}\n\nfunction mapElementOptionAPIToModel(\n  apiElementOptionAPI: any\n): ElementOptionAPI {\n  return {\n    external: apiElementOptionAPI?.external,\n    url: apiElementOptionAPI?.url,\n    valueField: apiElementOptionAPI?.valueField,\n    labelField: apiElementOptionAPI?.labelField,\n    pathToValue: apiElementOptionAPI?.pathToValue,\n    headers: apiElementOptionAPI?.headers?.map(mapElementOptionAPIDataToModel),\n    params: apiElementOptionAPI?.params?.map(mapElementOptionAPIDataToModel),\n    pathVariables: apiElementOptionAPI?.pathVariables?.map(\n      mapElementOptionAPIDataToModel\n    ),\n     labelPattern:apiElementOptionAPI?.labelPattern\n  };\n}\n\nfunction mapElementOptionAPIDataToModel(\n  apiElementOptionAPIData: any\n): elementOptionAPIData {\n  return {\n    keyName: apiElementOptionAPIData?.keyName,\n    valueSource: apiElementOptionAPIData?.valueSource,\n    inputValue: apiElementOptionAPIData?.inputValue,\n  };\n}\n\nfunction mapOptionToModel(apiOption: any): Option {\n  return {\n    optionType: apiOption?.optionType,\n    lookupTable: apiOption?.lookupTable,\n    customOptions: apiOption?.customOptions?.map((option: { value: any }) => ({\n      value: option.value,\n    })),\n    database: apiOption?.database\n      ? mapElementOptionDBToModel(apiOption?.database)\n      : undefined,\n    api: apiOption?.api ? mapElementOptionAPIToModel(apiOption.api) : undefined,\n  };\n}\n\nfunction mapScoringToModel(apiScoring: any): Scoring | undefined {\n  if (!apiScoring) return undefined;\n\n  return {\n    enableScoring: apiScoring.enableScoring,\n    defaultScore: apiScoring.defaultScore,\n    enableScoringType: apiScoring.enableScoringType,\n    score: apiScoring.score?.map((s: any) => ({\n      label: s.label || [],\n      score: s.score,\n      scoreType: s.scoreType\n    }))\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ValidationService {\n  private invalidQuestions: {[key: string]: {message: string, pageIndex: number}} = {};\n\n  setInvalid(questionId: string, message: string, pageIndex: number) {\n    this.invalidQuestions[questionId] = {message, pageIndex};\n  }\n\n  clearInvalid(questionId: string) {\n    delete this.invalidQuestions[questionId];\n  }\n\n  getFirstInvalid(): {id: string, pageIndex: number} | null {\n    const keys = Object.keys(this.invalidQuestions);\n    return keys.length > 0 ? {\n      id: keys[0],\n      pageIndex: this.invalidQuestions[keys[0]].pageIndex\n    } : null;\n  }\n\n  getErrorMessage(questionId: string): string | null {\n    return this.invalidQuestions[questionId]?.message || null;\n  }\n\n  clearAll() {\n    this.invalidQuestions = {};\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ValidationService } from './validation.service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FormValidationService {\n  constructor(private validationService: ValidationService) {}\n\n  /**\n   * Validate all required questions on a page.\n   * Assumes your `page` object has a `pageIndex: number` property.\n   */\n  validateRequiredQuestions(page: any): { isValid: boolean; message: string } {\n    // clear any previous errors for this page\n    // this.validationService.clearAll();\n\n    const validateQuestions = (\n      formElements: any[],\n      submissionContext: any = null\n    ): { isValid: boolean; message: string } => {\n      for (let element of formElements) {\n        if (element.entityType === 'QUESTION') {\n          const question = element.element;\n          const required = question.required;\n          const questionId = question.id;\n          const elementType = question.formElement?.elementType;\n\n          // pick up the answer (either in a subform or normal)\n          let answer: any;\n          if (submissionContext?.isInMultipleSubform) {\n            const { submission } = submissionContext;\n            answer = submission.answers.find(\n              (a: any) => a.questionId === questionId\n            )?.answer;\n          } else {\n            answer = question.answer;\n          }\n\n          const isEmpty =\n            answer === null ||\n            answer === undefined ||\n            (typeof answer === 'string' && answer.trim() === '') ||\n            (typeof answer === 'object' && Object.keys(answer).length === 0);\n\n          if (required && isEmpty) {\n            const message = submissionContext?.isInMultipleSubform\n              ? `Required question ${question.questionNumber} is not answered in a subform.`\n              : `Required question ${question.questionNumber} is not answered.`;\n\n            // register the invalid question\n            this.validationService.setInvalid(\n              questionId,\n              message,\n              page.pageIndex ?? 0\n            );\n\n            return { isValid: false, message };\n          }\n\n          // recurse into child logics\n          if (question.childLogics) {\n            for (let logic of question.childLogics) {\n              if (!logic.showLogic) continue;\n              for (let row of logic.rows) {\n                const result = validateQuestions(row.grid, submissionContext);\n                if (!result.isValid) return result;\n              }\n            }\n          }\n        } else if (element.entityType === 'SUBFORM') {\n          const subform = element.element;\n\n          if (subform.property?.subFormStructure === 'multiple') {\n            const submissions = subform.submissions || [];\n\n            if (submissions.length > 0) {\n              const hasRequired = subform.rows.some((r: any) =>\n                r.grid.some(\n                  (f: any) => f.entityType === 'QUESTION' && f.element.required\n                )\n              );\n\n              if (hasRequired && submissions.length === 0) {\n                const message = `Subform \"${\n                  subform.title || 'Untitled'\n                }\" is missing required submissions.`;\n                this.validationService.setInvalid(\n                  subform.id,\n                  message,\n                  page.pageIndex ?? 0\n                );\n                return { isValid: false, message };\n              }\n\n              // map questions and validate only if more than one submission\n              const questionMap = new Map<string, any>();\n              subform.rows.forEach((r: any) =>\n                r.grid.forEach((f: any) => {\n                  if (f.entityType === 'QUESTION') {\n                    questionMap.set(f.element.id, f.element);\n                  }\n                })\n              );\n\n              for (let submission of submissions) {\n                for (let row of subform.rows) {\n                  const result = validateQuestions(row.grid, {\n                    isInMultipleSubform: true,\n                    submission,\n                    questionMap,\n                  });\n                  if (!result.isValid) return result;\n                }\n              }\n            }\n          } else {\n            // single‐entry subform\n            for (let row of subform.rows || []) {\n              const result = validateQuestions(row.grid);\n              if (!result.isValid) return result;\n            }\n          }\n        } else if (\n          (element.entityType === 'QUESTION_GROUP' ||\n            element.entityType === 'MULTIFIELD') &&\n          element.element.rows\n        ) {\n          for (let row of element.element.rows) {\n            const result = validateQuestions(row.grid, submissionContext);\n            if (!result.isValid) return result;\n          }\n        }\n      }\n\n      return { isValid: true, message: 'All required questions are answered.' };\n    };\n\n    // start validation\n    for (const row of page.rows) {\n      const result = validateQuestions(row.grid);\n      if (!result.isValid) {\n        // we already called setInvalid above\n        return result;\n      }\n    }\n\n    // if we get here, everything passed\n    return { isValid: true, message: 'All required questions are answered.' };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Submission } from '../models/submission.model';\nimport { Subject } from 'rxjs/internal/Subject';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class WhenClauseService {\n  private activeWhenClauseGrids: any[] = [];\n  private questionAnswerMap: { [questionId: string]: any } = {};\nprivate questionChange$ = new Subject<{ questionId: string }>();\n\n\n\n  isInitialLoad: boolean = true;\n  constructor() {}\n\n  markLoadCompleted() {\n    this.isInitialLoad = false;\n  }\n\n  onQuestionChange() {\n  return this.questionChange$.asObservable();\n}\n\n\n  /**\n   * Check if a grid has an active when clause\n   */\n  isActiveWhenClause(grid: any): boolean {\n    const when = grid?.whenClause;\n    return !!(\n      when &&\n      when.activate &&\n      Array.isArray(when.whenClauseCondition) &&\n      when.whenClauseCondition.length > 0\n    );\n  }\n\n  /**\n   * Add a grid to tracking list if it has an active when clause\n   */\n  addGrid(grid: any): void {\n    if (!grid) return;\n\n    if (this.isActiveWhenClause(grid)) {\n      const exists = this.activeWhenClauseGrids.some(\n        (g) => g.element?.id === grid.element?.id\n      );\n\n      if (!exists) {\n        this.activeWhenClauseGrids.push(grid);\n      }\n    }\n  }\n\n  setQuestionAnswer(questionId: string, answer: any,initial:boolean = false): void {\n    if (!questionId) return;\n    this.questionAnswerMap[questionId] = answer;\n    this.evaluateAllWhenClauses(initial);\n      this.questionChange$.next({ questionId });\n  }\n\n  getAnswer(questionId: string): any {\n    return this.questionAnswerMap[questionId];\n  }\n\n  private evaluateAllWhenClauses(initial:boolean): void {\n    const visibleGrids: any[] = [];\n\n    for (const grid of this.activeWhenClauseGrids) {\n      const when = grid.whenClause;\n      const conditions = when.whenClauseCondition;\n\n      if (!conditions || !conditions.length) continue;\n\n      let overallResult = true;\n\n      for (let i = 0; i < conditions.length; i++) {\n        const clause = conditions[i];\n        const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase(); // Default to AND for first\n        const answer = this.getAnswer(clause.questionid);\n        const result = this.evaluateCondition(\n          answer,\n          clause.condition,\n          clause.value\n        );\n\n        // Combine results based on logic (AND / OR)\n        if (i === 0) {\n          overallResult = result; // initialize with first condition\n        } else {\n          if (logic === 'AND') {\n            overallResult = overallResult && result;\n          } else if (logic === 'OR') {\n            overallResult = overallResult || result;\n          }\n        }\n      }\n      // safe read actions (could be undefined)\n    const actions: string[] = Array.isArray(when?.whenClauseActions)\n    ? when.whenClauseActions.map(String)\n    : [];\n\n  // choose the decisive action (use last if multiple)\n  const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n  if (overallResult) {\n    // Condition(s) satisfied -> perform the action\n    switch (action) {\n      case 'SHOW':\n        grid.show = true;\n        break;\n      case 'HIDE':\n        grid.show = false;\n        break;\n      case 'MARK_AS_REQUIRED':\n        if (grid.element) grid.element.required = true;\n        break;\n      case 'MARK_AS_OPTIONAL':\n        if (grid.element) grid.element.required = false;\n        break;\n      default:\n        // no show/hide action — keep current behavior (you can choose default here)\n        // For safety, if no explicit action, we'll leave grid.show unchanged.\n        break;\n    }\n\n    // if visible, collect\n    if (grid.show) visibleGrids.push(grid);\n  } else {\n    // Condition(s) not satisfied -> revert the action's effect\n    switch (action) {\n      case 'SHOW':\n        // condition no longer true => hide (revert)\n        grid.show = false;\n        break;\n      case 'HIDE':\n        // condition no longer true => show (revert)\n        grid.show = true;\n        break;\n      case 'MARK_AS_REQUIRED':\n        if (grid.element) grid.element.required = false;\n        break;\n      case 'MARK_AS_OPTIONAL':\n        if (grid.element) grid.element.required = true;\n        break;\n      default:\n        // nothing to revert\n        break;\n    }\n    // if we hid it because overallResult false and it's not initial, clear answer\n    if (!overallResult && !initial && !grid.show) {\n      grid.element.answer = null;\n    }\n  }\n      if (overallResult) visibleGrids.push(grid);\n    }\n  }\n\n  evaluateCondition(answer: any, operator: string, value: any): boolean {\n\n    // treat null/undefined/empty-string/empty-array as \"no answer\"\n    if (answer === null || answer === undefined) return false;\n    // if (typeof answer === 'string' && answer === '') return false;\n    if (Array.isArray(answer) && answer.length === 0) return false;\n\n    // helpers to normalize values to arrays of lower-case strings (for string ops)\n    const toStr = (v: any) =>\n      v === null || v === undefined ? '' : String(v).toLowerCase();\n\n    const ensureArray = (v: any): string[] => {\n      if (Array.isArray(v)) return v.map((x) => toStr(x));\n      // if comma-separated string => split, else single element array\n      if (typeof v === 'string' && v.indexOf(',') !== -1) {\n        return v\n          .split(',')\n          .map((x) => x.trim())\n          .map((x) => toStr(x));\n      }\n      return [toStr(v)];\n    };\n\n    const ansArr = ensureArray(answer);\n    const valArr = ensureArray(value);\n\n    // numeric comparisons: only when both sides are scalars (non-array) and numeric\n    const isNumericScalar = (x: any) =>\n      !Array.isArray(x) && x !== null && x !== undefined && !Number.isNaN(Number(x));\n\n    switch (operator) {\n      case '<':\n        if (isNumericScalar(answer) && isNumericScalar(value))\n          return Number(answer) < Number(value);\n        return false;\n      case '>':\n        if (isNumericScalar(answer) && isNumericScalar(value))\n          return Number(answer) > Number(value);\n        return false;\n      case '<=':\n        if (isNumericScalar(answer) && isNumericScalar(value))\n          return Number(answer) <= Number(value);\n        return false;\n      case '>=':\n        if (isNumericScalar(answer) && isNumericScalar(value))\n          return Number(answer) >= Number(value);\n        return false;\n\n      // equality: true if any answer element equals any value element\n      case '=':\n        return ansArr.some((a) => valArr.some((v) => a === v));\n\n      case '!=':\n        return !ansArr.some((a) => valArr.some((v) => a === v));\n\n      // LIKE / NOT LIKE: check substring match anywhere in any answer element\n      case 'LIKE':\n        return ansArr.some((a) => valArr.some((v) => a.includes(v)));\n      case 'NOT LIKE':\n        return !ansArr.some((a) => valArr.some((v) => a.includes(v)));\n\n      case 'BEGIN WITH':\n        return ansArr.some((a) => valArr.some((v) => a.startsWith(v)));\n      case 'END WITH':\n        return ansArr.some((a) => valArr.some((v) => a.endsWith(v)));\n\n      // IN / NOT IN: true if any answer element exists in value list\n      case 'IN':\n        return ansArr.some((a) => valArr.includes(a));\n      case 'NOT IN':\n        return !ansArr.some((a) => valArr.includes(a));\n\n      default:\n        return false;\n    }\n  }\n\n  addGridsFromSubform(subform: any): void {\n    if (!subform || !Array.isArray(subform.rows)) return;\n\n    for (const row of subform.rows) {\n      if (!row.grid || !Array.isArray(row.grid)) continue;\n\n      for (const grid of row.grid) {\n        // 1️⃣ Add this grid itself if it has an active whenClause\n        this.addGrid(grid);\n\n        // 2️⃣ Then, recursively process nested childLogics inside its element\n        if (grid.element?.childLogics?.length) {\n          this.processChildLogics(grid.element.childLogics);\n        }\n      }\n    }\n  }\n\n  /**\n   * Recursively process childLogics structure\n   */\n  private processChildLogics(childLogics: any[]): void {\n    if (!Array.isArray(childLogics)) return;\n\n    for (const logic of childLogics) {\n      // 1️⃣ Each logic may have its own rows (similar to subform rows)\n      if (Array.isArray(logic.rows)) {\n        for (const row of logic.rows) {\n          if (Array.isArray(row.grid)) {\n            for (const grid of row.grid) {\n              // Check whenClause for this nested grid\n              this.addGrid(grid);\n\n              // 2️⃣ Recurse again if this nested question also has its own childLogics\n              if (grid.element?.childLogics?.length) {\n                this.processChildLogics(grid.element.childLogics);\n              }\n            }\n          }\n        }\n      }\n\n      // 3️⃣ A logic itself might directly contain nested logics\n      if (Array.isArray(logic.childLogics)) {\n        this.processChildLogics(logic.childLogics);\n      }\n    }\n  }\n\n  /**\n   * Return ALL elements with an active whenClause inside a subform,\n   * including nested childLogics (recursive)\n   */\n  getWhenClauseElements(subform: any): any[] {\n    const result: any[] = [];\n\n    if (!subform || !Array.isArray(subform.rows)) {\n      return result;\n    }\n\n    for (const row of subform.rows) {\n      if (!Array.isArray(row.grid)) continue;\n\n      for (const grid of row.grid) {\n        // 1️⃣ Add this grid if it has an active whenClause\n        if (this.isActiveWhenClause(grid)) {\n          result.push(grid);\n        }\n\n        // 2️⃣ Process nested childLogics inside this element\n        if (Array.isArray(grid.element?.childLogics)) {\n          result.push(\n            ...this.getElementsFromChildLogics(grid.element.childLogics)\n          );\n        }\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Recursively gather grids with active whenClause inside childLogics\n   */\n  private getElementsFromChildLogics(childLogics: any[]): any[] {\n    const found: any[] = [];\n\n    if (!Array.isArray(childLogics)) return found;\n\n    for (const logic of childLogics) {\n      // Each logic can have rows\n      if (Array.isArray(logic.rows)) {\n        for (const row of logic.rows) {\n          if (!Array.isArray(row.grid)) continue;\n\n          for (const grid of row.grid) {\n            if (this.isActiveWhenClause(grid)) {\n              found.push(grid);\n            }\n\n            // Recurse deeper if this grid has nested childLogics\n            if (Array.isArray(grid.element?.childLogics)) {\n              found.push(\n                ...this.getElementsFromChildLogics(grid.element.childLogics)\n              );\n            }\n          }\n        }\n      }\n\n      // Logic itself may have nested childLogics\n      if (Array.isArray(logic.childLogics)) {\n        found.push(...this.getElementsFromChildLogics(logic.childLogics));\n      }\n    }\n\n    return found;\n  }\n\n  checkElementVisibility(id: string, submission: Submission): boolean {\n    if (!id || !submission || !Array.isArray(submission.answers)) {\n      return true; // default visible if invalid input\n    }\n\n    const matchedAnswer = submission.answers.find(\n      (ans) => ans.questionId === id\n    );\n\n    // Return the 'show' flag if found, else default to true\n    return matchedAnswer ? matchedAnswer.show ?? true : true;\n  }\n\n  evaluateSubformWhenClauses(\n    changedAnswer: any,\n    submission: Submission,\n    changedQuestionId: string,\n    elementsWithWhenClause: any\n  ) {\n    if (!elementsWithWhenClause.length) return;\n\n    for (const grid of elementsWithWhenClause) {\n      const elementId = grid.element.id;\n      const when = grid.whenClause;\n      const conditions = when.whenClauseCondition;\n\n      if (!conditions?.length) continue;\n\n      let overallResult = true;\n\n      for (let i = 0; i < conditions.length; i++) {\n        const clause = conditions[i];\n\n        const logic = (clause.logic || (i === 0 ? 'AND' : 'AND')).toUpperCase();\n\n        // Determine which answer to use for this condition\n        let answerToCheck: any;\n\n        if (clause.questionid === changedQuestionId) {\n          // Use updated answer for the changed question\n          answerToCheck = changedAnswer;\n        } else {\n          // Fetch existing value from submission for other questions\n          const existing = submission.answers.find(\n            (a) => a.questionId === clause.questionid\n          );\n          answerToCheck = existing?.answer;\n        }\n\n        const result = this.evaluateCondition(\n          answerToCheck,\n          clause.condition,\n          clause.value\n        );\n\n        // Apply AND/OR logic\n        if (i === 0) {\n          overallResult = result;\n        } else {\n          overallResult =\n            logic === 'AND' ? overallResult && result : overallResult || result;\n        }\n      }\n\n      // Update show flag for the element controlled by this whenClause\n      const matchedAnswer = submission.answers.find(\n        (ans) => ans.questionId === elementId\n      );\n\n      const actions: string[] = Array.isArray(when?.whenClauseActions)\n    ? when.whenClauseActions.map(String)\n    : [];\n\n      // choose the decisive action (use last if multiple)\n      const action = actions.length > 0 ? actions[actions.length - 1] : undefined;\n\n\n      if (matchedAnswer) {\n        if (overallResult) {\n          // Condition(s) satisfied -> perform the action\n          switch (action) {\n            case 'SHOW':\n              matchedAnswer.show = true;\n              break;\n            case 'HIDE':\n              matchedAnswer.show = false;\n              break;\n            case 'MARK_AS_REQUIRED':\n              matchedAnswer.required = true;\n              break;\n            case 'MARK_AS_OPTIONAL':\n              matchedAnswer.required = false;\n              break;\n            default:\n              // no show/hide action — keep current behavior (you can choose default here)\n              // For safety, if no explicit action, we'll leave grid.show unchanged.\n              break;\n          }\n\n        } else {\n          // Condition(s) not satisfied -> revert the action's effect\n          switch (action) {\n            case 'SHOW':\n              // condition no longer true => hide (revert)\n              matchedAnswer.show = false;\n              break;\n            case 'HIDE':\n              // condition no longer true => show (revert)\n              matchedAnswer.show = true;\n              break;\n            case 'MARK_AS_REQUIRED':\n              matchedAnswer.required = false;\n              break;\n            case 'MARK_AS_OPTIONAL':\n              matchedAnswer.required = true;\n              break;\n            default:\n              // nothing to revert\n              break;\n          }\n        }\n      }\n\n\n\n\n      // if (matchedAnswer) {\n      //   matchedAnswer.show = overallResult;\n      // }\n    }\n  }\n\n  resetService(): void {\n    // Clear tracked grids\n    this.activeWhenClauseGrids = [];\n\n    // Clear stored question → answer map\n    this.questionAnswerMap = {};\n\n    // Reset visibility logic to initial state\n  }\n\n  getActiveWhenClauseGrids(): any[] {\n    return this.activeWhenClauseGrids;\n  }\n}\n","import { Component, Input, OnChanges } from '@angular/core';\n\n@Component({\n  selector: 'lib-section-fields',\n  templateUrl: './section-fields.component.html',\n  styleUrls: ['./section-fields.component.scss']\n})\nexport class SectionFieldsComponent implements OnChanges {\n  @Input() section: any = {};\n  decodedDescription: string = '';\n\n  // Method to decode HTML entities\n  decodeHtml(html: string): string {\n    const textArea = document.createElement('textarea');\n    textArea.innerHTML = html;    \n    return textArea.value;\n  }\n\n  // Lifecycle hook to handle updates to the input\n  ngOnChanges(): void {\n    if (this.section.description) {\n      this.decodedDescription = this.decodeHtml(this.section.description);\n    }\n  }\n}\n","<div class=\"mb-4 px-3\" [attr.name]=\"section.testElementName\">\n  <p class=\"sectionTitle\">{{ section.title }}</p>\n  <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DataService {\n  constructor() {}\n\n  private dataSubject = new BehaviorSubject<string>('');\n  public apiUrl$: Observable<string> = this.dataSubject.asObservable();\n  private headerSubject = new BehaviorSubject<any>({});\n  public header$: Observable<any> = this.headerSubject.asObservable();\n\n  private subformSubject = new BehaviorSubject<any>({});\n  public subform$: Observable<any> = this.subformSubject.asObservable();\n\n  private parentQuestionsSubject = new BehaviorSubject<any>(null);\n  public parentQuestions$: Observable<any> = this.parentQuestionsSubject.asObservable();\n\n  setApiUrl(data: string): void {\n    this.dataSubject.next(data);\n  }\n\n  setHeader(data: any) {\n    this.headerSubject.next(data);\n  }\n\n  setParentQuestions(data: any): void {\n    this.parentQuestionsSubject.next(data);\n  }\n\n  setSubformData(data: any) {\n    this.subformSubject.next(data);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { DataService } from './data.service';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FormService {\n  private apiUrl: string = '';\n  header: any = {};\n  parentQuestions: any;\n  subformData: any;\n\n  constructor(private http: HttpClient, private dataService: DataService) {\n    this.dataService.apiUrl$.subscribe((data) => {\n      this.apiUrl = data;\n    });\n\n    this.dataService.header$.subscribe((data) => {\n      this.header = data;\n    });\n\n    this.dataService.parentQuestions$.subscribe((questions) => {\n      if (questions) {\n        this.parentQuestions = questions;\n      }\n    });\n\n    this.dataService.subform$.subscribe((data) => {\n      this.subformData = data;\n    });\n  }\n\n  getQuestions(\n    moduleName: string,\n    pageNumber: number = 1,\n    rowSet: number = 0,\n    progressiveLoading: boolean = true,\n    country: string = ''\n  ) {\n    const headers = new HttpHeaders(this.getSafeHeaders());\n    const params = new HttpParams()\n      .set('pageNumber', pageNumber.toString())\n      .set('rowSet', rowSet.toString())\n      .set('country', country)\n      .set('progressiveLoading', progressiveLoading);\n\n    return this.http.get<any>(`${this.apiUrl}/api/public/forms/${moduleName}`, {\n      headers,\n      params,\n    });\n  }\n\n  fetchDataFromDatabase(database: any, pageNumber:number=0, pageSize:number=10, searchString:string='',enablePagination:boolean=false): Observable<any> {\n    const headers = new HttpHeaders({ 'Content-Type': 'application/json' });\n    const params = new HttpParams()\n      .set('page', pageNumber.toString())\n      .set('size', pageSize.toString())\n      .set('enablePagination', enablePagination.toString())\n      .set('searchKey', searchString);\n    return this.http.post<any>(`${this.apiUrl}/api/load-from-db`, database, {\n      headers,params\n    });\n  }\n\n  fetchDataFromLookup(tableName: string) {\n    return this.http.get<any>(`${this.apiUrl}/api/public/lookup/${tableName}`);\n  }\n\n  fetchDataFromExternalAPI(\n    apiConfig: any,\n    selectedValues: any[] = []\n  ): Observable<any> {\n    // ✅ Check if pagination exists\n    const hasPagination =\n      apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\n      apiConfig.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\n\n    // ---------------------- HEADERS ----------------------\n    let headers = new HttpHeaders();\n    // helper: resolve a value (or values) based on valueSource\n\n    // Apply to headers (assuming `headers` is an HttpHeaders instance)\n    if (apiConfig.headers) {\n      apiConfig.headers.forEach((header: any) => {\n        if (!header.keyName) return;\n\n        const rawValue = resolveValueFromSource(\n          header.valueSource,\n          header.inputValue,\n          selectedValues\n        );\n\n        if (header.valueSource === 'SELECTED_VALUES') {\n          // Only add header if we have selected values\n          if (Array.isArray(rawValue) && rawValue.length > 0) {\n            if (header.inputValue === 'SINGLE_VALUE') {\n              headers = headers.set(header.keyName, String(rawValue[0]));\n            } else if (header.inputValue === 'ARRAY_OF_VALUES') {\n              // join by comma for headers (common pattern)\n              headers = headers.set(header.keyName, rawValue.join(','));\n            } else {\n              // fallback: join\n              headers = headers.set(header.keyName, rawValue.join(','));\n            }\n          }\n          // no selected values -> skip header\n          return;\n        }\n\n        // For non-selected sources: skip when unresolved\n        if (rawValue === null || rawValue === undefined) return;\n\n        // If rawValue is array -> join by comma (headers expect single string)\n        const headerValue = Array.isArray(rawValue)\n          ? rawValue.join(',')\n          : String(rawValue);\n\n        if (header.keyName.toLowerCase() === 'authorization') {\n          // add Bearer only when headerValue is truthy (and not already prefixed)\n          const token = headerValue.startsWith('Bearer ')\n            ? headerValue\n            : `Bearer ${headerValue}`;\n          headers = headers.set(header.keyName, token);\n        } else {\n          headers = headers.set(header.keyName, headerValue);\n        }\n      });\n    }\n\n    // ---------------------- PARAMS ----------------------\n    let params = new HttpParams();\n    // helper: resolve a value (or values) based on valueSource\n    function resolveValueFromSource(\n      valueSource: string | undefined,\n      inputValue: any,\n      selectedValues: any[] = []\n    ) {\n      if (!valueSource) return null;\n\n      switch (valueSource) {\n        case 'LOCAL_STORAGE':\n          return localStorage.getItem(inputValue); // string or null\n\n        case 'SESSION_STORAGE':\n          return sessionStorage.getItem(inputValue); // string or null\n\n        case 'CUSTOM_INPUT':\n        case 'QUESTION':\n        case 'PAGE_INDEX':\n        case 'PAGE_SIZE':\n        case 'SEARCH_STRING':\n          // inputValue may be a single value or an array/CSV depending on usage\n          return inputValue;\n\n        case 'SELECTED_VALUES':\n          // For SELECTED_VALUES, return the selectedValues array (caller decides SINGLE/ARRAY behavior)\n          return Array.isArray(selectedValues) ? selectedValues : [];\n\n        default:\n          console.warn(`Unsupported valueSource for params: ${valueSource}`);\n          return null;\n      }\n    }\n\n    // Usage: build params (assuming `params` is an HttpParams instance)\n    if (apiConfig.params) {\n      apiConfig.params.forEach((param: any) => {\n        if (!param.keyName) return;\n\n        // Resolve raw value based on source\n        const rawValue = resolveValueFromSource(\n          param.valueSource,\n          param.inputValue,\n          selectedValues\n        );\n\n        // If param expects selected values, handle SINGLE_VALUE vs ARRAY_OF_VALUES\n        if (param.valueSource === 'SELECTED_VALUES') {\n          // Only add if there are actual selected values\n          if (Array.isArray(rawValue) && rawValue.length > 0) {\n            if (param.inputValue === 'SINGLE_VALUE') {\n              // set to first selected value\n              params = params.set(param.keyName, rawValue[0]);\n            } else if (param.inputValue === 'ARRAY_OF_VALUES') {\n              // append each selected value as repeated param\n              rawValue.forEach((val: any) => {\n                params = params.append(param.keyName, val);\n              });\n            } else {\n              // if inputValue not provided, default to array behavior\n              rawValue.forEach((val: any) => {\n                params = params.append(param.keyName, val);\n              });\n            }\n          }\n          // if no selected values, skip adding this param\n          return;\n        }\n\n        // For non-selected valueSources: rawValue could be null/undefined/string/array\n        if (rawValue === null || rawValue === undefined) {\n          // skip adding param when value not found\n          return;\n        }\n\n        // If inputValue indicates array-of-values (e.g., param.inputValue === 'ARRAY_OF_VALUES'),\n        // accept either an array or a comma-separated string\n        if (param.inputValue === 'ARRAY_OF_VALUES') {\n          if (Array.isArray(rawValue)) {\n            rawValue.forEach((val: any) => {\n              params = params.append(param.keyName, val);\n            });\n          } else if (typeof rawValue === 'string') {\n            // support comma separated string\n            rawValue\n              .split(',')\n              .map((s) => s.trim())\n              .filter(Boolean)\n              .forEach((val: string) => {\n                params = params.append(param.keyName, val);\n              });\n          } else {\n            // fallback: convert to string and append\n            params = params.append(param.keyName, String(rawValue));\n          }\n        } else {\n          // default: set single value\n          params = params.set(param.keyName, String(rawValue));\n        }\n      });\n    }\n\n    // ---------------------- PATH VARIABLES ----------------------\n    let url = apiConfig.url;\n    if (apiConfig.pathVariables) {\n      apiConfig.pathVariables.forEach((pathVar: any) => {\n        if (pathVar.keyName) {\n          let valueToBind: any = null;\n\n          switch (pathVar.valueSource) {\n            case 'LOCAL_STORAGE':\n              valueToBind = localStorage.getItem(pathVar.inputValue);\n              break;\n\n            case 'SESSION_STORAGE':\n              valueToBind = sessionStorage.getItem(pathVar.inputValue);\n              break;\n\n            case 'CUSTOM_INPUT':\n            case 'QUESTION':\n              valueToBind = pathVar.inputValue;\n              break;\n\n            default:\n              console.warn(`Unsupported valueSource: ${pathVar.valueSource}`);\n          }\n\n          if (valueToBind !== null && valueToBind !== undefined) {\n            url = url.replace(`{${pathVar.keyName}}`, valueToBind);\n          }\n        }\n      });\n    }\n\n    // ---------------------- FINAL CALL ----------------------\n    return this.http.get<any>(url, { headers, params });\n  }\n\n  submitForm(\n    moduleName: string,\n    formData: FormData,\n    reCAPTCHAToken?: string\n  ): Observable<any> {\n    // const headers = new HttpHeaders({\n    //   'Auth-user': this.header.authUser,\n    // });\n    const headers = new HttpHeaders(this.getSafeHeaders());\n    const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions`;\n    if (reCAPTCHAToken) {\n      formData.append('recaptchaToken', reCAPTCHAToken);\n    }\n    return this.http.post(url, formData, {\n      headers,\n      observe: 'events',\n      reportProgress: true,\n    });\n  }\n\n  getSubmittedForm(\n    moduleName: string,\n    submissionId: string,\n    pageNumber: number = 1,\n    rowSet: number = 0,\n    navigateTo?: string\n  ): Observable<any> {\n    let params = new HttpParams()\n      .set('pageNumber', pageNumber.toString())\n      .set('rowSet', rowSet.toString());\n    if (navigateTo) {\n      params = params.set('navigateId', navigateTo);\n    }\n\n    if (this.parentQuestions) {\n      this.parentQuestions.forEach((q: any) => {\n        params = params.append('parentQuestions', q);\n      });\n    }\n    // const headers = new HttpHeaders({\n    //   'Accept-Language': this.header.acceptedLanguage,\n    // });\n    const headers = new HttpHeaders(this.getSafeHeaders());\n    return this.http.get<any>(\n      `${this.apiUrl}/api/forms/${moduleName}/submissions/${submissionId}`,\n      { headers, params }\n    );\n  }\n\n  updateForm(\n    moduleName: string,\n    submissionId: string,\n    formData: FormData,\n    reCAPTCHAToken?: string\n  ): Observable<any> {\n    // const headers = new HttpHeaders({\n    //   'Auth-user': this.header.authUser,\n    // });\n    const headers = new HttpHeaders(this.getSafeHeaders());\n    const url = `${this.apiUrl}/api/public/forms/${moduleName}/submissions/${submissionId}`;\n    if (reCAPTCHAToken) {\n      formData.append('recaptchaToken', reCAPTCHAToken);\n    }\n    return this.http.put<any>(url, formData, {\n      headers,\n      observe: 'events',\n      reportProgress: true,\n    },);\n  }\n\n  previewFile(url: any): Observable<any> {\n    // const headers = new HttpHeaders({\n    //   'Accept-Language': this.header.acceptedLanguage,\n    //   'Content-Type': this.header.contentType,\n    //   'auth-user': this.header.authUser,\n    //   'Authorization': `Bearer ${this.header.authorization}`,\n    // });\n    const headers = new HttpHeaders(this.getSafeHeaders());\n    const options = {\n      headers: headers,\n    };\n    const fileUrl = url;\n    const encodedFileUrl = encodeURIComponent(fileUrl);\n    const fullUrl = `?url=${encodedFileUrl}`;\n    return this.http.get<any>(\n      this.apiUrl + `/api/cdn/preview${fullUrl}`,\n      options\n    );\n  }\n\n  getSubformSubmissions(subFormData: any) {\n    if (\n      !subFormData?.moduleName ||\n      !subFormData?.duplicateSubmission?.sourceSubmissionIds\n    ) {\n      return;\n    }\n\n    const headers = new HttpHeaders(this.getSafeHeaders());\n\n    // Extract data\n    const moduleName = subFormData.moduleName;\n    const submissionIds: string[] =\n      subFormData.duplicateSubmission.sourceSubmissionIds;\n\n    // Build query string\n    const queryParams = submissionIds\n      .map((id) => `submissionIds=${encodeURIComponent(id)}`)\n      .join('&');\n\n    // Final URL\n    const url = `${this.apiUrl}/api/public/${moduleName}/subform-submissions?${queryParams}`;\n\n    // Now make API call\n    return this.http.get(url, {\n      headers\n    });\n\n  }\n\n  getSafeHeaders(): { [key: string]: string } {\n    const safe: { [key: string]: string } = {};\n    if (this.header && typeof this.header === 'object') {\n      for (const key of Object.keys(this.header)) {\n        const val = this.header[key];\n        if (val !== undefined && val !== null) {\n          let headerKey = key;\n          if (key === 'authUser') {\n            headerKey = 'auth-user';\n          }\n          safe[headerKey] = String(val);\n        }\n      }\n    }\n    return safe;\n  }\n}\n","// element-tracker.service.ts\nimport { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ElementTrackerService {\n  private elementIds = new Set<string>();\n\n  registerElement(id: string) {\n    this.elementIds.add(id);\n  }\n\n  unregisterElement(id: string) {\n    this.elementIds.delete(id);\n  }\n\n  getAllElementIds(): string[] {\n    return Array.from(this.elementIds);\n  }\n\n  clear() {\n    this.elementIds.clear();\n  }\n}","import { Injectable } from '@angular/core';\nimport { Answer } from '../models/answer.model';\nimport { Submission } from '../models/submission.model';\n\ninterface SubmissionScore {\n  scoreType: string;\n  score: number;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScoreCalculationService {\n  constructor() {}\n\n  calculateScoreFromAnswer(\n    newAnswer: string[] | string,\n    question: any\n  ): { scores: { scoreType: string; score: number }[] } | null {\n  \n    const scoring = question?.formElement?.scoring;\n    if (!scoring || !scoring.enableScoring || !newAnswer || (Array.isArray(newAnswer) && newAnswer.length === 0)) {\n      return null;\n    }\n  \n    const defaultScore = scoring.defaultScore ?? 0;\n    const scoreRules = scoring.score || [];\n  \n    const answers = Array.isArray(newAnswer) ? newAnswer : [newAnswer];\n  \n    // If scoringType is NOT enabled, behave like the old logic\n    if (!scoring.enableScoringType) {\n      let totalScore = 0;\n      const scoreByOption: Record<string, number> = {};\n  \n      for (const answer of answers) {\n        const value = answer.split('|')[1]; // Extract actual value\n        const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\n  \n        if (matchingScore && typeof matchingScore.score === 'number') {\n          scoreByOption[answer] = matchingScore.score;\n          totalScore += matchingScore.score;\n        } else {\n          scoreByOption[answer] = defaultScore;\n          totalScore += defaultScore;\n        }\n      }\n  \n      return { scores: [{ scoreType: 'NOT_APPLICABLE', score:totalScore }] };\n    }\n  \n    // ✅ Scoring Type ENABLED → separate Good/Bad scoring\n    const groupedScores: Record<string, number> = {};\n  \n    for (const answer of answers) {\n      const value = answer.split('|')[1];\n      const matchingScore = scoreRules.find((rule: any) => rule.label.includes(value));\n  \n      if (matchingScore && typeof matchingScore.score === 'number') {\n        const type = matchingScore.scoreType || 'NOT_APPLICABLE';\n        groupedScores[type] = (groupedScores[type] || 0) + matchingScore.score;\n      } else {\n        // if no matching score, add default under NOT_APPLICABLE\n        groupedScores['NOT_APPLICABLE'] = (groupedScores['NOT_APPLICABLE'] || 0) + defaultScore;\n      }\n    }\n  \n    // Convert grouped results into required array format\n    const resultScores = Object.keys(groupedScores).map((type) => ({\n      scoreType:type,\n      score: groupedScores[type],\n    }));\n  \n    return { scores: resultScores };\n  }\n\n\n  getMaxPossibleScore(subform: any): { goodMax: number; badMax: number } {\n    let goodMaxProduct = 1;\n    let badMaxProduct = 1;\n  \n    subform.rows.forEach((row: any) => {\n      row.grid.forEach((gridItem: any) => {\n        if (gridItem.entityType === \"QUESTION\") {\n          const element = gridItem.element;\n          const formElement = element?.formElement;\n  \n          if (\n            formElement?.elementType === \"DROP_DOWN\" &&\n            formElement?.scoring?.enableScoring &&\n            Array.isArray(formElement.scoring.score)\n          ) {\n            // ---- GOOD SCORE CALC ----\n            let maxGoodForQuestion = 0;\n            const goodScores = formElement.scoring.score.filter(\n              (s: any) => s.scoreType === \"GOOD_SCORE\"\n            );\n  \n            if (formElement.appearance?.selectionType === \"SINGLE\") {\n              if (goodScores.length > 0) {\n                // Pick max abs, but return real value\n                const maxAbs = goodScores.reduce(\n                  (max: any, s: any) =>\n                    Math.abs(s.score ?? 0) > Math.abs(max.score ?? 0) ? s : max,\n                  { score: 0 }\n                );\n                maxGoodForQuestion = maxAbs.score ?? 0;\n              } else {\n                maxGoodForQuestion = Math.max(\n                  ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n                );\n              }\n            } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n              const maxSelection = formElement.validation?.maximumSelection;\n  \n              if (maxSelection && maxSelection > 0) {\n                const labelScores: number[] = [];\n                const src = goodScores.length > 0 ? goodScores : formElement.scoring.score;\n  \n                src.forEach((s: any) => {\n                  const scoreValue = s.score ?? 0;\n                  const count = s.label?.length ?? 0;\n                  for (let i = 0; i < count; i++) {\n                    labelScores.push(scoreValue);\n                  }\n                });\n  \n                labelScores.sort((a, b) => Math.abs(b) - Math.abs(a));\n                maxGoodForQuestion = labelScores\n                  .slice(0, maxSelection)\n                  .reduce((sum, score) => sum + score, 0);\n              } else {\n                maxGoodForQuestion = formElement.scoring.score.reduce(\n                  (sum: number, s: any) =>\n                    sum + (s.score ?? 0) * (s.label?.length ?? 0),\n                  0\n                );\n              }\n            }\n  \n            // ---- BAD SCORE CALC ----\n            let maxBadForQuestion = 0;\n            const badScores = formElement.scoring.score.filter(\n              (s: any) => s.scoreType === \"BAD_SCORE\"\n            );\n  \n            if (formElement.appearance?.selectionType === \"SINGLE\") {\n              if (badScores.length > 0) {\n                maxBadForQuestion = Math.max(\n                  ...badScores.map((s: any) => s.score ?? 0)\n                );\n              } else {\n                maxBadForQuestion = Math.max(\n                  ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n                );\n              }\n            } else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n              const maxSelection = formElement.validation?.maximumSelection;\n  \n              if (maxSelection && maxSelection > 0) {\n                const labelScores: number[] = [];\n                const src = badScores.length > 0 ? badScores : formElement.scoring.score;\n  \n                src.forEach((s: any) => {\n                  const scoreValue = s.score ?? 0;\n                  const count = s.label?.length ?? 0;\n                  for (let i = 0; i < count; i++) {\n                    labelScores.push(scoreValue);\n                  }\n                });\n  \n                labelScores.sort((a, b) => b - a);\n                maxBadForQuestion = labelScores\n                  .slice(0, maxSelection)\n                  .reduce((sum, score) => sum + score, 0);\n              } else {\n                maxBadForQuestion = formElement.scoring.score.reduce(\n                  (sum: number, s: any) =>\n                    sum + (s.score ?? 0) * (s.label?.length ?? 0),\n                  0\n                );\n              }\n            }\n  \n            goodMaxProduct *= maxGoodForQuestion;\n            badMaxProduct *= maxBadForQuestion;\n          }\n        }\n      });\n    });\n  \n    return { goodMax: goodMaxProduct, badMax: badMaxProduct };\n  }\n  \n  \n  \n\n  calculateSubmissionScore = (answers: Answer[], enableScoringType = true): SubmissionScore[] => {\n    let submissionScoreType: string | null = null;\n    let totalScore = 1;\n    for (const ans of answers) {\n      if (!ans.scores) continue;\n  \n      for (const s of ans.scores) {\n        // ✅ Always add scores (ignore type during summation)\n        totalScore *= s.score ?? 1;\n  \n        // ✅ Decide submission-level scoreType\n        if (enableScoringType) {\n          if (s.scoreType === \"GOOD_SCORE\") {\n            submissionScoreType = \"GOOD_SCORE\";\n          } else if (s.scoreType === \"BAD_SCORE\") {\n            submissionScoreType = \"BAD_SCORE\";\n          }\n        } else if (s.scoreType === \"NOT_APPLICABLE\") {\n          submissionScoreType = \"NOT_APPLICABLE\";\n        }\n      }\n    }\n  \n    // ✅ Default type if none found\n    if (!submissionScoreType) {\n      submissionScoreType = enableScoringType ? \"GOOD_SCORE\" : \"NOT_APPLICABLE\";\n    }\n  \n    return [\n      {\n        scoreType: submissionScoreType,\n        score: totalScore,\n      },\n    ];\n  };\n\n  calculateFinalScore(\n    submissions: Submission[],\n    maxPossibleGoodScore: number,\n    maxPossibleBadScore: number\n  ): SubmissionScore[] {\n    let totalGood = 0;\n    let totalBad = 0;\n  \n    const hasGood = (s: Submission) => s.scores?.some(x => x.scoreType === 'GOOD_SCORE');\n    const hasBad  = (s: Submission) => s.scores?.some(x => x.scoreType === 'BAD_SCORE');\n  \n    const goodCount = submissions.filter(hasGood).length;\n    const badCount  = submissions.filter(hasBad).length;\n  \n    for (const sub of submissions) {\n      if (!sub.scores) continue;\n      for (const s of sub.scores) {\n        if (s.scoreType === 'GOOD_SCORE') totalGood += s.score ?? 0;\n        if (s.scoreType === 'BAD_SCORE')  totalBad  += s.score ?? 0;\n      }\n    }\n  \n    const totalSubmissions = submissions.length;\n  \n    const maxGood = totalSubmissions * maxPossibleGoodScore;\n    const maxBad = totalSubmissions * maxPossibleBadScore;\n  \n    const result: SubmissionScore[] = [];\n  \n    // use !== 0 (not > 0) because maxGood may be negative by design\n    if (goodCount > 0 && maxGood !== 0) {\n      result.push({\n        scoreType: 'GOOD_SCORE',\n        score: Math.round(100 - (totalGood / maxGood) * 100)\n      });\n    }\n  \n    if (badCount > 0 && maxBad !== 0) {\n      result.push({\n        scoreType: 'BAD_SCORE',\n        score: Math.round(100 - (totalBad / maxBad) * 100)\n      });\n    }\n  \n    return result;\n  }\n  \n  \n\n  getMaxPossibleScoreForQuestion(question: any): number {\n    const formElement = question?.formElement;\n  \n    if (\n      !formElement?.scoring?.enableScoring ||\n      !Array.isArray(formElement.scoring.score)\n    ) {\n      return 0; // No scoring or invalid config      \n    }\n  \n    let maxScoreForQuestion = 0;\n  \n    if (formElement.appearance?.selectionType === \"SINGLE\") {\n      // For single selection: take the highest score\n      maxScoreForQuestion = Math.max(\n        ...formElement.scoring.score.map((s: any) => s.score ?? 0)\n      );\n    } \n    else if (formElement.appearance?.selectionType === \"MULTIPLE\") {\n      const maxSelection = formElement.validation?.maximumSelection;\n  \n      if (maxSelection && maxSelection > 0) {\n        // Flatten scores per label\n        const labelScores: number[] = [];\n        formElement.scoring.score.forEach((s: any) => {\n          const scoreValue = s.score ?? 0;\n          const count = s.label?.length ?? 0;\n          for (let i = 0; i < count; i++) {\n            labelScores.push(scoreValue);\n          }\n        });\n  \n        // Sort descending & take top N\n        labelScores.sort((a, b) => b - a);\n        maxScoreForQuestion = labelScores\n          .slice(0, maxSelection)\n          .reduce((sum, score) => sum + score, 0);\n      } else {\n        // Sum all scores × label count\n        maxScoreForQuestion = formElement.scoring.score.reduce(\n          (sum: number, s: any) =>\n            sum + (s.score ?? 0) * (s.label?.length ?? 0),\n          0\n        );\n      }\n    }\n    return maxScoreForQuestion;\n  }\n\n\n  shouldCalculateScore(subForm: any, submission: any): boolean {\n    // Get all dropdown-like questions in subform that have scoring enabled\n    const scoringQuestions = subForm.rows\n      .flatMap((row: any) => row.grid)\n      .filter((g: any) => g.entityType === 'QUESTION')\n      .map((g: any) => g.element)\n      .filter((q: any) =>\n        q.formElement &&\n        ['DROP_DOWN', 'RADIO_BUTTON', 'CHECK_BOX'].includes(q.formElement.elementType) &&\n        q.formElement.scoring?.enableScoring\n      );\n  \n    // Check if all scoring-enabled dropdown questions are answered in submission\n    return scoringQuestions.every((q: any) => {\n      const ans = submission.answers.find((a: any) => a.questionId === q.id);\n      return ans && ans.answer !== '' && !(Array.isArray(ans.answer) && ans.answer.length === 0);\n    });\n  }\n  \n}\n","import { Injectable } from '@angular/core';\nimport { DataService } from './data.service';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HiddenFieldService {\n  hiddenFieldMap = new Map<string, any>();\n\n  private hiddenFieldResultsSubject = new BehaviorSubject<{\n    id: string;\n    result: string;\n  } | null>(null);\n  hiddenFieldResults$ = this.hiddenFieldResultsSubject.asObservable();\n  isEdit: boolean = false;\n  private subformHiddenFieldsMap = new Map<string, any[]>();\n\n\n  user: string = '';\n  constructor(private dataService: DataService) {\n    this.dataService.header$.subscribe((data) => {\n      this.user = data.authUser;\n    });\n  }\n\n  setEditMode(value: boolean): void {\n    this.isEdit = value;\n  }\n  \n  getEditMode(): boolean {\n    return this.isEdit;\n  }\n\n  setHiddenField(id: string, field: any): void {\n    this.hiddenFieldMap.set(id, field);\n  }\n\n  getHiddenField(id: string): any {\n    return this.hiddenFieldMap.get(id);\n  }\n\n  getAllHiddenFields(): any[] {\n    return Array.from(this.hiddenFieldMap.values());\n  }\n\n  updateHiddenFieldsOnChange(): void {\n    this.hiddenFieldMap.forEach((hiddenField, id) => {\n      const updateOn = hiddenField.formElement?.hiddenField.updateOn;\n      // ✅ Only process UPDATE / BOTH\n      if (updateOn !== 'UPDATE' && updateOn !== 'BOTH') {\n        return;\n      }\n\n      // ✅ Recalculate value\n      const result = this.resolveHiddenFieldValue(\n        hiddenField.formElement?.hiddenField\n      );\n\n      // ✅ Emit result\n      this.hiddenFieldResultsSubject.next({\n        id: id,\n        result: result,\n      });\n    });\n  }\n\n  resolveHiddenFieldValue(hiddenField: {\n    value: string | null;\n    valueSource: string | null;\n    key: string | null;\n  }): any {\n    if (!hiddenField?.valueSource) return null;\n\n    switch (hiddenField.valueSource) {\n      case 'CUSTOM_INPUT':\n        // Directly return the provided value\n        return hiddenField.value;\n\n      case 'LOCAL_STORAGE':\n        if (hiddenField.key) {\n          return localStorage.getItem(hiddenField.key);\n        }\n        return null;\n\n      case 'SESSION_STORAGE':\n        if (hiddenField.key) {\n          return sessionStorage.getItem(hiddenField.key);\n        }\n        return null;\n\n      case 'PREDEFINED_VARIABLE':\n        return this.resolvePredefinedVariable(hiddenField.value);\n\n      default:\n        return null;\n    }\n  }\n\n  private resolvePredefinedVariable(variable: string | null): any {\n    if (!variable) return null;\n\n    const now = new Date();\n\n    switch (variable) {\n      case 'CURRENT_DATE':\n        return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\n      case 'CURRENT_TIME':\n        return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\n      case 'CURRENT_DATE_TIME':\n        return now.toLocaleString(); // full ISO datetime\n      case 'EPOCH_TIME':\n        return now.getTime(); // milliseconds since 1970\n      case 'YEAR':\n        return now.getFullYear();\n      case 'MONTH':\n        return now.getMonth() + 1; // 1-12\n      case 'DAY':\n        return now.getDate(); // 1-31\n      case 'SUBMITTED_BY':\n        return this.user ? this.user : 'Unknown';\n      default:\n        return null;\n    }\n  }\n\n\n\n\n\n  extractSubformHiddenFields(subForm: any): void {\n    if (!subForm?.rows) return;\n  \n    const hiddenFields: any[] = [];\n  \n    subForm.rows.forEach((row: any) => {\n      row.grid?.forEach((item: any) => {\n        const element = item?.element;\n  \n        if (\n          element?.formElement?.elementType === 'HIDDEN_FIELD' &&\n          item?.show\n        ) {\n          hiddenFields.push({\n            id: element.id,\n            config: element.formElement.hiddenField\n          });\n        }\n      });\n    });\n  \n    // Store using subform id\n    this.subformHiddenFieldsMap.set(subForm.id, hiddenFields);\n  \n  }\n\n\n  updateSubformHiddenFieldsFromCache(\n    subFormId: string,\n    submission: any,\n    trigger: 'SAVE' | 'UPDATE'\n  ): any {\n    const hiddenFields = this.subformHiddenFieldsMap.get(subFormId);\n  \n    if (!hiddenFields || !submission?.answers) return submission;\n  \n    hiddenFields.forEach((field: any) => {\n      const hiddenConfig = field.config;\n  \n      if (!hiddenConfig) return;\n  \n      const updateOn = hiddenConfig.updateOn;\n  \n      const shouldUpdate =\n        updateOn === 'BOTH' ||\n        (updateOn === 'SAVE' && trigger === 'SAVE') ||\n        (updateOn === 'UPDATE' && trigger === 'UPDATE');\n  \n      if (!shouldUpdate) return;\n  \n      // ✅ Resolve value\n      const value = this.resolveHiddenFieldValue(hiddenConfig);\n  \n      // ✅ Find answer\n      const answerObj = submission.answers.find(\n        (ans: any) => ans.questionId === field.id\n      );\n  \n      if (answerObj) {\n        if (answerObj.answer !== value) {\n          answerObj.answer = value;\n        }\n      } else {\n        submission.answers.push({\n          questionId: field.id,\n          answer: value,\n          maximumPossibleScore: 0,\n          show: true,\n          required: false,\n        });\n      }\n    });\n  \n    return submission;\n  }\n  \n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-check-box-fields',\n  templateUrl: './check-box-fields.component.html',\n  styleUrls: ['./check-box-fields.component.scss'],\n})\nexport class CheckBoxFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{\n    answer: any;\n    maxPossibleScore?: number;\n  }>();\n   @Input() rowId: number = 0;\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  selectionType: string = '';\n  minimumSelection?: number;\n  maximumSelection?: number;\n  optionType: string = '';\n  lookupTable: any = {};\n  customOptions: any[] = [];\n  database: any = {};\n  api: any = {};\n  apiOptions: any[] = [];\n  selectedOptions: any[] = [];\n  validationFailed: boolean = false;\n  displayOptionsInColumn: boolean = false;\n  validationMessage: string = '';\n  private elementId: string = '';\n  maxPossibleScore?: number;\n  @Input() disableEdit: boolean = false;\n\n  constructor(\n    private formService: FormService,\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private scoreCalcService: ScoreCalculationService,\n    private whenClauseService:WhenClauseService,\n    private hiddenFieldService:HiddenFieldService\n  ) {}\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.selectionType = this.question.formElement.appearance.selectionType;\n    this.displayOptionsInColumn =\n      this.question.formElement.appearance.displayOptionsInColumn ?? false;\n    this.minimumSelection =\n      this.question.formElement.validation.minimumSelection;\n    this.maximumSelection =\n      this.question.formElement.validation.maximumSelection;\n    this.optionType = this.question.formElement.option.optionType;\n    switch (this.optionType) {\n      case 'OPTION':\n        this.customOptions = this.question.formElement.option.customOptions;\n        this.customOptions = this.question.formElement.option.customOptions.map(\n          (option: any) => ({\n            value: option.value,\n            label: option.value,\n          })\n        );\n        if (this.question.answer) {\n          this.initializeCustomOption();\n        }\n        break;\n      case 'LOOKUP':\n        this.lookupTable = this.question.formElement.option.lookupTable;\n        this.fetchDataFromLookup();\n        break;\n      case 'DATABASE':\n        this.database = this.question.formElement.option.database;\n        this.fetchDataFromDatabase();\n        break;\n      case 'API':\n        this.api = this.question.formElement.option.api;\n        this.fetchDataFromAPI();\n        break;\n      default:\n        console.warn('Unknown option type:', this.optionType);\n    }\n\n    if (this.selectionType === 'SINGLE') {\n      this.minimumSelection = 1;\n      this.maximumSelection = 1;\n    }\n\n    if (\n      this.selectionType === 'MULTIPLE' &&\n      !this.minimumSelection &&\n      !this.maximumSelection\n    ) {\n      this.minimumSelection = undefined;\n      this.maximumSelection = undefined;\n    }\n    if (\n      this.question.formElement.scoring &&\n      this.question.formElement.scoring.enableScoring\n    ) {\n      this.maxPossibleScore =\n        this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n      this.question.maxPossibleScore = this.maxPossibleScore;\n    }\n  }\n\n  initializeCustomOption() {\n    this.selectedOptions = [];\n    this.customOptions?.forEach((option: any) => {\n      if (\n        this.question?.answer?.find((a: any) => {\n          if (typeof a === 'string' && a.includes('|')) {\n            const parts = a.split('|');\n            return parts[1] === option.value.toString();\n          }\n          return a.toString() === option.value.toString();\n        })\n      ) {\n        this.selectedOptions.push(option);\n      }\n    });\n    setTimeout(() => {\n      const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n      const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n      this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\n    });\n    if (this.question.childLogics && this.question.answer) {\n      this.updateChildLogics(this.question);\n    }\n  }\n\n  onCheckboxChange(option: any, event: any) {\n    if (this.selectionType === 'SINGLE') {\n      if (event.target.checked) {\n        this.selectedOptions = [option];\n        this.question.answer = [`${option.label}|${option.value}`];\n      } else {\n        this.selectedOptions = [];\n        this.question.answer = [];\n      }\n      this.isMinimumSelectionValid();\n    } else if (this.selectionType === 'MULTIPLE') {\n      if (event.target.checked) {\n        if (!this.selectedOptions.includes(option)) {\n          this.selectedOptions.push(option);\n        }\n      } else {\n        this.selectedOptions = this.selectedOptions.filter(\n          (item) => item !== option\n        );\n      }\n      this.question.answer = this.selectedOptions.map(\n        (item) => `${item.label}|${item.value}`\n      );\n      this.isMinimumSelectionValid();\n    }\n\n    if (\n      this.maximumSelection !== undefined &&\n      this.selectedOptions.length > this.maximumSelection\n    ) {\n      event.target.checked = false;\n      this.selectedOptions = this.selectedOptions.filter(\n        (item) => item !== option\n      );\n      this.question.answer = this.selectedOptions.map(\n        (item) => `${item.label}|${item.value}`\n      );\n      this.isMinimumSelectionValid();\n    }\n\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n    const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n      this.question.answer,\n      this.question\n    );\n    this.question.score = scoreResult?.scores;\n    this.answerChange.emit({\n      answer: this.question.answer,\n      maxPossibleScore: this.maxPossibleScore,\n    });\n    const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n    const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n    this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (this.selectionType === 'SINGLE') {\n          if (this.selectedOptions.length === 0) {\n            childLogic.showLogic = false;\n            this.clearAnswersRecursively(childLogic);\n          } else {\n            if (\n              this.evaluateCondition(\n                this.selectedOptions[0]?.label,\n                childLogic.condition,\n                childLogic.inputValue\n              )\n            ) {\n              childLogic.showLogic = true;\n            } else {\n              childLogic.showLogic = false;\n              this.clearAnswersRecursively(childLogic);\n            }\n          }\n        } else if (this.selectionType === 'MULTIPLE') {\n          if (this.selectedOptions.length === 0) {\n            childLogic.showLogic = false;\n            this.clearAnswersRecursively(childLogic);\n          } else {\n            const selectedLabels = this.selectedOptions.map(\n              (item: any) => item.label\n            );\n            if (\n              this.evaluateMultipleCondition(\n                selectedLabels,\n                childLogic.condition,\n                childLogic.inputValue\n              )\n            ) {\n              childLogic.showLogic = true;\n            } else {\n              childLogic.showLogic = false;\n              this.clearAnswersRecursively(childLogic);\n            }\n          }\n        }\n      });\n    }\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n    const inputValues = Array.isArray(inputValue)\n      ? inputValue.map((val) => val.toString())\n      : [inputValue.toString()];\n\n    switch (condition) {\n      case '!=':\n        return !inputValues.includes(answer);\n      case '=':\n        return inputValues.includes(answer);\n      case 'IN':\n        return inputValues.includes(answer);\n      case 'NOT IN':\n        return !inputValues.includes(answer);\n      default:\n        return false;\n    }\n  }\n\n  evaluateMultipleCondition(\n    answers: any[],\n    condition: string,\n    inputValue: any\n  ): boolean {\n    const inputValues = Array.isArray(inputValue)\n      ? inputValue.map((val) => val.toString())\n      : [inputValue.toString()];\n\n    switch (condition) {\n      case '!=':\n        return answers.every((answer) => !inputValues.includes(answer));\n      case '=':\n        return answers.some((answer) => inputValues.includes(answer));\n      case 'IN':\n        return answers.some((answer) => inputValues.includes(answer));\n      case 'NOT IN':\n        return answers.every((answer) => !inputValues.includes(answer));\n      default:\n        return false;\n    }\n  }\n\n  fetchDataFromLookup() {\n    this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n      (response) => {\n        this.customOptions = response.result.values.map(\n          (item: { value: string; label: string }) => ({\n            value: item.value,\n            label: item.label,\n          })\n        );\n        if (this.question.answer) {\n          this.initializeCustomOption();\n        }\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  fetchDataFromDatabase() {\n    const transformedDatabase = this.transformDatabaseObject(this.database);\n    this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\n      (response) => {\n        if (response.success) {\n          this.customOptions =  response.result?.content?.map(\n            (item: { value: string; label: string }) => ({\n              value: item.value,\n              label: item.label,\n            })\n          );\n          if (this.question.answer) {\n            this.initializeCustomOption();\n          }\n        } else {\n          console.error('Error fetching data from database:', response.message);\n        }\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  transformDatabaseObject(database: any) {\n    return {\n      tableName: database.tableName,\n      valueField: database.valueField,\n      labelField: database.labelField,\n      labelPattern: database?.labelPattern,\n      criteria: database.criteria.map((criteria: any) => ({\n        field: criteria?.field,\n        valueSource: criteria?.valueSource,\n        condition: criteria?.condition,\n        value: criteria?.inputValue,\n        logicalOperator: criteria?.logicalOperator,\n      })),\n    };\n  }\n\n  fetchDataFromAPI() {\n    const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n    const apiConfig = this.api;\n    this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\n      (response) => {\n        let data;\n        if (apiConfig.pathToValue) {\n          data = this.extractDataByPath(response, apiConfig.pathToValue);\n        } else {\n          data = response;\n        }\n\n        this.customOptions = data.map((item: any) => {\n          if (\n            apiConfig.labelPattern &&\n            Array.isArray(apiConfig.labelPattern) &&\n            apiConfig.labelPattern.length > 0\n          ) {\n            let label = '';\n            apiConfig.labelPattern.forEach((pattern: string) => {\n              pattern = pattern.trim();\n              if (allowedChars.includes(pattern)) {\n                label += pattern;\n              } else {\n                if (item[pattern] !== undefined && item[pattern] !== null) {\n                  label += item[pattern] + ' ';\n                }\n              }\n            });\n            return {\n              value: item[apiConfig.valueField.trim()],\n              label: label,\n            };\n          } else {\n            return {\n              value: item[apiConfig.valueField.trim()],\n              label: item[apiConfig.labelField.trim()],\n            };\n          }\n        });\n        if (this.question.answer) {\n          this.initializeCustomOption();\n        }\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  extractDataByPath(data: any, path: string) {\n    return path.split('.').reduce((acc, part) => acc && acc[part], data);\n  }\n\n  isMinimumSelectionValid() {\n    this.validationFailed = false;\n\n    if (this.selectedOptions.length == 0 && this.required) {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validationMessage = 'This is a required question';\n      this.question.validation = false;\n    } else if (this.minimumSelection !== undefined) {\n      if (this.selectionType == 'SINGLE') {\n        this.validationService.clearInvalid(this.buildElementId());\n        if (\n          this.selectedOptions.length < this.minimumSelection &&\n          this.required\n        ) {\n          this.validationFailed = true;\n          this.validationMessage = `Minimum ${this.minimumSelection}  selection(s) required.`;\n          this.question.validationMessage = `Minimum ${this.minimumSelection}  selection(s) required.`;\n          this.question.validation = false;\n        } else {\n          this.validationService.clearInvalid(this.buildElementId());\n          this.question.validation = true;\n        }\n      } else {\n        if (this.selectedOptions.length < this.minimumSelection) {\n          this.validationService.clearInvalid(this.buildElementId());\n          this.validationFailed = true;\n          this.validationMessage = `Minimum ${this.minimumSelection}  selection(s) required.`;\n          this.question.validationMessage = `Minimum ${this.minimumSelection}  selection(s) required.`;\n          this.question.validation = false;\n        } else {\n          this.validationService.clearInvalid(this.buildElementId());\n          this.question.validation = true;\n        }\n      }\n    } else {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.question.validation = true;\n    }\n  }\n\n  getOptions() {\n    if (this.optionType === 'OPTION') {\n      return this.customOptions;\n    } else if (this.optionType === 'LOOKUP') {\n      return Object.values(this.lookupTable);\n    } else if (this.optionType === 'API') {\n      return this.apiOptions.map((option) => option.valueField);\n    } else {\n      return [];\n    }\n  }\n\n  isOptionDisabled(option: any): boolean {\n    return (\n      this.maximumSelection !== undefined &&\n      this.selectedOptions.length >= this.maximumSelection &&\n      !this.selectedOptions.includes(option)\n    );\n  }\n\n  handleValidation(\n    isValid: boolean,\n    message: string = 'This field is required'\n  ) {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return this.inLine || this.inCard\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n    setTimeout(() => {\n      this.whenClauseService.markLoadCompleted();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div\n    class=\"checkboxField-container\"\n    [class.two-column]=\"displayOptionsInColumn\"\n  >\n    <div class=\"form-check\" *ngFor=\"let option of customOptions\">\n      <input\n        class=\"form-check-input\"\n        type=\"checkbox\"\n        [id]=\"question.id+'-'+rowId+'-'+option.value\"\n        [name]=\"option.value + 'Checkbox'\"\n        [value]=\"option.value\"\n        (change)=\"onCheckboxChange(option, $event)\"\n        [disabled]=\"isOptionDisabled(option)\"\n        [checked]=\"selectedOptions.includes(option)\"\n        [attr.data-value]=\"selectedOptions.includes(option)\"\n        [disabled]=\"disableEdit\"\n      />\n      <label\n        class=\"formCheckLabel me-4 mb-2\"\n        [for]=\"question.id+'-'+rowId+'-'+option.value\"\n        >{{ option.label }}</label\n      >\n    </div>\n  </div>\n  <div\n    *ngIf=\"isInvalid && (!inLine || selectedOptions.length === 0)\"\n    class=\"error-message\"\n  >\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport {\n  BsDatepickerConfig,\n  BsDatepickerDirective,\n} from 'ngx-bootstrap/datepicker';\nimport { NgxMaterialTimepickerComponent } from 'ngx-material-timepicker';\nimport { Subscription } from 'rxjs';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-date-time-fields',\n  templateUrl: './date-time-fields.component.html',\n  styleUrls: ['./date-time-fields.component.scss'],\n  providers: [DatePipe],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DateTimeFieldsComponent {\n  bsConfig: Partial<BsDatepickerConfig> = {\n    containerClass: 'theme-custom',\n    isAnimated: true,\n    adaptivePosition: true,\n    showWeekNumbers: false,\n  };\n  \n  rangeBsConfig: Partial<BsDatepickerConfig> = {};\n\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  required: boolean = false;\n  hint: string = '';\n  count: number = 0;\n  minTime: string = '';\n  maxTime: string = '';\n  dateType: string = '';\n  format: string = '';\n  Dateformat: string = '';\n  timeFormat: string = '';\n  minDateOption: string = '';\n  minDate: Date | undefined;\n  maxDateOption: string = '';\n  maxDate: Date | undefined;\n  todayDate: Date = new Date();\n  selectedDate: Date | null = null;\n  selectedTime: string = '';\n  selectedDateRange: string = '';\n  selectedDateAndTime: Date | null = null;\n  validationFailed!: boolean;\n  timeValidationFailed!: boolean;\n  validationMessage: string = '';\n  maxTimeOption: string = '';\n  minTimeOption: string = '';\n  @Input() disableEdit: boolean = false;\n  private elementId: string='';\n  private timePickerOpened = false;\n  private subscriptions: Subscription[] = [];\n  private timePickersOpened: { [key: string]: boolean } = {};\n\n  @ViewChild('datepickerYMD') datepicker!: BsDatepickerDirective;\n  @ViewChild('daterangepicker') dateRangePicker!: BsDatepickerDirective;\n  @ViewChild('dateAndTimePicker') dateAndTimePicker!: BsDatepickerDirective;\n  @ViewChild('fullTime3') fullTime3!: NgxMaterialTimepickerComponent;\n  @ViewChild('fullTime4') fullTime4!: NgxMaterialTimepickerComponent;\n\n\n  constructor(\n    private datePipe: DatePipe,\n    private router: Router,\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  ) { }\n\n  ngOnInit() {\n    this.valueAssigned();\n    this.setRangeConfig();\n  }\n\n  private setRangeConfig() {\n    this.rangeBsConfig = {\n      containerClass: 'theme-custom',\n      isAnimated: true,\n      adaptivePosition: true,\n      showWeekNumbers: false,\n      dateInputFormat: this.format,\n      rangeInputFormat: this.format,\n      displayOneMonthRange: true,  // ← only one month if start/end in same month\n    };\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.dateType = this.question.formElement.appearance.dateType;\n    this.minDateOption = this.question.formElement.validation.minDateOption;\n    this.Dateformat = this.question.formElement.appearance.format.replace(\n      /DD/g,\n      'dd'\n    ).replace(/YYYY/g, 'yyyy');\n\n    this.minDate = this.getMinDate();\n\n\n    this.maxDateOption = this.question.formElement.validation.maxDateOption;\n    this.maxDate = this.getMaxDate();\n    this.setDateTimeFormat();\n    if (this.question?.answer && (this.question?.answer).length > 0)\n      this.selectedDate = this.question?.answer;\n    this.selectedTime = this.question.answer;\n    if (this.question?.answer && (this.question?.answer).length > 0)\n      this.selectedDateAndTime = new Date(this.question.answer);\n    this.selectedDateRange = this.question.answer;\n    this.minTimeOption = this.question.formElement.validation.minTimeOption;\n    this.maxTimeOption = this.question.formElement.validation.maxTimeOption;\n    if (this.dateType !== 'DATE_AND_TIME') {\n      this.minTime = this.getMinTime().toString();\n      this.maxTime = this.getMaxTime().toString();\n    }\n    if (this.dateType === 'DATE_AND_TIME' && this.question?.answer) {\n      const dateTimeArray = this.question.answer\n        ? this.question.answer.split(',')\n        : []; // Fallback to an empty array if `this.question.answer` is undefined\n\n      if (dateTimeArray.length === 2) {\n        const fetchedDate = dateTimeArray[0].trim();\n        const fetchedTime = dateTimeArray[1].trim();\n        this.selectedDate = fetchedDate;\n        this.selectedTime = fetchedTime;\n      }\n\n      const formattedDate = this.datePipe.transform(\n        this.selectedDateAndTime,\n        this.Dateformat\n      );\n      const formatteminDate = this.datePipe.transform(\n        this.minDate,\n        this.Dateformat\n      );\n      const formattemaxDate = this.datePipe.transform(\n        this.maxDate,\n        this.Dateformat\n      );\n\n      if (formattedDate === formatteminDate) {\n        this.minTime = this.getMinTime().toString();\n        if (this.timeFormat === '12') {\n          this.maxTime = '12:00 pm';\n        } else {\n          this.maxTime = '23:59';\n        }\n      }\n      if (formattedDate === formattemaxDate) {\n        this.maxTime = this.getMaxTime().toString();\n        if (this.timeFormat === '12') {\n          this.minTime = '12:00 am';\n        } else {\n          this.minTime = '00:00';\n        }\n      }\n      if (\n        formattedDate !== formatteminDate &&\n        formattedDate !== formattemaxDate\n      ) {\n        if (this.timeFormat === '12') {\n          this.minTime = '12:00 am';\n          this.maxTime = '12:00 pm';\n        } else {\n          this.minTime = '00:00';\n          this.maxTime = '23:59';\n        }\n      }\n    }\n\n    if (!this.minTime || this.minTime.length === 0) {\n      if (this.timeFormat === '12') {\n        this.minTime = '12:00 am';\n      } else {\n        this.minTime = '00:00';\n      }\n    }\n\n    if (!this.maxTime || this.maxTime.length === 0) {\n      if (this.timeFormat === '12') {\n        this.maxTime = '11:59 pm';\n      } else {\n        this.maxTime = '23:59';\n      }\n    }\n  }\n\n  setDateTimeFormat() {\n    switch (this.dateType) {\n      case 'DATE_ONLY':\n        this.format = this.question.formElement.appearance.format;\n        break;\n      case 'TIME_ONLY':\n        this.timeFormat = this.question.formElement.appearance.timeFormat;\n        break;\n      case 'DATE_AND_TIME':\n        this.format = this.question.formElement.appearance.format;\n        this.timeFormat = this.question.formElement.appearance.timeFormat;\n        break;\n      case 'DATE_RANGE':\n        this.format = this.question.formElement.appearance.format;\n        break;\n      case 'MONTH_YEAR':\n        this.format = this.question.formElement.appearance.format;\n        break\n      default:\n        this.format = 'DD/MM/YYYY';\n    }\n  }\n\n  getMinDate(): Date | undefined {\n    if (this.minDateOption === 'CURRENT_DATE') {\n      return this.todayDate;\n    } else if (this.minDateOption === 'CUSTOM') {\n      return new Date(this.question.formElement.validation.minDate);\n    }\n    else if(this.dateType==='MONTH_YEAR')\n    {\n      const minDateStr = this.question.formElement.validation.minDate;\n      const year = new Date(minDateStr).getFullYear(); \n      return new Date(year, 0, 1);\n      \n    }\n    return undefined; // Return undefined if no valid option\n  }\n\n  getMaxDate(): Date | undefined {\n    if (this.maxDateOption === 'CURRENT_DATE') {\n      return this.todayDate;\n    } else if (this.maxDateOption === 'CUSTOM') {\n      return new Date(this.question.formElement.validation.maxDate);\n    }\n    else if(this.dateType==='MONTH_YEAR')\n      {\n        const minDateStr = this.question.formElement.validation.maxDate;\n        const year = new Date(minDateStr).getFullYear(); // Extracts the year\n        return new Date(year, 11, 31); \n        \n      }\n    return undefined;\n  }\n\n  getMinTime() {\n    if (this.minTimeOption) {\n      const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\n\n      if (this.minTimeOption === 'CURRENT_TIME') {\n        const now = new Date();\n        return this.datePipe.transform(now, format) || '';\n      } else if (this.minTimeOption === 'CUSTOM') {\n        const customTime = this.question.formElement.validation.minTime;\n        const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\n\n        // Create a Date object with a fixed date and custom time\n        const customDate = new Date();\n        customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\n\n        return this.datePipe.transform(customDate, format) || '';\n      }\n    }\n\n    // Ensure a default return if no condition is met\n    return '';\n  }\n\n  getMaxTime() {\n    if (this.maxTimeOption) {\n      const format = this.timeFormat === '24' ? 'HH:mm' : 'hh:mm a';\n      if (this.maxTimeOption === 'CURRENT_TIME') {\n        const now = new Date();\n        return this.datePipe.transform(now, format) || '';\n      } else if (this.maxTimeOption === 'CUSTOM') {\n        const customTime = this.question.formElement.validation.maxTime;\n        const [hours, minutes] = customTime.split(':'); // Split by colon to get hours and minutes\n\n        // Create a Date object with a fixed date and custom time\n        const customDate = new Date();\n        customDate.setHours(parseInt(hours, 10), parseInt(minutes, 10), 0, 0); // Set hours and minutes\n\n        return this.datePipe.transform(customDate, format) || '';\n      }\n    }\n\n    return '';\n  }\n\n  openDatePicker() {\n    this.datepicker.toggle();\n  }\n\n  openDateRangePicker() {\n    this.dateRangePicker.toggle();\n  }\n\n  openDateAndTimePicker() {\n    this.dateAndTimePicker.toggle();\n  }\n\n  closeDatepicker() {\n    if (this.dateAndTimePicker) {\n      this.dateAndTimePicker.hide(); // Close the datepicker\n    }\n  }\n\n  validateField() {\n    if (this.dateType === 'DATE_ONLY' || this.dateType === 'MONTH_YEAR') {\n      if (this.selectedDate) {\n        this.question.answer = this.formatDate(this.selectedDate.toString());\n      } else {\n        this.question.answer = '';\n      }\n\n      this.validateDateOnly();\n    } else if (this.dateType === 'TIME_ONLY') {\n      this.question.answer = String(this.selectedTime);\n      this.validateTimeOnly();\n    } else if (this.dateType === 'DATE_AND_TIME') {\n      if (this.selectedDateAndTime) {\n        this.question.answer = this.formatDate(\n          this.selectedDateAndTime.toString()\n        );\n      } else {\n        this.question.answer = '';\n      }\n\n      this.validateDateAndTime();\n    } else {\n      this.question.answer = this.formatDate(this.selectedDateRange);\n      this.validateDateRange();\n    }\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  formatDate(date: string | Date, type: string = 'dateTime'): string {\n    switch (this.dateType) {\n      case 'DATE_ONLY':\n        return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n    \n        case 'MONTH_YEAR': \n        const extracted = this.extractMonthYear(this.selectedDate?.toString());\n    \n        if (!extracted) {\n            console.error(\"Invalid date format\");\n            return '';\n        }\n    \n        // Create a Date object with the extracted month and year\n        this.selectedDate = new Date(extracted.year, extracted.month - 1, 1); // Month is 0-based in JS\n    \n        // Return formatted date\n        return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n    \n        \n          // return this.datePipe.transform(this.selectedDate, this.Dateformat) || '';\n      case 'DATE_AND_TIME':\n        const formattedDate = this.datePipe.transform(\n          this.selectedDateAndTime,\n          this.Dateformat\n        );\n        const formatteminDate = this.datePipe.transform(\n          this.minDate,\n          this.Dateformat\n        );\n        const formattemaxDate = this.datePipe.transform(\n          this.maxDate,\n          this.Dateformat\n        );\n\n        if (formattedDate === formatteminDate) {\n          this.minTime = this.getMinTime().toString();\n          this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\n        }\n\n        if (formattedDate === formattemaxDate) {\n          this.maxTime = this.getMaxTime().toString();\n          this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\n        }\n\n        if (\n          formattedDate !== formatteminDate &&\n          formattedDate !== formattemaxDate\n        ) {\n          this.minTime = this.timeFormat === '12' ? '12:00 am' : '00:00';\n          this.maxTime = this.timeFormat === '12' ? '11:59 pm' : '23:59';\n        }\n\n        const formattedTime = this.selectedTime || ''; // Ensure selectedTime is handled properly\n        if (formattedDate && formattedTime) {\n          return `${formattedDate}, ${formattedTime}`;\n        }\n        return '';\n      case 'DATE_RANGE':\n        const dates = date as unknown as Date[];\n\n        // Ensure dates is defined and is an array\n        if (Array.isArray(dates) && dates.length === 2) {\n          const start = this.datePipe.transform(dates[0], this.Dateformat);\n          const end = this.datePipe.transform(dates[1], this.Dateformat);\n          return `${start} - ${end}`;\n        }\n\n        return '';\n      default:\n        return this.datePipe.transform(date, this.Dateformat) || '';\n    }\n  }\n\nextractMonthYear(dateInput: string | Date | null | undefined): { month: number, year: number } | null {\n  if (!dateInput) {\n    return null;\n  }\n\n  // Handle string case where date is passed as a stringified Date object\n  if (typeof dateInput === \"string\") {\n    const parsedDate = new Date(dateInput);\n    if (!isNaN(parsedDate.getTime())) {\n      return { month: parsedDate.getMonth() + 1, year: parsedDate.getFullYear() };\n    }\n\n    // Handle string formats like \"MM/YYYY\" or \"YYYY/MM\"\n    const parts = dateInput.split(/[-/]/); // Split by '-' or '/'\n    if (parts.length !== 2) {\n      return null; // Invalid format\n    }\n\n    let year = 0, month = 0;\n\n\n    if (parts[0].length === 4) {\n      // Format: YYYY/MM or YYYY-MM\n      year = parseInt(parts[0], 10);\n      month = parseInt(parts[1], 10);\n    } else {\n      // Format: MM/YYYY or MM-YYYY\n      month = parseInt(parts[0], 10);\n      year = parseInt(parts[1], 10);\n    }\n\n    return { month, year };\n  }\n\n  // Handle actual Date object case\n  if (dateInput instanceof Date && !isNaN(dateInput.getTime())) {\n    return { month: dateInput.getMonth() + 1, year: dateInput.getFullYear() };\n  }\n\n  return null; // Invalid input\n}\n\n\n  \n  validateDateOnly() {\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.selectedDate) {\n      this.validationFailed = true;\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.question.validation = true;\n    }\n  }\n  validateTimeOnly() {\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.selectedTime) {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.question.validation = true;\n    }\n  }\n  validateDateRange() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.selectedDateRange) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else {\n      this.question.validation = true;\n    }\n  }\n  validateDateAndTime() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.timeValidationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.selectedDateAndTime) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else if (this.required && !this.selectedTime) {\n      this.timeValidationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else {\n      this.question.validation = true;\n    }\n  }\n\n  convertToISODate(\n    dateInput: [number, number, number] | string | null | undefined\n  ): Date | null {\n    if (!dateInput) {\n      return null; // Return null if dateInput is null, undefined, or any falsy value\n    }\n\n    let year, month, day;\n\n    if (Array.isArray(dateInput)) {\n      // Extract year, month, and day from array input\n      [year, month, day] = dateInput;\n\n      // Validate the array format\n      if (\n        typeof year !== 'number' ||\n        typeof month !== 'number' ||\n        typeof day !== 'number' ||\n        isNaN(year) ||\n        isNaN(month) ||\n        isNaN(day) ||\n        !Number.isInteger(year) ||\n        !Number.isInteger(month) ||\n        !Number.isInteger(day) ||\n        month < 1 ||\n        month > 12 ||\n        day < 1 ||\n        day > 31\n      ) {\n        return null;\n      }\n    } else if (typeof dateInput === 'string') {\n      // Check if the string matches the YYYY-MM-DD format\n      const dateParts = dateInput.split('-');\n      if (dateParts.length !== 3) return null;\n\n      [year, month, day] = dateParts.map(Number);\n\n      // Validate the parsed parts\n      if (\n        isNaN(year) ||\n        isNaN(month) ||\n        isNaN(day) ||\n        !Number.isInteger(year) ||\n        !Number.isInteger(month) ||\n        !Number.isInteger(day) ||\n        month < 1 ||\n        month > 12 ||\n        day < 1 ||\n        day > 31\n      ) {\n        return null;\n      }\n    } else {\n      return null; // Unsupported input type\n    }\n\n    // Create a Date object (month is 0-based, so subtract 1)\n    const date = new Date(year, month - 1, day);\n\n    // Verify if the Date object matches the provided year, month, and day\n    if (\n      date.getFullYear() !== year ||\n      date.getMonth() !== month - 1 ||\n      date.getDate() !== day\n    ) {\n      return null;\n    }\n\n    return date;\n  }\n\n  ngAfterViewInit(): void {\n    this.initializeTimePickers();\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n\n    if (this.subscriptions.length === 0) {\n      const routerSub = this.router.events.subscribe((event) => {\n        if (event instanceof NavigationEnd) {\n          this.closeTimepickers();\n        }\n      });\n      this.subscriptions.push(routerSub);\n    }\n  }\n\n  ngAfterViewChecked(): void {\n    // Ensure time picker subscriptions are attached even after conditional rendering\n    this.initializeTimePickers();\n  }\n\n  ngOnDestroy(): void {\n    this.closeTimepickers();\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n    // Unsubscribe from all subscriptions\n    this.subscriptions.forEach((sub) => {\n      if (sub && typeof sub.unsubscribe === 'function') {\n        sub.unsubscribe();\n      }\n    });\n  }\n\n  /**\n   * Initialize and track time pickers\n   */\n  private initializeTimePickers(): void {\n    // Track fullTime3 if available\n    if (this.fullTime3 && !this.timePickersOpened['fullTime3']) {\n      this.trackTimePicker(this.fullTime3, 'fullTime3');\n    }\n\n    // Track fullTime4 if it exists after conditional rendering\n    if (this.fullTime4 && !this.timePickersOpened['fullTime4']) {\n      this.trackTimePicker(this.fullTime4, 'fullTime4');\n    }\n  }\n\n  private trackTimePicker(picker: NgxMaterialTimepickerComponent, pickerName: string): void {\n    if (picker) {\n      const sub = picker.opened.subscribe(() => {\n        this.timePickersOpened[pickerName] = true; \n      });\n\n      this.subscriptions.push(sub);\n    }\n  }\n\n  private closeTimepickers(): void {\n    if (this.fullTime3 && this.timePickersOpened['fullTime3'] && typeof this.fullTime3.close === 'function') {\n      this.fullTime3.close();\n      this.timePickersOpened['fullTime3'] = false;\n    }\n\n    // Check for fullTime4 only if it exists\n    if (this.fullTime4 && this.timePickersOpened['fullTime4'] && typeof this.fullTime4.close === 'function') {\n      this.fullTime4.close();\n      this.timePickersOpened['fullTime4'] = false;\n    }\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <ng-container *ngIf=\"dateType === 'DATE_ONLY'\">\n    <!-- Date only picker -->\n    <div class=\"input-container\">\n      <input\n        class=\"form-control height\"\n        #datepickerYMD=\"bsDatepicker\"\n        bsDatepicker\n        [minDate]=\"minDate ? minDate : undefined\"\n        [maxDate]=\"maxDate ? maxDate : undefined\"\n        [bsConfig]=\"{ dateInputFormat: format, containerClass: 'theme-custom' }\"\n        [(ngModel)]=\"selectedDate\"\n        (blur)=\"validateField()\"\n        (ngModelChange)=\"validateField()\"\n        [class.invalid]=\"validationFailed\"\n        placeholder=\"Select date\"\n        container=\"body\"\n        placement=\"top\"\n        [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\n        [disabled]=\"disableEdit\"\n      />\n      <i\n        class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n        (click)=\"openDatePicker()\"\n      ></i>\n    </div>\n    <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\n      {{ errorMessage }}\n    </div>\n    <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\n      {{ validationMessage }}\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"dateType === 'MONTH_YEAR'\">\n    <div class=\"input-container\">\n      <input\n        class=\"form-control height\"\n        #datepickerYMD=\"bsDatepicker\"\n        bsDatepicker\n        [minDate]=\"minDate ? minDate : undefined\"\n        [maxDate]=\"maxDate ? maxDate : undefined\"\n        [bsConfig]=\"{\n          containerClass: 'theme-dark-blue',\n          isAnimated: true,\n          adaptivePosition: true,\n          showWeekNumbers: false,\n          minMode: 'month',\n          dateInputFormat: format\n        }\"\n        [(ngModel)]=\"selectedDate\"\n        (blur)=\"validateField()\"\n        (ngModelChange)=\"validateField()\"\n        [class.invalid]=\"validationFailed\"\n        placeholder=\"Select date\"\n        container=\"body\"\n        placement=\"top\"\n        [class.invalid-question]=\"isInvalid && (!inLine || !selectedDate)\"\n        [disabled]=\"disableEdit\"\n      />\n      <i\n        class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n        (click)=\"openDatePicker()\"\n      ></i>\n    </div>\n    <div *ngIf=\"isInvalid && (!inLine || !selectedDate)\" class=\"error-message\">\n      {{ errorMessage }}\n    </div>\n    <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n      {{ validationMessage }}\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"dateType === 'TIME_ONLY'\">\n    <!-- Time picker -->\n\n    <div class=\"input-container\">\n      <input\n        class=\"form-control height appearanceInput mt-3\"\n        aria-label=\"Select time\"\n        placeholder=\"Select time\"\n        readonly\n        [format]=\"timeFormat === '24' ? 24 : 12\"\n        [ngxTimepicker]=\"fullTime3\"\n        [(ngModel)]=\"selectedTime\"\n        [max]=\"maxTime\"\n        [min]=\"minTime\"\n        (ngModelChange)=\"validateField()\"\n        [class.invalid]=\"validationFailed\"\n        [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\n        container=\"body\"\n        placement=\"top\"\n        [disabled]=\"disableEdit\"\n      />\n\n      <i\n        id=\"startDateIcon\"\n        class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n        (click)=\"fullTime3.open()\"\n        style=\"cursor: pointer\"\n      ></i>\n      <ngx-material-timepicker #fullTime3></ngx-material-timepicker>\n    </div>\n    <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\n      {{ errorMessage }}\n    </div>\n    <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n      {{ validationMessage }}\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"dateType === 'DATE_AND_TIME'\">\n    <!-- Date and time picker -->\n    <div class=\"input-container\">\n      <input\n        #dateAndTimePicker=\"bsDatepicker\"\n        type=\"text\"\n        class=\"form-control height\"\n        [minDate]=\"minDate ? minDate : undefined\"\n        [maxDate]=\"maxDate ? maxDate : undefined\"\n        [bsConfig]=\"{\n          dateInputFormat: format,\n          containerClass: 'theme-custom'\n        }\"\n        placeholder=\"Select date\"\n        container=\"body\"\n        placement=\"top\"\n        bsDatepicker\n        [class.invalid]=\"validationFailed\"\n        [(ngModel)]=\"selectedDateAndTime\"\n        (blur)=\"validateField()\"\n        (ngModelChange)=\"validateField()\"\n        [class.invalid-question]=\"isInvalid\"\n        [disabled]=\"disableEdit\"\n      />\n      <i\n        class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n        (click)=\"openDateAndTimePicker()\"\n      ></i>\n    </div>\n    <div\n      class=\"input-container\"\n      *ngIf=\"selectedDateAndTime && selectedDateAndTime != null\"\n    >\n      <input\n        class=\"form-control height appearanceInput mt-3\"\n        aria-label=\"Select time\"\n        placeholder=\"Select time\"\n        readonly\n        [format]=\"timeFormat === '24' ? 24 : 12\"\n        [ngxTimepicker]=\"fullTime4\"\n        [(ngModel)]=\"selectedTime\"\n        [max]=\"maxTime\"\n        [min]=\"minTime\"\n        (ngModelChange)=\"validateField()\"\n        (focus)=\"closeDatepicker()\"\n        [class.invalid]=\"timeValidationFailed\"\n        [class.invalid-question]=\"isInvalid && (!inLine || !selectedTime)\"\n        container=\"body\"\n        placement=\"top\"\n        [disabled]=\"disableEdit\"\n      />\n\n      <i\n        id=\"startDateIcon\"\n        class=\"fa-solid fa-clock text-primary fs-6 clock-icon\"\n        (click)=\"fullTime4.open()\"\n        style=\"cursor: pointer\"\n      ></i>\n      <ngx-material-timepicker #fullTime4></ngx-material-timepicker>\n    </div>\n    <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\n    <div *ngIf=\"isInvalid && (!inLine || !selectedTime)\" class=\"error-message\">\n      {{ errorMessage }}\n    </div>\n    <div\n      *ngIf=\"(validationFailed || timeValidationFailed)  && !isInvalid\"\n      class=\"text-danger mt-2\"\n    >\n      {{ validationMessage }}\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"dateType === 'DATE_RANGE'\">\n    <!-- Date range picker -->\n    <div class=\"input-container\">\n      <input\n        type=\"text\"\n        class=\"form-control height\"\n        #daterangepicker=\"bsDaterangepicker\"\n        bsDaterangepicker\n        placeholder=\"Select date\"\n        [minDate]=\"minDate\"\n        [maxDate]=\"maxDate\"\n        [bsConfig]=\"{\n          rangeInputFormat: format,\n          dateInputFormat: format,\n          containerClass: 'theme-custom',\n          displayOneMonthRange: true\n        }\"\n        [(ngModel)]=\"selectedDateRange\"\n        (blur)=\"validateField()\"\n        (ngModelChange)=\"validateField()\"\n        [class.invalid]=\"validationFailed\"\n        [class.invalid-question]=\"isInvalid && (!inLine || !selectedDateRange)\"\n        container=\"body\"\n        placement=\"top\"\n        [disabled]=\"disableEdit\"\n      />\n      <i\n        class=\"fa-solid fa-calendar-days calendar-icon text-primary fs-5\"\n        (click)=\"openDateRangePicker()\"\n      ></i>\n    </div>\n    <div *ngIf=\"isInvalid && (!inLine || !selectedDateRange)\" class=\"error-message\">\n      {{ errorMessage }}\n    </div>\n    <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mt-2\">\n      {{ validationMessage }}\n    </div>\n  </ng-container>\n</div>\n","import { Logic } from './../../models/logic.model';\nimport {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n} from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\ninterface DropDownData {\n  value: string;\n  label: string;\n  image: string;\n}\n\n@Component({\n  selector: 'lib-drop-down-fields',\n  templateUrl: './drop-down-fields.component.html',\n  styleUrls: ['./drop-down-fields.component.scss'],\n})\nexport class DropDownFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{\n    answer: any;\n    maxPossibleScore?: number;\n  }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  selectionType: string = '';\n  minimumSelection: number = 0;\n  maximumSelection: number = 0;\n  optionType: string = '';\n  lookupTable: string = '';\n  customOptions: DropDownData[] = [];\n  originalOptions: DropDownData[] = [];\n  database: any = {};\n  api: any = {};\n  originalApi: any = {};\n  selectedValue: any[] = [];\n  validationFailed!: boolean;\n  validationMessage: string = '';\n  private elementId: string = '';\n  hasMoreData: boolean = true;\n  maxPossibleScore?: number;\n  selectedValues: any[] = [];\n  dbPageIndex: number = 0;\n  dbPageSize: number = 10;\n  dbTotalPages: number = 0;\n  @Input() disableEdit: boolean = false;\n\n  constructor(\n    private formService: FormService,\n    private cdr: ChangeDetectorRef,\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private scoreCalcService: ScoreCalculationService,\n    private whenClauseService:WhenClauseService,\n    private hiddenFieldService:HiddenFieldService\n  ) {}\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  onValueChange(newValue: any) {\n    this.selectedValue = newValue;\n    this.selectItems();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.selectionType = this.question.formElement.appearance.selectionType;\n    this.minimumSelection =\n      this.question.formElement.validation.minimumSelection;\n    this.maximumSelection =\n      this.question.formElement.validation.maximumSelection;\n    this.optionType = this.question.formElement.option.optionType;\n\n    // --- Check if answer is present ---\n    if (this.question.answer && Array.isArray(this.question.answer)) {\n      if (this.optionType === 'API') {\n        this.api = this.question.formElement.option.api;\n        this.originalApi = JSON.parse(JSON.stringify(this.api));\n        // ✅ Check if pagination is enabled (pageIndex + pageSize exist in params with valueSource)\n        const hasPagination =\n          this.api?.params?.some((p: any) => p.valueSource === 'PAGE_INDEX') &&\n          this.api?.params?.some((p: any) => p.valueSource === 'PAGE_SIZE');\n\n        if (hasPagination) {\n          // ✅ Populate selected values from answer\n          this.selectedValues = this.question.answer.map((ans: string) => {\n            const parts = ans.split('|');\n            return parts.length > 1 ? parts[1] : parts[0];\n          });\n        }\n      }\n\n       else if (this.optionType === 'DATABASE') {\n        this.selectedValues = this.question.answer.map((ans: string) => {\n          const parts = ans.split('|');\n          return parts.length > 1 ? parts[1] : parts[0];\n        })};\n    }\n\n\n    // --- Handle different option types ---\n    switch (this.optionType) {\n      case 'OPTION':\n        this.customOptions = this.question.formElement.option.customOptions.map(\n          (option: { value: string }) => ({\n            label: option.value,\n            value: option.value,\n            image: '',\n          })\n        );\n        this.originalOptions = [...this.customOptions];\n        if (this.question.answer) {\n          this.initializeCustomOption();\n        }\n        break;\n\n      case 'LOOKUP':\n        this.lookupTable = this.question.formElement.option.lookupTable;\n        this.fetchDataFromLookup();\n        break;\n\n      case 'DATABASE':\n        this.database = this.question.formElement.option.database;\n        this.fetchDataFromDatabase();\n        break;\n\n      case 'API':\n        if (!this.api || Object.keys(this.api).length === 0) {\n          this.api = this.question.formElement.option.api;\n          this.originalApi = JSON.parse(JSON.stringify(this.api));\n        }\n        this.fetchDataFromAPI();\n        break;\n\n      default:\n        console.warn('Unknown option type:', this.optionType);\n    }\n\n    // --- Scoring ---\n    if (\n      this.question.formElement.scoring &&\n      this.question.formElement.scoring.enableScoring\n    ) {\n      this.maxPossibleScore =\n        this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n      this.question.maxPossibleScore = this.maxPossibleScore;\n    }\n  }\n\n  initializeCustomOption() {\n\n    this.customOptions.forEach((option: any) => {\n      const isMatch = this.question?.answer?.some((a: any) => {\n        const parts = a.trim().split('|');\n        if (parts.length === 2) {\n          const label = parts[0];\n          const value = parts[1];\n          return value == option.value && label == option.label;\n        } else {\n          return false;\n        }\n      });\n      if (isMatch) {\n        const alreadyExists = this.selectedValue.some(\n      (item: any) => item.value === option.value\n    );\n\n    if (!alreadyExists) {\n      this.selectedValue = [...this.selectedValue, option];\n    }\n\n        setTimeout(() => {\n          const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n          const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n          this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers,true);\n        });\n      }\n      if (this.question.childLogics && this.question.answer) {\n        this.updateChildLogics(this.question);\n      }\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  transformDatabaseObject(database: any,selectedValues:string[]=[]) {\n    return {\n      tableName: database.tableName,\n      valueField: database.valueField,\n      labelField: database.labelField,\n      labelPattern: database?.labelPattern,\n      selectedValues: selectedValues,\n      criteria: database.criteria.map((criteria: any) => ({\n        field: criteria.field,\n        valueSource: criteria?.valueSource,\n        condition: criteria.condition,\n        value: criteria.inputValue,\n        logicalOperator: criteria.logicalOperator,\n      })),\n    };\n  }\n\n  fetchDataFromDatabase(searchString:string='') {\n   const value= this.question?.answer?.map((a: string) => {\n    const [label, value] = a.split('|');\n    return {\n      label,\n      value\n    };\n  })\n    const transformedDatabase = this.transformDatabaseObject(this.database,value);\n    this.formService.fetchDataFromDatabase(transformedDatabase,this.dbPageIndex,this.dbPageSize,searchString,true).subscribe(\n      (response) => {\n        if (response.success) {\n          this.dbTotalPages = response.result.totalPages;\n          const newOptions =\n            response.result?.content?.map(\n              (item: { value: string; label: string }) => ({\n                value: item.value,\n                label: item.label,\n              })\n            ) || [];\n          if (this.dbPageIndex === 0) {\n            this.customOptions = [...newOptions];\n          }\n          else {\n            this.customOptions = [\n              ...this.customOptions,\n              ...newOptions,\n            ];\n          }\n\n\n          this.originalOptions = [...this.customOptions];\n\n          if (this.question.answer) {\n            this.initializeCustomOption();\n          }\n        } else {\n          console.error('Error fetching data from database:', response.message);\n        }\n        this.cdr.detectChanges();\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n        this.cdr.detectChanges();\n      }\n    );\n  }\n\n  fetchDataFromLookup() {\n    this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n      (response) => {\n        this.customOptions = response.result.values.map(\n          (item: { value: string; label: string }) => ({\n            value: item.value,\n            label: item.label,\n          })\n        );\n        this.originalOptions = [...this.customOptions];\n        if (this.question.answer) {\n          this.initializeCustomOption();\n        }\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  fetchDataFromAPI(append: boolean = false, search: boolean = false) {\n    const apiConfig = JSON.parse(JSON.stringify(this.api));\n    if (!this.hasMoreData && append) {\n      // If no more data from last call and this is an append call, skip API\n      return;\n    }\n    const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n\n    if (search) {\n      if (apiConfig.params) {\n        apiConfig.params = apiConfig.params.filter(\n          (p: any) => p.valueSource !== 'SELECTED_VALUES'\n        );\n      }\n      if (apiConfig.headers) {\n        apiConfig.headers = apiConfig.headers.filter(\n          (h: any) => h.valueSource !== 'SELECTED_VALUES'\n        );\n      }\n    }\n\n    this.formService\n      .fetchDataFromExternalAPI(apiConfig, this.selectedValues)\n      .subscribe(\n        (response) => {\n          let data;\n          if (apiConfig.pathToValue) {\n            data = this.extractDataByPath(response, apiConfig.pathToValue);\n          } else {\n            data = response;\n          }\n\n          const newOptions = data.map((item: any) => {\n            if (\n              apiConfig.labelPattern &&\n              Array.isArray(apiConfig.labelPattern) &&\n              apiConfig.labelPattern.length > 0\n            ) {\n              let label = '';\n              apiConfig.labelPattern.forEach((pattern: string) => {\n                pattern = pattern.trim();\n                if (allowedChars.includes(pattern)) {\n                  label += pattern;\n                } else {\n                  if (item[pattern] !== undefined && item[pattern] !== null) {\n                    label += item[pattern]+' ';\n                  }\n                }\n              });\n              return {\n                value: item[apiConfig.valueField.trim()],\n                label: label,\n              };\n            } else {\n              return {\n                value: item[apiConfig.valueField.trim()],\n                label: item[apiConfig.labelField.trim()],\n              };\n            }\n          });\n\n          if (append) {\n            this.customOptions = [...this.customOptions, ...newOptions];\n          } else {\n            this.customOptions = newOptions;\n          }\n          this.originalOptions = [...this.customOptions];\n\n          // If no new data returned, mark as last page\n          if (!newOptions.length) {\n            this.hasMoreData = false;\n          }\n\n          if (this.question.answer && !append && !search) {\n            this.initializeCustomOption();\n          }\n        },\n        (error) => {\n          console.error('HTTP Error:', error);\n        }\n      );\n  }\n\n  extractDataByPath(data: any, path: string) {\n    return path.split('.').reduce((acc, part) => acc && acc[part], data);\n  }\n\n  selectItems(event?: any) {\n    this.selectedValue = event;\n\n    const valuesArray = this.selectedValue.map(\n      (item) => `${item.label}|${item.value}`\n    );\n    this.question.answer = valuesArray;\n    const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n      this.question.answer,\n      this.question\n    );\n    this.question.score = scoreResult?.scores;\n\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.selectedValue.length == 0 && this.required) {\n      this.validationFailed = true;\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationMessage = `This is a required question`;\n      this.question.validation = false;\n      this.question.validationMessage = `This is a required question`;\n    } else if (\n      this.selectedValue.length < this.minimumSelection ||\n      this.selectedValue.length > this.maximumSelection\n    ) {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationFailed = true;\n      this.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\n      this.question.validation = false;\n      this.question.validationMessage = `selected options must be between ${this.minimumSelection} & ${this.maximumSelection}`;\n    } else {\n      this.validationService.clearInvalid(this.buildElementId());\n      this.question.validation = true;\n    }\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n    this.answerChange.emit({\n      answer: this.question.answer,\n      maxPossibleScore: this.maxPossibleScore,\n    });\n    if(this.selectionType === 'SINGLE' && this.selectedValue.length > 0){\n      this.search('');\n    }\n    const answers = Array.isArray(this.question.answer) ? this.question.answer : [];\n    const parsedAnswers = answers.map((ans:any) => ans.split('|')[1]);\n    this.whenClauseService.setQuestionAnswer(this.question.id,parsedAnswers);\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (this.selectionType == 'SINGLE') {\n          if (this.selectedValue.length == 0) {\n            childLogic.show = false;\n            this.clearAnswersRecursively(childLogic);\n          } else {\n            const selectedValue = this.selectedValue[0]?.label;\n            if (\n              this.evaluateCondition(\n                selectedValue,\n                childLogic.condition,\n                childLogic.inputValue\n              )\n            ) {\n              childLogic.showLogic = true;\n            } else {\n              childLogic.showLogic = false;\n              this.clearAnswersRecursively(childLogic);\n            }\n          }\n        } else if (this.selectionType === 'MULTIPLE') {\n          if (this.selectedValue.length == 0) {\n            childLogic.show = false;\n            this.clearAnswersRecursively(childLogic);\n          } else {\n            const selectedValues = this.selectedValue.map(\n              (item: any) => item.label\n            );\n            if (\n              this.evaluateMultipleCondition(\n                selectedValues,\n                childLogic.condition,\n                childLogic.inputValue\n              )\n            ) {\n              childLogic.showLogic = true;\n            } else {\n              childLogic.showLogic = false;\n              this.clearAnswersRecursively(childLogic);\n            }\n          }\n        }\n      });\n    }\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n    const stringInputValue = Array.isArray(inputValue)\n      ? inputValue.map((val) => val.toString().toLowerCase())\n      : inputValue.toLowerCase();\n    answer = Array.isArray(answer)\n      ? answer?.map((ans) => ans.toLowerCase())\n      : answer.toLowerCase();\n    switch (condition) {\n      case '!=':\n        return answer != inputValue;\n      case '=':\n        return answer == inputValue;\n      case 'IN':\n        return stringInputValue.includes(answer);\n      case 'NOT IN':\n        return !stringInputValue.includes(answer);\n      default:\n        return false;\n    }\n  }\n\n  evaluateMultipleCondition(\n    answers: any,\n    condition: string,\n    inputValue: any\n  ): boolean {\n    const stringInputValue = Array.isArray(inputValue)\n      ? inputValue.map((val) => val.toString())\n      : inputValue.toString();\n    answers = Array.isArray(answers)\n      ? answers?.map((answer) => answer.toLowerCase())\n      : answers.toLowerCase();\n    switch (condition) {\n      case '!=':\n        return answers.every((answer: any) => answer != stringInputValue);\n      case '=':\n        return answers.some((answer: any) => answer == stringInputValue);\n      case 'IN':\n        return answers.some((answer: any) => stringInputValue.includes(answer));\n      case 'NOT IN':\n        return answers.every(\n          (answer: any) => !stringInputValue.includes(answer)\n        );\n      default:\n        return false;\n    }\n  }\n\n  handleValidation(\n    isValid: boolean,\n    message: string = 'This field is required'\n  ) {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return this.inLine || this.inCard\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  private hasPagination(apiConfig: any): boolean {\n    const checkValueSource = (arr: any[]) =>\n      Array.isArray(arr) &&\n      arr.some(\n        (item) =>\n          item?.valueSource === 'PAGE_INDEX' ||\n          item?.valueSource === 'PAGE_SIZE'\n      );\n\n    return (\n      checkValueSource(apiConfig.headers) ||\n      checkValueSource(apiConfig.params) ||\n      checkValueSource(apiConfig.pathVariables)\n    );\n  }\n\n  getNextSetOfItems(event: any) {\n    const element = event.target;\n    if (\n      Math.floor(element.scrollHeight - element.scrollTop) <=\n        element.clientHeight &&\n      this.hasPagination(this.api) // Only if pagination is configured\n    ) {\n      this.loadNextPage();\n    }\n\n\n\n    else if( this.optionType === 'DATABASE' && this.dbPageIndex < this.dbTotalPages){\n      this.dbPageIndex +=1;\n      this.fetchDataFromDatabase();\n    }\n  }\n\n  private loadNextPage() {\n    if (!this.hasMoreData) return;\n    // Find the PAGE_INDEX param/header/pathVar and increment it\n    const updateValueSource = (arr: any[]) => {\n      if (!Array.isArray(arr)) return;\n      arr.forEach((item) => {\n        if (item.valueSource === 'PAGE_INDEX') {\n          let currentPage = parseInt(item.inputValue || '0', 10);\n          item.inputValue = (currentPage + 1).toString();\n        }\n      });\n    };\n\n    updateValueSource(this.api.headers);\n    updateValueSource(this.api.params);\n    updateValueSource(this.api.pathVariables);\n\n    // Call your fetch function again\n    this.fetchDataFromAPI(true);\n  }\n\n  search(searchTerm: string) {\n    if( this.optionType ==='DATABASE'){\n      this.dbPageIndex =0;\n      this.fetchDataFromDatabase(searchTerm.trim());\n    }\n    else if (this.optionType !== 'API') {\n      // 🔹 Local search\n      if (searchTerm && searchTerm.trim() !== '') {\n        const lowerSearch = searchTerm.toLowerCase();\n        this.customOptions = this.originalOptions.filter((option) =>\n          option.label?.toLowerCase().includes(lowerSearch)\n        );\n      } else {\n        // Reset to full list when search is cleared\n        this.customOptions = [...this.originalOptions];\n      }\n    }\n    else {\n      // 🔹 API search\n      if (searchTerm && searchTerm.trim() !== '') {\n        // Inject search term into API config (headers or params)\n        this.injectSearchString(searchTerm.trim());\n      } else {\n        // 🔹 Clear the search string from API config when input is empty\n        this.injectSearchString('');\n      }\n\n      // Reset pagination\n      this.hasMoreData = true;\n      // Fetch fresh results\n      this.fetchDataFromAPI(false, true);\n    }\n  }\n\n  injectSearchString(searchTerm: string) {\n    // Always work on a fresh copy, don’t mutate this.api directly\n    this.api = JSON.parse(JSON.stringify(this.originalApi));\n\n    if (this.api?.params) {\n      this.api.params.forEach((p: any) => {\n        if (p.valueSource === 'SEARCH_STRING') {\n          p.inputValue = searchTerm;\n        }\n      });\n    }\n\n    if (this.api?.headers) {\n      this.api.headers.forEach((h: any) => {\n        if (h.valueSource === 'SEARCH_STRING') {\n          h.inputValue = searchTerm;\n        }\n      });\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n    setTimeout(() => {\n      this.whenClauseService.markLoadCompleted();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <!-- <lib-dropdown\n    [items]=\"customOptions\"\n    [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n    (click)=\"selectItems()\"\n    [(selectedItems)]=\"selectedValue\"\n  ></lib-dropdown> -->\n\n  <lib-dropdown\n    [placeholder]=\"'select'\"\n    [items]=\"customOptions\"\n    [multiple]=\"selectionType === 'SINGLE' ? false : true\"\n    [disable]=\"disableEdit\"\n    (selectedItemsChange)=\"selectItems($event)\"\n    [(selectedItems)]=\"selectedValue\"\n    (onDropdownScroll)=\"getNextSetOfItems($event)\"\n    (onSearch)=\"search($event)\"\n  ></lib-dropdown>\n\n  <!-- (onDropdownScroll)=\"getNextSetOfItems($event)\"\n  (onSearch)=\"search($event)\" -->\n  <div\n    *ngIf=\"isInvalid && (!inLine || selectedValue.length === 0)\"\n    class=\"error-message\"\n  >\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mb-2\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\nexport interface Attachment {\n  fileId: string;\n  fileName: string;\n  fileUrl: string;\n  previewUrl?: string;\n}\n\n@Component({\n  selector: 'lib-file-picker-fields',\n  templateUrl: './file-picker-fields.component.html',\n  styleUrls: ['./file-picker-fields.component.scss'],\n})\nexport class FilePickerFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n  @Output() inlineDeleteFiles = new EventEmitter<any>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  multiFileUploads: boolean = true;\n  fileTypes: string[] = [];\n  fileSize: number = 0;\n  fileSizeUnit: string = '';\n  totalFileSize: number = 0;\n  initialFileSize: number = 0;\n  initialTotalSize: number = 0;\n  dragAndDrop: boolean = false;\n  previewUploadedFiles: boolean = true;\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  attachments: Attachment[] = [];\n  timeoutId: any;\n\n  avatarPicker: boolean = false;\n  files: any;\n  private elementId: string='';\n  apiUrl:string = '';\n  selectedFile!: File;\n  selectedFiles: any = [];\n  @Input() disableEdit: boolean = false;\n  header:any;\n  \n  constructor(\n      private validationService: ValidationService,\n      private tracker: ElementTrackerService,\n      private dataService: DataService,\n      private whenClauseService:WhenClauseService,\n      private http: HttpClient,\n      private hiddenFieldService:HiddenFieldService\n    ) {\n      this.dataService.apiUrl$.subscribe((data) => {\n        this.apiUrl = data+'/api/cdn/preview?url=';\n      });\n\n      this.dataService.header$.subscribe((data) => {\n        this.header = data;\n      });\n    }\n\n\n    ngOnInit() {\n      this.valueAssigned();\n    }\n  \n    valueAssigned() {\n      this.count = this.question.count;\n      this.required = this.question.required;\n      this.hint = this.question.hint;\n      this.multiFileUploads =\n        this.question.formElement.appearance.multiFileUploads;\n      this.dragAndDrop = this.question.formElement.appearance.dragAndDrop;\n      this.previewUploadedFiles =\n        this.question.formElement.appearance.previewUploadedFiles;\n      this.fileTypes = this.question.formElement.validation.fileTypes;\n      this.fileSizeUnit = this.question.formElement.validation.fileSizeUnit;\n      this.avatarPicker = this.question.formElement.appearance.avatarPicker;\n      this.initialFileSize = this.question.formElement.validation?.fileSize;\n      this.fileSize = this.convertToBytes(\n        this.initialFileSize,\n        this.fileSizeUnit\n      );\n      this.initialTotalSize = this.question.formElement.validation?.totalFileSize;\n      this.totalFileSize = this.convertToBytes(\n        this.initialTotalSize,\n        this.fileSizeUnit\n      );\n  \n      if (this.question.answer) {\n        this.files = this.question.answer;\n      }\n  \n  \n      this.attachments = this.question?.attachments;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.attachments.length,true);\n      });\n      this.convertUrl();\n    }\n  \n    convertUrl(){\n      const token = this.header.authToken;\n\n      if (!this.attachments || !token) return;\n\n      this.attachments.forEach((attachment, index) => {\n        const fileUrl = `${this.apiUrl}${attachment.fileUrl.replace(/\\//g, \"%2F\")}`;        \n        const headers = new HttpHeaders().set('authorization', `Bearer ${token}`);\n    \n        this.http.get(fileUrl, { headers, responseType: 'blob' }).subscribe((blob) => {\n          const blobUrl = URL.createObjectURL(blob);\n          this.attachments[index].previewUrl = blobUrl;\n        });\n      });      \n    }\n  \n    convertToBytes(size: number, unit: string): number {\n      const units: { [key: string]: number } = {\n        B: 1,\n        KB: 1024,\n        MB: 1024 * 1024,\n        GB: 1024 * 1024 * 1024,\n      };\n      return size * (units[unit.toUpperCase()] || 1);\n    }\n  \n\n  handleFileTypeNotAllowed(fileType: string): void {\n    this.validationFailed = true;\n    this.validationMessage = 'File type not allowed';\n    this.clearValidationMessageAfterTimeout();\n  }\n\n  handleFileSize(event: string): void {\n    this.validationFailed = true;\n    if (event === 'File size exceeds the limit') {\n      this.validationMessage = `${event} ${this.initialFileSize} ${this.fileSizeUnit}`;\n    } else if (event === 'Total size exceeds the limit') {\n      this.validationMessage = `${event} ${this.initialTotalSize} ${this.fileSizeUnit}`;\n    } else {\n      this.validationMessage = event;\n    }\n    this.clearValidationMessageAfterTimeout();\n  }\n\n  clearValidationMessageAfterTimeout(): void {\n  if (this.timeoutId) {\n    clearTimeout(this.timeoutId);\n  }\n\n  this.timeoutId = setTimeout(() => {\n    this.validationMessage = '';\n    this.validationFailed = false;\n    this.timeoutId = null;\n  }, 5000);\n} \n\n  onFileChange(event: any) {\n    const file: File = event.target.files[0];\n    this.selectedFile = file;\n    this.selectedFiles.push(this.selectedFile);\n    this.question.answer = this.selectedFiles;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  handleFinalArray(fileType: any[]): void {\n    const extractedData = fileType.map((item: any) => ({\n      name: item._file.name,\n      size: item._file.size,\n      type: item._file.type,\n    }));\n\n\n    const jsonString = JSON.stringify(extractedData);\n    this.question.answer = fileType;\n    const fileLength = fileType.length;\n    \n    setTimeout(() => {\n      this.whenClauseService.setQuestionAnswer(this.question.id,fileLength);\n    });\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.validationService.clearInvalid(this.buildElementId());\n  }\n  deleteFiles(event: any) {\n    this.question.deleteFiles = event;\n    this.question.attachments = this.question.attachments.filter(\n      (item: any) => {\n        return !event.includes(item.fileId);\n      }\n    );\n    this.question.copiedAttachments = this.question.copiedAttachments.filter(\n      (item: any) => {\n        return !event.includes(item);\n      }\n    );\n    setTimeout(() => {\n      // Check current file count after delay\n      const attachmentsLength = this.question?.attachments?.length || 0;\n      const currentFileCount = this.question?.answer?.length || 0;\n      \n      // Only call when clause if no new files were added recently\n      // (assuming handleFinalArray would have updated this.question.answer)\n      if (attachmentsLength === currentFileCount) {\n        this.whenClauseService.setQuestionAnswer(this.question.id, attachmentsLength);\n      }\n    }, 50);\n    this.inlineDeleteFiles.emit(this.question.deleteFiles);\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div\n  [ngClass]=\"{'field-disabled':disableEdit}\"\n  >\n    <lib-docUpload\n    [totalSize]=\"totalFileSize\"\n    [fileAllowed]=\"fileTypes\"\n    [multiple]=\"multiFileUploads\"\n    [fileSize]=\"fileSize\"\n    [files]=\"files\"\n    [avatarPicker]=\"avatarPicker\"\n    (fileTypeNotAllowed)=\"handleFileTypeNotAllowed($event)\"\n    (fileSizeAllowed)=\"handleFileSize($event)\"\n    (finalArray)=\"handleFinalArray($event)\"\n    [attachments]=\"attachments\"\n    (deleteFiles)=\"deleteFiles($event)\"\n  ></lib-docUpload>\n  </div>\n\n  <div *ngIf=\"isInvalid && (!inLine || (!question.answer||!attachments))\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, Input, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core';\nimport { GoogleMap } from '@angular/google-maps';\n\n@Component({\n  selector: 'lib-location-fields',\n  templateUrl: './location-fields.component.html',\n  styleUrls: ['./location-fields.component.scss'],\n})\nexport class LocationFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  @ViewChild('mapSearchField')\n  searchField!: ElementRef;\n  @ViewChild(GoogleMap) map!: GoogleMap;\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  defaultZoomLevel: number = 0;\n  setCurrentPosition: boolean = false;\n  allowFullScreen: boolean = false;\n  latitude: number = 0;\n  longitude: number = 0;\n  regionBoundary: boolean = false;\n  region: string = '';\n  showGoogleMap!: boolean;\n  mapConfigurations: any = {};\n\n  ngOnInit() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.defaultZoomLevel =\n      this.question.formElement.appearance.defaultZoomLevel;\n    this.setCurrentPosition =\n      this.question.formElement.appearance.setCurrentPosition;\n    this.allowFullScreen = this.question.formElement.appearance.allowFullScreen;\n    this.latitude = this.question.formElement.appearance.latitude;\n    this.longitude = this.question.formElement.appearance.longitude;\n    this.regionBoundary = this.question.formElement.validation.regionBoundary;\n    this.region = this.question.formElement.validation.region;\n    this.mapConfigurations = {\n      disableDefaultUI: true,\n      fullscreenControl: this.allowFullScreen,\n      zoomControl: true,\n    };\n  }\n\n  ngAfterViewInit(): void {\n    const searchBox = new google.maps.places.SearchBox(\n      this.searchField.nativeElement\n    );\n\n    this.map.controls[google.maps.ControlPosition.TOP_CENTER].push(\n      this.searchField.nativeElement\n    );\n\n    searchBox.addListener('places_changed', () => {\n      const places = searchBox.getPlaces();\n      if (places?.length === 0) {\n        return;\n      }\n\n      const bounds = new google.maps.LatLngBounds();\n      places?.forEach((place) => {\n        if (!place.geometry || !place.geometry.location) {\n          return;\n        }\n\n        if (place.geometry.viewport) {\n          // Only geocodes have viewport.\n          bounds.union(place.geometry.viewport);\n        } else {\n          bounds.extend(place.geometry.location);\n        }\n      });\n\n      this.map.fitBounds(bounds);\n    });\n  }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n  <div  class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"input-group\">\n    <input\n      type=\"text\"\n      class=\"form-control location-input\"\n      placeholder=\"Enter location\"\n      #locationInput\n    />\n  </div>\n\n  <input #mapSearchField class=\"my-map-search-field\" type=\"text\" />\n  <google-map width=\"100%\" [options]=\"mapConfigurations\"></google-map>\n</div>\n","import { Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-mail-fields',\n  templateUrl: './mail-fields.component.html',\n  styleUrls: ['./mail-fields.component.scss'],\n})\nexport class MailFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  expectedDomains: string[] = [];\n  regularExpression: string = '';\n  email: string = '';\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n  private elementId: string='';\n  constructor(\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  ) {\n  }\n\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n    this.expectedDomains =\n      this.question?.formElement?.validation?.expectedDomains\n        ?.split(',')\n        .map((domain: any) => domain.trim());\n    this.regularExpression =\n    this.question.formElement.validation.regularExpression;\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.email = this.defaultValue;\n    if(this.question.answer){\n      this.email = this.question?.answer  \n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n    }\n  }\n\n  validateEmail() {\n    this.validationFailed = false;\n    this.validationMessage = '';\n    const enteredEmail = this.email?.trim().toLowerCase();\n    if (this.required && !this.email) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else if (this.expectedDomains && this.expectedDomains.some(d => d.trim() !== '')) {    \n      const isValidEmail = this.expectedDomains.some((domain) =>\n        enteredEmail?.endsWith(domain)\n      );\n      this.validationFailed = !isValidEmail;\n      this.validationMessage = 'Please enter valid email address';\n      this.question.validation = !this.validationFailed;\n      this.question.validationMessage = 'Please enter valid email address';\n    }\n    else {\n      this.question.validation = true;\n    }\n  }\n  validateInput(event: any) {\n    this.validationService.clearInvalid(this.buildElementId())\n    this.question.answer = event.target.value;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.validateEmail();\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <input\n    type=\"email\"\n    class=\"form-control mb-2 height\"\n    [placeholder]=\"placeholder\"\n    [(ngModel)]=\"email\"\n    (blur)=\"validateEmail()\"\n    (input)=\"validateInput($event)\"\n    [class.invalid]=\"validationFailed\"\n    [class.invalid-question]=\"isInvalid && (!inLine || !email)\"\n    [disabled]=\"disableEdit\"\n  />\n  <!-- <div *ngIf=\"isInvalid\" class=\"error-message\"> -->\n  <div *ngIf=\"isInvalid && (!inLine || !email)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { DataService } from './data.service';\n\ninterface CountryData {\n  value: string;\n  label: string;\n  image: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CountryService {\n  private apiUrl: string = '';\n  header: any = {};\n\n  constructor(private http: HttpClient, private dataService: DataService) {\n    this.dataService.apiUrl$.subscribe((data) => {\n      this.apiUrl = data;\n    });\n  }\n\n  loadCountryDetails(questionId: string, page: number, size: number, searchKey: string): Observable<any> {\n    return this.http.get<any>(`${this.apiUrl}/api/public/json/country?page=${page}&size=${size}&searchKey=${encodeURIComponent(searchKey)}`);\n  }\n\n  processCountryDetails(\n    data: any[],\n    displayFlag: boolean,\n    displayCode: boolean,\n    showCountryName: boolean\n  ): CountryData[] {\n    const countryDetails: CountryData[] = [];\n    data.forEach((country) => {\n      const flag = displayFlag && country.flag ? country.flag : '';\n      const name = showCountryName ? country.name || '' : '';\n      const isdRoot = country.isd?.root || '';\n      const isdSuffixes = country.isd?.suffixes || [];\n  \n      if (isdRoot && isdSuffixes.length > 0) {\n        isdSuffixes.forEach((suffix: string) => {\n          const isdCode = `${isdRoot}${suffix}`;\n  \n          // Special case: Only flag should be displayed, but value must have ISD code\n          if (displayFlag && !displayCode && !showCountryName) {\n            countryDetails.push({\n              value: isdCode,  // Keep ISD code in value\n              label: '',       // No text in label\n              image: flag,     //  Only flag should be displayed\n            });\n          } else {\n            // Handle all other cases\n            let label = '';\n            if (showCountryName) label += name;\n            if (displayCode) label += (label ? ' ' : '') + isdCode;\n            if (!label) label = isdCode; // Ensure label is not empty\n  \n            countryDetails.push({\n              value: isdCode,\n              label: label.trim(),\n              image: flag,\n            });\n          }\n        });\n      } else {\n        const fallbackCode = isdRoot || country.code || ''; // Fallback if no suffixes\n  \n        if (displayFlag && !displayCode && !showCountryName) {\n          countryDetails.push({\n            value: fallbackCode,\n            label: '',\n            image: flag,\n          });\n        } else {\n          let label = '';\n          if (showCountryName) label += name;\n          if (displayCode) label += (label ? ' ' : '') + fallbackCode;\n          if (!label) label = fallbackCode;\n  \n          countryDetails.push({\n            value: fallbackCode,\n            label: label.trim(),\n            image: flag,\n          });\n        }\n      }\n    });\n    return countryDetails;\n  }\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CountryService } from '../../services/countryService';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\ninterface CountryData {\n  value: string;\n  label: string;\n  image: string;\n}\n\n@Component({\n  selector: 'lib-mobile-fields',\n  templateUrl: './mobile-fields.component.html',\n  styleUrls: ['./mobile-fields.component.scss'],\n})\nexport class MobileFieldsComponent implements OnInit {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  displayCountryCode: boolean = true;\n  displayFlag: boolean = true;\n  displayCode: boolean = true;\n  showCountryName: boolean = true;\n  beautifyNumbers: boolean = true;\n  countryWiseValidation: boolean = true;\n  countryDetails: CountryData[] = [];\n  selectedCountry: CountryData[] = [];\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  mobileNumber: string = '';\n  questionId: string = '';\n  currentPage: number = 0;\n  size: number = 30;\n  totalPages: number = 0;\n  searchKey: string = '';\n  lastPage:boolean=false;\n  isFirstPage: boolean = false;\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n\n private elementId: string='';\n\n  constructor(\n    private countryService: CountryService,\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  ) { }\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.placeholder = this.question.formElement.appearance.placeholder;\n    this.displayCountryCode =\n      this.question.formElement.appearance.displayCountryCode;\n    this.displayFlag = this.question.formElement.appearance.displayFlag;\n    this.displayCode = this.question.formElement.appearance.displayCode;\n    this.showCountryName = this.question.formElement.appearance.showCountryName;\n    this.beautifyNumbers = this.question.formElement.appearance.beautifyNumbers;\n    this.countryWiseValidation =\n      this.question.formElement.validation.countryWiseValidation;\n    this.questionId = this.question.id;\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.loadCountry(this.questionId, this.currentPage, this.size, this.searchKey);\n  }\n\n\n  initializeAnswer(param?: string): void {\n    let countryCode: string | undefined;\n    let mobileNumber: string | undefined;\n  \n    const value = param === 'answer' && this.question?.answer\n      ? this.question.answer\n      : this.question?.defaultValue;\n  \n    if (this.displayCountryCode) {\n      // Expect \"countryCode mobileNumber\"\n      [countryCode, mobileNumber] = (value || '').split(' ');\n    } else {\n      // Only mobile number present\n      mobileNumber = value || '';\n    }\n    \n    this.mobileNumber = mobileNumber || '';\n  \n    if (this.displayCountryCode) {\n      if (!this.selectedCountry) {\n        this.selectedCountry = [];\n      }\n  \n      let matchedCountry = this.countryDetails.find(\n        (country) => country.value === countryCode\n      );\n  \n      if (matchedCountry) {\n        this.selectedCountry= [matchedCountry];\n      }\n\n\n      else if (countryCode) {\n        // Not found? Fetch from API directly\n        this.countryService.loadCountryDetails(this.questionId, 0, 1, countryCode).subscribe((data) => {\n          const extraCountries = this.countryService.processCountryDetails(\n            data.result.content,\n            this.displayFlag,\n            this.displayCode,\n            this.showCountryName\n          );\n          matchedCountry = extraCountries.find(\n            (country) => country.value === countryCode\n          );\n          if (matchedCountry) {\n            // Add to dropdown list if missing\n            if (!this.countryDetails.some((c) => c.value === matchedCountry!.value)) {\n              this.countryDetails = [matchedCountry, ...this.countryDetails];\n            }\n            // Preselect it\n            this.selectedCountry = [matchedCountry];\n          }\n        });\n      } \n    }\n  }\n  \n\n  onCountryChange() {\n    this.validationFailed = false;\n    this.validationMessage = '';\n    this.updateAnswer();\n  }\n\n  onInput(event: Event) {\n    this.validationService.clearInvalid(this.buildElementId());\n    const input = event.target as HTMLInputElement;\n  \n    // Regular expression to allow only numbers and multiple hyphens, but ensure only one hyphen between numbers\n    const regex = /^(\\d+)(-\\d+)*$/;\n  \n    if (!regex.test(input.value)) {\n      // Remove invalid characters\n      input.value = input.value.replace(/[^\\d-]/g, '');\n  \n      // Ensure only one hyphen is present between numbers\n      input.value = input.value\n        .split('-')\n        .filter((segment, index, array) => segment || index === 0 || index === array.length - 1)\n        .join('-');\n    }\n  \n    // Update the model\n    this.mobileNumber = input.value;\n    \n    this.updateAnswer();\n  }\n  onMobileNumberChange() {\n  }\n\n  updateAnswer() {  \n    if(this.displayCountryCode){\n      if (this.selectedCountry.length > 0 && this.mobileNumber) {\n        const countryCode = this.selectedCountry[0].value;\n        this.question.answer = `${countryCode} ${this.mobileNumber}`;\n      }\n    }else {\n      this.question.answer = this.mobileNumber;\n    }\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  validateMobile() {\n    this.validationFailed = false;\n    this.validationMessage = '';\n  \n    if (this.required && (!this.mobileNumber || (this.displayCountryCode && this.selectedCountry.length === 0))) {\n      this.validationFailed = true;\n      this.validationService.clearInvalid(this.buildElementId());\n      this.validationMessage = 'This is a required question';\n    } else {\n      this.updateAnswer();\n    }\n  }\n\n  loadCountry(id: string, currentPage: number, size: number, searchKey: string, isSearch: boolean = false) {\n    this.countryService.loadCountryDetails(this.questionId, currentPage, size, searchKey).subscribe((data) => {\n      if (this.totalPages === 0) {\n        this.totalPages = data.result.totalPages;\n      }\n      this.lastPage=data.result.last;\n      this.isFirstPage = data.result.first;\n      let newCountries=this.countryService.processCountryDetails(\n        data.result.content,\n        this.displayFlag,\n        this.displayCode,\n        this.showCountryName\n      )      \n\n      if (this.currentPage > 0) {\n        this.countryDetails = [\n          ...this.countryDetails,\n          ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value))\n          ];\n      } else {\n        this.countryDetails = [\n          ...newCountries.filter(item => !this.countryDetails.some((existing: any) => existing.value === item.value)),\n          ...this.countryDetails\n          ];\n      }\n      if(this.defaultValue && !isSearch){\n        this.initializeAnswer('default')\n      }\n      if (this.question.answer && !isSearch) {\n        this.initializeAnswer('answer');\n      }\n    });\n\n  }\n\n  getNextSetOfItems(event: any) {\n    const element = event.target;\n    if(!this.lastPage){\n      if (Math.floor(element.scrollHeight - element.scrollTop) <= element.clientHeight) {\n        this.loadMoreData();\n      }\n    }\n    if (!this.isFirstPage && element.scrollTop <= 150) {\n      this.loadPreviousData();\n    }\n  }\n\n  loadMoreData() {\n    setTimeout(() => {\n      this.currentPage++;\n      if (this.currentPage >= 0) {\n        this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\n      }\n    }, 0);\n  }\n\n  loadPreviousData() {\n    setTimeout(() => {\n      this.currentPage--;\n      if (this.currentPage >= 0) {\n        this.loadCountry(this.questionId,this.currentPage, this.size, \"\");\n      }\n    }, 0);\n  }\n\n  search(searchTerm: any) {\n    if (searchTerm == '') {\n      this.loadCountry(this.questionId,this.currentPage, this.size, \"\",true);\n    }\n    else {\n      this.countryDetails = []; \n      this.loadCountry(this.questionId,this.currentPage, this.size, searchTerm,true);\n    }\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n\n}\n\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"input-group mb-2\">\n    <ng-container *ngIf=\"displayCountryCode; else fullWidthInput\">\n      <div class=\"col-xs-5 col-5 col-md-3 px-0 pe-2 ps-2\"\n      [ngClass]=\"{'disable':disableEdit}\">\n        <lib-dropdown\n          [items]=\"countryDetails\"\n          [multiple]=\"false\"\n          [(selectedItems)]=\"selectedCountry\"\n          (selectedItemsChange)=\"onCountryChange()\"\n          [disable]=\"disableEdit\"\n          (onDropdownScroll)=\"getNextSetOfItems($event)\"\n          (onSearch)=\"search($event)\"\n        ></lib-dropdown>\n      </div>\n      <input\n        type=\"text\"\n        class=\"form-control col-xs-7 col-7 col-md-9 height mobileField\"\n        [placeholder]=\"placeholder\"\n        aria-label=\"Mobile Number\"\n        (blur)=\"validateMobile()\"\n        [(ngModel)]=\"mobileNumber\"\n        (ngModelChange)=\"onMobileNumberChange()\"\n        (input)=\"onInput($event)\"\n        [disabled]=\"disableEdit\"\n      />\n    </ng-container>\n\n    <!-- Full-width input when displayCountryCode is false -->\n    <ng-template #fullWidthInput>\n      <input\n        type=\"text\"\n        class=\"form-control col-12 height mobileField\"\n        [placeholder]=\"placeholder\"\n        aria-label=\"Mobile Number\"\n        [class.invalid]=\"validationFailed\"\n        [class.invalid-question]=\"isInvalid\"\n        (blur)=\"validateMobile()\"\n        [(ngModel)]=\"mobileNumber\"\n        (ngModelChange)=\"onMobileNumberChange()\"\n        (input)=\"onInput($event)\"\n      />\n    </ng-template>\n  </div>\n  <div *ngIf=\"isInvalid && (!inLine || !mobileNumber)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AggregationFunctionService {\n\n  // New structure: { [rowId]: Map<fieldId, fieldData> }\nprivate aggregateFieldsMap = new Map<string, Map<string, { id: string; operation: string; formula: string; result?: number }>>();\nprivate numberFieldsMap = new Map<string, Map<string, { id: string; answer: number }>>();\n\n  private aggregateFieldResultsSubject = new BehaviorSubject<{ id: string; result: number,evaluated:boolean } | null>(null);\n  aggregateFieldResults$ = this.aggregateFieldResultsSubject.asObservable();\n\n  constructor() {}\n\n  /**\n   * Store or update an aggregate field in the map\n   */\n  setAggregateField(rowId: string, fieldId: string, operation: string, formula: string): void {\n    if (!this.aggregateFieldsMap.has(rowId)) {\n      this.aggregateFieldsMap.set(rowId, new Map());\n    }\n    this.aggregateFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, operation, formula });\n  }\n\n  /**\n   * Store or update a number field in the map\n   */\n  setNumberField(rowId: string, fieldId: string, answer: number): void {\n    if (!this.numberFieldsMap.has(rowId)) {\n      this.numberFieldsMap.set(rowId, new Map());\n    }\n    this.numberFieldsMap.get(rowId)!.set(fieldId, { id: fieldId, answer });\n    this.checkAndEvaluateFormulas(rowId);\n  }\n\n  private emitAggregateResult(id: string, result: number,evaluated:boolean): void {\n    this.aggregateFieldResultsSubject.next({ id, result,evaluated });\n  }\n\n\n  evaluateCustomFormula(rowId: string, formula: string): number | null {\n    \n    const rowNumberFields = this.numberFieldsMap.get(rowId);\n    if (!formula || !rowNumberFields) return null;\n  \n    const uuidRegex = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}/g;/[0-9a-fA-F\\-]{36}/g;\n    const uuidMatches = formula.match(uuidRegex) || [];\n  \n    const allHaveAnswers = uuidMatches.every(uuid => {\n      const field = rowNumberFields.get(uuid);\n      return field !== undefined && \n             field.answer !== undefined && \n             field.answer !== null &&\n             String(field.answer).trim() !== '';\n    });\n  \n    if (!allHaveAnswers) return null;\n  \n    const replacedFormula = formula.replace(uuidRegex, (match) => {\n      const field = rowNumberFields.get(match);\n      return field?.answer?.toString() || '0';\n    });\n  \n    try {\n      return new Function(`return ${replacedFormula};`)();\n    } catch (error) {\n      console.error('Error evaluating formula:', error);\n      return null;\n    }\n  }\n  \n  evaluatePredefinedOperation(rowId: string, operation: string, formula: string): number | null {\n    const rowNumberFields = this.numberFieldsMap.get(rowId);\n    if (!rowNumberFields) return null;\n  \n    const uuidList = formula.split(',').map(id => id.trim());\n    const values: number[] = [];\n    let hasAnyAnswer = false;\n\n    for (const uuid of uuidList) {\n      const field = rowNumberFields.get(uuid);\n      const val = field?.answer;\n  \n      // If the field doesn't exist or value is invalid, push 0 as default\n      if (val !== undefined && val !== null && String(val).trim() !== '') {\n        hasAnyAnswer = true;\n        values.push(Number(val));\n      } else {\n        values.push(0); // Still push 0 to keep array length, but flag stays false unless at least one answer exists\n      }\n    }\n    if (!hasAnyAnswer) return null;\n    let result = 0;\n    switch (operation) {\n      case 'SUM':\n        result = values.reduce((acc, val) => acc + val, 0);\n        break;\n      case 'SUBTRACTION':\n        result = values.reduce((acc, val) => acc - val);\n        break;\n      case 'MULTIPLICATION':\n        result = values.reduce((acc, val) => acc * val, 1);\n        break;\n      default:\n        console.warn(`Unsupported operation: ${operation}`);\n        return null;\n    }\n  \n    return result;\n  }\n\n  checkAndEvaluateFormulas(rowId: string): void {\n    const aggregateFields = this.aggregateFieldsMap.get(rowId);\n    if (!aggregateFields) return;\n  \n    aggregateFields.forEach((aggregateField, id) => {\n      let result: number | null = null;\n  \n      if (aggregateField.operation === 'CUSTOM') {\n        result = this.evaluateCustomFormula(rowId, aggregateField.formula);\n      } else {\n        result = this.evaluatePredefinedOperation(rowId, aggregateField.operation, aggregateField.formula);\n      }\n  \n      if (result !== null) {\n        aggregateField.result = result;\n        this.aggregateFieldsMap.get(rowId)!.set(id, aggregateField);\n        this.emitAggregateResult(`${rowId}:${id}`, result,true);\n      } else {\n        this.emitAggregateResult(`${rowId}:${id}`, 0,false);\n      }\n    });\n  }\n\n  clearAll(): void {\n    this.aggregateFieldsMap.clear();\n    this.numberFieldsMap.clear();\n    this.aggregateFieldResultsSubject.next(null);\n  }\n  \n  ngOnDestroy(): void {\n    this.clearAll();\n  }\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Logic } from '../../models/logic.model';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-number-fields',\n  templateUrl: './number-fields.component.html',\n  styleUrls: ['./number-fields.component.scss'],\n})\nexport class NumberFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n  @Input() rowId: any;\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  upDown!: boolean;\n  allowNegativeValues!: boolean;\n  placeholder: string = '';\n  min!: number;\n  max!: number;\n  enteredNumber!: number;\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  defaultValue!: number;\n  @Input() disableEdit: boolean = false;\n  private elementId: string='';\n  private subscribedToWhenClause = false;\n  constructor(\n      private validationService: ValidationService,\n      private tracker: ElementTrackerService,\n      private aggregateService:AggregationFunctionService,\n      private whenClauseService:WhenClauseService,\n      private hiddenFieldService:HiddenFieldService\n    ) {\n    }\n\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.upDown = this.question.formElement.appearance.upAndDownButton;\n    this.allowNegativeValues =\n      this.question.formElement.appearance.allowNegativeValues;\n    this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n    this.min = this.question.formElement.validation.min;\n    this.max = this.question.formElement.validation.max;\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.enteredNumber = this.defaultValue;\n    if(this.question.answer){\n      this.enteredNumber = this.question?.answer;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.enteredNumber,true);\n      });\n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n      });\n    } else{\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n      });\n    }\n    if (this.question.childLogics && this.question.answer) {\n      this.updateChildLogics(this.question);\n    }\n    this.aggregateService.setNumberField(this.rowId,this.question.id,this.question.answer);\n  }\n\n  preventNumberScroll(event: WheelEvent) {\n    if (document.activeElement === event.target) {\n      event.preventDefault();\n    }\n  }\n\n  validateNumber() {\n    this.validationFailed = false;\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationMessage = '';\n    if (this.required && !this.enteredNumber && this.question.required) {\n      this.validationFailed = true;\n      this.validationMessage = `Please enter a valid number`;\n      this.question.validation = false;\n      this.question.validationMessage = `Please enter a valid number`;\n           if (!this.subscribedToWhenClause) {\n        this.subscribedToWhenClause = true;\n        this.whenClauseService.onQuestionChange().subscribe(change => {\n          this.validateNumber();\n    });\n  }\n    } else if (!this.allowNegativeValues && this.enteredNumber < 0) {\n      this.validationFailed = true;\n      this.validationMessage = 'Please enter a positive number';\n      this.question.validation = false;\n      this.question.validationMessage = 'Please enter a positive number';\n    } else if (\n      (this.min !== undefined && this.enteredNumber < this.min) ||\n      (this.max !== undefined && this.enteredNumber > this.max)\n    ) {\n      this.validationFailed = true;\n\n      // Construct appropriate validation message based on whether min, max, or both are provided\n      if (this.min !== undefined && this.max !== undefined) {\n        this.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\n        this.question.validationMessage = `Please enter a valid number between ${this.min} and ${this.max}`;\n      } else if (this.min !== undefined) {\n        this.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\n        this.question.validationMessage = `Please enter a number greater than or equal to ${this.min}`;\n      } else if (this.max !== undefined) {\n        this.validationMessage = `Please enter a number less than or equal to ${this.max}`;\n        this.question.validationMessage = `Please enter a number less than or equal to ${this.max}`;\n      }\n\n      this.question.validation = false;\n    } else {\n      this.question.validation = true;\n    }\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n  }\n\n  validateInput(event: any) {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.question.answer = event.target.value;\n    this.aggregateService.setNumberField(this.rowId,this.question.id, event.target.value);\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (\n          this.evaluateCondition(\n            question.answer,\n            childLogic.condition,\n            childLogic.inputValue\n          )\n        ) {\n          childLogic.showLogic = true;\n        } else {\n          childLogic.showLogic = false;\n          this.clearAnswersRecursively(childLogic);\n        }\n      });\n    }\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  evaluateCondition(answer: any, condition: any, inputValue: any) {\n    switch (condition) {\n      case '>':\n        return answer > Number(inputValue);\n      case '<':\n        return answer < Number(inputValue);\n      case '>=':\n        return answer >= Number(inputValue);\n      case '<=':\n        return answer <= Number(inputValue);\n      case '=':\n        return answer == inputValue;\n      case '!=':\n        return answer != inputValue;\n      default:\n        return false;\n    }\n  }\n\n\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n    setTimeout(() => {\n      this.whenClauseService.markLoadCompleted();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n    <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <input\n    type=\"number\"\n    class=\"form-control mb-2 height\"\n    [placeholder]=\"placeholder\"\n    [class.hide-spin-buttons]=\"!upDown\"\n    (blur)=\"validateNumber()\"\n    [(ngModel)]=\"enteredNumber\"\n    [class.invalid]=\"validationFailed\"\n    [class.invalid-question]=\"isInvalid && (!inLine || !enteredNumber)\"\n    (input)=\"validateInput($event)\"\n    [attr.min]=\"min\"\n    [attr.max]=\"max\"\n    (wheel)=\"preventNumberScroll($event)\"\n    [disabled]=\"disableEdit\"\n  />\n  <div *ngIf=\"isInvalid && (!inLine || !enteredNumber)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-password-fields',\n  templateUrl: './password-fields.component.html',\n  styleUrls: ['./password-fields.component.scss'],\n})\nexport class PasswordFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  confirmPassword!: boolean;\n  displayStrength!: boolean;\n  viewButton!: boolean;\n  maxLength!: number;\n  minLength!: number;\n  requireLowercaseLetters!: boolean;\n  requireUppercaseLetters!: boolean;\n  requireNumbers!: boolean;\n  requireSpecialCharacters!: boolean;\n  allowedSpecialCharacters: string[] = [];\n  validationMessage: string = '';\n  cnfrmValidationMessage: string = '';\n  validationFailed: boolean = false;\n  validatedCnfrmPassword: boolean = false;\n  enteredPassword: string = '';\n  enteredCnfrmPassword: string = '';\n  passwordStrength: number = 0;\n  questionId:string='';\n  private elementId: string='';\n  @Input() disableEdit: boolean = false;\n  \n  constructor(\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  ) {\n  }\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.questionId=this.question.id;\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.confirmPassword = this.question.formElement.appearance.confirmPassword;\n    this.displayStrength = this.question.formElement.appearance.displayStrong;\n    this.viewButton = this.question.formElement.appearance.viewButton;\n    this.maxLength = this.question.formElement.validation.maxLength;\n    this.minLength = this.question.formElement.validation.minLength;\n    this.requireLowercaseLetters =\n      this.question.formElement.validation.requireLowercaseLetters;\n    this.requireUppercaseLetters =\n      this.question.formElement.validation.requireUppercaseLetters;\n    this.requireNumbers = this.question.formElement.validation.requireNumbers;\n    this.requireSpecialCharacters =\n      this.question.formElement.validation.requireSpecialCharacters;\n    if (this.requireSpecialCharacters) {\n      this.allowedSpecialCharacters =\n        this.question.formElement.validation.allowedSpecialCharacters\n          .split(',')\n          .map((char: any) => char.trim());\n    }\n    this.enteredPassword = this.question?.answer;\n  }\n\n  togglePasswordVisibility() {\n    let passwordField = document.getElementById(\n      'passwordField'+this.questionId\n    ) as HTMLInputElement;\n    let eyeIcon = document.getElementById(\n      'passwordEyeIcon'+this.questionId\n    ) as HTMLInputElement;\n\n    if (passwordField.type === 'password') {\n      passwordField.type = 'text';\n      eyeIcon.classList.remove('bi-eye-fill');\n      eyeIcon.classList.add('bi-eye-slash-fill');\n    } else {\n      passwordField.type = 'password';\n      eyeIcon.classList.remove('bi-eye-slash-fill');\n      eyeIcon.classList.add('bi-eye-fill');\n    }\n  }\n  toggleCnfrmPasswordVisibility() {\n    let passwordField = document.getElementById(\n      'cnfrmPasswordField'+this.questionId\n    ) as HTMLInputElement;\n    let eyeIcon = document.getElementById(\n      'CnfrmPasswordEyeIcon'+this.questionId\n    ) as HTMLInputElement;\n\n    if (passwordField.type === 'password') {\n      passwordField.type = 'text';\n      eyeIcon.classList.remove('bi-eye-fill');\n      eyeIcon.classList.add('bi-eye-slash-fill');\n    } else {\n      passwordField.type = 'password';\n      eyeIcon.classList.remove('bi-eye-slash-fill');\n      eyeIcon.classList.add('bi-eye-fill');\n    }\n  }\n\n  checkPasswordMatch() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validatedCnfrmPassword = false;\n    this.cnfrmValidationMessage = '';\n    if (this.required && this.confirmPassword && !this.enteredCnfrmPassword) {\n      this.validatedCnfrmPassword = true;\n      this.cnfrmValidationMessage = `Please enter a valid password`;\n      this.question.validation = false;\n    }\n    else if (this.enteredPassword != this.enteredCnfrmPassword && this.confirmPassword) {\n      this.validatedCnfrmPassword = true;\n      this.cnfrmValidationMessage = 'Passwords do not match';\n      this.question.validation = false;\n    }\n    else{\n      this.question.validation = true;\n    }\n    this.validatePassword();\n  }\n\n  \n\n  validatePassword() {\n    this.validationFailed = false;\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationMessage = '';\n    if (this.required && !this.enteredPassword) {\n      this.validationFailed = true;\n      this.validationMessage = `Please enter a valid password`;\n      this.question.validation = false;\n      this.question.validationMessage = `Please enter a valid password`;\n    } else if (\n      this.requireLowercaseLetters ||\n      this.requireUppercaseLetters ||\n      this.requireNumbers ||\n      this.requireSpecialCharacters ||\n      this.minLength ||\n      this.maxLength\n    ) {      \n      const lowercaseRegex = /[a-z]/;\n      const uppercaseRegex = /[A-Z]/;\n      const numberRegex = /\\d/;\n      const specialCharacterRegex = new RegExp(`[${this.allowedSpecialCharacters.join('')}]`);\n      const otherSpecialCharacterRegex = new RegExp(`[^a-zA-Z0-9${this.allowedSpecialCharacters.join('')}]`);\n  \n      let lowerCaseValidate = lowercaseRegex.test(this.enteredPassword);\n      let upperCaseValidate = uppercaseRegex.test(this.enteredPassword);\n      let containsNumber = numberRegex.test(this.enteredPassword);\n      let containsSpecialCharacter = specialCharacterRegex.test(this.enteredPassword);\n      let containsOtherSpecialCharacter = otherSpecialCharacterRegex.test(this.enteredPassword);\n  \n      if (!lowerCaseValidate && this.requireLowercaseLetters) {\n        this.validationFailed = true;\n        this.validationMessage = 'Password must contain at least one lowercase letter';\n        this.question.validation = false;\n        this.question.validationMessage = 'Password must contain at least one lowercase letter';\n      } else if (!upperCaseValidate && this.requireUppercaseLetters) {\n        this.validationFailed = true;\n        this.validationMessage = 'Password must contain at least one uppercase letter';\n        this.question.validation = false;\n        this.question.validationMessage = 'Password must contain at least one uppercase letter';\n      } else if (!containsNumber && this.requireNumbers) {\n        this.validationFailed = true;\n        this.validationMessage = 'Password must contain at least one number';\n        this.question.validation = false;\n        this.question.validationMessage = 'Password must contain at least one number';\n      }else if (this.enteredPassword.length < this.minLength) {\n        this.validationFailed = true;\n        this.validationMessage = `Password must contain at least ${this.minLength} characters`;\n        this.question.validation = false;\n        this.question.validationMessage = `Password must contain at least ${this.minLength} characters`;\n      } else if (this.enteredPassword.length > this.maxLength) {\n        this.validationFailed = true;\n        this.validationMessage = `Password must be less than ${this.maxLength} characters`;\n        this.question.validation = false;\n        this.question.validationMessage = `Password must be less than ${this.maxLength} characters`;\n      } else if (!containsSpecialCharacter && this.allowedSpecialCharacters.length>0) {\n        this.validationFailed = true;\n        this.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\n        this.question.validation = false;\n        this.question.validationMessage = `Password must contain at least one special character from ${this.allowedSpecialCharacters}`;\n      } else if(containsOtherSpecialCharacter && this.allowedSpecialCharacters.length>0){\n        this.validationFailed = true;\n        this.validationMessage = 'Password contains an invalid special character';\n        this.question.validation = false;\n        this.question.validationMessage = 'Password contains an invalid special character';\n      } else if(this.confirmPassword){\n        this.checkPasswordMatch();\n      }\n       else {\n        this.question.validation = true;\n      }    \n    } else {            \n      this.passwordStrength=this.calculateStrength(this.enteredPassword);\n    }\n    this.passwordStrength = this.calculateStrength(this.enteredPassword)\n}\n\n  validateInput(event:any){\n    const sanitizedValue = event.target.value.replace(/\\s+/g, '');\n    this.enteredPassword = sanitizedValue;\n    this.question.answer=sanitizedValue;\n    this.validatePassword();  \n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0}); \n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n    }\n\n    validateCnfrm(event:any){\n      const sanitizedValue = event.target.value.replace(/\\s+/g, '');\n      this.enteredCnfrmPassword = sanitizedValue;\n      this.checkPasswordMatch();\n    }\n\n    calculateStrength(password:any) {\n      const lengthStrength = Math.min(100, (password.length / 12) * 100); // Assume maximum length of 12 for full points\n      const lowercaseStrength = /[a-z]/.test(password) ? 20 : 0;\n      const uppercaseStrength = /[A-Z]/.test(password) ? 20 : 0;\n      const numberStrength = /\\d/.test(password) ? 20 : 0;\n      const specialCharacterStrength = /[!@#$%^&*(),.?\":{}|<>]/.test(password) ? 20 : 0; // Adjust this regex based on your allowed special characters\n    \n      return lengthStrength + lowercaseStrength + uppercaseStrength + numberStrength + specialCharacterStrength;\n    }\n\n    handleValidation(isValid: boolean, message: string = 'This field is required') {\n      if (isValid) {\n        this.validationService.clearInvalid(this.buildElementId());\n      } else {\n        // this.validationService.setInvalid(this.question.id, message);\n      }\n    }\n\n    private buildElementId(): string {\n      return (this.inLine || this.inCard)\n        ? `${this.submissionIndex}-${this.question.id}`\n        : `${this.question.id}`;\n    }\n  \n    get isInvalid(): boolean {\n      return !!this.validationService.getErrorMessage(this.buildElementId());\n    }\n  \n    get errorMessage(): string | null {\n      return this.validationService.getErrorMessage(this.buildElementId());\n    }\n  \n    ngAfterViewInit() {\n      if (this.inLine || this.inCard) {\n        this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n      } else {\n        this.elementId = `question-${this.question.id}`;\n      }\n    \n      this.tracker.registerElement(this.elementId);\n    }\n  \n    ngOnDestroy() {\n      if (this.elementId) {\n        this.tracker.unregisterElement(this.elementId);\n      }\n    }\n}\n\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n    <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n      <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n      <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n      <label [for]=\"'passwordField' + questionId\">{{ question.question }}</label\n      >&nbsp;\n      <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n      <div\n        class=\"svg-wrapper mb-2 hintIcon\"\n        [attr.data-title]=\"hint\"\n        *ngIf=\"hint\"\n      >\n        <svg\n          class=\"hintSvg\"\n          viewBox=\"0 0 30 30\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n            stroke=\"#323232\"\n            stroke-width=\"1.5\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n          <path\n            d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n            stroke=\"#323232\"\n            stroke-width=\"1.5\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n          <path\n            d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n            stroke=\"#323232\"\n            stroke-width=\"1.5\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n        </svg>\n      </div>\n    </div>\n    <div class=\"passwordWrapper\">\n      <input\n      type=\"password\"\n      class=\"form-control mb-2 height\"\n      [id]=\"'passwordField' + questionId\"\n      (blur)=\"validatePassword()\"\n      [(ngModel)]=\"enteredPassword\"\n      [class.invalid]=\"validationFailed\"\n      [class.invalid-question]=\"isInvalid && (!inLine || !enteredPassword)\"\n      (input)=\"validateInput($event)\"\n      [disabled]=\"disableEdit\"\n    />\n    <button\n      id=\"togglePasswordBtn\"\n      class=\"toggle-password-btn\"\n      (click)=\"togglePasswordVisibility()\"\n      *ngIf=\"viewButton\"\n    >\n      <i class=\"bi bi-eye-fill\" [id]=\"'passwordEyeIcon' + questionId\"></i>\n    </button>\n    </div>\n  <div class=\"password-strength-meter\" *ngIf=\"displayStrength\">\n    <div class=\"progress\">\n      <div\n        class=\"progress-bar\"\n        role=\"progressbar\"\n        [style.width]=\"passwordStrength + '%'\"\n        [class.bg-danger]=\"passwordStrength < 30\"\n        [class.bg-warning]=\"passwordStrength >= 30 && passwordStrength < 70\"\n        [class.bg-success]=\"passwordStrength >= 70\"\n      ></div>\n    </div>\n  </div>\n  <div *ngIf=\"isInvalid && (!inLine || !enteredPassword)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mb-2\">\n    {{ validationMessage }}\n  </div>\n\n  <div class=\"cnfrmPasswordWrapper\" *ngIf=\"confirmPassword\">\n    <label for=\"'cnfrmPasswordField'+questionId\">Confirm password</label>\n    <input\n      type=\"password\"\n      class=\"form-control mb-2 height\"\n      [id]=\"'cnfrmPasswordField' + questionId\"\n      (blur)=\"checkPasswordMatch()\"\n      [(ngModel)]=\"enteredCnfrmPassword\"\n      [class.invalid]=\"validatedCnfrmPassword\"\n      (input)=\"validateCnfrm($event)\"\n      [disabled]=\"disableEdit\"\n    />\n    <button\n      id=\"toggleCnfrmPasswordBtn\"\n      class=\"toggle-password-btn\"\n      (click)=\"toggleCnfrmPasswordVisibility()\"\n      *ngIf=\"viewButton\"\n    >\n      <i class=\"bi bi-eye-fill\" [id]=\"'CnfrmPasswordEyeIcon' + questionId\"></i>\n    </button>\n  </div>\n  <div *ngIf=\"validatedCnfrmPassword\" class=\"text-danger error-message\">\n    {{ cnfrmValidationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-radio-button-fields',\n  templateUrl: './radio-button-fields.component.html',\n  styleUrls: ['./radio-button-fields.component.scss'],\n})\nexport class RadioButtonFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{\n    answer: any;\n    maxPossibleScore?: number;\n  }>();\n  @Input() rowId: number = 0;\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  color: string = '';\n  minimumSelection: number = 0;\n  maximumSelection: number = 0;\n  optionType: string = '';\n  lookupTable: string = '';\n  customOptions: any[] = [];\n  database: any = {};\n  api: any = {};\n  apiOptions: any[] = [];\n  selectedOption: any;\n  validationFailed!: boolean;\n  validationMessage: string = '';\n  displayOptionsInColumn: boolean = false;\n  maxPossibleScore?: number;\n  @Input() disableEdit: boolean = false;\n\n  private elementId: string = '';\n  private subscribedToWhenClause = false;\n\n  constructor(\n    private formService: FormService,\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private scoreCalcService: ScoreCalculationService,\n    private whenClauseService:WhenClauseService,\n    private hiddenFieldService:HiddenFieldService\n  ) {}\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.color = this.question.formElement.appearance.color;\n    this.displayOptionsInColumn =\n      this.question.formElement.appearance.displayOptionsInColumn;\n    this.optionType = this.question.formElement.option.optionType;\n\n    switch (this.optionType) {\n      case 'OPTION':\n        this.customOptions = this.question.formElement.option.customOptions.map(\n          (option: any) => ({\n            value: option.value,\n            label: option.value,\n          })\n        );\n        this.initializeOption();\n        break;\n      case 'LOOKUP':\n        this.lookupTable = this.question.formElement.option.lookupTable;\n        this.fetchDataFromLookup();\n        break;\n      case 'DATABASE':\n        this.database = this.question.formElement.option.database;\n        this.fetchDataFromDatabase();\n        break;\n      case 'API':\n        this.api = this.question.formElement.option.api;\n        this.fetchDataFromAPI();\n        break;\n      default:\n        console.warn('Unknown option type:', this.optionType);\n    }\n\n    if (this.question.childLogics && this.question.answer) {\n      this.updateChildLogics(this.question);\n    }\n    if (\n      this.question.formElement.scoring &&\n      this.question.formElement.scoring.enableScoring\n    ) {\n      this.maxPossibleScore =\n        this.scoreCalcService.getMaxPossibleScoreForQuestion(this.question);\n      this.question.maxPossibleScore = this.maxPossibleScore;\n    }\n  }\n\n  initializeOption() {\n    if (this.question.answer) {\n      const dataType = typeof this.customOptions[0]?.value;\n      let convertedAnswer;\n\n      switch (dataType) {\n        case 'number':\n          convertedAnswer = Number(this.question.answer);\n          break;\n        case 'boolean':\n          convertedAnswer = this.question.answer === 'true';\n          break;\n        case 'string':\n          convertedAnswer = String(this.question.answer);\n          break;\n        default:\n          convertedAnswer = this.question.answer;\n      }\n      this.selectedOption = convertedAnswer;\n      setTimeout(() => {\n        const answers = this.question.answer.split('|')[1]\n        this.whenClauseService.setQuestionAnswer(this.question.id,answers,true);\n      });\n    }\n  }\n\n  fetchDataFromLookup() {\n    this.formService.fetchDataFromLookup(this.lookupTable).subscribe(\n      (response) => {\n        this.customOptions = response.result.values.map(\n          (item: { value: string; label: string }) => ({\n            value: item.value,\n            label: item.label,\n          })\n        );\n        this.initializeOption();\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  fetchDataFromDatabase() {\n    const transformedDatabase = this.transformDatabaseObject(this.database);\n    this.formService.fetchDataFromDatabase(transformedDatabase).subscribe(\n      (response) => {\n        if (response.success) {\n          this.customOptions =  response.result?.content?.map(\n            (item: { value: string; label: string }) => ({\n              value: item.value,\n              label: item.label,\n            })\n          );\n          this.initializeOption();\n        } else {\n          console.error('Error fetching data from database:', response.message);\n        }\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  transformDatabaseObject(database: any) {\n    return {\n      tableName: database.tableName,\n      valueField: database.valueField,\n      labelField: database.labelField,\n      labelPattern: database?.labelPattern,\n      criteria: database.criteria.map((criteria: any) => ({\n        field: criteria.field,\n        valueSource: criteria?.valueSource,\n        condition: criteria.condition,\n        value: criteria.inputValue,\n        logicalOperator: criteria.logicalOperator,\n      })),\n    };\n  }\n\n  fetchDataFromAPI() {\n    const apiConfig = this.api;\n     const allowedChars = ['.', ',', '-', '_', '(', ')', ''];\n\n    this.formService.fetchDataFromExternalAPI(apiConfig).subscribe(\n      (response) => {\n        let data;\n        if(apiConfig.pathToValue) {\n          data = this.extractDataByPath(response, apiConfig.pathToValue);\n        } else {\n          data = response;\n        }\n\n        this.customOptions = data.map((item: any) => {\n            if (\n              apiConfig.labelPattern &&\n              Array.isArray(apiConfig.labelPattern) &&\n              apiConfig.labelPattern.length > 0\n            ) {\n              let label = '';\n              apiConfig.labelPattern.forEach((pattern: string) => {\n                pattern = pattern.trim();\n                if (allowedChars.includes(pattern)) {\n                  label += pattern;\n                } else {\n                  if (item[pattern] !== undefined && item[pattern] !== null) {\n                    label += item[pattern]+' ';\n                  }\n                }\n              });\n              return {\n                value: item[apiConfig.valueField.trim()],\n                label: label,\n              };\n            } else {\n              return {\n                value: item[apiConfig.valueField.trim()],\n                label: item[apiConfig.labelField.trim()],\n              };\n            }\n          });\n        this.initializeOption();\n      },\n      (error) => {\n        console.error('HTTP Error:', error);\n      }\n    );\n  }\n\n  extractDataByPath(data: any, path: string) {\n    return path.split('.').reduce((acc, part) => acc && acc[part], data);\n  }\n\n  validateInput() {\n    this.question.answer = this.selectedOption;\n    const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(\n      this.question.answer,\n      this.question\n    );\n    this.question.score = scoreResult?.scores;\n    this.validationFailed = false;\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationMessage = '';\n    if (this.required && !this.selectedOption && this.question.required) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n\n           if (!this.subscribedToWhenClause) {\n        this.subscribedToWhenClause = true;\n        this.whenClauseService.onQuestionChange().subscribe(change => {\n          this.validateInput();\n    });\n\n  }\n    } else {\n      this.question.validation = true;\n    }\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n    this.answerChange.emit({\n      answer: this.question.answer,\n      maxPossibleScore: this.maxPossibleScore,\n    });\n    const answers = this.question.answer.split('|')[1]\n    this.whenClauseService.setQuestionAnswer(this.question.id,answers);\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (\n          this.evaluateCondition(\n            this.selectedOption,\n            childLogic.condition,\n            childLogic.inputValue\n          )\n        ) {\n          childLogic.showLogic = true;\n        } else {\n          childLogic.showLogic = false;\n          this.clearAnswersRecursively(childLogic);\n        }\n      });\n    }\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n    let answerLabel = answer;\n    if (typeof answer === 'string' && answer.includes('|')) {\n      answerLabel = answer.split('|')[0];\n    }\n\n    const stringInputValue = Array.isArray(inputValue)\n      ? inputValue.map((val) => val.toString())\n      : inputValue;\n\n    switch (condition) {\n      case '!=':\n        return answerLabel != stringInputValue;\n      case '=':\n        return answerLabel == stringInputValue;\n      case 'IN':\n        return stringInputValue.includes(answerLabel);\n      case 'NOT IN':\n        return !stringInputValue.includes(answerLabel);\n      default:\n        return false;\n    }\n  }\n\n  handleValidation(\n    isValid: boolean,\n    message: string = 'This field is required'\n  ) {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return this.inLine || this.inCard\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n    setTimeout(() => {\n      this.whenClauseService.markLoadCompleted();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-3\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n\n  <div\n    class=\"checkboxField-container\"\n    [class.two-column]=\"displayOptionsInColumn\"\n  >\n    <div class=\"checkboxField\" *ngFor=\"let option of customOptions\">\n      <input\n        class=\"formCheckbox mb-2\"\n        type=\"radio\"\n        [name]=\"question.id+'-'+rowId\"\n        [id]=\"question.id+'-'+rowId+'-'+option.value\"\n        [value]=\"option.label + '|' + option.value\"\n        [style.accent-color]=\"color\"\n        (blur)=\"validateInput()\"\n        [(ngModel)]=\"selectedOption\"\n        (ngModelChange)=\"validateInput()\"\n        [attr.data-state]=\"option.label + '|' + option.value\"\n        [attr.data-value]=\"selectedOption == option.label + '|' + option.value\"\n        [disabled]=\"disableEdit\"\n      />\n      <label class=\"formCheckLabel ms-2 me-2 mb-2\" [for]=\"question.id+'-'+rowId+'-'+option.value\">{{\n        option.label\n      }}</label>\n    </div>\n  </div>\n  <div\n    *ngIf=\"isInvalid && (!inLine || !selectedOption)\"\n    class=\"error-message\"\n  >\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-rich-text-editor-fields',\n  templateUrl: './rich-text-editor-fields.component.html',\n  styleUrls: ['./rich-text-editor-fields.component.scss'],\n})\nexport class RichTextEditorFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inSubForm: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  numberOfRows!: number;\n  limitedCharacters: boolean = false;\n  counts: number = 0;\n  htmlContent: string = '';\n  characterCount!: number;\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  private elementId: string='';\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n  constructor(\n      private validationService: ValidationService,\n      private tracker: ElementTrackerService,\n      private hiddenFieldService:HiddenFieldService\n    )  { }\n  editor: any;\n\n  ngOnInit() {\n    this.valueAssigned();    \n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n    this.limitedCharacters =\n      this.question.formElement.validation.limitedCharacters;\n    this.counts = this.question.formElement.validation.count;\n    this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n    this.limitedCharacters =\n      this.question.formElement.validation.limitedCharacters;\n    if (this.limitedCharacters) {\n      this.characterCount = this.question.formElement.validation.count;\n    }\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.htmlContent = this.defaultValue;\n    if(this.question.answer){\n      this.htmlContent = this.question?.answer;\n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n    }\n  }\n  editorCreated(editorInstance: any) {\n    this.editor = editorInstance;\n    this.updateEditorContent(this.htmlContent);\n    this.editor.on('selection-change', (range: any) => {\n      if (range === null) {\n        this.validateEditor();\n      }\n    });\n  }\n\n  // When you receive data from API\n  updateEditorContent(content: string) {\n    if (this.editor) {\n      // this.editor.clipboard.dangerouslyPasteHTML(content);\n      const delta = this.editor.clipboard.convert(content);\n      this.editor.setContents(delta, 'silent');\n    }\n    this.htmlContent = content;\n  }\n  validateEditor() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (!this.htmlContent && this.required) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validationMessage = 'This is a required question';\n    }\n  }\n\n\n\n  updateAnswer(content: string) {\n    this.question.answer = content;\n    this.validationService.clearInvalid(this.buildElementId());\n    if (this.htmlContent?.length >= this.characterCount) {\n      this.htmlContent = this.htmlContent.substring(0, this.characterCount);\n    }\n    this.question.answer = this.htmlContent;\n    this.validateEditor();\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  \n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <quill-editor\n    [(ngModel)]=\"htmlContent\"\n    (ngModelChange)=\"updateAnswer($event)\"\n    (onEditorCreated)=\"editorCreated($event)\"\n    (blur)=\"validateEditor()\"\n    class=\"editor\"\n    [ngClass]=\"{\n      'inSubform': inSubForm && !disableEdit,\n      'disable': disableEdit\n    }\"\n    placeholder=\"\"\n    [disabled]=\"disableEdit\"\n  ></quill-editor>\n  <div *ngIf=\"isInvalid && (!inLine || !htmlContent)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-selection-matrix-fields',\n  templateUrl: './selection-matrix-fields.component.html',\n  styleUrls: ['./selection-matrix-fields.component.scss'],\n})\nexport class SelectionMatrixFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() acceptedLanguage: string = '';\n  @Input() rowId: number = 0;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  selectionMatrixColumn: any[] = [];\n  selectionMatrixLabel: any[] = [];\n  selectedOptions: string[] = [];\n  validationFailed!: boolean;\n  validationMessage: string = '';\n  minSelectionValue!: number;\n  private elementId: string='';\n  selectionColor : string = '';\n  selectionColorRequired: boolean = false;\n  @Input() disableEdit: boolean = false;\n  \n  constructor(\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  )  { }\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.selectionColorRequired = this.question.formElement.appearance.selectionColorRequired;\n    if(this.selectionColorRequired){\n      this.selectionColor = this.question.formElement.appearance.selectionColor;      \n    }\n    if (\n      this.question?.formElement?.selectionMatrixLabel ||\n      this.question?.element?.formElement?.selectionMatrixColumn\n    ) {\n      this.selectionMatrixLabel = (\n        this.question?.formElement?.selectionMatrixLabel || []\n      )\n        .flatMap((label: any) => {\n          const lab = this.isParsableJSON(label) ? JSON.parse(label) : label;\n          return Array.isArray(lab)\n            ? lab.map((value) => ({ label: value }))\n            : { label: lab };\n        })\n        .filter((labelObj: any) => labelObj.label !== '');\n\n      this.selectionMatrixColumn = (\n        this.question?.formElement?.selectionMatrixColumn || []\n      )\n        .flatMap((column: any) => {\n          const col = this.isParsableJSON(column) ? JSON.parse(column) : column;\n          return Array.isArray(col)\n            ? col.map((value) => ({ column: value }))\n            : { column: col };\n        })\n        .filter((columnObj: any) => columnObj.column !== '');\n    }\n    this.minSelectionValue =\n      this.question?.formElement?.validation?.minSelectionValue;\n    if (this.question.answer) {\n      this.selectedOptions = this.question.answer;\n    }\n  }\n\n  private isParsableJSON(value: any): boolean {\n    if (typeof value !== 'string') return false;\n    try {\n      JSON.parse(value);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  onSelectionChange(rowIndex: number, value: string) {\n    this.selectedOptions[rowIndex] = value;\n    this.validateInput();\n  }\n\n  validateInput() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.validationMessage = '';\n    this.question.answer = this.selectedOptions;\n    if (this.required && this.selectedOptions.length == 0) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    } else if (this.selectedOptions.length < this.minSelectionValue) {\n      this.validationFailed = true;\n      this.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\n      this.question.validation = false;\n      this.question.validationMessage = `selected options must be greater than ${this.minSelectionValue}`;\n    } else {\n      this.question.validation = true;\n    }\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n    \n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n\n  <div [ngClass]=\"{ 'labelBorder-rtl': acceptedLanguage === 'ara' }\">\n    <table class=\"selectionMatrix\">\n      <thead>\n        <tr>\n          <th></th>\n          <th\n            class=\"text-center table-cell-wrap\"\n            *ngFor=\"let column of selectionMatrixColumn\"\n          >\n            {{ column.column }}\n          </th>\n        </tr>\n      </thead>\n      <tbody class=\"table-group-divider\">\n        <tr *ngFor=\"let label of selectionMatrixLabel; let rowIndex = index\">\n          <td class=\"table-cell-wrap\">{{ label.label }}</td>\n          <td\n            *ngFor=\"let column of selectionMatrixColumn; let colIndex = index\"\n            class=\"text-center\"\n          >\n            <input\n              type=\"radio\"\n              [attr.id]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\n              [name]=\"'radio-' + rowIndex + '-' + colIndex + '-' + rowId\"\n              class=\"selectionRadio\"\n              [style.accent-color]=\"selectionColor\"\n              [value]=\"label.label + '_' + column.column\"\n              [(ngModel)]=\"selectedOptions[rowIndex]\"\n              (ngModelChange)=\"\n                onSelectionChange(rowIndex, label.label + '_' + column.column)\n              \"\n              [disabled]=\"disableEdit\"\n            />\n          </td>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n    <div *ngIf=\"isInvalid && (!inLine || selectedOptions.length == 0)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message mt-2\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'lib-signature-fields',\n  templateUrl: './signature-fields.component.html',\n  styleUrls: ['./signature-fields.component.scss'],\n})\nexport class SignatureFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  \n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  maxFileSize: number = 0;\n  minFileSize: number = 0;\n\n  ngOnInit() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.maxFileSize = this.question.formElement.validation.maxFileSize;\n    this.minFileSize = this.question.formElement.validation.minFileSize;\n  }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n  <div  class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Renderer2, ElementRef, Output, EventEmitter } from '@angular/core';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-slider-fields',\n  templateUrl: './slider-fields.component.html',\n  styleUrls: ['./slider-fields.component.scss'],\n})\nexport class SliderFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  minValue: number = 0;\n  maxValue: number = 0;\n  stepValue: number = 0;\n  changeSliderColor: boolean = false;\n  sliderColor: string = '';\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  selectedValue: number = 0;\n  @Input() disableEdit: boolean = false;\n\n  constructor(private renderer: Renderer2, private el: ElementRef,private hiddenFieldService:HiddenFieldService) { }\n\n  ngOnInit() {\n\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.minValue = this.question.formElement.appearance.minValue;\n    this.maxValue = this.question.formElement.appearance.maxValue;\n    this.stepValue = this.question.formElement.appearance.stepValue;\n    this.changeSliderColor =\n      this.question.formElement.appearance.changeSliderColor;\n\n    if (this.changeSliderColor) {\n      this.sliderColor = this.question.formElement.appearance.sliderColor;\n    }\n\n    if (this.question.answer && Object.keys(this.question.answer).length>0) {\n      this.selectedValue = this.question?.answer;\n    } else {\n      this.selectedValue = this.minValue;\n    }\n  }\n\n\n  validateInput(event: any) {\n    this.question.answer = String(this.selectedValue);\n    this.question.validation = true;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n  <div  class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"sliderRow\">\n    <div class=\"sliderLeft\">\n      <mat-slider\n        [min]=\"minValue\"\n        [max]=\"maxValue\"\n        [step]=\"stepValue\"\n        [ngStyle]=\"{\n          '--mdc-slider-active-track-color': changeSliderColor\n            ? sliderColor\n            : ''\n        }\"\n      >\n        <input\n          matSliderThumb\n          [(ngModel)]=\"selectedValue\"\n          (input)=\"validateInput($event)\"\n          [disabled]=\"disableEdit\"\n        />\n      </mat-slider>\n    </div>\n    <div class=\"sliderRight\">\n      <label class=\"selected-count font-weight-bold\">{{ selectedValue }}</label>\n    </div>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport { DataService } from '../../services/data.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n@Component({\n  selector: 'lib-terms-and-condition-fields',\n  templateUrl: './terms-and-condition-fields.component.html',\n  styleUrls: ['./terms-and-condition-fields.component.scss'],\n})\nexport class TermsAndConditionFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  \n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  fileDataUrl:any;\n  private apiUrl: string = '';\n  imgUrl:any\n  header: any = {};\n  visible:boolean=false;\n  constructor(\n    private formService: FormService,\n    private http: HttpClient, \n    private dataService: DataService,\n    private hiddenFieldService:HiddenFieldService\n  ) {\n    this.dataService.apiUrl$.subscribe((data) => {\n      this.apiUrl = data;\n    });\n  }\n  ngOnInit() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.fileDataUrl=this.question.formElement.termsAndConditionType.fileUrl\n    this.question;\n    this.count;\n  }\n  preview(): Observable<any> {\n    const headers = new HttpHeaders({\n      'Content-Type': this.header.contentType,\n      'auth-user': this.header.authUser,\n    });\n    const body = {\n      // Your request body content here\n    };\n    const options = {\n      headers: headers,\n      body: body,\n    };\n    const fileUrl =this.fileDataUrl;\n    const encodedFileUrl = encodeURIComponent(fileUrl);\n    const fullUrl = `?url=${encodedFileUrl}`;\n    this.imgUrl= (this.apiUrl + `/api/cdn/preview${fullUrl}`);\n    this.visible= true;\n    return this.http.get<any>(this.apiUrl + `/api/cdn/preview${fullUrl}`, options);\n  }\n  closeModal() {\n    this.visible = false;\n  }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n  <div  class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\" ></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label (click)=\"preview()\">{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"modal1\" *ngIf=\"visible\">\n    <div class=\"modal-content1\">\n      <span class=\"close\" (click)=\"closeModal()\">&times;</span>\n      <div class=\"imgContiner\">\n      <img [src]=\"imgUrl\" alt=\"Image\">\n    </div>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, ElementRef, ViewChild, AfterViewInit, Output, EventEmitter } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-text-area-fields',\n  templateUrl: './text-area-fields.component.html',\n  styleUrls: ['./text-area-fields.component.scss'],\n})\nexport class TextAreaFieldsComponent implements AfterViewInit {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @ViewChild('textarea') textarea!: ElementRef<HTMLTextAreaElement>;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  answer: string = '';\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  numberOfRows!: number;\n  limitedCharacters!: boolean;\n  characterCount!: number;\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  enteredText: string = '';\n  maxHeight!: number;\n  lineHeight!: number;\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n  private subscribedToWhenClause = false;\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n  private elementId: string='';\n\n constructor(\n      private validationService: ValidationService,\n      private tracker: ElementTrackerService,\n      private whenClauseService:WhenClauseService,\n      private hiddenFieldService:HiddenFieldService\n    )  { }\n\n  ngAfterViewInit() {\n    if (this.textarea?.nativeElement) {\n      this.calculateMaxHeight();\n    }\n\n    this.elementId = `question-${this.question.id}`;\n    this.tracker.registerElement(this.elementId);\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.numberOfRows = this.question.formElement.appearance.numberOfRows;\n    this.limitedCharacters = this.question.formElement.validation.limitedCharacters;\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.enteredText = this.defaultValue;\n    if (this.limitedCharacters) {\n      this.characterCount = this.question.formElement.validation.count;\n    }\n    if(this.question.answer){\n      this.enteredText = this.question?.answer;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n      });\n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n    } else{\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n      });\n    }\n  }\n\n  calculateMaxHeight() {\n    const textareaEl = this.textarea.nativeElement;\n    const computedStyles = window.getComputedStyle(textareaEl);\n\n    // Get accurate line height\n    this.lineHeight = parseFloat(computedStyles.lineHeight); // Default fallback to 20px\n\n    // Consider padding and borders\n    const paddingTop = parseFloat(computedStyles.paddingTop) || 0;\n    const paddingBottom = parseFloat(computedStyles.paddingBottom) || 0;\n    const borderTop = parseFloat(computedStyles.borderTopWidth) || 0;\n    const borderBottom = parseFloat(computedStyles.borderBottomWidth) || 0;\n\n    // Correct height calculation\n    this.maxHeight = (this.lineHeight * this.numberOfRows) + paddingTop + paddingBottom + borderTop + borderBottom;\n\n    textareaEl.style.height = `${this.maxHeight}px`; // Set exact height\n  }\n\n  validateInput(event: Event) {\n    const textarea = event.target as HTMLTextAreaElement;\n\n    // Restrict overflow beyond max height\n    while (textarea.scrollHeight > this.maxHeight) {\n      textarea.value = textarea.value.slice(0, -1);\n    }\n\n    this.question.answer = textarea.value;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    setTimeout(() => {\n      this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n    });\n    this.validateTextarea();\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  validateTextarea() {\n    this.validationFailed = false;\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationMessage = '';\n\n    if (!this.enteredText && this.required && this.question.required) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n          if (!this.subscribedToWhenClause) {\n        this.subscribedToWhenClause = true;\n        this.whenClauseService.onQuestionChange().subscribe(change => {\n          this.validateTextarea();\n    });\n  }\n    } else {\n      this.question.validation = true;\n    }\n  }\n\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <textarea\n    #textarea\n    class=\"form-control mb-2\"\n    [ngClass]=\"{ 'no-scroll': numberOfRows }\"\n    [rows]=\"numberOfRows\"\n    wrap=\"hard\"\n    (input)=\"validateInput($event)\"\n    (blur)=\"validateTextarea()\"\n    [(ngModel)]=\"enteredText\"\n    [class.invalid]=\"validationFailed\"\n    [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\n    [maxlength]=\"characterCount\"\n    [disabled]=\"disableEdit\"\n  ></textarea>\n  <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { Logic } from '../../models/logic.model';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-text-fields',\n  templateUrl: './text-fields.component.html',\n  styleUrls: ['./text-fields.component.scss'],\n})\nexport class TextFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n  answer: string = '';\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n  validationType: string = '';\n  validation: string = '';\n  regex!: RegExp;\n  enteredText: string = '';\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  private elementId: string='';\n  private subscribedToWhenClause = false;\n\n\n   constructor(\n        private validationService: ValidationService,\n        private tracker: ElementTrackerService,\n        private whenClauseService:WhenClauseService,\n        private hiddenFieldService:HiddenFieldService\n      )  { }\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question?.count;\n    this.required = this.question?.required;\n    this.hint = this.question?.hint;\n    this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.enteredText = this.defaultValue;\n    this.validationType = this.question.formElement.validation?.validationType;\n    if (this.validationType == 'CUSTOM_VALIDATION') {\n      this.validation = this.question.formElement.validation?.validation;\n    } else if (this.validationType == 'REGULAR_EXPRESSION') {\n      this.regex = this.question.formElement.validation?.regex;\n    }\n\n    if (\n      this.question.answer !== null &&\n      this.question.answer !== undefined &&\n      ((typeof this.question.answer === 'string' &&\n        this.question.answer.trim() !== '') ||\n        (Array.isArray(this.question.answer) &&\n          this.question.answer.length > 0) ||\n        (typeof this.question.answer === 'object' &&\n          Object.keys(this.question.answer).length > 0))\n    ) {\n      this.enteredText = this.question.answer;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n      });\n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer,true);\n      });\n    } else{\n      setTimeout(() => {\n        this.whenClauseService.setQuestionAnswer(this.question.id,'',true);\n      });\n    }\n    if (this.question.childLogics && this.question.answer) {\n      this.updateChildLogics(this.question)\n    }\n  }\n\n  validatetextField() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.enteredText && this.question.required) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n       if (!this.subscribedToWhenClause) {\n        this.subscribedToWhenClause = true;\n        this.whenClauseService.onQuestionChange().subscribe(change => {\n          this.validatetextField();\n    });\n  }\n    } else {\n      this.question.validation = true;\n    }\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n  }\n\n  validateInput(event: any) {\n    this.validationService.clearInvalid(this.buildElementId());\n    let value = event.target.value;\n    if (this.validation == 'Numbers only') {\n      event.target.value = value?.replace(/\\D/g, '');\n    } else if (this.validation == 'Alphanumeric') {\n      event.target.value = value?.replace(/[^a-zA-Z0-9]/g, '');\n    } else if (this.validationType == 'REGULAR_EXPRESSION' && this.regex) {\n      //event.target.value = value?.replace(this.regex, '');\n      const regex = new RegExp(this.regex);\n\n      if (regex.test(value)) {\n        event.target.value = value;\n      } else {\n        event.target.value = value.slice(0, -1);\n      }\n    }\n    this.question.answer = event.target.value;\n    this.answerChange.emit({answer:event.target.value,maxPossibleScore:0});\n    this.whenClauseService.setQuestionAnswer(this.question.id,this.question.answer);\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n    this.validatetextField();\n    if(!this.inLine && !this.inCard) {\n      setTimeout(() => {\n        const el = document.getElementById(this.question.id);\n        if (el) {\n          (el as HTMLElement).focus();\n        }\n      });\n    }\n\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (this.evaluateCondition(this.enteredText, childLogic.condition, childLogic.inputValue)) {\n          childLogic.showLogic = true;\n        }\n        else {\n          childLogic.showLogic = false;\n          this.clearAnswersRecursively(childLogic);\n        }\n      });\n    }\n  }\n\n  evaluateCondition(answer: any, condition: string, inputValue: any): boolean {\n    const stringInputValue = inputValue;\n\n    switch (condition) {\n      case '!=':\n        return answer != inputValue;\n      case '=':\n        return answer == inputValue;\n      case 'LIKE':\n        return answer.includes(inputValue);\n      case 'NOT LIKE':\n        return !answer.includes(inputValue);\n      case 'BEGIN WITH':\n        return answer.startsWith(inputValue);\n      case 'END WITH':\n        return answer.endsWith(inputValue);\n      default:\n        return false;\n    }\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n    setTimeout(() => {\n      this.whenClauseService.markLoadCompleted();\n    });\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n\n  <input\n    type=\"text\"\n    class=\"form-control mb-2 height\"\n    [placeholder]=\"placeholder\"\n    [(ngModel)]=\"enteredText\"\n    (blur)=\"validatetextField()\"\n    (input)=\"validateInput($event)\"\n    [class.invalid]=\"validationFailed\"\n    [class.invalid-question]=\"isInvalid && (!inLine || !enteredText)\"\n    [id]=\"question.id\"\n    [disabled]=\"disableEdit\"\n  />\n  <div *ngIf=\"isInvalid && (!inLine || !enteredText)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-toggle-switch-fields',\n  templateUrl: './toggle-switch-fields.component.html',\n  styleUrls: ['./toggle-switch-fields.component.scss'],\n})\nexport class ToggleSwitchFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Input() acceptedLanguage: string ='';\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  labelOnValue: string = '';\n  labelOffValue: string = '';\n  labelOnColor: string = '';\n  labelOffColor: string = '';\n  toggleBackgroundColor: string = '';\n  selectedValue : string ='';\n  @Input() disableEdit: boolean = false;\n\n  constructor(\n    private hiddenFieldService:HiddenFieldService\n  )  { }\n  \n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  getDirectionClass(): string {\n    return this.acceptedLanguage === 'ara' ? 'direction-rtl' : 'direction-ltr';\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.labelOnValue = this.question.formElement.appearance.labelOnValue;\n    this.labelOffValue = this.question.formElement.appearance.labelOffValue;\n    this.labelOnColor = this.question.formElement.appearance.labelOnColor;\n    this.labelOffColor = this.question.formElement.appearance.labelOffColor;\n   \n    if (!this.question.answer) {\n      this.question.answer = this.labelOffValue;\n      this.question.validation = true;\n      this.selectedValue=this.labelOffValue;\n      this.toggleBackgroundColor = this.labelOffColor;\n    }\n    if (this.question.answer) {\n      if(this.question.answer===this.labelOnValue){\n        this.selectedValue=this.labelOnValue;\n        this.toggleBackgroundColor = this.labelOnColor;\n      }\n      else{\n        this.selectedValue=this.labelOffValue;\n        this.toggleBackgroundColor = this.labelOffColor;\n      }\n    \n      this.question.validation = true;\n    }\n  }\n\n  toggleSliderColor(event: any): void {\n    let isChecked = event.target.checked;    \n    this.question.answer = isChecked ?this.labelOnValue:this.labelOffValue;\n    this.question.validation = true;\n   this.selectedValue=this.question.answer;\n    this.toggleBackgroundColor = isChecked\n      ? this.question.formElement.appearance.labelOnColor\n      : this.question.formElement.appearance.labelOffColor;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n}\n","<div [ngClass]=\"{ 'mb-4': !inLine }\" class=\"px-3\" [attr.name]=\"question.testElementName\">\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"mt-2\">\n    <label\n      class=\"switch\"\n      [ngClass]=\"{\n        'direction-rtl': acceptedLanguage === 'ara',\n        'direction-ltr': acceptedLanguage !== 'ara'\n      }\"\n      [attr.name]=\"question.testElementName\"\n    >\n      <input\n        type=\"checkbox\"\n        id=\"togBtn\"\n        (change)=\"toggleSliderColor($event)\"\n        [checked]=\"selectedValue === labelOnValue\"\n        [attr.data-state]=\"selectedValue\"\n        [disabled]=\"disableEdit\"\n      />\n      <div\n        class=\"slider round\"\n        [ngClass]=\"getDirectionClass()\"\n        [ngStyle]=\"{ 'background-color': toggleBackgroundColor }\"\n      >\n        <span class=\"on action-btn-text\">{{ labelOnValue }}</span>\n        <span class=\"off action-btn-text\">{{ labelOffValue }}</span>\n      </div>\n    </label>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n@Component({\n  selector: 'lib-url-fields',\n  templateUrl: './url-fields.component.html',\n  styleUrls: ['./url-fields.component.scss'],\n})\nexport class UrlFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  showPreviewButton!: boolean;\n  enteredUrl: string = '';\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  defaultValue: string = '';\n  @Input() disableEdit: boolean = false;\n\n   private elementId: string='';\n     \n  constructor(\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private hiddenFieldService:HiddenFieldService\n  )  { }\n  \n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  handleClick() {\n    let textFieldValue = (document.getElementById('textField') as HTMLInputElement).value.trim();\n\n  if (!/^https?:\\/\\//i.test(textFieldValue)) {\n    textFieldValue = 'http://' + textFieldValue;\n  }\n\n  window.open(textFieldValue, '_blank');\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.placeholder = this.question.formElement.appearance.placeholder;\n    this.showPreviewButton =\n      this.question.formElement.appearance.showPreviewButton;\n    this.defaultValue = this.question?.defaultValue;\n    this.disableEdit = this.disableEdit ?? this.question?.disableEdit ?? false;\n    this.enteredUrl = this.defaultValue;\n    if(this.question.answer){\n      this.enteredUrl = this.question?.answer;  \n    }else if(this.defaultValue && !this.question.answer){\n      this.question.answer = this.defaultValue;\n    }\n  }\n  validateUrl() {\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationFailed = false;\n    this.validationMessage = '';\n    if (this.required && !this.enteredUrl) {\n      this.validationFailed = true;\n      this.validationMessage = 'This is a required question';\n      this.question.validation = false;\n      this.question.validationMessage = 'This is a required question';\n    }\n    else {\n      this.question.validation = true;\n    }\n  }\n\n  validateInput(event: any) {\n    this.validateUrl();\n    this.question.answer = event.target.value;\n    this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <div class=\"input-group\">\n    <input\n      [id]=\"question.id\"\n      type=\"text\"\n      class=\"form-control col-11.5 rounded height\"\n      [placeholder]=\"placeholder\"\n      [(ngModel)]=\"enteredUrl\"\n      (blur)=\"validateUrl()\"\n      (input)=\"validateInput($event)\"\n      [class.invalid]=\"validationFailed\"\n      [class.invalid-question]=\"isInvalid && (!inLine || !enteredUrl)\"\n      [disabled]=\"disableEdit\"\n    />\n    <div class=\"ps-2 pe-2\">\n      <button\n        *ngIf=\"showPreviewButton\"\n        type=\"button\"\n        class=\"btn col-.5 custom-button rounded d-flex justify-content-center align-items-center height\"\n        (click)=\"handleClick()\"\n      >\n        <svg\n          width=\"30\"\n          height=\"30\"\n          viewBox=\"0 0 30 30\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <path\n            d=\"M4.99561 16.2503C4.99561 21.7754 9.47462 26.2544 14.9998 26.2544C20.5249 26.2544 25.0039 21.7754 25.0039 16.2503C25.0039 10.7251 20.5249 6.24609 14.9998 6.24609H6.24613\"\n            stroke=\"#084FFF\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n          <path\n            d=\"M9.99766 2.49219L6.24609 6.24375\"\n            stroke=\"#084FFF\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n          <path\n            d=\"M9.99766 9.99766L6.24609 6.24609\"\n            stroke=\"#084FFF\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n          <path\n            d=\"M17.7924 14.8125L14.3035 18.3015L12.2051 16.2106\"\n            stroke=\"#084FFF\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\"\n          />\n        </svg>\n      </button>\n    </div>\n  </div>\n  <div *ngIf=\"isInvalid && (!inLine || !enteredUrl)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'lib-aggregate-function',\n  templateUrl: './aggregate-function.component.html',\n  styleUrls: ['./aggregate-function.component.scss']\n})\nexport class AggregateFunctionComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{ answer: any; maxPossibleScore?: number }>();\n  @Input() rowId: any ;\n  answer: string = '';\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  private elementId: string='';\n  private subscription!: Subscription;\n  result:number=0;\n  @Input() disableEdit: boolean = false;\n    \n   constructor(\n        private validationService: ValidationService,\n        private tracker: ElementTrackerService,\n        private aggregateService:AggregationFunctionService,\n        private cdr: ChangeDetectorRef\n      )  { }\n\n  ngOnInit() {\n    this.valueAssigned();\n    this.aggregateService.setAggregateField(this.rowId,this.question.id,this.question.formElement.aggregateFunction.aggregateOperation,this.question.formElement.aggregateFunction.formula);\n    \n    this.subscription = this.aggregateService.aggregateFieldResults$.subscribe(update => {\n      if (update && update.id === `${this.rowId}:${this.question.id}`) { // include rowId\n        if(update.evaluated){\n          this.result = update.result;\n          this.question.answer = String(this.result);\n          this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n          this.validationService.clearInvalid(this.buildElementId());\n        } else{\n          this.result = 0;\n          this.question.answer = '';\n          this.answerChange.emit({answer:this.question.answer,maxPossibleScore:0});\n        }\n      }\n    });\n  }\n  \n\n  valueAssigned() {\n    this.count = this.question?.count;\n    this.required = this.question?.required;\n    this.hint = this.question?.hint;\n    this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n    if (\n      this.question.answer !== null &&\n      this.question.answer !== undefined &&\n      ((typeof this.question.answer === 'string' &&\n        this.question.answer.trim() !== '') ||\n        (Array.isArray(this.question.answer) &&\n          this.question.answer.length > 0) ||\n        (typeof this.question.answer === 'object' &&\n          Object.keys(this.question.answer).length > 0))\n    ) {\n      this.result = this.question.answer;\n    }\n  }\n \n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n  \n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n  \n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n  \n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n  \n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  handleValidation(isValid: boolean, message: string = 'This field is required') {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return (this.inLine || this.inCard)\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n  \n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span> <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n  <input\n    type=\"text\"\n    class=\"form-control mb-2 height\"\n    [placeholder]=\"placeholder\"\n    [(ngModel)]=\"result\"\n    readonly\n    [class.invalid-question]=\"isInvalid && (!inLine || !result)\"\n    [id]=\"question.id\"\n  />\n  <div *ngIf=\"isInvalid && (!inLine || !result)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\ntype CurrencyMeta = {\n  codes: string[];\n  symbols?: string[];\n  mainUnit: string;\n  subUnit: string;\n  decimals: number;\n};\n\n@Component({\n  selector: 'lib-currency-fields',\n  templateUrl: './currency-fields.component.html',\n  styleUrls: ['./currency-fields.component.scss'],\n})\nexport class CurrencyFieldsComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Input() disableEdit: boolean = false;\n  @Output() answerChange = new EventEmitter<{\n    answer: any;\n    maxPossibleScore?: number;\n    amountInWords: string;\n    currency: string;\n  }>();\n  @Input() rowId: any;\n\n  count: number = 0;\n  required: boolean = false;\n  hint: string = '';\n  placeholder: string = '';\n  min!: number;\n  max!: number;\n  currencySymbol: string = '';\n  decimalPrecision!: number;\n  symbolPosition: string = 'Before the value';\n  thousandSeparator!: boolean;\n  showAmountInWords: boolean = false;\n  enteredAmount!: string;\n  validationFailed: boolean = false;\n  validationMessage: string = '';\n  private elementId: string = '';\n  amountInWordsText: string = '';\n  defaultCurrency:string='';\n  constructor(\n    private validationService: ValidationService,\n    private tracker: ElementTrackerService,\n    private aggregateService: AggregationFunctionService,\n    private hiddenFieldService:HiddenFieldService\n  ) {}\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.count = this.question.count;\n    this.required = this.question.required;\n    this.hint = this.question.hint;\n    this.defaultCurrency=this.question.formElement?.appearance?.defaultCurrency || '';\n    this.placeholder = this.question.formElement?.appearance?.placeholder || '';\n    this.currencySymbol = this.question.formElement?.appearance?.currencySymbol;\n    this.decimalPrecision =\n      this.question.formElement?.appearance?.decimalPrecision || 2;\n    this.symbolPosition =\n      this.question.formElement?.appearance?.symbolPosition ||\n      'Before the value';\n    this.thousandSeparator =\n      this.question.formElement?.appearance?.thousandSeparator;\n    this.min = this.question.formElement.validation.min;\n    this.max = this.question.formElement.validation.max;\n    this.showAmountInWords =\n      this.question.formElement?.appearance?.showAmountInWords;\n    if (this.question.formElement?.appearance?.currency) {\n      let userLocaleCureency = this.question.formElement?.appearance?.currency;\n      if (this.question.formElement.appearance.currencyOption) {\n        let currencyOption =\n          this.question.formElement.appearance.currencyOption;\n        if (currencyOption == 'auto') {\n          if (\n            this.question.formElement.appearance.limitCurrencySymbol &&\n            this.question.formElement.appearance.limitCurrencySymbol.length > 0\n          ) {\n            this.currencySymbol =\n              this.question.formElement.appearance.limitCurrencySymbol.includes(\n                userLocaleCureency\n              )\n                ? userLocaleCureency\n                : this.question.formElement?.appearance?.currencySymbol;\n          } else {\n            this.currencySymbol = userLocaleCureency;\n          }\n        } else if (currencyOption == 'specific') {\n          this.currencySymbol =\n            this.question.formElement?.appearance?.specificCurrencySymbol;\n        }\n      }\n    }\n    if (\n      !this.currencySymbol &&\n      this.question.formElement?.appearance?.currencySymbol\n    ) {\n      this.currencySymbol =\n        this.question.formElement?.appearance?.currencySymbol;\n    }\n    if(this.question.formElement?.appearance?.defaultCurrency){\n      this.currencySymbol = this.question.formElement?.appearance?.defaultCurrency;\n    }\n    if(this.question.answerCurrency){\n      this.currencySymbol=this.question.answerCurrency;\n    }\n\n\n    if (this.question.answer) {\n      this.initializeAnswer();\n    }\n    if (this.showAmountInWords) {\n      this.amountInWordsText = this.question.amountInWords;\n    }\n    if (this.question.childLogics && this.question.answer) {\n      this.updateChildLogics(this.question);\n    }\n    this.aggregateService.setNumberField(\n      this.rowId,\n      this.question.id,\n      this.question.answer\n    );\n  }\n\n  initializeAnswer() {\n    let value = this.question?.answer;\n    if (!value) return;\n    // check if numeric\n    if (!isNaN(Number(value))) {\n      if (this.thousandSeparator) {\n        const parts = value.split('.');\n        parts[0] = Number(parts[0]).toLocaleString('en-US'); // adds proper thousand separator\n        value = parts.join('.');\n      } else {\n        value = value;\n      }\n    }\n\n    this.enteredAmount = value;\n  }\n\n  preventNumberScroll(event: WheelEvent) {\n    if (document.activeElement === event.target) {\n      event.preventDefault();\n    }\n  }\n\n  validateNumber() {\n    this.validationFailed = false;\n    this.validationService.clearInvalid(this.buildElementId());\n    this.validationMessage = '';\n    let enteredAmount = this.parseCurrencyToNumber(this.enteredAmount);\n    if (this.required && !enteredAmount) {\n      this.validationFailed = true;\n      this.validationMessage = `Please enter a valid amount`;\n      this.question.validationMessage = `Please enter a valid amount`;\n      this.question.validation = false;\n    } else if (\n      (this.min !== undefined && enteredAmount < this.min) ||\n      (this.max !== undefined && enteredAmount > this.max)\n    ) {\n      this.validationFailed = true;\n\n      // Construct appropriate validation message based on whether min, max, or both are provided\n      if (this.min !== undefined && this.max !== undefined) {\n        this.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\n        this.question.validationMessage = `Please enter a valid amount between ${this.min} and ${this.max}`;\n      } else if (this.min !== undefined) {\n        this.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\n        this.question.validationMessage = `Please enter a amount greater than or equal to ${this.min}`;\n      } else if (this.max !== undefined) {\n        this.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\n        this.question.validationMessage = `Please enter a amount less than or equal to ${this.max}`;\n      }\n\n      this.question.validation = false;\n    } else {\n      this.question.validation = true;\n    }\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n  }\n\n  validateInput(event: any) {\n    this.validationService.clearInvalid(this.buildElementId());\n\n    // remove existing commas & currency symbol\n    let rawValue: string = (event.target.value || '')\n      .replace(/,/g, '')\n      .replace(this.currencySymbol || '', '');\n\n    // remove any characters except digits and dot\n    rawValue = rawValue.replace(/[^\\d.]/g, '');\n\n    // keep only the first dot (remove any additional dots)\n    const firstDot = rawValue.indexOf('.');\n    if (firstDot !== -1) {\n      // split into before-first-dot and rest, remove additional dots from rest\n      const before = rawValue.slice(0, firstDot);\n      const after = rawValue.slice(firstDot + 1).replace(/\\./g, '');\n      rawValue = `${before}.${after}`;\n    }\n\n    // determine decimal precision to enforce (default to 2)\n    const dp =\n      typeof this.decimalPrecision === 'number' && this.decimalPrecision >= 0\n        ? this.decimalPrecision\n        : 2;\n\n    // if there's a decimal part, trim it to allowed length\n    if (rawValue.includes('.')) {\n      const [intPart, decimalPart = ''] = rawValue.split('.');\n      const trimmedDecimal = decimalPart.slice(0, dp);\n      rawValue = trimmedDecimal\n        ? `${intPart}.${trimmedDecimal}`\n        : intPart + '.';\n    }\n\n    // format with thousand separator for display\n    let formattedValue = rawValue;\n    if (this.thousandSeparator && rawValue) {\n      const parts = rawValue.split('.');\n      // handle case where user types \".12\" -> parts[0] === ''\n      const intPartForFormat = parts[0] === '' ? '0' : parts[0];\n      parts[0] = Number(intPartForFormat).toLocaleString('en-US');\n      formattedValue = parts.join('.');\n      // if original had leading '.' (user typed \".12\"), restore it visually as \".12\"\n      if (rawValue.startsWith('.') && !formattedValue.startsWith('.')) {\n        formattedValue = formattedValue.replace(/^0/, '');\n      }\n    }\n\n    // keep numeric version for backend/calculations\n    this.question.answer = rawValue;\n    this.question.currencySymbol = this.currencySymbol;\n\n    // update field display\n    event.target.value = formattedValue;\n\n    this.aggregateService.setNumberField(\n      this.rowId,\n      this.question.id,\n      rawValue ? parseFloat(rawValue) : 0\n    );\n\n    if (this.question.childLogics) {\n      this.updateChildLogics(this.question);\n    }\n    if (this.showAmountInWords) {\n      this.amountInWordsText = this.convertAmountToWords(rawValue);\n      this.question.amountInWords = this.amountInWordsText;\n    }\n\n    this.answerChange.emit({\n      answer: this.question.answer,\n      maxPossibleScore: 0,\n      amountInWords: this.question.amountInWords,\n      currency: this.currencySymbol\n    });\n    this.validateNumber();\n    this.hiddenFieldService.updateHiddenFieldsOnChange();\n  }\n\n  // 2) typed currency map\n  private currencyMap: Record<string, CurrencyMeta> = {\n    USD: {\n      codes: ['USD'],\n      symbols: ['$', 'US$'],\n      mainUnit: 'Dollars',\n      subUnit: 'Cents',\n      decimals: 2,\n    },\n    INR: {\n      codes: ['INR'],\n      symbols: ['₹', 'Rs', '₨'],\n      mainUnit: 'Rupees',\n      subUnit: 'Paisa',\n      decimals: 2,\n    },\n    EUR: {\n      codes: ['EUR'],\n      symbols: ['€'],\n      mainUnit: 'Euros',\n      subUnit: 'Cents',\n      decimals: 2,\n    },\n    AED: {\n      codes: ['AED'],\n      symbols: ['AED', 'د.إ'],\n      mainUnit: 'Dirhams',\n      subUnit: 'Fils',\n      decimals: 2,\n    },\n    GBP: {\n      codes: ['GBP'],\n      symbols: ['£'],\n      mainUnit: 'Pounds',\n      subUnit: 'Pence',\n      decimals: 2,\n    },\n    JPY: {\n      codes: ['JPY'],\n      symbols: ['¥'],\n      mainUnit: 'Yen',\n      subUnit: '',\n      decimals: 0,\n    },\n    // add more entries as needed\n  };\n\n  // 3) convertAmountToWords using CurrencyMeta typing\n  convertAmountToWords(value: string): string {\n    if (!value) return '';\n\n    // prefer currencyCode (ISO) if available; fall back to symbol\n    const currencyCode = this.question?.currencyCode || null;\n    const currencySymbol =\n      this.question?.currencySymbol || this.currencySymbol || null;\n\n    // find currency metadata from map:\n    let meta: CurrencyMeta | undefined;\n\n    if (currencyCode) {\n      meta = this.currencyMap[currencyCode];\n    }\n\n    if (!meta && currencySymbol) {\n      meta = Object.values(this.currencyMap).find(\n        (m) => Array.isArray(m.symbols) && m.symbols.includes(currencySymbol)\n      );\n    }\n\n    // use fallback if not found — typed as CurrencyMeta\n    if (!meta) {\n      const fallbackName = (\n        currencyCode ||\n        currencySymbol ||\n        'Currency'\n      ).toString();\n      meta = {\n        codes: [currencyCode || fallbackName],\n        symbols: currencySymbol ? [currencySymbol] : [],\n        mainUnit: fallbackName,\n        subUnit: '',\n        decimals: 2,\n      };\n    }\n\n    // normalize numeric parts\n    const normalized = (value || '').toString().replace(/,/g, '');\n    const [intPartStr = '0', decimalPartStr = ''] = normalized.split('.');\n\n    const intPartNum = Number(intPartStr) || 0;\n\n    // calculate subunit number robustly:\n    const dp =\n      typeof meta.decimals === 'number' && meta.decimals >= 0\n        ? meta.decimals\n        : 2;\n    let subUnitNumber = 0;\n\n    if (dp > 0 && decimalPartStr) {\n      const scale = Math.pow(10, dp);\n      const decDigits = decimalPartStr.replace(/\\D/g, '');\n      // if shorter than dp, multiply; if longer, trim to dp\n      const trimmed = decDigits.slice(0, dp);\n      subUnitNumber = Number(trimmed) * Math.pow(10, dp - trimmed.length);\n      // guard for rounding overflow (e.g., .999 -> 1.00)\n      if (subUnitNumber >= scale) {\n        // increment integer part\n        return this.buildFinalPhrase(intPartNum + 1, 0, meta);\n      }\n    }\n\n    return this.buildFinalPhrase(intPartNum, subUnitNumber, meta);\n  }\n\n  // 4) buildFinalPhrase accepts CurrencyMeta (or same shape) — typed accordingly\n  private buildFinalPhrase(\n    intNum: number,\n    subNum: number,\n    meta: { mainUnit: string; subUnit: string; decimals: number }\n  ): string {\n    const mainWords = this.numberToWords(intNum) || 'Zero';\n\n    if (meta.decimals === 0 || !meta.subUnit) {\n      return `${mainWords} ${meta.mainUnit} Only`;\n    }\n\n    if (!subNum) {\n      return `${mainWords} ${meta.mainUnit} Only`;\n    }\n\n    const subWords = this.numberToWords(subNum);\n    return `${mainWords} ${meta.mainUnit} and ${subWords} ${meta.subUnit} Only`;\n  }\n\n  // -------------------------\n  // NUMBER → WORDS (Up to Crores)\n  // -------------------------\n  numberToWords(num: number): string {\n    if (num === 0) return 'Zero';\n\n    const a = [\n      '',\n      'One',\n      'Two',\n      'Three',\n      'Four',\n      'Five',\n      'Six',\n      'Seven',\n      'Eight',\n      'Nine',\n      'Ten',\n      'Eleven',\n      'Twelve',\n      'Thirteen',\n      'Fourteen',\n      'Fifteen',\n      'Sixteen',\n      'Seventeen',\n      'Eighteen',\n      'Nineteen',\n    ];\n    const b = [\n      '',\n      '',\n      'Twenty',\n      'Thirty',\n      'Forty',\n      'Fifty',\n      'Sixty',\n      'Seventy',\n      'Eighty',\n      'Ninety',\n    ];\n\n    const toWords = (n: number): string => {\n      if (n < 20) return a[n];\n      if (n < 100) return `${b[Math.floor(n / 10)]} ${a[n % 10]}`.trim();\n      if (n < 1000)\n        return `${a[Math.floor(n / 100)]} Hundred ${toWords(n % 100)}`.trim();\n      if (n < 100000)\n        return `${toWords(Math.floor(n / 1000))} Thousand ${toWords(\n          n % 1000\n        )}`.trim();\n      if (n < 10000000)\n        return `${toWords(Math.floor(n / 100000))} Lakh ${toWords(\n          n % 100000\n        )}`.trim();\n      return `${toWords(Math.floor(n / 10000000))} Crore ${toWords(\n        n % 10000000\n      )}`.trim();\n    };\n\n    return toWords(num);\n  }\n\n  updateChildLogics(question: any) {\n    if (question.childLogics && Array.isArray(question.childLogics)) {\n      question.childLogics.forEach((childLogic: any) => {\n        if (\n          this.evaluateCondition(\n            question.answer,\n            childLogic.condition,\n            childLogic.inputValue\n          )\n        ) {\n          childLogic.showLogic = true;\n        } else {\n          childLogic.showLogic = false;\n          this.clearAnswersRecursively(childLogic);\n        }\n      });\n    }\n  }\n\n  parseCurrencyToNumber(value: string): number {\n    if (!value) return 0;\n\n    // Remove currency symbol, commas, spaces\n    const numericString = value\n      .replace(new RegExp(`\\\\${this.currencySymbol}`, 'g'), '') // remove symbol\n      .replace(/,/g, '') // remove thousand separators\n      .trim();\n\n    // Convert to number\n    const num = parseFloat(numericString);\n    return isNaN(num) ? 0 : num;\n  }\n\n  clearAnswersRecursively(logic: any) {\n    if (!logic || !logic.rows) return;\n\n    logic.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        const element = item.element;\n\n        if (item.entityType === 'QUESTION' && element) {\n          // Clear answer if present\n          if ('answer' in element) {\n            element.answer = '';\n          }\n\n          // Recursively clear childLogics if any\n          if (element.childLogics && element.childLogics.length > 0) {\n            element.childLogics.forEach((childLogic: any) => {\n              this.clearAnswersRecursively(childLogic);\n            });\n          }\n        }\n\n        if (item.entityType === 'SUBFORM' && element && element.rows) {\n          // SUBFORM contains its own rows structure like a form\n          this.clearAnswersRecursively({ rows: element.rows });\n        }\n      });\n    });\n  }\n\n  evaluateCondition(answer: any, condition: any, inputValue: any) {\n    switch (condition) {\n      case '>':\n        return answer > Number(inputValue);\n      case '<':\n        return answer < Number(inputValue);\n      case '>=':\n        return answer >= Number(inputValue);\n      case '<=':\n        return answer <= Number(inputValue);\n      case '=':\n        return answer == inputValue;\n      case '!=':\n        return answer != inputValue;\n      default:\n        return false;\n    }\n  }\n\n  handleValidation(\n    isValid: boolean,\n    message: string = 'This field is required'\n  ) {\n    if (isValid) {\n      this.validationService.clearInvalid(this.buildElementId());\n    } else {\n      // this.validationService.setInvalid(this.question.id, message);\n    }\n  }\n\n  private buildElementId(): string {\n    return this.inLine || this.inCard\n      ? `${this.submissionIndex}-${this.question.id}`\n      : `${this.question.id}`;\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.buildElementId());\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n\n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n  }\n}\n","<div\n  [ngClass]=\"{ 'mb-4': !inLine }\"\n  class=\"px-3\"\n  [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n  [attr.name]=\"question.testElementName\"\n>\n  <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n    <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n    <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n    <label>{{ question.question }}</label\n    >&nbsp;\n    <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n    <div\n      class=\"svg-wrapper mb-2 hintIcon\"\n      [attr.data-title]=\"hint\"\n      *ngIf=\"hint\"\n    >\n      <svg\n        class=\"hintSvg\"\n        viewBox=\"0 0 30 30\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n          stroke=\"#323232\"\n          stroke-width=\"1.5\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </div>\n\n  <div class=\"currency-input inside\">\n    <span *ngIf=\"symbolPosition === 'Before the value'\" class=\"currency-symbol left\">\n      {{ currencySymbol }}\n    </span>\n\n    <input\n    type=\"text\"\n    class=\"form-control mb-2 height\"\n    [placeholder]=\"placeholder\"\n    [class.hide-spin-buttons]=\"true\"\n    (blur)=\"validateNumber()\"\n    [(ngModel)]=\"enteredAmount\"\n    [class.invalid]=\"validationFailed\"\n    [class.invalid-question]=\"isInvalid && (!inLine || !enteredAmount)\"\n    (input)=\"validateInput($event)\"\n    [attr.min]=\"min\"\n    [attr.max]=\"max\"\n    (wheel)=\"preventNumberScroll($event)\"\n    [disabled]=\"disableEdit\"\n    />\n\n    <span *ngIf=\"symbolPosition === 'After the value'\" class=\"currency-symbol right\">\n        {{ currencySymbol }}\n    </span>\n\n  </div>\n  <div *ngIf=\"showAmountInWords && amountInWordsText\" class=\"amount-in-words\">\n    {{ amountInWordsText }}\n  </div>\n  <div *ngIf=\"isInvalid && (!inLine || !enteredAmount)\" class=\"error-message\">\n    {{ errorMessage }}\n  </div>\n  <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n    {{ validationMessage }}\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'lib-hidden-field',\n  template: '',\n  styleUrls: ['./hidden-field.component.scss'],\n})\nexport class HiddenFieldComponent {\n  @Input() question: any = {};\n  @Input() inLine: boolean = false;\n  @Input() inCard: boolean = false;\n  @Input() submissionIndex!: number;\n  @Output() answerChange = new EventEmitter<{\n    answer: any;\n    maxPossibleScore?: number;\n  }>();\n  hint: string = '';\n  hiddenField!: any;\n  key: string = '';\n  valueSource: string = '';\n  value: string = '';\n  updateOn: string = '';\n  user: string = '';\n  private elementId: string = '';\n  private subscription!: Subscription;\n\n  constructor(\n    private tracker: ElementTrackerService,\n    private dataService: DataService,\n    private whenClauseService: WhenClauseService,\n    private hiddenFieldService: HiddenFieldService\n  ) {\n    this.dataService.header$.subscribe((data) => {\n      this.user = data.authUser;\n    });\n  }\n  isEdit = this.hiddenFieldService.getEditMode();\n  ngOnInit() {\n    if (!this.inCard || !this.inLine) {\n      this.hiddenFieldService.setHiddenField(this.question.id, this.question);\n    }\n\n    this.subscription = this.hiddenFieldService.hiddenFieldResults$.subscribe(\n      (update) => {\n        if (update && update.id === this.question.id) {\n          // include rowId\n          if (\n            this.isEdit &&\n            (this.updateOn == 'UPDATE' || this.updateOn == 'BOTH')\n          ) {\n            this.question.answer = update.result;\n          }\n        }\n      }\n    );\n\n    this.valueAssigned();\n  }\n\n  valueAssigned() {\n    this.hint = this.question?.hint;\n    this.hiddenField = this.question?.formElement?.hiddenField;\n    this.key = this.hiddenField?.key;\n    this.value = this.hiddenField?.value;\n    this.valueSource = this.hiddenField?.valueSource;\n    this.updateOn = this.hiddenField?.updateOn;\n\n    if (!this.isEdit || !this.question.answer) {\n      this.question.answer = this.resolveHiddenFieldValue(this.hiddenField);\n    }\n    setTimeout(() => {\n      this.whenClauseService.setQuestionAnswer(\n        this.question.id,\n        this.question.answer,\n        true\n      );\n    });\n    this.answerChange.emit({\n      answer: this.question.answer,\n      maxPossibleScore: 0,\n    });\n  }\n\n  resolveHiddenFieldValue(hiddenField: {\n    value: string | null;\n    valueSource: string | null;\n    key: string | null;\n  }): any {\n    if (!hiddenField?.valueSource) return null;\n\n    switch (hiddenField.valueSource) {\n      case 'CUSTOM_INPUT':\n        // Directly return the provided value\n        return hiddenField.value;\n\n      case 'LOCAL_STORAGE':\n        if (hiddenField.key) {\n          return localStorage.getItem(hiddenField.key);\n        }\n        return null;\n\n      case 'SESSION_STORAGE':\n        if (hiddenField.key) {\n          return sessionStorage.getItem(hiddenField.key);\n        }\n        return null;\n\n      case 'PREDEFINED_VARIABLE':\n        return this.resolvePredefinedVariable(hiddenField.value);\n\n      default:\n        return null;\n    }\n  }\n\n  private resolvePredefinedVariable(variable: string | null): any {\n    if (!variable) return null;\n\n    const now = new Date();\n\n    switch (variable) {\n      case 'CURRENT_DATE':\n        return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\n      case 'CURRENT_TIME':\n        return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\n      case 'CURRENT_DATE_TIME':\n        return now.toLocaleString(); // full ISO datetime\n      case 'EPOCH_TIME':\n        return now.getTime(); // milliseconds since 1970\n      case 'YEAR':\n        return now.getFullYear();\n      case 'MONTH':\n        return now.getMonth() + 1; // 1-12\n      case 'DAY':\n        return now.getDate(); // 1-31\n      case 'SUBMITTED_BY':\n        return this.user ? this.user : 'Unknown';\n      default:\n        return null;\n    }\n  }\n\n  ngAfterViewInit() {\n    if (this.inLine || this.inCard) {\n      this.elementId = `question-${this.submissionIndex}-${this.question.id}`;\n    } else {\n      this.elementId = `question-${this.question.id}`;\n    }\n    this.tracker.registerElement(this.elementId);\n  }\n\n  ngOnDestroy() {\n    if (this.elementId) {\n      this.tracker.unregisterElement(this.elementId);\n    }\n    if(this.subscription){\n      this.subscription.unsubscribe();\n    }\n  }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml, SafeResourceUrl } from '@angular/platform-browser';\n\n@Component({\n  selector: 'lib-iframe-fields',\n  templateUrl: './iframe-fields.component.html',\n  styleUrls: ['./iframe-fields.component.scss']\n})\nexport class IframeFieldsComponent {\n\n  @Input() question: any = {};\n  \n  height!: string;\n  width!: string;\n  contentType: string = '';\n  htmlContent: string = '';\n  cssContent: string = '';\n  scriptContent: string = '';\n  urlContent: string = '';\n  count!: number;\n\n  safeHtmlContent!: SafeHtml;\n  safeUrl!: SafeResourceUrl;\n\n  embeddableDomains = [\n    // Generic sites that usually allow embedding\n    'youtube.com',\n    'youtu.be',\n    'vimeo.com',\n    'player.vimeo.com',\n    'maps.google.com',\n    'www.google.com/maps',\n    'openstreetmap.org',\n    'codesandbox.io',\n    'stackblitz.com',\n    'jsfiddle.net',\n    'codepen.io',\n    'spotify.com',\n    'soundcloud.com',\n    'figma.com',\n    'canva.com',\n    'notion.so',\n    'facebook.com/plugins',\n    'instagram.com/p',\n    'twitter.com',\n  ];\n\n  constructor(private sanitizer: DomSanitizer) {}\n\n  ngOnInit() {\n    this.valueAssigned();\n  }\n\n  ngAfterViewInit() {\n    if (this.contentType === 'HTML') {\n      setTimeout(() => this.renderHtml(), 0);\n    } else if (this.contentType === 'LINK') {\n      setTimeout(() => this.renderLink(), 0);\n    }\n  }\n\n  valueAssigned() {\n    this.count = this.question?.count;\n    this.width = this.question.formElement.appearance.width\n      ? this.question.formElement.appearance.width + 'px'\n      : '100%';\n    this.height = this.question.formElement.appearance.height\n      ? this.question.formElement.appearance.height + 'px'\n      : '100%';\n    this.contentType =\n      this.question.formElement.iFrameProperties.contentType;\n    this.htmlContent =\n      this.question.formElement.iFrameProperties.html.content;\n    this.cssContent =\n      this.question.formElement.iFrameProperties.style.css;\n    this.scriptContent =\n      this.question.formElement.iFrameProperties.script.code;\n    this.urlContent = this.question.formElement.iFrameProperties.url;\n  }\n  @ViewChild('iframeRef') iframeRef!: ElementRef<HTMLIFrameElement>;\n  /** Render HTML with dynamic CSS */\n  renderHtml() {\n    const iframe = this.iframeRef?.nativeElement;\n\n    if (!iframe) return;\n\n    const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n\n    if (iframeDoc) {\n      // Build the complete HTML content to inject into the iframe\n      const safeHtml = `\n        <html>\n          <head>\n            <style>${this.cssContent || ''}</style>\n          </head>\n          <body>\n            ${this.htmlContent || ''}\n            <script>\n              (function(localStorage) {\n                try {\n                  ${\n                    this.isSafeScript(this.scriptContent)\n                      ? this.scriptContent\n                      : ''\n                  }\n                } catch (e) {\n                  document.body.innerHTML += '<p style=\"color:red\">Script Error: ' + e.message + '</p>';\n                }\n              })(window.localStorage);\n            </script>\n          </body>\n        </html>\n      `;\n\n      iframeDoc.open();\n      iframeDoc.write(safeHtml);\n      iframeDoc.close();\n    }\n  }\n\n  renderLink() {\n    if (!this.urlContent) {\n      this.safeUrl = '';\n      return;\n    }\n\n    const url = this.urlContent.trim();\n\n    // Check if URL is valid\n    if (!this.isValidUrl(url)) {\n      console.warn('Invalid URL format');\n      this.safeUrl = '';\n      return;\n    }\n\n    // Check if embeddable host\n    if (!this.isEmbeddableUrl(url)) {\n      console.warn('This website may not allow embedding');\n      // You can still LET it try\n      // Or block it completely\n      // For now: allow but warn\n    }\n\n    const embedUrl = this.convertToEmbedUrl(url);\n    this.safeUrl = this.sanitizeUrl(embedUrl);\n  }\n\n  isValidUrl(url: string): boolean {\n    try {\n      new URL(url);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  /** Sanitize URLs for iframes */\n  sanitizeUrl(url: string): SafeResourceUrl {\n    return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n  }\n\n  isEmbeddableUrl(url: string): boolean {\n    try {\n      const parsed = new URL(url);\n\n      return this.embeddableDomains.some((domain) =>\n        parsed.hostname.includes(domain)\n      );\n    } catch {\n      return false;\n    }\n  }\n\n  convertToEmbedUrl(url: string): string {\n    try {\n      const parsed = new URL(url);\n\n      // YouTube\n      if (\n        parsed.hostname.includes('youtube.com') &&\n        parsed.searchParams.get('v')\n      ) {\n        return `https://www.youtube.com/embed/${parsed.searchParams.get('v')}`;\n      }\n      if (parsed.hostname.includes('youtu.be')) {\n        return `https://www.youtube.com/embed/${parsed.pathname.substring(1)}`;\n      }\n\n      // Vimeo\n      if (parsed.hostname.includes('vimeo.com')) {\n        const videoId = parsed.pathname.split('/')[1];\n        return `https://player.vimeo.com/video/${videoId}`;\n      }\n\n      // Google Maps (no API key needed)\n      if (\n        parsed.hostname.includes('google.com') &&\n        parsed.pathname.startsWith('/maps')\n      ) {\n        if (parsed.pathname.includes('/maps/embed')) return url;\n\n        return `https://www.google.com/maps/embed?${parsed.searchParams.toString()}`;\n      }\n\n      return url;\n    } catch (e) {\n      return url;\n    }\n  }\n\n  /** Basic script validation to prevent unsafe operations */\n  isSafeScript(code: string): boolean {\n    const unsafePatterns = [\n      /window\\.parent/,\n      /document\\.cookie/,\n      /fetch\\(/,\n      /XMLHttpRequest/,\n      /eval\\(/,\n      /new Function/,\n      /setTimeout|setInterval/,\n    ];\n\n    return !unsafePatterns.some((pattern) => pattern.test(code));\n  }\n}\n","<div class=\"custom-embed mb-4\"\n     [style.width]=\"width\"\n     [style.height]=\"height\">\n\n  <ng-container [ngSwitch]=\"contentType\">\n\n    <!-- HTML, CSS, and Script rendered together -->\n    <iframe\n      *ngSwitchCase=\"'HTML'\"\n      #iframeRef\n      sandbox=\"allow-scripts allow-same-origin\"\n      [style.width]=\"width\"\n      [style.height]=\"height\"\n      frameborder=\"0\"\n    ></iframe>\n\n    <!-- Link Embed -->\n     <div *ngSwitchCase=\"'LINK'\">\n     <iframe\n     *ngIf=\"safeUrl\"\n     [src]=\"safeUrl\"\n     [style.width]=\"width\"\n     [style.height]=\"height\"\n     frameborder=\"0\"\n     allowfullscreen>\n   </iframe>\n     </div>\n    \n\n  </ng-container>\n</div>\n","import { ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'lib-question',\n  templateUrl: './question.component.html',\n  styleUrls: ['./question.component.scss']\n})\nexport class QuestionComponent {\n  @Input() question: any = {};\n  @Input() edit: boolean = false;\n  @Input() acceptedLanguage: string = '';\n  @Input() currentPageIndex: number = 0;\n  @Output() emitValidations = new EventEmitter<any>();\n  @Output() subFormChange = new EventEmitter<any>();\n  validations: any = [];\n  componentToLoad: any;\n  injector!: Injector;\n  childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n\n\n  constructor(private cdr: ChangeDetectorRef) { }\n\n  ngOnInit(): void {\n     this.loadComponent()\n  }\n\n  // private async loadComponent(): Promise<void> {\n  //   this.componentToLoad = await this.loadFormElementsComponent();\n  //   this.injector = this.createInjector();\n  // }\n//  safeStringify(obj: any) {\n//     const seen = new WeakSet();\n//     return JSON.stringify(obj, (key, value) => {\n//       if (typeof value === \"object\" && value !== null) {\n//         if (seen.has(value)) return;\n//         seen.add(value);\n//       }\n//       return value;\n//     }, 2);\n//   }\n//   getComponentForChildLogics(grid: any, state: string, answer: any): { component: Promise<any>, injector: Injector } {\n//     const key = this.safeStringify({grid, state});\n//     if (!this.childLogicCache[key]) {\n//       const component = this.loadFormElementsComponent();\n//       const injector = this.createInjector(grid, state, answer);\n//       this.childLogicCache[key] = { component, injector };\n//     }\n//     return this.childLogicCache[key];\n//   }\n\n//   private async loadFormElementsComponent() {\n//     const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n//     return FormElementsComponent;\n//   }\n\n//   private createInjector(grid: any, state: string, answer: any): Injector {\n//     return Injector.create({\n//       providers: [\n//         { provide: 'grid', useValue:grid},\n//         { provide: 'edit', useValue: this.edit },\n//         { provide: 'answer', useValue: answer },\n//         { provide: 'state', useValue:state },\n//         { provide: 'acceptedLanguage', useValue: this.acceptedLanguage }\n//       ],\n//     });\n//   }\n\n\n\n removeCircularReferences(obj: any): any {\n  const seen = new WeakSet();\n\n  function recurse(value: any): any {\n    if (value === null || typeof value !== 'object') {\n      return value;\n    }\n\n    if (seen.has(value)) {\n      return '[Circular]';\n    }\n\n    seen.add(value);\n\n    if (Array.isArray(value)) {\n      return value.map(item => recurse(item));\n    }\n\n    const output: any = {};\n    for (const key of Object.keys(value)) {\n      output[key] = recurse(value[key]);\n    }\n\n    seen.delete(value);\n    return output;\n  }\n\n  return recurse(obj);\n}\n\nprivate async loadComponent(): Promise<void> {\n  this.componentToLoad = await this.loadFormElementsComponent();\n  this.injector = this.createInjector();\n}\n\nprivate async loadFormElementsComponent() {\n  const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n  return FormElementsComponent;\n}\n\ncreateInjector(): Injector {\n  return Injector.create({\n    providers: [\n      { provide: 'grid', useValue: this.question?.childLogics },\n      { provide: 'state', useValue: 'child' },\n    ],\n  });\n}\n\n  updateSubFormWithSubmissions(event: any) {\n    this.subFormChange.emit(event);\n  }\n\n  handleValidation(validation: any) {\n    this.validations.push(validation);\n    this.emitValidations.emit(this.validations);\n    this.cdr.detectChanges();\n  }\n\n}\n","<div [ngSwitch]=\"question.formElement.elementType\">\n\n  <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-check-box-fields>\n  <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-date-time-fields>\n  <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-drop-down-fields>\n  <lib-file-picker-fields *ngSwitchCase=\"'FILE_PICKER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-file-picker-fields>\n  <lib-location-fields *ngSwitchCase=\"'LOCATION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-location-fields>\n  <lib-mail-fields *ngSwitchCase=\"'EMAIL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mail-fields>\n  <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-mobile-fields>\n  <lib-number-fields *ngSwitchCase=\"'NUMBER'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-number-fields>\n  <lib-password-fields *ngSwitchCase=\"'PASSWORD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-password-fields>\n  <lib-radio-button-fields *ngSwitchCase=\"'RADIO_BUTTON'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-radio-button-fields>\n  <lib-rich-text-editor-fields *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-rich-text-editor-fields>\n  <lib-selection-matrix-fields *ngSwitchCase=\"'SELECTION_MATRIX'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-selection-matrix-fields>\n  <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-signature-fields>\n  <lib-slider-fields *ngSwitchCase=\"'SLIDER'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-slider-fields>\n  <lib-terms-and-condition-fields *ngSwitchCase=\"'TERMS_AND_CONDITION'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-terms-and-condition-fields>\n  <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-area-fields>\n  <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-text-fields>\n  <lib-toggle-switch-fields *ngSwitchCase=\"'TOGGLE_SWITCH'\" [question]=\"question\" [acceptedLanguage]=\"acceptedLanguage\" (validate)=\"handleValidation($event)\"></lib-toggle-switch-fields>\n  <lib-url-fields *ngSwitchCase=\"'URL'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-url-fields>\n  <lib-aggregate-function *ngSwitchCase=\"'AGGREGATE_FUNCTION'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-aggregate-function>\n  <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\" [question]=\"question\" (validate)=\"handleValidation($event)\" [rowId]=\"'0'\"></lib-currency-fields>\n  <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" [question]=\"question\" (validate)=\"handleValidation($event)\"></lib-hidden-field>\n  <lib-iframe-fields *ngSwitchCase=\"'IFRAME_WIDGET'\" [question]=\"question\" ></lib-iframe-fields>\n</div>\n\n<ng-container *ngIf=\"question.childLogics\">\n\n  <!-- <ng-container *ngIf=\"componentToLoad\">\n    <ng-container *ngComponentOutlet=\"componentToLoad;\n                                      inputs: { grid: question.childLogics,\n                                                answer: question.answer,\n                                                state: 'child' }\"></ng-container>\n  </ng-container> -->\n\n  <!-- <ng-container *ngIf=\"getComponentForChildLogics(question.childLogics, 'child', question.answer) as cached\">\n    <ng-container\n      *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\n    </ng-container>\n  </ng-container> -->\n\n\n  <ng-container *ngIf=\"componentToLoad\">\n\n                      <ng-container *ngComponentOutlet=\"componentToLoad;\n                                                        inputs: { grid: question.childLogics,\n                                                                  answer: question?.answer,\n                                                                  state: 'child' }\"></ng-container>\n                    </ng-container>\n</ng-container>\n","import { Component, Inject, Input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';\n\n@Component({\n  selector: 'lib-confirm-dialog',\n  templateUrl: './confirm-dialog.component.html',\n  styleUrls: ['./confirm-dialog.component.scss']\n})\nexport class ConfirmDialogComponent {\n\n  constructor(@Inject(MAT_DIALOG_DATA) public data: any,\n  public dialogRef: MatDialogRef<ConfirmDialogComponent>){\n    this.messageHeader=data.messageHeader;\n   this.message=data.message;\n  }\n\n  message:string='';\n  messageHeader:string='';\n  closeModal() {\n    this.dialogRef.close();\n  }\n  \n}","<div class=\"\" id=\"checkdeleteModal\" tabindex=\"-1\">\n  <div class=\"modal-dialog\">\n    <div class=\"modal-content\">\n      <div class=\"modalHeader\">\n        <div class=\"title-div\">\n        </div>\n        <div class=\"header-btn\">\n            <img (click)=\"closeModal()\" src=\"/assets/icons/close-sidebar-mark-icon.svg\" alt=\"Close Sidebar Icon\">          \n        </div>\n    </div>\n      <div class=\"modalBody\">\n        <div class=\"row text-center\">\n            <img class=\"delete-icon\" src=\"/assets/icons/delete-no-outline-icon.svg\" alt=\"Delete Icon\"> \n            <p class=\"delete-confirm\">{{messageHeader}}</p>\n            <p class=\"delete-dialog\">{{message}}</p>\n        </div>\n      </div>\n      <div class=\"modalFooter\">\n        <div class=\"footer-btn \">\n        <button type=\"button\" class=\"delete-btn\"\n        (click)=\"dialogRef.close(true)\"\n       >Yes</button>\n        <button class=\"cancel-btn\"\n        (click)=\"dialogRef.close(false)\"\n        type=\"button\">\n            No\n        </button>\n      </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SubformCopyService {\n  copySubform(subForm: any, pages: any[]): { updatedPages: any[] } {\n    const questionRelation: Record<string, string> = {};\n    const copiedSubform = this.deepCopyWithNewIds(subForm, questionRelation);\n\n    // Attach copy metadata directly inside the copied subform\n    copiedSubform.copySubformMeta = {\n      id: copiedSubform.id,\n      title: '',\n      description: '',\n      parentSubform: subForm.id,\n      questionRelation,\n    };\n\n    if (!subForm.copiedForms) {\n        subForm.copiedForms = [];\n      }\n      subForm.copiedForms.push(copiedSubform.id);\n\n    const page = this.findPageContainingSubform(subForm.id, pages);\n\n    if (page) {\n      const rowIndex = page.rows.findIndex((row: any) =>\n        row.grid.some((grid: any) =>\n          grid.entityType === 'SUBFORM' && grid.element.id === subForm.id\n        )\n      );\n      copiedSubform.submissions = [];\n      copiedSubform.score = null;\n      if (rowIndex !== -1) {\n        const newSubformGrid = {\n          entityType: 'SUBFORM',\n          element: copiedSubform,\n          show: true\n        };\n\n        page.rows.splice(rowIndex + 1, 0, {\n          grid: [newSubformGrid],\n        });\n      }\n    }\n\n    return {\n      updatedPages: pages\n    };\n  }\n\n  private deepCopyWithNewIds(subform: any, questionRelation: Record<string, string>): any {\n    const idMap: Map<string, string> = new Map();\n\n    const replaceIds = (obj: any): any => {\n        if (Array.isArray(obj)) {\n          return obj.map(replaceIds);\n        } else if (obj !== null && typeof obj === 'object') {\n          const newObj: any = {};\n          for (const key of Object.keys(obj)) {\n            const value = obj[key];\n      \n            if (key === 'id' && typeof value === 'string') {\n              if (!idMap.has(value)) {\n                idMap.set(value, uuidv4());\n              }\n              newObj[key] = idMap.get(value);\n            } else {\n              newObj[key] = replaceIds(value);\n            }\n          }\n      \n          // ✅ Now handle answer reset and questionRelation mapping\n          if (\n            obj.entityType === 'QUESTION' &&\n            obj.element &&\n            typeof obj.element.id === 'string'\n          ) {\n            const originalQuestionId = obj.element.id;\n            const newQuestionId = newObj.element?.id;\n      \n            if (originalQuestionId && newQuestionId) {\n              questionRelation[newQuestionId] = originalQuestionId;\n            }\n      \n            // ✅ Reset answer here\n            if (newObj.element) {\n              newObj.element.answer = '';\n              newObj.element.files = '';\n            }\n          }\n      \n          return newObj;\n        }\n      \n        return obj;\n      };\n      \n\n      const getCircularReplacer = () => {\n        const seen = new WeakSet();\n        return (_key: string, value: any) => {\n          if (typeof value === \"object\" && value !== null) {\n            if (seen.has(value)) {\n              return undefined;\n            }\n            seen.add(value);\n          }\n          return value;\n        };\n      };\n\n    const copied = replaceIds(JSON.parse(JSON.stringify(subform, getCircularReplacer())));\n    if (\n      copied.defaultAnswers &&\n      Array.isArray(copied.defaultAnswers.answers)\n    ) {\n      copied.defaultAnswers.answers.forEach((answerBlock: any) => {\n        if (Array.isArray(answerBlock.defaultQuestionsAnswers)) {\n          answerBlock.defaultQuestionsAnswers.forEach((dqAnswer: any) => {\n            const oldQId = dqAnswer.questionId;            \n            if (idMap.has(oldQId)) {\n              dqAnswer.questionId = idMap.get(oldQId);\n            }\n          });\n        }\n      });\n    }\n    \n    copied.copied = true;\n    return copied;\n  }\n\n  private findPageContainingSubform(subformId: string, pages: any[]): any {\n    return pages.find((page: any) =>\n      page.rows.some((row: any) =>\n        row.grid.some(\n          (grid: any) =>\n            grid.entityType === 'SUBFORM' &&\n            grid.element &&\n            grid.element.id === subformId\n        )\n      )\n    );\n  }\n}\n","import { Component, Inject, Injector } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { ValidationService } from '../../services/validation.service';\n\n@Component({\n  selector: 'lib-submission-modal',\n  templateUrl: './submission-modal.component.html',\n  styleUrls: ['./submission-modal.component.scss'],\n})\nexport class SubmissionModalComponent {\n  acceptedLanguage: string = '';\n  grid: any;\n  subForm: any;\n  childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n  componentToLoad: any;\n  injector!: Injector;\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA) public data: any,\n    private validationService: ValidationService,\n    private dialogRef: MatDialogRef<SubmissionModalComponent>\n  ) {}\n\n  ngOnInit() {\n    this.subForm = this.data.subForm;\n    this.acceptedLanguage = this.data.acceptedLanguage;\n    this.loadComponent();\n  }\n\n  private async loadComponent(): Promise<void> {\n    this.componentToLoad = await this.loadFormElementsComponent();\n    this.injector = this.createInjector();\n  }\n\n  private async loadFormElementsComponent() {\n    const { FormElementsComponent } = await import('../../question/form-elements/form-elements.component');\n    return FormElementsComponent;\n  }\n\n  createInjector(): Injector {\n    return Injector.create({\n      providers: [\n        { provide: 'grid', useValue: this.grid?.element.childLogics  },\n        { provide: 'state', useValue: 'child' },\n      ],\n    });\n  }\n\n\n\n  closeModal() {\n    this.clearModal();\n    this.dialogRef.close();\n  }\n\n  saveSubmission() {\n    let isFormValid = true;\n    const pageIndex = this.subForm.pageIndex ?? 0;\n\n    this.subForm.rows.forEach((row: any) => {\n      row.grid.forEach((item: any) => {\n        if (item.entityType === 'QUESTION') {\n          const q = item.element;\n          const hasAnswer =\n            q.answer !== null &&\n            q.answer !== undefined &&\n            ((typeof q.answer === 'string' && q.answer.trim() !== '') ||\n              (Array.isArray(q.answer) && q.answer.length > 0) ||\n              (typeof q.answer === 'object' &&\n                Object.keys(q.answer).length > 0));\n          if (q.required && !hasAnswer) {\n            this.validationService.setInvalid(\n              q.id,\n              'This question is required',\n              pageIndex\n            );\n            isFormValid = false;\n          } else {\n            this.validationService.clearInvalid(q.id);\n          }\n        }\n      });\n    });\n\n    // 2) If any required question is missing, abort close and let the child components render errors\n    if (!isFormValid) {\n      return;\n    }\n\n    // 3) All good → close the dialog\n    this.dialogRef.close(this.subForm);\n  }\n\n  clearModal() {\n    if (this.subForm && this.subForm.rows) {\n      this.subForm.rows.flatMap((item: any) =>\n        item.grid.forEach((gridItem: any) => this.clearFormElement(gridItem))\n      );\n      // this.subForm.formElements.forEach((formElement: any) => {\n      //   this.clearFormElement(formElement);\n      // });\n    }\n  }\n\n  clearFormElement(formElement: any) {\n    if (formElement.entityType === 'QUESTION') {\n      formElement.element.answer = '';\n\n      if (formElement.element.formElement) {\n        if (formElement.element.formElement.elementType === 'FILE_PICKER') {\n          formElement.element.answer = null;\n        } else {\n          formElement.element.answer = '';\n        }\n      }\n\n      if (formElement.element.childLogics) {\n        formElement.element.childLogics?.forEach((childLogic: any) => {\n          childLogic.showLogic = false;\n          childLogic?.formElements?.forEach((formElement: any) => {\n            this.clearFormElement(formElement);\n          });\n        });\n      }\n    }\n  }\n}\n","<div class=\"mb-5\">\n    <div class=\"modalHeader mb-4\">\n        <div class=\"title-div\">\n            <p class=\"title\">{{subForm.title}}</p>\n        </div>\n        <div class=\"header-btn\">\n            <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" (click)=\"closeModal()\">\n                <path d=\"M8 8L16 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M16 8L8 16\" stroke=\"#1D252D\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n        </div>\n    </div>\n\n    <div class=\"px-3\" *ngFor=\"let row of subForm.rows\">\n      <ng-container *ngFor=\"let formElement of row.grid\">\n        <div *ngIf=\"formElement.entityType === 'QUESTION'\">\n          <lib-check-box-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'CHECK_BOX'\"\n            [question]=\"formElement.element\"\n          ></lib-check-box-fields>\n          <lib-date-time-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'DATE_TIME'\"\n            [question]=\"formElement.element\"\n          ></lib-date-time-fields>\n          <lib-drop-down-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'DROP_DOWN'\"\n            [question]=\"formElement.element\"\n          ></lib-drop-down-fields>\n          <lib-file-picker-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType === 'FILE_PICKER'\n            \"\n            [question]=\"formElement.element\"\n          ></lib-file-picker-fields>\n          <lib-location-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'LOCATION'\"\n            [question]=\"formElement.element\"\n          ></lib-location-fields>\n\n          <lib-mail-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'EMAIL'\"\n            [question]=\"formElement.element\"\n          >\n          </lib-mail-fields>\n          <lib-mobile-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'MOBILE'\"\n            [question]=\"formElement.element\"\n          >\n          </lib-mobile-fields>\n          <lib-number-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'NUMBER'\"\n            [question]=\"formElement.element\"\n            [rowId]=\"'0'\"\n          >\n          </lib-number-fields>\n          <lib-password-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'PASSWORD'\"\n            [question]=\"formElement.element\"\n          >\n          </lib-password-fields>\n          <lib-radio-button-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType === 'RADIO_BUTTON'\n            \"\n            [question]=\"formElement.element\"\n          ></lib-radio-button-fields>\n          <lib-rich-text-editor-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType === 'RICH_TEXT_EDITOR'\n            \"\n            [question]=\"formElement.element\"\n          ></lib-rich-text-editor-fields>\n          <lib-selection-matrix-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType === 'SELECTION_MATRIX'\n            \"\n            [question]=\"formElement.element\"\n            [acceptedLanguage] = \"acceptedLanguage\"\n          ></lib-selection-matrix-fields>\n          <lib-signature-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'SIGNATURE'\"\n            [question]=\"formElement.element\"\n          ></lib-signature-fields>\n          <lib-slider-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'SLIDER'\"\n            [question]=\"formElement.element\"\n          ></lib-slider-fields>\n          <lib-terms-and-condition-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType ===\n              'TERMS_AND_CONDITION'\n            \"\n            [question]=\"formElement.element\"\n          ></lib-terms-and-condition-fields>\n          <lib-text-area-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'TEXT_AREA'\"\n            [question]=\"formElement.element\"\n          ></lib-text-area-fields>\n          <lib-text-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'TEXT_BOX'\"\n            [question]=\"formElement.element\"\n          ></lib-text-fields>\n          <lib-toggle-switch-fields\n            *ngIf=\"\n              formElement.element.formElement.elementType === 'TOGGLE_SWITCH'\n            \"\n            [question]=\"formElement.element\"\n            [acceptedLanguage] = \"acceptedLanguage\"\n          ></lib-toggle-switch-fields>\n          <lib-url-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'URL'\"\n            [question]=\"formElement.element\"\n          ></lib-url-fields>\n          <lib-currency-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'CURRENCY'\"\n            [question]=\"formElement.element\"\n          ></lib-currency-fields>\n          <lib-hidden-field\n            *ngIf=\"formElement.element.formElement.elementType === 'HIDDEN_FIELD'\"\n            [question]=\"formElement.element\"\n            ></lib-hidden-field>\n            <lib-iframe-fields\n            *ngIf=\"formElement.element.formElement.elementType === 'IFRAME_WIDGET'\"\n            [question]=\"formElement.element\"\n            ></lib-iframe-fields>\n          <lib-aggregate-function\n          *ngIf=\"formElement.element.formElement.elementType === 'AGGREGATE_FUNCTION'\"\n          [question]=\"formElement.element\"\n          [rowId]=\"'0'\"\n          ></lib-aggregate-function>\n          <ng-container *ngIf=\"formElement?.element?.childLogics\">\n\n            <ng-container *ngIf=\"componentToLoad\">\n\n              <ng-container *ngComponentOutlet=\"componentToLoad;\n                                                inputs: { grid: formElement?.element?.childLogics,\n                                                          answer:  formElement?.element?.answer,\n                                                          state: 'child' }\"></ng-container>\n            </ng-container>\n          </ng-container>\n\n        </div>\n        <div *ngIf=\"formElement.entityType === 'SECTION'\">\n          <lib-section-fields\n            [section]=\"formElement.element\"\n          ></lib-section-fields>\n        </div>\n      </ng-container>\n\n      </div>\n\n    <div class=\"okBtn me-4 ms-4\">\n        <button\n          class=\"submitBtn ms-md-3 me-md-2 rounded-pill\"\n          type=\"button\"\n          (click)=\"saveSubmission()\">\n          Ok\n        </button>\n    </div>\n</div>\n","import { SubformProperty } from './../../models/subformPropery.model';\nimport { add } from 'ngx-bootstrap/chronos';\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MatDialog, MatDialogConfig } from '@angular/material/dialog';\nimport { SubmissionModalComponent } from '../../sub-form/submission-modal/submission-modal.component';\nimport { Attachment } from '../../models/attachment.model';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n\n@Component({\n  selector: 'lib-multiple-subform',\n  templateUrl: './multiple-subform.component.html',\n  styleUrls: ['./multiple-subform.component.scss'],\n})\nexport class MultipleSubformComponent {\n  @Input() subForm: any = {};\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() acceptedLanguage: string = '';\n\n  submissions: Submission[] = [];\n  deletedSubmissions: string[] = [];\n  displayedColumns: string[] = [];\n  addButtonLabel: string = 'Add New Submission';\n  maxPossibleGoodScore!:number;\n  maxPossibleBadScore!:number\n\n  constructor(\n    public dialog: MatDialog, \n    private sanitizer: DomSanitizer,\n    private scoreCalcService: ScoreCalculationService,\n    private whenClauseService:WhenClauseService\n  ) {}\n\n  ngOnInit() {\n    const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n    this.maxPossibleGoodScore = goodMax;\n    this.maxPossibleBadScore = badMax;\n    if (this.subForm?.submissions) {\n      this.submissions = this.subForm.submissions;\n      this.subForm.deletedSubmissions = [];\n    }\n    if(this.subForm?.property?.addButtonLabel) {\n      this.addButtonLabel = this.subForm.property.addButtonLabel;\n        }\n    this.initializeDisplayedColumns();\n    this.whenClauseService.addGridsFromSubform(this.subForm);\n  }\n\n  initializeDisplayedColumns() {\n    this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\n      item.grid\n        .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\n        .map((gridItem: any) => gridItem.element.question)\n    );\n  \n    this.displayedColumns.push('actions');\n  }\n\n  getAnswerByQuestionId(submission: Submission, question: any) {\n    const questionId = question.element.id;\n    const answerObj = submission.answers.find(\n      (answer) => answer.questionId === questionId\n    );\n\n    if (!answerObj) {\n      return null;\n    }\n\n    let content: string = '';\n    \n    if (answerObj.answer) {\n      if (Array.isArray(answerObj.answer)) {\n        const processedItems = answerObj.answer.map((item: any) => {\n          if (typeof item === 'string' && item.includes('|')) {\n            return item.split('|')[0];\n          }\n          return item;\n        });\n        content = processedItems.join(', ');\n      } else if (typeof answerObj.answer === 'string') {\n        content = answerObj.answer.includes('|')\n          ? answerObj.answer.split('|')[0]\n          : answerObj.answer;\n      }\n    }\n    let currencySymbol = '';\n    if(question.element.formElement.elementType === 'CURRENCY'){\n      currencySymbol = this.fetchCurrencySymbol(question.element);\n      answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(currencySymbol + ' ' +content);\n    } else{\n      answerObj['htmlContent'] = this.sanitizer.bypassSecurityTrustHtml(content);\n    }\n    return answerObj;\n  }\n\n  fetchCurrencySymbol(question:any){\n    let currencySymbol = '';\n    if (question.formElement?.appearance?.currency) {\n      let userLocaleCureency = question.formElement?.appearance?.currency;\n      if (question.formElement.appearance.currencyOption) {\n        let currencyOption =\n          question.formElement.appearance.currencyOption;\n        if (currencyOption == 'auto') {\n          if (\n            question.formElement.appearance.limitCurrencySymbol &&\n            question.formElement.appearance.limitCurrencySymbol.length > 0\n          ) {\n            currencySymbol =\n              question.formElement.appearance.limitCurrencySymbol.includes(\n                userLocaleCureency\n              )\n                ? userLocaleCureency\n                : question.formElement?.appearance?.currencySymbol;\n          } else {\n            currencySymbol = userLocaleCureency;\n          }\n        } else if (currencyOption == 'specific') {\n          currencySymbol =\n            question.formElement?.appearance?.specificCurrencySymbol;\n        }\n      }\n    }\n    if (\n      !currencySymbol &&\n      question.formElement?.appearance?.currencySymbol\n    ) {\n      currencySymbol =\n        question.formElement?.appearance?.currencySymbol;\n    }\n    return currencySymbol;\n  }\n\n  subFormSubmission(subForm: any) {\n    const processFormElements = (\n      rows: any[],\n      isChild: boolean = false\n    ): Answer[] => {\n      const answers: Answer[] = [];\n\n      rows.flatMap((item: any) =>\n        item.grid.forEach((formElement: any) => {\n          const answer: Answer = {\n            questionId: formElement.element.id,\n            answer: formElement.element?.answer || '',\n            files:\n              formElement.element.formElement.elementType == 'FILE_PICKER' &&\n              formElement.element.answer\n                ? formElement.element.answer\n                : undefined,\n            isChild: isChild,\n            amountInWords: formElement.element.amountInWords\n          };\n\n          if (\n            formElement.element.formElement.elementType == 'FILE_PICKER' &&\n            formElement.element.answer\n          ) {\n            const fileNames = formElement.element.answer.map(\n              (file: any) => file?._file.name\n            );\n            answer.answer = fileNames;\n          }\n          answers.push(answer);\n          if(\n            formElement.element.formElement &&\n            (formElement.element.formElement.elementType === 'DROP_DOWN' ||\n            formElement.element.formElement.elementType === 'RADIO_BUTTON' ||\n            formElement.element.formElement.elementType === 'CHECKBOX') &&\n            formElement.element.formElement.scoring &&\n            formElement.element.formElement.scoring.enableScoring\n          ){\n            answers.forEach((ans) => {\n              if(formElement.element.id === ans.questionId){\n                const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, formElement.element);\n                // Save total score and individual scores\n                // ans.score = scoreResult?.totalScore ?? 1;\n                ans.scores = scoreResult?.scores;\n              }\n            });\n          }\n          if (formElement.element.childLogics) {\n            formElement.element.childLogics.forEach((logic: any) => {\n              if (logic.showLogic) {\n                answers.push(...processFormElements(logic.rows, true));\n                logic.showLogic = false;\n              }\n            });\n          }\n        })\n      );\n      return answers;\n    };\n\n    const answers = processFormElements(subForm.rows);\n\n    if (answers.length > 0) {\n      const submission: Submission = {\n        submissionId: '',\n        answers: answers,\n      };\n      if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\n        // Mark that this submission had all scoring questions answered at least once\n        submission.hasAllScoringAnsweredOnce = true;\n      }\n\n      if (submission.hasAllScoringAnsweredOnce) {\n        // Recalculate score always after once satisfied\n        submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\n      }\n      this.submissions.push(submission);\n      this.submissions = [...this.submissions];\n      this.updateSubFormWithSubmissions();\n    }\n    // this.subForm.score = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleScore);\n  }\n\n  editSubFormSubmission(index: number, submission: Submission) {\n    const subForm = this.bindAnswers(this.subForm, submission);\n    const dialogConfig = new MatDialogConfig();\n    dialogConfig.position = { top: '5%' };\n    dialogConfig.width = '100%';\n    dialogConfig.data = {\n      subForm: subForm,\n      acceptedLanguage: this.acceptedLanguage,\n    };\n    dialogConfig.hasBackdrop = true;\n    dialogConfig.disableClose = true;\n    dialogConfig.maxHeight = '80vh';\n    const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\n\n    dialogRef.afterClosed().subscribe((result: any) => {\n      if (result) {\n        this.updateSubmission(result, index);\n      }\n    });\n  }\n\n  bindAnswers(subForm: any, submission: Submission): any {\n    const bindElementAnswers = (rows: any[], answers: Answer[]) => {\n      rows.forEach((row: any) => {\n        row.grid.forEach((grid: any) => {\n          const answer = answers.find((a) => a.questionId === grid.element.id);\n          if (answer) {\n            grid.element.answer =\n              grid.element.formElement.elementType == 'FILE_PICKER'\n                ? answer?.files\n                : answer.answer;\n            grid.element.amountInWords = answer?.amountInWords;\n            grid.element.answerId = answer.answerId;\n            grid.element.attachments = answer.attachments;\n          }\n          if (grid.element.childLogics) {\n            grid.element.childLogics.forEach((logic: any) => {\n              bindElementAnswers(logic.rows, answers);\n            });\n          }\n        });\n      });\n    };\n\n    const updatedSubForm = { ...subForm };\n    bindElementAnswers(updatedSubForm.rows, submission.answers);\n    return updatedSubForm;\n  }\n\n  deleteSubForm(index: number) {\n    const submission = this.submissions[index];\n    if (submission.submissionId) {\n      this.deletedSubmissions.push(submission.submissionId);\n    }\n    this.submissions.splice(index, 1);\n    this.submissions = [...this.submissions];\n    this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n    this.updateSubFormWithSubmissions();\n  }\n\n  addNewSubmission() {\n    const subForm = this.cleanCircularReferences(this.subForm);\n    subForm.rows.forEach((row: any) => {\n      row.grid.forEach((grid: any) => {\n        grid.element.answer = grid.element.formElement.elementType === 'FILE_PICKER' ? [] : '';\n        grid.element.attachments = [];\n        grid.element.answerId = null;\n      });\n    });\n\n    const dialogConfig = new MatDialogConfig();\n    dialogConfig.position = { top: '5%' };\n    dialogConfig.width = '100%';\n    dialogConfig.data = {\n      subForm: subForm,\n      acceptedLanguage: this.acceptedLanguage,\n    };\n    dialogConfig.hasBackdrop = true;\n    dialogConfig.disableClose = true;\n    dialogConfig.maxHeight = '80vh';\n    dialogConfig.autoFocus = false;\n    const dialogRef = this.dialog.open(SubmissionModalComponent, dialogConfig);\n\n    dialogRef.afterClosed().subscribe((result: any) => {\n      if (result) {\n        const hasData = result.rows.flatMap((item: any) =>\n          item.grid.some(\n            (formElement: any) =>\n              formElement.element.answer &&\n              formElement.element.answer.length > 0\n          )\n        );\n\n        if (hasData) {\n          this.subFormSubmission(result);\n        }\n      }\n    });\n  }\n\n  cleanCircularReferences(obj: any, seen = new WeakSet()) {\n    if (obj === null || typeof obj !== 'object') {\n      return obj;\n    }\n\n    if (seen.has(obj)) {\n      return;\n    }\n\n    seen.add(obj);\n\n    const cleanedObj: any = Array.isArray(obj) ? [] : {};\n\n    for (const key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        cleanedObj[key] = this.cleanCircularReferences(obj[key], seen);\n      }\n    }\n\n    return cleanedObj;\n  }\n\n  updateSubmission(result: any, index: number) {\n    const processFormElements = (rows: any[], answers: Answer[]) => {\n      rows.forEach((row: any) => {\n        row.grid.forEach((grid: any) => {\n          let answer: Answer = {\n            questionId: grid.element.id,\n            answerId: grid.element?.answerId || '',\n            attachments: grid.element.attachments || [],\n            answer: [],\n            files: [],\n            deleteFiles: [],\n          };\n\n          if (answer.attachments) {\n            answer.answer = answer.attachments.map(\n              (attachment: Attachment) => attachment.fileName\n            );\n          }\n          if (grid.element.formElement.elementType === 'FILE_PICKER') {\n            if (grid.element?.deleteFiles.length > 0) {\n              answer.answer = []; // Reset answer.answer only once\n              answer.deleteFiles = answer.deleteFiles || [];\n\n              // Collect deleted file IDs\n              grid.element.deleteFiles.forEach((deletedId: string) => {\n                answer.deleteFiles?.push(deletedId);\n              });\n\n              if (answer.attachments) {\n                // Filter out deleted attachments\n                answer.attachments = answer.attachments.filter((attachment: Attachment) => {\n                  if (!grid.element.deleteFiles.includes(attachment.fileId)) {\n                    return true;\n                  }\n                  return false;\n                });\n\n                // Rebuild answer.answer with the remaining attachments\n                answer.answer = answer.attachments.map((attachment) => attachment.fileName);\n              }\n\n            }\n            if (grid.element.answer) {\n              answer.files = grid.element.answer;\n              let fileNamesArray = Array.isArray(answer.answer) ? [...answer.answer] : [];\n\n              grid.element.answer.forEach((file: any) => {\n                const fileName = file._file?.name;\n                if (!fileNamesArray.includes(fileName)) {\n                  fileNamesArray.push(fileName);\n                }\n              });\n\n              answer.answer = fileNamesArray; // Append to existing array instead of overwriting\n            }\n          } else {\n            answer = {\n              questionId: grid.element.id,\n              answerId: grid.element?.answerId || '',\n              attachments: grid.element.attachments,\n              answer: grid.element.answer,\n              maximumPossibleScore: grid.element.maxPossibleScore,\n              amountInWords: grid.element.amountInWords\n            };\n          }\n          grid.element.answer = '';\n          answers.push(answer);\n          if(\n            grid.element.formElement &&\n            (grid.element.formElement.elementType === 'DROP_DOWN' ||\n              grid.element.formElement.elementType === 'RADIO_BUTTON' ||\n              grid.element.formElement.elementType === 'CHECK_BOX') &&\n              grid.element.formElement.scoring &&\n              grid.element.formElement.scoring.enableScoring\n          ){\n            answers.forEach((ans) => {\n              if(grid.element.id === ans.questionId){\n                const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, grid.element);\n                // Save total score and individual scores\n                ans.scores = scoreResult?.scores;\n              }\n            });\n          }\n\n          if (grid.element.childLogics) {\n            grid.element.childLogics.forEach((logic: any) => {\n              if (logic.showLogic) {\n                processFormElements(logic.rows, answers);\n              }\n            });\n          }\n        });\n      });\n    };\n\n    this.submissions[index].answers = [];\n    processFormElements(result.rows, this.submissions[index].answers);\n    this.submissions[index].scores = this.scoreCalcService.calculateSubmissionScore(this.submissions[index].answers);\n    this.submissions = [...this.submissions];\n    const hasAnyScore = this.submissions.some(\n      sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\n    );\n    \n    if (hasAnyScore) {\n      this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n    } else {\n      this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n    }\n    this.updateSubFormWithSubmissions();\n    this.clearEmptyRows();\n  }\n\n  updateSubFormWithSubmissions() {\n    this.subForm.submissions = this.submissions;\n    this.subForm.maxPossibleScore = {\n      'good': this.maxPossibleGoodScore,\n      'bad': this.maxPossibleBadScore\n    }\n    this.subForm.deletedSubmissions = this.deletedSubmissions;\n    this.subFormChange.emit(this.subForm);\n  }\n\n  clearEmptyRows() {\n    const nonEmptySubmissions: Submission[] = [];\n    const emptySubmissionIds: string[] = [];\n\n    this.submissions.forEach((submission) => {\n      if (submission.answers.some((answer) => answer.answer !== '')) {\n        nonEmptySubmissions.push(submission);\n      } else if (submission.submissionId) {\n        emptySubmissionIds.push(submission.submissionId);\n      }\n    });\n\n    this.submissions = nonEmptySubmissions;\n    this.deletedSubmissions.push(...emptySubmissionIds);\n    this.updateSubFormWithSubmissions();\n  }\n}\n","<div class=\"example-container\" tabindex=\"0\">\n  <div class=\"table-container\">\n    <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\n      <ng-container *ngFor=\"let row of subForm.rows\">\n        <ng-container\n          *ngFor=\"let formElement of row.grid\"\n          [matColumnDef]=\"formElement.element.question\"\n        >\n          <th\n            mat-header-cell\n            *matHeaderCellDef\n            class=\"border border-1 column-width\"\n          >\n            {{ formElement.element.question }}\n          </th>\n          <td\n            mat-cell\n            *matCellDef=\"let submission\"\n            class=\"border border-1\"\n            [id]=\"'question-'+submission.submissionId\"\n            [ngClass]=\"{\n              hidden: getAnswerByQuestionId(submission, formElement)\n                ?.isChild\n            }\"\n          >\n            <div\n              [innerHTML]=\"\n                getAnswerByQuestionId(submission, formElement)\n                  ?.htmlContent\n              \"\n            ></div>\n          </td>\n        </ng-container>\n      </ng-container>\n      <ng-container matColumnDef=\"actions\" stickyEnd>\n        <th mat-header-cell *matHeaderCellDef class=\"border border-1\">\n          Actions\n        </th>\n        <td\n          mat-cell\n          *matCellDef=\"let submission; let i = index\"\n          class=\"text-center border border-1\"\n        >\n          <div>\n            <button\n              class=\"btn\"\n              mat-icon-button\n              [matMenuTriggerFor]=\"menu\"\n              aria-label=\"Example icon-button with a menu\"\n            >\n              <mat-icon>more_vert</mat-icon>\n            </button>\n            <mat-menu #menu=\"matMenu\">\n              <button\n                mat-menu-item\n                (click)=\"editSubFormSubmission(i, submission)\"\n              >\n                <svg\n                  width=\"29\"\n                  height=\"28\"\n                  viewBox=\"0 0 29 28\"\n                  fill=\"none\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                  <rect\n                    x=\"0.5\"\n                    y=\"0.5\"\n                    width=\"28\"\n                    height=\"26.4737\"\n                    rx=\"5.5\"\n                    fill=\"white\"\n                    stroke=\"#D8D8D8\"\n                  />\n                  <path\n                    fill-rule=\"evenodd\"\n                    clip-rule=\"evenodd\"\n                    d=\"M12.0009 19.0787H9.1582V16.2361C9.1582 15.9447 9.2739 15.6653 9.47999 15.4593L16.2224 8.71686C16.4284 8.5105 16.708 8.39453 16.9995 8.39453C17.2911 8.39453 17.5707 8.5105 17.7767 8.71686L19.5201 10.4603C19.7264 10.6663 19.8424 10.9458 19.8424 11.2374C19.8424 11.529 19.7264 11.8086 19.5201 12.0145L12.7777 18.757C12.5715 18.9628 12.2922 19.0785 12.0009 19.0787Z\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                  <path\n                    d=\"M15.1704 10.3984L17.8415 13.0695\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                </svg>\n              </button>\n              <button mat-menu-item (click)=\"deleteSubForm(i)\">\n                <svg\n                  width=\"29\"\n                  height=\"28\"\n                  viewBox=\"0 0 29 28\"\n                  fill=\"none\"\n                  xmlns=\"http://www.w3.org/2000/svg\"\n                >\n                  <rect\n                    x=\"0.5\"\n                    y=\"0.5\"\n                    width=\"27.6402\"\n                    height=\"26.1328\"\n                    rx=\"5.5\"\n                    fill=\"white\"\n                    stroke=\"#D8D8D8\"\n                  />\n                  <path\n                    d=\"M8.60449 9.20637H20.0354\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                  <path\n                    d=\"M19.2189 9.20703V17.7863C19.2189 18.6482 18.4881 19.3462 17.5859 19.3462H11.0539C10.1517 19.3462 9.4209 18.6482 9.4209 17.7863V9.20703\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                  <path\n                    d=\"M16.7696 6.67122H11.8706\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                  <path\n                    d=\"M12.6871 12.3242V16.2239\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                  <path\n                    d=\"M15.9532 12.3242V16.2239\"\n                    stroke=\"#084FFF\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                  />\n                </svg>\n              </button>\n            </mat-menu>\n          </div>\n        </td>\n      </ng-container>\n\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n    </table>\n  </div>\n\n  <div class=\"footer\">\n    <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\n      <svg\n        width=\"15\"\n        height=\"14\"\n        viewBox=\"0 0 15 14\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\n          stroke=\"#D8D8D8\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M5.3335 7.50347H9.66683\"\n          stroke=\"#084FFF\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M7.50005 5.33594V9.66927\"\n          stroke=\"#084FFF\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n      <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { Attachment } from '../../models/attachment.model';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { Answer } from '../../models/answer.model';\nimport { Submission } from '../../models/submission.model';\nimport { DataService } from '../../services/data.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\n\n@Component({\n  selector: 'lib-inline-multiple-subform',\n  templateUrl: './inline-multiple-subform.component.html',\n  styleUrls: ['./inline-multiple-subform.component.scss'],\n})\nexport class InlineMultipleSubformComponent {\n  @Input() subForm: any = {};\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() acceptedLanguage: string = '';\n  maxPossibleScore!:number;\n  maxPossibleGoodScore!:number;\n  maxPossibleBadScore!:number\n\n  submissions: Submission[] = [];\n  deletedSubmissions: string[] = [];\n  displayedColumns: string[] = [];\n  addButtonLabel: string = 'Add New';\n  user: string = '';\n  elementsWithWhenClause: any;\n  editableQuestions: string[] = [];\n  constructor(\n    private scoreCalcService: ScoreCalculationService,\n    private dataService:DataService,\n    public whenClauseService: WhenClauseService,\n    private hiddenFieldService:HiddenFieldService\n  ){\n    this.dataService.header$.subscribe((data) => {\n      this.user = data.authUser;\n    });\n  }\n  isEdit = this.hiddenFieldService.getEditMode();\n  ngOnInit() {\n    // this.maxPossibleScore = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n    const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(this.subForm);\n    this.maxPossibleGoodScore = goodMax;\n    this.maxPossibleBadScore = badMax;\n    if (this.subForm?.submissions) {\n      this.submissions = this.subForm.submissions;\n      this.subForm.deletedSubmissions = [];\n    }\n    if (this.subForm?.property?.addButtonLabel) {\n      this.addButtonLabel = this.subForm.property.addButtonLabel;\n    }\n    this.initializeDisplayedColumns();\n    this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\n      this.subForm\n    );\n    this.hiddenFieldService.extractSubformHiddenFields(this.subForm);\n    this.updateWhenClause();\n    if(this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions){\n      this.editableQuestions = this.subForm.submissionCopyConfig.editableQuestions || [];\n    }\n  }\n\n\n  updateWhenClause(){\n    if(this.submissions.length>0){\n      this.submissions.forEach((submission)=>{\n        submission.answers.forEach((ans)=>{\n          this.whenClauseService.evaluateSubformWhenClauses(ans.answer, submission, ans.questionId ||'',this.elementsWithWhenClause);        });\n      })\n    }\n  }\n\n  initializeDisplayedColumns() {\n    this.displayedColumns = this.subForm.rows.flatMap((item: any) =>\n      item.grid\n        .filter((gridItem: any) => gridItem.element?.formElement?.elementType !== 'HIDDEN_FIELD')\n        .map((gridItem: any) => gridItem.element.question)\n    );\n    this.displayedColumns.push('actions');\n  }\n\n  populateHiddenFieldAnswers() {\n    if (!this.submissions?.length) return;\n  \n    this.submissions.forEach((submission: any) => {\n      submission.answers.forEach((ans: any) => {\n        // Find the question definition by questionId\n        const question = this.findQuestionById(this.subForm.rows, ans.questionId);\n  \n        if (question?.formElement?.elementType === 'HIDDEN_FIELD') {\n          const hiddenField = question.formElement.hiddenField;\n          const resolvedAnswer = this.resolveHiddenFieldValue(hiddenField);\n  \n          ans.answer = resolvedAnswer;\n          ans.maximumPossibleScore = 0; // same as your HiddenFieldComponent emit\n        }\n      });\n    });\n  }\n\n  findQuestionById(rows: any[], questionId: string): any {\n    for (const row of rows) {\n      for (const gridItem of row.grid) {\n        if (gridItem.element?.id === questionId) {\n          return gridItem.element;\n        }\n      }\n    }\n    return null;\n  }\n\n  resolveHiddenFieldValue(hiddenField: {\n    value: string | null,\n    valueSource: string | null,\n    key: string | null\n  }): any {\n    if (!hiddenField?.valueSource) return null;\n  \n    switch (hiddenField.valueSource) {\n      case 'CUSTOM_INPUT':\n        // Directly return the provided value\n        return hiddenField.value;\n  \n      case 'LOCAL_STORAGE':\n        if (hiddenField.key) {\n          return localStorage.getItem(hiddenField.key);\n        }\n        return null;\n  \n      case 'SESSION_STORAGE':\n        if (hiddenField.key) {\n          return sessionStorage.getItem(hiddenField.key);\n        }\n        return null;\n  \n      case 'PREDEFINED_VARIABLE':\n        return this.resolvePredefinedVariable(hiddenField.value);\n  \n      default:\n        return null;\n    }\n  }\n\n  private resolvePredefinedVariable(variable: string | null): any {\n    if (!variable) return null;\n  \n    const now = new Date();\n  \n    switch (variable) {\n      case 'CURRENT_DATE':\n        return now.toISOString().split('T')[0]; // e.g. \"2025-09-29\"\n      case 'CURRENT_TIME':\n        return now.toTimeString().split(' ')[0]; // e.g. \"15:42:18\"\n      case 'CURRENT_DATE_TIME':\n        return now.toLocaleString(); // full ISO datetime\n      case 'EPOCH_TIME':\n        return now.getTime(); // milliseconds since 1970\n      case 'YEAR':\n        return now.getFullYear();\n      case 'MONTH':\n        return now.getMonth() + 1; // 1-12\n      case 'DAY':\n        return now.getDate(); // 1-31\n      case 'SUBMITTED_BY':\n        return this.user ? this.user : 'Unknown';\n      default:\n        return null;\n    }\n  }\n\n  addNewSubmission() {\n    const emptyAnswers: Answer[] = [];\n    this.subForm.rows.forEach((row: any) => {\n      row.grid.forEach((gridItem: any) => {\n        if (\n          gridItem.entityType === 'QUESTION' &&\n          gridItem.element &&\n          gridItem.element.id\n        ) {\n          emptyAnswers.push({\n            questionId: gridItem.element.id,\n            answer: '',\n            maximumPossibleScore:0,\n            show: gridItem.show,\n            required: gridItem.element.required\n          });\n        }\n      });\n    });\n    const submission: Submission = {\n      submissionId: '',\n      answers: emptyAnswers,\n    };\n    this.submissions.push(submission);\n    this.submissions = [...this.submissions];\n    this.updateSubFormWithSubmissions();\n    this.populateHiddenFieldAnswers();\n  }\n\n  isSubmissionEditable(\n    submission: any,\n    questionId: string\n  ): boolean {\n    if (!this.editableQuestions?.length) {\n      return false;\n    }\n  \n    // Must be a copied submission\n    if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\n      return false;\n    }\n  \n    // Question must be editable\n    return this.editableQuestions.includes(questionId);\n  }\n\n  updateSubFormWithSubmissions() {\n    this.clearHiddenAnswers();\n    this.subForm.submissions = this.submissions;\n    this.subForm.maxPossibleScore = {\n      'good': this.maxPossibleGoodScore,\n      'bad': this.maxPossibleBadScore\n    }\n    this.subForm.deletedSubmissions = this.deletedSubmissions;\n    this.subFormChange.emit(this.subForm);\n  }\n\n  getSubmissionQuestion(submission: Submission, formElement: any): any {\n    const ansObj = submission.answers.find(\n      (a) => a.questionId === formElement.element.id\n    );\n    const questionClone = { ...formElement.element };\n    questionClone.answer = ansObj ? ansObj.answer : '';\n    questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\n    questionClone.copiedAttachments = ansObj?.copiedAttachments ? ansObj.copiedAttachments : [];\n    questionClone.amountInWords = ansObj?.amountInWords ? ansObj.amountInWords : '';\n    questionClone.required = ansObj?.required !== undefined ? ansObj.required : questionClone.required;\n    return questionClone;\n  }\n\n  updateInlineAnswer(submission: Submission, question: any, newAnswerObject: any) {\n    if(question.formElement.elementType != 'HIDDEN_FIELD' && this.isEdit){\n      submission = this.hiddenFieldService.updateSubformHiddenFieldsFromCache(this.subForm.id, submission, 'UPDATE');\n    }\n    const newAnswer = newAnswerObject.answer;\n    const amountInWords = newAnswerObject?.amountInWords;\n    const currency = newAnswerObject?.currency;\n    this.whenClauseService.evaluateSubformWhenClauses(newAnswer, submission, question.id,this.elementsWithWhenClause);\n    const submissionIndex = this.submissions.indexOf(submission);\n    if (submissionIndex > -1) {\n      const existingAnswer = this.submissions[submissionIndex].answers.find(\n        (a) => a.questionId === question.id\n      );\n\n      if (\n        question.formElement &&\n        question.formElement.elementType === 'FILE_PICKER'\n      ) {\n        // Map file objects to file names.\n        let fileNames: string[] = [];\n        if (newAnswer && Array.isArray(newAnswer)) {\n          fileNames = newAnswer.map((file: any) => file?._file?.name);\n        }\n\n        // Get deleted file IDs from the question (if any).\n        let deletedFiles: string[] = [];\n        if (question.deleteFiles && question.deleteFiles.length > 0) {\n          deletedFiles = question.deleteFiles;\n        }\n\n        if (existingAnswer) {\n          existingAnswer.files = newAnswer;\n          existingAnswer.answer = fileNames;\n          // Initialize deleteFiles if it's not defined.\n          if (!existingAnswer.deleteFiles) {\n            existingAnswer.deleteFiles = [];\n          }\n          // Append any deleted file IDs not already present.\n          deletedFiles.forEach((deletedId: string) => {\n            if (!existingAnswer.deleteFiles!.includes(deletedId)) {\n              existingAnswer.deleteFiles!.push(deletedId);\n            }\n          });\n        } else {\n          const newObj: Answer = {\n            questionId: question.id,\n            files: newAnswer,\n            answer: fileNames,\n            deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\n          };\n          this.submissions[submissionIndex].answers.push(newObj);\n        }\n      } else {\n        // For non-file picker elements, update normally.\n        if (existingAnswer) {\n          existingAnswer.answer = newAnswer;\n          existingAnswer.maximumPossibleScore = newAnswerObject.maxPossibleScore;\n          existingAnswer.amountInWords = amountInWords;\n          existingAnswer.currencySymbol = currency; \n        } else {\n          this.submissions[submissionIndex].answers.push({\n            questionId: question.id,\n            answer: newAnswer,\n            maximumPossibleScore: newAnswerObject.maxPossibleScore,\n            amountInWords: amountInWords,\n            currencySymbol: currency\n          });\n        }\n        if(\n          question.formElement &&\n          (question.formElement.elementType === 'DROP_DOWN' ||\n          question.formElement.elementType === 'RADIO_BUTTON' ||\n          question.formElement.elementType === 'CHECK_BOX') &&\n          question.formElement.scoring &&\n          question.formElement.scoring.enableScoring\n        ){\n          submission.answers.forEach((ans) => {\n            if(question.id === ans.questionId){\n              const scoreResult = this.scoreCalcService.calculateScoreFromAnswer(ans.answer, question);\n              // Save total score and individual scores\n              ans.scores = scoreResult?.scores;\n            }\n          });\n          // Check scoring condition\n          if (this.scoreCalcService.shouldCalculateScore(this.subForm, submission)) {\n            // Mark that this submission had all scoring questions answered at least once\n            submission.hasAllScoringAnsweredOnce = true;\n          }\n\n          if (submission.hasAllScoringAnsweredOnce) {\n            // Recalculate score always after once satisfied\n            submission.scores = this.scoreCalcService.calculateSubmissionScore(submission.answers);\n          }\n        }\n      }\n      const hasAnyScore = this.submissions.some(\n        sub => sub.scores?.some(s => s.score !== null && s.score !== undefined)\n      );\n      \n      if (hasAnyScore) {\n        this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n      } else {\n        this.subForm.scores = null; // or 0, depending on how you want to represent \"no score yet\"\n      }\n      this.updateSubFormWithSubmissions();\n    }\n  }\n\n  updateDeletedFiles(\n    submission: Submission,\n    question: any,\n    deletedFiles: string[]\n  ) {\n    // Find the matching answer object based on the questionId\n    const answerObj = submission.answers.find(\n      (ans) => ans.questionId === question.id\n    );\n\n    if (answerObj) {\n      // Ensure deleteFiles is always an array\n      if (!answerObj.deleteFiles) {\n        answerObj.deleteFiles = [];\n      }\n\n      // Add deleted file IDs to deleteFiles array while avoiding duplicates\n      deletedFiles.forEach((fileId) => {\n        if (!answerObj.deleteFiles!.includes(fileId)) {\n          answerObj.deleteFiles!.push(fileId);\n        }\n      });\n\n      answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(item=>{\n        return !deletedFiles.includes(item);\n      });\n    }\n  }\n\n  deleteSubmission(index: number) {\n    const submission = this.submissions[index];\n    if (submission.submissionId) {\n      this.deletedSubmissions.push(submission.submissionId);\n    }\n    this.submissions.splice(index, 1);\n    this.submissions = [...this.submissions];\n    const totalSubmissions = this.submissions.length;\n    const maxScore = totalSubmissions*this.maxPossibleScore;\n    this.subForm.scores = this.scoreCalcService.calculateFinalScore(this.submissions,this.maxPossibleGoodScore,this.maxPossibleBadScore);\n    this.updateSubFormWithSubmissions();\n  }\n\n  clearEmptySubmissions() {\n    const nonEmptySubmissions: Submission[] = [];\n    const emptySubmissionIds: string[] = [];\n\n    this.submissions.forEach((submission) => {\n      const hasValue = submission.answers.some(\n        (answer) =>\n          answer.answer !== '' &&\n          answer.answer !== null &&\n          answer.answer !== undefined\n      );\n      if (hasValue) {\n        nonEmptySubmissions.push(submission);\n      } else if (submission.submissionId) {\n        emptySubmissionIds.push(submission.submissionId);\n      }\n    });\n\n    this.submissions = nonEmptySubmissions;\n    this.deletedSubmissions.push(...emptySubmissionIds);\n    this.updateSubFormWithSubmissions();\n  }\n  \n  clearHiddenAnswers() {\n    for (const submission of this.submissions) {\n      if (!submission.answers || !Array.isArray(submission.answers)) continue;\n  \n      for (const ans of submission.answers) {\n        // If show flag is explicitly false → clear the answer value\n        if (ans.show === false) {\n          ans.answer = \"\";   // clear the answer\n          ans.files = [];    // clear files (optional)\n          ans.scores = [];   // clear score (optional)\n        }\n      }\n    }\n  }\n}\n","<div class=\"example-container\" tabindex=\"0\">\n  <div class=\"table-container\">\n    <table mat-table [dataSource]=\"submissions\" class=\"mat-elevation-z8\">\n      <ng-container *ngFor=\"let row of subForm.rows\">\n        <ng-container\n          *ngFor=\"let formElement of row.grid\"\n          [matColumnDef]=\"formElement.element.question\"\n        >\n          <th\n            mat-header-cell\n            *matHeaderCellDef\n            class=\"border border-1 column-width\"\n          >\n            {{ formElement.element.question }}\n          </th>\n          <td\n            mat-cell\n            *matCellDef=\"let submission;let i=index\"\n            class=\"border-cell column-width\"\n            [id]=\"'question-'+submission.submissionId\"\n          >\n            <div *ngIf=\"formElement.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(formElement.element.id,submission)\">\n              <div [ngSwitch]=\"formElement.element.formElement.elementType\">\n                <lib-check-box-fields\n                  *ngSwitchCase=\"'CHECK_BOX'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [rowId]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-check-box-fields>\n                <lib-date-time-fields\n                  *ngSwitchCase=\"'DATE_TIME'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-date-time-fields>\n                <lib-drop-down-fields\n                  *ngSwitchCase=\"'DROP_DOWN'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-drop-down-fields>\n                <lib-file-picker-fields\n                  *ngSwitchCase=\"'FILE_PICKER'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                  (inlineDeleteFiles)=\"\n                    updateDeletedFiles(submission, formElement.element, $event)\n                  \"\n                ></lib-file-picker-fields>\n                <lib-location-fields\n                  *ngSwitchCase=\"'LOCATION'\"\n                  [inLine]=\"true\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-location-fields>\n                <lib-mail-fields\n                  *ngSwitchCase=\"'EMAIL'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-mail-fields>\n                <lib-mobile-fields\n                  *ngSwitchCase=\"'MOBILE'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-mobile-fields>\n                <lib-number-fields\n                  *ngSwitchCase=\"'NUMBER'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  [rowId]=\"i\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-number-fields>\n                <lib-password-fields\n                  *ngSwitchCase=\"'PASSWORD'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-password-fields>\n                <lib-radio-button-fields\n                  *ngSwitchCase=\"'RADIO_BUTTON'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  [rowId]=\"i\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-radio-button-fields>\n                <lib-rich-text-editor-fields\n                  *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-rich-text-editor-fields>\n                <lib-selection-matrix-fields\n                  *ngSwitchCase=\"'SELECTION_MATRIX'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [acceptedLanguage]=\"acceptedLanguage\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  [rowId]=\"i\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-selection-matrix-fields>\n                <lib-signature-fields\n                  *ngSwitchCase=\"'SIGNATURE'\"\n                  [inLine]=\"true\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-signature-fields>\n                <lib-slider-fields\n                  *ngSwitchCase=\"'SLIDER'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-slider-fields>\n                <lib-terms-and-condition-fields\n                  *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n                  [inLine]=\"true\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-terms-and-condition-fields>\n                <lib-text-area-fields\n                  *ngSwitchCase=\"'TEXT_AREA'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-text-area-fields>\n                <lib-text-fields\n                  *ngSwitchCase=\"'TEXT_BOX'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-text-fields>\n                <lib-toggle-switch-fields\n                  *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  [acceptedLanguage]=\"acceptedLanguage\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-toggle-switch-fields>\n                <lib-url-fields\n                  *ngSwitchCase=\"'URL'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-url-fields>\n                <lib-currency-fields\n                  *ngSwitchCase=\"'CURRENCY'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-currency-fields>\n                <lib-hidden-field\n                  *ngSwitchCase=\"'HIDDEN_FIELD'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-hidden-field>\n                <lib-aggregate-function\n                  *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n                  [inLine]=\"true\"\n                  [submissionIndex]=\"i\"\n                  [question]=\"getSubmissionQuestion(submission, formElement)\"\n                  [disableEdit]=\"isSubmissionEditable(submission,formElement.element.id)\"\n                  [rowId]=\"i\"\n                  (answerChange)=\"\n                    updateInlineAnswer(submission, formElement.element, $event)\n                  \"\n                ></lib-aggregate-function>\n              </div>\n            </div>\n          </td>\n        </ng-container>\n      </ng-container>\n\n      <ng-container matColumnDef=\"actions\" stickyEnd>\n        <th\n          mat-header-cell\n          *matHeaderCellDef\n          class=\"border border-1 action-column\"\n        >\n          Actions\n        </th>\n        <td\n          mat-cell\n          *matCellDef=\"let submission; let i = index\"\n          class=\"border-cell text-center\"\n        >\n          <button class=\"delete-button\" (click)=\"deleteSubmission(i)\">\n            <i class=\"bi bi-trash\"></i>\n          </button>\n        </td>\n      </ng-container>\n\n      <tr\n        mat-header-row\n        *matHeaderRowDef=\"displayedColumns\"\n        class=\"border-row\"\n      ></tr>\n      <tr\n        mat-row\n        *matRowDef=\"let submission; columns: displayedColumns\"\n        class=\"border-row\"\n      ></tr>\n    </table>\n  </div>\n\n  <div class=\"footer\">\n    <div class=\"addNewBtn\" (click)=\"addNewSubmission()\">\n      <svg\n        width=\"15\"\n        height=\"14\"\n        viewBox=\"0 0 15 14\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M12.5556 13.2778H2.44444C1.64639 13.2778 1 12.6673 1 11.9136V2.3642C1 1.61048 1.64639 1 2.44444 1H12.5556C13.3536 1 14 1.61048 14 2.3642V11.9136C14 12.6673 13.3536 13.2778 12.5556 13.2778Z\"\n          stroke=\"#D8D8D8\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M5.3335 7.50347H9.66683\"\n          stroke=\"#084FFF\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n        <path\n          d=\"M7.50005 5.33594V9.66927\"\n          stroke=\"#084FFF\"\n          stroke-width=\"0.8\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n      <a class=\"ms-2 text-decoration-none\">{{addButtonLabel}}</a>\n    </div>\n  </div>\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Injector,\n  Input,\n  Output,\n} from '@angular/core';\nimport { SubForm } from '../../models/subForm.model';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { v4 as uuidv4 } from 'uuid';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\n\n\n@Component({\n  selector: 'lib-card-subform',\n  templateUrl: './card-subform.component.html',\n  styleUrls: ['./card-subform.component.scss'],\n})\nexport class CardSubformComponent {\n  @Input() subForm: any = {};\n  @Input() acceptedLanguage: string = '';\n  @Input() edit: boolean = false;\n  grid: any;\n  componentToLoad: any;\n  addButtonLabel: string = 'Add New Submission';\n  injector!: Injector;\n  submissions: Submission[] = [];\n  deletedSubmissions: string[] = [];\n  maxPossibleGoodScore!: number;\n  maxPossibleBadScore!: number;\n  @Output() subFormChange = new EventEmitter<any>();\n  Math = Math;\n  elementsWithWhenClause: any;\n  editableQuestions: string[] = [];\n  private dialogRef?: MatDialogRef<ConfirmDialogComponent>;\n\n  constructor(\n    private scoreCalcService: ScoreCalculationService,\n    public whenClauseService: WhenClauseService,\n    private hiddenFieldService: HiddenFieldService,\n    public dialog: MatDialog\n  ) {}\n  isEdit = this.hiddenFieldService.getEditMode();\n  ngOnInit() {\n    const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\n      this.subForm\n    );\n    this.maxPossibleGoodScore = goodMax;\n    this.maxPossibleBadScore = badMax;\n\n    this.loadComponent();\n    if (this.subForm?.submissions) {\n      this.submissions = this.subForm.submissions;\n      this.subForm.deletedSubmissions = [];\n    } else {\n      this.submissions = this.generateSubmissionsFromDefaultAnswers(\n        this.subForm\n      );\n    }\n    if (this.submissions?.length) {\n      this.updateSubFormWithSubmissions();\n    }\n    if (this.subForm?.property?.addButtonLabel) {\n      this.addButtonLabel = this.subForm.property.addButtonLabel;\n    }\n    this.elementsWithWhenClause = this.whenClauseService.getWhenClauseElements(\n      this.subForm\n    );\n    this.hiddenFieldService.extractSubformHiddenFields(this.subForm);\n    this.updateWhenClause();\n    if (this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions) {\n      this.editableQuestions =\n        this.subForm.submissionCopyConfig.editableQuestions || [];\n    }\n  }\n\n  ngOnChanges() {\n    if (this.subForm?.submissions) {\n      this.submissions = this.subForm.submissions;\n      this.subForm.deletedSubmissions = [];\n      this.updateSubFormWithSubmissions();\n    }\n  }\n\n  updateWhenClause() {\n    if (this.submissions.length > 0) {\n      this.submissions.forEach((submission) => {\n        submission.answers.forEach((ans) => {\n          this.whenClauseService.evaluateSubformWhenClauses(\n            ans.answer,\n            submission,\n            ans.questionId || '',\n            this.elementsWithWhenClause\n          );\n        });\n      });\n    }\n  }\n\n  private async loadComponent(): Promise<void> {\n    this.componentToLoad = await this.loadFormElementsComponent();\n    this.injector = this.createInjector();\n  }\n\n  private async loadFormElementsComponent() {\n    const { FormElementsComponent } = await import(\n      '../form-elements/form-elements.component'\n    );\n    return FormElementsComponent;\n  }\n\n  createInjector(): Injector {\n    return Injector.create({\n      providers: [\n        { provide: 'grid', useValue: this.grid?.element.childLogics },\n        { provide: 'state', useValue: 'child' },\n      ],\n    });\n  }\n\n  generateSubmissionsFromDefaultAnswers(subForm: SubForm): Submission[] {\n    if (\n      !subForm.defaultAnswers ||\n      !Array.isArray(subForm.defaultAnswers.answers)\n    ) {\n      return [];\n    }\n\n    return subForm.defaultAnswers.answers.map((answerGroup) => {\n      const submission: Submission = {\n        submissionId: '', // Generate a unique ID for each submission\n        configuration: {\n          isDefault: true,\n          allowDelete: answerGroup.isDeleteEnable,\n        },\n        answers: answerGroup.defaultQuestionsAnswers.map((qa) => {\n          const answer: Answer = {\n            questionId: qa.questionId,\n            answer: qa.defaultAnswer,\n            attachments: [], // No attachments from defaultAnswers\n          };\n          return answer;\n        }),\n      };\n\n      return submission;\n    });\n  }\n\n  trackBySubmissionId(index: number, submission: Submission): string | number {\n    return submission?.submissionId || index;\n  }\n\n  getSubmissionQuestion(submission: Submission, formElement: any): any {\n    const ansObj = submission.answers.find(\n      (a) => a.questionId === formElement.element.id\n    );\n    const questionClone = { ...formElement.element };\n    questionClone.answer = ansObj ? ansObj.answer : '';\n    questionClone.defaultValue = '';\n    questionClone.disableEdit = submission.configuration?.isDefault\n      ? questionClone.disableEdit\n      : false;\n    questionClone.attachments = ansObj?.attachments ? ansObj.attachments : [];\n    questionClone.copiedAttachments = ansObj?.copiedAttachments\n      ? ansObj.copiedAttachments\n      : [];\n    questionClone.amountInWords = ansObj?.amountInWords\n      ? ansObj.amountInWords\n      : '';\n    questionClone.required =\n      ansObj?.required !== undefined ? ansObj.required : questionClone.required;\n    questionClone.answerCurrency = ansObj?.answerCurrency\n      ? ansObj.answerCurrency\n      : '';\n    return questionClone;\n  }\n\n  isSubmissionEditable(submission: any, questionId: string): boolean {\n    if (!this.editableQuestions?.length) {\n      return false;\n    }\n\n    // Must be a copied submission\n    if (!submission?.sourceSubmissionId && submission?.isCopied !== true) {\n      return false;\n    }\n\n    // Question must be editable\n    return this.editableQuestions.includes(questionId);\n  }\n\n  addNewSubmission() {\n    const emptyAnswers: Answer[] = [];\n    this.subForm.rows.forEach((row: any) => {\n      row.grid.forEach((gridItem: any) => {\n        if (\n          gridItem.entityType === 'QUESTION' &&\n          gridItem.element &&\n          gridItem.element.id\n        ) {\n          emptyAnswers.push({\n            questionId: gridItem.element.id,\n            answer: '',\n            maximumPossibleScore: 0,\n            show: gridItem.show,\n            required: gridItem.element.required,\n          });\n        }\n      });\n    });\n    const submission: Submission = {\n      submissionId: uuidv4(),\n      answers: emptyAnswers,\n      configuration: {\n        isDefault: false,\n        allowDelete: true,\n      },\n    };\n\n    emptyAnswers.forEach((ans) => {\n      this.whenClauseService.evaluateSubformWhenClauses(\n        ans.answer,\n        submission,\n        ans.questionId || '',\n        this.elementsWithWhenClause\n      );\n    });\n\n    this.submissions.push(submission);\n    this.submissions = [...this.submissions];\n    this.updateSubFormWithSubmissions();\n  }\n\n  updateSubFormWithSubmissions() {\n    this.clearHiddenAnswers();\n    this.subForm.submissions = this.submissions;\n    this.subForm.maxPossibleScore = {\n      good: this.maxPossibleGoodScore,\n      bad: this.maxPossibleBadScore,\n    };\n    this.subForm.deletedSubmissions = this.deletedSubmissions;\n    this.subFormChange.emit(this.subForm);\n  }\n\n  updateAnswer(submission: Submission, question: any, newAnswerObject: any) {\n    if (question.formElement.elementType != 'HIDDEN_FIELD' && this.isEdit) {\n      submission = this.hiddenFieldService.updateSubformHiddenFieldsFromCache(\n        this.subForm.id,\n        submission,\n        'UPDATE'\n      );\n    }\n    const newAnswer = newAnswerObject.answer;\n    const amountInWords = newAnswerObject?.amountInWords;\n    const currency = newAnswerObject?.currency;\n    if (question.formElement.elementType === 'FILE_PICKER') {\n      let fileLength = newAnswer?.length || 0;\n      this.whenClauseService.evaluateSubformWhenClauses(\n        fileLength,\n        submission,\n        question.id,\n        this.elementsWithWhenClause\n      );\n    } else {\n      this.whenClauseService.evaluateSubformWhenClauses(\n        newAnswer,\n        submission,\n        question.id,\n        this.elementsWithWhenClause\n      );\n    }\n    const submissionIndex = this.submissions.indexOf(submission);\n    if (submissionIndex > -1) {\n      const existingAnswer = this.submissions[submissionIndex].answers.find(\n        (a) => a.questionId === question.id\n      );\n\n      if (\n        question.formElement &&\n        question.formElement.elementType === 'FILE_PICKER'\n      ) {\n        // Map file objects to file names.\n        let fileNames: string[] = [];\n        if (newAnswer && Array.isArray(newAnswer)) {\n          fileNames = newAnswer.map((file: any) => file?._file?.name);\n        }\n\n        // Get deleted file IDs from the question (if any).\n        let deletedFiles: string[] = [];\n        if (question.deleteFiles && question.deleteFiles.length > 0) {\n          deletedFiles = question.deleteFiles;\n        }\n\n        if (existingAnswer) {\n          existingAnswer.files = newAnswer;\n          existingAnswer.answer = fileNames;\n          // Initialize deleteFiles if it's not defined.\n          if (!existingAnswer.deleteFiles) {\n            existingAnswer.deleteFiles = [];\n          }\n          // Append any deleted file IDs not already present.\n          deletedFiles.forEach((deletedId: string) => {\n            if (!existingAnswer.deleteFiles!.includes(deletedId)) {\n              existingAnswer.deleteFiles!.push(deletedId);\n            }\n          });\n        } else {\n          const newObj: Answer = {\n            questionId: question.id,\n            files: newAnswer,\n            answer: fileNames,\n            deleteFiles: deletedFiles.length > 0 ? [...deletedFiles] : [],\n          };\n          this.submissions[submissionIndex].answers.push(newObj);\n        }\n      } else {\n        if (existingAnswer) {\n          existingAnswer.answer = newAnswer;\n          existingAnswer.maximumPossibleScore =\n            newAnswerObject.maxPossibleScore;\n          existingAnswer.amountInWords = amountInWords;\n          existingAnswer.currencySymbol = currency;\n        } else {\n          this.submissions[submissionIndex].answers.push({\n            questionId: question.id,\n            answer: newAnswer,\n            maximumPossibleScore: newAnswerObject.maxPossibleScore,\n            amountInWords: amountInWords,\n            currencySymbol: currency,\n          });\n        }\n        if (\n          question.formElement &&\n          (question.formElement.elementType === 'DROP_DOWN' ||\n            question.formElement.elementType === 'RADIO_BUTTON' ||\n            question.formElement.elementType === 'CHECK_BOX') &&\n          question.formElement.scoring &&\n          question.formElement.scoring.enableScoring\n        ) {\n          submission.answers.forEach((ans) => {\n            if (question.id === ans.questionId) {\n              const scoreResult =\n                this.scoreCalcService.calculateScoreFromAnswer(\n                  ans.answer,\n                  question\n                );\n              // Save total score and individual scores\n              ans.scores = scoreResult?.scores;\n            }\n          });\n          // Check scoring condition\n          if (\n            this.scoreCalcService.shouldCalculateScore(this.subForm, submission)\n          ) {\n            // Mark that this submission had all scoring questions answered at least once\n            submission.hasAllScoringAnsweredOnce = true;\n          }\n\n          if (submission.hasAllScoringAnsweredOnce) {\n            // Recalculate score always after once satisfied\n            submission.scores = this.scoreCalcService.calculateSubmissionScore(\n              submission.answers\n            );\n          }\n        }\n      }\n      const hasAnyScore = this.submissions.some((sub) =>\n        sub.scores?.some((s) => s.score !== null && s.score !== undefined)\n      );\n\n      Promise.resolve().then(() => {\n        this.subForm.scores = hasAnyScore\n          ? this.scoreCalcService.calculateFinalScore(\n              this.subForm.submissions,\n              this.maxPossibleGoodScore,\n              this.maxPossibleBadScore\n            )\n          : [];\n      });\n      this.updateSubFormWithSubmissions();\n    }\n  }\n\n  updateDeletedFiles(\n    submission: Submission,\n    question: any,\n    deletedFiles: string[]\n  ) {\n    // Find the matching answer object based on the questionId\n    const answerObj = submission.answers.find(\n      (ans) => ans.questionId === question.id\n    );\n\n    if (answerObj) {\n      // Ensure deleteFiles is always an array\n      if (!answerObj.deleteFiles) {\n        answerObj.deleteFiles = [];\n      }\n\n      // Add deleted file IDs to deleteFiles array while avoiding duplicates\n      deletedFiles.forEach((fileId) => {\n        if (!answerObj.deleteFiles!.includes(fileId)) {\n          answerObj.deleteFiles!.push(fileId);\n        }\n      });\n\n      answerObj.copiedAttachments = answerObj.copiedAttachments?.filter(\n        (item) => {\n          return !deletedFiles.includes(item);\n        }\n      );\n    }\n  }\n\n  deleteSubmission(index: number) {\n    const dialogConfig = new MatDialogConfig();\n    dialogConfig.data = {\n      messageHeader: 'Are you sure?',\n      message: 'Do you want to delete this submission?',\n    };\n    dialogConfig.hasBackdrop = true;\n    dialogConfig.disableClose = true;\n\n    this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\n\n    this.dialogRef.afterClosed().subscribe((result: any) => {\n      if (result) {\n        const submission = this.submissions[index];\n        if (submission.submissionId) {\n          this.deletedSubmissions.push(submission.submissionId);\n        }\n        this.submissions.splice(index, 1);\n        this.submissions = [...this.submissions];\n        this.subForm.scores = this.scoreCalcService.calculateFinalScore(\n          this.submissions,\n          this.maxPossibleGoodScore,\n          this.maxPossibleBadScore\n        );\n        this.updateSubFormWithSubmissions();\n      }\n    });\n  }\n\n  clearHiddenAnswers() {\n    for (const submission of this.submissions) {\n      if (!submission.answers || !Array.isArray(submission.answers)) continue;\n\n      for (const ans of submission.answers) {\n        // If show flag is explicitly false → clear the answer value\n        if (ans.show === false) {\n          ans.answer = ''; // clear the answer\n          ans.files = []; // clear files (optional)\n          ans.scores = []; // clear score (optional)\n        }\n      }\n    }\n  }\n}\n","<ng-container *ngFor=\"let submission of submissions;let i=index ;trackBy: trackBySubmissionId\">\n  <div class=\"card-subform mb-4\" [id]=\"'question-'+submission.submissionId\">\n    <div class=\"delete d-flex justify-content-end me-4 mb-2 mt-2 gap-3\"\n    >\n    <ng-container *ngIf=\"submission?.scores?.[0] as firstScore\">\n      <div\n        class=\"submissionScore\"\n        [ngClass]=\"{\n          'good-score': firstScore.scoreType === 'GOOD_SCORE',\n          'bad-score': firstScore.scoreType === 'BAD_SCORE'\n        }\"\n      >\n      <span>{{ Math.abs(firstScore.score) }}</span>\n      </div>\n    </ng-container>\n      <img class=\"delete-icon\" src=\"assets/icons/delete-icon.svg\" alt=\"delete\"\n      *ngIf=\"submission.configuration?.allowDelete\"\n      (click)=\"deleteSubmission(i)\">\n    </div>\n    <div *ngFor=\"let row of subForm.rows\">\n      <div class=\"d-flex\">\n        <div\n          *ngFor=\"let grid of row.grid\"\n          [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n        >\n          <div *ngIf=\"grid.entityType === 'QUESTION' && whenClauseService.checkElementVisibility(grid.element.id,submission)\">\n            <div [ngSwitch]=\"grid.element.formElement.elementType\">\n              <lib-check-box-fields\n                *ngSwitchCase=\"'CHECK_BOX'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [rowId]=\"i\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-check-box-fields>\n              <lib-date-time-fields\n                *ngSwitchCase=\"'DATE_TIME'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-date-time-fields>\n              <lib-drop-down-fields\n                *ngSwitchCase=\"'DROP_DOWN'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-drop-down-fields>\n              <lib-file-picker-fields\n                *ngSwitchCase=\"'FILE_PICKER'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n                (inlineDeleteFiles)=\"\n                    updateDeletedFiles(submission, grid.element, $event)\n                  \"\n              ></lib-file-picker-fields>\n              <lib-location-fields\n                *ngSwitchCase=\"'LOCATION'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-location-fields>\n              <lib-mail-fields\n                *ngSwitchCase=\"'EMAIL'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-mail-fields>\n              <lib-mobile-fields\n                *ngSwitchCase=\"'MOBILE'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-mobile-fields>\n              <lib-number-fields\n                *ngSwitchCase=\"'NUMBER'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [rowId]=\"'0'\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-number-fields>\n              <lib-password-fields\n                *ngSwitchCase=\"'PASSWORD'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-password-fields>\n              <lib-radio-button-fields\n                *ngSwitchCase=\"'RADIO_BUTTON'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [rowId]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-radio-button-fields>\n              <lib-rich-text-editor-fields\n                *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [inSubForm]=\"true\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-rich-text-editor-fields>\n              <lib-selection-matrix-fields\n                *ngSwitchCase=\"'SELECTION_MATRIX'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [acceptedLanguage]=\"acceptedLanguage\"\n                [rowId]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-selection-matrix-fields>\n              <lib-slider-fields\n                *ngSwitchCase=\"'SLIDER'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-slider-fields>\n              <lib-terms-and-condition-fields\n                *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-terms-and-condition-fields>\n              <lib-text-area-fields\n                *ngSwitchCase=\"'TEXT_AREA'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-text-area-fields>\n              <lib-text-fields\n                *ngSwitchCase=\"'TEXT_BOX'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-text-fields>\n              <lib-toggle-switch-fields\n                *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [acceptedLanguage]=\"acceptedLanguage\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-toggle-switch-fields>\n              <lib-url-fields\n                *ngSwitchCase=\"'URL'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-url-fields>\n              <lib-currency-fields\n                *ngSwitchCase=\"'CURRENCY'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-currency-fields>\n              <lib-hidden-field\n                *ngSwitchCase=\"'HIDDEN_FIELD'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-hidden-field>\n              <lib-iframe-fields\n                *ngSwitchCase=\"'IFRAME_WIDGET'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n              ></lib-iframe-fields>\n              <lib-aggregate-function\n                *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n                [question]=\"getSubmissionQuestion(submission,grid)\"\n                [inCard]=\"true\"\n                [submissionIndex]=\"i\"\n                [rowId]=\"'0'\"\n                [disableEdit]=\"isSubmissionEditable(submission,grid.element.id)\"\n                (answerChange)=\"\n                    updateAnswer(submission, grid.element, $event)\n                \"\n              ></lib-aggregate-function>\n            </div>\n\n            <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n                      <ng-container\n                        *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n                        <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n                        </ng-container>\n                      </ng-container>\n                    </ng-container> -->\n            <ng-container *ngIf=\"grid?.element?.childLogics\">\n              <ng-container *ngIf=\"componentToLoad\">\n                <ng-container\n                  *ngComponentOutlet=\"\n                    componentToLoad;\n                    inputs: {\n                      grid: grid?.element?.childLogics,\n                      answer: grid?.element?.answer,\n                      state: 'child'\n                    }\n                  \"\n                ></ng-container>\n              </ng-container>\n            </ng-container>\n          </div>\n\n          <div *ngIf=\"grid.entityType === 'SECTION'\">\n            <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-container>\n\n<div class=\"subform-footer\">\n  <button class=\"btn btn-primary\" (click)=\"addNewSubmission()\">{{addButtonLabel}}</button>\n</div>\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Injector,\n  Input,\n  OnInit,\n  Output,\n} from '@angular/core';\nimport { SubformCopyService } from '../../services/subform-copy.service';\nimport { ConfirmDialogComponent } from '../confirm-dialog/confirm-dialog.component';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { Submission } from '../../models/submission.model';\nimport { Answer } from '../../models/answer.model';\nimport { v4 as uuidv4 } from 'uuid';\nimport { DataService } from '../../services/data.service';\nimport { FormService } from '../../services/form.service';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ScoreCalculationService } from '../../services/score.service';\n\n@Component({\n  selector: 'lib-sub-form',\n  templateUrl: './sub-form.component.html',\n  styleUrls: ['./sub-form.component.scss'],\n})\nexport class SubFormComponent implements OnInit {\n  @Input() subForm: any = {};\n  @Input() edit: boolean = false;\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() acceptedLanguage: string = '';\n  @Input() pages: any[] = [];\n  decodedDescription: string = '';\n  grid: any;\n  state!: string;\n  childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n  componentToLoad: any;\n  injector!: Injector;\n  copySubFormdata:any;\n  subformDescription:string = '';\n  subformTitle: string= '';\n  editor: any;\n  allowCopy: boolean = false;\n  allowDelete: boolean = false;\n  private dialogRef?: MatDialogRef<ConfirmDialogComponent>;\n  subformData:any;\n  previousSubmissions:any[]=[];\n  maxPossibleGoodScore!: number;\n  maxPossibleBadScore!: number;\n\n  constructor(\n    private subformCopyService:SubformCopyService,\n    public dialog: MatDialog,\n    private dataService: DataService,\n    private formService:FormService,\n    private whenClauseService:WhenClauseService,\n    private validationService: ValidationService,\n    private scoreCalcService: ScoreCalculationService\n  ){\n    this.dataService.subform$.subscribe((data)=>{\n      this.subformData = data;\n      this.tryLoadPreviousSubmissions();\n    })\n  }\n\n  private tryLoadPreviousSubmissions(): void {\n    if (\n      this.subformData &&\n      this.subForm &&\n      !this.edit &&\n      this.subForm.submissionCopyConfig?.allowCopyFromOtherSubmissions\n    ) {\n      this.loadPreviousSubmissions();\n    }\n  }\n\n\n  loadPreviousSubmissions() {\n    if (this.subformData && Object.keys(this.subformData).length > 0 && !this.edit) {\n      this.formService.getSubformSubmissions(this.subformData)?.subscribe({\n        next: (response: any) => {\n          this.previousSubmissions = response;\n          const targetSubForms: string[] =\n            this.subformData?.duplicateSubmission?.targetSubForm ?? [];\n  \n          if (\n            Array.isArray(targetSubForms) &&\n            targetSubForms.includes(this.subForm.title)\n          ) {\n  \n            // ✅ Filter submissions belonging to this subform\n            const filteredSubmissions = this.previousSubmissions.filter(\n              (submission: any) =>\n                submission.title === this.subForm.title\n            );\n  \n            const loadedSubmissions = this.createSubmissionsFromApi(\n              filteredSubmissions,\n              this.subForm\n            );\n  \n            const existingSubmissions = this.subForm.submissions ?? [];\n  \n            this.subForm = {\n              ...this.subForm,\n              submissions: [\n                ...existingSubmissions,\n                ...loadedSubmissions\n              ]\n            };\n  \n            const hasAnyScore = this.subForm.submissions.some((sub: any) =>\n              sub.scores?.some(\n                (s: any) => s.score !== null && s.score !== undefined\n              )\n            );\n  \n            if (hasAnyScore) {\n              this.subForm.scores = this.scoreCalcService.calculateFinalScore(\n                this.subForm.submissions,\n                this.maxPossibleGoodScore,\n                this.maxPossibleBadScore\n              );\n            } else {\n              this.subForm.scores = null;\n            }\n          }\n        },\n        error: (error: any) => {}\n      });\n    }\n  }\n  \n\n  ngOnInit() {\n    this.allowCopy = this.subForm.property?.allowCopy;\n    this.allowDelete = this.subForm.property?.allowDelete;\n    this.copySubFormdata = this.subForm?.copySubformMeta;\n    this.tryLoadPreviousSubmissions();\n    if (this.subForm.property.subFormStructure == 'single') {\n      this.bindAnswersToFormElements();\n      this.loadComponent();\n      this.whenClauseService.addGridsFromSubform(this.subForm);\n    }\n\n    const { goodMax, badMax } = this.scoreCalcService.getMaxPossibleScore(\n      this.subForm\n    );\n    this.maxPossibleGoodScore = goodMax;\n    this.maxPossibleBadScore = badMax;\n  }\n\n  editorCreated(editorInstance: any) {\n    this.editor = editorInstance;\n  }\n\n  private async loadComponent(): Promise<void> {\n    this.componentToLoad = await this.loadFormElementsComponent();\n    this.injector = this.createInjector();\n  }\n\n  private async loadFormElementsComponent() {\n    const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n    return FormElementsComponent;\n  }\n\n  createInjector(): Injector {\n    return Injector.create({\n      providers: [\n        { provide: 'grid', useValue: this.grid?.element.childLogics  },\n        { provide: 'state', useValue: 'child' },\n      ],\n    });\n  }\n\n  decodeHtml(html: string): string {\n    const textArea = document.createElement('textarea');\n    textArea.innerHTML = html;\n    return textArea.value;\n  }\n\n  bindAnswersToFormElements() {\n    const bindAnswers = (formElements: any[], submissions: any[]) => {\n      formElements?.forEach((grids: any) => {\n        grids?.grid?.forEach(\n          (formElement: { entityType: string; element: any }) => {\n            if (formElement.entityType === 'QUESTION') {\n              const submission = submissions.find((sub: { answers: any[] }) =>\n                sub.answers.some(\n                  (ans: { questionId: any }) =>\n                    ans.questionId === formElement.element.id\n                )\n              );\n\n              if (submission) {\n                const answer = submission.answers.find(\n                  (ans: { questionId: any }) =>\n                    ans.questionId === formElement.element.id\n                );\n                if (answer) {\n                  formElement.element.answer = answer.answer;\n                  formElement.element.answerId = answer.answerId;\n                  formElement.element.validation = true;\n                  formElement.element.attachments = answer.attachments;\n                  formElement.element.amountInWords = answer.amountInWords;\n                  this.subForm.submissionId = submission.submissionId;\n                  formElement.element.answerCurrency = answer.answerCurrency;\n                }\n              }\n\n              if (formElement.element.childLogics) {\n                formElement.element.childLogics.forEach(\n                  (childLogic: { rows: any[] }) => {\n                    bindAnswers(childLogic.rows, submissions);\n                  }\n                );\n              }\n            }\n          }\n        );\n      });\n    };\n\n    if (this.subForm && this.subForm.rows && this.subForm.submissions) {\n      bindAnswers(this.subForm.rows, this.subForm.submissions);\n    }\n  }\n\n  updateSubFormWithSubmissions(event: any) {\n    this.subForm = event;\n    this.subFormChange.emit(this.subForm);\n  }\n\n  ngOnChanges(): void {\n    if (this.subForm.description) {\n      this.decodedDescription = this.decodeHtml(this.subForm.description);\n    }\n  }\n\n  copySubform() {\n    const { updatedPages } = this.subformCopyService.copySubform(this.subForm, this.pages);\n\n    this.pages = updatedPages;\n    // Emit updated pages or subFormChange if needed\n\n    // Optionally pass meta to parent if needed\n    // this.copyMeta.emit(copySubFormMeta);\n  }\n\n\n  updateSubformData(event: any, subformId: string, field: 'title' | 'description') {\n    if(this.copySubFormdata.id == subformId){\n      this.copySubFormdata[field] = event;\n    }\n  }\n\n  deleteCopySubform(subformId: string) {\n    const dialogConfig = new MatDialogConfig();\n    dialogConfig.data = {\n      messageHeader: \"Are you sure?\",\n      message: \"Do you want to delete this subform?\"\n    };\n    dialogConfig.hasBackdrop = true;\n    dialogConfig.disableClose = true;\n\n    this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\n\n    this.dialogRef.afterClosed().subscribe((result: any) => {\n      if (result) {\n        // 1. Remove the copied subform from the pages\n        for (const page of this.pages) {\n          const rowIndex = page.rows.findIndex((row: any) =>\n            row.grid.some((grid: any) =>\n              grid.entityType === 'SUBFORM' &&\n              grid.element?.id === subformId &&\n              grid.element?.copied\n            )\n          );\n\n          if (rowIndex !== -1) {\n            page.rows.splice(rowIndex, 1);\n            break;\n          }\n        }\n\n        // 2. Remove this subformId from any subform's copiedForms array\n        for (const page of this.pages) {\n          for (const row of page.rows) {\n            for (const grid of row.grid) {\n              if (grid.entityType === 'SUBFORM' && grid.element?.copiedForms) {\n                const index = grid.element.copiedForms.indexOf(subformId);\n                if (index !== -1) {\n                  grid.element.copiedForms.splice(index, 1);\n                }\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n\n\n  deleteMainSubform(subformId: string): void {\n    const dialogConfig = new MatDialogConfig();\n    dialogConfig.data = {\n      messageHeader: \"Are you sure?\",\n      message: \"Do you want to delete this subform?\"\n    };\n    dialogConfig.hasBackdrop = true;\n    dialogConfig.disableClose = true;\n\n    this.dialogRef = this.dialog.open(ConfirmDialogComponent, dialogConfig);\n\n    this.dialogRef.afterClosed().subscribe((result: any) => {\n      if (result) {\n        for (const page of this.pages) {\n          for (const row of page.rows) {\n            for (const gridItem of row.grid) {\n              if (\n                gridItem.entityType === 'SUBFORM' &&\n                gridItem.element?.id === subformId\n              ) {\n                gridItem.element.deleted = true;\n                return; // stop after the first match\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n\n  createSubmissionsFromApi(apiSubmissions: any[], subform: any): Submission[] {\n    return apiSubmissions.map(apiSubmission => {\n      const answers: Answer[] = [];\n\n      subform.rows.forEach((row: any) => {\n        row.grid.forEach((gridItem: any) => {\n          if (gridItem.entityType !== 'QUESTION') return;\n\n          const element = gridItem.element;\n          const questionKey = element.question;\n          if (!apiSubmission.answers || !apiSubmission.answers[questionKey]) {\n            return;\n          }\n          const apiAnswer = apiSubmission.answers[questionKey];\n          // ✅ CASE 1: File upload (array with name & url)\n          if (\n            Array.isArray(apiAnswer) &&\n            apiAnswer.length &&\n            apiAnswer[0].name &&\n            apiAnswer[0].url\n          ) {\n            answers.push({\n              questionId: element.id,\n              answer: null,\n              attachments: apiAnswer.map((file: any) => ({\n                fileId: file.id,\n                fileName: file.name,\n                fileUrl: file.url\n              })),\n              copiedAttachments: apiAnswer.map((file: any) => file.id)\n            });\n            return;\n          }\n\n          // ✅ CASE 2: Normal question object\n          answers.push({\n            questionId: element.id,\n            answer: apiAnswer.answer ?? null,\n            attachments: apiAnswer.file\n              ? apiAnswer.file.map((file: any) => ({\n                  fileName: file.name,\n                  fileUrl: file.url\n                }))\n              : undefined,\n            scores: apiAnswer.scores,\n            maximumPossibleScore: apiAnswer.maximumPossibleScore\n          });\n        });\n      });\n\n      return {\n        submissionId: uuidv4(),\n        sourceSubmissionId: apiSubmission.submissionId,\n        answers,\n        configuration: {\n          isDefault: false,\n          allowDelete: true\n        },\n        scores: apiSubmission.score\n      };\n    });\n  }\n\n  get isInvalid(): boolean {\n    return !!this.validationService.getErrorMessage(this.subForm.id);\n  }\n\n  get errorMessage(): string | null {\n    return this.validationService.getErrorMessage(this.subForm.id);\n  }\n\n  clearInvalid(){\n    this.validationService.clearInvalid(this.subForm.id);\n  }\n\n  @HostListener('click', ['$event'])\n    onAnyClick(event: MouseEvent): void {\n    this.clearInvalid();\n  }\n\n  ngOnDestroy(): void {\n    if (this.dialogRef) {\n      this.dialogRef.close();\n    }\n  }\n\n\n}\n","<div\n  class=\"outer-container mb-4 px-3\"\n  [id]=\"'question-' + subForm.id\"\n  [attr.name]=\"subForm.testElementName\"\n  *ngIf=\"!subForm.deleted\"\n>\n  <div class=\"body py-1 px-1\">\n    <div class=\"tab-content pt-4 pb-3 px-3\">\n      <ng-container *ngIf=\"!subForm.copied; else copySubformContainer\">\n        <div class=\"subform-header\">\n          <div class=\"data-container\">\n            <p class=\"sectionTitle\">{{ subForm.title }}</p>\n            <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n          </div>\n          <div class=\"d-flex gap-3\">\n            <div\n              class=\"finalScore\"\n              *ngFor=\"let s of subForm?.scores\"\n              [ngClass]=\"{\n                goodScore: s.scoreType === 'GOOD_SCORE',\n                badScore: s.scoreType === 'BAD_SCORE'\n              }\"\n            >\n              <span class=\"scoreTitle\">Score</span>\n              <p class=\"mb-0\">{{ s.score }}</p>\n            </div>\n            <div class=\"icon-container\">\n              <img\n                src=\"assets/icons/copy-icon.svg\"\n                alt=\"copy-icon\"\n                (click)=\"copySubform()\"\n                *ngIf=\"allowCopy\"\n              />\n              <img\n                src=\"assets/icons/delete-icon.svg\"\n                class=\"delete-icon ms-3\"\n                alt=\"delete icon\"\n                (click)=\"deleteMainSubform(subForm.id)\"\n                *ngIf=\"allowDelete\"\n              />\n            </div>\n          </div>\n        </div>\n      </ng-container>\n      <ng-template #copySubformContainer>\n        <div class=\"d-flex justify-content-end gap-4\">\n          <ng-container *ngIf=\"subForm?.scores?.length\">\n          <div\n              class=\"finalScore\"\n              *ngFor=\"let s of subForm?.scores\"\n              [ngClass]=\"{\n                goodScore: s.scoreType === 'GOOD_SCORE',\n                badScore: s.scoreType === 'BAD_SCORE'\n              }\"\n            >\n              <span class=\"scoreTitle\">Score</span>\n              <p class=\"mb-0\">{{ s?.score }}</p>\n            </div>\n          </ng-container>\n          <div class=\"icon-container\" (click)=\"deleteCopySubform(subForm.id)\">\n            <img\n              src=\"assets/icons/delete-icon.svg\"\n              class=\"delete-icon\"\n              alt=\"delete icon\"\n            />\n          </div>\n        </div>\n        <div class=\"copy-subform-container mb-3\">\n          <p>Title</p>\n          <input\n            type=\"text\"\n            class=\"form-control\"\n            [(ngModel)]=\"subformTitle\"\n            (ngModelChange)=\"updateSubformData($event, subForm.id, 'title')\"\n          />\n          <p class=\"mt-3\">Description</p>\n          <quill-editor\n            [(ngModel)]=\"subformDescription\"\n            (ngModelChange)=\"\n              updateSubformData($event, subForm.id, 'description')\n            \"\n            (onEditorCreated)=\"editorCreated($event)\"\n            class=\"editor\"\n            placeholder=\"\"\n          ></quill-editor>\n        </div>\n      </ng-template>\n\n      <div *ngIf=\"subForm.property.subFormStructure == 'multiple'\">\n        <lib-multiple-subform\n          *ngIf=\"subForm.property.subFormType === 'table'\"\n          [subForm]=\"subForm\"\n          (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n          [acceptedLanguage]=\"acceptedLanguage\"\n        ></lib-multiple-subform>\n\n        <lib-inline-multiple-subform\n          *ngIf=\"subForm.property.subFormType === 'inline'\"\n          [subForm]=\"subForm\"\n          (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n          [acceptedLanguage]=\"acceptedLanguage\"\n        ></lib-inline-multiple-subform>\n        <lib-card-subform\n          *ngIf=\"subForm.property.subFormType === 'card'\"\n          [subForm]=\"subForm\"\n          [acceptedLanguage]=\"acceptedLanguage\"\n          (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n          [edit]=\"edit\"\n        ></lib-card-subform>\n      </div>\n      <div *ngIf=\"subForm.property.subFormStructure == 'single'\">\n        <div *ngFor=\"let row of subForm.rows\">\n          <div class=\"d-flex\">\n            <div\n              *ngFor=\"let grid of row.grid\"\n              [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n            >\n              <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n                <div [ngSwitch]=\"grid.element.formElement.elementType\">\n                  <lib-check-box-fields\n                    *ngSwitchCase=\"'CHECK_BOX'\"\n                    [question]=\"grid.element\"\n                  ></lib-check-box-fields>\n                  <lib-date-time-fields\n                    *ngSwitchCase=\"'DATE_TIME'\"\n                    [question]=\"grid.element\"\n                  ></lib-date-time-fields>\n                  <lib-drop-down-fields\n                    *ngSwitchCase=\"'DROP_DOWN'\"\n                    [question]=\"grid.element\"\n                  ></lib-drop-down-fields>\n                  <lib-file-picker-fields\n                    *ngSwitchCase=\"'FILE_PICKER'\"\n                    [question]=\"grid.element\"\n                  ></lib-file-picker-fields>\n                  <lib-location-fields\n                    *ngSwitchCase=\"'LOCATION'\"\n                    [question]=\"grid.element\"\n                  ></lib-location-fields>\n                  <lib-mail-fields\n                    *ngSwitchCase=\"'EMAIL'\"\n                    [question]=\"grid.element\"\n                  ></lib-mail-fields>\n                  <lib-mobile-fields\n                    *ngSwitchCase=\"'MOBILE'\"\n                    [question]=\"grid.element\"\n                  ></lib-mobile-fields>\n                  <lib-number-fields\n                    *ngSwitchCase=\"'NUMBER'\"\n                    [question]=\"grid.element\"\n                    [rowId]=\"'0'\"\n                  ></lib-number-fields>\n                  <lib-password-fields\n                    *ngSwitchCase=\"'PASSWORD'\"\n                    [question]=\"grid.element\"\n                  ></lib-password-fields>\n                  <lib-radio-button-fields\n                    *ngSwitchCase=\"'RADIO_BUTTON'\"\n                    [question]=\"grid.element\"\n                  ></lib-radio-button-fields>\n                  <lib-rich-text-editor-fields\n                    *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n                    [question]=\"grid.element\"\n                  ></lib-rich-text-editor-fields>\n                  <lib-selection-matrix-fields\n                    *ngSwitchCase=\"'SELECTION_MATRIX'\"\n                    [question]=\"grid.element\"\n                    [acceptedLanguage]=\"acceptedLanguage\"\n                  ></lib-selection-matrix-fields>\n                  <lib-signature-fields\n                    *ngSwitchCase=\"'SIGNATURE'\"\n                    [question]=\"grid.element\"\n                  ></lib-signature-fields>\n                  <lib-slider-fields\n                    *ngSwitchCase=\"'SLIDER'\"\n                    [question]=\"grid.element\"\n                  ></lib-slider-fields>\n                  <lib-terms-and-condition-fields\n                    *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n                    [question]=\"grid.element\"\n                  ></lib-terms-and-condition-fields>\n                  <lib-text-area-fields\n                    *ngSwitchCase=\"'TEXT_AREA'\"\n                    [question]=\"grid.element\"\n                  ></lib-text-area-fields>\n                  <lib-text-fields\n                    *ngSwitchCase=\"'TEXT_BOX'\"\n                    [question]=\"grid.element\"\n                  ></lib-text-fields>\n                  <lib-toggle-switch-fields\n                    *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n                    [question]=\"grid.element\"\n                    [acceptedLanguage]=\"acceptedLanguage\"\n                  ></lib-toggle-switch-fields>\n                  <lib-url-fields\n                    *ngSwitchCase=\"'URL'\"\n                    [question]=\"grid.element\"\n                  ></lib-url-fields>\n                  <lib-currency-fields\n                    *ngSwitchCase=\"'CURRENCY'\"\n                    [question]=\"grid.element\"\n                  ></lib-currency-fields>\n                  <lib-aggregate-function\n                    *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n                    [question]=\"grid.element\"\n                    [rowId]=\"'0'\"\n                  ></lib-aggregate-function>\n                  <lib-hidden-field\n                    *ngSwitchCase=\"'HIDDEN_FIELD'\"\n                    [question]=\"grid.element\"\n                  ></lib-hidden-field>\n                  <lib-iframe-fields\n                    *ngSwitchCase=\"'IFRAME_WIDGET'\"\n                    [question]=\"grid.element\"\n                  ></lib-iframe-fields>\n                </div>\n\n                <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n                  <ng-container\n                    *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as outlet\">\n                    <ng-container *ngComponentOutlet=\"outlet.component | async; injector: outlet.injector\">\n                    </ng-container>\n                  </ng-container>\n                </ng-container> -->\n                <ng-container *ngIf=\"grid?.element?.childLogics\">\n                  <ng-container *ngIf=\"componentToLoad\">\n                    <ng-container\n                      *ngComponentOutlet=\"\n                        componentToLoad;\n                        inputs: {\n                          grid: grid?.element?.childLogics,\n                          answer: grid?.element?.answer,\n                          state: 'child'\n                        }\n                      \"\n                    ></ng-container>\n                  </ng-container>\n                </ng-container>\n              </div>\n\n              <div *ngIf=\"grid.entityType === 'SECTION' && grid.show\">\n                <lib-section-fields\n                  [section]=\"grid.element\"\n                ></lib-section-fields>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div *ngIf=\"isInvalid\" class=\"error-message mt-4\">\n        {{ errorMessage }}\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Injector, Input, Output } from '@angular/core';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n\ninterface Attachment {\n  fileId: string;\n  fileName: string;\n  fileUrl: string;\n  fileSize?: number;\n}\n\n@Component({\n  selector: 'lib-question-group',\n  templateUrl: './question-group.component.html',\n  styleUrls: ['./question-group.component.scss']\n})\nexport class QuestionGroupComponent {\n  @Input() questionGroup: any = {};\n  @Input() edit: boolean = false;\n  @Input() acceptedLanguage: string ='';\n  decodedDescription:string='';\n  grid: any;\n  childLogicCache: { [key: string]: { component: Promise<any>, injector: Injector } } = {};\n  componentToLoad: any;\n  injector!: Injector;\n\n  constructor(private whenClauseService:WhenClauseService){}\n\n  ngOnInit() {\n    this.loadComponent();\n    this.whenClauseService.addGridsFromSubform(this.questionGroup);\n  }\n\n  decodeHtml(html: string): string {\n    const textArea = document.createElement('textarea');\n    textArea.innerHTML = html;\n    return textArea.value;\n  }\n\n  ngOnChanges(): void {\n    if (this.questionGroup.description) {\n      this.decodedDescription = this.decodeHtml(this.questionGroup.description);\n    }\n  }\n\n removeCircularReferences(obj: any): any {\n  const seen = new WeakSet();\n\n  function recurse(value: any): any {\n    if (value === null || typeof value !== 'object') {\n      return value;\n    }\n\n    if (seen.has(value)) {\n      return '[Circular]';\n    }\n\n    seen.add(value);\n\n    if (Array.isArray(value)) {\n      return value.map(item => recurse(item));\n    }\n\n    const output: any = {};\n    for (const key of Object.keys(value)) {\n      output[key] = recurse(value[key]);\n    }\n\n    seen.delete(value);\n    return output;\n  }\n\n  return recurse(obj);\n}\n\nprivate async loadComponent(): Promise<void> {\n  this.componentToLoad = await this.loadFormElementsComponent();\n  this.injector = this.createInjector();\n}\n\nprivate async loadFormElementsComponent() {\n  const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n  return FormElementsComponent;\n}\n\ncreateInjector(): Injector {\n  return Injector.create({\n    providers: [\n      { provide: 'grid', useValue: this.grid?.element.childLogics  },\n      { provide: 'state', useValue: 'child' },\n    ],\n  });\n}\n}\n","<div\n  class=\"outer-container mb-4 px-3\"\n  [attr.name]=\"questionGroup.testElementName\"\n  [id]=\"'question-' + questionGroup.id\"\n>\n  <div class=\"body container pt-3 pb-3 px-3\">\n    <div class=\"tab-content pt-4 pb-3 px-3\">\n      <p class=\"sectionTitle\">{{ questionGroup.title }}</p>\n      <p [innerHTML]=\"decodedDescription\" class=\"description\"></p>\n\n      <div class=\"mt-5\">\n        <div *ngFor=\"let row of questionGroup.rows\">\n          <div class=\"d-flex\">\n            <div\n              *ngFor=\"let grid of row.grid\"\n              [ngStyle]=\"{ 'width.%': grid.element.count * (100 / 12) }\"\n            >\n              <div *ngIf=\"grid.entityType === 'QUESTION' && grid.show\">\n                <div [ngSwitch]=\"grid.element.formElement.elementType\">\n                  <lib-check-box-fields\n                    *ngSwitchCase=\"'CHECK_BOX'\"\n                    [question]=\"grid.element\"\n                  ></lib-check-box-fields>\n                  <lib-date-time-fields\n                    *ngSwitchCase=\"'DATE_TIME'\"\n                    [question]=\"grid.element\"\n                  ></lib-date-time-fields>\n                  <lib-drop-down-fields\n                    *ngSwitchCase=\"'DROP_DOWN'\"\n                    [question]=\"grid.element\"\n                  ></lib-drop-down-fields>\n                  <lib-file-picker-fields\n                    *ngSwitchCase=\"'FILE_PICKER'\"\n                    [question]=\"grid.element\"\n                  ></lib-file-picker-fields>\n                  <lib-location-fields\n                    *ngSwitchCase=\"'LOCATION'\"\n                    [question]=\"grid.element\"\n                  ></lib-location-fields>\n                  <lib-mail-fields\n                    *ngSwitchCase=\"'EMAIL'\"\n                    [question]=\"grid.element\"\n                  ></lib-mail-fields>\n                  <lib-mobile-fields\n                    *ngSwitchCase=\"'MOBILE'\"\n                    [question]=\"grid.element\"\n                  ></lib-mobile-fields>\n                  <lib-number-fields\n                    *ngSwitchCase=\"'NUMBER'\"\n                    [question]=\"grid.element\"\n                    [rowId]=\"'0'\"\n                  ></lib-number-fields>\n                  <lib-password-fields\n                    *ngSwitchCase=\"'PASSWORD'\"\n                    [question]=\"grid.element\"\n                  ></lib-password-fields>\n                  <lib-radio-button-fields\n                    *ngSwitchCase=\"'RADIO_BUTTON'\"\n                    [question]=\"grid.element\"\n                  ></lib-radio-button-fields>\n                  <lib-rich-text-editor-fields\n                    *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n                    [question]=\"grid.element\"\n                  ></lib-rich-text-editor-fields>\n                  <lib-selection-matrix-fields\n                    *ngSwitchCase=\"'SELECTION_MATRIX'\"\n                    [question]=\"grid.element\"\n                    [acceptedLanguage]=\"acceptedLanguage\"\n                  ></lib-selection-matrix-fields>\n                  <lib-signature-fields\n                    *ngSwitchCase=\"'SIGNATURE'\"\n                    [question]=\"grid.element\"\n                  ></lib-signature-fields>\n                  <lib-slider-fields\n                    *ngSwitchCase=\"'SLIDER'\"\n                    [question]=\"grid.element\"\n                  ></lib-slider-fields>\n                  <lib-terms-and-condition-fields\n                    *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n                    [question]=\"grid.element\"\n                  ></lib-terms-and-condition-fields>\n                  <lib-text-area-fields\n                    *ngSwitchCase=\"'TEXT_AREA'\"\n                    [question]=\"grid.element\"\n                  ></lib-text-area-fields>\n                  <lib-text-fields\n                    *ngSwitchCase=\"'TEXT_BOX'\"\n                    [question]=\"grid.element\"\n                  ></lib-text-fields>\n                  <lib-toggle-switch-fields\n                    *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n                    [question]=\"grid.element\"\n                    [acceptedLanguage]=\"acceptedLanguage\"\n                  ></lib-toggle-switch-fields>\n                  <lib-url-fields\n                    *ngSwitchCase=\"'URL'\"\n                    [question]=\"grid.element\"\n                  ></lib-url-fields>\n                  <lib-currency-fields\n                    *ngSwitchCase=\"'CURRENCY'\"\n                    [question]=\"grid.element\"\n                  ></lib-currency-fields>\n                  <lib-aggregate-function\n                    *ngSwitchCase=\"'AGGREGATE_FUNCTION'\"\n                    [question]=\"grid.element\"\n                    [rowId]=\"'0'\"\n                  ></lib-aggregate-function>\n                  <lib-hidden-field\n                    *ngSwitchCase=\"'HIDDEN_FIELD'\"\n                    [question]=\"grid.element\"\n                  ></lib-hidden-field>\n                  <lib-iframe-fields\n                    *ngSwitchCase=\"'IFRAME_WIDGET'\"\n                    [question]=\"grid.element\"\n                  ></lib-iframe-fields>\n                </div>\n\n                <!-- <ng-container *ngIf=\"grid.element.childLogics\">\n                    <ng-container *ngIf=\"getComponentForChildLogics(grid.element.childLogics, 'child', grid.element.answer) as cached\">\n                      <ng-container\n                        *ngComponentOutlet=\"cached.component | async; injector: cached.injector\">\n                      </ng-container>\n                    </ng-container>\n                  </ng-container> -->\n\n                <ng-container *ngIf=\"grid?.element?.childLogics\">\n                  <ng-container *ngIf=\"componentToLoad\">\n                    <ng-container\n                      *ngComponentOutlet=\"\n                        componentToLoad;\n                        inputs: {\n                          grid: grid?.element?.childLogics,\n                          answer: grid?.element?.answer,\n                          state: 'child'\n                        }\n                      \"\n                    ></ng-container>\n                  </ng-container>\n                </ng-container>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Injector, Input } from '@angular/core';\n\n@Component({\n  selector: 'lib-multifields',\n  templateUrl: './multifields.component.html',\n  styleUrls: ['./multifields.component.scss']\n})\nexport class MultifieldsComponent {\n  @Input() multiFields:any = {};\n  @Input() acceptedLanguage: string ='';\n  grid: any;\n  \n  async loadFormElementsComponent(grid: any) {\n      this.grid = grid;\n        const { FormElementsComponent } = await import('../form-elements/form-elements.component');\n        return FormElementsComponent;\n      }\n    \n      createInjector(): Injector {\n        return Injector.create({\n          providers: [\n            { provide: 'grid', useValue: this.grid },\n            { provide: 'state', useValue: 'child' },\n          ],\n        });\n      }\n}\n","<div class=\"outer-container mb-4 px-3 multifields\" [attr.name]=\"multiFields.testElementName\"\n[id]=\"'question-'+ multiFields.id\">\n    <div class=\"d-flex align-items-center\">\n      <div [innerHTML]=\"multiFields.questionNumber\"></div><span class=\"space\"></span>\n      <label>{{ multiFields.question }}</label>\n    </div>\n\n    <div class=\"multifields-row\">\n        <ng-container *ngFor=\"let row of multiFields.rows\">\n            <div class=\"d-flex\">\n                <div *ngFor=\"let grid of row.grid\"\n                    [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\n                    <div *ngIf=\"grid.entityType === 'QUESTION'\">\n                        <div [ngSwitch]=\"grid.element.formElement.elementType\">\n                            <lib-check-box-fields *ngSwitchCase=\"'CHECK_BOX'\"\n                                [question]=\"grid.element\"></lib-check-box-fields>\n                            <lib-date-time-fields *ngSwitchCase=\"'DATE_TIME'\"\n                                [question]=\"grid.element\"></lib-date-time-fields>\n                            <lib-drop-down-fields *ngSwitchCase=\"'DROP_DOWN'\"\n                                [question]=\"grid.element\"></lib-drop-down-fields>\n                            <lib-file-picker-fields\n                                *ngSwitchCase=\"'FILE_PICKER'\"\n                                [question]=\"grid.element\"></lib-file-picker-fields>\n                            <lib-location-fields *ngSwitchCase=\"'LOCATION'\"\n                                [question]=\"grid.element\"></lib-location-fields>\n                            <lib-mail-fields *ngSwitchCase=\"'EMAIL'\"\n                                [question]=\"grid.element\"></lib-mail-fields>\n                            <lib-mobile-fields *ngSwitchCase=\"'MOBILE'\"\n                                [question]=\"grid.element\"></lib-mobile-fields>\n                            <lib-number-fields *ngSwitchCase=\"'NUMBER'\"\n                                [question]=\"grid.element\"></lib-number-fields>\n                            <lib-password-fields *ngSwitchCase=\"'PASSWORD'\"\n                                [question]=\"grid.element\"></lib-password-fields>\n                            <lib-radio-button-fields\n                                *ngSwitchCase=\"'RADIO_BUTTON'\"\n                                [question]=\"grid.element\"></lib-radio-button-fields>\n                            <lib-rich-text-editor-fields\n                                *ngSwitchCase=\"'RICH_TEXT_EDITOR'\"\n                                [question]=\"grid.element\"></lib-rich-text-editor-fields>\n                            <lib-selection-matrix-fields\n                                *ngSwitchCase=\"'SELECTION_MATRIX'\"\n                                [question]=\"grid.element\"\n                                [acceptedLanguage]=\"acceptedLanguage\"></lib-selection-matrix-fields>\n                            <lib-signature-fields *ngSwitchCase=\"'SIGNATURE'\"\n                                [question]=\"grid.element\"></lib-signature-fields>\n                            <lib-slider-fields *ngSwitchCase=\"'SLIDER'\"\n                                [question]=\"grid.element\"></lib-slider-fields>\n                            <lib-terms-and-condition-fields\n                                *ngSwitchCase=\"'TERMS_AND_CONDITION'\"\n                                [question]=\"grid.element\"></lib-terms-and-condition-fields>\n                            <lib-text-area-fields *ngSwitchCase=\"'TEXT_AREA'\"\n                                [question]=\"grid.element\"></lib-text-area-fields>\n                            <lib-text-fields *ngSwitchCase=\"'TEXT_BOX'\"\n                                [question]=\"grid.element\"></lib-text-fields>\n                            <lib-toggle-switch-fields\n                                *ngSwitchCase=\"'TOGGLE_SWITCH'\"\n                                [question]=\"grid.element\"\n                                [acceptedLanguage]=\"acceptedLanguage\"></lib-toggle-switch-fields>\n                            <lib-url-fields *ngSwitchCase=\"'URL'\"\n                                [question]=\"grid.element\"></lib-url-fields>\n                            <lib-currency-fields *ngSwitchCase=\"'CURRENCY'\"\n                                [question]=\"grid.element\"></lib-currency-fields>\n                            <lib-hidden-field *ngSwitchCase=\"'HIDDEN_FIELD'\" \n                                [question]=\"grid.element\"></lib-hidden-field>\n                        </div>\n\n                        <ng-container *ngIf=\"grid.element.childLogics\">\n                            <ng-container\n                                *ngComponentOutlet=\"loadFormElementsComponent(grid.element.childLogics) | async\"></ng-container>\n                        </ng-container>\n                    </div>\n\n                </div>\n            </div>\n\n        </ng-container>\n    </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { WhenClauseService } from '../../services/whenClause.service';\n\n@Component({\n  selector: 'lib-recursive-logic',\n  templateUrl: './recursive-logic.component.html',\n  styleUrls: ['./recursive-logic.component.scss']\n})\nexport class RecursiveLogicComponent {\n  @Input() grid: any = {};\n  @Input() currentPageIndex: number = 0;\n  @Input() edit : boolean = false;\n  @Input() acceptedLanguage: string ='';\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() state!: string;\n  @Input() answer!: string;\n  @Input() pages: any[] = [];\n\n  constructor(private whenClauseService:WhenClauseService){}\n\n  ngOnInit(){\n    this.whenClauseService.addGrid(this.grid);\n  }\n\n  updateSubFormWithSubmissions(event:any){\n    this.subFormChange.emit(event);\n  }\n\n}\n","<div *ngIf=\"grid.show\">\n  <div *ngIf=\"grid.entityType === 'QUESTION'\">\n    <lib-question\n      [question]=\"grid?.element\"\n      [edit]=\"edit\"\n      [acceptedLanguage]=\"acceptedLanguage\"\n    ></lib-question>\n  </div>\n  <div *ngIf=\"grid.entityType === 'SECTION'\">\n    <lib-section-fields [section]=\"grid.element\"></lib-section-fields>\n  </div>\n  <ng-container *ngIf=\"grid.entityType === 'SUBFORM'\">\n    <lib-sub-form\n      [subForm]=\"grid.element\"\n      [acceptedLanguage]=\"acceptedLanguage\"\n      (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n      [edit]=\"edit\"\n      [pages]=\"pages\"\n    ></lib-sub-form>\n  </ng-container>\n  \n  <ng-container *ngIf=\"grid.entityType === 'QUESTION_GROUP'\">\n    <lib-question-group\n      [questionGroup]=\"grid.element\"\n      [acceptedLanguage]=\"acceptedLanguage\"\n    ></lib-question-group>\n  </ng-container>\n  \n  \n  <ng-container *ngIf=\"grid.entityType === 'MULTIFIELD'\">\n      <lib-multifields [multiFields]=\"grid.element\" [acceptedLanguage]=\"acceptedLanguage\"></lib-multifields>\n  </ng-container>\n</div>","import {\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  Optional,\n  Output\n} from '@angular/core';\n\n@Component({\n  selector: 'lib-form-elements',\n  templateUrl: './form-elements.component.html',\n  styleUrls: ['./form-elements.component.scss'],\n})\nexport class FormElementsComponent {\n  @Input() currentPageIndex: number = 0;\n  @Input() edit : boolean = false;\n  @Input() acceptedLanguage: string ='';\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() answer!: string;\n  @Input() grid: any;\n  @Input() state!: string;\n  @Input() pages: any[] = [];\n\n  constructor(\n    @Inject('grid') @Optional() private injectedGrid: any,\n    @Inject('state') @Optional() private injectedState: string,\n    @Inject('answer') @Optional() private injectedAnswer: string\n  ) {}\n\n\n  ngOnInit() {\n    this.grid = this.injectedGrid ?? this.grid;\n    this.state = this.injectedState ?? this.state;\n    this.answer = this.injectedAnswer ?? this.answer;\n  }\n\n  updateSubFormWithSubmissions(event:any){\n    this.subFormChange.emit(event);\n  }\n}\n","<ng-container *ngIf=\"state === 'child'; else parentBlock\">\n  <div *ngFor=\"let childLogic of grid\">\n    <div *ngIf=\"childLogic.showLogic && answer\">\n      <div *ngFor=\"let row of childLogic.rows\">\n        <div *ngFor=\"let grid of row.grid\">\n          <lib-recursive-logic\n            [grid]=\"grid\"\n            [edit]=\"edit\"\n            [acceptedLanguage]=\"acceptedLanguage\"\n            [pages]=\"pages\"\n            (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n          >\n          </lib-recursive-logic>\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-container>\n<ng-template #parentBlock>\n  <lib-recursive-logic\n    [grid]=\"grid\"\n    [edit]=\"edit\"\n    [acceptedLanguage]=\"acceptedLanguage\"\n    [pages]=\"pages\"\n    (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n  >\n  </lib-recursive-logic>\n</ng-template>\n","import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormValidationService } from '../../services/form-validation.service';\n\n@Component({\n  selector: 'lib-navigation-tabs',\n  templateUrl: './navigation-tabs.component.html',\n  styleUrls: ['./navigation-tabs.component.scss'],\n})\nexport class NavigationTabsComponent {\n  @Input() pages: any[] = [];\n  @Input() currentPageIndex: number = 0;\n   @Input() skipValidation: boolean = false;\n  @Output() pageChanged = new EventEmitter<number>();\n  @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\n   @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\n  @Input() edit : boolean = false;\n  @Input() acceptedLanguage: string ='';\n  @Input()  eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\n  @Output() subFormChange = new EventEmitter<any>();\n  @Input() pageDetails: any[] = [];\n  @Input() markAllQuestionsAsRequired : boolean = false;\n  @Input() skipMargin: boolean = false;\n  @Output() rowSetIndex = new EventEmitter<number>();\n  @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n  @Input() primaryColor: string = '';\n  @Input() secondaryColor: string = '';\n  @Input() isActionTriggered: boolean = false;\n  @Input() submissionInProgress: boolean = false;\n  @Input() submissionInDraft: boolean = false;\n  @Input() showCancelButton: boolean = false;\n  @Input() submissionProgress = 0;\n  @Input() currentStep = 'Submitting form';\n  @Input() animatedDots = '';\n  loadedPages: { [key: number]: boolean } = {};\n  showTooltip: boolean = false;\n  showNavArrows: boolean = false;\n  hideTabs: boolean = false;\n\n  constructor(\n    private formValidationService: FormValidationService,\n    private cdr: ChangeDetectorRef\n  ) {\n    // Load the first page initially\n    this.loadedPages[this.currentPageIndex] = true;\n  }\n\n\n  ngOnInit() {\n    this.checkPageDetails()\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => this.checkOverflow());\n    this.cdr.detectChanges();\n  }\n\n  checkPageDetails(){\n    if(this.pageDetails && this.pageDetails?.length==1 && this.pageDetails[0]?.name==''){\n      this.hideTabs=true;\n    }\n  }\n\n  updateSubFormWithSubmissions(event:any){\n    this.subFormChange.emit(event);\n  }\n\n  triggerFunction(event: number) {\n    this.setCurrentPage(event);\n  }\n\n  setCurrentPage(index: number) {\n    if(this.markAllQuestionsAsRequired){\n      const currentPageData = this.pages[this.currentPageIndex];\n      let validationResponse=true;\n      if(!this.skipValidation) {\n            validationResponse = this.formValidationService.validateRequiredQuestions(currentPageData).isValid;\n       }\n      if (validationResponse) {\n        this.pageChanged.emit(index);\n        this.currentPageIndex = index;\n        // Mark this page as loaded to avoid reloading\n        if (!this.loadedPages[index]) {\n          this.loadedPages[index] = true;\n        }\n      }\n    }else{\n      this.pageChanged.emit(index);\n      this.currentPageIndex = index;\n      // Mark this page as loaded to avoid reloading\n      if (!this.loadedPages[index]) {\n        this.loadedPages[index] = true;\n      }\n    }\n  }\n\n  submitForm() {\n    this.submitEmit.emit();\n  }\n\n    saveAsDraft() {\n    this.saveAsDraftEmit.emit();\n  }\n\n  trackByIndex(index: number, item: any): number {\n    return index;\n  }\n\n  loadMoreData(): void {\n    this.rowSetIndex.emit(this.currentPageIndex);\n }\n\n toggleTooltip() {\n  this.showTooltip = !this.eligibleForSubmission.status;\n}\n\nscrollTabs(direction: number) {\n  const tabContainer = document.querySelector('.navTabs') as HTMLElement;\n  if (tabContainer) {\n    tabContainer.scrollBy({ left: direction * 100, behavior: 'smooth' });\n    setTimeout(() => this.checkOverflow(), 300);\n  }\n}\n\ncheckOverflow() {\n  const tabContainer = document.querySelector('.navTabs') as HTMLElement;\n  if (tabContainer) {\n    this.showNavArrows = (tabContainer.scrollWidth > tabContainer.clientWidth);\n  }\n}\n\ncancelled(){\n  this.cancel.emit();\n}\n}\n","<div class=\"tab-inner-container\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\n  <div class=\"d-flex gap-2\">\n    <div class=\"tab-navigation\" *ngIf=\"!hideTabs\">\n      <ul class=\"nav nav-tabs navTabs\" id=\"myTab\" role=\"tablist\">\n        <li\n          class=\"nav-item\"\n          role=\"presentation\"\n          *ngFor=\"let page of pageDetails; let i = index; trackBy: trackByIndex\"\n          [ngClass]=\"{'nav-item-ara': acceptedLanguage === 'ara', 'nav-item-default': acceptedLanguage !== 'ara'}\"\n        >\n          <button\n            class=\"nav-link\"\n            [title]=\"page.name\"\n            data-bs-toggle=\"tooltip\"\n            data-bs-placement=\"top\"\n            data-bs-custom-class=\"custom-tooltip\"\n            [class.active]=\"i === currentPageIndex\"\n            id=\"tab-{{ i }}\"\n            type=\"button\"\n            role=\"tab\"\n            [attr.aria-controls]=\"'content-' + i\"\n            [attr.aria-selected]=\"i === currentPageIndex\"\n            (click)=\"setCurrentPage(i)\"\n          >\n            {{ page.name }}\n          </button>\n        </li>\n      </ul>\n    </div>\n    <div class=\"d-flex align-items-center\" *ngIf=\"showNavArrows\">\n      <button class=\"nav-arrow\">\n        <img src=\"assets/icons/left_arrow.svg\" alt=\"left arrow\"\n        (click)=\"scrollTabs(-1)\">\n        <img src=\"assets/icons/right_arrow.svg\" alt=\"right arrow\"\n        (click)=\"scrollTabs(1)\">\n      </button>\n    </div>\n  </div>\n\n\n\n  <div class=\"tab-content pt-5 pb-3 px-1\" [attr.name]=\"pages[currentPageIndex].testElementName\">\n    <ng-container *ngIf=\"pages[currentPageIndex]\">\n      <div\n        class=\"tab-pane fade show active\"\n        id=\"content-{{ currentPageIndex }}\"\n        role=\"tabpanel\"\n        [attr.aria-labelledby]=\"'tab-' + currentPageIndex\"\n      >\n        <div *ngIf=\"loadedPages[currentPageIndex]\">\n          <div class=\"data-container\"\n          infiniteScroll\n          [infiniteScrollDistance]=\"2\"\n          [infiniteScrollThrottle]=\"200\"\n          (scrolled)=\"loadMoreData()\">\n          <div *ngFor=\"let row of pages[currentPageIndex].rows\">\n            <div class=\"margin d-flex\">\n              <div *ngFor=\"let grid of row.grid\"\n                   [ngStyle]=\"{'width.%': (grid.element.count) * (100 / 12)}\">\n                <lib-form-elements\n                  [grid]=\"grid\"\n                  [edit]=\"edit\"\n                  [acceptedLanguage]=\"acceptedLanguage\"\n                  [pages]=\"pages\"\n                  (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n                ></lib-form-elements>\n              </div>\n            </div>\n          </div>\n          </div>\n          <div class=\"footerButton d-flex justify-content-between align-items-center me-4 ms-4 position-relative\">\n          <!-- Hover detection container -->\n                    <div  [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\n          <div\n            class=\"button-container position-relative\"\n            (mouseenter)=\"showTooltip = true\"\n            (mouseleave)=\"showTooltip = false\"\n          >\n\n          <div  *ngIf=\"currentPageIndex == pageDetails.length - 1\">\n            <button *ngIf=\"showCancelButton\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\n            (click)=\"cancelled()\" type=\"button\"\n            >Cancel</button>\n               <button\n            *ngIf=\"!isActionTriggered && skipValidation\"\n              class=\"btn rounded-pill submitButton text-white\"\n              [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\n              type=\"button\"\n              (click)=\"saveAsDraft()\"\n              [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\n            >\n            <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\n              <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n              Submitting...\n            </ng-container>\n            <ng-template #showSubmitText>\n             Save Draft\n            </ng-template>\n            </button>\n            \n\n            <button\n            *ngIf=\"!isActionTriggered\"\n              class=\"btn rounded-pill submitButton text-white\"\n              [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n              type=\"button\"\n              (click)=\"submitForm()\"\n              [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\n            >\n            <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\n              <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n              Submitting...\n            </ng-container>\n            <ng-template #showSubmitText>\n              Submit\n            </ng-template>\n            </button>\n            <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n              {{eligibleForSubmission.message}}\n            </div>\n              </div>\n          </div>\n\n        </div>\n        <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\n          {{ currentStep }}{{ animatedDots }}\n          <span class=\"percentage\">{{ submissionProgress }}%</span>\n        </div>\n\n        </div>\n      </div>\n    </ng-container>\n  </div>\n</div>\n","import { Component, Inject, Input } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\ninterface DialogData {\n  primaryColor?: string;\n}\n@Component({\n  selector: 'lib-form-submission-conformation',\n  templateUrl: './saveDraftModalComponent.html',\n  styleUrls: ['./saveDraftModalComponent.scss']\n})\n\nexport class SaveDraftModalComponent {\n primaryColor: string;\n\n get primaryColorRgb(): string {\n  let hex = this.primaryColor.trim().replace('#', '');\n\n    const defaultHex = \"0d6efd\";\n\n  if (!hex) hex = defaultHex;\n\n  let s = hex.trim().replace(/^#/, \"\").toLowerCase();\n\n  // Ensure only valid hex chars\n  if (!/^[0-9a-f]+$/.test(s)) {\n    s = defaultHex;\n  }\n\n  // Expand shorthand (3/4 digits → 6/8 digits)\n  if (s.length === 3 || s.length === 4) {\n    s = s.split(\"\").map(ch => ch + ch).join(\"\");\n  }\n\n  // If still invalid length, fallback\n  if (s.length !== 6 && s.length !== 8) {\n    s = defaultHex;\n  }\n\n  const r = parseInt(s.slice(0, 2), 16);\n  const g = parseInt(s.slice(2, 4), 16);\n  const b = parseInt(s.slice(4, 6), 16);\n\n  return `${r}, ${g}, ${b}`;\n}\n\n  constructor(\n    public dialogRef: MatDialogRef<SaveDraftModalComponent>,\n     @Inject(MAT_DIALOG_DATA) public data: DialogData) {\n     this.primaryColor = data.primaryColor || '#0d6efd';\n  }\n\n  saveAsDraft() {\n    this.dialogRef.close(true);\n  }\n\n  continueEditing() {\n    this.dialogRef.close(false);\n  }\n}\n","<div class=\"save-draft-modal\"\n     [style.--primary-color]=\"primaryColor\"\n     [style.--primary-color-rgb]=\"primaryColorRgb\">\n  <div class=\"modal-card\">\n    <div class=\"status-icon\">\n      <div class=\"icon-wrapper\">\n        <i class=\"bi bi-file-earmark-text-fill\"></i>\n      </div>\n    </div>\n\n    <h3>Form Submission Incomplete</h3>\n    <p class=\"subheader\">We noticed some information needs attention</p>\n\n    <div class=\"message-card\">\n      <div class=\"message-content\">\n        <p>Your form contains:</p>\n        <ul>\n          <li><i class=\"bi bi-x-circle\"></i> Missing required fields</li>\n          <li><i class=\"bi bi-exclamation-triangle\"></i> Incorrectly formatted answers</li>\n        </ul>\n      </div>\n    </div>\n\n    <div class=\"action-buttons\">\n      <button class=\"btn btn-continue\" (click)=\"continueEditing()\">\n        <i class=\"bi bi-pencil-square\"></i> Continue Editing\n      </button>\n      <button class=\"btn btn-save\" (click)=\"saveAsDraft()\">\n        <i class=\"bi bi-cloud-arrow-up\"></i> Save as Draft\n      </button>\n    </div>\n  </div>\n</div>\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { map, Observable } from 'rxjs';\nimport { DataService } from './data.service';\n\ndeclare global {\n  interface Window {\n    onRecaptchaLoadCallback: () => void;\n  }\n\n  var grecaptcha: {\n    ready: (callback: () => void) => void;\n    render: (\n      container: string | HTMLElement,\n      parameters: {\n        sitekey: string;\n        callback?: (token: string) => void;\n        'expired-callback'?: () => void;\n        'error-callback'?: () => void;\n        size?: 'normal' | 'compact' | 'invisible';\n        theme?: 'light' | 'dark';\n      }\n    ) => number;\n    execute: (widgetId?: number) => void;\n    getResponse: (widgetId?: number) => string;\n    reset: (widgetId?: number) => void;\n  };\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class RecaptchaService {\n  private siteKey = '';\n   private apiUrl: string = '';\n  private widgetId: number | null = null;\n  private initialized = false;\n  private resolved = false;\n\n  constructor(private toastr: ToastrService,private http: HttpClient, private dataService: DataService) {\n     this.dataService.apiUrl$.subscribe((data) => {\n       this.apiUrl = data;\n     });\n\n  }\n\n  ngOnInit() {\nthis.fetchSiteKeyFromApi().subscribe({\n    next: (key) => (this.siteKey = key),\n    error: () => this.toastr.error('Failed to load CAPTCHA config')\n  });\n  }\n\n\n\n  fetchSiteKeyFromApi(): Observable<string> {\n\n    return this.http.get<{ message: string }>(`${this.apiUrl}/api/application-settings/recaptcha/siteKey`).pipe(\n      map((response: { message: string }) => {\n        const siteKey = response.message;\n        return siteKey;\n      })\n    );\n  }\n\n  initialize(): Promise<void> {\n    if(!this.siteKey || this.siteKey === '') {\n       this.fetchSiteKeyFromApi().subscribe({\n    next: (key) => (this.siteKey = key),\n    error: () => this.toastr.error('Failed to load CAPTCHA config')\n  });\n    }\n\n\n    return new Promise((resolve, reject) => {\n         if (this.widgetId !== null) {\n          resolve();\n          return;\n    }\n      if (this.initialized && typeof grecaptcha !== 'undefined' && typeof grecaptcha.render === 'function') {\n        resolve();\n        return;\n      }\n\n      const existingScript = document.querySelector('script[src*=\"recaptcha/api.js\"]');\n      if (existingScript) {\n        existingScript.addEventListener('load', () => resolve());\n        resolve();\n        return;\n      }\n\n      const script = document.createElement('script');\n      script.src = 'https://www.google.com/recaptcha/api.js?onload=onRecaptchaLoadCallback&render=explicit';\n      script.async = true;\n      script.defer = true;\n\n      window.onRecaptchaLoadCallback = () => {\n        this.initialized = true;\n        resolve();\n      };\n\n      script.onerror = () => {\n        reject('Failed to load reCAPTCHA script');\n      };\n\n      document.head.appendChild(script);\n    });\n  }\n\nrender(containerId: string, callback: (token: string) => void): void {\n  if (typeof grecaptcha === 'undefined') {\n    throw new Error('reCAPTCHA is not loaded');\n  }\n\n  // ✅ Prevent rendering more than once\n  if (this.widgetId !== null) {\n    console.warn('reCAPTCHA already rendered, skipping render.');\n    return;\n  }\n\n  this.widgetId = grecaptcha.render(containerId, {\n    sitekey: this.siteKey,\n    callback: (token: string) => {\n      this.resolved = true;\n      callback(token);\n    },\n    'expired-callback': () => {\n      this.resolved = false;\n      this.toastr.warning('reCAPTCHA expired, please verify again');\n    },\n    'error-callback': () => {\n      this.resolved = false;\n      this.toastr.error('reCAPTCHA error occurred');\n    },\n    size: 'normal',\n    theme: 'light',\n  });\n}\n\n\n  reset(): void {\n    if (typeof grecaptcha !== 'undefined' && this.widgetId !== null) {\n      grecaptcha.reset(this.widgetId);\n      this.resolved = false;\n    }\n  }\n\n  getResponse(): string {\n    if (typeof grecaptcha === 'undefined' || this.widgetId === null) {\n      return '';\n    }\n    return grecaptcha.getResponse(this.widgetId);\n  }\n\n  isRendered(): boolean {\n    return this.widgetId !== null;\n  }\n\n  isResolved(): boolean {\n    return this.resolved && !!this.getResponse();\n  }\n\n  removeRecaptchaScript(): void {\n    const script = document.querySelector('script[src*=\"recaptcha/api.js\"]');\n    if (script) {\n      script.remove();\n    }\n\n    const badge = document.querySelector('.grecaptcha-badge');\n    if (badge) {\n      badge.remove();\n    }\n\n    this.widgetId = null;\n    this.initialized = false;\n    this.resolved = false;\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'lib-header',\n  templateUrl: './header.component.html',\n  styleUrls: ['./header.component.scss']\n})\nexport class HeaderComponent {\n  @Input() name: string = '';\n  @Input() skipMargin: boolean = false;\n\n}\n","<div class=\"head container\">\n  <div class=\"registration-header\">\n    <p>{{ name }}</p>\n  </div>\n  <div class=\"line\" *ngIf=\"!skipMargin\"></div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'lib-next-prev-navigation',\n  templateUrl: './next-prev-navigation.component.html',\n  styleUrls: ['./next-prev-navigation.component.scss']\n})\nexport class NextPrevNavigationComponent {\n\n   @Input() skipValidation: boolean = false;\n  @Input() currentPageIndex: number = 0;\n  @Input() pages: any[] = [];\n  @Input() previousPage: any = {};\n  @Input() nextPage: any = {};\n  @Input() currentPage: any = {};\n  @Input() pageDetails: any[] = [];\n  @Input() skipMargin: boolean = false;\n  @Output() navigateNext = new EventEmitter<void>();\n  @Output() navigatePrevious = new EventEmitter<void>();\n  @Output() submitEmit: EventEmitter<any> = new EventEmitter<any>();\n  @Output() saveAsDraftEmit: EventEmitter<any> = new EventEmitter<any>();\n  @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n  @Input() edit: boolean = false;\n  @Input() acceptedLanguage: string ='';\n  @Output() subFormChange = new EventEmitter<any>();\n  @Output() rowSetIndex = new EventEmitter<number>();\n  @Input() primaryColor: string = '';\n  @Input() secondaryColor: string = '';\n  @Input() isActionTriggered: boolean = false;\n  @Input() submissionInProgress: boolean = false;\n  @Input() submissionInDraft: boolean = false;\n  @Input()  eligibleForSubmission:{ status: boolean; message: string } = { status: true, message: '' };\n  @Input() showCancelButton: boolean = false;\n  @Input() submissionProgress = 0;\n  @Input() currentStep = 'Submitting form';\n  @Input() animatedDots = '';\n  showTooltip: boolean = false;\n  ngOnInit(){\n  }\n\n\n  updateSubFormWithSubmissions(event: any) {\n    this.subFormChange.emit(event);\n  }\n\n  onNavigateNext() {\n    this.navigateNext.emit();\n  }\n\n  onNavigatePrevious() {\n    this.navigatePrevious.emit();\n  }\n\n  submitForm() {\n    this.submitEmit.emit();\n  }\n\n  saveAsDraft() {\n    this.saveAsDraftEmit.emit();\n  }\n\n\n  loadMoreData(): void {\n    this.rowSetIndex.emit(this.currentPageIndex);\n }\n\n  toggleTooltip() {\n  this.showTooltip = !this.eligibleForSubmission.status;\n}\n\ncancelled(){\n  this.cancel.emit();\n}\n}\n","<!-- <div class=\"pageTitleDiv\" *ngIf=\"!skipMargin\">\n  <p class=\"pageTitle\">{{pageDetails[currentPageIndex]?.name}}</p>\n</div> -->\n<div class=\"button-inner-container rounded\" [ngClass]=\"{ 'skip-margin': skipMargin}\">\n  <div class=\"tab-content pt-5 pb-3 row\" [attr.name]=\"pages[currentPageIndex].testElementName\">\n    <div class=\"data-container\"\n    infiniteScroll\n    [infiniteScrollDistance]=\"2\"\n    [infiniteScrollThrottle]=\"200\"\n    (scrolled)=\"loadMoreData()\">\n\n    <div *ngFor=\"let row of pages[currentPageIndex]?.rows\" class=\"marginSize d-flex\">\n      <div *ngFor=\"let grid of row.grid\"\n      [ngStyle]=\"{'width.%': (grid.element.count) * (100 / (12))}\">\n        <lib-form-elements\n          [grid]=\"grid\"\n          [currentPageIndex]=\"currentPageIndex\"\n          [edit]=\"edit\"\n          [acceptedLanguage]=\"acceptedLanguage\"\n          [pages]=\"pages\"\n          (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n          state=\"parent\"\n        ></lib-form-elements>\n      </div>\n    </div>\n    </div>\n   <div [ngStyle]=\"{ display: currentPageIndex === pageDetails.length - 1 ? 'block' : 'none' }\" id=\"captcha-container\"></div>\n\n    <div class=\"footerButton\">\n      <div\n        class=\"prevButtonDiv\"\n        [ngClass]=\"{ 'prevDirection-rtl': acceptedLanguage === 'ara' }\">\n        <button\n          class=\"me-md-2 rounded-pill navButton\"\n          [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n          type=\"button\"\n          (click)=\"onNavigatePrevious()\"\n          *ngIf=\"0 < currentPageIndex\"\n        >\n          <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\n            <svg\n              width=\"24\"\n              height=\"24\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M19.4897 12.0117L4.49975 12.0117\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n              <path\n                d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </ng-container>\n          <ng-template #defaultSvg>\n            <svg\n              width=\"24\"\n              height=\"24\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M4.51025 11.9883L19.5003 11.9883\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n              <path\n                d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </ng-template>\n          Previous | {{ previousPage.name }}\n        </button>\n      </div>\n      <div\n        class=\"nextButtonDiv\"\n        [ngClass]=\"{ 'nextDirection-rtl': acceptedLanguage === 'ara' }\"\n      >\n        <button\n          class=\"md-2 rounded-pill navButton\"\n          [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor: '#084fff' }\"\n          type=\"button\"\n          (click)=\"onNavigateNext()\"\n          *ngIf=\"currentPageIndex < pageDetails.length - 1\"\n        >\n          Next | {{ nextPage.name }}\n          <ng-container *ngIf=\"acceptedLanguage === 'ara'; else defaultSvg\">\n            <svg\n              width=\"24\"\n              height=\"24\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M4.51025 11.9883L19.5003 11.9883\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n              <path\n                d=\"M10.514 17.9766L4.49805 11.9996L10.514 6.02256\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </ng-container>\n          <ng-template #defaultSvg>\n            <svg\n              width=\"24\"\n              height=\"24\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M19.4897 12.0117L4.49975 12.0117\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n              <path\n                d=\"M13.486 6.02344L19.502 12.0004L13.486 17.9774\"\n                stroke=\"white\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </ng-template>\n        </button>\n        <button *ngIf=\"showCancelButton && currentPageIndex == pageDetails.length - 1\" class=\"btn submitButton rounded-pill bg-secondary text-white\"\n        (click)=\"cancelled()\" type=\"button\"\n        >Cancel</button>\n        <div\n             *ngIf=\"skipValidation\"\n            class=\"button-container position-relative\"\n            (mouseenter)=\"showTooltip = true\"\n            (mouseleave)=\"showTooltip = false\"\n          >\n          <button\n          class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\n          [ngStyle]=\"{ 'background-color': secondaryColor ? secondaryColor : '#084fff' }\"\n          type=\"button\"\n          *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\n          (click)=\"saveAsDraft()\"\n          [disabled]=\"!eligibleForSubmission.status || submissionInDraft\"\n        >\n          <ng-container *ngIf=\"submissionInDraft; else showSubmitText\">\n\n            <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n            Submitting...\n          </ng-container>\n          <ng-template #showSubmitText>\n            Save Draft\n          </ng-template>\n        </button>\n           <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n              {{eligibleForSubmission.message}}\n            </div>\n      </div>\n\n  <div\n            class=\"button-container position-relative\"\n            (mouseenter)=\"showTooltip = true\"\n            (mouseleave)=\"showTooltip = false\"\n          >\n          <button\n          class=\"submitBtn ms-md-2 me-md-2 rounded-pill d-flex align-items-center justify-content-center\"\n          [ngStyle]=\"{ 'background-color': primaryColor ? primaryColor : '#084fff' }\"\n          type=\"button\"\n          *ngIf=\"currentPageIndex == pageDetails.length - 1 && !isActionTriggered\"\n          (click)=\"submitForm()\"\n          [disabled]=\"!eligibleForSubmission.status || submissionInProgress\"\n        >\n          <ng-container *ngIf=\"submissionInProgress; else showSubmitText\">\n            <span class=\"spinner-border spinner-border-sm me-2\" role=\"status\" aria-hidden=\"true\"></span>\n            Submitting...\n          </ng-container>\n          <ng-template #showSubmitText>\n            Submit\n          </ng-template>\n        </button>\n           <div *ngIf=\"showTooltip && !eligibleForSubmission.status\" class=\"custom-tooltip\">\n              {{eligibleForSubmission.message}}\n            </div>\n      </div>\n\n    </div>\n  </div>\n  <div *ngIf=\"submissionInProgress\" class=\"text-loader\">\n    {{ currentStep }}{{ animatedDots }}\n    <span class=\"percentage\">{{ submissionProgress }}%</span>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'lib-submission-container',\n  templateUrl: './submission-container.component.html',\n  styleUrls: ['./submission-container.component.scss']\n})\nexport class SubmissionContainerComponent {\n  @Input() parentQuestionAnswers:any;\n\n  isImageUrl(url: string): boolean {\n    return url.match(/\\.(jpeg|jpg|gif|png)$/) != null;\n  }\n}\n","<div class=\"subModule\">\n    <div class=\"submission-container\">\n    <div *ngFor=\"let qa of parentQuestionAnswers\" class=\"submission-item\">\n      <div class=\"key\">{{ qa.question }}</div>\n      <div class=\"value\">\n        <ng-container *ngIf=\"qa.elementType === 'FILE_PICKER'; else text\">\n          <div class=\"files\" *ngFor=\"let attachment of qa.attachments\">\n            <ng-container *ngIf=\"isImageUrl(attachment.fileName); else fileLink\">\n              <img [src]=\"attachment.fileUrl\" alt=\"{{ attachment.fileName }}\" class=\"image\">\n            </ng-container>\n            <ng-template #fileLink>\n              <p>{{ attachment.fileName }}</p>\n              <a class=\"fileName\" [href]=\"attachment.fileUrl\" target=\"_blank\">\n                <i class=\"bi bi-file-earmark\"></i>\n              </a>\n            </ng-template>\n          </div>\n        </ng-container>\n        <ng-template #text>\n          <ng-container [ngSwitch]=\"qa.elementType\">\n            <p *ngSwitchCase=\"'RICH_TEXT_EDITOR'\" [innerHTML]=\"qa.values\"></p>\n            <p *ngSwitchCase=\"'DROP_DOWN'\">{{ qa.values.join(', ') }}</p>\n            <p *ngSwitchCase=\"'SELECTION_MATRIX'\">{{ qa.values.join(', ') }}</p>\n            <p *ngSwitchDefault>{{ qa.values }}</p>\n          </ng-container>\n        </ng-template>\n      </div>\n    </div>\n</div>\n  </div>","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { FormService } from '../../services/form.service';\nimport * as mapper from '../../services/mapper.service';\nimport { PublicForm } from '../../models/publicForm.model';\nimport { ToastrService } from 'ngx-toastr';\nimport { Router } from '@angular/router';\nimport { DataService } from '../../services/data.service';\nimport { RecaptchaService } from '../../services/recaptcha.service';\nimport { ValidationService } from '../../services/validation.service';\nimport { ElementTrackerService } from '../../services/element-tracker.service';\nimport { NavigationTabsComponent } from '../navigation-tabs/navigation-tabs.component';\nimport { FormValidationService } from '../../services/form-validation.service';\nimport { AggregationFunctionService } from '../../services/aggregate.service';\nimport { EmitterDTO } from '../../models/emitters.model';\nimport { ScoreCalculationService } from '../../services/score.service';\nimport { MatDialog } from '@angular/material/dialog';\nimport { SaveDraftModalComponent } from '../save-as-draft/saveDraftModalComponent ';\nimport { WhenClauseService } from '../../services/whenClause.service';\nimport { HttpEventType } from '@angular/common/http';\nimport { HiddenFieldService } from '../../services/hidden-field.service';\n\ninterface Answer {\n  questionId: string;\n  answer: any;\n  answerId?: string;\n  deleteFiles?: string[];\n  fields?: any;\n}\n\ninterface Submission {\n  submissionId?: string;\n  answers: Answer[];\n}\n\ninterface Form {\n  formId: string;\n  deleted?: boolean;\n  deletedSubmissions: any[];\n  submissions: Submission[];\n  copiedForms: string[];\n  scores?:{\n    scoreType: string;\n    score: number;\n  }[];\n  maximumPossibleScore?:number;\n  show?:boolean;\n}\n\ninterface CopyForms{\n  id: string,\n  title: string,\n  description: string,\n  parentSubform: string,\n  questionRelation: Record<string, string>;\n}\n\ninterface WhenClauseElements{\n  elementId:string;\n  entityType:string;\n  show:boolean;\n}\n\ninterface QuestionAnswersWrapper {\n  parentId: string;\n  answers: Answer[];\n  forms: Form[];\n  copySubForms:CopyForms[];\n  scores?:{\n    scoreType: string;\n    score: number;\n  }[];\n  maximumPossibleScore?:number;\n  whenClauseElements: WhenClauseElements[]\n}\n\ninterface SubmissionScore {\n  scoreType: string;\n  score: number;\n}\n\n@Component({\n  selector: 'lib-submit-form',\n  templateUrl: './submit-form.component.html',\n  styleUrls: ['./submit-form.component.scss'],\n})\nexport class SubmitFormComponent implements OnInit, OnDestroy {\n  question: PublicForm | null = null;\n  @Input() moduleName: string = '';\n  @Input() edit: boolean = false;\n  @Input() submissionId: string = '';\n  @Input() acceptedLanguage: string = '';\n  @Input() skipMargin: boolean = false;\n  @Input() skipValidation: boolean = false;\n  @Input() navigateTo: string = '';\n  @Input() country: string = '';\n  @Output() submit: EventEmitter<any> = new EventEmitter<any>();\n  @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() currentPageIndexChange: EventEmitter<number> =\n    new EventEmitter<number>();\n  @Input() showCancelButton: boolean = false;\n  @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n  @ViewChild(NavigationTabsComponent, { static: false })\n  child!: NavigationTabsComponent;\n  @Input() isActionTriggered: boolean = false;\n  isLoading: boolean = false;\n  name: string = '';\n  saveAutomatically: boolean = false;\n  saveInterval: number = 0;\n  customizeFont: boolean = false;\n  fontFamily: string = '';\n  fontSize: number = 0;\n  validationSkip: boolean = false;\n  enableDataExport: boolean = false;\n  fileFormats: string[] = [];\n  enableQuestionNumbering: boolean = false;\n  questionNumbering: string = '';\n  enableGoogleRecaptcha: boolean = false;\n  googleRecaptchaKey: string = '';\n  googleRecaptchaSecret: string = '';\n  navigation: string = '';\n  markAllQuestionsAsRequired: boolean = false;\n  pages: any = [];\n  currentPageIndex: number = 0;\n  previousPage: any = {};\n  currentPage: any = {};\n  nextPage: any = {};\n  lastTab: boolean = false;\n  questionAnswers: QuestionAnswersWrapper = {\n    parentId: '',\n    answers: [],\n    forms: [],\n    copySubForms: [],\n    whenClauseElements: []\n  };\n  webhook: any;\n  files: { questionId: string; file: any ; show?:boolean}[] = [];\n  parentQuestions: any;\n  submission: any = {};\n  parentQuestionAnswers: any;\n  parentSubmissionId: string = '';\n  submissionInProgress: boolean = false;\n  submissionInDraft: boolean = false;\n  recaptchaToken: string = '';\n  private isRefreshing: boolean = false;\n  private intervalId: ReturnType<typeof setInterval> | null = null;\n  pageDetails: any = [];\n  pageNumber: number = 1;\n  rowSet: number = 0;\n  rowSetCount: [number] = [0];\n  retryCount: number = 0;\n  maxRetries: number = 5;\n\n  eligibleForSubmission: { status: boolean; message: string } = {\n    status: true,\n    message: '',\n  };\n  webhookPayloadArray: any[] = [];\n  inValidQuestions: Map<string, string> = new Map<string, string>();\n  visitedRows: Map<number, number> = new Map<number, number>();\n  allElementIds: string[] = [];\n  private debounceTimer: any;\n  primaryColor: string = '#084fff';\n  secondaryColor: string = '';\n  isLoadingPages: boolean = false;\n  copySubforms: CopyForms[] = [];\n  emitters: EmitterDTO[] = [];\n  maxPossibleScore!: number;\n  maxPossibleGoodScore!: number;\n  maxPossibleBadScore!: number;\n  sumOfFindings!: number;\n  sumOfGoodFindings!: number;\n  sumOfBadFindings!: number;\n  draft: boolean = false;\n  submissionProgress = 0;\n  showSubmissionLoader = false;\n  progressInterval: any;\n  currentStep = 'Submitting form';\n  animatedDots = '';\n  private dotInterval: any;\n\n  constructor(\n    private formService: FormService,\n    private toastr: ToastrService,\n    private router: Router,\n    private dataService: DataService,\n    private recaptchaService: RecaptchaService,\n    private validationService: ValidationService,\n    private changeDetectorRef: ChangeDetectorRef,\n    private elementTracker: ElementTrackerService,\n    private formValidationService: FormValidationService,\n    private aggregateService: AggregationFunctionService,\n    private scoreCalcService: ScoreCalculationService,\n    public dialog: MatDialog,\n    private whenClauseService:WhenClauseService,\n    private hiddenFieldService:HiddenFieldService\n  ) {\n    const navigation = this.router.getCurrentNavigation();\n    this.submission = navigation?.extras.state?.['submission'];\n    this.parentSubmissionId = this.submission?.id;\n    this.parentQuestionAnswers = this.submission?.questionAnswers;\n    this.parentQuestions = navigation?.extras.state?.['parentQuestions'];\n    this.dataService.setParentQuestions(this.parentQuestions);\n  }\n  ngOnDestroy(): void {\n    this.visitedRows.clear();\n    this.recaptchaService.removeRecaptchaScript();\n    if (this.intervalId) {\n      clearInterval(this.intervalId);\n      this.intervalId = null;\n      this.isRefreshing = false;\n    }\n    this.aggregateService.clearAll();\n    this.recaptchaService.removeRecaptchaScript();\n    this.whenClauseService.resetService();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['acceptedLanguage']) {\n      this.currentPageIndex = 0;\n      this.acceptedLanguage = changes['acceptedLanguage'].currentValue;\n      if (!this.edit) this.getFormData();\n    }\n    if(changes['submissionId']){\n      this.submissionId=changes['submissionId'].currentValue;\n      if (this.edit && this.submissionId) {\n        this.getSubmittedFormData();\n      }\n    }\n  }\n\n  ngOnInit() {\n    this.hiddenFieldService.setEditMode(this.edit);\n    if (this.edit && this.submissionId) {\n      // this.getSubmittedFormData();\n    } else {\n      // this.getFormData();\n    }\n\n    if (this.enableGoogleRecaptcha) {\n      this.recaptchaInitialized();\n    }\n  }\n\n  async recaptchaInitialized() {\n    await this.recaptchaService.initialize();\n    this.recaptchaService.render('captcha-container', (token) => {});\n  }\n\n  async getToken(): Promise<string> {\n    return new Promise(async (resolve) => {\n      try {\n        await this.recaptchaService.initialize();\n\n        // Check if CAPTCHA was rendered\n        if (!this.recaptchaService.isRendered()) {\n          console.warn('reCAPTCHA not rendered yet.');\n          return resolve('');\n        }\n\n        // If solved, return the token\n        if (this.recaptchaService.isResolved()) {\n          const token = this.recaptchaService.getResponse();\n\n          return resolve(token);\n        }\n\n        // If expired or unsolved, return empty string\n        console.warn('reCAPTCHA not resolved or expired.');\n        return resolve('');\n      } catch (err) {\n        console.error('reCAPTCHA initialization failed:', err);\n        return resolve('');\n      }\n    });\n  }\n\n  loadFont(fontName: string): void {\n    const fontPath = `assets/fonts/${fontName}.woff2`; // Adjust extension as per your font file\n    const style = document.createElement('style');\n    style.innerHTML = `\n      @font-face {\n        font-family: '${fontName}';\n        src: url('${fontPath}') format('woff2');\n        font-weight: normal;\n        font-style: normal;\n      }\n      body {\n        font-family: '${fontName}', sans-serif;\n      }\n    `;\n    document.head.appendChild(style);\n  }\n\n  getFormData() {\n    this.isLoadingPages = true;\n    this.formService\n      .getQuestions(this.moduleName, 1, 0, true,this.country)\n      .subscribe((response: any) => {\n        this.isLoadingPages = false;\n        this.enableGoogleRecaptcha =\n          response.result.moduleConfiguration?.enableGoogleRecaptcha;\n        this.question = mapper.mapPublicFormToModel(response);\n        this.emitters = this.question.emitters || [];\n        this.assignQuestionProperties(this.question);\n        this.setUpFontFamily(response);\n        this.primaryColor = response.result.primaryColor || '#084fff';\n        this.secondaryColor = response.result.secondaryColor;\n        if (this.enableGoogleRecaptcha) this.recaptchaInitialized();\n        if (response?.result?.pageDetails) {\n          this.pageDetails = response.result.pageDetails;\n          this.nextPage = this.pageDetails[1];\n        }\n        this.webhook = response?.result?.webhooks;\n        this.webhookPayloadArray = response?.result?.webhooks?.map(\n          (w: any) => ({\n            id: w.id,\n            ...this.extractGroupedWebhookData([w]),\n          })\n        );\n\n        this.rowSetCount[0] = response.result.totalNumberRow;\n        for (let i = 0; i < this.pageDetails.length; i++) {\n          if (!this.pages[i]) {\n            this.pages[i] = [];\n          }\n        }\n        this.checkSubmissionEligibility();\n      });\n  }\n\n  getSubmittedFormData() {\n    this.formService\n      .getSubmittedForm(\n        this.moduleName,\n        this.submissionId,\n        1,\n        0,\n        this.navigateTo\n      )\n      .subscribe((response) => {\n        this.enableGoogleRecaptcha =\n          response.result.moduleConfiguration.enableGoogleRecaptcha;\n        this.question = mapper.mapPublicFormToModel(response);\n        this.assignQuestionProperties(this.question);\n        this.primaryColor = response.result.primaryColor || '#084fff';\n        this.secondaryColor = response.result.secondaryColor;\n        this.emitters = this.question.emitters || [];\n        if (response?.result?.pageDetails) {\n          this.pageDetails = response.result.pageDetails;\n          this.nextPage = this.pageDetails[1];\n        }\n        this.webhookPayloadArray;\n        this.webhookPayloadArray = response?.result?.webhooks?.map(\n          (w: any) => ({\n            id: w.id,\n            ...this.extractGroupedWebhookData([w]),\n          })\n        );\n        this.rowSetCount[0] = response.result.totalNumberRow;\n        for (let i = 0; i < this.pageDetails.length; i++) {\n          if (!this.pages[i]) {\n            this.pages[i] = [];\n          }\n        }\n        this.setUpFontFamily(response);\n        if (this.navigateTo) {\n          setTimeout(() => {\n            this.navigateToFormElement();\n          });\n        }\n        if (this.enableGoogleRecaptcha) {\n          this.recaptchaInitialized();\n        }\n        this.checkSubmissionEligibility();\n      });\n  }\n\n  setUpFontFamily(response: any) {\n    //set font family and font size\n    if (response.result?.moduleConfiguration?.customizeFont) {\n      this.fontFamily = response.result.moduleConfiguration?.fontFamily;\n      this.fontSize = response.result.moduleConfiguration?.fontSize || 18;\n    } else {\n      this.fontFamily = 'Poppins';\n      this.fontSize = 18;\n    }\n    this.loadFont(this.fontFamily);\n    document.documentElement.style.setProperty(\n      '--library-font-family',\n      this.fontFamily\n    );\n    document.documentElement.style.setProperty(\n      '--library-font-size',\n      this.fontSize + 'px'\n    );\n  }\n\n  navigateToFormElement() {\n    if (!this.pages) return;\n\n    let foundPageIndex: number | null = null;\n\n    // Step 1: find the page index\n    this.pages.forEach((page: any, pageIndex: number) => {\n      if (!page?.rows) return;\n\n      page.rows.forEach((row: any) => {\n        if (!row?.grid) return;\n\n        row.grid.forEach((gridItem: any) => {\n          const element = gridItem?.element;\n          if (!element) return;\n\n          // Case 1: Direct question match\n          if (\n            gridItem.entityType === 'QUESTION' &&\n            element.id === this.navigateTo\n          ) {\n            foundPageIndex = pageIndex;\n          }\n\n          // Case 2: Subform match\n          if (gridItem.entityType === 'SUBFORM') {\n            if (element.id === this.navigateTo) {\n              foundPageIndex = pageIndex;\n            }\n            if (\n              element.submissions?.some(\n                (s: any) => s.submissionId === this.navigateTo\n              )\n            ) {\n              foundPageIndex = pageIndex;\n            }\n          }\n        });\n      });\n    });\n\n    if (foundPageIndex !== null) {\n      // Step 2: Set current page\n      this.currentPageIndex = foundPageIndex;\n      this.currentPage = this.pages[this.currentPageIndex];\n\n      if (this.navigation == 'TAB') {\n        this.child.triggerFunction(this.currentPageIndex);\n      } else {\n\n        this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n        this.nextPage = this.pageDetails[this.currentPageIndex + 1];\n      }\n      // Step 3: Wait for DOM render and scroll\n      setTimeout(() => {\n        const elementId = `question-${this.navigateTo}`;\n        const el = document.getElementById(elementId);\n        if (el) {\n          el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n          this.checkSubmissionEligibility();\n        }\n      }, 0);\n    } else {\n      console.warn(`navigateTo id ${this.navigateTo} not found in any page`);\n    }\n  }\n\n  assignQuestionProperties(question: PublicForm) {\n    this.name = question.name;\n    this.pages = question.pages;\n    if (this.parentQuestions) {\n      this.parentQuestionAnswers = question?.questionAnswers;\n      this.parentSubmissionId = question?.parentId;\n    }\n    this.currentPage = this.pages[0];\n    this.nextPage = this.pages[1];\n    this.saveAutomatically = question.formConfiguration.saveAutomatically;\n    this.saveInterval = question.formConfiguration.saveInterval;\n    this.customizeFont = question.formConfiguration.customizeFont;\n    this.fontFamily = question.formConfiguration.fontFamily;\n    this.fontSize = question.formConfiguration.fontSize;\n    this.enableDataExport = question.formConfiguration.enableDataExport;\n    this.fileFormats = question.formConfiguration.fileFormats;\n    this.enableQuestionNumbering =\n      question.formConfiguration.enableQuestionNumbering;\n    this.questionNumbering = question.formConfiguration.questionNumbering;\n    this.enableGoogleRecaptcha =\n      question.formConfiguration.enableGoogleRecaptcha;\n    this.googleRecaptchaKey = question.formConfiguration.googleRecaptchaKey;\n    this.googleRecaptchaSecret =\n      question.formConfiguration.googleRecaptchaSecret;\n    this.navigation = question.formConfiguration.navigation;\n    this.markAllQuestionsAsRequired =\n      question.formConfiguration.markAllQuestionsAsRequired;\n    this.apiCalled.emit(true);\n  }\n\n  navigateToNextPage() {\n    if (!this.isLoading) {\n      this.isLoading = true;\n      const nextIndex = this.currentPageIndex + 1;\n      if (nextIndex < this.pageDetails.length) {\n        if (this.markAllQuestionsAsRequired) {\n          const currentPageData = this.pages[this.currentPageIndex];\n          let validationResponse = true;\n          if (!this.validationSkip) {\n            validationResponse =\n              this.formValidationService.validateRequiredQuestions(\n                currentPageData\n              ).isValid;\n          }\n          if (validationResponse) {\n            this.previousPage = this.pageDetails[this.currentPageIndex];\n            if (this.pages[nextIndex].length != 0) {\n              this.currentPage = this.pages[nextIndex];\n              this.currentPageIndex = nextIndex;\n            } else {\n              this.setCurrentPage(nextIndex);\n            }\n            this.nextPage = this.pageDetails[nextIndex + 1];\n          }\n        } else {\n          this.previousPage = this.pageDetails[this.currentPageIndex];\n          if (this.pages[nextIndex].length != 0) {\n            this.currentPage = this.pages[nextIndex];\n            this.currentPageIndex = nextIndex;\n          } else {\n            this.setCurrentPage(nextIndex);\n          }\n          this.nextPage = this.pageDetails[nextIndex + 1];\n        }\n      }\n      this.isLoading = false;\n      this.checkSubmissionEligibility();\n    }\n  }\n\n  navigateToPreviousPage() {\n    if (this.currentPageIndex > 0) {\n      if (this.markAllQuestionsAsRequired) {\n        const currentPageData = this.pages[this.currentPageIndex];\n        let validationResponse = true;\n        if (!this.validationSkip) {\n          validationResponse =\n            this.formValidationService.validateRequiredQuestions(\n              currentPageData\n            ).isValid;\n        }\n        if (validationResponse) {\n          this.nextPage = this.pageDetails[this.currentPageIndex];\n          this.currentPageIndex--;\n          if (this.pages[this.currentPageIndex].length != 0) {\n            this.currentPage = this.pages[this.currentPageIndex];\n          } else {\n            this.setCurrentPage(this.currentPageIndex);\n          }\n          this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n        }\n      } else {\n        this.nextPage = this.pageDetails[this.currentPageIndex];\n        this.currentPageIndex--;\n        if (this.pages[this.currentPageIndex].length != 0) {\n          this.currentPage = this.pages[this.currentPageIndex];\n        } else {\n          this.setCurrentPage(this.currentPageIndex);\n        }\n        this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n      }\n    }\n    this.checkSubmissionEligibility();\n  }\n\n  checkSubmissionEligibility(): void {\n    this.eligibleForSubmission = this.validateAllElementLoaded();\n  }\n\n  setCurrentPage(index: number) {\n    if (index < this.pages.length) {\n      // If page already exists AND has content → no need to fetch again\n      if (\n        this.pages[index] &&\n        this.pages[index].rows &&\n        this.pages[index].rows.length > 0\n      ) {\n        this.checkSubmissionEligibility();\n        return;\n      }\n    }\n    this.pageNumber = index + 1;\n    if (this.edit) {\n      this.formService\n        .getSubmittedForm(\n          this.moduleName,\n          this.submissionId,\n          this.pageNumber,\n          this.rowSet\n        )\n        .subscribe((response: any) => {          \n          const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\n          if (mappedResponse) {\n            this.pages[index] = mappedResponse;\n          }\n          this.currentPageIndex = index;\n          this.currentPage = this.pages[index];\n          this.rowSetCount[index] = response.result.totalNumberRow;\n          this.checkSubmissionEligibility();\n        });\n    } else {\n      this.formService\n        .getQuestions(this.moduleName, this.pageNumber, this.rowSet, true,this.country)\n        .subscribe((response: any) => {\n          const mappedResponse = mapper.mapPageToModel(response.result.pages[0],response.result?.currency,response.result?.defaultCurrency);\n          if (mappedResponse) {\n            this.pages[index] = mappedResponse;\n          }\n          this.currentPageIndex = index;\n          this.currentPage = this.pages[index];\n          this.rowSetCount[index] = response.result.totalNumberRow;\n          this.checkSubmissionEligibility();\n        });\n    }\n\n    if (this.markAllQuestionsAsRequired) {\n      const currentPageData = this.pages[this.currentPageIndex];\n      let validationResponse = true;\n      if (!this.validationSkip) {\n        validationResponse =\n          this.formValidationService.validateRequiredQuestions(\n            currentPageData\n          ).isValid;\n      }\n      if (validationResponse) {\n        this.currentPageIndex = index;\n      } else {\n        this.checkSubmissionEligibility();\n        return;\n      }\n    } else {\n      this.checkSubmissionEligibility();\n      this.currentPageIndex = index;\n    }\n  }\n\n  loadMoreData(index: number): void {\n    if (!this.isLoading) {\n      this.isLoading = true;\n      let rowCountLimit = this.rowSetCount[index];\n      let i = 0;\n      this.pages[index].rows.forEach((row: any) => {\n        row.grid.forEach((gridItem: any) => {\n          i++;\n        });\n      });\n      let rowCount = i / 20;\n      rowCount = Math.ceil(rowCount);\n\n      if (this.visitedRows.has(index)) {\n        if (this.visitedRows.get(index) === rowCount) {\n          this.isLoading = false;\n          return;\n        }\n      }\n\n      if (rowCount + 1 > rowCountLimit && !this.navigateTo) {\n        this.checkSubmissionEligibility();\n        this.isLoading = false;\n        return;\n      }\n      this.visitedRows.set(index, rowCount);\n\n      if (this.edit) {\n        this.formService\n          .getSubmittedForm(\n            this.moduleName,\n            this.submissionId,\n            index + 1,\n            rowCount\n          )\n          .subscribe((response: any) => {\n            const newRows = response?.result?.pages[0]?.rows ?? [];\n            this.pages[index].rows = [\n              ...(this.pages[index]?.rows ?? []),\n              ...newRows,\n            ];\n            this.currentPageIndex = index;\n            this.currentPage = this.pages[index];\n            this.rowSetCount[index] = response.result.totalNumberRow;\n            this.checkSubmissionEligibility();\n            this.isLoading = false;\n          });\n      } else {\n        this.formService\n          .getQuestions(this.moduleName, index + 1, rowCount)\n          .subscribe((response: any) => {\n            const newRows = response?.result?.pages[0]?.rows ?? [];\n            this.pages[index].rows = [\n              ...(this.pages[index]?.rows ?? []),\n              ...newRows,\n            ];\n            this.currentPageIndex = index;\n            this.currentPage = this.pages[index];\n            this.rowSetCount[index] = response.result.totalNumberRow;\n            this.checkSubmissionEligibility();\n            this.isLoading = false;\n          });\n      }\n\n      this.checkSubmissionEligibility();\n    }\n  }\n\n  generateQuestionAnswers() {\n    this.maxPossibleScore = 1;\n    this.sumOfFindings = 0;\n    this.sumOfBadFindings = 0;\n    this.sumOfGoodFindings = 0;\n    this.maxPossibleBadScore = 0;\n    this.maxPossibleGoodScore = 0;\n    this.copySubforms = [];\n\n    // this.maxPossibleGoodScore = 0;\n    // this.maxPossibleBadScore = 0;\n    const extractQuestions = (\n      formElements: any[],\n      parentFormId: string | null = null,\n      isInSubForm: boolean = false,\n      subFormIndex: number = 0\n    ): { answers: Answer[]; forms: Form[] } => {\n      const questions: Answer[] = [];\n      const forms: Form[] = [];\n      formElements.forEach((element) => {\n        if (element.entityType === 'QUESTION' && element.show) {\n          let baseQuestion: any;\n          if (element.element.formElement.elementType === 'FILE_PICKER') {\n            baseQuestion = {\n              questionId: element.element.id,\n              answer: '',\n            };\n            if (Array.isArray(element.element.answer)) {\n              const questionId = isInSubForm\n                ? `${parentFormId}_${subFormIndex}_${element.element.id}`\n                : element.element.id;\n              this.files.push({\n                questionId: questionId,\n                file: element.element.answer,\n                show: element.show\n              });\n            }\n          } else {\n            baseQuestion = {\n              questionId: element.element.id,\n              answer: element.element.answer,\n              score: element.element.score,\n              maximumPossibleScore: element.element.maxPossibleScore,\n              currencySymbol: element.element?.currencySymbol,\n              amountInWords: element.element?.amountInWords,\n              show: element.show\n            };\n          }\n          if (this.edit) {\n            questions.push({\n              ...baseQuestion,\n              answerId: element.element.answerId || '',\n              deleteFiles: element.element.deleteFiles || [],\n            });\n          } else {\n            questions.push(baseQuestion);\n          }\n\n          if (\n            (element.element.formElement.elementType === 'DROP_DOWN' ||\n              element.element.formElement.elementType === 'RADIO_BUTTON' ||\n              element.element.formElement.elementType === 'CHECK_BOX') &&\n            element.element.formElement.scoring &&\n            element.element.formElement.scoring.enableScoring &&\n            !isInSubForm\n          ) {\n            this.maxPossibleScore *=\n              this.scoreCalcService.getMaxPossibleScoreForQuestion(\n                element.element\n              );\n            if (\n              element.element.score &&\n              element.element.score != null &&\n              element.element.score != undefined\n            ) {\n              this.sumOfFindings += element.element.score;\n            }\n          }\n\n          if (element.element.childLogics) {\n            for (let logic of element.element.childLogics) {\n              if (logic.showLogic) {\n                for (let row of logic.rows) {\n                  const result = extractQuestions(\n                    row.grid,\n                    parentFormId,\n                    isInSubForm,\n                    subFormIndex\n                  );\n                  questions.push(...result.answers);\n                  forms.push(...result.forms);\n                }\n              }\n            }\n          }\n        } else if (element.entityType === 'SUBFORM' && element.show) {\n          const subformId = element.element.id;\n          const submissionId = element.element.submissionId;\n          if (element.element.copySubformMeta) {\n            this.copySubforms.push(element.element.copySubformMeta);\n          }\n          if (element.element.property.subFormStructure === 'single') {\n            let allAnswers: Answer[] = [];\n\n            element.element.rows.forEach((row: any) => {\n              const extracted = extractQuestions(\n                row.grid,\n                subformId,\n                true,\n                forms.length\n              );\n              extracted.answers.forEach((answer) => {\n                allAnswers.push({ ...answer });\n              });\n            });\n            let copiedForms;\n            if (element.element.copiedForms) {\n              copiedForms = element.element.copiedForms;\n            }\n            const subform: Form = {\n              formId: subformId,\n              deleted: element.element.deleted,\n              deletedSubmissions: [],\n              submissions: [\n                {\n                  submissionId: submissionId,\n                  answers: allAnswers,\n                },\n              ],\n              copiedForms: copiedForms,\n            };\n\n            forms.push(subform);\n          } else if (element.element.property.subFormStructure === 'multiple') {\n            const subformAnswers: Answer[] = [];\n            let subformQuestions: any = { answers: [] };\n            element.element.rows.forEach((row: any) => {\n              subformQuestions = extractQuestions(\n                row.grid,\n                subformId,\n                true,\n                forms.length\n              );\n            });\n            const existingSubform = forms.find(\n              (form) => form.formId === subformId\n            );\n            if (\n              (element.element.property.subFormType == 'inline' ||\n                element.element.property.subFormType == 'card') &&\n              element.element.submissions\n            ) {\n              element.element.submissions = this.clearEmptySubmissions(\n                element.element.submissions\n              );\n            }\n            element.element?.submissions?.forEach(\n              (submission: any, index: number) => {\n                for (const s of submission.scores ?? []) {\n                  if (s.scoreType === 'GOOD_SCORE') {\n                    this.sumOfGoodFindings += s.score;\n                  }\n                  if (s.scoreType === 'BAD_SCORE') {\n                    this.sumOfBadFindings += s.score;\n                  }\n                }\n                delete submission.hasAllScoringAnsweredOnce;\n                submission.answers.forEach((answer: any) => {\n                  delete answer.htmlContent;\n                  if (Array.isArray(answer.files)) {\n                    const questionId = `${subformId}_${index}_${answer.questionId}`;\n                    this.files.push({\n                      questionId: questionId,\n                      file: answer.files,\n                    });\n                    delete answer.files;\n                  }\n                  delete answer.attachments;\n                });\n              }\n            );\n            let copiedForms;\n            if (element.element.copiedForms) {\n              copiedForms = element.element.copiedForms;\n            }\n\n            const subform: Form = {\n              formId: subformId,\n              deleted: element.element.deleted,\n              scores: element.element.scores,\n              deletedSubmissions: element.element.deletedSubmissions,\n              submissions: element.element.submissions,\n              copiedForms: copiedForms,\n            };\n            forms.push(subform);\n            this.maxPossibleScore +=\n              element.element?.maxPossibleScore *\n              element.element?.submissions?.length;\n            this.maxPossibleGoodScore +=\n              element.element?.maxPossibleScore?.good *\n              element.element?.submissions?.length || 0;\n            this.maxPossibleBadScore +=\n              element.element?.maxPossibleScore?.bad *\n              element.element?.submissions?.length || 0;\n          }\n        } else if (element.entityType === 'QUESTION_GROUP' && element.show) {\n          // Handle Question Group by iterating through rows\n          element.element.rows.forEach((row: any) => {\n            row.grid.forEach((gridItem: any) => {\n              if (gridItem.entityType === 'QUESTION' && gridItem.show) {\n                let baseQuestion: any;\n                if (\n                  gridItem.element?.formElement.elementType === 'FILE_PICKER'\n                ) {\n                  baseQuestion = {\n                    questionId: gridItem.element.id,\n                    answer: '',\n                  };\n                  if (Array.isArray(gridItem.element.answer)) {\n                    const questionId = isInSubForm\n                      ? `${parentFormId}_${subFormIndex}_${gridItem.element.id}`\n                      : gridItem.element.id;\n                    this.files.push({\n                      questionId: questionId,\n                      file: gridItem.element.answer,\n                    });\n                  }\n                } else {\n                  baseQuestion = {\n                    questionId: gridItem.element.id,\n                    answer: gridItem.element.answer,\n                    amountInWords: gridItem.element.amountInWords\n                  };\n                }\n                if (this.edit) {\n                  questions.push({\n                    ...baseQuestion,\n                    answerId: gridItem.element.answerId || '',\n                    deleteFiles: gridItem.element.deleteFiles || [],\n                  });\n                } else {\n                  questions.push(baseQuestion);\n                }\n\n                if (gridItem.element.childLogics) {\n                  for (let logic of gridItem.element.childLogics) {\n                    if (logic.showLogic) {\n                      for (let row of logic.rows) {\n                        const result = extractQuestions(\n                          row.grid,\n                          parentFormId,\n                          isInSubForm,\n                          subFormIndex\n                        );\n                        questions.push(...result.answers);\n                        forms.push(...result.forms);\n                      }\n                    }\n                  }\n                }\n              }\n            });\n          });\n        } else if (element.entityType === 'MULTIFIELD' && element.show) {\n          element.element.rows.forEach((row: any) => {\n            row.grid.forEach((gridItem: any) => {\n              if (gridItem.entityType === 'QUESTION' && gridItem.show) {\n                questions.push({\n                  questionId: gridItem.element.id,\n                  answer: gridItem.element.answer || '',\n                });\n              }\n            });\n          });\n        }\n      });\n      return { answers: questions, forms: forms };\n    };\n\n    const processPages = (\n      pages: any[]\n    ): { answers: Answer[]; forms: Form[] } => {\n      const questions: Answer[] = [];\n      const forms: Form[] = [];\n\n      pages.forEach((page) => {\n        page.rows.forEach((row: any) => {\n          const result = extractQuestions(row.grid);\n          questions.push(...result.answers);\n          forms.push(...result.forms);\n        });\n      });\n\n      return { answers: questions, forms: forms };\n    };\n    const result = processPages(this.pages);\n    const grids = this.whenClauseService.getActiveWhenClauseGrids();\n    const simplified = grids.map(grid => ({\n      elementId: grid?.element?.id ?? null,\n      entityType: grid?.entityType ?? null,\n      show: grid?.show ?? false\n    }));\n    this.questionAnswers = {\n      parentId: '',\n      answers: result.answers,\n      forms: result.forms,\n      copySubForms: this.copySubforms,\n      whenClauseElements: simplified\n    };\n  }\n\n  clearEmptySubmissions(submissions: any) {\n    const nonEmptySubmissions: Submission[] = [];\n    const emptySubmissionIds: string[] = [];\n\n    submissions.forEach((submission: any) => {\n      const hasValue = submission.answers.some(\n        (answer: any) =>\n          answer.answer !== '' &&\n          answer.answer !== null &&\n          answer.answer !== undefined\n      );\n      if (hasValue) {\n        nonEmptySubmissions.push(submission);\n      } else if (submission.submissionId) {\n        emptySubmissionIds.push(submission.submissionId);\n      }\n    });\n\n    submissions = nonEmptySubmissions;\n    return submissions;\n  }\n\n  validateAllElementLoaded(): { status: boolean; message: string } {\n    if (this.pages.length < this.pageDetails.length) {\n      return {\n        status: false,\n        message:\n          'Please ensure all pages are fully visible before submitting the form.',\n      };\n    }\n\n    const incompletePages: string[] = [];\n\n    this.pages.forEach((p: any, i: number) => {\n      if (p && Array.isArray(p.rows)) {\n        let j = 0;\n        p.rows.forEach((row: any) => {\n          row.grid.forEach((gridItem: any) => {\n            j++;\n          });\n        });\n        if (\n          !p ||\n          !Array.isArray(p.rows) ||\n          (Math.ceil(j / 20) != this.rowSetCount[i] && !this.navigateTo)\n        ) {\n          incompletePages.push(this.pageDetails[i].name);\n        }\n      } else {\n        incompletePages.push(this.pageDetails[i].name);\n      }\n    });\n\n    if (incompletePages.length > 0) {\n      return {\n        status: false,\n        message: `Some sections are still loading. Please scroll through the following pages to ensure all questions are loaded: ${incompletePages.join(\n          ', '\n        )}.`,\n      };\n    }\n\n    return {\n      status: true,\n      message: 'Great! All sections are complete. You can now submit the form.',\n    };\n  }\n  saveasDraftPopup(): void {\n    if (!this.skipValidation) {\n      return;\n    }\n    const dialogRef = this.dialog.open(SaveDraftModalComponent, {\n      width: '450px',\n      panelClass: 'custom-dialog-container',\n      autoFocus: false,\n      disableClose: true,\n      data: {\n        primaryColor: this.primaryColor,\n      },\n    });\n\n    dialogRef.afterClosed().subscribe((result) => {\n      if (result) {\n        this.validationSkip = true;\n        this.submitForm();\n      } else {\n        this.validationSkip = false;\n      }\n    });\n  }\n\n  saveAsDraft() {\n    this.validationSkip = true;\n    this.draft = true;\n    this.submitForm();\n  }\n\n  async submitForm() {\n    this.startSubmissionLoader();\n    if (this.webhook) {\n      this.webhookPayloadArray = this.webhook.map((w: any) => ({\n        id: w.id,\n        ...this.extractGroupedWebhookData([w]),\n      }));\n    }\n    if (!this.validateAllElementLoaded().status) {\n      this.toastr.warning('Please wait for all elements to load');\n      this.submit.emit({\n        status: 'failed',\n      });\n      return;\n    }\n    if (this.submissionInProgress || this.submissionInDraft) {\n      this.submit.emit({\n        status: 'failed',\n      });\n      return;\n    }\n    let recaptchaToken: string | undefined;\n    this.inValidQuestions.clear();\n    this.validationService.clearAll();\n    if (this.enableGoogleRecaptcha) {\n      try {\n        recaptchaToken = await this.getToken();\n\n        if (!recaptchaToken) {\n          this.toastr.error(\n            'Please complete the CAPTCHA verification before submitting the form.'\n          );\n          this.submissionInProgress = false;\n          this.submissionInDraft = false;\n          this.resetSubmissionLoader();\n          this.validationSkip = false;\n          this.draft = false;\n          this.submit.emit({\n            status: 'failed',\n          });\n          return;\n        }\n      } catch (error: any) {\n        console.error(\n          'Error while getting reCAPTCHA token:',\n          error.error?.message\n        );\n        this.toastr.error('Failed to verify reCAPTCHA.');\n        this.submissionInProgress = false;\n        this.submissionInDraft = false;\n        this.resetSubmissionLoader();\n        this.validationSkip = false;\n        this.draft = false;\n        this.submit.emit({\n          status: 'failed',\n        });\n        return;\n      }\n    }\n\n    if (this.draft || this.validationSkip) {\n      this.submissionInDraft = true;\n    } else {\n      this.submissionInProgress = true;\n    }\n\n    let validationResponse = true;\n    if (!this.validationSkip) {\n      validationResponse = this.validateForm(this.pages).isValid;\n    }\n\n    if (!validationResponse) {\n      this.saveasDraftPopup();\n      this.submissionInProgress = false;\n      this.submissionInDraft = false;\n      this.resetSubmissionLoader();\n      this.validationSkip = false;\n      this.draft = false;\n      this.submit.emit({\n        status: 'failed',\n      });\n      return;\n    }\n    const getCircularReplacer = () => {\n      const seen = new WeakSet();\n      return (_key: string, value: any) => {\n        if (typeof value === 'object' && value !== null) {\n          if (seen.has(value)) {\n            return undefined;\n          }\n          seen.add(value);\n        }\n        return value;\n      };\n    };\n\n    this.generateQuestionAnswers();\n    const formFinalScore = this.calculateFormFinalScore();\n    this.questionAnswers.scores = formFinalScore;\n    if (validationResponse) {\n      const formData = new FormData();\n      formData.append('skipValidation', this.validationSkip ? 'true' : 'false');\n      this.questionAnswers.parentId = this.parentSubmissionId;\n      formData.append(\n        'json',\n        JSON.stringify(this.questionAnswers, getCircularReplacer())\n      );\n      if (this.webhookPayloadArray) {\n        formData.append(\n          'webhookPayload',\n          JSON.stringify(this.webhookPayloadArray)\n        );\n      } else {\n        formData.append('webhookPayload', JSON.stringify([]));\n      }\n      if (this.files.length > 0) {\n        const seenQuestionIds = new Set<string>();\n\n        const uniqueFiles = this.files.filter((fileItem) => {\n          if (seenQuestionIds.has(fileItem.questionId)) {\n            return false;\n          }\n          seenQuestionIds.add(fileItem.questionId);\n          return true;\n        });\n\n        uniqueFiles.forEach((fileItem) => {\n          fileItem.file.forEach((file: any) => {\n            formData.append(fileItem.questionId, file._file);\n          });\n        });\n      }\n      const formServiceCall =\n        this.edit && this.submissionId\n          ? this.formService.updateForm(\n              this.moduleName,\n              this.submissionId,\n              formData,\n              recaptchaToken ?? ''\n            )\n          : this.formService.submitForm(\n              this.moduleName,\n              formData,\n              recaptchaToken ?? ''\n            );\n\n      formServiceCall.subscribe({\n        next: (event) => {\n          if (event.type === HttpEventType.UploadProgress) {\n            if (event.total) {\n              const percentDone = Math.round((event.loaded / event.total) * 100);\n              this.setProgress(Math.min(95, percentDone));\n            }\n          }\n      \n          if (event.type === HttpEventType.Response) {\n            this.completeSubmissionLoader();\n      \n            const response = event.body;\n      \n            // existing success logic ↓\n            this.toastr.success(\n              this.edit\n                ? 'Form updated successfully'\n                : 'Form submitted successfully'\n            );\n            let emittingValues;\n            if (this.emitters) {\n              emittingValues = this.mapEmittersToValues();\n            }\n  \n            if (this.validationSkip || this.draft) {\n              this.submit.emit({\n                status: 'draft',\n                submissionId: response.result,\n                score: formFinalScore,\n                ...(emittingValues || {}),\n              });\n            } else {\n              this.submit.emit({\n                status: 'success',\n                submissionId: response.result,\n                score: formFinalScore,\n                ...(emittingValues || {}),\n              });\n            }\n            this.submissionInProgress = false;\n            this.submissionInDraft = false;\n            this.draft = false;\n            this.validationSkip = false;\n          }\n        },\n        error: (error) => {\n          this.validationService.clearAll();\n          this.findQuestionPageIndex(\n            this.parseErrorsToMap(error.error.message)\n          );\n          this.currentPageIndex = this.pages.length - 1;\n          this.navigateToFirstError();\n          this.resetSubmissionLoader();\n          this.submissionInProgress = false;\n          this.draft = false;\n          this.validationSkip = false;\n          this.submissionInDraft = false;\n          this.saveasDraftPopup();\n          this.submit.emit({\n            status: 'failed',\n            message: error.error.message\n          });\n        },\n      });\n    } else {\n      // this.toastr.error(validationResponse.message);\n      this.submit.emit({\n        status: 'failed',\n      });\n      this.saveasDraftPopup();\n      this.submissionInProgress = false;\n      this.submissionInDraft = false;\n      this.resetSubmissionLoader();\n      this.validationSkip = false;\n      this.draft = false;\n    }\n  }\n\nsetProgress(value: number) {\n  this.submissionProgress = value;\n  this.updateStepText(value);\n}\n\n\nstartSubmissionLoader() {\n  this.showSubmissionLoader = true;\n  this.setProgress(0);\n\n  // Simulated progress until backend upload updates it\n  this.progressInterval = setInterval(() => {\n    if (this.submissionProgress < 85) {\n      this.setProgress(this.submissionProgress + 2);\n    }\n  }, 300);\n}\n\ncompleteSubmissionLoader() {\n  clearInterval(this.progressInterval);\n\n  this.setProgress(100);\n\n  setTimeout(() => {\n    this.showSubmissionLoader = false;\n    this.setProgress(0);\n  }, 500);\n}\n\nresetSubmissionLoader() {\n  clearInterval(this.progressInterval);\n\n  this.showSubmissionLoader = false;\n  clearInterval(this.dotInterval);\n  this.animatedDots = '';\n  this.setProgress(0);\n}\n\n\nstartTextLoader() {\n  let dotCount = 0;\n\n  this.dotInterval = setInterval(() => {\n    dotCount = (dotCount + 1) % 4;\n    this.animatedDots = '.'.repeat(dotCount);\n  }, 500);\n}\n\nupdateStepText(progress: number) {\n  if (progress < 25) {\n    this.currentStep = 'Validating form';\n  } else if (progress < 60) {\n    this.currentStep = 'Uploading data';\n  } else if (progress < 90) {\n    this.currentStep = 'Saving submission';\n  } else {\n    this.currentStep = 'Finalizing';\n  }\n}\n\n  calculateFormFinalScore(): SubmissionScore[] {\n    const goodScore = this.maxPossibleGoodScore\n      ? 100 - (this.sumOfGoodFindings / this.maxPossibleGoodScore) * 100\n      : 0;\n\n    const badScore = this.maxPossibleBadScore\n      ? 100 - (this.sumOfBadFindings / this.maxPossibleBadScore) * 100\n      : 0;\n\n    return [\n      { scoreType: 'GOOD_SCORE', score: Math.round(goodScore) },\n      { scoreType: 'BAD_SCORE', score: Math.round(badScore) },\n    ];\n  }\n\n  mapEmittersToValues(): { [key: string]: any } {\n    const answerMap = new Map(\n      this.questionAnswers.answers.map((qa) => [qa.questionId, qa.answer])\n    );\n\n    const result: { [key: string]: any } = {};\n\n    this.emitters.forEach((emitter) => {\n      if (emitter.valueSource === 'CUSTOM_INPUT') {\n        result[emitter.keyName] = emitter.inputValue;\n      } else if (\n        emitter.valueSource === 'QUESTION' &&\n        emitter.questionId &&\n        answerMap.has(emitter.questionId)\n      ) {\n        result[emitter.keyName] = answerMap.get(emitter.questionId);\n      }\n    });\n\n    return result;\n  }\n\n  parseErrorsToMap(errorString: string): Map<string, string> {\n    const errorMap = new Map<string, string>();\n    // Convert the incorrect format to a valid object structure\n    errorString\n      .replace(/[{}]/g, '') // Remove curly braces\n      .split(', ') // Split key-value pairs\n      .forEach((pair) => {\n        const [key, value] = pair.split('=');\n        if (key && value) {\n          errorMap.set(key.trim(), value.trim()); // Store in Map\n        }\n      });\n\n    return errorMap;\n  }\n  async navigateToFirstError() {\n    const firstError = this.validationService.getFirstInvalid();\n    if (!firstError) return;\n\n    const elementId = `question-${firstError.id}`;\n\n    this.retryCount = 0;\n\n    // Change page if needed\n    if (this.currentPageIndex !== firstError.pageIndex) {\n      this.currentPageIndex = firstError.pageIndex;\n      if (this.currentPageIndex + 1 < this.pageDetails.length) {\n        this.nextPage = this.pageDetails[this.currentPageIndex + 1];\n      }\n      if (this.currentPageIndex - 1 >= 0) {\n        this.previousPage = this.pageDetails[this.currentPageIndex - 1];\n      }\n\n      this.debounce(() => this.changeDetectorRef.detectChanges(), 100);\n      if (this.navigation === 'TAB')\n        this.child.triggerFunction(firstError.pageIndex);\n    }\n\n    await this.scrollToElementWithRetry(elementId);\n  }\n\n  private async scrollToElementWithRetry(elementId: string): Promise<void> {\n    this.retryCount++;\n    const element = document.getElementById(elementId);\n\n    if (element) {\n      requestAnimationFrame(() => this.scrollAndFocus(element));\n      return;\n    }\n\n    if (this.retryCount < this.maxRetries) {\n      await new Promise((resolve) => setTimeout(resolve, 100));\n      return this.scrollToElementWithRetry(elementId);\n    }\n\n    console.error(\n      `Element ${elementId} not found after ${this.maxRetries} attempts`\n    );\n    requestAnimationFrame(() => this.fallbackScroll());\n  }\n\n  private scrollAndFocus(element: HTMLElement) {\n    element.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center',\n      inline: 'nearest',\n    });\n\n    const focusable = element.querySelector(\n      'input, select, textarea, button, [tabindex]:not([tabindex=\"-1\"])'\n    ) as HTMLElement;\n    focusable?.focus();\n  }\n\n  private fallbackScroll() {\n    const pageElement = document.querySelector(\n      `.page-${this.currentPageIndex}`\n    );\n    pageElement?.scrollIntoView({ behavior: 'auto' });\n  }\n\n  private debounce(func: () => void, delay: number) {\n    clearTimeout(this.debounceTimer);\n    this.debounceTimer = setTimeout(func, delay);\n  }\n  //   extractId(message: string): string | null {\n  //     const match = message.match(/[0-9a-fA-F-]{36}/);\n  //     return match ? match[0] : null;\n  // }\n\n  //  removeId(message: string): string {\n  //   return message.replace(/[0-9a-fA-F-]{36}$/, \"\").trim();\n  // }\n\n  findQuestionPageIndex(questionErrors: Map<string, string>): void {\n    for (let pageIndex = 0; pageIndex < this.pages.length; pageIndex++) {\n      const page = this.pages[pageIndex];\n\n      for (const row of page.rows) {\n        for (const element of row.grid) {\n          this.checkAndStoreInvalidQuestions(\n            element,\n            questionErrors,\n            pageIndex\n          );\n        }\n      }\n    }\n  }\n\n  private checkAndStoreInvalidQuestions(\n    element: any,\n    questionErrors: Map<string, string>,\n    pageIndex: number\n  ): void {\n    if (element.element.id && questionErrors.has(element.element.id)) {\n      this.validationService.setInvalid(\n        element.element.id,\n        questionErrors.get(element.element.id)!,\n        pageIndex\n      );\n    }\n\n    // Handle subforms recursively\n    if (element.entityType === 'SUBFORM' && element.element.rows) {\n      for (const row of element.element.rows) {\n        for (const gridItem of row.grid) {\n          this.checkAndStoreInvalidQuestions(\n            gridItem,\n            questionErrors,\n            pageIndex\n          );\n        }\n      }\n    }\n    if (\n      (element.entityType === 'QUESTION_GROUP' ||\n        element.entityType === 'MULTIFIELD') &&\n      element.element.rows\n    ) {\n      for (const row of element.element.rows) {\n        for (const gridItem of row.grid) {\n          this.checkAndStoreInvalidQuestions(\n            gridItem,\n            questionErrors,\n            pageIndex\n          );\n        }\n      }\n    }\n\n    // Handle logic-based conditions recursively\n    if (element.entityType === 'QUESTION' && element.element.childLogics) {\n      for (const logic of element.element.childLogics) {\n        if (logic.showLogic) {\n          for (const row of logic.rows) {\n            for (const gridItem of row.grid) {\n              this.checkAndStoreInvalidQuestions(\n                gridItem,\n                questionErrors,\n                pageIndex\n              );\n            }\n          }\n        }\n      }\n    }\n  }\n\n  focusQuestionElement(container: HTMLElement) {\n    // Find first focusable element within the question\n    const focusable = container.querySelector(\n      'input, select, textarea, [tabindex]'\n    );\n    if (focusable) {\n      (focusable as HTMLElement).focus();\n    } else {\n      container.focus();\n    }\n  }\n  validateForm(jsonData: any): {\n    isValid: boolean;\n    message: string;\n    pageIndex: number | 0;\n  } {\n    const validateQuestions = (\n      formElements: any[]\n    ): { isValid: boolean; message: string; pageIndex: number | 0 } => {\n      for (let element of formElements) {\n        if (element.entityType === 'QUESTION') {\n          const required = element.element.required;\n          const answer = element.element.answer;\n          const validation = element.element.validation;\n          const show = element.show;\n          if (element.element.formElement.elementType === 'FILE_PICKER') {\n            const attachment = element.element.attachments;\n            if (required && show) {\n              if (\n                (!answer || answer?.length === 0) &&\n                (!attachment || attachment?.length == 0)\n              ) {\n                this.inValidQuestions.set(\n                  element.element.id,\n                  'Required file question has no files uploaded.'\n                );\n                return {\n                  isValid: false,\n                  message: `Form is invalid - Required file question ${element.element.questionNumber} has no files uploaded.`,\n                  pageIndex: 0,\n                };\n              }\n            }\n          } else {\n            if (required && show) {\n              if (\n                answer === null ||\n                answer === undefined ||\n                (typeof answer === 'string' && answer.trim() === '') ||\n                (typeof answer === 'object' && Object.keys(answer).length === 0)\n              ) {\n                this.inValidQuestions.set(\n                  element.element.id,\n                  'This is a required question'\n                );\n                return {\n                  isValid: false,\n                  message: `Form is invalid - Question ${element.element.questionNumber} is required but no answer provided.`,\n                  pageIndex: 0,\n                };\n              } else if (validation === false) {\n                this.inValidQuestions.set(\n                  element.element.id,\n                  element.element.validationMessage\n                );\n                return {\n                  isValid: false,\n                  message: `Form is invalid - Question ${element.element.questionNumber} is required but validation is false.`,\n                  pageIndex: 0,\n                };\n              }\n            } else if (!required && answer && Object.keys(answer).length > 0) {\n              if (validation === false) {\n                this.inValidQuestions.set(\n                  element.element.id,\n                  element.element.validationMessage\n                );\n                return {\n                  isValid: false,\n                  message: `Form is invalid - Question ${element.element.questionNumber} is not required but answer provided with validation false.`,\n                  pageIndex: 0,\n                };\n              }\n            }\n          }\n          if (element.element.childLogics) {\n            for (let logic of element.element.childLogics) {\n              if (logic.showLogic) {\n                const result = validateQuestions(logic.rows);\n                if (!result.isValid) return result;\n              }\n            }\n          }\n        } else if (element.entityType === 'SUBFORM' && !element.element.deleted) {\n          if(element.element.property?.subFormStructure == 'single'){\n            for(let row of element.element.rows){\n              const result = validateQuestions(row.grid);\n              if (!result.isValid) return result;\n            }\n          } else {\n            this.validateSubForm(element);\n          }\n        } else if (\n          (element.entityType === 'QUESTION_GROUP' ||\n            element.entityType === 'MULTIFIELD') &&\n          element.element.rows\n        ) {\n          for (const row of element.element.rows) {\n            const result = validateQuestions(row.grid);\n            if (!result.isValid && element.entityType != 'MULTIFIELD')\n              return result;\n          }\n        }\n      }\n      return { isValid: true, message: '', pageIndex: 0 };\n    };\n\n    for (let pageIndex = 0; pageIndex < jsonData.length; pageIndex++) {\n      const page = jsonData[pageIndex];\n      for (let row of page.rows) {\n        const result = validateQuestions(row.grid);\n        this.inValidQuestions.forEach((message: string, id: string) => {\n          this.validationService.setInvalid(id, message, pageIndex);\n        });\n        this.inValidQuestions = new Map<string, string>();\n        // if (!result.isValid) {\n        //   return {\n        //     isValid: false,\n        //     message: `Page ${pageIndex + 1}: ${result.message}`,\n        //     pageIndex: pageIndex,\n        //   };\n        // }\n      }\n    }\n    this.currentPageIndex = jsonData.length - 1;\n    if (this.validationService.getFirstInvalid()) {\n      this.navigateToFirstError();\n      return {\n        isValid: false,\n        message: `Page`,\n        pageIndex: 0,\n      };\n    }\n    return {\n      isValid: true,\n      message: 'Form is valid.',\n      pageIndex: 0,\n    };\n  }\n\n  validateSubForm(element: any) {\n    if (element.entityType !== 'SUBFORM') {\n      return;\n    }\n  \n    const submissions = element.element?.submissions || [];\n  \n    /* ------------------------------\n     * 1️⃣ Subform required but no submission\n     * ------------------------------ */\n    if (element.element?.required && submissions.length === 0) {\n      this.inValidQuestions.set(\n        element.element.id,\n        'At least one submission is required'\n      );\n      return; // nothing else to validate\n    }\n  \n    submissions.forEach((submission: any, submissionIndex: number) => {\n      const answers = submission.answers || [];\n  \n      /* ------------------------------\n       * 2️⃣ Submission exists but no answers\n       * ------------------------------ */\n      const hasAnyAnswer = answers.some(\n        (a: any) =>\n          a.answer !== null &&\n          a.answer !== undefined &&\n          a.answer !== '' &&\n          !(Array.isArray(a.answer) && a.answer.length === 0)\n      );\n  \n      if (element.element?.required && !hasAnyAnswer) {\n        const key = `${element.element.id}`;\n        this.inValidQuestions.set(\n          key,\n          'At least one answer is required in the subform'\n        );\n        return;\n      }\n  \n      /* ------------------------------\n       * 3️⃣ Existing question-level validations\n       * ------------------------------ */\n      answers.forEach((answerObj: any) => {\n        const question = this.findQuestionById(\n          element.element.rows,\n          answerObj.questionId\n        );\n  \n        const ans = answerObj.answer;\n  \n        // Required question check\n        if ((question?.required || answerObj.required) &&\n            (ans === '' || ans === null || ans === undefined || ans?.length === 0)) {\n          const key = `${submissionIndex}-${question.id}`;\n          this.inValidQuestions.set(key, 'This is a required question');\n        }\n  \n        // Email validation\n        if (question?.formElement?.elementType === 'EMAIL' && ans) {\n          const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n          if (!emailRegex.test(ans)) {\n            const key = `${submissionIndex}-${question.id}`;\n            this.inValidQuestions.set(\n              key,\n              'Please enter a valid email address'\n            );\n          }\n        }\n      });\n    });\n  }\n  \n\n  // 🔍 Helper: find question definition inside rows\n  private findQuestionById(rows: any[], questionId: string): any {\n    for (const row of rows) {\n      for (const gridElement of row.grid) {\n        if (\n          gridElement.entityType === 'QUESTION' &&\n          gridElement.element.id === questionId\n        ) {\n          return gridElement.element;\n        }\n      }\n    }\n    return null;\n  }\n\n  updateSubFormWithSubmissions(event: any) {\n    this.updateSubForm(this.pages, event);\n  }\n\n  updateSubForm = (pages: any[], updatedSubForm: any) => {\n    pages.forEach((page) => {\n      page.rows.forEach((row: any) => {\n        row.grid.forEach((element: any) => {\n          if (\n            element.entityType === 'SUBFORM' &&\n            element.element.id === updatedSubForm.id\n          ) {\n            // Update the existing subform with the new data\n            element.element = updatedSubForm;\n          } else if (\n            element.entityType === 'SUBFORM' &&\n            element.element.id !== updatedSubForm.formId\n          ) {\n            // Handle multiple subforms logic here if needed\n          } else if (\n            element.entityType === 'QUESTION' &&\n            element.element.childLogics\n          ) {\n            // Recursively update child logics\n            // element.element.childLogics.forEach((logic: any) => {\n            //   if (logic.showLogic) {\n            //     this.updateSubForm(logic.rows, updatedSubForm);\n            //   }\n            // });\n          }\n        });\n      });\n    });\n  };\n\n  extractGroupedWebhookData(webhooks: any[]): {\n    headers: Record<string, string>;\n    params: Record<string, string>;\n    pathVariables: Record<string, string>;\n    requestBodies: Record<string, string>;\n  } {\n    const result: {\n      headers: Record<string, string>;\n      params: Record<string, string>;\n      pathVariables: Record<string, string>;\n      requestBodies: Record<string, string>;\n    } = {\n      headers: {},\n      params: {},\n      pathVariables: {},\n      requestBodies: {},\n    };\n\n    for (const webhook of webhooks ?? []) {\n      for (const item of webhook?.headers ?? []) {\n        const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n        if (value !== null) {\n          result.headers[item.keyName] = value;\n        }\n      }\n\n      for (const item of webhook?.params ?? []) {\n        const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n        if (value !== null) {\n          result.params[item.keyName] = value;\n        }\n      }\n\n      for (const item of webhook?.pathVariables ?? []) {\n        const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n        if (value !== null) {\n          result.pathVariables[item.keyName] = value;\n        }\n      }\n\n      for (const item of webhook?.requestBodies ?? []) {\n        const value = this.getValueFromStorage(item.valueSource, item.inputValue);\n        if (value !== null) {\n          result.requestBodies[item.keyName] = value;\n        }\n      }\n    }\n\n    return result;\n  }\n\n  getValueFromStorage(\n    source: 'LOCAL_STORAGE' | 'SESSION_STORAGE',\n    key: string\n  ): string | null {\n    if (source === 'LOCAL_STORAGE') return localStorage.getItem(key);\n    if (source === 'SESSION_STORAGE') return sessionStorage.getItem(key);\n    return null;\n  }\n\n  cancelled(){\n    this.cancel.emit();\n  }\n}\n","<div class=\"outer-container\">\n\n<ng-container *ngIf=\"isLoadingPages\">\n    <ngx-skeleton-loader count=\"5\"></ngx-skeleton-loader>\n</ng-container>\n\n  <div class=\"head container\" *ngIf=\"!skipMargin\">\n    <lib-header [name]=\"name\" [skipMargin]=\"skipMargin\"></lib-header>\n  </div>\n\n\n\n  <div class=\"body\" [ngClass]=\"{ 'skip-margin': skipMargin,container: !skipMargin}\">\n\n    <lib-submission-container [parentQuestionAnswers]=\"parentQuestionAnswers\"\n    *ngIf=\"parentQuestionAnswers\"></lib-submission-container>\n\n    <lib-navigation-tabs\n      *ngIf=\"navigation == 'TAB'\"\n      [skipMargin]=\"skipMargin\"\n      [skipValidation]=\"skipValidation\"\n      [pages]=\"pages\"\n      [currentPageIndex]=\"currentPageIndex\"\n      (pageChanged)=\"setCurrentPage($event)\"\n      (submitEmit)=\"submitForm()\"\n      [pageDetails]=\"pageDetails\"\n      [eligibleForSubmission]=\"eligibleForSubmission\"\n      [edit]=\"edit\"\n      [acceptedLanguage] = \"acceptedLanguage\"\n      [isActionTriggered]=\"isActionTriggered\"\n      [primaryColor]=\"primaryColor\"\n      [secondaryColor]=\"secondaryColor\"\n      [markAllQuestionsAsRequired]=\"markAllQuestionsAsRequired\"\n      [submissionInProgress]=\"submissionInProgress\"\n      [submissionInDraft]=\"submissionInDraft\"\n      [showCancelButton]=\"showCancelButton\"\n      [submissionProgress]=\"submissionProgress\"\n      [animatedDots]=\"animatedDots\"\n      [currentStep]=\"currentStep\"\n      (saveAsDraftEmit)=\"saveAsDraft()\"\n      (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n      (rowSetIndex)=\"loadMoreData($event)\"\n      (cancel)=\"cancelled()\"\n    ></lib-navigation-tabs>\n    <lib-next-prev-navigation\n      *ngIf=\"navigation == 'NEXT_AND_PREVIOUS_BUTTON'\"\n      [skipMargin]=\"skipMargin\"\n      [currentPageIndex]=\"currentPageIndex\"\n      [pageDetails]=\"pageDetails\"\n      (rowSetIndex)=\"loadMoreData($event)\"\n      [pages]=\"pages\"\n      [previousPage]=\"previousPage\"\n      [isActionTriggered]=\"isActionTriggered\"\n      [currentPage]=\"currentPage\"\n      [primaryColor]=\"primaryColor\"\n      [secondaryColor]=\"secondaryColor\"\n      [nextPage]=\"nextPage\"\n      (navigateNext)=\"navigateToNextPage()\"\n      (navigatePrevious)=\"navigateToPreviousPage()\"\n      [acceptedLanguage] = \"acceptedLanguage\"\n      (submitEmit)=\"submitForm()\"\n      (saveAsDraftEmit)=\"saveAsDraft()\"\n      [edit]=\"edit\"\n      [eligibleForSubmission]=\"eligibleForSubmission\"\n      [submissionInProgress]=\"submissionInProgress\"\n      [submissionInDraft]=\"submissionInDraft\"\n      [showCancelButton]=\"showCancelButton\"\n      [submissionProgress]=\"submissionProgress\"\n      [animatedDots]=\"animatedDots\"\n      [currentStep]=\"currentStep\"\n      (subFormChange)=\"updateSubFormWithSubmissions($event)\"\n      (cancel)=\"cancelled()\"\n       [skipValidation]=\"skipValidation\"\n    ></lib-next-prev-navigation>\n  </div>\n</div>\n","import {\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { DataService } from '../services/data.service';\nimport { DOCUMENT } from '@angular/common';\nimport { environment } from '../environment/environment';\nimport { SubmitFormComponent } from '../form-submission/submit-form/submit-form.component';\n\n@Component({\n  selector: 'lib-formSubmission',\n  templateUrl: './form-submission.component.html',\n  styleUrls: ['./form-submission.component.scss'],\n})\nexport class FormSubmissionComponent implements OnInit {\n  @Input() formData: any = {};\n  @Input() edit: boolean = false;\n  @Input() skipValidation: boolean = false; // New input to control validation skipping\n  @Input() submissionId: string = '';\n  @Output() submitForm: EventEmitter<string> = new EventEmitter<string>();\n  @Output() apiCalled: EventEmitter<boolean> = new EventEmitter<boolean>();\n  @Output() cancel: EventEmitter<string> = new EventEmitter<string>();\n  @Input() triggerFormSave: string | null = null;\n  @ViewChild(SubmitFormComponent) submitFormComponent!: SubmitFormComponent;\n\n  header: any;\n  acceptedLanguage!: string;\n  isActionTriggered: boolean = false;\n\n  constructor(\n    private dataService: DataService,\n    @Inject(DOCUMENT) private document: Document\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['formData']) {\n      const newFormData = changes['formData'].currentValue;\n\n      this.dataService.setHeader(newFormData?.headers);\n\n      // 🔹 Add your duplicateSubmission logic here\n      if (newFormData?.duplicateSubmission) {\n        this.dataService.setSubformData({\n          moduleName: newFormData.moduleName,\n          duplicateSubmission: newFormData.duplicateSubmission,\n        });\n      }\n    }\n\n    if (changes['triggerFormSave'] && changes['triggerFormSave'].currentValue) {\n      const action = changes['triggerFormSave'].currentValue;\n\n      if (action === 'submit' || action === 'draft') {\n        this.isActionTriggered = true;\n      }\n      if (!this.submitFormComponent) {\n        return;\n      }\n\n      switch (action) {\n        case 'submit':\n          this.submitFormComponent.submitForm();\n          break;\n\n        case 'draft':\n          this.submitFormComponent.saveAsDraft();\n          break;\n\n        default:\n          console.warn(action, 'action not defined');\n      }\n    }\n  }\n\n  get showCancelButton(): boolean {\n    return this.cancel.observed ?? false;\n  }\n\n  ngOnInit() {\n    this.dataService.setApiUrl(this.formData.apiurl);\n    this.dataService.setHeader(this.formData.headers);\n\n    this.dataService.header$.subscribe((data) => {\n      this.header = data;\n      this.setHtmlDirection(this.header.acceptedLanguage);\n    });\n  }\n\n  setHtmlDirection(language: string) {\n    const htmlTag = this.document.getElementsByTagName(\n      'html'\n    )[0] as HTMLHtmlElement;\n\n    if (language === 'ara' || language === 'ar') {\n      environment.htmlDirection = 'rtl';\n    } else {\n      environment.htmlDirection = 'ltr';\n    }\n\n    htmlTag.dir = environment.htmlDirection;\n  }\n\n  submit(event: any) {\n    this.submitForm.emit(event);\n  }\n\n  getFormApiCalled(event: any) {\n    this.apiCalled.emit(true);\n  }\n\n  cancelled(){\n    this.cancel.emit();\n  }\n}\n","<lib-submit-form\n  [moduleName]=\"formData.moduleName\"\n  [submissionId]=\"submissionId\"\n  [edit]=\"edit\"\n  [acceptedLanguage] = \"formData.headers.acceptedLanguage\"\n  [skipMargin]=\"formData.skipMargin\"\n  [skipValidation]=\"skipValidation\"\n  [isActionTriggered]=\"isActionTriggered\"\n  [navigateTo]=\"formData.navigateTo\"\n  [country]=\"formData.country\"\n  [showCancelButton]=\"showCancelButton\"\n  (submit)=\"submit($event)\"\n (apiCalled)=\"getFormApiCalled($event)\"\n (cancel)=\"cancelled()\"\n></lib-submit-form>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CheckBoxFieldsComponent } from './check-box-fields/check-box-fields.component';\nimport { DateTimeFieldsComponent } from './date-time-fields/date-time-fields.component';\nimport { DropDownFieldsComponent } from './drop-down-fields/drop-down-fields.component';\nimport { FilePickerFieldsComponent } from './file-picker-fields/file-picker-fields.component';\nimport { LocationFieldsComponent } from './location-fields/location-fields.component';\nimport { RadioButtonFieldsComponent } from './radio-button-fields/radio-button-fields.component';\nimport { RichTextEditorFieldsComponent } from './rich-text-editor-fields/rich-text-editor-fields.component';\nimport { SelectionMatrixFieldsComponent } from './selection-matrix-fields/selection-matrix-fields.component';\nimport { SignatureFieldsComponent } from './signature-fields/signature-fields.component';\nimport { SliderFieldsComponent } from './slider-fields/slider-fields.component';\nimport { TermsAndConditionFieldsComponent } from './terms-and-condition-fields/terms-and-condition-fields.component';\nimport { TextAreaFieldsComponent } from './text-area-fields/text-area-fields.component';\nimport { TextFieldsComponent } from './text-fields/text-fields.component';\nimport { ToggleSwitchFieldsComponent } from './toggle-switch-fields/toggle-switch-fields.component';\nimport { UrlFieldsComponent } from './url-fields/url-fields.component';\nimport { FormsModule } from '@angular/forms';\nimport { MailFieldsComponent } from './mail-fields/mail-fields.component';\nimport { MobileFieldsComponent } from './mobile-fields/mobile-fields.component';\nimport { NumberFieldsComponent } from './number-fields/number-fields.component';\nimport { PasswordFieldsComponent } from './password-fields/password-fields.component';\nimport {MatSliderModule} from \"@angular/material/slider\";\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\n\n\nimport { GoogleMapsModule } from '@angular/google-maps';\nimport { DropdownModule } from '@piserve-tech/drop-down';\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\nimport { SectionFieldsComponent } from './section-fields/section-fields.component';\nimport { DocUploadModule } from '@piserve-tech/file-upload';\nimport { NgxMaterialTimepickerModule } from 'ngx-material-timepicker';\nimport { QuillModule } from 'ngx-quill';\nimport { AggregateFunctionComponent } from './aggregate-function/aggregate-function.component';\nimport { CurrencyFieldsComponent } from './currency-fields/currency-fields.component';\nimport { HiddenFieldComponent } from './hidden-field/hidden-field.component';\nimport { IframeFieldsComponent } from './iframe-fields/iframe-fields.component';\n\n\n\n\n\n\n@NgModule({\n  declarations: [\n    CheckBoxFieldsComponent,\n    DateTimeFieldsComponent,\n    DropDownFieldsComponent,\n    FilePickerFieldsComponent,\n    LocationFieldsComponent,\n    RadioButtonFieldsComponent,\n    RichTextEditorFieldsComponent,\n    SelectionMatrixFieldsComponent,\n    SignatureFieldsComponent,\n    SliderFieldsComponent,\n    TermsAndConditionFieldsComponent,\n    TextAreaFieldsComponent,\n    TextFieldsComponent,\n    ToggleSwitchFieldsComponent,\n    UrlFieldsComponent,\n    MailFieldsComponent,\n    MobileFieldsComponent,\n    NumberFieldsComponent,\n    PasswordFieldsComponent,\n    SectionFieldsComponent,\n    AggregateFunctionComponent,\n    CurrencyFieldsComponent,\n    HiddenFieldComponent,\n    IframeFieldsComponent\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    MatSliderModule,\n    BsDatepickerModule.forRoot(),\n    DropdownModule,\n    DocUploadModule,\n    GoogleMapsModule,\n    FilePreviewModule,\n    NgxMaterialTimepickerModule,\n    QuillModule\n  ],\n  exports: [\n    CheckBoxFieldsComponent,\n    DateTimeFieldsComponent,\n    DropDownFieldsComponent,\n    FilePickerFieldsComponent,\n    LocationFieldsComponent,\n    MailFieldsComponent,\n    MobileFieldsComponent,\n    NumberFieldsComponent,\n    PasswordFieldsComponent,\n    RadioButtonFieldsComponent,\n    RichTextEditorFieldsComponent,\n    SelectionMatrixFieldsComponent,\n    SignatureFieldsComponent,\n    SliderFieldsComponent,\n    TermsAndConditionFieldsComponent,\n    TextAreaFieldsComponent,\n    TextFieldsComponent,\n    ToggleSwitchFieldsComponent,\n    UrlFieldsComponent,\n    SectionFieldsComponent,\n    AggregateFunctionComponent,\n    CurrencyFieldsComponent,\n    HiddenFieldComponent,\n    IframeFieldsComponent\n  ]\n})\nexport class FormFieldsModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RecursiveLogicComponent } from '../question/recursive-logic/recursive-logic.component';\nimport { QuestionComponent } from '../question/question/question.component';\nimport { SubFormComponent } from '../question/sub-form/sub-form.component';\nimport { FormElementsComponent } from '../question/form-elements/form-elements.component';\n\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MultipleSubformComponent } from '../question/multiple-subform/multiple-subform.component';\nimport { SubmissionModalComponent } from '../sub-form/submission-modal/submission-modal.component';\nimport { QuestionGroupComponent } from '../question/question-group/question-group.component';\nimport { InlineMultipleSubformComponent } from '../question/inline-multiple-subform/inline-multiple-subform.component';\nimport { MultifieldsComponent } from '../question/multifields/multifields.component';\nimport { CardSubformComponent } from '../question/card-subform/card-subform.component';\nimport { QuillModule } from 'ngx-quill';\nimport { FormsModule } from '@angular/forms';\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\n@NgModule({\n  declarations: [\n    RecursiveLogicComponent,\n    QuestionComponent,\n    SubFormComponent,\n    FormElementsComponent,\n    MultipleSubformComponent, \n    SubmissionModalComponent, \n    QuestionGroupComponent,\n    InlineMultipleSubformComponent,\n    MultifieldsComponent,\n    CardSubformComponent\n  ],\n  imports: [\n    CommonModule,\n    FormFieldsModule,\n    MatDialogModule,\n    MatTableModule,\n    MatMenuModule,\n    MatIconModule,\n    QuillModule,\n    FormsModule,\n    NgbModule\n  ],\n  exports: [\n    RecursiveLogicComponent,\n    QuestionComponent,\n    SubFormComponent,\n    FormElementsComponent,\n    QuestionGroupComponent,\n    InlineMultipleSubformComponent,\n    MultifieldsComponent,\n    CardSubformComponent\n  ]\n})\nexport class SharedModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SubmitFormComponent } from './submit-form/submit-form.component';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { HeaderComponent } from './header/header.component';\nimport { NavigationTabsComponent } from './navigation-tabs/navigation-tabs.component';\nimport { NextPrevNavigationComponent } from './next-prev-navigation/next-prev-navigation.component';\nimport { ToastrModule } from 'ngx-toastr';\nimport { SubmissionContainerComponent } from './submission-container/submission-container.component';\nimport { SharedModule } from '../shared/shared.module';\nimport { InfiniteScrollModule } from 'ngx-infinite-scroll';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { SaveDraftModalComponent } from './save-as-draft/saveDraftModalComponent ';\n\n\n\n@NgModule({\n  declarations: [\n    SubmitFormComponent,\n    HeaderComponent,\n    NavigationTabsComponent,\n    NextPrevNavigationComponent,\n    SubmissionContainerComponent,\n    SaveDraftModalComponent,\n  ],\n  imports: [\n    CommonModule,\n    BsDatepickerModule.forRoot(),\n    ToastrModule,\n    SharedModule,\n    InfiniteScrollModule,\n    NgxSkeletonLoaderModule,\n    MatDialogModule,\n    MatIconModule\n],\n  exports: [SubmitFormComponent, NextPrevNavigationComponent]\n})\nexport class FormSubmitModule { }\n","import { NgModule } from '@angular/core';\nimport { FormSubmissionComponent } from './form-submission.component';\n// import { DropdownModule } from '@piserve-tech/drop-down';\nimport { FilePreviewModule } from '@piserve-tech/file-preview';\nimport { FormsModule } from '@angular/forms';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { FormFieldsModule } from '../form-fields/form-fields.module';\nimport { FormSubmitModule } from '../form-submission/form-submission.module';\nimport { DropdownModule } from '@piserve-tech/drop-down';\nimport { ToastrModule } from 'ngx-toastr';\nimport { DocUploadModule } from '@piserve-tech/file-upload';\nimport { SharedModule } from '../shared/shared.module';\n\n@NgModule({\n  declarations: [FormSubmissionComponent],\n  imports: [\n    DropdownModule,\n    FilePreviewModule,\n    DocUploadModule,\n    FormsModule,\n    MatTabsModule,\n    FormFieldsModule,\n    FormSubmitModule,\n    ToastrModule.forRoot({\n      positionClass: 'toast-bottom-left',\n    }),\n    SharedModule\n  ],\n  exports: [FormSubmissionComponent],\n})\nexport class FormSubmissionModule {}\n","/*\n * Public API Surface of form-submission\n */\n\nexport * from './lib/form-submission.service';\nexport * from './lib/form-submission.component';\nexport * from './lib/form-submission.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ValidationService","i2.DataService","i1.DataService","i1.FormService","i2.ValidationService","i3.ElementTrackerService","i4.ScoreCalculationService","i5.WhenClauseService","i6.HiddenFieldService","i7","i1","i3.ValidationService","i4.ElementTrackerService","i5.HiddenFieldService","i6","i8","i2.ElementTrackerService","i3.DataService","i4.WhenClauseService","i5","i2","i3.HiddenFieldService","i4","i1.CountryService","i4.HiddenFieldService","i3.AggregationFunctionService","i1.HiddenFieldService","i3","i3.WhenClauseService","i1.ElementTrackerService","i2.CheckBoxFieldsComponent","i3.DateTimeFieldsComponent","i4.DropDownFieldsComponent","i5.FilePickerFieldsComponent","i6.LocationFieldsComponent","i7.MailFieldsComponent","i8.MobileFieldsComponent","i9.NumberFieldsComponent","i10.PasswordFieldsComponent","i11.RadioButtonFieldsComponent","i12.RichTextEditorFieldsComponent","i13.SelectionMatrixFieldsComponent","i14.SignatureFieldsComponent","i15.SliderFieldsComponent","i16.TermsAndConditionFieldsComponent","i17.TextAreaFieldsComponent","i18.TextFieldsComponent","i19.ToggleSwitchFieldsComponent","i20.UrlFieldsComponent","i21.AggregateFunctionComponent","i22.CurrencyFieldsComponent","i23.HiddenFieldComponent","i24.IframeFieldsComponent","uuidv4","i4.CheckBoxFieldsComponent","i5.DateTimeFieldsComponent","i6.DropDownFieldsComponent","i7.FilePickerFieldsComponent","i8.LocationFieldsComponent","i9.MailFieldsComponent","i10.MobileFieldsComponent","i11.NumberFieldsComponent","i12.PasswordFieldsComponent","i13.RadioButtonFieldsComponent","i14.RichTextEditorFieldsComponent","i15.SelectionMatrixFieldsComponent","i16.SignatureFieldsComponent","i17.SliderFieldsComponent","i18.TermsAndConditionFieldsComponent","i19.TextAreaFieldsComponent","i20.TextFieldsComponent","i21.ToggleSwitchFieldsComponent","i22.UrlFieldsComponent","i23.SectionFieldsComponent","i24.AggregateFunctionComponent","i25.CurrencyFieldsComponent","i26.HiddenFieldComponent","i27.IframeFieldsComponent","i3.ScoreCalculationService","i1.ScoreCalculationService","i6.CheckBoxFieldsComponent","i7.DateTimeFieldsComponent","i8.DropDownFieldsComponent","i9.FilePickerFieldsComponent","i10.LocationFieldsComponent","i11.MailFieldsComponent","i12.MobileFieldsComponent","i13.NumberFieldsComponent","i14.PasswordFieldsComponent","i15.RadioButtonFieldsComponent","i16.RichTextEditorFieldsComponent","i17.SelectionMatrixFieldsComponent","i18.SignatureFieldsComponent","i19.SliderFieldsComponent","i20.TermsAndConditionFieldsComponent","i21.TextAreaFieldsComponent","i22.TextFieldsComponent","i23.ToggleSwitchFieldsComponent","i24.UrlFieldsComponent","i25.AggregateFunctionComponent","i26.CurrencyFieldsComponent","i27.HiddenFieldComponent","i28","i2.WhenClauseService","i18.SliderFieldsComponent","i19.TermsAndConditionFieldsComponent","i20.TextAreaFieldsComponent","i21.TextFieldsComponent","i22.ToggleSwitchFieldsComponent","i23.UrlFieldsComponent","i24.SectionFieldsComponent","i28.IframeFieldsComponent","i1.SubformCopyService","i4.FormService","i6.ValidationService","i7.ScoreCalculationService","i9.CheckBoxFieldsComponent","i10.DateTimeFieldsComponent","i11.DropDownFieldsComponent","i12.FilePickerFieldsComponent","i13.LocationFieldsComponent","i14.MailFieldsComponent","i15.MobileFieldsComponent","i16.NumberFieldsComponent","i17.PasswordFieldsComponent","i18.RadioButtonFieldsComponent","i19.RichTextEditorFieldsComponent","i20.SelectionMatrixFieldsComponent","i21.SignatureFieldsComponent","i22.SliderFieldsComponent","i23.TermsAndConditionFieldsComponent","i24.TextAreaFieldsComponent","i25.TextFieldsComponent","i26.ToggleSwitchFieldsComponent","i27.UrlFieldsComponent","i28.SectionFieldsComponent","i29.AggregateFunctionComponent","i30.CurrencyFieldsComponent","i31.HiddenFieldComponent","i32.IframeFieldsComponent","i33","i34","i35.MultipleSubformComponent","i36.InlineMultipleSubformComponent","i37.CardSubformComponent","i1.WhenClauseService","i3.CheckBoxFieldsComponent","i4.DateTimeFieldsComponent","i5.DropDownFieldsComponent","i6.FilePickerFieldsComponent","i7.LocationFieldsComponent","i8.MailFieldsComponent","i9.MobileFieldsComponent","i10.NumberFieldsComponent","i11.PasswordFieldsComponent","i12.RadioButtonFieldsComponent","i13.RichTextEditorFieldsComponent","i14.SelectionMatrixFieldsComponent","i15.SignatureFieldsComponent","i16.SliderFieldsComponent","i17.TermsAndConditionFieldsComponent","i18.TextAreaFieldsComponent","i19.TextFieldsComponent","i20.ToggleSwitchFieldsComponent","i21.UrlFieldsComponent","i22.AggregateFunctionComponent","i23.CurrencyFieldsComponent","i24.HiddenFieldComponent","i25.IframeFieldsComponent","i21.CurrencyFieldsComponent","i22.HiddenFieldComponent","i3.SectionFieldsComponent","i4.QuestionComponent","i5.SubFormComponent","i6.QuestionGroupComponent","i7.MultifieldsComponent","i2.RecursiveLogicComponent","i1.FormValidationService","i3.FormElementsComponent","i2.FormElementsComponent","mapper.mapPublicFormToModel","mapper.mapPageToModel","i4.DataService","i5.RecaptchaService","i7.ElementTrackerService","i8.FormValidationService","i9.AggregationFunctionService","i10.ScoreCalculationService","i11","i12.WhenClauseService","i13.HiddenFieldService","i14","i16.HeaderComponent","i17.NavigationTabsComponent","i18.NextPrevNavigationComponent","i19.SubmissionContainerComponent","i2.SubmitFormComponent"],"mappings":"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"}